var OpenCalendarConfig = {
  calendarMinDate : new Date(2008, 10 - 1 , 1),
  calendarMaxDate : new Date(2009, 12 - 1 , 31),
  calendarYearRange : '2008:2009',
  defaultCalendarDateFormat : 'dd-mm-yy',
  startDateInputId : 'txtStartDate',
  endDateInputId : 'txtEndDate',
  calendarButtonDefinitions: {'d-today': 'today',  'd-tomorow': 'tomorrow',  'd-psk': 'weekend', 'd-week':'nextSevenDays', 'd-month':'nextThirtyDays'}
};

var OpenCalendar = {
  
  init: function() {
    jQuery('body').addClass('jsEnabled');
    this.initDateControls();
  },
  
  initDateControls: function() {
    this.clearButtonState();
    jQuery('#d-month').addClass('current');
    this.calendarSetToday();
  },
  
  // Customize two date pickers to work as a date range 
  datePickerCustomRange: function(input) { 
    return {minDate: (input.id == OpenCalendarConfig.endDateInputId ? jQuery('#' + OpenCalendarConfig.startDateInputId).datepicker('getDate') : null), 
	maxDate: (input.id == OpenCalendarConfig.startDateInputId ? jQuery('#' + OpenCalendarConfig.endDateInputId).datepicker('getDate') : null)}; 
    },
    
  clearButtonState: function() {
     jQuery('#search-when a').removeClass('current');
  },
  
  datePickerOnSelectHandler: function(text) {
    OpenCalendar.clearButtonState();
    OpenCalendar.setDate('dateRange');
  },
   
  applyDateControls: function() {
    jQuery('#search-when a').click(function(){
        OpenCalendar.clearButtonState();
        jQuery(this).addClass('current');
        OpenCalendar.setDate(OpenCalendarConfig.calendarButtonDefinitions[this.id]);
        jQuery('#'+ OpenCalendarConfig.startDateInputId).val('');
        jQuery('#'+ OpenCalendarConfig.endDateInputId).val('');
        return false;
    });
  },
  
  setDate: function(value) {
    jQuery('#eventDate').val(value);
  },
  
  calendarSetToday: function() {
    this.setDate('today');
  },
  
  calendarSetTomorrow: function() {
    this.setDate('tomorrow');
  },
  
  calendarSetAll: function() {
    this.setDate('all');
  },
  
  applyDatePicker: function() {
    if (jQuery.datepicker){
    jQuery.datepicker.setDefaults({showOn: 'both', buttonImageOnly: true, onSelect: OpenCalendar.datePickerOnSelectHandler,beforeShow: OpenCalendar.datePickerCustomRange, 
            buttonImage: '/portal/garnish/calendar.gif', speed: 'slow', constrainInput: true, dateFormat: OpenCalendarConfig.defaultCalendarDateFormat,
            minDate: OpenCalendarConfig.calendarMinDate, maxDate: OpenCalendarConfig.calendarMaxDate, yearRange: OpenCalendarConfig.calendarYearRange});
    if (document.getElementById(OpenCalendarConfig.startDateInputId)) jQuery('#' + OpenCalendarConfig.startDateInputId).datepicker({defaultDate: null}); 
    if (document.getElementById(OpenCalendarConfig.endDateInputId)) jQuery('#' + OpenCalendarConfig.endDateInputId).datepicker({defaultDate: 'null'}); 
    }
  },
    
  applySuperfish: function() {
        jQuery('ul.sf-menu').superfish(); 
    },
    
  applySearchBoxEnter: function() {
      jQuery('#search-box').keypress(function(e){
        if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {  
             jQuery('#go').focus();
             return false;  
         } else {  
             return true;  
         }  
      })
  },
    
  EventsPager: function(options) {
    
    var pagerSettings = {
        container: '.mainArticle',
        btnNext: 'btn-event-next',
        btnPrevious: 'btn-event-previous',
        hideClass: 'hide',
        speed: 'slow',
        contentBlockSelector: '.module-content',
        buttonContainer: '.articleNav'
     };
   
    if (options) jQuery.extend(pagerSettings, options);
    var events =  jQuery(pagerSettings.container).find(pagerSettings.contentBlockSelector).get();
    var currentEventIndex = 1;
    var eventCount = events.length;
        
    var init = function() {
        if (eventCount == 0 || eventCount == 1) return;
        hideAllEvents();
        attachHandlers();
        showPagingControls();
        showEvent(currentEventIndex);
        updateButton(currentEventIndex+1,'btnNext');
    }
    
    var showPagingControls = function() {
        jQuery(pagerSettings.buttonContainer).show();
    }
    
    var attachHandlers = function() {
        jQuery('#' + pagerSettings.btnNext).bind("click", function() {nextEvent(); return false;});
        jQuery('#' + pagerSettings.btnPrevious).bind("click", function() {previousEvent(); return false;});
    }
    
    var hideAllEvents = function() {
        jQuery(events).addClass(pagerSettings.hideClass);
    }
    
    var nextEvent = function() {
       if ((currentEventIndex+1) == eventCount) {
           performEventChange(eventCount,'next');
           hideButton('btnNext');
       } else {
           performEventChange(currentEventIndex+1,'next');
       }
    }
    
    var previousEvent = function() {
       if ((currentEventIndex-1) == 0) {
          performEventChange(1,'previous');
          hideButton('btnPrevious');
       }else
       {
          performEventChange(currentEventIndex-1,'previous');
       }
   }
   
    var performEventChange = function(eventIndex,action) {
       showEvent(eventIndex);
       updateButton(currentEventIndex,action==='next'? 'btnPrevious':'btnNext');
       currentEventIndex = eventIndex ;
       updateButton(action==='next'? currentEventIndex + 1 : currentEventIndex - 1,action==='next'? 'btnNext':'btnPrevious');
    }
   
    var updateButton = function(eventIndex,buttonName) {
       jQuery('#'+ pagerSettings[buttonName]).text(
       jQuery(events).eq(eventIndex-1).find('h3 a').text());
       showButton(buttonName);
    }
                
    var showButton = function(button) {
        jQuery('#'+ pagerSettings[button]).parent('div').removeClass(pagerSettings.hideClass);
    }
    
    var hideButton = function(button) {
        jQuery('#'+ pagerSettings[button]).parent('div').addClass(pagerSettings.hideClass);
    }
    
    var showEvent = function(index) {
        hideAllEvents();
        jQuery(events).eq(index-1).removeClass(pagerSettings.hideClass);
    }
    
    init();
    
  },
  
  applyEventsPager: function() {
      this.EventsPager();
  }
  
};

jQuery(document).ready(function(){
    OpenCalendar.init();
    OpenCalendar.applyDatePicker();
    OpenCalendar.applyDateControls();
    OpenCalendar.applySuperfish();
    OpenCalendar.applyEventsPager();
    //OpenCalendar.applySearchBoxEnter();
});
