﻿var MonthSelector = Class.create(
{
    initialize: function(container, options)
    {
        this.container = $(container);

        var d = new Date();
        this.thisYear = d.getFullYear();
        this.thisMonth = d.getMonth() + 1;

        if (!options)
            options = {};

        this.year = this.thisYear;
        if (options.year)
            this.year = options.year;
        this.month = this.thisMonth;
        if (options.month)
            this.month = options.month;

        if (typeof options.navLeftContent == 'undefined')
            options.navLeftContent = '';
        if (typeof options.navRightContent == 'undefined')
            options.navRightContent = '';

        if (options.prefixText)
            this.prefixText = options.prefixText;
        if (options.suffixText)
            this.suffixText = options.suffixText;

        this.options = options;

        this.monthNames = Sys.CultureInfo.CurrentCulture.dateTimeFormat.MonthNames;

        this.initControls();
    },

    initControls: function()
    {
        var html = '<div class="month-selector clearfix"><span class="nav nav-left">' + this.options.navLeftContent + '</span><span class="month-container"><span class="month-name-container"><span class="month-name"></span></span></span><span class="nav nav-right">' + this.options.navRightContent + '</span></div>';
        this.container.update(html);
        this.attachControls.bind(this).defer();
    },

    attachControls: function()
    {
        var c = this.container;
        this.monthNameElement = c.select('.month-name')[0];
        this.navLeftElement = c.select('.nav-left')[0];
        this.navRightElement = c.select('.nav-right')[0];
        this.navLeftElement.observe('click', this.navLeft.bind(this));
        this.navRightElement.observe('click', this.navRight.bind(this));

        this.popup = new MonthPopup({ buttonElement: this.monthNameElement, popupClassName: 'flight-months', onMonthSelected: this.monthSelected.bind(this) });

        this.render();
    },

    render: function()
    {
        if (this.monthNameElement)
        {
            var text = '';
            if (this.prefixText)
                text += this.prefixText;
            text += this.monthNames[this.month - 1] + ' ' + this.year;
            if (this.suffixText)
                text += this.suffixText;
            this.monthNameElement.update(text);
        }
    },

    set: function(year, month, notify)
    {
        this.year = year;
        this.month = month;
        this.render();
        if (notify)
            this.notifyChange();
    },

    monthSelected: function(year, month)
    {
        this.set(year, month, true);
    },

    navLeft: function()
    {
        if (this.year > this.thisYear || this.month > this.thisMonth)
        {
            this.month--;
            if (this.month < 1)
            {
                this.month = 12;
                this.year--;
            }
            this.render();
            this.notifyChange();
        }
    },

    navRight: function()
    {
        this.month++;
        if (this.month > 12)
        {
            this.month = 1;
            this.year++;
        }
        this.render();
        this.notifyChange();
    },

    notifyChange: function()
    {
        if (this.options.onChange)
        {
            this.options.onChange(this.year, this.month);
        }
    }
});
