/**
*	Gestion des messages
*/
function MessagePanel( delay ) {
	/**
	*	Définit le message et créer le panneau si nécessaire
	*/
	this.setMessage		= function( msg ) {
		this.message		= msg;

		if ( null == this.element ) {
			this.create();
		} else {
			this.element.empty().append( this.message );
		}

		return this;
	}
	/**
	*	Défini un message de réussite
	*/
	this.setSuccessMessage	= function( msg ) {
		return this.setMessage( msg ).isSuccess();
	}
	/**
	*	Défini un message d'échec
	*/
	this.setErrorMessage	= function( msg ) {
		return this.setMessage( msg ).isError();
	}
	/**
	*	Défini un message d'attente
	*/
	this.setWaitMessage		= function( msg ) {
		return this.setMessage( msg ).isWait();
	}

	/**
	*	Affiche le panel
	*/
	this.show			= function( callback ) {
		if ( null == this.element ) {
			return false;
		}
		this.element.fadeIn( this.tween_delay, callback );

		return this;
	}
	/**
	*	Masque le panel
	*/
	this.hide			= function( callback ) {
		if ( null == this.element ) {
			return false;
		}
		this.element.fadeOut( this.tween_delay, callback );

		return this;
	}

	/**
	*	Indique qu'il s'agit d'un message de réussite
	*/
	this.isSuccess		= function() {
		if ( null == this.element ) {
			return false;
		}
		this.element.removeClass( 'error wait' ).addClass( 'success' );

		return this;
	}
	/**
	*	Indique qu'il s'agit d'un message d'échec
	*/
	this.isError		= function() {
		if ( null == this.element ) {
			return false;
		}
		this.element.removeClass( 'success wait' ).addClass( 'error' );

		return this;
	}
	/**
	*	Indique qu'il s'agit d'un message d'attente
	*/
	this.isWait			= function() {
		if ( null == this.element ) {
			return false;
		}
		this.element.removeClass( 'success error' ).addClass( 'wait' );

		return this;
	}
	/**
	*	Callback masquant le panel après this.delay secondes d'affichage
	*/
	this.onSplashShown	= function() {
		setTimeout( Delegate.create( this, 'hide' ), this.delay );
		//	@todo	source du #23 ??
	}
	/**
	*	Défini le délai pendant lequel le message reste affiché
	*/
	this.setDelay		= function( delay ) {
		this.delay	= delay;

		return this;
	}
	/**
	*	Défini le délai des animations de show/hide
	*/
	this.setTweenDelay	= function( delay ) {
		this.tween_delay	= delay;

		return this;
	}
	/**
	*	Affiche le message puis le masque après this.delay secondes d'affichage
	*/
	this.splash			= function() {
		this.show( Delegate.create( this, 'onSplashShown' ) );

		return this;
	}
	/**
	*	Centre le pannel sur la fenetre
	*/
	this.center			= function() {
		var win			= jQuery(window);
		this.element.css( {
			left:		( win.width() / 2 ) - ( this.element.width() / 2 ),
			top:		( ( win.height() / 2 ) - ( this.element.height() / 2 ) + jQuery(document).scrollTop() )
		} );

		return this;
	}
	/**
	*	Crée le panel dans le DOM
	*/
	this.create			= function() {
		if ( null != this.element ) {
			return false;
		}
		this.element	= jQuery( '<div class="message_panel">' + this.message + '</div>' ).css( { display: 'none' } );
		jQuery('body').append( this.element );

		jQuery(document).bind( 'scroll', { ref: this }, function( e ) {
			e.data.ref.center();
		} );
	}

	this.element		= null;
	this.message		= null;
	this.delay			= delay | 1000;
	this.tween_delay	= 1000;

	return this;
}
