var scriptversion=3.22;

//var row1col1_msgbar='<form accept-charset="UTF-8" method="get" onsubmit="send_post();return false;" action="index.php"><input type="text" id="bericht" name="message" maxlength="255"/><input type="submit" id="submitbutton" value="verzenden"/></form>';
var row1col1_msgbar='<form accept-charset="UTF-8" method="get" onsubmit="send_post();return false;" action="index.php"><textarea id="bericht" name="message" maxlength="255" cols="400" rows="3" onkeypress="return checklength(this.value);" onkeyup="return keyupevent(event);return checklength(this.value);" onkeydown="return keydownevent(event);"></textarea><input type="submit" id="submitbutton" value="verzenden"/></form>';
var active_post_delay=1000;//tijd in ms dat de posts opnieuw geladen moeten worden bij een actieve user.
var inactive_post_delay=5000;//tijd in ms dat de posts opnieuw geladen moeten worden bij een lezer of afwezig persoon.
var active_lou_delay=2000;
var inactive_lou_delay=5000;//let op: na 16 seconden geen request wordt de user verwijderd uit de lijst!
var inactive_timeout=30000;//tijd in m voordat een user afwezig wordt verklaart.
var baseURL='ajax.php?';
var stop_script=0;

function init() {
	if(stop_script==1) {return;}
	//get_posts(); melezen zonder inloggen.
	ajax(baseURL+'a=init','init_responce');
}

var username;
function init_responce(id) {
	if(stop_script==1) {return;}
	var str=xmlHttp[id];
	if(str!='no_login     ' && str!='') {
		username=str;
		allow_post();
	}
}

function ban(type) {
	var username=prompt('Voer username in.');
	/*var opmerking=prompt('Voer opmerking in.');
	if(opmerking.length==0) {
		opmerking='Geen commentaar.';
	}*/
	if(username.length>0) {
		if(type==1) {
			var command='/ban '+username//+' '+opmerking;
		} else if(type==2) {
			var command='/mute '+username//+' '+opmerking;
		} else {
			var command='/unban '+username;	
		}
		ajax(baseURL+'a=post&msg='+urlEncode(command),'send_post_responce');
	}
}

var offline_timer;
function reset_timer() {
	if(stop_script==1) {return;}
	clearTimeout(offline_timer);
	active();
	offline_timer=setTimeout('inactive()',inactive_timeout);
}

var inactive1=0;
function inactive() {
	if(stop_script==1) {return;}
	postdelay=inactive_post_delay;
	list_of_users_enabled=1;
	list_of_users_delay=inactive_lou_delay;
	inactive1=1;
}

function active() {
	if(stop_script==1) {return;}
	if(username!=null && inactive1==1) {
		postdelay=active_post_delay;
		list_of_users_enabled=1;
		list_of_users_delay=active_lou_delay;
		list_of_users();
		inactive1=0;
	}
}

function logout_resonce() {
	if(stop_script==1) {return;}
	window.location.reload();
}

function allow_post() {
	if(stop_script==1) {return;}
	inner(1,1,row1col1_msgbar);
	clr=1;
	postdelay=active_post_delay;
	list_of_users_enabled=1;
	list_of_users();
	get_posts();
}

var list_of_users_delay=active_lou_delay;
var list_of_users_timer
var list_of_users_enabled=0;
function list_of_users() {
	if(stop_script==1) {return;}
	clearTimeout(list_of_users_timer);
	if(list_of_users_enabled==0) {
		return;
	}
	ajax(baseURL+'a=lou&inact='+inactive1,'list_of_users_responce');
}

function list_of_users_responce(id) {
	if(stop_script==1) {return;}
	var str=xmlHttp[id];
	inner(2,2,str);
	list_of_users_timer=setTimeout('list_of_users()',list_of_users_delay);
}

function login() {
	if(stop_script==1) {return;}
	username=document.getElementById('username').value;
	ajax(baseURL+'a=login&username='+username+'&password='+document.getElementById('password').value,'login_responce');
	inner(2,2,'wachten a.u.b.');
}

function login_responce(id) {
	if(stop_script==1) {return;}
	var str=xmlHttp[id];
	if(str != 'ok') { //error bij inloggen
		inner(1,1,'error bij inloggen: '+str);
		document.getElementById('row2col2').innerHTML=row2col2_login;
	} else {
		document.getElementById('row2col2').innerHTML='';
		allow_post();
	}
}

var startID=0;
var clear=1;
function get_posts() {
	if(stop_script==1) {return;}
	if(clear==0) {
		return;
	}
	clear=0;
	clearTimeout(posttimer);
	ajax(baseURL+'a=posts&s='+startID,'get_posts_responce');
}

var poststreak=0;
var postdelay=inactive_post_delay;
var posttimer;
var debug_active_post_delay;
function get_posts_responce(id) {
	debug_active_post_delay=active_post_delay;
	if(stop_script==1) {return;}
	var str=xmlHttp[id];
	if(str.substr(0,4)=='com:') {
		var command=str.substr(4);
		if(command=='refresh') {
			window.location.reload();
			return;
		}
		if(command.substr(0,6)=='title ') {
			document.getElementById('roomonderwerp').innerHTML=command.substr(6);
			document.title=roomname+' > '+command.substr(6);
		}
		get_posts();
	} else if(str.substr(0,4)!='war:') {
		if(str.length>12) {
			active_post_delay+=-100*(parseInt(str.substr(0,12),10)-startID);
			poststreak++;
			if(poststreak>3 && active_post_delay>2000) {
				active_post_delay=2000;
			}
			if(parseInt(str.substr(0,12),10)>startID) {
				startID=parseInt(str.substr(0,12),10);
			}
			document.getElementById('row2col1').innerHTML=str.substr(12)+document.getElementById('row2col1').innerHTML.substr(0,50000);
		} else {
			poststreak=0;
			active_post_delay+=50;
		}
		if(active_post_delay<500) {
			active_post_delay=500;
		} else if(active_post_delay>5000) {
			active_post_delay=5000;
		}
		inactive_post_delay=active_post_delay*2;
		if(inactive1==1) {
			postdelay=inactive_post_delay;
		} else {
			postdelay=active_post_delay;
		}
		if(document.getElementById('timer')) {
			if(debug_active_post_delay>active_post_delay) {
				debug_active_post_delay=active_post_delay-debug_active_post_delay;
			} else {
				debug_active_post_delay='+'+(active_post_delay-debug_active_post_delay);
			}
			document.getElementById('timer').innerHTML=active_post_delay+' '+debug_active_post_delay;
		}
	}
	posttimer=setTimeout('get_posts()',postdelay);
	clear=1;
}

var perspoststreak=0;
var max_aantal_posts=4;
var per_aantal_ms=4000;
var clr=0;
function send_post() {
	if(stop_script==1) {return;}
	if(clr==0) {
		return;
	}
	if(perspoststreak>=max_aantal_posts) {
		alert('SPAM BEVEILIGING\n\nje kunt maximaal '+max_aantal_posts+'x per '+(per_aantal_ms/1000)+' seconden posten!');
		return;
	}
	if(document.getElementById('bericht')!=null) {
		var bericht=document.getElementById('bericht').value;
	} else {
		return;
	}
	if(bericht.length>0 && bericht.replace(/\S/,'')!=bericht) {
		clr=0;
		document.getElementById('bericht').value='';
		document.getElementById('submitbutton').value='wachten...';
		poststreak++;
		var t=setTimeout('perspoststreak--',per_aantal_ms);
		ajax(baseURL+'a=post&msg='+urlEncode(bericht),'send_post_responce');
	} else {
		return;
	}
}

function send_post_responce(id) {
	if(stop_script==1) {return;}
	get_posts();
	clr=1;
	document.getElementById('submitbutton').value='verzenden';
	
}

var xmlHttp=new Array();
function ajax(url,callback){
	if(stop_script==1) {return;}
	var a=0;
	while(xmlHttp[a]!=null) {
		a++;
	}
	if (window.XMLHttpRequest) {
		xmlHttp[a]=new XMLHttpRequest();
	}
	else if (window.ActiveXObject) {
		xmlHttp[a]=new ActiveXObject("Microsoft.XMLHTTP");
	}
	if(xmlHttp[a]!=null){
		xmlHttp[a].onreadystatechange=function() {
			if(xmlHttp[a].readyState==4) {
				xmlHttp[a]=xmlHttp[a].responseText;
				if(xmlHttp[a].substr(0,4)=='err:') {
					alert(xmlHttp[a].substr(5));
					inner(1,1,'');
					inner(1,2,'Gelieve in te loggen voor de onzinchat.');
					inner(2,2,'');
					stop_script=1;
				} else {
					if(xmlHttp[a].substr(0,4)=='war:') {
						alert(xmlHttp[a].substr(5));
					}
					var t=setTimeout(callback+'('+a+');xmlHttp['+a+']=null;',0);
				}
			}
		}
		xmlHttp[a].open('GET',url,true);
		xmlHttp[a].send(null);
	} else {
		//incompatible
	}
}

function urlEncode(str) {
	if(stop_script==1) {return;}
	return encodeURIComponent(str);
}

function inner(x,y,content) {
	if(stop_script==1) {return;}
	document.getElementById('row'+y+'col'+x).innerHTML=content;
}

var shift=false;
function keydownevent(e) {
	var keynum;
	if(window.event) {
		keynum = e.keyCode;
	} else if(e.which) {
		keynum = e.which;
	}
	if(keynum==13 && shift==false) {
		send_post();
		return false;
	}
	if(keynum==16) {
		shift=true;
	}
	return true;
}

function checklength(str) {
	if(str.length>255) {
		document.getElementById('bericht').value=document.getElementById('bericht').value.substr(0,255);
		return false;
	} else {
		return true;
	}
}

function keyupevent(e) {
	var keynum;
	if(window.event) {
		keynum = e.keyCode;
	} else if(e.which) {
		keynum = e.which;
	}
	if(keynum==16) {
		shift=false;
	}
	return true;
}

//insertAtCursor(document.getElementById('bericht'), "\n");
/*function insertAtCursor(myField, myValue) {
	//IE support
	if (document.selection) {
		myField.focus();
		sel = document.selection.createRange();
		sel.text = myValue;
	}
	//MOZILLA/NETSCAPE support
	else if (myField.selectionStart || myField.selectionStart == '0') {
		var startPos = myField.selectionStart;
		var endPos = myField.selectionEnd;
		myField.value = myField.value.substring(0, startPos)
		+ myValue
		+ myField.value.substring(endPos, myField.value.length);
	} else {
		myField.value += myValue;
	}
}*/

//bij verplaatsen van muis, traceer positie en roep eventueel functie op.
var IE=document.all?true:false;
var MouseX=0;
var MouseY=0;
document.onmousemove=function(e){
	if(IE){
		tempX=event.clientX+document.body.scrollLeft;
		tempY=event.clientY+document.body.scrollTop;
	}
	else {
		tempX=e.pageX;tempY=e.pageY;
	}
	if(tempX<0){
		tempX=0
	}
	if(tempY<0){
		tempY=0
	}
	MouseX=tempX;
	MouseY=tempY;
	move_popups();
	return true;
}

function addsmilie(str) {
	document.getElementById('bericht').value+=str;
	document.getElementById('bericht').focus();
}

function replaceTzmlMarkup(name,text){
	var regstart = new RegExp("\\["+name+"\\]","g");
	var regend = new RegExp("\\[\\/"+name+"\\]","g");
	if (text.match(regstart) || text.match(regend)){
		text = text.replace(regstart,"");
		text = text.replace(regend,"");
	} else {
		text = '['+name+']'+text+'[/'+name+']';
	}
	return text;
}

function tzmlInsert(myField,type,code){

	if(document.selection){

		myField.focus();
		var sel = document.selection.createRange();
		var selection = sel.text
		var text = tzmlMakeText(type,selection,code);
		if(type != 'smilie'){
			sel.text = text;
		}

	} else if (myField.selectionStart || myField.selectionStart == 0){

		var scrollPos = myField.scrollTop;

		var startPos = myField.selectionStart;
		var endPos = myField.selectionEnd;
		var selectionlength = endPos - startPos;
		var selection = myField.value.substring(startPos,endPos);
		var text = tzmlMakeText(type, selection, code);

		myField.value = myField.value.substring(0,startPos)+text+myField.value.substring(endPos,myField.value.length);
		if(type != 'smilie'){
			var sStart = startPos;
			var sEnd = startPos+text.length;
			myField.setSelectionRange(sStart,sEnd);
		}

		myField.scrollTop = scrollPos;
		myField.focus();

	} else {
		var text = tzmlMakeText(type,'',code);
		myField.value = myField.value + text;
		myField.focus();
	}

}

function tzmlMakeText(type,selection,code){
	var text
	switch(type){

		case 'bold':
			text = replaceTzmlMarkup('b',selection);
		break
		case 'underline':
			text = replaceTzmlMarkup('u',selection);
		break
		case 'quote':
			text = replaceTzmlMarkup('quote',selection);
		break
		case 'doorhalen':
			text = replaceTzmlMarkup('strike',selection);
		break
		case 'verborgen':
			text = replaceTzmlMarkup('hide',selection);
		break
		case 'important':
			text = replaceTzmlMarkup('!',selection);
		break;
		case 'italic':
			text = replaceTzmlMarkup('i',selection);
		break;
		case 'anchor':
			var url = prompt('Voer de URL in:','http:\/\/');
			if(url !== null && url !== '' && url !== 'http:\/\/'){
				if(selection == ''){
					var selection = prompt('Voer een naam voor je link in:\nleeg laten is geen naam!','');
				}

				if(selection !== null && selection !== ''){
					var text = '[url='+url+']'+selection+'[/url]';
				} else {
					var text = '[url]'+url+'[/url]';
				}
			} else {
				text = selection;
			}
		break
		default:
			var text = selection + type;
		break
	}

	return text;

}

