String.prototype.trim = function() { return this.replace(/^\s+|\s+$/g, ''); };

function getElement(elem) {
if (document.getElementById) { // DOM3 = IE5, NS6
return document.getElementById(elem)
}
else {
if (document.layers) { // Netscape 4
return document[elem];
}
else { // IE 4
return document.all[elem];
}
}
}

function GetXmlHttpObject()
{
	var xmlHttp=null;
	if (window.XMLHttpRequest) {
		xmlHttp = new XMLHttpRequest();
	} else if (window.ActiveXObject) {
		try {
			xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {}
		}
	}
	if (!xmlHttp) {
		alert("Your browser does not support AJAX.\nSearching will be disabled");
		getElement("btnSearch").disabled = true;
		return false;
	}
	return xmlHttp;
}

function resetQ()
{
	var spns;
	var iesucks;
	var st;
	
	getElement("results").innerHTML = "&nbsp;"

	if(document.getElementsByTagName)
		spns = document.getElementsByTagName("span")
	else
		spns = document.body.all.tags("span");
	
	for(var ii =0;ii<spns.length;++ii)
	{
		iesucks = spns[ii].style;
		
		if(iesucks != null)
		{
			st = iesucks.cssText

    		if( /font-weight:\s+bold;\s+color:\s+black;\s+background-color:\s+rgb\(255,\s*255,\s*51\);?/i.test( st) ||
			    /font-weight:\s+bold;\s+color:\s+black;\s+background-color:\s+#ffff33;?/i.test( st)   )
			{
				
				spns[ii].parentNode.insertBefore(
					document.createTextNode(
						spns[ii].innerHTML.replace(new RegExp("<.*?>","g"),"")
						),
					spns[ii]
					);
			
				spns[ii].parentNode.removeChild(spns[ii]);
			
				if(document.getElementsByTagName)
					spns = document.getElementsByTagName("span")
				else
					spns = document.body.all.tags("span");
				
				ii=0;
				
			}
		}
	}

}

function cleanHits()
{
	var spns;
	var iesucks;
	var st;
	var rx = new RegExp("\\<span","i");
	
	getElement("results").innerHTML = "&nbsp;"

	spns = document.getElementsByTagName("span")
	
	for(var ii =0;ii<spns.length;++ii)
	{
		iesucks = spns[ii].style;
		
		if(iesucks != null)
		{
			st = iesucks.cssText
			
    		if( /font-weight:\s+bold;\s+color:\s+black;\s+background-color:\s+rgb\(255,\s*255,\s*51\);?/i.test( st) ||
			    /font-weight:\s+bold;\s+color:\s+black;\s+background-color:\s+#ffff33;?/i.test( st)   )
			{
				if(rx.test(spns[ii].innerHTML))
				{
					spns[ii].innerHTML = "<a id=\"replaceme\"></a>" + spns[ii].innerHTML.replace(new RegExp("\<.*?\>","g"),"");
				}
			}
		}
	}

}

var lquery="";

function searchDoc()
{
	if ( lquery == document.fSearch.query.value.trim() || document.fSearch.query.value.trim() == "")
	{
		return;
	}
	else
	{
		lquery = document.fSearch.query.value.trim();
	}
	var xho = GetXmlHttpObject()
	if(!xho)
		return false;
	var url = "hits_parser.aspx?doc="+encodeURIComponent(docname)+"&q=" + encodeURIComponent(lquery);
	xho.onreadystatechange=function () {
		if (xho.readyState==4)
		{
			var res = getElement("results");
			
			if(xho.responseXML == null)
			{
				resetQ();
				res.innerHTML = "No matches<br/>"
				getElement("throbber").style.visibility = "hidden";
				return;
			}
			
			
			var hitCount = xho.responseXML.getElementsByTagName("count");
			var rxs = xho.responseXML.getElementsByTagName("regex");
			var out = xho.responseXML.getElementsByTagName("replace");
			var body = getElement("docBody");
			
			if(hitCount == null || hitCount[0].textContent == '0')
			{
				resetQ();
				res.innerHTML = "No matches<br/>"
				getElement("throbber").style.visibility = "hidden";
				return;
			}
			
			if(rxs == null)
			{
				resetQ();
				res.innerHTML = "No matches<br/>"
				getElement("throbber").style.visibility = "hidden";
				return;
			}
			
			resetQ();
			
			document.fSearch.query.value = "";
		
			
			for(var ii=0;ii<rxs.length;++ii)
			{
				body.innerHTML = body.innerHTML.replace(new RegExp(rxs[ii].firstChild.nodeValue,"ig"),out[ii].firstChild.nodeValue)
			}
			
			cleanHits();
		
			var count = 1;
			var hits = getElement("replaceme");
			res = getElement("results");

			var txt="<ol style=\"padding-left: 10px;margin-left: 10px;\">";
						
			while(hits)
			{
				var p = hits.parentNode;
				var gp = hits.parentNode.parentNode;
				var prev = pTnode(gp,p);
				var next = nTnode(gp,p);
				hits.id = count++;
				txt += "<li style=\"padding-left: 0px;margin-left: 0px;padding-bottom: 5px;\"><a class=\"showall\" onclick=\"showall()\" href=\"#" + hits.id + "\">";
				if(prev)
					txt += prev.nodeValue.match(new RegExp("(\\S+\\s+){0,3}.?$"))[0];
					
				txt += "<strong>" + hits.parentNode.innerHTML.replace(new RegExp("<.*?>","g"),"") + "</strong>"
				
				if(next)
					txt += next.nodeValue.match(new RegExp("^.*?(\\s+\\S+){0,3}"))[0]
					
				txt += "</a></li>\n";
				
				hits = getElement("replaceme");		
			}
			txt += "</ol>";
			
			res.style.display = "";
			res.innerHTML = txt;
			show("results");
			res.style.heigth = "";
			
			document.fSearch.query.value = lquery;
			
			getElement("throbber").style.visibility = "hidden";
		}	
	};

	getElement("throbber").style.visibility = "visible";
	
	
	xho.open("GET",url,true);
	xho.send(null);	
	
}

function pTnode(parent,child)
{

	for(var ii=1;ii<parent.childNodes.length;++ii)
	{
		if(parent.childNodes[ii] == child)
		{
			if(parent.childNodes[ii+1] != null )
			{

				if (parent.childNodes[ii-1].nodeType == 3)
				{
					return parent.childNodes[ii-1];
				}
				else
				{
					return null;
				}
			}
			else
			{
				return null;
			}
			
		}
	}
	
	return null;
}

function nTnode(parent,child)
{

	for(var ii=1;ii<parent.childNodes.length;++ii)
	{
		if(parent.childNodes[ii] == child)
		{
			if(parent.childNodes[ii+1] != null )
			{
				if (parent.childNodes[ii+1].nodeType == 3)
				{
					return parent.childNodes[ii+1];
				}
				else
				{
					return null;
				}
			}
			else
			{
				return null;
			}
		}
	}
	
	return null;
}

function searchkey(e)
{
	var key;
	var keychar;
	var reg;
	
	if(window.event) {
		// for IE, e.keyCode or window.event.keyCode can be used
		key = e.keyCode; 
	}
	else if(e.which) {
		// netscape
		key = e.which; 
	}
	else {
		// no event, so pass through
		return true;
	}
	
    if(key==13)
	{
		document.fSearch.btnSearch.click();
		return false;
	}
       
    return true;
}
