/* Parameters----------------------------------------- */
var numSuggestCols = 2;  // Number of cloumns 
var maxSuggestItems = 6; // Maximum number of suggestions to be displayed
var minSuggestChar=3;	 // Minimum number of characters required to start sugessting
/* End Parameters----------------------------------------- */
var qStrList=new Array();
var xhrObj=false;
var fldQueryVal="";
var prevQueryVal="";
function getSuggestionURLStr(){
	return document.frmSearch.Query.value +".txt";
	
}
function initSearch(){
	addEL(document.frmSearch.Query,"keyup",startSuggest,false);	 

}

function goTo(query ) {
	query=encodeURIComponent(query);
	url = "http://shop.rediff.com/shop/searchv3.jsp?Query="+query;
	//document.getElementById("searchresult").style.visibility="hidden";
	window.parent.location.href=url;
}
function startSuggest(evt){
	//alert("vikas bansal1");
	var evtKey,tgtElement;
	if(window.event){
		evtKey=window.event.keyCode;
		tgtElement=window.event.srcElement;
	}else{
		evtKey=evt.keyCode;
		tgtElement=evt.target;
	}
	if((evtKey>=49 && evtKey<=221) || evtKey==8 || evtKey==32){

		fldQueryVal = tgtElement.value;
			if(fldQueryVal!=""){
				if(fldQueryVal!=prevQueryVal){
					
					fldQueryVal = trimString(fldQueryVal);
					if(fldQueryVal.length >= minSuggestChar ){
						 getSuggestion(fldQueryVal);
					}
					prevQueryVal=fldQueryVal;					
				}
			}else{ 
				document.getElementById("div_suggestions").innerHTML=document.getElementById("divS_rediff_default").innerHTML;
				prevQueryVal="";
			}	
	}
}

function getSuggestion(fval){

	var qStr=getCleanStr(fval);
	if(typeof qStrList[prevQueryVal] != "undefined"){
	// Check for data for the current search string in the  previously suggested data
		var tempData= checkExistingSuggestions(qStr)
		if(tempData != null){
			qStrList[qStr] = tempData;
		}
	}
	if(typeof qStrList[qStr] == "undefined"){
	// Suggest data doesnot exist on the client and has to be feteched from the server	
			var sURLStr= getSuggestionURLStr();
			//loadSuggestData(fval,u);
			// call CGI script here 
			callSuggest(qStr)
			//showSuggestion(qStr,"asd|asdfff|asdadssda|asdasd")
			// call back function  for the CGI would be remoteCallback()

	}else{
	// If data for entered search string is already available in the suggest array and has been already suggested before
		showSuggestion(qStr,null);
		return;
	}

}
function remoteCallback(sData){
		//alert("in remote Callback of main - " +   document.frmSearch.Query.value +" , "+ sData );

		showSuggestion(document.frmSearch.Query.value, sData);
		//removeScript('rs');
}
function showSuggestion(qStr,sData){

	var allSuggestionsTab = document.getElementById("div_suggestions_all");
	var tempObj = document.getElementById("div_suggestions");
	tempObj.innerHTML  = "";	

	if(sData == null){
		//if(document.getElementById("divS_"+qStr) != "null"){
		if(!document.getElementById("divS_"+qStr)){
			//alert(document.getElementById("divS_"+qStr).innerHTML);
			allSuggestionsTab.appendChild(createNewSTable(qStr));
		}			
	}else{	
		qStrList[qStr]=sData; // add new search data to the data array
		allSuggestionsTab.appendChild(createNewSTable(qStr));
	}

	tempObj.innerHTML  =  document.getElementById("divS_"+qStr).innerHTML;
	//remove script or cache it...

}
function noSuggestions(){
		var tempObj = document.getElementById("div_suggestions");
		tempObj.innerHTML  = "";	
}
function checkExistingSuggestions(qStr){
	var tempData="";
	var tempStr="";
	var count=0;
	var sArray = new Array();
	sArray = qStrList[prevQueryVal].split("|");
	for (i=0; i <sArray.length; i++){
		tempStr=sArray[i].toLowerCase();
			if(tempStr.match(qStr)){
			tempData = tempData + getCleanStr(sArray[i]) + "|";
			count++;
		}	
	}
	if(count >= maxSuggestItems) return tempData
	else return null;
}


function createNewSTable(qStr){
	var sA = new Array();
	sA = qStrList[qStr].split("|");
	var d=document.createElement("div");
	d.setAttribute("id","divS_"+qStr);
	var t=document.createElement("table");
	t.setAttribute("id","idT_"+qStr);
	t.className="suggestTab";
	d.appendChild(t);
	var tb=document.createElement("tbody");
	tb.setAttribute("id","idTB_"+qStr);
	t.appendChild(tb);
	var newRow,cell;
	var counter = maxSuggestItems;
	newRow =  tb.insertRow(tb.rows.length);
	cell = newRow.insertCell(0);
	cell.setAttribute("width" , 4);
	cell = newRow.insertCell(1);
	//cell.innerHTML="<font color=#ff6600><B>Are you looking for:</B></font>";
	newRow =  tb.insertRow(tb.rows.length);
	cell = newRow.insertCell(0);
	cell.setAttribute("width" , 4);
	cell = newRow.insertCell(1);
	var resulthtml= "";
	for (i=0; i <sA.length; i++){
		if(sA[i]){
			resulthtml =resulthtml+ "<b><a class=\"sb2\" href='javascript:goTo(\""+getCleanStr(sA[i])+"\")'>"+getCleanStr(sA[i]) +"</b><\/a> ";
			counter--;
			
			if(counter == 0){
				break;
			}else {
				resulthtml =resulthtml+ ",";
			}
		}
	}
	cell.innerHTML = resulthtml;
	return   d;
}
function xcreateNewSTable(qStr){

		var sA = new Array();
		sA = qStrList[qStr].split("|");
		var d=document.createElement("div");
		d.setAttribute("id","divS_"+qStr);
		var t=document.createElement("table");
		t.setAttribute("id","idT_"+qStr);
		t.className="suggestTab";
		d.appendChild(t);
		var tb=document.createElement("tbody");
		tb.setAttribute("id","idTB_"+qStr);
		t.appendChild(tb);
		var newRow,cell;
		var counter = maxSuggestItems;
		for (i=0; i <sA.length; i++){
			newRow =  tb.insertRow(tb.rows.length);			
			for(j=0; j<numSuggestCols;j++){
				if(sA[i]){
					cell = newRow.insertCell(j);
					cell.innerHTML = "<a href=\'"+getCleanStr(sA[i]) + "\'>"+getCleanStr(sA[i]) +"<\/a>";i++
					cell.className="suggestTabTd " +numSuggestCols+ "col";
					counter--;
					if(counter == 0){	

						return d;
					}
				}	
			}
			i--;
		}

		return   d;
//alert(d)

}

function getCleanStr(qStr) {
  var re = new RegExp("'");
  qStr = qStr.replace(re,"");
  return qStr;
}

function addEL(eObj,evtType,fn,c){
	if(eObj.addEventListener){
		eObj.addEventListener(evtType,fn,c);
	}else if(eObj.attachEvent){
		eObj.attachEvent("on"+evtType,fn);
	}
}
function removeEL(eObj,evtType,fn,c){
	if(eObj.removeEventListener){
		eObj.removeEventListener(evtType,fn,c);
	}else{
		eObj.detachEvent("on"+evtType,fn);
	}
}


function trimString (str) {
  //str = this != window? this : str;
  return str.replace(/^\s+/g, '').replace(/\s+$/g, '');
}

//remote scripting functions-------------------------------------------------
function callSuggest(qStr){
	//alert(typed);
	if(qStr != "")	{
		var remoteScript=document.createElement('script'); 
		remoteScript.id = 'rs'; 
		remoteScript.setAttribute('type','text/javascript'); 
		remoteScript.setAttribute('src','http://59.160.240.205/cgi-bin/ecommsearch/6.cgi?q='+ qStr ); 
		//remoteScript.setAttribute('src','RemotePages/suggestor_'+ qStr +'.js'); 

		var hd=document.getElementsByTagName('head')[0]; 
		// Gotcha: set attribute and src BEFORE appending, or Safari won't work 
		hd.appendChild(remoteScript);
		//alert(hd.innerHTML);
		//remoteScript.onload = nowSuggest;
		//nowSuggest();
		//remoteScript.onload = doStuffWith();
	}
}
function removeScript(id){ 
	var hd=document.getElementsByTagName('head')[0]; 
	alert(document.getElementById(id));
	hd.removeChild(document.getElementById(id)); 
	alert("after");
} 
