/* Class: CalendarClass
		Creates calendar table and month selection.
*/
function CalendarClass(objName, classVar, settings) {
	
	this.calendarSettings = {
			yyyy: new Date().getFullYear(),
			mm: new Date().getMonth(),
			monthsText: [
				"January",
				"February",
				"March",
				"April",
				"May",
				"June",
				"July",
				"August",
				"September",
				"October",
				"November",
				"December"
			]
		};	
		
	// overwrite defaults settings
	if (settings != null) {
		for (var obj in settings) {
			this.calendarSettings[obj] = settings[obj];
		}
	}
	
	this.data = [];	
	this.objName = objName;
	this.classVar = classVar;
	
}
CalendarClass.prototype.open = function(data) {

	if (data != null) {
		this.data = data;
	}

	this.calendarFocus = this.objName;

	var obj = document.getElementById(this.objName);
	var calObj = document.getElementById(this.objName + "_calendar");
					
	this.render(this.objName);
	calObj.style.display = "block";

	return false;

};

CalendarClass.prototype.render = function() {

	var mObj = document.getElementById(this.objName + "_month");
	var dObj = document.getElementById(this.objName + "_days");
	
	// title
	mObj.innerHTML = this.calendarSettings.monthsText[this.calendarSettings.mm] + " " + this.calendarSettings.yyyy;
	
	// days
	var html = "";
	
	// find days in current month
	var d = new Date();
	d.setYear(this.calendarSettings.yyyy);
	d.setMonth(this.calendarSettings.mm + 1);
	d.setDate(0);
	var daysInMonth = d.getDate();
	
	// find start day of week
	d.setYear(this.calendarSettings.yyyy);
	d.setMonth(this.calendarSettings.mm);
	d.setDate(1);
	var startDate = d.getDay();
	
	
	// find number of weeks
	var numberOfWeeks = Math.floor((daysInMonth + (startDate - 1)) / 7) + 1;
	
	html += "<table cellpadding=\"0\" cellspacing=\"0\" width=\"100%\">";
	html += "<tr align=\"center\"><td><b>S</b></td><td><b>M</b></td><td><b>T</b></td><td><b>W</b></td><td><b>T</b></td><td><b>F</b></td><td><b>S</b></td></tr>";
	var i = 0;
	for (var rows=0;rows<numberOfWeeks;rows++) {
		html += "<tr align=\"center\">";
		for (var cols=0;cols<7;cols++) {
			if ((i == 0 && cols != startDate) || i > daysInMonth) {
				//
			} else {
				i++;
			}
			
			// started
			if (i > 0 && i <= daysInMonth) {
			
				// see if in data
				var found = false;
				var l = this.data.length;
				for (var io=0;io<l;io++) {
					var obj = this.data[io];
					
					// 20090409
					//(this.calendarSettings.yyyy * 10000) + ((this.calendarSettings.mm + 1) * 100) + (i)
					var cmp = (this.calendarSettings.yyyy * 10000) + ((this.calendarSettings.mm + 1) * 100) + (i);
					if (obj.date == cmp) {
						found = true;
					}
				}
			
			
				html += "<td><a href=\"#\" onclick=\"return " + this.classVar + ".selectDay(" + i + ");\">" + (found?"<b>":"") + i + (found?"</b>":"") + "</a></td>";
			
			} else {
			
				// first day of month
				html += "<td><!-- -" + "->-</td>";
			
			
			}
			
			
		}
		html += "</tr>";
	}
	html += "</table>";
	
	dObj.innerHTML = html;			

};

CalendarClass.prototype.focus = function() {
	var obj = document.getElementById(this.objName);
	
	obj.focus();
	obj.select();
	
	if (this.calendarFocus != this.objName) {
		return this.open(this.objName);
	} else {
		return false;
	}

};

CalendarClass.prototype.over = function() {
	this.calendarOver = this.objName;
};

CalendarClass.prototype.out = function() {
	this.calendarOver = "";
};

CalendarClass.prototype.blur = function() {

	if (this.calendarOver == this.objName) {
		var obj = document.getElementById(this.objName);
		obj.focus();
		obj.select();
	} else {
		this.close(this.objName);
	}
};

CalendarClass.prototype.close = function() {

	this.calendarOver = "";
	this.calendarFocus = "";

	var calObj = document.getElementById(this.objName + "_calendar");
	calObj.style.display = "none";

	return false;
};

CalendarClass.prototype.adjustMonth = function(i) {

	this.calendarSettings.mm += i;
	if (this.calendarSettings.mm < 0) {
		this.calendarSettings.yyyy -= 1;
		this.calendarSettings.mm = 11;
	}
	if (this.calendarSettings.mm > 11) {
		this.calendarSettings.yyyy += 1;
		this.calendarSettings.mm = 0;
	}
	
	this.render();
	
	return false;

};

CalendarClass.prototype.selectDay = function(i) {
	
	// trigger event
	this.selectDayEvent({yyyy: this.calendarSettings.yyyy, mm: this.calendarSettings.mm, dd: i});	
	
	
	//var obj = document.getElementById(this.objName);
	//obj.value = (i<10?"0"+i:i) + "/" + (this.calendarSettings.mm+1<10?"0"+(this.calendarSettings.mm+1):(this.calendarSettings.mm+1)) + "/" + this.calendarSettings.yyyy;
	
	return false;
	
	//return this.close();
	
};