/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
// funktion fuer popups
/*
oeffnet neues Fenster, beruecksichtigt URL, Breite, Hoehe, Parameter, X- und Y-Koordinaten, rahmenlos etc.
werden breite, hoehe und schalter nicht angegeben, werden Default-Einstellungen verwendet
default: breite=600, hoehe=400, schalter=resizable,scrollbars,toolbar,menubar,directories,location,hotkeys=no,dependent
aufruf: openPopup("URL","fenstername"[,breite[,hoehe[,schalter[,x-Koordinate, y-Koordinate]]]]);
Beispielaufruf I: "openPopup('anfahrt.html','popup',400,320,'r')" = Fenster 400x320 px oeffnen, nur resizable, ohne scrollers, menu etc.
Beispielaufruf II: "openPopup('anfahrt.html','popup',400,320,'rt',400,200)" = Fenster 400x320 px oeffnen, resizable, mit Toolbar, plazieren bei 400/200
Beispielaufruf III: "openPopup('anfahrt.html')" = fenster 600x400 px oeffnen

- Schalter 'b' (fuer 'borderless'): Popup kann rahmenlos geoeffnet werden (etwas tricky, nur IE3+ und mit Kopfbalken im NN6+).
- Schalter 'f' (fuer 'fullsize'): Popup kann zu voller Bildschirmgroesse geoeffnet werden. (ab IE3 und mit Kopfbalken im NN6+ bzw. JS v1.2.)
- Schalter 'k' (fuer 'kiosk mode'): Popup kann im Kiosk-Modus geöffnet werden (nur IE3+ und mit Kopfbalken im NN6+)
- Schalter 'c' fuer bildschirmmittige ('centered') Positionierung des Popups.
- Schalter 'p' fuer Abhaengigkeit vom Opener ('dePendent'). Wird Opener geschlossen, wird auch das Popup geschlossen. Nur in NN4+.
- Schalter 'h' fuer die Deaktivierung von Hotkeys im Popup. Nur in NN4+.
- Schalter 'u' fuer Anzeige der Statuszeile ('statUs').

Beispiele:
Beispielaufruf IV: "openPopup('anfahrt.html','Anfahrt',300,400,'bc')" = rahmenloses (nur IE3+), bildschirmzentriertes Fenster 300 x 400 oeffnen
Beispielaufruf V: "openPopup('anfahrt.html','Anfahrt',0,0,'fk')" = Popup im Kiosk-Modus wenn IE3+, sonst Fullscreen. Groesse und Breite werden ignoriert, Position auch

Beim wiederkehrenden Aufruf von Popups, die immer best. Eigenschaften aufweisen, sollte eine eigene Funktion definiert 
werden,  die diesen best. Aufruf einmal definiert hat und anstelle der openPopup-Funktion verwendet werden soll.
z.B. 
oeffne die Sitemap, die von jeder Seite der Site zu erreichen ist und verwende zum 
Aufruf der Sitemap nur noch diese Funktion anstelle von direktem Aufruf mit openPopup() :
function openSitemap() { 
		openPopup('/sitemap.html','Sitemap',400,400,'c')
}

Schalter:
a: automatic closing.	Nicht in IE3 wg. Fehlermeldungen. Automatisches Schliessen aller offenen Popups.
b: borderless.			Nur in IE3+ und mit Kopfbalken im NN6+: Wenn gesetzt, erhaelt das Fenster keine Fensterrahmen. 
c: centered.			Wenn gesetzt, wird das Fenster in Bildschirmmitte positioniert. Wird ignoriert, wenn x- und y-Koordinaten angegeben werden.
d: directorybar.		Wenn gesetzt, erhaelt das Fenster eine eigene Verzeichnisleiste.
f: fullscreen.			Nur ab JS v1.2 bzw. IE3+ und mit Kopfbalken im NN6+. Wenn gesetzt, wird das Fenster im Vollbild geoeffnet. 
h: hotkeys.				Nur in NN4+: Wenn gesetzt, werden Tastaturbefehle zum Steuern des Browsers in dem Fenster *de*aktiviert. 
k: kiosk mode.			Nur in IE3+ und mit Kopfbalken im NN6+. Wenn gesetzt, wird das Fenster im Kiosk-Modus geoeffnet.
l: locationbar.			Wenn gesetzt, erhaelt das Fenster eine eigene Adresszeile. Netscape 6.1 interpretiert diese Angabe nicht.
m: menubar.				Wenn gesetzt, erhaelt das Fenster eine eigene Menueleiste mit Browser-Befehlen.
p: parent dependence.	Nur in NN4+: Wenn gesetzt, wird das Fenster geschlossen, wenn sein Elternfenster geschlossen wird. 
r: resizable.			Wenn gesetzt, kann der Anwender das Fenster in der Größe veraendern.
s: scrollbars.			Wenn gesetzt, erhaelt das Fenster Scroll-Leisten.
t: toolbar.				Wenn gesetzt, erhaelt das Fenster eine eigene Werkzeugleiste.
u: statusbar.			Wenn gesetzt, erhaelt das Fenster eine eigene Statuszeile.
*/

var ie = 0;
var agent = navigator.userAgent.toLowerCase();
var isMac = (agent.indexOf('mac') > -1) ? true : false;
var isSafari = (agent.indexOf('safari') > -1) ? true : false;

if (navigator.appName.indexOf("Explorer") > -1) { 
	if (navigator.appVersion.indexOf("MSIE 5") > -1) { ie = 5 } 
	else {
		if (navigator.appVersion.indexOf("MSIE 3") > -1) { ie = 3 } 
		else { ie = parseInt(navigator.appVersion.substring(22,23)) ?parseInt(navigator.appVersion.substring(22,23)) : 0 }
	}
}

// Liste geoeffneter Popups
var openedPopups = new Array();

// Default-Werte best. Parameter
var defaults = new Array();
defaults['url'] = ""; // Default-URL: leeres fenster (was z.B. mit Javascripts fenster.document.write() gefuellt werden kann
defaults['name'] = "popup"; // Default-Name des Popups
defaults['width'] = 600; // Default-Breite
defaults['height'] = 400; // Default-Hoehe



function openPopup (url,name,w,h,switches,x,y) {
	// ++ URL setzen ++
	if (!url) { url = defaults['url'] }


	// ++ Fenstername setzen ++ 
	if (!name) { name = defaults['name'] }


	// Breite nachbearbeiten
	if (!w) { w = defaults['width'] }
	else { w = parseInt(w) } // in Integer umwandeln
//	if (isMac && ie){ w -= 20 } // auf dem Mac zu gross
	if (isMac && ie && ie < 5){ w -= 20 } // auf dem Mac zu gross


	// Hoehe nachbearbeiten
	if (!h) { h = defaults['height'] }
	else { h = parseInt(h) } // in Integer umwandeln
	if (ie && ie < 5) { h -= 20} // der Explorer 4- macht das Fenster zu gross
	if (isMac)	{ h+=10;	}
	if (isMac && isSafari)	{ h+=10;	}


	// Breite und Hoehe nachbearbeiten wenn Vollbildmodus
	if (switches && switches.indexOf("f") > -1 && window.screen) { // wenn Schalter 'f' und screen-Objekt vorhanden
		/*w = "outerWidth=" + window.screen.availWidth;
		h = ",outerHeight=" + window.screen.availHeight; */
		w = window.screen.availWidth;
		h = window.screen.availHeight;
	}

	
	// Position berechnen
	var xpos; // keine Defaultposition
	var ypos;
	var xInt = parseInt(x); // vermeidet Fehlermeldungen im IE3 wenn x und y nicht gesetzt
	var yInt = parseInt(y);
	if (xInt > -1 && yInt > -1) { // an best. Position x/y (Koordinaten linker oberer Fensterecke)
		xpos = xInt;
		ypos = yInt;
	}
	else {
		if (switches && window.screen) { // wenn Schalter und screen-Objekt vorhanden
			if (switches.indexOf("c") > -1) { // wenn Schalter 'c' = centered
				// Koordinaten fuer bildschirmmittige Positionierung errechnen
				xpos = parseInt((window.screen.availWidth - w)/2);
				ypos = parseInt((window.screen.availHeight - h)/2);
			}
			if (switches.indexOf("f") > -1) { // wenn Schalter 'f' = fullscreen
				xpos = 0;
				ypos = 0;
			}
		}
	}


	// ++ Parameterliste setzen ++ //
	var params = getPopupParams(w,h,switches,xpos,ypos);


	// Automatisches Schliessen aller offenen Popups wenn erwuenscht. Nicht in IE3 wg. Fehlermeldungen.
	if (switches && switches.indexOf('a') > -1 && window.close){
		closePopups(); // alle offenen Popups schliessen
	}
	
	
	// ++ jetzt geht's los: Popup oeffnen ++

	// neues Fenster oeffnen
	var newwin = window.open(url, name, params);

	// ++ Nachbereitungen ++
	// Wenn der Schalter 'b' (fuer rahmenlose Fenster) angegeben wurde, wurde das Fenster in 
	// fullscreen geoeffnet. Jetzt muss anschliessend seine Groesse und Position geaendert werden.
	if (switches && switches.indexOf('b') > -1 && window.moveTo && window.resizeTo && window.focus) { // wenn Schalter 'b' (borderless) sowie Methoden moveTo, resizeTo und focus vorhanden
		// Popup waehrend Groessenaenderung "unsichtbar" machen
		newwin.blur();	// Fenster verlassen
		newwin.opener.focus(); // Herkunftsfenster nach vorne bringen
		// Popup von Fullscreen auf kleinere Groesse setzen
		newwin.resizeTo(w,h)
		newwin.moveTo(xpos,ypos)
	}

	 // wenn focus unterstuetzt wird: Popup nach vorne bringen
	if (window.focus) { newwin.focus() }

	// Popup-Referenz speichern. Wert kann mit getWindow(fenstername) abgefragt werden.
	openedPopups[name] = newwin;

}

// ende openPopup


// Funktion, die die Referenz auf ein best. Popup zurueckgibt
function getWindow (winname) {
	if (!winname || !openedPopups[winname] || openedPopups[winname].closed) { return false } // wenn parameter nicht vorhanden oder Array-Eintrag nicht existiert: mit falsch raus
	else { return openedPopups[winname] } // sonst: gebe Referenz auf Fenster zurueck
}

function showWindows () {
	var msg = "";
	for (var key in openedPopups ) {
		if (openedPopups[key].closed) { msg += key + ": \n" }
		else { msg += key + ": " + openedPopups[key] + "\n" }
	}
	alert(msg)
}

// funktion fuers automatische schliessen von popups, wenn neue seite geladen wird

function closePopups () {
	if (ie && ie < 4) {return} // raus wenn IE3, sonst Fehlermeldungen
	if (window.close){ // wenn close-Methode vorhanden
		var popup, win;
		for (popup in openedPopups) {
			win = openedPopups[popup];
			if (win.close && !win.closed) { 
				win.close(); // Popup schliessen
				openedPopups[popup] = ""; // Referenz loeschen
			}
		}
	}
}

// ende closePopups


// Funktion fuer das Zusammenbasteln der Popup-Parameter
function getPopupParams (w,h,switches,xpos,ypos) {

	// Breite setzen
	var width = "width=" + w;

	// Hoehe setzen
	var height = ",height=" + h;

	// weitere Parameter setzen
	var parent = ""; // z.Zt. nur NN4+
	var dirbar = "";
	var fullscreen = ""; // z.Zt. nur IE3+
	var hotkeys = ""; // z.Zt. nur NN4+
	var locbar = "";
	var menubar = "";
	var resizable = "";
	var scrollbars = "";
	var statusbar = "";
	var toolbar = "";
	if (switches) {
		if (switches.indexOf("p") > -1 ) { parent = ",dependent"	}
		if (switches.indexOf("d") > -1 ) { dirbar = ",directories"	}
		if (switches.indexOf("h") > -1 ) { hotkeys = ",hotkeys=no"	}
		if (switches.indexOf("l") > -1 ) { locbar = ",location"	}
		if (switches.indexOf("m") > -1 ) { menubar = ",menubar"	}
		if (switches.indexOf("r") > -1 ) { resizable = ",resizable"	}
		if (switches.indexOf("s") > -1 ) { scrollbars = ",scrollbars" }
		if (switches.indexOf("u") > -1 ) { statusbar = ",status"	}
		if (switches.indexOf("t") > -1 ) { toolbar = ",toolbar"	}
		if (switches.indexOf("k") > -1 || switches.indexOf("b") > -1 ) { fullscreen = ",fullscreen=1" }
	}

	// Popup-Position (x/y-Koordinate) setzen
	var pos = "";
	var xposInt = parseInt(xpos); // vermeidet Fehlermeldungen im IE3 wenn xpos und ypos nicht gesetzt
	var yposInt = parseInt(ypos);
	if (xposInt > -1 && yposInt > -1) { pos = ",left=" + xposInt + ",top=" + yposInt }

	// Parameterliste zusammensetzen und zureuckgeben
	return width + height + parent + dirbar + hotkeys + locbar + menubar + resizable + scrollbars + statusbar + toolbar + pos + fullscreen;
}


/* noch nicht beruecksichtige, moegliche Parameter
innerHeight=[Pixel]	// Höhe des Anzeigebereichs des neuen Fensters in Pixeln, z.B. innerHeight=200. Nur NN4+
innerWidth=[Pixel]	// Breite des Anzeigebereichs des neuen Fensters in Pixeln, z.B. innerWidth=200. Nur NN4+
screenX=[Pixel]		// Horizontalwert der linken oberen Ecke des neuen Fensters in Pixeln, z.B. screenX=100.
screenY=[Pixel]		// Vertikalwert der linken oberen Ecke des neuen Fensters in Pixeln, z.B. screenY=30.
*/


/* Beispiel eines Popups, das zuerst leer ist und anschl. mit write() gefuellt wird */
function openDynamicPopup() {
	// ein Popup oeffnen
	openPopup('','DynPop',400,400,'r');
	// die Referenz holen
	winref = getWindow('DynPop');
	// nun kann man darin schreiben
	winref.document.write("<title>Dynamisches Popup</title>Hallo Welt");
	// zum Schluss dem Browser sagen, dass nix mehr kommt
	winref.document.close();
}
