
//YAHOO.namespace("fessop");
var KEY_ESC = 27;
var KEY_DOWN = 40;
var KEY_UP = 38;
var KEY_ENTER = 13;
var KEY_CTRL = 17;

var NS6=document.getElementById&&!document.all;
var IE=document.all;

var idxSelected_quickquery = -1;

   
function quickQuery(e) {
	var quickQuery = document.getElementById("quickquery").value;
	var idx_split = quickQuery.lastIndexOf('[');
	var prefix = quickQuery.substring(0,idx_split);
	quickQuery = quickQuery.substring(idx_split);
		
	if(quickQuery.length>2) {
		var xhr=null;
		
		updateIdxSelectedQuickQuery(e);
	 
		// ESCAPE: just hide suggestions
		if(e.keyCode == KEY_ESC) { 
			document.getElementById('quickQuery_div').style.display = 'none';
			return;
		}

		//ENTER: tries to validate current selection
		if(e.keyCode == KEY_ENTER) {
			try {
				if(idxSelected_quickquery>-1) {
					var whichdiv = "quickQueryContent_"+idxSelected_quickquery;
					if (IE) quickQuery_validate(eval("document.all."+whichdiv).innerHTML);
					else if (NS6) quickQuery_validate(document.getElementById(whichdiv).innerHTML);
				}
			} catch(err) {}
			return;
		}

		// White background for selected element
		try {
			if (IE && eval('document.all.quickQueryTR_'+idxSelected_quickquery) != null) eval('document.all.quickQueryTR_'+idxSelected_quickquery).style.background = 'white';	
			else if (NS6 && document.getElementById('quickQueryTR_'+idxSelected_quickquery)!= null) document.getElementById('quickQueryTR_'+idxSelected_quickquery).style.background = 'white';	
		} catch(err) {
		}
		
		// DOWN: reset background of upper element
		if(e.keyCode == KEY_DOWN) {
			try {
				document.getElementById('quickQueryTR_'+(idxSelected_quickquery-1)).style.background = '#e2eff8';
			} catch(err) {
			}
			return;
		}	
		// UP: reset background of lower element
		if(e.keyCode == KEY_UP) {
			try {
				document.getElementById('quickQueryTR_'+(idxSelected_quickquery+1)).style.background = '#e2eff8';
			} catch(err) {
			}
			document.getElementById('quickquery').focus();document.getElementById('quickquery').value=document.getElementById('quickquery').value;
			return;
		}		
				
		if (window.XMLHttpRequest) { 
			xhr = new XMLHttpRequest();
		}    else if (window.ActiveXObject)     {
			xhr = new ActiveXObject("Microsoft.XMLHTTP");
		}
		// call back function
		xhr.onreadystatechange = function() { quickQuery_back(xhr,quickQuery,e,prefix); };
		
		// Get the data
		xhr.open("GET", "include/lib/xmler/quickQuery.php?quickquery="+quickQuery, true);
		xhr.send(null);
		//document.getElementById('quickQuery_div').style.display = 'block';
	} else {
		document.getElementById('quickQuery_div').style.display = 'none';
	}
}


// We've got the data, need to take care of that
function quickQuery_back(xhr,quickQuery,e,prefix) {
    if (xhr.readyState==4)     {
    	var docXML= xhr.responseXML;
		if(docXML==null) {
			document.getElementById('quickQuery_div').style.display = 'none';
			return;
		}
    	var items = docXML.getElementsByTagName("data");
		var str2display = "<table>";		
		quickQuery = quickQuery.replace(/([)([A-Z]+)(])/,"").trim();
		for (i=0;i<items.length;i++)	{	
			var styleVariant = "";
			var theText = items.item(i).lastChild.firstChild.data.replace(new RegExp(quickQuery,"gi"),'<span class=\'emm\'>'+quickQuery+'</span>');
			if(i<200)
				str2display += "<tr id='quickQueryTR_"+i+"' class='quickQueryTR'><td class='searchKey'>" + items.item(i).firstChild.firstChild.data + "&nbsp;&nbsp;</td><td style='vertical-align:top;'><a style='color:black;text-decoration:none;' href=\"javascript:quickQuery_validate('"+prefix+items.item(i).firstChild.firstChild.data.replace(/'/g,"\\&#39;")+"')\">"+theText+"</a><span id='quickQueryContent_"+i+"' style='display:none;'>"+prefix+items.item(i).firstChild.firstChild.data+"</span></td></tr>";
			else {
				str2display += "<tr><td></td><td>...</td></tr>";
				break;
			}
    	}	
		str2display += "</table>";
		showText(str2display, 'quickQuery_div');
		
		// Hide suggestions if no results
		if(items.length>0) {
			if(items.length<10)
				document.getElementById('quickQuery_div').style.height = 'auto';
			else
				document.getElementById('quickQuery_div').style.height = '200px';
			document.getElementById('quickQuery_div').style.display = 'block';
		} else {
			document.getElementById('quickQuery_div').style.display = 'none';
		}
	}
}

// Validate the selected element, either by click or [ENTER]
function quickQuery_validate(quickQuery){
	if (IE) eval("document.all.quickquery").value = quickQuery;
	else if (NS6) document.getElementById('quickquery').value = quickQuery;
	document.getElementById('quickquery').focus();document.getElementById('quickquery').value=document.getElementById('quickquery').value;
	document.getElementById('quickQuery_div').style.display = 'none';
	idxSelected_quickquery = -1;
}

// Update index of selected element
function updateIdxSelectedQuickQuery(e) {
	if(document.getElementById('quickQuery_div').style.display == 'block') {
		if(e.keyCode == KEY_ESC)
			idxSelected_quickquery = -1;
		if(e.keyCode == KEY_ENTER)
			idxSelected_quickquery = -1;
		if(e.keyCode == KEY_DOWN)
			idxSelected_quickquery++;
		if(e.keyCode == KEY_UP)
			idxSelected_quickquery--;
		if(idxSelected_quickquery<-1)
			idxSelected_quickquery = -1;
	}
}

// [ENTER] is redirected to avoid submitting the form by pressing [ENTER] when selecting an element from the suggestions
function detectEnterKeyQuickQuery(e) {
	if(document.getElementById('quickQuery_div').style.display == 'none') {
		return true;
	} if(idxSelected_quickquery<0)
		return true;
	if(e.keyCode == KEY_ENTER) {
		document.getElementById('quickQuery_div').style.display = 'none';
		return false;
	}
	return true;
}
