<%
' ======================================================================================
' BASE OBJECT
' ======================================================================================
' Programmer: R. Smit
' Date Modified: 2011/08/22
' Version 1.00
' Inherits: NONE
' Skin Files: NONE
' Comment: This object contains all common functions used for file processing
' ======================================================================================
Class oBase
	Private oConn
	'Public sView
	
	'Function SetView(s_View)
'		sView = s_View
'	End Function
	
	Function Connect(sConn)
		Set oConn = sConn
	End Function
	
	Function LoadSidebar
		sReturn = ""
		Set oFS = Server.CreateObject("Scripting.FileSystemObject")
		sModules = C_DOC_ROOT & "/code/modules/"
		Set oModules = oFS.GetFolder(sModules)
		For Each oModule in oModules.SubFolders
			If InStr(oModule.Name,"installed.") > 0 Then
				sModuleName = Replace(oModule.Name,"installed.","")
				If oFS.FileExists(sModules & oModule.Name & "\skin\skin.sidebar.asp") Then
					sReturn = sReturn & LoadView(sModuleName,"sidebar",0)
				End If
			End If
		Next
		Set oFS = Nothing
		Response.Write(sReturn)
	End Function
	
	Function LoadView(sModule,sView,bRepeat)
		sFile = C_DOC_ROOT & "/code/modules/installed."&sModule&"/skin/skin."&sView&".asp"
		If CheckFileExists(sFile) Then
			LoadView = include(sFile,bRepeat)
		Else
			LoadView = "Page view cannot be found."
		End If
	End Function
	Function LoadPage(sModule,sView,bRepeat)
		sFile = C_DOC_ROOT & "/code/modules/installed."&sModule&"/skin/skin."&sView&".asp"
		If CheckFileExists(sFile) Then
			LoadPage = Split(include(sFile,bRepeat),"|||")
		Else
			LoadPage = "Page view cannot be found."
		End If
	End Function
	Function LoadSkinView(sView,bRepeat)
		sFile = C_DOC_ROOT & "/skin/skin."&sView&".asp"
		If CheckFileExists(sFile) Then
			LoadSkinView = include(sFile,bRepeat)
		Else
			LoadSkinView = "Page cannot be found."
		End If
	End Function
	
	Function LoadPageView(sView,bRepeat)
		sFile = C_DOC_ROOT & "/skin/page."&sView&".asp"
		If CheckFileExists(sFile) Then
			LoadPageView = include(sFile,bRepeat)
		Else
			LoadPageView = "Page cannot be found."
		End If
	End Function
	
	Function include(paramfileName,bRepeat) 
		Dim FSO 'As fileSystemObject 
		Dim Incfile 'As TextStream 
		Dim sReturn
		Set FSO = Server.CreateObject("Scripting.fileSystemObject") 
		If FSO.fileExists(paramfileName) Then 
		Set Incfile = FSO.OpenTextfile(paramfileName, 1) 
		sReturn = Incfile.ReadAll
		Incfile.Close 
		Set Incfile = Nothing 
		End If 
		Set FSO = Nothing 
		
		sReturn = CommonReplace(sReturn)
		
		iSubStart = InStr(sReturn,"[REPEAT2]")
		iSubEnd = InStr(sReturn,"[/REPEAT2]")
		
		If bRepeat = 1 Then
			iStart = InStr(sReturn,"[REPEAT]")
			iEnd = InStr(sReturn,"[/REPEAT]")
			iStartPlus = iStart + 8
			iEndPlus = (iEnd-iStart)-8 
			'echo sReturn
			sRepeat = Mid(sReturn,iStartPlus,iEndPlus)	
			
			sHead = Left(sReturn,iStart-1)
			iEndOfDoc = (Len(sReturn)+1)
			sFooter = substr(sReturn,iEnd + 9, iEndOfDoc)
			
			include = sHead & "|||" & sRepeat & "|||" & sFooter
			'Response.Write("#" & sRepeat & "#")
		ElseIf bRepeat = 2 Then
			If iSubStart > -1 Then
				iStart = InStr(sReturn,"[REPEAT]")
				iEnd = InStr(sReturn,"[/REPEAT]")
				
				iEndOfDoc = (Len(sReturn)+1)
				sFooter = substr(sReturn,iEnd + 9,iEndOfDoc)
				
				If iStart > 0 Then
					sHead = Left(sReturn,iStart-1)
				Else
					sHead = ""
				End If
				
				sRepeat = substr(sReturn,iStart+9,iEnd)
				sSubRepeat = substr(sReturn,iSubStart+9,iSubEnd)
				sParentTop = substr(sReturn,iStart+9,iSubStart)
				sParentBottom = substr(sReturn,iSubEnd+10,iEnd)
				'Response.Write("#" & sSubRepeat & "#")
				
				'Response.Write("#" & sHead & "|||" & sRepeat & "|||" & sSubRepeat & "|||" & sFooter & "|||" & "#")
				include = sHead & "|||" & sParentTop & "|||" & sParentBottom & "|||" & sSubRepeat & "|||" & sFooter 
			Else
				iStart = InStr(sReturn,"[REPEAT]")
				iEnd = InStr(sReturn,"[/REPEAT]")
				iStartPlus = iStart + 8
				iEndPlus = (iEnd-iStart)-8 
				sRepeat = Mid(sReturn,iStartPlus,iEndPlus)
				sHead = Left(sReturn,iStart-1)
				iEndOfDoc = (Len(sReturn)+1)
				sFooter = substr(sReturn,iEnd + 9, iEndOfDoc)
				
				include = sHead & "|||" & sRepeat & "|||" & sFooter
			End If
		Else
			include = sReturn
		End If
		
	End Function
	
	Function CommonReplace(sReturn)
		sReturn = Replace(sReturn,"[SKIN]",C_SKIN)
		sReturn = Replace(sReturn,"[SITE_TITLE]",C_SITE_TITLE)
		'Convert Page HREF shortcodes
		sReturn = Replace(sReturn,"[PAGE_HREF]",C_SITE_ROOT & "/?controller=pages&view=load&id")
		sReturn = Replace(sReturn,"[ENQUIRIES]",ProcessEnquiries)
		sReturn = Replace(sReturn,"[ENQUIRIES_FORM_ACTION]",C_SITE_ROOT & "/?controller=pages&view=SubmitEnquiries&id=")
		If Instr(sReturn,"?controller") > 0 Then
			If C_REWRITE = 1 Then
				sReturn = Replace(sReturn,"?controller=",C_SITE_ROOT & "/")
				sReturn = Replace(sReturn,"&view=","/")
				sReturn = Replace(sReturn,"&id=","/")
			End If
		End If
		sReturn = Replace(sReturn,"~/",C_SITE_ROOT & "/")
		CommonReplace = sReturn
	End Function
	
	
	
	Function CheckFileExists(sFile)
		Dim oFS
		Set oFS = Server.CreateObject("Scripting.FileSystemObject")
		If oFS.FileExists(sFile) Then
			CheckFileExists = true
		Else
			CheckFileExists = false
		End If
	End Function
	
	Function ProcessEnquiries
		dim info()
		arrItems = Split(session("items"),"&")
		
		cnt = Ubound(arrItems)
		redim info(cnt,2)
		For i = 0 to cnt
			sql = "SELECT heading,code FROM products WHERE id=" & arrItems(i)
			Set details = Server.CreateObject("Adodb.RecordSet")
			details.Open sql, oConn,3,3,1
			If Not details.EOF Then
			info(i,0) = details("heading")
			info(i,1) = details("code")
			End If
			details.close
			Set details = Nothing
		Next
		
		for i = 0 to cnt 
		  enquiries = enquiries & "* " & info(i,0) 
		  if info(i,1) <> "" then
			enquiries = enquiries &"  ("& info(i,1)&")"
		  end if
		  enquiries = enquiries & vbcrlf &vbcrlf
		next
		ProcessEnquiries = enquiries
	End Function
	
	Function stripHTML(strHTML)
		'Strips the HTML tags from strHTML
		
		Dim objRegExp, strOutput
		Set objRegExp = New Regexp
		
		objRegExp.IgnoreCase = True
		objRegExp.Global = True
		objRegExp.Pattern = "<(.|\n)+?>"
		
		'Replace all HTML tag matches with the empty string
		strOutput = objRegExp.Replace(strHTML, "")
		
		'Replace all < and > with &lt; and &gt;
		strOutput = Replace(strOutput, "<", "&lt;")
		strOutput = Replace(strOutput, ">", "&gt;")
		
		stripHTML = strOutput    'Return the value of strOutput
		
		Set objRegExp = Nothing
	End Function
	
	Function InsertValue(sRepeat,sField,sValue)
		'If InStr(sRepeat,"["&sField&"]") > 0 Then
			'Response.Write(sField & " - " & "InSTr<br />")
			'This functions controls shortcode logic statements in the skin pages.
			
			'========START IFNULL LOGIN=========
			sReturn = ""
			sStartTag = "[IFNULL:" & sField & "]"
			sEndTag = "[/IFNULL:" & sField & "]"
			sTotalLen = Len(sRepeat)
			iStartLen = Len(sStartTag)
			iEndLen = Len(sEndTag)
			iIfStart = InStr(sRepeat,sStartTag)
			iIfEnd = InStr(sRepeat,sEndTag)
			iEndFooter = sTotalLen - iIfEnd
			bValid = false
		
		'Response.Write("#" & sField & " - " & sValue & "#<br />")
		
			If IsNumeric(sValue) Then
				If sValue = 0 Then
					bValid = false
					'Response.Write("<p>Number - "&sField&"!</p>")
				Else
					bValid = true
				End If
			Else
			
				If Len(sValue) <> 0 Then
					bValid = true
				End If
			End If
			
			'If IsNumeric(sValue) Then
	'			sValue = cint(sValue)
	'			If sValue > 0 Then
	'				bValid = true
	'			End If
	'		Else
	'			If Len(sValue) > 0 Then
	'				bValid = true
	'			End If
	'		End If
			
			If iIfStart > 0 Then
				iIfStart = iIfStart + iStartLen - 1
				iIfEnd = iIfEnd + iEndLen - 1
				If bValid = false Then
					
					
					sHeader = Left(sRepeat,iIfStart - iStartLen)
					'iTemp = iIfEnd + Len(sEndTag) - 1
					
					sFooter = Mid(sRepeat,iIfEnd+1,Len(sRepeat) - iIfEnd)
					If IsNull(sValue) Then
						sValue = 0
					End If
					sRepeat = Replace(sRepeat,"[" & sField & "]",sValue)
					sRepeat = Replace(sRepeat,sStartTag,"")
					sRepeat = Replace(sRepeat,sEndTag,"")
					
					'sRepeat = sHeader & sFooter
					'Response.Write(sValue)
					
					'Response.Write(sField & "<br />")
					'Response.Write(sHeader)
					sRepeat = sHeader & sFooter
					'sRepeat = sFooter
				Elseif bValid = true Then
					'sHeader = Left(sRepeat,iIfStart - iIfStart)
'					sFooter = Mid(sRepeat,iIfEnd,iEndFooter)
'					sBetween = substr(sRepeat,iIfStart+1,iIfEnd)
'					'Response.Write("#" & sBetween & "#<br />")
'					sRepeat = sHeader & sBetween & sFooter
'					sRepeat = Replace(sRepeat,"[" & sField & "]",sValue)
'					sRepeat = Replace(sRepeat,sStartTag,"")
'					sRepeat = Replace(sRepeat,sEndTag,"")

					'sHeader = Left(sRepeat,iIfStart - iStartLen)
					'iTemp = iIfEnd + Len(sEndTag) - 1
					
					'sFooter = Mid(sRepeat,iIfEnd+1,Len(sRepeat) - iIfEnd)
					If IsNull(sValue) Then
						sValue = 0
					End If
					sRepeat = Replace(sRepeat,"[" & sField & "]",sValue)
					sRepeat = Replace(sRepeat,sStartTag,"")
					sRepeat = Replace(sRepeat,sEndTag,"")
					
					'sRepeat = sHeader & sFooter
				End If
			Else
				If C_DEV = True And Request.QueryString("showq") = 1 Then
					Response.Write("<p>"&sField&" - " & sValue &"</p>")
				End If
				If IsNull(sValue) Then
					sValue = ""
				End If
				sRepeat = Replace(sRepeat,"[" & sField & "]",sValue)
				
				'Response.Write(sField & " - " & sValue & "<br />")
				'sRepeat = Replace(sRepeat,"[" & sField & "]",sValue)
			End If
			
			'========END IFNULL LOGIN=========
			
			
		'Else
			'sReturn = sRepeat
		'End If
		InsertValue = sRepeat
	End Function
	
	Function LoadXML(sController,sView)
		sReturn = ""
		Dim oXML : Set oXML = Server.CreateObject("Microsoft.XMLDOM")
		If oXML.Load(C_DOC_ROOT & "/code/modules/installed." & sController & "/skin/skin."&sView&".xml") Then
			Dim oElement : Set oElement = oXML.selectSingleNode("//element")
			For Each x In oElement.childNodes
				ASP(x.childnodes(0).childNodes(0).text)
			Next
			Set oElement = Nothing
		Else
			sReturn = "<error>The skin file failed to load.</error>"
		End If
		Set oXML = Nothing
		LoadXML = sReturn
	End Function
	
	Function GetPageControls(strQ, intPageSize, intTotal)
		sReturn = ""
		intCurrentPage = 1
		If Request.QueryString("pg") <> "" Then
			intCurrentPage = CInt(Trim(Request.QueryString("pg")))
		End If
		strQS = ""
		For Each Item in Request.QueryString
			If Trim(Item) = Trim("pg") Then
			Else
				strQS = strQS & "&" & Item & "=" & Request.QueryString(Item)
			End If
		Next
		If strQS <> "" Then
			strQS = "?" & Right(strQS,Len(strQS)-1)
		Else
			
		End If
		sFirstChar = Trim(Left(strQS,1))
		'Response.Write("#"&sFirstChar&"#")
		If sFirstChar = "" Then
			strQS = "?"
		ElseIf sFirstChar = "?" Then
			strQS = strQS & "&"
		Else
			strQS = "&" & strQS
		End If
		
		intTotalPages = Ceil(intTotal / intPageSize)
		sQ = oDB.ExecuteQuery(oConn,strQ)
		If IsArray(sQ) Then
			intStartPage = intCurrentPage * intPageSize - intPagesize + 1
			intEndPage = intCurrentPage * intPageSize
			If intEndPage > intTotal Then
				intEndPage = intTotal
			End If
			sReturn = sReturn & "<div class=""pagination"">"
			sReturn = sReturn & "<small>Showing records <strong>"&intStartPage&" - " & intEndPage & "</strong> of <strong>"&intTotal&"</strong></small><p>&nbsp;</p>"
			sReturn = sReturn & "<ul>"
			
			If intCurrentPage > 1 Then
				sReturn = sReturn & "<li style=""width: auto; padding: 0 5px 0 5px""><a href="""&strQS&"pg="&intCurrentPage - 1&""">Previous Page</a></li>"
			End If
			For i = 1 to intTotalPages
				If i = intCurrentPage Then
					'sReturn = sReturn & "<li class=""current"">"&i&"</li>"
				Else
					'sReturn = sReturn & "<li><a href="""&strQS&"pg="&i&""">"&i&"</a></li>"
				End If
			Next
			If intCurrentPage < intTotalPages Then
			sReturn = sReturn & "<li style=""width: auto; padding: 0 5px 0 5px""><a href="""&strQS&"pg="&intCurrentPage + 1&""">Next Page</a></li>"
			End If
			sReturn = sReturn & "</ul><div style=""clear: both""></div></div>"
		End If
		GetPageControls = sReturn
	End Function
End Class
%>