(function($){
    $.fn.extend({ 
        //plugin name - mndGallery
        mndGallery: function(options) {
 
            var defaults = {
                ancho: 312,
                alto: 350,
                velocidad: 300,
                claseActiva: 'activa',
                flechas: true,
                numeros: true,
                contador: true,
                nexo: 'de',
                siguiente: 'siguiente',
                anterior: 'anterior',
                siguienteTxt: 'Siguiente',
                anteriorTxt: 'Anterior',
                mndcontador: 'mndContador',
                lista: 'listaNumeros',
            };
            var options = $.extend(defaults, options);
         
            return this.each(function() {
//				Variables
                var o =options;
                var obj = $(this);
                var nombreObjeto = obj.attr('class');
                var items = $("img", obj);
				var imagenes = items.length;
				
//				Funciones
//				FUNCIÓN DE CARGA DE LA GALERIA
				function inicio(){
					obj.css({'width':o.ancho,'height':o.alto});
					items.css({'left':o.ancho});
					$('.'+o.claseActiva).css({'left':0})
					if(o.flechas == true){
						
					}
					
					if(o.numeros == true){
						crearNumeros();	
					}
					
					if(o.flechas == true){
						crearFlechas();
					}
					
					if(o.contador == true){
						crearContador();
					}
					
				};
				
//				FUNCIÓN PARA TESTEAR QUE LA IMAGEN EXISTA ANTES DE DEFINIR EL CLICK
				function siguiente(){
					var actual = $('.'+o.claseActiva).attr('rel');
					if(actual != imagenes){
						var siguiente = parseInt(actual)+1;
						mover(actual,siguiente);
					}		
				}
				function anterior(){
					var actual = $('.'+o.claseActiva).attr('rel');
					if(actual != 1){
						var anterior = parseInt(actual)-1;
						mover(actual,anterior);
					}		
				}
				
//				FUNCIÓN PARA MOVER LAS IMAGENES
				function mover(inicial,final){
					inicial = parseInt(inicial);
					final = parseInt(final);
					if(inicial < final){
					
						$('#num'+inicial).animate({'left':-o.ancho},o.velocidad,function(){$(this).removeClass(o.claseActiva);});
						$('#num'+final).animate({'left':0},o.velocidad,function(){
							$(this).addClass(o.claseActiva);
								if(o.contador == true){
									actualizarContador();
								}
						});
					}
					if(inicial > final){
						$('#num'+inicial).animate({'left':o.ancho},o.velocidad,function(){$(this).removeClass(o.claseActiva);});
						$('#num'+final).css({'left':-o.ancho}).animate({'left':0},o.velocidad,function(){
							$(this).addClass(o.claseActiva);	
							if(o.contador == true){
									actualizarContador();
								}
						});
					}
					
				}
				
				
//				FUNCIONES PARA CREAR LAS FLECHAS Y EL LISTADO DE NUMEROS
				function crearNumeros(){
					$('.'+nombreObjeto).after('<ul class="'+o.lista+'"></ul>');
					var i = 1;
					while(i <= imagenes){
						$('<li><a href="javascript:;" class="'+o.mndnumeros+'" rel="'+i+'">'+i+'</a></li>').appendTo('.'+o.lista);
						i++;
					}
					i=1;
					eventoNumero();
				}
				
				function crearFlechas(){
					$('<a href="javascript:;" class="'+o.anterior+'">'+o.anteriorTxt+'</a>').appendTo('.'+nombreObjeto);
					$('<a href="javascript:;" class="'+o.siguiente+'">'+o.siguienteTxt+'</a>').appendTo('.'+nombreObjeto);
					
					eventoFlechas();
				}
				
				function crearContador(){
					var act = $('.'+o.claseActiva).attr('rel');
					var total = imagenes;
					$('<div class="'+o.mndcontador+'">'+act+' '+o.nexo+' '+total+'</div>').appendTo('.botoneraGal');
				}
				function actualizarContador(){
					var act = $('.'+o.claseActiva).attr('rel');
					var total = imagenes;
					$('.'+o.mndcontador).html(act+' '+o.nexo+' '+total);
				}
				
				//Eventos
				function eventoFlechas(){
					$('.'+nombreObjeto+' .'+o.siguiente).click(function(){siguiente();})
					$('.'+nombreObjeto+' .'+o.anterior).click(function(){anterior();})
				}
				
				function eventoNumero(){
				$('.mndNumeros').click(function(){
					var act = $('.'+o.claseActiva).attr('rel');
					var sig = $(this).attr('rel');
					mover(act,sig);
				})
				}
				
//				Identificamos las imagenes y le damos la clase a la primera activa
				var valorDef = 1 ;
				var valorImagen = valorDef; 
				$('.'+nombreObjeto+'> img').each(function(){
					$(this).attr('id','num'+valorImagen);
					$(this).attr('rel',valorImagen);

					if(valorImagen == valorDef){
						$(this).addClass(o.claseActiva);
					}

					valorImagen++;
				});
				valorImagen = valorDef;

//				Arrancamos el objeto
				inicio();
            });
        }
    });
})(jQuery);
