

var check_n = 0;
old_data = "--";
var old_result = 1;

var cookieWert;


// bei Inaktivität wird der Chat immer langsamer, und disconnected nach einiger Zeit:
// die Variablen für den disconnect:
time_init = 1000; // Startwert für den refresh in Millisekunden
disconnect = 10000; // disconnect bei Erreichen dieses refresh Wert
slowdown = 10; // 10: disconnect nach ca. 15 Minuten, 2: nach 75 min. (0 = nie)
meldung = '..... Chat disconnected (timeout) \n\nHey, hier ist ein Chat, und keine \u00f6ffentliche W\u00e4rmestube!' ;

function holeCookie(Keksname) {
	alleCookies=document.cookie;	
	cookieArr=alleCookies.split(";");
	for(var i=0;i<cookieArr.length;i++) {
		if(cookieArr[i].split("=")[0].replace(/\s+/,"") == Keksname) {
			cookieWert=cookieArr[i].split("=");
			cookieWert=decodeURIComponent(cookieWert[1].replace(/\+/g," "));
			return true;
		}
	}
	return false;
}


// die Anzeige der online-Zeit bei reloads oder Raumwechsel nicht zurücksetzen:

var Jetzt = new Date();
holeCookie("Ankunft");

if (cookieWert) {
	login = cookieWert;
} else {
	login = Jetzt.getTime();
}

// erst nach 10 Min. Inaktivität startet ein reload oder Raumwechsel die online Zeit neu:
var ablauf = new Date();
var Minuten = ablauf.getTime() + (10 * 60 * 1000); 
ablauf.setTime(Minuten);
document.cookie="Ankunft="+login+"; expires=" + ablauf.toGMTString();

function ZeitAnzeigen () {
	 var absSekunden = Math.round(ZeitBerechnen());
	 var relSekunden = absSekunden % 60;
	 var absMinuten = Math.abs(Math.round((absSekunden - 30) / 60));
	 var relMinuten = absMinuten % 60;
	 var absStunden = Math.abs(Math.round((absMinuten - 30) / 60));
	 var anzSekunden = "" + ((relSekunden > 9) ? relSekunden : "0" + relSekunden);
	 var anzMinuten = "" + ((relMinuten > 9) ? relMinuten : "0" + relMinuten);
	 var anzStunden = "" + ((absStunden > 9) ? absStunden : "0" + absStunden);
	 if (absStunden >= 1) {
        	 document.getElementById('Anzeige').Zeit.value = anzStunden + ":" + anzMinuten + ":" + anzSekunden;
         } else {
        	 document.getElementById('Anzeige').Zeit.value = anzMinuten + ":" + anzSekunden;
         }
	 setTimeout("ZeitAnzeigen()", 1000);
}

function ZeitBerechnen () {
	 var Immernoch = new Date();
	 return ((Immernoch.getTime() - login) / 1000);
}
	

function jump(form) { 
	order = form.menu1.selectedIndex; 
	if (form.menu1.options[order].value != 0) { 
		addsmile(form.menu1.options[order].value);
	}  
} 


var ablauf2 = new Date();
var Minuten2 = ablauf2.getTime() + (30 * 24 * 60 * 60 * 1000);
ablauf2.setTime(Minuten2);
function jump2(form) {
	order = form.menu2.selectedIndex;
	if (form.menu2.options[order].value != 0) {
               var style = form.menu2.options[order].value;
               document.cookie="Style="+style+"; expires=" + ablauf2.toGMTString();
               window.location.reload();
	}
}

function playsound(typ) { // die standardkonforme Lösung für alle Browser
	document.getElementById("ton").innerHTML = '<object data="'+typ+'" type="application/x-shockwave-flash" width="0" height="0"><param name="movie" value="'+typ+'" /></object>';
}

time = time_init;
function refresh_cb(new_data) {

	if (typeof old_data != "undefined" && new_data != old_data) {

		if((typeof handle) != "string") { // kein Klick bei eigenen Meldungen
			if (old_data == "--") { 	playsound('reload2.swf'); // Sound bei reload
			} else {
				if (new_data.length > old_data.length) 	playsound('eingang.swf'); // Sound bei Eingang
			}
			handle = 1;
		}

		document.getElementById("wall").innerHTML = new_data;
		setTimeout('document.getElementById("wall").scrollTop = 9999',500);
		old_data = new_data;
                time = time_init; // bei Eingang einer neuen Meldung wirds wieder schnell
		setTimeout("refresh()", time);
	} else {

		handle = 1;
                if (typeof time != "undefined") {
                        time = time * (1 + slowdown*0.001); // wenn nix los ist, wirds immer langsamer, bis zum timeout:
                        if (time > disconnect) {
                      		 alert(meldung);
                                 time = disconnect*0.5;     // es bleibt rel. langsam, umd der Alert kommt schneller
                                 u_online();                // könnte man so nach dem Alert die user wieder anzeigen?
        	                 u_online_room();

                        }

        		setTimeout("refresh()", time);
                }
	}

}

function refresh() {
	x_refresh(refresh_cb);
}

function add_cb() {
	// we don't care..
}



var handle; // Var global wg. Klick on send
function add() {


	var line;
	handle = document.getElementById("handle").value;


	handle = handle.replace(/:|;|"|<|>|\?|\/|@|\s|&|'/g,'');
	handle = handle.replace(/\+/g,' ');

	handle = handle.replace(/[ \t]+$/,''); // trim nick, damit Vgl. mit cookie klappt
	handle = handle.replace(/^ /g,'');
//	handle = handle.replace(/ /g,'_');



        // Den Admin Nick zurückweisen:
        
               if (handle.indexOf("Admin") != -1 ) {
                        // http://geekswithblogs.net/shahedul/archive/2006/08/14/87910.aspx:
                        // Fx Javascript Error vermeiden:
                        // document.getElementById("handle").setAttribute('autocomplete','off');
                        // document.getElementById("line").setAttribute('autocomplete','off');

                        alert("Dieser Nick ist nicht erlaubt!");
                        document.getElementById("handle").focus();
                        return;
                }
                
       	       handle_s = handle.toLowerCase(handle);
               if (handle_s.indexOf("nickname") != -1 ) {
                        alert("Dieser Nick ist nicht erlaubt!");
                        document.getElementById("handle").focus();
                        return;
                }
                
       	       handle_s = handle.toLowerCase(handle);
               if (handle_s.indexOf("mod") != -1 ) {
                        alert("Dieser Nick ist nicht erlaubt!");
                        document.getElementById("handle").focus();
                        return;
                }
                
       	       handle_s = handle.toLowerCase(handle);
               if (handle_s.indexOf("admin") != -1 ) {
                        alert("Dieser Nick ist nicht erlaubt!");
                        document.getElementById("handle").focus();
                        return;
                }
                
               if (handle.indexOf("Gast") != -1 ) {
                        alert("Dieser Nick ist nicht erlaubt!");
                        document.getElementById("handle").focus();
                        return;
               }
               
               if (handle.indexOf("forbidden") != -1 ) {
                        alert("Dieser Nick ist nicht erlaubt!");
                        document.getElementById("handle").focus();
                        return;
               }
               



	line = document.getElementById("line").value;
	if (line == "" || line == "(Deine Nachricht)" ) {
		document.getElementById("line").focus();
		return;
	}



	cookieWert = "1";
	holeCookie("nick");
	if (handle == cookieWert) {
		x_add_line(handle + ": " + line, add_cb);

	} if (cookieWert =="1") {
		x_add_line("Willkommen im Chat, \"" + handle +"\": " + line, add_cb);

	} if (handle != cookieWert && cookieWert != "1") {
		x_add_line(cookieWert + " nennt sich jetzt \"" + handle +"\": " + line, add_cb);
	}

	// Anwesenheitscookie erneuern beim Schreiben einer msg
	varJetzt = new Date();
	//var login = Jetzt.getTime(); // nein, die alte Startzeit übernehmen
	var ablauf = new Date();
	var Minuten = ablauf.getTime() + (3 * 60 * 1000); 
	ablauf.setTime(Minuten);
	document.cookie="Ankunft="+login+"; expires=" + ablauf.toGMTString();

	// Ton beim Abschicken eigener Meldungen:
	document.getElementById("line").value = "";
	document.getElementById("line").focus();
	playsound('click.swf');

}


function set_user(result) {
        if (document.getElementById('uo')) document.getElementById('uo').innerHTML = result;

        if (typeof old_result != "undefined") {
        	if (result.length > old_result.length) {
        		playsound('eingang2.swf'); // sound wenn user in den Raum kommt, und bei Betreten eines Raumes, in dem user sind.
        	}
	}
       	old_result = result;
}

function u_online() {
	x_user_online(set_user);
        if (time < disconnect)	setTimeout("u_online()", 2000); // so wird auch nach dem Wegklicken des Alert nicht mehr refreshed
}


function set_user_room(result1) {
        if (document.getElementById('user_pro_room')) document.getElementById('user_pro_room').innerHTML = result1;
}

function u_online_room() {
	x_user_room(set_user_room);
        if (time < disconnect)	setTimeout("u_online_room()", 1500); // darf nicht dynamisch genacht werden, da in der inc feste Lebensdauern
}


function addsmile(smiley) {
	if (document.getElementById('line').value.indexOf('Deine Nachricht') !== -1) {
		document.getElementById('line').value = "";
	}
	document.getElementById('line').value = document.getElementById('line').value + ' ' + smiley + ' ';
	document.getElementById('line').focus();
}


function load() {
	refresh();
	u_online();
	u_online_room();
	document.getElementById('line').focus(); 
	ZeitAnzeigen();
}

window.onload=load;
