// JavaScript Document
//dynamic suggestion -Justin
document.onclick=hideSug;
var sitem_index=-1;
var dontSuggest=false;
var curField=null;
var lastItem=null;
var cachedData=new Array();
var gurl="";
var curSugDiv="mySug";
var myAPI=new Array();
var numIndex=-1;
var req_timer;
var myIndexAr=new Array();
var myObjAry=new Array();
var http=getHTTPObject();
//init the suglayer
document.write("<div id=\"mySug\" maxtot=\"0\" class=\"sugDiv\" style=\"display:none;z-index:1;\"></div>");
function initSug(objId,apiURL){
	if(document.getElementById(objId)==null){
		return jsError("Initilization of Suggestion Failed for "+objId);	
	}
	var inObj=document.getElementById(objId);
	inObj.setAttribute("autocomplete","off");
	numIndex++;
	myIndexAr[objId]=numIndex;
	myObjAry[objId]=inObj;
	
	inObj.onkeyup=function(event){
		clearTimeout(req_timer);
		 req_timer = setTimeout(function(event) { getSuggestions(myObjAry[objId],event,myIndexAr[objId]);}, 150);
		  if(trim(this.value)!=""){
		 	scrollItems(myObjAry[objId],event);
		 }
	}
	inObj.ondblclick=function(event){
			 getSuggestions(this,event,myIndexAr[objId]);
	}
	
	cachedData[numIndex]=new Array();
	myAPI[numIndex]=apiURL;
	return numIndex;
}
function jsError(evmsg){
	alert(evmsg);
	return false;
}
function hideSug(){
	document.getElementById(curSugDiv).style.display='none';
}
function setAPI(ggurl){
	gurl=ggurl;
}
function selItem(opt,divObj){
	switch(opt){
	
		case 0:
			divObj.className="sugItem";
			break;
		case 1:
			divObj.className="sugItemSel";
			
			break;
		case 2:
			curField.value=divObj.getAttribute("sTerm");
			document.getElementById(curSugDiv).style.display="none";
			break;
		default:
			return;	
	}
}
function getSuggestions(txtObj,e,apIndex){
	gurl=myAPI[apIndex];
	var myTerm=txtObj.value;
	curField=txtObj;	
	if(trim(myTerm)==""){ hideSuggestion(); return;}
	if(dontSuggest==false){
		var retStr=new Array();
		var url=gurl+myTerm;
		if(typeof(cachedData[apIndex][myTerm])!="undefined"){
			retStr=eval(cachedData[apIndex][myTerm]);
			if(retStr[1].length > 0){
						showSuggestions(txtObj,retStr[1],retStr[0]);
					}else{
						hideSug();	
		}
		}else{		
		
			 http=getHTTPObject();
			http.open("GET", url, true);
			http.send(null);
			http.onreadystatechange = function (){
				
				if(http.readyState==4){
					retStr=eval(http.responseText);
					try{
							cachedData[apIndex][retStr[0]]=http.responseText;
					}catch(e){
							return false;
					}
					
					if(retStr[1].length > 0){
						showSuggestions(txtObj,retStr[1],retStr[0]);
					}else{
						hideSug();	
					}
				}
			}
			
		}
	}
	//scrollItems(txtObj,e);
}
function showSuggestions(txtObj,sugAry,tTerm){

	var tLeft=getLocation2(txtObj)[0];
	var tTop=getLocation2(txtObj)[1];
	var sugBox=document.getElementById(curSugDiv);
	sugBox.style.top=tTop+22+"px";
	sugBox.style.left=tLeft+"px";
	sugBox.style.width=txtObj.style.width;
	var sugStr="";
	
	sugBox.setAttribute("maxtot",sugAry.length);
	for(var i=0;i<sugAry.length;i++){
		var bStr=hiLiteKeyWord(sugAry[i],tTerm);
		sugStr=sugStr+"<div sTerm=\""+sugAry[i]+"\"";
		sugStr=sugStr+" class='sugItem'";
		sugStr=sugStr+" id=\"sitem_"+i+"\" stotal=\""+sugAry.length+"\" onmouseover='selItem(1,this)' onmouseout='selItem(0,this)' onclick='selItem(2,this)'>"+bStr+"</div>";
	}
	sugBox.innerHTML=sugStr;
	sugBox.style.display='';
	sitem_index=-1;
}

function hiLiteKeyWord(wrd,sterm){
		var retStr="";
		try{
				retStr="<b>"+wrd.substr(0,sterm.length)+"</b>"+wrd.substring(sterm.length);
		}catch(e){
				retStr="";
		}
		return retStr;
}

function transformDiv(dObj,sCont){
	var tStr="<div class='tClass'>"+sCont+"</div>"	
	dObj.innerHTML=tStr;
}
function scrollItems(caller,e){
	var keyPressed=handleKeyPress(e);

	if(keyPressed==13){hideSuggestion();return;}
	if(keyPressed==40 || keyPressed==38 ){
		dontSuggest=true;
		var pObj=document.getElementById(curSugDiv);
		pObj.style.display='';
		var maxtot=pObj.getAttribute("maxtot");
		if(keyPressed==40){
				sitem_index++;
				if(sitem_index>8){
					pObj.scrollTop=pObj.scrollHeight;
				}
				if (sitem_index>=maxtot) sitem_index=0;
			}
			if(keyPressed==38){
				sitem_index--;
				if(sitem_index<8){
					pObj.scrollTop=-pObj.scrollHeight;
				}
				if (sitem_index<0) sitem_index=maxtot-1;
			}
		var sIobj=document.getElementById("sitem_"+sitem_index);
		lastItem=sIobj;
		//process the scroll
		if(sitem_index<maxtot && sitem_index>=0){
			for(var j=0;j<maxtot;j++){
				document.getElementById("sitem_"+j).className="sugItem";
			}
			sIobj.className="sugItemSel";
			caller.value=sIobj.getAttribute("sTerm");
		}
		
	}else{
		dontSuggest=false;
	}
}
function hideSuggestion(){
	document.getElementById(curSugDiv).style.display="none";
}
function getLocation2(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return [curleft,curtop];
}
function getHTTPObject() {
  var xmlhttp;
    try {
      xmlhttp = new XMLHttpRequest();
    } catch (e) {
      xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
  
  return xmlhttp;
}
function handleKeyPress(evt) {
  var keyp = (window.event)?event.keyCode:evt.which;
  return keyp;
 }
 
function trim(stringToTrim) {
	return stringToTrim.replace(/^\s+|\s+$/g,"");
}