/*
 * Patron Plugin 0.0
 *
 * Copyright (c) 2011 dewenir. felix tuesta
 *
 * Date: 13 / 01 / 2011
 * Library: jQuery
 * 
 */
(function($){
	$.fn.destacados = function(options){
		var defaults = { 
			start: 'activoCarruselItems', 			// where should the carousel start?
			cssDestacado: 'destacado',
			insertarAntesDe: 'carrusel001',
			cssItem: 'item',
			cssDestacadoActivo: 'activo',
			mostrarCarrusel: true,
			destacadoActivo: 2
		};
		var options = $.extend(defaults, options);  

		var section = $('#section');
		var cajaDestacados = $(this);
		var destacados = $('.' + options.cssDestacado, cajaDestacados);
		var destacadoGrande;
		var enlacesPaginador;
		var enlacesSiguienteAnterior;
		
		return this.each(function(){
			initialize();
		});
		
		function initialize(){
			presentacion();
			crearWraperCuerpoDestacado();
			crearDestacadoGrande();
			crearPaginador();
			crearPaginadorSiguienteAnterior();
			cambiarDestacadoGrande();
			desmarcarDestacados();
			marcarDestacadoActivo();
			marcarEnlacePaginador();
			setEvents();
		};
		function presentacion(){
			section.addClass(options.start);					
			return;
		};
		function numeroItemsDelPaginador(){
			var plantilla = '';
			destacados.each(function(indice){
				plantilla += '<li><a href=\"\" rel="' + indice +'">' + (indice+1) +'<\/a><\/li>\n';
			});			
			return plantilla;
		};
		function plantillaPaginadorSiguienteAnterior(){
			var html = '<ul class=\"paginadorSiguienteAnteriorItems\">\n';
			html += '<li class=\"paginadorItemAnterior\"><a href=\"\" rel=\"prev\">Anterior<\/a><\/li>\n';
			html += '<li class=\"paginadorItemSiguiente\"><a href=\"\" rel=\"next\">Siguiente<\/a><\/li>\n';
			html += '<\/ul>\n';
			return html;
		};
		function plantillaPaginador(){
			var html = '<ul class=\"paginadorItems\">\n';
			html += numeroItemsDelPaginador();
			html += '<\/ul>\n';
			return html;
		};		
		function crearPaginadorSiguienteAnterior(){
			destacadoGrande.before(plantillaPaginadorSiguienteAnterior());
			engancharPaginadorSiguienteAnterior();
			return;
		};
		function crearPaginador(){
			destacadoGrande.before(plantillaPaginador());
			engancharPaginador();
			return;
		};
		function desmarcarEnlacesPaginador(){
			$(enlacesPaginador).each(function(){
				$(this).parent().removeClass('activo');
			});
			return;
		};		
		function marcarEnlacePaginador(){
			$(enlacesPaginador[options.destacadoActivo]).parent().addClass('activo');
			return;
		};
		function engancharPaginadorSiguienteAnterior(){
			enlacesSiguienteAnterior = $('.paginadorSiguienteAnteriorItems a', cajaDestacados);
			enlacesSiguienteAnterior.each(function(indice){
				var enlace = $(this);
				enlace.bind('click', function(){
					var current = $(this);
					if(current.attr('rel') == 'next'){
						if(options.destacadoActivo == destacados.size() - 1) options.destacadoActivo = -1;
						options.destacadoActivo ++;
					}else{
						if(options.destacadoActivo == 0) options.destacadoActivo = destacados.size();
						options.destacadoActivo --;
					}
					cambioDestacado();
					return false;
				});
			});
			return;
		};
		function engancharPaginador(){
			enlacesPaginador = $('.paginadorItems a', cajaDestacados);
			enlacesPaginador.each(function(indice){
				var enlace = $(this);
				enlace.attr('rel', indice);
				enlace.bind('click', function(){
					var current = $(this);
					options.destacadoActivo = current.attr('rel');
					cambioDestacado();
					return false;
				});
			});
			return;
		};
		function crearDestacadoGrande(){
			var emplazamiento = $('.' + options.insertarAntesDe, cajaDestacados).size > 0 ?
					$('.' + options.insertarAntesDe, cajaDestacados):
					$(destacados[0]);
			emplazamiento.before('<div class=\"itemGrande\"><p><strong>Item grande</strong></p></div>');
			destacadoGrande = $('.itemGrande', cajaDestacados);
			return;
		};
		function crearWraperCuerpoDestacado(){
			destacados.each(function(indice){
				var destacado = $(this);
				destacado.addClass(options.cssItem);
				var cuerpo = $('.cuerpo', destacado);
				cuerpo.attr('rel', indice);
				var html = '<div class=\"wrap\">\n';
				html += cuerpo.html();
				html += '<\/div>\n';
				cuerpo.html(html);
				return;
			});
			return;
		};
		function obtenerRuta(imagen){
			var src = imagen.attr('src');
			var posicion01 = src.indexOf('.');
			var posicion02 = src.length;
			var extension = src.slice(posicion01, posicion02);
			var nombre = src.slice(0,-5);
			var ruta = nombre + 'b' + extension;
			return ruta;
		};
		function precargarImagen(ruta, cuerpo){
			//alert(cuerpo.html());
			destacadoGrande.html(cuerpo.html());
			destacadoGrande.css({
				'background-color':'#444',
				'background-image':'none'});
			var imagenGrande = $("<img src='" + ruta + "' />");
			imagenGrande.bind("load", function(){
				var random = Math.floor(100 + Math.random() * (444 - 100));
				destacadoGrande.css({
					'background-color':'#' + random,
					'background-image':'url(' + ruta + ' )'
				});
			});			
			return;
		};
		function cambiarDestacadoGrande(){
			var destacado = $(destacados[options.destacadoActivo]);
			var cuerpo = $('.cuerpo', destacado);
			var imagen = $('.imagen img', destacado);
			var ruta = (imagen.attr('src') == '/recursos/imagenes/default.jpg') ?
					'/recursos/imagenes/default960.jpg' : 
					obtenerRuta(imagen);
			precargarImagen(ruta, cuerpo);
			return;
		};		
		function desmarcarDestacados(){
			destacados.each(function(){
				$(this).removeClass('activo');
			});
			return;
		};
		function marcarDestacadoActivo(){
			$(destacados[options.destacadoActivo]).addClass(options.cssDestacadoActivo);
			return;
		};		
		function cambioDestacado(){
			desmarcarDestacados();
			desmarcarEnlacesPaginador();
			marcarDestacadoActivo();
			marcarEnlacePaginador();
			cambiarDestacadoGrande();
		};
		function setEvents(){
			var cuerpoDestacado;
			$('.cuerpo', destacados).bind('click', function(e){
				options.destacadoActivo = $(this).attr('rel');
				cambioDestacado();
			});
			$(destacados).hover(
				function(){
					cuerpoDestacado = $('.cuerpo', this);
					cuerpoDestacado.addClass('over');
				},
				function(){
					cuerpoDestacado.removeClass('over');
				}
			);
		}
	};
})(jQuery);
