function isNull(str)
{
  return (str == "undefined" && str.length < 1) ;
}

function addZero(textObj, objMaxLength)
{
  var objValue = textObj.value;
  if (textObj.value != "")
  {
    var valueLength = objValue.length;
    for (var i=valueLength; i<objMaxLength; i++)
    {
      objValue = "0" + objValue;
    }
    textObj.value = objValue;
  }
  return objValue;
}

function isValidLong(from,to,value)
{
  return isIntegerChar(value) && value.indexOf(".")<0 && isWithRange(from,to,value) ;
}

function isIntegerChar(s){
  for(i=0;i< s.length;i++)
  {   
    var c = s.charAt(i);
    if (!isDigit(c)) return false ; 
  }
  return true;  
}

function isWithRange(fromRange,toRange,inNum){
  var lMin = isNull(fromRange) ? DEFAULT_MIN : fromRange ;
  var lMax = isNull(toRange) ? DEFAULT_MAX : toRange ; 
  var v = parseFloat(inNum) ;
  return (parseFloat(lMax)>=v) && (v>=parseFloat(lMin));
}

function isDigit (c){   
  return ((c >= "0") && (c <= "9")) ;
}

function isValidDate(input, sformat)
{
  // leap year logic :
  // year % 4 = 0 ==> is leap year
  // year % 100 = 0 ==> not leap year
  // year % 400 = 0 ==> is leap year
  // usage : isValidDate(test.datetest.value, 'dd/mm/YYYY') return true / false
  // modification 1 : "dd/mm/yyyy hh:mm:ss"
  if (input != null && sformat != null)
  {
    if (input.length != sformat.length) return false;
  }
  var re = /\/|-/gi;
  if ((input.replace(re, "")) == "") return true;
  
  var dStart = 0 ,mStart = 0 , yStart = 0;
  var dLength = 0 ,mLength = 0 ,yLength = 0;
  var formd = "d" ,formD = "D";
  var formm = "m" ,formM = "M";
  var formy = "y" ,formY = "Y";
  var dateformat = sformat;
  
  var datestr = input;

  for (var k = 0 ; k < dateformat.length ; k++ )
  {
    if ( dateformat.substr(k,1) == formd || dateformat.substr(k,1) == formD ) {dLength += 1; dStart = k}
    if ( dateformat.substr(k,1) == formm || dateformat.substr(k,1) == formM ) {mLength += 1; mStart = k}
    if ( dateformat.substr(k,1) == formy || dateformat.substr(k,1) == formY ) {yLength += 1; yStart = k}
  }
  dStart = dStart - dLength + 1;
  mStart = mStart - mLength + 1;
  yStart = yStart - yLength + 1;
  var inDay = datestr.substr(dStart,dLength);
  if (isNull(inDay) && !isValidLong(1,31,inDay)) return false;
  var inMonth = datestr.substr(mStart,mLength);
  if (isNull(inMonth) && !isValidLong(1,12,inMonth)) return false;
  var inYear = datestr.substr(yStart,yLength);
  if (isNull(inYear) && !isValidLong(1900,9999,inYear)) return false;
  if (inMonth == 1 || inMonth == 3 || inMonth == 5 || inMonth == 7 || inMonth == 8 || inMonth == 10 || inMonth == 12)
  {
    if (inDay > 31) return false;
  }
  else if (inMonth == 4 || inMonth == 6 || inMonth == 5 || inMonth == 9 || inMonth == 11)
  {
    if (inDay > 30) return false;
  }
  else
  {
    if (inYear%400 == 0)
    { // leap year
      if(inDay > 29) return false; 
    } 
    else
    {
      if (inYear%100 == 0 && inYear%1000!=0) { if (inDay > 28) return false; } // not leap year
      else if (inYear%4 == 0) { if (inDay > 29) return false; } // leap year
      else { if (inDay > 28) return false; } // not leap year
    }
  }
  return true;
}