text: /************************************************************************
  *************************************************************************
  @Name :       	jNotify - jQuery Plugin
  @Revison :    	2.0
  @Date : 		01/2011
  @Author:     		Surrel Mickael (www.myjqueryplugins.com - www.msconcept.fr)  -  Croissance Net (www.croissance-net.com)
  @Support:    	FF, IE7, IE8, MAC Firefox, MAC Safari
  @License :		Open Source - MIT License : http://www.opensource.org/licenses/mit-license.php
  
  **************************************************************************
  *************************************************************************/
  (function($){
  
  	$.jNotify = {
  		defaults: {
  			/** VARS - OPTIONS **/
  			autoHide : true,				// Notify box auto-close after 'TimeShown' ms ?
  			clickOverlay : false,			// if 'clickOverlay' = false, close the notice box on the overlay click ?
  			MinWidth : 200,					// min-width CSS property
  			TimeShown : 1200, 				// Box shown during 'TimeShown' ms
  			ShowTimeEffect : 200, 			// duration of the Show Effect
  			HideTimeEffect : 200, 			// duration of the Hide effect
  			LongTrip : 30,					// in pixel, length of the move effect when show and hide
  			HorizontalPosition : 'center', 	// left, center, right
  			VerticalPosition : 'top',	 // top, center, bottom
  			ShowOverlay : true,				// show overlay behind the notice ?
  			ColorOverlay : '#000',			// color of the overlay
  			OpacityOverlay : 0,			// opacity of the overlay
  			
  			/** METHODS - OPTIONS **/
  			onClosed : null,
  			onCompleted : null
  		},
  
  		/*****************/
  		/** Init Method **/
  		/*****************/
  		init:function(msg, options, id) {
  			opts = $.extend({}, $.jNotify.defaults, options);
  
  			/** Box **/
  			if($("#"+id).length == 0)
  				$Div = $.jNotify._construct(id, msg);
  
  			// Width of the Brower
  			pWidthDoc = parent.document.body.clientWidth;
  			WidthDoc = parseInt($(window).width());
  			WidthDoc = WidthDoc - ((pWidthDoc || WidthDoc) - WidthDoc);
  			HeightDoc = parseInt($(window).height());
  
  			// Scroll Position
  			pScrollTop = parent.document.body.scrollTop;
  			ScrollTop = parseInt($(window).scrollTop());
  			ScrollTop = pScrollTop || ScrollTop;
  			ScrollLeft = parseInt($(window).scrollLeft());
  
  			// Position of the jNotify Box
  			posTop = $.jNotify.vPos(opts.VerticalPosition);
  			posLeft = $.jNotify.hPos(opts.HorizontalPosition);
  
  			// Show the jNotify Box
  			if(opts.ShowOverlay && $("#jOverlay").length == 0)
  				$.jNotify._showOverlay($Div);
  
  			$.jNotify._show(msg);
  		},
  
  		/*******************/
  		/** Construct DOM **/
  		/*******************/
  		_construct:function(id, msg) {
  			$Div = 
  			$('<div id="'+id+'"/>')
  			.css({opacity : 0,minWidth : opts.MinWidth})
  			.html(msg)
  			.appendTo('body');
  			return $Div;
  		},
  
  		/**********************/
  		/** Postions Methods **/
  		/**********************/
  		vPos:function(pos) {
  			switch(pos) {
  				case 'top':
  					var vPos = ScrollTop + parseInt($Div.outerHeight(true)/2);
  					break;
  				case 'center':
  					var vPos = ScrollTop + (HeightDoc/2) - (parseInt($Div.outerHeight(true))/2);
  					break;
  				case 'bottom':
  					var vPos = ScrollTop + HeightDoc - parseInt($Div.outerHeight(true));
  					break;
  			}
  			return vPos;
  		},
  
  		hPos:function(pos) {
  			switch(pos) {
  				case 'left':
  					var hPos = ScrollLeft;
  					break;
  				case 'center':
  					var hPos = ScrollLeft + (WidthDoc/2) - (parseInt($Div.outerWidth(true))/2);
  					break;
  				case 'right':
  					var hPos = ScrollLeft + WidthDoc - parseInt($Div.outerWidth(true));
  					break;
  			}
  			return hPos;
  		},
  
  		/*********************/
  		/** Show Div Method **/
  		/*********************/
  		_show:function(msg) {
  			$Div
  			.css({
  				top: posTop,
  				left : posLeft
  			});
  			switch (opts.VerticalPosition) {
  				case 'top':
  					$Div.animate({
  						top: posTop + opts.LongTrip,
  						opacity:1
  					},opts.ShowTimeEffect,function(){
  						if(opts.onCompleted) opts.onCompleted();
  					});
  					if(opts.autoHide)
  						$.jNotify._close();
  					else
  						$Div.css('cursor','pointer').click(function(e){
  							$.jNotify._close();
  						});
  					break;
  				case 'center':
  					$Div.animate({
  						opacity:1
  					},opts.ShowTimeEffect,function(){
  						if(opts.onCompleted) opts.onCompleted();
  					});
  					if(opts.autoHide)
  						$.jNotify._close();
  					else
  						$Div.css('cursor','pointer').click(function(e){
  							$.jNotify._close();
  						});
  					break;
  				case 'bottom' :
  					$Div.animate({
  						top: posTop - opts.LongTrip,
  						opacity:1
  					},opts.ShowTimeEffect,function(){
  						if(opts.onCompleted) opts.onCompleted();
  					});
  					if(opts.autoHide)
  						$.jNotify._close();
  					else
  						$Div.css('cursor','pointer').click(function(e){
  							$.jNotify._close();
  						});
  					break;
  			}
  		},
  
  		_showOverlay:function(el){
  			var overlay = 
  			$('<div id="jOverlay" />')
  			.css({
  				backgroundColor : opts.ColorOverlay,
  				opacity: opts.OpacityOverlay
  			})
  			.appendTo('body')
  			.show();
  
  			if(opts.clickOverlay)
  			overlay.click(function(e){
  				e.preventDefault();
  				$.jNotify._close();
  			});
  		},
  
  
  		_close:function(){
  				switch (opts.VerticalPosition) {
  					case 'top':
  						if(!opts.autoHide)
  							opts.TimeShown = 0;
  						$Div.delay(opts.TimeShown).animate({
  							top: posTop-opts.LongTrip,
  							opacity:0
  						},opts.HideTimeEffect,function(){
  							$(this).remove();
  							if(opts.ShowOverlay && $("#jOverlay").length > 0)
  								$("#jOverlay").remove();
  								if(opts.onClosed) opts.onClosed();
  						});
  						break;
  					case 'center':
  						if(!opts.autoHide)
  							opts.TimeShown = 0;
  						$Div.delay(opts.TimeShown).animate({
  							opacity:0
  						},opts.HideTimeEffect,function(){
  							$(this).remove();
  							if(opts.ShowOverlay && $("#jOverlay").length > 0)
  								$("#jOverlay").remove();
  								if(opts.onClosed) opts.onClosed();
  						});
  						break;
  					case 'bottom' :
  						if(!opts.autoHide)
  							opts.TimeShown = 0;
  						$Div.delay(opts.TimeShown).animate({
  							top: posTop+opts.LongTrip,
  							opacity:0
  						},opts.HideTimeEffect,function(){
  							$(this).remove();
  							if(opts.ShowOverlay && $("#jOverlay").length > 0)
  								$("#jOverlay").remove();
  								if(opts.onClosed) opts.onClosed();
  						});
  						break;
  				}
  		},
  
  		_isReadable:function(id){
  			if($('#'+id).length > 0)
  				return false;
  			else
  				return true;
  		}
  	};
  
  	/** Init method **/
  	jNotify = function(msg,options) {
  		if($.jNotify._isReadable('jNotify'))
  			$.jNotify.init(msg,options,'jNotify');
  	};
  
  	jSuccess = function(msg,options) {
  		if($.jNotify._isReadable('jSuccess'))
  			$.jNotify.init(msg,options,'jSuccess');
  	};
  
  	jError = function(msg,options) {
  		if($.jNotify._isReadable('jError'))
  			$.jNotify.init(msg,options,'jError');
  	};
  })(jQuery);