var xmlBodies = new Array()
var xmlHeaders = new Array()
function goSearch() {
	var bPhrase = document.getElementById("searchPhrase").checked
	var sValue = document.getElementById("searchText").value
	while (sValue.charAt(0) == ' ')
		sValue = sValue.substring(1)
	while (sValue.charAt(sValue.length - 1) == ' ')
		sValue = sValue.substring ( 0 , sValue.length - 1 )
	if (sValue.length == 0 ||  /^\s*$/.test ( sValue ) || sValue == "Vul zoektermen in.") {
		alert("Vul zoektermen in.")
		document.getElementById("searchText").focus()
  	} else {
		var rgWords
		if (!bPhrase)
			rgWords = sValue.split(" ")
		else
			rgWords = [sValue]
		var bTooShort = false
		for (var iWord = 0; iWord < rgWords.length; ++iWord) {
			sValue = rgWords[iWord]
		  	if (sValue.length < 2)
				bTooShort = true
  		}
		if (!bTooShort) {
			setCookie('searchText', sValue)
			setCookie('isPhrase', bPhrase)
			var popup = window.open(dynamic_parms + '&show=search', 'Searching','left='+(screen.width/2-200)+',top='+(screen.height/2-50)+',width=400,height=100,resizable=1,toolbar=0,titlebar=0,status=1,menubar=0,directories=0,scrollbars=1')
			popup.focus()
		} else {
			var sError = "Zoekterm moet meer dan 2 karakters bevatten"
			if (rgWords.length > 1 && ! bPhrase)
				sError += " of zoek als zin"
			alert(sError)
			document.getElementById("searchText").focus()
		}
	}
}
function doSearch() {
	var rgWords
	sValue = getCookie('searchText')
	var bPhrase = (getCookie('isPhrase') == "true")
	if (!bPhrase)
		rgWords = sValue.split(" ")
	else
		rgWords = [sValue]
	getAllXML(filenames)
	buildSearchTree()
	searchArticles(rgWords, bPhrase)
}
function getAllXML() {
	if (!xmls.length) {
		for (var iXML = 0; iXML < filenames.length; ++iXML) {
			window.location.reload()
			var loader = document
	
			loader.write('<html><head><link rel="stylesheet" href="style/page.css" type="text/css" /><title>Zoeken...</title></head><body onblur="self.focus();"><center><p>Database inladen<br/><font size=\"+1\" color=\"red\">' + Math.floor ( Math.abs ( ( ( iXML + 1 ) / filenames.length ) * 100 ) ) + '%</font></p></center></body></html>')
			loader.close()

			fname = filenames[iXML]
			var filePath = dynamic_url + "xml/" + fname + ".xml"
			if (document.implementation && document.implementation.createDocument) {
				xmls[iXML] = document.implementation.createDocument("", "", null)
				xmls[iXML].async = false
				xmls[iXML].load(filePath)
			} else if (window.ActiveXObject) {
				xmls[iXML] = new ActiveXObject("Microsoft.XMLDOM")
				xmls[iXML].async = false
				xmls[iXML].load(filePath)
			}
		}
	}
}
function buildSearchTree() {
	if (!xmlBodies.length) {
		for (var iXML = 0; iXML < xmls.length; ++iXML) {
			window.location.reload()
			var loader = document
			loader.write ( '<html><head><link rel="stylesheet" href="style/page.css" type="text/css" /><title>Zoeken...</title></head><body onblur="self.focus();"><center><p>Zoek data bereiden<br/><font size=\"+1\" color=\"red\">' + Math.floor ( Math.abs ( ( ( iXML + 1 ) / xmls.length ) * 100 ) ) + '%</font></p></center></body></html>')
			loader.close()
			xmlBodies[iXML] = new Array()
			xmlHeaders[iXML] = new Array()
			var pXMLBody = xmls[iXML].getElementsByTagName('body')
			var pXMLHeader = xmls[iXML].getElementsByTagName('body.head')
			for (var iBody = 0; iBody < pXMLBody.length; ++iBody) {
				xmlBodies[iXML][iBody] = ""
				xmlHeaders[iXML][iBody] = ""
				var iMaxChar = 128 * 2 / 3
				var pHLs = pXMLHeader[iBody].getElementsByTagName("hl1")
				var sTextHeader = ""
				for (var iHeader = 0; iHeader < pHLs.length; ++iHeader) {
					if (window.ActiveXObject)
						sTextHeader += pHLs[iHeader].text
					else
						sTextHeader += pHLs[iHeader].textContent
					sTextHeader += " "
				}
				xmlHeaders[iXML][iBody] = sTextHeader.substring(0, iMaxChar) + (sTextHeader.length > iMaxChar ?  "..." : '')
				if (window.ActiveXObject)
					xmlBodies[iXML][iBody] += pXMLBody[iBody].text
				else
					xmlBodies[iXML][iBody] += pXMLBody[iBody].textContent
			}
		}
	}
}
function searchArticles(rgMatches , bIsPhrase) {
	// var summary = window.open('','name','left=0,top=0,width='+screen.width*2/3+',height='+screen.height*2/3+',resizable=1,scrollbars=1')
	// var sumDoc = summary.document
	// sumDoc.write('<html><head><title>Profactys ePaper - Search Results</title>');
	// sumDoc.write('</head><body>') // <H2>' + sTitle + '</H2>');
	var bIsFound = false
	var sTotalSummary = ""
	var searchString = ""
	for (var iSearch = 0; iSearch < rgMatches.length; ++iSearch) {
		searchString += rgMatches[iSearch]
		if (iSearch < rgMatches.length - 1)
			searchString += bIsPhrase ? " " : "+"
	}
	for (var iMatch = 0; iMatch < rgMatches.length; ++iMatch) {
		for (var iFile= 0; iFile < xmlBodies.length; ++iFile) {
			var bIsFirst = true
			for (var iArticle = 0; iArticle < xmlBodies[iFile].length; ++iArticle) {
				/*
				if ( loading )
				{
					loading.location.reload()
					var loader = loading.document
					loader.write ( '<html><head><link rel="stylesheet" href="style/page.css" type="text/css" /><title>Performing search...</title></head><body onblur="self.focus();"><center><p>Looking for \"' + rgMatches[iMatch] + '\" on page ' + pages[iFile] + '<br/><font size=\"+1\" color=\"red\">' + Math.floor ( Math.abs ( ( ( iArticle + 1 ) / xmlBodies[iFile].length ) * 100 ) ) + '%</font></p></center></body></html>' )
					loader.close()
				}
				*/
				var rgFound = new Array()
				var bodyText = xmlBodies[iFile][iArticle]
				var searchTerm = rgMatches[iMatch]
				var iFind = -1;
				var lcSearchTerm = searchTerm.toLowerCase();
				var lcBodyText = bodyText.toLowerCase();
				while (bodyText.length > 0) {
					iFind = lcBodyText.indexOf(lcSearchTerm, iFind+1)
					if (iFind >= 0) {
						var iFlashback = 32
						var sResult = ( iFind > iFlashback ? "\"..." : "\"" ) + bodyText.substring ( iFind - iFlashback , iFind ) + "<font style=\"background:yellow\">" + bodyText.substring ( iFind , iFind + searchTerm.length ) + "</font>" + bodyText.substring ( iFind + searchTerm.length , iFind + searchTerm.length + iFlashback ) + "...\""
						rgFound[rgFound.length] = sResult
						bodyText = bodyText.substring(iFind + searchTerm.length, bodyText.length-1);
						lcBodyText = bodyText.toLowerCase();
						bIsFound = true
						iFind = -1
					} else
						bodyText = bodyText.substring(iFind , bodyText.length-1);
				}
				if (rgFound.length > 0)	{
					var sHeader = xmlHeaders[iFile][iArticle]
					sHeader = sHeader.replace(/\s*<br\/>\s*$/g,"")
					var sNoFound = "<P><H4><I>" + rgFound.length + ( rgFound.length > 1 ? " matches" : " match" ) + " in artikel </I>\"" + ( sHeader.length > 0 ? sHeader : ( iArticle + 1) ) + "\"</I></H4></P>\n"
					if (bIsFirst){
						var sNewPart = ""
						if (sTotalSummary.length > 0)
							sNewPart += "<hr />"
						sNewPart += "<h2><font color=\"red\">Zoekresultaten voor pagina " + pages[iFile] + "</font></h2>"
						// sumDoc.write ( sNewPart )
						sTotalSummary += sNewPart
						bIsFirst = false
					}
					var sSummary = sNoFound + "\n\n<P><UL>\n"
					for (var iIndex = 0; iIndex < rgFound.length; ++iIndex)
						sSummary += ( "\t<LI><A style=\"cursor:pointer\" onmouseover=\"this.style.color='red'\" onmouseout=\"this.style.color='black'\" onclick=\"if (window.opener && !window.opener.closed) window.opener.openPDF(" + iArticle + "," + iFile + ",'" + searchString + "');\" >" + rgFound[iIndex] + "</A></LI>\n")
					sSummary += "</UL></P>\n\n"
					// sumDoc.write ( sSummary )
					sTotalSummary += sSummary
				}
			}
		}
	}
	if (!bIsFound){
		// if ( loading ) loading.close()
		alert("Geen matches gevonden.")
		window.close()
	} else
		showSummary(sTotalSummary)
	// sumDoc.write ('</body></html>');
	// sumDoc.close()
}
function showSummary(sText) {
	window.location.reload()
	window.resizeTo(screen.width*2/3, screen.height*2/3)
	window.moveTo(0, 0)
	var summary = document
	// var summary = sum.document
	summary.write('<html><head><title>Profactys ePaper - Zoekresultaten</title>')
	summary.write('</head><body>')
	summary.write(sText)
	summary.write('</body></html>')
	summary.close()
}
