/*
	This is the JavaScript file for the AJAX Suggest Tutorial

	You may use this code in your own projects as long as this 
	copyright is left	in place.  All code is provided AS-IS.
	This code is distributed in the hope that it will be useful,
 	but WITHOUT ANY WARRANTY; without even the implied warranty of
 	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
	
	For the rest of the code visit http://www.DynamicAJAX.com
	
	Copyright 2006 Ryan Smith / 345 Technical / 345 Group.	

*/
//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 does not support Fastcareer Suggest");
	}
}

//Our XmlHttpRequest object to get the auto suggest
var searchReq = getXmlHttpRequestObject();
var bspc = false;
var search_keyword = "";
var search_location = "";

//Called from keyup on the search textbox.
//Starts the AJAX request.

function searchSuggest(thefield,thediv,theotherdiv,call_page,aEvent) {
	
	if (thefield.value.length < 2) {
		return false;
	}
	theotherdiv.style.display = "none";
 	var myEvent = aEvent ? aEvent : window.event; 
	if (myEvent && myEvent.keyCode == 8) {
		bspc = true;
	} else {
		bspc = false;
	}
	
	
	if (myEvent && (myEvent.keyCode == 40 || myEvent.keyCode == 38)) {

		if (thediv) {
			if (thediv.style.display == "") {
				var found = 0;
				for(i=0; i < thediv.childNodes.length; i++) {
					if (thediv.childNodes[i].className == 'suggest_link_over') {
							found = 1;
							break;
					}	
				}
				if (found==0){
					suggestOver(thediv.childNodes[0]);
					thefield.value = thediv.childNodes[0].innerHTML;
				} else {
				
					if (myEvent.keyCode == 40) { // arrow down
						if (i != thediv.childNodes.length-1) {
							suggestOver(thediv.childNodes[i+1]);
							thefield.value = thediv.childNodes[i+1].innerHTML;
						}
					}
					if (myEvent.keyCode == 38) { // arrow up
						if (i != 0) {
							suggestOver(thediv.childNodes[i-1]);
							thefield.value = thediv.childNodes[i-1].innerHTML;
						}
					}
				}
			} 
		}
	
	} else {
		if (searchReq.readyState == 4 || searchReq.readyState == 0) {
			var str = escape(thefield.value);
			searchReq.open("GET", call_page + str, true);
			searchReq.onreadystatechange = function() { handleSearchSuggest(thefield,thediv); };
			searchReq.send(null);
		}		
	}
}

String.prototype.trim = function() {
	a = this.replace(/^\s+/, '');
	return a.replace(/\s+$/, '');
};

//Called when the AJAX response is returned.
function handleSearchSuggest(thefield,thediv) {
	if (searchReq.readyState == 4) {
		thediv.innerHTML = '';

		var str = searchReq.responseText.trim().split("\n");
		if (str.length == 1 && str == "") {
			thediv.style.display="none";
		} else {
			thediv.style.display="";
			
			for(i=0; i < str.length; i++) {
				//Build our element string.  This is cleaner using the DOM, but
				//IE doesn't support dynamically added attributes.
				/*
				if (i==0 && !bspc) {
				
					var field_length = thefield.value.length;
					
					search_keyword = thefield.value;
					thefield.value = trim(str[i]);

					var iStart = field_length;
					var iLength = thefield.value.length;
					
					if (thefield.createTextRange) {
				        var oRange = thefield.createTextRange(); 
				        oRange.moveStart("character", iStart); 
				        oRange.moveEnd("character", iLength - thefield.value.length); 
				        oRange.select();
				    } else if (thefield.setSelectionRange) {
				        thefield.setSelectionRange(iStart, iLength);
				    } 
				
				    thefield.focus(); 
				}
				*/
				var suggest = '<div id="q' + i + '" onmouseover="javascript:suggestOver(this);" ';
				suggest += 'onmouseout="javascript:suggestOut(this);" ';
				suggest += 'onclick="javascript:setSearch(this,document.getElementById(\''+ thefield.id + '\')';
				suggest += ');" ';
				
					
					if (i==0) {
						suggest += 'class="suggest_link_over">' + str[i].trim() + '</div>';
					} else {
						suggest += 'class="suggest_link">' + str[i].trim() + '</div>';
					}
					
					//alert(suggest);
				
				thediv.innerHTML += suggest;
			}
		}
	}
}

//Mouse over function
function suggestOver(div_value) {

	var thediv = div_value.parentNode;
	
	
	if (thediv.style.display == "") {
		for(k=0; k < thediv.childNodes.length; k++) {
			if (thediv.childNodes[k].className == 'suggest_link_over') {
				suggestOut(thediv.childNodes[k]);
			}
		}
	}
	div_value.className = 'suggest_link_over';
}


//Mouse out function
function suggestOut(div_value) {
	div_value.className = 'suggest_link';
}
//Click function
function setSearch(div_value, thefield) {
	thefield.value = div_value.innerHTML;
	div_value.parentNode.style.display = "none";
	div_value.parentNode.innerHTML = '';
}

document.onclick= function(event) { var myEvent = event ? event : window.event; handleBubbleEvent(myEvent); };

function handleBubbleEvent(event){
	var elems=document.getElementById('search_suggest_keywords');
	var elems2=document.getElementById('search_suggest_location');
	if (elems) {
		if(elems.style.display == ""){togDisp(event,elems);}
	}
	if (elems2) {
		if(elems2.style.display == ""){togDisp(event,elems2);}
	}
}

//extra functions
/*function trim(s) {  
  return s ? s.replace( /^\s+/g, "" ).replace( /\s+$/g, "" ) : "";
}*/

function togDisp(e,elems){stopB(e);var dp="";if(elems.style.display==""){dp="none";}elems.style.display=dp;return false;}
function stopB(e){e.cancelBubble=true;}




