/**
 * Funciones comunes del proceso de reservas.
 */

if (typeof window.$booking == 'undefined') 
{
	/* -------------------------- */
	/* 	Funcionalidad por defecto.

		$gp( xxxx ) retorna el elemento xxx.
		Equivale a $gp.dom( "xxx" ).
	*/
	window.$booking = $booking = {}

	/**
	 * Estas dos variables globales son utilizadas para la comunicación entre las funciones
	 * muestraInicioProceso y muestraFinalProceso. Debido a que la posición de la capa de
	 * "cargando" es absoluta, no se abre su propio espacio cuando se coloca entre otras dos
	 * capas. Lo que se hace es que mientras se muestra el mensaje se le da un "margin-bottom"
	 * más grande al componente bajo el cual se muestra. Luego, cuando se oculta el mensaje de
	 * "cargando" al objeto bajo el cual se mostraba (que se guardó en la variable componenteTemp)
	 * se le vuelve a asignar el margen inferior que tenía antes, que se ha guardado en la 
	 * variable marginBottomTemp.
	 */
	$booking.componenteTemp = "";
	$booking.marginBottomTemp = "";
	
	$booking.isLastClickAuto = false;

	/**
	 * Muestra un div de inicio de proceso, poniendo una capa oculta semitransparente
	 * para evitar la interacción del usuario con la pagina.
	 *
	 * @param titulo Titulo del proceso.
	 * @param texto Texto a mostrar.
	 * @param componenente Componente opcional debajo del cual se muestra el cuadro.
	 */
	$booking.muestraInicioProceso = function( titulo, texto, componente )
	{
		//alert("muestraInicioProceso(" + titulo + ", " + texto + ", " + componente + ")");
		$booking.componenteTemp = componente;
		$booking.marginBottomTemp = "";
		setTimeout( function() {
			$("#tituloProcesando").text( titulo );
			$("#textoProcesando").text( texto );
			$("#ocultar").show();
			if( !componente )
			{
				$("#divProcesando").css( "top", "40%" );
			}
			else
			{
				$booking.marginBottomTemp = $(componente).css("margin-bottom");
				$("#divProcesando").css( "top", ( $(componente).position().top + $(componente).outerHeight( { "margin": true } )) + ( navigator.appName == "Microsoft Internet Explorer" ? 15 : 8 ) + "px" );
				$(componente).css("margin-bottom","100px");
			}
			$("#divProcesando").show();
			document.getElementById("divProcesando").scrollIntoView(false);
		}, 1 );
	}

	$booking.muestraProcesoDesglose = function( titulo, texto, componente )
	{
		//alert("muestraProcesoDesglose");
		setTimeout( function() {
			//$("#tituloProcesando").text( titulo );
			//$("#textoProcesando").text( texto );
			//$("#ocultar").show();
			var htmlCode = "" +
				"<div style='background-color:#FFFFFF;border:1px solid #C8C8C8;margin:0 auto;opacity:0.9;padding:10px;text-align:center;top:10%;width:638px;z-index:100;'>" +
				"	<img style='border:medium none;height:auto;margin:0 auto 10px;width:auto;' src='/bookingwww/img/preloader.gif'/>" +
				"	<p style='color:#666666;font-family:Verdana;font-size:10px;margin:0;padding:0;'>" + titulo + "</p>" +
				"	<p style='color:#666666;font-family:Verdana;font-size:10px;margin:0;padding:0;'>" + texto + "</p>" +
				"</div>";
			$(componente).html( htmlCode );
			//$("#divProcesando").show();
			//document.getElementById("divProcesando").scrollIntoView(false);
		}, 1 );
	}

	/**
	 * Finaliza la notificacion de proceso inicada en el paso anterior.
	 */
	$booking.muestraFinalProceso = function()
	{
		//alert("muestraFinalProceso marginBottomTemp: " + $booking.marginBottomTemp + ", $(componenteTemp).css('margin-bottom'): " + $($booking.componenteTemp).css('margin-bottom'));
		$("#divProcesando").hide();
		$("#ocultar").hide();
		if ($booking.marginBottomTemp != ""){
			$($booking.componenteTemp).css("margin-bottom",$booking.marginBottomTemp);
		}
		$booking.marginBottomTemp = "";
	}
	
	/**
		Formatea un precio.<br> 
	*/
	$booking.formateaPrecio = function( precio )
	{
		return $gp.formateaNumeroPersonalizado( precio, BP_Mercado.formatoPrecio, 2, true );
	}

	$booking.getNroPasajerosTipo = function( tipo, acomodacion ){
		var contador = 0;
		var habs = acomodacion.habitaciones;
		for ( var i = 0; i < habs.length; i++ ) {
			pasjs = habs[i].pasajeros;
			for ( var j = 0; j < pasjs.length; j++ ) {
				if( pasjs[j].tipo_pasajero == tipo )
				{
					contador++;
				}
			}
		}
		return contador;
	}
	
	$booking.getNroHabitaciones = function(acomodacion) {
		return acomodacion.habitaciones.length;
	}
	
	$booking.getNombreHotel = function( codigo )
	{
		if( codigo == '3' ) return 'Adeje';
		else if( codigo == '5' ) return 'Tenerife';
		else if( codigo == '18' ) return 'SanFelipe';
		else if( codigo == '3333' ) return 'TenerifeResort';
		else if( codigo == '7' ) return 'PuntaCana';
		else if( codigo == '8' ) return 'Bavaro';
		else if( codigo == '20' ) return 'Ambar';
		else if( codigo == '2' ) return 'SanJuan';
		else if( codigo == '11' ) return 'Cayacoa';
		else if( codigo == '12' ) return 'CayoLevantado';
		else if( codigo == '14' ) return 'Samana';
		else if( codigo == '15' ) return 'Portillo';
		else if( codigo == '19' ) return 'LaRomana';
		else if( codigo == '17' ) return 'Jamaica';
		else if( codigo == '1' ) return 'Tulum';
		else if( codigo == '4' ) return 'Coba';
		else if( codigo == '10' ) return 'Akumal';
		else if( codigo == '1111' ) return 'ComplejoRivieraMaya';
		else if( codigo == '59' ) return 'Coral';
		else if( codigo == '53' ) return 'Tal';
		else if( codigo == '57' ) return 'BahiaPalma';
		else return 'undefined_' + codigo;
	}
	
	$booking.getNombreLoc = function( codigo )
	{
		if( codigo == 'TCI' ) return 'Tenerife';
		else if( codigo == 'PUJ' ) return 'RepDominicana';
		else if( codigo == 'POP' ) return 'RepDominicana';
		else if( codigo == 'AZS' ) return 'Samana';
		else if( codigo == 'LRM' ) return 'RepDominicana';
		else if( codigo == 'MBJ' ) return 'Jamaica';
		else if( codigo == 'CUN' ) return 'RivieraMaya';
		else if( codigo == 'PMI' ) return 'Mallorca';
		else return 'undefined_' + codigo;
	}
	
	/**
		Track de una llamada GA.
	 */
	$booking.track2 = function( params, variables, transaccion )
	{
		try {

			/* TODO TEST TEST TEST
			if( variables )
			{
				for( var i = 0; i < variables.length; i++ )
				{
					bpTracker._setVar( variables[i] );
				}
			}
			*/

			/* Estos datos se anyaden siempre. */
			if( !$gp.isDef( params['Tipo'] ) ) params.Tipo = 'none';
			if( !$gp.isDef( params['Loc'] ) ) params.Loc = 'none';
			if( !$gp.isDef( params['Hotel'] ) ) params.Hotel = 'none';
			if( (new RegExp('[0-9]+' )).test( params.Hotel ) )
			{
				params.Hotel = $booking.getNombreHotel( params.Hotel );
			}
			
			if( params.Loc.length == 3 )
			{
				params.Loc = $booking.getNombreLoc( params.Loc );
			}
	
			var bpTracker = new metriplicaTracker("UA-1643902-4");
			bpTracker._setDomainName("none");

			bpTracker.tipo = '/readable/Id_' + BP_Mercado.idioma.toUpperCase() + 
				'/Pais_' + BP_Mercado.pais +
				'/Zona_' + BP_Mercado.mercadoBP +
				'/Loc_' + params.Loc + 
				'/Hotel_' + params.Hotel +
				'/Tipo_' + params.Tipo;
	
			bpTracker.content = '/Contenido_' + params.Contenido; /* + '='; */
	
			/*
			var barras = new RegExp('[/]','g');
			for( var v in params )
			{
				if( v != 'Contenido' && v != 'PvVirtual' && v != 'Loc' && v != 'Hotel' && v != 'Tipo' )
				{
					bpTracker.content += '/' + v + '_' + ( '' + params[v] ).replace( barras, '-' );
				}
			}
	
			if( params.PvVirtual != null )
			{
				bpTracker.content += '/PvVirtual';
			}
			*/
			var trackerVal = bpTracker._setContent( bpTracker.tipo + bpTracker.content );
			bpTracker._trackPageview(trackerVal);
	
			/* TODO TEST TEST TEST
			if( transaccion != null && transaccion.trans != null && transaccion.item != null )
			{
				bpTracker._addTrans(
					transaccion.trans.idTrans,
					transaccion.trans.hotel,
					transaccion.trans.precio,
					transaccion.trans.impuestos,
					transaccion.trans.gastosEnvio,
					transaccion.trans.poblacion,
					transaccion.trans.provincia,
					transaccion.trans.pais
				);
				bpTracker._addItem(
					transaccion.trans.idItem,
					transaccion.trans.codigoProducto,
					transaccion.trans.nombreProducto,
					transaccion.trans.categoria,
					transaccion.trans.precio,
					transaccion.trans.unidades
				);
				bpTracker._trackTrans();
			}
			*/
		}
		catch(err)
		{
			alert('metriplica.js error?');
		}
	}
	
	/**
		Track de una llamada GA.
	 */
	$booking.track = function( params, variables, transaccion, varsGoal )
	{
		try {

			/* TODO TEST TEST TEST*/
			if( variables )
			{
				for( var i = 0; i < variables.length; i++ )
				{
					bpTracker._setVar( variables[i] );
				}
			}
			/**/

			/* Estos datos se anyaden siempre. */
			if( !$gp.isDef( params['Tipo'] ) ) params.Tipo = 'none';
			if( !$gp.isDef( params['Loc'] ) ) params.Loc = 'none';
			if( !$gp.isDef( params['Hotel'] ) ) params.Hotel = 'none';
			if( (new RegExp('[0-9]+' )).test( params.Hotel ) )
			{
				params.Hotel = $booking.getNombreHotel( params.Hotel );
			}
			
			if( params.Loc.length == 3 )
			{
				params.Loc = $booking.getNombreLoc( params.Loc );
			}

			params.Contenido += '=';
	
			var barras = new RegExp('[/]','g');
			for( var v in params )
			{
				if( v != 'Contenido' && v != 'PvVirtual' && v != 'Loc' && v != 'Hotel' && v != 'Tipo' )
				{
					params.Contenido += '/' + v + '_' + ( '' + params[v] ).replace( barras, '-' );
				}
			}

			if( params.PvVirtual != null )
			{
				params.Contenido += '/PvVirtual';
			}

			$gp("#ga_loc").setValue( params.Loc );
			$gp("#ga_hotel").setValue( params.Hotel );
			$gp("#ga_tipo").setValue( params.Tipo );
			$gp("#ga_contenido").setValue( params.Contenido );
			
			if(variables){
				var vars = JSON.stringify(variables);
				$gp("#ga_variables").setValue( vars );
			}
			
			if(transaccion){
				var trans = JSON.stringify(transaccion);
				$gp("#ga_transaccion").setValue( trans );
			}

			if(varsGoal){
				var goal = JSON.stringify(varsGoal);
				$gp("#ga_goal").setValue( goal );
			}

			$gp("#iframega_form").submit();
		}
		catch(err)
		{
			//alert('metriplica.js error?');
		}
	}

	$booking.getDomainName = function(){
		if(location.hostname.indexOf("bahia-principe")!=-1){
			return "bpcom";
		}
		else if (location.hostname.indexOf("bahiaprincipeusa")!=-1){
			return "bpusa";
		}
		else{
			return "none";
		}
	}
	
	$booking.clickAuto = function( id ){
		$booking.isLastClickAuto = true;
		$( id ).click();
	}
	
	$booking.checkLastClickAuto = function(){
		if( $booking.isLastClickAuto == true )
		{
			$booking.isLastClickAuto = false;
			return true;
		}
		else
		{
			return false;
		}
	}
}