function KeywordSuggestion(textfieldID,searchResultID)
{
	var reqXML;  
	var textfieldObj=document.getElementById(textfieldID);
	var searchResultObj=document.getElementById(searchResultID);
	var textfieldIDName=textfieldID;
	var searchResultIDName=searchResultID;
	var selectedIndex=-1;
	this.suggestOut=suggestOut;
	this.suggestOver=suggestOver;
	this.setSearch=setSearch;
	this.gotoExamPage=gotoExamPage;
	initialize();
	function initialize()
	{
		
		searchResultObj.style.display="none";
		searchResultObj.style.left=  findPosX(textfieldObj)+'px';
		searchResultObj.style.top=  findPosY(textfieldObj)+25+'px';
		searchResultObj.style.position="absolute";

		textfieldObj.autocomplete = "off";
        textfieldObj.onkeydown = keypressHandler;
        textfieldObj.onkeyup = keyupHandler;
        //textfieldObj.focus();	
	}
	var FocusedObj;
	function searchSuggest(){

	  //How long before timeout (should be a few minutes before your server's timeout
	  var dblMinutes = 10;
	  var idvendor;
	  var catestr='';
	  var ss;
	  var d = new Date();
	  selectedIndex=-1;
	  switch(textfieldObj.id)
	  {
		  case 'NRCategory':
		  idvendor=document.getElementById('idvendor');	  
		  // alert('/ajax_requestnewsearch.asp?vendor=' + idvendor.options[idvendor.selectedIndex].value+'&catestr=' + catestr +'&time='+d.toLocaleString());
			LoadXMLDoc('/ajax_requestnewsearch.asp?vendor=' + idvendor.options[idvendor.selectedIndex].value+'&catestr=' + textfieldObj.value +'&time='+d.toLocaleString());  
	  //set timer to call function to confirm update 
	  		break;
	  	case 'NRSubject':
	  
		  catestr=document.getElementById('NRCategory').value;
		  LoadXMLDoc('/ajax_requestnewsearch.asp?substr=' + textfieldObj.value+'&catestr=' + catestr +'&time='+d.toLocaleString()); 	
		  break;
		 case 'searchExam':
		  catestr=document.getElementById('searchExam').value;
		  LoadXMLDoc('/ajax_examsubjectsearch.asp?searchstr=' + catestr +'&time='+d.toLocaleString()); 	
		  
		 break;
	  }
	}
	function keyupHandler (evt)
    {
        // make sure we have a valid event variable
        if(!evt && window.event) {
            evt = window.event;
        }
        var key = evt.keyCode;
		if (key ==38 || key == 40 || key == 13 || key == 9) {
            //ignore
            } else {
				
				if(textfieldObj.value != '')
				{
					searchSuggest();
				}
				else
				{
					searchResultObj.style.display="none";
				}
			}
		/*
        if (key < 32 || (key >= 33 && key <= 46) || (key >= 112 && key <= 123)) {
            //ignore
            } else {
            //request suggestions from the suggestion provider
            // Backspace key(8), Delete key (48)
            if (key != 8 && key != 48) {
                searchSuggest();
            }
        }
		*/
        return true;
    }
    
    
    function keypressHandler (evt)
    {
        if(searchResultObj.style.display == "inline")
		{
			// make sure we have a valid event variable
			if(!evt && window.event) {
				evt = window.event;
			}
			var key = evt.keyCode;
			
			// if this key isn't one of the ones we care about, just return
			var KEYUP = 38;
			var KEYDOWN = 40;
			var KEYENTER = 13;
			var KEYTAB = 9;

			switch(key)
			{
				case KEYUP:

					if(selectedIndex > 0)
					{
						searchResultObj.childNodes[selectedIndex].className="suggest_link";
						selectedIndex--;
						searchResultObj.childNodes[selectedIndex].className="suggest_link_over";
					}
					else
					{
						searchResultObj.childNodes[0].className="suggest_link";
						selectedIndex=searchResultObj.childNodes.length-1;
						searchResultObj.childNodes[selectedIndex].className="suggest_link_over";
					}
					break;
				case KEYDOWN:
					if(selectedIndex < searchResultObj.childNodes.length-1)
					{
						if(selectedIndex > -1)
						{
							searchResultObj.childNodes[selectedIndex].className="suggest_link";
						}
						selectedIndex++;
						searchResultObj.childNodes[selectedIndex].className="suggest_link_over";
					}
					else
					{
						searchResultObj.childNodes[selectedIndex].className="suggest_link";
						selectedIndex=0;
						searchResultObj.childNodes[selectedIndex].className="suggest_link_over";
					}
					break;
				case KEYENTER:
					if(selectedIndex>-1)
					{
						if(textfieldObj.id == 'searchExam')
						{
							gotoExamPage(document.getElementById(selectedIndex.toString() + '_href').href);
						}
						else
						{
							setSearch(searchResultObj.childNodes[selectedIndex]);
						}
						hide_suggestion();
						return false;
					}
					break;
				default:
					break;
			}
		}
        
        return true;
    }
	//Mouse over function
	function suggestOver(div_value) {	
	for(i=0; i < searchResultObj.childNodes.length; i++)
	{
		searchResultObj.childNodes[i].className="suggest_link";
	}

	selectedIndex=parseInt(div_value.id);
	div_value.className = 'suggest_link_over';}
	//Mouse out function
	function suggestOut(div_value) {	div_value.className = 'suggest_link';}
	function gotoExamPage(ExamUrl)
	{
		window.top.location=ExamUrl;
	}
	function setSearch(suggestdivobj) 
	{ 
		textfieldObj.value = suggestdivobj.innerHTML;
		searchResultObj.style.display="none";
	}	
	function LoadXMLDoc(url){ 
	  reqXML=null;
	  if (window.XMLHttpRequest){ //Mozilla, Firefox, Opera 8.01, Safari
		reqXML = new XMLHttpRequest(); 
		reqXML.onreadystatechange = BuildXMLResults; 
		reqXML.open("GET", url, true); 
		reqXML.send(null); 
	  }
	  else if(window.ActiveXObject){ //IE
		reqXML = new ActiveXObject("Microsoft.XMLHTTP"); 
		if (reqXML) { 
		  reqXML.onreadystatechange = BuildXMLResults; 
		  reqXML.open("GET", url, true); 
		  reqXML.send(); 
		} 
	  }
	  else{ //Older Browsers
		alert("Your Browser does not support Ajax!");
	  }
	} 
	
	function BuildXMLResults(){
	  if(reqXML.readyState == 4){ //completed state
		if(reqXML.status == 200){ //We got a sucess page back
			eval(reqXML.responseText);					
		}
	  }
	
	}

	function displaySearchResult(objarray,objURLarray,suggestdivname,suggestfieldname)
	{
		
		if(objarray.length > 0)
		{

			searchResultObj.style.display="inline";
			searchResultObj.innerHTML = '';	
			for(i=0; i < objarray.length; i++) 
			{	
				/*
				//Build our element string.  This is cleaner using the DOM, but			//IE doesn't support dynamically added attributes.
				var suggest = '<div onmouseover="javascript:suggestOver(this);" ';			
				suggest += 'onmouseout="javascript:suggestOut(this);" ';			
				suggest += 'onclick="javascript:setSearch(this,\''+textfieldObj.id +'\',\''+searchResultObj.id+'\');" ';			
				suggest += 'class="suggest_link">' + objarray[i] + '</div>';	
				searchResultObj.innerHTML += suggest;		
				*/
				var x1 = document.createElement("div");
				x1.id=i.toString();
				x1.className="suggest_link";
				x1.onmousemove=new Function(textfieldIDName+'.suggestOver(this)');
				//x1.onmouseover=new Function(textfieldIDName+'.suggestOver(this)');
				x1.onclick=new Function(textfieldIDName+'.gotoExamPage(\''+objURLarray[i]+'\')');
				x1.innerHTML='<a href=\''+objURLarray[i]+'\' id=\''+ i.toString()+'_href\'>'+objarray[i]+'</a>';
				searchResultObj.appendChild(x1);
			}
		}
		else
		{
			searchResultObj.style.display="none";
		}

	}
	function displayResult(objarray,suggestdivname,suggestfieldname)
	{
		if(objarray.length > 0)
		{
			searchResultObj.style.display="inline";
			searchResultObj.innerHTML = '';	
			for(i=0; i < objarray.length; i++) 
			{	
				/*
				//Build our element string.  This is cleaner using the DOM, but			//IE doesn't support dynamically added attributes.
				var suggest = '<div onmouseover="javascript:suggestOver(this);" ';			
				suggest += 'onmouseout="javascript:suggestOut(this);" ';			
				suggest += 'onclick="javascript:setSearch(this,\''+textfieldObj.id +'\',\''+searchResultObj.id+'\');" ';			
				suggest += 'class="suggest_link">' + objarray[i] + '</div>';	
				searchResultObj.innerHTML += suggest;		
				*/
				var x1 = document.createElement("div");
				x1.id=i.toString();
				x1.className="suggest_link";
				x1.onmousemove=new Function(textfieldIDName+'.suggestOver(this)');
				//x1.onmouseover=new Function(textfieldIDName+'.suggestOver(this)');
				x1.onclick=new Function(textfieldIDName+'.setSearch(this)');
				x1.innerHTML=objarray[i];
				searchResultObj.appendChild(x1);
			}
		}
		else
		{
			searchResultObj.style.display="none";
		}
	}
	
	function hide_suggestion()
	{
		searchResultObj.style.display="none";
	}
	
	function findPosX(obj)
	{
		var curleft = 0;
		if (obj.offsetParent)
		{
		while (obj.offsetParent)
		{
		curleft += obj.offsetLeft
		obj = obj.offsetParent;
		}
		}
		else if (obj.x)
		curleft += obj.x;
		return curleft;
	}
	
	function findPosY(obj)
	{
		var curtop = 0;
		if (obj.offsetParent)
		{
		while (obj.offsetParent)
		{
		curtop += obj.offsetTop
		obj = obj.offsetParent;
		}
		}
		else if (obj.y)
		curtop += obj.y;
		return curtop; 
		
	}
	
	function SetSuggestLocation()
	{
			var ss = document.getElementById('search_cate_suggest');
			var catefield=document.getElementById('NRCategory');
			ss.style.display="none";
			ss.style.left=  findPosX(catefield)+'px';
			ss.style.top=  findPosY(catefield)+25+'px';
			ss.style.position="absolute";
			var ss2 = document.getElementById('search_sub_suggest');
			var subfield=document.getElementById('NRSubject');
			ss2.style.display="none";
			ss2.style.left=  findPosX(subfield)+'px';
			ss2.style.top=  findPosY(subfield)+25+'px';
			ss2.style.position="absolute";
	
	}
}
	
	
	function showSubjects()
	{
		document.auth.action="?showsubject=1";
		document.auth.submit();
	}
	function ValidateForm(form)
	{
		if(form.action != '')
		{
			return validateEmail(form.CustomerEmail.value);
		}
		else
		{
			return false;
		}
	}
