if(!YAHOO.hmmh) YAHOO.namespace('hmmh');

YAHOO.hmmh.Marker = {
	//thumbs : null,
	sidethumbs : null,
	cartthumbs : null,
	clipthumbs : null,
	reverse : null,
	carticons : null,
	notepadicons : null,
	
	iconDogEar : '/img/overlay_gemerkt.png',
	iconCartActive : '/img/icon_wk_aktiv.png',
	iconCartInactive : '/img/icon_wk.gif',
	iconCartDetailActive : '/img/icon_wk_aktiv_schriften.png',
	iconCartDetailInactive : '/img/icon_detail_warenkorb.gif',
	iconNotepadActive : '/img/icon_merkliste_aktiv.gif',
	iconNotepadInactive : '/img/icon_merkliste.gif',
	iconNotepadDetailActive : '/img/icon_lt_aktiv_schriften.png',
	iconNotepadDetailInactive : '/img/icon_merkzettel.gif',

	init : function() {
		YAHOO.hmmh.Marker.updateThumbs();
		YAHOO.hmmh.Marker.updateThumbs(1);
		YAHOO.hmmh.Marker.updateThumbs(2);
		YAHOO.hmmh.Marker.updateClipboards();
		//Auf der Startseite sind keine Knickecken sichtbar
		if(!YAHOO.util.Selector.query("div.slideshowStartseite div#slideshowElements").length) {
			YAHOO.hmmh.Marker.addResidents();
		}
	},

	getPrevSiblingByTagName : function(el, tag) {
		// den vorherigen
		tag = tag.toLowerCase();

		while(el && el.previousSibling) {
			if(el.previousSibling.tagName && el.previousSibling.tagName.toLowerCase() == tag)
				return el.previousSibling;

			el = el.previousSibling;
		}
		return false;
	},

	updateClipboards : function() {
		YAHOO.hmmh.Marker.clipthumbs = new Object();
		
		var accList = $D.get('accordion').getElementsByTagName('dd');
		
		for(var z=0; z< accList.length; z++) {
			accElement = accList[z];
			// omit cart
			if(accElement.className=='warenkorb') {
				continue;
			}
			
			// Get clipboard title
			dt = YAHOO.hmmh.Marker.getPrevSiblingByTagName(accElement, 'dt');		
			if(!dt || !$D.getElementsByClassName('editable','',dt).length) continue;
			nameMerkliste = $D.getElementsByClassName('editable','',dt)[0].innerHTML;
			
			// get thumbs within Clipboard
			var clipElements = $D.getElementsByClassName('thumb', 'img', accElement);
			
			for(var i=0; i<clipElements.length; i++){
				var clipElement = clipElements[i];
				var clipSource = YAHOO.hmmh.Marker.stripPk(clipElement);
				var found = false;
				
				// Fixing troubles with special characters in Array keys
				for(var clipthumb in YAHOO.hmmh.Marker.clipthumbs) {
					if(clipthumb == clipSource) {
						found = true;
						break;
					}
				}
				if(!found){
					YAHOO.hmmh.Marker.clipthumbs[clipSource] = new Array();
				}
				if(YAHOO.hmmh.Marker.clipthumbs[clipSource].indexOf(nameMerkliste) == -1){
					YAHOO.hmmh.Marker.clipthumbs[clipSource].push(nameMerkliste);
				}
			}
		}
		return true;
	},
	/**
	 * @deprecated wird wohl nicht mehr benoetigt 
	 * und drueckt massiv auf die Performance
	 */
	checkOtherImage : function(b) {
		c = YAHOO.util.Selector.query(".productBlock .otherImage");
		if(!c.length) return false;
		for(var x=0;x < c.length;x++) {
			if(c[x].src == b.src)
				return true;
		}
		return false;
	},
	/**
	 * Finde die (gelben) Detail-Icons
	 */
	initIcons : function() {
		YAHOO.hmmh.Marker.notepadicons = YAHOO.util.Selector.query('.npicon');
		YAHOO.hmmh.Marker.carticons = YAHOO.util.Selector.query('.wkicon');
	},

	/**
	 * Update list of thumbs
	 */
	updateThumbs : function(sideOnly) {
		// je nach sidebar-flag entweder die sidbar duchsuchen
		col = YAHOO.util.Selector.query('#slFixierung', null, true)[0];
		mainColName = YAHOO.hmmh.Accordion.getNextSibByTag(col, 'div');

		// Finding thumbs, 
		if(sideOnly == 2) { // left side only
			thumbs = YAHOO.util.Selector.query('.slDropList .thumb', 'accordion');
		}
		else { // thumbs from main page or left side
			thumbs = YAHOO.util.Selector.query('.thumb', sideOnly ? 'accordion' : mainColName);
		}
		
		
		if(typeof thumbs != 'object') {
			thumbs = new Array();
		}
		
		// Cannot get new thumbs from Drag and Drop, so get them separately
		var newthumbs =$D.getElementsByClassName('newthumb','img','accordion');
		
		for(var i=0; i<newthumbs.length; i++) {
			thumbs.push(newthumbs[i]);
		}
	
		//if(YAHOO.util.Selector.query('.merkzettel').length && YAHOO.util.Selector.query('.merkzettelTitel').length) {
			// erweiterter Merkzettel? Dann haben wir keine Thumbs :-)
			//thumbs = new Array();
		//}
		if(!sideOnly || sideOnly == 2) {
			// ein reverse-array aufbauen, welches ueber die PK-ID auf die objekte im dom referenziert
			if(!YAHOO.hmmh.Marker.reverse){
				YAHOO.hmmh.Marker.reverse = new Object();
			}
			
			for(i=0;thumb=thumbs[i];i++) {
				var isThumbInArray = false;
				var pk = YAHOO.hmmh.Marker.stripPk(thumb);
				
				if(!YAHOO.hmmh.Marker.reverse[pk])
					YAHOO.hmmh.Marker.reverse[pk] = new Array();
				for(var x=0; x<YAHOO.hmmh.Marker.reverse[pk].length; x++) {
					if(YAHOO.hmmh.Marker.reverse[pk][x] === thumb) {
						isThumbInArray = true;
						break; // DD 2008-09-10
					}
				}
				if(isThumbInArray == false) {
					YAHOO.hmmh.Marker.reverse[pk].push(thumb);
				}
			}
		}

		if(sideOnly) {
			// filtern: hier werden die (seiten)thumbs nach warenkorb/merkliste getrennt
			thumbs = thumbs.filter( function (b) {
				if(sideOnly == 1 && findClass(b, 'warenkorb') || 
					sideOnly == 2 && !findClass(b, 'warenkorb')
					/* || sideOnly == 1 && YAHOO.hmmh.Marker.checkOtherImage(b)*/) // Performance!!
					return true;
				else
					return false;
			});
		}

		// nur die PKs herausholen
		thumbs = thumbs.map(function(b) {
			return YAHOO.hmmh.Marker.stripPk(b);
		});

		if(sideOnly) {
			// merklisten-/warenkorb-bilder setzen
			if(sideOnly == 1) {
				YAHOO.hmmh.Marker.cartthumbs = thumbs;
			} else {
				YAHOO.hmmh.Marker.sidethumbs = thumbs;
			}
		} else {
			// ergebnisbilder setzen
			//YAHOO.hmmh.Marker.thumbs = thumbs;
		}
	},
	/**
	 * Initialisieren von gruenem Warenkorb und Eselsohren
	 */
	addResidents : function() {
		YAHOO.hmmh.Marker.initIcons(); // find (yellow) detail icons
		// beides in ein Array packen
		thumb_arrays = new Array(YAHOO.hmmh.Marker.cartthumbs, YAHOO.hmmh.Marker.sidethumbs);
		for(n=0;thumb_array=thumb_arrays[n];n++) {
			// anhand von n koennen wir hier unterscheiden, wo wir sind
			thumb_array.map(function (b) {
				// fuer jedes thumb im jeweiligen bereich (warenkorb/merkliste)
				if(b && b!='null' && YAHOO.hmmh.Marker.reverse[b] && YAHOO.hmmh.Marker.reverse[b].length) {
					YAHOO.hmmh.Marker.reverse[b].map(function (c) {
						if(n==0) {
							YAHOO.hmmh.Marker.addGreenCart(c);
						} else if(n==1) {
							YAHOO.hmmh.Marker.addDogear(c);
						}
					} );
				}
				// This block is used only if green icons are not set by server 
				var pk = b;
				var hasDogear = YAHOO.hmmh.Marker.sidethumbs.indexOf(pk) != -1 ? 1 : 0;
				var hasGreenCart = YAHOO.hmmh.Marker.cartthumbs.indexOf(pk) != -1 ? 1 : 0;
				
				YAHOO.hmmh.Marker.updateMarkerIcons(pk, hasDogear, hasGreenCart);
				YAHOO.hmmh.Marker.updateMarkerIconsForResolution(pk, hasDogear, hasGreenCart);
				// block end
			});
		}
	},
	/** Extract product names from src
	 * @version 2008-09-16 Font-Names added DD
	 * @deprecated replaced by stripPk
	 * */
	stripSrcx : function (src) {
		if(src && src.match(/name=([^&]*)&/) && src.match(/name=([^&]*)&/)[1]) {
			return src.match(/name=([^&]*)&/)[1];
		} else if(src && src.match(/others\/([^&]*)/) && src.match(/others\/([^&]*)/)[1]) {
			return src.match(/others\/([^&]*)/)[1];
		} 
		else if(src && src.match(/font=([^&]*)&/) && src.match(/font=([^&]*)&/)[1]) {
			return src.match(/font=([^&]*)&/)[1];
		}
		else {
			return "FEHLER";
		}
	},
	
	/** Extract product PK (NOT cart entry pk) from longDesc
	 * @version 2008-09-30
	 * */
	stripPk : function (el) {
		if(!el) {
			return "FEHLER";
		}
		if(el.tagName && el.tagName.toLowerCase()=="a") {
			return YAHOO.hmmh.Accordion.findInfo(el).pk;
		}
		var longDesc = YAHOO.hmmh.Marker.stripLongDesc(el);
		if(longDesc) {
			return longDesc;
		}
		/*
		if(el.longDesc) {
			var retVal = el.longDesc.toString();// Gross- und Kleinschreibung beim Attributnamen!!!
			var sl = retVal.lastIndexOf("/");
			if(sl >=0) {
				return retVal.substring(sl+1);
			}
			return retVal; 
		}*/
		return "FEHLER";
	},
	/**
	 * Extract long description, converted to String 
	 */
	stripLongDesc : function(el) {
		if(!el) {
			return null;
		}
		// Search for first image in tag
		if(el.tagName && el.tagName.toLowerCase() != 'img') {
			 el = YAHOO.util.Selector.query('img', el)[0];
		}
		if(el && el.longDesc) {
			var retVal = el.longDesc.toString();// Gross- und Kleinschreibung beim Attributnamen!!!
			var sl = retVal.lastIndexOf("/");
			if(sl >=0) {
				return retVal.substring(sl+1);
			}
			return retVal; 
		}
		return null;
	},

	addDogear : function(img) {
		if(!findClass(img, 'noEselsohr')) {
			if(!findClass(img, "imagetab")) {
				YAHOO.hmmh.Marker.addEselsohr(img);
			}
		}
		
		YAHOO.hmmh.Marker.setClipImage(img, YAHOO.hmmh.Marker.iconNotepadActive);
	},

	addGreenCart : function(img) {
		YAHOO.hmmh.Marker.setCartImage(img, YAHOO.hmmh.Marker.iconCartActive);
	},

	removeDogear : function(img) {
		if(!img && !img.parentNode) return false;

		// eselsohren raussuchen
		dogears = YAHOO.util.Selector.query('.eselohr', img.parentNode);
		dogears.map(function(c){
			// und entfernen
			//img.parentNode.removeChild(c);
			$D.setStyle(c,"display","none");
		});
		YAHOO.hmmh.Marker.setClipImage(img, YAHOO.hmmh.Marker.iconNotepadInactive);
	},
	/**
	 * Merkzettel in Bilderlisten
	 */
	setClipImage : function(img, src) {
		if(!(table = findClass(img, 'img')) && !(table = findClass(img, 'dragItem'))) return false;
		imgs = YAHOO.util.Selector.query('.addToClipboard img', table, true);
		if(imgs.length != 1) return false;
		imgs[0].src = src;
	},
	/**
	 * Warenkorb in Bilderlisten
	 */
	setCartImage : function(img, src) {
		if(!(table = findClass(img, 'img')) && !(table = findClass(img, 'dragItem'))) return false;
		imgs = YAHOO.util.Selector.query('.addToWako img', table, true);
		if(!(imgs.length >0))
			imgs = YAHOO.util.Selector.query('.addToCart img', table, true);
		if(!(imgs.length >0))
			imgs = YAHOO.util.Selector.query('.copyToCart img', table, true);
		//if(imgs.length != 1) return false;
		// For multiple 
		for(var i=0; i < imgs.length ; i++ ) {
			imgs[i].src = src;
		}
	},

	removeGreenCart : function(img) {
		YAHOO.hmmh.Marker.setCartImage(img, YAHOO.hmmh.Marker.iconCartInactive);
	},
	/**
	 * Update dogears and icons for single Item with given Image;
	 * This function will try to determine the pk from image or &lt;A&gt; tag
	 */
	updateItem : function (img, update, isFont) {
		if(typeof update =="undefined") {
			update = true;
		}
		if(typeof isFont =="undefined") {
			isFont = false;
		}
		// TODO remove redundant calls of updateThumbs
		if(update) {
			YAHOO.hmmh.Marker.updateThumbs();
			YAHOO.hmmh.Marker.updateThumbs(1);
			YAHOO.hmmh.Marker.updateThumbs(2);
		}
		
		var productPk = YAHOO.hmmh.Marker.stripPk(img);
		YAHOO.hmmh.Marker.updatePkItem (productPk, isFont);
	},
	
	/**
	 * Update dogears and icons for single Item with given product pk
	 */
	updatePkItem : function (productPk, isFont) {
		hasDogear = YAHOO.hmmh.Marker.sidethumbs.indexOf(productPk) != -1 ? 1 : 0;
		hasGreenCart = YAHOO.hmmh.Marker.cartthumbs.indexOf(productPk) != -1 ? 1 : 0;
		
		if(!isFont && YAHOO.hmmh.Marker.reverse[productPk] && YAHOO.hmmh.Marker.reverse[productPk].length) {
			YAHOO.hmmh.Marker.reverse[productPk].map(function(b) {
				
				/* if(hasDogear && img != 'null' && !YAHOO.util.Selector.query("#accordion dd.warenkorb.invisible").length && findClass(b, 'noEselsohr')) { */
				if(hasDogear && productPk != 'FEHLER' && !YAHOO.util.Selector.query("#accordion dd.warenkorb.invisible").length) {
					YAHOO.hmmh.Marker.addDogear(b);
					
				} else {
					YAHOO.hmmh.Marker.removeDogear(b);
				}
				
				if(hasGreenCart) {
					YAHOO.hmmh.Marker.addGreenCart(b);
				} else {
					YAHOO.hmmh.Marker.removeGreenCart(b);
				}

			});
		}
		YAHOO.hmmh.Marker.updateMarkerIcons(productPk, hasDogear, hasGreenCart);
		YAHOO.hmmh.Marker.updateMarkerIconsForResolution(productPk, hasDogear, hasGreenCart);
	},
	/**
	 * Spezielle Anpassung fuer Icons mit unterschiedlicher Aufloesung (Detailseite images)
	 */
	updateMarkerIconsForResolution : function(productPk, hasDogear, hasGreenCart) {
		// Clear items 
		var allPriceItems = YAHOO.util.Selector.query("img","wakoList");
		for(var i=0; i<allPriceItems.length; i++) {
			var ld = allPriceItems[i].longDesc.toString();// get longDesc
			var sl = ld.lastIndexOf("/");
			if(sl >=0) {
				ld = ld.substring(sl+1);
			}
			YAHOO.hmmh.Marker.updateMarkerIcons(ld, false, false);
		}
		// Update Items with unit (=image resolution) if available
		var priceItems = document.getElementsByName("unitId");
		for(var k=0; k < priceItems.length; k++) {
			var priceItem = priceItems[k];
			if($D.hasClass(priceItem,"unit"+productPk) && priceItem.value >0) {
				
				var unitPk = priceItem.value;
				YAHOO.hmmh.Marker.updateMarkerIcons(productPk + "unit" + unitPk, hasDogear, hasGreenCart);
			}	
		}
	},
	
	/**
	 * Manuelles Entfernen von gruenen Warenkoerben bei Auswahl der Aufloesungen;
	 * wird nur fuer das Loeschen von Eintraegen benoetigt
	 * @version 2009-02-13 DD
	 */
	clearMarkerIcons : function(productPk,unitPk) {
		YAHOO.hmmh.Marker.updateMarkerIcons(productPk + "unit" + unitPk, false, false);
	},

	/**
	 * Aktualisieren der (gelben) Detail-Icons fuer ein Produkt
	 */
	updateMarkerIcons : function(productPk, inNotepad, inCart) {
		if(YAHOO.hmmh.Marker.carticons != null) {
			for(var i=0; i < YAHOO.hmmh.Marker.carticons.length ;i++) {
				var longDesc = YAHOO.hmmh.Marker.stripLongDesc(YAHOO.hmmh.Marker.carticons[i]);
				if(longDesc == productPk) {
					
					if(inCart) {
						YAHOO.hmmh.Marker.carticons[i].src = YAHOO.hmmh.Marker.iconCartDetailActive;
					}
					else {
						YAHOO.hmmh.Marker.carticons[i].src = YAHOO.hmmh.Marker.iconCartDetailInactive;
					}
					//break;
				}
			}
		}
		if(YAHOO.hmmh.Marker.notepadicons != null){
			for(var i=0; i < YAHOO.hmmh.Marker.notepadicons.length ;i++) {
				if(YAHOO.hmmh.Marker.stripLongDesc(YAHOO.hmmh.Marker.notepadicons[i])== productPk) {
					if(inNotepad) {
						YAHOO.hmmh.Marker.notepadicons[i].src = YAHOO.hmmh.Marker.iconNotepadDetailActive;
					}
					else {
						YAHOO.hmmh.Marker.notepadicons[i].src = YAHOO.hmmh.Marker.iconNotepadDetailInactive;
					}
					//break;
				}
			}
		}
	},

	addEselsohr : function (ddItem) {
		//Bei erweiterter Merkliste - verlasse
		if(YAHOO.util.Selector.query("#bestellprozessInhalt .merkzettelContent").length) return false;

		var holemainCol = document.getElementById("mainColFonts");
		if (YAHOO.util.Selector.query("#mainColOther.mainColSpecialFonts") != "") {
			var holemainCol = document.getElementById("mainColOther");
		}

		if (holemainCol != null) {
			//var  = ddItem.parentNode;
			//$D.setStyle(, "border-width", "2px");
			//$D.setStyle(, "border-color", "#016FBC");
			//$D.setStyle(, "border-style", "solid");
		}
		else {
			
			var block = findClass(ddItem, "eselsohrWrapper") ? YAHOO.util.Selector.query(".eselsohrThumb", findClass(ddItem, "eselsohrWrapper"))[0] : findClass(ddItem, "img");
			//if(YAHOO.util.Selector.query('.eselohr', block, true).length > 0 && !YAHOO.util.Selector.query(".filmstreifen").length > 0) return false;
			
			var imgs = YAHOO.util.Selector.query("img", block ? block : ddItem.parentNode);
			var erzeugeEselohr = imgs[0];
			// check if image is dogear
			if(!$D.hasClass (erzeugeEselohr, 'eselohr')) {
				return;
			}
			// Nicht bei diesem Element suchen, es koennte gehovert sein!
			//var bg = findStyle(ddItem.parentNode, 'background-color'); // DD, ersetzt durch folgenden Code:
			var el = ddItem;
			
			var bg = 'transparent';
			while (el != null && (bg =='transparent' || bg == 'rgba(0, 0, 0, 0)')) { // Moz/IE, Safari
				el = el.parentNode;
				if(el == null) { 
					break;
				}
				try {
					bg = $D.getStyle(el,'background-color');
				}
				catch(e) {
				}
			}
			
			// IE
			if(YAHOO.env.ua.ie >0) {
				$D.setStyle(erzeugeEselohr, "border-right", "2px solid " + bg);

				$D.setStyle(imgs[1],"border-width","1px"); // IE verliert die Style-Anweisung fuer die Border
				$D.setStyle(imgs[1],"border-style","solid"); // IE verliert die Style-Anweisung fuer die Border
				if($D.getStyle(imgs[1],'border-color')=="#000" || $D.getStyle(imgs[1],'border-color')=="#810081") {
					$D.setStyle(imgs[1],"border","none");
				}
			}
			
			$D.setStyle(erzeugeEselohr, "background-color", bg);
			
			$D.setStyle(erzeugeEselohr,"display","block");	
		}
	}
};

$E.onContentReady('footer', YAHOO.hmmh.Marker.init, YAHOO.hmmh.Marker, true);
//$E.on(window, 'load', YAHOO.hmmh.Marker.init, YAHOO.hmmh.Marker, true);
/* $E.onDOMReady(YAHOO.hmmh.Marker.init, YAHOO.hmmh.Marker, true); */


