(function($)
{
	$.fn.popin = function(opts)
	{
		//return this.each(function()
		//{
			var oThis = this[0];
			if (oThis._jpopin)
			{
				oHash[oThis._jpopin].options = $.extend({}, oHash[oThis._jpopin].options, opts);
				if (oHash[oThis._jpopin].options['urlAjax'])
					this.jqm({ajax: oHash[oThis._jpopin].options['urlAjax']});
				return this;
			}
			else
			{
				iIdx++;
				var options = $.extend({}, $.popin.defaults, opts);
				var iTmpId = iIdx;
				
				if (!options.id)
					options.id = iTmpId;
				var elt = $('<div' + (options.id ? ' id="popin_' + options.id + '"' : '') + '></div>');
				elt.prependTo(this).addClass('popin jqmWindow')
					.css({'width': options.width, 'height': options.height, 'display': 'none' })
					.jqm(
					{
						modal: true,
						trigger: options.trigger,
						//ajax: options.urlAjax,
						onLoad: function(hash)
						{
							$.popin.onLoad(iTmpId, hash);
						},
						onHide: function(hash)
						{
							$.popin.onHide(iTmpId, hash);
						},
						onShow: function(hash)
						{
							$.popin.onShow(iTmpId, hash);
						}
					});
				elt[0]._jpopin = iIdx;
				
				oHash[iIdx] =
				{
					options: options,
					popup: elt
				};
				
				// Dans le cas d'un contenu non chargé en ajax, on remplit directement
				if (options.content)
				{
					elt.html(options.content);
					$.popin.onLoad(iTmpId);
				}
				
				if (typeof options.width == 'number')
					elt.css({'margin-left': '-' + (options.width >> 1) + 'px'});
			
				if (options.show)
					elt.jqmShow();
				
				return elt;
			}
		//});
		
	};
	
	
	$.popin =
	{
		defaults:
		{
			width: 300,
			height: 'auto',
			title: 'Fée de l\'effet',
			show: false
		},
		
		hash: {},
		
		onShow: function(i, hash)
		{
			hash.w.show();
			hash.w.css('left', '50%');
			hash.w.css('top', '10%');
			if (oHash[i] && oHash[i].options['urlAjax'])
			{
				hash.w.html('<img src="/images/ajax_loader.gif" id="popup_ajax_loader" style="vertical-align: middle;" />');
				var oImg = $('#popup_ajax_loader', hash.w);
				oImg.css({'position': 'absolute', 'top': '50%', 'left': '50%', 'margin-left': '-' + (parseInt(oImg.attr('width')) / 2) + 'px', 'margin-top': '-' + (parseInt(oImg.attr('height')) / 2) + 'px'});
				$.get(oHash[i].options['urlAjax'], {}, function(data)
				{
					oImg.remove();
					hash.w.html(data);
					$.popin.onLoad(i, hash);
					hash.w.jqmAddClose('.jqmClose');
				}, 'text');
			}
			if (oHash[i] && oHash[i].options['onShow'])
				oHash[i].options['onShow']();
		},
		
		onHide: function(i, hash)
		{
			/*
			 * w: (jQuery object) The dialog element
			 * c: (object) The config object (dialog's parameters)
			 * o: (jQuery object) The overlay
			 * t: (DOM object) The triggering element 
			 */
			if (oHash[i] && oHash[i].options['onHide'])
				oHash[i].options['onHide']();
			hash.w.hide();
			hash.o.remove();
		},
		
		onLoad: function(i, hash)
		{
			if (!oHash[i])
				return;
			oHash[i].popup.wrapInner('<div class="content"></div>')
				.prepend('<h1>' + oHash[i].options.title + '</h1><a href="#" class="jqmClose jqmCloseCross"></a>')
				.draggable({handle: 'h1'});
			if (oHash[i].options['onLoad'])
				oHash[i].options['onLoad']();
		}
	};
	
	
	var oHash = $.popin.hash;
	var iIdx = 0;
	
	
})(jQuery);
