// Oxigeno Legal
// Kike Valdenebro
// 2009.11.15
// Libreria basica de funciones para la dinamica de interfaz.
// Hace uso del framework "jquery-1.3.2.min.js"
// y de los plugins "jquery.flash.js" y "jquery.fancybox.js"

var isRunningIE6OrBelow = false;
var target = "";
var appendHtml = "";
var currentPage = "p_index";  // Siempre con el formato 'p_seccion_pagina'.  Para una portada de seccion 'p_seccion'.  Para el index 'p_index'.
var strHash = "";
var strPrevHash = "";
var totalPages = 0;
var loadedPages = 0;
var ready = false;
var temp01 = 0;
var temp02 = 0;
var temp03 = 0;
var tempVisorLogos = 0;       // Temporizador para visor de logos
var visorLogosPeriod = 2000;  // Milisegundos de permanencia de cada logo
var tempPromoHome = 0;        // Temporizador para zona promocional de portada
var promoHomePeriod = 5000;   // Milisegundos de permanencia de cada elemento

// Seguimiento de Google Analytics
var pageTracker = _gat._getTracker("UA-10844289-1");

// Ajuste de URL

var protocol = String(window.location.protocol);
var hostname = String(window.location.hostname);
var pathname = String(window.location.pathname);
var hash = String(window.location.hash);

// Ajuste de la pagina visible cuando no se llega por la home
if (hash=='') {  // Si se ha pasado una URL completa (estatica, sin hash) se cambia por una direccion dinamico con hash
	if ((pathname=='/')||(pathname=='/index')||(pathname=='/index.php')) {
		target = "index";
	} else {
		target = pathname.substring(1);
	}
	window.location = protocol+'//'+hostname+'/#'+target;
} else {
	target = hash.substring(1);
	if (target=='') {
		target = "index";
	}
	window.location.hash = '#'+target;
}

// Funciones globales

jQuery.fn.sFadeOut = function() {
	// Metodo fadeOut simultaneo
	return this.animate({opacity: 0.0}, {queue: false});
};

jQuery.fn.sFadeIn = function() {
	// Metodo fadeIn simultaneo
	return this.animate({opacity: 1.0}, {queue: false});
};

function createStructure() {
	// Creacion dinamica de la estructura del site
	totalPages = 0;
	$('.contenido-interior').remove();
	appendHtml = '<div id="contenido-cargando">Cargando . . .</div>';
	$('#contenido').append(appendHtml);
	appendHtml = '<div id="contenido-visor"></div>';
	$('#contenido').append(appendHtml);
	appendHtml = '<div class="seccion"></div>';
	$('#contenido-visor').append(appendHtml).hide();
	appendHtml = '<div class="pagina" id="p_index" href="'+protocol+'//'+hostname+'/"></div>';
	$('#contenido-visor .seccion:last').append(appendHtml);
	totalPages += 1;
	$('#mainnav > ul > li').each(function (i) {
		appendHtml = '<div class="seccion"></div>';
		$('#contenido-visor').append(appendHtml);
		target = $(this).children('a').attr('href').split('//')[1];
		target = "p_"+target.split('/')[1];
		appendHtml = '<div class="pagina" id="'+target+'" href="'+$(this).children('a').attr('href')+'"></div>';
		$('#contenido-visor .seccion:last').append(appendHtml);
		totalPages += 1;
		$(this).children('ul').children('li').each(function (j) {
			var targetMode =  $(this).children('a').attr('target');
			if (targetMode != '_blank') {  // No generar paginas para contenido tipo popup
				target = $(this).children('a').attr('href').split('//')[1];
				target = "p_"+target.split('/')[1]+"_"+target.split('/')[2];
				appendHtml = '<div class="pagina" id="'+target+'" href="'+$(this).children('a').attr('href')+'"></div>';
				$('#contenido-visor .seccion:last').append(appendHtml);
				totalPages += 1;
			}
		});
	});
}

function loadContent() {
	// Carga del contenido por Ajax
	loadedPages = 0;
	var fileName = "";
	$('#contenido-visor .seccion .pagina').each(function(i) {												  
		target = $(this).attr('id');
		fileName = $(this).attr('href');
		$('#'+target).load(fileName+" .contenido-interior", {async:true, type:"GET"}, function(responseText, textStatus, XMLHttpRequest) {
			loadedPages += 1;
			if(loadedPages == totalPages) {
				$('#contenido-cargando').remove();
				$('#contenido-visor').fadeIn("slow");
				// Inicializacion del LyteBox
				setLyteboxLinks();
				// Comprobacion periodica de cambio del hash
				goToHash();  // Ir a la direccion que marca el hash de la URL
				temp01 = setInterval (checkHash, 200);
				// Ajustes visuales
				visualSettings();
				ready = true;
			}
		});
	});
}

function goToPage(id) {
	// Ir a la pagina id (id tiene el formato 'p_seccion_pagina')
	if($('#'+id).length==0) {  // Si el id no corresponde a ninguna pagina cargada ir a la home
		id = id.substring(0,id.lastIndexOf('_'));  // Le quitamos el ultimo nodo
		if($('#'+id).length==0) {  // Y probamos otra vez
			id = 'p_index';  // Y si no vamos al index
		}
	};
	var position = $('#'+id).position();
	$("#deco").animate({ 
	  right: position.left/20 - 500,
	  top: -position.top/20
	}, 1200 );
	$("#contenido-visor").animate({ 
	  left: -position.left,
	  top: -position.top
	}, 1200, function() {
		// Ajuste del hash
		window.location.hash = id.split('p_')[1].replace(/[_]/g,"/");
		strPrevHash = id.split('p_')[1].replace(/[_]/g,"/");
		strHash = strPrevHash;
		// Ajuste de la pagina activa
		currentPage = id;
		$(".pagina").removeClass('actual');
		$('#'+id).addClass('actual');
	});
	// Visibilidad del pie de pagina
	if (id=="p_index") {
		$('#pie').fadeIn();
	} else {
		$('#pie').fadeOut();
	}
	// Control de elementos visuales especificos de la pagina activa
	if(id=='p_index') {  // Si estamos en la portada
		clearInterval(tempPromoHome);
		tempPromoHome = setInterval (promoHomeNext, promoHomePeriod);
	} else {
		clearInterval(tempPromoHome);
	}
	if($('#'+id).find('.visor-logos').length!=0) {  // Si en la pagina hay un visor de logos
		clearInterval(tempVisorLogos);
		tempVisorLogos = setInterval (visorLogosNext, visorLogosPeriod);
	} else {
		clearInterval(tempVisorLogos);
	}
	mainNavTo(id);

	// Seguimiento de Google Analytics:
	pageTracker._trackPageview("#"+strHash);
}

function mainNavTo(id) {
	// Ajustar la navegacion principal a la pagina id (id tiene el formato 'p_seccion_pagina')
	$('#mainnav li').removeClass('currentpage')
	if (id=="p_index") {
		$('#mainnav > ul > li > ul').sFadeOut().slideUp();
	} else {
		var sec = id.split('_')[1];
		var pag = id.split('_')[2];
		if (pag==undefined) {
			target = '#mainnav a[href="'+protocol+'//'+hostname+'/'+sec+'"]:first';
		} else {
			target = '#mainnav a[href="'+protocol+'//'+hostname+'/'+sec+'/'+pag+'"]:first';
		};
		$(target).parent('li').addClass('currentpage');
		$(target).parent('li').parent('ul:hidden').sFadeIn().slideDown();
		$(target).next('ul:hidden').sFadeIn().slideDown();
		$(target).parent('li').siblings('li').children('ul:visible').sFadeOut().slideUp();
		$(target).parent('li').parent('ul').parent('li').siblings('li').children('ul:visible').sFadeOut().slideUp();
	}
}

function checkHash() {
	// Comprueba que window.location.hash no haya cambiado, y si lo hace va a la pagina correspondiente
	if (strHash != String(window.location.hash).substring(1)){
		strPrevHash = strHash;
		strHash = String(window.location.hash).substring(1);
		goToPage("p_"+strHash.replace(/[/]/g,"_"));
	}
}

function goToHash() {
	// Muestra el contenido correspondiente al hash
	var target = String(window.location.hash).substring(1);
	if (target!='') {
		currentPage = "p_"+target.replace(/[/]/g,"_");
	} else {
		currentPage = "p_index";
	}
	goToPage(currentPage);
}

function setLyteboxLinks() {
	// Asigna los atributos necesarios a los enlaces internos tipo target="_blank" para que se abran con Lytebox
	$("a[target='_blank']").each(function (i) {
		target = $(this).attr('href');
		var aHostname = "";
		if(target.indexOf('//') !=-1) {  // Si en el href hay protocolo lo eliminamos
			target = target.split('//')[1];
		}
		aHostname = target.split('/')[0];
		if ((aHostname==undefined)||(aHostname=='')||(aHostname==hostname)) {
			$(this).addClass('iframe').attr('title','').fancybox({
				'zoomSpeedIn' : 500,
				'zoomSpeedOut' : 500,
				'frameWidth' : 760,
				'frameHeight' : 445,
			});
		}
	});
}

function visualSettings() {
	// Ajuste de efectos visuales una vez terminada la carga por Ajax
	// Navegacion principal: ajuste y efecto hover (para apoyar la CSS en IE)
	$('#mainnav li').removeClass('activeparent');
	$('#mainnav ul li a').hover(
      function () {
        $(this).addClass('hover');
      }, 
      function () {
        $(this).removeClass('hover');
      }
	);
	// Carrusel de logos de clientes
	$('.visor-logos').css('overflow','hidden');
	$('.visor-logos a').css({
		'position':'absolute',
		'top':'0px',
		'display':'none'
	});
	$('.visor-logos a:first-child').show();
}

function promoHomeNext() {
	// Cambiar al siguiente elemento en la zona promocional de la portada
	var promoItems = $('#p_index').find('.promo-item');
	var numPromoItems = promoItems.length;
	var currentpromoItem = promoItems.filter(':visible');
	if (currentpromoItem == -1) {
		currentpromoItem = 0;
		$(promoItems[0]).fadeIn(500);
	} else {
		var i = promoItems.index(currentpromoItem);
		currentpromoItem.fadeOut(500);
		i += 1;
		if (i>=numPromoItems) {i=0};
		$(promoItems[i]).fadeIn(500);
	}
}

function visorLogosNext() {
	// Cambiar al siguiente logo en el visor de logos
	var logos = $('#'+currentPage).find('.visor-logos a');
	var numLogos = logos.length;
	var currentLogo = logos.filter(':visible');
	if (currentLogo == -1) {
		currentLogo = 0;
		$(logos[0]).fadeIn();
	} else {
		var i = logos.index(currentLogo);
		currentLogo.fadeOut();
		i += 1;
		if (i>=numLogos) {i=0};
		$(logos[i]).fadeIn();
	}
}


// DOM Ready -------------------------------------------------------------------------------------

$(document).ready(function(){
	
	// Ocultacion de elementos clase "js_hide"
	$(".js_hide").hide();
	
	// Deteccion del navegador y sugerencia de actualizacion
	if (isRunningIE6OrBelow) {
		$("#notification .inner").html('Para ver esta p&aacute;gina correctamente necesitas actualizar tu navegador.  Haz clic aqu&iacute; para descargar la &uacute;ltima versi&oacute;n de <a href="http://www.microsoft.com/latam/windows/internet-explorer/" target="_blank">Internet Explorer</a> o de <a href="http://www.mozilla-europe.org/es/firefox/" target="_blank">Mozilla Firefox</a>.');
		$("#notification").slideDown();
	}
	
	// Flash en capa decorativa
	$('#deco').flash(
        { 
          src: '_style/_swf/bamboo.swf',
          width: '100%',
          height: '100%',
          align: 'right',
		  wmode: 'transparent'
        },
        { update: false }
    );
	
	// Creacion de la estructura del HTML
	createStructure();
	
	// Carga dinamica del contenido por Ajax
	loadContent();

	// Reajuste de la pagina tras un resize
	$(window).resize(function(){
		goToPage(currentPage);
	});
		
	// Navegacion: captura de enlaces internos
	$('a').live("click", function (e) {
		$(this).blur();
		target = $(this).attr('href');
		var aHostname = "";
		if(target.indexOf('//') !=-1) {  // Si en el href hay protocolo lo eliminamos
			target = target.split('//')[1];
		}
		aHostname = target.split('/')[0];
		if ((aHostname==undefined)||(aHostname=='')) {
			aHostname=hostname;
		} else {
			target = target.split(aHostname)[1];
		}
		var targetMode = $(this).attr('target');
		if((targetMode==undefined)||(targetMode=='')) {targetMode='_self'};
		if ((aHostname==hostname) && (targetMode=='_self')) {  // Si es un enlace interno y no popup
			e.preventDefault();
			if((target!=undefined)&&(target!='')&&(target!='/')) {
				target = 'p'+target.replace(/[/]/g,"_");
			} else {
				target = 'p_index';
			}
			if (ready) {
				goToPage(target);
			}
		} else if ((aHostname==hostname) && (targetMode=='_blank')) {  // Si es un enlace interno que se lanza con LyteBox
			e.preventDefault();
		}
	});

});
