/*
 JavaScript Document

 ===================================================================

 Author: Matt Kruse <matt@ajaxtoolbox.com>

 WWW: http:www.AjaxToolbox.com/



 NOTICE: You may use this code for any purpose, commercial or

 private, without any further permission from the author. You may

 remove this notice from your final code if you wish, however it is

 appreciated by the author if at least my web site address is kept.



 You may *NOT* re-distribute this code in any way except through its

 use. That means, you can include it in your product, or your web

 site, or any other form where the code is actually being used. You

 may not put the plain javascript up on your site for download or

 include it in your javascript libFraries for download. 

 If you wish to share this code with others, please just point them

 to the URL instead.

 Please DO NOT link directly to my .js files from your site. Copy

 the files to your server and use them there. Thank you.

 ===================================================================
*/


function AjaxRequest(){var req =new Object();

req.timeout =null;

req.generateUniqueUrl =true;

req.url =window.location.href;

req.method ="GET";

req.async =true;

req.username =null;

req.password =null;

req.parameters =new Object();

req.requestIndex =AjaxRequest.numAjaxRequests++;

req.responseReceived =false;

req.groupName =null;

req.queryString ="";

req.responseText =null;

req.responseXML =null;

req.status =null;

req.statusText =null;

req.aborted =false;

req.xmlHttpRequest =null;

req.onTimeout=null;

req.onLoading=null;

req.onLoaded=null;

req.onInteractive=null;

req.onComplete=null;

req.onSuccess=null;

req.onError=null;

req.onGroupBegin=null;

req.onGroupEnd=null;

req.xmlHttpRequest =AjaxRequest.getXmlHttpRequest();

if(req.xmlHttpRequest==null){return null;}req.xmlHttpRequest.onreadystatechange =

function(){if(req==null || req.xmlHttpRequest==null){return;}if(req.xmlHttpRequest.readyState==1){req.onLoadingInternal(req);}if(req.xmlHttpRequest.readyState==2){req.onLoadedInternal(req);}if(req.xmlHttpRequest.readyState==3){req.onInteractiveInternal(req);}if(req.xmlHttpRequest.readyState==4){req.onCompleteInternal(req);}};

req.onLoadingInternalHandled=false;

req.onLoadedInternalHandled=false;

req.onInteractiveInternalHandled=false;

req.onCompleteInternalHandled=false;

req.onLoadingInternal=

function(){if(req.onLoadingInternalHandled){return;}AjaxRequest.numActiveAjaxRequests++;

if(AjaxRequest.numActiveAjaxRequests==1 && typeof(window['AjaxRequestBegin'])=="function"){AjaxRequestBegin();}if(req.groupName!=null){if(typeof(AjaxRequest.numActiveAjaxGroupRequests[req.groupName])=="undefined"){AjaxRequest.numActiveAjaxGroupRequests[req.groupName] =0;}AjaxRequest.numActiveAjaxGroupRequests[req.groupName]++;

if(AjaxRequest.numActiveAjaxGroupRequests[req.groupName]==1 && typeof(req.onGroupBegin)=="function"){req.onGroupBegin(req.groupName);}}if(typeof(req.onLoading)=="function"){req.onLoading(req);}req.onLoadingInternalHandled=true;};

req.onLoadedInternal=

function(){if(req.onLoadedInternalHandled){return;}if(typeof(req.onLoaded)=="function"){req.onLoaded(req);}req.onLoadedInternalHandled=true;};

req.onInteractiveInternal=

function(){if(req.onInteractiveInternalHandled){return;}if(typeof(req.onInteractive)=="function"){req.onInteractive(req);}req.onInteractiveInternalHandled=true;};

req.onCompleteInternal=

function(){if(req.onCompleteInternalHandled || req.aborted){return;}req.onCompleteInternalHandled=true;

AjaxRequest.numActiveAjaxRequests--;

if(AjaxRequest.numActiveAjaxRequests==0 && typeof(window['AjaxRequestEnd'])=="function"){AjaxRequestEnd(req.groupName);}if(req.groupName!=null){AjaxRequest.numActiveAjaxGroupRequests[req.groupName]--;

if(AjaxRequest.numActiveAjaxGroupRequests[req.groupName]==0 && typeof(req.onGroupEnd)=="function"){req.onGroupEnd(req.groupName);}}req.responseReceived =true;

req.status =req.xmlHttpRequest.status;

req.statusText =req.xmlHttpRequest.statusText;

req.responseText =req.xmlHttpRequest.responseText;



req.responseXML =req.xmlHttpRequest.responseXML;

if(typeof(req.onComplete)=="function"){req.onComplete(req);}if(req.xmlHttpRequest.status==200 && typeof(req.onSuccess)=="function"){req.onSuccess(req);}else if(typeof(req.onError)=="function"){req.onError(req);}delete req.xmlHttpRequest['onreadystatechange'];

req.xmlHttpRequest =null;};

req.onTimeoutInternal=

function(){if(req!=null && req.xmlHttpRequest!=null && !req.onCompleteInternalHandled){req.aborted =true;

req.xmlHttpRequest.abort();

AjaxRequest.numActiveAjaxRequests--;

if(AjaxRequest.numActiveAjaxRequests==0 && typeof(window['AjaxRequestEnd'])=="function"){AjaxRequestEnd(req.groupName);}if(req.groupName!=null){AjaxRequest.numActiveAjaxGroupRequests[req.groupName]--;

if(AjaxRequest.numActiveAjaxGroupRequests[req.groupName]==0 && typeof(req.onGroupEnd)=="function"){req.onGroupEnd(req.groupName);}}if(typeof(req.onTimeout)=="function"){req.onTimeout(req);}delete req.xmlHttpRequest['onreadystatechange'];

req.xmlHttpRequest =null;}};

req.process =

function()
{
	if(req.xmlHttpRequest!=null)
	{
		if(req.generateUniqueUrl && req.method=="GET")
		{
			req.parameters["AjaxRequestUniqueId"] = new Date().getTime() + "" + req.requestIndex;
		}
		var content =null;

		for(var i in req.parameters)
		{
			if(req.queryString.length>0)
			{
				req.queryString +="&";
			}
			req.queryString +=encodeURIComponent(i) + "=" + encodeURIComponent(req.parameters[i]);
		}
		
		if(req.method=="GET")
		{
			if(req.queryString.length>0)
			{
				req.url +=((req.url.indexOf("?")>-1)?"&":"?") + req.queryString;
			}
		}
		/* Refs #749. Change the logic and seperate the query string into post value for making maximum character length unlimited */
		if(req.method=="POST")
		{
			if(req.url.indexOf("?") > -1)
			{
				var arr_action = req.url.split("?");
			
				if(arr_action[0] != "" && arr_action[1] != "")
				{
					req.url = arr_action[0];
					req.queryString = arr_action[1];
				}
			}
		}
		
		req.xmlHttpRequest.open(req.method,req.url,req.async,req.username,req.password);
		
		if(req.method=="POST")
		{
			if(typeof(req.xmlHttpRequest.setRequestHeader)!="undefined")
			{
				req.xmlHttpRequest.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
			}
			
			content = req.queryString;
		}
		
		if(req.timeout>0)
		{
			setTimeout(req.onTimeoutInternal,req.timeout);
		}
		req.xmlHttpRequest.send(content);
	}
};

req.handleArguments =

function(args){for(var i in args){if(typeof(req[i])=="undefined"){req.parameters[i] =args[i];}else{req[i] =args[i];}}};

req.getAllResponseHeaders =

function(){if(req.xmlHttpRequest!=null){if(req.responseReceived){return req.xmlHttpRequest.getAllResponseHeaders();}alert("Cannot getAllResponseHeaders because a response has not yet been received");}};

req.getResponseHeader =

function(headerName){if(req.xmlHttpRequest!=null){if(req.responseReceived){return req.xmlHttpRequest.getResponseHeader(headerName);}alert("Cannot getResponseHeader because a response has not yet been received");}};

return req;}AjaxRequest.getXmlHttpRequest =function(){if(window.XMLHttpRequest){return new XMLHttpRequest();}else if(window.ActiveXObject){/*@cc_on @*/

/*@if(@_jscript_version >=5)

try{return new ActiveXObject("Msxml2.XMLHTTP");}catch(e){try{return new ActiveXObject("Microsoft.XMLHTTP");}catch(E){return null;}}@end @*/}else{return null;}};

AjaxRequest.isActive =function(){return(AjaxRequest.numActiveAjaxRequests>0);};

AjaxRequest.get =function(args){AjaxRequest.doRequest("GET",args);};

AjaxRequest.post =function(args){AjaxRequest.doRequest("POST",args);};

AjaxRequest.doRequest =function(method,args){if(typeof(args)!="undefined" && args!=null){var myRequest =new AjaxRequest();

myRequest.method =method;

myRequest.handleArguments(args);

myRequest.process();}};

AjaxRequest.submit =function(theform, args){var myRequest =new AjaxRequest();

if(myRequest==null){return false;}var serializedForm =AjaxRequest.serializeForm(theform);

myRequest.method =theform.method.toUpperCase();

myRequest.url =theform.action;

myRequest.handleArguments(args);

myRequest.queryString =serializedForm;

myRequest.process();

return true;};

AjaxRequest.serializeForm =function(theform){var els =theform.elements;

var len =els.length;

var queryString ="";

this.addField =

function(name,value){if(queryString.length>0){queryString +="&";}queryString +=encodeURIComponent(name) + "=" + encodeURIComponent(value);};

for(var i=0;i<len;i++){var el =els[i];

if(!el.disabled){switch(el.type){case 'text': case 'password': case 'hidden': case 'textarea':

this.addField(el.name,el.value);

break;

case 'select-one':

if(el.selectedIndex>=0){this.addField(el.name,el.options[el.selectedIndex].value);}break;

case 'select-multiple':

for(var j=0;j<el.options.length;j++){if(el.options[j].selected){this.addField(el.name,el.options[j].value);}}break;

case 'checkbox': case 'radio':

if(el.checked){this.addField(el.name,el.value);}break;}}}return queryString;};

AjaxRequest.numActiveAjaxRequests =0;

AjaxRequest.numActiveAjaxGroupRequests =new Object();

AjaxRequest.numAjaxRequests =0;/* Standard functions */

