var KPMG = new JS.Class({});

var Calendar = new JS.Class( KPMG, {

    monthsLabels: ['January', 'February', 'March', 'April', 'May', 'June', 'July',
                   'August', 'September', 'October', 'November', 'December'],
   daysLabels: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday' ],
   daysInMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],
   currentDate: '',
   categoryId:  0,
   month: '',
   year:  '',
   firstDay: '',
   startingDay: '',
   monthLength: '',
   eventsData: {},
   oddEven: 'odd',

   initialize: function(month, year) {
       this.currentDate = new Date();
       this.month = (isNaN(month) || month == null) ? this.currentDate.getMonth() : month;
       this.year  = (isNaN(year) || year == null) ?  this.currentDate.getFullYear() : year;
       this.setFrist();
       this.getEvents();
   },

   setCategory : function( categoryId ) {
       this.categoryId = categoryId;
       this.getEvents();
       this.render()
   },

   setFrist : function() {
       this.firstDay = new Date(this.year, this.month, 1);
       this.startingDay = this.firstDay.getDay();
       this.monthLength = this.daysInMonth[this.month];
       if (this.month == 1) {
           if ((this.year % 4 == 0 && this.year % 100 != 0) || this.year % 400 == 0){
               this.monthLength = 29;
           }
       }
   },

   getEvents : function() {
       url = URI_FRONTEND + "/events/monthly/" + this.year + "/" + this.month + "/" + this.categoryId  ;
       $.ajax( {
           url: url,
           dataType: "json",
           async: false,
           success: function(data)
           {
               Calendar.prototype.eventsData = data;
           }
       });
   },

   getOddEven : function() {
       if( this.oddEven == 'odd' ) {
           this.oddEven = 'even'
       }else {
           this.oddEven = 'odd';
       }
       return this.oddEven;
   },
   next : function() {
       if( this.month < 11 ) {
           this.month++;
       }else {
           this.month = 0;
           this.year++;
       }
       this.setFrist();
       this.getEvents();
   },
   prev : function() {
       if( this.month > 0 ) {
           this.month--;
       }else {
           if( this.year > 2010 ) {
               this.month = 11;
               this.year--;
           }
       }
       this.setFrist();
       this.getEvents();
   },
   render: function() {}
});

var CompactCalendar = new JS.Class( Calendar,
{
    render: function() {
        var monthName = this.monthsLabels[this.month];
        var html = '<table class="calendar-table">';
        html += '<tr><th colspan="7">';
        html +=  monthName + "&nbsp;" + this.year;
        html += '</th></tr>';
        html += '<tr class="calendar-header">';
        html += '</tr><tr class="' + this.getOddEven() + '">';
        var day = 1;
        for (var i = 0; i < 9; i++) {
            for (var j = 0; j <= 6; j++) {
                html += '<td class="calendar-day">';
                if (day <= this.monthLength && (i > 0 || j >= this.startingDay)) {
                    if( this.eventsData.dailyEvents ) {
                        if( this.eventsData.dailyEvents[this.year][this.month+1][day] ) {
                            html += '<b>' + day + '</b>';
                        }else {
                            html += day;
                        }
                    }else {
                        html += day;
                    }

                    day++;
                }
                html += '</td>';
            }
            if (day > this.monthLength) {
                break;
            } else {
                html += '</tr><tr class="' + this.getOddEven() + '">';
            }
        }
        html += '</tr></table>';
        /* html += '<a href="mailto:info@golfbusinesscommunity.com" target="_blank" class="more" style="margin-left:10px;">Send us you event</a><br /><br />'; */
        html += '<div class="list">';
        html += '<h3>Date - Event</h3>';
        html += '<ul>';

       // console.dir(Calendar.eventsData );

        $( this.eventsData.queryResuls ).each( function( key, item ){
            if ( key <= 7 ) html += '<li>' + item.short_date + ' - <a href="' + URI_FRONTEND + 'calendar">' + item.name + '</a></li>';
        });

        html += '</ul>';
        html += '<a class="more" href="' + URI_FRONTEND + 'calendar">More...</a>';
        html += '</div>';


        return html;
        }
});

var LargeCalendar = new JS.Class( Calendar,
{
    render: function() {
        var monthName = this.monthsLabels[this.month];
        var html = '<div class="h">';
        html += '<h3 id="calPager"><a class="prev" href="#">&laquo;</a>' + monthName + ' ' + this.year + ' <a  class="next" href="#">&raquo;</a></h3>'
        html += '</div>';
        html += '<table class="calendar_large">';
        html += '<tr>';
        for (var i = 0; i <= 6; i++ ){
            html += '<th><span>';
            html += this.daysLabels[i];
            html += '</span></th>';
        }
        html += '</tr>';
        html += '<tr class="calendar-header">';
        html += '</tr><tr class="' + this.getOddEven() + '">';
        var day = 1;
        for (var i = 0; i < 9; i++) {
            for (var j = 0; j <= 6; j++) {
                html += '<td class="calendar-day"><span>';
                if (day <= this.monthLength && (i > 0 || j >= this.startingDay)) {
                    html += day;
                    if( isNaN ( this.eventsData.dailyEvents ) ) {
                        if( this.eventsData.dailyEvents[this.year][this.month+1][day] ) {
                            html += '</span>';
                            $( this.eventsData.dailyEvents[this.year][this.month+1][day] ).each( function( key, item ){

                                html += '<a href="' + URI_FRONTEND + 'calendar#' + item.name + '">' + item.country + '</a><br>';

                            });
                            html +='</td>';
                        }else {
                            html += '</span></td>';
                        }
                    }
                    day++;
                }
            }
            if (day > this.monthLength) {
                break;
            } else {
                html += '</tr><tr class="' + this.getOddEven() + '">';
            }
        }
        html += '</tr></table>';

        html += '<ul class="events">';
        $( this.eventsData.queryResuls ).each( function( key, item ){
            html += '<li><a name="'+ item.name + '"></a>';
            html += '<h3>'+ item.long_date +' - <span style="font-weight: normal">' + item.name + ', ' + item.location + ' (' + item.city + ', ' + item.country + ')</span></h3>';
            html += '<p>' + item.description + '</p>';
            html += '<div class="backlink">';
            //html += '<a href="#">Add to google calendar</a>';
            html += '</div>';
            html += '</li>';
        });
        html += '</ul>';
        $('#cal').html( html );

        $('#calPager .prev').click( function() {
            calendar.prev();
            calendar.render();
            return false;
         });
        $('#calPager .next').click( function() {
            calendar.next();
            calendar.render();
            return false;
        });
    }
});