/*
Aufruf von InitStyles direkt beim Einlesen durch den Browser, nicht erst in window.onload.
Dadurch wird das Aufblitzen des (falschen) Standard-Styles beim Seitenaufbau vermieden.

Netscape und Mozilla kommen mit link.disabled nur zurecht, wenn link.title gesetzt ist.
Dann wird die Seite von diesen Browsern aber während des Seitenaufbaus ungestylt dargestellt.
Deshalb Umschaltung von link.href statt link.disabled.
In den *Styles-Arrays müssen jetzt die Dateinamen ohne .css eingetragen werden.

Cookies werden bereits beim Umschalten gesetzt werden, nicht erst bei window.onunload. 
Damit kann der gewählte Style direkt in ein neues Fenster übernommen werden, auch wenn
die Seite, auf der der Benutzer die Styleumschaltung vorgenommen hat, nicht verlassen wurde.

B.K. 8.8.05
*/

/*
	hier muessen fuer Farbe, Groesse und Layout die jeweiligen Dateinamen der CSS-Dateien eingetragen werden.
	Der erste Wert stellt dabei den Standard Style dar.
*/
var skinStyles = new Array("skin_standard", "skin_lightblue", "skin_onyx");
var scaleStyles = new Array("scale_small", "scale_medium", "scale_large");
var layoutStyles = new Array("layout_standard", "layout_linear");

var styleSet = new Array();
styleSet[0] = skinStyles[0];
styleSet[1] = scaleStyles[0];
styleSet[2] = layoutStyles[0];

var LinkAttrID = "title";	// über dieses Attribut werden die einzelnen <link>-Tags unterschieden

// setzt den aktuellen Style fuer die Seite
function setStyleSheetSet(skinStyle, scaleStyle, layoutStyle) {
	setStyleSheet("skin", skinStyle);
	setStyleSheet("scale", scaleStyle);
	setStyleSheet("layout", layoutStyle);
}

function setStyleSheet(cookieName, cookieValue)
{
	var link, href;

	// Schleife ueber alle Link-Tags und aktivieren bzw. deaktivieren der Styles
	link = document.getElementById(cookieName);
	href = link.getAttribute("href");
	link.setAttribute("href", href.substring(0, href.lastIndexOf("/")+1) + cookieValue + ".css");
	createCookie(cookieName, cookieValue, 365);
}


// Style eines Styletyps wechseln (verwendbar bei Select boxen)
function changeStyle(newStyle, styleType) {
	// Style Typ neu setzen
	styleSet[styleType] = newStyle;

	// neues Style Set setzen
	setStyleSheetSet(styleSet[0], styleSet[1], styleSet[2]);
}

// naechsten Style(naechstes Element im Array) eines Styletyps setzen
function setNextStyle(styleType) {
	// je nach Style Typ den naechsten Style holen
	switch (styleType) {
		case 0:
			var newStyle = getNextStyle(skinStyles, styleSet[styleType]);
			break;
		case 1:
			var newStyle = getNextStyle(scaleStyles, styleSet[styleType]);
			break;
		case 2:
			var newStyle = getNextStyle(layoutStyles, styleSet[styleType]);
			break;
		default:
			return;
			break;
	}

	// neuen Style setzen
	styleSet[styleType] = newStyle;
	setStyleSheetSet(styleSet[0], styleSet[1], styleSet[2]);
}

// Hilfsfunktion die den naechsten Style aus dem Array zurueckgibt
function getNextStyle(array, actualElement) {
	var actualPos = -1;

	// aktuelle Position im Array suchen
	for (var i=0; i<array.length; i++) {
		if (array[i] == actualElement) {
			actualPos = i
		}
	}

	// inkrementieren und pruefen, ob Array Grenze ueberschritten
	actualPos++;
	if (actualPos >= array.length) {
		actualPos = 0;
	}

	// naechstes Element zurueckgeben
	return array[actualPos];
}


// Funktion wird beim Laden der Seite ausgefuehrt.
// Liest evtl. vorhandenes Cookie aus oder setzt Default Styles
function InitStyles () {
	// Cookies lesen
	styleSet[0] = readCookie("skin");
	styleSet[1] = readCookie("scale");
	styleSet[2] = readCookie("layout");

	// gueltige Cookies, sonst Default Werte
	styleSet[0] = styleSet[0] ? styleSet[0] : skinStyles[0];
	styleSet[1] = styleSet[1] ? styleSet[1] : scaleStyles[0];
	styleSet[2] = styleSet[2] ? styleSet[2] : layoutStyles[0];

	// neues Style Set setzen
	setStyleSheetSet(styleSet[0], styleSet[1], styleSet[2]);

	// ist im suchstring printPreview=1 gesetzt?
	if (getValue(this.document.location.search, "printPreview") == 1) {
                // setze css Klasse auf das Body Tag
		var body_= getBody(this.window);
		body_.className = "printpreview";
	}

	return;
}

// funktion die das print preview fenster oeffnet
function openPrintPreview() {
	// kein search String --> einfach location + ?printPreview=1
	// sonst location + &printPreview=1
	// fenster oeffnen
	if (this.location.search == "") {
		printPreviewPopUp = window.open(this.location + "?printPreview=1", "Print_Preview", "menubar=yes, top=yes, width=800, height=600, dependent=yes, scrollbars=yes, resizable=yes");
	} else {
		printPreviewPopUp = window.open(this.location + "&printPreview=1", "Print_Preview", "menubar=yes, top=yes, width=800, height=600, dependent=yes, scrollbars=yes, resizable=yes");
	}
}

// liefert den Body einer html Seite zurueck
function getBody(w) {
	return (w.document.compatMode && w.document.compatMode == "CSS1Compat") ?
		w.document.documentElement : w.document.body || null;
}

// sucht aus dem searchString den key und liefert dessen value zurueck
function getValue(searchString, key) {

	// ungueltiger search string
	if (searchString.length <= 1) {
		return "";
	}

	// '?' entfernen --> wird nicht benoetigt
	searchString = searchString.substring(1, searchString.length);

	// an den '&' aufteilen und in array schreiben
	searchStringArray = searchString.split("&");

	// schleife ueber array
	for(var i = 0; i < searchStringArray.length; i++) {

		// jetzt am '=' splitten
		var tempArray = searchStringArray[i].split("=");

		// pruefen ob key richtig --> dann value ausgeben
		if ((tempArray.length == 2) && (tempArray[0] == key)) {
			return tempArray[1];
		}
	}

	return "";
}

InitStyles();

