﻿EventsControl = function() { };

EventsControl.prototype.INSTANCE_NAME = null;
EventsControl.prototype.IS_LOADING = false;
EventsControl.prototype.SERVICE_PATH = '/EventsControl.ashx';
EventsControl.prototype.START_ROW = 0;

EventsControl.prototype.CURRENT_BROWSE = 'current-browse';
EventsControl.prototype.CURRENT_EVENTS = 'current-events';
EventsControl.prototype.CURRENT_PAGING = 'current-paging';

EventsControl.prototype.STATUS_CONTAINER = 'events-status';
EventsControl.prototype.STATUS_CURRENT = null;
EventsControl.prototype.STATUS_REMOVAL_TIMER = null;

EventsControl.prototype.YEAR_CURRENT = null;
EventsControl.prototype.YEAR_LINK_NEXT = 'events-year-next';
EventsControl.prototype.YEAR_LINK_PREVIOUS = 'events-year-previous';

EventsControl.prototype.MONTH_PREVIOUS = null;
EventsControl.prototype.MONTH_CURRENT = null;
EventsControl.prototype.MONTH_CONTAINER_PREFIX = 'events-month-';
EventsControl.prototype.MONTH_NAMES = 'January,February,March,April,May,June,July,August,September,October,November,December';

EventsControl.prototype.init = function() {
};

EventsControl.prototype.load = function() {
    if (!this.IS_LOADING) {
        this.IS_LOADING = true;
        this.status_set('Loading events...');
        this.events_get();
    }
};

EventsControl.prototype.events_get = function() {
    var ajax_object = {};
    ajax_object.scope = this;
    ajax_object.url = this.SERVICE_PATH + '?method=get_events&year=' + this.year_get() + '&month=' + this.month_get() + '&startRow=' + this.START_ROW;
    ajax_object.success = function() {
        if (arguments[0].responseText != '[]') {
            ajax_object.scope.init();
            ajax_object.scope.events_build(arguments[0].responseText);
        }
        else {
            ajax_object.scope.status_remove();
            ajax_object.scope.status_set_fade('Couldn\'t find events for ' + ajax_object.scope.month_get_name() + ' ' + ajax_object.scope.year_get(), 2000);
        }
    };
    ajax.post(ajax_object);
};

EventsControl.prototype.events_build = function() {
    var container = $(this.CURRENT_EVENTS);
    var json = eval("(" + arguments[0] + ")");
    var html = '';

    for (var i = 0; i < (json.length - 1); i++) {
        html += '<div class="event">';
        html += '<a href="' + json[i].Website + '" target="_blank">';
        html += '<h2>' + json[i].EventName + '</h2></a>';
        html += '<label><strong>From:</strong>&nbsp;' + json[i].Dates + '</label>';
        html += '<label><strong>Description:</strong><br />';
        html += json[i].Description + '</label>';
        html += '<label><strong>Location:</strong>&nbsp;' + json[i].Location + '</label>';
        html += '<label><strong>Website:</strong>&nbsp;<a href="' + json[i].Website + '" target="_blank">';
        html += json[i].Website + '</a></label></div><hr />';
    };

    container.innerHTML = html;

    this.set_current_browse();
    this.status_remove();
    
    this.paging_set(json[json.length - 1]);
};

EventsControl.prototype.year_get = function() {
    return this.YEAR_CURRENT;
};

EventsControl.prototype.year_set = function() {
    var type = arguments[0];

    if (type == 'n') {
        this.YEAR_CURRENT++;
    }
    else {
        this.YEAR_CURRENT--;
    }

    $(this.YEAR_LINK_NEXT).innerHTML = (this.YEAR_CURRENT + 1) + ' &raquo;';
    $(this.YEAR_LINK_PREVIOUS).innerHTML = '&laquo; ' + (this.YEAR_CURRENT - 1);
    
    this.START_ROW = 0;
    this.status_set('Loading events for ' + this.month_get_name() + ' ' + this.YEAR_CURRENT + '...');
    this.events_get();
};

EventsControl.prototype.month_get = function() {
    return this.MONTH_CURRENT;
};

EventsControl.prototype.month_set = function() {
    this.MONTH_PREVIOUS = this.month_get();
    this.MONTH_CURRENT = arguments[0];
    this.START_ROW = 0;
    //this.status_set('Finding events for ' + this.month_get_name() + ' ' + this.YEAR_CURRENT + '...');
    this.events_get();
};

EventsControl.prototype.month_get_name = function() {
    var months = this.MONTH_NAMES.split(',');
    return months[(this.MONTH_CURRENT - 1)];
};

EventsControl.prototype.set_current_browse = function() {
    var text = 'Currently browsing events in <strong>' + this.month_get_name() + ' ' + this.year_get() + '</strong><hr />';
    $(this.CURRENT_BROWSE).innerHTML = text;
};

EventsControl.prototype.status_set = function() {
    var obj = $(this.STATUS_CONTAINER);
    Dom.setStyle(obj, 'visibility', 'visible');
    obj.innerHTML = arguments[0];
};

EventsControl.prototype.status_set_fade = function() {
    var scope = this;
    var text = arguments[0];
    
    var obj = $(scope.STATUS_CONTAINER);
    obj.innerHTML = text;
    Dom.setStyle(obj, 'visibility', 'visible');
};

EventsControl.prototype.status_remove = function() {
    var obj = $(this.STATUS_CONTAINER);
    var scope = this;

    this.STATUS_REMOVAL_TIMER = setTimeout(function() {
        scope._status_fade();
    }, 3000);
};

EventsControl.prototype._status_fade = function() {
    var obj = $(this.STATUS_CONTAINER);
    Dom.setStyle(obj, 'visibility', 'hidden');
};

EventsControl.prototype.paging_set_start_row = function() {
    this.START_ROW = arguments[0];
    this.events_get();
};

EventsControl.prototype.paging_set = function() {
    var prev = arguments[0].PreviousStartRow;
    var next = arguments[0].NextStartRow;
    var html = '';

    if (prev != null)
        html += '<a href="javascript:' + this.INSTANCE_NAME + '.paging_set_start_row(\'' + prev + '\')">&laquo; Previous Page</a>&nbsp;&nbsp;|&nbsp;&nbsp;';

    if (next != null)
        html += '<a href="javascript:' + this.INSTANCE_NAME + '.paging_set_start_row(\'' + next + '\')">Next Page &raquo;</a>';

    $(this.CURRENT_PAGING).innerHTML = html;
};