// JavaScript lib $Revision: 2160 $ (Rev:1.32)
var global_HR={debug:false};
//var global_XHR={url:"../../ajax/ServerSim.jsp",method:"post",timeout:20000};

var global_XHR={
	url:"./AudOSXhrFacadeCmd",
	method:"post",
	timeout:20000};
	
var global_AOS_XHR={
	url:"./AOSXhrFacadeCmd",
	method:"post",
	timeout:20000};
	
var used_global_XHR = null;
	
var registryXHR={
	active:0,
	register:function(id,_a,_b,_c,t){
		this[id]=new processXHR(id,_a,_b,_c);
		this[id].tm=(function(id){
			return function(){
				if(registryXHR[id]!=null){
					registryXHR[id].cancel();
				}else{
				}
			};
		})(id);
		setTimeout(this[id].tm,t);
		this[id].watch=(function(id){
			return function(){
				if(registryXHR[id]!=null&&registryXHR[id].state==true){
					registryXHR[id].hideSym();
					registryXHR[id].periodical.stop();
					registryXHR[id].destroy();
				}
			};
		})(id);
		this[id].periodical=new PeriodicalExecuter(this[id].watch,0.1);
		this[id].periodical.initialize();
	},
	unregister:function(id){
		if(this[id]!=null){
			this[id]=null;
		}
	},
	checkObjSuccess:function(id,data,status,params){
		if(this[id]!=null){
			this[id].status=status;
			this[id].data=data;
			this[id].params=params;
			this[id].check();
		}else{
		}
	},
	checkObjError:function(id,req,status,ex,params){
		if(this[id]!=null){
			this[id].req=req;
			this[id].status=status;
			this[id].ex=ex;
			this[id].params=params;
			this[id].check();
		}else{
		}
	}};

var ajaxIF={
	ifra:null,
	ifradoc:Object,
	ifraID:"ajaxIFid",
	ifraSrc:"",
	errtxt:"",
	show:function(_24){
/* DISABLED
		if(!this.ifra){
			this.ifra=document.createElement("iframe");
			this.ifra.src="javascript:void(0)";
			this.ifra.id=this.ifraID;
//			this.ifra=$("ext_cnt").insertBefore(this.ifra,$("ext_cnt").firstChild);
			$("#ext_cnt").prepend(this.ifra);
		}
		this.ifra.style.display="block";
		if(this.ifraSrc!=_24){
			this.ifra.src=_24;
			this.ifraSrc=_24;
		}*/
	},
	hide:function(){
// DISABLED		this.ifra.style.display="none";
	},
	unhide:function(){
/* DISABLED
		this.ifra.style.display="block";
		this.ifra.src=this.ifraSrc; */
	},
	check:function(){
		if(this.ifra){
			return true;
		}else{
			return false;
		}
	},
	setmsg:function(txt){
		this.errtxt=(txt!=null)?txt:"";
	},
	errhand:function(){
/* DISABLED
		if(cb.moz){
			this.ifradoc=this.ifra.contentDocument;
		}else{
			if(cb.ie){
				this.ifradoc=this.ifra.contentWindow.document;
			}else{
				if(cb.ie50){
					this.ifradoc=this.ifra.document;
				}
			}
		}*/
		if(this.errtxt!=null&&this.errtxt!=""){
			this.ifradoc.getElementById("msgtxt").innerHTML=this.errtxt;
		}
	}};

function PeriodicalExecuter(callback, frequency) {
//	this.callback = callback;
	this.frequency = frequency;

	this.initialize = function() {
		currentlyExecuting = false;

		this.registerCallback();
	},
	this.registerCallback = function() {
		this.intervalID=setInterval(this.onTimerEvent,this.frequency*1000);
	},
	this.onTimerEvent = function() {
		if (!this.currentlyExecuting) {
			try {
				this.currentlyExecuting = true;
				callback();
			} finally {
				this.currentlyExecuting = false;
			}
		}
	},
	this.stop = function(){
		clearInterval(this.intervalID);
	}
}
	
function getXHR(_1d,_1e,sym,_20,_21, isAOS){
	var tmp=_1d.replace(/(.+\?)/,"");
	used_global_XHR = (isAOS ? global_AOS_XHR : global_XHR);
	var xhr=new generateXHR(tmp,_1e,sym,_20,_21);
	xhr.showSym();
	xhr.send();
}

function generateXHR(_14,_15,sym,_17,_18){
	registryXHR.active++;
	this.params=_14;
	this.respond=_15;
	this.sym=sym;
	this.extraParams=_17;
	if(_18!=null){
		this.timeout=_18;
	}else{
		this.timeout=used_global_XHR.timeout;
	}
	this.id="xhr06_"+new Date().getTime();
	this.url=used_global_XHR.url;
	this.method=used_global_XHR.method;
	this.send=function(){
		this.params+="&ajax=true&reqid="+this.id;
		registryXHR.register(this.id,this.respond,this.sym,this.extraParams,this.timeout);
//TODO		var _19=new Ajax.Request(this.url,{method:this.method,parameters:this.params,onComplete:this.handle,onException:this.handle});
		$.ajax({
			type: this.method,
			url: this.url,
			data: this.params,
			success: this.handleSuccess,
			error: this.handleError
		});
	};
	this.showSym=function(){
		ajaxIF.show(ajaxMsgPATH);
	};
	this.handleSuccess=(function(id,params){
		return function(data,status){
			registryXHR.checkObjSuccess(id,data,status,params);
		};
	})(this.id,this.params);
	this.handleError=(function(id,params){
		return function(req,status,ex){
			registryXHR.checkObjError(id,req,status,ex,params);
		};
	})(this.id,this.params);	
}

function processXHR(id,_2,_3,_4){
	this.id=id;
	this.respond=_2;
	this.sym=_3;
	this.extraParams=_4;
	this.substXHR=null;
	this.errorIndex=0;
	this.state=false;
	this.fallback=function(){
		this.substXHR=new substXHR(this.id);
		this.substXHR.setParams(this.params);
		this.substXHR.send("post",used_global_XHR.url);
	};
	this.fillSubstXHR=function(_5){
		this.substXHR.readyState=4;
		this.substXHR.status=200;
		this.substXHR.statusText="OK";
		this.substXHR.responseText=_5;
		this.req=this.substXHR;
		this.ex=null;
		var _6=$(this.substXHR._id);
		_6.parentNode.removeChild(_6);
		this.check();
	};
	this.hideSym=function(){
		if(ajaxIF.check()&&registryXHR.active==0){
			ajaxIF.hide();
		}
	};
	this.check=function(){
		if(this.status==null){
			this.err();
			return;
		}
//TODO: what is this for?
		if(this.req!=null){
			this.fallback(this.req);
		}else{
			if(this.status!="success"){
				this.err(this.data.substring(6));
				return;
			}else{
				this.respond(this.data,this.extraParams);
				this.state=true;
			}
		}
	};
	this.err=function(m){
		this.end();
		this.errorIndex++;
		this.destroy();
		ajaxIF.setmsg(m);
		ajaxIF.show(ajaxErrPATH);
	};
	this.end=function(){
		this.periodical.stop();
		this.hideSym();
		if($(this.id)){
			var _8=$("#"+this.id);
			_8.remove();
		}
	};
	this.cancel=function(){
		this.err();
	};
	this.destroy=function(){
		registryXHR.active--;
		if(registryXHR.active==0){
			this.hideSym();
		}
		registryXHR.unregister(this.id);
	};
}
