function testDateCall(id, p1, p2, p3) {     var dtv = document.getElementById(id).value     var ndtv = formatDate(dtv, p1, p2, p3)     if (ndtv == "" && !p1) {          alert("Invalid Date")          setTimeout("focusElement(document.getElementById('" + id + "'))",0)          return (false)     }     else          document.getElementById(id).value = ndtv     return (true)}function formatDate(dt, allowblank, allowna, allowstar) {     // valid shortcut values     var sv = new String("TMHYRW")     // chop off date at first space     if (dt.indexOf(" ") > -1)          dt = dt.substring(0,dt.indexOf(" "))     dt = dt.toUpperCase()     l = dt.length     // check for special cases: blank, NA, *     if ((dt=="") && (allowblank))          return ("")     if ((dt=="NA") && (allowna))          return ("NA")     if ((dt=="*") && (allowstar))          return ("*")     // defaults     d = new Date()     mm = d.getMonth()+1     mm = mm.toString()     mm = formatString(mm,"99")     dd = d.getDate()     dd = dd.toString()     dd = formatString(dd,"99")     fy = d.getFullYear()     fy = fy.toString()     cc = fy.substring(0,2)     yy = fy.substring(2,5)     // look for delimiters     var x1=-1, x2=-1     for (var i=0; i<l; i++) {          if (isNaN(dt.substring(i,i+1))) {               x1=i               break          }     }     if (x1 > -1) {          for (var i=x1+1; i<l; i++) {               if (isNaN(dt.substring(i,i+1))) {                    x2=i                    break               }          }     }     // check date format used     // delimited     if ((x1 > -1)  && (sv.indexOf(dt) == -1)) {          if (x2==0) {               // only one delimiter, no good               return ("")          }          else {               // delimited date               mm = dt.substring(0,x1)               mm = formatString(mm,"99")               dd = dt.substring(x1+1,x2)               dd = formatString(dd,"99")               yy = dt.substring(x2+1,dt.length)               if (yy.length==2) {                    if (yy < 21)                         yy = "20"+yy                    else                         yy = "19"+yy               }               dt=mm+"/"+dd+"/"+yy               if (testDate(dt) == true)                    return (dt)               else                    return ("")          }     }     // not delimited     switch (l) {          case 0:               dt = mm+"/"+dd+"/"+fy               break          case 1:               switch (dt) {                    case "T":                         // today                         dt = mm+"/"+dd+"/"+fy                         break                    case "M":                         // first of month                         dt = mm+"/01/"+fy                         break                    case "H":                         // last day of month                         ld = daysInMonth(mm+"/01/"+fy)                         dt = mm+"/"+ld+"/"+fy                         break                    case "Y":                         // First of year                         dt = "01/01/"+fy                         break                    case "R":                         // last of year                         dt = "12/31/"+fy                         break                    case "W":                         // tomorrow                         ms = new Date()                         ms = ms.getTime()                         ms = ms+(1000*60*60*24)                         ms = new Date(ms)                         mm = ms.getMonth()+1                         mm = formatString(mm,"99")                         dd = ms.getDate()                         dd = formatString(dd,"99")                         fy = ms.getFullYear()                         dt = mm+"/"+dd+"/"+fy                         break                    default:                         dt=""               }               break          case 2:               mm = dt.substr(0,1)               dd = dt.substr(1,1)               dt = "0"+mm+"/0"+dd+"/"+fy               break          case 3:               mm = dt.substr(0,1)               dd = dt.substr(1,2)               dt = "0"+mm+"/"+dd+"/"+fy               break          case 4:               mm = dt.substr(0,2)               dd = dt.substr(2,2)               dt = mm+"/"+dd+"/"+fy               break          case 5:               mm = dt.substr(0,1)               dd = dt.substr(1,2)               yy = dt.substr(3,2)               yy = formatString(yy,"99")               if (yy<"21")                    fy = "20"+yy               else                    fy = "19"+yy               dt = "0"+mm+"/"+dd+"/"+fy               break          case 6:               mm = dt.substr(0,2)               dd = dt.substr(2,2)               yy = dt.substr(4,2)               yy = formatString(yy,"99")               if (yy<"21")                    fy = "20"+yy               else                    fy = "19"+yy               dt = mm+"/"+dd+"/"+fy               break          case 7:               yy = dt.substr(5,2)               yy = formatString(yy,"99")               if (yy<"21")                    fy = "20"+yy               else                    fy = "19"+yy               dt = "0"+dt.substr(0,5)+fy               break          case 8:               // must be MMDDYYYY as delimited dates were caught above               mm = dt.substr(0,2)               dd = dt.substr(2,2)               fy = dt.substr(4,4)               dt = mm+"/"+dd+"/"+fy               break          default:               dt=""     }     if (testDate(dt) == true)          return (dt)     else          return ("")}function testDate(dt){     // test a date in MM/DD/YYYY format     // run it through formatDate instead if not sure of format     mm = dt.substr(0,2)     dd = dt.substr(3,2)     yy = dt.substr(6,4)     mxd = daysInMonth(mm+"/01/"+yy)     if ((mm < 1) || (mm > 12)  || isNaN(mm))     {          return (false)     }     if ((dd < 1) || (dd > mxd) || isNaN(dd))     {          return (false)     }     if ((yy < 1900) || (yy > 2100) || isNaN(yy))     {          return(false)     }     return (true)}function daysInMonth(dt){      // Return days in month      // input is a MM/01/YYYY date      dsima = new Array(31,28,31,30,31,30,31,31,30,31,30,31)      mm = dt.substr(0,2)      yy = dt.substr(6,4)      dsim = dsima[mm-1]      // leap years      // divisible by 4      // if a century, then only if divisible by 400      if (mm == 2)      {          // february          if (yy % 4 == 0)          {               // divisible by 4?               if (yy % 100 == 0)               {                    // a century?                    if (y % 400 == 0)                    {                         //divisible by 400?                         dsim++                    }               }               else               {                    // not a century, but divisible by 4                    dsim++               }          }     }     return(dsim)}function dateMath(dt,days) {     // assume date in mm/dd/yyyy format     dsim = daysInMonth(dt)     mm = toNumInt(dt.substr(0,2))     dd = toNumInt(dt.substr(3,2))     yy = toNumInt(dt.substr(6,4))     d2 = dd + toNumFloat(days)     while (d2 > dsim) {          d2 = d2-dsim          mm++          if (mm == 13) {               mm = 1               yy++          }     }     while (d2 < 1) {          mm--          if (mm == 0) {               mm = 12               yy--          }          mm = formatString(mm,"99")          dt = mm+"/01/"+yy          dsim = daysInMonth(dt)          d2 = d2+dsim     }     mm = formatString(mm,"99")     d2 = formatString(d2,"99")     dt = mm+"/"+d2+"/"+yy     return (dt)}function niceDate(dt, type){     // Return back date based on type     // dt must be valid date     // Type:     // 1- day-name, month-name day, year     days = new Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday")     months = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December")     var ndt= new Date(dt)     var yy = ndt.getFullYear()     var mm = months[ndt.getMonth()]     var dd = ndt.getDate()     var dy = days[ndt.getDay()]     var ret = dy + ", " + mm + " " + dd + ", " + yy     return (ret)}function monthName(mm, len) {     // Return back month name     months = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December")     return (months[mm-1].substring(0,len))}function testDOW(id){     var dt = document.getElementById(id).value     var dow = dayOfWeek(dt)     if ((dow < 1) || (dow > 7))     {          alert("Invalid DOW calculation")          setTimeout("focusElement(document.getElementById('" + id + "'))",0)     }}function dayOfWeek(dt) {     // input is MM/DD/YYYY     // return day of the week, Monday = 1, Sunday = 7     var ndt = new Date(dt)     var dow = ndt.getDay(ndt)-1     if (dow == 0)          dow = 7     if (dow == -1)          dow = 6     return (dow)}function dayOfWeek0(dt) {     // input is MM/DD/YYYY     // return day of the week, Sunday = 0, Sat = 6     var ndt = new Date(dt)     return(ndt.getDay(ndt))}// TIMEfunction testTimeCall(id, p1, p2, p3){     // p1 - allowblank     // p2 - allowna     // p3 - allowstar     tmv = document.getElementById(id).value     ntmv = formatTime(tmv, p1, p2, p3)     if (ntmv=="" && p1==0)     {          alert("Bad Time")          setTimeout("focusElement(document.getElementById('" + id + "'))",0)          return(false)     }     else     {          document.getElementById(id).value = ntmv          return(true)     }}function formatTime(tm, allowblank, allowna, allowstar){     tm = tm.toUpperCase()     // check for special cases: blank, NA, *     if ((tm=="") && (allowblank))     {          return ("")     }     if ((tm=="NA") && (allowna))     {          return ("NA")     }     if ((tm=="*") && (allowstar))     {          return ("*")     }     // defaults     t = new Date()     var hh = t.getHours()     var mm = "00"     var am = 0     var pm = 0     var x = tm.indexOf("A")     if (x > -1)     {          tm = tm.substring(0,x)          am = -1     }     var x = tm.indexOf("P")     if (x > -1)     {          tm = tm.substring(0,x)          pm = -1     }     l = tm.length     switch (l)     {          case 0:               tm = hh + ":" + mm               break          case 1:               tm = tm + ":" + mm               break          case 2:               tm = tm.substring(0,2) + ":" + mm               break          default:               var x = tm.indexOf(":")               if (x==0)               {                    tm = tm.substring(0,1) + ":" + mm               }               else               {                    tm = tm.substring(0,x) + ":" + tm.substring(x+1,Math.min(tm.length,x+3))               }               break     }     var x = tm.indexOf(":")     var hv = tm.substring(0,x)     var mv = tm.substring(x+1,tm.length)     hv = hv - 0  // convert to numeric, ParseInt doesn't like a leading 0     mv = mv - 0     if (hv > 12)     {         hv = hv - 12         pm = -1         am = 0     }     // catch any crap     hv = Math.max(0, Math.min(12, hv))     mv = Math.max(0, Math.min(59, mv))     tm = hv.toString() + ":" + formatString(mv,"99")     if ((! am) && (! pm))     {          if ((hv < 7) || (hv==12))          {               pm = -1          }          else          {               am = -1          }     }     if (am)     {          tm = tm + "AM"     }     else     {          tm = tm + "PM"     }     return (tm)}
