function CottagesInCanada() {};

CottagesInCanada.getDateInfo = function(date, cal) {
        var month = date.getMonth() + 1;
        if (month < CottagesInCanada.OpeningMonth || month > CottagesInCanada.ClosingMonth) {
                return {
                        klass   : "closed",
                        tooltip : "<center>%B %e is closed</center>"
                };
        }
        if (cal.admin_mode)
                return;
        var days = CottagesInCanada.DAYS;
        if (!days) {
                CottagesInCanada.DAYS = days = {};
                var startVector = CottagesInCanada.startVector;
                var date = Calendar.intToDate(CottagesInCanada.startDate);
                for (var i = 0; i < startVector.length; ++i) {
                        var code = startVector.charAt(i);
                        if (code == 1)
                                days[ Calendar.dateToInt(date) ] = {
                                        klass   : "booked",
                                        tooltip : "<center>%B %e is booked</center>"
                                };
                        if (code == 0)
                                days[ Calendar.dateToInt(date) ] = {
                                        klass   : "available",
                                        tooltip : "<center>%B %e is available</center>"
                                };
                        date.setDate(date.getDate() + 1);
                }
        }
        return days[ Calendar.dateToInt(date) ];
};

CottagesInCanada.disabledDate = function(date) {
        var month = date.getMonth() + 1;
        return (month < CottagesInCanada.OpeningMonth || month > CottagesInCanada.ClosingMonth);
};

CottagesInCanada.setupCalendar = function(admin) {
        CottagesInCanada.OpeningMonth = parseInt(CottagesInCanada.OpeningMonth, 10);
        CottagesInCanada.ClosingMonth = parseInt(CottagesInCanada.ClosingMonth, 10);

        var today = new Date();
        var minDate = new Date();
        minDate.setDate(1);
        minDate.setMonth(CottagesInCanada.OpeningMonth - 1);
        if (minDate < today)
                minDate = today;

        var args = {
                cont          : CottagesInCanada.container,
                fdow          : 6,
                min           : Calendar.dateToInt(minDate),
                max           : CottagesInCanada.endDate,
                selectionType : (
                        admin
                                ? Calendar.SEL_MULTIPLE | Calendar.SEL_ADD
                                : Calendar.SEL_NONE
                ),
                dateInfo      : CottagesInCanada.getDateInfo,
                disabled      : CottagesInCanada.disabledDate
        };

        var cal = Calendar.setup(args);
        cal.admin_mode = !!admin;

        cal.changeOpeningMonth = function(mon) {
                        if (CottagesInCanada.ClosingMonth < mon) {
							CottagesInCanada.OpeningMonth = 1;
							alert ('Opening Month must come before Closing Month');
						 	document.getElementById('f_start_month').selectedIndex = 0;
                        }
						else
  						{
                CottagesInCanada.OpeningMonth = parseInt(mon, 10);
                CottagesInCanada.DAYS = null;
                cal.redraw();
						}
        };

        cal.changeClosingMonth = function(mon) {
                        if (CottagesInCanada.OpeningMonth > mon) {
							CottagesInCanada.ClosingMonth = 12;
							alert ('Closing Month must come after Opening Month');
						 	document.getElementById('f_end_month').selectedIndex = 11;
                        }
						else
  						{
				CottagesInCanada.ClosingMonth = parseInt(mon, 10);
                CottagesInCanada.DAYS = null;
                cal.redraw();
						}
        };

        cal.setSelection = function(startVector) {
                var date = Calendar.intToDate(CottagesInCanada.startDate);
                var sel = [];
                for (var i = 0; i < startVector.length; ++i) {
                        var code = startVector.charAt(i);
                        if (code == "1") {
                                sel.push(Calendar.dateToInt(date));
                        }
                        date.setDate(date.getDate() + 1); // advance to next day
                }
                cal.selection.sel = sel;
                cal.redraw();
        };

        cal.getSelection = function() {
                var date = new Date(Calendar.intToDate(CottagesInCanada.startDate));
                var endDate = new Date(cal.args.max);
                var vector = "";
                while (Calendar.dateToInt(date) <= Calendar.dateToInt(endDate)) {
                        if (cal.selection.isSelected(Calendar.dateToInt(date)))
                                vector += "1";
                        else
                                vector += "0";
                        date.setDate(date.getDate() + 1);
                }
                return {
                        startDate: CottagesInCanada.startDate,
                        vector: vector
                };
        };

        if (admin) {
                cal.setSelection(CottagesInCanada.startVector);
        }

        return cal;
};