// nldc-ajax.js

var xmlHttp
var xmlHttpInUse = false
var ellipsesProgressIndicator
var lastAjaxProjectSearchQuery
var timeLastAjaxProjectSearchResultsReceived
var ajaxBaseUrl
ajaxBaseUrl = "http://www.NoLimitsDevCenter.net/"
lastAjaxProjectSearchQuery = ""
ellipsesProgressIndicator = "..."

function incemeantEllipsesProgressIndicator() {
	if (ellipsesProgressIndicator == ".") {
		ellipsesProgressIndicator = "..";
	} else if (ellipsesProgressIndicator == "..") {
		ellipsesProgressIndicator = "...";
	} else if (ellipsesProgressIndicator == "...") {
		ellipsesProgressIndicator = "."
	}
	//setTimeout("shake()",4100);
}

function GetXmlHttpObject(handler) { 

	var objXmlHttp=null

	// opera 8 and up supports this
	//if (navigator.userAgent.indexOf("Opera")>=0) {
	//	alert("This features doesn't work in Opera") 
	//	return 
	//}
	
	if ((navigator.userAgent.indexOf("MSIE")>=0) && 
		(! (navigator.userAgent.indexOf("Opera")>=0)) ) { 
		var strName="Msxml2.XMLHTTP"
		if (navigator.appVersion.indexOf("MSIE 5.5")>=0) {
			strName="Microsoft.XMLHTTP"
		} 
		
		try { 
			objXmlHttp=new ActiveXObject(strName)
			objXmlHttp.onreadystatechange=handler 
			return objXmlHttp
		}
		
		catch(e) { 
			alert("Error. Scripting for ActiveX might be disabled") 
			return 
		} 
	} 

	if ( (navigator.userAgent.indexOf("Mozilla")>=0) || (navigator.userAgent.indexOf("Opera")>=0) ){
		objXmlHttp=new XMLHttpRequest()
		objXmlHttp.onload=handler
		objXmlHttp.onerror=handler 
		return objXmlHttp
	}
} 

function ajaxIsBusyAlert () {
	alert('The server is busy fullfilling your last request.\n\nPlease wait a moment and try again. If this error persists, close your browser window, open a new one, and try again.\n\nIf it still persists, your browser probably does not support proper handling of xmlHttp Objects.');
}

function checkAjaxProjectSearchQueryFieldForUpdate () {
	var queryField = document.getElementById("ajaxProjSearchQueryTxtInput");
	if (queryField == null) { return; }
	
	if (lastAjaxProjectSearchQuery != queryField.value) {
		ajaxProjectSearchQueryFieldDidChange();
	}
}

function ajaxProjectSearchQueryFieldDidChange() {
	
	setTimeout("checkAjaxProjectSearchQueryFieldForUpdate()", 1000);
	
	var queryField = document.getElementById("ajaxProjSearchQueryTxtInput");
	if (queryField == null) { return; }
	
	var resultSpan = document.getElementById("ajaxProjectsSearchResultsSpan");
	if (resultSpan == null) { return; }
	
	var statusSpan = document.getElementById("ajaxProjectsSearchResultsStatusSpan");
	if (statusSpan == null) { return; }
	
	
	
	//alert(queryField.value)
	
	if (queryField.value.length < 3) { 
		statusSpan.innerHTML = "Enter a search query above (at least 3 letters)."
		resultSpan.innerHTML = "";
		return;
	}
	
	if (xmlHttpInUse == true) {
		statusSpan.innerHTML = "Fetching Search Results..."
		
		return;
	};
	
	if (lastAjaxProjectSearchQuery == queryField.value) { return } // no real change
	var curDate = new Date();
	if (timeLastAjaxProjectSearchResultsReceived - curDate > 1000) { 
		alert("too soon: " + parseInt(timeLastAjaxProjectSearchResultsReceived - curDate));
		return 
	} // too soon
	
	lastAjaxProjectSearchQuery = queryField.value
	var query = encodeURIComponent(queryField.value);
	var url = ajaxBaseUrl + '?action=ajaxprojectsearchresults&query=' + query + '&rand=' + Math.random();
	xmlHttp = GetXmlHttpObject(ajaxProjectSearchHandler)
	xmlHttp.open("GET", url, true)
	xmlHttp.send(null);
	xmlHttpInUse = true
	statusSpan.innerHTML = "Fetching Search Results..."
	return;
}


function ajaxProjectSearchHandler() {
	
	if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete") { 
	
		var queryField = document.getElementById("ajaxProjSearchQueryTxtInput");
		if (queryField == null) { return; }
	
		var resultSpan = document.getElementById("ajaxProjectsSearchResultsSpan");
		if (resultSpan == null) { return; }
		
		var statusSpan = document.getElementById("ajaxProjectsSearchResultsStatusSpan");
		if (statusSpan == null) { return; }
	
		//alert (xmlHttp.responseText);
	
		resultSpan.innerHTML = xmlHttp.responseText;
		statusSpan.innerHTML = "Enter a search query above (at least 3 letters)."
		xmlHttpInUse = false // we're done. release it.
		timeLastAjaxProjectSearchResultsReceived = new Date();
		lastAjaxProjectSearchQuery = queryField.value
	}
}













