/*
 * 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;
	});

});


