/*#######################################
#########################################
###  noctec.de Javascipt Basics       ###
###                                   ###
### Datei:    Javascript Functions    ###
### Typ:      Javascript              ###
### Version:  0.1                     ###
### Autor:    David Donath            ###
### Homepage: http://www.noctec.de    ###
### Email:    contact@noctec.de       ###
###                                   ###
### last change: 05.05.2007           ###
###                                   ###
#########################################
#######################################*/

/* ####################################################################
###   Overlay öffen
###   #############
###
###   Im Stylesheet muss der body die Höhe 100% zugewiesen bekommen:
###	  	body { height: 100%; }
###
###   Benötigt ein Overlay Hintergrund-DIV und Content-DIV
###   mit folgenden Namen:
###    - njb_overlay_bg <- Hintergund
###    - njb_overlay_content <- Inhalt
###
###   Beispiel:
###	   <div id="njb_overlay_bg"></div>
###    <div id="njb_overlay_content"></div>
###
###   Benötigt das Stylesheet "njb_package.css"
###   Beispiel:
###    <link href="njb_package.css" type="text/css" rel="stylesheet" />
###
###   Die Klasse "njb_overlay_content" kann nach eigenen Wünschen
###   für die Position oder den Inhalt angepasst werden. Nicht verändert
###   werden dürfen "z-index", "position" und "visibility".
###
###	  Funktionen:
###     njb_overlay_open() <- zum öffnen
###     njb_overlay_close() <- zum schließen
###
###   Inhalt muss selbständig gefüllt werden. Der Inhalt kommt in 
###   das div "njb_overlay_content". z.B. mit:
###   	var inhalt = "das ist der Inhalt"
###   	document.getElementById("njb_overlay_content").innerHTML = inhalt;
###
###   Nicht vergessen im Inhalt des Overlays einen Schließen-Link einzubauen!
###   Der Link dazu lautet:
###   <a href='#' onclick='njb_overlay_close()'>Linkttext oder Bild</a>
###   Es bietet sich an z.B. die Links oder andere html-Tags im css extra
###   zu formatieren.
###   Beispiel:
###   #njb_overlay_content a {
###	  	color: #FFFFFF;
###	  	text-decoration: none;
###		}
###
####################################################################*/
function njb_overlay_open() {
	document.getElementById("njb_overlay_bg").style.height = njb_getDimensions("height") + "px";
	document.getElementById("njb_overlay_bg").style.visibility = "visible";
	document.getElementById("njb_overlay_content").style.visibility = "visible";
}

function njb_overlay_close() {
	document.getElementById("njb_overlay_bg").style.visibility = "hidden";
	document.getElementById("njb_overlay_content").style.visibility = "hidden";
	document.getElementById("njb_overlay_bg").style.height = "0px";
	document.getElementById("njb_overlay_content").innerHTML = "";
}

/* ####################################################################
###   Infomeldung (besseres alert)
###   ############################
###
###   Benötigt "Overlay öffnen"
###
###   Zeilenumbruch im Ausgabetext mittels <br>
###   Beim Funktionsaufruf ist die Angabe des Types wichtig.
###   Es gibt folgende Typen:
###    - info
###    - error
###
###  Funktionsaufruf z.B.:
###    njb_infofield("Dies ist eine Fehlermeldung.<br>Neue Zeile.", "error");
####################################################################*/
function njb_infofield(text, typ) {
	njb_overlay_open();
	if(typ == "error") { var color = "red"; }
	if(typ == "info") { var color = "#999999"; }
	var oben =  njb_getPageScroll("height") + njb_getDimensions("windowHeight") / 2 - 150;
	var inhalt = '<div style="position:absolute;left:50%;margin-left:-250px;width:500px;padding:5px;background-color:' + color + ';color:#FFF;margin-top:'+oben+'px;font-size:12px;text-align:center;border: solid 1px #FFF;cursor:pointer;" onclick="njb_overlay_close()"><br>';
	var inhalt = inhalt + text;
	var inhalt = inhalt + '<br><br>Okay<br><br></div>';
	document.getElementById("njb_overlay_content").innerHTML = inhalt;
}

/* ####################################################################
###   Email auf Gültigkeit prüfen
###   ###########################
###
###   Prüft ob gültige Emailadresse
###   Benötigt die Emailadresse als Übergabe
###   gibt true oder false zurück
###
###   Beispiel 1:
###   nbj_check_email(test@mailserver.com)
###   --> gibt true zurück
###
###   Beispiel 2:
###   nbj_check_email(testtext.com)
###   --> gibt false zurück
###   
####################################################################*/
function njb_check_email(email) {
	if(email.match(/^[a-zA-Z0-9_\.-]{1,}@[a-z0-9-]{2,}\.[a-z]{2,4}|museum|travel$/)) {	return true; }
	else { return false; }
}


/* ####################################################################
###   Seitendimensionen
###   ###########################
###
###   Gibt die Höhe oder Breite der Seite aus
###   Benötigt "height" oder "width" als Übergabeparameter
###   gibt Höhe oder Breite zurück
###
###   Beispiel 1:
###   njb_getDimensions("height")
###   --> gibt die Höhe in Pixel zurück
###
###   Beispiel 2:
###   njb_getDimensions("width")
###   --> gibt die Breite in Pixel zurück
###   
###   Core Code stammt von quirksmode.org
###
####################################################################*/
function njb_getDimensions(typ) {
	var xScroll, yScroll;
				
	if (window.innerHeight && window.scrollMaxY) {	
		xScroll = document.body.scrollWidth;
		yScroll = window.innerHeight + window.scrollMaxY;
	} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
		xScroll = document.body.scrollWidth;
		yScroll = document.body.scrollHeight;
	} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
		xScroll = document.body.offsetWidth;
		yScroll = document.body.offsetHeight;
	}
	
	var windowWidth, windowHeight;
	if (self.innerHeight) {	// all except Explorer
		windowWidth = self.innerWidth;
		windowHeight = self.innerHeight;
	} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
		windowWidth = document.documentElement.clientWidth;
		windowHeight = document.documentElement.clientHeight;
	} else if (document.body) { // other Explorers
		windowWidth = document.body.clientWidth;
		windowHeight = document.body.clientHeight;
	}	
	
	// for small pages with total height less then height of the viewport
	if(yScroll < windowHeight){
		pageHeight = windowHeight;
	} else { 
		pageHeight = yScroll;
	}

	// for small pages with total width less then width of the viewport
	if(xScroll < windowWidth){	
		pageWidth = windowWidth;
	} else {
		pageWidth = xScroll;
	}
	
	if(typ == "height") {
		return pageHeight;
	}
	if(typ == "width") {
		return pageWidth;
	}
	if(typ == "windowHeight") {
		return windowHeight;
	}

}


/* ####################################################################
###   Scrollpositionen
###   ###########################
###
###   Gibt die Höhe oder Breite der Scrollposition aus
###   Benötigt "height" oder "width" als Übergabeparameter
###   gibt Höhe oder Breite zurück
###
###   Beispiel 1:
###   njb_getPageScroll("height")
###   --> gibt die Höhe in Pixel zurück
###
###   Beispiel 2:
###   njb_getPageScroll("width")
###   --> gibt die Breite in Pixel zurück
###   
###   Core Code stammt von quirksmode.org
###
####################################################################*/
function njb_getPageScroll(typ){

	var yScroll;

	if (self.pageYOffset) {
		yScroll = self.pageYOffset;
	} else if (document.documentElement && document.documentElement.scrollTop){	 // Explorer 6 Strict
		yScroll = document.documentElement.scrollTop;
	} else if (document.body) {// all other Explorers
		yScroll = document.body.scrollTop;
	}

	if(typ == "height") {
		return yScroll;
	}
	if(typ == "width") {
		return "";
	}
}


/* ####################################################################
###   Warte Bildchen / still in Process einblenden
####################################################################*/
function njb_waiting_start() {
	var oben =  njb_getPageScroll("height") + njb_getDimensions("windowHeight") / 2 - 80;
	document.getElementById('njb_loading_bg').style.height = njb_getDimensions("height") + "px";
	document.getElementById('njb_loading_content').style.top = oben + "px";
	document.getElementById('njb_loading_bg').style.visibility = "visible";
	document.getElementById('njb_loading_content').style.visibility = "visible";
}


/*####################################################################
###   Warte Bildchen / still in Process ausblenden
####################################################################*/
function njb_waiting_end() {
	document.getElementById('njb_loading_content').style.visibility = "hidden";
	document.getElementById('njb_loading_bg').style.visibility = "hidden";
}

/*####################################################################
###   Objekt in der Mitte ausrichten
####################################################################*/
function njb_objVerticalCenter(objHeight) {
	scrollHoehe = njb_getPageScroll("height");
	seitenHoehe = njb_getDimensions("height");
	return scrollHoehe + objHeight / 2;
	//return scrollHoehe + seitenHoehe / 2 - objHeight / 2;
	//return scrollHoehe + 250 - objHeight / 2;
	//return hoehe = scrollHoehe + (seitenHoehe - 30 - objHeight) / 2;
	//return hoehe = (scrollHoehe + seitenHoehe) / 2 - objHeight / 2;
}