var CalendarWidget = new Class({

    initialize: function(el, url) {
        this.el  = $(el);
        this.url = url;

        if (!this.el) {
            return;
        }

        this.initEvents();
    },

    initEvents: function() {
        this.prev = this.el.getElements('div[class=previous]')[0].getElement('a');
        this.next = this.el.getElements('div[class=next]')[0].getElement('a');

        this.changeDate(this.prev);
        this.changeDate(this.next);
    },

    changeDate: function(anchor) {
        var query = anchor.getProperty('href').substring(1);
        var span  = new Element('span', {'text': anchor.get('text')}).inject(anchor.getParent());

        anchor.destroy();
        span.addEvent('click', this.loadData.bind(this, query));
    },

    loadData: function(query) {
        var req  = new Request.HTML({url: this.url});
        var cal  = 'calendar' + query.match(/calendar=(\w+)/)[1];
        var date = query.match(/date=(\d{4}-\d{2}-\d{2})/)[1];

        req.setHeader('X-Requested-With', 'XMLHttpRequest');
        req.addEvent('onComplete', function(response) {
            Cookie.write(cal, date, {duration: 0});
            var html = '';

            for (var i = 0; i < response.length; i++) {
                if ('DIV' == response[i].nodeName) {
                    html = response[i].innerHTML;
                    break;
                }
            }

            if (html.length > 0) {
                this.el.set('html', html);
                this.initEvents();
            }
        }.bind(this));

        req.send(query);
    }
});