var days=new Array("Su","Mo","Tu","We","Th","Fr","Sa");
var months=new Array('','Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
var monthDays=new Array(0,31,28,31,30,31,30,31,31,30,31,30,31);
var todaysDate=new myGetDate();
var calendarOpen=new Object();

function myGetDate(month,day,year) {
  if (day&&year) {month--; var rawDate=new Date(year,month,day);}
  else {var rawDate=new Date();}
  this.year=rawDate.getFullYear();
  this.month=rawDate.getMonth();this.month++;
  this.day=rawDate.getDate();
  this.dow=rawDate.getDay();
  this.date=parseInt(this.year.toString()+makeDouble(this.month.toString())+makeDouble(this.day.toString()));
  this.monthDays=monthDays;this.monthDays[2]=(this.year%4)?28:29;
  this.prev_month=(this.month==1)?12:(this.month-1);
  this.prev_year=(this.month==1)?(this.year-1):this.year;
  this.next_month=(this.month==12)?1:(this.month+1);
  this.next_year=(this.month==12)?(this.year+1):this.year;
  return this;
}

function parseDate(testDate) {
  testDate = testDate.replace(/\W|\s+/g, ',');
  var month,day,year;
  var dateArray=new Array();dateArray=testDate.split(',');
  for (var i=0;i<dateArray.length;i++) {dateArray[i]=parseFloat(dateArray[i]);}
  if (dateArray[2]<30) {year=parseInt(dateArray[2])+2000;}
  else if (dateArray[2]>30&&dateArray[2]<100) {year=parseInt(dateArray[2])+1900;}
  else {year=dateArray[2];}
  month=dateArray[0];
  if (month>12) month=0;
  if (month) {
    day=parseInt(dateArray[1]);
    if (parseInt(day)>monthDays[month]) {day=monthDays[month];}
  }
  if (month&&day&&year) {return myGetDate(month,day,year);}
  else {return myGetDate();}
}

function makeDouble(number) {
  if ((number.toString()).length>=2) {return number;}
  else if (number) {var numString = number.toString();return('0'+numString);}
  return number;
}

function drawCalendar(month,day,year,id,update,jump) {
  var calID=id+'Cal';
  var textID=(document.forms['eventFinder'][id+'Text']) ? id+'Text' : id;
  var formDate=parseDate(document.forms['eventFinder'][textID].value);
  if (formDate.date!=todaysDate.date&&!update&&!jump) {var selectedDate=formDate;}
  else {var selectedDate=new myGetDate(month,day,year);}
  if (!jump) {setDate(selectedDate.month,selectedDate.day,selectedDate.year,id);}
  monthDate=new myGetDate(selectedDate.month,1,selectedDate.year);
//  if (!divMenu&&!iframeMenu) return; 
  // Draw Calendar
  var calHtml = '<!--Styles included in the table and td fields.-->';
  //calHtml += ' <table border="0" bgcolor="#EF780C" cellpadding="2" cellspacing="0"  width="150" onmouseover="parent.stopFade()" onmouseout="parent.fadeMenu(\''+calID+'\')">';
  calHtml += ' <table border="0" bgcolor="#EF780C" style="font-family:arial;font-size:10pt;" cellpadding="2" cellspacing="0"  width="150" onmouseover="parent.stopFade()" onmouseout="parent.fadeMenu(\''+calID+'\')">';
  calHtml += '  <tr valign="top">';
  calHtml += '   <td width="100%">';
  calHtml += '    <table border="0" cellspacing="0" style="font-family:arial;font-size:10pt" cellpadding="0" width="100%">';
  calHtml += '     <tr valign="top">';
  calHtml += '      <td>';
  if (selectedDate.date<=todaysDate.date) {
    calHtml += '     <img id="t" name="t" src="'+t.src+'" width="37" height="13" border="0" /></td>';
  }
  else {
	calHtml += '     <a href="JavaScript:void(0)" onClick="parent.drawCalendar('+selectedDate.prev_month+', 1, '+selectedDate.prev_year+', \''+id+'\',0,1);"><span style="font-family:arial; text-color:#ffffff; font-size:10px;">LAST</span></a></a></td>';
    //calHtml += '     <a href="JavaScript:void(0)" onClick="parent.drawCalendar('+selectedDate.prev_month+', 1, '+selectedDate.prev_year+', \''+id+'\',0,1);"><img src="'+cal_last.src+'" id="cal_last" name="cal_last" width="37" height="13" border="0" /></a></td>';
  }
  calHtml += '      <td width="100%" align="center" valign="middle" nowrap="nowrap">';
  calHtml += '       <b>'+months[selectedDate.month]+' '+selectedDate.year+'</b></td>';
  calHtml += '      <td>';
  calHtml += '       <a href="JavaScript:void(0)" onClick="parent.drawCalendar('+selectedDate.next_month+', 1, '+selectedDate.next_year+', \''+id+'\',0,1);"><span style="font-family:arial; text-color:#ffffff; font-size:10px;">NEXT</span></a></td>';
  //calHtml += '       <a href="JavaScript:void(0)" onClick="parent.drawCalendar('+selectedDate.next_month+', 1, '+selectedDate.next_year+', \''+id+'\',0,1);"><img src="'+cal_next.src+'" id="cal_next" name="cal_next" width="37" height="13" border="0" /></a></td>';
  calHtml += '     </tr>';
  calHtml += '    </table>';
  calHtml += '    <table style="font-family:arial;font-size:8pt" border="0" bgcolor="#FFFFC6" cellspacing="0" cellpadding="3" width="100%">';
  calHtml += '     <tr class="cal" valign="top">';
  // Days of the Week column titles
  for (var i=0;i<days.length;i++) {
    calHtml += '      <td width="14%" valign="top" align="center">'+days[i]+'</td>';
  }
  calHtml += '     </tr>';
  var weekNum = 1;
  var rowNum = 0;
  calHtml += '     <tr id="week"'+weekNum+'" class="cal" valign="top">';
  // Previous Months Days
  calHtml += getPrevMonthDays(monthDate, selectedDate, id);
  // This Months Days
  for (var thisDay=1;thisDay<=selectedDate.monthDays[selectedDate.month];thisDay++) {
    var dateString=parseInt(selectedDate.year.toString()+makeDouble(selectedDate.month.toString())+makeDouble(thisDay.toString()));
    if (((thisDay-1)+monthDate.dow)%7==0&&((thisDay-1)+monthDate.dow)!=0) {
      calHtml += '     </tr>';
      weekNum++;
      calHtml += '     <tr id="week"'+weekNum+'" class="cal" valign="top">';
    }
    // Calendar Days Display
    if (dateString==formDate.date) {
      rowNum = weekNum;
      calHtml += '      <td width="14%" align="center" bgcolor="#EF780C"><a style="text-decoration: none;" href="JavaScript:void(0)" onClick="parent.drawCalendar('+selectedDate.month+', '+thisDay+', '+selectedDate.year+', \''+id+'\', 1)"><b>'+makeDouble(thisDay)+'</b></a>';
    }
    else if (dateString<todaysDate.date) {
      //calHtml += '      <td width="14%" class="calgray" align="center" style="text-decoration: line-through;">'+thisDay;
	  calHtml += '      <td width="14%" align="center"><a style="text-decoration: none;" href="JavaScript:void(0)" onClick="parent.drawCalendar('+selectedDate.month+', '+thisDay+', '+selectedDate.year+', \''+id+'\', 1);parent.hideAll();">'+makeDouble(thisDay)+'</a>';
    }
    else {
       calHtml += '      <td width="14%" align="center"><a style="text-decoration: none;" href="JavaScript:void(0)" onClick="parent.drawCalendar('+selectedDate.month+', '+thisDay+', '+selectedDate.year+', \''+id+'\', 1);parent.hideAll();">'+makeDouble(thisDay)+'</a>';
    }
    calHtml += '      </td>';
  }
  // Next Months Days
  calHtml += getTailMonthDays(monthDate,selectedDate,id);
  calHtml += '     </tr>';
  calHtml += '    </table>';
  calHtml += '   <table border="0" style="font-family:arial;font-size:10pt" cellspacing="0" cellpadding="0" width="100%">';
  calHtml += '      <tr valign="top">';
  calHtml += '       <td  class="small" width="100%" align="center" valign="middle" nowrap="nowrap">';
  calHtml += '       <a href="JavaScript:void(0)" onClick="parent.hideAll();parent.calendarOpen[\''+calID+'\']=\'off\';">Cancel</a></td>';
  calHtml += '     </tr>';
  calHtml += '   </td>';
  calHtml += '  </tr>';
  calHtml += ' </table>';
  if( !menuStates[calID] ) addMenu( calID );
  insertHTML(wrapper(calID),calHtml);
  wrapper(calID).style.border='0px';
  showMenu(calID);
}

function verifyDate(fieldsToVerify) {
  var dateRangeVals = new Object();
  var fields=new Array();
  fields=fieldsToVerify.split(',');
  for (var id=0;id<fields.length;id++) {
    var textID=fields[id]+'Text';
    var radio_id=fields[id].replace(/End|Begin/,'');
    if (document.forms['eventFinder'][radio_id].checked==true) 
    {
      var newDate=parseDate(document.forms['eventFinder'][textID].value);
      var thisDate = new Date(newDate.year, newDate.month-1, newDate.day);
      dateRangeVals[fields[id]] = thisDate.getTime();
      setDate(newDate.month,newDate.day,newDate.year,fields[id]);
    }
  }

  if (dateRangeVals['dateRangeEnd'] < dateRangeVals['dateRangeBegin']) {
    alert('Oops, the ending date in the date range cannot come before the beginning date. Please enter a later ending date.');
    history.current();
  }
}

function setDate(month,day,year,field) {
  var fieldText=(document['eventFinder'][field+'Text']) ? field+"Text" : field;
  field=field.replace(/Begin|End/g, '');
  document['eventFinder'][fieldText].value=makeDouble(day)+'-'+makeDouble(month)+'-'+year;
  document['eventFinder'][field].checked=true;
  clearOthers(field);
}

function clearOthers(field) {
  var _de = document['eventFinder'];
  if (field == 'anyDate') {
    _de['exactDateText'].value = '';
    _de['exactDate'].checked = false;
    _de['dateRangeBeginText'].value = '';
    _de['dateRange'].checked = false;
    _de['dateRangeEndText'].value = '';
  }
  if (field == 'exactDate') {
    _de['exactDate'].checked = true;
    _de['dateRangeBeginText'].value = '';
    _de['dateRangeEndText'].value = '';
    _de['dateRange'].checked = false;
    _de['anyDate'].checked = false;
  }
  if (field == 'dateRange') {
    _de['dateRange'].checked = true;
    _de['exactDateText'].value = '';
    _de['anyDate'].checked = false;
    _de['exactDate'].checked = false;
  }
}

function getPrevMonthDays(monthDate,selectedDate,id) {
  var calHtml='';
  var days=monthDays[selectedDate.prev_month];
  var day;
  for (var i=monthDate.dow-1;i>=0;i--) {
    day = days-i;
    calHtml += '      <td width="14%" bgcolor="#FFFFFF" class="calgray" align="center">'+day+'</td>';
  }
  return calHtml;
}

function getTailMonthDays(monthDate,selectedDate,id) {
  var calHtml='';
  var tailDays=7-((parseInt(selectedDate.monthDays[selectedDate.month])+parseInt(monthDate.dow))%7);
  if (tailDays>=7) tailDays=0;
  for (var day=1; day<=tailDays;day++) {
    calHtml += '      <td width="14%" bgcolor="#FFFFFF" class="calgray" align="center">'+makeDouble(day)+'</td>';
  }
  return calHtml;
}
