//Gets the browser specific XmlHttpRequest Object
function getXmlHttpRequestObject() {
	if (window.XMLHttpRequest) {
		return new XMLHttpRequest();
	} else if(window.ActiveXObject) {
		return new ActiveXObject("Microsoft.XMLHTTP");
	} else {
		alert("Your Browser Sucks!\nIt's about time to upgrade don't you think?");
	}
}

//Our XmlHttpRequest object to get the auto suggest
var searchReq = getXmlHttpRequestObject();
var inputID;
var suggestID;

//Called from keyup on the search textbox.
//Starts the AJAX request.
function searchSuggest(start, iid) {
//        if(! inputID) {inputID = 'txtSearch';}
        inputID = iid;
//        alert(start + iid);
	if (searchReq.readyState == 4 || searchReq.readyState == 0) {

		var dbname = document.getElementById('dbname').value;
		var includePseduo = document.Search.Include_Pseudogenes.checked;

		var spnames = document.getElementsByName('sp');
               var spnameStr = '';
               for (i=0; i<spnames.length; i++) 
              { 
                   if(document.Search.sp[i].checked)
                   {
                        spnameStr += spnames[i].value + '^'; 
                   }

               }
            
         

//		var str = document.getElementById('txtSearch').value;
		var str = document.getElementById(inputID).value;


//                var strs = str.split(/\,\s*/);
                var strs = str.split(/\s+/);
		for(i=0; i <= strs.length - 1; i++) 
                {
                       if(/^\s*$/.test(strs[i]))
                       {
                             return;
                       }
                }
                var searchStr = strs[strs.length - 1];



//		searchReq.open("GET", 'searchSuggest.php?search=' + str, true);
                if(start)
                {
		     searchReq.open("GET", '/cgi-bin/common/kinasedb_getgene.pl?query=' + searchStr + '&start=' + start + '&db=' + dbname + '&sp=' + spnameStr + '&field=' + inputID + '&incps=' + includePseduo, true);
                }
                else
                {
		     searchReq.open("GET", '/cgi-bin/common/kinasedb_getgene.pl?query=' + searchStr + '&db=' + dbname + '&sp=' + spnameStr + '&field=' + inputID + '&incps=' + includePseduo, true);
                }
		searchReq.onreadystatechange = handleSearchSuggest; 
		searchReq.send(null);
	}		
}

//Called when the AJAX response is returned.
function handleSearchSuggest() {
        var newtxtstrs = '';
        var steps = 20;
        if(inputID == 'txtSearch')
        {
             suggestID = 'search_suggest';
//             steps = 10;
        }
        else if(inputID == 'domainSearch')
        {
             suggestID = 'domain_suggest';
        }
        else if(inputID == 'groupSearch')
        {
             suggestID = 'group_suggest';
        }
        else if(inputID == 'familySearch')
        {
             suggestID = 'family_suggest';
        }
        else if(inputID == 'subfamilySearch')
        {
             suggestID = 'subfamily_suggest';
        }
     

	if (searchReq.readyState == 4) {
		var txtstr = document.getElementById(inputID).value;
                var txtstrs = txtstr.split(/\s+/);
		for(i=0; i <= txtstrs.length - 2; i++) 
                {
                     if(i == txtstrs.length - 2)
                     {
                          newtxtstrs += txtstrs[i];
                     }
                     else
                     {
                          newtxtstrs += txtstrs[i] + " ";
                     }
                }
	        document.getElementById(suggestID).style.visibility = "visible";

		var str = searchReq.responseText.split(/\n+/);
                var totalHits = str[0];
                var currentStart = str[1];
                var pulldown_html = '';
		for(i=2; i <= str.length - 1; i++) {
			//Build our element string.  This is cleaner using the DOM, but
			//IE doesn't support dynamically added attributes.
                        var suggest = '';
			suggest = '<div onmouseover="javascript:suggestOver(this);" ';
			suggest += 'onmouseout="javascript:suggestOut(this);" ';
			suggest += 'onclick="javascript:setSearch2(this.innerHTML, \'' + newtxtstrs + '\');"';
			suggest += 'class="suggest_link">' + str[i] + '</div>';
//			ss.innerHTML += suggest;
                        pulldown_html += suggest;
		}
//		var ss = document.getElementById('search_suggest');
		var ss = document.getElementById(suggestID);
                ss.innerHTML = '';
		ss.innerHTML = pulldown_html;

//                var nextStart = eval(currentStart) + eval(20);
//                var prevStart = eval(currentStart) - eval(20);
                var nextStart = eval(currentStart) + eval(steps);
                var prevStart = eval(currentStart) - eval(steps);

                if(nextStart > totalHits && prevStart >= 0)
                {
//                     ss.innerHTML += '<A id=nextsearch href="\#" onclick="javascript:searchSuggest(' + prevStart + ');return false;\">' +  '<<<'  + '</A>' + '(total ' + totalHits + ' hits)' ;
                     ss.innerHTML += '<A id=nextsearch href="\#" onclick="javascript:searchSuggest(' + prevStart + ', \'' + inputID + '\');return false;\">' +  '<<<'  + '</A>' + '(total ' + totalHits + ' hits)' ;
                }
                else if(nextStart <= totalHits && prevStart >= 0)
                {
//                     ss.innerHTML += '<A id=nextsearch href="\#" onclick="javascript:searchSuggest(' + prevStart + ');return false;\">' +  '<<<'  + '</A>' + '(total ' + totalHits + ' hits)' + '<A id=nextsearch href="\#" onclick="javascript:searchSuggest(' + nextStart + ');return false;\">' +  '>>>'  + '</A>';
                     ss.innerHTML += '<A id=nextsearch href="\#" onclick="javascript:searchSuggest(' + prevStart + ', \'' + inputID + '\');return false;\">' +  '<<<'  + '</A>' + '(total ' + totalHits + ' hits)' + '<A id=nextsearch href="\#" onclick="javascript:searchSuggest(' + nextStart + ', \'' + inputID + '\');return false;\">' +  '>>>'  + '</A>';
                }
                else if(nextStart > totalHits && prevStart < 0)
                {
                }
                else if(nextStart <= totalHits && prevStart < 0)
                {
//                     ss.innerHTML += '(total ' + totalHits + ' hits)' + '<A id=nextsearch href="\#" onclick="javascript:searchSuggest(' + nextStart + ');return false;\">' +  '>>>'  + '</A>';
                     ss.innerHTML += '(total ' + totalHits + ' hits)' + '<A id=nextsearch href="\#" onclick="javascript:searchSuggest(' + nextStart + ', \'' + inputID + '\');return false;\">' +  '>>>'  + '</A>';
                }

	}
}

//Mouse over function
function suggestOver(div_value) {
	div_value.className = 'suggest_link_over';
}
//Mouse out function
function suggestOut(div_value) {
	div_value.className = 'suggest_link';
}
//Click function
function setSearch(value ) {
	document.getElementById('txtSearch').value = value;
	document.getElementById('search_suggest').innerHTML = '';
}

function setSearch2(value, oldstrval) {
        if(oldstrval)
        {
//	     document.getElementById('txtSearch').value = oldstrval + " " + value + " ";
	     document.getElementById(inputID).value = oldstrval + ", " + value + " ";
        }
        else
        {
//	     document.getElementById('txtSearch').value = value + " " ;
	     document.getElementById(inputID).value = value + " " ;
        }
//	document.getElementById('search_suggest').innerHTML = '';
//	document.getElementById('search_suggest').style.visibility = "hidden";
//	document.getElementById('txtSearch').focus();
	document.getElementById(suggestID).innerHTML = '';
	document.getElementById(suggestID).style.visibility = "hidden";
	document.getElementById(inputID).focus();
}

function hidesuggest()
{
//	document.getElementById('search_suggest').innerHTML = '';
//	document.getElementById('search_suggest').style.visibility = "hidden";
	document.getElementById(suggestID).innerHTML = '';
	document.getElementById(suggestID).style.visibility = "hidden";
}
