




	
		
	
	


/*
 * Copyright (c) 2008 T-Systems Multimedia Solutions GmbH
 * Riesaer Str. 5, D-01129 Dresden, Germany
 * All rights reserved.
 *
 * Name:             %name:  feature_laufschrift.js %
 * Ersteller:        anw
 * Erstellungsdatum: Fri Jun 06 16:53:44 2008 
 * Erstellt:         %date_created:Thu Jun 19 14:44:06 2008 % durch %created_by:anw %
 * Version:          %version: 2 %
 */

/************************************************************************
*Funktion Laufschrift in der Statuszeile, genutzt nur auf der Startseite
************************************************************************/
var geschwindigkeit = 50;
var breite = 116;
var position = 1 - breite;

function statuslauftext()
{
position=position+1;
var FreiraumvorText="";

if (position == textlaenge)
{ 
  position = 1 - breite; 
}

if (position < 0)
{
  var i;
  for (i=1; i <= Math.abs(position); i++)
  { 
    FreiraumvorText = FreiraumvorText + " "; 
  }
  FreiraumvorText = FreiraumvorText + lauftext.substring(0, breite - i + 1);
} else 
  {
    FreiraumvorText = FreiraumvorText + lauftext.substring(position, breite + position);
  }

window.status = FreiraumvorText;
setTimeout("statuslauftext()",geschwindigkeit);
}
 // Allgmeine JS-Sourcen fuer alle Infolayer
// Flag, fuer Bestimmung, ob ein InfoLayer bereits aktiv ist 
var is_disableLayer_active = false;
/* Flag, fuer Bestimmung, ob bei gesetzter Mindestanzeigezeit
	  Layer wieder ausgeblendet werden kann, weil Verarbeitung abgeschlossen ist */
var is_processingEnded = true;
// Referenz-ID auf zeitgesteuerte Funktion 
var timeoutId = null;
// InfoLayer Objekt
var ilayer = null;


// Klasse fuer Koordinatenermittlung bei Klick-Events
var MouseClickObserver = Class.create({
	initialize : function(){
		this.positionX = -1;
		this.positionY = -1;
	},

	setPosition : function(posX, posY) {
		this.positionX = posX;
		this.positionY = posY;
		//info("PosX"+this.positionX+" PosY:"+this.positionY);
	},

	reset : function() {
		this.positionX = -1;
		this.positionY = -1;
	},

	getX : function() {
		return this.positionX;
	},

	getY : function() {
		return this.positionY;
	}
});

// Event fuer Ermittlung der Mouse-Koordinaten
var MouseCords = new MouseClickObserver();
// EventListener registrieren
//document.onmousedown = getCords;
function getCords(Ereignis) {
	if(!Ereignis)
	    Ereignis = window.event;
	MouseCords.setPosition(Ereignis.clientX, Ereignis.clientY);
}

var InfoLayer = Class.create({
	initialize : function() {
		this.coordsFrame = {absoluteTop: 0, absoluteBottom: 0, frameOffset: 0, shopFrameOffset: 0}; // Koordinaten des Shop-Frames
		this.layerSize = {height: 0, width: 0}; // Groesze der Thickbox
		this.isShopInFrame = false; // wird Shop in Frame angezeigt?
		this.coordYLayer = 0; // Y-Koordinate fuer InfoLayer
		this.isClickEvent = false; // true -> InfoLayer Anzeige nach Klick-Event
		this.LAYER_Y_OFFSET = 100; // Ausrichtung des Infolayers im sichtbaren Bereich, von Oben (in px)
		this.EVENT_LAYER_Y_OFFSET = 20; // Ausrichtung des Infolayers unter angeklicktes Feld (in px)
		this.isIE6 = this.determineIE6();
		this.useMouseCoords = true; // Steuerparameter, ob Mouse-Koordinaten fuer Layerpositionierung genutzt werden sollen
	},

	// Ermittelt, ob Browser IE 6 ist
	determineIE6 : function() {
		if(Prototype.Browser.IE) {
			if(typeof document.body.style.maxHeight === "undefined") //IE 6
				return true;
		} else {
			return false;
		}
	},

	// Ermittelt die Groesze der Thickbox
	determineLayerSize: function(elemId) {
		var ls = $(elemId).getDimensions();
		this.layerSize.width = ls.width;
		this.layerSize.height = ls.height;
	},

	// Mouse-Koordinaten auswerten?
	setUseMouseCoords : function(use) {
		this.useMouseCoords = use;
	},

	// Sichtbaren Bereich ermitteln
	// und absolute Position bestimmen
	determineVisibleArea : function() {
		var offsetY = 0; // Fensterstartposition
		var viewHeight = 0; // Hoehe des Anzeigebereichs

		if(Prototype.Browser.IE) {
			offsetY = document.documentElement.scrollTop;
			if(this.isIE6)
				this.coordYLayer = offsetY;
			viewHeight = document.documentElement.clientHeight;
		} else {
			offsetY = window.pageYOffset;
			viewHeight = window.innerHeight;
		}

		// Fenstermasze:
		this.coordsFrame.absoluteTop = offsetY;
		this.coordsFrame.absoluteBottom = eval(offsetY+viewHeight);
		this.coordsFrame.frameOffset = offsetY;

		// IFrame-Element ermitteln, in das der Shop eingebettet ist
		var iframe = this.getCurrentIFrameElement();
		if(iframe!="undefined") {
			this.isShopInFrame = true;
			//return;
		} else {
			this.isShopInFrame = false;
		}
	},

	// Setzt Y-Koordinate fuer InfoLayer,
	// wenn Click-Event ausgeloest wurde
	determinePositionForLayer : function() {
		var y = 0;
		if(this.useMouseCoords && MouseCords!=null && MouseCords.getY()>-1) {
			y = MouseCords.getY();
			if(this.isIE6) {// Achtung bei IE6 absolute Positionierung -> Offset beachten!
				this.coordYLayer = parseInt(y + this.EVENT_LAYER_Y_OFFSET + this.coordYLayer);
			} else
				this.coordYLayer = parseInt(y + this.EVENT_LAYER_Y_OFFSET);
			MouseCords.reset(); // zuruecksetzen
			this.isClickEvent=true;
		} else {
			this.isClickEvent=false; // fuer alle nicht über Nutzereingabe getriggerten Layer
		}

		// zuruecksetzen
		this.useMouseCoords = true;

		// Y-Koordinate neu setzen, wenn Anzeige der Thickbox
		// aus Fenster hinausgeht
		// Frame-Koordinaten muessen bereits ermittelt sein!
		if(this.coordsFrame.absoluteBottom==0) return;

		//notwendige Anzeigenhoehe ermitteln
		var h = eval(this.coordYLayer+this.layerSize.height);
		if(!this.isIE6)
			h = eval(h+this.coordsFrame.frameOffset);

		var frameBottom = this.coordsFrame.absoluteBottom;

		//info("Fenster ist kleiner als Thickbox:"+this.coordsFrame.absoluteBottom+"<"+h);
		if(frameBottom<h) {
			// Thickbox ist laenger als Fenster...
			var newY = eval(this.coordsFrame.absoluteBottom-this.layerSize.height-this.EVENT_LAYER_Y_OFFSET);

			if(this.coordsFrame.absoluteTop>newY) {
				// Infolayer ist zu grosz, also oben ausrichten
				if(this.isIE6) {
					this.coordYLayer = this.coordsFrame.absoluteTop;
				} else {
					this.coordYLayer = 0;
				}
			} else {
				if(this.isIE6) {
					this.coordYLayer = newY;
				} else {
					this.coordYLayer = eval(newY-this.coordsFrame.absoluteTop);
				}
			}
		}

	},

	// Liefert, das uebergeordnete IFrame-Element
	// zurueck, indem der Shop eingebettet ist.
	getCurrentIFrameElement : function() {
		try {
			if(Prototype.Browser.IE) {
				offsetY = top.document.documentElement.scrollTop;
			} else {
				offsetY = top.pageYOffset;
			}
		} catch(e) {
			// Exception: Shop ist in IFrame
			// aber Javascript origin policy erlaubt keine Zugriff auf ueber-
			// geordnete Seite
			return "ShopIsInIFrame";
		}

		try {
			var url = document.location.href;
			var tmpName = "ekiShopFrame";
			var elems = top.document.getElementsByTagName('iframe');

			// URL fuer Vergleich aufbereiten
			url = url.substring(0,url.lastIndexOf('/'));
			for (var i = 0; i < elems.length; i++) {
				var iframeUrl = elems[i].src.substring(0,elems[i].src.lastIndexOf('/'));
				//info("URL Vergleich: '"+iframeUrl+"'=='"+url+"'");
	  			if(iframeUrl==url) {
		  			var nameId = this.getAttributeValue(elems[i], "id");
		  			// wenn bei IE6 'id' nicht gesetzt, wird Leerstring anstatt null zurueckgeliefert!
		  			if(nameId==null || nameId=="") {
		  				elems[i].setAttribute("id", tmpName);
		  				nameId = tmpName;
		  			}
	  				return top.document.getElementById(nameId);
		  		}
			}
			return "undefined";
		} catch(e) {
			//info("Exception beim Ermitteln des IFrames: "+e);
			return "undefined";
		}
	},

	// Liefert Attribute-Value zurück
	getAttributeValue : function(elem, attrName) {
		var nodelist = elem.attributes;
		var ret = null;
		for (var i = 0; i < nodelist.length; i++) {
			// IE6 ermittelt faelschlicherweise zu viel Elemente
			// -> alle am Element moeglichen Attribute ->
			// wenn id nicht gesetzt ist -> Leerstring
			if(nodelist[i].nodeName==attrName) {
				ret = nodelist[i].nodeValue;
			}
		}
		return ret;
	},

	// Zeigt die Modalbox an
	tb_show : function(elemId) {
		var modal = true;
		this.toggleFlash('hide');
		try {
			if (this.isIE6) {//if IE 6
				$$("body")[0].setStyle({height: '100%', width: '100%'});
		        $$("html")[0].setStyle({height: '100%', width: '100%', overflow: 'hidden'});
				if (document.getElementById("layerHideSelect") === null) {//iframe to hide select elements in ie6
					$(document.body).insert("<iframe id='layerHideSelect' src='javascript:false;'><\/iframe><div id='layerOverlay'><\/div><div id='layerWindow'><\/div>");
					$('layerOverlay').observe('click', this.tb_remove);
				}
			}else{//all others
				if(document.getElementById("layerOverlay") === null){
					$(document.body).insert("<div id='layerOverlay'><\/div><div id='layerWindow'><\/div>");
					$('layerOverlay').observe('click', this.tb_remove);
				}
			}

			if(this.tb_detectMacXFF()){
				$('layerOverlay').addClassName("layerOverlayMacFFBGHack");//use png overlay so hide flash
			}else{
				$('layerOverlay').addClassName("layerOverlayBG");//use background and opacity
			}

			// Groesze der Thickbox ermitteln
			this.determineLayerSize(elemId);
			if(!$('layerAjaxContent')){
				$('layerOverlay').stopObserving('click', this.tb_remove);
				$('layerWindow').insert("<div id='layerAjaxContent' class='layerModal' style='width:"+this.layerSize.width+"px !important;height:"+this.layerSize.height+"px !important;'><\/div>");
			}

			var text = $(elemId).innerHTML;

			if(Prototype.Browser.IE) {
				// Kommentarzeichen aus eventuell vorh. JavaScript-Tags entfernen,
				// sonst wirft 'evalScripts' Fehler im IE
				text = text.gsub(/<!--([\S\s]*?)\/\/ ?-->/im, '#{1}');
			}
			$('layerAjaxContent').insert(text);

			this.tb_position();
			$('layerWindow').setStyle({display: 'block'});

			if(!modal){
				document.onkeyup = function(e){
					if (e == null) { // ie
						keycode = event.keyCode;
					} else { // mozilla
						keycode = e.which;
					}
					if(keycode == 27){ // close
						this.tb_remove();
					}
				};
			}
		} catch(e) {
			//info("Exception bei Anzeigen der Modalbox :"+e);
		}
	},
	
	// erneuert ein element innerhalb von elemId
	tb_update : function(elemId, updateElemId) {
			
		try {
						
			var text = $(updateElemId).innerHTML;
			
			if(Prototype.Browser.IE) {
				// Kommentarzeichen aus eventuell vorh. JavaScript-Tags entfernen,
				// sonst wirft 'evalScripts' Fehler im IE   
				text = text.gsub(/<!--([\S\s]*?)\/\/ ?-->/im, '#{1}'); 
			}
			
			var arr = $('layerAjaxContent').descendants();
			   
			arr.each(function(node){
			    if( node.identify() == updateElemId)
			    {	
			    	node.update();		    	
			    	node.insert(text);
			    }
			});
			
			// Größe der Thickbox ermitteln
			this.determineLayerSize(elemId);
			if($('layerAjaxContent'))
			{					
				$('layerAjaxContent').setStyle({
					width: this.layerSize.width+'px',
					height: this.layerSize.height+'px'
					});
			}
									
		} catch(e) {
			//info("Exception bei Anzeigen der Modalbox :"+e);
		}
	},

	// InfoLayer wieder ausblenden
	tb_remove : function() {
		this.toggleFlash('show');
		if($('layerHideSelect')) {$('layerHideSelect').remove();}
		if($('layerWindow')) {$('layerWindow').remove();}
		if($('layerOverlay')) {$('layerOverlay').remove();}
		if (this.isIE6) { //if IE 6
			$$("body")[0].setStyle({height: 'auto', width: 'auto'});
	    	$$("html")[0].setStyle({height: 'auto', width: 'auto', overflow: ''});
		}
		document.onkeydown = "";
		document.onkeyup = "";
		return false;
	},

	tb_position : function() {
		// Koordinaten ermitteln
		this.determineVisibleArea();
		this.determinePositionForLayer();

		$('layerWindow').setStyle({marginLeft: '-' + parseInt((this.layerSize.width / 2),10) + 'px', width: this.layerSize.width + 'px'});
		if(!this.isClickEvent) { // kein durch Nutzer ausgeloestes Event
			if(this.isShopInFrame) {
				$('layerWindow').setStyle({top: parseInt(this.coordsFrame.frameOffset+this.LAYER_Y_OFFSET) + 'px'});
			} else {
				$('layerWindow').setStyle({marginTop: '-' + parseInt((this.layerSize.height / 2),10) + 'px'}); // mittig Positionieren
			}
		} else { // bei Klick-Event
			$('layerWindow').setStyle({top: this.coordYLayer + 'px'});
		}

		//Hinweis IE 6: marginTop ist durch Style Angabe in "html layerWindow" gesetzt
		if(this.isIE6) {
			if(!this.isClickEvent && !this.isShopInFrame) {
				$('layerWindow').setStyle({marginTop: parseInt(this.coordsFrame.absoluteTop) + 'px'});
			} else {
				$('layerWindow').setStyle({marginTop: '-1px'});
			}
		}
	},

	tb_detectMacXFF : function() {
  		var userAgent = navigator.userAgent.toLowerCase();
  		if (userAgent.indexOf('mac') != -1 && userAgent.indexOf('firefox')!=-1) {
    		return true;
  		}
	},

	toggleFlash : function(state) {
		//show|hide object tag, da Flash sonst Layer ueberdeckt(wmode verursacht Probleme)
		var objects = $A(document.getElementsByTagName("object"));
		objects.each(function(o){o.style.visibility = (state == "hide") ? 'hidden' : 'visible';});

		//show|hide embed tag, da Flash sonst Layer ueberdeckt(wmode verursacht Probleme)
		var embeds = $A(document.getElementsByTagName("embed"));
		embeds.each(function(e){e.style.visibility = (state == "hide") ? 'hidden' : 'visible';});
	}

});

var initInfoLayer = function() {
	ilayer = new InfoLayer();
}

// InfoLayer-Objekt erzeugen
Event.observe(window, 'load', initInfoLayer);

// Infolayer und Sperrlayer einblenden
function showInfoLayer(layerId) {
	if(ilayer==null) 
		initInfoLayer();
			
	if(!is_disableLayer_active) {
		is_disableLayer_active = true;

		if($(layerId))
			ilayer.tb_show(layerId);
	}
}

// Infolayer und Sperrlayer einblenden
// und zeitgesteuertes Ausblenden starten
// unter Beachtung der Mindestanzeigezeit
function showInfoLayer2(layerId, timeDisableLayer, isMinDisplayDuration) {
	if(!is_disableLayer_active && $(layerId)) {
		if(ilayer==null) 
			initInfoLayer();

		ilayer.setUseMouseCoords(false);
		if(isMinDisplayDuration) {
			is_processingEnded = false;
		}	
		showInfoLayer(layerId);
		timeoutId = setTimeout("closeTimedInfoLayer('"+layerId+"', true)", eval(timeDisableLayer));
	}
}

// Muss vom AjaxResponse gerufen werden,
// um den eingeblendeten Layer mitzuteilen,
// dass er ausgeblendet werden kann. 
function setProcessingEnded() {
	is_processingEnded = true;
}

// Fkt zum Schließen des Infolayers, mit 
// Beachtung aktivierter Mindestanzeigezeit
// Param 1: Layer der geschlossen wird
// Param 2: vom Timer gerufen (true / false) 
function closeTimedInfoLayer(layerId, callbyTimer) {
	// wenn Prozessabarbeitung noch nicht beendet
	// Layer nicht schließen
	if(!is_processingEnded && callbyTimer) {
		timeoutId = null;
		return;
	}	

	// wenn Prozessabarbeitung beendet
	// und Mindestanzeigezeit ist beendet Layer schliessen
	if(is_processingEnded && callbyTimer) {
		closeInfoLayer(layerId);
		return;
	} 	
	
	// Prozessabarbeitung nach Ablauf des Timers 
	// beendet - Layer schliessen
	if(is_processingEnded && !callbyTimer && timeoutId == null) {
		closeInfoLayer(layerId);
	}
} 

// Fkt zum Schliessen des Infolayers
function closeInfoLayer(layerId) {
	if(is_disableLayer_active) {
		ilayer.tb_remove();

		is_disableLayer_active = false;
		is_processingEnded = true;
		clearTimeout(timeoutId);
		timeoutId = null;
	}
	// CSS fuer Druck entfernen, wenn vorhanden
	removePrintStyle();
}

// Druckfunktion fuer InfoLayer-Inhalte
function printLayerContent() {
	//spezielles Print-CSS fuer Druck der InfoLayer laden
	//wenn noch nicht vorhanden
	if(!$('layerStyleSheet')) {
		// Seiten-Header ermitteln
		var header = document.getElementsByTagName('head')[0];

		// Verweis auf CSS generieren und einfuegen
		var elem = document.createElement("link");
		var attr = document.createAttribute("id");
		attr.nodeValue = "layerStyleSheet";
		elem.setAttributeNode(attr);

		attr = document.createAttribute("rel");
		attr.nodeValue = "stylesheet";
		elem.setAttributeNode(attr);

		attr = document.createAttribute("type");
		attr.nodeValue = "text/css";
		elem.setAttributeNode(attr);

		attr = document.createAttribute("media");
		attr.nodeValue = "print";
		elem.setAttributeNode(attr);

		attr = document.createAttribute("href");
		attr.nodeValue = static_content_root+"css/default/global/global_printLayer.css";
		elem.setAttributeNode(attr);

		header.appendChild(elem);
	}
	// Printdialog starten
	window.print();
}

// Entfernen des Print-CSS fuer die Druckdarstellung
function removePrintStyle() {
	if($('layerStyleSheet'))
		$('layerStyleSheet').remove();
}

var myConsole = window.console;

/**
 * Debuginfos ausgeben
 */
function info(message){
	if (myConsole != null){
		myConsole.info(message);
	} else {
		//alert(message);
	}
}

