var ajaxBox_offsetX = 0;
var ajaxBox_offsetY = 0;
var ajax_list_externalFile = '';	// Path to external file not required. Maintained for consistency with book code
var minimumLettersBeforeLookup = 1;	// Number of letters entered before a lookup is performed.

var ajax_list_objects = new Array();
var ajax_list_cachedLists = new Array();
var ajax_list_activeInput = false;
var ajax_list_activeItem;
var ajax_list_optionDivFirstItem = false;
var ajax_list_currentLetters = new Array();
var ajax_optionDiv = false;
var ajax_optionDiv_iframe = false;
var lettersentered;
var processupkey=0;

var resultlength = 0;
var booknameslist = new Array();
booknameslist="1849162751###---|".split('|');
var ajaxIndex = 0;
ajax_list_objects[ajaxIndex] = new sack();
var letterstoprocess=0; /* Check if there are unprocessed letters to process in the queue */
var gotodb=1; /*check in database */
var checkeddb=0; /*check if it has gone to db atleast once or not */
var oldletter='zz';
var newletter='zz';
       
	var ajax_list_MSIE = false;
	if(navigator.userAgent.indexOf('MSIE')>=0 && navigator.userAgent.indexOf('Opera')<0)ajax_list_MSIE=true;

	var currentListIndex = 0;

	function ajax_getTopPos(inputObj)
	{

	  var returnValue = inputObj.offsetTop;
	  while((inputObj = inputObj.offsetParent) != null){
	  	returnValue += inputObj.offsetTop;
	  }
	  return returnValue;
	}
	function ajax_list_cancelEvent()
	{
		return false;
	}

	function ajax_getLeftPos(inputObj)
	{
	  var returnValue = inputObj.offsetLeft;
	  while((inputObj = inputObj.offsetParent) != null)returnValue += inputObj.offsetLeft;

	  return returnValue;
	}

	function ajax_option_setValue(e,inputObj)
	{
		document.forms['myform'].elements['objid'].value = '';
		if(!inputObj) 
		{
			//alert("First loop");
			inputObj == this;
			if(e)
			{
				//alert(e.target);
				document.forms['myform'].elements['q'].value = e.target.innerHTML;
				document.forms['myform'].elements['objid'].value = e.target.id;
			}
			else if(inputObj)
			{
				document.forms['myform'].elements['objid'].value = inputObj.id;
			}
		}
	
		if(!inputObj)
		{
			//alert("Second loop");
			sq = document.forms['myform'].elements['q'].value;

			sq = sq.replace(/\s+/g," ");
			sq = trim(sq, '')
			sq = sq.replace(/[^a-zA-Z0-9-]/g,' ');
			sq = sq.replace(/\s+/g,' ');
			sq = sq.replace(/(\s)/g,'+');

			sq = sq.toLowerCase();	
			document.myform.method='post';
			
			var nameinurl=document.forms['myform'].elements['objid'].value;
			if(nameinurl)
			{
				//alert("nameinurl");
				document.myform.action ="http://www.91mobiles.com/"+nameinurl;
			}	
			else	
			{
				//alert("nameinurl two");
				document.myform.action ="http://www.91mobiles.com/topic/"+sq;		
			}	
		}
		
		else
		{
			//alert("Third loop");
			var tmpValue = inputObj.innerHTML;
			if(ajax_list_MSIE)tmpValue = inputObj.innerText;else tmpValue = inputObj.textContent;
			if(!tmpValue)tmpValue = inputObj.innerHTML;
			ajax_list_activeInput.value = tmpValue;
			if(document.getElementById(ajax_list_activeInput.name + '_hidden'))document.getElementById(ajax_list_activeInput.name + '_hidden').value = inputObj.id;

			ajax_options_hide();
			sq = tmpValue;
			sq = sq.replace(/\s+/g," ");
			sq = trim(sq, '')
			sq = sq.replace(/[^a-zA-Z0-9-]/g,' ');
			sq = sq.replace(/\s+/g,' ');
			sq = sq.replace(/(\s)/g,'+');
			sq = sq.toLowerCase();	

			var nameinurl=inputObj.id;
			document.myform.method='post';
			document.myform.action ="http://www.91mobiles.com/"+nameinurl;
			
			if (inputObj.id==-2) 
			{
				window.location = "http://www.91mobiles.com";
			}
			else
			{
				sq = document.forms['myform'].elements['q'].value;
			}
		}	
		document.myform.submit();
	}

	function ajax_options_hide()
	{
		if(ajax_optionDiv)ajax_optionDiv.style.display='none';
		if(ajax_optionDiv_iframe)ajax_optionDiv_iframe.style.display='none';
	}

	function ajax_options_rollOverActiveItem(item,fromKeyBoard)
	{
		var searchbox = document.forms['myform'].elements['q'];
              if (fromKeyBoard) searchbox.value=item.innerHTML;
              if(ajax_list_activeItem)ajax_list_activeItem.className='optionDiv';
		item.className='optionDivSelected';
		ajax_list_activeItem = item;

		if(fromKeyBoard){
			if(ajax_list_activeItem.offsetTop>ajax_optionDiv.offsetHeight){
				ajax_optionDiv.scrollTop = ajax_list_activeItem.offsetTop - ajax_optionDiv.offsetHeight + ajax_list_activeItem.offsetHeight + 2 ;
			}
			if(ajax_list_activeItem.offsetTop<ajax_optionDiv.scrollTop)
			{
				ajax_optionDiv.scrollTop = 0;
			}
		}
	}

	function ajax_option_list_buildList(letters,paramToExternalFile)
	{

		ajax_optionDiv.innerHTML = '';
		ajax_list_activeItem = false;
		if(ajax_list_cachedLists[paramToExternalFile][letters.toLowerCase()].length<=1){
			ajax_options_hide();
			return;
		}

		

		ajax_list_optionDivFirstItem = false;
		var optionsAdded = false;
		for(var no=0;no<ajax_list_cachedLists[paramToExternalFile][letters.toLowerCase()].length;no++){
			if(ajax_list_cachedLists[paramToExternalFile][letters.toLowerCase()][no].length==0)continue;
			optionsAdded = true;
			var div = document.createElement('DIV');
			var items = ajax_list_cachedLists[paramToExternalFile][letters.toLowerCase()][no].split(/###/gi);
			if(ajax_list_cachedLists[paramToExternalFile][letters.toLowerCase()].length==1 && ajax_list_activeInput.value == items[0]){
				ajax_options_hide();
				return;
			}


			div.innerHTML = items[items.length-1];
			div.id = items[0];
			div.className='optionDiv';
			div.onmouseover = function(){ ajax_options_rollOverActiveItem(this,false) }
			div.onclick = ajax_option_setValue;
			if(!ajax_list_optionDivFirstItem)ajax_list_optionDivFirstItem = div;                     
			ajax_optionDiv.appendChild(div);
		}
		if(optionsAdded){
			ajax_optionDiv.style.display='block';
			if(ajax_optionDiv_iframe)ajax_optionDiv_iframe.style.display='';
			// ajax_options_rollOverActiveItem(ajax_list_optionDivFirstItem,true);
		}
if(ajax_optionDiv_iframe)ajax_optionDiv_iframe.style.display='none';

	}

	function ajax_option_list_showContent(ajaxIndex,inputObj,paramToExternalFile,whichIndex)
	{
		if(whichIndex!=currentListIndex)return;
		var letters = inputObj.value;
		var content = ajax_list_objects[ajaxIndex].response;
		<!---------------->
              var content1=content.toLowerCase();
             // content=content.replace(new RegExp( inputObj.value, "gi" ),"<strong>"+inputObj.value+"</strong>");
		var elements = content.split('|');
		
		
/*Populate all the isbn numbers in the drop down into isbn field. If the user submits partial value we know which one to process*/
var isbn_hidden = document.forms['myform'].elements['title_hidden'];
isbn_hidden.value="-1";
var localelement;
for (var contentindex=0;contentindex<elements.length;contentindex++) 
    {
		 var urltext=elements[contentindex].substring(0, elements[contentindex].indexOf('###'));
		 //alert(urltext);
         localelement=elements[contentindex];
         localelement=localelement.split('###');
         isbn_hidden.value=isbn_hidden.value+","+localelement[0];
         if(elements.length==2 && contentindex==0) /*There is only 1 selection in the drop down */
          {
			 
              isbn_hidden.value=localelement[0];
            
			 // var nameinurl=localelement[1].replace(/ /gi,"+").toLowerCase(); 
				sq = localelement[1];
				sq = sq.replace(/\s+/g," ");
				sq = trim(sq, '')
				//sq = sq.replace(/(\s)/g,'-');
				sq = sq.replace(/[^a-zA-Z0-9-]/g,' ');
				//alert(sq);
				sq = sq.replace(/\s+/g,' ');
				//alert(sq);
				sq = sq.replace(/(\s)/g,'+');
				
				sq = sq.toLowerCase();	
						
				var nameinurl=inputObj.id;
			 
			 
              document.myform.method='post';
              document.myform.action ="http://www.91mobiles.com/"+urltext;
			 // document.myform.action ="http://www.91mobiles.com/topic/"+urltext;

          }
      }
                if (elements.length<10 && checkeddb==1 && gotodb==1) 
{ 
// there are less than 10 elements. No need to go to db any more
gotodb=0;
loadmobilelist (content1);

}
		ajax_list_cachedLists[paramToExternalFile][letters.toLowerCase()] = elements;
		ajax_option_list_buildList(letters,paramToExternalFile);
		if (letterstoprocess==1 && gotodb==1) {letterstoprocess=0;	ajax_list_objects[ajaxIndex].runAJAX();	}

	}

	function ajax_option_resize(inputObj)
	{
		ajax_optionDiv.style.top = (ajax_getTopPos(inputObj) + inputObj.offsetHeight + ajaxBox_offsetY) + 'px';
		ajax_optionDiv.style.left = (ajax_getLeftPos(inputObj) + ajaxBox_offsetX) + 'px';
		if(ajax_optionDiv_iframe){

			ajax_optionDiv_iframe.style.left = ajax_optionDiv.style.left;
			ajax_optionDiv_iframe.style.top = ajax_optionDiv.style.top;
		}

	}

	function ajax_showOptions(inputObj,paramToExternalFile,e)
	{
              
              var localsearchbox = document.forms['myform'].elements['q'];
			  
              var localsearchboxvalue = trim(localsearchbox.value);
			
			  //if (localsearchboxvalue=="") { ajax_options_hide(); return; } /* Hide the dropdown if there is no value in the text box */
              if(e.keyCode==13) { // document.myform.submit(); 
					
						var sq = localsearchbox.value;
						//alert(sq);
						sq = sq.replace(/\s+/g," ");
						sq = trim(sq, '')
						//sq = sq.replace(/(\s)/g,'-');
						sq = sq.replace(/[^a-zA-Z0-9-]/g,' ');
						//alert(sq);
						sq = sq.replace(/\s+/g,' ');
						//alert(sq);
						sq = sq.replace(/(\s)/g,'+');
						
						sq = sq.toLowerCase();	
						var nameinurl=inputObj.id;
						//document.location.href ="http://www.91mobiles.com/topic/"+nameinurl;
						//document.myform.action ="http://www.91mobiles.com/topic/"+nameinurl;
			  
			  
			  } 
		if(e.keyCode==13 || e.keyCode==9 ||  e.keyCode==40 )return;
              if ( e.keyCode==38) return; 
              lettersentered=inputObj.value; 
		if(ajax_list_currentLetters[inputObj.name]==inputObj.value)return;
		if(!ajax_list_cachedLists[paramToExternalFile])ajax_list_cachedLists[paramToExternalFile] = new Array();
		ajax_list_currentLetters[inputObj.name] = inputObj.value;
		if(!ajax_optionDiv){
			ajax_optionDiv = document.createElement('DIV');
			ajax_optionDiv.id = 'ajax_listOfOptions';
			document.body.appendChild(ajax_optionDiv);

			if(ajax_list_MSIE){
				ajax_optionDiv_iframe = document.createElement('IFRAME');
				ajax_optionDiv_iframe.border='0';
				ajax_optionDiv_iframe.style.width = ajax_optionDiv.clientWidth + 'px';
				ajax_optionDiv_iframe.style.height = ajax_optionDiv.clientHeight + 'px';
				ajax_optionDiv_iframe.id = 'ajax_listOfOptions_iframe';

				document.body.appendChild(ajax_optionDiv_iframe);
			}

			var allInputs = document.getElementsByTagName('INPUT');
			for(var no=0;no<allInputs.length;no++){
				if(!allInputs[no].onkeyup)allInputs[no].onfocus = ajax_options_hide;
			}
			var allSelects = document.getElementsByTagName('SELECT');
			for(var no=0;no<allSelects.length;no++){
				allSelects[no].onfocus = ajax_options_hide;
			}

			var oldonkeydown=document.body.onkeydown;
			if(typeof oldonkeydown!='function'){
				document.body.onkeydown=ajax_option_keyNavigation;
			}else{
				document.body.onkeydown=function(){
					oldonkeydown();
				ajax_option_keyNavigation() ;}
			}
			var oldonresize=document.body.onresize;
			if(typeof oldonresize!='function'){
				document.body.onresize=function() {ajax_option_resize(inputObj); };
			}else{
				document.body.onresize=function(){oldonresize();
				ajax_option_resize(inputObj) ;}
			}

		}

		if(inputObj.value.length<minimumLettersBeforeLookup){
			ajax_options_hide();
			return;
		}


		ajax_optionDiv.style.top = ((ajax_getTopPos(inputObj) + inputObj.offsetHeight + ajaxBox_offsetY)+7) + 'px';
		ajax_optionDiv.style.left = ((ajax_getLeftPos(inputObj) + ajaxBox_offsetX)-3) + 'px';
		if(ajax_optionDiv_iframe){
			ajax_optionDiv_iframe.style.left = ajax_optionDiv.style.left;
			ajax_optionDiv_iframe.style.top = ajax_optionDiv.style.top;
		}

		ajax_list_activeInput = inputObj;
		ajax_optionDiv.onselectstart =  ajax_list_cancelEvent;
		currentListIndex++;
		if(ajax_list_cachedLists[paramToExternalFile][inputObj.value.toLowerCase()]){
			ajax_option_list_buildList(inputObj.value,paramToExternalFile,currentListIndex);
		}else{
			var tmpIndex=currentListIndex/1;
			ajax_optionDiv.innerHTML = '';
			// var ajaxIndex = ajax_list_objects.length;

 newletter=inputObj.value.toLowerCase();
//alert ('new letter is'+newletter);
if (oldletter=='zz')  oldletter=newletter;
var lettertocheck=oldletter;
var checkexp = new RegExp(lettertocheck);
  var change = checkexp.exec(newletter);
 if (change == null) {
 gotodb=1; 
 checkeddb=0; 
 oldletter='zz';
 newletter='zz';
resultlength=0;
} 
oldletter=newletter;
//var ajaxIndex = 0;
ajaxIndex = 0;
//alert(gotodb);
// First try to build the list from the inmemory array
	if (!ajax_list_objects[ajaxIndex])	ajax_list_objects[ajaxIndex] = new sack();
ajax_list_objects[ajaxIndex].response ="";
var checkforspace=inputObj.value.toLowerCase();
if (checkforspace.indexOf(" ")== -1) { /* There is only 1 word */
expressiontocheck="###"+inputObj.value.toLowerCase();
expressiontocheck1=" "+inputObj.value.toLowerCase();
var re = new RegExp(expressiontocheck);
var re1 = new RegExp(expressiontocheck1);
var len=booknameslist.length;
var setstart=0;
for (var i=0,count=0;i<len;i++){
 if (gotodb==0 && setstart==0) { i=len-resultlength; setstart=1; }
  var m = re.exec(booknameslist[i].toLowerCase());
  var n = re1.exec(booknameslist[i].toLowerCase());
  if ((m == null)&&(n==null)) {
    
//  alert("No match");
  } else {
count++;
ajax_list_objects[ajaxIndex].response =ajax_list_objects[ajaxIndex].response+booknameslist[i]+"|";
  }
if (count>9) i=250000;
}
} /* end of There is only 1 word */
else { /* Else There is only 1 word */
var checkforspace_array=checkforspace.split(" ");
var checkforspace_length=checkforspace_array.length;
var checkforspace_count_num=0;
var len=booknameslist.length;
var setstart=0;
for (var i=0,count=0;i<len;i++){
	
var localbooknameslist = booknameslist[i].toLowerCase();
for (var word_index=0;word_index<checkforspace_length;word_index++){
expressiontocheck="###"+checkforspace_array[word_index];
expressiontocheck1=" "+checkforspace_array[word_index];
var re = new RegExp(expressiontocheck);
var re1 = new RegExp(expressiontocheck1);
  var m = re.exec(localbooknameslist);
  var n = re1.exec(localbooknameslist);
  if ((m == null)&&(n==null)) {
    
//  alert("No match");
  } else {
checkforspace_count_num++; 
localbooknameslist = localbooknameslist.replace (checkforspace_array[word_index], "");
  }
}
if (checkforspace_count_num==checkforspace_length) {
count++; 
ajax_list_objects[ajaxIndex].response =ajax_list_objects[ajaxIndex].response+booknameslist[i]+"|";
}
checkforspace_count_num=0;
if (count>9) i=250000;
} /* end of for */
} /* end of else of There is only 1 word */
//if (count==0) ajax_list_objects[ajaxIndex].response = '-2###<a href="http://91mobiles.com/index_book.php">There are no matching mobiles for your search term. You may be trying to search for a book. Request you to select the book tab as the book search has been moved</a>|';
//count++;
if (count>0 || gotodb==0)ajax_option_list_showContent(ajaxIndex,inputObj,paramToExternalFile,tmpIndex);
else {
/*Populate all the isbn numbers in the drop down into isbn field. If the user submits partial value we know which one to process*/
var isbn_hidden = document.forms['myform'].elements['title_hidden'];
isbn_hidden.value="-1";
}

           } // end of count<5

	}

	function ajax_option_keyNavigation(e)
	{
		if(document.all)e = event;

		if(!ajax_optionDiv)return;
		if(ajax_optionDiv.style.display=='none')return;

		if(e.keyCode==38){	// Up arrow
			if(!ajax_list_activeItem) return; 
			if(ajax_list_activeItem && !ajax_list_activeItem.previousSibling){var searchbox = document.forms['myform'].elements['q'];
              searchbox.value=lettersentered; return; }
			ajax_options_rollOverActiveItem(ajax_list_activeItem.previousSibling,true);
		}

		if(e.keyCode==40){	// Down arrow
			if(!ajax_list_activeItem){
				ajax_options_rollOverActiveItem(ajax_list_optionDivFirstItem,true);
			}else{
				if(!ajax_list_activeItem.nextSibling)return;
				ajax_options_rollOverActiveItem(ajax_list_activeItem.nextSibling,true);
			}
		}

		if(e.keyCode==13 || e.keyCode==9){	// Enter key or tab key
			if(ajax_list_activeItem && ajax_list_activeItem.className=='optionDivSelected')
			{
				ajax_option_setValue(false,ajax_list_activeItem);
			}	
			if(e.keyCode==13)
			{
				ajax_option_setValue(false,ajax_list_activeItem);
			}	
			else return true;
			//return true;
		}
		if(e.keyCode==27){	// Escape key
			ajax_options_hide();
		}
	}


	document.documentElement.onclick = autoHideList;

	function autoHideList(e)
	{
		if(document.all)e = event;

		if (e.target) source = e.target;
			else if (e.srcElement) source = e.srcElement;
			if (source.nodeType == 3) // defeat Safari bug
				source = source.parentNode;
		if(source.tagName.toLowerCase()!='input' && source.tagName.toLowerCase()!='textarea')ajax_options_hide();

	}

	function populatebooknameslist(content)
	{	
		
        var localbooknameslist = new Array();
// alert(content);
		/*urltext=content.split("###");
		alert(urltext);*/
        localbooknameslist = content.split("|");
  	 	
		
	   var len=booknameslist.length;
        
		for (var i=0,locallen=localbooknameslist.length;i<locallen;i++) 
        { 
			var urltext=localbooknameslist[i].substring(0, localbooknameslist[i].indexOf('###'));
			//alert(urltext);
			
            booknameslist[len]= localbooknameslist[i];
            len++;
        if (gotodb==0) resultlength++;


         }
		
       }
function trim(stringToTrim) {
	return stringToTrim.replace(/^\s+|\s+$/g,"");
}
function trim(str, chars) {
	return ltrim(rtrim(str, chars), chars);
}

function ltrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}

function rtrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}

