// <meta http-equiv="expires" content="30">

/**
 add_overlay 
   ev:      event
   element_id: id des elements, das mit overlay versehen werden soll
   overlay_id: id des overlay oder das overlay selbst
   offset_x: position des overlay zu 'relative_to'
   offset_y: position des overlay zu 'relative_to'
   relative_to: (optional) 'mouse'(oder null) = relativ zur Maus, 'element' = relativ zum objekt
   text:        (optional) title fuer element setzen
 */

function add_overlay(element_id, overlay_id, offset_x, offset_y, relative_to, text, onShow) {

	// element und overlay finden
	var element = document.getElementById(element_id);
	if (!element)
		return false;
	var overlay = overlay_id; // overlay auch direkt als objekt uebergeben
	if (!overlay.tagName)
		overlay = document.getElementById(overlay_id);
	if (!overlay) {
		log("Overlay nicht gefunden: "+overlay_id);
		return false;
	}
	// jetzt overlayText verwenden, sonst Title direkt zuweisen
	if (text)
		element.overlayText = text;
	else if (!element.overlayText && element.title != '') {
		element.overlayText = element.title;
	}
	
	// onShow zuweisen
	if (onShow)
		element.onshow = onShow;
		
	// MouseOver zuweisen
	element.onmouseover = function(event) { rollover_event3(event, this, overlay, offset_x, offset_y, relative_to); }

	// hier kein title mehr
	overlay.title = "";
	
	// Kleine Status-Ausgabe
	log1('Overlay aktiviert: element_id='+element_id+', overlay_id='+overlay.id+', offset_x='+offset_x+', offset_y='+offset_y+', text='+element.overlayText);
}

/**
    addAllOverlays:
    finde Alle DIVs mit dem Namen 'overlay' und füge sie als MouseOver hinzu.
    Dabei:
      .title = element_id
      .style.left = offset_x
      .style.top = offset_y
    
 */
function addAllOverlays() {
	var items = document.getElementsByName("overlay");
	if (items.length == 0) {
		// 2. Versuch fuer IE 
		items = document.getElementsByTagName("DIV");
	}
	var count = 0;
	for(var i = 0; i < items.length; i++) {
		// log1("Kandidat: "+items[i].title);
	    if (items[i].title != '') { // das hier auch wegen IE
	    	// als layer formatieren
			items[i].style.zIndex = 9999; 
			items[i].style.position = 'absolute'; 
			items[i].style.display = 'none';
			// werte ermitteln
			var offset_x = parseInt(items[i].style.left);
			var offset_y = parseInt(items[i].style.top);
			var element_id = items[i].title;
			items[i].title = '';
			// hinzufügen
			add_overlay(element_id, items[i], 
				offset_x, offset_y, 'element', items[i].innerHTML);
			count++;
		}
	}
	log1("Anzahl Overlays: "+count);
}

/**
 rollover_event3 
   ev:      event
   element: vom event betroffenes objekt
   overlay: html-node mit dem overlay
   offset_x: position des overlay zu 'relative_to'
   offset_y: position des overlay zu 'relative_to'
   relative_to: 'mouse'(oder null) = relativ zur Maus, 'element' = relativ zum objekt
 */

function rollover_event3(ev, element, overlay, offset_x, offset_y, relative_to) {
   	if (!ev)
   		ev = window.event;
   
   // target-objekt für mouseout ermitteln:
   var toElement = null; 
   if (ev.relatedTarget) // firefox
   	 toElement = ev.relatedTarget;
   if (ev.toElement)  // IE
   	 toElement = ev.toElement;

	log1('rollover_event3: element.id='+element.id+', ev.type='+ev.type+', toElement.id='+toElement.id);

   // maus-koordinaten ermitteln:
   var pageX, pageY;
   if (ev.pageX) { // firefox
     pageX = ev.pageX; pageY = ev.pageY;
   } else { // IE
     pageX = ev.clientX + document.documentElement.scrollLeft; 
     pageY = ev.clientY + document.documentElement.scrollTop;   
   }
   // relativ zum element?
   if (relative_to == 'element') {
       var posNode = element;
       if (posNode.nodeName == 'AREA')
         	posNode = findAreaImage(posNode); // Bild zu Area finden
       if (posNode.x) { // Firefox
         pageX = posNode.x;
         pageY = posNode.y;
       } else { // IE (war: if (posNode.offsetLeft) {  )
         pageX = 0;
         pageY = 0;
         while (posNode && posNode.offsetLeft >= 0) {  // war: && posNode.offsetLeft
         	log1("Adding posNode offset, id="+posNode.id+", posNode.nodeName="+posNode.nodeName+", posNode.offsetLeft="+posNode.offsetLeft+", posNode.style.position="+posNode.style.position);
	     	//if (posNode.style.position == 'relative' || posNode.style.position == 'absolute')
	     	//	break;
         	pageX += posNode.offsetLeft;
         	pageY += posNode.offsetTop;
         	posNode = posNode.offsetParent;
         }
       } 
       /*
       else {
       	log1("Keine Koordinaten gefunden!");
       	dumpObject(posNode);
	  }
	  */
   }

   if (ev.type == 'mouseover') {
      if (overlay.linkedelement) {
         // alte werte retten, falls noch vorhanden
         overlay.linkedelement.title = overlay.innerHTML;
      	 overlay.linkedelement.onmouseover = overlay.onmouseout;
         overlay.linkedelement = null;         
      }
      overlay.innerHTML = element.overlayText; // war: .title + element.title = "";
      overlay.style.display = ""; // wieder anzeigen
      
      // onmouseout uebergeben (gleich wie on mouseover!)
      overlay.onmouseout = element.onmouseover
      element.onmouseout = element.onmouseover // neu!
      element.onmouseover = null;
       // original-element merken
      overlay.linkedelement = element; 
      
      // Position setzen
      overlay._top = pageY + offset_y;
      overlay._left = pageX + offset_x;
      log1("Setze position: x="+(pageX + offset_x)+", y="+(0 + pageY + offset_y));
      overlay.style.top  = overlay._top + 'px';
      overlay.style.left = overlay._left + 'px';
      
   }
   if (ev.type == 'mouseout') {
	  if (toElement && (thisOrParent(toElement, overlay) || thisOrParent(toElement, overlay.linkedelement))) {
	  	log1('ignoriere mouseout!');
	  	return;
   	  }
   	  
      if (overlay.linkedelement) {
         element = overlay.linkedelement;
         overlay.linkedelement = null;
      } // else
        // alert('Kein linkedelement!');
      // element.title = overlay.innerHTML; // brauchen wir nicht mehr, dank overlayText
      overlay.innerHTML = "";
      overlay.style.display = "none";
      // event zurückübergeben
      element.onmouseover = overlay.onmouseout;
      element.onmouseout = overlay.onmouseout = null;
   }
}


// Node-Hierarchie nach oben durchsuchen, ob 'element' gefunden wird
function thisOrParent(toElement, element) {
	var node = toElement;
	while (node) {
		if (node == element)
			return true;
		node = node.parentNode;
	}
	return false;
}

/**
  findAreaImage:
  Bild zu einer Map-Area finden. Achtung: klappt nur, wenn eine Map nur von einem Bild benutzt wird!
  @param area: area-element-node 
 */
function findAreaImage(area) {
	var mapname = '#'+area.parentNode.name;
	var imgs = document.getElementsByTagName("IMG");
	for(var i = 0; i < imgs.length; i++) {
		//log1("Teste image: "+imgs[i]);
		if (imgs[i].useMap == mapname)
			return imgs[i];
	}
	// nichts gefunden
	log1("Kein Image gefunden zu mapname: "+mapname);
	return null;
}

/////////// Logging ////////////////

var log_window;

function log1(text) {
    var info = ''; // todo: date and time
	if (log_window)
		log_window.innerHTML += '<br>'+info+text+'\n';
}
function log2(text, ex) {
    var info = ''; // todo: date and time
	if (log_window) {
		log_window.innerHTML += '<br>'+info+text+'\n';
		if (ex.fileName)
			log_window.innerHTML += '<br>'+info+"Exception: "+ex.message+" ("+ex.fileName+":"+ex.lineNumber+")\n";
		else
			log_window.innerHTML += '<br>'+info+"Exception: "+ex.message+'\n';
	}
}

function dumpObject(obj) {
    log1("Objekt Dump: id="+obj.id+", nodeName="+obj.nodeName);
	for (var a in obj) {
		log1("Attribut "+a+"="+obj[a]);
	}
}

      
/***********************************************
* Ultimate Fade-In Slideshow (v1.51): © Dynamic Drive (http://www.dynamicdrive.com)
* This notice MUST stay intact for legal use
* Visit http://www.dynamicdrive.com/ for this script and 100s more.
***********************************************/
 
// ein paar Einstellungen für alle shows:
var fadebgcolor="white"
var slideshow_interval = 3000
var slideshow_border = 0
var slideshow_pause = 1
var slideshow_random = "R"
var transparent_gif = "transparent.gif" // Bitte angeben!


////NO need to edit beyond here/////////////
 
var fadearray=new Array() //array to cache fadeshow instances
var fadeclear=new Array() //array to cache corresponding clearinterval pointers
 
var dom=(document.getElementById) //modern dom browsers
var iebrowser=document.all
 
function fadeshow(id, theimages, fadewidth, fadeheight, borderwidth, delay, pause, displayorder, useMap){
	this.pausecheck=pause
	this.mouseovercheck=0
	this.delay=delay
	this.degree=10 //initial opacity degree (10%)
	this.curimageindex=0
	this.nextimageindex=1
	fadearray[fadearray.length]=this
	this.slideshowid=fadearray.length-1
	//this.slideshowid=id
	this.canvasbase="canvas"+this.slideshowid
	this.curcanvas=this.canvasbase+"_0"
	if (typeof displayorder!="undefined" && displayorder=="R")
	theimages.sort(function() {return 0.5 - Math.random();}) //thanks to Mike (aka Mwinter) :)
	this.theimages=theimages
	this.imageborder=parseInt(borderwidth)
	this.postimages=new Array() //preload images
	for (p=0;p<theimages.length;p++){
		this.postimages[p]=new Image()
		this.postimages[p].src=theimages[p][0]
		if (useMap) {
		  this.postimages[p].useMap=useMap
		}
	}

	var fadewidth=this.postimages[0].width+this.imageborder*2
	var fadeheight=this.postimages[0].height+this.imageborder*2
	
	// background-color:'+fadebgcolor+' waren auf beiden unteren divs
	if (iebrowser&&dom||dom) //if IE5+ or modern browsers (ie: Firefox) // overflow:hidden;
	  this.html = ('<div id="master'+this.slideshowid+'" style="position:relative;width:'+fadewidth+'px;height:'+fadeheight+'px;"><img border=0 src="'+transparent_gif+'" width='+fadewidth+' height='+fadeheight+'><div id="'+this.canvasbase+'_0" style="position:absolute;width:'+fadewidth+'px;height:'+fadeheight+'px;top:0;left:0;filter:progid:DXImageTransform.Microsoft.alpha(opacity=10);opacity:0.1;-moz-opacity:0.1;-khtml-opacity:0.1;"></div><div id="'+this.canvasbase+'_1" style="position:absolute;width:'+fadewidth+'px;height:'+fadeheight+'px;top:0;left:0;filter:progid:DXImageTransform.Microsoft.alpha(opacity=10);opacity:0.1;-moz-opacity:0.1;-khtml-opacity:0.1;"></div></div>')
	else
	  this.html = ('<div><img name="defaultslide'+this.slideshowid+'" src="'+this.postimages[0].src+'"></div>')
}

fadeshow.prototype.doStart=function(){
if (iebrowser&&dom||dom) //if IE5+ or modern browsers such as Firefox
    this.startit()
  else{
    this.curimageindex++
    setInterval("fadearray["+this.slideshowid+"].rotateimage()", this.delay)
  }
}

function fadepic(obj){
if (obj.degree<100){
obj.degree+=10
if (obj.tempobj.filters&&obj.tempobj.filters[0]){
if (typeof obj.tempobj.filters[0].opacity=="number") //if IE6+
obj.tempobj.filters[0].opacity=obj.degree
else //else if IE5.5-
obj.tempobj.style.filter="alpha(opacity="+obj.degree+")"
}
else if (obj.tempobj.style.MozOpacity)
obj.tempobj.style.MozOpacity=obj.degree/101
else if (obj.tempobj.style.KhtmlOpacity)
obj.tempobj.style.KhtmlOpacity=obj.degree/100
else if (obj.tempobj.style.opacity&&!obj.tempobj.filters)
obj.tempobj.style.opacity=obj.degree/101
}
else{
clearInterval(fadeclear[obj.slideshowid])
obj.nextcanvas=(obj.curcanvas==obj.canvasbase+"_0")? obj.canvasbase+"_0" : obj.canvasbase+"_1"
obj.tempobj=iebrowser? iebrowser[obj.nextcanvas] : document.getElementById(obj.nextcanvas)
obj.populateslide(obj.tempobj, obj.nextimageindex)
obj.nextimageindex=(obj.nextimageindex<obj.postimages.length-1)? obj.nextimageindex+1 : 0
setTimeout("fadearray["+obj.slideshowid+"].rotateimage()", obj.delay)
}
}
 
fadeshow.prototype.populateslide=function(picobj, picindex){
var slideHTML=""
if (this.theimages[picindex][1]!="") //if associated link exists for image
slideHTML='<a href="'+this.theimages[picindex][1]+'" target="'+this.theimages[picindex][2]+'">'
slideHTML+='<img src="'+this.postimages[picindex].src+'" border="'+this.imageborder+'px" useMap="'+this.postimages[picindex].useMap+'">'
if (this.theimages[picindex][1]!="") //if associated link exists for image
slideHTML+='</a>'
picobj.innerHTML=slideHTML
}
 
 
fadeshow.prototype.rotateimage=function(){
if (this.pausecheck==1) //if pause onMouseover enabled, cache object
var cacheobj=this
if (this.mouseovercheck==1)
setTimeout(function(){cacheobj.rotateimage()}, 100)
else if (iebrowser&&dom||dom){
this.resetit()
var crossobj=this.tempobj=iebrowser? iebrowser[this.curcanvas] : document.getElementById(this.curcanvas)
crossobj.style.zIndex++
fadeclear[this.slideshowid]=setInterval("fadepic(fadearray["+this.slideshowid+"])",50)
this.curcanvas=(this.curcanvas==this.canvasbase+"_0")? this.canvasbase+"_1" : this.canvasbase+"_0"
}
else{
var ns4imgobj=document.images['defaultslide'+this.slideshowid]
ns4imgobj.src=this.postimages[this.curimageindex].src
}
this.curimageindex=(this.curimageindex<this.postimages.length-1)? this.curimageindex+1 : 0
}
 
fadeshow.prototype.resetit=function(){
this.degree=10
var crossobj=iebrowser? iebrowser[this.curcanvas] : document.getElementById(this.curcanvas)
if (crossobj.filters&&crossobj.filters[0]){
if (typeof crossobj.filters[0].opacity=="number") //if IE6+
crossobj.filters(0).opacity=this.degree
else //else if IE5.5-
crossobj.style.filter="alpha(opacity="+this.degree+")"
}
else if (crossobj.style.MozOpacity)
crossobj.style.MozOpacity=this.degree/101
else if (crossobj.style.KhtmlOpacity)
crossobj.style.KhtmlOpacity=this.degree/100
else if (crossobj.style.opacity&&!crossobj.filters)
crossobj.style.opacity=this.degree/101
}
 
 
fadeshow.prototype.startit=function(){
var crossobj=iebrowser? iebrowser[this.curcanvas] : document.getElementById(this.curcanvas)
this.populateslide(crossobj, this.curimageindex)
if (this.pausecheck==1){ //IF SLIDESHOW SHOULD PAUSE ONMOUSEOVER
var cacheobj=this
var crossobjcontainer=iebrowser? iebrowser["master"+this.slideshowid] : document.getElementById("master"+this.slideshowid)
crossobjcontainer.onmouseover=function(){cacheobj.mouseovercheck=1}
crossobjcontainer.onmouseout=function(){cacheobj.mouseovercheck=0}
}
this.rotateimage()
}


// Reinhard:
function initSlideShows() {
	try {
		var items = document.getElementsByTagName("DIV");
		log1("div anzahl="+items.length)
		for(var i = 0; i < items.length; i++) {
			var item = items[i];
			//log1("Kandidat: "+item.title);
			if (item.id.indexOf("slideshow_") == 0) {
				var showname = item.id.substring(10)
				log1("Imagelist gefunden: "+item.id+", showname="+showname)
				
				var imagearray = new Array();
				var useMap = ''; 
				// Bildliste in bild-array umwandeln
				for (var j=0; j<item.childNodes.length; j++) {
					var child = item.childNodes[j]
					if (child.tagName == "IMG") {
						log1("Bild gefunden: "+child.src)
						imagearray[imagearray.length] = [child.src, child.title, ""]
					}
					if (child.title && child.title.indexOf("config_") == 0) {
						log1("Config gefunden: "+child.title)
						if (child.title.indexOf("config_interval=") == 0)
							slideshow_interval = child.title.substring(16)
						if (child.title.indexOf("config_random=") == 0)
							slideshow_random = child.title.substring(14)
						if (child.title.indexOf("config_pause=") == 0)
							slideshow_pause = child.title.substring(13)
					}
					if (child.useMap) {
						useMap = child.useMap;
						log1("Image Map gefunden: "+useMap);
					}
				}
				// Als Slideshow statt Platzhalter einblenden
				if (imagearray.length > 0) {
					// erstes Bild als Hintergrund
					log1("Hintergrund: "+imagearray[0][0])
					item.style.backgroundImage = "url("+imagearray[0][0]+")"
					log1("Aktiviere Slideshow: "+imagearray+", interval="+slideshow_interval+", random="+slideshow_random+", pause="+slideshow_pause+", useMap="+useMap)
					var obj = new fadeshow(showname,imagearray, item.width, item.height, slideshow_border, slideshow_interval, slideshow_pause, slideshow_random, useMap)
					item.id = "done_"+item.id
					item.innerHTML = obj.html
					obj.doStart()
				} else
					log1("*** Keine Bilder!")
			}
		}
	} catch(ex) {
		log2("catch", ex)
	}
}

//////////////////////// Ende Slideshow ///

function editorActive() {
    try {
       return setcontent; // diese funktion ist nur im editormodus definiert (javascript)
    } catch (ex) {}
    // alt: return (top.frames.length > 0)
}

function initDebugWindow() {
	if (log_window)
		return;
	var div = document.createElement("div")
	div.id = "log_window_id"
	div.style.display = "none"
	div.style.zIndex = 99999
	div.style.position = "absolute"
	div.style.top = 200
	div.style.left = 800
	div.style.width = 400;
	div.style.top = 20; 
	div.style.backgroundColor = "#F0F0F0"; 
	div.style.color = "#808080"; 
	div.style.fontSize = "8pt";
	div.innerHTML = "<u>Debug-Ausgabe:</u>";
	// einfügen
	document.body.appendChild(div)
	// zuweisen
	log_window = div
}

var onload_func_array = new Array()

/**
  "onload" als Liste verwalten: Hinzufügen
 */
function add_onload_function(myfunc) {
	onload_func_array[onload_func_array.length] = myfunc
}

function execute_onload_function_array() {
	for(var i = 0; i < onload_func_array.length; i++) {
		var func1 = onload_func_array[i]
		try {
		   	log1("Calling '"+func1+"'")
			eval(func1+"()")
		} catch (ex) {
			log2("Fehler", ex)
		}
	}
	// Leer machen
	onload_func_array = new Array()
}

window.onload = execute_onload_function_array

/**
  meine onloads:
 */
add_onload_function("initDebugWindow")
add_onload_function("page_customize")
add_onload_function("addAllOverlays")
// Klappt nicht, verwende stattdessen conzept_special:
//if (!editorActive())
//	add_onload_function("initSlideShows")

