//
// $Id: Events.js,v 1.3 2010/07/10 16:48:24 steve Exp $
//
var Events = function() {

    this.types = 0 
    this.type  = 0 

    this.editingRepeatingInstance = 0
    this.editingRepeating         = 0

    this.cms      = new CMSActions()
    this.editor   = new CMSEditor()
    this.html     = new Html()
    this.json     = new Json()
    this.textarea = new Textarea()
    this.thickbox = new ThickBoxGeneric()
    this.url      = new Url()
    this.validate = new Validate()
    
    // Editor
    //
    this.init = function() {
    
        var self = this
        
        $('img.contentEventsEditButton').click( function() { self.showEditor($(this)) })
        $('img.contentEventsDeleteButton').click( function() { self.cms.deleteSection($(this), 'News') })
        $('input.contentEventsSave').click( function() { self.saveDetails($(this)) })
    }

    this.showEditor = function(elem) {

        var self = this
        
        var id     = $(elem).attr('id').split('_')
        id         = id[1]
        var editor = 'contentEventsEditorEdit_' + id

        $.ajax({
                  type:     'POST',
                  url:      CMSURL,
                  data:     'Action=loadEventsSection&Id=' + id,
                  dataType: 'json',
                  timeout:  40000,
            error:
                function() {
                    return false;
                },
            success:
                function(data) {
                    if (data.Error) {
                        alert(data.Message)
                    } else {
                        $('#eventEditLabel_' + id).val(data.Event.label)
                        $('#contentEventsTypeSelect_' + id).val(data.Event.eventtypeid)
                        self.html.setCheckBoxValue($('#eventEditShowRepeating_' + id), data.Event.showrepeats)
                        self.editor.position(elem, editor)
                    }
                }
        })
    }

    this.saveDetails = function(elem) {
    
        var self = this
        
        var id = $(elem).attr('id').split('_')
        id = id[1]
        
        var label   = escape($('#eventEditLabel_' + id).val())
        var type    = $('#contentEventsTypeSelect_' + id).val()
        var repeats = self.html.getCheckBoxValue($('#eventEditShowRepeating_' + id)) 
        
        $.ajax({
                  type:     'POST',
                  url:      CMSURL,
                  data:     'Action=saveEventsSection&Id=' + id +
                                                    '&Label=' + label +
                                                    '&EventType=' + type +
                                                    '&Repeats=' + repeats,
                  dataType: 'json',
                  timeout:  40000,
            error:
                function() {
                    return false;
                },
            success:
                function(data) {
                    if (data.Error) {
                        alert(data.Message)
                    } else {
                        self.cms.reloadPage('#contentEventsEditor_' + id)
                    }
                }
        })
    }

    // Listing functions
    //
    this.initCMS = function() {

        var self = this

        if ($('#eventTypesVal').length) {
            self.types = 1
        }

        self.thickbox.applyThickBox('#content .thickbox')

        $('#showCalendar').click( function() { self.showCalendar($(this)) })

        $('#eventType').change( function() { self.loadEventsByType($(this)) }) 

        $('#cmsShowEvents .cmsShowEvents').click( function() { self.showEvents($(this)) })
        $('#cmsEventsTable .enableEvent').click( function() { self.enable($(this)) })
        $('#cmsEventsTable .deleteEvent').click( function() { self.deleteEvent($(this)) })

        $('#cmsEventsTable .eventFeaturedAll').click( function() { alert(1); self.featureEvent($(this), 'All') })
        $('#cmsEventsTable .eventFeaturedType').click( function() { self.featureEvent($(this), 'Type') })
    }

    this.showEvents = function(elem) {

        var self = this

        var id = $(elem).attr('id')

        $('#cmsShowEvents .cmsShowEvents').attr('checked', false)
        $(elem).attr('checked', 'true')
        switch(id) {
            case 'showAllEvents':
                $('#cmsEventsTable tr.repeatingEvent').show()
                $('#cmsEventsTable tr.nonRepeatingEvent').show()
                break
            case 'showRepeatingEvents':
                $('#cmsEventsTable tr.repeatingEvent').show()
                $('#cmsEventsTable tr.nonRepeatingEvent').hide()
                break
            case 'showNonRepeatingEvents':
                $('#cmsEventsTable tr.repeatingEvent').hide()
                $('#cmsEventsTable tr.nonRepeatingEvent').show()
                break
        }
    }

    this.loadEventsByType = function(elem) {

        var self = this

        var type = $(elem).val()

        $.ajax({
                  type:     'POST',
                  url:      CMSURL,
                  data:     'Action=loadEvents&EventType=' + type + '&EventTypes=' + self.types,
                  dataType: 'json',
                  timeout:  40000,
            error:
                function() {
                    return false;
                },
            success:
                function(data) {
                    if (data.Error) {
                        alert(data.Message)
                    } else {
                        $('#content').replaceWith(data.Events)
                        self.initCMS()
                    }
                    tb_remove()
                }
        })
    }

    this.featureEvent = function(elem, type) {

        var self = this

        var val = self.html.getCheckBoxValue($(elem))

        if (val == 0) {
            return
        }

        var typeId = '' 
        var id = $(elem).attr('id').split('_')
        if (id.length == 4) {
            typeId    = id[1]
            eventType = id[2]
            id        = id[3]
        } else {
            id = id[1]
        }
        
        switch(type) {
            case 'All':
                $('#eventFeaturedAll').each(
                    function() {
                        self.html.setCheckBoxValue($(this), 0)
                    })
                self.html.setCheckBoxValue($(elem), 1)
                $('#eventTr_' + id).addClass('selectedRow')
                if (! confirm('Make this the featured event?')) {
                    self.html.setCheckBoxValue($(elem), 0)
                    $('#eventTr_' + id).removeClass('selectedRow')
                    return                    
                }
                break;            
            case 'Type':
                $('#eventFeaturedType').each(
                    function() {
                        var elemId = $(this).id.split
                        if (elemId[0] == 'eventFeaturedType' && elemId[1] == typeId) {
                            self.html.setCheckBoxValue($(this), 0)
                        }
                    })
                self.html.setCheckBoxValue($(elem), 1)
                $('#eventTr_' + id).addClass('selectedRow')
                if (! confirm('Make this the featured ' + eventType + ' event?')) {
                    self.html.setCheckBoxValue($(elem), 0)
                    $('#eventTr_' + id).removeClass('selectedRow')
                    return                    
                }
                break;
        }

        $.ajax({
                  type:     'POST',
                  url:      CMSURL,
                  data:     'Action=featureEvent&Id=' + id +
                                                '&TypeId=' + typeId,
                  dataType: 'json',
                  timeout:  40000,
            error:
                function() {
                    return false;
                },
            success:
                function(data) {
                    if (data.Error) {
                        alert(data.Message)
                    } else {
                        alert('Event is now featured') 
                    }
                }
        })
    }

    this.showCalendar = function(elem) {

        var self = this

        var txt = $(elem).val()
        if (txt.match(/Show/)) {
            $(elem).val(txt.replace(/Show/, 'Hide'))
            $('#eventsCalendarDiv').slideDown()
        } else {
            $(elem).val(txt.replace(/Hide/, 'Show'))
            $('#eventsCalendarDiv').slideUp()
        }
    }

    this.enable = function(elem) {
    
        var self = this
        
        var elemId = $(elem).attr('id')
        var enable = self.html.getCheckBoxValue('#' + elemId)
        id         = elemId.split('_')
        id         = id[1]
                
        $('#eventTr_' + id).addClass('selectedRow')
        if (enable == 0) {
            action = 'disableEvent'
            if (! confirm('Disable this event?')) {
                self.html.setCheckBoxValue('#' + elemId, 1)
                $('#eventTr_' + id).removeClass('selectedRow')
                return
            }
        } else {
            action = 'enableEvent'
            if (! confirm('Enable this event?')) {
                self.html.setCheckBoxValue('#' + elemId, 0)
                $('#eventTr_' + id).removeClass('selectedRow')
                return
            }
        }
        
        $('#eventTr_' + id).removeClass('selectedRow')
        
        $.ajax({
                  type:     'POST',
                  url:      CMSURL,
                  data:     'Action=' + action + '&Id=' + id,
                  dataType: 'json',
                  timeout:  40000,
            error:
                function() {
                    return false;
                },
            success:
                function(data) {
                    if (data.Error) {
                        alert(data.Message)
                    } else {
                        if (enable == 0) {
                            $('#eventTr_' + id).addClass('disabledTr')
                        } else {
                            $('#eventTr_' + id).removeClass('disabledTr')
                        }
                    }
                }
        })
    }
    
    this.deleteEvent = function(elem) {
    
        var self = this
        var id     = $(elem).attr('id')
        id         = id.split('_')
        id         = id[1]

        $('#eventTr_' + id).addClass('selectedRow')
        if (! confirm('Delete this event?')) {
            $('#eventTr_' + id).removeClass('selectedRow')
            return
        }

        $('#eventTr_' + id).remove()
        
        $.ajax({
                  type:     'POST',
                  url:      CMSURL,
                  data:     'Action=deleteEvent&Id=' + id,
                  dataType: 'json',
                  timeout:  40000,
            error:
                function() {
                    return false;
                },
            success:
                function(data) {
                    if (data.Error) {
                        alert(data.Message)
                    }
                }
        })
    }

    // Event editing
    //
    this.initEvent = function() {
    
        var self = this
        
        self.thickbox.init()

        $('.mandatory').keyup( function() { self.validate.checkValid('.mandatory') })

        self.id    = self.url.clickedUrlArg('Id')
        self.types = self.url.clickedUrlArg('Types')
        self.type  = self.url.clickedUrlArg('Type')
        
        if (self.id) {
            $('#editEventTitle').html('Edit Event Item ' + self.id)
        } else {
            $('#editEventTitle').html('Create Event Item')
            self.html.setCheckBoxValue('#eventEnabled', 1)
        }
        self.loadEventParameters()

        $('#repeatingEventDiv .selectEditEvent').click( function() { self.showSelectedRepeatEvent($(this)) })

        $('#eventRepeat').click( function() { self.toggleShowRepeater() })
        $('#endDateCheck').click( function() { self.toggleShowEndDate() })

        $('#eventSaveButton').click( function() { self.saveEventItem() })

        $('#boldButton').click( function() { self.textarea.bold($('#newsText')) })
        $('#italicButton').click( function() { self.textarea.italic($('#newsText')) })
        $('#underlineButton').click( function() { self.textarea.underline($('#newsText')) })
    }
    
    this.toggleShowRepeater = function() {

        var self = this

        var show = self.html.getCheckBoxValue($('#eventRepeat'))
        if (show) {
            $('#eventRepeater').fadeIn()
            $('#endDateLabel').fadeIn()  
            $('#endDateCheck').fadeIn()  
        } else {
           $('#eventRepeater').fadeOut()
           $('#endDateLabel').fadeOut()  
           $('#endDateCheck').fadeOut()
           $('#endDates').fadeOut()  
           $('#eventRepeatTypeSelect').val(0)  
        }
    }

    this.toggleShowEndDate = function() {

        var self = this

        var show = self.html.getCheckBoxValue($('#endDateCheck'))
        if (show) {
            $('#endDates').fadeIn()  
        } else {
           $('#endDates').fadeOut()
        }
    }

    this.showSelectedRepeatEvent = function(elem) {

        var self = this

        var id = $(elem).attr('id')

        switch(id) {
            case 'nextEvent':
                self.setTitleAndDateSelect(elem)
                self.editingRepeatingInstance = 1
                self.showEventDiv()
                break;
            case 'nextEventButOne': 
                self.setTitleAndDateSelect(elem)
                self.editingRepeatingInstance = 1
                self.showEventDiv()
                break;
            case 'nextEventButTwo':
                self.setTitleAndDateSelect(elem)
                self.editingRepeatingInstance = 1
                self.showEventDiv()
                break;
            case 'nextEventOther':
                self.editingRepeatingInstance = 1
                break;
            case 'nextEventAll':
                self.showEventDiv()
                self.editingRepeatingInstance = 0
                break;      
        }
    }

    this.setTitleAndDateSelect = function(elem) {

        var self = this

        var id      = $(elem).attr('id')

        var dateStr = $('#' + id + 'DateSpan').html()
        var year    = $('#' +id + 'Year').val()
        var month   = $('#' +id + 'Month').val()
        var day     = $('#' +id + 'Day').val()
        var hour    = $('#' +id + 'Hour').val()
        var minute  = $('#' +id + 'Minute').val()

        $('#editEventTitleDate').html('(' + dateStr + ')')
        $('#eventDateSelect_Year').val(year)
        $('#eventDateSelect_Month').val(month)
        $('#eventDateSelect_Day').val(day)
        $('#eventTimeSelect_Hour').val(hour)
        $('#eventTimeSelect_Minute').val(minute)
    }

    this.loadEventParameters = function() {

        var self = this

        $.ajax({
                  type:     'POST',
                  url:      CMSURL,
                  data:     'Action=loadEventParameters&CalendarId=event' +
                                                      '&InsertsId=insertType' +
                                                      '&Types=' + self.types,
                  dataType: 'json',
                  timeout:  40000,
            error:
                function() {
                    return false;
                },
            success:
                function(data) {
                    if (data.Error) {
                        alert(data.Message)
                    } else {
                        if (self.types != 0) {
                            $('#eventTypesTd').html(data.EventTypes)
                            $('#eventTypeSelect').val(self.type)
                            $('#eventTypesTr').show()
                        }
                        $('#dateSpan').html(self.json.jsonDecode(data.Dates))
                        $('#timeSpan').html(self.json.jsonDecode(data.Times))
                        $('#endDateSpan').html(self.json.jsonDecode(data.Dates))
                        $('#endTimeSpan').html(self.json.jsonDecode(data.Times))
                        $('#eventRepeater').html(data.RepeatTypes)

                        self.editor.inserters(data, 'eventText', 'eventTable')

                        if (self.id) {
                            self.loadEventItem()
                        } else {
                            $('#eventTimeSelect_Hour').val(0)
                            $('#eventTimeSelect_Minute').val(0)
                            $('#repeatingEventDiv').hide()
                            self.showEventDiv()
                            $('#eventTable').fadeIn()
                        }
                    }
                }
        })    
    }
    
    this.loadEventItem = function() {
    
        var self = this

        $.ajax({
                  type:     'POST',
                  url:      CMSURL,
                  data:     'Action=loadEventItem&Id=' + self.id + '&Types=' + self.types,
                  dataType: 'json',
                  timeout:  40000,
            error:
                function() {
                    return false;
                },
            success:
                function(data) {
                    if (data.Error) {
                        alert(data.Message)
                    } else {
                        $('#eventTitle').val(data.Event.title)
                        $('#eventText').val(data.Event.text)
                        if (data.Event.startdate) {
                            $('#eventDateSelect_Year').val(data.Event.startyear)
                            $('#eventDateSelect_Month').val(data.Event.startmonth)
                            $('#eventDateSelect_Day').val(data.Event.startday)
                            $('#eventTimeSelect_Hour').val(data.Event.starthour)
                            $('#eventTimeSelect_Minute').val(data.Event.startminute)
                        } else {
                            $('#eventDateSelect_Year').val(data.Event.year)
                            $('#eventDateSelect_Month').val(data.Event.month)
                            $('#eventDateSelect_Day').val(data.Event.day)
                            $('#eventTimeSelect_Hour').val(data.Event.hour)
                            $('#eventTimeSelect_Minute').val(data.Event.minute)
                        }
                        $('#eventTypeSelect').val(data.Event.eventtypeid)

                        if (data.Event.eventrepeattypeid) {
                            self.html.setCheckBoxValue('#eventRepeat', 1)
                            $('#eventRepeatTypeSelect').val(data.Event.eventrepeattypeid)

                            $('#nextEventDateSpan').html(data.Event.itemdate)
                            $('#nextEventDay').val(data.Event.day)
                            $('#nextEventMonth').val(data.Event.month)
                            $('#nextEventYear').val(data.Event.year)
                            $('#nextEventHour').val(data.Event.hour)
                            $('#nextEventMinute').val(data.Event.minute)

                            $('#nextEventButOneDateSpan').html(data.NextEventButOne.itemdate)
                            $('#nextEventButOneDay').val(data.NextEventButOne.day)
                            $('#nextEventButOneMonth').val(data.NextEventButOne.month)
                            $('#nextEventButOneYear').val(data.NextEventButOne.year)
                            $('#nextEventButOneHour').val(data.NextEventButOne.hour)
                            $('#nextEventButOneMinute').val(data.NextEventButOne.minute)

                            $('#nextEventButTwoDateSpan').html(data.NextEventButTwo.itemdate)
                            $('#nextEventButTwoDay').val(data.NextEventButTwo.day)
                            $('#nextEventButTwoMonth').val(data.NextEventButTwo.month)
                            $('#nextEventButTwoYear').val(data.NextEventButTwo.year)
                            $('#nextEventButTwoHour').val(data.NextEventButTwo.hour)
                            $('#nextEventButTwoMinute').val(data.NextEventButTwo.minute)
                        }
                        self.showEventDiv(data.Event.eventrepeattypeid)
                        self.toggleShowRepeater()
                        self.html.setCheckBoxValue('#eventEnabled', data.Event.enabled)

                        $('#eventTable').fadeIn()
                    }
                }
        })
    }

    this.showEventDiv = function(repeating) {

        if (repeating) {
            $('#repeatingEventDiv').show()
            $('#eventDiv').hide()
        } else {
            $('#repeatingEventDiv').hide()
            $('#eventDiv').show()
        }
        $('#eventDivContainer').fadeIn()
    }  

    this.saveEventItem = function() {
    
        var self = this
        
        if (! self.validate.checkValue('#eventTable .mandatory')) {
            alert('Please complete all mandatory fields')
            return
        }

        var title   = $('#eventTitle').val()
        var text    = escape($('#eventText').val())
        var enabled = self.html.getCheckBoxValue('#eventEnabled')
        var year    = $('#eventDateSelect_Year').val()
        var month   = $('#eventDateSelect_Month').val()
        var day     = $('#eventDateSelect_Day').val()
        var hour    = $('#eventTimeSelect_Hour').val()
        var allday  = self.html.getCheckBoxValue('#eventAllDay')
        var minute  = $('#eventTimeSelect_Minute').val()
        var type    = ''
        if ($('#eventTypeSelect').length > 0) {
            type = $('#eventTypeSelect').val()
        }
        var repeats = self.html.getCheckBoxValue($('#eventRepeat'))
      
        var repeatType
        if (repeats == 1) {
            repeatType = $('#eventRepeatTypeSelect').val()
            if (repeatType == 0) {
                alert('Please select a repeat type for a repeating event')
                return
            }   
        }

        $.ajax({
                  type:     'POST',
                  url:      CMSURL,
                  data:     'Action=saveEventItem&Id=' + self.id +
                                                '&EventType=' + type +
                                                '&EventTypes=' + self.types +
                                                '&EventRepeat=' + repeats +
                                                '&EventRepeatType=' + repeatType +
                                                '&Year=' + year +
                                                '&Month=' + month +
                                                '&Day=' + day +
                                                '&Hour=' + hour +
                                                '&AllDay=' + allday +
                                                '&Minute=' + minute +
                                                '&Enabled=' + enabled +
                                                '&Title=' + title +
                                                '&Text=' + text +
                                                '&EditingRepeatingInstance=' + self.editingRepeatingInstance,
                  dataType: 'json',
                  timeout:  40000,
            error:
                function() {
                    return false;
                },
            success:
                function(data) {
                    if (data.Error) {
                        alert(data.Message)
                    } else {
                        if (self.id) {
                            alert('Event updated')
                        } else {
                            alert('Event created')
                        }
                    }
                    tb_remove()
                    location.reload()  // Special handling for events... 
                }
        })
    }
}
