function calendar(monthIn,year) {
	this.monthNo = monthIn;
	this.year = year;
	this.dragging = false;
	this.selectedArray = new Array();
	this.startingID;
	this.weekCount = this.getWeekCount();
	this.setDates();
	// this.minMonth = 5;
	this.maxMonth = 43;
	var d = new Date();
	var curr_date = d.getDate();
	var curr_month = d.getMonth();
	var curr_year = d.getFullYear();
	this.minMonth = 1;
	this.minYear = 2010;
	// this.maxMonth = -1;
	this.maxMonth = 10;
	this.maxYear = 2011;
}
calendar.prototype.getWeekCount = function() {
	var wc = 5;
	if (this.monthNo == 8) {
		wc = 6;
	}
	return wc;
}
calendar.prototype.drawMonth = function() {
	this.monthSelectDiv = document.createElement("div");
	this.monthSelectDiv.setAttribute("id","monthSelectDiv");
	this.monthSelectDiv.setAttribute("class","monthDiv");
	this.monthSelectDiv.setAttribute("className","monthDiv");
	this.monthSelectDiv.style.position = "absolute";
	this.monthSelectDiv.style.left = "20px";
	this.monthSelectDiv.setAttribute("onclick","fadCal.removeMe();");
// 	this.monthSelectDiv.style.width = "140px";
	this.monthText = document.createTextNode(monthArray[this.monthNo%12].toUpperCase()+"("+this.year+")");
	this.monthSelectDiv.appendChild(this.monthText);
	this.myDiv.appendChild(this.monthSelectDiv);
	this.drawArrows();
}
calendar.prototype.drawArrows = function() {
	try {
		var nextArrow = document.getElementById("nextDiv");
		nextArrow.parentNode.removeChild(nextArrow);
	}
	catch (excep) {
	}
	try {
		var priorArrow = document.getElementById("priorDiv");
		priorArrow.parentNode.removeChild(priorArrow);
	}
	catch (excep) {
	}
	// next arrow
	if ((this.year == this.maxYear)&&(this.monthNo > this.maxMonth)) {
	}
	else {
		var nextDiv = document.createElement("div");	
		nextDiv.setAttribute("id","nextDiv");
		nextDiv.style.position = "absolute";
		nextDiv.style.left = "146px";
		nextDiv.style.top = "1px";
		var nextImage = document.createElement("img");
		nextImage.setAttribute("src","next.gif");
		nextImage.myParent = this;
		nextImage.onmousedown = function() {
			this.myParent.changeMonth((this.myParent.monthNo+1));
		}
		nextDiv.appendChild(nextImage);
		this.myDiv.appendChild(nextDiv);
	}
	if ((this.year == this.minYear)&&(this.monthNo < this.minMonth)) {
	}
	else {
		var priorDiv = document.createElement("div");
		priorDiv.setAttribute("id","priorDiv");
		priorDiv.style.position = "absolute";
		priorDiv.style.left = "25px";
		priorDiv.style.top = "1px";
		var priorImage = document.createElement("img");
		priorImage.setAttribute("src","prior.gif");
		priorImage.myParent = this;
		priorImage.onmousedown = function() {
			this.myParent.changeMonth((this.myParent.monthNo-1));
		}
		priorDiv.appendChild(priorImage);
		this.myDiv.appendChild(priorDiv);
	}
}
calendar.prototype.setDates = function() {
// ebug("setting dates "+this.weekCount+" "+this.monthNo);
	this.startDate = new Date();
	this.startDate.setFullYear(this.year,this.monthNo,1);
	this.startDate.setHours(5);
	this.startDate.setMinutes(0);
	this.startDate.setSeconds(0);
	var startTime = this.startDate.getTime();
	this.dateArray = new Array();
	for (var i=this.startDate.getDay();i>0;i--) {
		var curDate = new Date();
		curDate.setTime(startTime - 3600*1000*24*i*1);
		this.dateArray.push(curDate);
		// ebug(curDate);
	}
	// for (var i=0;i<5*7-this.startDate.getDay();i++) {
	for (var i=0;i<this.weekCount*7-this.startDate.getDay();i++) {
		var curDate = new Date();
		curDate.setTime(startTime + 3600*1000*24*i);
		this.dateArray.push(curDate);
		// ebug(curDate);
	}
}
calendar.prototype.draw = function(classIn) {
	this.myDiv = document.createElement("div");
	this.myClass = classIn;
	this.myDiv.setAttribute("class",this.myClass);
	this.myDiv.setAttribute("className",this.myClass);
	// this.myDiv.style.left = "20px";
	this.myDiv.onmouseup = function(e) {
		this.myParent.onmouseup(e);
	}
	this.drawMonth();
	this.drawDates();
	this.myDiv.myParent = this;
	return this.myDiv;
}
calendar.prototype.drawDates = function() {
	this.dsArray = new Array();	
	this.dateDiv = document.createElement("div");
	this.dateDiv.style.position = "absolute";
	var date = 0;
	var startY = 35;
	var startX = 20;
	var dowArray = new Array("S","M","T","W","T","F","S");
	for (var i=0;i<dowArray.length;i++) {
		var dowDiv = document.createElement("div");
		dowDiv.setAttribute("class","dow");
		dowDiv.setAttribute("className","dow");
		dowDiv.style.left = (startX + i*20)+"px";
		dowDiv.style.top = "20px";
		dowDiv.appendChild(document.createTextNode(dowArray[i]));
		this.dateDiv.appendChild(dowDiv);
	}
	for (var i=0;i<this.weekCount;i++) {
		for (var j=0;j<7;j++) {
			var nds = new dateSquare(this.dateArray[date],this.monthNo%12,i);
			nds.myParent = this;
			this.dsArray.push(nds);
			this.dateDiv.appendChild(nds.draw("date",date));
			// ebug(nds.myDiv.style.width);
			nds.setPosition(startX + j*20,startY + i*20);
			date++;
		}
	}
	this.myDiv.appendChild(this.dateDiv);
	this.addClose();
}
calendar.prototype.addClose = function() {
/*
	var closeDiv = document.createElement("div");
	closeDiv.innerHTML = '<a href="javascript:closeCal();">close</a>';
	this.myDiv.appendChild(closeDiv);
*/
}
calendar.prototype.changeMonth = function(newMonthNo) {
	// debug(newMonthNo);
	if (newMonthNo < 0) {
		newMonthNo = 11;
		this.year--;
	}
	else if (newMonthNo > 11) {
		newMonthNo = 0;
		this.year++;
	}
// reset the date fields if they change the month!
//	var startDateInput = document.getElementById("startDate");
//	var endDateInput = document.getElementById("endDate");


//	startDateInput.value = "";
//	endDateInput.value = "";
	var specialSelect = document.getElementById("specialSelect");
	/*if (specialSelect.selectedIndex != 1) {
		specialSelect.selectedIndex = 0;
	}
*/
	this.dragging = false;
	this.selectedArray = new Array();
	this.startingID;

	this.monthNo = newMonthNo;
	this.myDiv.removeChild(this.dateDiv);
	this.weekCount = this.getWeekCount();
	this.setDates();
	this.drawDates();
	this.drawArrows();
	var monthText = monthArray[this.monthNo%12].toUpperCase()+"("+this.year+")";
	// this.monthSelectDiv.replaceChild(document.createTextNode(monthArray[this.monthNo%12].toUpperCase()),this.monthSelectDiv.childNodes[0]);
	var headerText = document.createTextNode(monthText);
	/*var closeLink = document.createElement("a");
	closeLink.setAttribute("href","javascript:alert('closing!')");
	closeLink.appendChild(headerText); */
	this.monthSelectDiv.replaceChild(headerText,this.monthSelectDiv.childNodes[0]);
}
calendar.prototype.onmouseup = function(e) {
	this.setDateRange();
	this.dragging = false;
}
calendar.prototype.doSelect = function(e) {
}
calendar.prototype.removeSelected = function(daySquare) {
	for (var i=0; i<this.selectedArray.length;i++) {
		if (daySquare == this.selectedArray[i]) {
			this.selectedArray.splice(i,1);
			return;
		}
	}
}
calendar.prototype.addSelected = function(daySquare) {
// ebug("rolling over "+daySquare.id+" "+this.startID);
	this.clearSelected();
	if (daySquare.id < this.startID) {
		for (var i=daySquare.id;i<=this.startID;i++) {
			var curDay = this.dsArray[i];
			this.removeSelected(curDay);
			this.selectedArray.push(curDay);
			curDay.setSelected(true);
		}
	}
	else {
		for (var i=this.startID;i<=daySquare.id;i++) {
			var curDay = this.dsArray[i];
			this.removeSelected(curDay);
			this.selectedArray.push(curDay);
			curDay.setSelected(true);
		}
	}
}
calendar.prototype.sortSelected = function() {
	var sortFunc = function(a,b) {
		var aVal = 1.00 * a.id;
		var bVal = 1.00 * b.id;
		if (aVal < bVal) {
			returnValue =  -1;
		}
		else {
			returnValue =  1;
		}
		return returnValue;
	}
	this.selectedArray.sort(sortFunc);
}
calendar.prototype.clearSelected = function() {
	this.selectedArray = new Array();
	for (var i=0;i<this.dsArray.length;i++) {
	 	this.dsArray[i].setSelected(false);
	}
}
calendar.prototype.getDateRange = function() {
	if (this.selectedArray.length == 0) {
		return;
	}
	this.sortSelected();
	var startDO = this.selectedArray[0].myDate;
	var startDate = startDO.getDate();
	var startMonth = startDO.getMonth();
	var startYear = startDO.getYear();
	if (startYear < 2000) {
		startYear = startYear + 1900;
	}
	var endDO = this.selectedArray[this.selectedArray.length-1].myDate;
	var endDate = endDO.getDate();
	var endMonth = endDO.getMonth();
	var endYear = endDO.getYear();
	if (endYear < 2000) {
		endYear = endYear + 1900;
	}
	// lert(monthArray[startMonth]+" "+startDate+", "+startYear+"\n"+monthArray[endMonth]+" "+endDate+", "+endYear);
}
calendar.prototype.setDateRange = function() {
// if we're on a launch page, unselected the r2r launch series
	seriesSel = document.getElementById("series");
	// document.getElementById("venue").value = "";
	/*
	if (seriesSel.options[seriesSel.selectedIndex].firstChild.nodeValue == "Kickoff Weekend") {
		seriesSel.selectedIndex = 0;
	}
*/
	if (this.selectedArray.length == 0) {
		return;
	}
	this.sortSelected();
	var startDO = this.selectedArray[0].myDate;
	var startDate = startDO.getDate();
	var startMonth = startDO.getMonth();
	var startYear = startDO.getYear();
	if (startYear < 2000) {
		startYear = startYear + 1900;
	}
	var endDO = this.selectedArray[this.selectedArray.length-1].myDate;
	var endDate = endDO.getDate();
	var endMonth = endDO.getMonth();
	var endYear = endDO.getYear();
	if (endYear < 2000) {
		endYear = endYear + 1900;
	}
//	var startDateInput = document.getElementById("startDate");
//	var endDateInput = document.getElementById("endDate");
//	startDateInput.value = startYear+"-"+(startMonth+1)+"-"+startDate;
// 	endDateInput.value = endYear+"-"+(endMonth+1)+"-"+endDate;
	/*
	startDateDiv.innerHTML = monthArray[startMonth]+" "+startDate+", "+startYear;
	endDateDiv.innerHTML = monthArray[endMonth]+" "+endDate+", "+endYear;
	*/
}
calendar.prototype.specialSelect = function(selectObj) {
	var type = selectObj.options[selectObj.selectedIndex].value;
	var today = currentDate.getDate();
	if (type == "all_days") {
		this.clearSelected();
		var startDateInput = document.getElementById("startDate");
		var endDateInput = document.getElementById("endDate");
		startDateInput.value = "";
		endDateInput.value =  "";
		// this.changeMonth(currentMonth);
	}
	else if (type == "today") {
		this.changeMonth(currentMonth);
		this.clearSelected();
		for (var i=0;i<this.dsArray.length;i++) {
			var ds = this.dsArray[i];
			if (ds.myDate.getDate() == today) {
				this.startID = i;
				this.addSelected(ds);
			}
		}
	}
	else if (type == "tomorrow") {
		var today = new Date();
		var startTime = today.getTime();
		var tomorrow = new Date();
		tomorrow.setTime(startTime + 3600*1000*24);
		var tDate = tomorrow.getDate();
		this.changeMonth(tomorrow.getMonth());
		this.clearSelected();
		for (var i=0;i<this.dsArray.length;i++) {
			var ds = this.dsArray[i];
			if (ds.myDate.getDate() == tDate) {
				this.startID = i;
				this.addSelected(ds);
			}
		}
	}
	else if (type == "this_month") {
		var today = new Date();
		var started = false;
		this.changeMonth(currentMonth);
		for (var i=0;i<this.dsArray.length;i++) {
			var ds = this.dsArray[i];
			if (ds.myDate.getMonth() == currentMonth) {
				if (ds.myDate.getDate() == today.getDate()) {
					started = true;
					this.startID = i;
				}
				if (started) {
					this.addSelected(ds);
				}
			}
		}
	}
	else if (type == "this_week") {
		var today = new Date();
		var started = false;
		var weekNo;
		this.changeMonth(currentMonth);
		for (var i=0;i<this.dsArray.length;i++) {
			var ds = this.dsArray[i];
			if (ds.myDate.getMonth() == currentMonth) {
				if (ds.myDate.getDate() == today.getDate()) {
					started = true;
					this.startID = i;
					weekNo = ds.week;
				}
				if (started) {
					// ebug(ds.week+"="+weekNo);
					if (ds.week == weekNo) {
						this.addSelected(ds);
					}
				}
			}
		}
	}
}
calendar.prototype.selectDate = function(startDate,endDate) {
	// ebug("selectDate "+startDate+" "+endDate);
	if (endDate == startDate) {
		var singleDate = true;
	}
	else {
		var singleDate = false;
	}
	var startDP = startDate.split("-");
	var startYear = startDP[0];
	var startMonth = Number(startDP[1]) - 1;
	var startDate = startDP[2];
	// ebug("year: "+startYear+" month: "+startMonth+" date: "+startDate);
	var endDP = endDate.split("-");
	var endYear = endDP[0];
	var endMonth = Number(endDP[1]) - 1;
	var endDate = endDP[2];
	// ebug("year: "+endYear+" month: "+endMonth+" date: "+endDate);
	this.changeMonth(startMonth);
	var startID = "";
	var started = false;
	for (var i=0;i<this.dsArray.length;i++) {
		var ds = this.dsArray[i];
		if ((ds.myDate.getDate() == startDate)&&(ds.myDate.getMonth() == startMonth)) {
			this.startID = i;
			if (singleDate) {
				this.addSelected(ds);
			}
			else {
				started = true;
			}
		}
		else if ((ds.myDate.getDate() <= endDate)&&(started)) {
			this.addSelected(ds);
		}
		if ((ds.myDate.getDate() == endDate)&&(ds.myDate.getMonth() == endMonth)&&(started)) {
			started = false;
		}
	}
	this.setDateRange();
}
calendar.prototype.close = function(dateSquare) {
	var clickedDate = this.selectedArray[0].myDate;

	var year = clickedDate.getYear();
	if (year < 1900) {
		year += 1900;	
	}
	var selectedDate = year+"-"+(Number(clickedDate.getMonth())+1)+"-"+clickedDate.getDate();
	this.myDiv.parentNode.removeChild(this.myDiv);
	var calDisplay = document.getElementById("displayDate");
	while (calDisplay.childNodes.length > 0) {
		calDisplay.removeChild(calDisplay.childNodes[0]);
	}
	// calDisplay.appendChild(document.createTextNode(selectedDate));
	var prettyMonth = monthArray[clickedDate.getMonth()];
	var prettyDate = prettyMonth+" "+clickedDate.getDate()+", "+year;
	calDisplay.innerHTML = prettyDate+' <a href="#" onclick="setDate(event);">change date</a>';
	document.getElementById("Sub_FirstAirDate").setAttribute("value",selectedDate);
}
calendar.prototype.removeMe = function() {
	this.myDiv.parentNode.removeChild(this.myDiv);
}

