/*
 Copyright (c) 2008, Red Universal de Marketing y Bookings Online, S.A. (Rumbo) All rights reserved.
 version: 0.8.0b
 */

/**
 * @author dortega
 * @date 10-11-2008
 * @version 1.0
 */


//Iniciando namespaces
rmb.seo.namespaces.createNamespace("rmb.seo.barras");

rmb.seo.barras.BarrasClass = function(hashDatos){

    //this.tooltips = null;

    //"private" variables: 
	var loc = rmb.seo.barras.Localization;
	
    var _id = hashDatos.id;
    var _origenCod = hashDatos.origenCod;
    var _destinoCod = hashDatos.destinoCod;    
	var _divDestinoIda = hashDatos.divDestinoIda;
	var _divDestinoVuelta = hashDatos.divDestinoVuelta;	
	var _tipoNivel = hashDatos.tipoNivel;
	var _divDestino = hashDatos.divDestino;
	
	var _idioma = hashDatos.idioma;
	var _codeServicioPaisEquivalente = hashDatos.codeServicioPaisEquivalente;
	var _servicioPais = hashDatos.servicioPais;
	var _numMesesBarras = hashDatos.numMesesBarras;
	var _localeCode = hashDatos.localeCode;

	//Sacados a traves del css
	var aux = getStyle('.barra-externa');
	var _anchoBarra = parseInt(getStyle('.barra-externa').width);

	
	//Nuevos datos	
	var _offsetLeftDivBarra = hashDatos.offsetLeftDivBarra;
	var _offsetLeftBarra = hashDatos.offsetLeftBarra;
	var _offSetMeses = hashDatos.offSetMeses;
	var _anchoMes = hashDatos.anchoMes;
	var _topFooter = hashDatos.topFooter;	

	//Topes del Flotante
	var _maxTopDivBarras = hashDatos.maxTopDivBarras;	
	var _maxLeftDivBarras = hashDatos.maxLeftDivBarras;		
	
	var _listaDatosMesesIda = new Array();
	var _listaDatosMesesVuelta = new Array();
	
	var _datosPreciosMesIda = new Array();	
	var _datosPreciosVueltaMes = new Array();
		
	var _datosMesSeleccionadoIda = new Array();	
	var _datosMesSeleccionadoVuelta = new Array();    	

	var _diaSeleccionadoIda = -1;
	var _diaSeleccionadoVuelta = -1;	
	var _diaActual = -1;
	var _mesInicio = -1;
	var _mesIdaSeleccionado = 0;
	
	var _datosJson;		
	var _datosVuelosVuelta;
	
	var _offsetTop = 0;
	var _offsetLeft = 0;
	
	var _fechaIda = "";
	var _fechaVuelta = "";	
	
	
	var _tipoBarra = "compuesto";
	
	var _primerMesConPrecio = 0;
	
	var _porcentaje = 0.4;
	
	
	
	var _datosIda;
	var _datosVuelta;
	
	var _raizUrl = hashDatos.raizUrl;
	
	
	//"private" method:
	
	function getDatosIda(){
        return _datosIda;
    }
    
    function setDatosIda(datosIda){
        _datosIda = datosIda;
        return;
    }
	
	function getDatosVuelta(){
        return _datosVuelta;
    }
    
    function setDatosVuelta(datosVuelta){
        _datosVuelta = datosVuelta;
        return;
    }
	
	function setFechaIda(fechaIda){
		_fechaIda = fechaIda;
	}
	
	function getFechaIda(){
		return _fechaIda;
	}
	
	
	//Inicio de variables
	if(hashDatos.offsetTop != undefined){
		_offsetTop = hashDatos.offsetTop;
	}
	
	if(hashDatos.offsetLeft != undefined){
		_offsetLeft = hashDatos.offsetLeft;
	}	
	
	
	function resetDiaSeleccionadoIda(){
		_diaSeleccionadoIda = -1;
	}
	
	function getDiaSeleccionadoIda(){
		return _diaSeleccionadoIda;
		
	}
	
	function setDiaSeleccionadoIda(diaSeleccionado){
        _diaSeleccionadoIda = diaSeleccionado;
    }
	
	
	function resetDiaSeleccionadoVuelta(){
        _diaSeleccionadoVuelta = -1;
    }
	
	function getDiaSeleccionadoVuelta(){
        return _diaSeleccionadoVuelta;
    }
    
    function setDiaSeleccionadoVuelta(diaSeleccionadoVuelta){
        _diaSeleccionadoVuelta = diaSeleccionadoVuelta;
    }
	
	function getTipoBarra(){
        return _tipoBarra;
    }
    
    function setTipoBarra(tipoBarra){
        _tipoBarra = tipoBarra;
    }
	
	
	
	
	/**
	 * 
	 */
	function resetPorcentaje(){
        _porcentaje = 0.4;
    }
    
	/**
	 * 
	 */
    function getPorcentaje(){
        return _porcentaje;
    }
    
	/**
	 * 
	 * @param {Object} porcentaje
	 */
    function setPorcentaje(porcentaje){
        _porcentaje = porcentaje;
        return;
    }
	
	
	/**
	 * 
	 * @param {Object} datosMesSeleccionado
	 * @param {Object} tipo
	 */
	function setDatosMesSeleccionadoIda(datosMesSeleccionadoIda){
		_datosMesSeleccionadoIda = datosMesSeleccionadoIda;
	}
	
	function setDatosMesSeleccionadoVuelta(datosMesSeleccionadoVuelta){
        _datosMesSeleccionadoVuelta = datosMesSeleccionadoVuelta;
    }
	
	function getDatosMesSeleccionadoIda(){
        return  _datosMesSeleccionadoIda;
    }
    
    function getDatosMesSeleccionadoVuelta(){

        return _datosMesSeleccionadoVuelta;
    }
	
	
	function setListaDatosMesesIda(listaDatosMesesIda){
		_listaDatosMesesIda = listaDatosMesesIda;
	}   
	
	function getDatosMesIda(mes){
		return _listaDatosMesesIda[mes];
	}
	
	function getMesIdaSeleccionado(){
		return _mesIdaSeleccionado;
	}
	
	function setMesIdaSeleccionado(mesIdaSeleccionado){
        _mesIdaSeleccionado = mesIdaSeleccionado;
    }
	
	
	function getRaizUrl(){
		return _raizUrl;
	}
	
	
    /**
     * Obtiene el estilo css aplicado a un elemento del dom
     * 
     * @param {Object} className
     */
    function getStyle(className){
    	try
    	{
	        var hojas = document.styleSheets;
	        var indiceHojasBarras;
	        for (var i = 0; i < hojas.length; i++) {
	            if (hojas[i].href.indexOf('design-seo.css') != -1) {
	                indiceHojasBarras = i;
	                break;
	                
	            }
	        }
	        var classes = document.styleSheets[indiceHojasBarras].rules || document.styleSheets[indiceHojasBarras].cssRules
	        for (var x = 0; x < classes.length; x++) {
	            if (classes[x].selectorText.search(new RegExp(className + "$")) != -1) {
	                return classes[x].style;
	            }
	        }
	        return null;
    	}
    	catch(Error)
    	{
    	}
    }
	
	/**
	 * Obtiene si alguno de los precios obtenidos es distinto de 0
	 * @param {Object} datos
	 */
    function tienePrecios(datos){
        for (var i = 0; i < datos.length; i++) {
			if (datos[i] != null) {
                var mes = datos[i].listaPreciosMes;            
                for (var j = 0; j < mes.length; j++) {
                    if (mes[j] > -1) {
                        return i;
                    }
                }
            }            
        }
        return -1;
    }
	
	/**
	 * En funcion del precio de ida de referencia adecua los precios de vuelta
	 * @param {Object} datos
	 * @param {Object} precioIdaReferencia
	 */
    function adecuarPreciosVuelta(datos, precioIdaReferencia){
        var salida = datos;
        for (var i = 0; i < datos.listaDatosMeses.length; i++) {
            if (datos.listaDatosMeses[i] != null) {
                var mes = datos.listaDatosMeses[i].listaPreciosMes;
                for (var j = 1; j <= datos.listaDatosMeses[i].diasMes; j++) {
                    if (mes[j] > 0) {
                        salida.listaDatosMeses[i].listaPreciosMes[j] = mes[j] - precioIdaReferencia;
                    }
                    
                }
            }
        }
        return salida;
    }
	
	
	/**
	 * Aplica el porcentaje obtenido de bdd para los precios de ida
	 * @param {Object} datos
	 * @param {Object} porcentaje
	 */
    function adecuarPreciosIda(datos, porcentaje){
        var salida = datos;
        porcentaje /= 100;
        for (var i = 0; i < datos.listaDatosMeses.length; i++) {
            if (datos.listaDatosMeses[i] != null) {
                var mes = datos.listaDatosMeses[i].listaPreciosMes;
                for (var j = 1; j <= datos.listaDatosMeses[i].diasMes; j++) {
                    if (mes[j] > -1) {
                        salida.listaDatosMeses[i].listaPreciosMes[j] = (mes[j] * porcentaje).toFixed();
                    }
                    else {
                        salida.listaDatosMeses[i].listaPreciosMes[j] = -1;
                    }
                    
                }
            }
        }
        return salida;
    }
	
	
	

    /**
     * Realiza la llama a los servlest asincronamente y establece en las atributos
     * locales los datos necesarios para el funcionamiento del diagrama de barras
     * @param {Object} url
     * @param {Object} tipoBarra
     * @param {Object} tipoVuelo
     */
    function obtenerDatosAjax(url, tipoBarra, tipoVuelo){
        dojo.xhrGet({
            url: url,
            preventCache: true,
            handleAs: "json",
            handle: function(data, args){
                if (data != null) {
                    _datosJson = data;
                     
                    if (tipoBarra == 'simple') {

						var primerMesValido = tienePrecios(data.listaDatosMeses);
                        if ( primerMesValido != -1) {
							setDatosIda(data);
                            obtenerDatosSimple(data,primerMesValido);
                        }
                        else {
                            dojo.style(dojo.byId('loading-contenedor-' + _divDestinoIda), 'display', 'none');
                            dojo.style(dojo.byId(_divDestino), 'display', 'none');
                        }
                    }
                    else {
                        if (tipoVuelo == 'ida') {
							var primerMesValido = tienePrecios(data.listaDatosMeses);
                            if (primerMesValido != -1) {

								//Establecemos el mes seleccionado inicial
								setMesIdaSeleccionado(0);
								setPorcentaje(data.porcentaje);
								var datosModificadosVuelta = data;
                                datosModificadosVuelta = adecuarPreciosIda(data,getPorcentaje());
								setDatosIda(datosModificadosVuelta);
                                obtenerDatosSimple(datosModificadosVuelta,primerMesValido);
                            }
                            else {
                                dojo.style(dojo.byId('loading-contenedor-' + _divDestinoIda), 'display', 'none');
                                dojo.style(dojo.byId(_divDestino), 'display', 'none');
                            }
                        }
                        else {
							    var datosModificadosVuelta = data;
								datosModificadosVuelta = adecuarPreciosVuelta(data,_datosPreciosMesIda[_diaSeleccionadoIda]);
								setDatosVuelta(datosModificadosVuelta);
                                obtenerDatosCompuestoVuelta(datosModificadosVuelta,0);
								setDatosMesSeleccionadoVuelta(datosModificadosVuelta.listaDatosMeses[0]);

                        }
                    }
                }
                else {
                    dojo.style(dojo.byId('loading-contenedor-' + _divDestinoIda), 'display', 'none');
                    dojo.style(dojo.byId(_divDestino), 'display', 'none');
                    
                }
                
            },
            load: function(){
                  dojo.style(dojo.byId('options'), 'visibility', 'visible');
            }
        });
    }
			

 

    /**
     * Obtenemos los datos de los precios de vuelos de vuelta
     * @param {Object} datosJson
     */ 
    function obtenerDatosCompuestoVuelta(datosJson,primerMesValido)
    {
                    
        var divAux = dojo.byId(_divDestinoVuelta);
        if (divAux == null || divAux == undefined) {
            
            
            var listaDatosMesesVuelta = datosJson.listaDatosMeses;
            _listaDatosMesesVuelta = listaDatosMesesVuelta;
            var tipoVuelo = 'Vuelta';
            
            var div = document.createElement('div');
            dojo.attr(dojo.byId(div), 'id', _divDestinoVuelta);
            
            if (div != undefined && div != null) {
				
                dojo.place(div, dojo.byId(_divDestinoIda), "after");
                
                //Invertimos el orden por ser la vuelta
                
				
				Layout(_divDestinoVuelta, tipoVuelo);
				setLayoutMensaje(datosJson.datosVuelo.destino.nombreDepurado, datosJson.datosVuelo.origen.nombreDepurado, tipoVuelo);
				
                
                var datosMesActual = listaDatosMesesVuelta[0];
                var diaFechaIda = _diaSeleccionadoIda;

                
                //Esto para los manejadores dependiendo del mes seleccionado.
                _datosPreciosVueltaMes = datosMesActual.listaPreciosMes;
                
                //Cogemos los datos del mes actual para pintar las barras y los dias del footer             
                var datosMesNecesarios = formateaLista(datosMesActual.listaPreciosMes, diaFechaIda, datosMesActual.diasMes);
                
                //Creamos los div
                Footer(datosMesActual.primerFinde, datosMesActual.diasMes, 'barras-footer', _anchoBarra, _offsetLeftDivBarra, _topFooter, tipoVuelo);
                Barras(datosMesNecesarios, diaFechaIda, datosMesActual.diasMes, 'barras-barritas', _anchoBarra, _offsetLeftBarra, tipoVuelo,primerMesValido);
                
                var mesesSel = rellenaMesesConsulta(new Number(datosMesActual.mes));
                DivMeses('barras-meses', _anchoMes, mesesSel, _offSetMeses, tipoVuelo, primerMesValido);
                
                iniciarHover(tipoVuelo);
				
				//Quitamos los loading
				dojo.style(dojo.byId('loading-contenedor-'+_divDestinoVuelta), 'display','none');
				
            }
        }
        
    }
	
	

	
	
	/**
	 * Funcion que obtiene y maneja los datos en el diagrama de precios para los 
	 * vuelos simples
	 * @param {Object} datosJson
	 */
    function obtenerDatosSimple(datosJson,primerMesValido){
            
		setListaDatosMesesIda(datosJson.listaDatosMeses);
        var tipoVuelo = 'Ida';
		
		setLayoutMensaje(datosJson.datosVuelo.origen.nombreDepurado, datosJson.datosVuelo.destino.nombreDepurado, tipoVuelo);
		
        
        var datosMesActual = getDatosMesIda(0);
        _diaActual = datosJson.diaActual;
        setDatosMesSeleccionadoIda(datosMesActual);
        _mesInicio = datosMesActual.mes;
		
		var preciosMesSeleccionado = datosMesActual.listaPreciosMes;
        
        //Esto para los manejadores dependiendo del mes seleccionado.
        _datosPreciosMesIda = datosMesActual.listaPreciosMes;
        
        //Cogemos los datos del mes actual para pintar las barras y los dias del footer  
		if(getTipoBarra()=='compuesto'){
			_datosPreciosMesIda = preciosMesSeleccionado;
        }           
        var datosMesNecesarios = formateaLista(preciosMesSeleccionado, _diaActual, datosMesActual.diasMes);
        
        
        
        
        //Creamos los div
        Footer(datosMesActual.primerFinde, datosMesActual.diasMes, 'barras-footer', _anchoBarra, _offsetLeftDivBarra, _topFooter, tipoVuelo);
        Barras(datosMesNecesarios, _diaActual, datosMesActual.diasMes, 'barras-barritas', _anchoBarra, _offsetLeftBarra, tipoVuelo,primerMesValido);
        
		iniciarHover(tipoVuelo);
        
        
        //var mesesSel = rellenaMesesConsulta(new Number(datosMesActual.mes));
		var mesesSel = rellenaMesesConsulta(new Number(datosMesActual.mes));
        DivMeses('barras-meses', _anchoMes, mesesSel, _offSetMeses, tipoVuelo, 0);
        
        dojo.style(dojo.byId('loading-contenedor-' + _divDestinoIda), 'display', 'none');
		
        dojo.style(dojo.byId(_divDestinoIda), 'visibility', 'visible');
		dojo.style(dojo.byId(_divDestinoIda),'display', '');
        
    }
	
	/**
	 * Elimina recursivamente los hijos de un elemento perteneciente al DOM
	 * @param {Object} domNode
	 */
    function borrarHijos(domNode){
        if (domNode != null && domNode != undefined) {
            while (domNode.firstChild != null) {
                domNode.removeChild(domNode.firstChild);
            }
        } 
    }
	
    /**
     * Genera las barras a partir de los parametros
     * 
     * @param {Object} datosMesNecesarios
     * @param {Object} diaInicio
     * @param {Object} diasMes
     * @param {Object} divDestino
     * @param {Object} anchoBarra
     * @param {Object} offsetLeftBarra
     * @param {Object} tipoVuelo
     * @param {Object} primerMesValido
     */
    function Barras(datosMesNecesarios, diaInicio, diasMes, divDestino, 
    		anchoBarra, offsetLeftBarra, tipoVuelo,primerMesValido)
    {        		
		var div = dojo.byId(divDestino+'-'+tipoVuelo); 
		
		borrarHijos(div);

        var datosLocales = getDatosIda();
		
		var origen = '';
		var destino = '';
		if(tipoVuelo == 'Ida'){
			origen = datosLocales.datosVuelo.origen.nombreDepurado;
			destino = datosLocales.datosVuelo.destino.nombreDepurado;
		}else{
			origen = datosLocales.datosVuelo.destino.nombreDepurado;
			destino = datosLocales.datosVuelo.origen.nombreDepurado;
		}
        
        if (div != undefined && div != null) {         
            var maxValue = maximoAPintar(buscarMaximo(datosMesNecesarios, Number(diaInicio), datosMesNecesarios.length-1));                                    
            var heightTam = dojo.style(div, 'height');
            var factor = Math.floor(heightTam *0.9);             

            //Iniciamos las barras
            for (var i = parseInt(diaInicio, 10); i <= diasMes; ++i) {				
				var left = new Number(offsetLeftBarra+(anchoBarra * (i-1)));
					
				//Ecualizamos los valores
				var height = 0;
                
                if (maxValue != 0) {
                    if (datosMesNecesarios[i] == 0) {
                        height = 5;
                    }
                    else {
                        height = Number(Math.ceil(factor * (datosMesNecesarios[i] / maxValue)));
                        if (height > factor) {
                            height = factor;
                        }
                        else {
                            if (height < 0) {
                                height = 0;
                            }
                        }
                    }
                    
                }
                else {
                    height = 0;
                }
        	     
        	        
            	var nombre = 'div' + i + '-' + tipoVuelo;
				var title = '';	
				var precio = datosMesNecesarios[i];	
				
				
			
				if(precio > 0){
					title = loc.label.mensajeFlotanteParte1;
	                title += origen +' - ';
	                title += destino;   
					title += loc.label.mensajeFlotanteParte2;
					title += precio;
                    title += loc.label.mensajeFlotanteParte3;
				}else{
					title = origen +' - ';
                    title += destino;   
				}
					
				
                var divExterno = document.createElement("div");
				var divInterno = document.createElement("div");
         
   	            dojo.addClass(divExterno, 'barra-externa');		    	            
				dojo.attr(divExterno, 'id',  'barra-externa' + '-' + nombre);							    	                	                   

				dojo.style(divExterno, {
					position: 'absolute',
                    left: left.toString() + 'px',
                   	height: heightTam + 'px',
					cursor: 'pointer'
				});		

         		dojo.attr(divInterno, 'id', 'barra-interna' + '-' + nombre);			
				dojo.addClass(divInterno, 'barra-interna');	
				dojo.style(divInterno, {
					position: 'absolute'
				});	                 
				
				var imagen = document.createElement('img');
				dojo.attr(imagen, 'id', 'barraImg');
				dojo.attr(imagen, 'src', '/pictures/barraInactiva.gif');	
				dojo.style(imagen, {
	                  height: height.toString() + 'px'
				});	 					

				divInterno.appendChild(imagen);				
			    divInterno.setAttribute('label',title);

				
				divExterno.appendChild(divInterno);
				divExterno.setAttribute('label',title);
                div.appendChild(divExterno);
				         
				
            }
		    if(maxValue > 0){
				Precios(maxValue, tipoVuelo);
			}else{
				pintarNoPrecio(div);
			}
		    
			rmb.seo.toolTip.ToolTipClass('.barra-externa');
			rmb.seo.toolTip.ToolTipClass('.barra-interna');
			

						
        }       
    }
	
	/**
	 * 
	 * @param {Object} divDestino
	 */
	function pintarNoPrecio(divDestino)
	{
		var divSinPrecio = document.createElement('div');
		divSinPrecio.setAttribute('id',divDestino.getAttribute('id')+'-sin-precio');
		//divSinPrecio.setAttribute('class',divDestino.getAttribute('class')+'-sin-precio');
		divSinPrecio.setAttribute('class','no-price');
		divSinPrecio.innerHTML = loc.label.sinPrecios;
		divDestino.appendChild(divSinPrecio);
	}
	
	
	/**
	 * Crea la barra de precios del diagrama
	 * 
	 * @param {Object} maximo
	 * @param {Object} tipoVuelo
	 */
	function Precios(maximo, tipoVuelo)
	{			
		//Iniciamos los indicadores de precios
		var paso = maximo/4;
		var barrasPrecios = dojo.byId('barras-escala-precios' + '-' + tipoVuelo);	
		
		
		//Borramos la escala previa en caso de que exista
        borrarHijos(barrasPrecios);
								
		var valor = maximo;
		var i = 0;
		
		while(valor >=0 && i<=4){
			div = document.createElement('div');			
			dojo.attr(div, 'id', 'precio'+i+'-'+tipoVuelo);			
			dojo.addClass(div, 'precio');					
			
			divPrecioTexto = document.createElement('div');
			dojo.attr(divPrecioTexto, 'id', 'precioTexto'+i+'-'+tipoVuelo);			
			dojo.addClass(divPrecioTexto, 'precioTexto');					
			
			divPrecioTexto.appendChild(document.createTextNode(valor+String.fromCharCode(8364)));			
			div.appendChild(divPrecioTexto);
			
			barrasPrecios.appendChild(div);
			i++;
			valor = valor - paso;
		}
	}
	
	/**
	 * Manejador que atiende los eventos (MouseOver) en las barras del diagrama
	 * 
	 * @param {Object} event
	 */
    function manejadorBarrasMouseOver(objeto, event, tipoVuelo){

        var barraExterna = objeto;
   	    var barraInterna = barraExterna.firstChild;        
       	     	       	
		var id = barraInterna.id.substring(17, barraInterna.id.length - tipoVuelo.length-1);
		var precioValue = _datosPreciosMesIda[id.valueOf()];
		var posicionRestaTop = 0;
		
		if (tipoVuelo=='Vuelta'){
			precioValue = _datosPreciosVueltaMes[id.valueOf()];
			posicionRestaTop = 200;
		}
				
		//if (precioValue > -1){	
		    				
	        var diaComparar;
	
	        if(tipoVuelo == 'Ida'){
	            diaComparar = getDiaSeleccionadoIda();
	        }else{
	            diaComparar = getDiaSeleccionadoVuelta()
	        }	
									
		    var dia = dojo.byId('dia'+id+ '-' + tipoVuelo);
			//cambio de imagen o de color

			dojo.attr(barraExterna, 'class', 'barra-externa-hover');
			dojo.attr(barraInterna, 'class', 'barra-interna-hover');
			
		
			var imagen = dojo.query("#" +barraInterna.id+ ' img')[0];
			dojo.attr(imagen, 'src', '/pictures/barraActiva.gif');	
        		
			//cambiamos el color de dia
			
			if(dia != undefined)
			{
				if(dojo.hasClass(dia,'dia'))
				{
					dojo.removeAttr(dia, 'class');
					dojo.attr(dia, 'class', 'diaHover');						
				}
				if(dojo.hasClass(dia,'finde'))
				{
					dojo.removeAttr(dia, 'class');
					dojo.attr(dia, 'class', 'findeHover');	
				
				}
			}
		//}		
    }
    
	/**
	 * Manejador que atiende los eventos (MouseOut) en las barras del diagrama
	 * 
	 * @param {Object} event
	 */
    function manejadorBarrasMouseOut(objeto, event, tipoVuelo){
        var barraExterna = objeto;
   	    var barraInterna = barraExterna.firstChild;
        
		var id = barraInterna.id.substring(17, barraInterna.id.length - tipoVuelo.length-1);		
    
	    var diaComparar;

        if(tipoVuelo == 'Ida'){
			diaComparar = getDiaSeleccionadoIda();
		}else{
			diaComparar = getDiaSeleccionadoVuelta()
		}

        dojo.attr(barraExterna, 'class', 'barra-externa');        
        
        var imagen = dojo.query("#" + barraInterna.id + ' img')[0];
        
        //Si el dia al que estamos aplicando el hover es el dia seleccionado 
        if (id == diaComparar) {
            dojo.attr(barraInterna, 'class', 'barra-interna-selected');
        }
        else {
            dojo.attr(barraInterna, 'class', 'barra-interna');
            dojo.attr(imagen, 'src', '/pictures/barraInactiva.gif');
            
            //cambiamos el color de dia
            var dia = dojo.byId('dia' + id + '-' + tipoVuelo);
            if (dia != undefined) {
                if (dojo.hasClass(dia, 'diaHover')) {
                    dojo.removeAttr(dia, 'class');
                    dojo.attr(dia, 'class', 'dia');
                }
                if (dojo.hasClass(dia, 'findeHover')) {
                    dojo.removeAttr(dia, 'class');
                    dojo.attr(dia, 'class', 'finde');
                }
                
            }
        }
    }
    
	/**
	 * Manejador que atiende los eventos (click) en las barras del diagrama
	 * 
	 * @param {Object} objeto
	 * @param {Object} event
	 * @param {Object} tipoVuelo
	 */	
    function manejadorBarrasClick(objeto, event, tipoVuelo){
        var barraExterna = objeto;
        var barraInterna = barraExterna.firstChild;
        
        var id = barraInterna.id.substring(17, barraInterna.id.length - tipoVuelo.length - 1);
        var precioValue = _datosPreciosMesIda[id.valueOf()];
        
        if (tipoVuelo == 'Vuelta') {
            precioValue = _datosPreciosVueltaMes[id.valueOf()];
        }        
        
        var diaSel = new Number(getDiaSeleccionadoIda());
        
        if (tipoVuelo == 'Ida') {
            setDiaSeleccionadoIda(id);
        }
        else {
            diaSel = getDiaSeleccionadoVuelta();
            setDiaSeleccionadoVuelta(id);
        }
        
        if (barraExterna != undefined && barraInterna != undefined) {
            //Si existe una barra previamente clicada     
            if (diaSel != -1) {
                var barraAnteriorExterna = dojo.byId('barra-externa-div' + diaSel + '-' + tipoVuelo);
                if (barraAnteriorExterna != null) {
                
                    var barraAnteriorInterna = barraAnteriorExterna.firstChild;
                    
                    barraAnteriorExterna.onmouseover = function(event){
                        manejadorBarrasMouseOver(this, event, tipoVuelo);
                    };
                    barraAnteriorExterna.onmouseout = function(event){
                        manejadorBarrasMouseOut(this, event, tipoVuelo);
                    };
                    
                    dojo.removeAttr(barraAnteriorExterna, 'class');
                    dojo.removeAttr(barraAnteriorExterna, 'class');
                    dojo.attr(barraAnteriorExterna, 'class', 'barra-externa');
                    dojo.attr(barraAnteriorInterna, 'class', 'barra-interna');
                    
                    var imagen = dojo.query("#" + barraAnteriorInterna.id + ' img')[0];
                    dojo.attr(imagen, 'src', '/pictures/barraInactiva.gif');
                    
                }
				 
                //cambiamos el color de dia
                var dia = dojo.byId('dia' + diaSel + '-' + tipoVuelo);
                if (dojo.hasClass(dia, 'diaHover')) {
                    dojo.removeAttr(dia, 'class');
                    dojo.attr(dia, 'class', 'dia');
                }
                if (dojo.hasClass(dia, 'findeHover')) {
                    dojo.removeAttr(dia, 'class');
                    dojo.attr(dia, 'class', 'finde');
                }
            }
            
            diaSel = id;
            
            dojo.attr(barraExterna, 'class', 'barra-externa-hover');
            dojo.attr(barraInterna, 'class', 'barra-interna-selected');
            
            //cambiamos el color de dia
            var dia = dojo.byId('dia' + diaSel + '-' + tipoVuelo);
            
			if (dojo.hasClass(dia, 'dia') || dojo.hasClass(dia, 'diaHover')) {
                dojo.removeAttr(dia, 'class');
                dojo.attr(dia, 'class', 'diaHover');
            }
            if (dojo.hasClass(dia, 'finde') || dojo.hasClass(dia, 'findeHover')) {
                dojo.removeAttr(dia, 'class');
                dojo.attr(dia, 'class', 'findeHover');
            }
            
            var mesSeleccionadoLocal = null;
            if (tipoVuelo == 'Ida') {
                mesSeleccionadoLocal = getDatosMesSeleccionadoIda();
            }
            else {
                mesSeleccionadoLocal = getDatosMesSeleccionadoVuelta();
            }
            
            var mesCorrecto = new Number(mesSeleccionadoLocal.mes + 1);
            
            var fechaElegida = new String(obtenerRepresentacionFecha(diaSel, mesCorrecto, mesSeleccionadoLocal.anyo));
            
            if (tipoVuelo == 'Ida') {
            	if(rmbui.air.searchBox)
            	{
                	rmbui.air.searchBox.calendarDep.setDate(Date.parse(fechaElegida));
            	}
            	if(rmbui.air.ui && rmbui.air.ui.searchBoxImproved)
            	{
            		rmbui.air.ui.searchBoxImproved.calendarDep.setDate(Date.parse(fechaElegida));
            	}
				setInformacionIda(fechaElegida,precioValue);
				resetInformacionTotal();
				resetInformacionVuelta();
				
				setFechaIda(fechaElegida);
                dojo.byId('depDate').value = fechaElegida;

                    //Mostramos el Div de la vuelta
                    clearDiv(_divDestinoVuelta);
                    Loading(_divDestinoVuelta);
                    obtenerVuelta();
				
            }
            else 
			{
				if(rmbui.air.searchBox)
				{
                	rmbui.air.searchBox.calendarRet.setDate(Date.parse(fechaElegida));
				}
				if(rmbui.air.ui && rmbui.air.ui.searchBoxImproved)
				{
					rmbui.air.ui.searchBoxImproved.calendarRet.setDate(Date.parse(fechaElegida));
				}

                setInformacionVuelta(fechaElegida,precioValue);
                modificarPrecioTotal(precioValue,'Compuesto');  

                _fechaVuelta = fechaElegida;
                dojo.byId('retDate').value = fechaElegida;
                
            }            
        }  
    }
	
	
	/**
	 * 
	 * @param {Object} objeto
	 * @param {Object} event
	 * @param {Object} tipoVuelo
	 */
    function manejadorBarrasClickSimple(objeto, event, tipoVuelo){
        var barraExterna = objeto;
        var barraInterna = barraExterna.firstChild;
        
        var id = barraInterna.id.substring(17, barraInterna.id.length - tipoVuelo.length - 1);
        var precioValue = _datosPreciosMesIda[id.valueOf()];
        
        
            var diaSel = getDiaSeleccionadoIda();
            
            setDiaSeleccionadoIda(id);
            
            
            if (barraExterna != undefined && barraInterna != undefined) {
                //Si existe una barra previamente clicada     
                if (diaSel != -1) {
                    var barraAnteriorExterna = dojo.byId('barra-externa-div' + diaSel + '-' + tipoVuelo);
                    var barraAnteriorInterna = barraAnteriorExterna.firstChild;
                    
                    barraAnteriorExterna.onmouseover = function(event){
                        manejadorBarrasMouseOver(this, event, tipoVuelo);
                    };
                    barraAnteriorExterna.onmouseout = function(event){
                        manejadorBarrasMouseOut(this, event, tipoVuelo);
                    };
                    
                    dojo.removeAttr(barraAnteriorExterna, 'class');
                    dojo.removeAttr(barraAnteriorExterna, 'class');
                    dojo.attr(barraAnteriorExterna, 'class', 'barra-externa');
                    dojo.attr(barraAnteriorInterna, 'class', 'barra-interna');
                    
                    var imagen = dojo.query("#" + barraAnteriorInterna.id + ' img')[0];
                    dojo.attr(imagen, 'src', '/pictures/barraInactiva.gif');
                    
                    //cambiamos el color de dia
                    var dia = dojo.byId('dia' + diaSel + '-' + tipoVuelo);
                    if (dojo.hasClass(dia, 'diaHover')) {
                        dojo.removeAttr(dia, 'class');
                        dojo.attr(dia, 'class', 'dia');
                    }
                    if (dojo.hasClass(dia, 'findeHover')) {
                        dojo.removeAttr(dia, 'class');
                        dojo.attr(dia, 'class', 'finde');
                    }
                }
                
                diaSel = id;
                barraExterna.onmouseout = null;
                barraExterna.onmouseover = null;
                
                dojo.attr(barraExterna, 'class', 'barra-externa-hover');
                dojo.attr(barraInterna, 'class', 'barra-interna-selected');
                
                //cambiamos el color de dia
                var dia = dojo.byId('dia' + diaSel + '-' + tipoVuelo);
                if (dojo.hasClass(dia, 'dia')) {
                    dojo.removeAttr(dia, 'class');
                    dojo.attr(dia, 'class', 'diaHover');
                }
                if (dojo.hasClass(dia, 'finde')) {
                    dojo.removeAttr(dia, 'class');
                    dojo.attr(dia, 'class', 'findeHover');
                }
                
                var mesSeleccionadoLocal = null;
                if (tipoVuelo == 'Ida') {
                    mesSeleccionadoLocal = getDatosMesSeleccionadoIda();
                }
                else {
                    mesSeleccionadoLocal = getDatosMesSeleccionadoVuelta();
                }
                var mesCorrecto = mesSeleccionadoLocal.mes + 1;
                //var fechaElegida = diaSel + '/' + mesCorrecto + '/' + mesSeleccionadoLocal.anyo;
                var fechaElegida = new String(obtenerRepresentacionFecha(diaSel, mesCorrecto, mesSeleccionadoLocal.anyo));

                
                
                setFechaIda(fechaElegida);
                dojo.byId('depDate').value = fechaElegida;
                
                if(rmbui.air.searchBox)
                {
                	rmbui.air.searchBox.calendarDep.setDate(Date.parse(fechaElegida));
                }
                if(rmbui.air.ui && rmbui.air.ui.searchBoxImproved)
                {
                	rmbui.air.ui.searchBoxImproved.calendarDep.setDate(Date.parse(fechaElegida));
                }
				
                setInformacionIda(fechaElegida,precioValue);
				resetInformacionTotal();
				modificarPrecioTotal(precioValue,'Simple');  
                
            }

    }
	
	
	   /**
     * Convierte un conjunto de datos formado por el dia, el mes y el año en
     * una string con el formato dd/MM/yyyy
     * @param {Object} dia
     * @param {Object} mes
     * @param {Object} anyo
     */
    function obtenerRepresentacionFecha(dia, mes, anyo){
        var result = new String();
        
        var representacionDia = new String();
        if (dia < 10) {
            representacionDia = '0' + dia;
        }else{
            representacionDia = dia;
        }
        
        var representacionMes = new String();
        if (mes < 10) {
            representacionMes = '0' + mes;
        }else{
            representacionMes = mes;
        }

        result = representacionDia + '/'+ representacionMes + '/' + anyo;       
        return result;
    }



    /**
     * Inicia los manejadores de las barritas
     * 
     * @param {Object} tipoVuelo
     */
	function iniciarHover(tipoVuelo)
	{		 		
		var barraExtHover;
		var	behaviorBarraExt = new Object();
				
		if (tipoVuelo != 'Vuelta') {
				barraExtHover = "." + _divDestinoIda + " .barra-externa";
		}else {
			 barraExtHover = "." + _divDestinoVuelta + ' .barra-externa';
		}		
		
		var links = dojo.query(barraExtHover);

     	for (var i = 0; i < links.length; ++i) {
     		var	barraI = links[i];
     		
            //Si el tipo de barra es vuelta al hacer click en las idas
            //se abren la barra de vueltas
            if (_tipoBarra == 'compuesto') {
				barraI.onclick = function(event){
					manejadorBarrasClick(this, event, tipoVuelo);
				};
			}else{
			    barraI.onclick = function(event){
                    manejadorBarrasClickSimple(this, event, tipoVuelo);
                };
			}

     		barraI.onmouseover = function(event){
     			manejadorBarrasMouseOver(this, event,tipoVuelo);
     		};
     		barraI.onmouseout = function(event){
     			manejadorBarrasMouseOut(this, event,tipoVuelo);
     		};	
		}
		                
	}
	
	
    /**
     * Elimina los datos innecesarios de la lista a partir de la fecha de inicio.
     * lo hace desde el 1 hasta el final porque las fechas est?n as? determinadas, no podemos hacerlo
     * de 0 a tamanyo-1.
     * 
     * @param {Object} datos
     * @param {Object} inicio
     * @param {Object} fin
     */
	function formateaLista(datos, inicio, fin)
	{
		var fDatos = new Array();	
		var j = parseInt(inicio, 10);
		
        for (var i = j; i <= fin; ++i) {
			fDatos[j] = datos[i];			
			j++;
        }
        
		return fDatos;	
	}
	
    /**
     * Le pondremos a los id el divDestino para diferenciar si es vuelo Ida o Vuelta
     * pasandole los datosVuelo para diferenciar origen y destino uno de otro.
     * 
     * @param {Object} divDestino
     * @param {Object} tipoVuelo
     */
	function Layout(divDestino, tipoVuelo)
	{			
		var div = dojo.byId(divDestino);	
		dojo.addClass(divDestino, divDestino);
		
		//barrasCabecera		
		var barrasCabecera = document.createElement('div'); 				
		dojo.attr(barrasCabecera, 'id', 'barras-cabecera'+'-'+tipoVuelo);			
		dojo.addClass(barrasCabecera, 'barras-cabecera');		
		
		//barrasMensaje
		var barrasMensaje = document.createElement('div');
			barrasMensaje.innerHTML='<span>'+ loc.label.vuelos +' ' + 'origen' +' - '
        		+  'destino' +': </span>';
			
			dojo.attr(barrasMensaje, 'id', 'barras-mensaje'+'-'+tipoVuelo);			
			dojo.addClass(barrasMensaje, 'barras-mensaje');		
								
			barrasCabecera.appendChild(barrasMensaje);
		
		//barrasMeses
		var barrasMeses = document.createElement('div');		

			dojo.attr(barrasMeses, 'id', 'barras-meses'+'-'+tipoVuelo);			
			dojo.addClass(barrasMeses, 'barras-meses');		

			barrasCabecera.appendChild(barrasMeses);
			
			
		div.appendChild(barrasCabecera);
		
		
		//barrasBody
		var barrasBody = document.createElement('div');		
		dojo.attr(barrasBody, 'id', 'barras-body'+'-'+tipoVuelo);			
		dojo.addClass(barrasBody, 'barras-body');			
		
		//barrasEscalaPrecios
		var barrasEscalaPrecios = document.createElement('div');
		dojo.attr(barrasEscalaPrecios, 'id', 'barras-escala-precios'+'-'+tipoVuelo);			
		dojo.addClass(barrasEscalaPrecios, 'barras-escala-precios');		

			barrasBody.appendChild(barrasEscalaPrecios);			
			
			
		//barrasBarritas
		var barrasBarritas = document.createElement('div');
		dojo.attr(barrasBarritas, 'id', 'barras-barritas'+'-'+tipoVuelo);			
		dojo.addClass(barrasBarritas, 'barras-barritas');	
					
			barrasBody.appendChild(barrasBarritas);
			
		div.appendChild(barrasBody);
		
		//barrasFooter		
		var barrasFooter = document.createElement('div');
		dojo.attr(barrasFooter, 'id', 'barras-footer'+'-'+tipoVuelo);			
		dojo.addClass(barrasFooter, 'barras-footer');				
			
		div.appendChild(barrasFooter);
		
							

	}
	
	
    /**
     * Formatea el div determinado
     * 
     * @param {Object} divDeterminado
     */
	function clearDiv(divDeterminado){
		var div = dojo.byId(divDeterminado);
		if (div != null) {		
			var padre = div.parentNode;		
			padre.removeChild(div);
		}
	}
		
	
	/**
	 * 
	 * @param {Object} divDestino
	 */	
	function Footer(primerFindeMes, diasMes, divDestino, anchoDias, offset, topFooter, tipoVuelo){
		
		var div = dojo.byId(divDestino+'-'+tipoVuelo);
		
		borrarHijos(div);

		var elemento;
		
		for (var i = 1; i <= diasMes; ++i) {
			var esFinde = i%7 - primerFindeMes; 
			var left = new Number(offset+(anchoDias * (i-1)));
			
			elemento = document.createElement('div');
			dojo.attr(elemento, 'id', 'dia'+i+'-'+tipoVuelo);
			dojo.style(elemento, {
				position: 'absolute',
				top: topFooter + 'px',
                left: left.toString() + 'px'
			});					
			
			dojo.style(elemento, '/top', new Number(topFooter+2) + 'px');									
			
				
		
			if( esFinde == 0 || esFinde==1 || esFinde==-7 || esFinde==-6)
			{						
				dojo.addClass(elemento, 'finde');				
			}
			else
			{
				dojo.addClass(elemento, 'dia');
			}
						
			divPrecioTexto = document.createElement('div');
			dojo.attr(divPrecioTexto, 'id', 'diaTexto'+i+'-'+tipoVuelo);

			if( esFinde == 0 || esFinde==1 || esFinde==-7 || esFinde==-6)
			{
				dojo.addClass(divPrecioTexto, 'findeTexto');
			}
			else{
				dojo.addClass(divPrecioTexto, 'diaTexto');
			}
								
			divPrecioTexto.appendChild(document.createTextNode(i));			
			elemento.appendChild(divPrecioTexto);			
			div.appendChild(elemento);
		}	

	}
	
	/**
	 * 
	 * @param {Object} objeto
	 * @param {Object} event
	 * @param {Object} tipoVuelo
	 */
	function manejadorClickMeses(objeto, event, tipoVuelo)
	{		
		var id = objeto.getAttribute('id').substring(3,4);

        //Establecemos esta global para los manejadores
		
		if(tipoVuelo == 'Ida'){
	       datosLocales = getDatosIda();
		   
		   
		   //Borramos las vueltas
		   clearDiv(_divDestinoVuelta);
           Loading(_divDestinoIda);
		   
		   
		}else
		{
			datosLocales = getDatosVuelta();
		}
		
        var origen = datosLocales.datosVuelo.origen.nombreDepurado;
        var destino = datosLocales.datosVuelo.destino.nombreDepurado;  
        var divDestino = _divDestinoIda;    
        var mesInicioSeleccionado = _mesInicio;	    
	         
		var diasMesSeleccionado = null;
        var preciosMesSeleccionado = null;
        var primerFindeMesSeleccionado = null; 
			 
	    if (tipoVuelo == 'Ida'){
			setDatosMesSeleccionadoIda(getDatosMesIda(id));
   			setMesIdaSeleccionado(id); 
	        _datosPreciosMesIda = getDatosMesSeleccionadoIda().listaPreciosMes;	
			diasMesSeleccionado = getDatosMesSeleccionadoIda().diasMes;
            preciosMesSeleccionado = getDatosMesSeleccionadoIda().listaPreciosMes;
            primerFindeMesSeleccionado = getDatosMesSeleccionadoIda().primerFinde;  

	    }
        else{
	        setDatosMesSeleccionadoVuelta(_listaDatosMesesVuelta[id]);
	        _datosPreciosVueltaMes = getDatosMesSeleccionadoVuelta().listaPreciosMes;	  
  			destino = origen;
  			origen = _datosJson.datosVuelo.destino.nombreDepurado;
  			divDestino = _divDestinoVuelta;	
            mesInicioSeleccionado = mesInicioSeleccionado + new Number(getMesIdaSeleccionado()); 
			diasMesSeleccionado = getDatosMesSeleccionadoVuelta().diasMes;
            preciosMesSeleccionado = getDatosMesSeleccionadoVuelta().listaPreciosMes;
            primerFindeMesSeleccionado = getDatosMesSeleccionadoVuelta().primerFinde; 
			
			resetInformacionTotal();

        }        
		

        var datosMesNecesarios;
	    
	    //Formatea los div seg?n el mes elegido
		clearDiv('barras-footer' + '-' + tipoVuelo);             
		clearDiv('barras-barritas' + '-' + tipoVuelo);
		clearDiv('barras-cabecera' + '-' + tipoVuelo);			
		clearDiv('barras-escala-precios' + '-' + tipoVuelo);

		
		//Eliminamos los handler de los meses
		
					
		//Correctamente establecidos al inicio
		Layout(divDestino,tipoVuelo);	
		setLayoutMensaje(origen, destino, tipoVuelo);
		
		var diaInicioTratamiento = 1;		
		
		//Diferenciamos entre los tipos de vuelo, para saber desde qu? d?a hacemos el tratamiento
		//Por defecto ser? 1
		if (id == 0 && tipoVuelo == 'Ida') {
			diaInicioTratamiento = _diaActual;
		}
		else if (id == 0 && tipoVuelo == 'Vuelta') {				
			diaInicioTratamiento = getDiaSeleccionadoIda();																																        
		}
		
	    var datosMesNecesarios = formateaLista(preciosMesSeleccionado, diaInicioTratamiento, diasMesSeleccionado);											
		Barras(datosMesNecesarios, diaInicioTratamiento, diasMesSeleccionado, 'barras-barritas', 
				_anchoBarra, _offsetLeftBarra, tipoVuelo,id);					
						
		Footer(primerFindeMesSeleccionado, diasMesSeleccionado, 'barras-footer',
			 _anchoBarra, _offsetLeftDivBarra, _topFooter, tipoVuelo);
						
		//Elegimos el primer mes de la lista de meses tratados para pintarlo							
		var mesesSel = rellenaMesesConsulta(new Number(mesInicioSeleccionado));				
		DivMeses('barras-meses', _anchoMes, mesesSel, _offSetMeses, tipoVuelo, id);		
		
		iniciarHover(tipoVuelo);
		
		if (tipoVuelo == 'Ida') 
		{
			resetDiaSeleccionadoIda();
			dojo.style(dojo.byId('loading-contenedor-' + _divDestinoIda), 'display', 'none');
			
            //Borramos los mensajes de precios para las idas
            resetInformacionIda();
			
		}
		else
		{
			resetDiaSeleccionadoVuelta();
			resetInformacionTotal();			
		}	
		
		//Borramos los mensajes de precios para las vueltas
		resetInformacionVuelta();
		

		

	} 
	
	/**
	 * 
	 * @param {Object} divDestino
	 */		
	function DivMeses(divDestino, anchoMes, meses, offset, tipoVuelo, mesElegido){
		var div = dojo.byId(divDestino + '-' + tipoVuelo);

		borrarHijos(div);
		
		var elemento; 	
		var left = offset;	
		
		for (var i = 0; i < meses.length; ++i) {
			var mesActual = meses[i];				
			
			elemento = document.createElement('div');
			dojo.attr(elemento, 'id', 'mes'+i+ '-' + tipoVuelo);			

			dojo.addClass(elemento, 'meses');			
			if (mesElegido == i) {
				dojo.addClass(elemento, 'mesSeleccionado');				
			}
			
			//dojo.style(elemento, 'left', left.toString() + 'px');				
			//left = left + anchoMes;
            
            elemento.onclick = function(event){
     			manejadorClickMeses(this, event,tipoVuelo);
     		};	
			
			elemento.appendChild(document.createTextNode(mesActual));		
			div.appendChild(elemento);

		}	
	}	
	
	
	
		
	
    /**
     * Llamada para obtener los datos de vuelta.
     */
	function obtenerVuelta() 
	{		

		
		//Cambiamos el orden de las ciudades para obtener los datos de la vuelta
		var url = getRaizUrl() + '/servlets/vueloCompuesto.view?oriCod=' + _origenCod;
			url += '&destCod=' + _destinoCod ;
			url += '&fechaIda=' + getFechaIda();
			url += '&tipoNivel='+_tipoNivel;
			url += '&tipoVuelo=vuelta';
			url += '&idioma=' + _idioma;
			url += '&codeServicioPaisEquivalente=' + _codeServicioPaisEquivalente;
			url += '&localeCode=' + _localeCode;
			url += '&numMesesBarras=' + _numMesesBarras;
        obtenerDatosAjax(url,'compuesto','vuelta');		
			 
			 	 			 
	}			 
    
	/**
	 * 
	 * @param {Object} mesActual
	 */
    function rellenaMesesConsulta(mesActual)
    {

    	var mesesConsulta = new Array();  	
	    try
    	{	
    		
		   	mesesConsulta[0] = loc.month((mesActual)%12);
	   		mesesConsulta[1] = loc.month((mesActual+1)%12);
		   	mesesConsulta[2] = loc.month((mesActual+2)%12);      	       	       	       	       	       	       	       	       	       	       	
		   	mesesConsulta[3] = loc.month((mesActual+3)%12);
    	}
    	catch(Exception)
    	{
    		
    	}
	   	       	       	       	       	       	       	       	       	       	       	 	
    	return mesesConsulta;
    }    
    
	/**
	 * 
	 * @param {Object} maximoReal
	 */
    function maximoAPintar(maximoReal)
    {
    	var valorMaximo = maximoReal;
    	if (maximoReal > 0) {
	    	var exponente = new Number(Math.floor(Math.log(maximoReal) / Math.LN10));
			var escala = Math.pow(10,exponente);
			valorMaximo = escala * Math.ceil(maximoReal / escala);
		}
		
		return valorMaximo;
    }
	
	/**
	 * Busca el maximo valor de un array
	 * @param {Object} datos
	 */
	function buscarMaximo(datos,inicio,fin)
	{
		var maximo = 0;
        for (var i = inicio; i <= fin; ++i) {
            var item = Number(datos[i]);
           	if(item > maximo){
				maximo = item;
			}
        }
		return maximo;
	}	
	
	/**
	 * 
	 * @param {Object} divDestino
	 */
	function Loading(divDestino){
		if(dojo.byId(_divDestinoVuelta) != null ){
              clearDiv(_divDestinoVuelta);                            
        }
		clearDiv('loading-contenedor-'+divDestino);
		var div = document.createElement('div'); 
		dojo.attr(div, 'id', 'loading-contenedor-'+divDestino);					
		dojo.attr(div, 'class', 'loading-contenedor');					
		
		var mensaje1 = document.createElement('div');
		dojo.attr(mensaje1, 'id', 'loading-mensaje-1');
		div.appendChild(mensaje1);
		
		var imagen = document.createElement('img');
		dojo.attr(imagen, 'id', 'loading-img');
		dojo.attr(imagen, 'src', '/pictures/ajax-loader.gif');		

		div.appendChild(imagen);
		
		var mensaje2 = document.createElement('div');
		dojo.attr(mensaje2, 'id', 'loading-mensaje-2');		
		div.appendChild(mensaje2);		

		if (divDestino == _divDestinoIda) {
			dojo.place(div, dojo.byId(divDestino), "before");
		}
		else {		
			//Vuelta
			var divAux = dojo.byId('loading-contenedor-'+divDestino);
			if (divAux == null || divAux == undefined) {
				dojo.place(div, dojo.byId(_divDestinoIda), "after");		
			}
		}
	}	

	var inicioJS = function()
	{ 
		var myhash = {
		    	id : 'actualiza1',
		    	origenCod : _origenCod,
		    	destinoCod : _destinoCod,
				raizUrl : getRaizUrl(),
				idioma : _idioma,
				codeServicioPaisEquivalente: _codeServicioPaisEquivalente,
				servicioPais : _servicioPais,
				localeCode : _localeCode
 	    	    	
			};				

		var prueba1 = new rmb.seo.barras.ActualizarPreciosClass(myhash);
			
	    
	
		dojo.style(dojo.byId(_divDestinoIda), 'display','none');			
		
		Loading(_divDestinoIda);		
		Layout(_divDestinoIda, 'Ida');
		
		var url;

		
		if (_tipoBarra == 'compuesto') {
		      url =  getRaizUrl() + '/servlets/vueloCompuesto.view?oriCod=' + _origenCod;
		      url += '&destCod=' + _destinoCod;
		      url += '&tipoNivel=' + _tipoNivel;
		      url += '&tipoVuelo=ida';
		      url += '&idioma=' + _idioma;
		      url += '&codeServicioPaisEquivalente=' + _codeServicioPaisEquivalente;
		      url += '&localeCode=' + _localeCode;
		      url += '&numMesesBarras=' + _numMesesBarras;
		      			
			
		}else{
			url = getRaizUrl() +'/servlets/vueloSimple.view?oriCod=' + _origenCod;
            url += '&destCod=' + _destinoCod;
            url += '&tipoNivel=' + _tipoNivel;
            url += '&idioma=' + _idioma;
			url += '&codeServicioPaisEquivalente=' + _codeServicioPaisEquivalente;
			url += '&localeCode=' + _localeCode;
			url += '&numMesesBarras=' + _numMesesBarras;
		}	
		obtenerDatosAjax(url,_tipoBarra,'ida');		
		
		generarSelectorTipoVuelo();  
		//sincronizarSelectores();  
		rmb.seo.toolTip.ToolTipClass('#que_es_precio_estimado');
				     			      		
	}	
	
	
    function sincronizarSelectores(){
        dojo.byId('opcion-simple').onchange = function(){
			dojo.byId('round-trip').setAttribute('checked', ''); 
            dojo.byId('one-way').setAttribute('checked', 'checked');
			           
        }
        dojo.byId('opcion-compuesto').onchange = function(){
			dojo.byId('one-way').setAttribute('checked', '');
            dojo.byId('round-trip').setAttribute('checked', 'checked');
			
            
        }
        dojo.byId('one-way').onchange = function(){
			dojo.byId('opcion-compuesto').setAttribute('checked', '');
            dojo.byId('opcion-simple').setAttribute('checked', 'checked');
            
        }
        dojo.byId('round-trip').onchange = function(){
			dojo.byId('opcion-simple').setAttribute('checked', '');
            dojo.byId('opcion-compuesto').setAttribute('checked', 'checked');           
        }
    }
	
    /**
     * 
     */
    function generarSelectorTipoVuelo()
	{


		var inputSimple = dojo.byId('opcion-simple');
		if(_tipoBarra == 'simple'){
			inputSimple.checked = true; 	
		}
		
		var funcInputSimple = function(){
			 var url= getRaizUrl() + '/servlets/vueloSimple.view?oriCod=' + _origenCod;
            url += '&destCod=' + _destinoCod;
            url += '&tipoNivel=' + _tipoNivel;
            url += '&idioma=' + _idioma;
			url += '&codeServicioPaisEquivalente=' + _codeServicioPaisEquivalente;
			url += '&localeCode=' + _localeCode;
			url += '&numMesesBarras=' + _numMesesBarras;        

            if (dojo.byId(dojo.byId('barrasDiv-ida')) != undefined) {
                dojo.style(dojo.byId('barrasDiv-ida'), 'display', 'none');
            }
			Loading(_divDestinoIda);         
            obtenerDatosAjax(url,_tipoBarra,'ida');  
		}
		
		inputSimple.onclick = function(){
            _tipoBarra = this.value;
			dojo.byId('round-trip').checked = false;  
            dojo.byId('one-way').checked = true; 
            funcInputSimple();
			ocultaInformacionVuelta();	
			resetInformacionIda();	
			resetInformacionVuelta();
			dojo.addClass(dojo.byId('retDate').parentNode, 'invisible');  		
        }
		
	    dojo.byId('one-way').onclick = function(){
			_tipoBarra = this.value;
            dojo.byId('opcion-compuesto').checked = false; 
            dojo.byId('opcion-simple').checked = true; 
			funcInputSimple();  
		    ocultaInformacionVuelta();  
			resetInformacionIda();  
			resetInformacionVuelta();   
        }
		
		var funcInputCompuesto = function(){
						 
			var url= getRaizUrl() + '/servlets/vueloCompuesto.view?oriCod=' + _origenCod
			url += '&destCod=' + _destinoCod;
			url += '&tipoNivel=' + _tipoNivel;
			url += '&tipoVuelo=ida';
			url += '&idioma=' + _idioma;
			url += '&codeServicioPaisEquivalente=' + _codeServicioPaisEquivalente;
			url += '&localeCode=' + _localeCode;
			url += '&numMesesBarras=' + _numMesesBarras;  
            
			if (dojo.byId(dojo.byId('barrasDiv-ida')) != undefined) {
                dojo.style(dojo.byId('barrasDiv-ida'), 'display', 'none');
            }
			Loading(_divDestinoIda);         
            obtenerDatosAjax(url,_tipoBarra,'ida'); 
		}
		
		var inputCompuesto = dojo.byId('opcion-compuesto');
		if (_tipoBarra == 'compuesto') {
			inputCompuesto.checked = true; 
		}
		
        inputCompuesto.onclick = function(){
            _tipoBarra = this.value;
            dojo.byId('one-way').checked = false; 
            dojo.byId('round-trip').checked = true; 
			funcInputCompuesto();
			resetInformacionIda();   
			muestraInformacionVuelta();  
			dojo.removeClass(dojo.byId('retDate').parentNode, 'invisible'); 

        }
		
		dojo.byId('round-trip').onclick = function(){
			_tipoBarra = this.value;
			dojo.byId('opcion-simple').checked = false;
            dojo.byId('opcion-compuesto').checked = true; 			
			funcInputCompuesto();  
			resetInformacionIda();   
			muestraInformacionVuelta();       
        }
		
	}
	
	/**
	 * 
	 * @param {Object} arrayPrecios
	 * @param {Object} porcentaje
	 */
	function aplicarPorcentaje(arrayPrecios,porcentaje){
		var salida = new Array();
		for(i=0;i<arrayPrecios.length;i++){
			salida[i] = arrayPrecios[i]*porcentaje;
		}
		return salida;
	}
	
	
	/**
	 * 
	 * @param {Object} precio
	 * @param {Object} tipo
	 */
	function modificarPrecioTotal(precio,tipo)
	{

		try
		{
			if(tipo=='Compuesto')
			{
				var precioIdaText = document.getElementById('priceDep').innerHTML;
                var precioIda =  new Number(precioIdaText.substr(0, precioIdaText.length - 1).valueOf());
                if(precio > 0)
                {
                    dojo.byId('priceTotal').innerHTML = precioIda + precio + '\u20AC'; 
                }
                else{
                    dojo.byId('priceTotal').innerHTML = '';
                }
			}
			else
			{
				if(precio > 0)
                {
                    dojo.byId('priceTotal').innerHTML = precio + '\u20AC'; 
                }
                else{
                    dojo.byId('priceTotal').innerHTML = '';
                }
			}

                	

		}
		catch(e)
		{
			
		}
		
	}
	
	/**
	 * 
	 */
	function ocultaInformacionVuelta()
	{
		dojo.style(dojo.byId('precio-estimado-vuelta'), 'display', 'none');
		dojo.style(dojo.byId('dateArr'), 'display', 'none');
		dojo.style(dojo.byId('priceArr'), 'display', 'none');
		resetInformacionVuelta();
	}
	
	/**
     * 
     */
    function muestraInformacionVuelta()
    {
        dojo.style(dojo.byId('precio-estimado-vuelta'), 'display', 'block');
        dojo.style(dojo.byId('dateArr'), 'display', 'block');
        dojo.style(dojo.byId('priceArr'), 'display', 'block');
    }
	
	function resetInformacionIda()
	{
		    dojo.byId('dateDep').innerHTML = '';
            dojo.byId('priceDep').innerHTML = '';
            dojo.byId('priceTotal').innerHTML = '';
	}
	
	function resetInformacionVuelta()
	{
		dojo.byId('dateArr').innerHTML = '';
        dojo.byId('priceArr').innerHTML = '';	
	}
	
	function resetInformacionTotal()
	{
		dojo.byId('priceTotal').innerHTML = '';
	}
	
	function setInformacionIda(fechaElegida,precio)
	{
		 dojo.byId('dateDep').innerHTML = fechaElegida;
		 if (precio > 0)
		 {
		 	dojo.byId('priceDep').innerHTML = precio + '\u20AC';
		 }else
		 {
            dojo.byId('priceDep').innerHTML = '';
         }
         
	}
	
	function setInformacionVuelta(fechaElegida,precio)
    {
    
         dojo.byId('dateArr').innerHTML = fechaElegida;
		 if (precio > 0)
		 {
		 	dojo.byId('priceArr').innerHTML = precio + '\u20AC';
		 }
		 else
		 {
		 	dojo.byId('priceArr').innerHTML = '';
		 }
         
    }

	
	/**
	 * 
	 * @param {Object} origen
	 * @param {Object} destino
	 * @param {Object} tipoVuelo
	 */
	function setLayoutMensaje(origen,destino,tipoVuelo){
        var barrasMensaje = dojo.byId('barras-mensaje'+'-'+tipoVuelo);
        barrasMensaje.innerHTML='<span>' + loc.label.vuelos + ' ' + origen +' - '
                +  destino +': </span>';

    }
	
	dojo.addOnLoad(inicioJS);


    
    
    
    return {

        toString: function(){
            return "Barras " + _id;
        }
		

    };    
}; 






