//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

var inputBox = "q";
var collection = "all";
addEvent(window, "load", init);

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) + "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 = "http://www.astm.org/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 = "http://www.astm.org/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).parentNode.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 = 'http://www.astm.org/SUGGEST/suggest_work.css';
	cssNode.media = 'screen';
	headID.appendChild(cssNode);
}

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; 
	
 } 
}

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;

}