﻿/*  
    -- =============================================
    -- Author:		António Páscoa
    -- Create date: 21-05-2008
    -- Description:	A data de fecho provém da base de dados,
                    a data actual é obtida do servidor web onde reside 
                    esta aplicação web.
    -- Elements:    Esta solução para "Relógio Regressivo" envolve 
                    os seguintes principais elementos:
                    
    -   Ficheiro javascript: RelogioRegressivo.js
    -   Código no web user control, no lado do servidor, 
        que dinamicamente gera instruções javascript do género
        document.getElementById('UC_SetInterval_4_1_txtC').innerText = Faltam('25/05/2008 22:24:26');
    -   Código javascript, na página .aspx que recebe o web user control, 
        para referenciar o ficheiro externo de javascript
        <script type="text/javascript" src="Script/RelogioRegressivo.js"></script>
    -- =============================================
*/

//
// Retorna um intervalo entre duas datas na unidade milésimas de segundo
// Parâmetros data são do tipo "dd/MM/yyyy hh:mm:ss"
//
function DiferencaEntreDatas(dataInicio, dataFim)
{
    var stri = dataInicio;
    var diai = stri.substr(0, stri.indexOf("/"));
    var mesi = stri.substr(stri.indexOf("/") + 1, 2);
    var anoi = stri.substr(stri.lastIndexOf("/") + 1, 4);
    var horasi = stri.substr(stri.indexOf(":") - 2, 2);
    var minutosi = stri.substr(stri.indexOf(":") + 1, 2);
    var segundosi = stri.substr(stri.lastIndexOf(":") + 1, 2);
    var strf = dataFim;
    var diaf = strf.substr(0, strf.indexOf("/"));
    var mesf = strf.substr(strf.indexOf("/") + 1, 2);
    var anof = strf.substr(strf.lastIndexOf("/") + 1, 4);
    var horasf = strf.substr(strf.indexOf(":") - 2, 2);
    var minutosf = strf.substr(strf.indexOf(":") + 1, 2);
    var segundosf = strf.substr(strf.lastIndexOf(":") + 1, 2);
    
    var di = new Date(anoi, mesi, diai, horasi, minutosi, segundosi, 0);
    var df = new Date(anof, mesf, diaf, horasf, minutosf, segundosf, 0);
    
    var intervalo = df - di;
    
    return intervalo;
}

function ConverterMilissegundosEmDiasHorasMinutos(valorMilissegundos)
{
    var valor = valorMilissegundos;
    var diasEmMilissegundos = 1000 * 60 * 60 * 24;
    var horasEmMilissegundos = 1000 * 60 * 60;
    var minutosEmMilissegundos = 1000 * 60;
    var segundosEmMilissegundos = 1000;

    var dias = Math.floor(valor / diasEmMilissegundos);
    var resDeDias = valor % diasEmMilissegundos; // Que representa o que resta de dias em milésimas de segundo

    var horas = Math.floor(resDeDias / horasEmMilissegundos);
    var resDeHoras = resDeDias % horasEmMilissegundos;

    var minutos = Math.floor(resDeHoras / minutosEmMilissegundos);
    var resMinutos = resDeHoras % minutosEmMilissegundos;
    
    var segundos = Math.floor(resMinutos / segundosEmMilissegundos);
    
    //
    // Os valores são negativos quando a data limite for superada
    // i.e., quando a data de início ultrapassar a data de fim.
    //
    if (dias < 0) dias = 0;
    if (horas < 0) horas = 0;
    if (minutos < 0) minutos = 0;
    if (segundos < 0) segundos = 0;
    
    //
    // Formatação da expressão 
    //
    var strDias = dias.toString();
    var strHoras = horas.toString();
    var strMinutos = minutos.toString();
    var strSegundos = segundos.toString();
    var strResultado = "";

    strHoras = (strHoras.length < 2) ? "0" + strHoras : strHoras;
    strMinutos = (strMinutos.length < 2) ? "0" + strMinutos : strMinutos;
    strSegundos = (strSegundos.length < 2) ? "0" + strSegundos : strSegundos;
    
    var strExpressaoDias = (dias == 1) ? "dia" : "dias";
    var strExpressaoHoras = (horas == 1) ? "hora" : "horas";
    var strExpressaoMinutos = (minutos == 1) ? "minuto" : "minutos";
    var strExpressaoSegundos = (segundos == 1) ? "segundo" : "segundos";

    strResultado = strDias + " " + strExpressaoDias + " " + strHoras + " " + strExpressaoHoras + " " + strMinutos + " " + strExpressaoMinutos;
    //strResultado = strDias + " " + strExpressaoDias + " " + strHoras + " " + strExpressaoHoras + " " + strMinutos + " " + strExpressaoMinutos + " " + strSegundos + " " + strExpressaoSegundos;

    return strResultado;
}

function Faltam(dataFim)
{
    var strDataFim = dataFim
    var agora = new Date();
    //var agora = dttmDateTimeDoServidorWeb;  // Esta é uma variável global, cujo valor é definido em código servidor
    agora.setTime(dttmDateTimeDoServidorWeb.getTime());
    var ano = agora.getFullYear();
    var mes = agora.getMonth() + 1;
    var dia = agora.getDate();
    var horas = agora.getHours();
    var minutos = agora.getMinutes();
    var segundos = agora.getSeconds();

    //
    // Converter para string
    //
    var strMes = mes + "";
    var strDia = dia + "";
    var strHoras = horas + "";
    var strMinutos = minutos + "";
    var strSegundos = segundos + "";
    
    strMes = (strMes.length < 2) ? "0" + strMes : strMes;
    strDia = (strDia.length < 2) ? "0" + strDia : strDia;
    strHoras = (strHoras.length < 2) ? "0" + strHoras : strHoras;
    strMinutos = (strMinutos.length < 2) ? "0" + strMinutos : strMinutos;
    strSegundos = (strSegundos.length < 2) ? "0" + strSegundos : strSegundos;

    var strAgora = "" + strDia + "/" + strMes + "/" + ano + " " + strHoras + ":" + strMinutos + ":" + strSegundos;
    
    var intervaloEmMilissegundos = DiferencaEntreDatas(strAgora, strDataFim);
    
    var strResultado = ConverterMilissegundosEmDiasHorasMinutos(intervaloEmMilissegundos);
    
    return strResultado;
}
