if (!window.Baobaz) {
    window.Baobaz = {};
}

document.observe('dom:loaded', function() {
    Baobaz.pageLayout.init();   
    Baobaz.topLinks.init('header-drilldown-link'); 
    Baobaz.listHover.init();
});


var scrollBarInitialer=null;
var scrollbarRecalculate = function(){
	scrollBarInitialer.recalculateLayout();
};

Baobaz.pageLayout = {
   
    init: function() { console.log('a')
        this.sidebar = $$('.sidebar')[0];
        if(this.sidebar) {
            this.sidebarContent = this.sidebar.down('.sidebar-content');
            this.headerContainer = $$('.header-container')[0];
            this.coupleDiv = $('couple-category-page');
            this.carrouselDiv = $('container-slider');
            
            var normalWrapperDiv = $$('.col2-left-layout .wrapper')[0];
            var fullscreenWrapperDiv = $$('.fullscreen-layout .wrapper')[0]; 
            if(normalWrapperDiv) {
            	this.resizeWrapper();
                Element.observe(window,'load', this.resizeWrapper);
                Element.observe(window, 'resize', this.resizeWrapper);
            }
            else if(fullscreenWrapperDiv) {
                $$('body, html').invoke('setStyle', {overflow: 'hidden'});
                this.foldControl = this.sidebar.down('.fold-control span');
                this.sidebarHeaderHeight = this.sidebar.down('.sidebar-header').getHeight();
                this.sidebarContentHeight = this.sidebar.getHeight();
                if($(document.body).hasClassName('body-home') || $(document.body).hasClassName('cms-sport') || this.coupleDiv) {              //Special behavior on home page:
                    this.foldControl.removeClassName('fold').addClassName('unfold');
                    this.sidebar.setStyle({height: this.sidebarHeaderHeight + 'px'});
                    this.sidebarContent.hide();
                    if(!this.coupleDiv) {
                        this.headerContainer.hide();
                    } else {
                        $('couple-category-page').hide();
                    }
                    this.showMenusOnMousemoveInstance = this.showMenusOnMousemove.bindAsEventListener(this);   
                    setTimeout(function() {Element.observe(document, 'mousemove', this.showMenusOnMousemoveInstance)}.bind(this), 1000);    
                }
                if(this.carrouselDiv) {              //Special behavior on lookbook:
                    this.foldControl.removeClassName('fold').addClassName('unfold');
                    this.sidebar.setStyle({height: this.sidebarHeaderHeight + 'px'});
                    this.sidebarContent.hide();
                    this.headerContainer.hide();
                    Element.observe(this.foldControl, 'click', this.foldProcess.bindAsEventListener(this)); 
                    Element.observe(window, 'resize', this.resizeFulscreenWrapper.bindAsEventListener(this));
                }
                else {
                    Element.observe(this.foldControl, 'click', this.foldProcess.bindAsEventListener(this));
                    Element.observe(window, 'resize', this.resizeFulscreenWrapper.bindAsEventListener(this));                  
                }      
                this.resizeFulscreenWrapper();        
            }
        }
    },
    
    resizeWrapper: function() {
        var viewportHeight = document.viewport.getHeight();
        if($('main').getHeight() < viewportHeight)
            $('main').setStyle({height: viewportHeight + 'px'});    
    },
    
    resizeFulscreenWrapper: function() {
        if(this.foldControl.hasClassName('fold')) {
            var viewportHeight = document.viewport.getHeight();
            this.sidebarContentHeight = this.sidebar.getHeight();
            if(this.sidebarContentHeight < viewportHeight) {
                this.sidebar.setStyle({height: viewportHeight + 'px'});
                this.sidebarContentHeight = viewportHeight;
            }   
        }
        this.resizeMediaContainer();             
    },

    resizeMediaContainer: function() {
        if($('fullscreen-media')) {
            var coupleDiv = $('couple-category-page');
            var viewportDim = document.viewport.getDimensions();
            var imgDim = {
                width: 1280,
                height: 900
            };
            
            if (imgDim.width/imgDim.height >  viewportDim.width/viewportDim.height) {
                var nWidth = imgDim.width * viewportDim.height / imgDim.height;
                var newLeft = (nWidth - viewportDim.width)/2;
                var nRight = newLeft + viewportDim.width;
                $('fullscreen-media').setStyle({
                    clip: 'rect(0px '+nRight+'px '+viewportDim.height+'px '+newLeft+'px)',
                    height: viewportDim.height + 'px',
                    //left: -newLeft + 'px',
                    width: nWidth + 'px'
                });
            } else {
                var nHeight = imgDim.height * viewportDim.width / imgDim.width;
                var nTop = (nHeight - viewportDim.height)/2;
                var newBottom = nTop + nHeight;
                $('fullscreen-media').setStyle({
                    clip: 'rect('+nTop+'px '+viewportDim.width+'px '+newBottom+'px 0px)',
                    height: nHeight + 'px',
                    //top: -nTop + 'px',
                    width: viewportDim.width + 'px'
                });
            }
            if(coupleDiv) coupleDiv.setStyle({left: viewportDim.width - 836 + 'px'});
        }
    },
    
    foldProcess: function() {
        if(!this.foldControl.hasClassName('processing')) {
            if(this.foldControl.hasClassName('fold')) {
		this.foldMenus();
            }
            else if(this.foldControl.hasClassName('unfold')) {
		this.unfoldMenus();
            }
        }
    },
    
    foldMenus: function() {
        this.sidebarContentHeight = this.sidebar.getHeight();
        new Effect.Parallel([
            new Effect.Morph(this.sidebar, {
                style: 'height: ' + this.sidebarHeaderHeight + 'px', 
                sync: true
            }),
            new Effect.Fade(this.sidebarContent, { 
                sync: true
            }),
            new Effect.Fade(this.headerContainer, { 
                sync: true
            })], {
            duration: 0.3,
            beforeStart: function() {
		/*this.sidebar.addClassName('header-closed');
		var imgSrc = this.sidebar.down('img');
		var srcArr = imgSrc.src.split(".").reverse();
		srcArr[1] += '.white';
		imgSrc.src = srcArr.reverse().join(".");*/
		this.foldControl.addClassName('processing').removeClassName('fold').addClassName('unfold');
	    }.bind(this),
            afterFinish: function() {
		this.foldControl.removeClassName('processing');
	    }.bind(this)
        }); 
         
        if(this.coupleDiv) {
            new Effect.Fade(this.coupleDiv, { 
                duration: 0.3
            });     
        }
    },
    
    unfoldMenus: function() {
        var viewportHeight = document.viewport.getHeight();
        if(this.sidebarContentHeight < viewportHeight)
            this.sidebarContentHeight = viewportHeight;   
               
        new Effect.Parallel([
            new Effect.Morph(this.sidebar, {
                style: 'height: ' + this.sidebarContentHeight + 'px', 
                sync: true 
            }),
            new Effect.Appear(this.sidebarContent, { 
                sync: true 
            }),
            new Effect.Appear(this.headerContainer, { 
                sync: true 
            })], {
            duration: 0.3,
            beforeStart: function() {
		/*this.sidebar.removeClassName('header-closed');
		var imgSrc = this.sidebar.down('img');
		var srcArr = imgSrc.src.split(".").reverse();
		srcArr.splice(1,1);
		imgSrc.src = srcArr.reverse().join(".");*/
		this.foldControl.addClassName('processing').removeClassName('unfold').addClassName('fold');
	    }.bind(this),
            afterFinish: function() {this.foldControl.removeClassName('processing');}.bind(this)
        });   
        if(($(document.body).hasClassName('body-home') && $('home-bubble')) || ($(document.body).hasClassName('cms-sport') && $('home-bubble'))) {
            $('home-bubble').hide().removeClassName('preloaded');
            new Effect.Appear($('home-bubble'), { 
                duration: 0.3
            });             
        }   
        if(this.coupleDiv) {
            new Effect.Appear(this.coupleDiv, { 
                duration: 0.3
            });     
        }
    },
    
    showMenusOnMousemove: function() {  
        this.unfoldMenus();
        Element.stopObserving(document, 'mousemove', this.showMenusOnMousemoveInstance);
        Element.observe(window, 'resize', this.resizeFulscreenWrapper.bindAsEventListener(this)); 
        if(this.coupleDiv)
            Element.observe(this.foldControl, 'click', this.foldProcess.bindAsEventListener(this));  
    }
};




Baobaz.topLinks = {
    init: function (linkClassName) {
        this.links = $$('.' + linkClassName);
        
        if(this.links.length) {
            this.links.each(function(elem) {
                elem.observe('click', this.handleLinkClick.bindAsEventListener(this, elem));
            }.bind(this));
        }
    },
    
    handleLinkClick: function (event, elem) {
        var linkHref = elem.readAttribute('href');
        var drilldown = $(linkHref.substr(linkHref.indexOf('#')+1));
        
        if (!drilldown.hasClassName('expanded') && !drilldown.hasClassName('process') )  {
            this.showDrilldown(drilldown, elem);
        }
        else {
            this.hideDrilldown(drilldown, elem);
        }
        Event.stop(event);
    },

    showDrilldown: function (drilldown, link) {
        this.hideAllDrilldowns();
        if(window.Enterprise.TopCart) {
            Enterprise.TopCart.hideCart();
        }
        
        new Effect.SlideDown(drilldown, { 
            duration: 0.4,
            beforeStart: function(effect) {effect.element.addClassName('process');},
            afterFinish: function(effect) {effect.element.removeClassName('process');}
        });
        drilldown.addClassName('expanded');
        link.addClassName('active');
    },

    hideDrilldown: function (drilldown, link) {
        if (!drilldown.hasClassName('process') && drilldown.hasClassName('expanded')) {
            new Effect.SlideUp(drilldown, { 
                duration: 0.4,
                beforeStart: function(effect) {effect.element.addClassName('process');},
                afterFinish: function(effect) {effect.element.removeClassName('process');}
            });
            drilldown.removeClassName('expanded');
            link.removeClassName('active');
        }
    }, 
    
    hideAllDrilldowns: function() {
        this.links.each(function(elem) {
            var linkHref = elem.readAttribute('href');
            var drilldownHref = $(linkHref.substr(linkHref.indexOf('#')+1));
            if(drilldownHref) this.hideDrilldown(drilldownHref, elem);
        }.bind(this));    
    }
};


Baobaz.listHover = {
    init: function() {
        var opListItems = $$('.other-products-list li:not(.item-active)');
        if(opListItems.length) {
            opListItems.invoke('observe', 'mouseenter', function() {
                Effect.Appear($(this).down('.item-info'), {duration: 0.2, afterFinish: function(effect){effect.element.addClassName('fixIE');}});
            }).invoke('observe', 'mouseleave', function() {
                Effect.Fade($(this).down('.item-info'), {duration: 0.2, beforeStart: function(effect){effect.element.removeClassName('fixIE');}});
            });            
        }
    }
};

function removeFromWishlist(id, url)
{
      var request =     url+id;
      //var url = '/proxy?url=' + encodeURIComponent(request);                  
      new Ajax.Request(request, {method: 'get',
        onLoading: function()
        {
            var loader =   document.getElementById('modal-loading2');
            loader.style.display = "block";
        },
        onSuccess: function(transport) 
        {
            var loader =   document.getElementById('modal-loading2');
            loader.style.display = "none";
            if(id==0)
            {
                var container = document.getElementById('wishlist_item_container');
                while (container.hasChildNodes())
                {
                    container.removeChild( container.firstChild );
                    
                }
            }
            else
            {
                var element = document.getElementById(id);
                element.parentNode.removeChild(element);
            }
            if(scrollBarInitialer) scrollBarInitialer.recalculateLayout();
        },
        onError: function(e) 
        {
            alert(e);
        }
    });
}
function sendWishlist(url)
{
      var request =     url;
      //var url = '/proxy?url=' + encodeURIComponent(request);                  
      new Ajax.Request(request, {method: 'get',
        onLoading: function()
        {
            var loader =   document.getElementById('modal-loading2');
            loader.style.display = "block";
        },
        onSuccess: function(transport) 
        {
            var loader =   document.getElementById('modal-loading2');
            loader.style.display = "none";
            if(id==0)
            {
                var container = document.getElementById('wishlist_item_container');
                while (container.hasChildNodes())
                {
                    container.removeChild( container.firstChild );
                }
            }
            else
            {
                var element = document.getElementById(id);
                element.parentNode.removeChild(element);
            }
        },
        onError: function(e) 
        {
            alert(e);
        }
    });
}

function getStoreViewBaseUrl() {
    var base_url = window.location.hostname;
    if (window.location.pathname.substr(0,1) == '/' && window.location.pathname.substr(3,1) == '/') {
        base_url += window.location.pathname.substr(0,3);
    }
    return base_url;
}

function openWishlistModal(url,options)
{
    var base_url = getStoreViewBaseUrl();
    var request = "http://"+base_url+'/wishlist/index/checkIfLogged';
    new Ajax.Request(request,
    {
        method: 'post',
        onLoading: function()
        {
            var loading =   document.getElementById('modal-loading');
            loading.style.display   =   'block';
            loading.style.top       =   '435px;';
        },
        onSuccess: function(transport)
        {
            var loading =   document.getElementById('modal-loading');
            loading.style.display   =   'block';
            if(transport.responseText==1)
            {
                var init    =     new Baobaz.Modal.init(url,options);
                init.open();
            }
            else
            {
                var base_url    =  getStoreViewBaseUrl();
                window.location = "http://"+base_url+"/customer/account";
            }
        },
        onFailure: function()
        {
            var loading =   document.getElementById('modal-loading');
            loading.style.display   =   'block';
            var base_url    =  getStoreViewBaseUrl();
            window.location = "http://"+base_url+"/customer/account";
        }
    });
}

/**
 * function to fetch cities by country id and update select
 */
function changeCities(country_code)
{
    var   base_url    =     document.getElementById('base_url').value;
    var url = base_url+'career/index/getCities/?country_id='+country_code;    
    new Ajax.Request(url,
    {
        method:'get',
        onSuccess: function(transport)
        {
            var response = transport.responseText;
            $('city').update(response);
        },
        onFailure: function()
        {
            alert('No Cities for this country');
        }
    });
}

function isPostcodeEntered(errorMessage)
{
    if($('postcode').value == "") {

        var ancestors = $('postcode').ancestors();
        var a = new Element('div', {'id' : 'advice-required-postcode-confirmation' , 'class': 'validation-advice'});

        $('postcode').insert({after : a});

        $('advice-required-postcode-confirmation').update(errorMessage);
  
        return false;
    }
    else {
        return true;
    }
}
