function is_object(obj)
{
    //you may use either of the following 2 lines
     return (typeof(obj)!='object')?false:true; //original post's function 
     //return (typeof(obj)==’object’) //suggested by HB in the comment
}
function strtrim() {
    return this.replace(/^\s+/,'').replace(/\s+$/,'');
}
String.prototype.trim = strtrim;

function stringEmpty(inputstring) {
    if (inputstring == null || inputstring.trim() == "") {
        return true
    }
    else
    {
        return false
    }
}

function Required(listname, nroform) {
    // inputs:  listname [array met nummers ("n","n+1")] of namen
    // outputs: true of false [boolean]
    for (var i = 0 ; i < listname.length ; i++) {
        // begin for loop
         if (document.forms[nroform].elements[listname[i]].options) {
        // dropdown
            if (document.forms[nroform].elements[listname[i]].value=='') {                             
                document.forms[nroform].elements[listname[i]].focus();
                return false;
                break
            }
        }// dropdown
        else {
            // geen dropdown
            if (stringEmpty(document.forms[nroform].elements[listname[i]].value)) {                             
                document.forms[nroform].elements[listname[i]].focus();
                return false;
                break
            }
        }// geen dropdown
    }// end for loop
    return true
}

var a, mes, dia, anyo, febrero;
   
function anyoBisiesto(anyo){

	if (anyo < 100)
		var fin = anyo + 1900;
	else
		var fin = anyo ;

    if (fin % 4 != 0)
    	return false;
    else
    {
    	if (fin % 100 == 0)
        	{
                /**
                * si el año es divisible por 4 y por 100 y divisible por 400 > es bisiesto
                */
                if (fin % 400 == 0)
                {
                    return true;
                }
                /**
                * si es divisible por 4 y por 100 pero no lo es por 400 > no es bisiesto
                */
                else
                {
                    return false;
                }
            }
            /**
            * si es divisible por 4 y no es divisible por 100 > el año es bisiesto
            */
            else
            {
                return true;
            }
        }
    }
   
    /**
    * funcion principal de validacion de la fecha
    * argumento fecha > cadena de texto de la fecha introducida por el usuario
    */
    function validaFecha(fecha,nroForm)
    {
       /**
       * obtenemos la fecha introducida y la separamos en dia, mes y año
       */
       a=fecha;
       dia=a.split("/")[0];
       mes=a.split("/")[1];
       anyo=a.split("/")[2];
    if( (isNaN(dia)==true) || (isNaN(mes)==true) || (isNaN(anyo)==true) )
    {
        alert("La fecha introducida debe estar formada solo por numeros. Formato Fecha dd/mm/aaaa");
     return false;
       }
       if(anyoBisiesto(anyo))
           febrero=29;
       else
           febrero=28;
       /**
       * si el mes introducido es negativo, 0 o mayor que 12 > alertamos y detenemos ejecucion
       */
       if ((mes<1) || (mes>12))
       {
           alert("El mes introducido no es valido. Por favor, introduzca un mes correcto. Formato Fecha dd/mm/aaaa");
           //document.forms[nroForm].fecha.focus();
           //document.forms[nroForm].fecha.select();
           return false;
       }
       /**
       * si el mes introducido es febrero y el dia es mayor que el correspondiente
       * al año introducido > alertamos y detenemos ejecucion
       */
       if ((mes==2) && ((dia<1) || (dia>febrero)))
       {
           alert("El dia introducido no es valido. Por favor, introduzca un dia correcto. Formato Fecha dd/mm/aaaa");
           //document.forms[0].fecha.focus();
           //document.forms[0].fecha.select();
           return false;
       }
       /**
       * si el mes introducido es de 31 dias y el dia introducido es mayor de 31 > alertamos y detenemos ejecucion
       */
       if (((mes==1) || (mes==3) || (mes==5) || (mes==7) || (mes==8) || (mes==10) || (mes==12)) && ((dia<1) || (dia>31)))
       {
           alert("El dia introducido no es valido. Por favor, introduzca un dia correcto. Formato Fecha dd/mm/aaaa");
           //document.forms[0].fecha.focus();
           //document.forms[0].fecha.select();
           return false;
       }
       /**
       * si el mes introducido es de 30 dias y el dia introducido es mayor de 301 > alertamos y detenemos ejecucion
       */
       if (((mes==4) || (mes==6) || (mes==9) || (mes==11)) && ((dia<1) || (dia>30)))
       {
           alert("El dia introducido no es valido. Por favor, introduzca un dia correcto. Formato Fecha dd/mm/aaaa");
           //document.forms[0].fecha.focus();
           //document.forms[0].fecha.select();
           return false;
       }
       /**
       * si el mes año introducido es menor que 1900 o mayor que 2010 > alertamos y detenemos ejecucion
       * NOTA: estos valores son a eleccion vuestra, y no constituyen por si solos fecha erronea
       */
       if ((anyo<1900) || (anyo>2500))
       {
           alert("El año introducido no es valido. Por favor, introduzca un año entre 1900 y 2100. Formato Fecha dd/mm/aaaa");
           //document.forms[0].fecha.focus();
           //document.forms[0].fecha.select();
		   return false;
       }
       /**
       * en caso de que todo sea correcto > enviamos los datos del formulario
       * para ello debeis descomentar la ultima sentencia
       */
       else
	      return true;
          //alert("La fecha introducida es correcta. Gracias por su colaboración");
          //document.forms[0].submit();   
   }

   //La misma devuelve 1 si dateA > dateB; -1 si dateA < dateB y 0 si las dos 
   //fechas son iguales. Espero les sirva de algo. 
   function comparaFecha(fechaA, fechaB)
   {
	   
	   //alert("fechaA:"+fechaA);
	   //alert("fechaB:"+fechaB);
	   a=fechaA.split("/");
       
       diaUno=a[0];
       mesUno=a[1];
       anyoUno=a[2];
	   
	   
	   b=fechaB.split("/");
       diaDos=b[0];
       mesDos=b[1];
       anyoDos=b[2];
	   
       //uno = parseFloat(mesUno);
	   //dos= parseInt(mesDos);
	   
       //alert(mesUno);
       
       //alert(mesUno+" mesUno: int:"+ uno);
       //alert(mesDos+" mesDos int:" + dos);
	   
	   
       //alert("uno: "+diaUno+'/'+mesUno+'/'+anyoUno);
       //alert("dos: "+diaDos+'/'+mesDos+'/'+anyoDos); 
       
       
	  if(parseFloat(anyoUno) < parseFloat(anyoDos) ){
        //alert("parseInt(anyoUno) < parseInt(anyoDos)");      
	  	return -1;
	  }else if(parseFloat(anyoUno) > parseFloat(anyoDos) ){
          //alert("parseInt(anyoUno) > parseInt(anyoDos)");
		  return 1;
	  }else if(parseFloat(anyoUno) == parseFloat(anyoDos) ){
		  if(parseFloat(mesUno) < parseFloat(mesDos) ){
            //alert("mesUno < mesDos");
		  	return -1;
		  }else if(parseFloat(mesUno) > parseFloat(mesDos) ){
		  	//alert("mesUno > mesDos");
            return 1;
		  }else if(parseFloat(mesUno) == parseFloat(mesDos) ){
		  	if(parseFloat(diaUno) < parseFloat(diaDos) ){
                //alert("parseInt(diaUno) < parseInt(diaDos)");
				return -1;
			}else if(parseFloat(diaUno) > parseFloat(diaDos) ){
				//alert("parseInt(diaUno) > parseInt(diaDos)");
                return 1;
			}else if(parseFloat(diaUno) == parseFloat(diaDos) ){
				//alert("parseInt(diaUno) == parseInt(diaDos)");
                return 0;
			}
		  }
	  }
	}
  
   
   function currencyFormat(fld, milSep, decSep, e) {
    var sep = 0;
    var key = '';
    var i = j = 0;
    var len = len2 = 0;
    var strCheck = '0123456789';
    var aux = aux2 = '';
    
    if(e.which)
    {
        var whichCode =  e.which;
    }
    else
    {
        var whichCode = e.keyCode;
    }
    //var whichCode = (window.Event) ? e.which : e.keyCode;
    //alert(window.Event);
    //alert("e.which: "+e.which);
    //alert("e.keyCode: "+e.keyCode);
    
    //alert(whichCode);
    
    if (whichCode == 8)
    {
       fld.value = ""; return false; // backspace
    } 
    if (whichCode == 13) return true; // Enter
    key = String.fromCharCode(whichCode); // Get key value from key code
    if (strCheck.indexOf(key) == -1) return false; // Not a valid key
    len = fld.value.length;
    for(i = 0; i < len; i++)
     if ((fld.value.charAt(i) != '0') && (fld.value.charAt(i) != decSep)) break;
    aux = '';
    for(; i < len; i++)
     if (strCheck.indexOf(fld.value.charAt(i))!=-1) aux += fld.value.charAt(i);
    aux += key;
    len = aux.length;
    if (len == 0) fld.value = '';
    if (len == 1) fld.value = '0'+ decSep + '0' + aux;
    if (len == 2) fld.value = '0'+ decSep + aux;
    if (len > 2) {
     aux2 = '';
     for (j = 0, i = len - 3; i >= 0; i--) {
      if (j == 3) {
       aux2 += milSep;
       j = 0;
      }
      aux2 += aux.charAt(i);
      j++;
     }
     fld.value = '';
     len2 = aux2.length;
     for (i = len2 - 1; i >= 0; i--)
      fld.value += aux2.charAt(i);
     fld.value += decSep + aux.substr(len - 2, len);
    }
     
    return false;
   }                
   
   String.prototype.format=function(sepMil,sepDec) { 
    var partes=this.split(".");            //dividimos parte entera de decimal
    return partes[0].reverse().replace( /(\d{3})(?=\d)/g ,"$1"+sepMil).reverse() + (partes[1]?(sepDec + partes[1]):""); 
    }
    
    String.prototype.reverse=function() { return this.split("").reverse().join(""); }

    String.prototype.format=function(sepMil,sepDec) { 
        var partes=this.split(".");            //dividimos parte entera de decimal
        return partes[0].reverse().replace( /(\d{3})(?=\d)/g ,"$1"+sepMil).reverse() + (partes[1]?(sepDec + partes[1]):""); 
    }
    
    String.prototype.desFormat=function(sepMil,sepDec) {
        var reMil=new RegExp("\\"+sepMil,"g");        //para localizar los sepMil
        var reDec=new RegExp("\\"+sepDec);            //para localizar los sepDec
        return this.replace(reMil,"").replace(reDec,".").replace(/\s/g,"");
    }
    function redondear(cantidad, decimales) 
    {
        /*var cantidad = parseFloat(cantidad);
        var decimales = parseFloat(decimales);*/
        var cantidad = cantidad;
        var decimales = decimales;
        decimales = (!decimales ? 2 : decimales);
        return Math.round(cantidad * Math.pow(10, decimales)) / Math.pow(10, decimales);
    }
    function numbersonly(e, textbox)
    {
        var unicode=e.charCode? e.charCode : e.keyCode;
            
        if (unicode!=8) //if the key isn't the backspace key (which we should allow)
        { 
            if (textbox.value.length == 2 || textbox.value.length == 5)
            {
                if (unicode != 47) //if not a guion
                    return false; //disable key press
            }
            else
            {                    
                if (unicode < 48 || unicode > 57) //if not a number                            
                    return false; //disable key press
            }
        }
     }
    function sumaDiasAFecha(num,fecha)
    {
        
      f=fecha.split('/'); 
      f= f[1] +'/' + f[0] + '/' + f[2];
      //alert(f);  
      var d = new Date(f);
      d.setDate(d.getDate()+num);
      //d.setDate(d.getTime()+num*24*60*60);
      //alert("año: "+d.getFullYear());
      mes=d.getMonth()+1; 
      if(mes<9) mes='0'+mes;
      
      //alert(d.getDate()+"/"+mes+"/"+d.getFullYear());
      return d.getDate()+"/"+mes+"/"+d.getFullYear();
        
    }
function validaDate(e, textbox)
{
    var unicode=e.charCode? e.charCode : e.keyCode;
        
    if (unicode!=8) //if the key isn't the backspace key (which we should allow)
    { 
        if (textbox.value.length == 2 || textbox.value.length == 5)
        {
            if (unicode != 47) //if not a guion
                return false; //disable key press
        }
        else
        {                    
            if (unicode < 48 || unicode > 57) //if not a number                            
                return false; //disable key press
        }
    }
} 
