/**
 *	Scripts de Urko Suaya
 */


var DURACION_FADE_AJAX = 300;
var DURACION_FADE_FOTOS = 300;
var FOTO_ACTUAL = null;
var NUM_FOTOS_GALERIA = 0;
var NUM_FOTO_ACTUAL_GALERIA = 0;

var ASPECT_RATIO_FOTO = 945 / 666;		// 945 / 630
var ASPECT_RATIO_FOTO_MAXIMO = 945 / 666;		// 945 / 710
var ALTO_ADICIONAL_BODY = 190;

/**
 *	Configuración Inicial del Sitio
 */
$(document).ready(function(){

	// El logo es lo mismo que portfolio.
	$('#logo').click(function(event) {
		event.preventDefault();
		$('#navegacion .portfolio').trigger('click');
	});

	// Prepara los hovers de la navegación.
	$('#navegacion a, #boton-contacto a')
		.append('<span class="hover"></span>');
	
	$('#navegacion a, #boton-contacto a')
		.mouseenter(function(){
			$('.hover', this).stop(true, true).fadeIn(200);
		})
		.mouseleave(function(){
			if( ! $(this).hasClass('selected') ) {
				$('.hover', this).stop(true, true).fadeOut(150);
			}
		})
		.bind('click', function(event){
		
			if( $(this).hasClass('selected') ) {
				// Esto es para evitar entrar a la misma página dos veces seguidas.
				event.preventDefault();
				return false;
			}
			else if( ! $(this).hasClass('noajax') ) {
			
				// Las páginas internas se cargan vía AJAX
				event.preventDefault();
				
				// Cambia la nav seleccionada
				$('#navegacion a, #boton-contacto a').removeClass('selected');
				$('#navegacion a .hover, #boton-contacto a .hover').hide();
				$(this).addClass('selected');
				$('.hover', this).show();
				
				var h_link = $(this);
				
				// Se prepara para cambiar el contenido vía AJAX.
				$('#content-holder').height( $('#content-holder').height() );	// Esto es para prevenir un pop de dimensiones.
				
				$('#content').fadeOut( DURACION_FADE_AJAX, function(){

					var link_a_cargar = h_link.attr('href') +'?'+ Math.ceil(Math.random() * 1000000);
					var es_galeria = false;
					if( h_link.attr('galeria_xml') ) {
						// Si hay un link de galeria_xml es una galería así que sólo basta con maquetar las divs.
						// Esto es para activar el preloading, ya que si se carga en memoria no anda el loader secuencial.
						link_a_cargar = h_link.attr('galeria_xml') +'?'+ Math.ceil(Math.random() * 1000000);
						es_galeria = true;
					}
				
					// El link es random para prevenir caching
					$.get(	link_a_cargar,
							function(data){

								// Crea un objeto de jQuery con la página para parsear el HTML y obtener sólo el #content.
								var $response = $(data);
								
								if( es_galeria ) {
									
									var string_fotos = "";	// Es más rápido el insert así.
									$('foto', $response).each(function(){
										// Va agregando el holder de cada foto para inicializar la galería.
										// El atributo "borde" marca que la foto tiene un borde especial
										var clase_foto = $(this).attr('borde') == '1' ? 'foto-shadow' : ( $(this).attr('borde') == '2' ? 'foto-shadow-bottom' : '' );
										string_fotos += '<div class="foto '+ clase_foto +'" src_foto="'+ SITE_URL +'_assets/photos/'+ $(this).text() +'" />';
									});
									
									// Prepara el dummy content en memoria para crear la galería.
									var $contenido = $(	'<div id="holder-galeria-fotos">'+
															'<div id="galeria-fotos">'+
																'<div id="holder-fotos-galeria">'+
																	string_fotos+
																'</div>'+
															'</div>'+
															'<a id="boton-galeria-left" title="previous"></a>'+
															'<a id="boton-galeria-right" title="next"></a>'+
														'</div>'+
														'<div id="contador-galeria"><!-- --></div>' );
									
								}								
								else {
									// Si es una página común, sólo busca y reemplaza el content.
									var $contenido = $response.find('#content').children();
								}

								// Reemplaza y muestra el contenido de nuevo.
								$('#content')
									.hide()
									.html( $contenido )
									.fadeIn( DURACION_FADE_AJAX );
								
								// Resizea y reinicializa las galerías.
								$('#content-holder').css('height', 'auto');
								$(window).trigger('resize');
								
								if( es_galeria ) {
									inicializar_galeria();
								}
								
							}, 
							es_galeria ? 'xml' : 'html');
				});
			
				return false;
				
			}
		});
		
	// Preselecciona la primera foto como la actual
	FOTO_ACTUAL = $('#galeria-fotos .foto:first');
	
	
	//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	// Resizea los diferentes componentes del sitio
	$(window).resize(function(){
	
		// El alto de la galería es el de la foto actual
		if( FOTO_ACTUAL.height() ) {
			$('#galeria-fotos').height( FOTO_ACTUAL.height() );
		}
		else {
			// Si la foto no está cargada, usa una aproximación (de la primera pic) para las dimensiones.
			$('#galeria-fotos').height( $('#galeria-fotos').width() / 1.5 );
		}
		
		// El ancho del #site-holder varía también en forma adicional al ancho del sitio (CSS con max y min width), de acuerdo también al alto.
		// Esto es para que entren bien las imágenes de la galería.
		// Se toma como referencia que se necesitan 866px (945px NEW) de alto para una foto promedio con el ancho máximo (945px) 
		// y 715px (781px NEW) de alto con el ancho mínimo (782px).
		// La relación es 850 + ([Height entre 866 y 715] - 715 ) / (866-715) * (945-850)
		
		var alto_maximo_body = 945 / ASPECT_RATIO_FOTO + ALTO_ADICIONAL_BODY;
		var alto_minimo_body = 700 / ASPECT_RATIO_FOTO + ALTO_ADICIONAL_BODY;
		var ancho_maximo_body = 945;
		var ancho_minimo_body = 700;
		var aspect_ratio_foto = ASPECT_RATIO_FOTO; //945 / 709;
		
		var ancho_ventana = $(window).width();
		var ancho_contenido = ancho_ventana - 140 - 68;		// Esto es por el padding del contenido y el site_holder
		var alto_ventana = $(window).height();
		
		var ancho_maximo = (ancho_contenido) > ancho_maximo_body ? ancho_maximo_body : ((ancho_contenido) < ancho_minimo_body ? ancho_minimo_body : ancho_contenido );
		var alto_a_usar =	( alto_ventana > alto_maximo_body ) ? alto_maximo_body : 
								( ( alto_ventana < alto_minimo_body ) ? alto_minimo_body : alto_ventana );
						
		var ancho_nuevo = ancho_minimo_body + (alto_a_usar - alto_minimo_body ) / (alto_maximo_body - alto_minimo_body) * (ancho_maximo_body - ancho_minimo_body);
		var ancho_site = (ancho_nuevo > ancho_maximo ? ancho_maximo : ancho_nuevo)
		$('#site-holder').css('width', ancho_site + 68 );	// Suma el padding del contenido para el ancho total.
		

		$('#galeria-fotos').height( ancho_site / aspect_ratio_foto );
		var alto_galeria = ancho_site / aspect_ratio_foto;
		
		// Centra verticalmente las fotos
		$('.pic', FOTO_ACTUAL).each(function(){
			var offset_top = ( (alto_galeria - $('img', this).height()) / 2 );
			//$(this).css('margin-top', ( offset_top > 0 ? offset_top : 0 ) +'px');	// Esto es sin cropping
			$('.pic', this).css('margin-top', offset_top +'px');
		});
		
		
		// "Centrado" del sitio.
		// El margen superior del header se agranda en resoluciones muy grandes (1080 vertical+)
		// El header mide 132px de alto (con margins default). El footer 41px (Delta 89px). Se busca tener *la foto* centrada.
		if( alto_ventana > alto_maximo_body + 89 / 2 ) {
			$('#header').css('margin-top', 46 + ( alto_ventana - alto_maximo_body - 89 / 2 ) / 2 +'px' );
		}
		

		
		// Hack Alert!!!
		// Los botones están puestos a distinta distancia del contenido en 1024 (25px) y en 1280 (8px)
		// Esta función inversa interpola las dimensiones para la posición de los botones de next/prev.
		// Para el ancho, la relación es (1 - ([Width entre 945 y 850] - 850 / 95 ) * (25-8)
		// Para el alto se usa como referencia la foto angosta inicial.
		
		var ancho_a_usar =	( ancho_site > 945 ) ? 945 : 
								( ( ancho_site < 850 ) ? 850 : ancho_site );
		
		var distancia_botones = ( 1 - (ancho_a_usar - 850) / 95 ) * (25-8);
		
		// El left/right default son 20px.
		$('#boton-galeria-left').css('left', (- distancia_botones - 20) +'px' );
		$('#boton-galeria-right').css('right', (- distancia_botones - 20) +'px');
		
		
		
	});
	
	$(window).trigger('resize');

	
	// Desactiva el scroll en el iPad
	document.ontouchmove = function(e){
		//e.preventDefault();
	}
	
	// Hace un chequeo de orientación en el ipad/iphone
	window.onorientationchange = function(e){
		$('#header').css('margin-top', '46' +'px' );
		$(window).trigger('resize');
	};
	
});



/**
 *	Configura el funcionamiento de las galerías de fotos.
 *	Debe ser reseteado en cada AJAX Load (se pierden los binds)
 */
function inicializar_galeria() {

	// Muestra sólo la primer foto
	FOTO_ACTUAL = $('#galeria-fotos .foto:first');
	$('#galeria-fotos .foto').hide();
	$('#holder-fotos-galeria, #contador-galeria, #boton-galeria-left, #boton-galeria-right').hide();	
	 
	// Prepara las variables básicas de la galería
	NUM_FOTOS_GALERIA = $('#galeria-fotos .foto').length;
	NUM_FOTO_ACTUAL_GALERIA = 1;
	 
	
	// Pone los hovers
	$('#boton-galeria-left, #boton-galeria-right')
		.append('<span class="hover"></span>')
		.mouseenter(function(){
			$('.hover', this).stop(true, true).fadeIn(200);
		})
		.mouseleave(function(){
			$('.hover', this).stop(true, true).fadeOut(150);
		});
	
	// Inicializa los binds de los botones de anterior / siguiente
	$('#boton-galeria-left, #boton-galeria-right').click( function(event){
		
		// Chequea que haya una foto actual
		if( FOTO_ACTUAL == 'undefined' || ! FOTO_ACTUAL.length ) {
			FOTO_ACTUAL = $('#galeria-fotos .foto:first');
		}		
		
		// Detecta el criterio de anterior / siguiente
		// Tiene calesita (al llegar a la primera sigue por la última y viceversa).
		if( $(this).attr('id') == 'boton-galeria-left') {
			var NUEVA_FOTO = FOTO_ACTUAL.prev('.foto');
			NUM_FOTO_ACTUAL_GALERIA -= 1;
			if( ! NUEVA_FOTO.length ) {
				var NUEVA_FOTO = $('#galeria-fotos .foto:last');
				NUM_FOTO_ACTUAL_GALERIA = NUM_FOTOS_GALERIA;
			}
		}
		else {
			var NUEVA_FOTO = FOTO_ACTUAL.next('.foto');
			NUM_FOTO_ACTUAL_GALERIA += 1;
			if( ! NUEVA_FOTO.length ) {
				var NUEVA_FOTO = $('#galeria-fotos .foto:first');
				NUM_FOTO_ACTUAL_GALERIA = 1;
			}
		}
		
		FOTO_ACTUAL.fadeOut( DURACION_FADE_FOTOS );
		NUEVA_FOTO.fadeIn( DURACION_FADE_FOTOS );		
		FOTO_ACTUAL = NUEVA_FOTO;

		// Resizea el contenedor al alto de la imagen para que haya un perfect fit.
		if( $('img', FOTO_ACTUAL).height() ) { 

			// El alto target es el default del sistema (ancho común / aspect ratio)
			var alto_minimo = $('#galeria-fotos').width() / ASPECT_RATIO_FOTO;
			var alto_maximo = $('#galeria-fotos').width() / ASPECT_RATIO_FOTO_MAXIMO;
			var alto_target = alto_minimo;
		
			/*
			if( $('img', FOTO_ACTUAL).height() >= alto_minimo ) {
			
				// Si el alto de la foto es mayor que el alto default resizea hacia la foto	
				alto_target = $('img', FOTO_ACTUAL).height();
				alto_target = alto_target > alto_maximo ? alto_maximo : alto_target;
				$('#galeria-fotos').stop(true, false).animate( {
					height:		alto_target +'px'
					}, DURACION_FADE_FOTOS);
					
			} else if( $('img', FOTO_ACTUAL).height() <= alto_minimo ) {
			
				// Si el alto de la foto es menor al alto default, vuelve al alto default
				alto_target = alto_minimo;
				$('#galeria-fotos').stop(true, false).animate( {
					height:		alto_target +'px'
					}, DURACION_FADE_FOTOS );			
			}
			*/
				
			
			$('.pic', FOTO_ACTUAL).css('margin-top', '0px');	// Bug con IE.
			var offset_tentativo = (alto_target - $('img', FOTO_ACTUAL).height()) / 2;
			//$('.pic', FOTO_ACTUAL).css('margin-top', ( offset_tentativo >= 0 ? offset_tentativo : 0 ) +'px');		// Sin cropping
			$('.pic', FOTO_ACTUAL).css('margin-top', offset_tentativo +'px');
		
		}
		
		// Actualiza el contador
		$('#contador-galeria').html( NUM_FOTO_ACTUAL_GALERIA +'<em>/</em>'+ NUM_FOTOS_GALERIA );
		
	});


	// Inicializa el contador de fotos.
	$('#contador-galeria').html( NUM_FOTO_ACTUAL_GALERIA +'<em>/</em>'+ NUM_FOTOS_GALERIA );
	

	precargar_primera_foto_galeria( FOTO_ACTUAL );	// Empieza desde la primera foto a cargar secuencialmente
	
}



/**
 *	Precarga la primera imagen de la galería (para saber cuándo inicializar todo);
 *	Depende de FOTO_ACTUAL para continuar
 *
 *	@param h_foto Handle de jQuery del contenedor .foto a cargar
 */
function precargar_primera_foto_galeria( h_foto ) {
	
	h_pic = $('<span class="pic"><img src="'+ h_foto.attr('src_foto') +'" alt="" /></span>');
	h_pic.appendTo(h_foto).click(function(){
		$('#boton-galeria-right').trigger('click');
	});
			
	// Cuando la primera foto carga, resizea la galería y muestra los comandos.
	$('img', h_foto).load(function(){
	
		$('#holder-fotos-galeria').fadeIn( DURACION_FADE_FOTOS );
		FOTO_ACTUAL.fadeIn( DURACION_FADE_FOTOS );

		var offset_tentativo = $('#galeria-fotos').height() - $('img', FOTO_ACTUAL).height();
		$('.pic', FOTO_ACTUAL).css('margin-top', ( (offset_tentativo >= 0 ? offset_tentativo : 0)/2 ) +'px');
		
		$('#galeria-fotos').animate( {
			height:		FOTO_ACTUAL.height() +'px'
		}, DURACION_FADE_FOTOS, function(){
			$('#contador-galeria, #boton-galeria-left, #boton-galeria-right').fadeIn( DURACION_FADE_FOTOS );
		});
		
		precargar_foto_galeria( h_foto.next('.foto') );
	});
	
}


/**
 *	Precarga las imágenes secuencialmente (de la primera a la última).
 *	Depende de FOTO_ACTUAL para continuar
 *
 *	@param h_foto Handle de jQuery del contenedor .foto a cargar
 */
function precargar_foto_galeria( h_foto ) {
	
	if( ! h_foto.length ) { return false; }
	
	// Si ya está cargada esta imagen, salta a la siguiente.
	if( $('img', h_foto).length > 0 ) {
		precargar_foto_galeria( h_foto.next('.foto:empty') );
	}

	// Copia la foto en memoria y cuando carga la inserta.
	
	var h_pic = $('<span class="pic"><img src="'+ h_foto.attr('src_foto') +'" alt="" /></span>');
	h_pic.appendTo(h_foto).hide().fadeIn( 200 ).click(function(){
		$('#boton-galeria-right').trigger('click');
	});
	
	$('img', h_pic).load(function() {
		// Cachea las dimensiones.
		$('img', this).attr('width_original', $('img', this).width());
		$('img', this).attr('height_original', $('img', this).height());
		precargar_foto_galeria( h_foto.next('.foto') );
	});
		
}


/**
 *	Abre el sitio principal (window.open)
 */
function abrir_sitio() {

	// Abre una ventana fullscreen. Resta unos px para los bordes en Windows.
	window_offset = 0;
	
	nueva_ventana = window.open (	
					"./portfolio", 
					"urkosuaya_site",
					"channelmode=0, fullscreen=1, "+
					"directories=0, location=0, personalbar=0, "+
					"menubar=0, status=0, titlebar=0, toolbar=0, "+
					"scrollbars=1, "+
					"top=0, left=0, "+
					"width="+ (screen.width - window_offset) +", height="+(screen.height - window_offset) +" ");
				
	nueva_ventana.focus();
	return false;
	
}






