var selectedRow=-1;
var stopSearch=false;
var timerID=0;
var hidePressed=false;


function searchFor(searchForSTR,howManyResults,resultsDelimiter){    		
	var resultElement = document.getElementById('result_1');
	if (searchForSTR!=""){
		xmlHttp=GetXmlHttpObject()
		if (xmlHttp==null){
			alert ("Browser does not support HTTP Request")
			return;
		}else{			
//			var url = "/search.do?searchFor=" + searchForSTR + "&howManyResults=" + howManyResults + "&resultsDelimiter=" + resultsDelimiter;					
			//var url = "/search.do?searchFor=" + searchForSTR + "&resultsDelimiter=" + resultsDelimiter;
			var url = "../common/handleac.php?searchFor=" + searchForSTR +
				      "&resultsDelimiter=" + resultsDelimiter +
				      "&currentTable=UITable_1";
			// 10,'@@@' var url = "/search.do?searchFor=bi&resultsDelimiter=@@@";
			xmlHttp.onreadystatechange=getResults;
			xmlHttp.open("GET",url,true);
			xmlHttp.send(null);
			resultElement.style.visibility="visible";			
		}						
	}else{    			    			
		resultElement.innerHTML="";
		resultElement.style.border = "none";
		resultElement.style.visibility="hidden";				
	}    		
}

function GetXmlHttpObject(handler){ 
	var objXMLHttp=null
	if (window.XMLHttpRequest){
		objXMLHttp=new XMLHttpRequest();
	}
	else if (window.ActiveXObject){
		objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP");
	}
	return objXMLHttp;
}

function getResults(){
	if (stopSearch==true) return;
	if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete"){ 
		var UI = xmlHttp.responseText;
		
		var resultElement = document.getElementById('result_1');		
		resultElement.style.visibility="hidden";
		if (UI!=""){
			resultElement.innerHTML=UI;
			resultElement.style.border="1px solid #7F9DB9";
			resultElement.style.borderTop="none";
			resultElement.style.visibility="visible";
		}
	}
}


function addEvent(elm, evType, fn, useCapture)
// cross-browser event handling for IE5+, NS6+ and Mozilla 
// By Scott Andrew 
{
  if (elm.addEventListener) { 
    elm.addEventListener(evType, fn, useCapture); 
    return true; 
  } else if (elm.attachEvent) { 
    var r = elm.attachEvent('on' + evType, fn); 
    return r; 
  } else {
    elm['on' + evType] = fn;
  }
}

// climb up the tree to the supplied tag.
function ascendDOM(e, target) {
  while (e.nodeName.toLowerCase() != target && 
      e.nodeName.toLowerCase() != 'html')
    e = e.parentNode;
  
  return (e.nodeName.toLowerCase() == 'html') ? null : e;
}

// turn on highlighting
function hi_cell(e) {
  //Remove the selected row from the arrows action:
  var UITable = document.getElementById('UITable_1');
  try{
  	var cl = UITable.childNodes[0].childNodes[selectedRow].className;
	cl = cl.replace(/\b ?hi\b/, ''); 
	UITable.childNodes[0].childNodes[selectedRow].className = cl;
	//parent_row.className = parent_row.className.replace(/\b ?hi\b/, ''); 
	//replace(/\b ?hi\b/, '')
  }catch(err){
  } 
  
  var el;
  if (window.event && window.event.srcElement)
    el = window.event.srcElement;
  if (e && e.target)
    el = e.target;
  if (!el) return;

  el = ascendDOM(el, 'td');
  if (el == null||el.name=='hideTd') return;

  var parent_row = ascendDOM(el, 'tr');
  
  if (parent_row == null) return;

  var parent_table = ascendDOM(parent_row, 'table');
  if (parent_table == null) return;
  
  if (parent_table.id!='UITable_1') return;
  
  // row styling
  parent_row.className += ' hi';
 
  
}

// turn off highlighting
function lo_cell(e) {
  var el;
  if (window.event && window.event.srcElement)
    el = window.event.srcElement;
  if (e && e.target)
    el = e.target;
  if (!el) return;

  el = ascendDOM(el, 'td');
  if (el == null) return;
  
  var parent_row = ascendDOM(el, 'tr');
  if (el == null) return;

  var parent_table = ascendDOM(parent_row, 'table');
  if (el == null) return;
  
  if (parent_table.id!='UITable_1') return;

  // row de-styling
  parent_row.className = parent_row.className.replace(/\b ?hi\b/, '');  
}

function set_cell_in_textbox(e){
	var el;
	if (window.event && window.event.srcElement){
		el = window.event.srcElement;
	}
	if (e && e.target){
		el = e.target;
	}
	if (!el) return;
	
	if (el.id=='search_1'){
		return;
	}
	
	el = ascendDOM(el, 'td');
	if (el == null) return;
  
	var parent_row = ascendDOM(el, 'tr');
	if (el == null) return;

	var parent_table = ascendDOM(parent_row, 'table');
	if (el == null) return;
	
	if (parent_table.id!='UITable_1'){
		try{
			var result = document.getElementById('result_1');
			result.style.visibility="hidden";
		}catch(e){
		}
		return;
	}
	
	//Get the selected TD value
	var tdValue = getTDValue(e);
	//Set the value in the search textbox
	var searchElement = document.getElementById('search_1');
	searchElement.value = tdValue;	
	//searchElement.value = 'boogle';
	var resultElement = document.getElementById('result_1');
	resultElement.style.visibility="hidden";
	searchElement.focus();
}

function getTDValue(e){
	var el;
  if (window.event && window.event.srcElement)
    el = window.event.srcElement;
  if (e && e.target)
    el = e.target;
  if (!el) return;

  el = ascendDOM(el, 'td');  
  if (el == null) return;
    
  var parent_row = ascendDOM(el, 'tr');
  if (el == null) return;

   if (parent_row.id == "RHide"){
  	//return the existing value in the search box
  	return document.getElementById('search_1').value;
  }

  var parent_table = ascendDOM(parent_row, 'table');
  if (el == null) return;
  
  if (parent_table.id!='UITable_1'){
  	//return the existing value in the search box
  	return document.getElementById('search_1').value;
	
  }
  var tdValue = getRowData(el);
 
 return tdValue;  

}

function getRowData(el){
	var tdValue = "";
	if (el.name!="hideTd"){
		try{
			for (i=0;el.childNodes.length>i;i++){
			  	//For the case of inner tag <b>
			  	if (el.childNodes[i].childNodes.length>0){
			  		tdValue+=el.childNodes[i].childNodes[0].nodeValue;
			  	}else if (el.childNodes[i].nodeValue){
			  		tdValue+=el.childNodes[i].nodeValue;  		
			  	}
			}  
		}catch(err){
		}
	}
	if(tdValue==""){
		tdValue = document.getElementById('search_1').value;
	}

	//trim whitespace
	tdValue = tdValue.replace(/^\s*|\s*$/g,'');

    //grab the symbol and exchange from the info string
    var grab = tdValue.match(/^([^\s]*)[^\[]*\[([^\]]*)]/); 

    if(grab.length == 3)
    {
      return grab[1] + ':' + grab[2];
  
    }
    else 
    {
	return tdValue;
    }

}

function hide(){
	document.getElementById('result_1').style.visibility='hidden';
	hidePressed=true;
}



 function selectRow(e){
	
	if (hidePressed==true) return;	
	var key = e.keyCode;
	if (key!=40 && key!=38){
		//Check that the selected key isn't alt, tab...
		if (key==9||key==16||key==17||key==18||key==19||key==20
			||key==27||key==33||key==34||key==35||key==36||key==37
			||key==39||key==44||key==45||key==46){
			return false;
		}
		//In case this is not arrow up/down exit
		if (key==13){
			//On enter hide the result div
			var resultElement = document.getElementById('result_1');
			resultElement.style.visibility="hidden";
			stopSearch=true;
			//The user pressed enter
			//searchProducts();	
			userIsTyping=false;
			return false;		
		}else{
			stopSearch=false;
			//Reset the selected row counter
			selectedRow=-1;			
			if (timerID!=0){
				//User is still typing so cancel the previous timer and set new one
				clearTimeout(timerID);
			}
			timerID = setTimeout(searchAfterTimeout,10);
		}
	}else{
		//In case of arrow up or down select the right row.
		var UITable = document.getElementById('UITable_1');
		if (UITable==null) return true;
		if (key==40){
			//Arrow down pressed
			//Check how many rown in the table
			try{				
				//The 1st node of table is TBODY, afterwords its the TR
				var rowsCount = UITable.childNodes[0].childNodes.length;				
				if (selectedRow<rowsCount-1){								
					selectedRow++;
				}
			}catch(err){
				//alert(err.description);
			}
		}else if (key==38){
			//Arrow up pressed
			if (selectedRow>0){
				selectedRow--;				
			}
		}	
		//Remove the highlighted style of the table rows.
		for(i=0;UITable.childNodes[0].childNodes.length>i;i++){
			if(i == 0){
				UITable.childNodes[0].childNodes[i].className='o';
			} else if(i % 2 == 0){
			    UITable.childNodes[0].childNodes[i].className='o';
			} else {
				UITable.childNodes[0].childNodes[i].className='e';
			}
			
			
		}
		if (selectedRow<0) selectedRow=0;
		//Select the selected row	
		
		UITable.childNodes[0].childNodes[selectedRow].className += ' hi';	
		
		//Set the value of the highlighted row in the search text box
		try{ 
			var highlightedValue = getRowData(UITable.childNodes[0].childNodes[selectedRow].childNodes[0]);		
			document.getElementById('search_1').value = highlightedValue;
			//document.getElementById('search_1').value = 'boogle';  //testing
		}catch(err){
		}
		
	}
	return true;
}


function searchAfterTimeout(){	
	//End the timeout function
	clearTimeout(timerID);
	timerID=0;			
	//Initiate the combobox
	searchFor(document.getElementById('search_1').value,10,'@@@')
	
}



function getEventSourceElement(e){
	var targ;
	if (!e)
	  {
	  var e=window.event;
	  }
	if (e.target)
	  {
	  targ=e.target;
	  }
	else if (e.srcElement)
	  {
	  targ=e.srcElement;
	  }
	if (targ.nodeType==3) // defeat Safari bug
	  {
	  targ = targ.parentNode;
	  }
	return targ;
}

function addListeners() {
	if (!document.getElementsByTagName) return;
  
  	
	var all_cells = document.getElementsByTagName('td');
	try{
		for (var i = 0; i < all_cells.length; i++) {
		    addEvent(all_cells[i], 'mouseover', hi_cell, false);
		    addEvent(all_cells[i], 'mouseout', lo_cell, false);
		    addEvent(all_cells[i], 'click', set_cell_in_textbox, false);        
		}    
	}catch(err){}
	
	try{
		var search = document.getElementById("search_1");
		addEvent(search, 'keyup', selectRow, false);
	}catch(err){}

	  
  
 
}



addEvent(window, 'load', addListeners, false);
