/*
 * Function appelée lorsqu'un utilisateur est authentifié
 */
function userLogged() {
    $.get( userLoggedUrl,
           function(html){ $('#login-module').replaceWith(html); });
    if ( isMaterialPage ) {
        $.get( downloadsUrl,
               { materialId: materialId, format: 'html' },
               function(html){ $('#downloads').replaceWith(html); });
    }
}

/*
 * Function servant à afficher les erreurs
 * provenants de Zend_Form
 *
 * @param jQuery form
 * @param object errors
 */
function zendFormErrors(form, errors) {
    for ( var i in errors ) {
        var input = $('#' + i, form);
        var errorsId = i + '-errors';
        var errorsList = $('#' + errorsId );
        if ( errorsList.size() == 0 ) {
            errorsList = $('<ul />').addClass('errors').attr('id', errorsId);
            input.after(errorsList).after('<br />');
        } else {
            errorsList.find('li').remove();
        }
        for ( var j in errors[i] ) {
            var li = $('<li />').text(errors[i][j]);
            errorsList.append(li);
        }
    }
}

    /*--------+
    |  LOGIN  |
----+         +--------------------------------------------------------------*/
    /*
     * Function appelée avant la tentative d'authentification
     */
    function beforeLoginSubmit(formData, form, options) {
        $('#login-module h3').text('Connexion');
        formData.push({name:'format', value:'json'});
        $('.module-block').show();
    }
    /*
     * Function appelée après la tentative d'authentification
     */
    function loginSubmited(json) {
        $('#login-module ul.errors').prev('br').remove();
        $('#login-module ul.errors').remove();
        $('#login-module .log-error').remove();
        if ( json.logged == 1 ) {
            $('#login-module h3').text('Connecté');
            userLogged();
        } else {
            $('#login-module h3').text('Échec');
            if ( json.errors ) {
                zendFormErrors( $('form#login'), json.errors );
            }
            if ( json.logError ) {
                var logError = $('<p />').addClass('log-error');
                logError.html(json.logError);
                $('#login-module form').after(logError);
            }
            $('.module-block').hide();
        }
    }


    /*---------+
    |  LOGOUT  |
----+          +--------------------------------------------------------------*/
    /*
     * Function appelée avant la tentative d'authentification
     */
    function logout(formData, form, options) {
        $('#login-module .log-errors').remove();
        formData.push({name:'format', value:'json'});
        $('.module-block').show();
    }
    /*
     * Function appelée après la tentative d'authentification
     */
    function loggedOut(json) {
        $('#login-module ul.errors').prev('br').remove();
        $('#login-module ul.errors').remove();
        $('.module-block').hide();
        if ( json.logged == 1 ) {
            userLogged();
        } else {
            if ( json.errors ) {
                zendFormErrors( $('form#login'), json.errors );
            }
            if ( json.logError ) {
                var msg = $('<p />').addClass('log-errors');
                msg.append(json.logError);
                $('#login-module .innermodule').prepend(msg);
            }
        }
    }

    /*----------------+
    |  LOST PASSWORD  |
----+                 +----------------------------------------------------------*/
/*
 * Function appelée après le chargement
 * du formulaire de récupération de mot de passe
 */
function lostFormLoaded(html) {
    lostPwdPopin.setContent(html).open();
    $('form#lost-password').submit(function() {
        $(this).ajaxSubmit( { beforeSubmit: beforeLostSubmit,
                              success:      lostSubmited,
                              dataType:     'json' });
        return false;
    });
}
/*
 * Function appelée avant la tentative de récupération du mot de passe
 */
function beforeLostSubmit( formData, form, options ) {
    formData.push({name:'format', value:'json'});
}
/*
 * Function appelée après la tentative de récupération du mot de passe
 */
function lostSubmited(json) {
    $('form#lost-password ul.errors').remove();
    if ( json.ok == 1 ) {
        var confirmMsg = $('<p />');
        var text = 'Un email a été envoyé à l\'adresse : <strong>' + json.user.email + '</strong>,<br />';
        text += 'Vous recevrez d\'ici peu votre mot de passe par email.';
        confirmMsg.html(text);
        lostPwdPopin.setContent(confirmMsg);
    } else {
        if ( json.errors ) {
            var errorsList = $('<ul />').addClass('errors');
            for ( var i = 0; i < json.errors.length; i ++ ) {
                errorsList.append( $('<li />').text(json.errors[i]) );
            }
            $('#lostPasswordEmail').after(errorsList);
        }
    }
}

    /*------------+
    |  SUBSCRIBE  |
----+             +----------------------------------------------------------*/
/*
 * Function appelée après le chargement
 * du formulaire d'inscription
 */
function subscribeFormLoaded(html) {
    subscribePopin.setContent(html).open();
    $('form#subscribe').submit(function() {
        $(this).ajaxSubmit( { beforeSubmit: beforeSubscribeSubmit,
                              success:      subscribeSubmited,
                              dataType:     'json' });
        return false;
    });
}
/*
 * Function appelée avant la tentative d'inscription
 */
function beforeSubscribeSubmit( formData, form, options ) {
    subscribePopin.setTitle('Enregistrement');
    formData.push({name:'format', value:'json'});
}
/*
 * Function appelée après la tentative d'inscription
 */     
function subscribeSubmited(json) {
    $('form#subscribe ul.errors').remove();
    if ( json.subscribe == 1 ) {
        userLogged();
        subscribePopin.close();
    } else {
        subscribePopin.setTitle('Inscription invalide');
        if ( json.errors ) {
            zendFormErrors( $('form#subscribe'), json.errors );
        }
    }
}


var subscribePopin; // stocke une référence à la popin d'inscription
var lostPwdPopin; // stocke une référence à la popin d'inscription

$(document).ready(function() {

    $('.module-block').css('opacity', .5);
    $('form#login').submit(function() {
        $(this).ajaxSubmit( { beforeSubmit: beforeLoginSubmit,
                              success:      loginSubmited,
                              dataType:     'json' } );
        return false;
    });
    
    $('a.subscribe').click(function(e) {
        e.preventDefault();
        subscribePopin = new $.oui.Popin( { theme: 'mini',
                                            block: true,
                                            width: 300,
                                            height: 'auto',
                                            autopen: false, resizable: false, closable: true, draggable: false,
                                            title: 'Créer un compte' } );
        var url = $(this).attr('href');
        $.get(url, {format: 'html'}, subscribeFormLoaded);
        return false;
    });
    
    $('a.lost-password').click(function(e) {
        e.preventDefault();
        lostPwdPopin = new $.oui.Popin( { theme: 'mini',
                                          block: true,
                                          width: 450,
                                          autopen: false, resizable: false, closable: true, draggable: false,
                                          title: 'Mot de passe oublié' } );
        var url = $(this).attr('href');
        $.get(url, {format: 'html'}, lostFormLoaded);
        return false;
    });

});


