var Waqss2_calendar = function(page) {
    
    this.page = page;

    this.initCalendar = function (waqssDate) {

        var dateString = createCalenderDateString(waqssDate);
        var range = this.createRange();
        var waqssCal = this;

        var changeDate = function(calendar) {
            waqssCal.page.dateChanged(calendar);
        };

        var disallow = function(jsDate) {
            return !waqssCal.isValidDate(jsDate, waqssCal.page.currentScene);
        };

        var cal = Calendar.setup({
            flat         : "calendar-container", // ID of the parent element
            flatCallback : changeDate , // our callback function
            date         : dateString, // the init date
            range        : range,
            dateStatusFunc : disallow
        });

        this.replaceDaynames();

        return cal;

    };

    this.replaceDaynames = function() {

        var daynameTds = getElementsByTagAndClassName('td', 'name');

        for (var i = 0; i < daynameTds.length; i++) {
            var td = daynameTds[i];
            var text = trimStr(td.innerHTML);
            if (text.length > 2) {
                td.innerHTML = text.substr(0,2);
            }
        }
    };

    this.isValidDate = function(jsDate, sceneId) {

        var paramId = this.page.getCurrentParam();
        var waqssDate = createWaqssDate(jsDate);
        var year = waqssDate.substr(0, 4);

        if (!this.isYearInTheRange(year)) {
            return false;
        }

        var params = getParamsFor(waqssDate);

        if (paramId == null || params == undefined) {
            return false;
        }

        for (var i = 0; i < params.length; i++) {
            if (params[i] == paramId) {
                if (sceneId == null) {
                    return true;
                } else {
                    var image = getImageNameFor(waqssDate, paramId, sceneId);
                    if (image != null) {
                        return true;
                    }
                }
            }
        }
        return false;
    };

    this.isYearInTheRange = function(year) {
        var range = this.createRange();
        return year >= range[0] && year <= range[1];
    };

    this.createRange = function() {
        return [allDataStartDay.substr(0, 4), allDataEndDay.substr(0, 4)];
    };
};

