// Liste der Funktionen in hps.js (außer Hilfsfunktionen):

// BrowserDetect.init()         - wird script.runtime ausgeführt
// css_browser_selector()       - wird script.runtime ausgeführt
// sichtbar()
// neuesFensterOeffnen()
// StyleSwitcher Funktionen     - werden script.runtime, window.onload 
//                                und window.onunload ausgeführt
// topLinksichtbar()            - wird window.onload ausgeführt
// browserBreite()              - wird window.onload ausgeführt
// initImage()                  - wird window.onload ausgeführt

// MM_actDeactInput_setClass()  - kann im Formular onChange()
//                                aufgerufen werden


// -------------------------------------------------------------------
// BrowserDetect.init()
var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		}
	]

};
// Browser Detect ausführen !!
BrowserDetect.init();



// ----------------------------------------------------------------
// CSS Browser Selector   
// http://rafael.adm.br/css_browser_selector
/*
    Available OS Codes [os]:
    * win - Microsoft Windows
    * linux - Linux (x11 and linux)
    * mac - Mac OS
    * freebsd - FreeBSD new
    * ipod - iPod Touch new
    * iphone - iPhone new
    * webtv - WebTV new
    * mobile - J2ME Devices (ex: Opera mini) new

    Available Browser Codes [browser]:
    * ie - Internet Explorer (All versions)
    * ie8 - Internet Explorer 8.x
    * ie7 - Internet Explorer 7.x
    * ie6 - Internet Explorer 6.x
    * ie5 - Internet Explorer 5.x
    * gecko - Mozilla, Firefox (all versions), Camino
    * ff2 - Firefox 2
    * ff3 - Firefox 3
    * opera - Opera (All versions)
    * opera8 - Opera 8.x
    * opera9 - Opera 9.x
    * opera10 - Opera 10.x
    * konqueror - Konqueror
    * webkit or safari - Safari, NetNewsWire, OmniWeb, Shiira, Google Chrome
    * safari3 - Safari 3.x new
    * chrome - Google Chrome

    Available Extra Code:
    * js - Will be available when js is enabled
*/

function css_browser_selector(u){
	var 
	  ua = u.toLowerCase(),
		is=function(t){return ua.indexOf(t)>-1;},
		g='gecko',
		w='webkit',
		s='safari',
		h=document.getElementsByTagName('html')[0],
		b=[(!(/opera|webtv/i.test(ua))&&/msie\s(\d)/.test(ua))?('ie ie'+RegExp.$1):is('firefox/2')?g+' ff2':is('firefox/3')?g+' ff3':is('gecko/')?g:/opera(\s|\/)(\d+)/.test(ua)?'opera opera'+RegExp.$2:is('konqueror')?'konqueror':is('chrome')?w+' '+s+' chrome':is('applewebkit/')?w+' '+s+(/version\/(\d+)/.test(ua)?' '+s+RegExp.$1:''):is('mozilla/')?g:'',is('j2me')?'mobile':is('iphone')?'iphone':is('ipod')?'ipod':is('mac')?'mac':is('darwin')?'mac':is('webtv')?'webtv':is('win')?'win':is('freebsd')?'freebsd':(is('x11')||is('linux'))?'linux':'','js']; 
		c = b.join(' '); h.className += ' '+c; return c;}; 
// Browser Selector ausführen !!
css_browser_selector(navigator.userAgent);



// ----------------------------------------------------------------
// Sichtbarkeit eines Objekts ein-/ausschalten 
// (display inline / display none)

function sichtbar(objekt){
	if (document.getElementById(objekt).style.display != 'inline'){
		document.getElementById(objekt).style.display= 'inline';
	} else {
		document.getElementById(objekt).style.display= 'none';
	}
}



// ----------------------------------------------------------------
// Öffnet ein neues Browserfenster und positioniert es in der Bildschirm-Mitte
// KEINE Statuszeile, Größe NICHT veränderbar
var neuesFenster = null;
function neuesFensterOeffnen(meinURL,fensterbreite,fensterhoehe) {
	if (!neuesFenster || neuesFenster.closed) {
		var links = (screen.availWidth/2) - (fensterbreite/2);
		var oben = (screen.availHeight/2) - (fensterhoehe/2);
		var fensterParameter = "top=" + oben +",left=" + links + ",height=" + fensterhoehe +",width=" + fensterbreite + ",status=no,resizable=no";
		neuesFenster = window.open(meinURL,"neuesFenster",fensterParameter);
	} else {
		neuesFenster.focus();
		neuesFenster.location.href=meinURL;
	}
}

// ----------------------------------------------------------------
// Öffnet ein neues Browserfenster und positioniert es in der Bildschirm-Mitte
// KEINE Statuszeile, Größe NICHT veränderbar
var newPictureWindow = null;
function openPictureWindow(myURL,winWidth,winHeight) {
	if (!newPictureWindow || newPictureWindow.closed) {
		var leftPos = (screen.availWidth/2) - (winWidth/2);
		var topPos = (screen.availHeight/2) - (winHeight/2);
		var winParameter = "top=" + topPos +",left=" + leftPos + ",height=" + winHeight +",width=" + winWidth + ",status=no,resizable=no";
		newPictureWindow = window.open(myURL,"newPictureWindow",winParameter);
	} else {
		newPictureWindow.focus();
		newPictureWindow.location.href=myURL;
	}
}



// ----------------------------------------------------------------
// StyleSwitcher functions written by Paul Sowden
// http://www.idontsmoke.co.uk/ss/
// http://www.alistapart.com/stories/alternate/

function setActiveStyleSheet(title) {
  var i, a, main;
  for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
    if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title")) {
      a.disabled = true;
      if(a.getAttribute("title") == title) a.disabled = false;
    }
  }
}

function getActiveStyleSheet() {
  var i, a;
  for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
    if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title") && !a.disabled) return a.getAttribute("title");
  }
  return null;
}

function getPreferredStyleSheet() {
  var i, a;
  for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
    if(a.getAttribute("rel").indexOf("style") != -1
       && a.getAttribute("rel").indexOf("alt") == -1
       && a.getAttribute("title")
       ) return a.getAttribute("title");
  }
  return null;
}

function createCookie(name,value,days) {
  if (days) {
    var date = new Date();
    date.setTime(date.getTime()+(days*24*60*60*1000));
    var expires = "; expires="+date.toGMTString();
  }
  else expires = "";
  document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
  var nameEQ = name + "=";
  var ca = document.cookie.split(';');
  for(var i=0;i < ca.length;i++) {
    var c = ca[i];
    while (c.charAt(0)==' ') c = c.substring(1,c.length);
    if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
  }
  return null;
}

// Styleswitcher: bei window.onload style-Cookie auslesen und Stylesheet 
// entsprechend setzen

window.onload = function(e) {
  var cookie = readCookie("style");
  var title = cookie ? cookie : getPreferredStyleSheet();
  setActiveStyleSheet(title);
}

// Styleswitcher: bei window.onunload style-Cookie generieren

window.onunload = function(e) {
  var title = getActiveStyleSheet();
  createCookie("style", title, 365);
}

// Styleswitcher: bei Skriptrun style-Cookie auslesen und Stylesheet 
// entsprechend setzen
var cookie = readCookie("style");
var title = cookie ? cookie : getPreferredStyleSheet();
setActiveStyleSheet(title);



// ----------------------------------------------------------------
// Top-Scroll Link wird nur sichtbar, wenn das Browser-Fenster zu klein ist
// css-Klasse scrollTop wird bei ausreichend großem Fenster auf "hidden" gesetzt
// http://www.maratz.com/blog/archives/2006/05/22/smart-back-to-top-link/

var d = document;
function topLinksichtbar(){
	var viewport_height = (self.innerHeight) ? self.innerHeight : (document.documentElement && document.documentElement.clientHeight) ? document.documentElement.clientHeight : (document.body) ? document.body.clientHeight : 0;
	var page_height = d.getElementsByTagName('body')[0].offsetHeight;
	if (!document.getElementById('scrollTop')) return false;
	var ttl = d.getElementById('scrollTop');
	if (page_height < viewport_height) ttl.style.visibility = 'hidden';
}
addLoadEvent(topLinksichtbar);

// to-scroll-link: bei windows-onload Funktion topLinksichtbar ausführen
function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      oldonload();
      func();
    }
  }
}



// ----------------------------------------------------------------
/* 
   Wenn die Breite des browserFensters > 800px ist, wird ...
     body.hg fixiert
     menu.pos fixiert
     der text-resizer rechts vom inhalt gezeigt
	
   Realisierung durch Austausch/Einfügen von css-Klassen, 
   in in "style.css" definiert sind
*/

// Text Resizer pauschal bei allen Fenstergrößen unsichtbar machen
document.write("<style type='text/css'>#menuRechtsUnten {visibility:hidden;} </style>"); 

// Breite des Browser-Fensters feststellen
addLoadEvent(browserBreite);

// css-Reformatierungen vornehmen
function browserBreite(){
  var browserWidth = getBrowserWidth();
  if (!document.getElementsByTagName) return false;

  // nur wenn Browser-Fenster groß genug ist
  if (browserWidth > 800){

    // firefox bis 2 am MAC hat Probleme mit dem fixierten menue, daher dort nicht anwenden
    if ((BrowserDetect.OS == "Mac") && (BrowserDetect.browser == "Firefox") && (BrowserDetect.version <= 2.5)){
      //alert ("Firefox unter 2.5 am MAC");
    } else {

      // body Element bekommt class="hgFixed" zugewiesen
      var body = document.getElementsByTagName('body')[0];
      body.className = 'hgFixed'; //body.hg wird fixiert
			// Element mit id="menu_rot" bzw. id="menu_gruen" bekommt class="fixed" (statt zuvor "absolut") zugewiesen
			classeAendern('menu_rot','fixed'); //menu.pos. fixiert, hier liegen die PROBLEME bei firefox/mac!
			classeAendern('menu_gruen','fixed'); //menu.pos. fixiert, hier liegen die PROBLEME bei firefox/mac!
    }
    // sowie generell (bei allen Browsern)
		// menuRechtsUnten class="grossScreen"
    classeAendern('menuRechtsUnten','grossScreen'); // textResizer rechts von inhalt positioniert
	}

  // abschließend Text-Resizer wieder sichtbar machen (Fenstergröße über 800px)
  if (!document.getElementById('menuRechtsUnten')) return false;
  var menuRechtsUnten= document.getElementById('menuRechtsUnten');
  menuRechtsUnten.style.visibility = 'visible'; // text resizer wieder sichtbar machen
}

// Hilfsfunktion getBrowserWidth() zur Ermittlung der Breite des Browser-Fensters
// http://www.themaninblue.com/experiment/ResolutionLayout/
function getBrowserWidth(){
	if (window.innerWidth){
		return window.innerWidth;
	} else if (document.documentElement && document.documentElement.clientWidth != 0){
		return document.documentElement.clientWidth;	
	} else if (document.body){
		return document.body.clientWidth;
	}		
		return 0;
}

// Hilfsfunktion für das Zuordnen einer css-Klasse zu einem html-Element
function classeAendern(element, wert){
	if (!document.getElementById) return false;
	if (!document.getElementById(element)) return false;
	var el= document.getElementById(element);
	el.className = wert;
}



// Image FadeIn: visibility eines Bild allmählich auf 100% erhöhen
// http://clagnut.com/sandbox/imagefades/

// das Bild mit der Klasse "thephoto" zunächst unsichtbar machen
document.write("<style type='text/css'>#thephoto {visibility:hidden;} </style>");

addLoadEvent(initImage);
function initImage() {
	imageId = 'thephoto';
	if (!document.getElementById(imageId)) return false;
	image = document.getElementById(imageId);
	setOpacity(image, 0);
	image.style.visibility = 'visible';
	fadeIn(imageId,0);
}

// Hilfsfunktion setOpacity()
function setOpacity(obj, opacity) {
	opacity = (opacity == 100)?99.999:opacity;
  
	// IE/Win
	obj.style.filter = "alpha(opacity:"+opacity+")";
	
	// Safari<1.2, Konqueror
	obj.style.KHTMLOpacity = opacity/100;
	
	// Older Mozilla and Firefox
	obj.style.MozOpacity = opacity/100;
	
	// Safari 1.2, newer Firefox and Mozilla, CSS3
	obj.style.opacity = opacity/100;
}

// Hilfsfunktion fadeIn()
function fadeIn(objId,opacity) {
	if (document.getElementById) {
		obj = document.getElementById(objId);
		if (opacity <= 100) {
			  setOpacity(obj, opacity);
			  opacity += 10;
			  window.setTimeout("fadeIn('"+objId+"',"+opacity+")", 100); //umso kuerzer, um so schneller
		}
	}
}


// Adaption der MM Standardfunktion zur Änderung von Objekteigenschaften
// hps 2009-11-19
// toggelt ein oder ggf. mehrere Inputfeld(er) disabled/enabled und fügt zugleich CSS-Klasse 
// "disabled" (Name ist fest vorgegeben) hinzu bzw. nimmt diese wieder weg. 
// Kann onChange() bei Optionsfeldern aufgerufen werden.
// Ggf. mehrere Zielfelder hintereinander als Zweierpärchen ID/action übergeben.
// BEISPIEL: <input name="TelOption" type="radio" class="radiobutton" 
// id="TelOption_0" onChange="MM_actDeactInput_setClass('telefon','','activate')" 
// value="tel_yes" title="klicken Sie hier, wenn Sie Telefon haben"/>
// Im Beispiel wird bei Auswahl des Radiobuttons ein im Formular vorhandenes
// Inputfeld "Telefon" aktiviert.

function MM_actDeactInput_setClass() { //v1.0 hps
  var i,p,v,out,obj,args=MM_actDeactInput_setClass.arguments;
  for (i=0; i<(args.length-1); i+=2)
  with (document) if (getElementById && ((obj=getElementById(args[i]))!=null)) { v=args[i+1];
		out=(v=='deactivate')?'true':'';
		obj.disabled=out; 
		obj.className=(v=='deactivate')?obj.className + ' disabled':(v=='activate')?obj.className.replace(/ disabled/g, ''):obj.className;
		// alert ('nun hat das input-Feld folgende CSS-Klassen: ' + obj.className);
		}
}


