/**
* Utility methods
*
* @category	HTML
* @package	Ajax
* @license	http://www.opensource.org/licenses/lgpl-license.php  LGPL
*
* See Main.js for author/license details
*/
/**
* All the utilities we will be using thorough the classes
*/
var HTML_AJAX_Util = {
registerEvent: function(element, event, handler)
{
element = this.getElement(element);
if (typeof element.addEventListener != "undefined") {   //Dom2
element.addEventListener(event, handler, false);
} else if (typeof element.attachEvent != "undefined") { //IE 5+
element.attachEvent("on" + event, handler);
} else {
if (element["on" + event] != null) {
var oldHandler = element["on" + event];
element["on" + event] = function(e) {
oldHander(e);
handler(e);
};
} else {
element["on" + event] = handler;
}
}
},
eventTarget: function(event)
{
if (!event) var event = window.event;
if (event.target) return event.target; // w3c
if (event.srcElement) return event.srcElement; // ie 5
},
getType: function(inp)
{
var type = typeof inp, match;
if(type == 'object' && !inp)
{
return 'null';
}
if (type == "object") {
if(!inp.constructor)
{
return 'object';
}
var cons = inp.constructor.toString();
if (match = cons.match(/(\w+)\(/)) {
cons = match[1].toLowerCase();
}
var types = ["boolean", "number", "string", "array"];
for (key in types) {
if (cons == types[key]) {
type = types[key];
break;
}
}
}
return type;
},
strRepeat: function(inp, multiplier) {
var ret = "";
while (--multiplier > 0) ret += inp;
return ret;
},
encodeUrl: function(input) {
return encodeURIComponent(input);
},
decodeUrl: function(input) {
return decodeURIComponent(input);
},
varDump: function(inp, printFuncs, _indent, _recursionLevel)
{
if (!_recursionLevel) _recursionLevel = 0;
if (!_indent) _indent = 1;
var tab = this.strRepeat("  ", ++_indent);
var type = this.getType(inp), out = type;
var consrx = /(\w+)\(/;
consrx.compile();
if (++_recursionLevel > 6) {
return tab + inp + "Loop Detected\n";
}
switch (type) {
case "boolean":
case "number":
out += "(" + inp.toString() + ")";
break;
case "string":
out += "(" + inp.length + ") \"" + inp + "\"";
break;
case "function":
if (printFuncs) {
out += inp.toString().replace(/\n/g, "\n" + tab);
}
break;
case "array":
case "object":
var atts = "", attc = 0;
try {
for (k in inp) {
atts += tab + "[" + (/\D/.test(k) ? "\"" + k + "\"" : k)
+ "]=>\n" + tab + this.varDump(inp[k], printFuncs, _indent, _recursionLevel);
++attc;
}
} catch (e) {}
if (type == "object") {
var objname, objstr = inp.toString();
if (objname = objstr.match(/^\[object (\w+)\]$/)) {
objname = objname[1];
} else {
try {
objname = inp.constructor.toString().match(consrx)[1];
} catch (e) {
objname = 'unknown';
}
}
out += "(" + objname + ") ";
}
out += "(" + attc + ") {\n" + atts + this.strRepeat("  ", _indent - 1) +"}";
break;
}
return out + "\n";
},
quickPrint: function(input,sep) {
if (!sep) {
var sep = "\n";
}
var type = HTML_AJAX_Util.getType(input);
switch (type) {
case 'string':
return input;
case 'array':
var ret = "";
for(var i = 0; i < input.length; i++) {
ret += i+':'+input[i]+sep;
}
return ret;
default:
var ret = "";
for(var i in input) {
ret += i+':'+input[i]+sep;
}
return ret;
}
},
getAllElements: function(parentElement)
{
if( document.all)
{
if(!parentElement) {
var allElements = document.all;
}
else
{
var allElements = [], rightName = new RegExp( parentElement, 'i' ), i;
for( i=0; i<document.all.length; i++ ) {
if( rightName.test( document.all[i].parentElement ) )
allElements.push( document.all[i] );
}
}
return allElements;
}
else
{
if (!parentElement) { parentElement = document.body; }
return parentElement.getElementsByTagName('*');
}
},
getElementsByProperty: function(property, regex, parentElement) {
var allElements = HTML_AJAX_Util.getAllElements(parentElement);
var items = [];
for(var i=0,j=allElements.length; i<j; i++)
{
if(regex.test(allElements[i][property]))
{
items.push(allElements[i]);
}
}
return items;
},
getElementsByClassName: function(className, parentElement) {
return HTML_AJAX_Util.getElementsByProperty('className',new RegExp('(^| )' + className + '( |$)'),parentElement);
},
getElementsById: function(id, parentElement) {
return HTML_AJAX_Util.getElementsByProperty('id',new RegExp(id),parentElement);
},
getElementsByCssSelector: function(selector,parentElement) {
return cssQuery(selector,parentElement);
},
htmlEscape: function(inp) {
var div = document.createElement('div');
var text = document.createTextNode(inp);
div.appendChild(text);
return div.innerHTML;
},
baseURL: function(absolute, filename) {
var qPos = absolute.indexOf('?');
if (qPos >= 0) {
absolute = absolute.substr(0, qPos);
}
var slashPos = Math.max(absolute.lastIndexOf('/'), absolute.lastIndexOf('\\'));
if (slashPos < 0) {
return absolute;
}
return (filename ? absolute.substr(slashPos + 1) : absolute.substr(0, slashPos + 1));
},
queryString: function(url) {
var qPos = url.indexOf('?');
if (qPos >= 0) {
return url.substr(qPos+1);
}
},
absoluteURL: function(rel, absolute) {
if (/^https?:\/\//i.test(rel)) {
return rel;
}
if (!absolute) {
var bases = document.getElementsByTagName('base');
for (i in bases) {
if (bases[i].href) {
absolute = bases[i].href;
break;
}
}
if (!absolute) {
absolute = window.location.href;
}
}
if (rel == '') {
return absolute;
}
if (rel.substr(0, 2) == '//') {
var slashesPos = absolute.indexOf('//');
if (slashesPos < 0) {
return 'http:' + rel;
}
return absolute.substr(0, slashesPos) + rel;
}
var base = this.baseURL(absolute);
var absParts = base.substr(0, base.length - 1).split('/');
var absHost = absParts.slice(0, 3).join('/') + '/';
if (rel.substr(0, 1) == '/') {
return absHost + rel;
}
if (rel.substr(0, 1) == '.' && rel.substr(1, 1) != '.') {
return base + rel.substr(1);
}
absParts.splice(0, 3);
var relParts = rel.split('/');
var loopStart = relParts.length - 1;
relParts = absParts.concat(relParts);
for (i = loopStart; i < relParts.length;) {
if (relParts[i] == '..') {
if (i == 0) {
return absolute;
}
relParts.splice(i - 1, 2);
--i;
continue;
}
i++;
}
return absHost + relParts.join('/');
},
setInnerHTML: function(node, innerHTML, type)
{
node = this.getElement(node);
if (type != 'append') {
if (type == 'prepend') {
var oldHtml = node.innerHTML;
}
node.innerHTML = '';
}
var good_browser = (navigator.product == 'Gecko');
var regex = /^([\s\S]*?)<script([\s\S]*?)>([\s\S]*?)<\/script>([\s\S]*)$/i;
var regex_src = /src=["'](.*?)["']/i;
var matches, id, script, output = '', subject = innerHTML;
var scripts = [];
while (true) {
matches = regex.exec(subject);
if (matches && matches[0]) {
subject = matches[4];
id = 'ih_' + Math.round(Math.random()*9999) + '_' + Math.round(Math.random()*9999);
var startLen = matches[3].length;
script = matches[3].replace(/document\.write\(([\s\S]*?)\)/ig,
'document.getElementById("' + id + '").innerHTML+=$1');
output += matches[1];
if (startLen != script.length) {
output += '<span id="' + id + '"></span>';
}
output += '<script' + matches[2] + '>' + script + '</script>';
if (good_browser) {
continue;
}
if (script) {
scripts.push(script);
}
if (regex_src.test(matches[2])) {
var script_el = document.createElement("SCRIPT");
var atts_regex = /(\w+)=["'](.*?)["']([\s\S]*)$/;
var atts = matches[2];
for (var i = 0; i < 5; i++) {
var atts_matches = atts_regex.exec(atts);
if (atts_matches && atts_matches[0]) {
script_el.setAttribute(atts_matches[1], atts_matches[2]);
atts = atts_matches[3];
} else {
break;
}
}
scripts.push(script_el);
}
} else {
output += subject;
break;
}
}
innerHTML = output;
if (good_browser) {
var el = document.createElement('span');
el.innerHTML = innerHTML;
for(var i = 0; i < el.childNodes.length; i++) {
node.appendChild(el.childNodes[i].cloneNode(true));
}
}
else {
node.innerHTML += innerHTML;
}
if (oldHtml) {
node.innerHTML += oldHtml;
}
if (!good_browser) {
for(var i = 0; i < scripts.length; i++) {
if (HTML_AJAX_Util.getType(scripts[i]) == 'string') {
scripts[i] = scripts[i].replace(/^\s*<!(\[CDATA\[|--)|((\/\/)?--|\]\])>\s*$/g, '');
window.eval(scripts[i]);
}
else {
node.appendChild(scripts[i]);
}
}
}
return;
},
classSep: '(^|$| )',
hasClass: function(o, className) {
var o = this.getElement(o);
var regex = new RegExp(this.classSep + className + this.classSep);
return regex.test(o.className);
},
addClass: function(o, className) {
var o = this.getElement(o);
if(!this.hasClass(o, className)) {
o.className += " " + className;
}
},
removeClass: function(o, className) {
var o = this.getElement(o);
var regex = new RegExp(this.classSep + className + this.classSep);
o.className = o.className.replace(regex, " ");
},
replaceClass: function(o, oldClass, newClass) {
var o = this.getElement(o);
var regex = new RegExp(this.classSep + oldClass + this.classSep);
o.className = o.className.replace(regex, newClass);
},
getElement: function(el) {
if (typeof el == 'string') {
return document.getElementById(el);
}
return el;
}
}
/**
* Compat functions
* @category	HTML
* @package	AJAX
* @author	Joshua Eichorn <josh@bluga.net>
* @copyright	2005 Joshua Eichorn
* @license	http://www.opensource.org/licenses/lgpl-license.php  LGPL
*/
/**
*  Functions for compatibility with older browsers
*/
if (!String.fromCharCode && !String.prototype.fromCharCode) {
String.prototype.fromCharCode = function(code)
{
var h = code.toString(16);
if (h.length == 1) {
h = '0' + h;
}
return unescape('%' + h);
}
}
if (!String.charCodeAt && !String.prototype.charCodeAt) {
String.prototype.charCodeAt = function(index)
{
var c = this.charAt(index);
for (i = 1; i < 256; i++) {
if (String.fromCharCode(i) == c) {
return i;
}
}
}
}
if (!Array.splice && !Array.prototype.splice) {
Array.prototype.splice = function(s, d)
{
var max = Math.max,
min = Math.min,
a = [], // The return value array
e,  // element
i = max(arguments.length - 2, 0),   // insert count
k = 0,
l = this.length,
n,  // new length
v,  // delta
x;  // shift count
s = s || 0;
if (s < 0) {
s += l;
}
s = max(min(s, l), 0);  // start point
d = max(min(typeof d == 'number' ? d : l, l - s), 0);	// delete count
v = i - d;
n = l + v;
while (k < d) {
e = this[s + k];
if (!e) {
a[k] = e;
}
k += 1;
}
x = l - s - d;
if (v < 0) {
k = s + i;
while (x) {
this[k] = this[k - v];
k += 1;
x -= 1;
}
this.length = n;
} else if (v > 0) {
k = 1;
while (x) {
this[n - k] = this[l - k];
k += 1;
x -= 1;
}
}
for (k = 0; k < i; ++k) {
this[s + k] = arguments[k + 2];
}
return a;
}
}
if (!Array.push && !Array.prototype.push) {
Array.prototype.push = function()
{
for (var i = 0, startLength = this.length; i < arguments.length; i++) {
this[startLength + i] = arguments[i];
}
return this.length;
}
}
if (!Array.pop && !Array.prototype.pop) {
Array.prototype.pop = function()
{
return this.splice(this.length - 1, 1)[0];
}
}
if (window.ActiveXObject && window['DOMParser'] == 'undefined') {
window.DOMParser = new function() {};
DOMParser.prototype = {
parseFromString: function(str, contentType) {
var xmlDocument = new ActiveXObject('Microsoft.XMLDOM');
xmlDocument.loadXML(str);
return xmlDocument;
}
};
window.XMLSerializer = new function() {};
XMLSerializer.prototype = {
serializeToString: function(root) {
return root.xml || root.outerHTML;
}
};
}
/**
* JavaScript library for use with HTML_AJAX
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to:
* Free Software Foundation, Inc.,
* 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
*
* @category	HTML
* @package	Ajax
* @author	Joshua Eichorn <josh@bluga.net>
* @author	Arpad Ray <arpad@php.net>
* @author	David Coallier <davidc@php.net>
* @author	Elizabeth Smith <auroraeosrose@gmail.com>
* @copyright	2005 Joshua Eichorn, Arpad Ray, David Coallier, Elizabeth Smith
* @license	http://www.opensource.org/licenses/lgpl-license.php  LGPL
*/
/**
* HTML_AJAX static methods, this is the main proxyless api, it also handles global error and event handling
*/
var HTML_AJAX = {
version: '0.5.6',
defaultServerUrl: false,
defaultEncoding: 'JSON',
queues: false,
clientPools: {},
httpClient: function(name) {
if (name) {
if (this.clientPools[name]) {
return this.clientPools[name].getClient();
}
}
return this.clientPools['default'].getClient();
},
makeRequest: function(request) {
if (!HTML_AJAX.queues[request.queue]) {
var e = new Error('Unknown Queue: '+request.queue);
if (HTML_AJAX.onError) {
HTML_AJAX.onError(e);
return false;
}
else {
throw(e);
}
}
else {
var qn = request.queue;
var q = HTML_AJAX.queues[qn];
HTML_AJAX.queues[request.queue].addRequest(request);
return HTML_AJAX.queues[request.queue].processRequest();
}
},
serializerForEncoding: function(encoding) {
for(var i in HTML_AJAX.contentTypeMap) {
if (encoding == HTML_AJAX.contentTypeMap[i] || encoding == i) {
return eval("new HTML_AJAX_Serialize_"+i+";");
}
}
return new HTML_AJAX_Serialize_Null();
},
fullcall: function(url,encoding,className,method,callback,args, options) {
var serializer = HTML_AJAX.serializerForEncoding(encoding);
var request = new HTML_AJAX_Request(serializer);
if (callback) {
request.isAsync = true;
}
request.requestUrl = url;
request.className = className;
request.methodName = method;
request.callback = callback;
request.args = args;
if (options) {
for(var i in options) {
request[i] = options[i];
}
if (options.grab) {
if (!request.args || !request.args.length) {
request.requestType = 'GET';
}
}
}
return HTML_AJAX.makeRequest(request);
},
callPhpCallback: function(phpCallback, jsCallback, url) {
var args = new Array();
for (var i = 3; i < arguments.length; i++) {
args.push(arguments[i]);
}
if (HTML_AJAX_Util.getType(phpCallback[0]) == 'object') {
jsCallback(phpCallback[0][phpCallback[1]](args));
return;
}
if (!url) {
url = HTML_AJAX.defaultServerUrl;
}
HTML_AJAX.fullcall(url, HTML_AJAX.defaultEncoding,
false, false, jsCallback, args, {phpCallback: phpCallback});
},
call: function(className,method,callback) {
var args = new Array();
for(var i = 3; i < arguments.length; i++) {
args.push(arguments[i]);
}
return HTML_AJAX.fullcall(HTML_AJAX.defaultServerUrl,HTML_AJAX.defaultEncoding,className,method,callback,args);
},
grab: function(url,callback,options) {
if (!options) {
options = {grab:true};
}
else {
options['grab'] = true;
}
return HTML_AJAX.fullcall(url,'Null',false,null,callback, '', options);
},
post: function(url,payload,callback,options) {
var serializer = 'Null';
if (HTML_AJAX_Util.getType(payload) == 'object') {
serializer = 'Urlencoded';
}
return HTML_AJAX.fullcall(url,serializer,false,null,callback, payload, options);
},
replace: function(id) {
var callback = function(result) {
HTML_AJAX_Util.setInnerHTML(HTML_AJAX_Util.getElement(id),result);
}
if (arguments.length == 2) {
HTML_AJAX.grab(arguments[1],callback);
}
else {
var args = new Array();
for(var i = 3; i < arguments.length; i++) {
args.push(arguments[i]);
}
HTML_AJAX.fullcall(HTML_AJAX.defaultServerUrl,HTML_AJAX.defaultEncoding,arguments[1],arguments[2],callback,args, {grab:true});
}
},
append: function(id) {
var callback = function(result) {
HTML_AJAX_Util.setInnerHTML(HTML_AJAX_Util.getElement(id),result,'append');
}
if (arguments.length == 2) {
HTML_AJAX.grab(arguments[1],callback);
}
else {
var args = new Array();
for(var i = 3; i < arguments.length; i++) {
args.push(arguments[i]);
}
HTML_AJAX.fullcall(HTML_AJAX.defaultServerUrl,HTML_AJAX.defaultEncoding,arguments[1],arguments[2],callback,args, {grab:true});
}
},
Open: function(request) {
},
Load: function(request) {
},
/*
onError: function(e) {
msg = "";
for(var i in e) {
msg += i+':'+e[i]+"\n";
}
alert(msg);
},
*/
contentTypeMap: {
'JSON':			'application/json',
'Null':			'text/plain',
'Error':		'application/error',
'PHP':			'application/php-serialized',
'HA' :			'application/html_ajax_action',
'Urlencoded':		'application/x-www-form-urlencoded'
},
requestComplete: function(request,error) {
for(var i in HTML_AJAX.queues) {
if (HTML_AJAX.queues[i].requestComplete) {
HTML_AJAX.queues[i].requestComplete(request,error);
}
}
},
formEncode: function(form, array_format) {
form = HTML_AJAX_Util.getElement(form);
var el, inpType, value, name;
var out = (array_format) ? {} : '';
var inputTags = form.getElementsByTagName('INPUT');
var selectTags = form.getElementsByTagName('SELECT');
var buttonTags = form.getElementsByTagName('BUTTON');
var textareaTags = form.getElementsByTagName('TEXTAREA');
var arrayRegex = /(.+)%5B%5D/;
var validElement = function (element) {
if (!element || !element.getAttribute) {
return false;
}
el = element;
name = HTML_AJAX_Util.encodeUrl(el.getAttribute('name'));
if (!name) {
return false;
}
if (element.disabled) {
return false;
}
if (!array_format) {
value = HTML_AJAX_Util.encodeUrl(el.value);
} else {
value = el.value;
}
inpType = el.getAttribute('type');
return true;
}
inputLoop:
for (var i=0; i < inputTags.length; i++) {
if (!validElement(inputTags[i])) {
continue;
}
if (inpType == 'checkbox' || inpType == 'radio') {
if (!el.checked) {
continue inputLoop;
}
var arr_var = arrayRegex.exec(name);
if (array_format && arr_var) {
if (!out[arr_var[1]]) {
out[arr_var[1]] = new Array();
}
out[arr_var[1]].push(value);
continue inputLoop;
}
}
if (array_format) {
out[name] = value;
} else {
out += name + '=' + value + '&';
}
} // end inputLoop
selectLoop:
for (var i=0; i<selectTags.length; i++) {
if (!validElement(selectTags[i])) {
continue selectLoop;
}
var options = el.options;
for (var z=0; z<options.length; z++){
var option=options[z];
if(option.selected){
if (array_format) {
if (el.type == 'select-one') {
out[name] = option.value;
continue selectLoop;
} else {
if (!out[name]) {
out[name] = new Array();
}
out[name].push(option.value);
}
} else {
out += name + '=' + option.value + '&';
if (el.type == 'select-one') {
continue selectLoop;
}
}
}
}
} // end selectLoop
buttonLoop:
for (var i=0; i<buttonTags.length; i++) {
if (!validElement(buttonTags[i])) {
continue;
}
if (array_format) {
out[name] = value;
} else {
out += name + '=' + value + '&';
}
} // end buttonLoop
textareaLoop:
for (var i=0; i<textareaTags.length; i++) {
if (!validElement(textareaTags[i])) {
continue;
}
if (array_format) {
out[name] = value;
} else {
out += name + '=' + value + '&';
}
} // end textareaLoop
return out;
},
formSubmit: function (form, target, options)
{
form = HTML_AJAX_Util.getElement(form);
if (!form) {
return false;
}
var out = HTML_AJAX.formEncode(form);
target = HTML_AJAX_Util.getElement(target);
if (!target) {
target = form;
}
try
{
var action = form.attributes['action'].value;
}
catch(e){}
if(action == undefined)
{
action = form.getAttribute('action');
}
var callback = false;
if (HTML_AJAX_Util.getType(target) == 'function') {
callback = target;
}
else {
callback = function(result) {
if (typeof result != 'undefined') {
HTML_AJAX_Util.setInnerHTML(target,result);
}
}
}
var serializer = HTML_AJAX.serializerForEncoding('Null');
var request = new HTML_AJAX_Request(serializer);
request.isAsync = true;
request.callback = callback;
switch (form.getAttribute('method').toLowerCase()) {
case 'post':
var headers = {};
headers['Content-Type'] = 'application/x-www-form-urlencoded';
request.customHeaders = headers;
request.requestType = 'POST';
request.requestUrl = action;
request.args = out;
break;
default:
if (action.indexOf('?') == -1) {
out = '?' + out.substr(0, out.length - 1);
}
request.requestUrl = action+out;
request.requestType = 'GET';
}
if(options) {
for(var i in options) {
request[i] = options[i];
}
}
if (request.isAsync == false) {
return HTML_AJAX.makeRequest(request);
}
else {
HTML_AJAX.makeRequest(request);
return true;
}
}, // end formSubmit()
makeFormAJAX: function(form,target,options) {
form = HTML_AJAX_Util.getElement(form);
var preSubmit = false;
if(typeof form.onsubmit != 'undefined') {
preSubmit = form.onsubmit;
form.onsubmit = function() {};
}
form.HAOptions = options;
var handler = function(e) {
var form = HTML_AJAX_Util.eventTarget(e);
var valid = true;
if (preSubmit) {
valid = preSubmit();
}
if (valid) {
HTML_AJAX.formSubmit(form,target,form.HAOptions);
}
e.returnValue = false;
if (e.preventDefault) {
e.preventDefault();
}
}
HTML_AJAX_Util.registerEvent(form,'submit',handler);
}
}
function HTML_AJAX_Serialize_Null() {}
HTML_AJAX_Serialize_Null.prototype = {
contentType: 'text/plain; charset=utf-8',
serialize: function(input) {
return new String(input).valueOf();
},
unserialize: function(input) {
return new String(input).valueOf();
}
}
function HTML_AJAX_Serialize_XML() {}
HTML_AJAX_Serialize_XML.prototype = {
contentType: 'application/xml; charset=utf-8',
serialize: function(input) {
var xml = '';
if(typeof(input) == 'object' && input)
{
for (var i = 0;i<input.length;i++)
{
xml += new XMLSerializer().serializeToString(input[i]);
}
}
return xml;
},
unserialize: function(input) {
return input;
}
}
function HTML_AJAX_Serialize_JSON() {}
HTML_AJAX_Serialize_JSON.prototype = {
contentType: 'application/json; charset=utf-8',
serialize: function(input) {
return HTML_AJAX_JSON.stringify(input);
},
unserialize: function(input) {
try {
return eval('('+input+')');
} catch(e) {
return HTML_AJAX_JSON.parse(input);
}
}
}
function HTML_AJAX_Serialize_Error() {}
HTML_AJAX_Serialize_Error.prototype = {
contentType: 'application/error; charset=utf-8',
serialize: function(input) {
var ser = new HTML_AJAX_Serialize_JSON();
return ser.serialize(input);
},
unserialize: function(input) {
var ser = new HTML_AJAX_Serialize_JSON();
var data = new ser.unserialize(input);
var e = new Error('PHP Error: '+data.errStr);
for(var i in data) {
e[i] = data[i];
}
throw e;
}
}
function HTML_AJAX_Queue_Immediate() {}
HTML_AJAX_Queue_Immediate.prototype = {
request: false,
addRequest: function(request) {
this.request = request;
},
processRequest: function() {
var client = HTML_AJAX.httpClient();
client.request = this.request;
return client.makeRequest();
}
}
HTML_AJAX.queues = new Object();
HTML_AJAX.queues['default'] = new HTML_AJAX_Queue_Immediate();
HTML_AJAX_Client_Pool = function(maxClients, startingClients)
{
this.maxClients = maxClients;
this._clients = [];
this._len = 0;
while (--startingClients > 0) {
this.addClient();
}
}
HTML_AJAX_Client_Pool.prototype = {
isEmpty: function()
{
return this._len == 0;
},
addClient: function()
{
if (this.maxClients != 0 && this._len > this.maxClients) {
return false;
}
var key = this._len++;
this._clients[key] = new HTML_AJAX_HttpClient();
return this._clients[key];
},
getClient: function ()
{
for (var i = 0; i < this._len; i++) {
if (!this._clients[i].callInProgress() && this._clients[i].callbackComplete) {
return this._clients[i];
}
}
var client = this.addClient();
if (client) {
return client;
}
return false;
},
removeClient: function (client)
{
for (var i = 0; i < this._len; i++) {
if (!this._clients[i] == client) {
this._clients.splice(i, 1);
return true;
}
}
return false;
},
clear: function ()
{
this._clients = [];
this._len = 0;
}
};
HTML_AJAX.clientPools['default'] = new HTML_AJAX_Client_Pool(0);

