function remoteAjaxFunctions() {
	var self = this;
	var param;
	var attr;
	var r;
	this.resetTimeout = Number(2);
	this.timeouts = new Array();
	this.makeRequest = function(param,attr,r) {
		var fileref=document.createElement('script');
		fileref.setAttribute("type","text/javascript");
		if (!r) {
			var id = self.getUnixTime();
			param += '?remoteAjaxId='+id+'&'+attr;
			var t = self.resetTimeout;
		}
		else {
			var t = Number(r);
		}
		fileref.setAttribute("src", param);
		document.getElementsByTagName('head')[0].appendChild(fileref);
		param = str_replace("'",'<#splash#>',param);
		self.timeouts[param] = setTimeout("rAjax.resetRequest('"+param+"',"+t+")",(t*1000));
		return true;
	}
	this.resetRequest = function(param,attr) {
		param = str_replace('<#splash#>',"'",param);
		if (self.endRequest(param)) {
			if (attr > 8) {
				alert('ГРЕШКА: Не може да се осъществи връзка със сървъра. Моля проверете интернет връзката си.');
				return false;
			}
			attr = Number(attr * 2);
			self.makeRequest(param,false,attr);
		}
		return true;
	}
	this.endRequest = function(param) {
		var allsuspects=document.getElementsByTagName("script")
		for (var i=0;i<allsuspects.length; i++){
			if (allsuspects[i] && allsuspects[i].getAttribute("src")!=null && allsuspects[i].getAttribute("src").indexOf(param)!=-1) {
				allsuspects[i].parentNode.removeChild(allsuspects[i]);
				self.cleartimeout(param);
				return true;
			}
		}
		return false;
	}
	this.cleartimeout = function(param) {
		if (self.timeouts[param]) {
			try {
				clearTimeout(self.timeouts[param]);
				self.timeouts[param] = false;
			}
			catch(e) { return false; }
		}
	}
	this.getUnixTime = function() {
		var foo = new Date; // Generic JS date object
		var unixtime_ms = foo.getTime(); // Returns milliseconds since the epoch
		return unixtime_ms;
	}
	this.createxml = function(param) {
		try {
			var xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
			xmlDoc.async="false";
			xmlDoc.loadXML(param);
		}
		catch(e) {
			try {
				var parser=new DOMParser();
				var xmlDoc=parser.parseFromString(param,"text/xml");
			}
			catch(e) { return false; }
		}
		return xmlDoc;
	}
	this.najax_ejs = function(param) {
		eval(param);
	}
	this.najax_art = function(param) {
		 alert(param);
	}
	this.najax_fwd = function(param) {
		document.location.href=param;
	}
	this.processXml = function(param) {
		var xmldoc = self.createxml(param);
		if (!xmldoc) { return false; }
		var root = xmldoc.getElementsByTagName('najax')[0];
		for(var i=0;i<root.childNodes.length;i++) {
			switch(root.childNodes[i].getAttribute("act")) {
				case 'ejs':
				self.najax_ejs(root.childNodes[i].childNodes[0].nodeValue);
				break
				case 'art':
				self.najax_art(root.childNodes[i].childNodes[0].nodeValue);
				break
				case 'fwd':
				self.najax_fwd(root.childNodes[i].childNodes[0].nodeValue);
				break
			}
		}
	}
	return true;
}
var rAjax = new remoteAjaxFunctions;
