// JavaScript Document

/**
*	Serializing a from into a passable POST string
*
*/
//function $(e){if(typeof e=='string')e=document.getElementById(e);return e};
function collect(a,f){ var n=[];for(var i=0;i<a.length;i++){var v=f(a[i]);if(v!=null)n.push(v)}return n};
function serialize(f){ var g=function(n){ return f.getElementsByTagName(n)};var nv=function(e){ if(e.name)return encodeURIComponent(e.name)+'='+encodeURIComponent(e.value);else return ''};var i=collect(g('input'),function(i){if((i.type!='radio'&&i.type!='checkbox')||i.checked)return nv(i)});var s=collect(g('select'),nv);var t=collect(g('textarea'),nv);return i.concat(s).concat(t).join('&');};



/**
*	Replace an element's content with Text from a server response
*
*	@param	String	scriptFile	The server script to execute
*	@param	String	query		The query string for the script to process
*	@param	String	target		The element which will recieve the response
*
*	@return	String	The actual text response
*/	
function AJAX_REPLACE(scriptFile,query,target)
{
	var req 				= newXMLHttpRequest();
	req.onreadystatechange	= function () 
	{
		if (req.readyState == 4) 
		{
			if (req.status == 200) 
			{        		
				document.getElementById(target).innerHTML = req.responseText;
			} 
			else 
			{				
				var textResult = document.getElementById(target);
				textResult.innerHTML = "ERROR: "+ req.status;
			}
		}
 	}
  	req.open("POST", scriptFile, true);
  	req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  	req.send(query);
}


/**
*	Call a requested javascript function using parameters provided by a server response
*
*	@param	String	scriptFile		The server script to execute
*	@param	String	query			The query string for the script to process
*	@param	String	functionName	The name of the function to execute upon response
*
*	@return	Function call with parameters provided by server response	
*/
function AJAX_CALL(scriptFile,query,functionName)
{
	var req 				= newXMLHttpRequest();
	req.onreadystatechange	= function () 
	{
		if (req.readyState == 4) 
		{
			if (req.status == 200) 
			{        							
				eval(functionName +'("' + req.responseText + '")');
			} 
			else 
			{				
				var textResult = document.getElementById(target);
				textResult.innerHTML = "ERROR: "+ req.status;
			}
		}
 	}
  	req.open("POST", scriptFile, true);
  	req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  	req.send(query);
}

// Create a new communications Object
function newXMLHttpRequest() {
	var xmlreq = false;
	if (window.XMLHttpRequest) {
		xmlreq = new XMLHttpRequest();
	} else if (window.ActiveXObject) {
    		// Try ActiveX
		try { 
			xmlreq = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e1) { 
			// first method failed 
			try {
				xmlreq = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e2) {
				 // both methods failed 
			} 
		}
 	}
   	return xmlreq;
} 

// Attach a response handler to the call object
function getReadyStateHandler(req, responseXmlHandler, target) {
	return function () {
	if (req.readyState == 4) {
		if (req.status == 200) {        		
        		responseXmlHandler(req.responseText,target);
		} else {
			//var textResult = document.getElementById("newSortedList");
			var textResult = document.getElementById(target);
			textResult.innerHTML = "ERROR: "+ req.status;
      		}
    	}
 	}
}


// A simple response handler that simply dumps the incoming TEXT into a
// a target element identified by its ID attribute
function simpleReplace(textData,target)
{	
	document.getElementById(target).innerHTML = textData;
}



function AJAX_GET(scriptFile,query,target)
{
	var req 				= newXMLHttpRequest();
	req.onreadystatechange	= function () 
	{
		if (req.readyState == 4) 
		{
			if (req.status == 200) 
			{        							
				return req.responseText;
			} 
			else 
			{
				var textResult = document.getElementById(target);
				textResult.innerHTML = "ERROR: "+ req.status;
			}
		}
 	}
  	req.open("POST", scriptFile, true);
  	req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  	req.send(query);
}





function AJAX_PUT(scriptFile,query,target)
{
	var req 				= newXMLHttpRequest();
	req.onreadystatechange	= function () 
	{
		if (req.readyState == 4) 
		{
			if (req.status == 200) 
			{        							
				//return req.responseText;
			} 
			else 
			{	
				var textResult = document.getElementById(target);
				textResult.innerHTML = "ERROR: "+ req.status;
			}
		}
 	}
 	
  	req.open("POST", scriptFile, true);
  	req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  	req.send(query);
}


function AJAX_pull(scriptFile,query,target)
{
	var req 				= newXMLHttpRequest();
	req.onreadystatechange  = getReadyStateHandler(req, handler, target)
  	req.open("POST", scriptFile, true);
  	req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  	req.send('');		
}


function handler(req, target)
{
	
	var textResult 		 = document.getElementById(target);
	textResult.innerHTML = "ERROR: "+ req.status;
				
	//return "zzzz-x";
}



function loadurl(dest, query) {
	var req = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
	req.onreadystatechange = function () 
	{
		if (req.readyState == 4)
		{
			if (req.status == 200)
			{
				results = new String(req.responseText);
			}
		}
	}
	
	req.open("GET", dest);	
	req.send(query);
}


function AJAX_USE_CONTROLLER(controllerName)
{
	var scriptFile 	= CONTROLLERS_DIR + '/' + controllerName;
	var target 		= 'error';
	
	var req 				= newXMLHttpRequest();
	req.onreadystatechange	= function () 
	{
		if (req.readyState == 4) 
		{
			if (req.status == 200) 
			{        							
				//return req.responseText;
			} 
			else 
			{	
				var textResult = document.getElementById(target);
				textResult.innerHTML = "ERROR: "+ req.status;
			}
		}
 	}
 	
  	req.open("POST", scriptFile, false);
  	req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  	req.send(null);
}	
	
