/**
===========================
 globale Seiten-Navigation
===========================
*
* Dieses Script enthält die Struktur der
* globalen Seiten-Navigation in einem Objekt
* (in JSON-Schreibweise), damit die globale
* Navigation durch Aufklappmenüs erweitert
* werden kann.
*
* WICHTIG: Die Inhalte des Objektes "navi" werden dynamisch
*          vom einem serverseitigen Script aktualisiert,
*          sodass manuelle Änderungen verloren gehen werden!
*
* erstellt von Felix Riesterer (Felix.Riesterer@gmx.net)
**/

var HoverNavigation = {

	n : null, // contains reference to <div id="navigation">
	m : null, // contains reference to our new <div id="hover-navigation">

	baseURL : false,
	oldEl : null, // contains a reference to last hovered element
	hide : false, // flag for time out before hiding menue
	timer : 0,
	interval : false, // will contain a reference to an interval object

	oldWinOnLoad : false,
	oldDocOnMouseMove : false,

	init : function () {
		var t = this;
		t.oldWinOnLoad = window.onload;
		window.onload = function () {
			if (typeof t.oldWinOnLoad == "function") {
				t.oldWinOnLoad();
			}
			t.setup();
		};
	},

	setup : function () {
		var t = this, scripts, i;

		// create "contains" method for all HTML element objects if not supported by browser
		if (window.Node && Node.prototype && !Node.prototype.contains) {
			Node.prototype.contains = function (arg) {
				return !!(this.compareDocumentPosition(arg) & 16);
			};
		}

		// find "navigation" div
		t.n = document.getElementById("navigation");

		if (t.n) {
			// set some URLs and load additional CSS
			scripts = document.getElementsByTagName("script");			
			for (i = 0; i < scripts.length; i++) {
				if (scripts[i].src && scripts[i].src.match(/hover-navigation\.js$/)) {
					// set baseURL
					t.baseURL = scripts[i].src.replace(/^((http:\/\/[^\/]+)?\/[^\/]+\/).*/i, "$1");

					// load CSS
					document.getElementsByTagName("head")[0].appendChild(
						t.createElement({
							link : {
								type : "text/css",
								rel : "stylesheet",
								href : scripts[i].src.replace(/js\/hover-navigation\.js/, "css/hover-navigation.css")
							}
						})
					);
				}
			}

			// create <div> element
			t.m = t.createElement({div:{id:"hover-navigation"}});
			t.n.insertBefore(t.m, t.n.firstChild);

			// set event handler
			t.oldDocOnMouseMove = document.onmousemove;
			document.onmousemove = function (e) {
				if (typeof t.oldDocOnMouseMove == "function") {
					t.oldDocOnMouseMove(e);
				}
				t.mouseMove(e);
			};
		}

		t.interval = window.setInterval(function () {
			if (t.hide) {
				t.timer--;
				if (t.timer < 1) {
					t.m.style.display = "";
				}
			}
		}, 10);
	},

	createElement : function (o) {
		/* o must be an object of this structure:
			{
				<tagName> : {
					attributeName : value,
					attributeName2: value2
				}
			}
		*/
		var element, e, a;

		for (e in o) {
			if (e) {
				element = document.createElement(e);
				for (a in o[e]) {
					element[a] = o[e][a];
				}
			}
		}

		return element;
	},

	mouseMove : function (e) {
		var t = HoverNavigation,
			el, test, inMenue, sub, u, menues;

		if (!e) {
			e = window.event; // IE
		}

		el = e.target || e.srcElement;

		// find out if we are inside our navigation
		test = t.n.contains(el);
		inMenue = t.m.contains(el);

		if (test) {
			// show menue
			t.hide = false; // disable hide countdown
			t.timer = 50; // re-set timer

			if (!inMenue
				&& el.tagName
				&& el.tagName.toLowerCase() == "a"
				&& el.href
				&& el.href != ""
			) {
				if (el != t.lastEl) {
					// build new menue
					t.menue(el);
				}

				t.lastEl = el; // remember this element as "hovered last"

				// reposition hover menue
				if (!inMenue) {
					t.m.style.left = (el.offsetLeft + el.offsetWidth - 10) + "px";
					t.m.style.top = (
						el.offsetTop - (
							(t.m.firstChild && t.m.firstChild.childNodes.length > 1) ?
								Math.floor(t.m.offsetHeight / 3)
								: 0
						)
					) + "px";
				}

				// show menue (if not empty)
				t.m.style.display = t.m.firstChild ? "block" : "";

			} else {
				// dynamically display sub-menues
				menues = [];
				sub = el;
				while (sub != t.n) {
					if (sub.tagName && sub.tagName.toLowerCase() == "ul") {
						menues[menues.length] = sub;
					}

					if (sub.tagName && sub.tagName.toLowerCase() == "li") {
						// do we have a hidden sub-menue?
						if (sub.childNodes.length > 1) {
							u = sub.childNodes[1];
							menues[menues.length] = u;
							u.style.display = "block";
							u.style.left = (u.parentNode.parentNode.offsetWidth - 10) + "px";
							u.style.top = (
								u.parentNode.offsetTop - (
									u.childNodes.length > 1 ?
										Math.floor(u.offsetHeight / 3)
										: 0
								)
							) + "px";
						}
					}
					sub = sub.parentNode;
				}

				// hide all sub-menues
				sub = t.m.getElementsByTagName("ul");
				for (u = 0; u < sub.length; u++) {
					sub[u].style.display = "";
				}

				// re-display only selected menues
				for (u = 0; u < menues.length; u++) {
					menues[u].style.display = "block";
				}
			}

		} else {
			// let menue hide
			t.hide = true;
		}
	},

	menue : function (el) {
		var t = this,
			path = el.href.replace(/^(http:\/\/[^\/]+)?\/[^\/]+\//i, "").replace(/\/[^\/]+$/, ""),
			chunk, list;

		// clear old menue contents
		while (t.m.firstChild) {
			t.m.removeChild(t.m.firstChild);
		}

		chunk = '["' + path.split("/").join('"]["') + '"]';
		eval ("list = t.navi" + chunk);

		if (list = t.createList(list, path)) {
			t.m.appendChild(list);
		}
	},

	createList : function (list, path) {
		var t = this,
			o = t.createElement({ul:{}}),
			test, length, li, x, a, i, ul;

		// create <li> elements
		for (i in list) {
			if (!i.match(/^index\.htm/i)) {
				test = 0;
				li = t.createElement({li:{}});
				for (x in list[i]) {
					test++;
					if (x.match(/^index\.htm/i)) {
						li.appendChild(
							t.createElement({
								a : {
									href : t.baseURL+path+"/"+i+"/"+x
								}
							})
						);
						li.firstChild.appendChild(
							document.createTextNode(list[i][x])
						);
					}
				}

				if (test > 1) {
					// sub-menue!
					li.appendChild(t.createList(list[i], path + "/" + i));
				}

				// add <li> to <ul>
				o.appendChild(li);
			}
		}

		return o.firstChild ? o : false;
	},

	// Folgendes Objekt wird dynamisch aktualisiert!
	navi : {"wer":{"schulleitung":{"index.html":"Schulleitung"},"index.html":"Personen","peutinger":{"index.html":"Ignatius Desiderius von Peutingen"},"schueler":{"index.html":"Die Seite der Sch\u00fcler","smv":{"index.html":"SMV"}},"lehrer":{"index.html":"Die Seite der Lehrer"},"eltern":{"index.html":"Die Seite der Eltern"},"hauspersonal":{"index.html":"Das Hauspersonal"},"ehemalige":{"index.html":"unsere Ehemaligen"},"partner":{"index.html":"unsere Partner"}},"was":{"unterricht":{"faecher":{"biologie":{"index.html":"Biologie"},"chemie":{"index.html":"Chemie"},"deutsch":{"index.html":"Deutsch"},"englisch":{"exercises":{"index.html":"Exercises"},"hypertexts":{"andra":{"index.html":"..PG and below.."},"crown_jewels":{"index.html":"Save The Crown Jewels"},"index.html":"Hypertext Adventures"},"index.html":"Englisch","poems_short_stories_7":{"index.html":"STOP RACISM!  - Poems and short stories in Klasse 7"},"brave_new_world":{"index.html":"Essays Brave New World"},"abi-hinweise":{"index.html":"Hinweise zur Vorbereitung f\u00fcr das Englisch-Abitur"}},"erdkunde":{"index.html":"Erdkunde"},"ethik":{"index.html":"Ethik"},"evangelische_religion":{"index.html":"evangelische Religion","sinn_im_leben":{"index.html":"Arbeitsergebnisse"}},"franzoesisch":{"index.html":"Franz\u00f6sisch"},"gemeinschaftskunde":{"index.html":"Gemeinschaftskunde"},"geschichte":{"festung":{"index.html":"Festung des K\u00f6nigs"},"index.html":"Geschichte"},"griechisch":{"index.html":"Griechisch"},"index.html":"Aus den F\u00e4chern","italienisch":{"index.html":"Italienisch","zertifikat2007":{"index.html":"Italienisch Zertifikat 2007"}},"katholische_religion":{"index.html":"Katholische Religion"},"kunst":{"index.html":"Bildende Kunst","kunst_bilingual":{"index.html":"Arbeiten aus dem Fach Bildende Kunst bilingual"},"perspektive-auto":{"index.html":"Die Welt vom Auto aus gesehen"},"animationsfilme":{"index.html":"Animationsfilme in Klasse 7"}},"latein":{"carmina_burana":{"index.html":"Die Carmina Burana"},"cicero-reden_klasse9":{"index.html":"Cicero-Reden"},"cicero_leben":{"index.html":"Ciceros Leben"},"formen_uebungen":{"index.html":"Formen\u00fcbungen Latein"},"index.html":"Latein"},"mathematik":{"index.html":"Mathematik"},"musik":{"fruehtau":{"index.html":"Im Fr\u00fchtau zu Berge"},"gehoerbildung":{"index.html":"Geh\u00f6rbildung"},"index.html":"Musik","jazz":{"index.html":"Jazz"},"neigungsfach2005":{"index.html":"Neigungsfach 2005-2007"},"neigungsfach2007":{"index.html":"Neigungsfach 2007-2009"},"pg-song2007":{"index.html":"PG-Song 2007"},"stupid_superstition":{"index.html":"Stupid Superstition"},"summer_nights":{"index.html":"Summer Nights"},"sweetheart":{"index.html":"Good Night Sweetheart"}},"naturphaenomene":{"index.html":"Naturph\u00e4nomene"},"nwt":{"index.html":"Naturwissenschaft und Technik"},"physik":{"index.html":"Physik"},"psychologie":{"index.html":"Psychologie"},"spanisch":{"index.html":"Spanisch","programa_de_radio":{"index.html":"programa de radio"},"selbstlernen":{"frases_en_clase":{"index.html":"Spanische S\u00e4tze f\u00fcr den Unterricht"},"index.html":"Spanisch zum Selbstlernen","mis_vacaciones":{"index.html":"Vacaciones con mis amigos"}}},"sport":{"index.html":"Sport"}},"index.html":"Unterricht"},"ags":{"balloncam":{"index.html":"Balloncam"},"bigband":{"index.html":"Bigband","rumburk2007":{"index.html":"Bigbandfahrt nach Rumburk 2007"}},"index.html":"Arbeitsgemeinschaften","internet-ag":{"index.html":"Internet-AG"},"juniororchester":{"index.html":"Junior-Orchester"},"mathe_problem":{"2004-2005":{"index.html":"Problem des Monats - Archiv 2004\/2005"},"2005-2006":{"index.html":"Problem des Monats - Archiv 2005\/2006"},"2006-2007":{"index.html":"Problem des Monats - Archiv 2006\/2007"},"2007-2008":{"index.html":"Problem des Monats - Archiv 2007\/2008"},"2008-2009":{"index.html":"Problem des Monats - Archiv 2008\/2009"},"index.html":"Problem des Monats"},"schuelerzeitung":{"index.html":"LUPE - die Sch\u00fclerzeitung des PG"},"streichorchester":{"index.html":"Das Streichorchester"},"theater-ag":{"index.html":"Theater-AG","mittelstufe":{"index.html":"Mittelstufen-Theater"},"oberstufe":{"index.html":"Oberstufen-Theater","raeuber_2008":{"index.html":"Die R\u00e4uber"}},"unterstufe":{"index.html":"Unterstufen-Theater"}},"unterstufenchor":{"index.html":"Unterstufenchor"},"volleyball":{"index.html":"Volleyball-AG"}},"index.html":"Aktivit\u00e4ten","veranstaltungen":{"abigag2009":{"index.html":"Abi-Gag 2009"},"arion":{"index.htm":"ARION-Tagung 2003"},"ehemaligentreff":{"index.html":"Ehemaligentreff"},"english_theatre2004":{"index.html":"White Horse Theatre 2004"},"fair_kaempfen":{"index.html":"Fair K\u00e4mpfen"},"festveranstaltungen_350_jahre":{"index.html":"Festveranstaltungen 350 Jahre PG","mathematik_zum_anfassen":{"index.html":"Mathematik zum Anfassen"}},"gesundheitstag":{"index.html":"Gesundheitstag"},"girls_day":{"girls_day_2007":{"index.html":"Girls' Day 2007"},"index.html":"Girls' Day"},"index.html":"Veranstaltungen","lehrgang_geo-bio":{"index.html":"f\u00e4cher\u00fcbergreifender Lehrgang in Klasse 5d"},"paedagogischer_tag2006":{"index.html":"Lehrergesundheit am Arbeitsplatz: P\u00e4dagogischer Tag 2006"},"projekttage2005":{"index.html":"Projekttage 2005"},"schilf_cms":{"index.html":"SCHILF - eine Seite auf dieser Website erstellen"},"uno_tag2006":{"index.html":"UNO-Tag 2006"},"weisse_rose":{"index.html":"\"Die wei\u00dfe Rose\" - Vortrag am PG"}},"exkursionen":{"experimenta2010":{"index.html":"Experimenta in Heilbronn"},"feuerwehr2009":{"index.html":"Besuch bei der Feuerwehr Ellwangen"},"griechenland2003":{"index.html":"Griechenlandfahrt 2003"},"griechenland2011":{"index.html":"Griechenlandfahrt 2011"},"index.html":"Exkursionen","mint300":{"index.html":"Mint 300 in Berlin"},"rumaenien2007":{"index.html":"Studienfahrt Zarnesti 2007"},"technorama2009":{"index.html":"Technorama 2009"},"trier2004":{"index.html":"Trier 2004"}},"projekte":{"batterie_kunst_museum":{"index.html":"Batterie | Kunst | Museum"},"comenius":{"comenius2003":{"index.html":"Comenius 2003"},"comenius2005":{"index.html":"Comenius 2005","partnerschulen":{"index.html":"Comenius2005\/2006: Unsere Partnerschulen"}},"index.html":"Comenius-Projekt","comenius2010":{"index.html":"Comenius-Projekt 2010-2012"}},"compassion":{"compassion2004":{"index.htm":"Compassion 2004"},"compassion2006":{"index.html":"Compassion 2006"},"index.html":"Compassion-Projekt"},"ellmun":{"ellmun2005":{"index.htm":"Ellmun 2005"},"index.htm":"EllMUN"},"index.html":"Projekte","jagsttal_schule":{"index.html":"Integrative Kooperation mit der Jagsttal-Schule"},"polis":{"index.htm":"POL&IS-Projekt","polis2002":{"index.htm":"POL&IS 2002"},"polis2005":{"index.html":"POL&IS 2005"}},"schullandheim":{"index.html":"Schullandheim am Peutinger Gymnasium"},"zeitungstreff":{"index.html":"Zeitungstreff-Projekt der Ipf- und Jagst-Zeitung"}},"wettbewerbe":{"europaeischer_wettbewerb":{"index.html":"Europ\u00e4ischer Wettbewerb"},"index.html":"Wettbewerbe","kaenguru-wettbewerb":{"index.html":"K\u00e4nguru-Wettbewerb"},"name_cafeteria":{"index.html":"Wettbewerb f\u00fcr den besten Namen f\u00fcr unsere Cafeteria"},"website_design":{"index.html":"Design-Wettbewerb PG-Website"}},"austausch":{"abbiategrasso":{"abbiategrasso2006":{"index.html":"Italienaustausch 2006"},"abbiategrasso2007":{"index.html":"Abbiategrasso 2007"},"abbiategrasso2009":{"index.html":"Austausch mit Abbiategrasso 2009"},"index.html":"Abbiategrasso","gemellaggio2011":{"index.html":"Gemellaggio Abbiategrasso - Ellwangen"}},"china":{"china2005":{"index.html":"China-Austausch 2005"},"china2007":{"index.html":"China-Austausch 2007"},"index.html":"Jiaojiang"},"index.html":"Austausch","langres":{"index.html":"Langres","langres2005":{"index.html":"Langres 2005"},"langres2007":{"index.html":"Langres 2007"},"langres2008":{"index.html":"Langres 2008"},"langres2011":{"index.html":"Langres 2011"}},"london":{"index.html":"London"}},"gewaltpraevention":{"index.html":"Gewaltpr\u00e4vention"},"bogy":{"index.html":"BOGY"},"presse":{"index.html":"Presse"}},"wie":{"termine":{"index.html":"Termine"},"gfs":{"index.html":"GFS am PG"},"index.html":"Informationen","news":{"index.html":"Neues von der Schulleitung"},"pelikan":{"index.html":"PeLiKan - Unsere Cafeteria und Mensa"},"pg-cms":{"index.html":"PG-CMS - ein barrierefreies CMS f\u00fcr Schulen"},"praktika":{"index.html":"Praktika am PG"},"regelungen":{"index.html":"Hausinterne Regelungen und Hausordnung"},"zeugnisse":{"index.html":"Rund um das Zeugnis"},"stundenplan":{"index.html":"Stundenplan"},"vertretungen":{"index.html":"Vertretungsplan"},"schulcurriculum":{"index.html":"Schulcurriculum und -Profil"},"geschaeftsverteilung":{"index.html":"Gesch\u00e4ftsverteilung"},"kontingentstundentafeln":{"index.html":"Kontingentstundentafeln"},"evaluation":{"index.html":"Evaluation","preise":{"index.html":"unsere Preise"}},"bilder":{"index.html":"Texte und Bilder"},"download":{"index.html":"Download-Ordner"}},"kontakt":{"impressum":{"index.html":"Impressum"},"anfahrt":{"index.html":"Anfahrt"},"anmeldung":{"index.html":"E-Mailregistrierung"},"bewerbung_schulscharf":{"index.html":"Schulscharfe Stellen: Wir brauchen Verst\u00e4rkung"},"index.html":"Kontakt","mailformular":{"index.html":"Mailformular"},"newsletter":{"index.html":"Newsletter"},"service":{"index.html":"Service"},"gaestebuch":{"index.html":"G\u00e4stebuch"},"forum":{"index.html":"Forum"}}}
};

HoverNavigation.init();
