// DHTML Calendar


function Calendar(cname, id, date) {
    // Used to notify the calendar that it is attached to a single html field.
    this.fallback_single = 0;

    // Used to notify the claendar that it is attached to 3 html fields.
    this.fallback_multi = 1;

    // Used to notify the calendar that it is attached to both field sets.
    this.fallback_both = 2;

    // Read-only calendar
    this.viewOnly = false;

    // Allows the user to select weekends
    this.allowWeekends = true;

    // Allows the user to select weekdays
    this.allowWeekdays = true;

    // The minimum date that the user can select (inclusive)
    this.minDate = "--";

    // The maximum date that the user can select (exclusive)
    this.maxDate = "--";

    // Allow the user to scroll dates
    this.scrolling = true;

    // The id of this calendar
    this.name = cname;

    // The first day of the week in the calendar (0-Sunday, 6-Saturday)
    this.firstDayOfWeek = 0;

    // Fallback method
    this.fallback = this.fallback_both;

    // Sets the date and strips out time information
    this.calendarDate = date;
    this.calendarDate.setUTCHours(0);
    this.calendarDate.setUTCMinutes(0);
    this.calendarDate.setUTCSeconds(0);
    this.calendarDate.setUTCMilliseconds(0);

    // The field id that the calendar is attached to.
    // For single input, this is used "as is". for the
    // Multi-input, it is given a suffix for _day, _month
    // and _year inputs.
    this.attachedId = id;

    // The left and right month control icons
    this.controlLeft = "&#171;";
    this.controlRight = "&#187;";

    // The left and right month control icons (when disabled)
    this.controlLeftDisabled = "";
    this.controlRightDisabled = "";

    // The css classes for the calendar and header
    this.calendarStyle = "cal_calendar";
    this.headerStyle = "cal_header";
    this.headerCellStyle = "cal_cell";
    this.headerCellStyleLabel = "cal_labelcell";

    // The css classes for the rows
    this.weekStyle = "cal_week";
    this.evenWeekStyle = "cal_evenweek";
    this.oddWeekStyle = "cal_oddweek";

    // The css classes for the day elements
    this.dayStyle = "cal_day";
    this.disabledDayStyle = "cal_disabled";
    this.commonDayStyle = "cal_common";
    this.holidayDayStyle = "cal_holiday";
    this.eventDayStyle = "cal_event";
    this.todayDayStyle = "cal_today";

    // specifies the labels for this calendar
    this.dayLabels = new Array(" S", " M", " T", " W", "Th", "F", " S");
    this.monthLabels = new Array( 
		"January", "February", "March", "April"
		, "May", "June", "July", "August"
		, "September", "October", "November", "December");

    // Specifies the dates of any event. The events are to be defined as arrays,
    // with element 0 being the date and element 1 being an id.
    this.eventDates = new Array();

    this.eventDatesUpcoming = new Array();
	
     this.cat = 0;	
    // Attach event handlers to any fallback fields.
    if (this.viewOnly == false) {

        setFieldValue(this.attachedId, this.calendarDate);

        if ((this.fallback = this.fallback_both) || (this.fallback = this.fallback_single)) {
            eval("document.getElementById(\"" + this.attachedId + "\").onchange = function () {updateFromSingle(" + this.name + ", this);}");
        }

        if ((this.fallback = this.fallback_both) || (this.fallback = this.fallback_multi)) {

            eval("document.getElementById(\"" + this.attachedId + "_day\").onchange = function () {updateFromMultiDay(" + this.name + ", this);}");
            eval("document.getElementById(\"" + this.attachedId + "_month\").onchange = function () {updateFromMultiMonth(" + this.name + ", this);}");
            eval("document.getElementById(\"" + this.attachedId + "_year\").onchange = function () {updateFromMultiYear(" + this.name + ", this);}");

        }
    }

    selectEvent = new Function();
}

function updateFromSingle(sender, helper) {
    newDate = new Date(helper.value);
    newDate.setUTCDate(newDate.getUTCDate() + 1);
    sender.calendarDate = newDate;

    renderCalendar(sender);
    setFieldValue(sender.attachedId, sender.calendarDate);
}

function updateFromMultiDay(sender, helper) {

    if (isNaN(helper.value)) {
        helper.value = sender.calendarDate.getUTCDate();
        return false;
    }

    sender.calendarDate.setUTCDate(helper.value);
    renderCalendar(sender);
    setFieldValue(sender.attachedId, sender.calendarDate);
}

function updateFromMultiMonth(sender, helper) {

    if (isNaN(helper.value)) {
        helper.value = sender.calendarDate.getUTCMonths() - 1;
        return false;
    }

    sender.calendarDate.setUTCMonth(helper.value - 1);
    renderCalendar(sender);
    setFieldValue(sender.attachedId, sender.calendarDate);
}

function updateFromMultiYear(sender, helper) {

    if (isNaN(helper.value)) {
        helper.value = sender.calendarDate.getUTCFullYear();
        return false;
    }

    sender.calendarDate.setUTCFullYear(helper.value);
    renderCalendar(sender);
    setFieldValue(sender.attachedId, sender.calendarDate);
}

function getFirstCalendarDate(calendar) {
    return new Date(
		calendar.calendarDate.getUTCFullYear()
		, calendar.calendarDate.getUTCMonth()
		, 1
	);
}

function renderCalendar(calendar) {
    calHtml1 = ("<table id=\"cal_" + calendar.attachedId + "\" class=\"" + calendar.calendarStyle + "\">");
    calHtml1 += ((calendar.scrolling) ? buildHeader(calendar) : buildStaticHeader(calendar));
    calHtml1 += buildCalendarTable(calendar);
    calHtml1 += ("</table>");
    //Populate Upcoming events
    calHtml1 += ("<br><center><h2 class=\"" + calendar.calendarStyle + "\">Upcoming Events:</h2></center>"); 
    for (j = 0; j < calendar.eventDatesUpcoming.length; j++) {
        var now = new Date(calendar.eventDatesUpcoming[j][2]);
       // if (calendar.calendarDate.getUTCMonth() == now.getMonth()) {  //if current month then show Upcoming Events
	calHtml1 += ("<a class=\"" + calendar.calendarStyle + "\" href=/?p=" + calendar.eventDatesUpcoming[j][1] + " >" + calendar.eventDatesUpcoming[j][0] + "</a><br>");
       //}         
    }
    document.getElementById("cal_" + calendar.attachedId + "_display").innerHTML = calHtml1;
}

function scrollMonthBack(calendar) {
    calendar.calendarDate.setUTCMonth(calendar.calendarDate.getUTCMonth() - 1);
    setFieldValue(calendar.attachedId, calendar.calendarDate);
    renderCalendar(calendar);
}

function selectDate(calendar, day) {
    if (!calendar.viewOnly) {
        calendar.calendarDate.setUTCDate(day);
        setFieldValue(calendar.attachedId, calendar.calendarDate);
        renderCalendar(calendar);
    }
}
function selectDateURL(calendar, day, eventID) {
//alert(calendar.calendarDate.getUTCFullYear());
    if (!calendar.viewOnly) {
		
    //Open new window with the id of the post
		
	if (eventID.indexOf("/") > 0){   //multiple post
		var curdate = new Date(eventID) 
		var theyear = curdate.getFullYear();
		var monthnum = curdate.getMonth() + 1;
		if (monthnum < 10){
		monthnum = '0' + monthnum ;	
		}
		var theday = curdate.getDate();

		if (theday < 10){
		theday = '0' + theday;	
		}
		var thecat = calendar.cat;

		//window.location = 'http://www.saintrichard.com' + '/?page_id=1038&theyear='  + theyear +  '&monthnum=' + monthnum + '&theday=' + theday + '&thecat=' + thecat
		window.location = 'http://www.saintrichard.com' + '/?m='  + theyear +  monthnum + theday + '&catid=' + thecat

				
		
 	}else{
		//var curdate = new Date(eventID) 
		var theyear = calendar.calendarDate.getUTCFullYear();		
		var monthnum = calendar.calendarDate.getUTCMonth() + 1;
		if (monthnum < 10){
		monthnum = '0' + monthnum ;	
		}
		var theday = day;
		if (theday < 10){
		theday = '0' + theday;	
		}
		var thecat = calendar.cat;

		//window.location = 'http://www.saintrichard.com' + '/?p=' + eventID 
		window.location = 'http://www.saintrichard.com' + '/?m='  + theyear +  monthnum + theday + '&catid=' + thecat

	}
 
    }
}

function scrollMonthForward(calendar) {
    calendar.calendarDate.setUTCMonth(calendar.calendarDate.getUTCMonth() + 1);
    setFieldValue(calendar.attachedId, calendar.calendarDate);
    renderCalendar(calendar);
}

function setFieldValue(fieldId, date) {
    document.getElementById(fieldId).value = date.getUTCFullYear() + "/" + (date.getUTCMonth() + 1) + "/" + date.getUTCDate();
    document.getElementById(fieldId + "_year").value = date.getUTCFullYear();
    document.getElementById(fieldId + "_month").selectedIndex = date.getUTCMonth();
    document.getElementById(fieldId + "_day").value = date.getUTCDate();
}

function buildHeader(calendar) {

    enableLeft = true;
    enableRight = true;

    if (calendar.minDate != "--") {
        if (calendar.calendarDate.getUTCFullYear() <= calendar.minDate.getUTCFullYear()) {
            if (calendar.calendarDate.getUTCMonth() <= calendar.minDate.getUTCMonth()) {
                enableLeft = false;
            }
        }
    }

    if (calendar.maxDate != "--") {
        if (calendar.calendarDate.getUTCFullYear() >= calendar.maxDate.getUTCFullYear()) {
            if (calendar.calendarDate.getUTCMonth() >= calendar.maxDate.getUTCMonth()) {
                enableRight = false;
            }
        }
    }

    calHtml2 = "";
    
    
        calHtml2 += (
		"<tr class=\""
		+ calendar.headerStyle
		+ "\">");

	calHtml2 += ("<td colspan=\"7\" class=\""
		+ calendar.headerCellStyleLabel
		+ "\"><center>" + whateverName + " Calendar</center></td></tr>");
    
    

    calHtml2 += (
		"<tr class=\""
		+ calendar.headerStyle
		+ "\">");
    calHtml2 += (
		"<td class=\""
		+ calendar.headerCellStyle
		+ ((enableLeft) ? ("\" onclick=\"scrollMonthBack(" + calendar.name + ")") : "")
		+ "\">"
		+ ((enableLeft) ? calendar.controlLeft : calendar.controlLeftDisabled)
		+ "</td>");
    calHtml2 += (
		"<td colspan=\"5\" class=\""
		+ calendar.headerCellStyleLabel
		+ "\"><a href=\"\?m=" + calendar.calendarDate.getUTCFullYear() + (calendar.calendarDate.getUTCMonth() + 1) + "&catid=" + calendar.cat + "\" >"
		+ calendar.monthLabels[calendar.calendarDate.getUTCMonth()]
		+ " " + calendar.calendarDate.getUTCFullYear()
		+ "</a></td>");
    calHtml2 += (
		"<td class=\""
		+ calendar.headerCellStyle
		+ ((enableRight) ? ("\" onclick=\"scrollMonthForward(" + calendar.name + ")") : "")
		+ "\">"
		+ ((enableRight) ? calendar.controlRight : calendar.controlRightDisabled)
		+ "</td>");

    calHtml2 += ("</tr>");

    calHtml2 += (
		"<tr class=\""
		+ calendar.headerStyle
		+ "\">")

    for (i = 0; i < 7; i++) {
        showDay = i + calendar.firstDayOfWeek;
        if (showDay > 6) showDay = showDay - 7;
        calHtml2 += (
			"<td class=\""
			+ calendar.headerCellStyle
			+ "\">"
			+ calendar.dayLabels[showDay]
			+ "</td>");
    }

    calHtml2 += ("</tr>");
    return calHtml2
}

function buildStaticHeader(calendar) {
    calHtml2 = "";

    calHtml2 += (
		"<tr class=\""
		+ calendar.headerStyle
		+ "\">");
    calHtml2 += (
		"<td colspan=\"7\" class=\""
		+ calendar.headerCellStyleLabel
		+ "\">"
		+ calendar.monthLabels[calendar.calendarDate.getUTCMonth()]
		+ ", " + calendar.calendarDate.getUTCFullYear()
		+ "</td>");
    calHtml2 += ("</tr>");

    calHtml2 += (
		"<tr class=\""
		+ calendar.headerStyle
		+ "\">")

    for (i = 0; i < 7; i++) {
        showDay = i + calendar.firstDayOfWeek;
        if (showDay > 6) showDay = showDay - 7;
        calHtml2 += (
			"<td class=\""
			+ calendar.headerCellStyle
			+ "\">"
			+ calendar.dayLabels[showDay]
			+ "</td>");
    }

    calHtml2 += ("</tr>");
    return calHtml2
}




function RenderDayDisabled(calendar, currentDate) {
    calHtml += ('<td class="day">');
    calHtml += ("<span class=\"" + calendar.disabledDayStyle + "\">");
    calHtml += (currentDate.getUTCDate());
    calHtml += ("</span>");
    calHtml += ("</td>");
}

function RenderDayDisabledNoTodaySel(calendar, currentDate) {
    calHtml += ('<td class="day">');
    calHtml += ("<span class=\"" + calendar.commonDayStyle + "\">");
    calHtml += (currentDate.getUTCDate());
    calHtml += ("</span>");
    calHtml += ("</td>");
}

function RenderDayEnabled(calendar, currentDate, dayStyle) {
    //Normal Days
//postID = 6;
    currentDayStyle = dayStyle;
    calHtml += ('<td class="day">');
    calHtml += ("<span class=\"" + dayStyle + "\" onclick=\"selectDate(" + calendar.name + ", " + currentDate.getUTCDate() + ")\">");
   //calHtml += ("<span class=\"" + dayStyle + "\" onclick=\"selectDateURL(" + calendar.name + ", " + currentDate.getUTCDate() + ", '" + postID + "'); \">"); 	
    calHtml += (currentDate.getUTCDate());
    calHtml += ("</span>");
    calHtml += ("</td>");
}

function RenderDayEnabledURL(calendar, currentDate, dayStyle, postID) {
    //Event day 
   //postID = 6;

    currentDayStyle = dayStyle;
    calHtml += ('<td class="day">');
   // calHtml += ("<span class=\"" + dayStyle + "\" onclick=\"selectDate(" + calendar.name + ", " + currentDate.getUTCDate() + ")\">");
   calHtml += ("<span class=\"" + dayStyle + "\" onclick=\"selectDateURL(" + calendar.name + ", " + currentDate.getUTCDate() + ", '" + postID + "'); \">"); 	
    calHtml += (currentDate.getUTCDate());
    calHtml += ("</span>");
    calHtml += ("</td>");
}

function RenderDayEvent(calendar, currentDate, dayStyle, eventId, postID) {
    //Days with Events
   // alert(postID);
    currentDayStyle = dayStyle;
    calHtml += ('<td class="day">');
    //calHtml += ("<span class=\"" + dayStyle + "\" onclick=\"selectDate(" + calendar.name + ", " + currentDate.getUTCDate() + "); " + calendar.name + ".selectEvent('" + eventId + "')\">");
    calHtml += ("<span class=\"" + dayStyle + "\" onclick=\"selectDateURL(" + calendar.name + ", " + currentDate.getUTCDate() + ", '" + postID + "'); \">");
    calHtml += (currentDate.getUTCDate());
    calHtml += ("</span>");
    calHtml += ("</td>");
}

function RenderDayEventUpcoming(calendar, currentDate, dayStyle, eventId, postID) {
    //Days with Events
    currentDayStyle = dayStyle;
	//calHtml1 += ("<a onclick=\"selectDateURL(" + calendar.name + ", " + currentDate.getUTCDate() + ", " + postID + ");\" > " . eventId . "</a>" );
    //calHtml1 += ('<td class="day">');
    //calHtml += ("<span class=\"" + dayStyle + "\" onclick=\"selectDate(" + calendar.name + ", " + currentDate.getUTCDate() + "); " + calendar.name + ".selectEvent('" + eventId + "')\">");
   // calHtml1 += ("<span class=\"" + dayStyle + "\" onclick=\"selectDateURL(" + calendar.name + ", " + currentDate.getUTCDate() + ", " + postID + "); \">");
    //calHtml1 += (currentDate.getUTCDate());
    //calHtml1 += ("</span>");
    //calHtml1 += ("</td>");
}

function buildCalendarTable(calendar) {
    currentDate = getFirstCalendarDate(calendar);
    odd = 0;
    while (currentDate.getUTCDay() != calendar.firstDayOfWeek) {
        currentDate.setUTCDate(currentDate.getUTCDate() - 1);
    }

    calHtml = "";
    do {
        odd += 1;

        calHtml += (
			"<tr class=\"" + (((odd % 2) == 0) ? calendar.evenWeekStyle : calendar.oddWeekStyle) + "\">")

        for (i = 0; i < 7; i++) {
            currentDayStyle = calendar.dayStyle;
            currentEventStyle = calendar.commonDayStyle;
            currentDateString = currentDate.getUTCFullYear() + "/" + (currentDate.getUTCMonth() + 1) + "/" + currentDate.getUTCDate();

            if (currentDate < calendar.minDate) {
                RenderDayDisabled(calendar, currentDate);
            }
            else if (currentDate > calendar.maxDate) {
                RenderDayDisabled(calendar, currentDate);
            }
            else if (currentDate.getUTCMonth() != calendar.calendarDate.getUTCMonth()) {
               // RenderDayDisabled(calendar, currentDate);
RenderDayDisabledNoTodaySel(calendar, currentDate);

            }
            else if (currentDate.getUTCDate() == calendar.calendarDate.getUTCDate()) {

//
              	 if ((currentDate.getUTCDay() == 0) || (currentDate.getUTCDay() == 6)) {
 
                    if (calendar.allowWeekends == true) {
                        //RenderDayEnabled(calendar, currentDate, calendar.eventDayStyle); //this makes random current days in other moths highlight even though no events
//alert(currentDate.getUTCDate() + ' == ' + calendar.calendarDate.getUTCDate());
RenderDayEnabled(calendar, currentDate, calendar.commonDayStyle); //this does not highlight random current days but also does not highlight day with event on weekend unless calendar is click on somewhere


                    }
                    else {
                        RenderDayDisabled(calendar, currentDate);
                        month = calendar.calendarDate.getUTCMonth();
                        calendar.calendarDate.setUTCDate(calendar.calendarDate.getUTCDate() + 1);
                        if (month != calendar.calendarDate.getUTCMonth()) {
                            renderCalendar(calendar);
                        }
                        setFieldValue(calendar.attachedId, calendar.calendarDate);
                    }
                } else {
                    if (calendar.allowWeekdays == true) {
 //RenderDayDisabled(calendar, currentDate);
                       // RenderDayEnabled(calendar, currentDate, calendar.todayDayStyle);
		gotTodayDate = 0	
	for (j = 0; j < calendar.eventDates.length; j++) { 
 //
//cdate = calendar.calendarDate.getUTCFullYear() + "/" + calendar.calendarDate.getUTCMonth() + "/" + calendar.calendarDate.getUTCDay();
			 if (calendar.eventDates[j][0] == currentDateString) { 
				gotTodayDate = 1;
			  postID = calendar.eventDates[j][1];
//alert(postID);

				//style = calendar.eventDayStyle
//break;
			//}else{
				
				//style = calendar.commonDayStyle
			  }
			// alert(calendar.calendarDate + "|" + calendar.eventDates[j][0]);
			
}	
			if (gotTodayDate == 0)
 			{
				 RenderDayEnabled(calendar, currentDate, calendar.commonDayStyle);
			}else{
				RenderDayEnabledURL(calendar, currentDate, calendar.eventDayStyle, postID );
			}
                    }
                    else {
                        RenderDayDisabled(calendar, currentDate);
                        month = calendar.calendarDate.getUTCMonth();
                        calendar.calendarDate.setUTCDate(calendar.calendarDate.getUTCDate() + 1);
                        if (month != calendar.calendarDate.getUTCMonth()) {
                            renderCalendar(calendar);
                        }
                        setFieldValue(calendar.attachedId, calendar.calendarDate);
                    }
                }
            }
            else if ((currentDate.getUTCDay() == 0) || (currentDate.getUTCDay() == 6)) {  //events on weekends
                if (calendar.allowWeekends == true) {

                    style = calendar.holidayDayStyle


                    for (j = 0; j < calendar.eventDates.length; j++) {

                        if (calendar.eventDates[j][0] == currentDateString) {
                            style = calendar.eventDayStyle;

                            RenderDayEvent(calendar, currentDate, style, calendar.eventDates[j][0], calendar.eventDates[j][1]);
		        //  RenderDayEvent(calendar, currentDate, dayStyle, eventId, postID)

                        }
                    }

                    if (style == calendar.holidayDayStyle) {
                        RenderDayDisabled(calendar, currentDate); // RenderDayEnabled(calendar, currentDate, style);  //Don't Highlight weekend days
                    }
                }
                else {
                    RenderDayDisabled(calendar, currentDate);
                }
            } else {                                        //events during week
                if (calendar.allowWeekdays == true) {
                    style = calendar.commonDayStyle

                    for (j = 0; j < calendar.eventDates.length; j++) {
                        if (calendar.eventDates[j][0] == currentDateString) {

                            style = calendar.eventDayStyle;
                            RenderDayEvent(calendar, currentDate, style, calendar.eventDates[j][0], calendar.eventDates[j][1]);
                        }
                    }

                    if (style == calendar.commonDayStyle) {
                        RenderDayEnabled(calendar, currentDate, style);

                    }
                }
                else {
                    RenderDayDisabled(calendar, currentDate);
                }
            }

            currentDate.setUTCDate(currentDate.getUTCDate() + 1);

        }

        calHtml += ("</tr>");


    } while (currentDate.getUTCMonth() == calendar.calendarDate.getUTCMonth());
    return calHtml;
}

