// ---------------------------------------------------------------------------- ALLGEMEIN ----------------------------------------------------------------------------
function $() {
	var elements = new Array();
	for (var i = 0; i < arguments.length; i++) {
		var element = arguments[i];
		if (typeof element == 'string')
			element = document.getElementById(element);
		if (arguments.length == 1)
			return element;
		elements.push(element);
	}
	return elements;
}

function GetElementsByClass(className)
{	var classElements = new Array();
	var els = document.getElementsByTagName("*");
	var elsLen = els.length;
	var pattern = new RegExp("\\b" + className + "\\b");
	for (i = 0, j = 0; i < elsLen; i++) {
		if ( pattern.test(els[i].className) ) {
			classElements[j] = els[i];
			j++;
		}
	}
	return classElements;
}
var windowonload = 0;
window.onload = function () 
{	windowonload=1;
	sliders = GetElementsByClass('slider_class');
	for (i = 0; i < sliders.length; i++) {
		sliders[i].onmousedown = slide;
	}

	if ( typeof frames['spiele_container'] == 'object' )
    frames['spiele_container'].location.href = $('iframe_src').value;  
}
;

var spiel_geladen = 0; // spiel_geladen ist global
var count = 0;
var dauer = 15;
function counter(){
	count++;
	if (dauer-count >= 0)
	{	$('ladebalken').style.width=(200-Math.round(((dauer-count)/dauer )*200))+'px'; }
	if ((dauer-count <= 0) && (spiel_geladen == 1)) { 
		$('loading').style.display = 'none';
		$('spiele_container').style.width = $('input_game_width').value + 'px';
		$('spiele_container').style.height = $('input_game_height').value + 'px';
		show_div('slidercontainer');
	}
	else
	{	setTimeout("counter()", 1000); }
}

function mover(){
	if (document.getElementById('vorschalt_ad').innerHTML.match(/_300x250_RON|mpnrs|neu.de|planet/i)!=null)
	{	document.getElementById('vorschalt_ad').innerHTML=document.getElementById('content_ad_2').innerHTML; }
	document.getElementById('vorschalt_ad').style.visibility = 'visible';  
	document.getElementById('content_ad_2').style.visibility = 'visible'; 
}

function spiel_onload ()
{	if (windowonload == 1){
		spiel_geladen=1;
		
		//if ($('showAd').value == 'yes') 
		//{	// frames['ad_top_left'].location.href = 'http://www.coolespiele.com/iframead.php?pub=affilinet&name=topleft&id=affilinet_top_left';
			//frames['ad_center'].location.href = 'http://www.coolespiele.com/iframead.php?pub=affilinet&name=center&id=affilinet_center';
		//} 
		var ms_array = $('mehr_spiele_screenshots').value.split(';;;');
		for (i = 1; i <= ms_array.length; i++) 
		{	$("mehr_spiele_img_"+i).src = ms_array[i-1]; } 
		show_div('div_mehr_spiele');
	}
}


function hide_div (attribut)
{	$(attribut).style.display = "none"; }

function show_div (attribut)
{	$(attribut).style.display = "inline"; }

function ajaxRequest(request/*, post*/) {
	var AJAX = null;
	if (window.XMLHttpRequest) {
		AJAX=new XMLHttpRequest();
	} else {
		AJAX=new ActiveXObject("Microsoft.XMLHTTP");
	}
	if (AJAX==null) {
		alert("Your browser doesn't support AJAX.");					
		return false;
	}
	AJAX.onreadystatechange = function() {
		if (AJAX.readyState==4 || AJAX.readyState=="complete") {
				var array = AJAX.responseText.split('~');
				$(array[1]).innerHTML = array[5];
		}
	};
	
/*	if(post){
		urlBase = window.location.protocol + '//' + window.location.hostname;
		AJAX.open('post', urlBase+'/ajax.php', true);
  		AJAX.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
		AJAX.send('request='+request);
	}else{*/
		var url='/ajax.php?request='+request;
		AJAX.open("GET", url, true);
		AJAX.send(null);
//	}
}

// ---------------------------------------------------------------------------- FAVORITEN-BOX ----------------------------------------------------------------------------
function bookmark(url, title) {
  if (document.all) {
   window.external.AddFavorite(url,title);
  } else if (window.sidebar) {
   window.sidebar.addPanel(title,url,'');
  }
}

function collapse()
{	if ($('img_verkleinern').className =='button_fav_verkleinern')
	{	$('tablefavoriten').style.width = '20px';
		$('divfavoriten').style.display = 'none';
		$('favoritenmenu').style.display = 'none';
		$('ulfavoriten').style.display = 'none';
		$('fontfavoriten').style.display = 'none';
		$('sidebarscreenbox').style.display = 'none';
		$('fontfavoriten2').style.display = 'none';
		$('fontfavoriten3').style.display = 'none';
		/*$('div_favoritenlinks').style.display = 'none';*/
		$('img_verkleinern').className = 'button_fav_vergroessern';
	} 
	else 
	{	$('tablefavoriten').style.width = '170px';
		$('divfavoriten').style.display = '';
		$('favoritenmenu').style.display = '';
		$('ulfavoriten').style.display = '';
		$('fontfavoriten').style.display = '';
		$('sidebarscreenbox').style.display = '';
		$('fontfavoriten2').style.display = '';
		$('fontfavoriten3').style.display = '';
	/*	$('div_favoritenlinks').style.display = '';*/
		$('img_verkleinern').className = 'button_fav_verkleinern';		
	}	
}

function writeCookie(value,action) 
{	var name = "fav_cookie";
	var cookieValue = "";
	var search = name + "=";
	if(document.cookie.length > 0) {
		var offset = document.cookie.indexOf(search);
		if(offset != -1) {
			offset += search.length;
			var end = document.cookie.indexOf(";", offset);
			if(end == -1) end = document.cookie.length;
			cookieValue = unescape(document.cookie.substring(offset, end));
		}
	}
	var expires= "; expires=Sun, 31-Dec-2028 20:00:00 GMT";
	switch(action) 
	{	case "add":
			if (cookieValue.indexOf(value)=="-1")
			{ 	value = value+'%3B'+cookieValue.replace(/;/g, '%3B'); 
				document.cookie = name+"="+value+expires+"; path=/";
			} break;
		
		case "del":
			cookieValue = cookieValue.replace(/;/g, '%3B');
			value = value+'%3B';
			value = cookieValue.replace(value,"");
			document.cookie = name+"="+value+expires+"; path=/";
			break;
	} 
}

function spiel_add(id)
{	$('favoriten_dazu_'+id).id = 'favoriten_'+id;
	$('favoriten_dazu_img').className = 'button_fav_entfernen';
	//$('favoriten_dazu_img').width = '15';
	$('ulfavoriten').innerHTML = $('ulfavoriten').innerHTML.replace(/spiel_add/,'spiel_entfernen');	
	writeCookie(id,"add");
}

function spiel_entfernen(id)
{	$('favoriten_'+id).style.display = 'none';
	writeCookie(id,"del");
}

// ---------------------------------------------------------------------------- MAILFORM ----------------------------------------------------------------------------

// Pruefe auf eine gueltige E-Mail-Adresse: suche nach @ und .
function mailform_checkmail(elm) {
     if (elm.value.indexOf("@") != "-1" &&
         elm.value.indexOf(".") != "-1") {
         return true;
     }
     else {
         return false;
     }
}
 
// Pruefe auf leere Felder.
function mailform_checkname(elm) {
     if (elm.value == "" || elm.value == null) {
         return false;
     }
     else {
         return true;
     }
}

// Prüfe das gesamte Formular.
function check_mailform(form) {
    if (mailform_checkname(form.name_freund) == false) {    // Vollständiger Name?
         alert("Enter the name of your friend.");
         form.name_freund.focus();
         return false;
    }
 
	if (mailform_checkmail(form.email_freund) == false) {     // Echte E-Mail-Adresse?
         alert("Enter a valid e-mail address.");
         form.email_freund.focus();
         return false;
    }
 
    if (mailform_checkname(form.name_sender) == false) {    // Vollständiger Name?
         alert("Enter your name.");
         form.name_sender.focus();
         return false;
    }

    if (mailform_checkmail(form.email_sender) == false) {     // Echte E-Mail-Adresse?
         alert("Enter a valid e-mail address.");
         form.email_sender.focus();
         return false;
    }

    return true;
}


function show_mailform()
// blendet den mailform-Div-Container ein
{
	$('mailform').style.display = 'block';  
	$('mailform').style.visibility = 'visible'; 
	clear_mailform();
	return false;
}

function clear_mailform()
{
	var naam = $('input_naam').value;
	var url = $('input_url').value;

	$('mailform').innerHTML = 
		'<h2>Send This Game To A Friend: </h2><br>'+
		'<form action="/mailform_submit.php" method="post" name="form1" target="submit_iframe"  onSubmit="return check_mailform(this);">'+
		'<table border="0">'+
		'<tr>'+
		'	<td>Name of your friend </td>'+
		'	<td>'+
		'   	<input name="name_freund" type="text" id="name_freund" size="30">'+
		'	</td>'+
		'</tr>'+
		'<tr>'+
		'	<td>Your friends e-mail </td>'+
		'	<td>'+
		'    	<input name="email_freund" type="text" id="email__freund" size="30">'+
		'	</td>'+
		'</tr>'+
		'<tr>'+
		'	<td>Your name </td>'+
		'	<td>'+
		'   	<input name="name_sender" type="text" id="name_sender" size="30">'+
		'	</td>'+
		'</tr>'+
		'<tr>'+
		'	<td>Your e-mail </td>'+
		'	<td>'+
		'    	<input name="email_sender" type="text" id="email_sender" size="30">'+
		'    	<input name="spiel_name" type="hidden" id="spiel_name" size="30" value="'+naam+'">'+
		'    	<input name="spiel_url" type="hidden" id="spiel_url" size="30" value="'+url+'">'+
		'	</td>'+
		'</tr>'+
		'<tr>'+
		'	<td colspan="2">'+
		'       <input name="submit" type="submit" id="submit" value="Send">'+
		'	</td>'+
		'</tr>'+
		'</table>'+
		'<br><br>'+
		'</form>';
		// onClick="javascript:show_mailform_sent()"
	return false;
}

function confirm_mailform()
{
	$('mailform').innerHTML = '<b>Send this game to a friend:</b><br />'+
	'Your recommendation was sent! <br /><br />';
	//  <a href ="#" onClick="javascript:close_mailform()">Fenster schlie&szlig;en</a><br />
return false;
}

// ---------------------------------------------------------------------------- HIGHSCORE ----------------------------------------------------------------------------

var _GotError			= false;
var _XMLHTTP			= null;
var _RequestInProgress	= false; // ?????????????????????
var _RequestId			= 0;		// 0 -> Nothing
									// 1 -> SetUser
									// 2 -> GetUser
									// 3 -> ShowList

/*
 * Testet ob das AJAX-Object bereits angelegt wurde bzw. erzeugt dies ggf.
 * Rückgabe:
 * 	True  -> Object existiert
 *	False -> Object konnte nicht erstellt werden
 *
 */
function Initialize()
{
	// Object vorhanden ?
	if ( _XMLHTTP == null )
	{
		// Object erstellen
		CreateRequestObject();
	}
	
	return (_XMLHTTP != null);
}

/*
 * Erstellt, abhängig vom Browser, das geeignete AJAX-Object
 *
 */
function CreateRequestObject()
{
	if (typeof XMLHttpRequest != 'undefined')
	{
    		_XMLHTTP = new XMLHttpRequest();
	}
	if (!_XMLHTTP)
	{
		// Internet Explorer 6 and older
		try {
        		_XMLHTTP  = new ActiveXObject("Msxml2.XMLHTTP");
		} catch(e) {
        		try {
            			_XMLHTTP  = new ActiveXObject("Microsoft.XMLHTTP");
        		} catch(e) {
            			_XMLHTTP  = null;
        		}
    		}
	}
}

/*
 * Testet das AJAX-Object auf dessen Status
 * Rückgabe:
 * 	True  -> Idle
 * 	False -> Busy
 *
 */ 
function CallInCompleted()
{
	return ( _XMLHTTP.readyState==4 || _XMLHTTP.readyState=="complete" );
}

/*
 * Testet das AJAX-Object auf dessen Status
 * Rückgabe:
 * 	True  -> Busy
 * 	False -> Uninitialisiert bzw. Idle
 *
 */ 
function CallInProgress()
{
	if ( Initialize() )
	{
		switch ( _XMLHTTP.readyState )
		{
			case 1, 2, 3:
				return true;
				break;
	
			// Case 4 and 0
			 //default:
				//return false;
				//break;
		}
	}
	return false;
}

/*
 * Sendet ein AJAX-Request
 * Parameter:
 * 	url  -> Abzufragende URL z.B. "GetUser?name=Peter"
 *
 */ 
function SendRequest(url)
{
	_RequestInProgress = true;			// Abfrage im Gange
	_XMLHTTP.open('GET', url);			// Setzen der URL
	_XMLHTTP.onreadystatechange = HandleResponse;	// OnComplete()
	_XMLHTTP.send(null);				
}

/*
 * Testet ob ein String leer ist
 * Parameter:
 * 	inputStr -> Zu testender String
 *
 */ 
function isEmpty( inputStr )
{
	return (( null == inputStr || "" == inputStr ));
}

/*
 * Verarbeitet anhand der _RequestId die Ergebnisse der AJAX-Abfragen. 
 *
 */ 
function HandleResponse()
{
	if ( CallInCompleted() )
	{
		// Wählt die passende Verarbeitungsmethode
		switch ( _RequestId )
		{
			case 1: /*Set User Highscore*/
					// SetUser.php gibt HIDE zurück, wenn die Abfrage erfolgreich ausgeführt werden konnte 
					if ( !_XMLHTTP.responseText.match("HIDE") )
					{
						// Das Flag signalisiert das Überspringen des Highscore-Reloads/UrlSwitches
						_GotError = true;
						// Error anzeigen
						$("DNewHighscoreError").innerHTML = "Error: " + _XMLHTTP.responseText;						
					}
					break;
			case 2:	/*Get User Position*/
					$("DSearchPosition").innerHTML = _XMLHTTP.responseText.slice(0, 80);
					break;

			case 3:	/*Refresh Highscore List*/
					// Highscore-Tabelle updaten
					parent.$("hs_box").innerHTML = _XMLHTTP.responseText;
					// Zurück zum Spiel
					window.location.href = $("HighscoreLink").value;
					break;
		}
		_RequestId		= 0;		// Request wurde bearbeitet
		_RequestInProgress	= false;	// Request wurde bearbeitet
	}
}

/*
 * Verarbeitet die Suchanfrage nach der Position eines Highscore-Spielers 
 *
 */ 
function CheckUserPosition(gameId)
{
	if ( Initialize() )
	{
		_RequestId = 2;
		SendRequest("/Highscore-Games/php/GetUser.php?player=" + $("ISearchPositionName").value + "&game=" + gameId);
	} else
		alert("Your browser doesn't support AJAX.");
}

/*
 * Verarbeitet das Hinzufügen eines neuen Highscore-Spielers 
 *
 */ 
function SetNewHighscore()
{
	var _timeoutId;

	// Initialisiert?
	if ( Initialize() )
	{
		_RequestId = 1;	// SetHighScore hat die ID 1

		// Sende den Request an die Setuser
		SendRequest("/Highscore-Games/php/SetUser.php?game_id=" + $("HighscoreGame").value + "&game_score=" + $("HighscoreScore").value + "&player=" + $("HighscoreName").value);

		// Warte maximal eine eine Sekunde bevor der alte Request abgebrochen und der neue (Refresh Highscore)
 		// gesendet wird
		_timeoutId = window.setTimeout( function()
										{ 
											if ( CallInProgress() )
											{
												_XMLHTTP.abort();
											} else {
												if ( !_GotError )
												{
													_RequestId = 3;
													SendRequest("/Highscore-Games/php/GetHighscoreTable.php?HighscoreGame=" + $("HighscoreGame").value);
												} else 
													_GotError = false;
												window.clearTimeout(_timeoutId);
											}
										}, 1000 /* Half second */ 
									  );
		
	} else
		alert("Your browser doesn't support AJAX.");
}

/*
 * Testet die Eingabe auf unerlaubte Zeichen bzw. Leere 
 *
 */ 
function CheckInput()
{
	if ( !isEmpty($("HiN").value) && $("HiN").value.search(/[^a-zA-Z0-9äöüÄÖÜ_\!\)\(\[\]\^:]/) != -1 )																			  	
	{	$("HiN").style.backgroundColor = "#FF0000";
		$("SeD").disabled = true;
	} else
	{	$("HiN").style.backgroundColor = "#FFFFFF";		
		$("SeD").disabled = false;
	}
}

// ---------------------------------------------------------------------------- SLIDER ----------------------------------------------------------------------------
// Globale Variablen
var glob_valuecount	= '20';
var glob_value = '10';

function bsSliderChange(val){ 
	var height = parseInt($('input_game_height').value)*val;
	var width = parseInt($('input_game_width').value)*val;
	$('spiele_container').style.height = height+'px';	
	$('spiele_container').style.width = width+'px';	
	if ((width+30)>781)
	{	$('div_favoritenfloat').style.marginLeft = (width+30)+'px';	} 
	else 
	{	$('div_favoritenfloat').style.marginLeft = '781px';	}
}

// slideLeft: Cross-browser version of "element.style.left"
// Returns or sets the horizontal position of an element.
function slideLeft(elmnt, pos)
{	if (!(elmnt = $(elmnt))) return 0;
	if (elmnt.style && (typeof(elmnt.style.left) == 'string')) {
		if (typeof(pos) == 'number') elmnt.style.left = pos + 'px';
		else {
			pos = parseInt(elmnt.style.left);
			if (isNaN(pos)) pos = 0;
		}
	}
	else if (elmnt.style && elmnt.style.pixelLeft) {
		if (typeof(pos) == 'number') elmnt.style.pixelLeft = pos;
		else pos = elmnt.style.pixelLeft;
	}
	return pos;
}
// moveSlider: Handles slider and display while dragging
function moveSlider(evnt)
{	var evnt = (!evnt) ? window.event : evnt; // The mousemove event
	if (mouseover) { // Only if slider is dragged
		var x = slider.startOffsetX + evnt.screenX; // Horizontal mouse position relative to allowed slider positions
		if (x > slider.xMax) x = slider.xMax; // Limit horizontal movement
		if (x < 0) x = 0; // Limit horizontal movement
		slideLeft(slider.id, x);  // move slider to new horizontal position
		var sliderPos = (slider.distance / glob_valuecount) * Math.round(glob_valuecount * x / slider.distance);
		var v = Math.round(sliderPos * slider.scale + slider.from); // calculate display value
		glob_value = v; // put the new value in the slider display element
		bsSliderChange(v / 10);
		return false;
	}
	return;
}
// slide: Handles the start of a slider move.
function slide(evnt)
{	var DefaultSliderLength = 100;
	var glob_from = '1';
	var glob_to	= '20';

	if (!evnt) evnt = window.event; 
	slider = sliders[0];
	var dist = parseInt(slider.getAttribute('distance')); // The allowed slider movement in pixels.
	slider.distance = dist ? dist : DefaultSliderLength; // Deafault distance from global var.
	var val = parseInt(glob_valuecount);  // Allowed number of values in the interval.
	glob_valuecount = val ? val : slider.distance + 1; // Default number of values: the sliding distance.
	var from = parseFloat(glob_from); // Min/start value for the display.
	from = from ? from : 0; // Default min/start value: 0.
	var to = parseFloat(glob_to); // Max value for the display.
	to = to ? to : slider.distance; // Default number of values: the sliding distance.
	slider.scale = (to - from) / slider.distance; // Slider-display scale [value-change per pixel of movement].
	// Set limits for horizontal sliders.
	slider.from = from;
	slider.xMax = slider.distance;
	
	slider.startOffsetX = slideLeft(slider.id) - evnt.screenX; // Slider-mouse horizontal offset at start of slide.
	mouseover = true;
	document.onmousemove = moveSlider; // Start the action if the mouse is dragged.
	document.onmouseup = sliderMouseUp; // Stop sliding.
	return false;
}
// sliderMouseUp: Handles the mouseup event after moving a slider.
// Snaps the slider position to allowed/displayed value. 
function sliderMouseUp()
{	if (mouseover) {
		var v = (glob_value) ? glob_value : 0; // Find last display value.
		var pos = (v - slider.from)/(slider.scale); // Calculate slider position (regardless of orientation).
		pos = (pos > slider.xMax) ? slider.xMax : pos;
		pos = (pos < 0) ? 0 : pos;
		slideLeft(slider.id, pos); // Snap horizontal slider to corresponding display position.
		if (document.removeEventListener) { // Remove event listeners from 'document' (W3C).
			document.removeEventListener('mousemove', moveSlider, false);
			document.removeEventListener('mouseup', sliderMouseUp, false);
		}
		else if (document.detachEvent) { // Remove event listeners from 'document' (IE).
			document.detachEvent('onmousemove', moveSlider);
			document.detachEvent('onmouseup', sliderMouseUp);
		}
	}
	mouseover = false; // Stop the sliding.
}
// ---------------------------------------------------------------------------- ENDE ----------------------------------------------------------------------------

