// JavaScript Funktionen fuer ein paar kleine Extras ;o)
// (c) 09.04.2006 Henrik Wening							

G_LEER = 0;
G_STOPP = 1;
G_START = 2;
G_CRASH = 3;
G_STATRHM = 5;
G_STATBLK = 6;
G_STATNR = 7;
G_STERN = 8;
G_PILOT = 17;
I_AKTION = 0;
I_RAHMEN = 1;
I_BALKEN = 2;
I_ANZ = 3;
I_SPR = 5;
I_VERS = 6;
I_MAX = 7;
O_MAX = 50;
S_MAX = 1200;
P_MAX = 5;
W_MAX = 100;
Z_MAX = 15;
D_ID = 0;
D_ZIEL = 1;
D_ADD = 2;
D_PAUSE = 3;
M_FLUCHT = 0;
M_ANGRIFF = 1;

offx = new Array(0, 1, 2, 2, 2, 2, 2, 1, 0, -1, -2, -2, -2, -2, -2, -1);
offy = new Array(-2, -2, -2, -1, 0, 1, 2, 2, 2, 2, 2, 1, 0, -1, -2, -2);
infoXpos = new Array(5, 5,  7, 17, 24, -31, -75);
infoYpos = new Array(5, 46, 48, 49, 49, 5, -44);
infoBreite = new Array(40, 40, 36, 7, 7, 26, 70);
infoHoehe = new Array(40, 13, 9, 8, 8, 20, 39);
bgFlashFarben = new Array("rgb(255,255,255)", "rgb(255,255,0)", "rgb(255,192,0)", "rgb(255,128,0)", "rgb(255,192,0)", "rgb(255,255,00)");
infos = new Array();
piloten = new Array();
sterne = new Array();
grafiken = new Array();
regeln = new Array();
zoomDaten = new Array("", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "");
wanderDaten = new Array("knopf_space-pilot", "knopf_galaxy", "knopf_zaga","knopf_space-pilot2", "knopf_zyron", "knopf_fire-galaxy");
stoppPiloten = true;
linksGeaendert = false;
stoppWandern = false;
stoppZoom = false;
ausgeblendet = 0;
panz = 0;
sanz = 0;
paktiv = 0;
pzeit = S_MAX;
bgFlash = 0;
bgRegel = -1;
mausX = -100;
mausY = -100;
zaktiv = 0;
wakt = 0;
woff = 25;
aktivElem = "";
aktivHoehe = 0;
aktivBreite = 0;
aktivHSpace  = 0;
aktivVSpace  = 0;
aktivSchritt = -1;
aktivBild = "";
protZaehler = 500;
objektId = "";
cursorId = "";
modus = M_FLUCHT;


function zufall (max) {
	return parseInt(eval(Math.random() * max));
}

function breite () {
	if (typeof( window.innerWidth ) == 'number')
		return window.innerWidth;
	if (document.documentElement && document.documentElement.clientWidth)
		return document.documentElement.clientWidth;
	if (document.body)
		if (document.body.clientWidth)
			return document.body.clientWidth;
	return 200;
}

function hoehe () {
	if (typeof(window.innerHeight) == 'number')
		return window.innerHeight;
	if (document.documentElement && document.documentElement.clientHeight)
		return document.documentElement.clientHeight;
	if (document.body)
		if (document.body.clientHeight)
			return document.body.clientHeight;
	return 200;
}

function xoffset () {
	if (typeof(window.pageXOffset) == 'number')
		return window.pageXOffset;
	if (document.documentElement && document.documentElement.scrollLeft)
		return document.documentElement.scrollLeft;
	if (document.body)
		if (document.body.scrollLeft)
			return document.body.scrollLeft;
	return 0;
}

function yoffset () {
	if (typeof(window.pageYOffset) == 'number')
		return window.pageYOffset;
	if (document.documentElement && document.documentElement.scrollTop)
		return document.documentElement.scrollTop;
	if (document.body) 
		if (document.body.scrollTop)
			return document.body.scrollTop;
	return 0;
}

function mausXY (e) {
	if (!e)
		e = window.event;
 	if (document.all) {
		mausX = e.clientX + xoffset();
		mausY = e.clientY + yoffset();
	} else {
		mausX = e.pageX;
		mausY = e.pageY;
	}
	if (ausgeblendet > 0)
		if (--ausgeblendet == 0) {
			location.reload();
		}
}

function erzeugeCookie (name, wert, tage) {
	var expires;
	if (tage) {
		var date = new Date();
		date.setTime(date.getTime() + (tage * 24 * 60 * 60 * 1000));
		expires = "; expires=" + date.toUTCString();
	} else
		expires = "";
	document.cookie = name + "=" + wert + expires + "; path=/";
}

function leseCookie (name) {
	var definition = name + "=";
	var cookies = document.cookie.toString().split(';');
	for (var i = 0; i < cookies.length; i++)
	{
		var pos = cookies[i].indexOf(definition);
		if (pos != -1)
			return cookies[i].substring(pos + definition.length, cookies[i].length);
	}
	return "";
}

function loescheCookie (name) {
	erzeugeCookie(name, "", -1);
}

function addLinks () {
	var anz = document.links.length;
	var link = "";
	var laenge;
	for (var i = 0; i < anz; i++) {
		link = document.links[i].href;
		laenge = link.indexOf("#");
		if (laenge == -1)
			laenge = link.length;
		if ((link.substring(laenge - 4, laenge) == "html" ) && ( link.indexOf("javascript:") == -1))
			document.links[i].href = 'javascript:gehe("' + link + '")';
	}
}

function splitFarbe (farbe, nr) {
	if (farbe.charAt(0) == "#") {
		var pos = nr * 2 + 1;
		return parseInt(farbe.substring(pos, (pos + 2)), 16);
	} else {
		if ((farbe.length > 3) && (farbe.substring(0, 3) == "rgb")) {
			var farben = new Array(10);
			farben = farbe.split("(")[1].split(")")[0].split(",");
			return farben[nr];
		}
		return 0;
	}
}

function dimmeFarbwert (w, z) {
	var wert = parseInt(w);
	var ziel = parseInt(z);
	if (Math.abs(wert - ziel) <= 16)
		return ziel;
	if (wert > ziel)
		wert -= 16;
	else
		wert += 16;
	return wert;
}

function dimmeFarbe (aktuell, ziel) {
	return "rgb(" + dimmeFarbwert(splitFarbe(aktuell, 0), splitFarbe(ziel, 0)) + "," + dimmeFarbwert(splitFarbe(aktuell, 1), splitFarbe(ziel, 1)) + "," + dimmeFarbwert(splitFarbe(aktuell, 2), splitFarbe(ziel, 2)) + ")";
}
	
function ausblenden (anz, adr) {
	if (document.styleSheets) {
		bgFarbe = dimmeFarbe(regeln[bgRegel].style.backgroundColor, "rgb(0,0,0)");
		regeln[bgRegel].style.backgroundColor = bgFarbe;
		for (var i = 0; i < regeln.length; i++) {
			if (i == bgRegel)
				continue;
			if (regeln[i].style.color && (regeln[i].style.color.length > 0))
				regeln[i].style.color = dimmeFarbe(regeln[i].style.color, bgFarbe);
			if (regeln[i].style.backgroundColor && (regeln[i].style.backgroundColor.length > 0))
				regeln[i].style.backgroundColor = dimmeFarbe(regeln[i].style.backgroundColor, bgFarbe);
		}
	}
	if (document.images) {
		for (var im = 0; im < document.images.length; im++) {
			if (document.images[im].style.height) {
				var ih = parseInt(document.images[im].height) / 1.5;
				document.images[im].style.height = "" + ih + "px";
			} else
				document.images[im].height /= 1.5;
		}
	}
	if (++anz < 16)
		window.setTimeout('ausblenden(' + anz + ',"' + adr + '")', 30);
	else
		if (adr == "")
			flash(false);
		else {
			ausgeblendet = 0;
			window.location.href = adr;
		}
}
		
function flash (start) {
	if (start) {
		stoppZoom = true;
		if (document.styleSheets) {
			vordergrundSich = new Array(regeln.length);
			hintergrundSich = new Array(regeln.length);
			for (var i = 0; i < regeln.length; i++) {
				if (regeln[i].style.color && (regeln[i].style.color.length > 0))
					vordergrundSich[i] = regeln[i].style.color;
				else
					vordergrundSich[i] = "-";
				if (regeln[i].style.backgroundColor && (regeln[i].style.backgroundColor.length > 0))
					hintergrundSich[i] = regeln[i].style.backgroundColor;
				else
					hintergrundSich[i] = "-";
			}
		}
		if (document.images)
			for (var im = 0; im < document.images.length; im++)
				if (document.images[im].style.height)
					document.images[im].alt = "HoehePx=" + document.images[im].style.height;
				else
					document.images[im].alt = "Hoehe=" + document.images[im].height;
		aktivSchritt = 0;
		ausblenden(0, "");
	} else {
		if (document.styleSheets) {
			for (im = 0; im < regeln.length; im++) {
				if (vordergrundSich[im] != "-") {
					regeln[im].style.color = vordergrundSich[im];
				}
				if (hintergrundSich[im] != "-") {
					regeln[im].style.backgroundColor = hintergrundSich[im];
				}
			}
		}
		if (document.images) {
			for (i = 0; i < document.images.length; i++) {
				var alt = document.images[i].alt;
				if (alt.substring(0, 6) == "Hoehe=")
					document.images[i].height = alt.substring(6, alt.length);
				if (alt.substring(0, 8) == "HoehePx=")
					document.images[i].style.height = alt.substring(8, alt.length);
				document.images[i].alt = document.images[i].title;
			}
		}
		panz = panz + 1 + zufall(6);
		if (panz >= O_MAX) {
			panz = O_MAX;
		}
		restartGrafik();
		initPiloten(true);
		pzeit = S_MAX;
		animation();
	}
}

function gehe (adr) {
	stopp(false);
		if (!document.all)
			document.releaseEvents(Event.MOUSEMOVE);
		document.onmousemove = "";
	if (regeln.length > 0) {
		stoppZoom = true;
		aktivSchritt = 0;
		window.setTimeout('ausblenden(0,"' + adr + '")', 30);
		return;
	}
	window.location.href = adr;
}

function testeCrash (nr, top, left) {
	if (piloten[nr]["crash"])
		return false;
	if (piloten[nr]["imun"] > 0)
		return false;
	if (piloten[nr]["pause"] > 0)
		return false;
	if (piloten[nr]["tarnung"] > 140)
		return false;
	if (Math.abs(top - parseInt(piloten[nr]["top"])) > 10)
		return false;
	if (Math.abs(left - parseInt(piloten[nr]["left"])) > 10)
		return false;
	if (bgRegel != -1)
		bgFlash = 6;
	return true;
}

function pilotCrash (nr) {
	piloten[nr]["crash"] = true;
	piloten[nr]["schritt"] = 0;
	piloten[nr]["tarnung"] = 0;
	var nach = nr + 1;
	if (nach < panz) {
		piloten[nach]["verfolger"] = false;
		var schritt = piloten[nach]["schritt"];
		piloten[nach]["richtung"] = eval(parseInt(piloten[nr]["histRichtung"].charAt(schritt), 16));
		piloten[nach]["faktor"] = eval(parseInt(piloten[nr]["histFaktor"].charAt(schritt), 36));
	}
}

function richtungsWechsel (richt, ziel) {
	if (richt == ziel)
		return 0;
	var diffp;
	var diffm;
	if (richt > ziel) {
		diffp = ziel + 16 - richt;
		diffm = richt - ziel;
	} else {
		diffp = ziel - richt;
		diffm = richt + 16 - ziel;
	}
	if (diffp < diffm)
		return 1;
	else
		return -1;
}

function multiPilot (nr) {
	var multiRicht = new Array(14, 2, 12, 4, 10, 6, 8, 15, 1, 13, 3, 11, 5, 9, 7, 0);
	var neu = zufall(5) + 4;
	var anz = stoppPiloten ? 0 : panz;
	var akt = 0;
	var typ = zufall(4) + 1;
	for (var i = 1; (i < anz) && (akt < neu); i++) {
		var schritt = piloten[i]["schritt"];
		var crash = piloten[i]["crash"];
		if (!crash || (schritt < 17))
			continue;
		piloten[i]["typ"] = typ;
		piloten[i]["crash"] = false;
		piloten[i]["tarnung"] = 0;
		piloten[i]["imun"] = 10;
		piloten[i]["richtung"] = (piloten[nr]["richtung"] + multiRicht[akt]) % 16;
		piloten[i]["schritt"] = piloten[nr]["schritt"];
		piloten[i]["top"] = piloten[nr]["top"];
		piloten[i]["left"] = piloten[nr]["left"];
		piloten[i]["faktor"] = piloten[nr]["faktor"];
		piloten[i]["pause"] = piloten[nr]["pause"];
		piloten[i]["verfolger"] = 0;
		piloten[i]["multi"] = 0;
		piloten[i]["histRichtung"] = piloten[nr]["histRichtung"];
		piloten[i]["histFaktor"] = piloten[nr]["histFaktor"];
		akt++;
	}
}

function fluchtRichtung (xmin, xmax, ymin, ymax, top, left, richt, faktor, tarnung) {
	var tarnAdd = 0;
	var aend = 0;
	var ziel = -1;
	var ziel2 = -1;
	var diffy = top - mausY;
	var diffx = left - mausX;
	var abstand = 2.1 * faktor + 16;
	var abstandM = abstand * (-1);
	var abstand2 = abstand * 2;
	if (top < (ymin + abstand))
		ziel = 8;
	if (top > (ymax - abstand))
		ziel = 0;
	if (left < (xmin + abstand)) {
		if (ziel == 8)
			ziel = 6;
		else
			ziel = (ziel == 0) ? 2 : 4;
	}
	if (left > (xmax - abstand)) {
		if (ziel == 8)
			ziel = 10;
		else
			ziel = (ziel == 0) ? 14 : 12;
	}
	if ((Math.abs(diffy) < abstand2) && (Math.abs(diffx) < abstand2)) {
		tarnAdd = 2;
		if (diffy > abstandM && diffy < 0)
			ziel2 = 0;
		if (diffy > 0 && diffy < abstand)
			ziel2 = 8;
		if (diffx > abstandM && diffx < 0) {
			if (ziel2 == 0)
				ziel2 = 14;
			else
				ziel2 = (ziel2 == 8) ? 10 : 12;
		}
		if (diffx > 0 && diffx < abstand) {
			if (ziel2 == 0)
				ziel2 = 2;
			else
				ziel2 = (ziel2 == 8) ? 6 : 4;
		}
		if (ziel2 != -1)
			if (faktor < 25) {
				faktor += 2;
				tarnAdd = 3;
			}
	} else
		tarnAdd = -2;
	if (ziel2 != -1) {
		if (ziel == -1)
			ziel = ziel2;
		else {
			ziel = ziel + richtungsWechsel(ziel, ziel2);
			if (ziel < 0)
				ziel = 15;
			if (ziel > 15)
				ziel = 0;
		}
	}
	tarnung += tarnAdd;
	if (tarnung < 0)
		tarnung = 0;
	if (ziel == -1) {
		switch (zufall(10)) {
			case 0 :
				if (faktor > 0)
					faktor--;
				break;
			case 9 :
				if (faktor < 15)
					faktor++;
				break;
		}
		if (faktor > 15)
			faktor -= 1;
	}
	if (ziel != -1)
		aend = richtungsWechsel(richt, ziel);
	else {
		switch (zufall(7)) {
			case 0 :
				aend = -1;
				break;
			case 6 :
				aend = 1;
				break;
		}
	}
	richt = richt + aend;
	if (richt < 0)
		richt = 15;
	if (richt > 15)
		richt = 0;
	var ergeb = new Array(3);
	ergeb[0] = richt;
	ergeb[1] = faktor;
	ergeb[2] = tarnung;
	ergeb[3] = tarnAdd;
	return ergeb;
}

function angriffsRichtung (xmin, xmax, ymin, ymax, top, left, richt, faktor, tarnung) {
	var tarnAdd = 0;
	var aend = 0;
	var ziel = -1;
	var ziel2 = -1;
	var diffy = top - mausY;
	var diffx = left - mausX;
	var abstand = 2.1 * faktor + 16;
	var abstandM = abstand * (-1);
	var abstand2 = abstand * 2;
	if (top < (ymin + abstand))
		ziel = 0;
	if (top > (ymax - abstand))
		ziel = 8;
	if (left < (xmin + abstand)) {
		if (ziel == 8)
			ziel = 14;
		else
			ziel = (ziel == 0) ? 10 : 12;
	}
	if (left > (xmax - abstand)) {
		if (ziel == 8)
			ziel = 2;
		else
			ziel = (ziel == 0) ? 6 : 4;
	}
	if ((Math.abs(diffy) < abstand2) && (Math.abs(diffx) < abstand2)) {
		tarnAdd = 2;
		if (diffy > abstandM && diffy < 0)
			ziel2 = 8;
		if (diffy > 0 && diffy < abstand)
			ziel2 = 0;
		if (diffx > abstandM && diffx < 0) {
			if (ziel2 == 0)
				ziel2 = 6;
			else
				ziel2 = (ziel2 == 8) ? 2 : 4;
		}
		if (diffx > 0 && diffx < abstand) {
			if (ziel2 == 0)
				ziel2 = 10;
			else
				ziel2 = (ziel2 == 8) ? 14 : 12;
		}
//		if (ziel2 != -1)
//			if (faktor < 25) {
//				faktor += 2;
//				tarnAdd = 3;
//			}
	} else
//		tarnAdd = -2;
	if (ziel2 != -1) {
		if (ziel == -1)
			ziel = ziel2;
		else {
			ziel = ziel + richtungsWechsel(ziel, ziel2);
			if (ziel < 0)
				ziel = 15;
			if (ziel > 15)
				ziel = 0;
		}
	}
//	tarnung += tarnAdd;
//	if (tarnung < 0)
//		tarnung = 0;
	if (ziel == -1) {
		switch (zufall(10)) {
			case 0 :
				if (faktor > 0)
					faktor--;
				break;
			case 9 :
				if (faktor < 15)
					faktor++;
				break;
		}
		if (faktor > 15)
			faktor -= 1;
	}
	if (ziel != -1)
		aend = richtungsWechsel(richt, ziel);
	else {
		switch (zufall(7)) {
			case 0 :
				aend = -1;
				break;
			case 6 :
				aend = 1;
				break;
		}
	}
	richt = richt + aend;
	if (richt < 0)
		richt = 15;
	if (richt > 15)
		richt = 0;
	var ergeb = new Array(3);
	ergeb[0] = richt;
	ergeb[1] = faktor;
	ergeb[2] = tarnung;
	ergeb[3] = tarnAdd;
	return ergeb;
}

function animation () {
	var neu;
	var top;
	var mult;
	var faktor = 1;
	var addX;
	var addY;
	var typ;
	var image;
	var nr;
	var vor;
	var verf;
	var schritt;
	var crash;
	var richt;
	var tarnung;
	var multi;
	var imun;
	var tarnAdd;
	var hist;
	if (!linksGeaendert) {
		addLinks();
		linksGeaendert = true;
	}
	if (aktivSchritt >= 0) {
		try {
			if (++aktivSchritt >= 60) {
				if (aktivSchritt >= 100) {
					aktivSchritt = -1;
					aktivElem.height = aktivHoehe;
					aktivElem.width = aktivBreite;
					aktivElem.vspace = aktivVSpace;
					aktivElem.hspace = aktivHSpace;
					aktivElem = "";
				} else {
					aktivElem.height = 0;
					aktivElem.width = 0;
				}
			} else {
				neu = zufall(16);
				mult = aktivSchritt / 20;
				addY = parseInt(mult * offy[neu]);
				addX = parseInt(mult * offx[neu]);
				aktivElem.height = aktivHoehe + 2 * addY;
				aktivElem.width = aktivBreite + 2 * addX;
				if (typeof(aktivVSpace) != "undefined")
					aktivElem.vspace = aktivVSpace - addY;
				if (typeof(aktivHSpace) != "undefined")
					aktivElem.hspace = aktivHSpace - addX;
			}
		} catch (e) {
		}
	}
	for (nr = 0; nr < sanz; nr++) {
		if (sterne[nr]["pause"] > 0) {
			sterne[nr]["pause"] -= 1;
			continue;
		}
		typ = sterne[nr]["typ"] + 1;
		if (typ > 19) {
			typ = 0;
			sterne[nr]["id"].style.top = yoffset() + 10 + zufall(hoehe() - 20) + "px";
			sterne[nr]["id"].style.left = xoffset() + 10 + zufall(breite() - 20) + "px";
			sterne[nr]["pause"] = zufall(50);
		}
		image = typ;
		if (typ > 10)
			image = 20 - typ;
		sterne[nr]["typ"] = typ;
		sterne[nr]["image"].src = grafiken[eval(image + G_STERN)].src;
	}
	var anz = stoppPiloten ? 0 : panz;
	var yoff = yoffset();
	var xoff = xoffset();
	var ymin = 0 + yoff;
	var xmin = 0 + xoff;
	var ymax = eval(hoehe() - 22 + yoff);
	var xmax = eval(breite() - 22 + xoff);
	var aktiv = 0;
	var i;
	for (nr = 1; nr < anz; nr++) {
		if (!piloten[nr]["crash"])
			if (piloten[nr]["pause"] <= 0)
				if (piloten[nr]["tarnung"] < 140) {
					top = piloten[nr]["top"];
					left = piloten[nr]["left"];
					for (i = nr + 1; i < anz; i++) {
						if (testeCrash(i, top, left)) {
							pilotCrash(i);
							pilotCrash(nr);
							break;
						}
					}
				}
	}
	for (nr = 1; nr < anz; nr++) {
		vor = nr - 1;
		verf = piloten[nr]["verfolger"];
		schritt = piloten[nr]["schritt"];
		crash = piloten[nr]["crash"];
		if (crash && (schritt > 17))
			continue;
		aktiv++;
		richt = 0;
		faktor = 1;
		if (verf) {
			richt = eval(parseInt(piloten[vor]["histRichtung"].charAt(schritt), 16));
			faktor = eval(parseInt(piloten[vor]["histFaktor"].charAt(schritt), 36));
			tarnung = piloten[vor]["tarnung"];
		} else {
			richt = piloten[nr]["richtung"];
			faktor = piloten[nr]["faktor"];
			tarnung = piloten[nr]["tarnung"];
		}
		if (piloten[nr]["pause"] > 0) {
			if (verf)
				if (piloten[vor]["pause"] > 0)
					continue;
			piloten[nr]["pause"] -= 1;
			continue;
		}
		top = piloten[nr]["top"];
		left = piloten[nr]["left"];
		multi = piloten[nr]["multi"];
		imun = piloten[nr]["imun"];
		tarnAdd = 0;
		if (!verf && !crash) {
			var ergeb;
			if ((nr > 0) && (modus == M_FLUCHT))
				ergeb = fluchtRichtung(xmin, xmax, ymin, ymax, top, left, richt, faktor, tarnung);
			else
				ergeb = angriffsRichtung(xmin, xmax, ymin, ymax, top, left, richt, faktor, tarnung);
			richt = ergeb[0];
			faktor = ergeb[1];
			tarnung = ergeb[2];
			tarnAdd = ergeb[3];
		}
		if (!verf && !crash && !multi) {
			if ((nr + 1 == panz) || !piloten[nr + 1]["verfolger"]) {
				if ((paktiv < panz) && (zufall((paktiv * 100 + 500) / (tarnung + 1)) == 0))
					multi = 25;
			}
		}
		if (imun > 0)
			imun--;
		else {
			if (crash) {
				richt = ++richt % 16;
			} else {
				if ((tarnung < 140) && testeCrash(nr, mausY - 10, mausX - 10)) {
					pilotCrash(nr);
					schritt = 0;
					crash = true;
				}
			}
		}
		if (!crash) {
			mult = parseFloat(faktor) / 4 + 2;
			top = top + mult * offy[richt];
			left = left + mult * offx[richt];
			piloten[nr]["top"] = top;
			piloten[nr]["left"] = left;
			if ((tarnung < 140) && testeCrash(nr, mausY - 10, mausX - 10)) {
				pilotCrash(nr);
				schritt = 0;
				crash = true;
			}
		}
		hist = piloten[nr]["histRichtung"];
		piloten[nr]["histRichtung"] = hist.substring(0, schritt) + parseInt(richt).toString(16) + hist.substring(eval(schritt + 1), 48);
		hist = piloten[nr]["histFaktor"];
		piloten[nr]["histFaktor"] = hist.substring(0, schritt) + parseInt(faktor).toString(36) + hist.substring(eval(schritt + 1), 48);
		piloten[nr]["id"].style.top = top + "px";
		piloten[nr]["id"].style.left = left + "px";
		piloten[nr]["faktor"] = faktor;
		piloten[nr]["richtung"] = richt;
		piloten[nr]["tarnung"] = tarnung;
		piloten[nr]["imun"] = imun;
		piloten[nr]["schritt"] = (schritt + 1) % 48;
		if (crash && (schritt & 1))
			image = (schritt > 16) ? G_LEER : G_CRASH;
		else {
			if (multi > 0) {
				if (--multi == 0)
					multiPilot(nr);
				else
					richt = eval((schritt % 8) * 2);
			}
			image = eval(piloten[nr]["typ"] * 16 + richt + G_PILOT);
			if (tarnung > 100) {
				if ((tarnung > 140) ||
					(tarnung > 130) && (schritt % 2 != 0) ||
					(tarnung > 120) && (schritt % 1 == 0) ||
					(tarnung > 110) && (schritt % 2 == 0))
					image = G_LEER;
			}
		}
		piloten[nr]["multi"] = multi;
		piloten[nr]["image"].src = grafiken[image].src;
		if (!infos[I_AKTION]["start"]) {
			infos[I_AKTION]["start"] = true;
			infoAusgabe("stopp");
		}
	}
	paktiv = aktiv;
	if (!stoppPiloten) {
		if (pzeit > 0)
			pzeit--;
		else {
			stopp(false);
			statusZeile();
		}
	}
	wandern();
	infoAusgabe("refresh");
	if (!stoppPiloten && (aktiv == 0))
		flash(true);
	else {
		if (bgFlash > 0)
			regeln[bgRegel].style.backgroundColor = bgFlashFarben[--bgFlash];
		if (zaktiv > 0)
			zoomen();
		window.setTimeout("animation()", 60);
	}
}

function stopp (cookie) {
	stoppPiloten = true;
	if (cookie)
		erzeugeCookie("Piloten", "Stopp");
	infoAusgabe("start");
	for (var i = 0; i < panz; i++) {
		piloten[i]["image"].src = grafiken[G_LEER].src;
	}
	cursorId.style.cursor = "auto";
}

function pilotenEvent () {
	if (stoppPiloten) {
		stoppPiloten = false;
		loescheCookie("Piloten", "Stopp");
		infoAusgabe("stopp");
		pzeit = S_MAX;
		cursorId.style.cursor = "crosshair";
	} else
		stopp(true);
	statusZeile();
}

function statusZeile () {
	if (stoppPiloten)
		window.status = "Starten Sie die Piloten durch Anklicken des grünen Symbols links oben.";
	else
		window.status = "Versuchen Sie die Piloten mit der Maus zu erreichen. Stopp durch Anklicken des roten Symbols links oben.";
}

function infoBalken (index, stellen, zahl, min) {
	infos[index]["image"].width = parseInt(eval((pzeit * stellen) / S_MAX));
	infos[index]["image"].height = infoHoehe[index];
}

function infoZahl (index, stellen, zahl, min) {
	var format;
	var blinken = false;
	if (parseInt(zahl) <= 0)
		format = "0";
	else {
		format = String(zahl);
		blinken = (zahl <= min) && (pzeit % 4 == 0);
	}
	while (format.length < stellen)
		format = " " + format;
	var ziffer;
	var zg;
	for (var i = 0; i < stellen; i++) {
		ziffer = format.charCodeAt(i);
		if (!blinken && (ziffer >= 48) && (ziffer <= 57))
			zg = G_STATNR + (ziffer - 48);
		else
			zg = G_LEER;
		infos[index + i]["image"].src = grafiken[zg].src;
	}
}
	
function infoAusgabe (aktion) {
	if (panz == 0)
		return;
	var yoff = yoffset();
	var xoff = xoffset();
	var ymax = eval(hoehe() - 22 + yoff);
	var xmax = eval(breite() - 22 + xoff);
	switch (aktion) {
		case "stopp":
			infos[I_AKTION]["image"].src = grafiken[G_STOPP].src;
			infos[I_AKTION]["image"].title = "Stoppe Piloten";
			infos[I_AKTION]["image"].alt = "Stoppe Piloten";
			infos[I_RAHMEN]["image"].src = grafiken[G_STATRHM].src;
			infos[I_RAHMEN]["image"].title = "Anzeige: Piloten + Zeit";
			infos[I_RAHMEN]["image"].alt = "Anzeige: Piloten + Zeit";
			infos[I_BALKEN]["image"].src = grafiken[G_STATBLK].src;
			infos[I_BALKEN]["image"].title = "Anzeige: Piloten + Zeit";
			infos[I_BALKEN]["image"].alt = "Anzeige: Piloten + Zeit";
			break;
		case "start":
			infos[I_AKTION]["image"].src = grafiken[G_START].src;
			infos[I_AKTION]["image"].title = "Starte Piloten";
			infos[I_AKTION]["image"].alt = "Starte Piloten";
			infos[I_RAHMEN]["image"].src = grafiken[G_LEER].src;
			infos[I_RAHMEN]["image"].title = "";
			infos[I_RAHMEN]["image"].alt = "";
			infos[I_BALKEN]["image"].src = grafiken[G_LEER].src;
			infos[I_BALKEN]["image"].title = "";
			infos[I_BALKEN]["image"].alt = "";
			infoZahl(I_ANZ, 2, "", 0);
			break;
		default:
			if (infos[I_AKTION]["start"]) {
				for (var i = 0; i < infos.length; i++) {
					infos[i]["id"].style.top = yoff + infoYpos[i] + "px";
					infos[i]["id"].style.left = xoff + infoXpos[i] + "px";
				}
				if (!stoppPiloten) {
					infoZahl(I_ANZ, 2, paktiv, 2);
					infoBalken(I_BALKEN, 36, pzeit, 0);
				}
			}
	}
	infos[I_SPR]["id"].style.top = yoff + infoYpos[I_SPR] + "px";
	infos[I_SPR]["id"].style.left = xmax + infoXpos[I_SPR] + "px";
	infos[I_VERS]["id"].style.top = ymax + infoYpos[I_VERS] + "px";
	infos[I_VERS]["id"].style.left = xmax + infoXpos[I_VERS] + "px";
}

function restartGrafik () {
	var i;
	for (i = 0; i < I_MAX; i++)
		document.getElementById("infoBild" + i).removeAttribute("height", "false");
	for (i = 0; i < O_MAX; i++)
		document.getElementById("pilotBild" + i).removeAttribute("height", "false");
	new Array("knopf_space-pilot", "knopf_galaxy", "knopf_zaga", "knopf_space-pilot2", "knopf_zyron", "knopf_fire-galaxy");
	if (stoppZoom) {
		for (i = 0; i < Z_MAX; i++)
			zoomDaten[i] = "";
		stoppZoom = false;
	}
}

function initGrafik (anz, server) {
	cursorId = document.getElementById("cursor");
	objekt = "";
	if (document.images) {
		if (document.getElementById("piloten"))
			objekt = "piloten";
		else if (document.getElementById("sterne"))
			objekt = "sterne";
	}
	if (leseCookie("Piloten") == "Stopp")
		stoppPiloten = true;
	if (anz <= 0)
		return 0;
	var i;
	var j;
	if (objekt == "piloten") {
		objektId = document.getElementById(objekt);
		kodes = new Array(G_LEER, G_STOPP, G_START, G_CRASH, G_STATRHM, G_STATBLK);
		dateien = new Array("leer.gif", "stopp.gif", "start.gif", "crash.gif", "statrhm.png", "statblk.png");
		for (i = 0; i < kodes.length; i++) {
			grafiken[kodes[i]] = new Image();
			grafiken[kodes[i]].src = server + "/grafiken/piloten/" + dateien[i];
		}
		for (i = 0; i < 10; i++) {
			grafiken[G_STATNR + i] = new Image();
			grafiken[G_STATNR + i].src = server + "/grafiken/piloten/stat" + i + ".png";
		}
		for (i = 0; i < P_MAX; i++)
			for (j = 0; j < 16; j++) {
				ximg = eval(i * 16 + j + G_PILOT);
				grafiken[ximg] = new Image();
				grafiken[ximg].src = server + "/grafiken/piloten/p" + i + "p" + j.toString(16) + ".gif";
			}
		initGrafikRest(server);
		if (!stoppPiloten) {
			cursorId.style.cursor = "crosshair";
		}
		for (i = 0; i < O_MAX; i++) {
			neu = document.createElement("div");
			neu.id = "pilot" + i;
			objektId.appendChild(neu);
			image = new Image();
			image.id = "pilotBild" + i;
			image.src = grafiken[G_LEER].src;
			image.border = 0;
			neu.appendChild(image);
			piloten[i] = new Object();
			piloten[i]["id"] = neu;
			piloten[i]["image"] = image;
		}
		return anz;
	}
	if (objekt == "sterne") {
		objektId = document.getElementById(objekt);
		for (i = 0; i < 11; i++) {
			ximg = eval(i + G_STERN);
			grafiken[ximg] = new Image();
			grafiken[ximg].src = server + "/grafiken/sterne/stern" + i.toString(16) + ".gif";
		}
		initGrafikRest(server);
		for (i = 0; i < O_MAX; i++) {
			neu = document.createElement("div");
			neu.id = "stern" + i;
			objektId.appendChild(neu);
			image = new Image();
			image.id = "sternBild" + i;
			image.src = grafiken[G_STERN].src;
			image.border = 0;
			neu.appendChild(image);
			sterne[i] = new Object();
			sterne[i]["id"] = neu;
			sterne[i]["image"] = image;
		}
		return anz;
	}
	return 0;
}

function initGrafikRest (server) {
	var i;
	for (i = 0; i < I_MAX; i++) {
		neu = document.createElement("div");
		neu.id = "info" + i;
		objektId.appendChild(neu);
		infos[i] = new Object();
		infos[i]["id"] = neu;
		var grafik = server + "/grafiken/piloten/leer.gif";
		var titel = "";
		var href = "";
		switch (i) {
			case I_AKTION:
				href = "javascript:pilotenEvent()";
				break;
			case I_SPR:
				href = document.URL.replace("/" + ladeSprache("aktuell") + "/", "/" + ladeSprache("wechsel") + "/");
				titel = ladeSprache("aktion");
				grafik = server + "/grafiken/home/" + ladeSprache("wechsel") + ".png";
				break;
			case I_VERS:
				var versPng;
				if (document.URL.match("\.zyron\.de")) {
					versPng = "version2";
				} else if (document.URL.match("\.spacepilot\.com")) {
					versPng = "version2";
				} else {
					versPng = "version";
				}
				href = "index.html";
				titel = "Versionsnummer";
				grafik = server + "/grafiken/home/" + versPng + ".png";
				break;
		}
		if (href != "") {
			xlink = document.createElement('a');
			xlink.href= href;
			neu.appendChild(xlink);
			neu = xlink;
		}
		image = new Image(infoBreite[i],infoHoehe[i]);
		image.id = "infoBild" + i;
		image.src = grafik;
		image.width = infoBreite[i];
		image.height = infoHoehe[i];
		image.border = 0;
		if (titel != "") {
			image.title = titel;
			image.alt = titel;
		}
		neu.appendChild(image);
		infos[i]["image"] = image;
	}
}

function initInfos () {
	var yoff = yoffset();
	var xoff = xoffset();
	var ymax = hoehe() - 22 + yoff;
	var xmax = breite() - 22 + xoff;
	ntop = 0;
	nleft = 0;
	var i;
	for (i = 0; i < I_MAX; i++) {
		switch (i) {
			case I_SPR:
				ntop = yoff + infoYpos[i];
				nleft = xmax + infoXpos[i];
				break;
			case I_VERS:
				ntop = ymax + infoYpos[i];
				nleft = xmax + infoXpos[i];
				break;
			default:
				ntop = yoff + infoYpos[i];
				nleft = xoff + infoXpos[i];
				break;
		}
		infos[i]["id"].style.position = "absolute";
		infos[i]["id"].style.top = ntop + "px";
		infos[i]["id"].style.left = nleft + "px";
	}
}

function initPiloten (restart) {
	var xpos = new Array(0, breite() - 40, breite() - 40, 0);
	var ypos = new Array(0, 0, hoehe() - 40, hoehe() - 40);
	var richt = new Array(6, 10, 14, 2);
	var pausen = new Array(0, 0, 0, 0);
	var yoff = yoffset();
	var xoff = xoffset();
//	var ymax = eval(hoehe() - 22 + yoff);
//	var xmax = eval(breite() - 22 + xoff);
	var typ = zufall(4);
	var start = zufall(4);
	var tarnung = 0;
	initInfos();
	if (!restart) {
		infos[I_AKTION]["start"] = stoppPiloten;
		if (stoppPiloten)
			infoAusgabe("start");
	}
	for (var i = 0; i < O_MAX; i++) {
		piloten[i]["id"].style.position = "absolute";
		if (i == 0) {
			piloten[i]["id"].style.top = Math.abs(eval(hoehe() / 2)) + "px";
			piloten[i]["id"].style.left = Math.abs(eval(breite() / 2)) + "px";
			piloten[i]["start"] = true;
			piloten[i]["id"].style.height = "22px";
			piloten[i]["id"].style.width = "22px";
			piloten[i]["richtung"] = 0;
			piloten[i]["typ"] = 0;
			piloten[i]["histRichtung"] = "000000000000000000000000000000000000000000000000";
			piloten[i]["histFaktor"] = "000000000000000000000000000000000000000000000000";
			piloten[i]["schritt"] = 0;
			piloten[i]["crash"] = false;
			piloten[i]["tarnung"] = 0;
			piloten[i]["imun"] = 0;
			piloten[i]["multi"] = 0;
			piloten[i]["faktor"] = 4;
			piloten[i]["pause"] = 0;
		} else {
			if (i < panz) {
				if ((i > 1) && (zufall(6) > 1)) {
					piloten[i]["verfolger"] = true;
					piloten[i]["pause"] = 8;
					pausen[start] += 8;
				} else {
					start = (start + 1) % 4;
					typ = (typ + 1) % 4 + 1;
					piloten[i]["verfolger"] = false;
					var p = pausen[start];
					if (p == 0)
						p = zufall(50);
					else
						p += 12;
					pausen[start] = p;
					piloten[i]["pause"] = p;
					piloten[i]["faktor"] = 4 + zufall(12);
					if (zufall(3) == 2)
						tarnung = zufall(50) + 170;
					else
						tarnung = 120;
				}
				piloten[i]["id"].style.top = yoff + ypos[start] + "px";
				piloten[i]["top"] = yoff + ypos[start];
				piloten[i]["id"].style.left = xoff + xpos[start] + "px";
				piloten[i]["left"] = xoff + xpos[start];
				piloten[i]["richtung"] = richt[start];
				piloten[i]["typ"] = typ;
				piloten[i]["histRichtung"] = "000000000000000000000000000000000000000000000000";
				piloten[i]["histFaktor"] = "000000000000000000000000000000000000000000000000";
				piloten[i]["schritt"] = 0;
				piloten[i]["crash"] = false;
				piloten[i]["tarnung"] = tarnung;
				piloten[i]["imun"] = 0;
				piloten[i]["id"].style.height = "22px";
				piloten[i]["id"].style.width = "22px";
				piloten[i]["multi"] = 0;
			} else {
				piloten[i]["top"] = 0;
				piloten[i]["left"] = 0;
				piloten[i]["id"].style.top = "0px";
				piloten[i]["id"].style.left = "0px";
				piloten[i]["start"] = false;
				piloten[i]["id"].style.height = "1px";
				piloten[i]["id"].style.width = "1px";
			}
		}
	}
}

function initSterne () {
	var yoff = yoffset();
	var xoff = xoffset();
	for (var i = 0; i < sanz; i++) {
		sterne[i]["id"].style.position = "absolute";
		sterne[i]["pause"] = zufall(100);
		sterne[i]["typ"] = 0;
		sterne[i]["id"].style.top = 9;
		sterne[i]["id"].style.top = yoff + 10 + zufall(hoehe() - 20) + "px";
		sterne[i]["id"].style.left = xoff + 10 + zufall(breite() - 20) + "px";
	}
}

function wandern () {
	if (stoppWandern)
		return;
	var w;
	if (woff < W_MAX / 2)
		w = wanderDaten.length - wakt - 1;
	else
		w = wakt;
	var element = document.getElementById(wanderDaten[w]);
	if (element) {
		akt = parseInt(document.getElementById(wanderDaten[w]).style.left);
		if (woff < W_MAX / 2) 
			akt = akt + 1;
		else
			akt = akt - 1;
		document.getElementById(wanderDaten[w]).style.left = akt + "px";
		wakt = wakt + 1;
		if (wakt >= wanderDaten.length) {
			wakt = 0;
			woff = woff + 1;
			if (woff >= W_MAX) 
				woff = 0;
		}
	}
}

function zoomen () {
	if (stoppZoom)
		return;
	var aktiv = 0;
	var element;
	for (var i = 0; i < Z_MAX; i++) {
		if (zoomDaten[i] != "") {
			var weiter = false;
			var daten = zoomDaten[i].split(",");
			var ziel = parseInt(daten[D_ZIEL]);
			var add = parseInt(daten[D_ADD]);
			if (daten.length == 4) {
				var pause = parseInt(daten[D_PAUSE]);
				if (pause > 0) {
					zoomDaten[i] = daten[D_ID] + "," + ziel + "," + add + "," + eval(pause - 1);
					weiter = true;
					aktiv++;
				} else {
					element = document.getElementById(daten[D_ID]);
					if (element) {
						akt = parseInt(element.height);
						weiter = (Math.abs(akt - ziel) > add);
						if (weiter) {
							if (akt > ziel)
								akt = akt - add;
							else
								akt = akt + add;
							aktiv++;
						} else {
							if (parseInt(element.alt_height) > 0) {
								zoomDaten[i] = daten[D_ID] + "," + element.alt_height + "," + add + "," + eval(pause * -1);
								weiter = true;
								aktiv++;
								element.alt_height = 0;
							}
							akt = ziel;
						}
						document.getElementById(daten[D_ID]).style.height = akt + "px";
					}
				}
			}
			if (!weiter)
				zoomDaten[i] = "";
		}
	}
	zaktiv = aktiv;
}

function zoom (id, ziel, add, pause, start, grafik) {
	if (stoppZoom)
		return;
	element = document.getElementById(id);
	if (!element)
		return;
	akt = parseInt(element.height);
	if (typeof(start) != "undefined") {
		if (start > 0)
			akt = start;
	}
	if (typeof(grafik) != "undefined") {
		element.src = grafik;
	}
	if ((add == 0) || (akt == ziel))
		return;
	if (zaktiv >= Z_MAX)
		return;
	var neu = id + "," + ziel + "," + add + "," + pause;
	if (pause < 0) {
		if (!element.alt_height || (parseInt(element.alt_height) == 0)) {
			element.alt_height = akt;
		}
	}
	var i;
	for (i = 0; i < Z_MAX; i++) {
		if (zoomDaten[i] != "") {
			var daten = zoomDaten[i].split(",");
			if (daten.length == 4)
				if (daten[D_ID] == id) {
					zoomDaten[i] = neu;
					element.style.height = akt + "px";
					return;
				}
		}
	}
	for (i = 0; i < Z_MAX; i++) {
		if (zoomDaten[i] == "") {
			element.style.height = akt + "px";
			zoomDaten[i] = neu;
			zaktiv++;
			break;
		}
	}
}

function init (server) {
	if (typeof(server) == "undefined")
		server = "";
	if (!document.all)
		document.captureEvents(Event.MOUSEMOVE);
	document.onmousemove = mausXY;
	panz = initGrafik(eval(zufall(11) + 10), server);
	sanz = 0;
	stoppWandern = false;
	stoppZoom = false;
	initPiloten(false);
	initInfos();
	statusZeile();
	initBG();
	animation();
}

function init2 (schirm, anz, aktion, server) {
	zoom(schirm + "0", 200, 10, 0);
	var i;
	for (i = 1; i < anz; i++) {
		zoom(schirm + i, 50, 5, 20 + i);
	}
	if (typeof(aktion) != "undefined") {
		if (aktion == "weiter")
			return;
		if (aktion == "piloten") {
			init(server);
			return 
		}
	}
	stoppPiloten = true;
	sanz = initGrafik(eval(O_MAX), server);
	initSterne();
	panz = 0;
	initInfos();
	initBG();
	animation();
}

function initBG () {
	if (typeof(document.styleSheets) != "undefined") {
		if (document.styleSheets[0].cssRules) {
			regeln = document.styleSheets[0].cssRules;
		} else {
			if (document.styleSheets[0].rules)
				regeln = document.styleSheets[0].rules;
		}
		var i;
		for (i = 0; i < regeln.length; i++) {
			if (regeln[i].style.cssText) {
				if (regeln[i].style.cssText.toLowerCase().substring(0, 16) == "background-color")
					break;
			}
			if (regeln[i].selectorText) {
				if (regeln[i].selectorText == ".bg")
					break;
			}
		}
		if (i >= regeln.length)
			i = 3;
		bgRegel = i;
		bgFlashFarben[0] = regeln[bgRegel].style.backgroundColor;
	}
}

function autoLink (sekunden, adr) {
	var url = window.location.pathname;
	if (url == "/deutsch/index.html") {
		adr = "/index.html";
		sekunden = 0;
	}
	if (url == "/spiele/index.html") {
		url = "/spiele.html";
	}
	if (url == "/tools/index.html") {
		url = "/tools.html";
	}
	if (url == "/spiele/c16/index.html") {
		url = "/spiele/c16.html";
	}
	if (url == "/spiele/c64/index.html") {
		url = "/spiele/c64.html";
	}
	if (url == "/spiele/pet/index.html") {
		url = "/spiele/pet.html";
	}
	if (url == "/spiele/pet/basic.html") {
		url = "/spiele/pet-basic.html";
	}
	if (url == "/spiele/pet/assembler.html") {
		url = "/spiele/pet-assembler.html";
	}
	if ((url == "/henrik.html") ||
		(url == "/wening.html") ||
		(url == "/computer.html") ||
		(url == "/spiele.html") ||
		(url == "/tools.html") ||
		url.match("^/spiele/.*")) {
		adr = "/deutsch" + url;
		sekunden = 0;
	}
	document.getElementById("sek").innerHTML = sekunden;
	if (sekunden-- > 0)
		window.setTimeout('autoLink(' + sekunden + ',"' + adr + '")', 1000);
	else
		window.location.href = adr;
}

function aktiviere (element, img, start) {
	element.src = img;
	if (start && ((aktivElem.id != element.id) && (aktivSchritt == -1))) {
		aktivElem = element;
		aktivSchritt = 0;
		aktivHoehe = element.height;
		aktivBreite = element.width;
		aktivHSpace = element.hspace;
		aktivVSpace = element.vspace;
	} else {
		if (aktivSchritt >= 60)
			return;
		if ((aktivElem.id == element.id) && (aktivSchritt != -1)) {
			aktivSchritt = -1;
			aktivElem.height = aktivHoehe;
			aktivElem.width = aktivBreite;
			aktivElem.hspace = aktivHSpace;
			aktivElem.vspace = aktivVSpace;
			aktivElem = "";
		}
	}
}

function ladeSprache (typ) {
	sprachen = new Array("deutsch", "english");
	wechseln = new Array("english version", "deutsche Version");
	var sprache = 0;
	if (document.URL.indexOf("english") != -1)
		sprache = 1;
	var ergebnis;
	switch (typ) {
		case "aktuell":
			ergebnis = sprachen[sprache];
			break;
		case "wechsel":
			ergebnis = sprachen[eval(sprache + 1 % 2)];
			break;
		case "aktion":
			ergebnis = wechseln[sprache];
			break;
		default:
			ergebnis = "???";
	}
	return ergebnis;
}
