// --- Search Highlight Functions ---

var ValidParentTags = new Array('div','p','ul','ol','li','dl','dt','dd','a');

function InArray( TextString, StringArray )
{
	for( var i = 0; i < StringArray.length; i++ )
	{
		if( TextString == StringArray[i] )
		{
			return true;
		}
	}

	return false;
}
function GetParams()
{
	var Params = new Array();
	var QueryString = window.location.search.substring( 1 );
	var KeyValuePairs = QueryString.split( '&' );
	for( var i=0; i<KeyValuePairs.length; i++ )
	{
		var pos = KeyValuePairs[i].indexOf('=');
		if( pos > 0 )
		{
			var key = unescape( KeyValuePairs[i].substring(0,pos).replace(/\+/g,' ') );
			var val = unescape( KeyValuePairs[i].substring(pos+1).replace(/\+/g,' ') );
			Params[key] = val;
		}
	}

	return Params;
}

function SearchHighlightTerms()
{
	var Params = GetParams();
	var Query = Params['Query'];
	if( Query )
	{
		// set the search field to the previous search
		var QueryInput = document.getElementById( 'Query' );
		if( QueryInput )
		{
			QueryInput.value = Query;
		}

		// get the element that contains the text content and highlight the searched terms
		var ContentText = document.getElementById( 'Content' );
		if( !ContentText )
		{
			ContentText = document.getElementById( 'ContentWide' );
		}

		if( ContentText )
		{
			var SearchTerms = Query.split( ' ' );
			//SearchRecursiveReplace( ContentText, SearchTerms );
		}
	}
}

function SearchRecursiveReplace( ParentNode, Terms )
{
	for( var ChildIndex = 0; ChildIndex < ParentNode.childNodes.length; ChildIndex++ )
	{
		var ChildNode = ParentNode.childNodes[ChildIndex];
		if( ChildNode.nodeType == 3 )
		{
			ChildIndex += ModifySearchTerms( ParentNode, ChildNode, Terms );
		}
		else if( ChildNode.nodeType == 1 && InArray( ChildNode.nodeName.toLowerCase(), ValidParentTags ) )
		{
			SearchRecursiveReplace( ChildNode, Terms );
		}
	}
}

function ModifySearchTerms( ParentNode, ChildNode, Terms )
{
	var AdditionalChildNodes = 0;

	var FirstTermIndex = -1;
	var FirstTermTitle = null;
	var FirstTermArrayIndex = 0;
	for( var TermIndex = 0; TermIndex < Terms.length; TermIndex++ )
	{
		var TermTitle = Terms[TermIndex];
		var TermOffset = ChildNode.nodeValue.toLowerCase().search( new RegExp('\\b' + TermTitle.toLowerCase() + '\\b') );
		if( TermOffset != -1 && (FirstTermIndex == -1 || TermOffset < FirstTermIndex) )
		{
			FirstTermIndex = TermOffset;
			FirstTermTitle = TermTitle;
			FirstTermArrayIndex = TermIndex;
		}
	}

	if( FirstTermIndex != -1 )
	{
		var PreText=ChildNode.nodeValue.substring(0,FirstTermIndex);
		var TermText=ChildNode.nodeValue.substring(FirstTermIndex,FirstTermIndex+FirstTermTitle.length);
		var PostText=ChildNode.nodeValue.substring(FirstTermIndex + FirstTermTitle.length,ChildNode.nodeValue.length);

		var TermNode = document.createElement("span");
		//TermNode.setAttribute("class","SearchTerm");
		TermNode.className = "SearchTerm"; 

		var TermTextNode = document.createTextNode(TermText);
		TermNode.appendChild(TermTextNode);
		var PreTextNode = document.createTextNode(PreText);
		var PostTextNode = document.createTextNode(PostText);

		ParentNode.insertBefore(PreTextNode,ChildNode);
		ParentNode.insertBefore(TermNode,ChildNode);
		ParentNode.insertBefore(PostTextNode,ChildNode);
		ParentNode.removeChild(ChildNode);

		AdditionalChildNodes += 1;
	}

	return AdditionalChildNodes;
}

