﻿// JScript File

/// <summary>
/// Busca del id del boton donde este asignado la funcion javascript
/// obtenemos la fuente javascript (dependiendo si el control esta dentro de otros p.e. revalidacion, modificacion,disponibilidad
/// </summary>
/// <param name="id"> id del boton dentro del control</param>
/// <param name="string"> cadena con la que compararemos como raiz del id a formar</param>
function SearchSource(id,string)
{
    var total = id.split('_');
    var totalstring = '';
    
    for( i=0 ; i < total.length ; i++)
    {
        if(total[i]!=string)
        {
          totalstring+=total[i]+'_';
        }else
        {
           totalstring+=total[i]+'_';
           break;
        }
    }
    return totalstring;
}

/// <summary>
/// Guardamos la tarifa seleccionada en el radio button de la disponibilidad
/// </summary>
/// <param name="Ida"></param>
/// <param name="fila"></param>
/// <param name="tipo"></param>
/// <param name="source">Fuente obtenida en el evento onclik del radibutton</param>
/// <param name="elem">Necesario para obtener el id en caso que la llamada sea desde el evento onchange del combo, 
///            y no desde dentro del evento onclick del radibutton</param>
function GuardarTarifa(Ida, option,tipo,source,elem)
{
    var IsFareSelected = true;
    var index = elem.parentNode.parentNode.rowIndex;
    
    fuente = (source=='')? SearchSource(elem.id,'DispOW1') : source;
    
    //Seleccion de la tabla
    switch (tipo)
    {
        case "SoloIda":
            txtTabla = "UC_DispOW_Tabla1_TablaSoloIda";
        break;
        case "SoloVuelta":
            txtTabla = "UC_DispOW_Tabla2_TablaVueltaSinRestricciones";
        break;
        case "IdaVuelta":
            txtTabla = "UC_DispOW_Tabla1_TablaIdaSinRestricciones";
        break;
        case "ModificarIdaOW":
        case "ModificarIdaconEscalaOW":
            txtTabla = "UC_DispOW_Tabla1_TablaIdaSinRestricciones";
            tipo = "IdaVuelta";
        break;
        case "ModificarVueltaOW":
        case "ModificarVueltaconEscalaOW":
            txtTabla = "UC_DispOW_Tabla2_TablaVueltaSinRestricciones";
            tipo ="SoloVuelta";
        break;
    }
        
    TablaAux = $get(fuente + txtTabla);

    var txttarifa = (Ida)? 'TarifaIdaOculto':'TarifaVueltaOculto';

    var tarifa= $get(fuente + txttarifa);

    IsFareSelected = ObtTarifa(TablaAux, tarifa,index);
    
    var radio = TablaAux.rows[index].cells[0].childNodes[0];

    GuardarDatosVuelo(option,tipo,radio,'120',true,IsFareSelected) 
    
}

/// <summary>
/// Cuando seleccionamos una tarifa, desselecciona la anterior (si existe), pintamos la fila 
/// de otro color y además cargamos la tarifas en campoTarifa
/// <summary>
/// <param name="TablaAux">Tabla de trabajo (vuelos ida o vuelta)</param>
/// <param name="campoTarifa">Campo para almacenar la tarifa</param>
/// <param name="indexRow">Indice de la fila seleccionada</param>
function ObtTarifa(TablaAux, campoTarifa,indexRow)
{
    
    //Seleccionamos filas
    TablaAux.rows[indexRow].cells[0].childNodes[0].checked = true;
    
    //Comprueba si el vuelo tiene escala
    escala = (TablaAux.rows[indexRow].cells[0].rowSpan > 1)?true:false;
    
    
    //Pintamos toda la fila y despintamos la anterior
    PintarFilaSeleccionada(TablaAux,indexRow,escala,TablaAux.rows[indexRow].cells[0].rowSpan)
    
    //TARIFA SELECCIONADA
    if(TablaAux.rows[indexRow].cells[1].childNodes.length>2)
    {
        select=TablaAux.rows[indexRow].cells[1].childNodes[1];
    }
    else
    {
        select=TablaAux.rows[indexRow].cells[1].childNodes[0];
    }
    
    //Si el radiobutton seleccionado es distinto de seleccionar
    if(select.options[select.selectedIndex].value!="Seleccionar...")
    {
       campoTarifa.value = select.options[select.selectedIndex].value;
       return true;
    }
    else
    {
       campoTarifa.value =''
       return false;
    }
    
}

/// <summary>
/// Cuando pinchamos en el radiobutton del un vuelo para seleccionarlo
/// <summary>
/// <param name="tipo"></param>
/// <param name="elem">Id necesario para coger los id fuente de todo los controles dependiendo 
///             del lugar donde se encuentre el control (revalidacion,modificacion,raiz)</param>
/// <param name="tiempoentrevuelos"></param>
function GuardarDatosVuelo(option,tipo,elem,tiempoentrevuelos,desdetarifas,IsFareSelected)
{
    var color='#EEEEEE';
    var vuelo = null;
    var AsigVuelo = null;
    var TablaAux = null;
    var Ida;
    var numVuelo;
    var salir = false;
    var txtVuelo = null;
        
    //Recogemos el fuente
    fuente = SearchSource(elem.id,'DispOW1');
    
    //Apuntamos a los distintos controles
    switch (tipo)
    {
        //case "SoloIda":
        case "SoloVuelta":
            txtTabla = "UC_DispOW_Tabla2_TablaVueltaSinRestricciones";
            txtTablaEnable = "UC_DispOW_Tabla1_TablaIdaSinRestricciones";
            txtVuelo = "VueloIdaOculto";
            txtAsigVuelo = "VueloVueltaOculto";
            Ida = false;
            
        break;
        case "IdaVuelta":
            txtTabla = "UC_DispOW_Tabla1_TablaIdaSinRestricciones";
            txtTablaEnable = "UC_DispOW_Tabla2_TablaVueltaSinRestricciones";
            txtVuelo = "VueloVueltaOculto";
            txtAsigVuelo = "VueloIdaOculto";
            Ida = true;
            
        break;
        case "ModificarIdaOW":
        case "ModificarIdaconEscalaOW":
            txtTabla = "UC_DispOW_Tabla2_TablaVueltaSinRestricciones";
            txtTablaEnable = "UC_DispOW_Tabla1_TablaIdaSinRestricciones";
            txtTipo = "IdaVuelta";
            //modificarIda = true;
            salir = true;
            
        break;
        case "ModificarVueltaOW":
        case "ModificarVueltaconEscalaOW":
            txtTablaEnable = "UC_DispOW_Tabla2_TablaVueltaSinRestricciones";
            txtTabla = "UC_DispOW_Tabla1_TablaIdaSinRestricciones";
            txtTipo = "SoloVuelta";
            salir = true;
            
        break;
        default: //Solo ida no es necesario comprobar fechas
            txtTabla = "UC_DispOW_Tabla1_TablaSoloIda";
            txtAsigVuelo = "VueloIdaOculto";
            Ida = true;  
        break;      
    }
    
    //Tabla disable en caso de modificacion       
    TablaAux = $get(fuente + txtTabla);
    
    //En caso de revalidación
    revalidar = $get('ctl00_MainContentPlaceHolder_ctl03_UC_ModificarTramo1_BtnRevalidar');
    
    if(revalidar!=null)
    {
       numVuelo = $get( fuente + 'Num'+ txtAsigVuelo);
       TablaAuxEnabled = $get(fuente + txtTablaEnable);
       TablaAuxEnabled.rows[0].cells[0].firstChild.checked = true;
    }
    else if (revalidar == null && salir)
    {
       TablaAux.rows[0].cells[0].firstChild.checked = true;
    }  
    
    if(salir)//En caso de modificacion
    {
       GuardarDatosVuelo(option,txtTipo,elem,'120',false);
    }
    else 
    {
        //Asignamos valores a partir de los valores de los switch anteriores
        
        vuelo =(txtVuelo!=null)? $get( fuente + txtVuelo).value:"";
        AsigVuelo = $get( fuente + txtAsigVuelo);
        
        if(ComprobarFechas(tiempoentrevuelos,fuente))
        {
            if(!desdetarifas)
            {  
                rowIndex=elem.parentNode.parentNode.rowIndex;
                GuardarTarifa(Ida,option,tipo,fuente, TablaAux.rows[rowIndex].cells[1].childNodes[0]) 
            }
            
            AsigVuelo.value =(IsFareSelected)? option : ""; 
        }
        else
        {
            AsigVuelo.value = "";
            BuscarErrorCache('82500005');//_DISP_ERR_SEL_VUELO_VUELTA_HORA        
        }
    }
    
    if(revalidar != null)
    {
       Retarificar(elem.id);
    }
    
}


/// <summary>
/// Pintamos la fila seleccionada
/// </summary>
/// <param name="TablaAux">Tabla con la que trabajamos</param>
/// <param name="index">Fila seleccionada por el usuario</param>
/// <param name="escala">Es un vuelo con escalas? </param>
function PintarFilaSeleccionada(TablaAux,index,escala,numEscalas)
{
    var color='#EEEEEE';
    
    //Si no está pintada, coloreamos la fila en caso contrario no hacemos nada
    if(TablaAux.rows[index].style.background!=color)
    {
        //Recorremos la tabla pintando de blanco, las que no estan seleccionadas y grises el resto
        for(i=0;i<TablaAux.rows.length;i++)
        {
            if (TablaAux.rows[i].cells[0].childNodes.length > 0)
            {
                if(!escala && i==index)
                {
                    TablaAux.rows[i].style.background=color;
                    TablaAux.rows[i].style.cursor='hand';
                }
                else 
                {
                    if (escala && i==index)
                    {
                        //En caso de escala pintamos dos filas
                        for(l=0;l < numEscalas;l++)
                        {
                        TablaAux.rows[i+l].style.background=color;
                        TablaAux.rows[i+l].style.cursor='hand';
                        }
                        i+=l;
                    }
                    else
                    {
                        TablaAux.rows[i].style.background='white';
                        DeseleccionaTarifa(TablaAux.rows[i]) 
                    }
                }
                
            }//if
        }
    }
}

/// <summary>
/// Deseleccionamos el combobox que anteriormente estuviese seleccionado
/// </summary>
/// <param name="row">Fila que necesitamos desseleccionar</param>
function DeseleccionaTarifa(row)
{
    if(row.cells.length>6)
    {
        if(row.cells[1].childNodes.length>2)
        {
            row.cells[1].childNodes[1].selectedIndex=0;
        }
        else
        {
            row.cells[1].childNodes[0].selectedIndex=0;;
        }
    }
}

/// <summary>
/// Compara las fechas de los dos vuelos seleccionados
/// </summary>
/// <param name="tiempoentrevuelos">Tiempo de espera entre los vuelos seleccioandos </param>
/// <param name="fuente"> id fuente con el que accederemos a los controles </param>
function ComprobarFechas(tiempoentrevuelos,fuente,vuelo)
{
    if(vuelo != null && vuelo != "")
    {
        var horaIda = null;
        var horaVuelta = null;
        
        var TablaIda = $get( fuente + 'UC_DispOW_Tabla1_TablaIdaSinRestricciones');
        var TablaVuelta = $get( fuente + 'UC_DispOW_Tabla2_TablaVueltaSinRestricciones');
        var FechaIda = $get( fuente + 'UC_DispOW_Tabla1_lblIda').innerHTML;
        var FechaVuelta = $get(fuente + 'UC_DispOW_Tabla2_lblVuelta').innerHTML;
        
        //Desmontamos la fecha para comprobar si es la misma
        var FechaIda2 = FechaIda.split(',');
        var FechaVuelta2 = FechaVuelta.split(',');
        var FechaIdaAux = FechaIda2[1].split(' ');
        var FechaVueltaAux = FechaVuelta2[1].split(' ');    

        if ((FechaIdaAux[1] == FechaVueltaAux[1]) && (FechaIdaAux[3] == FechaVueltaAux[3]) && (FechaIdaAux[5] == FechaVueltaAux[5]))
        {
            for(i=0;i<TablaIda.rows.length;i++)
            {
                if(TablaIda.rows[i].cells[0].firstChild.checked)
                {
                    //horaIda=TablaIda.rows[i].cells[4].firstChild.data.split(":");
                    horaIda=TablaIda.rows[i].cells[5].firstChild.data.split(":");
                    break;
                }
            }
            
            for(i=0;i<TablaVuelta.rows.length;i++)
            {
                if(TablaVuelta.rows[i].cells[0].firstChild.checked)
                {
                    //horaVuelta=TablaVuelta.rows[i].cells[3].firstChild.data.split(":");
                    horaVuelta=TablaVuelta.rows[i].cells[6].firstChild.data.split(":");
                    break;
                }
            }
            //Comprobacion nueva
            if(horaVuelta!=null && horaIda!=null)
            {
                var minutos = horaVuelta[1] - horaIda[1];
                var horas = horaVuelta[0] - horaIda[0];
                //Margen de una hora entre la llegada del vuelo de ida y la salida del de vuelta
                minutos = minutos + (horas * 60) - tiempoentrevuelos;

                if (minutos < 0)
                {
                    return false;
                }
            }
        }
        
        return true;
    }
    else
    {
        return true;
    }
}



/// <summary>
/// Vemos en cado de retarificacion o revalidacion los valores que debemos recoger de la disponibilidad
/// </summary>
/// <param name="elem">id fuente que estamos recogiendo</param>
function Retarificar(elem)
{
    //return Retarificar('ctl00_MainContentPlaceHolder_ctl03_UC_ModificarTramo1_UC_DispOW1'.'ModificarIdaOW');
    
    fuente = SearchSource(elem,'DispOW1');
    ida = $get( fuente + 'VueloIdaOculto');
    vuelta =  $get( fuente + 'VueloVueltaOculto');
    
    if( ida.value != "" || vuelta.value != "")
    {
         return true;
    }
    else
    {
         MostrarCapaAvisos('Seleccione algun vuelo para retarificar');
         return false;
    }
}


