function SearchSuggest(io,f,a,p,m,l)
{

	var inputObject = io
	var formObject	= f;
	
	var lWrapDiv = document.createElement('div');
		lWrapDiv.id = 'Search-Suggest-Wrapper';

	var isFocused = false;
	var resultList = document.createElement('ul')
		resultList.id = 'Search-Suggest-Items';
	var items;
	
	var action 	= a;
	var method 	= m;
	var limit	= l;
	var productURI = p;
	
	var searchURI = '/SearchResults.aspx?pSearch=';
	
	var selectedIndex = -1;
	
	var searchTerm = '';
	
	inputObject.autocomplete = 'off';
	inputObject.setAttribute("autocomplete","off"); 
	
	lWrapDiv.appendChild(resultList);
	
	document.body.appendChild(lWrapDiv);

	if (inputObject.addEventListener)
	{
		document.addEventListener("keydown",keydown,false);
		document.addEventListener("keypress",keypress,false);
		document.addEventListener("keyup",keyup,false);
		document.body.addEventListener("resize",position,false);
		
		inputObject.addEventListener('focus',setFocusTrue,false);
		inputObject.addEventListener('blur',setFocusFalse,false);
	}
	else if (inputObject.attachEvent)
	{
		document.attachEvent("onkeydown", keydown);
		document.attachEvent("onkeypress", keypress);
		document.attachEvent("onkeyup", keyup);
		document.body.attachEvent("onresize", position);
		
		inputObject.attachEvent("onfocus", setFocusTrue);
		inputObject.attachEvent("onblur", setFocusFalse);
		
	}
	else
	{
		document.onkeydown	= keydown;
		document.onkeypress	= keypress;
		document.onkeyup	= keyup;
		document.body.onresize	= position;
		
		inputObject.onFocus = setFocusTrue;
		inputObject.onBlur = setFocusFalse;

	}
	
	
	function setFocusTrue(e)
	{
		isFocused = true;
		
		if(inputObject.value == 'Search Products')
		{
			inputObject.value = '';
		}
		else
		{
			//fetchResults();
		}
	}
	
	function setFocusFalse(e)
	{
		if(inputObject.value == '')
		{
			inputObject.value = 'Search Products';
		}
		else
		{
			inputObject.value = searchTerm;
		}
		isFocused = false;
		//hide();
		
		setTimeout ( hide, 250 );
	}
	
	function keydown(e)
	{
		if(isFocused){	}
	}
	
	function keypress(e)
	{
		if(isFocused){	}
	}
	
	function keyup(e)
	{
		if(isFocused){	checkKeys(e); }
	}
	
	function checkKeys(e)
	{
		switch(e.keyCode)
		{
			case 13:
				doEnter();
				break;
			case 37:
				
				break;
			case 38:
				doUp();
				break;
			case 39:
				
				break;
			case 40:
				doDown();
				break;
			default:
				fetchResults();
				break;
		}
	}
	
	function doEnter()
	{
		if(selectedIndex == -1)
		{
		    if (inputObject.value.length > 0)
		    {
			    location.href = "/SearchResults.aspx?pSearch=" + inputObject.value;
			}
			//formObject.onSubmit = function()
			//{
			//	return true;
			//}

			//formObject.submit();
		}
		else
		{
			location.href = resultList.childNodes[selectedIndex].firstChild.href;
		}
	}
	
	function doUp()
	{
		var ns = selectedIndex - 1;
		ns = (ns <0)?resultList.childNodes.length-1:ns;
		selectLiNode(resultList.childNodes[ns]);
		
		if(selectedIndex >-1 && resultList.childNodes[selectedIndex])
		{
			deselectNode(resultList.childNodes[selectedIndex]);
		}
		
		selectedIndex = ns;
	}
	
	function doDown()
	{
		var ns = selectedIndex + 1;
		ns = (ns >= resultList.childNodes.length)?0:ns;
		selectLiNode(resultList.childNodes[ns]);
		
		if(selectedIndex >-1 && resultList.childNodes[selectedIndex])
		{
			deselectNode(resultList.childNodes[selectedIndex]);
		}
		
		selectedIndex = ns;
	}
	
	function deselectNode(li)
	{
		li.firstChild.className = '';
	}
	
	function selectLiNode(li)
	{
		li.firstChild.className = 'selected';
		if(li.name.length > 0)
		{
			inputObject.value = li.name; 
		}
	}
	
	function restSelection()
	{
		if(selectedIndex >-1 && resultList.childNodes[selectedIndex])
		{
			deselectNode(resultList.childNodes[selectedIndex]);
			selectedIndex = -1;
		}
	}
	
	function show()
	{
		position();
		lWrapDiv.style.visibility = 'visible';
		
	}
	
	function hide()
	{
		lWrapDiv.style.visibility = 'hidden';
		restSelection();
	}
	
	function position()
	{
		var pos = get_abs_pos_from_elm(inputObject);
		var workSpaceHeight = document.body.clientHeight -50;
		
		lWrapDiv.style.top = (pos.y + inputObject.clientHeight + 1) + 'px';
		lWrapDiv.style.left = (pos.x - (lWrapDiv.clientWidth - inputObject.clientWidth)) + 'px';
		
		var rlh = resultList.clientHeight + 3;
		
		/*if(rlh > workSpaceHeight)
		{
			lWrapDiv.style.height = (workSpaceHeight) + 'px';
		}
		else
		{
			lWrapDiv.style.height = rlh + 'px';
		}*/
	}
	
	function fetchResults()
	{
		restSelection();
		var xr = new XMLRequest();
		xr.connect(method,action,true);
		xr.sendAndLoad('query='+inputObject.value,buildDisplay);
		
		searchTerm = inputObject.value;
	}
	
	function removeChildNodes(node)
	{
	  while (node.childNodes[0])
	  {
	    node.removeChild(node.childNodes[0]);
	  }
	}
	
	function buildDisplay(xr)
	{
		var xml = xr.responseXML.firstChild;
	
		
		removeChildNodes(resultList);
		
		if(navigator.appName == 'Microsoft Internet Explorer')
		{
			var xml = xr.responseXML.childNodes[1];
		}
		
		if(xml)
		{
			
			items = new Array();
			
			var limitCount = 1;

			for(i=0; i < xml.childNodes.length; ++i)
			{
				
				var item = xml.childNodes[i];
				
				if(item.nodeName == 'row')
				{
					//alert(i);
					var sd = getChildByName(item,'ShortDescription');
					var BVIN = getChildByName(item,'BVIN');
					if(sd)
					{
						var li = document.createElement('li');
						
						li.innerHTML = '<a href="'+productURI+'/'+getUrlName(sd.firstChild.nodeValue,BVIN.firstChild.nodeValue)+'.aspx">'+sd.firstChild.nodeValue+'</a>';
						li.name = sd.firstChild.nodeValue;
						resultList.appendChild(li);
						items.push(li);
						limitCount++;
					}

				}
				
				if(limitCount >= limit)
				{
					addMoreCap( xml.childNodes.length);
					break;
				}
				
			}
		}
		else
		{
			
		}
	
		show();
	}
	
	function getChildNode(n,name)
	{
		var node = n;

		while(node.firstChild && node.nodeName != name)
		{
			node = node.firstChild;
			
			while(node.nextSibling && node.nodeType != 1)
			{
				node = node.nextSibling;
			}
		}
		
		return node;
	}
	
	function getUrlName(sd,BVIN)
	{
    	sd = sd.replace(/"/g, "");
		nsd = sd.replace(/\s/g,"-");
		
		var out = nsd+'__'+BVIN;
		
		return out;
	}
	
	function addMoreCap(amount)
	{
		var li = document.createElement('li');
		li.className = 'viewMoreLink';
		li.innerHTML = '<a href="'+searchURI+inputObject.value+'">'+ (amount - limit)+' More Results</a>';
		li.name = inputObject.value;
		resultList.appendChild(li);
	}
	
	function getChildByName(xNode,name)
	{
		for(a=0; a < xNode.childNodes.length; ++a)
		{
			var node = xNode.childNodes[a];
			if(node.nodeName == name)
			{
				return node;
			}
		}
		return false;
	}
	
	function get_abs_pos_from_elm(el)
	{
		var SL = 0, ST = 0;
		var is_div = /^div$/i.test(el.tagName);
		if (is_div && el.scrollLeft)
			SL = el.scrollLeft;
		if (is_div && el.scrollTop)
			ST = el.scrollTop;
		var r = { x: el.offsetLeft - SL, y: el.offsetTop - ST };
		if (el.offsetParent) {
			var tmp = get_abs_pos_from_elm(el.offsetParent);
			r.x += tmp.x;
			r.y += tmp.y;
		}
		return r;
	}
	
	
}