/*
Copyright 2008 Damien Otis
License found at http://www.dhtmlfx.net/license.txt
Help file at http://www.dhtmlfx.net/ajaxfx.txt
*/

ajaxfx={
	connectionlimit:	2,
	connectionoverride:	false,
	retrycount:		4,
	retrytimer:		1000,
	errorlimit:		100,
	proc:			[],
	queue:			[],
	errorlog:		[]
};

function ajl(aju,ajt,ajf,aje,aja) {
	if(ajaxfx.proc.length!=ajaxfx.connectionlimit){
		if(ajaxfx.connectionoverride==false&&(ajaxfx.connectionlimit<1||ajaxfx.connectionlimit>4)){ajaxfx.connectionlimit=2}
	}
	ajaxfx.ajl = ajl
	if (ajaxfx.proc.length>0) {
		try{procarrlength = ajaxfx.proc.join(",").match(/\[.*?\]/g).length}catch(e){procarrlength=0}
		nextopenproc = (String(","+ajaxfx.proc.join(",")+",").replace(/\[.*?\]/g,"|").indexOf(",,"))/2
		if (nextopenproc<0) {nextopenproc=procarrlength}
	} else {procarrlength=0;nextopenproc=0}
	aji = arguments[5]
	if (procarrlength>=ajaxfx.connectionlimit||(aji==undefined&&ajaxfx.queue.length>0)) {
		if (aji==undefined) {aji=0}
		ajaxfx.queue.push({aju:aju,ajt:ajt,ajf:ajf,aje:aje,aja:aja,aji:aji})
		return
	}
	if (aji==undefined) {aji=0}
	if (aja==undefined) {aja=true}
	ajaxfx.proc[nextopenproc] = {aju:aju,ajt:ajt,ajf:ajf,aje:aje,aja:aja,aji:aji}
	try{ajaxfx.proc[nextopenproc].ajx=new XMLHttpRequest()}catch(e){ajaxfx.proc[nextopenproc].ajx=new ActiveXObject("MSXML2.XMLHTTP.3.0")}
	var procx=ajaxfx
	var proci=ajaxfx.proc[nextopenproc]
	proci.thisproc=nextopenproc
	proci.ajx.open(ajf?"post":"get",aju,(aja!=undefined)?aja:true);
	if(ajf)proci.ajx.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	proci.ajx.onreadystatechange=function(){
		try{
			if (proci.ajx.readyState<4){return};
			if (proci.ajx.status<400) {
				if (document.getElementById(proci.ajt)) {
					document.getElementById(proci.ajt).innerHTML=proci.ajx.responseText
				} else {
					proci.ajt(proci.ajx.responseXML,proci.ajx.responseText,proci.ajx.getAllResponseHeaders())
				}
			} else {
				ajerr_aju = proci.aju
				ajerr_ajt = proci.ajt
				ajerr_ajf = proci.ajf
				ajerr_aje = proci.aje
				ajerr_aji = proci.aji
				ajerr_aji++
				if (ajerr_aji<ajaxfx.retrycount) {
					setTimeout("ajl(ajerr_aju,ajerr_ajt,ajerr_ajf,ajerr_aje,true,ajerr_aji)",ajaxfx.retrytimer)
				} else {
					ajaxfx.errorlog.push(new Date()+"|"+ajerr_aju+"|"+ajerr_ajf+"|"+proci.ajx.status)
					if (ajaxfx.errorlog.length>ajaxfx.errorlimit){ajaxfx.errorlog.shift()}
					ajerr_aje(proci)
				}
			}
		}catch(e){}
		ajaxfx.proc[proci.thisproc].ajx.onreadystatechange=function(){};
		ajaxfx.proc[proci.thisproc].ajx=null
		ajaxfx.proc[proci.thisproc]=null
		if (procx.queue.length>0) {
			ajq = procx.queue.shift()
			ajl(ajq.aju,ajq.ajt,ajq.ajf,ajq.aje,ajq.aja,ajq.aji)
		}
	}
	proci.ajx.send(ajf)
	return proci
}