// Поддержка календаря

// создадим объект, содержащий в себе функционал календаря

// конструктор
function KanobuCalendar(main_box_id) {
    this.main_box_id = main_box_id;
    this.main_box = null;
}

// возвращаем объект главного контейнера
KanobuCalendar.prototype.get_main_box = function () {
    if (!this.main_box) {
        this.main_box = $('#'+this.main_box_id).get(0);
    }
    return this.main_box;
};

// возвращаем jQuery-селектор главного контейнера
KanobuCalendar.prototype.get_jmain_box = function () {
    return $(this.get_main_box());
};

// функция прокрутки страницы до календаря
KanobuCalendar.prototype.scroll_to_calendar = function () {
    var new_height = this.get_jmain_box().offset().top - 20 + 'px';
    $('html,body').animate({scrollTop: new_height}, 0);
};

// функция обновления месяца календаря
KanobuCalendar.prototype.change_month = function (url) {
    var calendar_obj = this, extra = {};
    // если юзером выбрана какая-то дата (щелчком по дню, то данные о ней посылаются вместе с запросом
    if (this.selected_date) {
        extra = {
            'year': this.selected_date.getFullYear(),
            'month': this.selected_date.getMonth(),
            'day': this.selected_date.getDate()
        };
    }
    // обязательный атрибут JSON-ответа: main_box_html - HTML-код для главного контейнера календаря
    $.getJSON(url, extra, function(data) {
        calendar_obj.get_jmain_box().html(data.main_box_html);
        
        if (calendar_obj.change_month_callback) {
            calendar_obj.change_month_callback(data);
        }
    });
}

// если надо выполнить дополнительные действия при изменении месяца календаря, присваиваем этому атрибуту функцию, принимающую результат JSON-запроса.
KanobuCalendar.prototype.change_month_callback = function (data) {};

// функция, вызываемая при щелчке по дню. Аргумент - объект с атрибутами
KanobuCalendar.prototype.day_click = function (params) {};

// календарь событий
var EventCalendar = new KanobuCalendar('Calendar');

EventCalendar.change_month_callback = function (data) {
    if (data.day_has_events) {
        $('#right_events_box').load(data.event_list_url);
    }
    this.scroll_to_calendar();
    // агли фикс фор агли ИЕ
    $('#right_events_box').html($('#right_events_box').html());
};

EventCalendar.day_click = function (params) {
    this.selected_date = new Date(parseInt(params.year, 10), parseInt(params.month, 10), parseInt(params.day, 10));
    $('#right_events_box').load(
        params.url,
        // еще один агли фикс фор ИЕ
        function () {
            $('.box.service.poll,.box.service.profile').each(function() {$(this).html($(this).html());});
        }
    );
    this.scroll_to_calendar();
};

// календарь сообщений
var MessageCalendar = new KanobuCalendar('message_calendar');

MessageCalendar.day_click = function (params) {
    window.location = params.url;
};










/*
// асинхронное обновление календаря
function change_month(entry_type, entry_id, y, m, mode, calendar_mode, tab_name, stype) {
    if (typeof mode == 'undefined' ) {
        mode = 'show';
    }
    if (typeof calendar_mode == 'undefined' ) {
        calendar_mode = 'month';
    }

    
    var calendar_id = 'Calendar';
    if (entry_type == 'entity') {
        var url = '/calendar/entities/' + entry_id + '/calendar/update_month/'
            + new Array(y, m).join('/')
            + '?mode=' + mode
            + '&calendar_mode=' + calendar_mode;
    } else if (entry_type == 'user') {
        var url = '/calendar/accounts/' + entry_id + '/calendar/update_month/'
            + new Array(y, m).join('/')
            + '?mode=' + mode
            + '&calendar_mode=' + calendar_mode;

    } else if (entry_type == 'messages') {
        tab_name = tab_name || 'messages';
        stype = stype || 'in';
        calendar_id = 'message_calendar';
        var url = '/accounts/profile/messages/' + tab_name + '/' + stype + '/update_month/'
            + new Array(y, m).join('/') + '/';
    } else {
        var url = '/calendar/entities/all/calendar/update_month/'
            + new Array(y, m).join('/')
            + '?mode=' + mode
            + '&calendar_mode=' + calendar_mode;
    }
    $('#' + calendar_id).load(url);
}



// Асинхронное обновление списка с событиями на заданный день.
function update_events_list(mode, y, m, d) {
    var url = '/calendar/update_events_list/' + mode + '/' + new Array(y, m, d).join('/') + '/';
    $('#right_events_box').load(url);
    EventCalendar.scroll_to_calendar();
}
*/


/*function load_top_to_events_list() {
    var url = '/calendar/load_top_to_events_list/';
    $('#right_events_box').load(url);
    EventCalendar.scroll_to_calendar();
}*/

/*
function load_top_to_events_list() {
    var url = '/calendar/load_top_to_events_list/';
    EventCalendar.day_click({'url': url});
}
*/