
// -------------------------------------------
// Utils

NewXmlHttpRequest = function(){
	var httprequest;
	try {
		// Firefox, Opera 8.0+, Safari
		httprequest = new XMLHttpRequest();
	} catch (e) {
		// Internet Explorer
		try {
			httprequest = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				httprequest = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {
				return false;
			}
		}
	}
	return httprequest;
}
getCookie = function (cname) {
	if (document.cookie.length>0) {
		cstart=document.cookie.indexOf(cname + "=");
		if (cstart!=-1) {
			cstart=cstart + cname.length+1;
			cend=document.cookie.indexOf(";",cstart);
			if (cend==-1) cend=document.cookie.length;
			return unescape(document.cookie.substring(cstart,cend));
		}
	}
	return "";
}
unixtime = function(){
	var date = new Date();
	var milliseconds = date.getTime();
	var seconds = parseInt(milliseconds/1000);
	return seconds;
}


// -------------------------------------------
// Objects

var xterm = {};
xterm.height = 11;
xterm.buffer = [];
xterm.newline = function(xstring){
	xterm.buffer.push(xstring.toString());
	while( xterm.buffer.length > xterm.height ){
		xterm.buffer.shift();
	}
	xterm.display();
}
xterm.reline = function(xstring){
	xterm.buffer[xterm.buffer.length-1] = xstring.toString();
	while( xterm.buffer.length > xterm.height ){
		xterm.buffer.shift();
	}
	xterm.display();
}
xterm.clear = function(){
	xterm.buffer = [];	
	xterm.display();
}
xterm.display = function(){
	var xstring = '';
	for(var i=0;i<xterm.buffer.length;i++){
		xstring += '<div class="xterm-line">'+xterm.buffer[i]+'</div>';
	}
	if(document.getElementById('xterm')){
		document.getElementById('xterm').innerHTML = xstring;
	}
}


var newsfeed = {};
newsfeed.loopCycleInSeconds = 32;
newsfeed.xtermFeedingTimingInSeconds = 2;
newsfeed.notes = [];
newsfeed.lastRequestUnixtime = 0;
newsfeed.in_array = function(element,xarray){
	var answer = false;
	for(var i=0;i<xarray.length;i++){
		if(element==xarray[i]){
			return true;
		}
	}
	return answer;
}
newsfeed.xtermFeeder = function(){
	if(newsfeed.notes.length){
		var note = newsfeed.notes.shift();
		xterm.newline(note);
	}
	setTimeout(newsfeed.xtermFeeder,newsfeed.xtermFeedingTimingInSeconds*1000);
}
newsfeed.loop = function(){
	
	var httprequest = NewXmlHttpRequest();
    httprequest.onreadystatechange = function() {
		if( httprequest.readyState==4 && httprequest.status==200 ){
			newsfeed.lastRequestUnixtime = unixtime();
			var notes = JSON.parse(httprequest.responseText);
			for(var i=0;i<notes.length;i++){
				newsfeed.notes.push(notes[i]);
			}
			setTimeout(newsfeed.loop, newsfeed.loopCycleInSeconds*1000 );
		}
		if( httprequest.readyState==4 && httprequest.status!=200 ){
			setTimeout(newsfeed.loop, newsfeed.loopCycleInSeconds*1000 );
		}
	}
	httprequest.open("GET",'index/elements.php?type=newsfeed',true); 
	httprequest.send(null);

}
newsfeed.start = function(){
	xterm.newline('');
	xterm.newline('<div style="text-align:center;">Hello, Bonjour, Grüß Gott, 早晨, 你好, こんにちは, 안녕하세요</div>');
	xterm.newline('<div style="text-align:center;">'+new Date().toString()+'</div>');
	xterm.newline('');
	xterm.newline('<span style="color:red;">Subscribing to live notifications server</span>');		
	newsfeed.xtermFeeder();
	newsfeed.loop();
}


loadPageElements = function(){	
	xterm.newline('Loading page elements...');
    setTimeout(newsfeed.start,500);
}

// -------------------------------------------
// Live

init = function(){		
	loadPageElements();
}




