function Calendar(cTargetID , nMonth, nYear){

	var cTranslateThis01 = "January";
	var cTranslateThis02 = "February";
	var cTranslateThis03 = "March";
	var cTranslateThis04 = "April";
	var cTranslateThis05 = "May";
	var cTranslateThis06 = "June";
	var cTranslateThis07 = "July";
	var cTranslateThis08 = "August";
	var cTranslateThis09 = "September";
	var cTranslateThis10 = "October";
	var cTranslateThis11 = "November";
	var cTranslateThis12 = "December";
	var cTranslateThis13 = "Sunday";
	var cTranslateThis14 = "Monday";
	var cTranslateThis15 = "Tuesday";
	var cTranslateThis16 = "Wednesday";
	var cTranslateThis17 = "Thursday";
	var cTranslateThis18 = "Friday";
	var cTranslateThis19 = "Saturday";

	var cJanuaryText = cTranslateThis01;
	var cFebruaryText = cTranslateThis02
	var cMarchText = cTranslateThis03;
	var cAprilText = cTranslateThis04;
	var cMayText = cTranslateThis05;
	var cJuneText = cTranslateThis06;
	var cJulyText = cTranslateThis07;
	var cAugustText = cTranslateThis08;
	var cSeptemberText = cTranslateThis09;
	var cOctoberText = cTranslateThis10;
	var cNovemberText = cTranslateThis11;
	var cDecemberText = cTranslateThis12;
	var cSundayText = cTranslateThis13;
	var cMondayText = cTranslateThis14;
	var cTuesdayText = cTranslateThis15;
	var cWednesdayText = cTranslateThis16;
	var cThursdayText = cTranslateThis17;
	var cFridayText = cTranslateThis18;
	var cSaturdayText = cTranslateThis19;
	this.MainClassName = "CalMain";
	this.MonthClassName = "CalMonth";
	this.DOWClassName = "CalDaysOfWeek";
	this.DaysClassName = "CalDays";
	this.targetID = cTargetID;
	this.arrLinkedDaysOfWeek = ["0","1","2","3","4","5","6"];
	this.arrLinkedDates = [];
	this.arrLinkedDatesExceptions = [];
	this.arrMonths=[cJanuaryText,cFebruaryText,cMarchText,cAprilText,cMayText,cJuneText,cJulyText,cAugustText,cSeptemberText,cOctoberText,cNovemberText,cDecemberText];
	this.arrDays=[cSundayText,cMondayText,cTuesdayText,cWednesdayText,cThursdayText,cFridayText,cSaturdayText];
	this.CalendarMonth = nMonth;
	this.CalendarYear = nYear;
	this.DateHref = null;
	this.DateOnClick = null;
	this.arrDaysInMonth=[31,0,31,30,31,30,31,31,30,31,30,31];
}
Calendar.prototype.Init = function(){
	var oTodaysDate=new Date() //DD added
	var scanfortoday=(this.CalendarYear==oTodaysDate.getFullYear() && this.CalendarMonth==oTodaysDate.getMonth()+1)? oTodaysDate.getDate() : 0 //DD added
	this.oDate = new Date(this.CalendarYear, this.CalendarMonth-1, 1);
	this.oDate.od=this.oDate.getDay()+1;
	this.arrDaysInMonth[1]=(((this.oDate.getFullYear()%100!=0)&&(this.oDate.getFullYear()%4==0))||(this.oDate.getFullYear()%400==0))?29:28;
	this.cStr = "";
	this.cStr += '<div class="'+this.MainClassName+'">';
	this.cStr += '	<table class="'+this.MainClassName+'" cols="7" cellpadding="0" cellspacing="0">';
	this.cStr += '		<tr align="center">';
	this.cStr += '				<td colspan="7" align="center" class="'+this.MonthClassName+'">'+this.arrMonths[this.CalendarMonth-1]+' - '+this.CalendarYear+'</td>';
	this.cStr += '		</tr>';
	this.cStr += '		<tr align="center">';
	for(s=0;s<7;s++){
		this.cStr+='		<td class="'+this.DOWClassName+'">'+this.arrDays[s].substr(0,2)+'</td>';
	}
	this.cStr+='		</tr>';
	this.cStr+='		<tr align="center">';
	var cTdContent = "";
	var cCurrDateHref = this.DateHref.replace(/{Year}/gi, this.CalendarYear);
	if(this.DateOnClick != null){
		var cCurrDateOnClick = this.DateOnClick.replace(/{Year}/gi, this.CalendarYear);
		cCurrDateOnClick = cCurrDateOnClick.replace(/{Month}/gi, cFormattedMonth);
	}
	var cFormattedMonth = this.addLeadingCharacters(this.CalendarMonth.toString(),"00");
	cCurrDateHref = cCurrDateHref.replace(/{Month}/gi, cFormattedMonth);
	
	for(i=1;i<=42;i++){
		cTdContent = ""
		var cCurrentDate=((i-this.oDate.od>=0)&&(i-this.oDate.od<this.arrDaysInMonth[this.CalendarMonth-1]))? i-this.oDate.od+1 : "&nbsp;";
		if (cCurrentDate!=scanfortoday){
			cTdContent = cCurrentDate;
		}else{
			cTdContent = '<span id="tdCalendarToday">'+cCurrentDate+'</span>'
		}
		var cFormattedDate = this.addLeadingCharacters(cCurrentDate.toString(),"00");
		if(cCurrentDate < oTodaysDate.getDate() && (this.CalendarMonth-1 == oTodaysDate.getMonth() && this.CalendarYear == oTodaysDate.getFullYear())){
			this.cStr+='<td class="'+this.DaysClassName+' PreviousDays">'+cTdContent+'</td>';
		}else if(cTdContent != "&nbsp;"){
			var cDayOfWeek = ((i-1)%7).toString();	
			//alert(this.arrLinkedDaysOfWeek[0] + ' ' + this.arrLinkedDaysOfWeek[2] + ' ' + cDayOfWeek);
			if(this.arrLinkedDaysOfWeek.inArray(cDayOfWeek) || this.arrLinkedDates.inArray(this.CalendarYear.toString() + cFormattedMonth + cFormattedDate)){				
				cTdContent = (!this.arrLinkedDatesExceptions.inArray(this.CalendarYear.toString() + cFormattedMonth + cFormattedDate) ? '<a class="anchCalendarLink" href="'+cCurrDateHref.replace(/{Date}/gi,cFormattedDate).replace(/{DOW}/gi,this.addLeadingCharacters(((i-1)%7),"00"))+'" '+ (this.DateOnClick != null ? ' onclick="'+cCurrDateOnClick.replace(/{Date}/gi,cFormattedDate).replace(/{DOW}/gi,this.addLeadingCharacters(((i-1)%7),"00")) + '"' : '') + '>'+cTdContent+'</a>' : cTdContent);
			}
			this.cStr+='<td id="td'+this.CalendarYear.toString() + cFormattedMonth + cFormattedDate +'"   class="'+this.DaysClassName+' tdDOW'+((i-1)%7)+'" >'+cTdContent+'</td>';
		}else{
			this.cStr+='<td class="'+this.DaysClassName+' EmptyCells" >'+cTdContent+'</td>';
		}
		if(((i)%7==0)&&(i<36)){
			this.cStr+='</tr><tr align="center">';
		}
	}
	this.cStr+='</tr></table></div>';
	document.getElementById(this.targetID).innerHTML = this.cStr;
}
Calendar.prototype.addLeadingCharacters = function(cString , cLeadingChars){
	while(cString.length < cLeadingChars.length){
		cString = cLeadingChars.charAt(0) + cString;
	}
	return cString;
}
