var xmlBodies = new Array() ;

var xmlHeaders = new Array() ;

function doSearch()
{

	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 == "Please enter keyword(s)" )
	{

		alert ( "Please enter keyword(s)" ) ;

		document.getElementById("searchText").focus() ;

  	}
  	else
  	{

		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 )
		{

			getAllXML() ;

			buildSearchTree() ;

			searchArticles ( rgWords , bPhrase ) ;

		}
		else
		{

			var sError = "Please provide keyword(s) more than 2 characters long" ;

			if ( rgWords.length > 1 && ! bPhrase )

				sError += " or try searching as phrase" ;

			alert ( sError ) ;

			document.getElementById("searchText").focus() ;

		}

	}

}

function getAllXML()
{

	if ( ! xmls.length )
	{

		for ( var iXML = 0 ; iXML < filenames.length ; ++iXML )
		{

			var regex = /_str/ ;

			if ( regex.test ( filenames [ iXML ] ) )

				fname = filenames [ iXML ].substring ( 0 , filenames [ iXML ].lastIndexOf ( '_' ) ) ;

			else

				fname = filenames [ iXML ] ;

			var filePath = "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 )
		{

			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','width='+screen.width*2/3+',height='+screen.height/2+',resizable=1,scrollbars=1') ;

	var sumDoc = summary.document ;

	sumDoc.write('<html><head><title>Mimotek 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 )
			{

				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><H3><I>" + rgFound.length + ( rgFound.length > 1 ? " matches" : " match" ) + " in article <I>\"" + ( sHeader.length > 0 ? sHeader : ( iArticle + 1) ) + "\"</I></H3></P>\n" ;

					if ( bIsFirst )
					{

						var sNewPart = "" ;

						if ( sTotalSummary.length > 0 )

							sNewPart += "<hr />" ;

						sNewPart += "<h2><font color=\"red\">Search results for page " + 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 )

		sumDoc.write ( "Sorry! We did not find any matches." ) ;
	/*
	else

		sumDoc.write ( sTotalSummary ) ; // showSummary ( sTotalSummary ) ;
	*/

	sumDoc.write ('</body></html>');

	sumDoc.close() ;

}

function showSummary ( sText )
{

	var summary = window.open('','name','width='+screen.width*2/3+',height='+screen.height/2+',resizable=1,scrollbars=1') ;

	var tmp = summary.document ;

	tmp.write('<html><head><title>Mimotek ePaper - Search Results</title>');

	tmp.write('</head><body>') ; // <H2>' + sTitle + '</H2>');

	tmp.write( sText ) ;

	tmp.write('</body></html>');

	tmp.close() ;

}
