/**
 * Main www.gaxcode.com javascript file Min. PrototypeJS 1.6 required
 */

// globale Variablen / Objekte ----------------------------------------------
var oImg;
//var l10n aus jsonl10n-Servlet

// Autostart-JS -------------------------------------------------------------
document.observe('dom:loaded', function() {

	// brandpicts scroller
    var ul=document.getElementById('brandpicts');
	if( false || ul && ul.scrollWidth>ul.offsetWidth){
		var maxW=ul.clientWidth;
		var imagesW=ul.clientWidth+ul.scrollWidth;
		ul.scrollLeft=0;
		ul.style.overflow='hidden';
		var lis=$$('#brandpicts li');
		var frgm=document.createDocumentFragment();
		for(ii=0, lisl=lis.length; ii<lisl; ii++){
		    frgm.appendChild(lis[ii].cloneNode(true));
		}
		//for(jj=0; jj<1; jj++){
		    ul.appendChild(frgm.cloneNode(true));
		//}
		var scroll=function(el){
			return scroll=function(){
			    if(el.scrollLeft>=imagesW-maxW){
			        el.scrollLeft=19; // 19=paddingLeft
			    } else {
			        el.scrollLeft=el.scrollLeft+2;
			    }
			}
		}
		setInterval(function(){ scroll(ul) },60);
	}
	
	var menu=$('loginmenu');
	if(sessionStorage != null) {
		if(sessionStorage.getItem('hideLogin')===null || sessionStorage.getItem('hideLogin')==='yes'){
			menu.hide();
		}
		$('loginlink').observe('click', function(ev){
			ev.preventDefault();
			if(sessionStorage.getItem('hideLogin')==='yes'){
				sessionStorage.setItem('hideLogin','no');
			} else {
				sessionStorage.setItem('hideLogin','yes');
			}
			Effect.toggle(menu,'blind', { duration: 0.3 });
		});

                if( "true" == GET("login") ){
                    menu.show();
                }
	}
    // Links je Medium anzeigen
    var dlist = $('oslink');
    if (dlist && (window.external && ("AddSearchProvider" in window.external))) {
        dlist.style.display = 'block';
        dlist.observe('click', function() {
            window.external.AddSearchProvider('http://www.gaxcode.com/opensearch.xml');
        });
    }
    var iphone = $$('iphonelink');
    if (iphone && Prototype.Browser.MobileSafari) {
        iphone.style.display = 'block';
    }
    var benefits = $('benefits');
    if (benefits) {
    	benefits.observe('mouseover', function(ev){
    		if(ev.target.nodeName.toLowerCase()=='img'){
    			ev.target.src=ev.target.src.replace(/\.png/,"_aktiv.png");
    		}
    	});
    	benefits.observe('mouseout', function(ev){
    		if(ev.target.nodeName.toLowerCase()=='img'){
    			ev.target.src=ev.target.src.replace(/_aktiv\.png/,"\.png");
    		}
    	});
    }
    // Wkorb Produktbild-Mouseover
    var vonWo = $('wkorb-inhalt');
    if (vonWo) {
        var produktBilder = vonWo.select('img');
        /*
		 * bigImg = document.createElement("img"); //Cart-Image-Rollover-Bild
		 * bigImg.id = "moPic"; vonWo.appendChild(bigImg); // hängt neues Bild
		 * in DOM-Baum ein
		 */
        for (var i=0, l=produktBilder.length; i<l; i++) {
            produktBilder[i].observe('mouseover', function() {
                this.setStyle({
                    height: '150px',
                    marginBottom:'-129px',
                    position:'relative',
                    zIndex:100/*
					 * ,
					 * marginRight:-this.getWidth()*(150/21)/2+'px'
					 */
                });
            });
            produktBilder[i].observe('mouseout', function() {
                this.removeAttribute('style');
            });
        }
    } // endif (vonWo)

    // externe Links in neuem Fenster oeffnen
    $$('a[rel="external"]').each(function(a){
        var url = a.readAttribute('href');
        if(url !== '' && url !== '#') {
            a.observe('click', function(e) {
                e.stop();
                e.preventDefault();
                window.open(url);
            });
        }
    });
    // jsonly Elemente einblenden
    $$('.jsonly').each(function(el){
    	el.style.display='block';
    });
    // Einheitliche Boxhoehe nach Laden aller Bilder
    window.onload = function(){
        var mBoxn = $$('.main .box');
        equalizeBoxHeight(mBoxn);
    }

    // intern ist noch ein web/ an der URL vorangestellt, produktiv/telesto ohne
    var pathArray = window.location.pathname.split( '/' );
    var layoutPath = '';
    if( pathArray[1] != 'gax' ){ layoutPath = '/'+pathArray[1]; }
	
    // runde Ecken
    var oben = new Element('img', {
        id: 'bgtop', alt:'',
        src: layoutPath+'/bilder/layout/box_top.png'
    });
    var unten = new Element('img', {
        id: 'bgbtm', alt:'',
        src: layoutPath+'/bilder/layout/box_btm.png'
    });
    var maindivs = $$('.main:not(#home)');
    if (maindivs.length >0) {
        for (var i = 0, l = maindivs.length; i < l; i++) {
            maindivs[i].insert(oben, {
                position: 'top'
            }).insert(unten);
        }
    }
    // FreeFloatBox starten
	FB.init();

    // Disabled Buttons für IE ausgrauen
    setDisabledClass4Buttons();
    // zum erstbesten Eingabefeld springen?
    gotoAnker();
	// Eingabefeldertexte setzen
    $$('input[type=text], textarea').each(function(el){
    	el.observe('focus',textInputFocusHandler);
    });
    $$('input[type=text], textarea').each(function(el){
    	el.observe('blur',textInputBlurHandler);
    });
});

HTTP_GET_VARS=new Array();
strGET=document.location.search.substr(1,document.location.search.length);
if(strGET!='')
{
    gArr=strGET.split('&');
    for(i=0;i<gArr.length;++i)
    {
        v='';
        vArr=gArr[i].split('=');
        if(vArr.length>1){
            v=vArr[1];
        }
        HTTP_GET_VARS[unescape(vArr[0])]=unescape(v);
    }
}

function GET(v)
{
    if(!HTTP_GET_VARS[v]){
        return 'undefined';
    }
    return HTTP_GET_VARS[v];
}

// |----------------------------------------------------------------|
// | FreeFloatBox |
// |----------------------------------------------------------------|
var FB = {
    boxn : Array,
    duration: 1000,
    Storage: {},
    init : function() {
        FB.boxn = $$('.free.box');
        FB.boxnCl = $$('.closed');
        FB.boxnClNr = FB.boxnCl.length;
        if (FB.boxn.length >0) {
            FB.maLeft = FB.boxn[0].offsetLeft; // Abstand zw. den Boxen
            FB.breite = FB.boxn[0].offsetWidth; // Breite der Boxen
            FB.boxn.invoke('identify'); // nur damit reagieren die Boxen aufs ausblenden
        }
        FB.mainDiv = $$('.main:not(#home)')[0]; // alle div.main außer der Homepage
        if (FB.boxnClNr > 0 ) {
        	// footer absolut positionieren, damit er nicht hochrutscht
            $$('.container > div.footer')
            	.invoke('absolutize')
            	.invoke('setStyle',{'width':'100%'}); 
            // FB.boxn.select('.trigger').each(function(el){
            $$('.trigger').each(function(el){
                if(el.up().select('img').length > 3) {
                    el.setStyle({
                        'visibility': 'visible'
                    });
                }
            });
        }
        FB.attach();
    },
    attach : function() {
        var l=FB.boxn.length;
        for (var i=0; i<l; i++ ) {
            FB.boxn[i].setStyle({
                left: (FB.boxn[i].offsetLeft - FB.maLeft) +'px',
                width: FB.boxn[i].getWidth() +'px',
                top: FB.boxn[i].offsetTop-FB.maLeft +'px'
            });
        }
        // getrennt, weil sonst boxen überlappen
        for (var i=0; i<l; i++ ) {
            if (FB.boxn[i].hasClassName('closed')) {
                FB.boxn[i].style.position ='absolute';
                FB.boxn[i].observe('click',FB.execute);
            }
        }
    },
    execute : function(e) {
        // e = Event
        var target = e.element().up('.box');
        if ( e.target.hasClassName('trigger')) {
            if ( target.hasClassName('closed')  ) {
            	e.target.innerHTML=l10n.less;
                if (FB.mainDiv) {
                    FB.mainDiv.absolutize();
                }
                target.style.zIndex = 5;
                FB.expand(e, target, target.style.left);
                FB.toggle('.free.box:not(#'+target.id+')');
                target.removeClassName('closed');
                setTimeout( function() {
                    $(target.id).observe('click',FB.execute);
                }, FB.duration);
            } else {
				e.target.innerHTML=l10n.more;
                FB.collapse(e, target);
                setTimeout( function() {
                    target.style.zIndex = '';
                    $(target.id).observe('click',FB.execute);
                }, FB.duration);
                target.addClassName('closed');
                FB.toggle('.free.box:not(#'+target.id+')');
            }
        }
    },
    expand : function(e,trgt,links) {
        // e = Event, trgt = Element, links = String
        $(trgt.id).stopObserving('click');
        FB.Storage.posLeft = links;
		new Effect.Parallel(
		[
			new Effect.Morph( trgt, {
				 style: { width: $$('.main')[0].getWidth() +'px' },
				 sync:true
			}),
			new Effect.Move(trgt,{
				 x: 0,
				 // y: trgt.positionedOffset[0],
				 y: trgt.offsetTop-FB.maLeft,
				 mode: 'absolute',
				 sync:true
			})
		], { duration:FB.duration/1000 }
		);
    },
    collapse : function(e, trgt) {
		// e = Event, trgt = Element
		$(trgt.id).stopObserving('click');
		new Effect.Parallel(
		[
			new Effect.Morph( trgt, {
				style: { width: FB.breite+'px' },
				sync:true
			}),
			new Effect.Move(trgt,{
				x: parseInt(FB.Storage.posLeft),
				y: trgt.offsetTop-FB.maLeft,
				mode: 'absolute',
				sync:true
			})
		], { duration:FB.duration/1000 }
		);
    },
    toggle : function(sel) {
        // sel = String
        var elem = $$(sel);
        for (var i=0,l=elem.length;i<l;i++) {
            new Effect.toggle(elem[i], 'appear');
        }
    }
};

var Stars = Class.create({
    multipleRate: true, // Mehrfach Abstimmung möglich bzw. änderbar?
    sMax: 0,		// Is the maximum number of stars
    holder: null, 	// Is the holding pattern for clicked state
    preSet: null,	// Is the PreSet value onces a selection has been made
    rated: false,	// If a rating has occured
    initialize: function(wrapper,field) {
        if(this.sMax ==0) {
            this.wrapper = $(wrapper);	// element containing all the others
            this.field = $(field);		// the hidden input field to update
            this.allStars = this.wrapper.select(this.wrapper.childElements()[0].nodeName);
            this.sMax = this.allStars.length;
            
            if( this.field.value > 0 ){
                // Vorbelegen, bei Fehler etc.
                for(i=0; i<this.sMax; i++){
                    if((i+1)==this.field.value){
                        this.holder = this.field.value;
                        this.rated = true;
                        this.preSet = this.allStars[i];
                        this.overTarget(this.preSet);
        }}}}
        // Stars.allStars.invoke('observe','mouseover',
		// Stars.over.bindAsEventListener(this) );
        this.allStars.each(function(el){
            el.observe('mouseover', this.over.bindAsEventListener(this) );
            el.observe('mouseout', this.out.bindAsEventListener(this) );
            el.observe('click', this.rateIt.bindAsEventListener(this) );
        }.bind(this));
    },
    over: function(e){ // Rollover for image Stars
        this.overTarget(e.target);
    },
    overTarget: function(e){ // Rollover for image Stars
        if(this.multipleRate || !this.rated){
            // var el = Event.element();
            // var s = e.target.previousSiblings().length; // Get the nr of the selected star
            var s = e.previousSiblings().length; // Get the nr of the selected star

            for(i=0; i<this.sMax; i++){
                if(i<=s){
                    this.allStars[i].className = "on";
                    // this.wrapper.select(".rateStatus")[0].innerHTML =
					// e.target.title;
                    this.wrapper.select(".rateStatus")[0].innerHTML = this.allStars[i].title;
                    this.holder = s+1;
                } else { this.allStars[i].className = ""; }
            }
        }
    },
    out: function(e){ // For when you roll out of the the whole thing
        if(this.multipleRate || !this.rated){
            if(!this.preSet){
                for(i=0; i<this.sMax; i++){
                    this.allStars[i].className = "";
                    this.wrapper.select(".rateStatus")[0].innerHTML = e.target.parentNode.title;
                }
            } else {
                // this.over(this.preSet);
                // this.wrapper.select(".rateStatus")[0].innerHTML =
				// this.wrapper.select(".ratingSaved")[0].innerHTML;
                this.overTarget(this.preSet);
            // var outPreSet = this.over.bind(this.preSet);
            // outPreSet();
            }
        }
    },
    rateIt: function(e){ // When you actually rate something
        if(this.multipleRate || !this.rated){
            this.wrapper.select(".rateStatus")[0].innerHTML = this.wrapper.select(".ratingSaved")[0].innerHTML + " : "+e.target.title;
            this.preSet = e.target;
            this.rated=true;
            this.sendRate();
			// this.over(e);
        }
    },
    sendRate: function(e){ // Send the rating information somewhere using Ajax or something
        // var frage = confirm("Your rating was: "+el.title);
        this.field.value = this.holder;
    }
});

// Funktionen -----------------------------------------------------------------

function setDisabledClass4Buttons(){
    // Disabled Buttons ausgrauen
    $$('input[disabled]').each(function(el){
        if( el.up('.btn') != null ){
            el.up('.btn').addClassName('disabled');
        }
    });
}

function doAfterAjaxRequest(){
    // Wird beim Ajax-Status.stop aufgerufen
    // um z.B. die Button StyleClass disabled zu setzen
    setDisabledClass4Buttons();
    var mBoxn = $$('.main .box');
    if (mBoxn.length > 0) {
        mBoxn.invoke('removeAttribute','style');
        document.observe('dom:loaded', equalizeBoxHeight(mBoxn));
    }
}

function equalizeBoxHeight(liste) {
    // Einheitliche Boxhoehe
    // var mBoxn = $$('.main .box');
    if (liste.length > 1) {
        var mbh = liste.invoke('getHeight').max();
        liste.each(function(el) {
            el.style.height = mbh+'px';
        });
    }
// return mBoxn;
}

function ajaxRequestContainsErrors() {
    // return document.getElementById("maximumSeverity").value == "2";
    return $F("maximumSeverity") == "2";
}

function showModalPanelOnComplete(panelId){
    if (!ajaxRequestContainsErrors()) Richfaces.showModalPanel(panelId);
}
function closeModalPanel(panelId) {
    if (!ajaxRequestContainsErrors()) Richfaces.hideModalPanel(panelId);
}

function openUrlOnComplete(url,nullTest){
    if (!ajaxRequestContainsErrors() && !isStrEmpty(nullTest) ){
        window.open(url);
    }
}

function openUrlsOnComplete(separatedList, root_context){
    // separatedList kann mehrere PDF-Urls getrennt durch # enthalten
    if( !isStrEmpty(separatedList) ){
        if( separatedList.indexOf("#") > -1 ){
            var shippingNoteUrls = separatedList.split("#");
            var shippingUrl = null;
            for( var i = 0; i < shippingNoteUrls.length; i++ ){
                shippingUrl = shippingNoteUrls[i];
                openUrlOnComplete(root_context+'../PdfServlet?file='+shippingUrl,shippingUrl);
            }
        } else {
            openUrlOnComplete(root_context+'../PdfServlet?file='+separatedList,separatedList);
        }
    }
}

function gotoField(field) {
    // Nur setzen, wenn focusField leer
    var reqFocusField = "#{empty focusField}";
    if( reqFocusField ) {
        var f = "initFocus('" + field + "');";
        window.setTimeout(f,1);
    }
}
function initFocus(field) {
    var el = $(field);
    if( el !== null )
        el.focus();    
}
function gotoAnker() {
    // Nur wenn bottom=true als Parameter übergeben
    var gotoAnkerName = $F('gotoAnkerName');
    if( gotoAnkerName !== '') {
        location.href = '#'+gotoAnkerName;
    }
}    

function reloadCaptcha(){
    var images = document.images;
    if( images !== null ){
        var searchString = ':captcha';
        var imgId = null;
        var indexOfCaptcha=null;
        for( i=0; i < images.length; i++){
            imgId=images[i].id;
            if( imgId !== null ){
                indexOfCaptcha = imgId.lastIndexOf(searchString);
                if( indexOfCaptcha !== -1 && indexOfCaptcha == (imgId.length-searchString.length) ){
                    images[i].src = '../../../jcaptcha?time=' + new Date().getTime();
                    break;
                }
            }
        }
    }
}

function OpenMySaferPayWindow() {
    if( !ajaxRequestContainsErrors() ){
        var link=$F("payLink");
        OpenSaferpayTerminal(link, this, 'BUTTON');
    }
}

function isStrEmpty( inputStr ) { 
    if ( null == inputStr || "" == inputStr ) { 
        return true; 
    } 
    return false; 
}

function textInputFocusHandler(){
	if(this.value==this.defaultValue) { this.value=''; }
}
function textInputBlurHandler(){
	if(this.value=='') { this.value=this.defaultValue; }
}

function clearPrice(inputElement){
    // PriceSpan ausblenden, wenn die Menge geändert wird
    if( inputElement != null ){
        var id = inputElement.name; // Bei InputSpinner wird nur name vergeben
        // Id bis zum letzten : abschneiden
        if( id.lastIndexOf(":") != -1 ){
            id = id.substring(0, id.lastIndexOf(":")+1);
            id += "priceText";
            var element = document.getElementById(id);
            if( element != null ){
                element.style.display = "none";
            }
        }
    }
}

function calcSum(inputElement, sumFieldId, vpeAmountFieldId){
    if( inputElement != null ){
        var anz = inputElement.value;

        // Komplette Id des SummenFeld ermitteln
        var idSumField = inputElement.id;
        idSumField = idSumField.substring(0, idSumField.lastIndexOf(":")+1);
        idSumField += sumFieldId;

        // Komplette Id des vpeAmountFelds ermitteln
        var idVpeAmountField = inputElement.id;
        idVpeAmountField = idVpeAmountField.substring(0, idVpeAmountField.lastIndexOf(":")+1);
        idVpeAmountField += vpeAmountFieldId;

        // alert('anz='+anz+',idSum:'+idSumField+',vpe:'+anzPerVpe+',idinput:'+inputElement.id);
        var sumElement = $(idSumField);
        var vpeAmountElement = $(idVpeAmountField);
        // alert("input-dest:"+element);
        if( sumElement != null ){
            // Erstmal Summe leeren
            sumElement.value = '0';
            if( vpeAmountElement != null && !isNaN(anz) ){
                var anzPerVpe = vpeAmountElement.value;
                if( anzPerVpe != null && anz != null ){
                    sumElement.value = anz*anzPerVpe;
                }
            }
        }
    }
}

function calcWeight(inputElement){
    if( inputElement != null ){
        // gesamtGewicht errechnen
        var list = document.getElementById("frmPackages:packlist");
        var i = 0;
        var summe = 0;
        for( i=0; i<list.childNodes.length; i++){
            var gewicht = document.getElementById("frmPackages:packlist:"+i+":weight").value;
            var quantumTable = document.getElementById("frmPackages:packlist:"+i+":quantumValue");
            var menge = quantumTable.getElementsByTagName("input")[0].value;

            if(menge != null && gewicht != null){
                summe += menge * gewicht;
            }
        }


        // wie viele packete muessen gepackt werden, um das Gesamtgewicht
		// unterzubringen
        var maxWeight = document.getElementById("frmPackages:maxWeight").value;
        var packete = 0;
        if(summe != null && maxWeight != null){
            packete = Math.ceil(summe / maxWeight);
        }
        var sumFlatRate = 0;
        var flatRate = document.getElementById("frmPackages:flatRate").value;
        if(packete != 0){
            sumFlatRate = flatRate * packete;

        }
        sumFlatRate = sumFlatRate / 100;

        // Format anpassungen dass statt 15.9 15,90 zurueckkommt
        if(sumFlatRate != null && sumFlatRate.toString().indexOf('.', 0) > -1){
            var stellenHintermPunkt = sumFlatRate.toString().substr(sumFlatRate.toString().indexOf('.', 0) +1, sumFlatRate.toString().length - sumFlatRate.toString().indexOf('.', 0));
            sumFlatRate = sumFlatRate.toString().replace('.' , ',');
            if(stellenHintermPunkt.length == 1){
                sumFlatRate = sumFlatRate + "0";
            }            
        }

        // ergebnisse amzeigen
        document.getElementById("frmPackages:sumWeight").value = summe;
        document.getElementById("frmPackages:numberOfPackets").value = packete;
        document.getElementById("frmPackages:sumFlatRate").value = sumFlatRate;
        // document.getElementById("frmPackages:pauschalCostsSum").value =
		// sumFlatRate;

        var buyFlag = packete < 1;       
        document.getElementById("frmPackages:buyButton").disabled = buyFlag;

    }
}

/*
 * function setFlatRate(value){ value = value /100; //Format anpassungen dass
 * statt 15.9 15,90 zurueckkommt if(value != null &&
 * value.toString().indexOf('.', 0) > -1){ var stellenHintermPunkt =
 * value.toString().substr(value.toString().indexOf('.', 0) +1,
 * value.toString().length - value.toString().indexOf('.', 0));
 * 
 * value = value.toString().replace('.' , ',');
 * 
 * if(stellenHintermPunkt.length == 1){ value = value + "0"; } }
 * 
 * document.getElementById("pauschalCosts").value = value; }
 */


/**
 * Wird in index.xhtml aufgerufen, wenn ein Brand mehrere Shop-Urls hat.
 * Beim Öffnen des Context-Menu werden die MenuItems die nicht gebraucht
 * werden ausgeblendet
 */
function invisibleEmptyMenuItems(menuId){
    var menuItems = $$('#'+menuId+' div[class~="rich-menu-item"]');
    for( i = 0; i<menuItems.length; i++){
        var links = menuItems[i].getElementsByTagName("a");
        if( isStrEmpty(links[0].href) ){
            menuItems[i].style.display = "none";
        }
    }
}

function toggleField(inputElement, value){
    if( inputElement != null ){
        var element = document.getElementById(inputElement);
        if( element != null ){
            element.disabled=value;
        }
    }
}

/**
 * Java-Scripts für das Waiting-Panel, welches bei einem
 * AjaxRequest angezeigt werden soll
 */
var infoWindowAMShown = false;
var infoWindowAMTimer;
function showModalInfoWindow()
{
    infoWindowAMTimer = setTimeout("if(!infoWindowAMShown){Richfaces.showModalPanel('waitModalPanel');infoWindowAMShown=true;}", 500);
}
function hideModalInfoWindow()
{
    if (infoWindowAMShown){
        Richfaces.hideModalPanel('waitModalPanel');
        infoWindowAMShown=false;
    }else{
        if(infoWindowAMTimer)clearTimeout(infoWindowAMTimer);
    }
}

