/**
 * @author Fwebdev
 */
/*
 --- --- --- --- --- ---
 EVENTS und Inits (fuer Prototype)
 --- --- --- --- --- ---
 */
/**
 * @classDescription Projektabhaeninge globale Variablen definieren
 */
var zoomPopup = new Array();

function initEvents(){
	if (typeof(varconf) == "object") {
		varconf.init();

		if(varconf.hasLighwindow) {
			XPLAIN.conf.hasLightwindow(true);
		}
	}

	/* ************************* init onclicks ******************************* */
    /**
     * @classDescription Die Konfiguration fuer die Detailseite. Die URL wird in der detailseite.js uebergeben
     * @author	Florian Weber (florian.weber@xplain.de)
     */
	hasFlash = false;
    zoomPopup[1] = "detailPopup";
    zoomPopup[2] = "655";
    zoomPopup[3] = "730";

    /**
     * @classDescription Popups-Links auf der Seite vorbereiten.
     * @author	Florian Weber (florian.weber@xplain.de)
     */
    XPLAIN.core.changeTitleAndTarget();
    var popuplinks = new Array();
    //nach dem className suchen - den original link aus dem href auslesen und an die openWindow uebergeben - original href durch javascipt:void(0) ersetzen
    popuplinks[0] = new Object();
    popuplinks[0]['className'] = "versandLink";
    popuplinks[0]['width'] = '1000';
    popuplinks[0]['height'] = '800';
    popuplinks[0]['scrollbars'] = 'yes';

    popuplinks[1] = new Object();
    popuplinks[1]['className'] = "modeLexikon";
    popuplinks[1]['width'] = '';
    popuplinks[1]['height'] = '';

    popuplinks[2] = new Object();
    popuplinks[2]['className'] = "anbieterPopupx";
    popuplinks[2]['width'] = '800';
    popuplinks[2]['height'] = '800';

    popuplinks[3] = new Object();
    popuplinks[3]['className'] = "agbPopup";
    popuplinks[3]['width'] = '1000';
    popuplinks[3]['height'] = '800';
    popuplinks[3]['scrollbars'] = 'yes';

    popuplinks[4] = new Object();
    popuplinks[4]['className'] = "extern";
    popuplinks[4]['width'] = '800';
    popuplinks[4]['height'] = '800';

    var urlParams;
    popuplinks.each(function(linkele, index){
    	$$('.'+popuplinks[index]['className']).each(function(ele){
            if (popuplinks[index]['urlParams']) {
                urlParams = popuplinks[index]['urlParams'];
            }
            else {
                urlParams = "";
            }
            var params = [ele.readAttribute('href') + urlParams, linkele.className, popuplinks[index]['width'], popuplinks[index]['height'], popuplinks[index]['scrollbars']];
            Event.observe(ele, 'click', XPLAIN.core.openWindow.bindAsEventListener(XPLAIN.core, params));
            XPLAIN.core.disableHref(ele, true);
        });
    });


	if(ele = $$('.layerObjekt')) {
		ele.each(function(elem) {
			if(!elem.select('a')[0]) { //Ausverkaufte Artikel haben keinen Link
				if (elem.select('.prodTexttrue.inv')[0]) {
					Event.observe(elem, 'mouseover', function(){
						elem.select('.prodTexttrue')[0].removeClassName('inv');
					})
					Event.observe(elem, 'mouseout', function(){
						elem.select('.prodTexttrue')[0].addClassName('inv');
					})
				}

			}
		})
	}

	/**
	 * @classDescription Alle .submitFormLink durchgehen und das jeweils umgebene Formular abschicken
	 * @author	Florian Weber (florian.weber@xplain.de)
	 */
	if ($$('.submitFormLink') != "") {
	    $$('.submitFormLink').each(function(ele){
	        Event.observe(ele, 'click', function(){
	            //alert($(ele).up('form').inspect())
	            try {
	                //alert('try');
		            $(ele).up('form').select('input[defaultjstext]').each(function(input){
						if($(input).value == $(input).readAttribute('defaultjstext')) { //#7183
							$(input).value = "";
						}
		            });
	                $(ele).up('form').submit();
	            }
	            catch (e) {
	                throw "submitFormLink not in a Form";
	                return;
	            }
	        });
	        XPLAIN.core.disableHref(ele, true);
	    });
	}

    /**
     * @classDescription focusBlurChecks - alle Elemente aus dem Array suchen, bei einem Treffer die beiden Funktionen anhaengen
     * @author	Florian Weber (florian.weber@xplain.de)
     */
    var focusBlurChecks = ['searchInp', 'bestNrInp', 'tag', 'nlsubscribe-tag', 'nlupdate-tag', 'monat', 'nlsubscribe-monat', 'nlupdate-monat', 'jahr', 'nlsubscribe-jahr', 'nlupdate-jahr', 'firmentag', 'firmenmonat', 'firmenjahr', 'bestellnummer', 'bestellnummerDirekt', 'eigenfont'];
    var $focusBlurChecks = $$('input[defaultjstext]');
	focusBlurChecks.each(function(ele){
		$focusBlurChecks.push($(ele));	
	});
	$focusBlurChecks = $focusBlurChecks.compact();
	$focusBlurChecks = $focusBlurChecks.uniq();
	$focusBlurChecks.each(function(ele){
        if ($(ele)) {
            $(ele).className = $(ele).className + " initState";
            if($(ele).value == "" && $(ele).readAttribute('defaultjstext')) { //#7183
				$(ele).value = $(ele).readAttribute('defaultjstext');
			}
			Event.observe($(ele), 'focus', XPLAIN.core.onFocusCheckEntry.bindAsEventListener(XPLAIN.core, $(ele)));
            Event.observe($(ele), 'blur', XPLAIN.core.onBlurCheckEntry.bindAsEventListener(XPLAIN.core, $(ele)));
	        var form = $(ele).up('form');
	        form.onsubmit = function(){
		        form.select('input[defaultjstext]').each(function(input){
					if($(input).value == $(input).readAttribute('defaultjstext')) { //#7183
						$(input).value = "";
					}
		        });
		        return true;
	        };
		}
    });




    /**
     * @classDescription ctaLink - Durchsucht die Seite nach ctaLink (callToActionLink) und belegt sie ggf. mit onclick Actions.
     * @classDescription Abhängig von einem 2ten Klassennamen (das ctaLink zeigt einem schneller, das es sich hierbei um eine von JS benutzte Klasse handelt)
     * @author	Florian Weber (florian.weber@xplain.de)
     */
    if ($$('.ctaLink') != "") {
        $$('.ctaLink').each(function(ele){
            if ($('orderstartform') && ele.hasClassName("bsLoginSubmit")) {
                XPLAIN.core.disableHref(ele, true);
                Event.observe(ele, 'click', function(){
                    $('orderstartform').submit();
                });
            }
            /* weitere spezielle ctas*/
        })
    }

    /**
     * @classDescription histBack - Legt auf alle Elemente mit der Class "histBack" ein history.back
     * @author	Florian Weber (florian.weber@xplain.de)
     */
    if ($$('.histBack') != "") {
        $$('.histBack').each(function(ele){
            Event.observe(ele, 'click', function(){
                history.back(-1);
            });
            XPLAIN.core.disableHref(ele, true);
        })
    }
    /**
     * @classDescription printLink - Legt auf alle Elemente mit der Class "printLink" das print();
     * @author	Florian Weber (florian.weber@xplain.de)
     */
    if ($$('.printLink') != "") {
        $$('.printLink').each(function(ele){
            Event.observe(ele, 'click', function(){
                window.print();
            });
            XPLAIN.core.disableHref(ele, true);
        })
    }
    /**
     * @classDescription closeBut - Legt auf alle Elemente mit der Class "closeBut" ein window.close
     * @author	Florian Weber (florian.weber@xplain.de)
     */
    if ($$('.closeBut') != "") {
        $$('.closeBut').each(function(ele){
            Event.observe(ele, 'click', function(){
                window.close();
            });
            XPLAIN.core.disableHref(ele, true);
        })


    }

    /**
     * @classDescription Im Warenkorb muss eine Bestellnummer angegeben werden. Fehlermeldung hier Clientseitig
     * @author	Florian Weber (florian.weber@xplain.de)
     */
	if($('warenkorb') && $('bestellnummerDirekt')) {
		$('bestellnummerDirekt').onsubmit = function() {
			if($$('bestellnummerDirekt').value == $('bestellnummerDirekt').defaultValue || $('bestellnummerDirekt').value == "") {
				if($('noArticleFound')) $('noArticleFound').addClassName("inv"); //Damit nicht 2 Fehlermeldungen da stehen
				$('enterOrderNoError').removeClassName("inv");
				return false;
			}
		}
	}



    /**
     * @classDescription searchCompleter AJAX-Anfrage an
     * @author	Florian Weber (florian.weber@xplain.de)
     */
	if($('searchInp')) {
		try {
		 var searchInpAjax = new Ajax.Autocompleter('searchInp', 'completerResult', completerResultPath, {
			 paramName: "query",
			 minChars : 3,
			 autoSelectFirst : 'false'
			 //updateElement: completerAction
		 });
		} catch(ex) {}
	 }
    /**
     * @classDescription .factFinderHinweis enthaelt den "Suchergebnis bereitgestellt von FACT-Finder" Text und soll auch im IE immer ganz unten in der leftCol stehen
     * @author	Florian Weber (florian.weber@xplain.de)
     */
    if(Prototype.Browser.IE && $$('.factFinderHinweis')[0]) {
		if(!$('allCols') || !$('suchesub')) return;
		var allColsHeight = $('allCols').getHeight();
		$('suchesub').setStyle('height: ' + allColsHeight +'px');
     }
    /* ************************* END init onclicks ******************************* */

    /* ************************* init Formulare ******************************* */

    /**
     * @classDescription Die Info-Layer initialisieren (i) - Kleine Textlayer neben den Formularen mit Zusatzinfos
     * @author	Florian Weber (florian.weber@xplain.de)
     */
    if ($$(".iconInfo")) {
        var obj = $$(".iconInfo");
        anz = obj.length;
        obj.each(function(ele, index){
			if(ele.select('dd').length > 0) ele.select('dd')[0].addClassName('inv');
            Event.observe(ele, 'mouseover', function(){
				try {
					obj.each(function(elem){
						if(ele == elem){
							elem.select('.infoBlock')[0].removeClassName('inv');
							ele.select('dd')[0].removeClassName('inv');
						} else {
							elem.select('.infoBlock')[0].addClassName('inv');
						};
					});
				} catch (ex) {}
			});
            Event.observe(ele, 'mouseout', function(){
				try {
					obj.each(function(elem){
						elem.select('.infoBlock')[0].removeClassName('inv');
						ele.select('dd')[0].addClassName('inv');
					});
				} catch (ex) {};
			});
        });
    }


    /**
     * @classDescription Anzeigen / Ausblenden von Bloecken je nach Status der checkboxen oder Radio-Buttons
     * @author	Florian Weber (florian.weber@xplain.de)
     */
    //Wenn es "lieferadresse" auf der Seite gibt sind wir auf der Kundendaten Seite.
    var toggleArray;
    if ($('lieferadresse')) {
		toggleArray = new Array();
		if ($('lieferadresse'))
			toggleArray[toggleArray.length] = 'lieferadresse';
		if ($('packstation')) //gibt es nicht in jedem land
			toggleArray[toggleArray.length] = 'packstation';
    }
    //Wenn es "perRechnung" auf der Seite gibt sind wir auf der bs_zahlungsarten Seite.
    if ($('perRechnung') || $('perNachname') || $('perAlteKreditkarte') || $('perKreditkarte') || $('perPaypal') || $('perIdeal') || $('perVorkasse')) {
		toggleArray = new Array();
		if ($('perRechnung'))
			toggleArray[toggleArray.length] = 'perRechnung';
		if ($('perNachname')) //AT hat z.B. keine Lieferung per Nachname
			toggleArray[toggleArray.length] = 'perNachname';
		if ($('perAlteKreditkarte'))
			toggleArray[toggleArray.length] = 'perAlteKreditkarte';
		if ($('perKreditkarte'))
			toggleArray[toggleArray.length] = 'perKreditkarte';
		if ($('perPaypal'))
			toggleArray[toggleArray.length] = 'perPaypal';
		if ($('perIdeal'))
			toggleArray[toggleArray.length] = 'perIdeal';
		if ($('perVorkasse'))
			toggleArray[toggleArray.length] = 'perVorkasse';
    }
    if (toggleArray) {
		var checkboxChecked = "";
        toggleArray.each(function(ele){
			var toggleBlock = $(ele + 'Block');


            if(!toggleBlock) return;

			if ($(ele).checked == false) { //alle ausblenden, es sei denn das element ist gechecked (nach reload, oder durch Vorbelegung im HTML)
				toggleBlock.style.display = 'none';
			}
			else {
				checkboxChecked = $(ele);
			}
			Event.observe($(ele), 'click', XPLAIN.core.toggleVisibility.bindAsEventListener('', toggleBlock));
			if ($(ele).readAttribute('type') == "checkbox") {
				Event.observe($(ele), 'click', toggleCheckbox.bindAsEventListener('', $(ele), toggleArray));
			}
			else {
				if ($(ele).readAttribute('type') == "radio") {
					Event.observe($(ele), 'click', toggleRadio.bindAsEventListener('', $(ele), toggleArray));
				}
			}
		});
		if(checkboxChecked != "") { //Wenn beim laden eine checkbox ausgewaehlt ist (z.B. nach hasError) alle anderen toggleCheckboxen disablen
			toggleArray.each(function(ele){
				if ($(ele).readAttribute('type') == "checkbox" && $(ele) != checkboxChecked) {
					$(ele).disabled = "disabled";
				}
			});
		}

    }

    /**
     * @classDescription Ein/Ausblenden des GutscheinBlocks, wenn checkbox geklickt wurde. (alte voucher)
     * @classDescription Wenn ein Gutschein eingeloest werden soll, muss der Kunde die Daten eingeben.
     * @author	Florian Weber (florian.weber@xplain.de)
     */
    if ($('gutscheinBlock')) {
        ele = "gutschein";
        toggleArray = new Array('gutschein');
        toggleRadio('', $(ele), toggleArray);
        Event.observe($(ele), 'click', toggleRadio.bindAsEventListener('', $(ele), toggleArray));
    }
	if ($('voucherBox')) {
		toogleVoucher();
		
		ele = $('redeemvoucher360e');
		Event.observe($(ele), 'click', function() {
			toogleVoucher();
		});


	}


	/**
     * @classDescription Event Kundendaten eingeben - Wenn bei Anrede 'Firma' ausgewählt wird, muss ein zusaetzlicher Block eingeblendet werden
     * @author	Florian Weber (florian.weber@xplain.de)
     */
    if (($('kundendaten') && $('customerdataform')) || ($('katalogBestellen') && $('catalogorderform')) ) {
        toggleFirmenkunden(); //wird dann beim onload aufgerufen
        Event.observe($('anrede'), 'change', toggleFirmenkunden.bindAsEventListener());
    }


    /**
     * @classDescription Fuer den IE6 an alle checkboxen/radios die Class noBorder anhaengen.
     * @author	Florian Weber (florian.weber@xplain.de)
     */
    if (BrowserDetect.browser == "Explorer" && BrowserDetect.version >= "6") {
        allInput = document.getElementsByTagName('input');
        $A(allInput).each(function(ele){
            if ($(ele).readAttribute('type') == "checkbox" || $(ele).readAttribute('type') == "radio") {
                $(ele).addClassName('noBorder');
            }
        });
    }

    /**
     * @classDescription Console.Debug fuer alle "Nicht Mozilla Browser" abfangen
     * @classDescription falls noch console.debug Aufrufe drinstehen, die nicht per cd() aufgerufen wurden
     * @classDescription console.debug kann man damit weiterhin ohne die debug-Ueberpruefung einsetzen, ohne Felher im IE zu provizieren
     * @author	Florian Weber (florian.weber@xplain.de)
     */
    if (typeof BrowserDetect == 'object') { //wenn die variable BrowserDetect gesetzt ist
        if (BrowserDetect.browser == "Explorer") {
            //alert("1");
            //try { console.assert(1); }
            //catch (e) {	console = {	debug: function(){},log: function(){}}}
        }
    }

    /* ************************* END init Formulare ******************************* */


    /* ************************* init scripte nachladen ******************************* */
    /**
     * @classDescription Script fuer spezielle Seiten nachladen
     * @author	Florian Weber (florian.weber@xplain.de)
     */
    if (($('detailseite') != null && $('details') != null) || $('detailPopup') && $('previewImages')) {
		var hasScript = false;
		$$('script').each(function(s){
			if(!hasScript){
				hasScript = (s.src.indexOf("detailseite") > -1);
			}
		})
		if(!hasScript){
			var params = ['detailseite'];
        	XPLAIN.core.loadScripts(params);
		}
	}

//    if ($('modeLexikon') != null && $('lexikonEntries') != null) {
//        var params = ['modelexikon'];
//        XPLAIN.core.loadScripts(params);
//    }

	if ($('detailPopup') && $('flashContent')) {
		loadSwf();
	}
	var ele = null;
	if (ele = $('nlAreas')) {
		function removeExpanded(){
			return ele.select('.nlArea').each(function(elem){
				elem.removeClassName('expanded');
				elem.addClassName('contracted');
				if(elem.hasClassName('init')){
					elem.removeClassName('init');
					elem.removeClassName('contracted');
					elem.addClassName('expanded');
				}
			});
		};
		ele.addClassName('hasJS');
		ele.select('h1').each(function(elem){
			elem.observe('click', function(){
				removeExpanded();
				elem.ancestors()[0].removeClassName('contracted');
				elem.ancestors()[0].addClassName('expanded');
			});
		});
        ele.select('form').each(function(elem){
            elem.onsubmit = function(){
                elem.select('input[name=init]')[0].value = true
            };
        });
		removeExpanded();
	}

	/**
	* @classDescription Stylesheet fuer Safari einbinden (Es gibt keinen anderen vernueftigen Weg Webkit zu unterscheiden)
	* @author	Florian Weber (florian.weber@xplain.de)
	*/
	if(Prototype.Browser.WebKit == true) {
		params =['webkit'];
		XPLAIN.core.loadCss(params, false);
	}

	/* ************************* END init scripte nachladen ******************************* */
}

/* ***
 * ENDE EVENTS und Inits (fuer Prototype) *
 *** */
/*
 --- --- --- --- --- ---
 FUNCTIONS
 --- --- --- --- --- ---
 */
/**
 * @classDescription Wird vom AutoCompleter aufgerufen und ersetzt das normale Verhalten beim klick auf "Enter"
 * @author	Florian Weber (florian.weber@pixelpark.com)
*/
function completerAction() {
	//nothing right now #7182
}
/* ************************* func Formulare ******************************* */
/**
 * @classDescription Wenn eine Checkbox gechecked wurde, werden alle anderen Checkboxen, die in dem Array �bergebenurdenaufaudauf disabled gesetzt.
 * @classDescription Wenn die checkbox wieder abgehakt wird, werden alle anderen checkboxen wieder freigegeben.
 *
 * @author	Florian Weber (florian.weber@xplain.de)
 * @param {event} [e] Event vom Browser
 * @param {Object} clickedEle Die Checkbox, auf die geklickt wurde
 * @param {Array} toggleArray Liste aller checkboxen, die auf der Seite beeinflusst werden sollen.
 */
function toggleCheckbox(e, clickedEle, toggleArray){
    toggleArray.each(function(ele, index){
        if (ele != clickedEle.id) {
            if (clickedEle.checked == true) {
                $(ele).checked = false;
                $(ele).disabled = "disabled";
            }
            else {
                $(ele).disabled = "";
            }
        }
    });
}

/**
 * @classDescription Der Block des aktiven Radio-Buttons wird jeweils eingeblendet, alle anderen Bloecke ausgeblendet.
 *
 * @author	Florian Weber (florian.weber@xplain.de)
 * @param {event} [e] Event vom Browser
 * @param {Object} clickedEle Der radio-button, auf den geklickt wurde
 * @param {Array} toggleArray Liste aller radios, die auf der Seite beeinflusst werden sollen.
 */
function toggleRadio(e, clickedEle, toggleArray){
    toggleArray.each(function(ele, index){
        toggleBlock = $(ele + 'Block');
        if(!toggleBlock) return;
        if ($(ele).checked == true) {
            toggleBlock.style.display = "block";
        }
        else {
            toggleBlock.style.display = "none";
        }
    });
}

function toogleVoucher() {
	if($('redeemvoucher360e').checked == true) {
		$('voucherDisplay').removeClassName("inv");
	} else {
		$('voucherDisplay').addClassName("inv");
	}
}

/**
 * @classDescription Kundendaten eingeben - Wenn bei Anrede 'Firma' ausgewählt wird, muss ein zusaetzlicher Block eingeblendet werden
 * @author Florian Weber (florian.weber@xplain.de)
 */
function toggleFirmenkunden(){
    if ($('anrede').options[$('anrede').selectedIndex].value.toLowerCase() == "firma") {
        $('firmendaten').removeClassName('inv');
	    $('firmendaten').addClassName('vis');
    }
    else {
        $('firmendaten').addClassName('inv');
	    $('firmendaten').removeClassName('vis');
    }
}


/* ************************* END func Formulare ******************************* */
/**
 * @classDescription Im Warenkorb eine Option aendern - Form submitten
 * @author Florian Weber (florian.weber@xplain.de)
 */
function changeWK() {
	$('warenkorbformaction').value = 'change';
	$('warenkorbform').submit();
}


function startFlashAni(pathtoflash){
    if ($('flashAni')) {
        /*swfObject2.0
         var flashvars = {}
         var params = {}
         var attributes = {
         id: "flashAni",
         name: "flashAni"
         };
         swfobject.embedSWF(flashPath + "farbwechsel.swf", "flashAni", "224", "28", "8", '', flashvars, params, attributes);*/
        var so = new SWFObject(pathtoflash, "flashAni", "224", "28", "8");
        so.write('flashAni');
    }
}


function urlEncode(str){
	var str = str.replace(/\s/g, "-") // Whitespaces gegen -
	str = str.replace(/[ü]/g, "ue");
	str = str.replace(/[Ü]/g, "Ue");
	str = str.replace(/[ä]/g, "ae");
	str = str.replace(/[Ä]/g, "Ae");
	str = str.replace(/[ö]/g, "oe");
	str = str.replace(/[Ö]/g, "Oe");
	str = str.replace(/[&]/g, "und");
	str = str.replace(/-+/g, "-"); // Folgen aus "-"-Zeichen gegen ein "-"-Zeichen ersetzen
	str = str.replace(/[^a-z|A-Z|0-9|-]/g, "");
	return str;
}

/**
 * @classDescription Prototype onload-Event
 */
Event.observe(window, 'load', function(){
    initEvents();
});

/*

 document.observe("dom:loaded", function() {

 initEvents();

 })

 */







