/*
* Cada modulo que utilice este script debe definir antes
*
*  ind              -> indice del array de fotos inicial
*  modulo           -> modulo para el que se visualizan las fotos. Por defecto, fotogaleria.
*  photos           -> array de fotos. cada item se rellena con el path web de la foto.
*  desc_photos      -> array de descripciones de las fotos
*  thumbs_por_pag   -> numero de 'thumbs' a mostrar en cada bloque de navegacion/paginacion. 
                       Por defecto, son 21.
*  tiempo_foto 		-> intervalo de tiempo en milisegundos entre foto y foto
*/
//switch de preload
//var preload = true;
//coleccion de fotos ampliadas
//var photos_diap=new Array(); 
/*for(x=0;x<photos.length;x++) {
	photos_diap[x]=new Image();
	photos_diap[x].src=photos[x];
}*/
//numero de fotos del alojamiento
var nr_photos;

if (photos == undefined)
	nr_photos = 0;
else 
	nr_photos=photos.length;

//controla el timing fijado para cada foto
var intervalId=-1; 

//switch que controla si hay que comenzar con una foto distinta a la inicial
var withPhoto=false; 

//switch que controla si se ha iniciado la reproduccion de las fotos
var diap_run; 

//contador de thumbs en la pagina en curso
var cont_thumbs = 0; 

//numero de paginas totales con fotos
var num_pags=0; 

//pagina actual
var pag_act = 1; 

//control fotos ultima pagina
var resto=0; 

//Ultima operacion realizada por el usuario. 
//Puede ser: next (siguiente foto), prev (foto anterior), view (reproduccion
//automatica) y displayThumb (visualizacion thumb particular)
var last_operation="view"; 

//numero de thumbs en la ultima pagina
var num_th_last_pag; 

//Parametros url. Si se enlaza desde la ficha, puede ser que tengamos
//en la url el identificador inicial.
var parametros = document.URL.split("?")[1];

//num orden de la foto a visualizar pasado como parametro GET
var idFirstPhoto;

//numero de orden de la foto inicial con la que se entra en la fotogaleria
if (parametros != undefined && parametros != "") {
	idFirstPhoto = parametros.split("ph_ord=")[1];
	if (idFirstPhoto!=undefined && idFirstPhoto != "") {
		idFirstPhoto = idFirstPhoto.split("&")[0];
		withPhoto=true;
	}
}

//Sw para ejecutar en seguida la carga de fotos
var carga_pagina=true;
var paginacionCallbacks = new Array();
paginacionCallbacks.registrar = registrarPaginacionCallbacks;
paginacionCallbacks.ejecutar = ejecutarCallbacks;
rules_visor = {
	init: function(){
		//reg. paginacion
		paginacionCallbacks.registrar(registrarPaginacion);
		registrarPaginacion();
		if (modulo==undefined || modulo=="") 
   			modulo = "fotogaleria";//fotogaleria casas rurales
   			
		if (thumbs_por_pag==undefined || thumbs_por_pag==0) 
   			thumbs_por_pag = 21;//fotogaleria casas rurales

		if (nr_photos <= thumbs_por_pag) {
			num_pags=1;
		}
		else {		
			resto = nr_photos % thumbs_por_pag;
			if (resto==0)
				num_th_last_pag = thumbs_por_pag;
			else
				num_th_last_pag = resto;
    		num_pags=Math.ceil(nr_photos/thumbs_por_pag);
		}
		if (nr_photos > 0) {
			rules_visor.eventos_thumbs();
        	//Registra los eventos para la paginacion
        	paginacionCallbacks.registrar(rules_visor.eventos_thumbs); 		
		 	rules_visor.startDiapos();
		 	$("#photo_prev").click(rules_visor.prevPhoto);
        	$("#photo_next").click(rules_visor.nextPhoto); 		
        	$("a#photo_click").click(rules_visor.nextPhoto); 		
        	$("#play_photos").click(rules_visor.startDiapos); 		
        	$("#stop_photos").click(rules_visor.stopDiapos); 		
		}
    },
    eventos_thumbs: function() {
        $("a.thumb_click").click(rules_visor.displayThumb); 		
    },

	/*
	* Inicia el 'timer' que reproduce las fotos
	*/
	
    startDiapos: function() {    
    	if (carga_pagina) {
	        rules_visor.viewPhotos();
	        carga_pagina=false;
	    }
        if (tiempo_foto==0 || tiempo_foto==undefined) tiempo_foto=3500;
  		intervalId=setInterval("rules_visor.viewPhotos()",tiempo_foto);
  		if (!diap_run && diap_run!=undefined) {
  			$("#photo").css("display","none");
  			$("#men_diap").css("display","block");
  		}
  		diap_run=true;
	},
	
	/*
	* Para el 'timer' que reproduce las fotos
	*/
	stopDiapos: function() {
  		if (intervalId == -1) return;
  		if (diap_run) ind--;
  		diap_run=false;
  		clearInterval(intervalId);
	},
	
	/*
	* Marca el thumb actual y visualiza su foto ampliada y descripcion
	*/
	viewPhotos: function() {
		var photo_new="";
		var desc_new="";
		var cv=0;
		var ini;
		var alt_title="";

  		if (diap_run) {
  			$("#men_diap").css("display","none");
  			$("#photo").css("display","block");
  		}
  		
		if (withPhoto) {
			rules_visor.initialPhoto();
			cont_thumbs--;//para que se adecue a la secuencia normal			
		}
		else {

			if (ind >= nr_photos || ind < 0) ind=0;
			
	   		//Señala el thumb activo
			rules_visor.selectThumb();
			
			if (last_operation=="view")
				cont_thumbs++;
	
	       	//Control navegacion bloques 'thumb'
	       	rules_visor.controlNav();
	       	
	       	//Actualiza contador superior de fotos
			cv = parseInt(ind) + 1;
			$("#cuenta_visor").html(cv + " de " + nr_photos + " fotos");
			
			//Cambio foto
			photo_new = photos[ind];
	       	$("#photo_amp").attr("src",photo_new);
	       	
	       	//Cambio descripcion foto
	       	desc_new = desc_photos[ind];
	       	$("#photo_desc").html(desc_new);
	       	
	       	//Alt y Title
	       	var pos_w = desc_new.indexOf("<p ");
	       	if (pos_w == -1)
	       		alt_title = desc_new;
	       	else
	       		alt_title = desc_new.substring(0,pos_w);
	       	$("#photo_amp").attr("alt",alt_title);
	       	$("#photo_amp").attr("title",alt_title);
	       	       	
	  		ind++;
	  		last_operation="view";
	  		
  		}
	},
	
	/*
	* Posiciona la fotogaleria en funcion de la foto pulsada por el usuario
	*/
	initialPhoto: function() {
		var current_thumb;
		var th_inicio_pag;
		
		withPhoto=false;
		current_thumb = parseInt(idFirstPhoto);
		ind = current_thumb - 1;

		if (num_pags==1 || current_thumb <= thumbs_por_pag) {
			cont_thumbs=current_thumb;
			//Señala el thumb activo
			rules_visor.selectThumb();
			return;
		}
		
		//Si la foto pasada por parametro es de otra pagina que no sea la 
		//primera, calculamos la pagina a la que corresponde y el valor 
		//del thumb actual
		rules_visor.calCurrentPage(current_thumb);
		
		th_inicio_pag = (pag_act - 1) * thumbs_por_pag;	
		cont_thumbs = current_thumb - th_inicio_pag;

	},
	/*
	* Calcula el valor de la pagina actual en funcion del 'thumb' seleccionado 
	*/
	calCurrentPage: function(current_thumb) {
		var a = parseInt(current_thumb) - parseInt(thumbs_por_pag);

		if (a <= 0)
			pag_act = 1;
		else if (a >= 1 && a <= thumbs_por_pag)
			pag_act = 2;
		else
			pag_act = Math.ceil(current_thumb/thumbs_por_pag);

	},
	
	/* 
	* Avanza manualmente a la siguiente foto. Si es necesario,
	* muestra el siguiente bloque de 'thumbs' en la funcion controlNav
	*/
    nextPhoto: function() {
    	var cv;
    	var num_th_current_pag;
    	var current_thumb;
    	
    	if (diap_run) rules_visor.stopDiapos(); 	
    	ind++;

       	if (ind >= nr_photos) ind = 0; 
       	
       	//Señala el thumb activo
		rules_visor.selectThumb();
		
		last_operation="next";
       	cont_thumbs++;       	
       	
       	//Control navegacion bloques 'thumb'
       	/*num_th_current_pag = rules_visor.getNrThumbsPag();
       	if (pag_act >= num_pags)
       		current_thumb = cont_thumbs - num_th_current_pag;
       	else
       		current_thumb = cont_thumbs - num_th_current_pag;

 		if (cont_thumbs > num_th_current_pag) {
 			pag_act++;
 			if (pag_act > num_pags) pag_act=1;
 			nextBlockThumbs(modulo,pag_act,ind);
 		}*/
 		rules_visor.controlNav();

       	
       	//Actualiza contador superior de fotos
		cv = parseInt(ind) + 1;
		$("#cuenta_visor").html(cv + " de " + nr_photos + " fotos");
		
		//Visualiza foto ampliada y descripcion foto
       	rules_visor.displayPhoto();
	},
	
	/* 
	* Retrocede manualmente a la foto anterior. Si es necesario,
	* muestra el siguiente bloque de 'thumbs' en la funcion controlNav
	*/
	prevPhoto: function() {
    	var cv=0;
    	
    	if (diap_run) rules_visor.stopDiapos();
       	ind--;

       	if (ind < 0) ind = nr_photos -1; 
       	
       	//Señala el thumb activo
		rules_visor.selectThumb();

		last_operation="prev";
		cont_thumbs--;
		
       	//Control navegacion bloques 'thumb'
       	/*if (cont_thumbs < 1) {
       		if (pag_act==1) pag_act = num_pags;
       		else pag_act--;
       		nextBlockThumbs(modulo,pag_act,ind);
       	}*/
       	rules_visor.controlNav();
       			
		//Actualiza contador superior de fotos
		cv = parseInt(ind) + 1;
		$("#cuenta_visor").html(cv + " de " + nr_photos + " fotos"); 
		
		//Visualizar foto
       	rules_visor.displayPhoto();
	},
	/* 
	* Visualiza la foto ampliada y su descripcion
	*/

	displayPhoto: function() {
    	var photo_new="";
    	var path_photo_new="";
    	var desc_new="";
    	var alt_title="";
    	
    	//Visualiza foto ampliada y descripcion de la foto
       	photo_new = photos[ind];
      	$("#photo_amp").attr("src",photo_new);
       	desc_new = desc_photos[ind];
       	$("#photo_desc").html(desc_new);
       	
       	//Alt y Title
       	var pos_w = desc_new.indexOf("<p ");
       	if (pos_w == -1)
       		alt_title = desc_new;
       	else
       		alt_title = desc_new.substring(0,pos_w);
       	$("#photo_amp").attr("alt",alt_title);
       	$("#photo_amp").attr("title",alt_title);

       	
	},
	/* 
	* Permite visualizar la foto ampliada del 'thumb' donde se ha hecho 'click'
	*/

	displayThumb: function() {
    	var url_thumb;
    	var desc_new="";
    	var cv=0;
    	var alt_title="";
    	
    	if (diap_run) rules_visor.stopDiapos();
    	url_thumb = photos[this.id];
    	ind = this.id;
    	
    	//Actualizar contador de thumbs
		rules_visor.UpdateContThumbs();
		
    	//Señala el thumb activo
		rules_visor.selectThumb();
		
		last_operation="displayThumb";
		
		//Actualiza contador superior de fotos
		cv=parseInt(ind) + 1;
		$("#cuenta_visor").html(cv + " de " + nr_photos + " fotos");
		
		//Visualiza foto ampliada y descripcion de la foto
    	$("#photo_amp").attr("src",url_thumb);
    	desc_new = desc_photos[ind];
       	$("#photo_desc").html(desc_new);
       	
       	//Alt y Title
       	var pos_w = desc_new.indexOf("<p ");
       	if (pos_w == -1)
       		alt_title = desc_new;
       	else
       		alt_title = desc_new.substring(0,pos_w);
       	$("#photo_amp").attr("alt",alt_title);
       	$("#photo_amp").attr("title",alt_title);

   	},
   	/*
   	* Fija el thumb actual que se visualiza mediante un borde de color
   	*/
	selectThumb: function() {
       	$("a.thumb_click > img").removeClass("highlight");
       	$("#"+ind+" > img").addClass("highlight");

	},
	/* 
	* Controla la visualizacion del bloque 'thumb'
	*/

	controlNav: function() {
		var num_th_current_pag;
		var debug=false;

       	//Control prev foto
		if (cont_thumbs <= 0) {
			if (pag_act == 1)
				cont_thumbs = num_th_last_pag;
			else
				cont_thumbs = thumbs_por_pag;
			pag_act--;
			if (pag_act <= 0) {
				pag_act=num_pags;
			}

			rules_visor.getBlockThumbs();
		}

   		num_th_current_pag = rules_visor.getNrThumbsPag();
   		
		if (debug) {
			window.status = "ind = " + ind + " . cont_thumbs = " + cont_thumbs +
				" de " + num_th_current_pag + " thumbs en esta pagina. Pagina " + 
				pag_act + " de " + num_pags + ". thumbs ultima pagina " + 
				num_th_last_pag;
		}
			
		//Control cambio bloque de 'thumbs'
		if (num_pags > 1) {
			if (cont_thumbs > num_th_current_pag) {
				pag_act++;

				if (pag_act > num_pags) 
					pag_act=1;
					
				cont_thumbs = 1;
				if (debug) {
					window.status = "CAMBIO de THUMBS , pag="+pag_act+ " y cont_thumbs="+cont_thumbs;
				}
				rules_visor.getBlockThumbs();
			}
		}

	},
	/* 
	* Recuera el numero de thumbs de la pagina actual
	*/
	getNrThumbsPag: function() {
		
		if (num_pags > 1) {
			if (pag_act == num_pags) {
				return num_th_last_pag;
			}
			else {
				return thumbs_por_pag;
			}			
		}
		else {
			return nr_photos;
		}
		
	},
	/* 
	* Presenta el siguiente bloque de thumbs
	*/
	getBlockThumbs: function() {

		var enlace = $("a.aP").attr("href");
		
		var parametros = enlace.split("?")[1];
		var container = parametros.split("container=")[1];
		container = container.split("&")[0];
		
		var np = parametros.split("np=")[1];
		np = np.split("&")[0];
				
		var output = parametros.split("modulo=")[1];
		output = output.split("&")[0];

		if (modulo=="fotogaleria") {
			var id_aloj = parametros.split("id=")[1];
			id_aloj = id_aloj.split("&")[0];
		
			parametros="container="+container+"&page="+pag_act+"&np="+np+
				   "&id="+id_aloj+"&view=thumbs&current_thumb="+ind;

		}
		else if (modulo=="poblacion") {
			var nr_provincia = parametros.split("nr_provincia=")[1];
			var nr_pob = parametros.split("nr_pob=")[1];
	
			parametros="container="+container+"&view=thumbs_poblacion&current_thumb="+ind+
				"&page="+pag_act+"&np="+np+"&nr_provincia="+nr_provincia+"&nr_pob="+nr_pob;
		}		
			
		var aP = "modulo="+output+"&params="+escape(parametros);
		
		// ponemos en "container" lo que devuelve la ejecución de la página "url"
		fin = function(html){
			$("#"+container).html(html);
			$("#"+container).each(paginacionCallbacks.ejecutar);
		}
		$.ajax({ url: "/modulo/index.php",data: aP, success: fin });
	},

	/* 
	* Actualiza el contador de 'thumbs' cuando se hace click sobre uno de ellos
	*/

	UpdateContThumbs: function() {
		//regularizacion del contador de thumbs de cada bloque de navegacion
    	var cv=0;
    	var inicio=0;
    	
		cv=parseInt(ind) + 1;
		if (pag_act==1) {
			cont_thumbs = cv;
		}
		else {
			//recuperamos el valor de ind del bloque de navegacion
			inicio = (pag_act - 1) * thumbs_por_pag;	
			cont_thumbs = cv - inicio;
		}
   	}	
}
$(document).ready(rules_visor.init);

function registrarPaginacion (){
	$("a.aP").click(function(){
		var parametros = this.href.split("?")[1];
		var container = parametros.split("container=")[1];
		container = container.split("&")[0];

		var page = parametros.split("page=")[1];
		page = page.split("&")[0];

		var modulo = parametros.split("modulo=")[1];
		modulo = modulo.split("&")[0];
		var aP = "modulo="+modulo+"&params="+escape(parametros);

		// ponemos en "container" lo que devuelve la ejecución de la página "url"
		fin = function(html){
			//validarErr(html);
			$("#"+container).html(html);
			$("#"+container).each(paginacionCallbacks.ejecutar);
			ind = (page - 1) * thumbs_por_pag;
			rules_visor.calCurrentPage(ind+1);
			cont_thumbs = 1;
			last_operation="enlace_paginacion";
		}
		$.ajax({ url: "/modulo/index.php",data: aP, success: fin });
		return false;
	});
}
function registrarPaginacionCallbacks(callback){
    var i;
    for (i=0;i<paginacionCallbacks.length;i++){
        if (callback == paginacionCallbacks[i])
            break;
    }
    if (i == paginacionCallbacks.length)
        paginacionCallbacks[paginacionCallbacks.length] = callback;
}
function ejecutarCallbacks(){
    for (var i=0;i<paginacionCallbacks.length;i++){
        paginacionCallbacks[i]();
    }
}
