/**
 * Main www.gaxcode.com javascript file 
 * Min. PrototypeJS 1.6 required
*/

//  globale Variablen / Objekte ----------------------------------------------
var overlayText = "enter code", oImg;

//  Autostart-JS -------------------------------------------------------------
document.observe('dom:loaded', function() {
    // Suchbutton Mouseover
    if ( $('gaxSearch') ) {
		oImg = new Image();
		oImg.src = '../bilder/layout/submit_gaxcode_over2.gif';
		var imgInput = $$('#gaxSearch input[type=image]')[0];
		imgInput.observe('mouseover', swapImgOver);
        imgInput.observe('mouseout', swapImgOut);
    }
    // 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';
    }
    // 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();
                window.open(url);
            });
        }
    });
    // 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();
	// beim 1. Aufruf der Startseite den Feld-Text setzen
	enterGaxcodeOnBlur();
});

// |----------------------------------------------------------------|
// |  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 ) {
            $$('.container > div.footer').invoke('absolutize').invoke('setStyle',{'width':'100%'}); // footer absolut positionieren, damit er nicht hochrutscht
            //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')  ) {
                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 {
                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 like that.
        //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 enterGaxcodeOnBlur(){
    var codeField = $("gaxSearch:theCode");
    if( codeField !== null && isStrEmpty(codeField.value) ){
        codeField.value = overlayText;
    }
}
function enterGaxcodeOnClick(){
    var codeField = $("gaxSearch:theCode");
    if( codeField !== null && codeField.value == overlayText ){
        codeField.value = "";
    }
}

function swapImgOver(e){ e.target.src = oImg.src; }
function swapImgOut(e) { e.target.src ='../bilder/layout/submit_gaxcode.png'; }

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;
    }
}

/*
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);
    }
}
