// This array stores the current highlight seggested items for each menu
var currentSearch = [];

//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 is too old!\nIt's about time to upgrade don't you think?");
	}
}

//Our XmlHttpRequest object to get the auto suggest
var searchReq = getXmlHttpRequestObject();
var ori_str = "";

//Called from keyup on the search textbox.
//Starts the AJAX request.
function searchSuggest(obj, evt) {
	if (evt.keyCode != 38 && evt.keyCode != 40 && evt.keyCode!=13) { 
	   // if arrowkey up and down pressed, don't search again
	   if (searchReq.readyState == 4 || searchReq.readyState == 0) {
		    var str = obj.value;
		    if (obj.id.indexOf('sharees')!= -1 || obj.id.indexOf('tags')!= -1 ) {
		       ori_str = getAddress(str);
		       str = getSearchStr(str);
        	}
		    searchReq.open("GET", 'searchSuggest_new.php?search=' + str + '&type=' + obj.id, true);
		    searchReq.onreadystatechange = function() {handleSearchSuggest(obj)}; 
		    searchReq.send(null);
		    document.getElementById(obj.id + "_div").style.display = "block";
	   }
	} else if (evt.keyCode == 13) {
	  handleEnter(obj, evt);
	} else {
      handleArrowkey(evt);
  }
}

//Called when the AJAX response is returned.
function handleSearchSuggest(obj) {
	if (searchReq.readyState == 4) {
		var ss = document.getElementById(obj.id + "_div");
		ss.innerHTML = '';
		var str = searchReq.responseText.split("\n");
		var suggest = '';
		for(i=0; 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 = '<div id='+ obj.id + "_div" + i;
			suggest += ' onmouseover="javascript:suggestOver(this);" ';
			suggest += ' onmouseout="javascript:suggestOut(this);" ';
			suggest += ' onclick="javascript:setSearch(this,\''+ obj.id +'\');" ';
			suggest += ' class="suggest_link">' + str[i] + '</div>';
		  ss.innerHTML += suggest;
		}
		currentSearch[obj.id] = obj.id + "_div0";
	}
}

//Click function
function setSearch(obj,search_id) {
	search_obj = document.getElementById(search_id);
	div_obj = document.getElementById(search_id + "_div");
	search_obj.value = ori_str + obj.innerHTML;
	div_obj.innerHTML = "";
}

//Mouse over of selected item function
function suggestOver(div_obj) {
	search_id = div_obj.id.substr(0, div_obj.id.indexOf("_div"));
	currentSearch[search_id] = div_obj.id;
	div_obj.className = 'suggest_link_over';
}

//Mouse out of selected item function
function suggestOut(div_obj) {
	div_obj.className = 'suggest_link';
}

// Mouse out of select menu
function searchOut(div_obj) {
	
	div_obj.style.display = "none"; 
}

// Mouse over of select menu
function searchIn(div_obj) {

	div_obj.style.display = "block";	
}

function handleArrowkey(evt) {
	  evt = (evt) ? evt : ((window.event) ? event : null);
	  target = evt.srcElement? evt.srcElement : evt.target;
	  var currentId = currentSearch[target.id];
	  //alert(currentId);
	  var n_current = parseInt(currentId.substr(currentId.indexOf("div") + 3));
	  //n_current = 0;
	  //alert(n_current);
	  var n_previous = n_current - 1;
	  var n_next = n_current + 1;
	  var currEle = document.getElementById(currentId);
	  var nextEle = document.getElementById(target.id + "_div"+n_next);
	  var preEle = document.getElementById(target.id + "_div"+n_previous);
    if (evt) {
        switch (evt.keyCode) {          
            case 38:
                if (preEle != null || preEle != "undefined") {
                   preEle.className = "suggest_link_over";
                   currEle.className = 'suggest_link';
                }
                currentSearch[target.id] = target.id + "_div"+ n_previous;
                break;    
            case 40:
                if (nextEle != null || nextEle != "undefined") {
                   nextEle.className = "suggest_link_over";
                   currEle.className = 'suggest_link';
                }
                currentSearch[target.id]  = target.id + "_div"+ n_next;
                break;    
    
         }
    }
}

function handleEnter(obj, evt) {
	evt = (evt) ? evt : ((window.event) ? event : null);
    if (evt.keyCode == 13) {
        currentId = currentSearch[obj.id];
        if (currentId.indexOf('_div0') == -1) { // cursor not moved to sugg box yet
//        alert('curId:' + currentId);
          currEle = document.getElementById(currentId);
          if (obj.id.indexOf('sharees')!=-1 || obj.id.indexOf('tags')!=-1 ) { //Special case for multi-email
            str = obj.value;
            ori_str = getAddress(str);            
            obj.value = ori_str + currEle.innerHTML;
          } else {
            obj.value = currEle.innerHTML;
          }         
        }
        divObj = document.getElementById(obj.id+"_div");		
        searchOut(divObj);
        return false;
    }
    return true;
}

function handleTab(evt,id) {
 if (evt.keyCode == 9)
   document.getElementById(id+'_div').style.display = 'none';
}

function getSearchStr(str) {
	if (str.indexOf(",") != -1 )
	   return str.substr(str.lastIndexOf(",")+1);
	else
		 return str;
}

function getAddress(str) {
	str1 = "";
	if (str.indexOf(",") != -1 )
	   return str.substr(0, str.lastIndexOf(",") +1);
	else
	 return str1;
}

