/**
* kate: space-indent off; replace-tabs off; indent-width 4;
*
* Author: François "Clicky" Poirotte
* Licence: GPL
*/

var launcher = [];
var lnch_in = 0;

function newEl(e) { return document.createElement(e); }

function addHnd(e,t,c)
{
	if (e.addEventListener)
		return e.addEventListener(t,c,0);
	if (e.attachEvent)
		return e.attachEvent('on'+t,c);
}

function delHnd(e,t,c)
{
	if (e.removeEventListener)
		return e.removeEventListener(t,c,0);
	if (e.attachEvent)
		return e.detachEvent('on'+t,c);
}

function getEv(e) { return filter_keys(e ? e : window.event); }

function stopEv(e)
{
	e.cancelBubble = true;
	if (e.stopPropagation)
		e.stopPropagation();
	if (e.preventDefault)
		e.preventDefault();
	return false;
}

function filter_keys(e)
{
	if (!lnch_in) return e;
	if ((document.childNodes && !document.all && !navigator.taintEnabled) ||
		(document.all && !window.opera)) {
		if (e.type == 'keypress') return stopEv(e);
	}
	else if (e.type == 'keydown') return stopEv(e);
	return e;
}

function lnch_add(file, code)
{
	var i = launcher.length;
	launcher[i] = [code,code.length,file];
}

function lnch_reset()
{
	var i,k;
	k = document.getElementsByTagName('body')[0].firstChild;
	while (k != null) {
		if (k.nodeType == 1 && typeof(k.display) != 'undefined') {
			k.style.display = k.display;
			k.display = null;
		}
		k = k.nextSibling;
	}

	k = document.getElementsByTagName('head')[0].getElementsByTagName('script');
	for (i in k) if (k[i].id == 'lnch') k[i].parentNode.removeChild(k[i]);

	addHnd(document,'keypress',lnch_keys);
	lnch_in = 0;
}

function lnch_keys(e)
{
	var k,i,s;
	e = getEv(e);
	if (!e) return;
	k = e.keyCode || e.which;

	if (k < 32) return; // hack for Opera

	for (i = 0; i < launcher.length; i++) {
		if (String.fromCharCode(k) == launcher[i][0].substr(--launcher[i][1],1)) {
			if (launcher[i][1] <= 0) {
				for (k = 0; k < launcher.length; k++)
					launcher[k][1] = launcher[k][0].length;
				delHnd(document,'keypress',lnch_keys);

				k = document.getElementsByTagName('body')[0].firstChild;
				while (k != null) {
					if (k.nodeType == 1) {
						k.display = k.style.display;
						k.style.display = 'none';
					}
					k = k.nextSibling;
				}

				k = newEl('script');
				k.setAttribute('type',	'text/javascript');
				k.setAttribute('src',	launcher[i][2]);
				k.setAttribute('id',	'lnch');

				document.getElementsByTagName('head')[0].appendChild(k);
				lnch_in = 1;
				return;
			}
		}
		else launcher[i][1] = launcher[i][0].length;
	}
}

function lnch_high(g,s,m)
{
	var r,xhr;

	if (g == null) { if (m) m(); return; }
	if (XMLHttpRequest)
		xhr = new XMLHttpRequest();
	else if (ActiveXObject)
		xhr = new ActiveXObject("Microsoft.XMLHTTP");
	else { if (m) m(); return; }

	r = "game="+g+(s != null ? '&score='+s : '');

	xhr.open("POST", "/highscores.php", true);
	xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	xhr.setRequestHeader("Content-Length", r.length);

	xhr.onreadystatechange = function ()
	{
		if (xhr.readyState == 4) {
			if (m) m();
			if (xhr.status == 200)
				alert(
					"Highscores pour '"+g+"'\n"+
					xhr.responseText
				);
			else alert("Unable to retrieve highscores. Sorry! :/");
		}
	}
	xhr.send(r);
}

addHnd(window,'load',lnch_reset);

lnch_add('/js/t3s.js',		's!rt3t');
lnch_add('/js/lout.js',		'!n0eMnrutU');
//lnch_add('/js/invader.js',	'r3d@vn! ');
