var CM_Calendar = new Class({

    Implements: [Options],
    
    options: {
        'month': '',
        'year': '',
        'event': '',
        'woot': 'woot'
    },
    
    initialize: function(el, options) {
        var today = new Date();
        this.today = today;
        
        this.element = $(el);
        this.setOptions(options);
        
        // This is really annoying, it starts the months at 0 so January is 0
        // See: http://www.clientcide.com/wiki/cnet-libraries/03-native/00-date
        if (this.options.month == false) {
            this.options.month = today.get('Month') + 1;
        }
        if (this.options.year == false) {
            this.options.year = today.get('Year');
        }
        
        this.request();
    },
    
    build: function() {
        myDiv = new Element('div');
        myDiv.set('html', 'woot woot');
        this.element.adopt(myDiv);
    },
    
    request: function() {
        var myClass = this;
        var request = new Request({
            url: 'calendar.php',
            method: 'get',
            onSuccess: function(txt) {
                myClass.element.set('html', txt);
                myClass.arrows();
                myClass.events();
            }
        });
        
        request.send("month="+this.options.month+"&year="+this.options.year+"&event="+this.options.event);
    },
    
    arrows: function() {
        var myClass = this;
        $('cal_prev').addEvent('click', function(el) {
            if (myClass.options.month == 1) {
                myClass.options.month = 12;
                myClass.options.year -= 1;
            } else {
                myClass.options.month -= 1;
            }
            myClass.request();
        });
        $('cal_next').addEvent('click', function(el) {
            if (myClass.options.month == 12) {
                myClass.options.month = 1;
                myClass.options.year += 1;
            } else {
                myClass.options.month += 1;
            }
            myClass.request();
        });
    },
    
    events: function() {
        var myClass = this;
        $('events').getElements('li').each(function(el) {
            var d = $('cal_day_' + el.get('title'));
            if (d) {
                var content = el.get('html').split('::');
                d.store('tip:title', content[0]);
                d.store('tip:text', content[1]);
            }
            
        });
    
        var myTips = new Tips($$('.cal-with-events'), {
            timeOut: 700,
            maxTitleChars: 50, /*I like my captions a little long*/
            maxOpacity: .9 /*let's leave a little transparancy in there */
        });
        
        $$('.cal-with-events').each(function(el){
            el.addEvent('click', function(){
                $$('.tip').each(function(el){
                    el.setStyle('display', 'none');
                });
                // When the user clicks on the date we will make a new Request.
                var event = el.get('id').substring(8);
                var request = new Request({
                    url: 'calendar.php',
                    method: 'get',
                    onSuccess: function(txt) {
                        myClass.element.set('html', txt);
                        $('cal_back').addEvent('click', function() {
                            myClass.request();
                        });
                        $('cal_back').setStyle('cursor', 'pointer');
                    }
                });
                request.send("month="+myClass.options.month+"&year="+myClass.options.year+"&event="+event);
            });
        });
        
    }
    
});


window.addEvent('domready',function(){
    new CM_Calendar('calendar');
});
