/**
 * CustomLightBox
 */
(function($){
	var _this = null; // referencia al elemento que se le asocio el plugin 
	var settings = null; // configuración
	
    $.fn.CustomLightBox = function(params) {
		_this = jQuery(this);
		settings = $.extend({
			// elementos
			overLayer: null,// layer que oculta todos los elementos - jQuery element
			mainLayer: null, // layer que muestra la info del lightbox - jQuery element
			closeButton: null, // botón que cierra el lightbox - jQuery element,
			// animación
			overLayerOpacity: null, // opacidad del layer que oculta todos los elementos - entero
			showAnimate: null, // tipo de animación - cadena
			param1: null,
			// métodos
			onShowFn: null, // llamada después de la muestra del lightbox - función
			onCloseFn: null // llamada después del cierre del lightbox - función
		},params);
		
        return this.each(function() {
			/**
			 * lanzador del plugin
			 */
			_this.ready(function() {
				
				switch(settings.showAnimate) {
					case 'fadeIn': fadeIn(settings.onShowFn);break;
					case 'overLayerLeft2Right': overLayerLeft2Right(settings.onShowFn);break;
					default: fadeIn(settings.onShowFn);
				}
			});
			
			/**
			 * Cerrar el lightbox cuando se da click en el overlayer
			 */
			settings.overLayer.click(function() {
				closeLightBox(settings.onCloseFn);
			});
			
			/**
			 * Cerrar el lightbox cuando se da click en el boton de cerrar
			 */
			settings.closeButton.click(function() {
				closeLightBox(settings.onCloseFn);
			});
        });
    };
	
	// fúnciones >
	/**
	 * Verificar si se han cumplido los requisitos mínimos para poder operar
	 */
	var isReady = function() {
		if(settings.overLayer && settings.mainLayer && settings.closeButton)
			return true;
		else
			return false;
	};
	
	/**
	 * Verificar si callback es una función y ejecutarla
	 */
	var runFunction = function(callFn) {
		if (typeof callFn == "function")
			callFn();
	};
	
	/**
	 * Cerrar el LightBox
	 */
	var closeLightBox = function(func) {
		if(isReady()) {
			// ocultar overlayer
			settings.mainLayer.fadeOut(function() {
				settings.overLayer.fadeOut();
			});
		}
		return false;
	};
	
	/**
	 * Animación que muestra poco a poco el overlayer completo
	 */
	var fadeIn = function(func) {
		if(isReady()) {
			// mostrar overlayer
			settings.overLayer.css({
				'display': 'block',
				'height': jQuery(window).height(),
				'opacity': settings.overLayerOpacity
			}).fadeIn(function() {
				settings.mainLayer.fadeIn();
			});
		}
		return false;
	};
	
	/**
	 * Animación que recorre el overlayer de izquierda a derecha
	 */
	var overLayerLeft2Right = function(func) {
		if(isReady()) {
			// mostrar overlayer
			settings.overLayer.css({
				'display': 'block',
				'height': jQuery(window).height(),
				'opacity': settings.overLayerOpacity,
				'width': 0
			}).animate({'width':'100%'},500,function() {
				settings.mainLayer.fadeIn(function() {
					runFunction(func);
				});
			});
		}
		return false;
	};
})(jQuery);

