
// Intro img batch loading plugin
var myBulk=0;
(function($){
	$.fn.loadImage = function(options){
		var defaults = {
			src: "none",
			bulk: 1,
			onLoadFinish: null
		};
		var options = $.extend(defaults, options);
		return this.each(function(){
			var me = this;	
			var img = new Image();
			$(img).attr("src",options.src).load(function(){
				myBulk++;
				if (myBulk == options.bulk) {
					if (options.onLoadFinish) { options.onLoadFinish(me); }
					myBulk = 0;
				}
			
			}).appendTo(this);
		});
	};
})(jQuery);



jQuery(function(){	
	$(window).load(function(){
		// show navi after font-loading
		//$("#navigation a, #idiomas a").css("line-height","13px");
		$(".entry").css("visibility","visible");
		
	});
	
	if($(".home").length){
		$("#content").css("opacity",0.85);
	} else {
		$("#content").css("background-color","transparent");
		$("#bgimage").css("opacity",0.15);	
	}
	
	var windowHeight = $(window).height();
	// ! RESIZE home
	$("#bgimage").css("overflow","hidden");
	function initWindowSize() {
		windowHeight = $(window).height();
		var postHeight = $(".post").height()+240;
		if (windowHeight < postHeight ) {
			$("#bgimage").css({	height: postHeight });
		} else {
			$("#bgimage").css({ height: windowHeight });
		}

	}
	$(window).resize(function(){ initWindowSize(); });
	initWindowSize();
	
	// ! Hilighting columns

	$(".column").mouseenter(function(){
		var thisImage = $(this).find(".image img");
		var thisColumn = $(this);
		
		thisImage.animate({ opacity: 1 },500);
		thisColumn.addClass("hover");
		$(".column .image img").not(thisImage).dequeue().animate({ opacity: 0.3 },500);
		$(".column").not(thisColumn).removeClass("hover");
	}).mouseleave(function(){
		$(".column .image img").dequeue().animate({ opacity: 1 },500);
		$(".column").removeClass("hover");
		
	});

	// ! Datepicker & Booked days
	var bookedDays = [[2,3,2010],[2,4,2010]];
	
	var inputArrive = $("#booking_date_arrive,#custom1");
	var inputLeave = $("#booking_date_leave,#custom2");
	
	if (inputArrive.length){
		inputArrive.datepicker({
			showOn: "both",
			numberOfMonths: 3,
	        minDate: new Date(),
	        dateFormat: "mm/dd/yy",
	        firstDay: 1,
	        onClose: function(dateText, inst) {
	        	var dateArray = dateText.split('/');
	        	var day = parseInt(dateArray[1]);
	        	var month = parseInt(dateArray[0]);
	        	var year = parseInt(dateArray[2]);
	        	if(month == 1){
	        		month = 11;
	        	} else {
	        		month = month-1;
	        	}
	        	// dd/mm/yyyy
	        	var prevDate = new Date();
				prevDate.setFullYear(year,month,day);
	  			var nextDay = new Date(prevDate.setDate(prevDate.getDate()+1));
	        	
	        	day = nextDay.getDate();
				month = nextDay.getMonth()+1;
				year = nextDay.getFullYear();
				
				day	= ((day < 10) ? "0" : "") + day;
				month = ((month < 10) ? "0" : "") + month;
				
				dateText = month+"/"+day+"/"+year;
	
	        	inputLeave.attr("value",dateText);
	        }
		});
		inputLeave.datepicker({
			showOn: "both",
			numberOfMonths: 3,
	        minDate: new Date(),
	        dateFormat: "mm/dd/yy",
	        firstDay: 1
		});
	}
	// ! Pagegallery image pick
	$(".pagegallery .list a").click(function(){
		var href = $(this).attr("href");
		var $detailImgWrapper = $(".pagegallery .detail .image");
		var $actualImg = $detailImgWrapper.find("img");
		$detailImgWrapper.loadImage({
			 src: href,
			 onLoadFinish : function() {
			 	$actualImg.remove();			 	
			 }
		 });
		return false;
	});
	
	
	
	/* From stack overflow 
	var d         = new Date();
	var natDays   = [[1,1,2009],[1,1,2010],[12,31,2010],[1,19,2009]];
	
	function nationalDays(date) {
		var m = date.getMonth();
		var d = date.getDate();
		var y = date.getFullYear();
		
		for (i = 0; i < natDays.length; i++) {
		  if ((m == natDays[i][0] - 1) && (d == natDays[i][1]) && (y == natDays[i][2]))
		  {
		    return [false];
		  }
		}
		return [true];
	}
	function noWeekendsOrHolidays(date) {
		var noWeekend = $.datepicker.noWeekends(date);
		  if (noWeekend[0]) {
		    return nationalDays(date);
		  } else {
		    return noWeekend;
		}
	}
	$(function() { 
		$(".datepicker").datepicker({
		
		  minDate: new Date(d.getFullYear(), 1 - 1, 1),
		  maxDate: new Date(d.getFullYear()+1, 11, 31),
		
		  hideIfNoPrevNext: true,
		  beforeShowDay: noWeekendsOrHolidays,
		 });
	});
	*/
	// ! CABECERA PASARELLA ---------------------------------------------------------------------------------

	var galeriaCounter = 0;
	var imagenesCabeceraPaquetes = new Array();
	var paquetesAmount;
	var intervalID;
	var isRunning = true;
	var paqPorCargar = 0;
	var cargarEnPaquetesDe = 4;
//	var frecuenciaFotoPreferente = 2;
	var speedImageTransition = 1000;
	var speedImageMove = 10000;
	var speedNewImage = 8000;
	
	var galleryWrapperTag ="#bgimage ul";
	var imgListWrapperTag = "ul";
	var imgWrapperTag = "li";
	
	var postHeight = $(".post").height();

	var $galleryWrapper = $(galleryWrapperTag);
	
	var galeriaCabeceraSwitch = function() {
		//console.log(galeriaCounter);
		var $active = $galleryWrapper.find(imgWrapperTag+".active"); 
	    if ( $active.length == 0 ) $active =  $galleryWrapper.find(imgWrapperTag+":first");
		
	    var $next =  $active.next().length ? $active.next() : $galleryWrapper.find(imgWrapperTag+":first");
	    galeriaCounter++;

	    $active.addClass('last-active');
	    var nextHeight = $next.height();
	    
	    var topDiff = 0;
	    
	    if (nextHeight > windowHeight) {
	    	topDiff = nextHeight-windowHeight+postHeight;
	    }
	    
	    $next.css({ opacity: 0, top:-topDiff}).addClass('active').animate({ opacity: 1,  }, speedImageTransition, function() { 
	    	$active.removeClass('active last-active'); 
	    }).dequeue().animate({ top: 0 }, speedImageMove,'linear' );
	    
	    //console.log("galeriaCounter: "+galeriaCounter);
	    //console.log("paqPorCargar: "+paqPorCargar);
	    if (galeriaCounter == ((cargarEnPaquetesDe*paqPorCargar)-2) && paqPorCargar < paquetesAmount) {
	    	//console.log("nuevo paquete");
	    	//galeriaCounter = 0;
	    	cargaAleatEnPaq();
	    }
	}
	
	var startIntervall = function() {
		if (isRunning){
			//galeriaCabeceraSwitch(speedNewImage);
			intervalID = window.setInterval(galeriaCabeceraSwitch, speedNewImage);
		}
	}
	
	var startIntervallOnlyOnce =  true;
	var cargaAleatEnPaq = function() {
		//console.log("paqPorCargar: "+paqPorCargar);
		var checkIfSpan = $galleryWrapper.find(imgWrapperTag).length;
		//console.log("checkIfSpan: "+checkIfSpan);
		//console.log("imagenesCabeceraPaquetes[paqPorCargar].length: "+imagenesCabeceraPaquetes[paqPorCargar].length);
		for(var i=0; i < imagenesCabeceraPaquetes[paqPorCargar].length; i++) {
			if (i==0 && checkIfSpan==0 ) {
				 $galleryWrapper.append("<"+imgWrapperTag+" class='active'></"+imgWrapperTag+">");
			} else {
				 $galleryWrapper.append("<"+imgWrapperTag+"></"+imgWrapperTag+">");
			}
			//console.log("imagenesCabeceraPaquetes[paqPorCargar][i]: "+imagenesCabeceraPaquetes[paqPorCargar][i]);
			$galleryWrapper.find(imgWrapperTag+":last").loadImage({
				 src: imagenesCabeceraPaquetes[paqPorCargar][i],
				 bulk: imagenesCabeceraPaquetes[paqPorCargar].length,
				 onLoadFinish : function() {
				 	//console.log("loaded");
				 	$galleryWrapper.addClass("activate");
				 	if (startIntervallOnlyOnce) {
				 		startIntervall();
				 		startIntervallOnlyOnce = false;
				 	}
				 }
			 });
		}
		paqPorCargar++;
	}
	function randOrd(){
		return (Math.round(Math.random())-0.5); 
	}		 
	var galeriaCabeceraInit = function() {
		
		// ! Preprocesado 1: preferentes
		// para evitar multiples <p> del editor extreamos todas las imágenes y las copiamos a un duevo div.fotowrapper
		$galleryWrapper.after("<"+imgListWrapperTag+" class='fotowrapper'></"+imgListWrapperTag+">");
		var hayPreferentes = false;
		if ( $galleryWrapper.find("img").length > 0 ) {
			hayPreferentes = true;
		}
		//console.log("hayPreferentes: "+hayPreferentes);
		if ( hayPreferentes ) {
			$galleryWrapper.find("img").each(function(){
				$galleryWrapper = $(galleryWrapperTag);
				$galleryWrapper.filter(".fotowrapper").append($(this));
			});
		}	
		// ! Borramos antiguo wrapper
		$galleryWrapper.not(".fotowrapper").remove();
		$galleryWrapper = $(galleryWrapperTag);
		// empezamos a crear siempre un span antes de cargar la imagen dentro del span con el resultado de que las imagenes se cargan en el mismo orden en que les ordenamos cargarse. 
		// Si introducíamos directamente las imágenes sucedía de que las imágenes preferentes por estar ya cargadas desde el inicio se andelantaban en cargar e introducirce
		// y aunque el orden de carga estuviese bien finalmente sucedía de que preferentes iguales estuvíesen de forma consecutiva.

		if ($galleryWrapper.find("img").length != 0 ){
			$galleryWrapper.find("img").wrap("<"+imgWrapperTag+"></"+imgWrapperTag+">");
			// Declaramos la primera imagen como active para que comience todo por esta (preferente)
			$galleryWrapper.find(imgWrapperTag).eq(0).addClass("active");
		}
		
			
		//$("#cabecera .fotopanel div img:last").addClass("ultima-preferente");
		
		// ! Preprocesado 2: preferentes
		// con esta clase creamos al orden basado en z-index y no por float (default en styles.css)
		//$("#cabecera .fotopanel div").addClass("activate");
		var imgPrefHref = new Array();
		// cojemos las urls de las imágenes preferentes para introducirlas en el Array de las aleatorias
		$galleryWrapper.find("img").each(function(i) {
			imgPrefHref[i] = $(this).attr("src");
		});
		
		// ! Preprocesado 3: preferentes a aleatorias
		// introducimos unas urls más de las fotos preferentes considerando la logitud de imagenes de Cabecera
		
//		var proportionalPushItems = Math.round(imagenesCabecera.length/frecuenciaFotoPreferente);
//		if (imgPrefHref.length > 0) {
//			for (var i=0; i<proportionalPushItems; i++) {
//				imagenesCabecera = imagenesCabecera.concat(imgPrefHref);
//			}
//			//console.log("imgPrefHref: "+imgPrefHref);
//		}
		
		
		
		// ! Preprocesado 4: aleatorias
		// ahora mezclamos las aleatorias con las nuevas preferentes introducidas en el paquete de aleatorias

		imagenesCabecera.sort(randOrd);
		//console.log("imagenesCabecera"+imagenesCabecera);
		// ! chequeamos que entre el nuevo set de aleatorias no haya dos consecutivas iguales (de las preferentes repetidas) y las quitamos del array
		var imagenAnterior;
		if ( hayPreferentes ) {
			for (var i=0; i<= imagenesCabecera.length ; i++) {
					//console.log("i: "+i);
				if (imagenAnterior == imagenesCabecera[i]) {
					//console.log(imagenesCabecera);
					//console.log(i+": imagenesCabecera: "+imagenesCabecera);
					var removed = imagenesCabecera.splice(i,1);
					//console.log("removed: "+removed);
					// Empezamos otra vez desde 0 para a	segurar que al quitar un item no se junten otras dos iguales
					i = 0;
				}
				imagenAnterior = imagenesCabecera[i];
			}
		}
		// Preprocesado 5: preferentes & aleatorias
		// Si la primera foto del set de las aleatoriasla es igual que la última de las preferentes, fuera.
		var ultimaImagenPref = $galleryWrapper.find("img:last").attr("src");
		var primeraImagenAleat = imagenesCabecera[0];
		
		if ( ultimaImagenPref == primeraImagenAleat) {
			//console.log("removed por repetirse al principio: "+primeraImagenAleat);
			imagenesCabecera.splice(0,1);
		}
		// y para rematar: si la última de las aleatorias es igual que la primera de las preferentes… que en paz descanse!
		var primeraImagenPref = $galleryWrapper.find("img:first").attr("src");
		var ultimaImagenAleat = imagenesCabecera[imagenesCabecera.length-1];
		//console.log("primeraImagenPref: "+primeraImagenPref);
		//console.log("ultimaImagenAleat: "+ultimaImagenAleat);
		if ( primeraImagenPref == ultimaImagenAleat) {
			//console.log("removed por repetirse al final: "+ultimaImagenAleat);
			imagenesCabecera.splice(imagenesCabecera[imagenesCabecera.length-1],1);
		}
		//console.log("imagenesCabecera"+imagenesCabecera);
		// Preprocesado 6: 
		// Hacemos paquetes de cargarEnPaquetesDe para disminur la carga innecesaria del servidor y mejorar el fluido de las fotos en los “descansos” de carga.

		if (imagenesCabecera.length > cargarEnPaquetesDe) {
			paquetesAmount = Math.ceil(imagenesCabecera.length/cargarEnPaquetesDe);
			//console.log("paquetesAmount: "+paquetesAmount);
			
			for (var i=0; i< paquetesAmount; i++ ) {
				imagenesCabeceraPaquetes[i] = new Array();
				for (var j=1; j <= cargarEnPaquetesDe; j++ ) {
					//
					if (imagenesCabecera[ ((i*cargarEnPaquetesDe)+j)-1 ] != undefined ) {
						//console.log( ((i*cargarEnPaquetesDe)+j)-1 );
						imagenesCabeceraPaquetes[i][j-1] =  imagenesCabecera[((i*cargarEnPaquetesDe)+j)-1 ];
					}
				}
			}
		}
		// Cargamos el 1º paquete de aleatorias
		cargaAleatEnPaq();						
	}
	
	$(window).load(function() {
		if($("body.home").length){
			if (imagenesCabecera[0] != "none" ) galeriaCabeceraInit();
		}
	});

});