function CalendarUtils(oParentClass) {
	this.ParentClass = oParentClass || null;
	
	this.Ajax = null;
	
	this.lastStoredMessage = "";
	
	this.bInDebugMode = false;
	
	this.iEventCount = 0;
	this.iEventDayCount = 0;
	
	this.bClearEventDetails = true;
	
	this.eventList = [];
	this.eventDetailList = [];
	
	this.cachedEventList = [];
	this.cachedEventDetailList = [];
	
	this.bFirstRequest = true;
	this.bLoadingFromCache = false;
	
	this.Initialize = function() {
		var self = this;
		
		if (self.ParentClass) {
			self.bInDebugMode = self.ParentClass.bInDebugMode;
			self.Ajax = self.ParentClass.Ajax;
			
			return true;
		} else {
			if (self.bInDebugMode)
				alert("CalendarUtils: Could not find Parent Class!");
		}
			
		return false;
	}
	
	this.ShowMessage = function(sMessage,sTitle,sType) {
		var self = this;
		return;
	}
	
	this.ClearStatusMessage = function() {
		var self = this;
		if (self.ParentClass.StatusBar) {
			while (self.ParentClass.StatusBar.childNodes.length > 0)
				self.ParentClass.StatusBar.removeChild(self.ParentClass.StatusBar.childNodes[0]);
		}
		return;
	}
	
	this.SaveStatusMessage = function() {
		var self = this;
		try {
			self.lastStoredMessage = self.ParentClass.StatusBar.firstChild.nodeValue;
		} catch(e) {
		
		}
		return;
	}
	
	this.ShowStatusMessage = function(sMessage,sType) {
		var self = this;
		if (self.ParentClass.StatusBar) {
			
			self.SaveStatusMessage();
			self.ClearStatusMessage();
			
			Element.removeClassName(self.ParentClass.StatusBar,"Info");
			Element.removeClassName(self.ParentClass.StatusBar,"Error");
			//var sCurrentClass = self.ParentClass.StatusBar.className;
			//sCurrentClass = sCurrentClass.replace(" Info","").replace(" Error","");
			if (sType == "SelectedDate") {
				sMessage = self.ParentClass.Properties.DaysOfWeek[self.ParentClass.Properties.dtSelected.getDay()].substring(0,self.ParentClass.Properties.iShortDayNameLength) + ", ";
				sMessage += self.ParentClass.Properties.dtSelected_Date + " ";
				sMessage += self.ParentClass.Properties.MonthsOfYear[self.ParentClass.Properties.dtSelected_Month].substring(0,self.ParentClass.Properties.iShortDayNameLength) + " ";
				sMessage += self.ParentClass.Properties.dtSelected_Year;
			} else
			if (sType == "NodeDate") {
				try {
					sMessage = self.ParentClass.Properties.DaysOfWeek[self.ParentClass.Properties.dtNode.getDay()].substring(0,self.ParentClass.Properties.iShortDayNameLength) + ", ";
					sMessage += self.ParentClass.Properties.dtNode_Date + " ";
					sMessage += self.ParentClass.Properties.MonthsOfYear[self.ParentClass.Properties.dtNode_Month].substring(0,self.ParentClass.Properties.iShortDayNameLength) + " ";
					sMessage += self.ParentClass.Properties.dtNode_Year;
				} catch(e) {
					try {
						sMessage = self.ParentClass.Properties.DaysOfWeek[self.ParentClass.Properties.dtSelected.getDay()].substring(0,self.ParentClass.Properties.iShortDayNameLength) + ", ";
						sMessage += self.ParentClass.Properties.dtSelected_Date + " ";
						sMessage += self.ParentClass.Properties.MonthsOfYear[self.ParentClass.Properties.dtSelected_Month].substring(0,self.ParentClass.Properties.iShortDayNameLength) + " ";
						sMessage += self.ParentClass.Properties.dtSelected_Year;
					} catch(e) {
						sMessage = self.ParentClass.Properties.DaysOfWeek[self.ParentClass.Properties.dtToday.getDay()].substring(0,self.ParentClass.Properties.iShortDayNameLength) + ", ";
						sMessage += self.ParentClass.Properties.dtToday_Date + " ";
						sMessage += self.ParentClass.Properties.MonthsOfYear[self.ParentClass.Properties.dtToday_Month].substring(0,self.ParentClass.Properties.iShortDayNameLength) + " ";
						sMessage += self.ParentClass.Properties.dtToday_Year;
					}
				}
			} else {
				Element.addClassName(self.ParentClass.StatusBar,sType);
				//self.ParentClass.StatusBar.className = sCurrentClass + " " + sType;
			}
			if (!self.ParentClass.StatusBar.firstChild) {
				self.ParentClass.StatusBar.appendChild(document.createTextNode(sMessage));
			} else {
				self.ParentClass.StatusBar.firstChild.nodeValue = sMessage;
			}
			return true;
		} else {
			if (self.bInDebugMode)
				alert("CalendarUtils: Count not find ParentClass.StatusBar");
		}
		return false;
	};
	
	this.ShowInfoPanelMessage = function(sMsgI, sMsgII, sMsgIII) {
		var self = this;
		
		if (self.ParentClass.InfoPanel) {
			self.ClearInfoPanel();
			var oEntry = document.createElement("div");
			var oEventDetailContent = document.createElement("div");
			oEntry.appendChild(oEventDetailContent);
			var oEDC_Posted = document.createElement("h6");
			oEDC_Posted.style.fontFamily = "Tahoma, Verdana, Arial, Helvetica, Geneva";
			oEDC_Posted.style.fontSize = "1.1em";
			oEDC_Posted.style.padding = "22px 5px";
			oEDC_Posted.style.fontWeight = "normal";
			oEDC_Posted.style.textAlign = "center";
			oEDC_Posted.style.color = "#AEAEAE";
			
			if (sMsgI)
				oEDC_Posted.appendChild(document.createTextNode(sMsgI));
			if (sMsgII) {
				oEDC_Posted.appendChild(document.createElement("br"));
				oEDC_Posted.appendChild(document.createElement("br"));
				oEDC_Posted.appendChild(document.createTextNode(sMsgII));
			}
			if (sMsgIII) {
				oEDC_Posted.appendChild(document.createElement("br"));
				oEDC_Posted.appendChild(document.createElement("br"));
				oEDC_Posted.appendChild(document.createTextNode(sMsgIII));
			}
			
			oEventDetailContent.appendChild(oEDC_Posted);
			
			self.ParentClass.InfoPanel.appendChild(oEntry);
			return true;
		} else {
			if (self.bInDebugMode)
				alert("InfoPanel could not be found!");
			return false;
		}
	}
	
	this.ShowDefaultInfoPanelMessage = function() {
		var self = this;
		self.ShowInfoPanelMessage("No event entries to display","In order to view event details, hover you mouse pointer over or click the date of an event");
		return;
	}
	
	this.selectDate = function(sDate) {
		var self = this;
		//alert(sDate);
		if (sDate) {
			var aDate = sDate.split("-");
			var sYear = aDate[0];
			var sMonth = aDate[1];
			var sDate = aDate[2];
			
			var re = /\'/g;
			sYear = sYear.replace(re,"");
			sMonth = sMonth.replace(re,"");
			sDate = sDate.replace(re,"");
			
			if (!self.ParentClass.Properties.dtSelected)
				self.ParentClass.Properties.dtSelected = new Date();
				
			self.ParentClass.Properties.setSelectedDate(parseInt(sYear) + "-" + parseInt(sMonth) + "-" + parseInt(sDate));
			
			var sID = "pcd_" + sYear + "_" + sMonth + "_" + sDate;
			var oAnchor = document.getElementById(sID);
			self.setSelected(oAnchor);
			self.ShowStatusMessage("","SelectedDate");
		}
		return;
	};
	
	this.setSelected = function(oAnchor) {
		var self = this;
		if (self.ParentClass.selectedObject) {
			Element.removeClassName(self.ParentClass.selectedObject,"selected");
			//self.ParentClass.selectedObject.className = self.ParentClass.selectedObject.className.replace(" selected","");
			self.ParentClass.selectedObject = null;
		}
		if (oAnchor) {
			Element.removeClassName(oAnchor,"selected");
			Element.addClassName(oAnchor,"selected");
			/*var sCurrentClassName = oAnchor.className;
			sCurrentClassName =  sCurrentClassName.replace(" selected","");
			oAnchor.className = sCurrentClassName + " selected";*/
			self.ParentClass.selectedObject = oAnchor;
			
			/*var sAnchorID = oAnchor.id;
			
			var aDate = sAnchorID.split("_");
			var iYear = aDate[1];
			var iMonth = parseInt(aDate[2]);
			var iDate = aDate[3];
			
			if (iMonth < 0) {
				iMonth = 11;
				iYear = iYear - 1;
			}
			if (iMonth > 11) {
				iMonth = 0;
				iYear = iYear + 1;
			}
			var sDate = "";
			sDate = iYear + "-" + iMonth + "-" + iDate;
			
			self.actionDOMSelect(sDate);*/
		}
		return;
	};
	
	this.ClearInfoPanel = function() {
		var self = this;
		
		if (self.ParentClass.InfoPanel) {
			while(self.ParentClass.InfoPanel.childNodes.length > 0)
				self.ParentClass.InfoPanel.removeChild(self.ParentClass.InfoPanel.childNodes[0]);
		}
			
		return;
	}
	
	this.reloadCalendar = function() {
		var self = this;
		
		self.ParentClass.clearDaysOfMonth();
		self.ParentClass.Properties.Initialize();
		self.ParentClass.fillDaysOfMonth();
		self.ParentClass.setHeaderTitleBarLabel(self.ParentClass.Properties.sSelectedMonth + " " + parseInt(self.ParentClass.Properties.dtCalendar_Year));
		self.ShowStatusMessage("","SelectedDate");
		self.selectToday();
		
		var sDateStr = self.ParentClass.Properties.dtSelected_Year + "-" + self.ParentClass.Properties.dtSelected_Month + "-" + self.ParentClass.Properties.dtSelected_Date;
		var sAnchorID = "pcd_" + self.ParentClass.Properties.dtSelected_Year + "_" + self.ParentClass.Properties.dtSelected_Month + "_" + self.ParentClass.Properties.dtSelected_Date;
		var oAnchor = document.getElementById(sAnchorID);
		self.setSelected(oAnchor);
		//self.selectDate(sDateStr);
		//self.actionDOMSelect(sDateStr);
			
		self.refreshEvents();
		return;
	};
	
	this.GoToToday = function() {
		var self = this;
		
		self.ClearInfoPanel();
		self.ShowDefaultInfoPanelMessage();
		
		var sYear = self.ParentClass.Properties.dtToday_Year;
		var sMonth = self.ParentClass.Properties.dtToday_Month;
		var sDate = self.ParentClass.Properties.dtToday_Date;
		
		var sTodayString = sYear + "-" + sMonth + "-" + sDate;
		
		//self.selectDate(sTodayString);
		
		//var sAnchorID = "pcd_" + sYear + "_" + sMonth + "_" + sDate;
		//var oAnchor = document.getElementById(sAnchorID);
		//self.setSelected(oAnchor);
		
		self.selectDate(sTodayString);
		//self.actionDOMSelect(sTodayString);
		self.ParentClass.Properties.setCalendarDate(sTodayString);
		
		self.reloadCalendar();
		return;
	};
	
	this.actionDOMSelect = function(sDate) {
		var self = this;
		
		if (sDate) {
			var aDate = sDate.split("-");
			var sYear = aDate[0];
			var sMonth = aDate[1];
			var sDate = aDate[2];
			
			var re = /\'/g;
			sYear = sYear.replace(re,"");
			sMonth = sMonth.replace(re,"");
			sDate = sDate.replace(re,"");
			
			var sID = "pcd_" + sYear + "_" + sMonth + "_" + sDate;
			var oAnchor = document.getElementById(sID);
			
			if (oAnchor.className.indexOf("event") != -1) {
				self.ParentClass.EventDateSelected = true;
				self.ParentClass.Properties.setCalendarDate(parseInt(self.ParentClass.Properties.dtSelected_Year) + "-" + parseInt(self.ParentClass.Properties.dtSelected_Month) + "-" + parseInt(self.ParentClass.Properties.dtSelected_Date));
				self.getEventDetails();
			} else
			if (oAnchor.className.indexOf("other") != -1) {
				self.ParentClass.Properties.setCalendarDate(parseInt(self.ParentClass.Properties.dtSelected_Year) + "-" + parseInt(self.ParentClass.Properties.dtSelected_Month) + "-" + parseInt(self.ParentClass.Properties.dtSelected_Date));
				self.reloadCalendar();
				self.ClearInfoPanel();
				self.ShowDefaultInfoPanelMessage();
			} else {
				self.ParentClass.EventDateSelected = false;
				self.ClearInfoPanel();
				self.ShowDefaultInfoPanelMessage();
			}
			oAnchor.blur();
		}
		
		//var oAnchor = document.getElementById(sAnchorID);
		
		/*		self.ParentClass.SelectedEventDateElms = [];
		self.ParentClass.SelectedEventDateElm = null;
		var sNodeVal = oAnchor.childNodes[0].nodeValue;
		var sID = oAnchor.id;
		var aID = sID.split("_");
		var sNodeYear = aID[1];
		var sNodeMonth = aID[2];
		if (sNodeMonth == "-1") {
			sNodeMonth = "11";
			sNodeYear = parseInt(sNodeYear) - 1;
		}
		var sNodeDate = aID[3];
		var sNodeDateStr = parseInt(sNodeYear) + "-" + parseInt(sNodeMonth) + "-" + parseInt(sNodeDate);
		self.ParentClass.Properties.setNodeDate(sNodeDateStr);
		var sNodeDay = self.ParentClass.Properties.DaysOfWeek[self.ParentClass.Properties.dtNode.getDay()];
		var sDateStr = sNodeYear + "-" + sNodeMonth + "-" + sNodeDate;
		
		self.selectDate(sDateStr);*/
		
		return;
	}
	
	this.selectToday = function() {
		var self = this;
		
		var sYear = self.ParentClass.Properties.dtToday_Year;
		var sMonth = self.ParentClass.Properties.dtToday_Month;
		var sDate = self.ParentClass.Properties.dtToday_Date;
		
		var sDateStr = sYear + "_" + sMonth + "_" + sDate;
		var sID = "pcd_" + sDateStr;
		var oToday = document.getElementById(sID);
		self.setToday(oToday);
		
		return;
	};
	
	this.setToday = function(oAnchor) {
		var self = this;
		
		if (oAnchor) {
			Element.removeClassName(oAnchor,"today");
			Element.addClassName(oAnchor,"today");
			
			/*var sCurrentClassName = oAnchor.className;
			sCurrentClassName =  sCurrentClassName.replace(" today","");
			oAnchor.className = sCurrentClassName + " today";*/
		}
		return;
	};
	
	this.refreshEvents = function() {
		var self = this;
		
		self.Ajax.abort();
		
		self.iEventCount = 0;
		self.iEventDayCount = 0;
		
		var str = "";
		var sCalendarDate = parseInt(self.ParentClass.Properties.dtCalendar_Year).toString() + "-" + parseInt(self.ParentClass.Properties.dtCalendar_Month).toString() + "-" + parseInt(self.ParentClass.Properties.dtCalendar_Date).toString();
		var sSelectedDate = parseInt(self.ParentClass.Properties.dtSelected_Year).toString() + "-" + parseInt(self.ParentClass.Properties.dtSelected_Month).toString() + "-" + parseInt(self.ParentClass.Properties.dtSelected_Date).toString();
		
		var sCacheDate = self.ParentClass.Properties.dtCalendar_Year + "-" + self.ParentClass.Properties.dtCalendar_Month;
		var bLoadFromCache = false;
		var oCacheResp = null;
		var oCacheEventList = null;
		for(var i = 0; i < self.cachedEventList.length; i++) {
			oCacheEventList = self.cachedEventList[i];
			var sCacheEventDate = oCacheEventList.cacheDate;
			if (sCacheDate == sCacheEventDate) {
				bLoadFromCache = true;
				oCacheResp = oCacheEventList.cacheData;
				break;
			}
		}
		
		if (!bLoadFromCache) {
	    var cmd = new Command();
	    cmd.cmdName = 'refreshEvents';
			cmd.cmdData = {
				"calendarDate":sCalendarDate,
				"selectedDate":sSelectedDate
			}
	    str = JSON.stringify(cmd);
	    self.execCmd(str, self.handleLoadEvents);
			return;
		} else {
			self.bLoadingFromCache = true;
			self.displayEventDates(oCacheResp);
			return;
		}
	};
	
	this.fetchEventDetails = function() {
		var self = this;
		
		self.Ajax.abort();
		
		self.iEventCount = 0;
		self.iEventDayCount = 0;
		
		var str = "";
		var sCalendarDate = parseInt(self.ParentClass.Properties.dtCalendar_Year).toString() + "-" + parseInt(self.ParentClass.Properties.dtCalendar_Month).toString() + "-" + parseInt(self.ParentClass.Properties.dtCalendar_Date).toString();
		var sSelectedDate = parseInt(self.ParentClass.Properties.dtSelected_Year).toString() + "-" + parseInt(self.ParentClass.Properties.dtSelected_Month).toString() + "-" + parseInt(self.ParentClass.Properties.dtSelected_Date).toString();
		
		var sCacheDate = sCalendarDate;
		var bLoadFromCache = false;
		var oCacheEventDetailListResp = null;
		var oCacheEventDetailList = null;
		
		var theEventList = JSON.parse(JSON.stringify(self.cachedEventDetailList));
		for(var i = 0; i < theEventList.length; i++) {
			oCacheEventDetailList = theEventList[i];
			var sCacheEventDetailDate = oCacheEventDetailList.cacheDate;
			if (sCacheDate == sCacheEventDetailDate) {
				bLoadFromCache = true;
				oCacheEventDetailListResp = oCacheEventDetailList.cacheData;
				break;
			}
		}
		
		if (!bLoadFromCache) {
	    var cmd = new Command();
	    cmd.cmdName = 'loadEventDetails';
			cmd.cmdData = {
				"calendarDate":sCalendarDate,
				"selectedDate":sSelectedDate
			}
	    str = JSON.stringify(cmd);
	    self.execCmd(str, self.handleLoadEvents);
			return;
		} else {
			self.bLoadingFromCache = true;
			self.ClearInfoPanel();
			self.setEventDetails(oCacheEventDetailListResp);
			return;
		}
	};
	
	this.execCmd = function(str, handlerFunc) {
    var self = this;
		
		self.ShowStatusMessage("Loading... Please wait...","Info");
		
		if (self.ParentClass.ParentClass.bDoAJAXRequests) {
			self.ParentClass.bAJAXBusyWorking = true;
    	self.Ajax.doPost('cal_events.php', str, handlerFunc);
		} else {
			if (self.bInDebugMode)
				alert("Not doing Ajax call");
		}
		return;
  };
	
	this.handleLoadEvents = function(str) {
    var self = PipIWYG.Calendar.CalContainer.Utils;
    var resp = JSON.parse(str);
    if (resp.respStatus == 'ok') {
			var sAction = resp.respName;
			if (sAction == "refreshEvents") {
				self.displayEventDates(resp);
			} else
			if (sAction == "loadEventDetails") {
				self.ClearInfoPanel();
				self.setEventDetails(resp);
			}
    } else {
			self.Ajax.abort();
			var oError = resp;
			var sError = JSON.stringify(oError);
			self.ShowStatusMessage("Error Loading Calendar Entries","Error");
		}
		self.ParentClass.bAJAXBusyWorking = false;
		return;
  };
	
	this.displayEventDates = function(eventData) {
		var self = this;
		
		var sDateStr = self.ParentClass.Properties.dtToday_Year.toString() + "-" + self.ParentClass.Properties.dtToday_Month.toString() + "-" + self.ParentClass.Properties.dtToday_Date.toString();
		self.selectToday();
		
		var respName = eventData.respName;
		var respSelectedDate = eventData.selectedDate;
		var aRespSelectedDate = respSelectedDate.split("-");
		var iYear = aRespSelectedDate[0];
		var iMonth = parseInt(aRespSelectedDate[1]) - 1;
		var iDate = aRespSelectedDate[2];
		
		if (iMonth < 0) {
			iMonth = 11;
			iYear = iYear - 1;
		}
		if (iMonth > 11) {
			iMonth = 0;
			iYear = iYear + 1;
		}
		var sRespSelectedDate = "";
		if (!self.bLoadingFromCache) {
			sRespSelectedDate = iYear + "-" + iMonth + "-" + iDate;
			self.selectDate(sRespSelectedDate);
			//self.actionDOMSelect(sRespSelectedDate);
		} else {
			sRespSelectedDate = self.ParentClass.Properties.dtSelected_Year + "-" + self.ParentClass.Properties.dtSelected_Month + "-" + self.ParentClass.Properties.dtSelected_Date;
		}
		var respData = eventData.respData;
		self.eventList = respData.eventList;
		
		if (!self.bLoadingFromCache) {
			if (JSON.stringify(self.eventList) != "{}") {
				var sCacheDate = self.ParentClass.Properties.dtCalendar_Year + "-" + self.ParentClass.Properties.dtCalendar_Month;
				sCacheDate = sCacheDate.toString();
				var sEventData = JSON.stringify(eventData);
				var oEventData = JSON.parse(sEventData);
				var sCache = {
					"cacheDate":sCacheDate,
					"cacheData":oEventData
				}
				var sString = JSON.stringify(sCache);
				var oString = JSON.parse(sString);
				self.cachedEventList.push(oString);
			}
		}
		
		var event = null;
		var oEventDate = null;
		var sEventDesc = "";
		var sEventType = "";
		var sEventDate = "";
		var iTotalNumberOfEntries = 0;
		for (var i in self.eventList) {
			event = self.eventList[i];
			if (event.date) {
				sEventDesc = event.description;
				sEventType = event.type;
				sEventID = event.id;
				sEventDate = event.date;
				
				var oCalRow = null;
				var oCalDate = null;
				var aEventDate = sEventDate.split("-");
				
				var iEventDate_Year = aEventDate[0];
				var iEventDate_Month = parseInt(aEventDate[1]) - 1;
				var iEventDate_Date = aEventDate[2];
				if (iEventDate_Month < 0) {
					iEventDate_Month = 11;
					iEventDate_Year = iEventDate_Month - 1;
				}
				if (iEventDate_Month > 11) {
					iEventDate_Month = 0;
					iEventDate_Year = iEventDate_Month + 1;
				}
				
				var dtEventDate = new Date(iEventDate_Year, iEventDate_Month, iEventDate_Date);

				var sAnchorID = "pcd_" + iEventDate_Year + "_" + iEventDate_Month + "_" + iEventDate_Date;
				var oAnchor = document.getElementById(sAnchorID);
				
				if (oAnchor) {
					iTotalNumberOfEntries++;
					var sCurrentClassName = oAnchor.className;
					var sCurrentClassName = "";
					if (parseInt(self.ParentClass.Properties.dtCalendar_Month) > parseInt(dtEventDate.getMonth()) || parseInt(dtEventDate.getMonth()) > parseInt(self.ParentClass.Properties.dtCalendar_Month)) {
						Element.removeClassName(oAnchor,"event");
						Element.removeClassName(oAnchor,"other");
						Element.addClassName(oAnchor,"event");
						Element.addClassName(oAnchor,"other");
						//sCurrentClassName += " event_other";
						self.iEventCount++;
					} else {
						self.iEventCount++;
						if ((parseInt(dtEventDate.getDate()) == parseInt(self.ParentClass.Properties.dtToday_Date)) && (parseInt(dtEventDate.getMonth()) == parseInt(self.ParentClass.Properties.dtToday_Month)) && (parseInt(dtEventDate.getFullYear()) == parseInt(self.ParentClass.Properties.dtToday_Year))) {
							Element.removeClassName(oAnchor,"event");
							Element.removeClassName(oAnchor,"today");
							Element.addClassName(oAnchor,"event");
							Element.addClassName(oAnchor,"today");
							//sCurrentClassName += " event_today";
						} else {
							Element.removeClassName(oAnchor,"event");
							Element.addClassName(oAnchor,"event");
							//sCurrentClassName += " event";
						}
					}
					
					//self.setEventDay(oAnchor,sCurrentClassName);
					
					//alert((dtEventDate.getFullYear() == self.ParentClass.Properties.dtSelected_Year) && (dtEventDate.getMonth() == self.ParentClass.Properties.dtSelected_Month) && (dtEventDate.getDate() == self.ParentClass.Properties.dtSelected_Date))
					if (dtEventDate.getFullYear() == self.ParentClass.Properties.dtSelected_Year && dtEventDate.getMonth() == self.ParentClass.Properties.dtSelected_Month && dtEventDate.getDate() == self.ParentClass.Properties.dtSelected_Date) {
						self.getEventDetails();
					}
				}
			}
		}
		self.ShowStatusMessage("","SelectedDate");
		self.bLoadingFromCache = false;
		
		return;
	};
	
	this.setEventDetails = function(eventData) {
		var self = this;
		
		var sDateStr = self.ParentClass.Properties.dtToday_Year.toString() + "-" + self.ParentClass.Properties.dtToday_Month.toString() + "-" + self.ParentClass.Properties.dtToday_Date.toString();
		self.selectToday();
		
		var respName = eventData.respName;
		var respSelectedDate = eventData.selectedDate;
		var aRespSelectedDate = respSelectedDate.split("-");
		var iYear = aRespSelectedDate[0];
		var iMonth = parseInt(aRespSelectedDate[1]) - 1;
		var iDate = aRespSelectedDate[2];
		if (iMonth < 0) {
			iMonth = 11;
			iYear = iYear - 1;
		}
		if (iMonth > 11) {
			iMonth = 0;
			iYear = iYear + 1;
		}

		var sRespSelectedDate = "";
		if (!self.bLoadingFromCache) {
			sRespSelectedDate = iYear + "-" + iMonth + "-" + iDate;
			self.selectDate(sRespSelectedDate);
			//self.actionDOMSelect(sRespSelectedDate);
		} else {
			sRespSelectedDate = self.ParentClass.Properties.dtSelected_Year + "-" + self.ParentClass.Properties.dtSelected_Month + "-" + self.ParentClass.Properties.dtSelected_Date;
		}
		
		var respData = eventData.respData;
		self.eventDetailList = respData.eventDetailList;
		if (!self.bLoadingFromCache) {
			if (JSON.stringify(self.eventDetailList) != "{}") {
				var sCacheDate = self.ParentClass.Properties.dtSelected_Year + "-" + self.ParentClass.Properties.dtSelected_Month + "-" + self.ParentClass.Properties.dtSelected_Date;
				sCacheDate = sCacheDate.toString();
				var sEventData = JSON.stringify(eventData);
				var oEventData = JSON.parse(sEventData);
				var sCache = {
					"cacheDate":sCacheDate,
					"cacheData":oEventData
				}
				var sString = JSON.stringify(sCache);
				var oString = JSON.parse(sString);
				self.cachedEventDetailList.push(oString);
			}
		}
		
		var event = null;
		var oEventDate = null;
		var sEventDesc = "";
		var sEventType = "";
		var sEventDate = "";
		var iTotalNumberOfEntries = 0;
		var sStr = "";
		var iLastYear = 0;
		var iLastMonth = 0;
		var iLastDate = 0;
		for (var i in self.eventDetailList) {
			event = self.eventDetailList[i];
			if (event.date) {
				iTotalNumberOfEntries++;
				sEventID = event.id;
				sEventDate = event.date;
				
				var oCalRow = null;
				var oCalDate = null;
				var aEventDate = sEventDate.split("-");
				
				var iEventYear = aEventDate[0];
				var iEventMonth = (parseInt(aEventDate[1]) - 1);
				var iEventDate = aEventDate[2];
				
				if (iEventMonth < 0) {
					iEventMonth = 11;
					iEventYear = iEventYear - 1;
				}
				if (iEventMonth > 11) {
					iEventMonth = 0;
					iEventYear = iEventYear + 1;
				}
				
				var dtEventDate = new Date(iEventYear, iEventMonth, iEventDate);
				
				self.eventDetailList[i] = new EventDetailEntry(self.ParentClass, dtEventDate, event.title, event.url);
				var oEntryDiv = self.eventDetailList[i].getEntry();
				self.addEventDetailEntry(oEntryDiv);
				
				iLastYear = iEventYear;
				iLastMonth = iEventMonth;
				iLastDate = iEventDate;
			}
		}
		
		iLastYear = 0;
		iLastMonth = 0;
		iLastDate = 0;
		
		if (iTotalNumberOfEntries == 0)
			self.ShowStatusMessage("","NodeDate");
		else
			self.ShowStatusMessage("","NodeDate");
		
		self.bLoadingFromCache = false;
		return;
	};
	
	this.clearEvents = function() {
		return;
  };
	
	this.addEventDetailEntry = function(oEventDetailEntry) {
		var self = this;
		
		if (self.ParentClass.InfoPanel) {
			self.ParentClass.SelectedEventDateElm = oEventDetailEntry;
			self.ParentClass.SelectedEventDateElms.push(self.ParentClass.SelectedEventDateElm);
			self.ParentClass.InfoPanel.appendChild(self.ParentClass.SelectedEventDateElm);
		}
		return;
	};
	
	this.setEventDay = function(oAnchor,sClassName) {
		var self = this;
		if (oAnchor) {
			var sCurrentClassName = oAnchor.className;
			if (sClassName) {
				var re = sClassName;
				sCurrentClassName =  sCurrentClassName.replace(re, "");
				oAnchor.className = sCurrentClassName + " " + sClassName;
			} else {
				var re = / event/g;
				sCurrentClassName =  sCurrentClassName.replace(re,"");
				oAnchor.className = sCurrentClassName + " event";
			}
		}
		return;
	};
	
	this.getEventDetails = function() {
		var self = this;
		
		if (self.ParentClass.InfoPanel) {
			self.ClearInfoPanel();
			self.fetchEventDetails();
		}
		
		return;
	};
	
}