function CalendarProperties(oParentClass) {
	this.ParentClass = oParentClass || null;
	
	this.DaysOfWeek = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];
	this.MonthsOfYear = ["January","February","March","April","May","June","July","August","September","October","November","December"];
	
	this.dtToday = null;
	this.dtToday_Date = null;
	this.dtToday_Month = null;
	this.dtToday_Year = null;
	
	this.dtSelected = null;
	this.dtSelected_Date = null;
	this.dtSelected_Month = null;
	this.dtSelected_Year = null;
	
	this.dtCalendar = null;
	this.dtCalendar_Date = null;
	this.dtCalendar_Month = null;
	this.dtCalendar_Year = null;
	
	this.dtNode = null;
	this.dtNode_Date = null;
	this.dtNode_Month = null;
	this.dtNode_Year = null;
	
	this.dtFirstDayOfMonth = null;
	this.dtLastDayOfMonth = null;
	this.dtLastMonth = null;
	this.dtNextMonth = null;
	
	this.iSquareSize = 26;
	this.iNumDaysInMonth = 0;
	this.iFirstDayOfMonth = 0;
	this.iLastDayOfMonth = 0;
	this.iNumDaysVisibleOfLastMonth = 0;
	this.iNumDaysVisibleOfNextMonth = 0;
	this.iNumOfDaysInCalendar = 0;
	this.iNumDaysInLastMonth = 0;
	this.iNumDaysInNextMonth = 0;
	this.iNumOfWeeks = 0;
	this.iCurrentWeek = 0;
	this.iShortDayNameLength = 3;

	this.sFirstDayOfMonth = "";
	this.sLastDayOfMonth = "";
	this.sSelectedMonth = "";
	this.sSelectedMonth_Short = "";
	
	this.bInDebugMode = false;
	
	this.Initialize = function() {
		var self = this;
		
		if (this.ParentClass) {
			self.bInDebugMode = self.ParentClass.bInDebugMode;
			//self.dtToday = new Date();
			//if (!self.dtSelected) self.dtSelected = new Date();
			//if (!self.dtCalendar) self.dtCalendar = new Date();
			
			if (sBlogDate != "") {
				var aBlogDate = sBlogDate.split("-");
				var iYear = parseInt(aBlogDate[0]);
				var iMonth = parseInt(aBlogDate[1]) - 1;
				var iDate = parseInt(aBlogDate[2]);
				if (iMonth < 0) {
					iMonth = 11;
					iYear = iYear - 1;
				}
				if (iMonth > 11) {
					iMonth = 0;
					iYear = iYear + 1;
				}
				sBlogDate = iYear + "-" + iMonth + "-" + iDate;
			}
			
			self.setTodaysDate();
			if (!self.dtSelected) {
				if (sBlogDate != "") {
					self.setSelectedDate(sBlogDate);
				} else {
					self.setSelectedDate();
				}
			}
			if (!self.dtCalendar) {
				if (sBlogDate != "") {
					self.setCalendarDate(sBlogDate);
				} else {
					self.setCalendarDate();
				}
				//self.setCalendarDate();
			}
			
			self.setNumDaysInMonth();
			self.setFirstDayOfMonth();
			self.setLastDayOfMonth();
			self.setNumDaysVisibleOfLastMonth();
			self.setNumDaysVisibleOfNextMonth();
			self.setNumDaysInCalendar();
			self.setNumDaysInLastMonth();
			self.setNumDaysInNextMonth();
			self.setNumOfWeeks();
			self.setCurrentWeek(1);
			
			if (self.iSquareSize < 24) self.iSquareSize = 24;
			//else if (self.iSquareSize > 38) self.iSquareSize = 38;
			
			return true;
		} else {
			if (self.bInDebugMode)
				alert("CalendarProperties: Could not find Parent Class!");
		}
			
		return false;
	};
	
	this.setCurrentWeek = function(iCurrentWeek) {
		var self = this;
		if (iCurrentWeek > 0 && iCurrentWeek < 5)
			self.iCurrentWeek = iCurrentWeek;
		else
			self.iCurrentWeek = 1;
		return;
	};
	
	this.setNumOfWeeks = function() {
		var self = this;
		self.iNumOfWeeks = parseInt((self.iNumOfDaysInCalendar / self.DaysOfWeek.length));
		return;
	};
	
	this.setNumDaysInNextMonth = function() {
		var self = this;
		var iYear = parseInt(self.dtCalendar.getFullYear());
		var iMonth = parseInt(self.dtCalendar.getMonth());
		iMonth = iMonth + 1;
		if (iMonth > 11) {
			iMonth = 0;
			iYear = iYear - 1;
		}
		self.dtNextMonth = new Date(iYear,iMonth,1);
		self.iNumDaysInNextMonth = self.getMonthLen(parseInt(self.dtNextMonth.getFullYear()),parseInt(self.dtNextMonth.getMonth()));
		return;
	};
	
	this.setNumDaysInLastMonth = function() {
		var self = this;
		var iYear = parseInt(self.dtCalendar.getFullYear());
		var iMonth = parseInt(self.dtCalendar.getMonth());
		iMonth = iMonth - 1;
		if (iMonth < 0) {
			iMonth = 11;
			iYear = iYear + 1;
		}
		self.dtLastMonth = new Date(iYear,iMonth,1);
		self.iNumDaysInLastMonth = self.getMonthLen(parseInt(self.dtLastMonth.getFullYear()),parseInt(self.dtLastMonth.getMonth()));
		return;
	};
	
	this.setNumDaysInCalendar = function() {
		var self = this;
		self.iNumOfDaysInCalendar = self.iNumDaysInMonth + self.iNumDaysVisibleOfLastMonth + self.iNumDaysVisibleOfNextMonth;
		return;
	};
	
	this.setNumDaysVisibleOfNextMonth = function() {
		var self = this;
		self.iNumDaysVisibleOfNextMonth = ((self.DaysOfWeek.length-1) - self.iLastDayOfMonth);
		return;
	};
	
	this.setNumDaysVisibleOfLastMonth = function() {
		var self = this;
		self.iNumDaysVisibleOfLastMonth = self.DaysOfWeek.length - (self.DaysOfWeek.length - self.iFirstDayOfMonth);
		return;
	};
	
	this.setLastDayOfMonth = function() {
		var self = this;
		
		self.dtLastDayOfMonth = new Date(parseInt(self.dtCalendar.getFullYear()), parseInt(self.dtCalendar.getMonth()), self.iNumDaysInMonth);
		self.iLastDayOfMonth = self.dtLastDayOfMonth.getDay();
		self.sLastDayOfMonth = self.DaysOfWeek[self.iLastDayOfMonth];
		return;
	};
	
	this.setNumDaysInMonth = function() {
		var self = this;
		self.iNumDaysInMonth = self.getMonthLen(parseInt(self.dtCalendar.getFullYear()),parseInt(self.dtCalendar.getMonth()));
		return;
	};
	
	this.setFirstDayOfMonth = function() {
		var self = this;
		
		self.dtFirstDayOfMonth = new Date(parseInt(self.dtCalendar.getFullYear()), parseInt(self.dtCalendar.getMonth()), 1);
		self.iFirstDayOfMonth = self.dtFirstDayOfMonth.getDay();
		self.sFirstDayOfMonth = self.DaysOfWeek[self.iFirstDayOfMonth];
		return;
	};
	
	this.getMonthLen = function(iYear, iMonth) {
		iYear = parseInt(iYear);
		iMonth = parseInt(iMonth);
		
		if (!isNaN(iYear) && !isNaN(iMonth)) {
			var fdtm = new Date(iYear, iMonth, 1);
			var ldtm = new Date(iYear, iMonth + 1, 0);
			var iSub = ldtm.getTime() - fdtm.getTime();
			var iHours = iSub / (1000 * 60 * 60);
			var iDays = (iHours / 24) + 1;
			return iDays;
		}
	}
	
	this.Get = function() {
		return;
	};
	
	this.getMonthName = function(iMonth,bShort) {
		var self = this;
		if (bShort)
			return self.MonthsOfYear[iMonth].toString().substring(0,self.iShortDayNameLength);
		else
			return self.MonthsOfYear[iMonth].toString();
	};
	
	this.setNodeDate = function(sDate) {
		var self = this;
		
		if (!sDate) {
			self.dtNode_Year = self.dtSelected.getFullYear();
			self.dtNode_Month = self.dtSelected.getMonth();
			self.dtNode_Date = self.dtSelected.getDate();
		} else {
			var aDate = sDate.split("-");
			if (aDate.length > 0) {
				self.dtNode_Year = parseInt(aDate[0]);
				self.dtNode_Month = parseInt(aDate[1]);
				self.dtNode_Date = parseInt(aDate[2]);
			}
		}
		self.dtNode = new Date(self.dtNode_Year, self.dtNode_Month, self.dtNode_Date);
		return;
	};
	
	this.setTodaysDate = function(sDate) {
		var self = this;
			
		if (!sDate) {
			self.dtToday = new Date();
			self.dtToday_Year = self.dtToday.getFullYear();
			self.dtToday_Month = self.dtToday.getMonth();
			self.dtToday_Date = self.dtToday.getDate();
		} else {
			var aDate = sDate.split("-");
			if (aDate.length > 0) {
				self.dtToday_Year = parseInt(aDate[0]);
				self.dtToday_Month = parseInt(aDate[1]);
				self.dtToday_Date = parseInt(aDate[2]);
			}
			self.dtToday = new Date(self.dtToday_Year, self.dtToday_Month, self.dtToday_Date);
		}
		return;
	};
	
	this.setSelectedDate = function(sDate) {
		var self = this;
			
		if (!sDate) {
			if (!self.dtSelected) {
				self.dtSelected_Date = self.dtToday.getDate();
				self.dtSelected_Year = self.dtToday.getFullYear();
				self.dtSelected_Month = self.dtToday.getMonth();
			} else {
				self.dtSelected_Date = self.dtSelected.getDate();
				self.dtSelected_Year = self.dtSelected.getFullYear();
				self.dtSelected_Month = self.dtSelected.getMonth();
			}
		} else {
			var aDate = sDate.split("-");
			if (aDate.length > 0) {
				self.dtSelected_Date = parseInt(aDate[2]);
				self.dtSelected_Year = parseInt(aDate[0]);
				self.dtSelected_Month = parseInt(aDate[1]);
			}
		}
		//document.title = self.dtSelected_Year + "-" + self.dtSelected_Month + "-" + self.dtSelected_Date;
		self.dtSelected = new Date(self.dtSelected_Year, self.dtSelected_Month, self.dtSelected_Date);
		
		//self.sSelectedMonth = self.getMonthName(parseInt(self.dtSelected_Month),false);
		//self.sSelectedMonth_Short = self.getMonthName(parseInt(self.dtSelected_Month),true);
		
		return;
	};
	
	this.setCalendarDate = function(sDate) {
		var self = this;
			
		if (!sDate) {
			if (!self.dtCalendar) {
				self.dtCalendar_Date = self.dtToday.getDate();
				self.dtCalendar_Year = self.dtToday.getFullYear();
				self.dtCalendar_Month = self.dtToday.getMonth();
			} else {
				self.dtCalendar_Date = self.dtCalendar.getDate();
				self.dtCalendar_Year = self.dtCalendar.getFullYear();
				self.dtCalendar_Month = self.dtCalendar.getMonth();
			}
		} else {
			var aDate = sDate.split("-");
			if (aDate.length > 0) {
				self.dtCalendar_Year = parseInt(aDate[0]);
				self.dtCalendar_Month = parseInt(aDate[1]);
				self.dtCalendar_Date = parseInt(aDate[2]);
			}

		}
		self.dtCalendar = new Date(self.dtCalendar_Year, self.dtCalendar_Month, self.dtCalendar_Date);
		
		self.sSelectedMonth = self.getMonthName(parseInt(self.dtCalendar_Month),false);
		self.sSelectedMonth_Short = self.getMonthName(parseInt(self.dtCalendar_Month),true);
		return;
	};
	
}