// *****************************************************************************
// MyWeb Suite - MySky Application Server
// Gerenciamento das datas de ida e volta da reserva na pagina inicial
// Autor: Daniel Ribeiro Gomes - danielrg@mysky.com.br
// Versao: $Id: datas.js,v 1.3 2004/03/29 20:39:25 danielrg Exp $
// *****************************************************************************


var MESES = new Array("Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto",
  "Setembro", "Outubro", "Novembro", "Dezembro");

var DIA_HOJE = 10;
var MES_HOJE = 3 - 1;  
var ANO_HOJE = 2010 - 2000; 

var MES_LANCADO = 6 - 1; 
var ANO_LANCADO = 2010 - 2000; 

var ULTIMO_DIA = 31;
var ULTIMO_MES = 6;

var NULO = -1;


// Campos do formulario de venda
var day0;
var date0;
var day1;
var date1;

function escolheOW() {        
    date1.options[0].selected = true;
    
        for (var i = 0; i < date1.options.length; i++) {
           if (date1.options[i].value == "--") {
             date1.options[i].selected = true;

             break;
           }
        }
        
    mudouMesVolta();
}


function escolheRT() {

        for (var i = 0; i < date0.options.length; i++) {
           if (date0.options[i].selected == true) {
             mes = date0.options[i].value;
             break;
           }           
        }

        
        for (var i = 0; i < date1.options.length; i++) {
           if (date1.options[i].value == mes) {
             date1.options[i].selected = true;
             
             break;
           }           
        }
        
    mudouMesVolta();

}



function setDatasSchedule(form)
{
  //para o forme de Schedule Information
  mesIda = form.mesIda;
  diaIda = form.diaIda;

  
  var diasMes = dias(MES_HOJE, ANO_HOJE);

  
 //para o Schedule Information 
      setDia(diaIda, DIA_HOJE, diasMes, DIA_HOJE, false);
  setMes(mesIda, MES_HOJE, ANO_HOJE, MES_LANCADO, ANO_LANCADO, MES_HOJE,
    ANO_HOJE,'','');


}



function setDatasAlt(form , dia_def , mes_def, ano_def)
{

  day0    = form.day0;
  date0    = form.date0;
  day1  = form.day1;
  date1  = form.date1;

  var diasMes = dias(mes_def , ano_def);

  setDia(day1, dia_def , diasMes, dia_def , false);
  setMes(date1, mes_def , ano_def , MES_LANCADO, ANO_LANCADO, mes_def ,
    ano_def,'','');

}



function setDatas(form)
{
  day0    = form.day0;
  date0    = form.date0;
  day1  = form.day1;
  date1  = form.date1;

  radiotv = form.tipovoo ;
  
  var diasMes = dias(MES_HOJE, ANO_HOJE);
  
  setDia(day0, DIA_HOJE, diasMes, DIA_HOJE, false);
  setMes(date0, MES_HOJE, ANO_HOJE, MES_LANCADO, ANO_LANCADO, MES_HOJE,
    ANO_HOJE,'','');
  
  setDia(day1, DIA_HOJE, diasMes, NULO, true);
  setMes(date1, MES_HOJE, ANO_HOJE, MES_LANCADO, ANO_LANCADO, MES_HOJE,
    ANO_HOJE,'------','');

  radiotv[0].checked=true;  

}

function setDatasFormFinder(form){

  date0=form.date0;
  date1= form.date1;

  
  var diasMes = dias(MES_HOJE, ANO_HOJE);
  

  setMes(date0, MES_HOJE, ANO_HOJE, MES_LANCADO, ANO_LANCADO, MES_HOJE,
    ANO_HOJE,'','');
  

  setMes(date1, MES_HOJE, ANO_HOJE, MES_LANCADO, ANO_LANCADO, MES_HOJE,
    ANO_HOJE,'------','');
	}

function mudouDiaIda()
{


  if ( date0.value == date1.value )
  {
  
     
  
    var str = new String(date1.value);
    var ano = Number(str.slice(0, 2));
    var mes = Number(str.slice(2, 4));
    var diaInicio = Number(day0.value);
    var diaFim = dias(mes, ano);
    var diaSelecionado = (day1.value == "--") ? NULO :
      (Number(day1.value) < diaInicio) ? diaInicio : Number(day1.value);


     setDia(day1, diaInicio, diaFim, diaSelecionado, false);
  }


}



function mudouMesIdaSomente()
{
  var str  = new String(date0.value);
  var anoI = Number(str.slice(0, 2));
  var mesI = Number(str.slice(2, 4));
  
  str      = new String(date1.value);
  var anoV = Number(str.slice(0, 2));
  var mesV = Number(str.slice(2, 4));
  
  // Atualiza mes de volta

  var selVolta = new String(date1.value);

  str = new String(date0.value);
  var ano = Number(str.slice(0, 2));
  var mes = Number(str.slice(2, 4));

  if (mesI > mesV)
    setMes(date1, mes, ano, MES_LANCADO, ANO_LANCADO, mes, ano, '' ,'------', selVolta );
  else if (mesI < mesV)
    setMes(date1, mes, ano, MES_LANCADO, ANO_LANCADO, mesV, anoV,'' ,'------', selVolta );

}


function mudouMesIda()
{

  var str  = new String(date0.value);
  
  
  var anoI = Number(str.slice(0, 2));
  var mesI = Number(str.slice(2, 4));
  
  str      = new String(date1.value);
  var anoV = Number(str.slice(0, 2));
  var mesV = Number(str.slice(2, 4));
  
  // Atualiza dia de ida
    
  var diaInicio = (mesI == MES_HOJE) ? DIA_HOJE : 1;
  var diaFim = dias(mesI, anoI);
  var diaSelecionado = day0.value < diaInicio ? diaInicio :
    day0.value > diaFim ? diaFim : day0.value;
  
  if (diaSelecionado != day0.value)
    mudouDiaIda();
  
  setDia(day0, diaInicio, diaFim, diaSelecionado, false);
  
  // Atualiza mes de volta

  var selVolta = new String(date1.value);

  str = new String(date0.value);
  var ano = Number(str.slice(0, 2));
  var mes = Number(str.slice(2, 4));

  if (mesI > mesV)
    setMes(date1, mes, ano, MES_LANCADO, ANO_LANCADO, mes, ano, '' ,'------', selVolta );
  else if (mesI < mesV)
    setMes(date1, mes, ano, MES_LANCADO, ANO_LANCADO, mesV, anoV,'' ,'------', selVolta );

  mudouMesVolta();
 

}

function mudouMesVolta()
{


  // Atualiza dia de volta
  var str = new String(date1.value);
  
  if (str != '--') {

  var ano = Number(str.slice(0, 2));
  var mes = Number(str.slice(2, 4));
  var diaInicio = ( date0.value == date1.value ) ?
    Number(day0.value) : 1 ;
  var diaFim = dias(mes, ano);
  var diaSelecionado = (day1.value == "--") ? NULO :
    (Number(day1.value) < diaInicio) ? diaInicio :
    day1.value > diaFim ? diaFim : Number(day1.value);

 
   setDia(day1, diaInicio, diaFim, diaSelecionado, false );
   radiotv[1].checked=true;
   
  }
  else {
  
   radiotv[0].checked=true;  
   setDia(day1, diaInicio, diaFim, diaSelecionado, true );  
  }
  

}

function setDia(select, inicio, fim, selecionado, exibirNulo)
{


  if (exibirNulo) {
  
    select.options[0] = new Option("--", "--");
    select.options[0].selected = true;
    select.options.length = 1;
  }
  else {
  
  inicio = Number(inicio);
  fim = Number(fim);
  selecionado = Number(selecionado);
  
//  if (inicio > fim || (selecionado < inicio ) ||
//    (selecionado > fim ))
//  {
//    alert("ERRO\nParametros invalidos para setDia:\nInicio = " + inicio +
//      "\nFim = " + fim + "\nSelecionado = " + selecionado + "\nSelect " +
//      select.name + " inalterado.");
//    
//    return;
//  }


if ( selecionado < inicio ) { selecionado=inicio; } 
if ( selecionado > fim )    { selecionado=fim; } 
  
  var tamanho = fim - inicio + 1 ;
  select.options.length = tamanho;
  
  for (var i=0; i < tamanho; i++)
  {
    var v;
    var l;
    
      v = l = inicio + i + (exibirNulo ? -1 : 0);
      
      if ( v < 10 )
        v = "0" + v;
      
    select.options[i] = new Option(l, v);
  }
  
    select.options[selecionado - inicio ].selected = true;
  }

  
  
}

function setMes(select, mesInicio, anoInicio, mesFim, anoFim, mesSelecionado,
  anoSelecionado, label , tipo, tiposel )
{

  if ( (anoInicio > anoFim) || (anoInicio == anoFim && mesInicio > mesFim) ||
    (anoSelecionado < anoInicio || anoSelecionado > anoFim) ||
    (anoSelecionado == anoInicio && mesSelecionado < mesInicio) ||
    (anoSelecionado == anoFim && mesSelecionado > mesFim) )
  {

      alert("ERRO\nParametros invalidos para o setMes:\nInicio = " +
      MESES[mesInicio] + " " + (anoInicio+2000) + "\nFim = " +
      MESES[mesFim] + " " + (anoFim+2000) + "\nSelecionado = " +
      MESES[mesSelecionado] + " " + (anoSelecionado+2000) + "\n Select " +
      select.name + " inalterado.");
    
    return;
  }
  
  var tamanho = (anoInicio == anoFim) ? (mesFim - mesInicio + 1) :
    ( 12 - mesInicio + 12 * (anoFim-anoInicio-1) + mesFim + 1 );
  select.options.length = tamanho;
  
  var mes = Number(mesInicio);
  var ano = Number(anoInicio);
  var anoExt = ano + 2000;
  
  var ini=0;
    
  if (label != '') { select.options[0]=new Option( label , "--"); ini=1; tamanho++; tipo='';}
  
  for (var i=ini; i < tamanho; i++)
  {
    var espacoMes = (mes < 10) ? "0" : "";
    var espacoAno = (ano < 10) ? "0" : "";
    
    //select.options[i] = new Option( MESES[mes] + " " + anoExt,
    //  "" + espacoAno + ano + espacoMes + mes );
    
    select.options[i] = new Option( MESES[mes],
      "" + espacoAno + ano + espacoMes + mes );
    
    mes++;
    
    if (mes == 12)
    {
      mes = 0;
      ano++;
      anoExt++;
    }
  }
  
  if (tipo != '') { 
  
     select.options[tamanho]=new Option( tipo , "--"); 
     if (tiposel == '--') {
       select.options[tamanho].selected = true;
     }
  }

 if (tiposel != '--') { 
  var selecionado = mesSelecionado - mesInicio +
    12 * (anoSelecionado - anoInicio);
  select.options[selecionado].selected = true;
 }
 
}

function dias(mes, ano)
{

var ultimodia;


  // Janeiro, marco, maio, julho, agosto, outubro, dezembro
  if (mes == 0 || mes == 2 || mes == 4 || mes == 6 || mes == 7 || mes == 9 ||
    mes == 11)
    ultimodia=31;
  
  // Abril, junho, setembro, novembro
  else if (mes == 3 || mes == 5 || mes == 8 || mes == 10 )
    ultimodia=30;
  
  // Fevereiro
  else if (mes == 1)
  {
    if (bissexto(ano)) {
     ultimodia=29;
     } else { ultimodia=28; }
  
  }
  // Mes invalido
  else
  {
//    alert("ERRO\nMes invalido passado para a funcao dias()\nmes = " + mes + "\nRetornado mes comercial (30 dias)");
    ultimodia=30;
  }

if ((ULTIMO_MES == mes)&&(ULTIMO_DIA < ultimodia)) {
   ultimodia=ULTIMO_DIA;
} 
  
  return ultimodia;
}

function bissexto(ano)
{
   return (!(ano % 4) && (ano % 100 || !(ano % 400)));
}
