CManager = {
    hash: {},
    text: {},
    divs: {}
}


CManager.pool = function(action,xtra) {
    this.xhr.onreadystatechange = function() {}

    this.xhr.open('POST', '/chat.php', true);
    this.xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
    this.xhr.onreadystatechange = this.ajax_callback;
    this.data = { 
	'action': action,
	'url': window.location.toString(),
	'refer':  document.referrer,
	'xtra': xtra,
	'hash': {}
	 };
	
    if(this.hash) for(cid in this.hash) if (this.hash.hasOwnProperty(cid)) {
	this.data.hash[cid] = this.hash[cid];
    }
    var str = "data=" + encodeURIComponent(JSON.stringify(this.data));
//    alert(str);
    this.xhr.send(str);
}


CManager.ajax_callback = function() {
    if (this.readyState == 4) {
        if (this.status == 200) {
//            document.getElementById('surface').innerHTML = this.responseText;
            var El = eval("(" + this.responseText + ")");
            if(El.hash) {
        	for(cid in El.hash) if (El.hash.hasOwnProperty(cid)) {
        	    CManager.chat(cid,El.hash[cid],El.text[cid]);
        	}
        	
            }
        }
        setTimeout(function() { CManager.pool('pool') }, 100);
        
    }
}

CManager.chat = function(cid,hash,text) {
    var pCounter = 1;
    if(!this.hash[cid]) {
	var mdiv = document.createElement('div');
	mdiv.className = 'chat_main';
	mdiv.cid = cid;
	this.divs[cid] = mdiv;
	document.body.appendChild(mdiv);
	var surf = document.createElement('div');
	surf.className = 'chat_surface';
	mdiv.appendChild(surf);
	var ta=document.createElement('textarea');
	ta.className = 'chat_inp';
	ta.onclick = function(e) {
	    this.focus();
	    return false;
	}
	var bt=document.createElement('button');
	bt.className = 'chat_send';
	bt.cid = cid;
	bt.ta = ta;
	bt.onclick = CManager.send_click;
	var bdiv = document.createElement('div');
	bdiv.appendChild(ta);
	bdiv.appendChild(bt);
	mdiv.appendChild(bdiv);
	var clo = document.createElement('img');
	clo.className = 'chat_close';
	clo.setAttribute("src","http://antiage-clinic.com.ua/images/close.gif");
	clo.cid = cid;
	clo.onclick = CManager.close;
	mdiv.appendChild(clo);
	mdiv.style.left = '0px';
	mdiv.style.bottom = '0px';

	// выясняем позицию чата, если нет - генерим
	var pStr = getCookie('pos'+cid);
	var nx,ny;
	if( pStr ) {
	    nx = parseInt(pStr.split('.')[0]);
	    ny = parseInt(pStr.split('.')[1]);
	} 
	
	var wSize = gss();
	if((ny + 420) > wSize.wh ) ny = wSize.wh - 420;
	if((nx + 300) > wSize.ww ) nx = wSize.ww - 300;
	if(nx <0) nx =0;
	if(ny <0) ny =0;
	if(isNaN(nx)||isNaN(ny)) {
	    nx = pCounter * 20;
	    ny = pCounter * 20;
	    pCounter++;
	}
	
	mdiv.style.left = nx +'px';
	mdiv.style.bottom = ny + 'px';
	
	mdiv.onmousedown = function(e) {
	    e = fixEvent(e);
//		alert(this);
	    CManager.drag_start = { 
		x: e.pageX , y: e.pageY ,
		divx: parseInt(this.style.left),
		divy: parseInt(this.style.bottom)
	    };
	    CManager.drag_tgt = this;
	    document.onmousemove = function(e) {
		e = fixEvent(e);
		var tgt = CManager.drag_tgt;
		var nx= (CManager.drag_start.divx + (e.pageX - CManager.drag_start.x));
		if(nx < 0) nx=0;
		tgt.style.left = nx + 'px';

		var ny=CManager.drag_start.divy + (0 - (e.pageY - CManager.drag_start.y));
		if(ny < 0) ny=0;
		tgt.style.bottom = ny + 'px';


	    }
	    document.onmouseup = function(e) {
		e = fixEvent(e);
		var tgt = CManager.drag_tgt;
		var nx= (CManager.drag_start.divx + (e.pageX - CManager.drag_start.x));
		if(nx < 0) nx=0;
		tgt.style.left = nx + 'px';

		var ny=CManager.drag_start.divy + (0 - (e.pageY - CManager.drag_start.y));
		if(ny < 0) ny=0;
		tgt.style.bottom = ny + 'px';
		// запоминаем позицию в куках
		var cExp = new Date();
		cExp.setTime(cExp.getTime() + (30*24*60*60*1000));
		setCookie('pos'+tgt.cid,nx + '.' + ny,cExp);
		document.onmousemove = null;
		document.onmouseup = null;



		return false;
	    }
	    return false;
	}
    }

    this.hash[cid] = hash;
    var at = '';
    for(tn in text.text) if (text.text.hasOwnProperty(tn)) {
	at += '<div>' 
	var d = new Date();
	d.setTime(text.text[tn].ts * 1000)
	at += '<div>' + ((text.text[tn].who==text.self)?"вы: ":"он: ")  + '</div>';
	at += '<div>' + text.text[tn].text + '</div>';
	at += "</div>";
    }
    this.divs[cid].firstChild.innerHTML = at;
}

CManager.close = function (e) {
    var data = {
	cid: this.cid,
    }
    CManager.hash[cid] = null;
    var dv = CManager.divs[cid];
    dv.style.display = 'none';
    dv.parentNode.removeChild(dv);
    CManager.pool('close',data);
}


CManager.send_click = function (e) {
    var data = {
	cid: this.cid,
	text: this.ta.value
    }
    this.ta.value = '';
    CManager.pool('send',data);
}

CManager.init = function() {
    this.xhr = getXmlHttp();
    this.pool('init');

}

CManager.init();
