/* KONSOLE
 *
 * Copyright (c) 2007 Matthias Kunze
 *
 * - http://www.sprtpc.de
 * - matthias.kunze@sprtpc.de
 */

// -----------------------------------------------------------------------------

// Hoehe der Konsole
var ConsoleHeight=getCookie('consoleHeight')!='' ? parseInt(getCookie('consoleHeight')) : 49;
//var ConsoleHeight=49;

// Opacity der Konsole
var ConsoleOpacity=getCookie('consoleOpacity')!='' ? parseFloat(getCookie('consoleOpacity')) : 1;
//var ConsoleOpacity=1;

// Konsole Prefix
var ConsolePrefix='SUPERTOPIC:\\&gt;&nbsp;&nbsp;';

// -----------------------------------------------------------------------------

// Konsole Funktionen
function Console()
{
	if($S('console').display=='none'){
		ConsoleOn();
	}
	else{
		ConsoleOff();
	}
	return false;
}
function ConsoleOn()
{
	Element.show('console');
	globalFade('console',0,ConsoleOpacity,300);
	globalSet('console','height',ConsoleHeight);
	globalFade('console',0,ConsoleOpacity,300);
	setTimeout(function(){$('conInput').focus();}, 400);
	Event.observe('console','keyup',function(evt){if(evt.keyCode==27){ConsoleOff();}},false);
	setCookie('consoleSwitch','ON',0);
}
function ConsoleOff()
{
	$('conInput').blur();
	globalFade('console',ConsoleOpacity,0,300);
	setTimeout(function(){Element.hide('console')}, 400);
	Event.stopObserving('console','keyup',function(evt){if(evt.keyCode==27){ConsoleOff();}},false);
	setCookie('consoleSwitch','',-100);
}

function changeColor(newColor) {
        var copyid=$('conCopy').value;
		new Ajax.Request(_f("console"),{
			method:'post',
			parameters:{t:newColor+'.css'},
			onSuccess:function(xh){
				var rp=xh.responseText;
				ParseConsole(rp);
				$('conCopy').value='';
			}
		});
		return false;
}

function CheckConsole()
{
	var inp=$F('conInput');
	var hidden = $j('#markedContacts').val();
	var exp=/^(height|\^|cls|clear|reset|hallo|whoami|test|rps|time|opacity|x|exit|quit|close|help|\?|home|members|gallery|map|tags|tag|back|cd\.\.|print|go|showall|\+|lottery)(.*)$/i;
	$('conInput').value='';
	$('conInput').focus();
	new Insertion.After($('conInput'),'<div>'+ConsolePrefix+inp.escapeHTML()+'</div>');
	if(exp.test(inp))
	{
		var out=inp.match(exp);
		var func=trim(out[1]).toLowerCase();
		var para=trim(out[2]);
		switch(func)
		{
			case 'height':
			case '^':
				var newHeight=parseInt(trim(out[2]));
				if(newHeight==''){
					ParseConsole('ERROR> Parameter fehlt');
					return false;
				}
				else if(isNaN(newHeight)){
					ParseConsole('ERROR> Ung&uuml;ltiger Parameter');
					return false;
				}
				setCookie('consoleHeight',newHeight,365);
				globalIncrease('console',ConsoleHeight,newHeight);
				ConsoleHeight=newHeight;
				break;
			case 'clear':
			case 'cls':
				if (para.toLowerCase() == 'status') {
						new Ajax.Request(_f("console"),{
								method:'post',
								parameters:{t:'clearstatus'},
								onSuccess:function(xh){
										var rp=xh.responseText;
										ParseConsole(rp);
								}
						});
				}
				else {
						ParseConsole('CLEAR>');
				}
				break;
			case 'reset':
				ParseConsole('CLEAR>');
				globalIncrease('console',ConsoleHeight,49);
				globalFade('console',ConsoleOpacity,1,300);
				ConsoleHeight=49;
				ConsoleOpacity=1;
				setCookie('consoleHeight','',-100);
				setCookie('consoleOpacity','',-100);
				break;
			case 'hallo':
			case 'whoami':
				if($E('logout')){
					var name = $('logout').firstChild.nextSibling.innerHTML;
				}
				else{
					var name = 'Fremder';
				}
				ParseConsole('PRINT> Hallo '+name);
				break;
			case 'test':
				ParseConsole('PRINT> Test bestanden');
				break;
			case 'rps':
				ParseConsole('COIN>');
				break;
			case 'time':
				ParseConsole('TIME>');
				break;
			case 'opacity':
				out[2]=trim(out[2]);
				out[2]=out[2].replace(/\,/g, '.');
				var newOpacity=parseFloat(out[2]);
				if(newOpacity==''){
					ParseConsole('ERROR> Parameter fehlt');
					return false;
				}
				else if(isNaN(newOpacity)){
					ParseConsole('ERROR> Ung&uuml;ltiger Parameter');
					return false;
				}
				else if(newOpacity<0.3 || newOpacity>1){
					ParseConsole('ERROR> Parameter fehlerhaft (0.3 - 1)');
					return false;
				}
				setCookie('consoleOpacity',newOpacity,365);
				globalFade('console',ConsoleOpacity,newOpacity,300);
				ConsoleOpacity=newOpacity;
				break;
			case 'x':
			case 'quit':
			case 'exit':
			case 'close':
				ConsoleOff();
				break;
			case 'help':
			case '?':
				location.href=rootdir+'/help/#helpconsole';
				break;
			case 'home':
				location.href=rootdir;
				break;
			case 'members':
				location.href=rootdir+'/members';
				break;
			case 'gallery':
				location.href=rootdir+'/members/gallery';
				break;
			case 'map':
				location.href=rootdir+'/members/map';
				break;
			case 'tags':
				location.href=rootdir+'/tags';
				break;
			case 'tag':
				var thetag=encodeURIComponent(trim(out[2]));
				thetag=thetag.replace(/\%2F/g, '/', thetag);
				if(thetag==''){
					ParseConsole('ERROR> Parameter fehlt');
					return false;
				}
				location.href=rootdir+'/tags/'+thetag;
				break;
			case 'back':
			case 'cd..':
				history.back();
				break;
			case 'print':
				window.print();
				break;
			case 'go':
				var v=trim(out[2]);
				var gox=/^(east|west|north|south|e|w|n|s)$/i;
				if(gox.test(v)){
					setTimeout(function(){ParseConsole('PRINT> OK');},1000);
				}
				else{
					ParseConsole('ERROR> Parameter fehlt');
				}
				break;
			case 'showall':
			case '+':
				ShowAll();
				break;
			case 'lottery':
				var numbers = Lotto();
				var id=new Date().getTime();
				var i=0;
				iv = setInterval(function()
				{
					if(i==0){
						new Insertion.After($('conInput'),'<div id="lotto'+id+'">'+ConsolePrefix+'<span class="conError">'+(numbers[0])+'</span>&nbsp;</div>');
					}
					else {
						e=cE('span');
						e.className='conError';
						e.innerHTML=numbers[i];
						$('lotto'+id).appendChild(e);
						$('lotto'+id).innerHTML+='&nbsp;';
					}
					if(i==5){clearInterval(iv);}
					else{i++;}
				}, 1000);
				break;
		}
		return false;
	}
	if(inp!='')
	{
		var copyid=$('conCopy').value;
		new Ajax.Request(_f("console"),{
			method:'post',
			parameters:{t:inp,m:copyid},
			onSuccess:function(xh){
				var rp=xh.responseText;
				ParseConsole(rp);
				$('conCopy').value='';
			}
		});
	}
}

function ConsoleReply(name, msgid)
{
	$('conInput').value = 'MSG '+name+', ';
	$('conCopy').value = msgid;
	if($S('console').display=='none'){
		ConsoleOn();
	}
	else{
		$('conInput').focus();
	}
	return false;
}
var RpsInterval;
function ParseConsole(t)
{
	if(t.substr(0, 6)=='ERROR>' || t.substr(0, 6)=='PRINT>'){
		new Insertion.After($('conInput'),'<div>'+ConsolePrefix+'<span class="conError">'+t.substr(7)+'</span></div>');
	}
	else if(t=='CLEAR>'){
		window.clearTimeout(ZeitTimeout);
		$('console').innerHTML = '<form action="" onsubmit="CheckConsole();return false;" method="post">'+ConsolePrefix+'<input type="text" value="" id="conInput" size="20" class="conField" autocomplete="off" /><br/></form>';
		$('conInput').focus();
	}
	else if (t.substr(0, 4) == 'CSS>') {
			$('usercss').href = t.substring(4);
	}
	else if(t.substr(0, 5)=='OPEN>'){
		window.open(t.substr(6));
	}
	else if(t=='EXIT>'){
		ConsoleOff();
	}
	else if(t.substr(0, 4)=='SUM>'){
		new Insertion.After($('conInput'),'<div>'+ConsolePrefix+'<span class="conError">= '+t.substr(5)+'</span></div>');
	}
	else if(t.substr(0, 5)=='SELF>'){
		location.href = t.substr(6);
	}
	else if(t=='TIME>'){
		var id=new Date().getTime();
		new Insertion.After($('conInput'),'<div>'+ConsolePrefix+'<span id="time'+id+'" class="conError"></span></div>');
		ZeitAnzeigen('time'+id);
	}
	else if(t=='COIN>'){
		var m=3;
		var i=4;
		var id=new Date().getTime();
		var e;
		var rps=new Array('','Stein','Schere','Papier');
		var r=Random(m);
		var z=rps[r];
		RpsInterval=setInterval(function(){
					if(i==4){
						new Insertion.After($('conInput'),'<div id="rps'+id+'">'+ConsolePrefix+'<span class="conError">'+(i-1)+'</span>&nbsp;</div>');
					}
					else{
						e=cE('span');
						e.className='conError';
						if(i==1){
							e.innerHTML=z;
						}
						else{
							e.innerHTML=(i-1);
						}
						$('rps'+id).appendChild(e);
						$('rps'+id).innerHTML+='&nbsp;';
					}
					if(i==1){clearInterval(RpsInterval);}
					else{i--;}},1000);
	}
}

// -----------------------------------------------------------------------------

// Zusatz Funktionen
function Random(range)
{	// Zufallszahl zwischen 1 und range
	// by www.drweb.de
	return Math.ceil(Math.random() * 1000) % range + 1;
}

var ZeitTimeout;
function ZeitAnzeigen(elid)
{	// Datum und Zeit werden in "elid" angezeigt
	// by www.selfhtml.org
	var Wochentagname = new Array("Sonntag", "Montag", "Dienstag", "Mittwoch","Donnerstag", "Freitag", "Samstag");
	var Jetzt = new Date();
	var Tag = Jetzt.getDate();
	var Monat = Jetzt.getMonth() + 1;
	var Jahr = Jetzt.getYear();
	if (Jahr < 999){
		Jahr += 1900;
	}
	var Stunden = Jetzt.getHours();
	var Minuten = Jetzt.getMinutes();
	var Sekunden = Jetzt.getSeconds();
	var WoTag = Jetzt.getDay();
	var Vortag = (Tag < 10) ? "0" : "";
	var Vormon = (Monat < 10) ? ".0" : ".";
	var Vorstd = (Stunden < 10) ? "0" : "";
	var Vormin = (Minuten < 10) ? ":0" : ":";
	var Vorsek = (Sekunden < 10) ? ":0" : ":";
	var Datum = Vortag + Tag + Vormon + Monat + "." + Jahr;
	var Uhrzeit = Vorstd + Stunden + Vormin + Minuten + Vorsek + Sekunden;
	var Gesamt = Wochentagname[WoTag] + ", " + Datum + ", " + Uhrzeit;
	$(elid).innerHTML=Gesamt;

	ZeitTimeout=window.setTimeout("ZeitAnzeigen('"+elid+"')", 1000);
}

function ShowAll()
{	// Spoiler, irrelevante und ignorierte Beitraege einblenden
	var a=gT($('posts'), 'div');
	var i=a.length;

	while(i--)
	{
		if(a[i].className.toLowerCase()=='irrelevant')
		{
			theID = a[i].id.substr(1);
			if($E('irLink'+theID)){
				toggleIrrelevant(theID,'ir');
			}
			else if($E('igLink'+theID)){
				toggleIrrelevant(theID,'ig');
			}
		}
	}

	a=gT($('posts'), 'div');
	i=a.length;

	while(i--)
	{
		if(a[i].className.toLowerCase()=='spoiler') {
			toggleSpoiler(a[i].getElementsByTagName('a')[0]);
		}
	}

	return false;
}

function Numsort(a,b) {
	return a-b;
}

function Lotto()
{
	var a = new Array();
	var e, i;

	while(a.length < 6)
	{
		e = 1+Math.round(Math.random()*48);
		for(i=0;i<a.length;i++)
		{
			if(e == a[i]) {
				break;
			}
		}
		if(i == a.length) {
			a.push(e);
		}
	}

	a.sort(Numsort);
	return a;
}

function numbers()
{	// Lottozahlengenerator
	// http://javascript.internet.com/games/lottery-numbers.html
	window.setTimeout(function()
	{
		var numbercount = 6;
		var maxnumbers = 49;
		var ok = 1;
		r = new Array(numbercount);
		for(var i = 1; i <= numbercount; i++) {
			r[i] = Math.round(Math.random() * (maxnumbers-1))+1;
		}
		for(var i = numbercount; i >= 1; i--) {
			for (var j = numbercount; j >= 1; j--) {
				if ((i != j) && (r[i] == r[j])) ok = 0;
	   		}
		}
		if(ok)
		{
			for (var k = 1; k <= numbercount; k++) {
				 r[k];
			}
		}
		else {
			numbers();
		}
	}, 1000);
}