/*
 *
 *	@titre: jquery.popup.
 *	@description: javascript popup.
 *	@auteur: neov - http://www.neov.net.
 *	@creation: 20090506.
 *	@modification: 20091005.
 *
*/

(
	function($)
	{
		var fadeTime = 300;
		var lastOpen = null;

		// affichage masque.
		function afficherMasque()
		{
			var w = $('body').width();
			var mh = $('body').height();
			var ih = $(document).height();

			if ( mh < ih ) mh = ih;

			$('#masque')
				.css({width: w + 'px', height: mh +'px', opacity: 0.5, filter:'Alpha(Opacity=50)'})
				.fadeIn(fadeTime);
		};

		// affichage popup.
		$.pop = function(el, o)
		{
			var base = this;
			base.$el = $(el);
			base.el = el;
			
			base.$el.data('pop', base);
			
			// initialisation.
			base.init = function()
			{
				// options.
				base.o = $.extend(
					{
						// @param type popup.
						overlay:		true,			// @boolean:	true si faux popup
						
						// @param faux popup.
						popUp:			null,			// @string:		identifiant popup à ouvrir
						beforeShow:		null,			// @function:	action avant ouverture
						afterShow:		null,			// @function:	action apres ouverture
						
						// @param vrai popup.
						popWidth:		200,			// @integer:	largeur du popup
						popHeight:		200,			// @integer:	hauteur du popup
						popTop:			100,			// @integer:	top position du popup
						popLeft:		100,			// @integer:	left position du popup
						popLocation:	'no',			// @string:		parametre supplementaire popup
						popMenubar:		'no',			// @string:		parametre supplementaire popup
						popResizable:	'no',			// @string:		parametre supplementaire popup
						popScrollbars:	'no',			// @string:		parametre supplementaire popup
						popStatus:		'no',			// @string:		parametre supplementaire popup
						popToolbar:		'no',			// @string:		parametre supplementaire popup
						popTitle:		'Popup'			// @string:		titre popup
					}, o || {}
				);

				// return collection.
				if(base) {
					$(base.$el).each(
						function()
						{
							// evenement au clic de l'element.
							$(this).click(
								function()
								{

									// action avant affichage.
									if(base.o.beforeShow) base.o.beforeShow.call();

									// affichage.
									if(base.o.overlay) {
										$(o.popUp).showElem();
									} else {
										lastOpen = window.open(
											$(this).attr('href'),
											base.o.popTitle,
											'width=' + base.o.popWidth + ', height=' + base.o.popHeight + ', top=' + base.o.popTop + ', left=' + base.o.popLeft +
											', location=' + base.o.popLocation + ', manubar=' + base.o.popMenubar + ', resizable=' + base.o.popResizable +
											', scrollbars=' + base.o.popScrollbars + ', status=' + base.o.popStatus + ', toolbar=' + base.o.popToolbar
										);
									}

									// action apres affichage.
									if(base.o.afterShow) base.o.afterShow.call();
									
									return false;
								}
							);
						}
					);
				}
			}
			
			base.init();
		};

		$.fn.pop = function(o)
		{
			return this.each(
				function()
				{
					(new $.pop(this, o));
				}
			);
		};

		// affichage des elements du popup.
		$.fn.showElem = function()
		{ 
			var extraPos = 0;
			if( $(window).height() < $(this).height() ) extraPos = 150;
			var tPos = ( $(window).height() - $(this).height() )/2 + $(window).scrollTop() + extraPos;
			var lPos = ( $(window).width() - $(this).width() )/2;
			if (lastOpen != null) $(lastOpen).fadeOut(fadeTime);

			$(this)
				.fadeIn(fadeTime)
				.css({ top: tPos + 'px', left: lPos + 'px' });
			afficherMasque();
			
			lastOpen = this;

			return false;
		};

		// fermeture popup.
		$.fn.hidePop = function()
		{
			$(this).each(
				function()
				{
					$(this).click(
						function()
						{
							$('#masque').fadeOut(fadeTime);
							$(lastOpen).fadeOut(fadeTime);
							
							return false;
						}
					);
				}
			);
		};
	}
)(jQuery);

$(
	function()
	{
		// ouverture popup.
		$('.pop').pop({overlay: true, popUp: '#test'});

		// fermeture popup.
		$('.btn-pop a').hidePop();
	}
);
