
//-----Funciones Auxiliares-----------//

//Selección de Browser
var isIE = document.all?true:false;
var isMoz=document.implementation && document.implementation.createDocument?true:false;
var nav4 = window.Event ? true : false;

//GetKeyCode(evt): Obtiene código de tecla pulsada
//       Uso: var KeyPressed=GetKeyCode(event)
function GetKeyCode(evt)
{
	if( evt == undefined || evt == null ) evt = window.event;
	var key = nav4 ? evt.which : evt.keyCode;
	return key;

}
//-----Fin Funciones Auxiliares-----------//

//Constantes 

var CHD_ERROR_H_LIMPIAR=0;
var CHD_ERROR_H_HOY=1;
var CHD_ERROR_H_MANTENER=2;
var CHD_ERROR_H_FIRST=3;
var CHD_ERROR_H_LAST=4;
//

var gchd_error_handler_def=CHD_ERROR_H_HOY;

//check_date(field): Controla ingreso correcto de datos y devuelve 
//                  fecha formateada
//          Uso: <input type="text" onblur="check_date(this)">
//              Si se ingresa 010101 devuelve 01-01-2001
//              Si se ingresa 30/03/2005 devuelve 30-03-2005
function check_date(field)
{
    var checkstr = "0123456789";
	var DateField = field;
	var Datevalue = "";
	var DateTemp = "";
	var seperator = "/";
	var day;
	var month;
	var year;
	var leap = 0;
	var err = 0;
	var i;
	var ld_hoy = new Date();
	var ln_curyear = ld_hoy.getFullYear();
    err = 0;
    DateValue = DateField.value;
	/* Delete all chars except 0..9 */
	for (i = 0; i < DateValue.length; i++) {
	  if (checkstr.indexOf(DateValue.substr(i,1)) >= 0) {
		     DateTemp = DateTemp + DateValue.substr(i,1);
	  }
	}
	DateValue = DateTemp;
	/* Always change date to 8 digits - string*/
	/* if year is entered as 2-digit / always assume 20xx */
	if (DateValue.length == 6) {
	    DateValue = DateValue.substr(0,4) + '20' + DateValue.substr(4,2); }
	if (DateValue.length != 8) {
	      err = 19;}
	/* year is wrong if year = 0000 */
	year = DateValue.substr(4,4);
	if (year == 0) {
	    err = 20;
	}
	if( year< (ln_curyear-100)){
            err = 27;
	 }
	if( year> (ln_curyear+50)){
            err = 28;
	 }
	/* Validation of month*/
	month = DateValue.substr(2,2);
	if ((month < 1) || (month > 12)) {
	     err = 21;
	}
	/* Validation of day*/
	day = DateValue.substr(0,2);
	if (day < 1) {
	    err = 22;
	}
	/* Validation leap-year / february / day */
	if ((year % 4 == 0) || (year % 100 == 0) || (year % 400 == 0)) {
	    leap = 1;
	}
	if ((month == 2) && (leap == 1) && (day > 29)) {
	   err = 23;
	}
	if ((month == 2) && (leap != 1) && (day > 28)) {
	    err = 24;
	}
	/* Validation of other months */
	if ((day > 31) && ((month == "01") || (month == "03") || (month == "05") || (month == "07") || (month == "08") || (month == "10") || (month == "12"))) {
	   err = 25;
	}
	if ((day > 30) && ((month == "04") || (month == "06") || (month == "09") || (month == "11"))) {
	   err = 26;
	}
	/* if 00 ist entered, no error, deleting the entry */
	if ((day == 0) && (month == 0) && (year == 00)) {
	   err = 0; day = ""; month = ""; year = ""; seperator = "";
	}
	 /* if no error, write the completed date to Input-Field (e.g. 13.12.2001) */
	if (err == 0) {
	   DateField.value = day + seperator + month + seperator + year;
	}
	/* Error-message if err != 0 */
	else {
	    alert("Fecha Incorrecta!");
	    DateField.select();
	    switch(gchd_error_handler_def)
	    {
	        case CHD_ERROR_H_LIMPIAR:
	            DateField.value="";
	            break; 
	        case CHD_ERROR_H_HOY:
	            var ld_hoy=new Date();
	            var ln_dd=ld_hoy.getDate()<10?'0'+ld_hoy.getDate():ld_hoy.getDate();
	            var ln_mm=(ld_hoy.getMonth()+1)<10?'0'+(ld_hoy.getMonth()+1):(ld_hoy.getMonth()+1);
	            var ln_aa=ld_hoy.getFullYear();
	            DateField.value = ln_dd + seperator + ln_mm + seperator + ln_aa;
	            break;
	        case CHD_ERROR_H_MANTENER:
	            break;
	        case CHD_ERROR_H_FIRST:
	            break;
            case CHD_ERROR_H_LAST:
	            break;                         	            
	    }//--switch
	    //DateField.value="";
	    //DateField.focus();
	    return false;
	}
	return true;
}
//calendario(fieldid): Crea un calendario
//          Parametros: fieldid[string], id del campo contenedor de la fecha
//          Uso:<input name="AD_FECNAC2" id="AD_FECNAC2" size="11" readonly="readonly" onchange="alert('onchange')"/>
//				<script > calendario('AD_FECNAC2')</script>				
//          Precauciones: Debe ejecutarse con la función setTimeout para darle tiempo
//                      al browser de reconocer el iframe
//          Dependencias: js/cal/calbtn.gif
//                      js/cal/ipopeng.htm
//                      js/cal/normal.js
//                      js/cal/plugins.js
//                      js/cal/normal.css
//     
var fieldarr=new Array();                 
function calendario(fieldid)
{ 
    //IE necesita más tiempo para crear elementos,
    // hasta ahora, se necitan mínimo 500 milisegundos.
    if(isMoz)
    {creacal(fieldid);
    }else{
    fieldarr[fieldarr.length]=fieldid;
    if(!window.onload)
     window.onload=function(){gencal();}//setTimeout("creacal('"+fieldid+"')",1000);
    else{
        func=window.onload.toString();
        isfunc=func.indexOf('gencal');
        if(isfunc<0)
        {
            no=window.onload;
            window.onload= function(){no();gencal();}
        }

        }
     //alert(window.onload)
    }
    
}
function gencal()
{
    for(i=0;i<fieldarr.length;i++)
    {
    //    alert(fieldarr[i]);
        creacal(fieldarr[i]);
        
    }
    
}

function creacal(fieldid)
{

    if(document.getElementById(fieldid)==null){alert('Calendario: Error,campo no existe');return false;}
    if(document.getElementById('gToday:normal:agenda.js')==null)creaIframe();
    cmp=document.getElementById(fieldid);
    var ndig=/\D+/g;
    val=cmp.value
    cmp.value=val.replace(ndig,'/')
    im=document.createElement('IMG');
    im.className='PopcalTrigger';
    im.align="absmiddle"; 
    im.src="js/cal/calbtn.gif";
    im.width="22";
    im.height="20"; 
    im.border="0";
    anc=document.createElement('A');
    anc.href="javascript:void(0)"; 
    anc.id='b'+fieldid;
    anc.style.display = cmp.style.display;
    anc.onclick=function()
    {
            if(self.gfPop)
            {   
                gfPop.fPopCalendar(document.getElementById(this.id.slice(1,this.id.length)))
            }
            
            return false;
    };
    anc.hideFocus="true";  
    anc.appendChild(im);
    cmp.parentNode.insertBefore(anc,cmp.nextSibling);
    return true;
}

//creaIframe(): Función secundaria para calendario, crea iframe necesaria
function creaIframe()
{
  var lo_califr 	=document.createElement('iframe');
  lo_califr.width	='174';
  lo_califr.height	='189';
  lo_califr.name	='gToday:normal:agenda.js';
  lo_califr.id		='gToday:normal:agenda.js';
  lo_califr.src		='js/cal/ipopeng.htm';
  lo_califr.scrolling	='no';
  lo_califr.frameborder ='0';
  lo_califr.style.visibility='visible';
  lo_califr.style.zIndex='999';
  lo_califr.style.position='absolute';
  lo_califr.style.top	='-500px';
  //document.body.appendChild(lo_califr);
  document.body.insertBefore(lo_califr,document.body.lastChild);
//  lo_califr.name	='gToday|normal|agenda.js';
//  lo_califr.id		='gToday|normal|agenda.js';
  return lo_califr;
/*   document.body.innerHTML+='<iframe width="174" height="189" name="gToday:normal:agenda.js" id="gToday:normal:agenda.js" src="js/cal/ipopeng.htm" scrolling="no" frameborder="0" style="visibility:visible; z-index:999; position:absolute; top:-500px;"></iframe>';
    if(document.getElementById('gToday:normal:agenda.js')==null) alert('no');
    return true;*/
}
//Fecha(evt): Permite el ingreso solamente de caracteres válidos para fecha
//      Uso: <input type="text" onkeypress="return Fecha(event)"/>
function Fecha(evt) 
{
	var key = nav4 ? evt.which : evt.keyCode;	
	return (key <= 13 || (key >= 48 && key <= 57)|| key==45);
}
//ddiff(idfld1,idfld2): Compara 2 fechas
//          Parámetros: idfld1[string], id del campo 1
//                      idfld2[string], id del campo 2
//          Uso: retval=ddiff('AD_FECHA1','AD_FECHA2')
//          Devuelve:   1 = Campo1 mayor que Campo2
//                      -1 = Campo2 mayor que Campo1
//                      0 = Campo1 igual que Campo2
//          Asume: día, mes y año con al menos 2 dígitos (01-01-05), se recomienda
//                  el uso previo de la funcion check_date()
//          Dependencias: funcion jIsodate(date)
function ddiff(idfld1,idfld2)
{
    if(document.getElementById(idfld1)==null){alert('ddiff:Error, no existe campo 1');return false;}
    else {f1v=document.getElementById(idfld1).value;}
    if(document.getElementById(idfld2)==null){alert('ddiff:Error, no existe campo 2');return false;}
    else {f2v=document.getElementById(idfld2).value;}
    if(f1v.length>10 || f1v<1){alert('ddiff:Error, fecha 1 no válida');return false;}
    if(f2v.length>10 || f2v<1){alert('ddiff:Error, fecha 2 no válida');return false;}
    f1n=jIsodate(f1v);
    f2n=jIsodate(f2v);
    if(f1n>f2n)return 1;
    else if(f1n<f2n)return -1;
    else if(f1n==f2n)return 0;
    
}

//jIsodate(date): Devuelve fecha en formato numerico (ISO)
//          Parametros: date[string], la fecha
//          Uso: retval=jIsodate('10-10-2004')
//          Devuelve: retval=20041010
//          Asume: día, mes y año con al menos 2 dígitos (01-01-05), se recomienda
//                  el uso previo de la funcion check_date()

function jIsodate(date)
{
    if( !isNaN(date))return(date);
    
    A = date.split(/\D+/) ;
    if(A[2]==undefined )return('19000101');
    if(A[2].length<3)
    {
        A[2]=parseInt(A[2]);
        A[2]+=2000;
    }
    //D = new Date(A[2], A[1]-1, A[0])
    return(A[2]+ A[1]+ A[0])
}
//dIsodate(dateobj): Devuelve fecha en formato numerico (ISO)
//          Parametros: dateobj[date], la fecha
//          Uso: var hoy=new Date()
//          retval=jIsodate(hoy)
//          Devuelve: retval=20051010
//          Asume: dateobj es un objeto Date válido

function dIsodate(dateobj)
{
 return dateobj.getFullYear()+''+ ((1000+(dateobj.getMonth() + 1)).toString().slice(2,4))+''+(1000+dateobj.getDate()).toString().slice(2,4);
}

//strgetFullYear(strdate):Devuelve año en fecha tipo string
//              Parametros: strdate[string]: fecha tipo string en formato "00/00/00"
//                          (debe llevar cualquier separador)
//              Uso     :   var anio=strgetFullYear("27-06-2003")
//              Devuelve : anio=2003
function strgetFullYear(strdate){
    A = strdate.split(/\D+/) ; 
    return (A[2])
}
//strgetMonth(strdate):Devuelve mes en fecha tipo string
//              Parametros: strdate[string]: fecha tipo string en formato "00/00/00"
//                          (debe llevar cualquier separador)
//              Uso     :   var mes=strgetFullYear("27-06-2003")
//              Devuelve : mes=6
function strgetMonth(strdate){
    A = strdate.split(/\D+/) ; 
    return (A[1])
}
//strgetDate(strdate):Devuelve dia en fecha tipo string
//              Parametros: strdate[string]: fecha tipo string en formato "00/00/00"
//                          (debe llevar cualquier separador)
//              Uso     :   var dia=strgetFullYear("27-06-2003")
//              Devuelve : dia=27
function strgetDate(strdate){
    A = strdate.split(/\D+/) ; 
    return (A[0])
}
//mesLiteral(nummes): Devuelve expresion en palabras del numero de mes
//				parametros: nummes[num]: numero del mes
//							uso : var ls_mes =mesLiteral(3);
//							devuelve: 'Marzo'
function mesLiteral(nummes){
	switch(nummes){
		case 1:return 'Enero';break;
		case 2:return 'Febrero';break;
		case 3:return 'Marzo';break;
		case 4:return 'Abril';break;
		case 5:return 'Mayo';break;
		case 6:return 'Junio';break;
		case 7:return 'Julio';break;
		case 8:return 'Agosto';break;
		case 9:return 'Septiembre';break;
		case 10:return 'Octubre';break;
		case 11:return 'Noviembre';break;
		case 12:return 'Diciembre';break;
		default:return 'Error: Mes '+nummes;break;
	}
}
//dIsotoRoman( isodate,sep) : Devuelve fecha en formato latin 
//					Parametros : isodate[num]: Fecha en formato ISO ( ej. 20060228 )
//          							sep[char]: Separador ( ej. '/' )
//								Devuelve String de la fecha Iso en formato Latino 
//					uso : var ls_fecha
function dIsotoRoman( isodate,sep )
{
	isodate = parseFloat(isodate);
 if(sep==undefined) sep ='/';
 var ls_aa = isodate.toString().slice(0,4);
 var ls_mm = isodate.toString().slice(4,6);
 var ls_dd = isodate.toString().slice(6,8);
 return  ls_dd+sep+ls_mm+sep+ls_aa;
}