// ==============================================================================================================================
// WXCOBERTURA
//
// ATENÇÃO: PARA USAR DUAS GALERIAS NA MESMA PAGINA DEVE SER DESATIVADO O TECLADO, OU NAO FUNCIONARÁ
//
// ==============================================================================================================================

var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";

function encode64(input) {
   var output = "";
   var chr1, chr2, chr3;
   var enc1, enc2, enc3, enc4;
   var i = 0;

   do {
      chr1 = input.charCodeAt(i++);
      chr2 = input.charCodeAt(i++);
      chr3 = input.charCodeAt(i++);

      enc1 = chr1 >> 2;
      enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
      enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
      enc4 = chr3 & 63;

      if (isNaN(chr2)) {
         enc3 = enc4 = 64;
      } else if (isNaN(chr3)) {
         enc4 = 64;
      }

      output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) + 
         keyStr.charAt(enc3) + keyStr.charAt(enc4);
   } while (i < input.length);
   
   return output;
}

function decode64(input) {
   var output = "";
   var chr1, chr2, chr3;
   var enc1, enc2, enc3, enc4;
   var i = 0;

   // remove all characters that are not A-Z, a-z, 0-9, +, /, or =
   input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");

   do {
      enc1 = keyStr.indexOf(input.charAt(i++));
      enc2 = keyStr.indexOf(input.charAt(i++));
      enc3 = keyStr.indexOf(input.charAt(i++));
      enc4 = keyStr.indexOf(input.charAt(i++));

      chr1 = (enc1 << 2) | (enc2 >> 4);
      chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
      chr3 = ((enc3 & 3) << 6) | enc4;

      output = output + String.fromCharCode(chr1);

      if (enc3 != 64) {
         output = output + String.fromCharCode(chr2);
      }
      if (enc4 != 64) {
         output = output + String.fromCharCode(chr3);
      }
   } while (i < input.length);

   return output;
}


function wxcobertura(ajax, div, cobertura, cliente){

	if (cliente == null) {
		cliente = "null";
	}
	
	var obj = this;
	this.ajax = ajax;
	this.div = div;
	this.extra = {};
	
	// Variaveis do Sistema de Tabela
	this.pagina = 1;
	this.foto = 0;
	this.foto_inicial = 0;
	this.num_fotos = 0;
	this.num_paginas = 0;
	this.tam_pagina = 0;	
	
	this.cobertura = cobertura;
	this.cliente = cliente;
	this.dir = '';
	this.image_url = new Array();// Lista de fotos para Preload	
	this.image_cod = new Array();// Lista de codigos das fotos
	this.image_full = new Array();// Lista das fotos grandes	
	this.image_name = new Array();// Lista dos nomes de arquivos das fotos
	this.desc_foto = new Array();// Lista dos nomes de arquivos das fotos
	
	this.teclado = true;
	
	// ==================================
	// Inicializa
	// ==================================
	this.init = function(){
		
		// Carrega imagem de loading
		if (document.images){				
			preload_image_object = new Image();
			preload_image_object.src = "images/wait.gif";
		}

		//Obtém estrutura inicial
		$.ajaxSetup({async: false, cache: false});
		// Requisição ajax
		var arg = this.extra;
		arg.acao = 'init';
		arg.cobertura = this.cobertura;
		arg.cliente = this.cliente;
		arg.pagina = this.pagina;
		xml = $.post(this.ajax, arg).responseText;

		var objxml = new Parsing(xml);		
		var erro = objxml.GetAttr("erro");

		// ------------------------------
		// SE OK
		// ------------------------------				
		if (!erro){			
			$('#' + this.div).html(objxml.GetAttr("html"));	
			
			this.dir = objxml.GetAttr("dir");
			this.tam_pagina = objxml.GetAttr("tampagina");
			
			obj.getPagina();
			
			// ---------- HABILITA LIGHT BOX ---------------------
			$("#" + this.div + "  #fotup-vermaior a").lightBox();			
	
		}

		
	};
	// ==================================
	// GET PAGINA de FOTOS
	// ==================================	
	this.getPagina = function(){
		
		//Obtém estrutura inicial
		$.ajaxSetup({async: false, cache: false});
		// Requisição ajax
		var arg = this.extra;
		arg.acao = 'getpagina';
		arg.cobertura = this.cobertura;
		arg.cliente = this.cliente;
		arg.pagina = this.pagina;
		var xml = $.post(this.ajax, arg).responseText;		
		//alert(xml);
		
		var objxml = new Parsing(xml);		
		// ------------------------------
		// SE OK
		// ------------------------------				
		
		var erro = objxml.GetAttr("erro");	
		
		// ------------------------------
		// SE OK
		// ------------------------------				
		if (!erro){		
		
			var elementos = objxml.GetNodo("foto");		// Lista de fotos XML			
			var html_miniatura = '';					// lista de miniaturas
	

			for (var i = 0; i < elementos.length; i++){
				elemento = new XmlDoc(elementos[i]);
				this.image_url[i] = this.dir + elemento.GetAttr("media");
				this.image_cod[i] = elemento.GetAttr("idfoto");			
				this.image_full[i] = this.dir + elemento.GetAttr("grande");
				this.image_name[i] = elemento.GetAttr("grande");
				this.desc_foto[i] = elemento.GetAttr("desc_foto"); // XXX: TESTE
				
				imagemin_url = this.dir + elemento.GetAttr("miniatura");
				html_miniatura += "<div class='miniatura' idfoto='" + elemento.GetAttr("idfoto") + "' link='" + i + "' ><div id='minsel-" + i + "' class='miniatura-sel'><img src='" + imagemin_url + "' /></div></div>\n";


			}

			// ==================================================================
			// PRELOAD DE IMAGEM
			// ==================================================================			
//			if (document.images)
//			{				
//				preload_image_object = new Image();				

//				for(var j=0; j < elementos.length; j++){
//					alert(this.image_url[j]);
//					preload_image_object.src = this.image_url[j];
//				}
//			}		
			// ==================================================================
			
			// Adiciona Menu
			$('#' + this.div + ' #menu').html(html_miniatura);
			
			// Adiciona Paginacao
			$('#' + this.div + ' #paginacao').html(objxml.GetAttr("paginacao"));

			// Adiciona Titulo
			$('#' + this.div + ' #titulo').html(objxml.GetAttr("titulocobertura"));
			
			// Adiciona Lista de Cobertura
			$('#' + this.div + ' #coberturas').html(objxml.GetAttr("htmlcobertura"));
			
			// Adiciona Descrição da cobertura
			// Não adiciona mais, mwhahahahahhahaha!
			// $('#' + this.div + ' #descricao').html(objxml.GetAttr("descricaocobertura"));			

			// Configura total de fotos nesta pagina
			obj.num_fotos = objxml.GetAttr("numfotos");
			// Configura total de paginas
			obj.num_paginas = objxml.GetAttr("numpaginas");

			// Seta a foto inicial
			img = obj.image_url[obj.foto_inicial];	
			cod = obj.image_cod[obj.foto_inicial];	
			full = obj.image_full[obj.foto_inicial];
			desc_foto = obj.desc_foto[obj.foto_inicial]; // XXX: TESTE

			obj.foto = obj.foto_inicial;
			// Seta caminho da foto (seleciona foto)
			$("#" + obj.div + " #foto img").attr("src",  "images/wait.gif");
			objtemp2 = obj.div;
			
			setTimeout('$("#" + objtemp2 + " #foto img").attr("src",  img)', 100);
			// Seta Código da imagem				
			$('#' + obj.div + ' #fotup-codigo').html('#' + cod);
			// Seta informação para Lightbox
			$('#' + obj.div + ' #fotup-vermaior a').attr("href", full);
			
			$('#' + obj.div + ' .miniatura div').removeClass().addClass("miniatura-sel");
			$('#' + obj.div + ' #minsel-' + obj.foto_inicial).removeClass().addClass("miniatura-sel-alpha");

			$('#' + obj.div + ' #descricao-foto').html(desc_foto); // XXX: TESTE

			this.verificaBotoes();
			// =======================================================================================
			
			// Registra eventos
			this.registraEventos();
		
		}		
	}	

	// ==================================
	// TROCA COBERTURA
	// ==================================
	this.trocaCobertura = function(cobertura){

		obj.bloqueiaEventos();	

		// Variaveis do Sistema de Tabela
		obj.pagina = 1;
		obj.foto = 0;
		obj.foto_inicial = 0;
		obj.num_fotos = 0;
		obj.num_paginas = 0;		
		obj.cobertura = cobertura;		
		

		obj.getPagina();
		
	}

	// ==================================
	// ANTERIOR
	// ==================================
	this.anterior = function(){
			
		if (obj.foto == 0){
			if (obj.pagina > 1){
				obj.pagina--;
				obj.foto_inicial = obj.tam_pagina - 1;
				obj.bloqueiaEventos();
				obj.getPagina();
			}
		}else{			
			obj.foto--;
			obj.trocaFoto();
		}
	}
	// ==================================
	// POSTERIOR
	// ==================================	
	this.posterior = function(){			
		if (obj.foto >= obj.num_fotos - 1){
			if (obj.pagina < obj.num_paginas){
				obj.pagina++;
				obj.foto_inicial = 0;
				obj.bloqueiaEventos();
				obj.getPagina();
			}
		}else{			
			obj.foto++;
			obj.trocaFoto();			
		}			

	}

	// ==================================
	// TROCA FOTO
	// ==================================		
	this.trocaFoto = function(){
		
		img = obj.image_url[obj.foto];
		cod = obj.image_cod[obj.foto];
		full = obj.image_full[obj.foto];
		desc_foto = obj.desc_foto[obj.foto]; // XXX: TESTE

		// Seta caminho da foto (seleciona foto)
		$("#" + obj.div + " #foto img").attr("src",  "images/wait.gif");		
		objtemp = obj.div;
		setTimeout('$("#" + objtemp + " #foto img").attr("src",  img)', 100);
		
		// Seta Código da imagem
		$('#' + obj.div + ' #fotup-codigo').html('#' + cod);
		// Seta informação para Lightbox
		$('#' + obj.div + ' #fotup-vermaior a').attr("href", full);				

		// Desabilita ou Habilita botoes ant/prox ====================================			
		obj.verificaBotoes();
	
		// Altera classe
		$('#' + obj.div + ' .miniatura div').removeClass().addClass("miniatura-sel");
		$('#' + obj.div + ' #minsel-' + obj.foto).removeClass().addClass("miniatura-sel-alpha");

		$('#' + obj.div + ' #descricao-foto').html(desc_foto); // XXX: TESTE
	}
	
	// ==================================
	// VERIFICA BOTÕES
	// ==================================
	this.verificaBotoes = function(){		
		// ===========================================================================		
			posterior = $("#" + obj.div + " #fotup-proximo");			
			if (obj.foto == obj.num_fotos - 1 && obj.pagina == obj.num_paginas)
				posterior.removeClass().addClass("fotup-proximo-alpha");
			else 
				posterior.removeClass().addClass("fotup-proximo");
			
			anterior = $("#" + obj.div + " #fotup-anterior");	
			if (obj.foto == 0 && obj.pagina == 1) 
				anterior.removeClass().addClass("fotup-anterior-alpha");
			else 
				anterior.removeClass().addClass("fotup-anterior");				
		// ===========================================================================						
	}
	// ==================================
	// REGISTRA EVENTOS
	// ==================================
	this.registraEventos = function(){			
		
		// ----------- Seleciona Foto ---------------------------------		
		$("#" + this.div + " .miniatura").bind('click', function(){			
			
			obj.foto = $(this).attr('link');
			obj.trocaFoto();			

		});
		
		// ----------- TECLAS UNIVERSAIS ---------------------------------	
		if (obj.teclado){
			$("html").bind("keydown",function(e){		   
				var tecla = (e.which) ? e.which : e.keyCode;			
				// Anterior
				if (tecla == 37)
					obj.anterior();
				// Posterior
				if (tecla == 39)
					obj.posterior();				
				
			});	
		}
		$("#" + this.div + " #fotup-anterior").bind('click', this.anterior);
		// ----------- Foto Posterior ---------------------------------		
		$("#" + this.div + " #fotup-proximo").bind('click', this.posterior);
		
		// ----------- Troca pagina ---------------------------------		
		$("#" + this.div + " .pag-marcadores").bind('click', function(){	
			obj.bloqueiaEventos();
			obj.pagina = $(this).attr('pag');
			obj.foto_inicial = 0;			
			obj.getPagina();
		});				
		// -------------- TROCA DE COBERTURA ----------------------------------
		$("#" + this.div + " #fotup-select").bind('change', function(){	
			obj.trocaCobertura($(this).attr('value'));
		});				
	}
	// ==================================
	// Bloqueia Eventos
	// ==================================
	this.bloqueiaEventos = function(){
		$("#" + this.div + " .miniatura").unbind();
		$("#" + this.div + " .pag-lista").unbind();
		
		$("#" + this.div + " #fotup-anterior").unbind();
		$("#" + this.div + " #fotup-proximo").unbind();
		
		$("#" + this.div + " #fotup-select").unbind();
		
		if (obj.teclado)
			$("html").unbind();
	}
}

