var keepAliver = {

	cfg : {
		wnd_id : "keep_notify", // ID элемента оповещения, сверстанного в HTML
		break_node : "msg:", // Разделитель строки, если с сервера придет ответ, начинающийся с разделителя - скрипт покажет окошко оповещения и прекратит дергать
		interval : 5, // Интервал пинга, в секндах
		url : "/nop.cgi", // URL который дергать по умолчанию. Оверрайдится URL переданным из HTML при инициализации скрипта
		params : "cmd=post&" // Параметры URL по умолчанию. Параметры переданные из скрипта добавляются к ним
	},

	cTimer : false,
	cUrl : false,
	cParams : false,
	cTimer : false,
	cBreak : false,
	cWnd : false,

	init : function () {

		var oRef = this;
		this.cUrl = arguments.length ? arguments[0] : this.cfg.url;
		this.cParams = arguments.length > 1 ? this.cfg.params+arguments[1] : this.cfg.params;
		var cBack = function () {oRef.ping();}
		this.cWnd = document.getElementById(this.cfg.wnd_id);
		this.cTimer = setTimeout(cBack,this.cfg.interval * 1000);

	},

	ping : function () {

		var cBack = function (msg,state) {
			keepAliver.loaded(msg,state);
		}; sandyXml.postString(this.cUrl,this.cParams,cBack);

	},

	loaded : function (msg,state) {
		
		if (state) 
		{
			if (msg.substring(0,this.cfg.break_node.length) == this.cfg.break_node) 
			{
				var txt = msg.substring(this.cfg.break_node.length);
				if (this.cWnd) 
				{
					//alert(txt);
					this.cWnd.firstChild.innerHTML = txt;
					this.cWnd.style.display = 'block';
				} 
			}
			//else 
			//{
			var oRef = this;
			var cBack = function () {oRef.ping();}
			this.cTimer = setTimeout(cBack,this.cfg.interval * 1000);
			//}
		} 

	}

}

var sandyXml = {

	getString:function(u,f){var r=this.c(u,0,f);if(r.e)return false;return r.d()},
	postString:function(u,d,f){var r=this.c(u,0,f,d);if(r.e)return false;r.d();return true},
	c:function(){
		var a=arguments;
		var r={e:false,u:a.length?a[0]:false,t:a.length>1?a[1]:0,a:a.length>2?true:false,c:a.length>2?a[2]:false,m:a.length>3?"POST":"GET",b:a.length>3?a[3]:null};
		try{r.x=new XMLHttpRequest()}catch(e){try{r.x=new ActiveXObject("Msxml2.XMLHTTP")}catch(e){try{r.x=new ActiveXObject("Microsoft.XMLHTTP")}catch(e){r.e=true;return false}}}
		r.d=function(){r.x.open(this.m,this.u,this.a);
		if(this.m == "POST"){r.x.setRequestHeader("Content-type", "application/x-www-form-urlencoded");r.x.setRequestHeader("Content-length", this.b.length);r.x.setRequestHeader("Connection", "close")}
		if(this.a && this.c){r.x.onreadystatechange=function(){if(r.x.readyState != 4){return}clearTimeout(r.timeout);
		if(r.x.status != 200){if(r.timeout){r.c(new Error(101,'XML_BAD_REQUEST'),false)}else{r.c(new Error(102,'XML_SERVER_TIMEOUT'),false)}}else{r.c(r.t?r.x.responseXML:r.x.responseText,true)}};
		r.timeout=setTimeout(function(){r.timeout=false;r.x.abort()},15000);r.x.send(this.b);
		}else{r.x.send(this.b);if(r.x.status != 200){throw new Error(101,'XML_BAD_REQUEST')}return this.t?r.x.responseXML:r.x.responseText}
		}; return r;			
	} 

}

