//inputBox is the name OR id of the text box
//collection is what keyword bank you want to search from, "standards" is for designations only, "all" is for previous google searches


//wrapper for this so it doesn't collide with the other suggest box

var standardsSuggest = new stdsSuggest();
addEvent(window, "load", function() { standardsSuggest.init(); });


function stdsSuggest()
{
	var sugInst = new Object();	
	
	var inputBox = "query";
	var collection = "standards";
	
	
	var httpRequest;
	
	function init()
	{
		getCss();
		if(!document.getElementById(inputBox)) 
		{ 
			if(!addInputBoxId()) { return(false); }
		}
		var target = document.getElementById(inputBox);
		target.setAttribute("autocomplete", "off");
		addEvent(target, "keyup", checkInput);
	}
	
	function GetHTTP()
	{
	    var httpRequest;
	
	    if(document.all) {
	      httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
	    }
	    else {
	      httpRequest = new XMLHttpRequest();
	    }
	     return(httpRequest);
	}
	
	function RunCGI_Async(Command)
	{
	   if(!httpRequest)
	   {
		httpRequest = GetHTTP();
	   }
	
	   else if (httpRequest.readyState < 4)
	   {
		//stupid hack to get around xhr feature that abort() changes readystate to 4...
		httpRequest.onreadystatechange = function() {}
		//httpRequest.abort();
	   }
	
	   var SpecString=Command;
	   httpRequest.open('GET', SpecString, true);
	   httpRequest.onreadystatechange = function() { suggest(httpRequest); }
	   httpRequest.send(null);
	}
	
	function suggest(httpRequest)
	{
		if (httpRequest.readyState == 4)
		{
			var results;
			if(httpRequest.responseText && httpRequest.responseText != "")
			{
				results = eval("(" + httpRequest.responseText + ")");
			}
	
			//theEl is the search box that we are adding suggestions for
	
			var theEl = document.getElementById(inputBox);
			removeDropDown();
/*	
			//ugly ugly kludge for ie6 and lower
			if (typeof document.body.style.maxHeight == "undefined") 
			{
				sBoxes = document.getElementsByTagName('select');
				for(var i = 0; i < sBoxes.length; i++) { sBoxes[i].style.display = "none" }
			}
*/	
			var newDiv = document.createElement('div');
			newDiv.id = "suggestions";
			newDiv.style.top = (getY(theEl) + getHeight(theEl)) + "px";
			newDiv.style.left = (getX(theEl) + getWidth(theEl)) + "px";
	
			var suggestTable = document.createElement('table');
				suggestTable.id = "suggestTable";
				suggestTable.setAttribute("cellPadding","0");
				suggestTable.setAttribute("cellSpacing","0");
				suggestTable.setAttribute("border","0");
			var suggestTbody = document.createElement('tbody');
			var header = document.createElement('tr');
			var headerLeft = document.createElement('th');
				headerLeft.id = "headerLeft";
				headerLeft.setAttribute("align","left");
				var headerText = document.createTextNode('Suggestions');
				headerLeft.appendChild(headerText);
			var headerRight = document.createElement('th');
				headerRight.id = "headerRight";
				headerRight.setAttribute("align","right");
				var closeButton = document.createElement('img');
				closeButton.src = "/IMAGES03/tiny_x.gif";
				addEvent(closeButton, "click", removeDropDown);
				headerRight.appendChild(closeButton);
			header.appendChild(headerLeft);
			header.appendChild(headerRight);
			suggestTbody.appendChild(header);
	
	
			if(results && results.matches.length > 0)
			{
				for(var i = 0; i < results.matches.length; i++)
				{
					var itemRow = document.createElement('tr');
					var itemData = document.createElement('td');
					var spacerData = document.createElement('td');
					spacerData.setAttribute("class","spacerData");
					spacerData.setAttribute("className","spacerData");
					var newSpace = document.createElement('br');
					spacerData.appendChild(newSpace);
					var newAnchor = document.createElement('a');
					newAnchor.setAttribute("class","resAnchor");
					newAnchor.setAttribute("className","resAnchor");
					addEvent(newAnchor, "mouseover", highlight);
					addEvent(newAnchor, "mouseout", unhighlight);
					addEvent(newAnchor, "click", fillSearch);
					newAnchor.name = results.matches[i].match.toLowerCase();
					var newText = document.createTextNode(results.matches[i].match.toLowerCase());
					newAnchor.appendChild(newText);
					itemData.appendChild(newAnchor);
					itemRow.appendChild(itemData);
					itemRow.appendChild(spacerData);
					suggestTbody.appendChild(itemRow);
				}	
	
				suggestTable.appendChild(suggestTbody);
				newDiv.appendChild(suggestTable);
			}
	
			
	
			else
			{
				suggestTable.appendChild(suggestTbody);
				newDiv.appendChild(suggestTable);
				var noRes = document.createElement('div');
				noRes.id = "noRes";
				var noResText = document.createTextNode('No Suggestions');
				noRes.appendChild(noResText);
				newDiv.appendChild(noRes);
			}
	
			var disable = document.createElement('div');
			disable.id = "disable";
			var disableText = document.createTextNode('Disable');
			disable.appendChild(disableText);
			newDiv.appendChild(disable);
			addEvent(disable, "click", disableSuggest);
			
			document.body.appendChild(newDiv);
		}
		else
		{
			return (false);
		}
	
	}
	
	function checkInput(evt)
	{
		//check if the user hit the up or down key, if they did highlight an item, on enter do fillSearch on it
	
		if(GetCookie("suggestToggle") == "false") { return(false); }
	
		evt = (evt) ? evt : ((window.event) ? window.event : "")
		if (evt) 
		{
	    		switch(evt.keyCode) 
			{
		        	case 38: //up arrow
		            		highlightPrevious();
				        break;
		        	case 40: //down arrow
		        		highlightNext()
					break;
		        	case 13: //enter
		            		//fillSearchArrowKeys();
		            		break;
				default:
					var term = document.getElementById(inputBox).value;
					if(term.length > 1)
					{
						var query = "/SUGGEST/suggest.cgi?term=" + term + "&col=" + collection;
						//var query = "/SUGGEST/suggest_file.cgi?" + term;
						RunCGI_Async(query);
					}
					break;
		    	}
		}
	}
	
	
	function getY( el )
	{
		var y = 0;
		while( el != null ) 
		{
			y += el.offsetTop;
			el = el.offsetParent;
		}
		return y;
	}
	
	
	function getX( el )
	{
		var x = 0;
		while( el != null ) 
		{
			x += el.offsetLeft;
			el = el.offsetParent;
		}
	
		return x;
	}
	
	function getWidth( el )
	{
		return(el.offsetWidth);
	}
	
	function getHeight( el )
	{
		return(el.offsetHeight);
	}
	
	function fillSearch(evt)
	{
		evt = (evt) ? evt : ((window.event) ? window.event : "")
		if (evt) 
		{
			var elem = (evt.target) ? evt.target : evt.srcElement
			document.getElementById(inputBox).value = elem.name;
			removeDropDown();
			document.getElementById(inputBox).form.submit();
	
		}
	}
	
	function removeDropDown()
	{
		if(document.getElementById('suggestions')) { document.getElementById('suggestions').parentNode.removeChild(document.getElementById('suggestions')); }
		if (typeof document.body.style.maxHeight == "undefined") 
			{
				sBoxes = document.getElementsByTagName('select');
				for(var i = 0; i < sBoxes.length; i++) { sBoxes[i].style.display = "inline" }
			}
	}
	
	function highlight(evt)
	{
		evt = (evt) ? evt : ((window.event) ? window.event : "")
		if (evt) 
		{
			var elem = (evt.target) ? evt.target : evt.srcElement
			elem.style.backgroundColor = "#ddddff";
			elem.style.textDecoration = "underline";
		}
	
	}
	
	function unhighlight(evt)
	{
		evt = (evt) ? evt : ((window.event) ? window.event : "")
		if (evt) 
		{
			var elem = (evt.target) ? evt.target : evt.srcElement
			elem.style.backgroundColor = "#ffffff";
			elem.style.textDecoration = "none";
		}
	}
	
	function highlightPrevious()
	{
		var links = document.getElementById('suggestions').getElementsByTagName('a');
		for(var i = 0; i < links.length; i++)
		{
			if(links[i].style.backgroundColor == "rgb(221, 221, 255)")
			{
				//the if is to handle when the first entry is selected
				if(i - 1 < 0) { return (false); } 
				links[i].style.backgroundColor = "#ffffff";
				links[i].style.textDecoration = "none";
				links[i-1].style.backgroundColor = "#ddddff";
				links[i-1].style.textDecoration = "underline";
				document.getElementById(inputBox).value = links[i-1].name;
				return(true);
			}
		}
		return(false);
	}
	
	function highlightNext()
	{
		var links = document.getElementById('suggestions').getElementsByTagName('a');
		var selection = false;
		for(var i = 0; i < links.length; i++)
		{
			if(links[i].style.backgroundColor == "rgb(221, 221, 255)")
			{
				//the if is to handle when the last entry is selected
				if(i + 1 >= links.length) { return (false); } 
				links[i].style.backgroundColor = "#ffffff";
				links[i].style.textDecoration = "none";
				links[i+1].style.backgroundColor = "#ddddff";
				links[i+1].style.textDecoration = "underline";
				document.getElementById(inputBox).value = links[i+1].name;
				var selection = true;
				break;
			}
		}
		if(!selection)
		{	
			document.getElementById(inputBox).value = links[0].name;
			links[0].style.backgroundColor = "#ddddff";
			links[0].style.textDecoration = "underline";
		}
	}
	
	function getCss()
	{
		var headID = document.getElementsByTagName("head")[0];         
		var cssNode = document.createElement('link');
		cssNode.type = 'text/css';
		cssNode.rel = 'stylesheet';
		cssNode.href = '/SUGGEST/suggest_work.css';
		cssNode.media = 'screen';
		headID.appendChild(cssNode);
	}
	

	function addInputBoxId()
	{
		var allForms = document.getElementsByTagName('form');
		for(var i = 0; i < allForms.length; i++)
		{
			for(var j = 0; j < allForms[i].elements.length; j++)
			{
				if(allForms[i].elements[j].name == inputBox && allForms[i].elements[j].type == "text")
				{
					allForms[i].elements[j].id = inputBox;
					return(true);
				}
			}
		}
		return(false);
	}
	
	function disableSuggest()
	{
		removeDropDown();
		sugCreateCookie("suggestToggle","false");
	}
	
	function GetCookie(name) {
	        var nameEQ = name + "=";
	        var ca = document.cookie.split(';');
	        for(var i=0;i < ca.length;i++) {
	                var c = ca[i];
	                while (c.charAt(0)==' ') c = c.substring(1,c.length);
	                if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	        }
	        return null;
	}
	
	function sugCreateCookie(Name,Value)
	{
	   var expiry = new Date();
	   expiry.setDate(expiry.getDate()+99999);
	
	   var CookString=Name+"=" + Value + "; path=/; domain=.astm.org; expires="+expiry.toGMTString();
	   document.cookie=CookString;
	
	}

	sugInst.init = init;
	return sugInst;
}

function addEvent(obj, evType, fn)
{ 
	if (obj.addEventListener)
	{ 
		obj.addEventListener(evType, fn, false); 
   		return true; 
 	} 
	else if (obj.attachEvent)
	{ 
   		var r = obj.attachEvent("on"+evType, fn); 
   		return r; 
 	} 

	else 
	{ 
   		return false; 
		
	} 
}