// simpleAsynch.js by Scott Umsted scottumsted@gmail.com - 2008,2009

debug = false;
function debug_alert(debug_alert_text)
{
	if(debug==true){
		alert(debug_alert_text);
	}
}

function debug_elements()
{
  if(debug==true){
	for(i=0;i<document.forms.length;i++){
	
	}
	alert('num forms='+i);
  }
}

function addRequestFunction(request,fname,last)
{
	request = request + "function="+fname;
	request = request + (last==true?"":"&");
	return request;
}

function addCallback(request,fname,last)
{
	request = request + "callback="+fname;
	request = request + (last==true?"":"&");
	return request;
}

function addRequestParameter(request,field,last)
{
	debug_alert("Param Length:"+document.getElementById(field).value.length);
	request = request + field;
	if(document.getElementById(field)!=null||document.getElementById(field)==""){
		request = request +"="+ document.getElementById(field).value.replace("&","&AMP");
	}else{
		request = request + "=null";
	}
	request = request + (last==true?"":"&");
	return request;
}

function addRequestParameterAndValue(request,field,value,last)
{
	request = request + field+"="+value;
	request = request + (last==true?"":"&");
	return request;
}

function getXHR(){
try{return new ActiveXObject("Msxml2.XMLHTTP");}catch(e){}  
try{return new ActiveXObject("Microsoft.XMLHTTP");}catch(e){}  
try{return new XMLHttpRequest();}catch(e){}  
return null;
}

function postRequest(url,params)
{
    debug_alert("postRequest\nparams="+params+"\nurl="+url);
    var xhr;
	if((xhr = getXHR())!=null){
	   	xhr.open("POST", url,  true);
		//Send the proper header information along with the request
		xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		xhr.setRequestHeader("Content-length", params.length);
		xhr.setRequestHeader("Connection", "close");
	    xhr.onreadystatechange  = function()
	    {
	         if(xhr.readyState  == 4)
	         {
	              if(xhr.status  == 200)
	                  processResponse(xhr.responseText);
	              else
	                 debug_alert("Error code " + xhr.status);
	         }
	    };
	   xhr.send(params);
	   debug_alert("request sent");
     }else{
     	debug_alert("request not sent");
     }
}

	//var response="input|employeeId|123456789|input|firstName|Jack|input|lastName|Smith|callback|hey|blah|tab|Employee";
function postRequestold(action,request)
{
    url = action+"?"+request;
    debug_alert("postRequest\naction="+action+"\nrequest="+request+"\nurl="+url);
    var xhr;
    try {  xhr = new ActiveXObject('Msxml2.XMLHTTP');   }
    catch (e)
    {
        try {   xhr = new ActiveXObject('Microsoft.XMLHTTP');    }
        catch (e2)
        {
          try {  
          	xhr = new XMLHttpRequest();     
          }
          catch (e3) {  xhr = false;   }
        }
     }

    xhr.onreadystatechange  = function()
    {
         if(xhr.readyState  == 4)
         {
              if(xhr.status  == 200)
                  processResponse(xhr.responseText);
              else
                 debug_alert("Error code " + xhr.status);
         }
    };

   xhr.open("POST", url,  true);
   xhr.send(null);
   debug_alert("request sent");
}

function processResponse(response)
{
	debug_alert("processResponse\nresponse="+response);
	var ra = parseResponse(response);
	var n,v;

	for(i=0;i<ra.length;i++){
		t = ra[i];
		i++;
		n = ra[i];
		i++;
		v = ra[i];
		//debug_alert("type="+t+"\nname="+n+"\nvalue="+v);
		switch(t){
			case "input":
				populateInput(n,v);
				break;
			case "div":
				populateDiv(n,v);
				break;
			case "select":
				populateSelect(n,v);
				break;
			case "tab": 
				// only relevant when using with tabber
				activateTab(n,v);
				break;
			case "delayCallback":
				setTimeout("performCallback("+n+",null)",v);
				break;
			case "callback":
				performCallback(n,v);
				break;
			case "alert":
				alert(n+"\n"+v);
				break;
		}
	}

}

function parseResponse(responseString)
{

	var responseArray = responseString.split("|");

	for(i=0;i<responseArray.length;i++){
		tempString=responseArray[i];
		responseArray[i] = tempString.replace("%124","|");
	}

	return responseArray;
}

function populateInput(n,v)
{
	//does field exist
	if(document.getElementById(n)!=null){
		document.getElementById(n).value = v;
		debug_alert('found input '+n+' = '+v);
	}else{

		var newField = document.createElement("input");
		newField.type = "hidden";
		newField.id = n;
		newField.value = v;
		document.body.appendChild(newField);
		debug_alert('not found input '+n+' = '+v);
	}
}

function populateDiv(n,v)
{
	//does field exist
	if(document.getElementById(n)!=null){
		document.getElementById(n).innerHTML= v;
	}
}

function populateSelect(n,v)
{
	//does field exist
	if(document.getElementById(n)!=null){
		document.getElementById(n).value = v;
	}else{
		newField = document.createElement("input");
		newField.type = "hidden";
		newField.name = n;
		newField.value = v;
	}
}

function performCallback(n,v)
{
	var callbackString = n+"("+((v)==null?"":"'"+v+"'")+")"
	debug_alert(callbackString);
	eval(callbackString);
}

function activateTab(n,v)
{
	debug_alert("activate tab: "+n);
	tabberActivateTab(n);
}

