var timerID = 1;
var poolTimer = -1;
var poolTimerAllowed = true;

///////////////////////////////////////////////////////
var allowDebug = true;
var dbgPingCounter = 1;
var dbgOpenSocketCounter = 1;
///////////////////////////////////////////////////////

///////////////////////////////////////////////////////
actionTrigger = function(tmrId) {
	clearTimeout(poolTimer);
	if (tmrId == null) {
		tmrId = timerID++;
		pool = new localPOOL();
		pool.showAlertIcon = false;
	}
	if (poolTimerAllowed) {
		poolTimer = setTimeout("actionTrigger('"+tmrId+"');", poolInterval);
		dbg(1,"Ping: "+dbgPingCounter++);
		dbg(3,"Timer #: "+tmrId);
		initpool();
		if (typeof(custompool) == 'function') { custompool(); }
	}
};

initpool = function() {
	if (pool) {
		if (!pool.isSocketOpen()) { 
			pool.getStatus(); 
		} else { 
			dbg(2,"Drop: "+dbgOpenSocketCounter++); 
		}
	}
};
///////////////////////////////////////////////////////

function dbg(layer, msg) {
	if (allowDebug) { 
		var dbgLayer = d('dbgLayer'+layer);
		if (dbgLayer) dbgLayer.innerHTML=msg;
	}
}

///////////////////////////////////////////////////////
localPOOL = function () {
	var XMLReq;
	var DIVobj;
	var requestInProgress = false;
	var socket_open = false;
	var target = "";
	var args = "";
	var browser = navigator.userAgent.toUpperCase();
	this.url = poolFile;

	this.isSocketOpen = function() {
		return socket_open;
	};
	this.setTarget = function(x) {
		target = x;
		DIVobj= (x.substring(0,2) == "__") ? d(launcherObjName) : d(target);
	};
	this.setURL = function() {
		this.url = this.url + "?act=" + target + args;
	};
	this.setArgs = function(arg) {
		args = arg;
	};
	this.Do = function() {
		if (!DIVobj) { return; }
		this.setURL();
		if (window.XMLHttpRequest) {
			XMLReq = new XMLHttpRequest();
		} else if (window.ActiveXObject) {
			if(browser.indexOf("MSIE 5") < 0) {
	            XMLReq = new ActiveXObject("Msxml2.XMLHTTP");
	        } else {
	            XMLReq = new ActiveXObject("Microsoft.XMLHTTP");
	        }		
		}
		if (XMLReq && requestInProgress == false) {
			XMLReq.onreadystatechange = function() {
				if (XMLReq.readyState == 4 && XMLReq.status == 200) { 
					if (XMLReq.responseText.length > 0) {
						var old_scroll = DIVobj.scrollTop;
						DIVobj.innerHTML = XMLReq.responseText;
						DIVobj.scrollTop = old_scroll;
					}
				}
				requestInProgress = false;
			};
			requestInProgress = true;
	        var now = "upid=" + new Date().getTime();
	        this.url += "&"+now;
    		XMLReq.open("GET", this.url, true);
   			XMLReq.send("");
		}
	};
	this.getStatus = function() {
		var status = 0;
		var url = this.url;
		
		if (!istimeZoneSet) {
			var DST = new DSTdates();
			url = url + "?act=time&offset=" + getTimeZoneMask(getStandardTimezoneOffset()).replace("+","%2B");
			if (DST.init()) {
				url = url + "&dst1="+DST.start+"&dst2="+DST.end;
			}
			istimeZoneSet = true;
		}
		if (window.XMLHttpRequest) {
			XMLReq = new XMLHttpRequest();
		} else if (window.ActiveXObject) {
			if(browser.indexOf("MSIE 5") < 0) {
	            XMLReq = new ActiveXObject("Msxml2.XMLHTTP");
	        } else {
	            XMLReq = new ActiveXObject("Microsoft.XMLHTTP");
	        }		
		}
		if (XMLReq && socket_open == false) {
			XMLReq.onreadystatechange = function() {
				if (XMLReq.readyState == 4) { 
					if (XMLReq.status == 200) { 
						var result = XMLReq.responseText.trim();
						status = (result.length < 1) ? 0 : (!isNaN(result)) ? parseInt(result,10) : handleCombinedResponce(result);
						if (status > 0) {
							var bit = 0;
							var i = 0;
							for(j=status;j>=1;j=j/2){
								bit = parseInt(j%2,10);
								if (bit == 1) {
									var local = new localPOOL();
									local.setTarget(bitarray[i]);
									var argObj = d(bitarray[i]+"_args_");
									if (argObj) local.setArgs(argObj.value);
									local.Do();
								}
								i++;
							}
						} else if (status == -999) {
							poolTimerAllowed = false;
						}
						socket_open = false;
					}
				}
			};
			socket_open = true;
    		XMLReq.open("GET", url, true);
    		XMLReq.send("");
		}
	};
};
///////////////////////////////////////////////////////

///////////////////////////////////////////////////////
handleCombinedResponce = function(x) {
	var res = ""; 
	var flag = 0;
	this.cmd = function(c,x) {
		var status = false;
		var pos = x.indexOf(c);
		if (pos > -1) {
			res = x.substring(c.length + 1);
			status = true;
		}
		return status;
	};
	var commands = x.split(";");
	for (var i=0; i<commands.length; i++) {
		if (this.cmd("imgroot",commands[i])) {
			setImgRoot(res); 
		} else 	if (this.cmd("ping_flag",commands[i])) { 
			flag = (!isNaN(res)) ? parseInt(res) : 0; 
		}
	}
	return flag;
};
///////////////////////////////////////////////////////

