function EscapeToWin(AStr){
	if (typeof(AStr)!='string') return AStr;
	var Result='',cc;
	for(var i=0;i<AStr.length;i++) {
		if(AStr.charAt(i)>='À' && AStr.charAt(i)<='ÿ') {
			cc=AStr.charCodeAt(i)-0x0410; Result+='%'+'CDEF'.charAt(cc>>>4);
			cc&=0x0F; Result+=(cc>9) ? 'ABCDEF'.charAt(cc-10): cc;
		} else if(AStr.charAt(i)=='¨')
			Result+='%A8';
		else if(AStr.charAt(i)=='¸')
			Result+='%B8';
		else if(AStr.charAt(i)=='=')
			Result+='%3D';
		else if(AStr.charAt(i)=='&')
			Result+='%26';
		else
			Result+=AStr.charAt(i);
	}
	return Result;
}

var cons,xml_users,xml_msg,conf_id;

var config = {
	xml_src : "/lib/xcons.php",
	usr_var   : "uid",
	delay     : 2000,
	dialog    : "us-dialog",
	cons_id   : 0,
	err_comm  : 'err',
	no_oper   : 'no'
}

function message(mNode) {
	this.id=parseInt(mNode.getAttribute("id"));
	this.typ=mNode.getAttribute("typ");
//	this.time=mNode.getAttribute("time");
	this.msg=unescape(mNode.getAttribute("msg"));
}

function user() {
	this.error  = 0;
	this.uTimer = 0;
	this.uid = 0;
	this.cid = 0;
	this.cimg = null;
	this.oname = '';
	this.uname = '';
	this.msgs = [];
	this.last = 0;

	this.load_msgs = function (xml_doc) {
		if( xml_doc == null || xml_doc.documentElement == null) {
			this.error++; return;
			var elm = document.getElementById(config.dialog);
			elm.innerHTML='';
		}
		this.error=0;
		// read XML doc
		var cn = xml_doc.documentElement.childNodes, j = 0;
		for (var i = 0; i < cn.length; i++) {
			if (cn[i].tagName == "msg") this.msgs.push(new message(cn[i])); j++;
		}
		return j>0;
	}

	this.activate = function (xml_doc) {
		if( xml_doc == null || xml_doc.documentElement == null) return;
		// read XML doc
		var cn = xml_doc.documentElement.childNodes, j = 0;
		for (var i = 0; i < cn.length; i++) {
			if (cn[i].tagName == "connect") {
				this.uid = cn[i].getAttribute("uid");
				this.cid = cn[i].getAttribute("cid");
				this.cimg = cn[i].getAttribute("cimg");
				this.oname = cn[i].getAttribute("oname");
				this.uname = cn[i].getAttribute("uname");
				j++;
			}
		}
		var elm = document.getElementById(config.dialog);
		if (j==0) return;
		elm.innerHTML='';
		window.clearInterval(this.uTimer);
		get_message();
		this.uTimer=window.setInterval("get_message()", config.delay);
	}

	this.show_msgs = function() {
		var elm = document.getElementById(config.dialog);
		var s = "", j = 0;
		if (this.error) s=config.no_oper +"<br>";
		else s='';
		for (var i=0; i<this.msgs.length; i++) {
			if (this.last<this.msgs[i].id) {
				s+=this.make_msg(this.msgs[i]);
				this.last=this.msgs[i].id; j++;
			}
		}
		elm.innerHTML += s;
	}

	this.make_msg = function(msg) {
		if (msg.typ == "0") {
			var clr="#1C24BB";
			var nm=this.uname;
		} else {
			var clr="#AF2727";
			var nm=this.oname;
		}
		var s = '<font color="'+clr+'"><b>' + nm + '</b></font>:<font color="#999999"> ' + msg.msg + '</font><br>';
		return s;
	}
}

function get_message() {
	var lock=true;
	xml_msg.open("GET", config.xml_src + "?cid=" + cons.cid + '&last=' + cons.last, true);	// async
	xml_msg.onreadystatechange = function () {
		if (xml_msg.readyState == 4 && lock) {
			lock=false;
			if (cons.load_msgs(xml_msg.responseXML) || cons.error) cons.show_msgs();
		}
	};
	window.setTimeout(function () { xml_msg.send(null); }, 10);
}

function connect() {
	var lock=true;
	xml_msg.open("GET", config.xml_src + "?cid=" + config.cons_id + "&cnf=" + conf_id, true);	// async
	xml_msg.onreadystatechange = function () {
		if (xml_msg.readyState == 4 && lock) {lock=false; cons.activate(xml_msg.responseXML);}
	};
	window.setTimeout(function () { xml_msg.send(null); }, 10);
}

function post() {
	var elm = document.getElementById("us-input");
	if (elm.value=='') return;
	var post='&msg='+EscapeToWin(elm.value);
	xml_msg.open("GET", config.xml_src + "?cid=" + cons.cid + post, false);	// sync
	xml_msg.send(null);
	elm.value='';
}

function init() {
	cons = new user();
	var tmp=document.location.href.split('/'); conf_id=parseInt(tmp[tmp.length-1],10);
	//var elm = document.getElementById(config.dialog);
	//elm.innerHTML=config.no_oper;
	xml_msg= XmlHttp.create(); connect();
	cons.uTimer=window.setInterval("connect()", config.delay);
}
