function createDate(dateString) {
    var date;
    if (!dateString || dateString == "" || dateString == "today") {
	date = new Date();
    } else {
	date = new Date(dateString);
    }
    if (!date.getDate()) {	   
	date =  new Date();
    }
    return date;
}

function selectDate(date, input) {
    input.value = date;
}

function popupcal(obj, targetdate, firstdate, lastdate) {
    var input = obj.parentNode.getElementsByTagName('input')[0];
    var tdate;
    var fdate;
    var ldate;
    if (!firstdate || firstdate == "") {
	fdate = createDate('01/01/1000');
    } else {
	fdate = createDate(firstdate);
    }
    if (!lastdate || lastdate == "") {
	ldate = createDate('12/31/5000');
    } else {
	ldate = createDate(lastdate);
    }
    
    if (!targetdate || targetdate == "") {
	tdate = createDate(input.value);       
    } else {
	tdate = createDate(targetdate);       
    }
    var cal_window = window.open('#','calendar','resize=1,status=0,toolbar=0,menubar=0,directories=0,width=250,height=200');
    cal_window.document.open();
    cal_window.document.write('<html><head><link rel="stylesheet" href="calendar.css" type="text/css"></head><body></body></html>');
     //   cal_window.document.write(tdate.getMonth() + 1);
    cal_window.document.input = input;
    //     cal_window.document.write('<a href="javascript:alert(document.body.innerHTML)">test</a>');
    //    cal_window.document.write('<a href="javascript:opener.close()">Close my opener!</a>');
    cal_window.document.close();
    drawMonth(cal_window.document, new Date(tdate.valueOf()), new Date(tdate.valueOf()), fdate, ldate);
    cal_window.focus();
    cal_window.document.window = cal_window;
}

function createDrawOtherMonth(doc, targetdate, selectdate, startdate, lastdate) {
    return function() {
	doc.body.innerHTML = "";
	drawMonth(doc, targetdate, selectdate, startdate, lastdate);
    }
}

function drawMonth(doc, targetdate, selectdate, startdate, lastdate) {
    var table = doc.createElement('table');
    var tbody = doc.createElement('tbody');
    table.appendChild(tbody);
   table.cellSpacing=0;
   table.cellPadding=0;
   table.border=0;
   var currentDate =  new Date(targetdate.valueOf());
   currentDate.setDate(1);
   thefirst = currentDate;
   thelast = currentDate;
   theMonth = currentDate.getMonth();

   var lastMonth = new Date(currentDate.valueOf());
   lastMonth.setDate(-1);
   var nextMonth = new Date(currentDate.valueOf());
   nextMonth.setDate(35);
   var tr = doc.createElement('tr');
   tr.className = "Top";
   var months = new Array(12);
   months[0] = "January";
   months[1] = "February";
   months[2] = "March";
   months[3] = "April";
   months[4] = "May";
   months[5] = "June";
   months[6] = "July";
   months[7] = "August";
   months[8] = "September";
   months[9] = "October";
   months[10] = "November";
   months[11] = "December";
   var last_month = doc.createElement('th');
   last_month.className = "a";
   last_month.onclick = createDrawOtherMonth(doc, lastMonth, selectdate, startdate, lastdate);
   last_month.innerHTML = "&lt;&lt;";
       
   var next_month = doc.createElement('th');
   next_month.className = "a";
   next_month.onclick = createDrawOtherMonth(doc, nextMonth, selectdate, startdate, lastdate);
   next_month.innerHTML = ">>";
      
   
   var month_name = doc.createElement('th');
   var year = currentDate.getYear();
   if (year < 1000) {
       year += 1900;
   }
   
   month_name.innerHTML = months[theMonth] + "  " + year;
   month_name.colSpan = 5;
   tr.appendChild(last_month);
   tr.appendChild(month_name)
   tr.appendChild(next_month);
   tr.style.borderBottom = '1px solid black';
   tbody.appendChild(tr);
   
   tr =  doc.createElement('tr');
   var week = ['S', 'M', 'T', 'W', 'T', 'F', 'S'];
   for (var i in week) {
       var th = doc.createElement('th');
       th.innerHTML = week[i];
       tr.appendChild(th);
   }
   tbody.appendChild(tr);
   tr = doc.createElement('tr');
   currentDate.setDate(1 - currentDate.getDay());
    for (var i = 0; i < 7; i++) {
       tr.appendChild(drawDay(doc, currentDate, selectdate, theMonth, startdate, lastdate));
       currentDate.setDate(currentDate.getDate() + 1);
   }
   tbody.appendChild(tr);
   tr =  doc.createElement('tr');
   while (theMonth == currentDate.getMonth()) {
       for (var i = 0; i < 7; i++) {
	   tr.appendChild(drawDay(doc, currentDate, selectdate, theMonth, startdate, lastdate));
	   currentDate.setDate(currentDate.getDate() + 1);
       }
       tbody.appendChild(tr);
       tr =  doc.createElement('tr');
   }
   doc.body.appendChild(table);
}

function dateToString(date) {
    var output = "";
    var month = date.getMonth() + 1;
    if (month < 10) {
	month = "0" + month;
    }
    var day = date.getDate();
    if (day < 10) {
	day = "0" + day;
    }
    
    var year = date.getYear();
    if (year < 1000) {
	year += 1900;
    }
    output = month + "/" + day + "/" + year;
    return output;
}

function drawDay(doc, currentDate, selectdate, theMonth, startdate, lastdate) {
    var td =  doc.createElement('td');
    var className = "";
    if (currentDate.getMonth() != theMonth) {
	className = "OtherMonth ";
    }
    if (currentDate.valueOf() == selectdate.valueOf()) {
	className += "Selected ";
    }

    var today = createDate();
    if (dateToString(currentDate) == dateToString(today)) {
	className += "Today ";
    }
    td.className = className;
    var textobj = doc.createElement('span');
    if (currentDate >= startdate && currentDate <= lastdate) {
	var stringDate = dateToString(currentDate);
	textobj.className = "a";
	td.onclick = function() {
	    selectDate(stringDate, doc.input);
	    doc.window.close();
	    return false;
	};
    }
    textobj.innerHTML = currentDate.getDate();
    td.appendChild(textobj);
    return td;
}
