var HighlightToday  = true;    
var DisablePast    = true;    
var MonthNames = new Array("Jan","Feb","Mar","Apr","May","June","July","Aug","Sep","Oct","Nov","Dec");

// Global Vars
var now = new Date();
var dest = null;
var pos  = null;
var sDate = null;
var ny = now.getFullYear(); 
var nm = now.getMonth();
var nd = now.getDate();
var sy = 0; 
var sm = 0;
var sd = 0;
var y = now.getFullYear(); 
var m = now.getMonth();
var d = now.getDate();
var l = 0;
var t = 0;
var MonthLengths = new Array(31,28,31,30,31,30,31,31,30,31,30,31);

function getXCoord(el) {
	x = 0;
	while(el){
		x += el.offsetLeft;
		el = el.offsetParent;
	}
	return x;
}
function getYCoord(el) {
	y1 = 0;
	while(el){
		y1 += el.offsetTop;
		el = el.offsetParent;
	}
	return y1;
}

function GetDate() {
  EnsureCalendarExists();
  DestroyCalendar();
 
  if(arguments[0] == null || arguments[0] == "") {
       alert("ERROR: Destination control required in funciton call GetDate()");
    return;
  } else {
  
    dest = arguments[0];
	pos  = arguments[1];
	sDate = arguments[2];
  }
  y = now.getFullYear();
  m = now.getMonth();
  d = now.getDate();
  sm = 0;
  sd = 0;
  sy = 0;
  var cdval = dest.value;
 
  if(/\d{1,2}.\d{1,2}.\d{4}/.test(dest.value)) {
    
    var vParts = cdval.split("-"); // assume mm/dd/yyyy
    sd = vParts[0];
	sm = vParts[1] - 1;
    sy = vParts[2];
    m=sm;
    d=sd;
    y=sy;
  }
   if(sDate != null){
	var sdval = sDate.value;
	if(/\d{1,2}.\d{1,2}.\d{4}/.test(sDate.value)) {
    
    var vParts = sdval.split("-"); 
    sd = vParts[0];
	sm = vParts[1] - 1;
    sy = vParts[2];
    m=sm;
    d=sd;
    y=sy;
  }
   }

  l = getXCoord(pos)-12;
  t  = getYCoord(pos);
  
  if(t < 0) t = 0; 
  DrawCalendar();
}

function DestroyCalendar() {
  var cal = document.getElementById("dpCalendar");
  if(cal != null) {
    cal.innerHTML = null;
    cal.style.display = "none";
  }
  return
}

function DrawCalendar() {
  DestroyCalendar();
  cal = document.getElementById("dpCalendar");
  
  cal.style.position   = 'absolute';
  cal.style.left = l + "px";
  cal.style.top = t + "px";

  var sCal = "<DIV><table><tr class=\"cellMonth\"><td><a href=\"javascript: PrevMonth();\" title=\"Previous Month\">&lt;&lt;</a></td>"+
    "<td width=\"80%\" colspan=\"5\">"+MonthNames[m]+" "+y+"</td>"+
    "<td><a href=\"javascript: NextMonth();\" title=\"Next Month\">&gt;&gt;</a></td></tr>"+
    "<tr><td>S</td><td>M</td><td>T</td><td>W</td><td>T</td><td>F</td><td>S</td</tr>";
  var wDay = 1;
  var wDate = new Date(y,m,wDay);
  
  if(isLeapYear(wDate)) {
    MonthLengths[1] = 29;
  } else {
    MonthLengths[1] = 28;
  }
  var dayclass = "";
  var isToday = false;
  for(var r=1; r<7; r++) {
    sCal = sCal + "<tr>";
    for(var c=0; c<7; c++) {
      var wDate = new Date(y,m,wDay);
      if(wDate.getDay() == c && wDay<=MonthLengths[m]) {
        if(wDate.getDate()==sd && wDate.getMonth()==sm && wDate.getFullYear()==sy) {
          dayclass = "cellSelected";
          isToday = true;  // only matters if the selected day IS today, otherwise ignored.
        } else if(wDate.getDate()==nd && wDate.getMonth()==nm && wDate.getFullYear()==ny && HighlightToday) {
          dayclass = "cellToday";
          isToday = true;
        } else {
          dayclass = "cellDay";
          isToday = false;
        }
		
		if(sDate != null && wDay < sd && wDate.getMonth()==sm && wDate.getFullYear()==sy)
		{
			 sCal = sCal + "<td class=\""+dayclass+"\" style=text-decoration:line-through;>"+wDay+"</td>";
		}
       else if(((now > wDate) && !DisablePast) || (now <= wDate) || isToday) { // >
         
          sCal = sCal + "<td class=\""+dayclass+"\"><a href=\"javascript: ReturnDay("+wDay+");\">"+wDay+"</a></td>";
        }  else {
         	sCal = sCal + "<td class=\""+dayclass+"\" style=text-decoration:line-through;>"+wDay+"</td>";
        }
        wDay++;
      } else {
        sCal = sCal + "<td class=\"unused\"></td>";
      }
    }
    sCal = sCal + "</tr>";
  }
  sCal = sCal + "<tr><td colspan=\"5\" class=\"unused\"></td><td colspan=\"3\" class=\"cellCancel\"><a href=\"javascript: DestroyCalendar();\">Close</a></td></tr></table></DIV>"
  cal.innerHTML = sCal; 
  cal.style.display = "inline";
}

function PrevMonth() {
  m--;
  if(m==-1) {
    m = 11;
    y--;
  }
  DrawCalendar();
}

function NextMonth() {
  m++;
  if(m==12) {
    m = 0;
    y++;
  }
  DrawCalendar();
}

function ReturnDay(day) {
  cDest = document.getElementById(dest);
  var a = m+1;
  var b = day;
  if(a<10)	var a ='0'+a;
  if(b<10) var b ='0'+day;
 //dest.value = day+"-"+(m+1)+"-"+y;
 dest.value = b+"-"+a+"-"+y;
 
  DestroyCalendar();
}

function EnsureCalendarExists() {
  if(document.getElementById("dpCalendar") == null) {
    var eCalendar = document.createElement("div");
    eCalendar.setAttribute("id", "dpCalendar");
    document.body.appendChild(eCalendar);
  }
}

function isLeapYear(dTest) {
  var y = dTest.getYear();
  var bReturn = false;
  
  if(y % 4 == 0) {
    if(y % 100 != 0) {
      bReturn = true;
    } else {
      if (y % 400 == 0) {
        bReturn = true;
      }
    }
  }
  
  return bReturn;
}  