(function($) {
    var W = this, D = this.document;
    
    LOP.FBC = {
        init: function() {
            var fbAppId = location.pathname.toLowerCase().indexOf('/contentmanagerdata/sites/aspnet/') > -1 ? '124610520912962' : '128709870483391';
            
            FB.init({
                appId  : fbAppId,
                status : true,
                cookie : true,
                xfbml  : false
            });
        },
        checkStatus: function(datas) {
            FB.getLoginStatus(function(response) {
                if(response.session) {
                    LOP.FBC.userFbId = response.session.uid;
                    
                    if(datas.logged) {
                        datas.logged();
                    }
                } else {
                    if(datas.notLogged) {
                        datas.notLogged();
                    }
                }
            });
        },
        loadContent: function() {
            LOP.popinMaskType = 'coreMaskPopinFBLoading';
            LOP.popins.add({
                url: l10n.FB.url.contentLoading,
                id: 'FBLoading',
                processHTML: false,
                refresh: true
            });
        },
        userFbId: ''
    };
    
    LOP.popinOpeningActions.FBLoading = function() {
        this.position();
    };
    
    LOP.popinOpeningActions.FBSignin = function() {
        this.position();
        
        BOX.form('FBSignInForm').addValidation(function(form) {
            form.text('fbclogin').mustValidate(function(field) {
                if(field.isEmpty()) {
                    return l10n.errorMsg.required.email;
                } else if(!field.isMatching('email')) {
                    return l10n.errorMsg.invalid.email;
                }
            });
            
            form.text('fbcpassword').mustValidate(function(field) {
                if(field.isEmpty()) {
                    return l10n.errorMsg.required.pwd;
                } else if(!field.isMatching('password')) {
                    return l10n.errorMsg.invalid.pwd;
                }
            });
            
            return l10n.FB.errorMsg.form.plural;
        }, 'p.save').addListeners({
            'formError': {
                'fn': LOP.addFormError
            },
            'formValid': {
                fn: function(e, originalEvent) {
                    originalEvent.preventDefault();
                    LOP.removeFormError.call(e.owner, e, originalEvent);
                    
                    $('#popinFBSignin .loading').css('display', 'block');
                    
                    LOP.wsUserLogin({
                        'login': BOX.form('FBSignInForm').text('fbclogin').getValue(),
                        'password': BOX.form('FBSignInForm').text('fbcpassword').getValue(),
                        'onSuccess': function() {
                            $.get(l10n.FB.url.customerCheckID, function(datas) {
                                if(datas.indexOf('__noData__') > -1) {
                                    var lnk = l10n.FB.url.customerAssign + '?code=' + BOX.form('FBSignInForm').text('fbcid').getValue();
                                    W.location.href = lnk;
                                } else {
                                    LOP.wsUserLogout({
                                        'onSuccess': function() {
                                            $('#popinFBSignin .loading').css('display', 'none');
                                            $('#FBSignInFormError').html(l10n.FB.errorMsg.alreadyExists.fbId).css('display', 'block');
                                        },
                                        'onError': function() {
                                            W.location.reload();
                                        }
                                    });
                                }
                            });
                        },
                        'onError': function() {
                            $('#popinFBSignin .loading').css('display', 'none');
                            $('#FBSignInFormError').html(l10n.errorMsg.invalid.login).css('display', 'block');
                        }
                    });
                }
            },
            'fieldError': {
                'fn': LOP.manageFieldError
            },
            'fieldValid': {
                'fn': LOP.manageFieldError
            }
        });
    };
    
    LOP.popinOpeningActions.FBCallToAssociate = function() {
        this.position();
        
        BOX.form('popinFBCallToAssociateForm').addReplacement();
        
        $('#popinFBCallToAssociate .save').click(function(e) {
            e.preventDefault();
            
            $('#popinFBCallToAssociate .loading').css('display', 'block');
            
            FB.login(function(r) {
                if(r.session) {
                    FB.api('/me', function(response) {
                        var rId = response.id;
                        $.get(l10n.FB.url.customerSearch + '?code=' + rId, function(datas) {
                            if(datas.indexOf('__noData__') > -1) {
                                $.get(l10n.FB.url.customerCheckID, function(datas) {
                                    if(datas.indexOf('__noData__') > -1) {
                                        var lnk = l10n.FB.url.customerAssign + '?code=' + rId;
                                        W.location.href = lnk;
                                    } else {
                                        $('#popinFBCallToAssociate .loading').css('display', 'none');
                                        $('#popinFBCallToAssociate .error').html(l10n.FB.errorMsg.alreadyExists.fbId).css('display', 'block');
                                    }
                                });
                            } else {
                                $('#popinFBCallToAssociate .loading').css('display', 'none');
                                $('#popinFBCallToAssociate .error').html(l10n.FB.errorMsg.alreadyExists.fbId).css('display', 'block');
                            }
                        });
                    });
                }
            }, {perms: 'user_birthday'});
        });
    };
    
    LOP.popinOpeningActions.FBAssociationConfirm = function() {
        this.position();
    };
    
    LOP.popinOpeningActions.FBUnassignConfirm = function() {
        this.position();
        LOP.FBC.checkStatus({
            logged:function() {
                FB.logout();
                W.location.reload();
            }
        });
    };
    
    LOP.popinOpeningActions.FBMoreAboutSync = function() {
        this.position();
    };
    
    LOP.popinClosingActions.FBCallToAssociate = function() {
        if(BOX.form('popinFBCallToAssociateForm').checkbox('FBDisplayMessage').isChecked()) {
            $.get(l10n.FB.url.customerHideNotification);
        }
        
        BOX.form('popinFBCallToAssociateForm', true);
    };
    
    $(D).ready(function() {
        if(!D.getElementById('fb-root')) {
            $('#core').append('<div id="fb-root"></div>');
        }
        LOP.FBC.init();
        LOP.FBC.checkStatus({
            notLogged: function() {
                $('#header .FBLink').click(function(e) {
                    e.preventDefault();
                    FB.login(function(r) {
                        if(r.session) {
                            FB.api('/me', function(response) {
                                var rId = response.id;
                                
                                LOP.FBC.loadContent();
                                
                                $.get(l10n.FB.url.customerSearch + '?code=' + rId, function(datas) {
                                    if(datas.indexOf('__noData__') > -1) {
                                        LOP.popins.add({
                                            url: l10n.FB.url.customerSignin + '?code=' + response.id,
                                            id: 'FBSignin',
                                            processHTML: LOP.processHTMLPopins,
                                            refresh: true
                                        });
                                    } else {
                                        var lnk = l10n.FB.url.customerLogin + '?code=' + datas + '&id=' + rId + '&url=' + l10n.FB.url.customerLoginSuccess;
                                        W.location.href = lnk;
                                    }
                                });
                            });
                        }
                    }, {perms: 'user_birthday'});
                });
            },
            logged: function() {
                $('#header .FBLink').addClass('notActive').click(function(e) {
                    e.preventDefault();
                });
                
                if($('#myLoreal').hasClass('loggedIn')) {
                    $('#myLoreal a:eq(0)').click(function(e) {
                        var submitName = $(this).attr('id').replace(/_/g, '$');
                        e.preventDefault();
                        
                        FB.logout(function() {
                            __doPostBack(submitName, '');
                        });
                    })
                }
            }
        });
    });
})(jQuery);