// isDate (INTEGER day, INTEGER month, INTEGER year [, BOOLEAN emptyOK])
function isDate (day, month, year)
  {
   day   = allTrim(day);
   month = allTrim(month);
   year  = allTrim(year);
   
   if ( isEmpty(day) && isEmpty(month) && isEmpty(year) )
      {
       if (isDate.arguments.length == 3)
          { return defaultEmptyOK; }
       else
          { return (isDate.arguments[3] == true); }
      }

   day   = ltrimZeros(day);
   month = ltrimZeros(month);
   year  = ltrimZeros(year);
   if ( !( isDay(day,false) && isMonth(month,false) && isYear(year,false) ) )
      {  return false; }

   var intYear     = parseInt(year); 
   var intMonth    = parseInt(month);
   var intDay      = parseInt(day);
   var daysInMonth = new Array(12);
   for (var i=1; i<=12; i++)
       {
        if ( ( i <= 7 && i%2 != 0 ) || ( i > 7 && i%2 == 0 ) )
           { daysInMonth [i] = 31; }
        else
            if ( i != 2 )
               { daysInMonth [i] = 30; }
            else
               if ( ( intYear%4 == 0 && intYear%100 != 0 ) ||
                    ( intYear%4 == 0 && intYear%100 == 0 && year%400 == 0 ) )
                   { daysInMonth [i] = 29; }
               else
                  { daysInMonth [i] = 28; }
       }

    if (intDay > daysInMonth[intMonth]) return false; 
    //if ((intMonth == 2) && (intDay > daysInFebruary(intYear))) return false;
    return true;
  }


function cmonth (month)
  {
   var charMth
   switch ( month )
     {
      case  1 : charMth = "January";   break;
      case  2 : charMth = "February";  break;
      case  3 : charMth = "March";     break;
      case  4 : charMth = "April";     break;
      case  5 : charMth = "May";       break;
      case  6 : charMth = "June";      break;
      case  7 : charMth = "July";      break;
      case  8 : charMth = "August";    break;
      case  9 : charMth = "September"; break;
      case 10 : charMth = "October";   break;
      case 11 : charMth = "November";  break;
      case 12 : charMth = "December";  break;
      default : charMth = "";          break;
     }
   return charMth;
  }


function chkFromTodate(sday,smonth,syear,eday,emonth,eyear)
  {
   sday   = ltrimZeros(sday);
   smonth = ltrimZeros(smonth);
   syear  = ltrimZeros(syear);
   eday   = ltrimZeros(eday);
   emonth = ltrimZeros(emonth);
   eyear  = ltrimZeros(eyear);

   sday   = parseInt(sday);
   smonth = parseInt(smonth);
   eday   = parseInt(eday);
   emonth = parseInt(emonth);

   if (syear > eyear) { return false; }
   if (syear < eyear) { return true;  }
   if (smonth > emonth) { return false; }
   if (smonth < emonth) { return true; }               
   if (sday > eday) { return false; }
   return true;
  }


// optional whether end date can be = to start date
function validDteRange (sdd,smm,syy,edd,emm,eyy)
  {
   var sdate = "" + appendLeft(syy,"0",4) + appendLeft(smm,"0",2) + appendLeft(sdd,"0",2);
   var edate = "" + appendLeft(eyy,"0",4) + appendLeft(emm,"0",2) + appendLeft(edd,"0",2);
   if (validDteRange.arguments.length == 7)
      { var blnEqual = (validDteRange.arguments[6] == true); }
   else
      { var blnEqual = false; }

   if ( blnEqual )
      {
       if ( edate <= sdate )
          { return false; }
       else
          { return true; }
      }
   else
      {
       if ( edate < sdate )
          { return false; }
       else
          { return true; }
      }
  }


// isYear ( STRING s [, BOOLEAN emptyOK] )
//
// isYear returns true if string s is a valid 
// Year number.  Must be 4 digits.
function isYear (s)
  {
   s = allTrim(s);
   if ( isEmpty(s) )
      {
       if (isYear.arguments.length == 1)
          { return defaultEmptyOK; }
       else
          { return (isYear.arguments[1] == true); }
      }

   s = ltrimZeros(s);
   if ( !isNonnegativeInteger(s) ) { return false; }
   return ( s.length == 4 );
   //return ( s.length == 2 || s.length == 4  );
  }


// isMonth (STRING s [, BOOLEAN emptyOK])
function isMonth (s)
  {
   s = allTrim(s);
   if ( isEmpty(s) )
      {
       if (isMonth.arguments.length == 1) { return defaultEmptyOK; }
       else { return (isMonth.arguments[1] == true); }
      }

   s = ltrimZeros(s);
   return isIntegerInRange (s, 1, 12);
  }


// isDay (STRING s [, BOOLEAN emptyOK])
function isDay (s)
  {
   s = allTrim(s);
   if ( isEmpty(s) )
      {
       if (isDay.arguments.length == 1) { return defaultEmptyOK; }
       else { return (isDay.arguments[1] == true); }
      }

   s = ltrimZeros(s);
   return isIntegerInRange (s, 1, 31);
  }


// daysInFebruary (INTEGER year)
// February has 29 days in any year evenly divisible by four,
// EXCEPT for centurial years which are not also divisible by 400.
function daysInFebruary (year)
  {
   return (  year%4 == 0 && ( !( year%100 == 0 || year%400 == 0 ) ) ? 29 : 28 );
   // return (  ((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0) ) ) ? 29 : 28 );
  }



function isTime ( timeIn )
  {
   // if timeIn is 05:00, aryTime[0]=05 aryTime[1]=00
   // if : not found and length of timeIn >= 2 then add :00 to timeIn
   var aryTime = timeIn.split(":");
   if ( aryTime.length != 2 ) { return false; }

   //alert ( aryTime[0] + "*" + aryTime[1] ); return true;
   if ( !isHour(aryTime[0]) ) { return false; }
   if ( !isMinute(aryTime[1]) ) { return false; }
   return true;
  }


function isHour ( hrIn )
{//check if integer, then  range 00 - 12
	if(!isIntegerInRange (hrIn, 00, 24)) {
		return false;
	}
	return true;
}


function isMinute ( minIn )
{//check if integer, then  range 00 - 59
	if(!isIntegerInRange (minIn, 00, 59)) {
		return false;
	}
	return true;
}


function validTmeRange (stime, etime)
  {
   var startTime = "" + appendLeft(stime,"0",5);
   var endTime   = "" + appendLeft(etime,"0",5);;
   if ( endTime <= startTime )
      { return false; }
   else
      { return true; }
  }