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; } } 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 = "POST"; myRequest.url = theform.action; myRequest.handleArguments(args); myRand=parseInt(Math.random()*99999999); myRequest.queryString = serializedForm + "&rand=" + myRand; 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 += escape(name) + "=" + escape(value).replace(new RegExp( "\\+", "g" ), "%2B");
}; 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; 
