/*global document: false, $: false, window: false, f: false, location: false, jQuery: false, setTimeout: false, Image: false */
/*jslint browser: false, sloppy: true, eqeq: false, vars: true, white: true, nomen: true, maxerr: 50, indent: 4 */

var bb = {

    i18n: {
        data: {},

        _: function(key) {
            if ( typeof bb.i18n.data[key] !== 'undefined' ) {
                return bb.i18n.data[key];
            }
            return key;
        }

    },

    js: {

        init: function() {
            $('.jsonly').removeClass('jsonly');
            $('.noscript').css('display', 'none');
        }

    },

    fixedToolBox: {

        toolboxDiv: null,
        fixedAreaHeight: null,
        fixedAreaTop: null,


        init: function() {
            this.toolboxDiv = document.getElementById('toolbox');
            if (this.toolboxDiv) {

                this.fixedAreaHeight = this.toolboxDiv.parentNode.offsetHeight - this.toolboxDiv.offsetHeight;
                this.fixedAreaTop = this.toolboxDiv.parentNode.offsetTop;

                //workaround: I assume this is required because we have some css-rules with a negative margin-top
                this.fixedAreaTop += 26;

                $(window).scroll(this.moveFilterBox);
                this.moveFilterBox();

                $(this.toolboxDiv.parentNode).bind( 'partialReloaded', function(evt) {
                    bb.fixedToolBox.fixedAreaHeight = bb.fixedToolBox.toolboxDiv.parentNode.offsetHeight - bb.fixedToolBox.toolboxDiv.offsetHeight;
                });

            }
        },

        moveFilterBox: function() {
            var offset = $(window).scrollTop()-bb.fixedToolBox.fixedAreaTop;
            if (offset > 0) {
                bb.fixedToolBox.toolboxDiv.style.top = Math.min(offset, bb.fixedToolBox.fixedAreaHeight) + 'px';
            } else {
                bb.fixedToolBox.toolboxDiv.style.top = '0px';
            }
        }

    },

    imageBox: {
        container: null,

        init: function() {
            var iBox = $('.imageBox.jcarousel .imageList');
            this.container = iBox.parent();

            if (iBox.size()>0) {
                iBox.find('li').live('mouseover', this.showPhoto);

                if(iBox.children().length>3) {
                        $('.jcarousel .imageList').jcarousel({
                            vertical: true,
                            wrap: 'circular',
                            scroll: 3
                        });
                }
            }

            this.activateZoom( $('span.photo.static a', this.container) );

        },

        activateZoom: function(a) {
            if (a.length===1 && a.get(0).tagName==='A' && a.attr('href')!=='' ) {
                a.attr('rel', 'zoomWidth:497,zoomHeight:349,adjustX:2,lensOpacity:0.4');
                a.addClass('cloud-zoom').CloudZoom();
            }
        },

        showPhoto: function() {
            var act = $(this);
            act.addClass('visible');
            act.siblings().removeClass('visible');

            var html = $( act.find('span.photo').html() );
            bb.imageBox.container.find('span.photo.static').html( html );
            bb.imageBox.activateZoom(html.first());
        }

    },

    crossUpSelling: {

        init: function() {

            var ul = $('.crossSellingBox.jcarousel .productList');
            if (ul.children().length>2) {
                ul.jcarousel({
                    vertical: true,
                    wrap: 'circular',
                    scroll: 2
                });
            }

            $('.crossUpSellingBox.jcarousel .listType');
            $('.crossUpSellingBox.jcarousel .productList').each(function(idx, ul) {
                if (ul.childNodes.length>4) {
                    $(ul).jcarousel({
                        vertical: false,
                        scroll: 3
                    });
                }
            }) ;

            $('.subLvlCatCrossSellingBox.jcarousel .productList').each(function(idx, ul) {
                if (ul.childNodes.length>6) {
                    $(ul).jcarousel({
                        vertical: false,
                        scroll: 6
                    });
                }
            }) ;

        }

    },

    shippingAddress: {

        init: function() {
            var cb = $('#shippingaddress_toggle');

            if (cb.length===1) {
                cb.click(this.toggle);
                this.toggle({target:cb.get(0)});
            }
        },

        toggle: function(evt) {
            if (evt.target.checked) {
                $('input[name="blhideshipaddress"]').val(0);
                $('.deladr').css('visibility', 'visible');
                $('.deladr input, .deladr select').attr('disabled', false);
            } else {
                $('input[name="blhideshipaddress"]').val(1);
                $('.deladr').css('visibility', 'hidden');
                $('.deladr input, .deladr select').attr('disabled', true);
            }
        }

    },

    popup: {

        mousePopup: null,
        mouseX: 0,
        mouseY: 0,
        progressLayerPopup: null,
        init: function() {
            this.showPopup( $('#popup.popup') );

            $('a.openPopup[href]').click(this.onOpenPopup);

            $(window).mousemove(this.rememberMousePosition);
        },

        showPopup: function(popup, options) {
            if ( typeof options==='undefined' ) {
                options = {};
            }

            $(popup).addClass('popup').dialog($.extend( options, {
                modal: true,
                resizable: false,
                closeText: bb.i18n._('INC_POPUP_CLOSE')
            }));
        },

        onOpenPopup: function(evt) {
            bb.popup.showProgressLayer( document.body );

            var a = this;

            $.ajax({
                url: a.href,
                type: 'GET',
                context: a,
                success: bb.popup.onPopupLoaded,
                error: function(jqXHR, textStatus, errorThrown) {
                    bb.popup.hideProgressLayer();
                    location.href = a.attr('href');
                }

            });

            return false;
        },

        onPopupLoaded: function(data, textStatus, jqXHR) {
            bb.popup.hideProgressLayer();

            var response = $(data).filter(function(elem){
                return !this.tagName ||  this.tagName.toUpperCase() !== 'NOSCRIPT';
            });

            $(document.body).find('div#popup').dialog('destroy').remove();

            var popup = $(document.body).append(response).find('div#popup');

            bb.popup.showPopup(popup);
            popup.trigger('popupLoaded');
        },


        rememberMousePosition: function(evt) {
            bb.popup.mouseX = evt.pageX;
            bb.popup.mouseY = evt.pageY;
        },

        showMouseNotification: function(text) {
            if (!this.mousePopup) {
                this.mousePopup = $('<div id="mousePopup" />').dialog({
                    modal: true,
                    resizable: false,
                    closeOnEscape: false,
                    autoOpen: false,
                    dialogClass: 'mousePopup',
                    minHeight: 0,
                    position: [this.mouseX+30, this.mouseY-4]
                });
            }

            this.mousePopup.html( text ? text : bb.i18n._('BB_LOADING...') );
            this.mousePopup.dialog('open');


            $(window).mousemove(this.followMouse);


        },

        hideMouseNotification: function() {
            if (this.mousePopup) {
                this.mousePopup.dialog('close');
                $(window).unbind('mousemove', this.followMouse);
            }
        },

        followMouse: function(evt) {
            bb.popup.mousePopup.dialog('option', 'position', [evt.pageX+30, evt.pageY-4]);
        },

        showProgressLayer: function( elemToOverlay ) {
            var offset = $(elemToOverlay).offset();
            if (!this.progressLayerPopup) {
                this.progressLayerPopup = $('<div id="progressLayerPopup" style="left:'+offset.left+'px;top:'+offset.top+'px;"/>').dialog({
                    modal: true,
                    resizable: false,
                    closeOnEscape: false,
                    autoOpen: false,
                    dialogClass: 'progressLayerPopup'
                });
            }

            if ( $(elemToOverlay).outerHeight()/2 > $(window).height()-offset.top ) {
                var yPos = Math.floor( ($(window).height()-offset.top) /2 );
                this.progressLayerPopup.css('backgroundPosition', 'center ' + yPos + 'px');
            }

            this.progressLayerPopup.html( '<div style="width:'+$(elemToOverlay).outerWidth()+'px;height:'+$(elemToOverlay).outerHeight()+'px;" />' );
            this.progressLayerPopup.dialog('open');
        },

        hideProgressLayer: function() {
            if (this.progressLayerPopup) {
                this.progressLayerPopup.dialog('destroy').remove();
                this.progressLayerPopup = null;
            }
        }

    },

    options: {

        init: function() {
            var ctrl = $('input.optionControl[type=radio]');
            ctrl.change(this.change);

            $('input.optionControl[type=radio][checked=checked]').each( function(idx, elem) {
                bb.options.change({target:elem});
            });
        },

        change: function(e) {
            if (e.target.checked) {
                var parent = $(e.target).parent('.option');

                parent.siblings('.option').children('.optionDetails').css('display', 'none');
                parent.children('.optionDetails').css('display', 'block');
            }
        }
    },

    submitOnChange: {

        init: function() {
            $('input.submitOnChange[type=radio], select.submitOnChange').live('change', this.submit);
            $('input.clickSubmitOnChange[type=radio], select.clickSubmitOnChange').live('change', this.clickSubmit);
        },

        submit: function(e) {
            if (this.tagName==='SELECT') {
                this.form.submit();
            } else
            if (e.target.checked) {
                e.target.form.submit();
            }
        },

        clickSubmit: function(e) {
            if (this.tagName==='SELECT') {
                f = this.form;
            } else
            if (e.target.checked) {
                f = e.target.form;
            }
            if (f) {
                $(f).find('button[type=submit], input[type=submit]').trigger('click');
            }
        }

    },

    validate: {

        init: function() {
            jQuery.validator.setDefaults({
                success: "valid",
                invalidHandler: function() {
                   // In case of modification, please also change error.tpl
                    $(this).find('.js-error').html ("<div id=\"error\" class=\"errorbox[{if $errdisplay == 'inbox'}] inbox[{/if}]\">" +
                                                       "<p>" + bb.i18n._('BB_COMPLETEALLFIELDS') + "</p>" +
                                                    "</div>");
                }
            });

            jQuery.extend(jQuery.validator.messages, {
                required: '',
                remote: '',
                email: ''
            });


            $("#contactForm").validate({
                rules: {
                    field: "required"
                }
            });

            $("#loginForm").validate({
                rules: {
                    field: "required"
                }
            });

            $("#newsletterForm").validate({
                rules: {
                    field: "required"
                }
            });
            $("#bbAccountUserPayerAddressForm").validate({
                rules: {
                    field: "required"
                }
            });
            $("#bbRegisterAccountForm").validate({
                rules: {
                    field: "required"
                }
            });
            $("#bbInviteForm").validate({
                rules: {
                    field: "required"
                }
            });
            $("#bbSuggestForm").validate({
                rules: {
                    field: "required"
                }
            });
            $("#changepasswordForm").validate({
                rules: {
                    field: "required"
                }
            });
            $("#forgotpwdForm").validate({
                rules: {
                    field: "required"
                }
            });
            $("#userForm").validate({
                rules: {
                    field: "required"
                }
            });

        }

    },

    rating: {

        init: function() {
            $('div.popup  div.ratingStars').each( function(idx, div) {
                if ( $(div).find('input[type=hidden][name=artrating]').length>0) {
                    $(div).find('a').click(bb.rating.setRating);
                }
            });
        },

        setRating: function(evt) {
            var div = $(this).closest('div.ratingStars');

            div.find('li.currentRating').css('width', $(this.parentNode).css('width') );
            div.find('input[type=hidden][name=artrating]').val( $(this.parentNode).nextAll().length );
            return false;
        }


    },

    basket: {

        init: function() {
            var cs = $('div#checkout.basket form[name=basket] div.colorselection');
            if (cs.length>0) {

                cs.find('span.title').click(bb.basket.showColorSelection);
                cs.find('ul').mouseleave(bb.basket.hideColorSelection);
            }

            $('div#checkout.basket form[name=basket] select[name^="aproducts["]').change(function(evt){
                var basketItemId = this.name.replace(/^aproducts\[(\w+)\].+$/, "$1");
                bb.basket.updateBasket(basketItemId);
            });

            $('div#checkout.basket form[name=basket] select[class*="noscript"][name*="size"]').remove();
        },

        showColorSelection: function() {
            $(this).siblings('ul').css('display', 'block');
        },

        hideColorSelection: function(evt) {
            $(this).css('display', 'none');
        },

        changecolor: function(basketItemId, articleId) {
            var name = "aproducts["+basketItemId+"][variant][color]";
            $("select[name='"+name+"']").val(articleId);

            bb.basket.updateBasket(basketItemId);
        },

        updateBasket: function(basketItemId) {
            var name = "aproducts["+basketItemId+"]";
            var fields = $("select[name^='"+name+"'], input[name^='"+name+"']");
            var form = fields.get(0).form;

            fields = fields.add($(form).find(" > div > input[type=hidden]"));

            //bb.popup.showMouseNotification(bb.i18n._('BB_BASKET_UPDATING...'));
            bb.popup.showProgressLayer($(form).parents('.partial-container'));

            $.ajax({
                url: form.action,
                type: 'POST',
                data: fields.serialize(),
                success: function(data, textStatus, jqXHR){
                    $(form).html( $(data).find('form[name=basket]').html() );
                    $('div#checkout.basket table.footerTable').html( $(data).find('table.footerTable').html() );

                    if ($('div#checkout.basket table.footerTable button.next-step.disabled').length===1) {
                        $('button.next-step').addClass('disabled');
                    } else {
                        $('button.next-step').removeClass('disabled');
                    }

                    $(".low-order-price").html ( $(data).find('.low-order-price').html() );

                    bb.js.init();
                    bb.basket.init();
                    //bb.popup.hideMouseNotification();
                    bb.popup.hideProgressLayer();
                }, error: function(jqXHR, textStatus, errorThrown) {
                    //bb.popup.hideMouseNotification();
                    bb.popup.hideProgressLayer();
                    location.reload();
                }

            });
        }
    },

    partial: {
        init: function() {
            $('a.onClickPartialReload[rel]').live( 'click', this.startPartialReload );
            $('button.onClickPartialReload[rel]').live( 'click', this.startPartialReload );
        },

        startPartialReload: function(evt) {
            var context = this;
            var a = $(this);

            bb.popup.showProgressLayer( a.parents('.partial-container') );

            if (this.tagName==='A') {

                $.ajax({
                    url: a.attr('href'),
                    type: 'GET',
                    context: a,
                    success: bb.partial.onSuccess,
                    error: function(jqXHR, textStatus, errorThrown) {
                        bb.popup.hideProgressLayer();
                        location.href = a.attr('href');
                    }

                });

            } else if (this.tagName==='BUTTON') {
                $.ajax({
                    url: this.form.action,
                    type: this.form.method,
                    data: $(this.form).serializeArray(),
                    context: a,
                    success: bb.partial.onSuccess,
                    error: function(jqXHR, textStatus, errorThrown) {
                        bb.popup.hideProgressLayer();
                        context.form.submit();
                    }
                });

            }



            return false;
        },

        onSuccess: function(data, textStatus, jqXHR) {
            var response = $(data);
            var a = this;

            var fn = function( idx, e ) {
                bb.partial.replacePartialElement( a, e, response );
            };

            var p = a.parents('.partial-container');
            $( a.attr('rel').split(',') ).each( function( idx, rel ){
                rel += '.partial';

                var elems = a.parents(rel);
                elems = elems.add( p.find(rel) );

                $(elems).each(fn);

            });

            bb.crossUpSelling.init();
            bb.popup.hideProgressLayer();
            $('ul.productList.lazyLoading > li > div.productListEntry').lazyload();
            p.trigger('partialReloaded');
        },

        replacePartialElement: function( a, elem, resp ) {
            var selector = elem.tagName.toLowerCase();
            if ( elem.id ) {
                selector += '#' + elem.id;
            }
            if ( elem.className ) {
                selector += '.' + elem.className.replace(/ +/g, '.');
            }

            $(selector).each( function( idx, e ){
                if (e===elem) {

                    var newElem = $( resp.find(selector).get(idx) );
                    $(e).html( newElem.html() );

                }
            });
        }
    },

    outfitslider: {

        init2: function() {
            //scrollpane parts
            var scrollPane = $( ".scroll-pane" ),
                scrollContent = $( ".scroll-content" );

            //build slider
            var scrollbar = $( ".scroll-bar" ).slider({
                slide: function( event, ui ) {
                    if ( scrollContent.width() > scrollPane.width() ) {
                        scrollContent.css( "margin-left", Math.round(
                            ui.value / 100 * ( scrollPane.width() - scrollContent.width() )
                        ) + "px" );
                    } else {
                        scrollContent.css( "margin-left", 0 );
                    }
                }
            });

            //append icon to handle
            var handleHelper = scrollbar.find( ".ui-slider-handle" )
            .mousedown(function() {
                scrollbar.width( handleHelper.width() );
            })
            .mouseup(function() {
                scrollbar.width( "100%" );
            })
            .append( "<span class='ui-icon ui-icon-grip-dotted-vertical'></span>" )
            .wrap( "<div class='ui-handle-helper-parent'></div>" )
            .prepend( "<span class='ui-slider-handle-before-overlay'/>")
            .append( "<span class='ui-slider-handle-after-overlay'/>")
            .parent();

            //change overflow to hidden now that slider handles the scrolling
            scrollPane.css( "overflow", "hidden" );

            //size scrollbar and handle proportionally to scroll distance
            function sizeScrollbar() {
                var handleSize = scrollbar.find( ".ui-slider-handle" ).width();
                scrollbar.find( ".ui-slider-handle" ).css({
                    "margin-left": -handleSize / 2
                });
                handleHelper.width( "" ).width( scrollbar.width() - handleSize );
            }

            //reset slider value based on scroll content position
            function resetValue() {
                var remainder = scrollPane.width() - scrollContent.width();
                var leftVal = scrollContent.css( "margin-left" ) === "auto" ? 0 :
                    parseInt( scrollContent.css( "margin-left" ), 10 );
                var percentage = Math.round( leftVal / remainder * 100 );
                scrollbar.slider( "value", percentage );
            }

            //if the slider is 100% and window gets larger, reveal content
            function reflowContent() {
                    var showing = scrollContent.width() + parseInt( scrollContent.css( "margin-left" ), 10 );
                    var gap = scrollPane.width() - showing;
                    if ( gap > 0 ) {
                        scrollContent.css( "margin-left", parseInt( scrollContent.css( "margin-left" ), 10 ) + gap );
                    }
            }

            //change handle position on window resize
            $( window ).resize(function() {
                //resetValue();
                sizeScrollbar();
                reflowContent();
            });

            setTimeout( sizeScrollbar, 10 );//safari wants a timeout
        },
        init: function() {

            var slContent = $('div.outfits ul.outfitList');
            var slBarContent = $('div.outfits ul.outfitListOverview');

            if (slContent.length===1 && slBarContent.length===1) {
                slContent.width( slContent.children().outerWidth() * slContent.children().length );

                var slPane = slContent.addClass('scroll-content')
                                      .wrap('<div class="outfitList scroll-pane" />')
                                      .parent();


                var barWrap = slBarContent.addClass('scroll-bar-content')
                                          .wrap('<div class="outfitListOverview scroll-bar-wrap" />')
                                          .parent()
                                          .append('<div class="scroll-bar" />');

                var chld = slBarContent.children();
                barWrap.width( chld.outerWidth() * 2 + chld.slice(1).outerWidth()*(chld.length-2) );

                this.init2();

            }





        }

    },

    bestRated: {
        init: function() {
            var ul = $('.bestRated.jcarousel .bestRated');
            if (ul.children().length>3) {
                ul.jcarousel({
                    vertical: true,
                    wrap: 'circular',
                    scroll: 3
                });
            }

        }
    },

    outfitTeaser: {
        init: function() {
            var ul = $('.teaser2.outfit.jcarousel .outfit');
            if (ul.children().length>1) {
                ul.jcarousel({
                    scroll: 1
                });
            }

        }
    },

    startregion: {
        div: null,
        init: function() {
            this.div = $('div#page.startpage div.regionSelector');
            if (this.div.length===1) {
                this.div.css('height', '0px').css('display', 'block').css('opacity', 0.0);

                $('div#page.startpage div.regionSelector li a').click( function( evt ){
                    if( $('div#page.startpage div.regionSelector input').attr('checked') ) {
                        if ( $(this).attr('href').indexOf('?') >=0 ) {
                            $(this).attr('href', $(this).attr('href') + '&remember=1');
                        } else {
                            $(this).attr('href', $(this).attr('href') + '?remember=1');
                        }
                    }

                    bb.startregion.hide();
                    document.location = $(this).attr('href');
                    return false;
                });

                $('div#page.startpage div.regionSelector a.close').click( function( evt ){
                    bb.startregion.hide();
                    return false;
                });

                this.show();
            }

        },

        show: function () {
            this.div.animate({
                height: '92px',
                opacity: 1.0
            }, 1000);
        },

        hide: function () {
            this.div.animate({
                height: '0px',
                opacity: 0.0
            }, 1000, function() {
                $(this).remove();
            });
        }

    },

    multipageBackground: {

        listener: {
            onComplete: function(elem, page) {
                if ( this[elem] ) {
                    $(this[elem]).each( function(){ this.call( null, page ); });
                }
            },
            addListener: function(elem, fn) {
                if (elem && typeof fn === 'function') {
                    if (!this[elem]) {
                        this[elem] = [];
                    }
                    this[elem].push(fn);
                }
            }
        },

        init: function() {
            $('div.multi-page-bg-image').each( function() {
                var div = $(this);
                var url = div.css('background-image').replace( /url\(\s*(["']?)(.+)\1\s*\)$/, "$2" );
                if ( url !== div.css('background-image') ) {
                    var img = $(new Image());
                    img.load( div, bb.multipageBackground.completeInit );
                    img.attr( 'src', url );

                }
            });
        },

        completeInit: function( evt ) {
            var img=$(this);
            var div=evt.data;

            if (img.get(0).width > div.innerWidth()) {
                div.css( {
                    position:'relative',
                    backgroundPosition:'left top'
                });

                div.bgPager = $.extend( bb.multipageBackground, {
                    elem: div,
                    width: div.innerWidth(),
                    pages: Math.floor( img.get(0).width / div.innerWidth() ),
                    page: 1,
                    duration: 600,
                    direction: 'next',
                    timeoutId: null,
                    timeout: 6500
                });

                div.bgPager.addControls();
                div.bgPager.timeoutId = setTimeout(function(){ div.bgPager.autoPage(); }, div.bgPager.timeout);

                bb.multipageBackground.listener.onComplete(div.get(0), 1);
            }
        },

        addControls: function() {
            var ctrls = $('<div class="multi-page-bg-image-controls clearfix">');
            ctrls.css({
                width: '100%',
                position: 'absolute',
                bottom: '0px',
                left: '0px'
            });

            ctrls.append( $('<a class="button-square-22-left pager prev" />').click( this, this.prev ) );

            var s = ctrls.append( $('<span class="page-links clearfix" />') ).children().last();
            for (var i=1; i<=this.pages; i++ ) {
                s.append( $('<a class="button pager page-link" >' + i + '</a>').click( {ctx:this, page:i}, this.gotoPage ) );
            }

            ctrls.append( $('<a class="button-square-22-right pager next" />').click( this, this.next ) );


            this.elem.append(ctrls);
        },

        prev: function ( evt ) {
            if ( evt.data.page > 1 ) {
                evt.data.direction='prev';
                evt.data.showPage( evt.data.page - 1 );
            }
        },

        next: function ( evt ) {
            if ( evt.data.page < evt.data.pages ) {
                evt.data.direction='next';
                evt.data.showPage( evt.data.page + 1 );
            }
        },

        gotoPage: function ( evt ) {
            if (evt.data.page!=evt.data.ctx.page) {
                evt.data.direction= evt.data.page<evt.data.ctx.page ? 'prev' : 'next';
                evt.data.ctx.showPage(evt.data.page)
            }
        },

        showPage: function( page ) {
            var ctx = this;
            if (ctx.timeoutId) {
                clearTimeout(ctx.timeoutId);
            }

            this.elem.stop().animate({
                backgroundPosition: '('+ this.width*(page-1)*-1 + 'px top)'
            }, Math.abs(this.page-page)*400 , function() {
                ctx.onAnimComplete( page );
            } );
        },

        onAnimComplete: function( page ) {
            this.page = page;

            var ctx = this;
            ctx.timeoutId = setTimeout(function(){ ctx.autoPage(); }, ctx.timeout);

            bb.multipageBackground.listener.onComplete(this.elem.get(0), page);
        },

        autoPage: function() {
            if (this.direction=='prev' && this.page>1 || this.page==this.pages) {
                this.direction= 'prev';
                this.showPage(this.page-1);
            } else if (this.page<this.pages) {
                this.direction= 'next';
                this.showPage(this.page+1);
            }
        }

    },

    countdown: {
        form: null,
        init: function() {
            this.form = $('div#labelHome form.countdownform');
            if (this.form.length===1) {
                bb.countdown.countdown();
            }
        },

        countdown: function() {

            var now = document.getElementById("serverTime").innerHTML * 1000;


               var nowinmillis = now;
               var tomorrow = new Date();
               tomorrow.setTime(nowinmillis + (1000*60*60*24*1));


               var year=tomorrow.getYear(), month=tomorrow.getMonth()+1, day=tomorrow.getDate(), hour=0, minute=0, second=0;

               // IE getYear() = 2011
               // FF getYear() = 111;
               if (year < 1900 ) {
                   year = year + 1900;
               }

               var targetDate=new Date(year,month-1,day,hour,minute,second);
            startDate=new Date(); // Current date
            startDate.setTime(nowinmillis);

            now = (now + (1000)) / 1000;

            $("#serverTime").html ( now );


            // calculate countdown and display until time is reached
            if(startDate<targetDate)  {

              var days=0, hours=0, minutes=0, seconds=0;

              // Days
              while(startDate.getTime()+(24*60*60*1000)<targetDate) {
              days++;
              startDate.setTime(startDate.getTime()+(24*60*60* 1000));
              }

              // Hours
              hours=Math.floor((targetDate-startDate)/(60*60*1000));
              startDate.setTime(startDate.getTime()+hours*60*60*1000);

              hours = hours + (days * 24);

              // Minutes
              minutes=Math.floor((targetDate-startDate)/(60*1000));
              startDate.setTime(startDate.getTime()+minutes*60*1000);

              // Seconds
              seconds=Math.floor((targetDate-startDate)/1000);

              // Format display
              (hours!=1)?hours=hours+" h: ":hours=hours+" h: ";
              if(minutes<10) minutes="0"+minutes;
              (minutes!=1)?minutes=minutes+" min: ":minutes=minutes+" min: ";
              if(seconds<10) seconds="0"+seconds;
              (seconds!=1)?seconds=seconds+" Sec":seconds=seconds+" Sec";

              document.countdownform.countdowninput.value= hours+minutes+seconds;

              setTimeout('bb.countdown.countdown()',1000);
            } else document.countdownform.countdowninput.value="0 h: 0 min: 00 Sec";
            }
    },

    homeTeaser: {

        anker:[],
        container: null,

        init: function() {
            var div = $('#labelHome.multi-page-bg-image');
            if (div.length===1) {

                this.anker = div.find('.categoryHead > a');
                if (this.anker.length>0) {
                    this.container = this.anker.parent();
                    bb.multipageBackground.listener.addListener(div.get(0), this.onBgAnimCompleteChangeLink);
                }

            }
        },

        onBgAnimCompleteChangeLink: function(page) {
            bb.homeTeaser.anker.detach();
            if (bb.homeTeaser.anker.length>=page) {
                bb.homeTeaser.container.append( bb.homeTeaser.anker.get(page-1) );
            }
        }

    },

    productlistImageToggle: {

        skip: '',
        loaded: '',

        init: function() {
            $('div.productListEntry a.imagelink')
                .live('mouseover', bb.productlistImageToggle.showBack)
                .live('mouseout', bb.productlistImageToggle.showFront)
                .append('<span class="imageLoadingMask" />')

                .find('+ div.colorpreview .colorpic')
                    .live('mouseover', bb.productlistImageToggle.changeColor);
        },

        showBack: function() {
            var img = $(this).children().first().get(0);
            var url = img.src.replace(/\/1\//, '/2/');
            bb.productlistImageToggle.loadImage(img, url);
        },

        showFront: function( evt ) {
            if (true || !evt.relatedTarget || evt.relatedTarget.parentNode!=this) {
                var img = $(this).children().first().get(0);
                var url = img.src.replace(/\/2\//, '/1/');
                bb.productlistImageToggle.loadImage(img, url);
            }
        },

        changeColor: function() {
            var colorCode = $(this).css('background-image').replace( /url\(\s*(["']?).+_(\d{4})\.[a-z]{3,4}\1\s*\)$/, "$2" );
            if ( colorCode.length==4 ) {

                var ctx = $(this).parents('div.colorpreview').prev('a.imagelink');
                var img = ctx.find('img').get(0);
                if (img) {
                    var url = img.src.replace( /^(.+_)\d{4}(\.[a-z]{3,4})$/, "$1" +  colorCode + "$2" );
                    bb.productlistImageToggle.loadImage(img, url);
                }

                if (this.tagName.toUpperCase()=='A') {
                    ctx.attr('href', this.href);
                }

            }

        },

        loadImage: function(img, url) {
            if (img.complete && bb.productlistImageToggle.loaded.indexOf(img.src)<0) {
                bb.productlistImageToggle.loaded += img.src;
            }
            if ( img.src!=url && bb.productlistImageToggle.skip.indexOf(url)<0 ) {

                if ( bb.productlistImageToggle.loaded.indexOf(url)>=0 ) {
                    img.src=url;
                    $(img).parent().removeClass('loading');
                } else {
                    var image = $(new Image());
                    image.load( img, bb.productlistImageToggle.onLoad );
                    image.error( img, bb.productlistImageToggle.onError );
                    image.attr( 'src', url );

                    if (!image.complete) {
                        $(img).parent().addClass('loading');
                    }
                }

            } else {
                $(img).parent().removeClass('loading');
            }

        },

        onLoad: function( evt ) {
            var img = evt.data;
            if ($(img).parent().hasClass('loading')); {
                img.src=this.src;
                bb.productlistImageToggle.loaded += this.src;
                $(img).parent().removeClass('loading');
            }
        },

        onError: function( evt ) {
            bb.productlistImageToggle.skip += this.src;
            $(evt.data).parent().removeClass('loading');
        }

    },

    sizeAdvisor: {
        sizechart: null,

        init: function() {
               $('select[name^=sizeadvisor]').live('change', this.onChange);
        },

        onChange: function() {
            var sType = this.name.replace(/^sizeadvisor\[(\w+)\]$/, "$1");
            var sValue = this.options[this.selectedIndex].label;
            $('table#sizechart tr.' + sType + ' td.active').removeClass('active');
            $('table#sizechart tr.' + sType + ' td:contains(' + sValue + ')').addClass('active');

            var iPos = 0;
            $('table#sizechart td.active').each( function() {
                var pos = $(this).prevAll().length;
                if (pos > iPos) {
                    iPos = pos;
                }
            });
            $('#size-suggestion-value').html( (iPos > 0) ? $('table#sizechart thead tr.size-values th:eq(' + iPos + ')').html() : '' );
        }

    },

    tabContent: {

        init: function() {
        	$(window).bind('popupLoaded', function(evt) {
        		bb.tabContent.init();
        	});

            $('ul.tabcontainer > li.tab.hover')
            	.removeClass('hover')
            	.find('> :first-child')
            		.on('click', this.showList)
            		.css('cursor', 'pointer');
        },

        showList: function() {
            $(this.parentNode).addClass('active').siblings().removeClass('active');
            return false;
        }
    },

    toggle: {

    	init: function() {

    		$('.toggle').live('click', function() {
    			var ctx = $(this).toggleClass('toggleOn');

    			if (this.tagName.toUpperCase()==='A') {
    				var relElem = $( ctx.attr('rel') ) ;

    				if ( relElem.length>=1 ) {
    					var visible = ctx.hasClass('toggleOn');
    					relElem.toggle(500);
    				}
    			}

    			return false;
    		});

    	}
    },

    printPreview: {

    	init: function() {

    		$('a.printpreview').live( 'click', this.onClick );

    	},

    	onClick: function() {

    		var popup = $('<div><iframe frameborder="0" border="0" width="999" height="700" src="' + this.href + '" ></iframe></div>').css({width:'999px'});
    		bb.popup.showPopup(popup, {
    			close: function() { $(this).remove(); },
    			open: function() { $(this.parentNode).find('button').addClass('button btn-28 dark round'); },
    			buttons: [{
    				text: bb.i18n._('INC_POPUP_PRINT'),
    				click: function() {
    					$(this).dialog('close');
    					if ($.browser.opera) {
    						setTimeout('window.print()', 1000);
    					} else {
    						window.print();
    					}
    				}
    			}]
    		});

    		return false;
    	}
    }

};

$(document).ready(function() {

    bb.js.init();
    bb.fixedToolBox.init();
    bb.imageBox.init();
    bb.crossUpSelling.init();
    bb.shippingAddress.init();
    bb.options.init();
    bb.submitOnChange.init();
    bb.validate.init();
    bb.rating.init();
    bb.basket.init();
    bb.partial.init();
    bb.outfitslider.init();
    bb.bestRated.init();
    bb.startregion.init();
    bb.multipageBackground.init();
    bb.countdown.init();
    bb.popup.init();
    bb.outfitTeaser.init();
    bb.homeTeaser.init();
    bb.sizeAdvisor.init();
    bb.tabContent.init();
    bb.toggle.init();
    bb.printPreview.init();

    $('ul.productList.lazyLoading > li > div.productListEntry').lazyload();

    //letzter eintrag
    bb.productlistImageToggle.init();
});
