<!--

	var URL_PATTERN = "(https?://.*\\.controlled-trials\\.com/.*?/.*?/[0-9]+?/)(.+?)";
	var TERMS_POS = "$2";
	var FLAGS = "gi";
	var GLOBAL = "g";
	var CI = "i";
	var TERMS_PATTERN = "\\W";
	var LOGICAL_OPERATORS = "AND|OR|NOT";
	var FIELD_VALUE_ID = "FieldValue";
	//var SEARCH_PATTERN_1 = "(.*?)(";
	//var SEARCH_PATTERN_2 = ".*?\\b)+?(.*?)";
	var SEARCH_PATTERN_1 = "(^|\\b)(";
	var SEARCH_PATTERN_2 = ".*?)(\\b|$)";
	//var HILITE_PATTERN = "$1<span class=\"hilite\">$2</span>$3";
	var HILITE_TAG = "span";
	var HILITE_CLASS = "hilite";
	
	function highlight()
	{				
		var oRE = new RegExp(URL_PATTERN, FLAGS);
		
		var sUrl = document.URL;		
		var sTerms = getTerms(oRE, TERMS_POS, sUrl);
		sTerms = unescape(sTerms);
		
		//alert("waiting");
		
		// this needs to be the opposite way round...
		if(sTerms.length > 0)
		{	
			var aTermsList = splitTerms(sTerms);			
			var aFVS = getFieldValues();
			for(var i = 0; i < aFVS.length; i++)
			{
				highlightTerms(aTermsList, aFVS[i]);
			}
		}
	}
	
	/*
	  * Retrieves the search terms from a string
	  */
	function getTerms(oRE, sPos, sText)
	{
		var output = null;
		if(sText.match(oRE))
		{
			output = sText.replace(oRE, sPos).toUpperCase();
		}
		return output;
	}
	
	/*
	  * Splits a string of search terms on non-letter/digit characters and omits logical operators (defined in a string constant)
	  */
	function splitTerms(sTerms)
	{
		var sPattern = "(" + TERMS_PATTERN + "|" + LOGICAL_OPERATORS + ")";
		var oRE = new RegExp(sPattern, FLAGS);
		
		var aTerms1 = sTerms.split(oRE);
		var aTerms2 = new Array();
		
		// especially for all the FireFox users out there; FF (up to v2) doesn't seem to split() in the same way as IE - FF2 returns delimitors, IE does not
		for(var i = 0; i < aTerms1.length; i++)
		{
			if(!oRE.test(aTerms1[i]) && aTerms1[i].length > 0)
			{
				aTerms2[aTerms2.length] = aTerms1[i];
			}
		}
		
		return aTerms2;
	}			

	/*
	  * Iterate through the terms and highlight these in the text
	  */
	function highlightTerms(aTerms, sText)
	{
		var terms = "";
		for(var i = 0; i < aTerms.length; i++)
		{
			terms += aTerms[i] + (i < aTerms.length -1 ? "|" : "");
		}		
		var sPattern = SEARCH_PATTERN_1 + "(" + terms + ")" + SEARCH_PATTERN_2;
		//alert(sPattern);
		var oRE = new RegExp(sPattern, FLAGS);
		if(sText.innerHTML.match(oRE))
		{
			sText.innerHTML = getAllNodeHTML(sText, oRE);
		}
	}
	
	function getAllNodeHTML(node, regExp)
	{
		var cns = node.childNodes;
		
		var newText = "";
		for(var i = 0; i < cns.length; i++)
		{							
			var oNode = cns[i];
			if(oNode.nodeType == 3) 
			{							
				if(trim(oNode.nodeValue).length > 0) // if we have a text element
				{
					//alert(oNode.data);
					var str = oNode.data.replace(regExp, getHighlightPattern());
					newText += str;										
				}	
			}	
			else if(oNode.nodeType == 1)
			{
				// should do this sort of recursively
				//for(var n = 0; n < oNode.childNodes.length; n++)
				//{
				//	alert(oNode.childNodes[n]);				
				//}
				newText += getNodeText(oNode, regExp);
			}										
		}
		return newText;
	}
	
	/*
	  * Returns the sections of text to search
	  */
	function getFieldValues()
	{
		return document.getElementsByName(FIELD_VALUE_ID);		
	}
	
	/*
	  * Rewrite the DOM node as text
	  */
	function getNodeText(node, regExp)
	{
		var sText = "<" + node.nodeName.toLowerCase();					
		sText += getAttributeString(node);		
		sText += (node.nodeName == "BR" ? "/" : "") + ">";
		
		var text;
		if(node.innerText)
		{
			sText += node.innerText;
			//text = node.innerText;
		}
		else if(node.text)
		{
			sText += node.text;
			//text = node.text;
		}
		
		//sText += getAllNodeHTML(text, regExp);
		
		sText += (node.nodeName != "BR" ? "</" + node.nodeName.toLowerCase() + ">" : "");
		return sText;
	}
	
	/*
	  * Get a String representation of the attributes we're interested in from a node
	  */
	function getAttributeString(node)
	{
		var attrs = "";
		for(var n = 0; n < node.attributes.length; n++)
		{							
			var oAtt = node.attributes[n];
			if(isAnchorAttribute(node, oAtt) ||	isWantedAttribute(oAtt))				
			{	
				if(oAtt.nodeValue.length > 0)
				{
					attrs += " " + oAtt.nodeName + "='" + oAtt.nodeValue + "'";
				}
			}
		}				
		return attrs;
	}
	
	function isAnchorAttribute(node, attribute)
	{
		var aAtts = new Array("HREF", "TARGET");
		return node.nodeName.toUpperCase() == "A" && inArray(aAtts, attribute.nodeName.toUpperCase()) >= 0;
	}
	
	function isWantedAttribute(attribute)
	{
		var aAtts = new Array("ID", "NAME", "CLASS");
		return inArray(aAtts, attribute.nodeName.toUpperCase()) >= 0;
	}
	
	function inArray(array, value)
	{
		var pos = -1;
		for(var i = 0; i < array.length; i++)
		{
			if(array[i] == value)
			{
				pos = i;
				break;
			}
		}
		return pos;
	}

	function getHighlightPattern()
	{
		var sHilite = "$1<" + HILITE_TAG + " class=\"" + HILITE_CLASS + "\">$2</" + HILITE_TAG + ">";
		//alert(sHilite);
		return sHilite;
	}
	
//-->