var LOP = {};

(function($) {
    var W = this, D = this.document;
    var jsFolder = '/js/dev/';
    var backURI = '';
    // TODO expand "feature detect" if all is OK for later execution
    if (!D.getElementById || !D.getElementsByTagName || !D.createElement || !D.createTextNode) {
        return;
    }
    $(D.documentElement || 'html').attr('id', 'js');
    
    LOP.scrolls = {};
    
    var popinContainer, closeLinkPopins = '<a href="#" class="close box:id:closePopin" title="' + l10n.generic.close + '"><img alt="" src="/img/common/btn/close.gif" /></a>';
    
    LOP.processHTMLPopins = function(html) {
        if (html.indexOf('popinInner') > -1) {
            return html.replace(/("?popinInner"?[^>]*>)/, '$1' + closeLinkPopins);
        }
        return html;
    };
    
    //browsers detector (iPhone/iPad/Android)
    LOP.browserRedirection = {
        init: function(){
            if(!LOP.browserRedirection.isPhone()){ return; }else{ W.location.href="http://iphone.lorealparis.fr"; }
        },
        deviceIsAn: function (aFamilyOfDevice) {
            var UA = navigator.userAgent.toLowerCase();
            var devices = {
                "androidDevice": /android/i,
                "appleDevice": /ip(hone|od)/i
            };
            return devices[aFamilyOfDevice].test(UA);
        },
        isPhone: function(){
            if( LOP.browserRedirection.deviceIsAn("androidDevice") || LOP.browserRedirection.deviceIsAn("appleDevice")){
                return true;
            } else {return false;}
        }
    };
    LOP.browserRedirection.init();

    var thisMovie = function(movieName) {
        if (navigator.appName.indexOf("Microsoft") != -1) {
            if(document.getElementById(movieName)){
                return document.getElementById(movieName);   
            } else {
                return window[movieName];
            }
        } else {
            return document[movieName];
        }
    };
    
    LOP.stfDatas;
    LOP.stfDatasActions = {
        page: function() {
            return '<ul style="margin:10px 30px; color:#c49f59; list-style:square;"><li>' +
                '<a href="' + location.href + '" target="_blank"><font color="#c49f59" style="color:#c49f59;">' +
                $('h1').text() || l10n.generic.sitename +
                '</font></a>' +
                '</li></ul>';
        },
        newsletter: function() {
            return '<ul style="margin:10px 30px; color:#c49f59; list-style:square;"><li>' +
                '<a href="' + location.protocol + '//' + location.host + l10n.url.homePage + '#popin:newsletter" target="_blank"><font color="#c49f59" style="color:#c49f59;">' +
                l10n.generic.register +
                '</font></a>' +
                '</li></ul>';
        }
    };
    
    var reFieldParentCls = /\b(text|radioGroup|select|checkbox)\b/;
    var getFieldParent = function(field) {
        var t = field.parentNode, target;
        while (t.parentNode) {
            if (reFieldParentCls.test(t.className)) {
                return t;
            }
            t = t.parentNode;
        }
    };
    
    var errorImg = '<img id="%id%" class="error box:id:formError" alt="%msg%" src="%src%" />';
    
    var fieldsTypes = {
        'text': 'single',
        'textarea': 'single',
        'password': 'single',
        'select-one': 'single',
        'radio': 'group',
        'checkbox': 'single'
    };
    
    var addErrorPicto = {
        single: function(p, img) {
            var t = $('label', p);
            if (t.length == 1) {
                t.prepend(img);
            } else {
                $(p).prepend(img);
            }
        },
        group: function(p, img) {
            var t = $('span.legend', p);
            if (t.length == 1) {
                t.prepend(img);
            } else {
                $(p).prepend(img);
            }
        }
    };
    
    var manageFieldError = function(e, msg) {
        if (e.namespace && e.namespace.length == 2) {
            var type = e.namespace[0], name = e.namespace[1], obj = this[type](name), field;
            if (obj.getElement(0)) {
                if (obj.name.indexOf('birthmonth') > -1 || obj.name.indexOf('birthyear') > -1) {
                    field = this.text('birthday').getElement();
                    name = this.text('birthday').name;
                } else {
                    field = obj.getElement(0);
                }
                if (msg) {
                    addFieldError(e.owner, field, BOX.getStoreId(field, 'group') || name, msg);
                } else {
                    removeFieldError(e.owner, field, BOX.getStoreId(field, 'group') || name);
                }
            }
            obj = field = null;
        }
    };
    LOP.manageFieldError = manageFieldError;
    
    var addFieldError = function(form, field, id, msg) {
        var p = getFieldParent(field);
        if (field.name.indexOf('birthmonth') > -1 || field.name.indexOf('birthyear') > -1) {
            p = p.parentNode.getElementsByTagName('label')[0];
        }
        $(p).addClass('error');
        id = id + 'Error';
        var img = $('#' + id);
        if (!img.length) {
            var type = BOX.getStoreId(field, 'group') ? 'group' : fieldsTypes[field.type];
            if (type) {
                var src = form.iconErrorSrc || LOP.iconErrorSrc || '/img/common/picto/error.gif';
                addErrorPicto[type](p, errorImg.replace('%src%', src).replace('%id%', id).replace('%msg%', msg));
            }
        } else {
            img.attr('alt', msg);
        }
    };
    
    var removeFieldError = function(form, field, id) {
        $('#' + id + 'Error').remove();
        var p = getFieldParent(field);
        $(p).removeClass('error');
    };
    
    var addFormError = function(e, formEvent, msg) {
        if(msg) {
            $('#' + this.element.id + 'Error').text(msg).css('display', 'block');
        }
    };
    LOP.addFormError = addFormError;
    
    var removeFormError = function(e, formEvent) {
        $('#' + this.element.id + 'Error').css('display', 'none').empty();
    };
    LOP.removeFormError = removeFormError;
    
    BOX.addFormRule('password', /^.{5,}$/);
    
    var managePopins = (function() {
        var popinInnerTop;
        var nodeNames = '/a/abbr/acronym/code/em/img/span/strong/sub/sup/';
        var newsletterField;
        
        var validateEmail = function(field) {
            if (field.isEmpty()) {
                return l10n.errorMsg.required.email;
            } else if (!field.isMatching('email')) {
                return l10n.errorMsg.invalid.email;
            }
        };
        
        var errorEvents = {
            'formError': {
                'fn': addFormError
            },
            'formValid': {
                'fn': removeFormError
            },
            'fieldError': {
                'fn': manageFieldError
            },
            'fieldValid': {
                'fn': manageFieldError
            }
        };
        
        LOP.popinOpeningActions = {
            signIn: function() {
                if ($('#signInFormError').html()) {
                    $('#signInFormError').css('display', 'block');
                }
                BOX.form('signInForm').text('login').setValue();
                BOX.form('signInForm').addValidation(function(form) {
                    form.text('login').mustValidate(validateEmail);
                    
                    form.text('password').mustValidate(function(field) {
                        if (field.isEmpty()) {
                            return l10n.errorMsg.required.pwd;
                        } else if (!field.isMatching('password')) {
                            return l10n.errorMsg.invalid.pwd;
                        }
                    });
                    
                    return l10n.errorMsg.form.plural;
                }, 'p.save').addListeners(errorEvents);
            },
            signOut: function() {
                this.position();
                BOX.form('signOutNewsletterForm').text('propertylogin').setValue();
                BOX.form('signOutNewsletterForm').addValidation(function(form) {
                    form.text('propertylogin').mustValidate(validateEmail);
                    
                    return l10n.errorMsg.form.singular;
                }, 'p.save').addListeners({
                    'formError': {
                        'fn': addFormError
                    },
                    'formValid': {
                        'fn': function(e, formEvent) {
                            formEvent.preventDefault();
                            customerSearch(this, 'propertylogin', 'signOut');
                        }
                    },
                    'fieldError': {
                        'fn': manageFieldError
                    },
                    'fieldValid': {
                        'fn': manageFieldError
                    }
                });
            },
            signOutClubVIP: function() {
                this.position();
            },
            password: function() {
                BOX.form('passwordForm').text('login').setValue();
                BOX.form('passwordForm').addValidation(function(form) {
                    form.text('login').mustValidate(validateEmail);
                    
                    return l10n.errorMsg.form.singular;
                }, 'p.save').addListeners(errorEvents);
            },
            addToBlog: function() {
                $('#pageURL').bind('focus.addToBlog', function() {
                    $(this).select();
                });
            },
            sendToFriend: function() {
                BOX.form('sendToFriendForm').text('fname').setValue();
                BOX.form('sendToFriendForm').text('email').setValue();
                BOX.form('sendToFriendForm').text('stfdatas').setValue(LOP.stfDatas);
                BOX.form('sendToFriendForm').addValidation(function(form) {
                    form.text('fname').mustValidate(function(field) {
                        if (field.isEmpty()) {
                            return l10n.errorMsg.required.lname;
                        }
                    });
                    
                    form.text('email').mustValidate(validateEmail);
                    
                    form.text('FriendLastName').mustValidate(function(field) {
                        if (field.isEmpty()) {
                            return l10n.errorMsg.required.lname;
                        }
                    });
                    
                    form.text('FriendEmail').mustValidate(validateEmail);
                    
                    return l10n.errorMsg.form.plural;
                }, 'p.save').addListeners(errorEvents).addReplacement();
            },
            copyright: function() {
                this.position();
            },
            otherBrands: function() {
                this.position();
            },
            otherBenefits: function() {
                this.position();
            },
            addToBlogStudioSecrets: function() {
                this.position();
                $('#pageCode').bind('focus.addToBlog', function() {
                    $(this).select();
                });
            },
            sendToPhoneStudioSecrets: function() {
                this.position();
                BOX.form('popinSendToPhoneStudioSecrets').addValidation(function(form) {
                    form.text('phoneNumber').mustValidate(function(field) {
                        if (field.isEmpty()) {
                            return l10n.errorMsg.required.look;
                        }
                    });
                    
                    return l10n.errorMsg.form.singular;
                }, 'p.btn').addListeners({
                    'formError': {
                        'fn': addFormError
                    },
                    'formValid': {
                        'fn': function(e, formEvent) {
                            formEvent.preventDefault();
                        }
                    },
                    'fieldError': {
                        'fn': manageFieldError
                    },
                    'fieldValid': {
                        'fn': manageFieldError
                    }
                });
            },
            popinSendToFriendStudioSecrets: function() {
                this.position();
            },
            saveMyLookStudioSecrets: function() {
                this.position();
                BOX.form('popinSaveMyLookStudioSecrets').addValidation(function(form) {
                    form.text('saveMyLook').mustValidate(function(field) {
                        if (field.isEmpty()) {
                            return l10n.errorMsg.required.look;
                        }
                    });
                    
                    return l10n.errorMsg.form.singular;
                }, 'p.btn').addListeners({
                    'formError': {
                        'fn': addFormError
                    },
                    'formValid': {
                        'fn': function(e, formEvent) {
                            formEvent.preventDefault();
                            var callback = $('input[name="callback"]').attr('value');
                            thisMovie('studioSecretsSWF')[callback](BOX.form('popinSaveMyLookStudioSecrets').text('saveMyLook').getValue());
                            LOP.popins.close('saveMyLookStudioSecrets');
                        }
                    },
                    'fieldError': {
                        'fn': manageFieldError
                    },
                    'fieldValid': {
                        'fn': manageFieldError
                    }
                });
            },
            createMyLookStudioSecrets: function() {
                this.position();
                BOX.form('popinSaveMyLookStudioSecrets').addValidation(function(form) {
                    form.text('saveMyLook').mustValidate(function(field) {
                        if (field.isEmpty()) {
                            return l10n.errorMsg.required.look;
                        }
                    });
                    
                    return l10n.errorMsg.form.singular;
                }, 'p.btn').addListeners({
                    'formError': {
                        'fn': addFormError
                    },
                    'formValid': {
                        'fn': function(e, formEvent) {
                            formEvent.preventDefault();
                            var callback = $('input[name="callback"]').attr('value');
                            thisMovie('studioSecretsSWF')[callback](BOX.form('popinSaveMyLookStudioSecrets').text('saveMyLook').getValue());
                            LOP.popins.close('createMyLookStudioSecrets');
                        }
                    },
                    'fieldError': {
                        'fn': manageFieldError
                    },
                    'fieldValid': {
                        'fn': manageFieldError
                    }
                });
            },
			excell10: function() {
					$('#footer').css('display', 'none');
			},
            excell10SaveTestimonial: function() {
                    $('#popinIframe').attr('src', $('#iframeSrc').val() + location.search);
            },
            position: function(id) {
                popinInnerTop = (popinContainer[0].offsetHeight - LOP.popins.currentDOM[0].offsetHeight) / 2;
                LOP.popins.currentDOM.css('top', popinInnerTop + 'px');
            }
        };
        
        LOP.popinClosingActions = {
            signIn: function() {
                LOP.popins.currentDOM.css('top', '-10000px');
                BOX.form('signInForm', true);
            },
            signOut: function() {
                BOX.form('signOutNewsletterForm', true);
            },
            password: function() {
                BOX.form('passwordForm', true);
            },
            addToBlog: function() {
                $('#pageURL').unbind('focus.addToBlog');
            },
            sendToFriend: function() {
                BOX.form('sendToFriendForm', true);
            },
            excell10:function() {
                $('#footer').css('display', 'block');
            },
            saveMyLookStudioSecrets: function() {
                BOX.form('popinSaveMyLookStudioSecrets', true);
            },
            createMyLookStudioSecrets: function() {
                BOX.form('popinSaveMyLookStudioSecrets', true);
            }
        };
        
        var open = function(e, id) {
            LOP.coreMask.show(LOP.popinMaskType || 'coreMaskPopin', {top: LOP.maskTop + 'px', height: LOP.maskHeight + 'px'});
            LOP.popinMaskType = null;
            popinContainer.css({top: LOP.maskTop + 'px', height: LOP.maskHeight + 'px'});
            if (LOP.popinOpeningActions[id]) {
                LOP.popinOpeningActions[id]();
            }
        };
        
        var close = function(e, id) {
            if (LOP.popinClosingActions[id]) {
                LOP.popinClosingActions[id]();
            }
            LOP.tooltips.close();
            LOP.coreMask.hide();
        };
        
        var openNewsletter = function(url) {
            if (LOP.popins.currentId != 'newsletter') {
                LOP.popins.add({
                    url: url,
                    id: 'newsletter',
                    processHTML: LOP.processHTMLPopins,
                    refresh: true
                });
            }
        };
        
        var customerSearch = function(form, name, type) {
            type = type || 'signIn';
            if (D.getElementById('mySignedIn')) {
                if (W.__doPostBack && form.submitName) {
                    W.__doPostBack(form.submitName, '');
                }
            } else {
                $.get(l10n.url.customerSearch + '?email=' + form.text(name).getValue(), function(datas) {
                    if (Number(datas)) {
                        LOP.popins.add({
                            url: l10n.url.alreadyMember + '?type=' + type,
                            id: 'alreadyMember',
                            refresh: true,
                            processHTML: LOP.processHTMLPopins
                        });
                    } else if (W.__doPostBack && form.submitName) {
                        W.__doPostBack(form.submitName, '');
                    }
                });
            }
        };
        
        return function(action) {
            LOP.popinContainer = popinContainer = $('#popin');
            LOP.popins = new BOX.Popins({
                insertPoint: popinContainer
            });
            LOP.popins.addListeners({
                'open': {
                    fn: open
                },
                'close': {
                    fn: close
                }
            });
            var openSignIn = (location.href.indexOf('#popin:') == -1 && $('#signInFormError').html()) ? true : false;
            LOP.popins.prepare('#popin', 'div.popinWrapper', l10n.url, LOP.processHTMLPopins);
            if (openSignIn) {
                LOP.popins.add({
                    url: '#popinSignIn',
                    id: 'signIn',
                    refresh: false,
                    processHTML: LOP.processHTMLPopins
                });
                $('#signInFormError').css('display', 'block');
            }
            
            LOP.tooltips.add({
                selector: '#popin:hover',
                ruleNamespace: 'closePopin',
                rule: function(el) {
                    if (el.nodeName.toLowerCase() == 'a') {
                        this.setHTML(el.title).setAttributeCache(el, 'title').setId('toolTipAuto');
                    }
                }
            }, {
                selector: '#popin:hover',
                ruleNamespace: 'formError',
                rule: function(el) {
                    if (el.nodeName.toLowerCase() == 'img') {
                        this.setHTML(el.alt).setAttributeCache(el, 'alt').setId('toolTipError');
                    }
                }
            });
        };
    })();
    
    // dropdown languages menu
    var localisationMenu = (function() {
        var closeMenu = function(dd, dl) {
            dl.removeClass('on');
            dd.slideUp(300);
            $(D).unbind('keydown.localisationMenu').unbind('mousedown.localisationMenu');
        };
        
        var openMenu = function(dd, dl) {
            LOP.popins.close();
            dd.slideDown(600, function() {
                dl.addClass('on');
                $(D).bind('keydown.localisationMenu', function(e) {
                    if (e.which == 27) {
                        closeMenu(dd, dl);
                    }
                }).bind('mousedown.localisationMenu', function(e) {
                    var t = e.target;
                    while (t != dl[0] && (t = t.parentNode));
                    if (t != dl[0]) {
                        closeMenu(dd, dl);
                    }
                });
            });
        };
        
        var manageMenu = function(e) {
            var dd = $(this).next();
            var dl = $(this.parentNode);
            if (dl.hasClass('on')) {
                closeMenu(dd, dl);
            } else {
                openMenu(dd, dl);
            }
            return false;
        };
        
        return function() {
            var dt = $('#localisation dt').click(manageMenu);
            if (dt.length) {
                dt[0].innerHTML = '<a href="#">' + dt[0].innerHTML + '</a>';
            }
        };
    })();
    
    // scroll specific execution
    var scrollActions = {
        vertical: function(el, idObj) {
            LOP.scrolls[idObj] = new BOX.SimpleScroll({
                target: el
            });
        },
        horizontal: function(datas) {
            LOP.scrolls[datas.id] = new BOX.SimpleScroll({
                target: datas.node,
                targetScrollBar: datas.scrollTarget,
                from: 'left',
                listeners: {
                    'beforeCompute': {
                        fn: function(e) {
                            var li = $('li', this.sContent);
                            if (datas.visibleOnLine && li.length >= datas.visibleOnLine) {
                                this.sContent.width(Math.ceil(li.length / 2) * datas.itemWidth);
                            } else {
                                this.sContent.width(li.length * datas.itemWidth);
                            }
                            var left = 0;
                            if(datas.scrollOffsetTarget !== null) {
                                left = $(datas.scrollTarget + ' ' + (datas.scrollOffsetTarget || 'h2')).width();
                            }
                            this.sContainer.css({
                                'left': (left + datas.scrollMargin) + 'px',
                                'width': (datas.totalWidth - left - datas.scrollMargin) + 'px'
                            });
                        }
                    }
                }
            });
        },
        filteredProductsList: function(el, id) {
            this.horizontal({
                'node': el,
                'id': id,
                'scrollTarget': '#products',
                'itemWidth': 240,
                'totalWidth': 720,
                'scrollMargin': 10,
                'visibleOnLine': 4
            });
        },
        filteredMediasList: function(el, id) {
            this.horizontal({
                'node': el,
                'id': id,
                'scrollTarget': '#medias',
                'itemWidth': 180,
                'totalWidth': 720,
                'scrollMargin': 10
            });
        },
        diagGroup1List: function(el, id) {
            this.horizontal({
                'node': el,
                'id': id,
                'scrollTarget': '#group1',
                'itemWidth': 240,
                'totalWidth': 720,
                'scrollMargin': 10
            });
        },
        diagGroup2List: function(el, id) {
            this.horizontal({
                'node': el,
                'id': id,
                'scrollTarget': '#group2',
                'itemWidth': 240,
                'totalWidth': 720,
                'scrollMargin': 10
            });
        },
        diagMediasList: function(el, id) {
            this.horizontal({
                'node': el,
                'id': id,
                'scrollTarget': '#medias',
                'itemWidth': 180,
                'totalWidth': 720,
                'scrollMargin': 10
            });
        },
        diagBodyCareProducts: function(el, id) {
            this.horizontal({
                'node': el,
                'id': id,
                'scrollTarget': '#products',
                'scrollOffsetTarget': null,
                'itemWidth': 240,
                'totalWidth': 720,
                'scrollMargin': 0
            });
        }
    };
    LOP.scrollActions = scrollActions;
    
    // prepare and create scroll
    var prepareScroll = function() {
        var id, forceScroll;
        $('body .scroll').each(function() {
            var id = BOX.getStoreId(this);
            var mode = BOX.getStoreId(this, 'mode');
            if (mode != 'delegate') {
                if (scrollActions[id]) {
                    scrollActions[id](this, id);
                } else {
                    scrollActions.vertical(this, id);
                }
            }
        });
    };
    
    var fieldsNames = 'input,textarea,select,span';
    var myItemsNumber;
    
    var getMyItemsNumber = function() {
        return parseInt(myItemsNumber.text().replace(/\D+/, ''), 10);
    };
    
    var setMyItemsNumber = function(value) {
        var nb = getMyItemsNumber() + value;
        if (nb) {
            myItemsNumber.text('(' + nb + ')');
        }
    };
    
    var clickActions = {
        label: function(e, t) {
            if ($(t).attr('for')) {
                return;
            }
            var field = $(t).prev()[0];
            if (!field || fieldsNames.indexOf(field.nodeName.toLowerCase()) == -1) {
                field = $(t).next()[0];
            }
            if (field && field.className == 'AnswerClass') {
                field = $(field).children()[0];
            }
            if (field && field.type) {
                switch (field.type) {
                    case 'text':
                    case 'password':
                    case 'select-one':
                    case 'textarea':
                        field.focus();
                        break;
                    case 'radio':
                    case 'checkbox':
                        field.click();
                        field.focus();
                        break;
                }
            }
        },
        a: function(e, t) {
            var cm = BOX.getStoreId(t, 'cm');
            if (cm) {
                LOP.execStatCM(cm);
            }
            
            var id = BOX.getStoreId(t);
            if (id == 'closePopin') {
                e.preventDefault();
                LOP.popins.close();
            } else if (t.rel && t.rel.indexOf('popin') > -1) {
                e.preventDefault();
                
                LOP.popinMaskType = BOX.getStoreId(t, 'mask');
                LOP.popinProcessHTML = BOX.getStoreId(t, 'process') == 'false' ? false : true;
                
                var action = BOX.getStoreId(t, 'action');
                if (action && LOP.stfDatasActions[action]) {
                    LOP.stfDatas = LOP.stfDatasActions[action]();
                } else {
                    LOP.stfDatas = null;
                }
                
                var code = BOX.getStoreId(t, 'video'), url, refresh = (BOX.getStoreId(t, 'mode') == 'nocache') ? true : false;
                
                if(code) {
                    if(code){
                        var type = code.split('_');            
                        if(type[0] == 'Vid'){
                            url = l10n.url.popinVideo + '&code=' + code;
                        }else{
                            url = l10n.url.popinVideo + '&categoryCode=' + code;
                        }
                    }                    
                    refresh = true;
                    LOP.popinMaskType = 'coreMaskPopinVideo';
                } else {
                    url = t.href;
                }
                
                LOP.popins.add({
                    "url": url,
                    "id": id,
                    "refresh": refresh,
                    "processHTML": LOP.popinProcessHTML ? LOP.processHTMLPopins : undefined
                });
            } else if (id == 'addToFavorites') {
                e.preventDefault();
                $.get(t.href, function(datas) {
                    if (datas) {
                        if (datas.indexOf('success') > -1) {
                            setMyItemsNumber(1);
                        }
                        if (datas.indexOf('callToRegister') > -1) {
                            LOP.popins.add({
                                url: l10n.url.callToRegister,
                                id: 'callToRegister',
                                refresh: false,
                                processHTML: LOP.processHTMLPopins
                            });
                        }
                    }
                });
                $(t.parentNode).html(l10n.addToFavorites.done).addClass('actionDone');
            } else if (id == 'addAllToFavorites') {
                e.preventDefault();
                var url = t.href;
                var allProductsHTML = $('#allProductsID').html() || '';
                var allMediasHTML = $('#allMediasID').html() || '';
                url += '?products=' + allProductsHTML.replace(/[\s\t\n]+/g, '').replace(/;$/, '');
                url += '&medias=' + allMediasHTML.replace(/[\s\t\n]+/g, '').replace(/;$/, '');
                $.get(url, function(datas) {
                    if (datas) {
                        if (datas.indexOf('success') > -1) {
                            datas = datas.replace(/[\s\t\n]+/g, '').replace(/;$/, '');
                            setMyItemsNumber(datas.split(';').length);
                        }
                        if (datas.indexOf('callToRegister') > -1) {
                            LOP.popins.add({
                                url: l10n.url.callToRegister,
                                id: 'callToRegister',
                                refresh: false,
                                processHTML: LOP.processHTMLPopins
                            });
                        }
                    }
                });
                $(t.parentNode).html(l10n.addToFavorites.done).addClass('actionDone');
            }
        }
    };
    
    var manageClicks = function() {
        $(D).click(function(e) {
            var t = e.target;
            while (t && t != this) {
                var tagName = t.nodeName.toLowerCase();
                if (clickActions[tagName]) {
                    clickActions[tagName](e, t);
                    break;
                }
                t = t.parentNode;
            }
        });
    };
    
    var removeAddToFavorites = function() {
        $('#alreadyInFavorites').prev().remove();
    };
    
    // configure tools immediatly
    BOX.setConfig('scroll', {
        container: '<div class="scrollContent">%content%</div>',
        simpleBar: '<div class="scrollBar" style="visibility:hidden;"><span class="face"></span></div>',
        fullBar: '<div class="scrollBar" style="visibility:hidden;"><span class="up"></span><span class="face"></span><span class="down"></span></div>'
    }).setConfig('slide', {
        prev: '<a href="#" class="prev">' + l10n.simpleSlide.prev + '</a>',
        next: '<a href="#" class="next">' + l10n.simpleSlide.next + '</a>'
    }).setConfig('toolTip', {
        container: '<div class="toolTip" style="left:-10000px;"><div id="toolTipInner"></div></div>'
    }).setConfig('popin', {}).setConfig('fauxFields', {
        checked: 'checked',
        focus: 'focus',
        checkedFocus: 'checkedFocus',
        selected: 'selected',
        hover: 'hover'
    }).setConfig('fauxSelect', {
        container: '<div id="fauxSelect" style="left:-10000px;"></div>',
        mask: '<div id="fauxSelectMask" style="display:none;"></div>'
    });
    
    var getCoreDimensions = function() {
        LOP.coreHeight = $('#core')[0].offsetHeight;
        LOP.coreOffset = $('#core').offset();
        LOP.coreOffsetMax = {top: LOP.coreOffset.top + LOP.coreHeight, left: LOP.coreOffset.left + 950};
        LOP.maskTop = $('#header').height();
        LOP.maskHeight = LOP.coreHeight - LOP.maskTop;
    };
    
    // Manage rollover images
    LOP.mouseOverImg = function() {
        if(LOP.ieOld && this.src.indexOf('.png')) {
            this.runtimeStyle.filter = this.runtimeStyle.filter.replace('off.', 'on.');
        } else {
            this.src = this.src.replace('off.', 'on.');
        }
    };
    LOP.mouseOutImg = function() {
        if(LOP.ieOld && this.src.indexOf('.png')) {
            this.runtimeStyle.filter = this.runtimeStyle.filter.replace('on.', 'off.');
        } else {
            this.src = this.src.replace('on.', 'off.');
        }
    };

    var managePopinsDirectAccess = function(urlId) {
        var hash = location.hash;
        if (hash && hash.indexOf('#'+urlId+':') > -1) {
            var id = hash.replace('#'+urlId+':', '');
            if (($.cookie(id)) && ($.cookie(id) == id)) {
                return;
            } else {
                if (l10n.url[id]) {
                    LOP.popins.add({
                        url: l10n.url[id],
                        id: id,
                        refresh: true,
                        processHTML: LOP.processHTMLPopins
                    });
                }
            }
        }
    };
    
    /* Start site v5 implementations */
    // manage products menu
    var mainMenu = {
        currentSubmenuLink: [],
        currentSubmenuExpand: [],
        currentSubmenuListingLink: [],
        currentSubmenuListingExpand: [],
        init: function() {
            var that = this;
            
            if(D.getElementById('main-menu') && that.html) {
                $('#main-menu').replaceWith(that.html);
                
                // init expand height
                var expands = $('#main-menu div.expand');
                that.expandH = expands.height();
                that.isReplaced = true;
                
                $('#main-menu div.expand-footer a.close').click(function(oEvt) {
                    oEvt.preventDefault();
                    that.close();
                });
                
                // manage main-menu links
                $('#main-menu .category').each(function() {
                    var item = $(this), itemId = this.id, hasExpand = item.find('div.expand').length;
                    
                    if(hasExpand) {
                        item.find('a.title').click(function(e) {
                            e.preventDefault();
                            that.load(itemId);
                        });
                        
                        if(item.find('div.expand-header').length) {
                            var li = item.find('div.expand-header li.on'), link = $(li.find('a.subtitle'))[0];
                            that.currentSubmenuLink[itemId] = li;
                            
                            if(link.hash && $(link.hash).length) {
                                that.currentSubmenuExpand[itemId] = $(link.hash);
                            }
                            
                            item.find('div.expand-header a.subtitle').click(function(oEvt) {
                                if(this.hash && $(this.hash).length) {
                                    oEvt.preventDefault();
                                    var jLi = $(this.parentNode),
                                        jExpand = $(this.hash);
                                    that.currentSubmenuLink[itemId].removeClass('on');
                                    if(that.currentSubmenuExpand[itemId]) {
                                        that.currentSubmenuExpand[itemId].removeClass('on');
                                    }
                                    that.currentSubmenuLink[itemId] = jLi.addClass('on');
                                    that.currentSubmenuExpand[itemId] = jExpand.addClass('on');
                                }
                            });
                            
                            $('div.expand-header li').hover(function() {
                                $(this).addClass('hovered');
                            }, function() {
                                $(this).removeClass('hovered');
                            });
                        } else {
                            that.currentSubmenuExpand[itemId] = item.find('div.expand-body div.on');
                        }
                        
                        $(item).find('div.expand-category').each(function() {
                            var jListingElm = $(this),
                                sListingId = this.id;
                            
                            if(jListingElm.find('div.expand-category-menu').length) {
                                var jLi = jListingElm.find('div.expand-category-menu li.active'),
                                    oLink = jLi.find('a')[0];
                                that.currentSubmenuListingLink[sListingId] = jLi;
                                
                                if(oLink.hash && $(oLink.hash).length) {
                                    that.currentSubmenuListingExpand[sListingId] = $(oLink.hash);
                                }
                                
                                jListingElm.find('div.expand-category-menu a').click(function(oEvt) {
                                    if(this.hash && D.getElementById(this.hash.substring(1))) {
                                        oEvt.preventDefault();
                                        var jLi = $(this.parentNode),
                                            jExpand = $(this.hash);
                                        that.currentSubmenuListingLink[sListingId].removeClass('active');
                                        if(that.currentSubmenuListingExpand[sListingId]) {
                                            that.currentSubmenuListingExpand[sListingId].removeClass('active');
                                        }
                                        that.currentSubmenuListingLink[sListingId] = jLi.addClass('active');
                                        that.currentSubmenuListingExpand[sListingId] = jExpand.addClass('active');
                                    }
                                });
                            } else {
                                that.currentSubmenuListingExpand[sListingId] = jListingElm.find('div.expand-body div.active');
                            }
                        });
                    }
                });
            }
        },
        load: function(itemId) {
            var that = this, li = $('#' + itemId);
            
            if(that.isOpened) {
                // main menu is already opened
                if(that.currentItem[0] == li[0]) {
                    that.close();
                } else {
                    that.currentItem.find('div.expand').animate({
                        'opacity': 0
                    }, 200, function() {
                        that.currentItem.removeClass('expanded');
                        that.open(itemId);
                    });
                }
            } else {
                LOP.coreMask.show('coreMaskMenu', {top: '0', height: LOP.coreHeight + 'px'});
                $(D).bind('keydown.mainMenu', function(e) {
                    if(e.which == 27) {
                        that.close();
                    }
                }).bind('mousedown.mainMenu', function(e) {
                    var tg = e.target;
                    while(tg.id != 'main-menu' && (tg = tg.parentNode));
                    if(!tg || tg.id != 'main-menu') {
                        that.close();
                    }
                });
                
                // open main menu
                that.open(itemId);
                that.isOpened = true;
            }
        },
        open: function(itemId) {
            var that = this;
            var li = $('#' + itemId), expand = li.find('div.expand');
            
            li.addClass('expanded');
            expand.css('opacity', '0').animate({opacity: 1}, 500, function() {
                that.currentItem = li;
            });
        },
        close: function() {
            var that = this;
            
            that.currentItem.find('div.expand').animate({
                'opacity': 0
            }, 500, function() {
                LOP.coreMask.hide();
                that.currentItem.removeClass('expanded');
                that.currentItem = null;
                that.isOpened = false;
                $(D).unbind('keydown.mainMenu').unbind('mousedown.mainMenu');
            });
        },
        manageSubmenu: function(li, expand, itemId) {
            var that = this;
            
            li.hover(function() {
                that.currentSubmenuLink[itemId].removeClass('on');
                if(that.currentSubmenuExpand[itemId]) {
                    that.currentSubmenuExpand[itemId].removeClass('on');
                }
                li.addClass('on');
                expand.addClass('on');
                that.currentSubmenuLink[itemId] = li;
                that.currentSubmenuExpand[itemId] = expand;
            }, function() {
                
            });
        }
    };
    LOP.mainMenu = mainMenu;
    
    // call main-menu
    
    $.ajax({
        url: l10n.url.mainMenu,
        success: function(response) {
            LOP.mainMenu.html = response;
            LOP.mainMenu.init();
        }
    });
    /* End site v5 implementations */
    
    // DOMReady
    $(D).ready(function() {
        removeAddToFavorites();
        getCoreDimensions();
        
        /* Start site v5 implementations */
        localisationMenu();
        
        LOP.core = {
            defaultPaddingTop: parseInt($('#core').css('padding-top'), 10)
        };
        
        
        // call main-menu
        if(D.getElementById('main-menu')) {
            if(LOP.mainMenu.html && !LOP.mainMenu.isReplaced) {
                LOP.mainMenu.init();
            }
        }
        
        if(D.getElementById('account-menu-vip')) {
            $('#account-menu-vip').hover(function() {
                $(this).addClass('hovered');
            }, function() {
                $(this).removeClass('hovered');
            });
        }
        /* End site v5 implementations */
        
        if (LOP.ieFirstInListing) {
            LOP.ieFirstInListing('#main');
        }
        prepareScroll();
        myItemsNumber = $('#myItemsNumber');
        manageClicks();
        LOP.tooltips = new BOX.ToolTips();
        LOP.tooltips.addListener('beforeOpen', function(e, trigger, triggerOffset, divToolTip, top, left) {
            var width = divToolTip[0].offsetWidth;
            var maxW = left + width;
            var nleft = left;
            if (maxW > LOP.coreOffsetMax.left) {
                nleft = LOP.coreOffsetMax.left - width;
            } else if (nleft < LOP.coreOffset.left) {
                nleft = LOP.coreOffset.left;
            }
            var backgroundPosition = - (1009 / 2 - (width / 2 + left - nleft));
            divToolTip.css('background-position', backgroundPosition + 'px 100%');
            this.setPosition(top, nleft);
        });
        if (D.getElementById('mySignedIn')) {
            LOP.tooltips.add({
                selector: '#mySignedIn:hover',
                rule: function(el) {
                    if (el.nodeName.toLowerCase() == 'a') {
                        this.setHTML(el.title).setAttributeCache(el, 'title').setId('toolTipAuto');
                    }
                }
            });
        }
        // init mask
        LOP.coreMask = new BOX.Mask({
            html: '<div class="mask" style="display:none;"></div>',
            target: '#core'
        });
        managePopins();
        // page specific
        LOP.pageScript = BOX.getStoreId($('div.wrapper')[0], 'js');
        if (LOP.pageScript) {
            // TODO add parameters passing capabilities to lazy loading
            // FIXME beware of jQuery.getScript bypassing the cache
            if (LOP.pageScript.indexOf('/') > -1) {
                $.getScript(LOP.pageScript + '.js');
            } else {
                $.getScript(jsFolder + 'pages/' + LOP.pageScript + '.js');
            }
        }
        
        managePopinsDirectAccess('teasing');
    });    
    
    // onload corrections (for dimensions)
    $(W).load(function() {
        getCoreDimensions();
    });
    
    LOP.addSWF = function(datas) {
        $(D).ready(function() {
            datas.background = datas.background || '#FFFFFF';
            datas.version = datas.version || '9';
            datas.params = datas.params || {};
            datas.params.wmode = datas.params.wmode || 'opaque';
            datas.params.quality = datas.params.quality || 'best';
            datas.variables = datas.variables || {};
            W[datas.id] = new SWFObject(datas.url, datas.id, datas.width, datas.height, datas.version, datas.background);
            for (var p in datas.params) {
                if (BOX.isOwnProperty(datas.params, p)) {
                    W[datas.id].addParam(p, datas.params[p]);
                }
            }
            for (var v in datas.variables) {
                if (BOX.isOwnProperty(datas.variables, v)) {
                    W[datas.id].addVariable(v, datas.variables[v]);
                }
            }
            W[datas.id].write(datas.target);
            if(!$(datas.target).find('embed, object').length) {
                $(datas.target).find('div.altToSWF').css('visibility', 'visible');
            }
        });
    };
    
})(jQuery);

var encodedURI;
    function encode(uri){
        encodedURI = encodeURI(uri);
        document.getElementById('brandFlashSWF').recupEncodage(encodedURI);
    }

    function thisMovie(movieName) {
      if (navigator.appName.indexOf("Microsoft") != -1) {
        return window[movieName];
      } else {
        return document[movieName];
      }
    }

