//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("Browswer not supported.");
	}
}

//Our XmlHttpRequest object to get the auto suggest
var searchReq = getXmlHttpRequestObject();

//Submission Throttling
var latestSearchCriteria = '';
var THROTTLE_PERIOD = 500; 
var timeoutId = 0;

//Starts the AJAX request.
//  This function calls itself every THROTTLE_PERIOD and makes the 
//  AJAX call only when the search criteria has changed
function searchSuggest() {	
	var str = escape(document.getElementById('txtSearch').value);
	var stype = escape(document.getElementById('landingtype').value);
	
	// Only make AJAX call when search criteria has changed
	if(str != latestSearchCriteria && str != ''){
		if ((searchReq.readyState == 4 || searchReq.readyState == 0) && running) { 
			searchReq.open("GET", '/searchsuggest/searchSuggest.php?Type=' + stype + '&search=' + str, true);
			latestSearchCriteria = str;
			searchReq.onreadystatechange = handleSearchSuggest;
			cursor = -1;
			searchReq.send(null);
		}
	}timeoutId = setTimeout('searchSuggest();', THROTTLE_PERIOD); 
}

//Called when the AJAX response is returned.
function handleSearchSuggest() {
	if (searchReq.readyState == 4) {
		var ss = document.getElementById('search_suggest');
		var txtbox = document.getElementById('txtSearch');

		//create new dropdown box
		ss.innerHTML = '';
		ss.style.visibility='visible';
		
		//position the dropdown box
		ss.style.left = getElementLeft(txtbox) + "px";
   		ss.style.top = (getElementTop(txtbox) + txtbox.offsetHeight) + "px";
		
		//alert(txtbox.offsetParent);
		
		var str = searchReq.responseText.split("\n");
		suggest_list_length = str.length - 1;
		for(i=0; i < suggest_list_length; i++){

			var details = str[i].split("\t");
		//  To add Mouse rollovers uncomment lines 60 and 61 and comeent 62 and 63 - BH	
			var suggest = '<div id="'+ i + '" onmouseover="javascript:stopSearchSuggest();suggestOut(getCurrentSuggestElement());suggestOver(this);cursor='+ i +';" ';
			suggest += 'onmouseout="javascript:suggestOut(this);" ';
		//	var suggest = '<div id="'+ i + '"';
		//	suggest += '';
			suggest += 'onclick="javascript:setSearch(getCurrentSuggestElement().firstChild.id);closeSuggestions();submitSearch();" ';
			suggest += 'class="suggest_link"><span class="boldSymbol" id="' + details[0] +'">'+ details[0] +'</span><span class="fund_name" id="'+ details[1] +'">'+details[1]+'</span></div>';
			
			if(details[0] == 'Try Again'){
				suggest='';
				suggest += '<div id="'+ (i) + '" onClick="closeSuggestions();document.SearchSymbol.fund.focus();" onmouseover="stopSearchSuggest();suggestOut(getCurrentSuggestElement());suggestOver(this);cursor='+ i +';" onmouseout="javascript:suggestOut(this);" class="suggest_link"><span class="boldSymbol">'+details[0]+'</span><span class="fund_name">'+details[1]+'</span></div>';
			}
			ss.innerHTML += suggest;
		}
		i++;

		document.getElementById('searchCategory').style.visibility='hidden';
		document.getElementById('searchCategory_Class').style.visibility='hidden';		

	}
}

var cursor = -1;
var suggest_list_length = 0;

function submitSearch(){
	document.SearchSymbol.submit();
}

function processKeystroke(keyPressed){
	switch(keyPressed) {
        case 37: //left arrow
			// do nothing
			break;
        case 39: //right arrow
			// do nothing
			break;
        case 38: //up arrow
			running = false; //don't continue AJAX calls if arrow is pressed
			stopSearchSuggest(); // need to stop the suggestSearch loop so we can populate the textbox with the hover element
			suggestOut(getCurrentSuggestElement());
			if(cursor > 0){cursor--;}
			suggestOver(getCurrentSuggestElement());
            break;
        case 40: //down arrow
			running = false;
			stopSearchSuggest(); // need to stop the suggestSearch loop so we can populate the textbox with the hover element
			if(cursor >=0){suggestOut(getCurrentSuggestElement());}
			if(cursor < suggest_list_length - 1){cursor++;}
			suggestOver(getCurrentSuggestElement());
			break;
		case 9: // tab
			closeSuggestions();
			break;
		case 13:
			setSearch(getCurrentSuggestElement().firstChild.id);
			closeSuggestions();
			submitSearch();
		break;
		default:
			if(!running){startSearchSuggest();}
			break;
	}
}

var running=true;

//Mouse over function
function suggestOver(div_value) {
	if(cursor >= 0){
		div_value.className = 'suggest_link_over';
		setSearch(getCurrentSuggestElement().firstChild.id);
	}
}

//Mouse out function
function suggestOut(div_value) {
	if(cursor >= 0){ 
		div_value.className = 'suggest_link';
	}
}

//Click function
function setSearch(value) {
	document.getElementById('txtSearch').value = value;
	if(running){stopSearchSuggest();}
}

//Close suggestions window
function closeSuggestions(){
	if(running){stopSearchSuggest();}
	document.getElementById('search_suggest').innerHTML = '';
	document.getElementById('search_suggest').style.visibility='hidden';
	document.getElementById('searchCategory').style.visibility='visible';
	document.getElementById('searchCategory_Class').style.visibility='visible';			
	document.getElementById('txtSearch').blur();
}

//Get suggestion element the cursor is currently on
function getCurrentSuggestElement(){
	return document.getElementById(cursor.toString());
}

//Stop looping searchSuggest function
function stopSearchSuggest(){
	running=false;
	clearTimeout(timeoutId);
	latestSearchCriteria = '';
}

//Start looping searchSuggest function
function startSearchSuggest(){
	running=true;
	searchSuggest();
	
}

// NEED THESE TO FIND THE POSTION OF THE TEXT BOX FOR "TRANSITIONAL" DOCTYPE
function getElementLeft(eElement){
    if (!eElement && this) {                                          
        eElement = this;
    }
    
    var nLeftPos = eElement.offsetLeft;
    var eParElement = eElement.offsetParent;
    while (eParElement != null){
        nLeftPos += eParElement.offsetLeft;
        eParElement = eParElement.offsetParent;
    }
    return nLeftPos; 
}

function getElementTop(eElement){
    if (!eElement && this){
        eElement = this;
    }

    var nTopPos = eElement.offsetTop;
    var eParElement = eElement.offsetParent;
    while (eParElement != null){
        nTopPos += eParElement.offsetTop;
        eParElement = eParElement.offsetParent;
    }
    return nTopPos;
}