// -------------------------------------------------------------------
// default.js
// V. 1.3
// AUTO BILD Online
// Copyright (C) 2007 AUTO BILD Online - Axel Springer Autoverlag GmbH
//
// Erstellt von GW interactive (GWI Media Technologies GmbH)
// http://www.gw-interactive.com
// -------------------------------------------------------------------


// public
// (in Webseiten zu verwenden)
// ---------------------------

/*
 * Standard-Prozeduraufrufe auf jeder Seite
 */
function init() {
	loadAds();
	implementHover();
	implementBehaviors();
	initForms();
}


/*
 * Schaltet "Modulreiter" eines Moduls um.
 */
function activateModuleTab(strModName, intTabIndex) {
	// Zuerst Alle Tabs dieses Moduls deaktivieren:
	scanCollection = document.getElementsByTagName('li');
	for (i=0; i<scanCollection.length; i++) {
		// Tab-ID lautet immer 'mod-<MODULNAME>-tab<INDEX(1..99)>'
		if ((scanCollection[i].id.search(/-tab\d\d?$/) >= 0)
			&& (scanCollection[i].id.indexOf(strModName) >= 0)) {
			scanCollection[i].className =
			scanCollection[i].className.replace(/active/, 'idle');
		}
	}

	// Gewünschten Tab aktivieren:
	document.getElementById(strModName + '-tab' + intTabIndex).className =
	document.getElementById(strModName + '-tab' + intTabIndex).className.replace(/idle/, 'active');

	scanCollection = document.getElementsByTagName('div');
	for (i=0; i<scanCollection.length; i++) {
		if (scanCollection[i].className.indexOf('tabcontent-' + strModName) >= 0) {
			if (scanCollection[i].id == strModName + '-tabcontent' + intTabIndex) {
				scanCollection[i].style.display = 'block';
			} else {
				scanCollection[i].style.display = 'none';
			}
		}
	}
}





// private
// (nur in internem JS-Code zu verwenden)
// --------------------------------------

/*
 * "User friendly load" von Werbemitteln
 */
function loadAds() {
	var adnames = Array();
	n=0;

	// Suche alle Container mit Werbemittel-Inhalt (ad-content-*)
	tags = document.getElementsByTagName('div');
	for (i=0; i<tags.length; i++) {
		if (tags[i].id.substring(0, 11) == 'ad-content-') {
			// Bezeichner identifizieren (ad-content-BEZEICHNER)
			adnames[n++] = tags[i].id.substring(11);

			// Container verstecken
			tags[i].style.display = 'none';
		}
	}

	// Werbemittel an ihre korrespondierende Platzierung einfügen.
	for (i=0; i<adnames.length; i++) {
		// Parent-Tag identifizieren (ad-placement-*)
		parentTag = document.getElementById('ad-placement-' + adnames[i]);
		childTag = document.getElementById('ad-content-' + adnames[i]);

		// Container im DOM verschieben und sichtbar machen
		parentTag.appendChild(childTag);
		childTag.style.display = 'block';
	}
}

/*
 * (Nur für Internet-Explorer < 7)
 * Implementiert die Klasse 'hover' in die LI-Elemente der Website-Navigation,
 * für IE<7, da dieser die ':hover'-Pseudoklasse nicht unterstützt.
 */
function implementHover() {
	if (document.all && document.getElementById && document.getElementById("nav")
		&& !window.XMLHttpRequest) {
		navRoot = document.getElementById("nav");
		for (i=0; i<navRoot.childNodes.length; i++) {

			node = navRoot.childNodes[i];
			if (node.nodeName.toLowerCase()=="li") {
				node.onmouseover=function() {
					this.className+=" hover";
					hideFormFields(true);
				}
				node.onmouseout=function() {
					this.className=this.className.replace(" hover", "");
					hideFormFields(false);
				}
			}
		}
	}
}

/*
 * Implementiert verschiedene Eventhandler für Objekte.
 * Die Erkennung der Objkete und der zuzuweisenden Events/Eigenschaften erfolgt
 * über den id-Selektor.
 */
function implementBehaviors() {
	// Zu durchsuchende Tags:
	scanCollection = Array(	document.getElementsByTagName('a'),
							document.getElementsByTagName('select'),
							document.getElementsByTagName('div'),
							document.getElementsByTagName('ul')
						);

	// Durch alle Tags der Seite gehen:
	for (c=0; c<scanCollection.length; c++) {
		for (i=0; i<scanCollection[c].length; i++) {
			// Wann immer ein Element mit "cmd" beginnt, Befehlsverarbeitung starten:
			if ((scanCollection[c][i].id.substring(0, 3) == 'cmd')
				&& (scanCollection[c][i].id.indexOf('_') >= 0)) {
				// Der Befehl ist gekennzeichnet von "cmd" bis zum ersten Auftreten von '_' im ID-Selektor.
				// Der Wert kommt dahinter. (cmd-BEFEHL_WERT)

				p1  = scanCollection[c][i].id.indexOf('_');
				cmd = scanCollection[c][i].id.substring(0, p1);
				val = scanCollection[c][i].id.substring(p1+1);

				// Eigenschaften in das DOM-Objekt implementieren:
				switch (cmd) {
					case 'cmd-toggleblock':
						/* Sichtbarkeit eines Datenblocks in einem Assistentenformular steuern: */

						scanCollection[c][i].onclick  = function() {
							p1  = this.id.indexOf('_');
							cmd = this.id.substring(0, p1);
							val = this.id.substring(p1+1);
							toggleClassSelector(document.getElementById(val), 'item-expanded');
							return false;
						}
						break;

					case 'cmd-togglemod':
						/* Modul ein-/ausklappen */

						scanCollection[c][i].onclick  = function() {
							// Das Modul ist immer das Parent-Element:
							toggleClassSelector(this.parentNode, 'mod-collapsed');
							// Link-Fokus entfernen
							this.childNodes[0].blur();
						}
						break;

					case 'cmd-hoverstar':
						/* Text für Stern im Voting anzeigen */

						var starState = Array();

						scanCollection[c][i].onmouseover = function() {
							document.getElementById('rating-cleartext_' + this.parentNode.parentNode.id).getElementsByTagName('span')[0].style.display = 'none';
							document.getElementById('rating-cleartext_' + this.parentNode.parentNode.id).getElementsByTagName('span')[1].style.display = 'inline';
							document.getElementById('rating-cleartext_' + this.parentNode.parentNode.id).getElementsByTagName('span')[1].innerHTML = this.title;

							currentStar = this.id.replace(/^.*_/, '');
							f = 0;
							stars = this.parentNode.parentNode.childNodes;
							for (s=0; s<stars.length; s++) {
								if (	(stars[s].className) &&
										(stars[s].className.indexOf('star') >= 0) &&
										(f++)) {
									starState[f] = stars[s].className;
									stars[s].className = (f <= currentStar) ? 'star star-on' : 'star star-off';
								}
							}
						}

						scanCollection[c][i].onmouseout = function() {
							document.getElementById('rating-cleartext_' + this.parentNode.parentNode.id).getElementsByTagName('span')[1].style.display = 'none';
							document.getElementById('rating-cleartext_' + this.parentNode.parentNode.id).getElementsByTagName('span')[0].style.display = 'inline';

							currentStar = this.id.replace(/^.*_/, '');
							f = 0;
							stars = this.parentNode.parentNode.childNodes;
							for (s=0; s<stars.length; s++) {
								if (	(stars[s].className) &&
										(stars[s].className.indexOf('star') >= 0) &&
										(f++)) {
									stars[s].className = starState[f];
								}
							}
						}
						break;

					case 'cmd-sethersteller':
						scanCollection[c][i].onchange = function() {
							target_th = this.id.replace(/^cmd.*_/, '');
							document.getElementById(target_th).innerHTML = this.options[this.selectedIndex].parentNode.label ? this.options[this.selectedIndex].parentNode.label : '';
						}
						break;
				}
			} // if == cmd

			if (scanCollection[c][i].className.indexOf('node-label') >= 0) {
				// 	"Treeview"-Element gefunden. Klappeigenschaft implementieren:

				scanCollection[c][i].onclick = function() {
					this.parentNode.className = (this.parentNode.className.indexOf('node-expanded') >= 0 ?
						this.parentNode.className.replace('node-expanded', 'node-collapsed') :
						this.parentNode.className.replace('node-collapsed', 'node-expanded'));
				}
			}


		} // for i
	} // for c

}

/*
 * Durchsucht die Seite nach Formular-Elementen, die den Klassenbezeichner 'highlight-input' tragen.
 * Diese Felder erhalten das Attribut 'notempty', wenn der Wert nicht leer ist (d. h. wenn
 * eine gültige Nutzereingabe getätigt wurde).
 */
function initForms() {
	scanCollection = Array(	document.getElementsByTagName('input'),
							document.getElementsByTagName('select'),
							document.getElementsByTagName('textarea')
						);

	for (c=0; c<scanCollection.length; c++) {
		for (i=0; i<scanCollection[c].length; i++) {
			if (scanCollection[c][i].className.indexOf('highlight-input') >= 0) {

				if (scanCollection[c][i].value != '') {
					appendClass(scanCollection[c][i], 'notempty');
				}

				scanCollection[c][i].onchange = function() {
					if (this.value != '') {
						appendClass(this, 'notempty');
					} else {
						removeClass(this, 'notempty');
					}
				}
			}
		}
	}
}

/*
 */
function hideFormFields(hide) {
	scanCollection = Array(	document.getElementsByTagName('select')
						);

	for (c=0; c<scanCollection.length; c++) {
		for (i=0; i<scanCollection[c].length; i++) {
			scanCollection[c][i].style.visibility = hide ? 'hidden' : 'visible';
		}
	}
}




/*
 * Prüft, ob ein Objekt einen bestimmten Klassenbezeichner enthält.
 */
hasClass = function(objObject, strClassName) {
	p1 = objObject.className.indexOf(strClassName);
	if (p1 >= 0) {
		return p1;
	} else {
		return false;
	}
}

/*
 * Fügt einen Klassenbezeichner an ein Objekt hinzu, sofern diese nicht nicht vorhanden ist.
 */
appendClass = function(objObject, strClassName) {
	if (!hasClass(objObject, strClassName)) {
		objObject.className += ' ' + strClassName;
	}
}

/*
 * Entfernt einen Klassenbezeichner eines Objekts, sofern dieser vorhanden ist.
 */
removeClass = function(objObject, strClassName) {
	p = hasClass(objObject, strClassName);
	if (p) {
		objObject.className = objObject.className.substring(0, p-1) + objObject.className.substring(p + strClassName.length);
	}
}

/*
 * Schaltet Klassenbezeichner eines Objekts ein oder aus, je nach deren Vorhandensein.
 */
toggleClassSelector = function(obj, selector) {
	currentClassName = obj.className;
	if (currentClassName.indexOf(selector) >= 0) {
		p1 = currentClassName.indexOf(selector);
		newClass = currentClassName.substring(0, p1-1) + currentClassName.substring(p1 + selector.length);
	} else {
		newClass = currentClassName + ' ' + selector;
	}
	obj.className = newClass;
}




