﻿﻿///////////////////////// NAMENSRAUM DORTMUND.DE //////////////////////////////////////////
var dode = {
	init : function () { 
		dode.domLoad.init();
		if (typeof dode.mainfunc.setPageInit != undefined) { dode.domLoad.registerOnLoad(dode.mainfunc.setPageInit.init); }
		if (window.name === dode.pagevar.windowNamePrint) {
			if (typeof dode.mainfunc.print != undefined) { dode.domLoad.registerOnLoad(dode.mainfunc.print.init); }
		} else {
			if (typeof dode.mainfunc.textServices != undefined) { dode.domLoad.registerOnLoad(dode.mainfunc.textServices.init); }
			if (typeof dode.mainfunc.klippklapp != undefined) { dode.domLoad.registerOnLoad(dode.mainfunc.klippklapp.init); }
			//if (typeof dode.mainfunc.drehscheibe != undefined) { dode.domLoad.registerOnLoad(dode.mainfunc.drehscheibe.init); }
			if (typeof drehscheibe != undefined) dode.domLoad.registerOnLoad(startDrehscheibe);
		}
	},
	pagevar : {},
	newevent : {},
	ajax : {},
	css : {},
	util : {},
	domLoad : {},
	mainfunc : {}
};
////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////// Definition Seitenvariablen /////////////////////////////////////////
dode.pagevar = {
	// Scriptvariablen
	windowNamePrint : "printWindow"
},

dode.pagevar.lang = {
// Sprachvariablen
bild : "Bild",
schliessen : "Schließen",
blaetternLinks : "Weiter blättern",
blaetternRechts : "Zurück blättern",
preTextIcon : "Symbol",
serviceElementDrucken : "drucken",
serviceElementLesezeichen : "Lesezeichen",
serviceElementZurueck : "zurück",
bildVorAktiv : "Ein Bild weiter",
bildVorInAktiv : "Weiterblättern nicht möglich",
bildZurueckAktiv : "Ein Bild zurück",
bildZurueckInAktiv : "Zurückblättern nicht möglich",
bildNichtVorhanden : "Kein weiteres Bild vorhanden.",
bildLadeFehler : "Fehler: Das nächste Bild konnte nicht geladen werden.",
bildKeineBu : "Keine Bildunterschrift zu diesem Bild.",
bildDiashowStart : "Diashow starten",
bildDiashowStop : "Diashow stoppen",
geoCodingErrorAusserhalb : "Markierung ist außerhalb des Stadtgebiets",
geoCodingErrorNichtGefunden : "Nicht gefunden im Dortmunder Stadtgebiet.",
geoCodingSucheDefault : "Suchhilfe: Straße, Stadtteil etc.",
hauptmenueTextShow : "dortmund.de-Hauptmenü ausblenden",
hauptmenueTextHide : "dortmund.de-Hauptmenü einblenden",
kalenderMonate : ["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],
kalenderTage : ["Mo","Di","Mi","Do","Fr","Sa","So"],
kalenderblattAlt : "Kalenderblatt",
panoramaKeineBu : "Keine Bildunterschrift zu diesem Bild."
},

﻿////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////// START EVENTVERARBEITUNG //////////////////////////////////////
dode.newevent = {
	getEventTarget : function (e) {
		var eventTarget = null;
		if (!e) { var e = window.event; }
		if (e.target) { eventTarget = e.target; }
		else if (e.srcElement) { eventTarget = e.srcElement; }
		if (eventTarget.nodeType == 3) {
			eventTarget = eventTarget.parentNode;
		}
		return eventTarget;
	},
	preventDefaultEvent : function (e) {
		if (!e) e = window.event;
		if (e.preventDefault) {
			e.preventDefault();
		} else {
			e.returnValue = false;
		}
	},
	addEvent : function (obj, evType, fn, useCapture) {
		if (!useCapture) { useCapture = false;}
		if (obj.addEventListener) {
			obj.addEventListener(evType, fn, useCapture);
		} else {
			if (useCapture) {
				alert('"Event-Capturering" wird von diesem Browser nicht unterstützt');
			} else {
				var evTypeRef = '__' + evType;
				if (obj[evTypeRef]) {
					if (dode.newevent.array_search(fn, obj[evTypeRef]) > -1) return;
				} else {
					obj[evTypeRef] = [];
					if (obj['on'+evType]) { obj[evTypeRef][0] = obj['on'+evType];}
					obj['on'+evType] = dode.newevent.IEEventHandler;
				}
				obj[evTypeRef][obj[evTypeRef].length] = fn;
			}
		}
	},
	
	removeEvent : function (obj, evType, fn, useCapture) {
		if (!useCapture) { useCapture = false;}
		if (obj.removeEventListener) {
			obj.removeEventListener(evType, fn, useCapture);
		} else {
			var evTypeRef = '__' + evType;
			if (obj[evTypeRef])	{
				var i = dode.newevent.array_search(fn, obj[evTypeRef]);
				if (i > -1)	{
					try	{
						// delete obj[evTypeRef][i];
						// Update 24.02.10
						obj[evTypeRef].splice(i,1);
					} catch(e) {
						obj[evTypeRef][i] = null;
					}
				}
			}
		}
	},
	
	IEEventHandler : function (e) {
		e = e || window.event;
		var evTypeRef = '__' + e.type, retValue = true;
		for (var i = 0, j = this[evTypeRef].length; i < j; i++)	{
			if (this[evTypeRef][i])	{
				if (Function.call) {
					retValue = this[evTypeRef][i].call(this, e) && retValue;
				} else {
					//-- IE 5.0 doesn't support call or apply, so use this
					this.__fn = this[evTypeRef][i];
					retValue = this.__fn(e) && retValue;
				}
			}
		}
		if (this.__fn) try { delete this.__fn; } catch(e) { this.__fn = null; }
		return retValue;
	},
	
	array_search : function (val, arr) {
		var i = arr.length;
		while (i--) {
			if (arr[i] && arr[i] === val) break;
		}
		return i;
	}
	
};
///////////////////////////// ENDE EVENTVERARBEITUNG ///////////////////////////////////////

///////////////////////////// START CSS-FUNKTIONEN /////////////////////////////////////////
dode.css = {
	addCssClass : function(obj,cssClass) {
		var allCssClass = dode.css.getCssClass(obj);
		if (!cssClass || !obj) {
			return false;
		}
		if (cssClass.match(/^\s+$/)) {
			return false;
		}
		/* Update 17.02.2010 */
		if (dode.css.hasCssClass(obj,cssClass)) { return false; }
		if (allCssClass == null || allCssClass == "" || allCssClass.match(/^\s+$/)) {
			obj.className = cssClass;
		} else {
			allCssClass = allCssClass.replace(/^\s+/, "");
			allCssClass = allCssClass.replace(/\s+$/, "");
			cssClass = cssClass.replace(/^\s+/, "");
			cssClass = cssClass.replace(/\s+$/, "");
			obj.className = allCssClass.concat(" "+cssClass);
		}
		return true;
	},
	deleteCssClass : function(obj,cssClass) {
		if (!obj || !cssClass) {return false;}
		if (!dode.css.hasCssClass(obj,cssClass)) {return false;}
		var allCssClass = dode.css.getCssClass(obj);
		//var reg=new RegExp(cssClass);
		var reg=new RegExp("\\b"+cssClass+"\\b");
		var allCssClassChange=allCssClass.replace(reg,"");
		if (allCssClass != allCssClassChange) {
			obj.className=allCssClassChange;
		}
		return true;
	},
	/* Update 15.01.2009 */
	hasCssClass : function(obj,cssClass) {
		// var allCssClass = this.getCssClass(obj);
		var allCssClass = dode.css.getCssClass(obj);
		if (!obj || !cssClass || !allCssClass || cssClass.match(/^\s+$/) || allCssClass.match(/^\s+$/)) {return false;}
		var check = "\\b"+cssClass+"\\b";
		var reg=new RegExp(check);
		if (allCssClass.match(reg) != null) {
			return true;
		} else {
			return false;
		}
	},
	getCssClass : function(obj) {
		if (!obj) {return false;}
		var out="";
		if(typeof obj !== "undefined") {
			out = obj.className;
		}
		return out;
	},
	getCssAttribute : function (element,styleAttribut) {
		// element -> ID oder Objekt
		if(!element||!styleAttribut) {alert("Kein Element oder Style angegeben!");return false;}
		var checkObj=false;
		if(typeof(element)=="object") {
			obj=element;
		} else if(document.getElementById(element)) {
			obj=document.getElementById(element);
		} else {
			alert("NIX: "+element);
			return false;
		}
		var outInfo = false;
		if(obj.style&&obj.style[styleAttribut]){
			// Gibt es einen inline-Style?
			// Wenn ja, dann auch das Attribut?
			outInfo=obj.style[styleAttribut];
		} else {
			// Anscheinend nicht. Dann den aus der CSS-Datei holen
			if (window.getComputedStyle) {
				objStyle = window.getComputedStyle(obj,null);
				outInfo=objStyle[styleAttribut];
			} else if (document.body.currentStyle) {
				objStyle = obj.currentStyle;
				outInfo=objStyle[styleAttribut];
			} else {
				alert("Kein Style vorhanden");
				return false;
			}
		}
		return outInfo;
	}
};
///////////////////////////// ENDE CSS-FUNKTIONEN //////////////////////////////////////////
///////////////////////////// Start FORM-FUNKTIONEN /////////////////////////////////////////
dode.form = {
	inputLength : function (inputObjectId,outputObjectId,maxLength,countDown) {
		var countDirection = 0; // 0 -> hochzählen, 1 -> runterzählen, var countDown optional
		if (countDown) {countDirection = 1;}
		var maxLength = maxLength; 
		var inputObject = document.getElementById(inputObjectId); // Welches Objekt soll überwacht werden?
		var outputOutput = document.getElementById(outputObjectId); // In welches Objekt solle die Anzahl der Zeichen geschrieben werden?
		
		var setData = function (o) {
			var fieldContent = o.value;
			var fieldContentLength = fieldContent.length;
			var os = outputOutput.firstChild.length;
			outputOutput.firstChild.deleteData(0,os);
			if (fieldContentLength > maxLength) {
				dode.css.addCssClass(outputOutput,"error");
			} else {
				if (dode.css.hasCssClass(outputOutput,"error")) {
					dode.css.deleteCssClass(outputOutput,"error")
				}
			}
			if (countDirection == 1) {fieldContentLength = maxLength - fieldContentLength;}
			outputOutput.firstChild.insertData(0,fieldContentLength);
			return true;
		};
		
		var count = function (e) {
			setData(this);
			return true;
		};
		
		var paste = function (e) {
			var object = this;
			window.setTimeout(function(){setData(object);},200);
			return true;
		};
		
		var setListener = function (o) {
			if (o) {
				dode.newevent.addEvent(o,"keyup",count);
				dode.newevent.addEvent(o,"paste",paste);
			}
			return true;
		};
		
		setData(inputObject);
		setListener(inputObject);
		
		var backObj = {
			getMaxLength : function () {
				return(maxLength);
			}
		};
		return backObj;
	}
};
///////////////////////////// ENDE FORM-FUNKTIONEN ////////////////////////////////////////

///////////////////////////// START UTIL-FUNKTIONEN ////////////////////////////////////////////
dode.util = {
	deleteAllNodes : function (obj) {
		// obj -> HTML Objekt
		var flag = 0;
		var status = false;
		if (obj.hasChildNodes()) {
			flag = 1;
			for (var i = 0;i < obj.childNodes.length; i++) {
				var knotenneu = obj.childNodes[i];
				var returnFlag = this.deleteAllNodes(knotenneu);
				if (returnFlag === 1) {
					status = true;
				}
			}
		}
		if (status === true) {
			var prevNode = obj;
			var i2 = prevNode.childNodes.length-1;
			for (i2; i2 >= 0; i2--) {
				var exNode = prevNode.removeChild(prevNode.childNodes[i2]);
			}
		}
		return flag;
	},
	
	stringToDom : function (node,htmlTagString) {
		if (typeof node !== "object") { return false; }
		if (typeof htmlTagString !== "string") { return false; }
		var pattern = /<(\w+)(?:\s+)?((?:[a-zA-Z]+\s?=\s?(?:"(?:\\.|[^\\"])*"|'(?:\\.|[^\\'])*')\s?)+)?>(.*?)<\/\1>/i;
		var ergebnis = pattern.exec(htmlTagString);
		if (ergebnis) {
			var startPositionTagString = htmlTagString.indexOf(ergebnis[0]);
			var tagLength = ergebnis[0].length;
			var htmlTagLength = htmlTagString.length;
			if (startPositionTagString > 0) {
				var teilTextString = htmlTagString.slice(0,startPositionTagString);
				dode.util.makeNewSingleLine (node,teilTextString);
			}
			var newNodeContent = ergebnis[3];
			var attributes = null;
			if (ergebnis[2]) {
				attributes = ergebnis[2];
			}
			var newElementNode = dode.util.makeNewHtmlElement(ergebnis[1],attributes);
			var backNode = dode.util.stringToDom(newElementNode,newNodeContent);
			node.appendChild(backNode);
			htmlTagString = htmlTagString.slice((startPositionTagString+tagLength),htmlTagLength);
			dode.util.stringToDom(node,htmlTagString);
			
		} else {
			var teilTextString = htmlTagString;
			dode.util.makeNewSingleLine (node,teilTextString);
		}
		return node;
	},
	
	makeNewSingleLine : function (node,htmlText) {
		if (typeof node !== "object") { return false; }
		if (typeof htmlText !== "string") { return false; }
		var pattern = /<(\w+)(?:\s+)?((?:[a-zA-Z]+\s?=\s?("(?:\\.|[^\\"])*"|'(?:\\.|[^\\'])*')\s?)+)?\/?>/i;
		var ergebnis = pattern.exec(htmlText);
		if (!ergebnis) {
			var newTextNode = document.createTextNode(htmlText);
			node.appendChild(newTextNode);
		} else {
			var startIndexTag = htmlText.indexOf(ergebnis[0]);
			var teilTextString = htmlText.slice(0,startIndexTag);
			var newTextNode = document.createTextNode(teilTextString);
			node.appendChild(newTextNode);
			var attributes = null;
			if (ergebnis[2]) {
				attributes = ergebnis[2];
			}
			var newElementNode = dode.util.makeNewHtmlElement(ergebnis[1],attributes);
			node.appendChild(newElementNode);
			htmlText = htmlText.slice((startIndexTag+ergebnis[0].length),htmlText.length);
			if (htmlText.length > 0) {
				dode.util.makeNewSingleLine (node,htmlText);
			}
		}
		return true;
	},
	
	makeNewHtmlElement : function (tagName,tagAttributes) {
		if (typeof tagName !== "string") { return false; }
		if (navigator.appName === "Microsoft Internet Explorer" && tagName === "input") {
			var newHtmlElement = document.createElement("<input "+tagAttributes+" >");
		} else {
			var suchmuster = /(\w+)=((?:'(?:(?:\\.|[^\\'])*)')|(?:"(?:(?:\\.|[^\\"])*)"))/gi;
			var newHtmlElement = document.createElement(tagName);
			if (tagAttributes) {
				if (typeof tagAttributes !== "string") { return false; }
				while (ergebnis = suchmuster.exec(tagAttributes)) {
					if (ergebnis[1] === "style" && navigator.appName === "Microsoft Internet Explorer") {
						var styleAttrib = ergebnis[2].slice(1,(ergebnis[2].length-1));
						var splitSingleAttrib = styleAttrib.split(";");
						for (var xCount = 0; xCount < splitSingleAttrib.length; xCount++) {
							if (splitSingleAttrib[xCount] !== "") {
								var splitDetail = splitSingleAttrib[xCount].split(":");
								if (splitDetail.length === 2) {
									var attrib = splitDetail[0].toLowerCase();
									var splitAttrib = attrib.split("-");
									if (splitAttrib.length > 1) {
										attrib = splitAttrib[0];
										for (var yCount = 1; yCount < splitAttrib.length; yCount++) {
											attrib += splitAttrib[yCount].charAt(0).toUpperCase()+splitAttrib[yCount].substr(1,splitAttrib[yCount].length);
										}
									}
									newHtmlElement.style[attrib] = splitDetail[1];
								}
							}
						}
					} else {
						var newAttribute = document.createAttribute(ergebnis[1]);
						newAttribute.nodeValue = ergebnis[2].slice(1,(ergebnis[2].length-1));
						try {
							newHtmlElement.setAttributeNode(newAttribute);
						} catch (e) {
							// Abfangen von Attribut-Fehlern
						}						
					}
				}
			}
		}
		return newHtmlElement;
	},
	
	getPositionValues : function (element,attributeType) {
		// Rückgabewerte in Pixel oder em
		var positionInfo = [];
		// positionInfo[0] = numerischer Wert
		// positionInfo[1] = Einheit -> Pixel oder em
		if (typeof element !== "object") { return false; }
		if (typeof attributeType !== "string") { return false; }
		var elementPosition = dode.css.getCssAttribute(element,attributeType);
		var pattern = /^([\d\.]+)(em|px)?/;
		var ergebnis = pattern.exec(elementPosition);
		if (ergebnis === null) { return false; }
		positionInfo[0] = ergebnis[1];
		positionInfo[1] = ergebnis[2];
		if (!positionInfo[2]) {
			positionInfo[2] = "px";
		}
		return positionInfo;
	},
	
	runOnNodes : function (obj,filter,wert) {
		var isFilter = false;
		if (typeof filter === 'function' || typeof filter === 'object' && typeof wert != 'undefined') {
			isFilter = true;
		}
		if (typeof obj === 'undefined' || !obj.nodeType ) { return false; }
		var arrayOut = [];
		var runNodes = function (nodeObj,filter,wert) {
			if (nodeObj.hasChildNodes) {
				for (var i = 0; i < nodeObj.childNodes.length; i++) {
					if (isFilter && filter(nodeObj.childNodes[i],wert)) {
						arrayOut[arrayOut.length] = nodeObj.childNodes[i];
					} 
					if (!isFilter) {
						arrayOut[arrayOut.length] = nodeObj.childNodes[i];
					}
					runNodes(nodeObj.childNodes[i],filter,wert);
				}
			} else {
				return true;
			}		
		}
		runNodes(obj,filter,wert);
		return arrayOut;
	},
	
	parseQuery : function (query) {
		if (typeof query != "string") { return false; }
		query = query.replace(/&amp;/g, "&");
		var queryOut = "";
		var itemGroup = query.split("&");
		for (var i = 0; i < itemGroup.length; i++) {
			var item = itemGroup[i].split("=");
			if (item.length === 2) {
				queryOut = queryOut+"&"+item[0]+"="+escape(item[1]);
			} else if (item.length === 1) {
				queryOut = queryOut+"&"+item[0];
			} else {
				queryOut = queryOut+"&"+itemGroup[i];
			}
		}
		queryOut = queryOut.replace(/^&+/g, "");
		return queryOut;
	},
	
	fade : function (direction,node,time,step,max) {
		var setStart = 100;
		if (direction === 1) { setStart = 0;}
		var newFadeObj = {
			direction : direction,
			node : node,
			time : time,
			stepB : step/10,
			max : max,
			start : setStart,
			startB : setStart/10,
			init : function () {
				newFadeObj.node.style.zoom = 1; // Für den IE. Sonst ist nix mit opacity!
				newFadeObj.move();
			},
			move : function () {
				actualStep = newFadeObj.startB/10;
				newFadeObj.node.style.MozOpacity = actualStep;
				newFadeObj.node.style.KHTMLOpacity = actualStep;
				newFadeObj.node.style.WEBKITOpacity = actualStep;
				newFadeObj.node.style.opacity = actualStep;
				node.style.filter = "alpha(opacity="+newFadeObj.startB*10+")"; // anderer Faktor
				if (newFadeObj.direction === 1) {
					if (newFadeObj.startB < 10) {window.setTimeout(newFadeObj.move,newFadeObj.time);}
					newFadeObj.startB = newFadeObj.startB + newFadeObj.stepB;
				} else {
					if (newFadeObj.startB > 0) {window.setTimeout(newFadeObj.move,newFadeObj.time);}
					newFadeObj.startB = newFadeObj.startB - newFadeObj.stepB;
				}
			}
		};
		newFadeObj.init();
		return newFadeObj;
	}	
};
///////////////////////////// ENDE UTIL-FUNKTIONEN /////////////////////////////////////////////

///////////////////////////// START DOM-LOAD	////////////////////////////////////////////////
dode.domLoad = {
	init : function () {
		var ranOnload=false;
		if (document.addEventListener) {
			document.addEventListener("DOMContentLoaded", function(){if (!ranOnload) {ranOnload=true; dode.domLoad.startStack();}}, false);
		}  else if (document.all && !window.opera) {
			document.write("<scr" + "ipt id='DOMReady' defer=true " + "src=//:><\/scr" + "ipt>");  
			document.getElementById("DOMReady").onreadystatechange=function() {
				if (this.readyState=="complete"&&(!ranOnload)) {
					ranOnload=true;
					dode.domLoad.startStack();
				}
			}
		}
		var orgOnLoad=window.onload;
		window.onload=function() {
			if (typeof(orgOnLoad)=='function') {
				orgOnLoad();
			}
			if (!ranOnload) {
				ranOnload=true;
				dode.domLoad.startStack();
			}
		}
	},
	startStack : function() { },
	registerOnLoad : function (func) {
		var orgOnLoad = dode.domLoad.startStack;
		dode.domLoad.startStack = function () {
			orgOnLoad();
			func();
			return;
		}
	}
};
///////////////////////////// ENDE DOM-LOAD //////////////////////////////////////////////////

///////////////////// KlippKlapp ///////////////////////////
// Update 28.10.2009
dode.mainfunc.klippklapp = {
	init : function () {
		// Nur "div" Elemente dürfen KlippKlapp sein
		if (!document.getElementsByTagName("div")) return false;
		if (typeof dode.css === 'undefined') return false;
		
		var klippKlappBox = [];
		
		var setBoxes = function () {
			getAllBoxes = document.getElementsByTagName("div");
			countBox=0;
			for (var i=0; i < getAllBoxes.length; i++) {
				actualBox = getAllBoxes[i];
				nodeAttributesName = actualBox.className;
				if(nodeAttributesName.search(/klippklapp/) != -1) {
					var status = checkBox(actualBox,"kkBox"+countBox);
					if (status == true) {
						countBox++;
					}
				}
			}
			if (klippKlappBox.length > 0) {
				setHandler();
				return true;
			} else {
				return false
			}
		}
		
		var setCloseButton = function (obj) {
			var closeButtonObject = dode.util.runOnNodes(obj,dode.css.hasCssClass,"closeButton");
			if (closeButtonObject.length > 0) {
				dode.newevent.addEvent(closeButtonObject[0],"click",changeStatus);
				dode.css.deleteCssClass(closeButtonObject[0],"hide");
				dode.css.addCssClass(closeButtonObject[0],"pointer");
			}
			return true;
		}
		
		var checkBox = function (obj,objId) {
			// Prüfen ob Struktur richtig ist
			if (!obj.hasChildNodes()) return false;
			structureArray = new Array ();
			structureArrayContentObj = new Array ();
			countArray = 0;
			for (var i=0; i < obj.childNodes.length; i++) {
				// Text-Knoten ausblenden
				if (obj.childNodes[i].nodeType === 1) {
					if (countArray === 0) {
						structureArray[countArray] = obj.childNodes[i].nodeName;
						structureArrayContentObj[countArray] = obj.childNodes[i];
						countArray++;
					}
					if (obj.childNodes[i].nodeName === "DIV" && countArray === 1) {
						structureArray[countArray] = obj.childNodes[i].nodeName;
						structureArrayContentObj[countArray] = obj.childNodes[i];
						countArray++;
					}
				}
			}
			if (structureArray.length != 2) return false;
			if (structureArray[1] != "DIV") return false;
			// Wenn die umschließende ox die Klasse "openOnNoJs" hat, ist die Box ohne JavaScript ausgeklappt.
			// Damit das funktioniert, muss über JavaScript (WICHTIG) eine Style-Datei eingebunden werden, in der die Klasse "openOnNoJs" definiert ist. (display:none)
			// Die Klasse "openOnNoJs" wird erst eingebunden und später im Ablauf wieder entfernt!
			// Dadurch wird das kurze öffnen und schließen der Box verhindert.  (Kann man im IE sehen!)
			if (dode.css.hasCssClass(obj,"openOnNoJs")) {
				dode.css.addCssClass(structureArrayContentObj[1],"hide");
				var cssAttributeContent = dode.css.getCssAttribute(structureArrayContentObj[1],"display");
				if (cssAttributeContent === 'none') {
					dode.css.deleteCssClass(obj,"openOnNoJs");
				}				
			}

			var cssStatus = dode.css.hasCssClass(structureArrayContentObj[1],"hide");
			klippKlappBox[klippKlappBox.length] = {
				id:objId,
				obj:obj,
				objSwitch:structureArrayContentObj[0],
				objDiv:structureArrayContentObj[1],
				status:cssStatus
			}
			return true;
		}		
	
		setHandler = function () {
			for (var i=0; i < klippKlappBox.length; i++) {
				dode.newevent.addEvent(klippKlappBox[i].objSwitch,"click",changeStatus);
				setCloseButton(klippKlappBox[i].obj);
			}
			return true;
		}

		var changeStatus = function (e) {
			dode.newevent.preventDefaultEvent(e);
			var eventTrigger = dode.newevent.getEventTarget(e);
			for (var i=0; i < klippKlappBox.length; i++) {
				if (klippKlappBox[i].objSwitch === this || eventTrigger.parentNode.parentNode === klippKlappBox[i].obj ) {
					if (klippKlappBox[i].status == 0) {
						closeBox(klippKlappBox[i].objDiv,klippKlappBox[i].objSwitch);
						klippKlappBox[i].status = 1;
					} else {
						openBox(klippKlappBox[i].objDiv,klippKlappBox[i].objSwitch);
						klippKlappBox[i].status = 0;
					}
				}
			}
			return false;
		}
		
		var openBox = function (obj,objSwitch) {
			dode.css.deleteCssClass(obj,"hide");
			dode.css.deleteCssClass(objSwitch,"kkInaktiv");
			dode.css.addCssClass(objSwitch,"kkAktiv");
			return true;
		}
		
		var closeBox = function (obj,objSwitch) {
			dode.css.deleteCssClass(objSwitch,"kkAktiv");
			dode.css.addCssClass(obj,"hide");
			dode.css.addCssClass(objSwitch,"kkInaktiv");
			return true;
		}
		setBoxes();
	}	
}
///////////////////// ENDE KlippKlapp //////////////////////

///////////////////// START PRINT //////////////////
dode.mainfunc.print = {
	init : function () {
			var setPrintStyle = function () {
				var allCssLink = document.getElementsByTagName("LINK");
				for (var i = 0; i < allCssLink.length; i++) {
					if (allCssLink[i].rel === "stylesheet") {
						document.getElementsByTagName("HEAD")[0].removeChild(allCssLink[i]);
					}
				}
				if (!document.getElementById("printStyle")) {
					var mainObj = document.getElementsByTagName("HEAD")[0];
					var printLinkObj = document.createElement("LINK");
					printLinkObj.rel = "stylesheet";
					printLinkObj.type = "text/css";
					printLinkObj.href = "/media/system/css_1/print.css";
					printLinkObj.id = "printStyle";
					mainObj.appendChild(printLinkObj);
				}
				return true;
			}

			function setLinkElements (knoten,parent) {
				var newElement = null;
				if (knoten.hasChildNodes()) {
					for (var x = 0;x < knoten.childNodes.length; x++) {
						var newOldNode = knoten.childNodes[x].cloneNode(true);
						parent.appendChild(newOldNode);
					}
				}
				return true;
			}
			
			setPrintStyle();
			var allLinks = document.getElementsByTagName("A");
			if(allLinks) {
				allLinksAnzahl = allLinks.length;
				var orgLinkObj = [];
				var replaceLinkObj = [];
				var parentObj = [];
				for (var i = 0; i < allLinksAnzahl; i++) {
					var linkNewElement = document.createElement("SPAN");
					linkNewElement.className = "printLink";
					var elementParent = allLinks[i].parentNode;
					var thisElement = allLinks[i];
					setLinkElements(thisElement,linkNewElement);
					orgLinkObj[i] = allLinks[i];
					replaceLinkObj[i] = linkNewElement;
					parentObj[i] = elementParent;
				}
				for (var i = 0; i < orgLinkObj.length; i++) {
					parentObj[i].replaceChild(replaceLinkObj[i],orgLinkObj[i]);
					var linkSrcContainer = document.createElement("I");
					var newText = orgLinkObj[i].toString();
					var linkSrc = document.createTextNode(" ("+newText+") ");
					linkSrcContainer.appendChild(linkSrc);
					replaceLinkObj[i].appendChild(linkSrcContainer);
				}
			}
			window.focus();
			window.setTimeout("window.print()", 1000);
	}
};
///////////////////// ENDE PRINT //////////////////
///////////////////// START textServices //////////////////
dode.mainfunc.textServices = {
	init : function () {
		/************** Buttons INFO **************/
		var picBackDetail = "/media/system/seitenelemente/iconsbuttons/serviceelemente/serviceelement_zurueck.gif";
		var picBackRuler = "/media/system/seitenelemente/iconsbuttons/serviceelemente/ruler/ruler_zurueck.gif";
		var picPrintDetail = "/media/system/seitenelemente/iconsbuttons/serviceelemente/serviceElement_drucken.gif";
		var picPrintRuler = "/media/system/seitenelemente/iconsbuttons/serviceelemente/ruler/ruler_drucken.gif";
		/************** Event-Handler definieren **************/
		var handlerBack = function (e) {
			history.back();
		}
		
		var handlerPrint = function (e) {
			var url = window.location.href;
			var name = dode.pagevar.windowNamePrint;
			var attribute = "width=800,height=600,left=100,top=80,dependent=yes,location=no,menubar=no,resizeable=yes,scrollbars=yes,status=no,toolbar=no";
			var openPrintWindow = window.open(url,name,attribute);
			return true;
		}
		
		var handlerReadspeakerSetCss = function (e) {
			dode.css.addCssClass(this,"likeLink");
		}
		
		var handlerReadspeakerDeleteCss = function (e) {
			dode.css.deleteCssClass(this,"likeLink");
		}

		var rsOpenObj = null;
		var rsObject = null;
		
		var handlerReadspeaker = function (e) {
			dode.newevent.preventDefaultEvent(e);
			var rsObjNode = this.parentNode;
			if (!rsOpenObj) {
				rsObject = setRsObject(this.href);
				rsObjNode.appendChild(rsObject);
				rsOpenObj = rsObjNode;
			} else if (rsObjNode === rsOpenObj) {
				rsOpenObj.removeChild(rsObject);
				rsOpenObj = null;
			} else if (rsObjNode !== rsOpenObj) {
				rsOpenObj.removeChild(rsObject);
				rsObject = setRsObject(this.href);
				rsObjNode.appendChild(rsObject);
				rsOpenObj = rsObjNode;
			}
			return true;
		}

		var setRsObject = function (rsCall) {
			/************** Zusatzfunktionen Readspeaker ***************/
			/************** Readspeaker-Variablen **************/
			var urlFlashPlayer = "http://media.readspeaker.com/flash/readspeaker20.swf";
			var urlFlashPlayerMp3 = "?mp3=";
			var urlFlashPlayerParams = "&c1=0x666666&c3=0xba4b3b&c4=0xba4b3b&c5=0x999999&c15=0xba4b3b&c16=0xffffff&autoplay=0&c6=0xeeeeee&c8=0xba4b3b&c10=0xeeeeee&c11=0xffffff";
			var urlFlashPlayerParamPlay = "&autoplay=0";

			/************** Readspeaker-Objekt **************/
			var objectElement = {attrib : {}, param : {}};
			objectElement.attrib["classid"] = "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000";
			objectElement.attrib["codebase"] = "http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0";
			objectElement.attrib["width"] = "200";
			objectElement.attrib["height"] = "20";
			objectElement.attrib["data"] = urlFlashPlayer+urlFlashPlayerMp3+escape(rsCall)+urlFlashPlayerParams+urlFlashPlayerParamPlay;
			objectElement.attrib["type"] = "application/x-shockwave-flash";
			objectElement.attrib["className"] = "";
			objectElement.param["MOVIE"] =  objectElement.attrib["data"];
			objectElement.param["QUALITY"] = "high";
			objectElement.param["SCALE"] = "exactfit";
			objectElement.param["WMODE"] = "transparent";
			objectElement.param["AUTOPLAY"] = "false";
			/************** Object-Element einbauen **************/
			if (document.all && !window.opera) {
				// Explorer
				rsObject = "<object ";
				var setParam = "";
				for (var newAttrib in objectElement.attrib) {
					rsObject += newAttrib+"=\""+objectElement.attrib[newAttrib]+"\" ";
				}
				rsObject += ">\n";
				for (var newAttrib in objectElement.param) {
					setParam += "<param name=\""+newAttrib+"\" value=\""+objectElement.param[newAttrib]+"\">\n";
				}
				rsObject += setParam + "</object>";
				// Hilfselement "temporär"
				var tmp = document.createElement("P");
				tmp.innerHTML = rsObject;
				var rsObject = tmp.firstChild.cloneNode(true);
				delete(tmp);
			} else {
				// Andere
				rsObject = document.createElement("object");
				for (var newAttrib in objectElement.attrib) {
					rsObject[newAttrib] = objectElement.attrib[newAttrib];
				}
				for (var newAttrib in objectElement.param) {
					var newParamElement = document.createElement("PARAM");
					newParamElement.name = newAttrib;
					newParamElement.value = objectElement.param[newAttrib];
					rsObject.appendChild(newParamElement);
				}
			}
			return rsObject;
		}
		/************** Buttons erstellen **************/
		var ServiceButton = function (sP,aT,tT,eV,eT) {
			this.srcPic = sP;
			this.altText = aT;
			this.titleText = tT;
			this.eventFunction = eV;
			this.extraText = eT;
		}
		
		var buttonBack = new ServiceButton(picBackDetail,dode.pagevar.lang.preTextIcon+" '"+dode.pagevar.lang.serviceElementZurueck+"'",dode.pagevar.lang.serviceElementZurueck,handlerBack,"");
		var buttonBackRuler = new ServiceButton(picBackRuler,dode.pagevar.lang.preTextIcon+" '"+dode.pagevar.lang.serviceElementZurueck+"'",dode.pagevar.lang.serviceElementZurueck,handlerBack,dode.pagevar.lang.serviceElementZurueck);
		var buttonPrint = new ServiceButton(picPrintDetail,dode.pagevar.lang.preTextIcon+" '"+dode.pagevar.lang.serviceElementDrucken+"'",dode.pagevar.lang.serviceElementDrucken,handlerPrint,"");
		var buttonPrintRuler = new ServiceButton(picPrintRuler,dode.pagevar.lang.preTextIcon+" '"+dode.pagevar.lang.serviceElementDrucken+"'",dode.pagevar.lang.serviceElementDrucken,handlerPrint,dode.pagevar.lang.serviceElementDrucken);
		
		/************** Button-Objekt einbauen **************/
		var setIcon = function (domObj,buttonObj) {
			var newListElement = document.createElement("LI");
			newListElement.setAttribute("title",buttonObj.titleText);
			var icon = document.createElement("IMG");
			icon.setAttribute("src",buttonObj.srcPic);
			icon.setAttribute("alt",buttonObj.altText);
			icon.setAttribute("title",buttonObj.titleText);
			domObj.appendChild(newListElement);
			newListElement.appendChild(icon);
			if (buttonObj.extraText) {
				var newText = document.createTextNode(buttonObj.extraText);
				newListElement.appendChild(newText);
			}
			if (buttonObj.eventFunction) {
				dode.css.addCssClass(newListElement,"pointer");
				dode.newevent.addEvent(newListElement,"click",buttonObj.eventFunction);
			}
			return true;
		};
		/************** Einbauboxen holen und einbauen **************/
		var serviceBoxes = dode.util.runOnNodes(document.getElementsByTagName("BODY")[0],dode.css.hasCssClass,"textServices");
		if (serviceBoxes.length > 0) {
			for (var i = 0; i < serviceBoxes.length; i++) {
				setIcon (serviceBoxes[i].getElementsByTagName("UL")[0],buttonPrint);
				// Readspeaker-Eventhandler setzen
				isRsObj = dode.util.runOnNodes(serviceBoxes[i].getElementsByTagName("UL")[0],dode.css.hasCssClass,"readspeaker");
				if (isRsObj.length !== 0 && isRsObj[0].getElementsByTagName("A")[0]) {
					var setSwitch = isRsObj[0].getElementsByTagName("A")[0];
					rsCall = isRsObj[0].getElementsByTagName("A")[0].href;
					dode.newevent.addEvent(setSwitch,"click",handlerReadspeaker);
				}
			}
		}
		if (document.getElementById("textServicesRulerPart1")) {
			setIcon (document.getElementById("textServicesRulerPart1"),buttonBackRuler);
		}
		if (document.getElementById("textServicesRuler")) {
			setIcon (document.getElementById("textServicesRuler"),buttonPrintRuler);
			// Readspeaker-Eventhandler setzen
			if (document.getElementById("readspeakerRuler") && document.getElementById("readspeakerRuler").getElementsByTagName("A")[0]) {
				var setSwitch = document.getElementById("readspeakerRuler").getElementsByTagName("A")[0];
				rsCall = document.getElementById("readspeakerRuler").getElementsByTagName("A")[0].href;
				dode.newevent.addEvent(setSwitch,"click",handlerReadspeaker);
				if (navigator.appName === "Microsoft Internet Explorer" && parseInt(navigator.appVersion.substr(navigator.appVersion.indexOf("MSIE")+5,3).match(/\d{1,2}/)) < 7) {
					//alert("-"+parseInt(navigator.appVersion.substr(navigator.appVersion.indexOf("MSIE")+5,3).match(/\d{1,2}/))+"-");
					dode.newevent.addEvent(setSwitch,"mouseover",handlerReadspeakerSetCss);
					dode.newevent.addEvent(setSwitch,"mouseout",handlerReadspeakerDeleteCss);
				}
			}
		}
	}
}
///////////////////// ENDE textServices ///////////////////
///////////////////// START DREHSCHEIBE /////////////////
var drehscheibe = {
	moveDrehscheibe : "",
	isMove : 0,
	speedMove : 0.5,
	speedTimer : 20,
	widthForLeft : 12.917, // in em
	marginPerElement : 0.833, // in em 
	widthPerElement : 12.917, // in em
	elementsPerWindow : 3,
	objDrehscheibe : [],
	init : function () {
		if (!document.getElementsByTagName("div")) return false;
		else var allDiv = document.getElementsByTagName("div");
		var thisObj = this;
		var anzahl = 0;
		for (var i = 0; i < allDiv.length; i++) {
			if (allDiv[i].className == "drehscheibe") {
				var getParentClassName = allDiv[i].parentNode.className;
				var raster = 1;
				if(getParentClassName.search(/rasterSpalte6/) != -1) {
					raster = 0;
				}
				thisObj.objDrehscheibe[anzahl] = {
					id : anzahl,
					obj : allDiv[i],
					raster7 : raster
				};
				anzahl++;
			}
		}
		if (thisObj.objDrehscheibe.length == 0) return false;
		for (var i = 0; i < thisObj.objDrehscheibe.length; i++) {
			if (!thisObj.fillObject (thisObj.objDrehscheibe[i])) return false;
			if (!thisObj.setHandler (thisObj.objDrehscheibe[i])) return false;
		}
	},
	setHandler : function (obj) {
		obj.switchLeft.onmousedown=this.scrollRight;
		obj.switchRight.onmousedown=this.scrollLeft;
		document.onmouseup=this.clear;
		return true;
	},
	clear : function (e) {
		window.clearInterval(drehscheibe.moveDrehscheibe);
		drehscheibe.isMove = 0;
	},
	move : function (objId,direction) {
		var objLeiste = drehscheibe.objDrehscheibe[objId];
		var allWidth = objLeiste.width;
		var countElements = objLeiste.elements;
		var outLeft = objLeiste.leiste.style.left;
		var widthWindow = drehscheibe.elementsPerWindow * (drehscheibe.marginPerElement+drehscheibe.widthPerElement);
		widthWindow = 40.417;
		if (objLeiste.raster7 == 0) {
			widthWindow = 33.750;
		}
		if (outLeft == "" || outLeft == null || outLeft == "undefined") {
			outLeft = "0em";
		}
		var x = parseFloat(outLeft.replace(/[a-z]+/, ""));
		if (direction == "R") {
			x = x + this.speedMove;
			if (x >= 0) {
				x = 0;
			}
		} else {
			x = x - this.speedMove;
			if (x <= (widthWindow - allWidth)) {
				x = widthWindow - allWidth;
			}
		}
		var outX = String(x);
		outX = outX+"em";
		objLeiste.leiste.style.left  = outX;
		drehscheibe.isMove = 1;
		return true;
	},
	scrollLeft : function (e) {
		var thisObj = this;
		var objId = 0;
		var knoten = thisObj.parentNode;
		var obj = "";
		for (var i = 0; i < drehscheibe.objDrehscheibe.length;i++) {
			if (drehscheibe.objDrehscheibe[i].obj == knoten)
				objId = drehscheibe.objDrehscheibe[i].id;
		}
		if (drehscheibe.isMove==0)
			drehscheibe.moveDrehscheibe = window.setInterval("drehscheibe.move("+objId+",\"L\")", drehscheibe.speedTimer);
		drehscheibe.isMove = 1;
		return true;
	},
	scrollRight : function (e) {
		var thisObj = this;
		var objId = 0;
		var knoten = thisObj.parentNode;
		var obj = "";
		for (var i = 0; i < drehscheibe.objDrehscheibe.length;i++) {
			if (drehscheibe.objDrehscheibe[i].obj == knoten)
				objId = drehscheibe.objDrehscheibe[i].id;
		}
		if (drehscheibe.isMove==0)
			drehscheibe.moveDrehscheibe = window.setInterval("drehscheibe.move("+objId+",\"R\")", drehscheibe.speedTimer);
		drehscheibe.isMove = 1;
		return true;
	},
	fillObject : function (obj) {
		var thisObj = this;
		if (!thisObj.getSwitches(obj)) return false;
		if (!thisObj.getElements(obj)) return false;
		return true;
	},
	getElements : function (o) {
		var count = 0;
		var countElements = 0;
		var allWidth = 0;
		var objLeiste ;
		var allBoxes = o.obj.getElementsByTagName("DIV");
		for (var i = 0; i < allBoxes.length; i++) {
			if (allBoxes[i].className == "drehscheibeElementLeiste") {
				objLeiste = allBoxes[i];
				count++
			}
			if (allBoxes[i].className == "elementDrehscheibe") {
				countElements++
			}
		}
		if (count == 0 || countElements <= 3) return false;
		allWidth = (countElements * this.widthPerElement) + ((countElements - 1)*this.marginPerElement);
		o.leiste = objLeiste;
		o.elements = countElements;
		o.width = allWidth;
		return true;
	},
	getSwitches : function (o) {
		var count = 0;
		var s1 = s2 = "";
		var objHtml = o.obj;
		for (var i = 0;i < objHtml.childNodes.length; i++) {
			if (objHtml.childNodes[i].nodeName == "A") {
				if (count == 0)
					s1 = objHtml.childNodes[i];
					s1.href = 'javascript: void(0)';
				if (count == 1)
					s2 = objHtml.childNodes[i];
					s2.href = 'javascript: void(0)';
				count++
			}
		}
		if (count != 2) return false;
		o.switchLeft = s1;
		o.switchRight = s2;
		return true;
	}
};
var startDrehscheibe = function () {
	drehscheibe.init();
};
///////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////
dode.mainfunc.setPageInit = {
	init : function () {
	}
};

///////////////////////////// Initialisierung starten ///////////////////////////////////////////////
dode.init();
//////////////////////////////////////////////////////////////////////////////////////////////////

///////////// ENDE STARTFUNKTIONEN REGISTRIEREN ////////////


//------------ Stadtplan-Einstieg ZOO ---------------//
function StartCityguideZoo() {

		var resolution;
		var screenformat = (screen.width/screen.height)
		if (screen.height > 1024){
			if(screenformat >= 1.6) //Widescreen
			resolution = "1280x720";
			else
				resolution = "1280x1024";
		}
		else if(screenformat >= 1.6) //Widescreen
			resolution = "960x540";
		else 
			resolution = "800x600";
			
	   var hwnd, href;
	   href = "http://www2.dortmund.de/stadtplan/CG_V75_ORZ/ZOO_Dortmund/html/de/";
	   href += resolution;
	   href += ".html";
	
	   if (href.match(/800x600/gi)) {
			   hwnd = open(href,"cityguide","width=800,height=600,fullscreen=yes,menubar=no,resizable=yes,scrollbars=yes");
	   }
	
	   if (href.match(/960x540/gi)) {
			   hwnd = open(href,"cityguide","width=980,height=560,fullscreen=yes,menubar=no,resizable=yes,scrollbars=yes");
	   }
	
	   if (href.match(/1280x1024/gi)) {
			   hwnd = open(href,"cityguide","width=1300,height=1040,fullscreen=yes,menubar=no,resizable=yes,scrollbars=yes");
	   }
	   
	   if (href.match(/1280x720/gi)) {
			   hwnd = open(href,"cityguide","width=1300,height=740,fullscreen=yes,menubar=no,resizable=yes,scrollbars=yes");
	   }
	
	   hwnd.moveTo(-5,-5);
	}
//-------------Stadtplan-Einstieg ZOO Ende ----------//



//---------------------- Suche -------------------//
 function wechsel() {
  var a = document.suchbox.lucene.value, b = document.suchbox.google.value;
  document.suchbox.google.value = a;
  document.suchbox.lucene.value = b;
 }
//---------------------- Suche Ende -------------------//

