// AJAX Functions

function GetXmlHttpObject()
{
	var xmlHttp=null;
	
	try
	{ xmlHttp=new XMLHttpRequest(); }
	catch (e)
  	{
  		try
    	{ xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); }
  		catch (e)
    	{ xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); }
  	}

	return xmlHttp;
}

function stateChanged() 
{ 
	if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
 	{ window.ajax_result = xmlHttp.responseText; } 
}

function ajaxFunction(str, url)
{  
	xmlHttp = GetXmlHttpObject();
	
	if	(str)
	{ url = url+"?"+str; }
	
	xmlHttp.onreadystatechange=stateChanged
	xmlHttp.open("GET",url,true);
	xmlHttp.send(null); 
	
	if	(window.ajax_result)
	{ return window.ajax_result; }
	else
	{ return false; }
}

function ajaxReview(tgt_id, str, url)
{
	if	(document.getElementById(tgt_id))
	{ document.getElementById(tgt_id).innerHTML = ajaxFunction(str, url); }
}

function createFormQuery(form)
{
	if	(document.getElementById(form))
	{	
		var elements = document.getElementById(form).elements;
		var pairs = new Array();
		var frm_temp;
	
		for (var i = 0; i < elements.length; i++) 
		{
			if	(elements[i].type == 'select-multiple')
			{ 
				frm_temp = '';
				
				for (var b = 0; b < elements[i].options.length; b++)
				{	
					if	(elements[i].options[b].selected)
					{ frm_temp = (frm_temp+","+elements[i].options[b].value); }
				}

				pairs.push(elements[i].name + "=" + encodeURIComponent(frm_temp));
			}
			else if		(elements[i].type == 'radio' && elements[i].checked && (name = elements[i].name) && (value = elements[i].value))
			{ pairs.push(name + "=" + encodeURIComponent(value)); }
			else if	(elements[i].type == 'checkbox' && elements[i].checked && (name = elements[i].name) && (value = elements[i].value))
			{ pairs.push(name + "=" + encodeURIComponent(value));  }
			else if (elements[i].type != 'radio' && elements[i].type != 'checkbox' && (name = elements[i].name) && (value = elements[i].value))
			{ pairs.push(name + "=" + encodeURIComponent(value)); }
		}
	
		return pairs.join("&");
	}
	else
	{ alert('No form present'); }
}

// End of AJAX Functions


/*******************************************************************************
* Author: Justin Barlow - www.netlobo.com
* Project Netlobo Ajax v1.1
* the ajaxUpdate( ) function tries to make AJAX operations easier by performing
* many common AJAX related operations in one place. The function will request
* the data from the given "url" and inject it into the html element with the
* given "elemid" using the element's innerHTML method. This function is most
* useful when the requested "url" returns html formatted text or plain text. The
* "url" does not have to return XML.
* 
* The "options" parameter is an anonymous object which includes the following
* available options:
* 
* params:     Parameters for the requested url in the format p1=1&p2=0&p3=2
* meth:       The request method. Can be "get" or "post". Default is "post".
* async:      Toggles asynchronous mode. Default is true.
* startfunc:  A function or list of functions to be called before the AJAX
*             request is made. A list of functions must be separated by the
*             semi-colon like this: "showLoad(); animateText(); hideDiv('bob')".
*             You can pass parameters into the functions.
* endfunc:    A function or list of functions to be called after a successful
*             AJAX request. Uses the same format as "startfunc".
* errorfunc:  A function or list of functions to be called when the AJAX request
*             is unsuccessful. Uses the same format as "startfunc".
* noauthfunc: A function or list of functions to be called when the AJAX request
*             is not authenticated (http status code 403 is encountered). Uses
*             the same format as "startfunc".
* 
* Returns true on success and false on failure.
* 
* Example Usage:
* 
	ajaxUpdate( "rightdiv", "getData.jsp", {
		params:"id=12&AJAX=true",
		meth:"post",
		async:true,
		startfunc:"elemOn('loading')",
		endfunc:"elemOff('loading'); elemOn('rightdiv')",
		errorfunc:"ajaxError()",
		noauthfunc:"ajaxNoAuth()" }
	);
* 
*******************************************************************************/

function ajaxUpdate( elemid, url, options )
{
	var params = options.params || "";
	var meth = options.meth || "post";
	var async = options.async;
	if (async == null) { async = true; }
	var startfunc = options.startfunc || "";
	var endfunc = options.endfunc || "";
	var errorfunc = options.errorfunc || "";
	var noauthfunc = options.noauthfunc || "";
	var req = false;
	
	if	(window.XMLHttpRequest)
	{ req = new XMLHttpRequest(); }
	else if(window.ActiveXObject)
	{ req = new ActiveXObject( "Microsoft.XMLHTTP" ); }
	else
	{ alert("Your browser cannot perform the requested action. Either your security settings are too high or your browser is outdated. Try the newest version of Internet Explorer or Mozilla Firefox." ); return false; }
	if( startfunc != "" ) { eval( startfunc ); }
	
	req.onreadystatechange =
		function()
		{
			if ( req.readyState == 4 ) 
			{
				if ( req.status == 200 )
				{
					if( elemid != '' ) { document.getElementById(elemid).innerHTML = req.responseText; }
					if( endfunc != "" ) { eval( endfunc ); }
						
					return true;
				}
				else
				{
					if( req.status == 403 && noauthfunc != "" )
						eval( noauthfunc );
					else
					{
						if( endfunc != "" )
							eval( endfunc );
						if( errorfunc != "" )
							eval( errorfunc );
					}
					return false;
				}
			}
		};
	if( meth == "get" )
	{	
		req.open( meth, url+( params != "" ? "?"+params : "" ), async );
		req.send(null);
	}
	else
	{
		req.open( meth, url, async );
		req.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded" );
		req.send( params );
	}
}