  var MonthsOfTheYear = [
    [1, 'Jan', 'January'],
    [2, 'Feb', 'February'],
    [3, 'Mar', 'March'],
    [4, 'Apr', 'April'],
    [5, 'May', 'May'],
    [6, 'Jun', 'June'],
    [7, 'Jul', 'July'],
    [8, 'Aug', 'August'],
    [9, 'Sep', 'September'],
    [10, 'Oct', 'October'],
    [11, 'Nov', 'November'],
    [12, 'Dec', 'December'],    
  ];
  
  var KEYCODE_LEFTARROW = 37;
  var KEYCODE_UPARROW = 38;
  var KEYCODE_RIGHTARROW = 39;
  var KEYCODE_DOWNARROW = 40;
  var KEYCODE_BACKSPACE = 8;
  
  function EventWasKeyFor(e, keycode) {    
    var unicode = e.charCode ? e.charCode : e.keyCode; 
    if (unicode==keycode) return true;
    return false
  }
  function EventKeyWasNumber(e) {
    var unicode = e.charCode ? e.charCode : e.keyCode; 
    if (unicode<48||unicode>57) return false;
    return true;
  } 
  
  function MoveUpDown(e, textbox, Max, Min) {        
    if (EventWasKeyFor(e, KEYCODE_UPARROW)==true) {      
      if (IsNumeric(textbox.value)==true) {        
        var NewNumUp = Number(textbox.value) + 1;
        if (NewNumUp>Max) NewNumUp = Max;
        
        textbox.value = NewNumUp;
        return true;
      }
    } 
    else if (EventWasKeyFor(e, KEYCODE_DOWNARROW)==true) {            
      if (IsNumeric(textbox.value)==true) {        
        var NewNumDown = Number(textbox.value) - 1;
        if (NewNumDown<Min) NewNumDown = Min;
        textbox.value = NewNumDown;
        return true;
      }
    }
    return false;
  }
  
  function IsNumberInRange(num, min, max) {
    if (IsNumeric(num)==true) {
      var n = Number(num);
      if (n>=min && n <=max) {
        return true;
      }  
    }     
    return false;
  }
  
  function IsNumeric(input)
  {
    var ValidChars = '0123456789.';
    var IsNumber=true;
    var Char;
    for (i = 0; i < input.length && IsNumber == true; i++) 
    { 
      Char = input.charAt(i); 
      if (ValidChars.indexOf(Char) == -1) 
      {
        IsNumber = false;
      }
    }
    return IsNumber;
  }


  function ProcessEventsForTimeHour(e, hourTextbox, minuteTextboxName) {
    var minuteTextbox = document.getElementById(minuteTextboxName);
    if (minuteTextbox) {
      if (MoveUpDown(e, hourTextbox, 23, 0)==false) {
        if (hourTextbox.value.length==2) {
          if (IsNumberInRange(hourTextbox.value, 0, 23)==true) {
            if (EventKeyWasNumber(e)==true) {
              minuteTextbox.focus();
              minuteTextbox.select();
            }
          }
        }
      }
    }
  }
  
  function ProcessEventsForTimeMinute(e, minuteTextbox) {
    MoveUpDown(e, minuteTextbox, 59, 0);
  }
  
  function ProcessEventsForDateDay(e, dayTextbox, monthTextboxName) {
    if (MoveUpDown(e, dayTextbox, 31, 1)==false) {
      var monthTextbox = document.getElementById(monthTextboxName);
      if (monthTextbox) {
        if (dayTextbox.value.length==2) {          
          if (IsNumberInRange(dayTextbox.value, 1, 31)==true) {
            if (EventKeyWasNumber(e)==true) {
              monthTextbox.focus();
              monthTextbox.select();
            }
          }
        }
      }
    }
  }
  function ProcessEventsForDateYear(e, yearTextbox) {
    MoveUpDown(e, yearTextbox, 2999, 1900);
  }  
  
  // MonthDisplayStyle: 0 = numeric, 1 = short month , 2 = Long month
  function ProcessEventsForDateMonth(e, monthTextbox, MonthDisplayStyle, yearTextboxName) {
    if (monthTextbox) {
      var j = FindMatchingMonth(monthTextbox.value);
      var i=j;
      if (i>=0) {
        if (EventWasKeyFor(e, KEYCODE_UPARROW)==true) {  
          i = i + 1;
          if (i>11) i=11;
        }
        else if (EventWasKeyFor(e, KEYCODE_DOWNARROW)==true) {  
          i = i - 1;
          if (i<0) i=0;
        }
        if (i!=j) {
          monthTextbox.value = MonthsOfTheYear[i][MonthDisplayStyle];
        }
        
        if (EventKeyWasNumber(e)==true) {
          var yearTextbox = document.getElementById(yearTextboxName);
          if (yearTextbox) {
            if (monthTextbox.value.length==2) {
              if (IsNumberInRange(monthTextbox.value, 1, 12)==true) {
                if (EventKeyWasNumber(e)==true) {
                  yearTextbox.focus();
                  yearTextbox.select();
                }
              }
            }
          }
        }
      }
    }
  }
  function FindMatchingMonth(monthValue) {
    for (i=0;i<12;i++) {
      if (Number(MonthsOfTheYear[i][0])==Number(monthValue)) {
        return i;
      }
      else if (MonthsOfTheYear[i][1].toLowerCase()==monthValue.toLowerCase()) {
        return i;
      }
      else if (MonthsOfTheYear[i][2].toLowerCase()==monthValue.toLowerCase()) {
        return i;
      }
    }
    return -1;
  }
  
  function MonthOnChange(e, monthTextbox, MonthDisplayStyle) {
    var i = FindMatchingMonth(monthTextbox.value);
    monthTextbox.value = MonthsOfTheYear[i][MonthDisplayStyle];
  }
  
function HiddenDatePropertyChanged( hidden, DayID, MonthID, YearID, MonthDisplayStyle ) 
{  
  var hiddenField = hidden;
    
  var dt = hiddenField.value;
  // 02/06/2006
  
  var day = dt.substring( 0, 2 );
  var month = dt.substring( 3, 5 );
  var year = dt.substring( 6, 10 );
  
  var txtDay = window.document.getElementById( DayID );
  var txtMonth = window.document.getElementById( MonthID );
  var txtYear = window.document.getElementById( YearID );
    
  var i = FindMatchingMonth(month);
    
  if (i>=0) {
    txtMonth.value = MonthsOfTheYear[i][MonthDisplayStyle];
  }
  else {
    txtMonth.value = month;
  }
  
  txtDay.value = day;  
  txtYear.value = year;
}

