// JavaScript Document
var chatreq;
var chatbg;
var lastts=0;
var chatscroll = new Object();

chatscroll.Pane = function(scrollContainerId) {
	this.bottomThreshold = 225;
	this.scrollContainerId = scrollContainerId;
}

chatscroll.Pane.prototype.activeScroll = function() {
	var scrollDiv = document.getElementById(this.scrollContainerId);
	var currentHeight = 0;
	
	if (scrollDiv.scrollHeight > 0)
		currentHeight = scrollDiv.scrollHeight;
	else 
		if (objDiv.offsetHeight > 0)
			currentHeight = scrollDiv.offsetHeight;
	
	if (currentHeight - scrollDiv.scrollTop - ((scrollDiv.style.pixelHeight) ? scrollDiv.style.pixelHeight : scrollDiv.offsetHeight) < this.bottomThreshold)
		scrollDiv.scrollTop = currentHeight;

	scrollDiv = null;
}


function chatsay(owner,comment,date) {
	var chatter = document.createElement('div');
	chatter.className='chatter';
	
	var cowner = document.createElement('div');
	cowner.className='owner';
	cowner.innerHTML = date+' [ <strong>'+owner+'</strong> ]';
	
	var ccomment = document.createElement('div');
	ccomment.className='comment';
	ccomment.innerHTML = comment;
	
	chatter.appendChild(cowner);
	chatter.appendChild(ccomment);
	// buffer 200 lines max
	if (document.getElementById('chatterbox').childNodes.length > 200) {
		document.getElementById('chatterbox').removeChild(document.getElementById('chatterbox').childNodes[0]);
	}
	document.getElementById('chatterbox').appendChild(chatter);
	divScroll.activeScroll();
}


var divScroll = new chatscroll.Pane('chatterbox');
function checksubmit(e) {
	var characterCode;// literal character code will be stored in this variable
	
	if(e && e.which){ //if which property of event object is supported (NN4)
		e = e;
		characterCode = e.which; //character code is contained in NN4's which property
	}
	else{
		e = event;
		characterCode = e.keyCode; //character code is contained in IE's keyCode property
	}
	
	if(characterCode == 13){ //if generated character code is equal to ascii 13 (if enter key)
		chatparse(document.forms['chatinput']);
		return false;
	}
	else if (characterCode == 10) {
		document.forms['chatinput'].elements['chatinputtxt'].value += "\r\n";
	}
	else{
//		alert(characterCode);
		return true ;
	}
}

function chatparse(f) {
//	chatsay('Lew',f.elements['chatinputtxt'].value.replace('\r\n','<br />').replace('\n','<br />').replace('\r','<br />'),'19:20:34');
	chatsend('2',f.elements['chatinputtxt'].value);
	f.elements['chatinputtxt'].value = '';
	return false;
}


function chatinit() {
	chat(lastts);
}

function chat(lastts) {
	//document.getElementById(target).innerHTML = 'Loading...';
	url = 'http://'+document.location.host+'/chat.php?type=1&data='+lastts+'&ts='+getrand();
	chatbg = false;
	// branch for Mozilla XMLHttpRequest object
    if(window.XMLHttpRequest) {
    	try {
			chatbg = new XMLHttpRequest();
        } catch(e) {
			chatbg = false;
        }
    // branch for IE/Windows ActiveX version
    } else if(window.ActiveXObject) {
       	try {
        	chatbg = new ActiveXObject("Msxml2.XMLHTTP");
      	} catch(e) {
        	try {
          		chatbg = new ActiveXObject("Microsoft.XMLHTTP");
        	} catch(e) {
          		chatbg = false;
        	}
		}
    }
	if(chatbg) {
		chatbg.onreadystatechange = new Function("processChatBgChange('"+lastts+"')");
		chatbg.open("GET", url, true);
		chatbg.send("");
	}
	return false;
}

function processChatBgChange(code) {
    // only if req shows "loaded"
    if (chatbg.readyState == 4) {
        // only if "OK"
        if (chatbg.status == 200) {
			chats = chatbg.responseText.split('\n');
//			alert(chats.length);
			if (!(chats.length == 1 && chats[0] == '')) {
				for (var i = 0; i<chats.length;i++) {
					chatdata = chats[i].split('|',4);
					chatsay(chatdata[2],chatdata[3],chatdata[1]);
					lastts = chatdata[0];
				}
			}
			setTimeout('chat('+lastts+')',1500);
        } else {
			chatsay('SYSTEM','There was a problem retrieving the data:<br />'+chatbg.statusText,'------');
		}
    }
}



function chatsend(code,data) {
	//document.getElementById(target).innerHTML = 'Loading...';
	url = 'http://'+document.location.host+'/chat.php?type='+encodeURIComponent(code)+'&data='+encodeURIComponent(data)+'&ts='+getrand();
	chatreq = false;
	// branch for Mozilla XMLHttpRequest object
    if(window.XMLHttpRequest) {
    	try {
			chatreq = new XMLHttpRequest();
        } catch(e) {
			chatreq = false;
        }
    // branch for IE/Windows ActiveX version
    } else if(window.ActiveXObject) {
       	try {
        	chatreq = new ActiveXObject("Msxml2.XMLHTTP");
      	} catch(e) {
        	try {
          		chatreq = new ActiveXObject("Microsoft.XMLHTTP");
        	} catch(e) {
          		chatreq = false;
        	}
		}
    }
	if(chatreq) {
		chatreq.onreadystatechange = new Function("processChatReqChange('"+code+"')");
		chatreq.open("GET", url, true);
		chatreq.send("");
	}
	return false;
}

function getrand() {
	var d = new Date();
	return ''+d.getFullYear()+((d.getMonth() < 10)? '0':'')+(d.getMonth() +1)+((d.getDate() < 10)? '0':'')+d.getDate()+((d.getHours() < 10)? '0':'')+d.getHours()+((d.getMinutes() < 10)? '0':'')+d.getMinutes()+((d.getSeconds() < 10)? '0':'')+d.getSeconds();
}

function processChatReqChange(code) {
    // only if req shows "loaded"
    if (chatreq.readyState == 4) {
        // only if "OK"
        if (chatreq.status == 200) {
//            document.getElementById(el_id).innerHTML = req.responseText;
			resp = chatreq.responseText.split('|',2);
			if (resp[0] != '')
				chatsay('SYSTEM',resp[1],resp[0]);
        } else {
			chatsay('SYSTEM','There was a problem retrieving the data:<br />'+req.statusText,'------');
        }
    }
}