// ----------------------------------------------------------------------------------------- 
//  DMX-Database // Time Clock Resources 
//  Written by Gerardo Couso Domínguez 
//  E-Mail: gcouso@dmxdatabase.com 
//  (c) 2010 GeX Union Software 
// ----------------------------------------------------------------------------------------- 
//  clock.js - Archivo de comandos JavaScript para estampar varios formatos de fecha y hora 
// ----------------------------------------------------------------------------------------- 

// Sincronizar fecha y hora con el formato "Martes, 29 de Diciembre de 2009" - "hh:mm[:ss]" 
// Invocación inicial en HTML: <BODY OnLoad="ClockSync('FULL');"> 
// Area de despliegue en HTML: <DIV ID=Clock></DIV> 
// Area de despliegue en HTML: <DIV ID=Calendar></DIV> 
function ClockSync(format)
{ // Verificar definición de DIV "Clock"
  if (! document.getElementById('Clock'))
     { alert('DIV Clock indefinido'); }

  // Verificar definición de DIV "Calendar"
  if (! document.getElementById('Calendar'))
     { alert('DIV Calendar indefinido'); }

  // Desplegar fecha en DIV "Calendar"
  Calendar.innerHTML = StampDate('WIDE');

  // Distinguir formato de hora
    if (format == 'FULL')
       { RealTimeSec(); }
  else { RealTime(); }
}


// Desplegar hora en tiempo real con el formato "hh:mm" 
// Invocación inicial en HTML: <BODY OnLoad="RealTime();"> 
// Area de despliegue en HTML: <DIV ID=Clock></DIV> 
// Area de despliegue en HTML: <DIV ID=Calendar></DIV> (Opcional)
function RealTime()
{ // Inicializar variables 
  var Stamp = new Date();
  var Hours = Stamp.getHours();
  var Mins  = Stamp.getMinutes();
  var Secs  = Stamp.getSeconds();

  // Verificar definición de DIV "Clock"
  if (! document.getElementById('Clock'))
     { alert('DIV Clock indefinido'); }

  // Sincronizar fecha en DIV "Calendar"
  if (document.getElementById('Calendar'))
     { if (Hours == 0 && Mins == 0)
          { Calendar.innerHTML = StampDate('WIDE'); }
     }

  // Agregar un "0" a la izquierda de Horas y Minutos
  if (Hours < 10) { Hours = '0' + Hours; }
  if (Mins  < 10) { Mins  = '0' + Mins;  }

  // Desplegar formato "hh:mm" en DIV "Clock"
  Clock.innerHTML = Hours + ':' + Mins; 

  // Calcular cuantos mili-segundos faltan para el próximo minuto exacto
  Delay = 60000 - (Secs * 1000);

  // Volver a ejecutar función "RealTime()" con retraso para sincronizar 
  setTimeout('RealTime()',Delay); 
}


// Desplegar hora en tiempo real con el formato "hh:mm:ss" 
// Invocación inicial en HTML: <BODY OnLoad="RealTimeSec();"> 
// Area de despliegue en HTML: <DIV ID=Clock></DIV> 
// Area de despliegue en HTML: <DIV ID=Calendar></DIV> (Opcional)
function RealTimeSec()
{ // Inicializar variables 
  var Stamp = new Date();
  var Hours = Stamp.getHours();
  var Mins  = Stamp.getMinutes();
  var Secs  = Stamp.getSeconds();

  // Verificar definición de DIV "Clock"
  if (! document.getElementById('Clock'))
     { alert('DIV Clock indefinido'); }

  // Sincronizar fecha en DIV "Calendar"
  if (document.getElementById('Calendar'))
     { if (Hours == 0 && Mins == 0)
          { Calendar.innerHTML = StampDate('WIDE'); }
     }

  // Agregar un "0" a la izquierda de Horas, Minutos y Segundos
  if (Hours < 10) { Hours = '0' + Hours; }
  if (Mins  < 10) { Mins  = '0' + Mins;  }
  if (Secs  < 10) { Secs  = '0' + Secs;  } 

  // Desplegar formato "hh:mm:ss" en DIV "Clock"
  Clock.innerHTML = Hours + ':' + Mins + ':' + Secs; 

  // Definir retraso en mili-segundos para el próximo segundo exacto
  Delay = 1000;

  // Volver a ejecutar función "RealTimeSec()" con retraso para sincronizar
  setTimeout('RealTimeSec()',Delay); 
}


// Desplegar fecha y hora en tiempo real con el formato "dd-mmm-aaaa · hh:mm" 
// Invocación inicial en HTML: <BODY OnLoad="RealDateTime();"> 
// Area de despliegue en HTML: <DIV ID=Clock></DIV> 
function RealDateTime()
{ // Inicializar variables 
  var Meses = new Array('ENE','FEB','MAR','ABR','MAY','JUN','JUL','AGO','SEP','OCT','NOV','DIC'); 	
  var Stamp = new Date();
  var Year  = Stamp.getYear();
  var Month = Stamp.getMonth();
  var Dated = Stamp.getDate();
  var Hours = Stamp.getHours();
  var Mins  = Stamp.getMinutes();
  var Secs  = Stamp.getSeconds(); 

  // Verificar definición de DIV "Clock"
  if (! document.getElementById('Clock'))
     { alert('DIV Clock indefinido'); }

  // Ajustar Año (aa, 1aa -> aaaa) 
  if (Year <= 99)  { Year += 2000; } 
  if (Year <= 199) { Year += 1900; } 

  // Agregar un "0" a la izquierda de Fecha
  if (Dated < 10) { Dated = '0' + Dated; }

  // Agregar un "0" a la izquierda de Horas y Minutos
  if (Hours < 10) { Hours = '0' + Hours; }
  if (Mins  < 10) { Mins  = '0' + Mins;  }

  // Desplegar formato "dd-mmm-aaaa · hh:mm" en DIV "Clock"
  Clock.innerHTML = Dated + '-' + Meses[Month] + '-' + Year + ' · ' + Hours + ':' + Mins; 
  
  // Calcular cuantos mili-segundos faltan para el próximo minuto exacto
  Delay = 60000 - (Secs * 1000);

  // Volver a ejecutar función "RealDateTime()" con retraso para sincronizar 
  setTimeout('RealDateTime()',Delay); 
}


// Desplegar fecha y hora en tiempo real con el formato "dd-mmm-aaaa · hh:mm:ss" 
// Invocación inicial en HTML: <BODY OnLoad="RealDateTimeSec();"> 
// Area de despliegue en HTML: <DIV ID=Clock></DIV> 
function RealDateTimeSec()
{ // Inicializar variables 
  var Meses = new Array('ENE','FEB','MAR','ABR','MAY','JUN','JUL','AGO','SEP','OCT','NOV','DIC'); 
  var Stamp = new Date();
  var Year  = Stamp.getYear();
  var Month = Stamp.getMonth();
  var Dated = Stamp.getDate();
  var Hours = Stamp.getHours();
  var Mins  = Stamp.getMinutes();
  var Secs  = Stamp.getSeconds(); 

  // Verificar definición de DIV "Clock"
  if (! document.getElementById('Clock'))
     { alert('DIV Clock indefinido'); }

  // Ajustar Año (aa, 1aa -> aaaa) 
  if (Year <= 99)  { Year += 2000; } 
  if (Year <= 199) { Year += 1900; } 

  // Agregar un "0" a la izquierda de Fecha
  if (Dated < 10) { Dated = '0' + Dated; }

  // Agregar un "0" a la izquierda de Horas, Minutos y Segundos
  if (Hours < 10) { Hours = '0' + Hours; }
  if (Mins  < 10) { Mins  = '0' + Mins;  }
  if (Secs  < 10) { Secs  = '0' + Secs;  } 

  // Desplegar formato "dd-mmm-aaaa · hh:mm:ss" en DIV "Clock"
  Clock.innerHTML = Dated + '-' + Meses[Month] + '-' + Year + ' · ' + Hours + ':' + Mins + ':' + Secs; 
  
  // Definir retraso en mili-segundos para el próximo segundo exacto
  Delay = 1000;

  // Volver a ejecutar función "RealDateTimeSec()" con retraso para sincronizar
  setTimeout('RealDateTimeSec()',Delay); 
}


// Retornar valor de hora con el formato "hh:mm[:ss]" en una cadena
// Invocación inicial en HTML: <BODY OnLoad="formulario.hora.value=StampTime('FULL');"> 
// Invocación directa en HTML: <SCRIPT language="JavaScript"> formulario.hora.value=StampTime('FULL'); </SCRIPT> 
function StampTime(format)
{ // Inicializar variables 
  var Stamp = new Date();
  var Hours = Stamp.getHours();
  var Mins  = Stamp.getMinutes();
  var Secs  = Stamp.getSeconds();

  // Agregar un "0" a la izquierda de Horas, Minutos y Segundos
  if (Hours < 10) { Hours = '0' + Hours; }
  if (Mins  < 10) { Mins  = '0' + Mins;  } 
  if (Secs  < 10) { Secs  = '0' + Secs;  } 

  // Distinguir formato 
    if (format == 'FULL')
       { // Retornar formato "hh:mm:ss"
         return (Hours + ':' + Mins + ':' + Secs); 
       } 
  else { // Retornar formato "hh:mm"
         return (Hours + ':' + Mins);
       } 
}


// Retornar valor de fecha con los formatos "dd.mm.aaaa" o "Martes, 29 de Diciembre de 2009" en una cadena
// Invocación inicial en HTML: <BODY OnLoad="formulario.fecha.value=StampDate();"> 
// Invocación directa en HTML: <SCRIPT language="JavaScript"> formulario.fecha.value=StampDate(); </SCRIPT> 
// Invocación inicial en HTML: <BODY OnLoad="Calendar.innerHTML=StampDate('WIDE');"> 
// Invocación directa en HTML: <SCRIPT language="JavaScript"> Calendar.innerHTML=StampDate('WIDE'); </SCRIPT> 
// Area de despliegue en HTML: <DIV ID=Calendar></DIV> 
function StampDate(format)
{ // Inicializar variables 
  var Dias  = new Array('Domingo','Lunes','Martes','Miércoles','Jueves','Viernes','Sábado');
  var Meses = new Array('Enero','Febrero','Marzo','Abril','Mayo','Junio','Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre');  
  var Stamp = new Date();
  var Year  = Stamp.getYear();
  var Month = Stamp.getMonth();
  var Dated = Stamp.getDate();
  var Day   = Stamp.getDay();

  // Ajustar Año (aa, 1aa -> aaaa) 
  if (Year <= 99)  { Year += 2000; } 
  if (Year <= 199) { Year += 1900; } 

  // Distinguir formato 
    if (format == 'WIDE')
       { // Retornar formato "Martes, 29 de Diciembre de 2009"
         return (Dias[Day] + ', ' + Dated + ' de ' + Meses[Month] + ' de ' + Year); 
       }
  else { // Ajustar Mes (0..11 -> 1..12)
         Month += 1;

         // Agregar un "0" a la izquierda de Mes y Fecha
         if (Month < 10) { Month = '0' + Month; }
         if (Dated < 10) { Dated = '0' + Dated; }

         // Retornar formato "dd.mm.aaaa"
         return (Dated + '.' + Month + '.' + Year); 
       }
}


// Retornar valores de fecha y hora con el formato "dd-mmm-aaaa · hh:mm[:ss]" en una cadena
// Invocación inicial en HTML: <BODY OnLoad="formulario.fechahora.value=StampDateTime('FULL');"> 
// Invocación directa en HTML: <SCRIPT language="JavaScript"> formulario.fechahora.value=StampDateTime('FULL'); </SCRIPT> 
function StampDateTime(format)
{ // Inicializar variables 
  var Meses = new Array('ENE','FEB','MAR','ABR','MAY','JUN','JUL','AGO','SEP','OCT','NOV','DIC'); 
  var Stamp = new Date();
  var Year  = Stamp.getYear();
  var Month = Stamp.getMonth();
  var Dated = Stamp.getDate();
  var Hours = Stamp.getHours();
  var Mins  = Stamp.getMinutes();
  var Secs  = Stamp.getSeconds();

  // Ajustar Año (aa, 1aa -> aaaa) 
  if (Year <= 99)  { Year += 2000; } 
  if (Year <= 199) { Year += 1900; } 

  // Agregar un "0" a la izquierda de Fecha 
  if (Dated < 10) { Dated = '0' + Dated; }

  // Agregar un "0" a la izquierda de Horas, Minutos y Segundos
  if (Hours < 10) { Hours = '0' + Hours; }
  if (Mins  < 10) { Mins  = '0' + Mins;  }
  if (Secs  < 10) { Secs  = '0' + Secs;  } 

  // Distinguir formato 
    if (format == 'FULL')
       { // Retornar formato "dd-mmm-aaaa · hh:mm:ss"
         return (Dated + '-' + Meses[Month] + '-' + Year + ' · ' + Hours + ':' + Mins + ':' + Secs); 
       } 
  else { // Retornar formato "dd-mmm-aaaa · hh:mm"
         return (Dated + '-' + Meses[Month] + '-' + Year + ' · ' + Hours + ':' + Mins); 
       }
}

// Final de Archivo