var calyearlength;

var calyears;

var dCurDate = new Date();

var dDate = new Date();
var dCurMonth = dDate.getMonth();
var dCurDayOfMonth = dDate.getDate();
var dCurYear = dDate.getFullYear();
var objPrevElement = new Object();

function fGetDaysInMonth(iMonth, iYear) {
  var dPrevDate = new Date(iYear, iMonth, 0);
  return dPrevDate.getDate();
}

function fBuildCal(iYear, iMonth) {
  
  var aMonth = new Array();
  aMonth[0] = new Array(7);
  aMonth[1] = new Array(7);
  aMonth[2] = new Array(7);
  aMonth[3] = new Array(7);
  aMonth[4] = new Array(7);
  aMonth[5] = new Array(7);
  aMonth[6] = new Array(7);
  var dCalDate = new Date(iYear, iMonth-1, 1);
  var iDayOfFirst = dCalDate.getDay();
  var iDaysInMonth = fGetDaysInMonth(iMonth, iYear);
  var iVarDate = 1;
  var i, d, w;
  aMonth[0][0] = "Su";
  aMonth[0][1] = "Mo";
  aMonth[0][2] = "Tu";
  aMonth[0][3] = "We";
  aMonth[0][4] = "Th";
  aMonth[0][5] = "Fr";
  aMonth[0][6] = "Sa";
  for (d = iDayOfFirst; d < 7; d++) {
    aMonth[1][d] = iVarDate;
    iVarDate++;
  }
  for (w = 2; w < 7; w++) {
    for (d = 0; d < 7; d++) {
      if (iVarDate <= iDaysInMonth) {
        aMonth[w][d] = iVarDate;
        iVarDate++;
      }
    }
  }
  return aMonth;
}

monthnames = new Array("January","February","March","April","May","June","July","August","September","October","November","December","January");

function fDrawCal(iYear, iMonth, pos, dest) {
  var myMonth;
  myMonth = fBuildCal(iYear, iMonth);

  curDate = new Date();
  curMonth = curDate.getMonth()+1;
  curDay = curDate.getDate();
  curYear = curDate.getYear();
  
  var dynCalendar = "<table border=0 cellpadding=0 cellspacing=1 bgcolor=#CCCCCC><tr><td><table border=0 cellpadding=4 cellspacing=1 bgcolor=darkblue><tr><td bgcolor=#F0F0F0><table border=0 cellpadding=0 cellspacing=0 align=center><tr><td align=center>Click on the date to autofill<br><form action='test' name='frmCalendarSample' style='margin:0'><select name='tbSelMonth' onchange='fDrawCal(this.form.tbSelYear.value, this.form.tbSelMonth.value, \""+pos+"\", \""+dest+"\")'>";
  for (i=0; i<12; i++) {
    dynCalendar += "<option value='"+(i+1)+"'";
    if (i==iMonth-1)
      dynCalendar += " SELECTED";
    dynCalendar += ">"+monthnames[i];
  }  
  dynCalendar += "</select>";
  
  dynCalendar += "<select name='tbSelYear' onchange='fDrawCal(frmCalendarSample.tbSelYear.value, frmCalendarSample.tbSelMonth.value, \""+pos+"\", \""+dest+"\")'>";
  
  if (calyears == 'future') {
    min =  dCurDate.getFullYear();
    max = dCurDate.getFullYear()+10;
  } else if (calyears == 'all') {
    min = dCurDate.getFullYear() - 90;
    max = dCurDate.getFullYear()+20;
  } else if (calyears == 'past') {
    min = dCurDate.getFullYear() - 90;
    max = dCurDate.getFullYear();
  }
  for (i=min; i<=max; i++) {
    dynCalendar += "<option value='"+i+"'";
    if (i==iYear)
      dynCalendar += " SELECTED";
    dynCalendar += ">"+i;
  }
  
  dynCalendar += "</select></form></td></tr><tr><td height=2></td></tr><tr><td>\n";
  
  dynCalendar += "<table border=0 bgcolor=#666666 cellpadding=2 cellspacing=1 align=center>";
  dynCalendar += "<tr bgcolor='#F0F0F0'>";
  dynCalendar += "<td align='center'>" + myMonth[0][0] + "</td>";
  dynCalendar += "<td align='center'>" + myMonth[0][1] + "</td>";
  dynCalendar += "<td align='center'>" + myMonth[0][2] + "</td>";
  dynCalendar += "<td align='center'>" + myMonth[0][3] + "</td>";
  dynCalendar += "<td align='center'>" + myMonth[0][4] + "</td>";
  dynCalendar += "<td align='center'>" + myMonth[0][5] + "</td>";
  dynCalendar += "<td align='center'>" + myMonth[0][6] + "</td>";
  dynCalendar += "</tr>";
  for (w = 1; w < 7; w++) {
    if (w>1 && !myMonth[w][0]) {
      break;
    }
    dynCalendar += "<tr bgcolor='#FFFFFF'>";
    for (d = 0; d < 7; d++) {
      dynCalendar += "<td align='center' valign='top' width='10' height='10'";
      if (iMonth == curMonth && myMonth[w][d] == curDay && iYear == curYear) {
        dynCalendar += " bgcolor='#FFFF00'";
      }
      dynCalendar += ">";
      if (!isNaN(myMonth[w][d])) {
        dynCalendar += "<a href=# onClick=\"selectDate('" + iMonth +"','"+myMonth[w][d]+"','"+iYear+"','"+dest+"'); return false;\" style='text-decoration:none'>" + myMonth[w][d] + "</a>";
      } else {
        dynCalendar += " ";
      }
      dynCalendar += "</td>";
    }
    dynCalendar += "</tr>";
  }
  dynCalendar += "</table></td></tr><tr valign=bottom><td height=16 align=center><a href=# onClick='closeCalendar(); return false;'>Close Calendar</a></td></tr></table></td></tr></table></td></tr></table>";
  
  if(document.getElementById){
    obj=tmt_findObj("calendar");
	  obj.style.left=findPosX(document[pos]) + 3;
	  obj.style.top=findPosY(document[pos]) - 20;  
	  obj.style.visibility='visible';
    obj.innerHTML = dynCalendar;
    if ((ifrm = tmt_findObj("calendariframe")) && os != "Mac") {
      ifrm.style.display='block';
	    ifrm.style.left=findPosX(document[pos]) + 3;
	    ifrm.style.top=findPosY(document[pos]) - 20;
	    ifrm.style.height = obj.offsetHeight;
	    ifrm.style.width = obj.offsetWidth;
    }
  } else {
    obj=MM_findObj("calendar");
	  obj.left = findPosX(document[pos]) + 3; 	    
	  obj.top=findPosY(document[pos]) - 20;  
    obj.visibility='visible';
    obj.innerHTML = dynCalendar;
    if (ifrm = MM_findObj("calendariframe")) {
      ifrm.display='block';
	    ifrm.left=findPosX(document[pos]) + 3;
	    ifrm.top=findPosY(document[pos]) - 20;  
	    ifrm.height = obj.height;
	    ifrm.width = obj.width;
    }
  }
  
}

function closeCalendar() {
  if(document.getElementById){
    obj=tmt_findObj("calendar");
    obj.style.visibility='hidden';
    if ((ifrm = tmt_findObj("calendariframe")) && os != "Mac") {
      ifrm.style.display='none';
   }
  } else {
    obj=MM_findObj("calendar");
    obj.visibility='hidden';
  }
}

function findPosX(object) {
  var curleft = 0;
  if (object.offsetParent) {
    while (object.offsetParent) {
      curleft += object.offsetLeft
      object = object.offsetParent;
    }
  } else if (object.x)
    curleft += object.x;
  return curleft;
}

function findPosY(object) {
  var curtop = 0;
  if (object.offsetParent) {
    while (object.offsetParent) {
      curtop += object.offsetTop
      object = object.offsetParent;
    }
  } else if (object.y)
    curtop += object.y;
  return curtop;
}

function showCalendar(pos,dest,digits,years) {
  if (digits && digits == 4) {
    calyearlength = 4;
  } else {
    calyearlength = 2;
  }
  if (!years) {
    calyears = 'future'; 
  } else {
    calyears = years;
  }
  // if unsupported browser, open in popup
  if (ua == "Opera" || ua == "NN4") {
    alert('Unsupported Browser');
  } else {
    fDrawCal(dCurDate.getFullYear(), dCurDate.getMonth()+1,pos,dest);
  }
}

function selectDate(month,day,year,dest) {
  if (calyearlength == 2) {
    year = year.substr(2,4);
  }
  if (month < 10) month = "0"+month;
  if (day < 10) day = "0"+day;
  dest = dest.split(".");
  document[dest[0]][dest[1]].value = month+"/"+day+"/"+year;
  closeCalendar();
}

function validateDate(field) {
  if (field.value=="MM/DD/YY" || !field.value) {
    field.style.backgroundColor = "ffffff";
    field.value="MM/DD/YY";
    return true;
  }
  var dateFilter = /^\d\d(\/|-)\d\d(\/|-)\d\d$/;
  if (!dateFilter.test(field.value)) {
    alert("Please enter a valid date, or leave blank.\n\nValid dates must be formatted as MM/DD/YY.");
    highlight(field);
    return false;
  }
  field.style.backgroundColor = "ffffff";
  return true;
}

function clearDate(field) {
  if (field.value=="MM/DD/YY")
    field.value="";
}

