﻿if(typeof dode !== 'undefined' && typeof dode.ajax !== 'undefined') {
	var merkzettel = function () {
		var imgMerkenServiceSrc = "/media/system/seitenelemente/iconsbuttons/serviceelemente/serviceElement_merken.gif";
		var imgMerkenServiceDeleteSrc = "/media/system/seitenelemente/iconsbuttons/serviceelemente/serviceElement_entmerken.gif";
		var imgMerkenSrc = "/media/system/seitenelemente/iconMerken.gif";
		var imgMerkenDeleteSrc = "/media/system/seitenelemente/iconEntmerken.gif";
		var imgMerkenAlt = "Symbol 'merken'";
		var imgMerkenTitle = "Diese Veranstaltung auf den Merkzettel schreiben";
		var imgMerkenDeleteAlt = "Symbol 'merken'";
		var imgMerkenDeleteTitle = "Diese Veranstaltung vom Merkzettel entfernen";		
		
		var dataOutContainerId = "mzContainer";
		var linkDetail = "/de/freizeit_und_kultur/museen/museumsnacht/rueckblick_2011/programm_1/event.jsp";
		var linkOverview = "/de/freizeit_und_kultur/museen/museumsnacht/rueckblick_2011/programm_1/index.jsp";
		var linkListeUebersicht = "/de/freizeit_und_kultur/museen/museumsnacht/merkzettel/index.html";
		var htmlObjMerkzettel = document.getElementById(dataOutContainerId);
		var objA1 = null;
		var htmlMerkenLinkList = [];
		var jsObject = null;
		var linkMerkenCssClass = "linkMerken";
		var linkMerkenLoeschenCssClass = "linkEntmerken";
		var srcPrintButton = "/media/system/seitenelemente/iconsbuttons/drucken.gif";
		var printText = ""; // Diese Liste drucken
		var idArray = []; // Hilfsarray mit den gemerkten ID's bilden
		var textLinkMerken = "Veranstaltung merken";
		var textLinkLoeschen = "Vom Merkzettel entfernen";
		var pseudoLinkObj = {}; // Pseudo-Link-Objekte für EventHandler
		var pLO = {};
		/*
		 * pLO.id = Objekt-ID
		 * pLO.id.handler
		 * pLO.id.imgSrc
		 * pLO.id.text
		 * pLO.status -> 0/1 -> 1 wenn Wechselvorgang durch Eventhandler eingeleitet wurde. Nur für Liste Collection
		 */
	
		var setPseudoLinkInfo = function (id,handlerFn,imgSrc,imgAlt,imgTitle,text,css) {
			pLO[id] = {};
			pLO[id].handler = handlerFn;
			pLO[id].imgSrc = imgSrc;
			pLO[id].imgAlt = imgAlt;
			pLO[id].imgTitle = imgTitle;
			pLO[id].text = text;
			pLO[id].css = css;
			return true;
		}
		
		var isDetail = false;
		var checkDetail = "http://"+location.host+linkDetail;
		var reg=new RegExp(checkDetail);
		if (location.href.search(reg) === 0) {
			isDetail = true;
		}
		
		var isOverview = false;
		var checkOverview = "http://"+location.host+linkOverview;
		var reg=new RegExp(checkOverview);
		if (location.href.search(reg) === 0) {
			isOverview = true;
		}
		
		function convertUTF8(text) {
			var ergebnis = text.match(/&#(\d{2,3});/);
			if (ergebnis) {
				text = text.replace(ergebnis[0],String.fromCharCode(ergebnis[1]));
				text = convertUTF8(text);
			} else {
				text = text.replace(/&amp;/ig,"&");
			}
			return text;
		}
		
		var setMerkenSufiBox = function (htmlBoxId,dataObj) {
			// Inhalt wird nach Aufruf komplett erneuert und getauscht!
			var domObj = document.getElementById(htmlBoxId);
			var cssClass = dode.css.getCssClass(domObj);
			var tempNode = domObj.cloneNode(false);
			dode.css.addCssClass(tempNode,cssClass);
			var parentDomObj = domObj.parentNode;
			if(!dataObj["merkzettel"]["item"]) {
				// Dann Fehler
				tempNode = dode.util.stringToDom(tempNode,"<p class=\"error\">"+dataObj["merkzettel"]["info"]+"</p>");
				parentDomObj.replaceChild(tempNode,domObj);
			} else {
				// Alles ok. Daten in Box anzeigen
				var mzBoxDataNode = null;
				var mzBoxTempNode = null;
				var tempTextNode = null;
				var out = "";

				var eventsToShow = 1; // Anzahl der Elemente in der Box
				var actualOut = dataObj["merkzettel"]["item"].length;
				var endOut = dataObj["merkzettel"]["item"].length - eventsToShow;
				if (endOut < 0) { endOut = 0; }
				tempNode = dode.util.stringToDom(tempNode,"<h3 class=\"sfWeitereLinks\">Zuletzt gemerkt:</h3>");
				var tempNode2 = document.createElement("ul");
				dode.css.addCssClass(tempNode2,"sfWeitereLinks");
				while (actualOut > endOut) {
					actualOut--;
					var psId = "mzDelete"+dataObj["merkzettel"]["item"][actualOut]["id"];
					setPseudoLinkInfo(psId,deleteItem,imgMerkenDeleteSrc,imgMerkenDeleteAlt,imgMerkenDeleteTitle,textLinkLoeschen,linkMerkenLoeschenCssClass);
					var headline = dataObj["merkzettel"]["item"][actualOut]["name"];
					out = "<li class=\"sfWeitereLinks\" id=\"mz"+dataObj["merkzettel"]["item"][actualOut]["id"]+"\"><a href=\""+linkDetail+"?tid="+dataObj["merkzettel"]["item"][actualOut]["id"]+"\">"+convertUTF8(headline)+"</a><img id=\""+psId+"\" alt=\""+imgMerkenDeleteAlt+"\" title=\""+imgMerkenDeleteTitle+"\" src=\""+imgMerkenDeleteSrc+"\" ></li>";
					tempNode2 = dode.util.stringToDom(tempNode2,out);
				}
				tempNode.appendChild(tempNode2);
				tempNode2 = null;
				var contStart = 0;
				var contLength = document.getElementById("mzAnzahl").firstChild.nodeValue.length;
				document.getElementById("mzAnzahl").firstChild.replaceData(contStart,contLength,dataObj["merkzettel"]["anzahl"]);
				if (dataObj["merkzettel"]["anzahl"] != "0") {
					tempNode2 = document.createElement("ul");
					dode.css.addCssClass(tempNode2,"sfWeitereLinks");
					tempNode2 = dode.util.stringToDom(tempNode2,"<li id=\"printAll\"><a href=\""+linkListeUebersicht+"\">Alle Einträge ansehen/drucken</a></li>");
					tempNode2 = dode.util.stringToDom(tempNode2,"<li id=\"mzDeleteAll\">Alle Einträge entfernen</li>");
					tempNode.appendChild(tempNode2);
					setPseudoLinkInfo("mzDeleteAll",deleteAllItem,"","","",textLinkLoeschen,linkMerkenLoeschenCssClass);
				} else {
					if (dataObj["merkzettel"]["info"].length != 0) {
						tempNode = dode.util.stringToDom(tempNode,"<p>Info: "+dataObj["merkzettel"]["info"]+"</p>");
					} else {
						tempNode = dode.util.stringToDom(tempNode,"<p>Sie haben noch keine Veranstaltungen ausgewählt.</p>");
					}
				}
				parentDomObj.replaceChild(tempNode,domObj);
				tempNode = null;
				tempNode2 = null;
				parentDomObj = null
			}
			return true;
		};
		
		var setPrint = function (printNode) {
			var out = "<p class=\"pointer\">"+printText+" <img alt=\"Symbol 'drucken'\" title=\"drucken\" src=\""+srcPrintButton+"\" ></p>";
			printNode = dode.util.stringToDom(printNode,out);
			return printNode;
		};
		
		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 setMerkenListeAusgabe = function (htmlBoxId,dataObj) {
			// Inhalt wird nach Aufruf komplett erneuert und getauscht!
			var domObj = document.getElementById(htmlBoxId);
			var cssClass = dode.css.getCssClass(domObj);
			var tempNode = domObj.cloneNode(false);
			dode.css.addCssClass(tempNode,cssClass);
			var parentDomObj = domObj.parentNode;			
			if(!dataObj["merkzettel"]["item"]) {
				// Dann Fehler
				tempNode = dode.util.stringToDom(tempNode,"<p class=\"error\">"+dataObj["merkzettel"]["info"]+"</p>");
				parentDomObj.replaceChild(tempNode,domObj);
				return true;
			}
			var out = "";
			var actualOut = dataObj["merkzettel"]["item"].length;
			var mzListContainerId = "mzPrint";
			parentMzNode = domObj.parentNode;
			if (!document.getElementById(mzListContainerId)) {
				var printNode = document.createElement("div");
				printNode.id = mzListContainerId;
				printNode = setPrint(printNode);
				parentMzNode.insertBefore(printNode,domObj);
				dode.newevent.addEvent(document.getElementById(mzListContainerId),"click",handlerPrint);
			} else {
				if (actualOut === 0) {
					dode.newevent.removeEvent(document.getElementById(mzListContainerId),"click",handlerPrint);
					parentMzNode.removeChild(document.getElementById(mzListContainerId));
				}
			}
			var mzListObj = document.getElementById("fsmzListe");
			dode.css.addCssClass(mzListObj,"vkListe");
			var cssClass = dode.css.getCssClass(mzListObj);
			var tempNodeList = mzListObj.cloneNode(false);
			// Hilfsarray zur Ausgabe der Objekte nach Uhrzeit
			var timestampArray = [];
			for (var tc = 0; tc < actualOut; tc++) {
				timestampArray.push(dataObj["merkzettel"]["item"][tc]["timestamp"]+"|"+tc);
			}
			timestampArray.sort();
			// Nach Anfangszeit sortierte Ausgabe
			for (var i = 0; i < timestampArray.length; i++) {
				var getObjId = timestampArray[i].substring(timestampArray[i].indexOf("|")+1,timestampArray[i].length);
				var dataSet = dataObj["merkzettel"]["item"][getObjId];
				var ort = dataSet["ort"]+"<br>"+dataSet["strasse"];
				var headline = dataSet["name"];
				var teaser = dataSet["teaser"];
				var startZeit = dataSet["timeStart"];
				var endeZeit = dataSet["timeEnd"];
				var startDatum = dataSet["datumStart"];
				var endeDatum = dataSet["datumEnd"];
				var outZeit = "";
				if (startZeit !== "") {
					outZeit = startDatum+", <b>"+startZeit+" Uhr<\/b>";
				}
				if (endeZeit !== "") {
					if (outZeit !== "") {
						outZeit = outZeit+" - "+endeZeit;
						if (startDatum !== endeDatum) {
							outZeit = outZeit+" ("+endeDatum+")";						
						}
					}
				}
				var addCss = "";
				if (i % 2 === 0) { addCss = " elementBackground"; }
				var tempNode = document.createElement("div");
				tempNode.id = "etid"+dataSet["id"];
				dode.css.addCssClass(tempNode,"element"+addCss);
				//tempNode = dode.util.stringToDom(tempNode,"<p class=\"rubrik\">"+(timestampArray.length-i)+"</p>");
				tempNode = dode.util.stringToDom(tempNode,"<h4>"+convertUTF8(teaser)+"</h4>");
				if (document.getElementById("printStyle")) {
					tempNode = dode.util.stringToDom(tempNode,"<h5>"+convertUTF8(headline)+"</h5>");
				} else {
					tempNode = dode.util.stringToDom(tempNode,"<h5><a href=\""+linkDetail+"?tid="+dataSet["id"]+"\">"+convertUTF8(headline)+"</a></h5>");
				}
				tempNode = dode.util.stringToDom(tempNode,"<p class=\"zeitraum\">"+outZeit+"</p>");
				tempNode = dode.util.stringToDom(tempNode,"<p class=\"zeitraum\">"+convertUTF8(ort)+"</p>");
				tempNode = dode.util.stringToDom(tempNode,"<p class=\"merken\" id=\"mzDeleteOutList"+dataSet["id"]+"\"><span title=\""+imgMerkenDeleteTitle+"\" class=\""+linkMerkenLoeschenCssClass+"\">"+textLinkLoeschen+"</span></p>");
				setPseudoLinkInfo("mzDeleteOutList"+dataSet["id"],deleteItem,imgMerkenDeleteSrc,imgMerkenDeleteAlt,imgMerkenDeleteTitle,textLinkLoeschen,linkMerkenLoeschenCssClass);
				tempNodeList.appendChild(tempNode);
			}
			dode.css.addCssClass(tempNodeList,cssClass);
			var parentListObj = mzListObj.parentNode;
			parentListObj.replaceChild(tempNodeList,mzListObj);
			return true;
		};
		
		var getMzData = function (domObjId,requestData) {
			jsObject = null;
			try {
				requestData = requestData.replace(/^\s+/, "");
				jsObject = JSON.parse(requestData);
			} catch (e) {
				jsObject = {"merkzettel" : {"anzahl" : "?","info" : "Datenfehler"}};
			}
			setMerkenSufiBox(domObjId,jsObject);
			setIdArray(jsObject);
			var merkzettelOutListeId = "fsmzListe"; // Welches Objekt soll die Daten aufnehmen?
			if (document.getElementById(merkzettelOutListeId)) {
				setMerkenListeAusgabe(merkzettelOutListeId,jsObject);
			}
			return true;
		};
	
		var deleteAllItem = function (e) {
			objA1.setRequestQuery("id=0&action=deleteAll");
			objA1.sendRequest();
			return true;
		};
		
		var deleteItem = function (e) {
			var targetId = this.id;
			objA1.setRequestQuery("id="+targetId.replace(/\D*/ig,"")+"&action=delete");
			objA1.sendRequest();
		}
		
		var addItem = function (e) {
			var targetId = this.id;
			objA1.setRequestQuery("id="+targetId.replace(/\D*/ig,"")+"&action=add");
			objA1.sendRequest();
			return true;
		};
		
		var setIdArray = function (dataObj) {
			if (idArray.length > 0) { idArray = [];	}
			if (dataObj) {
				for (var item in dataObj["merkzettel"]["item"]) {
					idArray[idArray.length] = dataObj["merkzettel"]["item"][item].id;
				}
			}
			return idArray;
		};
		
		var setHandler = function () {
			for (var item in pLO) {
				if (document.getElementById(item)) {
					if (item.match(/mzDeleteList/)) {
						var imgMerken01 = imgMerkenDeleteSrc;
						var imgMerken02 = imgMerkenSrc;
						if (isDetail) {
							imgMerken01 = imgMerkenServiceDeleteSrc;
							imgMerken02 = imgMerkenServiceSrc;
						}
						if (dode.newevent.array_search(item.replace(/mzDeleteList/,""),idArray) >= 0) {
							// Wenn Event ist in Merkzettel
							pLO[item].handler = deleteItem;
							pLO[item].text = textLinkLoeschen;
							pLO[item].imgSrc = imgMerken01;
							pLO[item].imgAlt = imgMerkenDeleteAlt;
							pLO[item].imgTitle = imgMerkenDeleteTitle;
							pLO[item].css = linkMerkenLoeschenCssClass;
						} else {
							pLO[item].handler = addItem;
							pLO[item].text = textLinkMerken;
							pLO[item].imgSrc = imgMerken02;
							pLO[item].imgAlt = imgMerkenAlt;
							pLO[item].imgTitle = imgMerkenTitle;
							pLO[item].css = linkMerkenCssClass;
						}
						refreshLinkMerken(item);
					}
					dode.newevent.addEvent(document.getElementById(item),"click",pLO[item].handler);
					dode.css.addCssClass(document.getElementById(item),"pointer");
				}
			}
			return true;
		};
		
		var unsetHandler = function () {
			for (var item in pLO) {
				if (document.getElementById(item)) {
					dode.newevent.removeEvent(document.getElementById(item),"click",pLO[item].handler);
				}
			}
			return true;
		};
		
		var refreshLinkMerken = function (objId) {
			var htmlObj = document.getElementById(objId);
			// Service Link
			if (isDetail && htmlObj.nodeName === "LI") {
				var imgObj = htmlObj.getElementsByTagName("IMG");
				if (imgObj[0]) {
					if (imgObj[0].title !== pLO[objId].imgTitle) {
						imgObj[0].setAttribute("title",pLO[objId].imgTitle);
						imgObj[0].setAttribute("alt",pLO[objId].imgAlt);
						imgObj[0].setAttribute("src",pLO[objId].imgSrc);
					}
				}

			}
			// Link Programm-Übersicht
			if (isOverview && htmlObj.firstChild.firstChild) {			
				if (htmlObj.firstChild.firstChild.nodeValue !== pLO[objId].text) {
					dode.css.deleteCssClass(htmlObj.firstChild,linkMerkenCssClass);
					dode.css.deleteCssClass(htmlObj.firstChild,linkMerkenLoeschenCssClass);
					dode.css.addCssClass(htmlObj.firstChild,pLO[objId].css);
					htmlObj.firstChild.setAttribute("title",pLO[objId].imgTitle);
					htmlObj.firstChild.firstChild.replaceData(0,htmlObj.firstChild.firstChild.nodeValue.length,pLO[objId].text);
				}
				if (navigator.appName === "Microsoft Internet Explorer" && parseInt(navigator.appVersion.substr(navigator.appVersion.indexOf("MSIE")+5,3).match(/\d{1,2}/)) < 7) {
					dode.css.deleteCssClass(htmlObj.parentNode,"element");
					dode.css.addCssClass(htmlObj.parentNode,"element");
				}
			}
			return true;
		};
		
		var refreshStyle = function () {
			htmlMerkenLinkList = dode.util.runOnNodes(document.getElementById("rasterSpalte7inhalt"),dode.css.hasCssClass,"element");
			for (var ii = 0; ii < htmlMerkenLinkList.length; ii++) {
				dode.css.deleteCssClass(htmlMerkenLinkList[ii],"element");
				dode.css.addCssClass(htmlMerkenLinkList[ii],"element");
			}
			return true;
		};
		
		var iniLinkMerken = function () {
			if (isOverview) {
				htmlMerkenLinkList = dode.util.runOnNodes(document.getElementById("rasterSpalte7inhalt"),dode.css.hasCssClass,"element");
				for (var ii = 0; ii < htmlMerkenLinkList.length; ii++) {
					var linkId = "mzDeleteList"+htmlMerkenLinkList[ii].id.replace(/etid/,"");
					var innerText = "<p class=\"merken\" id=\""+linkId+"\"><span title=\""+imgMerkenTitle+"\" class=\""+linkMerkenCssClass+"\">"+textLinkMerken+"</span></p>";
					dode.util.stringToDom(document.getElementById(htmlMerkenLinkList[ii].id),innerText);
					setPseudoLinkInfo(linkId,addItem,imgMerkenSrc,imgMerkenAlt,imgMerkenTitle,textLinkMerken,linkMerkenCssClass);
					// IE6
					if (navigator.appName === "Microsoft Internet Explorer" && parseInt(navigator.appVersion.substr(navigator.appVersion.indexOf("MSIE")+5,3).match(/\d{1,2}/)) < 7) {
						dode.css.deleteCssClass(htmlMerkenLinkList[ii],"element");
						dode.css.addCssClass(htmlMerkenLinkList[ii],"element");
					}
				}
			} 

			if (isDetail) { 
				var pattern = /tid=(\d+)/i;
				var ergebnis = pattern.exec(window.location.search);
				
				if (!ergebnis || !ergebnis[1]) {
					return true;
				}
				var tid = ergebnis[1];
				var mainNode = document.getElementById("rasterSpalte7inhalt");
				if (mainNode) {
					serviceNode = dode.util.runOnNodes(mainNode,dode.css.hasCssClass,"textServices");
					if (serviceNode.length === 1) {
						var serviceElementNode = serviceNode[0].getElementsByTagName("UL");
						if (serviceElementNode[0]) {
							var newLi = dode.util.makeNewHtmlElement("LI","id=\"mzDeleteList"+tid+"\"");
							var allLi = serviceElementNode[0].getElementsByTagName("LI");
							var newLi = dode.util.stringToDom(newLi,"<img alt=\""+imgMerkenAlt+"\" title=\""+imgMerkenTitle+"\" src=\""+imgMerkenServiceSrc+"\" >");
							serviceElementNode[0].insertBefore(newLi,allLi[0]);
							setPseudoLinkInfo("mzDeleteList"+tid,addItem,imgMerkenServiceSrc,imgMerkenAlt,imgMerkenTitle,"","");
						}
					}
				}
			}
			return true;
		};

		var init = function () {
			//if (!navigator.cookieEnabled) {return false};
			
			var urlPrefix = "http://www.dortmund.de";
			

			var conf = {
				requestUrl : urlPrefix+"/de/freizeit_und_kultur/museen/museumsnacht/merkzettel/mzdatamuna.jsp",
				requestQuery : "",
				requestType : "GET",
				requestAsynch : "TRUE",
				fnAfterReceive : getMzData,
				fnAfterFinished : setHandler,
				fnRequestStartWorking : unsetHandler,
				dataOutContainerId : dataOutContainerId
			};
			objA1 = dode.ajax.showAjaxDataObject(conf);
			if (objA1) {
				iniLinkMerken();
				setHandler(jsObject);
				objA1.sendRequest();
			} else {
				return false;
			}
			
		}();

	}
	dode.domLoad.registerOnLoad(merkzettel);
}
