/**
 * Function to getElementById
 *
 * @param String eId
 */
function eId(eId){
	e = document.getElementById(eId);
	if (e){
		return e;
	}else{
		return false;
	}
}

function blinkNickVisible(elIdNick){
	return true;
}

function clearField(field){
	field.value = "";
	field.focus();
}

function checkSearchField(){
	searchField = eId("search_field");

	if (searchField.value.length < 3){
		searchField.style.background = "#f00";
		searchField.value = searchField.value;
		searchField.focus();
	}else if(searchField.value == findGameString){
		searchField.style.background = "#f00";
		clearField(searchField);
	}else{
		document.location.href = searchLocation+"/"+searchField.value.replace(" ","_");
	}
}

function checkRegistration(){
	elEmail = eId("user_email");
	elNick = eId("user_nick");
	elGenderM = eId("user_gender_m");
	elGenderF = eId("user_gender_f");
	elAgb = eId("user_agb");
	
	elGenderContainer = eId("user_gender_container");
	elAgbContainer = eId("user_agb_container");
	elNickReserved = eId("user_nick_reserved");
	elNickWrong = eId("user_nick_wrong");
	
	elEmailSubline = eId("user_email_subline");
	elEmailReserved = eId("user_email_reserved");
	elEmailWrong = eId("user_email_wrong");
	
	noErrors = true;
	
	var pattern=/^([a-zA-Z0-9_.-])+@([a-zA-Z0-9_.-])+\.([a-zA-Z])+([a-zA-Z])+/;
	if(!pattern.test(elEmail.value)){
		elEmail.style.background = "#f00";
		noErrors = false;
	}else{
		/* now check for email */
		/* check if nick is free */
		var isEmailFree = true;
		response = new Ajax.Request("/account/remote_check_email/"+elEmail.value,{asynchronous:false, evalScripts:true,onSuccess: function(transport) {isEmailFree = transport.responseText}});
		if (isEmailFree == "correct"){
			elEmail.style.background = "";
			elEmailReserved.style.display = "none";
			elEmailWrong.style.display = "none";
			elEmailSubline.style.display = "block";
		}
		else if(isEmailFree == "e_reserved"){
			elEmailReserved.style.display = "block";
			elEmailWrong.style.display = "none";
			elEmailSubline.style.display = "none";
			elEmail.style.background = "#f00";
			noErrors = false;
		}
		else if(isEmailFree == "e_wrong"){
			elEmailReserved.style.display = "none";
			elEmailWrong.style.display = "block";
			elEmailSubline.style.display = "none";
			elEmail.style.background = "#f00";
			noErrors = false;
		}
	}
	
	if (elNick.value == ""){		
		elNick.style.background = "#f00";
		noErrors = false;
	}else{
		/* check if nick is free */
		var isFree = true;
		response = new Ajax.Request("/account/remote_check_nick/"+elNick.value,{asynchronous:false, evalScripts:true,onSuccess: function(transport) {isFree = transport.responseText}});
		if (isFree == "correct"){
			elNick.style.background = "";
			elNickReserved.style.display = "none";
			elNickWrong.style.display = "none";
		}
		else if(isFree == "e_reserved"){
			elNickReserved.style.display = "block";
			elNickWrong.style.display = "none";
			elNick.style.background = "#f00";
			noErrors = false;
		}
		else if(isFree == "e_wrong"){
			elNickReserved.style.display = "none";
			elNickWrong.style.display = "block";
			elNick.style.background = "#f00";
			noErrors = false;
		}
	}
	if (elGenderM.checked == false && elGenderF.checked == false){
		elGenderContainer.style.border = "1px solid #f00";
		noErrors = false;
	}else{
		elGenderContainer.style.border = "";
	}
	
	if (elAgb && elAgbContainer){
		if (elAgb.checked == false){
			elAgbContainer.style.border = "1px solid #f00";
			noErrors = false;
		}else{
			elAgbContainer.style.border = "";
		}
	}
	return noErrors;
}



/**
 * Tab-Boxen toggeln
 *
 */
function toggleTabBox(tabGroup,currentTab,maxTabs){
	elControlPrefix = "tabcontrol__";
	elPrefix = "tabbox__";
	elSeperator = "_";
	elActiveClassName = "tabBoxLinkActive";
	
	fixedTabs = 0;
	
	for(i=0;i<maxTabs;i++){
		elCurrent = eId(elPrefix+tabGroup+elSeperator+i);
		elCurrentControl = eId(elControlPrefix+tabGroup+elSeperator+i);
		
		/* toggle for Tab */
		if (elCurrent && i==currentTab){
			elCurrent.style.display = "block";
			fixedTabs++;
		}else if (elCurrent){
			elCurrent.style.display = "none";
			fixedTabs++;
		}
		
		/* toggle for Control */
		if (elCurrentControl && i==currentTab){
			elClassWords = elCurrentControl.className.split(" ");
			isInArray = false;
			for (z=0;z<elClassWords.length;z++){
				if (elClassWords[z] == elActiveClassName){
					isInArray = true;
					break;
				}
			}
			
			if (!isInArray){
				elClassWords[elClassWords.length] = elActiveClassName;
			}
			
			tmpClassName = "";
			for (z=0;z<elClassWords.length;z++){
				if (elClassWords[z] != ""){
					tmpClassName += elClassWords[z];
				}
				if (z<(elClassWords.length-1)){
					tmpClassName += " ";
				}
			}						
			elCurrentControl.className = tmpClassName;
		}else if (elCurrent){
			elClassWords = elCurrentControl.className.split(" ");
			isInArray = false;
			for (z=0;z<elClassWords.length;z++){
				if (elClassWords[z] == elActiveClassName){
					elClassWords[z] = "";
					break;
				}
			}
						
			tmpClassName = "";
			for (z=0;z<elClassWords.length;z++){
				if (elClassWords[z] != ""){
					tmpClassName += elClassWords[z];
				}
				if (z<(elClassWords.length-1)){
					tmpClassName += " ";
				}
			}						
			elCurrentControl.className = tmpClassName;
		}
	}
	return fixedTabs;
}

/**
 * Absolute Position von links
 *
 */
function getElementX(el){
	if (typeof(el) != "object"){
		el = eId(el);
	}
	
	x = el.offsetLeft;
	if (!el.offsetParent) return x;
	else return (x+getElementX(el.offsetParent));
}

/**
 * Absolute Position von oben
 *
 */
function getElementY(el) {
	if (typeof(el) != "object"){
		el = eId(el);
	}
	
	y = el.offsetTop;
	if (!el.offsetParent) return y;
	else return (y+getElementY(el.offsetParent));
}


function getElementBottom(el){
	if (typeof(el) != "object"){
		el = eId(el);
	}
	
	elTop = getElementY(el);
	return elTop+el.offsetHeight;
}


function openPopupGame(gameHash){
	alert("#ToDo!\n"+gameHash);
}


/****************************
 * AutoImageChanger			*
 ****************************
 * Funktionsbibliothek zum Automatischen Wechseln der Mouseover/mouseout bilder eines Links
 * 
 * (c) millepondo services 
 * 2010-06-17
 *
 */
var AutoImageChanger = Class.create();
AutoImageChanger.prototype = {
	initialize: function() {
		document.observe('mouseover', (function(event){
			var target = event.findElement('a[rel^=autoimageswitch]') || event.findElement('area[rel^=autoimageswitch]');
			if (target) {
				event.stop();
				this.start(target,true);
			}
		}).bind(this));
		document.observe('mouseout', (function(event){
			var target = event.findElement('a[rel^=autoimageswitch]') || event.findElement('area[rel^=autoimageswitch]');
			if (target) {
				event.stop();
				this.start(target,false);
			}
		}).bind(this));
	},
	start: function(link,activateImg) {
		nodes = link.childNodes;
		imgNode = null;
		for(v=0;v<nodes.length;v++){
			if (nodes[v].nodeName == "img" || nodes[v].nodeName == "IMG"){
				imgNode = nodes[v];
				break;
			}
		}

		if (!imgNode){
			return false;
		}

		currentTarget = imgNode.src;
		elTargetExtensions = currentTarget.split(".");
		preLastExtension = elTargetExtensions[(elTargetExtensions.length-2)];
		elToken = preLastExtension.split("_");
		lastToken = elToken[(elToken.length-1)];

		newImgSrc = "";
		tmpSrc = "";
		for (z=0;z<(elToken.length-1);z++){
			tmpSrc += elToken[z]+"_";
		}

		/** switch the possible options **/
		if (lastToken == "on" || lastToken == "off"){
			if (activateImg){
				tmpSrc += "on";
			}else{
				tmpSrc += "off";
			}
		}else if (lastToken == "active" || lastToken == "inactive"){
			if (activateImg){
				tmpSrc += "active";
			}else{
				tmpSrc += "inactive";
			}
		}else if (lastToken == "normal" || lastToken == "hover"){
			if (activateImg){
				tmpSrc += "hover";
			}else{
				tmpSrc += "normal";
			}
		}

		for (i=0;i<(elTargetExtensions.length-2);i++){
			newImgSrc += elTargetExtensions[i]+".";
		}
		newImgSrc += tmpSrc+".";
		newImgSrc += elTargetExtensions[(elTargetExtensions.length-1)];

		imgNode.src = newImgSrc;
		return true;
	}
}
document.observe('dom:loaded', function () { new AutoImageChanger(); });
/*** AutoImageChanger ***/


/****************************
 * AutoTabController		*
 ****************************
 * Funktionsbibliothek zum Automatischen Wechseln der Tabs
 * 
 * (c) millepondo services 
 * 2010-06-23
 *
 */
var AutoTabChanger = Class.create();
AutoTabChanger.prototype = {
	initialize: function() {
		document.observe('click', (function(event){
			var target = event.findElement('a[rel^=tabcontrol]') || event.findElement('area[rel^=tabcontrol]');
			if (target) {
				event.stop();
				this.start(target);
			}
		}).bind(this));
	},
	start: function(link) {
		relString = link.rel;
		relToken = relString.split("[");
				
		indicator = relToken[1].substr(0,(relToken[1].length-1));
		position = relToken[2].substr(0,(relToken[2].length-1));
		
		controlElements = $$('a[rel^=tabcontrol\\['+indicator+'\\]]');
		
		for(i=0;i<controlElements.length;i++){
			elControls = $$('a[rel^=tabcontrol\\['+indicator+'\\]\\['+i+'\\]]');
			elTabs = $$('div[rel^=tabbox\\['+indicator+'\\]\\['+i+'\\]]');
			if (i==position){
				this.toggle(elControls[0],elTabs[0],true);
			}else{
				this.toggle(elControls[0],elTabs[0],false);
			}
		}
	},
	toggle: function (elCurrentControl,elCurrent,active){
		elActiveClassName = "tabBoxLinkActive";	
		
			if ((!elCurrent) || (!elCurrentControl)){
				return false;
			}
				
			/* toggle for Tab */
			if (elCurrent && active){
				elCurrent.style.display = "block";
			}else if (elCurrent){
				elCurrent.style.display = "none";
			}

			/* toggle for Control */
			if (elCurrentControl && active){
				elClassWords = elCurrentControl.className.split(" ");
				isInArray = false;
				for (z=0;z<elClassWords.length;z++){
					if (elClassWords[z] == elActiveClassName){
						isInArray = true;
						break;
					}
				}

				if (!isInArray){
					elClassWords[elClassWords.length] = elActiveClassName;
				}

				tmpClassName = "";
				for (z=0;z<elClassWords.length;z++){
					if (elClassWords[z] != ""){
						tmpClassName += elClassWords[z];
					}
					if (z<(elClassWords.length-1)){
						tmpClassName += " ";
					}
				}						
				elCurrentControl.className = tmpClassName;
			}else if (elCurrent){
				elClassWords = elCurrentControl.className.split(" ");
				isInArray = false;
				for (z=0;z<elClassWords.length;z++){
					if (elClassWords[z] == elActiveClassName){
						elClassWords[z] = "";
						break;
					}
				}

				tmpClassName = "";
				for (z=0;z<elClassWords.length;z++){
					if (elClassWords[z] != ""){
						tmpClassName += elClassWords[z];
					}
					if (z<(elClassWords.length-1)){
						tmpClassName += " ";
					}
				}						
				elCurrentControl.className = tmpClassName;
			}
	}
}
document.observe('dom:loaded', function () { new AutoTabChanger(); });
/*** AutoImageChanger ***/


/**
*
*  Base64 encode / decode
*  http://www.webtoolkit.info/
*
**/
 
var Base64 = {
 
	// private property
	_keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
 
	// public method for encoding
	encode : function (input) {
		var output = "";
		var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
		var i = 0;
 
		input = Base64._utf8_encode(input);
 
		while (i < input.length) {
 
			chr1 = input.charCodeAt(i++);
			chr2 = input.charCodeAt(i++);
			chr3 = input.charCodeAt(i++);
 
			enc1 = chr1 >> 2;
			enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
			enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
			enc4 = chr3 & 63;
 
			if (isNaN(chr2)) {
				enc3 = enc4 = 64;
			} else if (isNaN(chr3)) {
				enc4 = 64;
			}
 
			output = output +
			this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
			this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);
 
		}
 
		return output;
	},
 
	// public method for decoding
	decode : function (input) {
		var output = "";
		var chr1, chr2, chr3;
		var enc1, enc2, enc3, enc4;
		var i = 0;
 
		input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
 
		while (i < input.length) {
 
			enc1 = this._keyStr.indexOf(input.charAt(i++));
			enc2 = this._keyStr.indexOf(input.charAt(i++));
			enc3 = this._keyStr.indexOf(input.charAt(i++));
			enc4 = this._keyStr.indexOf(input.charAt(i++));
 
			chr1 = (enc1 << 2) | (enc2 >> 4);
			chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
			chr3 = ((enc3 & 3) << 6) | enc4;
 
			output = output + String.fromCharCode(chr1);
 
			if (enc3 != 64) {
				output = output + String.fromCharCode(chr2);
			}
			if (enc4 != 64) {
				output = output + String.fromCharCode(chr3);
			}
 
		}
 
		output = Base64._utf8_decode(output);
 
		return output;
 
	},
 
	// private method for UTF-8 encoding
	_utf8_encode : function (string) {
		string = string.replace(/\r\n/g,"\n");
		var utftext = "";
 
		for (var n = 0; n < string.length; n++) {
 
			var c = string.charCodeAt(n);
 
			if (c < 128) {
				utftext += String.fromCharCode(c);
			}
			else if((c > 127) && (c < 2048)) {
				utftext += String.fromCharCode((c >> 6) | 192);
				utftext += String.fromCharCode((c & 63) | 128);
			}
			else {
				utftext += String.fromCharCode((c >> 12) | 224);
				utftext += String.fromCharCode(((c >> 6) & 63) | 128);
				utftext += String.fromCharCode((c & 63) | 128);
			}
 
		}
 
		return utftext;
	},
 
	// private method for UTF-8 decoding
	_utf8_decode : function (utftext) {
		var string = "";
		var i = 0;
		var c = c1 = c2 = 0;
 
		while ( i < utftext.length ) {
 
			c = utftext.charCodeAt(i);
 
			if (c < 128) {
				string += String.fromCharCode(c);
				i++;
			}
			else if((c > 191) && (c < 224)) {
				c2 = utftext.charCodeAt(i+1);
				string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
				i += 2;
			}
			else {
				c2 = utftext.charCodeAt(i+1);
				c3 = utftext.charCodeAt(i+2);
				string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
				i += 3;
			}
 
		}
 
		return string;
	}
 
}