render: function(options) {
        var self = this;

        if (!Shared.isSmartPhoneResolution())
            this.$el = $('#contentDetail');

        var loadingView = new LoadingView({
            el: this.$el
        });
        loadingView.render();


        var callbackSuccess = function(data) {
            Shared.router.navigate('/Calendar/' + self.year + '/' + self.month + '/' + self.day + '/OK', {
                trigger: true
            });
        }

        var callbackFail = function(error) {
            Shared.router.navigate('/Calendar/Events/' + self.eventID + '/Error', {
                trigger: true
            });
        }

        this.deleteEvent(callbackSuccess, callbackFail);
    },
 var callbackFail = function(error) {
     Shared.showMessage({
         type: "error",
         icon: 'icon-agenda',
         title: 'Não foi possível listar os eventos do dia. Por favor, tente novamente',
         description: '',
         timeout: 5000,
         elementID: Shared.isSmartPhoneResolution() ? '#message' : '#messageDetail',
     });
 }
    render: function() {
        var self = this;
        var contentTitle;
        var container;

        if (!Shared.isSmartPhoneResolution()) {
            this.$el.html(_.template(detailContentTemplate));
            $('#contentDetail').empty().append(this.$el);

            contentTitle = $('#contentDetailTitle');
            container = $('#scrollerDetail');
        } else {
            this.$el.html(_.template(primaryContentTemplate));
            $('#content').empty().append(this.$el);

            contentTitle = $('#contentTitle');
            container = $('#scroller');
        }

        var loadingView = new LoadingView({
            el: container
        });
        loadingView.render();

        var dateStart = this.day + '/' + this.month + '/' + this.year;
        var dateEnd = this.day + '/' + this.month + '/' + this.year;

        var callbackSuccess = function(data) {
            var hourlyBusy = [];
            var events = new EventsListCollection();
            var date = new Date(self.year, self.month - 1, self.day);
            var allDayRowSpan = 48;

            for (var i in data.events) {
                var rowSpan = 0;

                var start = (data.events[i].get('eventStartDate')).split(' ');
                var dateStart = start[0].split('/');
                var timeStart = start[1].split(':')
                var dateTimeStart = new Date(dateStart[2], (dateStart[1] - 1), dateStart[0], timeStart[0], timeStart[1]);
                var dateStartAux = new Date(dateStart[2], (dateStart[1] - 1), dateStart[0], timeStart[0], timeStart[1]);
                dateStart = new Date(dateStart[2], (dateStart[1] - 1), dateStart[0]);

                var end = (data.events[i].get('eventEndDate')).split(' ');
                var dateEnd = end[0].split('/');
                var timeEnd = end[1].split(':')
                var dateTimeEnd = new Date(dateEnd[2], (dateEnd[1] - 1), dateEnd[0], timeEnd[0], timeEnd[1]);
                dateEnd = new Date(dateEnd[2], (dateEnd[1] - 1), dateEnd[0]);

                if (dateStart.getTime() == date.getTime() || dateEnd.getTime() == date.getTime()) {
                    if (data.events[i].get('eventAllDay') == '1')
                        rowSpan = allDayRowSpan;
                    else {
                        while (dateTimeStart.getTime() <= dateTimeEnd.getTime()) {
                            rowSpan = rowSpan + 1;
                            dateTimeStart.setMinutes(dateTimeStart.getMinutes() + 30);
                        }
                    }

                    events.add(data.events[i]);

                    var dateStar = dateTimeStart;
                    var eventSummary = new Object();
                    eventSummary.dateStart = dateStartAux;
                    eventSummary.dateEnd = dateTimeEnd;
                    eventSummary.rowSpan = rowSpan;
                    eventSummary.index = events.length - 1;

                    hourlyBusy.push(eventSummary);
                }
            }

            var newData = {
                events: events.models,
                year: self.year,
                month: self.month,
                day: self.day,
                hourlyBusy: hourlyBusy,
                _: _
            };

            contentTitle.text($.datepicker.formatDate('DD, dd/mm/yy', new Date(self.year, self.month - 1, self.day)));

            var htmlTemplate = _.template(calendarFullDayListTemplate);
            var htmlWithData = htmlTemplate(newData);

            container.empty().append(htmlWithData);

            self.loaded();
        }

        var callbackFail = function(error) {
            Shared.showMessage({
                type: "error",
                icon: 'icon-agenda',
                title: 'Não foi possível listar os eventos do dia. Por favor, tente novamente',
                description: '',
                timeout: 5000,
                elementID: Shared.isSmartPhoneResolution() ? '#message' : '#messageDetail',
            });
        }

        this.listEvents(dateStart, dateEnd, callbackSuccess, callbackFail);
    },
    SendSupportFeedback: function() {

        var sugestao = $("#sugestao").val();

        if (sugestao == "") {

            Shared.showMessage({
                type: "error",
                icon: 'icon-settings',
                title: "Por favor, escreva sua sugestão!",
                description: "",
                elementID: "#pageMessage",
            });

        } else {

            var headerString = "Mensagem enviada pelo Expresso Mobile: ";

            var deviceString = "";
            var resolutionString = "";

            if (Shared.isPhonegap()) {
                deviceString = deviceString + "Phonegap,";
            }
            if (Shared.isAndroid()) {
                deviceString = deviceString + "Android";
            }
            if (Shared.isIDevice()) {
                deviceString = deviceString + "iOS";
            }

            if (Shared.isDesktop()) {
                resolutionString = resolutionString + "Desktop,";
            }
            if (Shared.isTabletResolution()) {
                resolutionString = resolutionString + "Tablet";
            } else {
                if (Shared.isSmartPhoneResolution()) {
                    resolutionString = resolutionString + "SmartPhone";
                }
            }

            headerString = headerString + resolutionString + " - " + deviceString + "<br><br>";

            sugestao = headerString + sugestao;

            Shared.api
                .resource('Mail/SendSupportFeedback')
                .params({
                    message: sugestao
                })
                .done(function(result) {

                    Shared.showMessage({
                        type: "success",
                        icon: 'icon-settings',
                        title: "Sua Sugestão foi enviada com sucesso!",
                        description: "",
                        elementID: "#pageMessage",
                    });

                    Shared.router.navigate("/Settings", {
                        trigger: true
                    });

                })
                .fail(function(error) {

                    Shared.handleErrors(error);

                    return false;
                })
                .execute();

        }

    }
    render: function(options) {
        var self = this;
        var contentTitle;
        var container;

        if (options != undefined) {
            if (options.model != undefined)
                this.model = options.model;

            if (options.listParticipants != undefined)
                this.listParticipants = options.listParticipants;
        } else {
            this.model.set({
                eventTimeStart: '08:00'
            });
            this.model.set({
                eventTimeEnd: '08:30'
            });
        }

        if (!Shared.isSmartPhoneResolution()) {
            this.$el.html(_.template(detailContentTemplate));
            $('#contentDetail').empty().append(this.$el);

            container = $('#scrollerDetail');
            contentTitle = $('#contentDetailTitle');
        } else {
            this.$el.html(_.template(primaryContentTemplate));
            $('#content').empty().append(this.$el);

            container = $('#scroller');
            contentTitle = $('#contentTitle');
        }

        var loadingView = new LoadingView({
            el: container
        });
        loadingView.render();

        contentTitle.text('Adicionar evento');

        var callback = function(data) {
            var listCategorias = data;

            if (self.eventID > 0) {
                contentTitle.text('Editar evento');

                var callbackGetEvent = function(data) {
                    var pad = '00';
                    var dateStart = (data.get('eventDateStart')).split('/');
                    var dateEnd = (data.get('eventDateEnd')).split('/');

                    data.set({
                        eventDateStart: dateStart[2] + '-' + pad.substring(0, pad.length - ("" + dateStart[1]).length) + ("" + dateStart[1]) + '-' + pad.substring(0, pad.length - ("" + dateStart[0]).length) + ("" + dateStart[0])
                    });
                    data.set({
                        eventDateEnd: dateEnd[2] + '-' + pad.substring(0, pad.length - ("" + dateEnd[1]).length) + ("" + dateEnd[1]) + '-' + pad.substring(0, pad.length - ("" + dateEnd[0]).length) + ("" + dateEnd[0])
                    });

                    if (data.get('eventParticipants') != undefined && data.get('eventParticipants').length > 0) {
                        var listParticipantsID = [];
                        _.each(data.get('eventParticipants'), function(participant) {
                            listParticipantsID.push(participant.contactUIDNumber);
                        });
                        data.set({
                            eventParticipants: listParticipantsID
                        });

                        var listParticipants = [];
                        _.each(data.get('eventParticipantsLdap'), function(participantLdap) {
                            listParticipants.push({
                                participantID: participantLdap.get('contactUIDNumber'),
                                participantName: participantLdap.get('contactFullName')
                            });
                        });
                        self.listParticipants = listParticipants
                    }

                    self.model = data;

                    var newData = {
                        eventCategories: listCategorias,
                        event: self.model,
                        listParticipants: self.listParticipants,
                        types: self.types,
                        priorities: self.priorities
                    };

                    var htmlTemplate = _.template(calendarEditEventTemplate);
                    var htmlWithData = htmlTemplate(newData);

                    container.html(htmlWithData);
                    self.setElement(self.$el);
                    self.loaded();
                }

                self.getEvent(self.eventID, callbackGetEvent, callbackGetEvent);
            } else {
                var newData = {
                    eventCategories: listCategorias,
                    event: self.model,
                    listParticipants: self.listParticipants,
                    types: self.types,
                    priorities: self.priorities
                };

                var htmlTemplate = _.template(calendarEditEventTemplate);
                var htmlWithData = htmlTemplate(newData);

                container.html(htmlWithData);
                self.setElement(self.$el);
                self.loaded();
            }

        }

        this.listEventCategories('', callback, callback);
    },