source: sandbox/2.4.2-expresso1/prototype/modules/calendar/js/activity.helpers.js @ 6981

Revision 6981, 23.6 KB checked in by acoutinho, 12 years ago (diff)

Ticket #2966 - Correcao de bugs e refactoring das novas funcionalidades

  • Property svn:executable set to *
Line 
1function activityDetails( objActivity, decoded, path, isMail, repeat){
2
3    tasks = {length: 0};
4       
5    if(path == undefined)
6        path = "";
7               
8    if( !decoded )
9        objActivity = DataLayer.decode( "schedulable:group", objActivity );
10
11    if(!isMail)
12        objActivity = DataLayer.encode( "schedulable:activity", objActivity );
13
14    /**
15    * canDiscardActivityDialog deve ser true se não houver alterações no evento
16    */
17    canDiscardActivityDialog = true;
18    /**
19         * zebraDiscardActivityDialog é uma flag indicando que uma janela de confirmação (Zebra_Dialog)
20         * já está aberta na tela, uma vez que não é possivel acessar o evento ESC utilizado para fechá-la
21         */
22    zebraDiscardActivityDialog = false;
23       
24        var html = DataLayer.render( path+'templates/activity_add.ejs', {
25            activity:objActivity
26        });     
27                       
28        if (!UI.dialogs.addActivity) {
29
30            UI.dialogs.addActivity = jQuery('#sandbox').append('<div title="Criar Atividade" class="new-activity-win active"> <div>').find('.new-activity-win.active').html(html).dialog({
31                resizable: false,
32                modal:true,
33                autoOpen: false,
34                width:735,
35                position: 'center',
36                close: function(event, ui) {
37                        /**
38                         * Remove tooltip possivelmente existente
39                         */
40                        if ($('.qtip.qtip-blue.qtip-active').length)
41                                $('.qtip.qtip-blue.qtip-active').qtip('destroy');                                               
42                       
43                attendees  = {};
44                },
45                beforeClose: function(event, ui) {
46               
47                    if (!canDiscardActivityDialog && !zebraDiscardActivityDialog) {
48                                zebraDiscardActivityDialog = true;
49                                window.setTimeout(function() {
50                                    $.Zebra_Dialog('Suas alterações na atividade não foram salvas. Deseja descartar as alterações?', {
51                                        'type':     'question',
52                                        'overlay_opacity': '0.5',
53                                        'buttons':  ['Descartar alterações', 'Continuar editando'],
54                                        'onClose':  function(clicked) {
55                                            if(clicked == 'Descartar alterações') {
56                                                canDiscardActivityDialog = true;
57                                                /**
58                                                *Remoção dos anexos do eventos caso seja cancelado a edição
59                                                */
60                                                DataLayer.rollback();
61
62                                                var ids = false;
63                                                $.each($('.attachment-list input'), function (i, input) {
64                                                    DataLayer.put('attachment', {id: ''+input.value});
65                                                    DataLayer.remove('attachment', ''+input.value);
66                                                        ids = true;
67                                                });
68                                                if(ids)
69                                                        DataLayer.commit();
70
71                                                UI.dialogs.addActivity.dialog('close');
72                                            }else{
73                                                   zebraDiscardActivityDialog = false;
74                                            }
75                                                                                       
76                                            /**
77                                            * Uma vez aberta uma janela de confirmação (Zebra_Dialog), ao fechá-la
78                                            * com ESC, para que o evento ESC não seja propagado para fechamento da
79                                            * janela de edição de eventos, deve ser setada uma flag indicando que
80                                            * já existe uma janela de confirmação aberta.
81                                            */
82                                            if (!clicked) {
83                                                window.setTimeout(function() {
84                                                    zebraDiscardActivityDialog = false;
85                                                }, 200);
86                                            }
87                                        }
88                            });
89                                                                       
90                        }, 300);
91            }
92            //DataLayer.rollback();
93            return canDiscardActivityDialog;
94        },
95        dragStart: function(event, ui) {
96            if ($('.qtip.qtip-blue.qtip-active').length)
97                $('.qtip.qtip-blue.qtip-active').qtip('destroy');
98       }
99    });
100                               
101        } else {
102            UI.dialogs.addActivity.html(html);
103        }
104
105/* Checkbox allday */
106UI.dialogs.addActivity.find('input[name="allDay"]').click(function(){
107    $(this).attr("checked") ?
108    UI.dialogs.addActivity.find('.start-time, .end-time').addClass('hidden') :
109    UI.dialogs.addActivity.find('.start-time, .end-time').removeClass('hidden');
110});
111               
112var tabs = UI.dialogs.addActivity.children('.content').tabs({
113        select: function(event, ui) {
114                if ($('.qtip.qtip-blue.qtip-active').length)
115                        $('.qtip.qtip-blue.qtip-active').qtip('destroy');
116        }       
117        });
118
119var group = DataLayer.get('calendar', objActivity.group);
120                               
121if (group.timezone != objActivity.timezone){
122    UI.dialogs.addActivity.find('.group_addactivity_details_lnk_timezone').find('option[value="'+objActivity.timezone+'"]').attr('selected','selected').trigger('change');
123    UI.dialogs.addActivity.find('.group_addactivity_details_lnk_timezone').addClass('hidden');
124    $('.group-addevent-details-txt-timezone').removeClass('hidden');
125                       
126}
127
128UI.dialogs.addActivity.find('.group_addactivity_details_lnk_timezone').click(function(e){
129    $(this).addClass('hidden');
130    $('.group-addactivity-details-txt-timezone').removeClass('hidden');
131    e.preventDefault();
132});
133
134UI.dialogs.addActivity.find('.button.remove').button({
135    text:false,
136    icons:{
137        primary:'ui-icon-close'
138    }
139}).click(function(el){
140    var id;
141    if( id = $(this).parent().find('input[name="alarmId[]"]').val())
142        DataLayer.remove('alarm', id);
143    $(this).parent().remove().find('li').is(':empty');
144});
145
146UI.dialogs.addActivity.find('.button-add-alarms').click(function(){
147            DataLayer.render( 'templates/alarms_add_itemlist.ejs', {type: 0}, function( template ){                     
148            jQuery('.activity-alarms-list').append(template)
149            .find('li:last label:eq(0)').remove().end()
150            .find('.number').numeric().end()
151            .find('.button.remove').button({
152                text:false,
153                icons:{
154                    primary:'ui-icon-close'
155                }
156            }).click(function(el) {
157                $(this).parent().remove();
158            });   
159            });
160        });
161
162/*Seleciona a agenda padrão para visualização/edição de um evento*/
163if(objActivity.id)
164    UI.dialogs.addActivity.find('select[name="group"] option[value="'+objActivity.group+'"]').attr('selected','selected').trigger('change');
165
166UI.dialogs.addActivity.find('.button').button();
167    UI.dialogs.addActivity.find('.button.add').button({
168        icons: {
169           secondary: "ui-icon-plus"
170        }
171});
172
173todoStatus('addActivity', (objActivity.activityStatus != undefined) ? objActivity.activityStatus : 1);
174
175UI.dialogs.addActivity.find('select[name="activityStatus"]').attr('disabled', 'disabled');
176
177// ==== validation events ====
178UI.dialogs.addActivity.find(".input-group .h1").Watermark("Atividade sem título");
179
180UI.dialogs.addActivity.find(".number").numeric();
181
182User.preferences.dateFormat.indexOf('-') > 0 ?
183UI.dialogs.addActivity.find(".date").mask("99-99-9999", {
184    completed:function(){
185        updateMap();
186    }
187}) :
188
189UI.dialogs.addActivity.find(".date").mask("99/99/9999", {
190    completed:function(){
191        updateMap();
192    }
193});
194
195UI.dialogs.addActivity.find(".menu-addactivity")
196.children(".delete").click(function(){
197    $.Zebra_Dialog('Tem certeza que deseja excluir a atividade?', {
198        'type':     'question',
199        'overlay_opacity': '0.5',
200        'buttons':  ['Sim', 'Não'],
201        'onClose':  function(clicked) {
202            if(clicked == 'Sim'){
203                canDiscardActivityDialog = true;
204                /* Remove por filtro */
205                DataLayer.removeFilter('schedulable', {filter: ['AND', ['=', 'id', objActivity.id], ['=', 'calendar', objActivity.group], ['=','user',(objActivity.me.user ? objActivity.me.user.id : objActivity.me.id)], ['=', 'type', '2']]});
206                Calendar.rerenderView(true);
207                /********************/
208                UI.dialogs.addActivity.dialog("close");
209            }
210        }
211    });
212}).end()
213           
214.children(".cancel").click(function(){
215    UI.dialogs.addActivity.dialog("close");
216}).end()
217           
218.children(".save").click(function(){
219    /* Validação
220    var msg = false;                   
221    if(msg = validDateEvent()){
222        $(".new-activity-win.active").find('.messages-validation').removeClass('hidden').find('.message label').html(msg);
223        return false;
224    }
225    */
226        UI.dialogs.addActivity.find('select[name="activityStatus"]').removeAttr('disabled');
227    canDiscardActivityDialog = true;
228                       
229        UI.dialogs.addActivity.children().find('form.form-addactivity').submit();
230        UI.dialogs.addActivity.dialog("close");
231
232}).end()
233               
234.children(".export").click(function(){
235    UI.dialogs.addActivity.children().find(".form-export").submit();
236});
237
238var task_activityHtml = DataLayer.render( path+'templates/task_activity_add.ejs', {     activity: objActivity});
239var blkAddTask = UI.dialogs.addActivity.find('#group_addactivity_details8').append(task_activityHtml);
240
241var dates = UI.dialogs.addActivity.find('input.date').datepicker({
242    dateFormat: User.preferences.dateFormat.replace(/M/g, 'm').replace(/yyyy/g, 'yy'),
243    onSelect : function( selectedDate ){
244        updateMap();
245    }
246});
247
248blkAddTask.find('.add-activity-search .ui-icon-search').click(function(event) {
249    blkAddTask.find('.add-activity-search input').keydown();
250});
251                       
252                       
253blkAddTask.find('.add-activity-search input').keydown(function(event) {
254
255    if(event.keyCode == '13' || typeof(event.keyCode) == 'undefined') {
256    // Fazer get das tarefas   
257        var filter =
258        {
259            filter:
260                ['AND',
261                    ['=', 'type', '2'],
262                    ['>=','startTime', $.now()],
263                    ['in', 'calendar',
264                        [$('div.new-activity-win.active select[name="groupFilter"]').val()]
265                    ]
266                ], criteria: {'filterTasks': true}
267        };
268    if($(this).val() != ''){
269        filter['filter'].push(['OR',
270                            ["i*", "summary", $(this).val()],
271                            ["i*", "description", $(this).val()]
272                           ]);
273    }
274
275    var result = DataLayer.get('schedulable:taskSearch', filter, true)
276        /**
277        * TODO: trocar por template
278        */
279        blkAddTask.find('ul.search-result-list').empty().css('overflow', 'hidden');
280        if (!result) {
281            blkAddTask.find('ul.search-result-list').append('<li><label class="empty">Nenhum resultado encontrado.</label></li>');
282        }else{
283        for(i=0; i<result.length; i++)
284            result[i].enabled = (blkAddTask.find('dd.task-activity-list ul.task-activity-list input[value="' +  result[i].id + '"]').length) ? false : true;
285                                                                                       
286        blkAddTask.find('ul.search-result-list').append(DataLayer.render( path+'templates/task_search_itemlist.ejs', result));
287
288        /* TODO - Verificar id da aitividade*/
289        blkAddTask.find('ul.search-result-list li').click(function(event, ui){
290            if ($(event.target).is('input')) {
291                old_item = $(event.target).parents('li');
292
293                tasks[old_item.find('[name="id"]').val()] = {
294                    startDate: old_item.find('[name="taskStartDate"]').val(),
295                    startHour: old_item.find('[name="taskStartHour"]').val(),
296                    endDate: old_item.find('[name="taskEndDate"]').val(),
297                    endHour: old_item.find('[name="taskEndHour"]').val(),
298                    dueDate: old_item.find('[name="taskDueDate"]').val(),
299                    dueTime: old_item.find('[name="taskDueTime"]').val(),
300                    allDay: old_item.find('[name="taskAllDay"]').val(),
301                    percentage: old_item.find('[name="taskPercentage"]').val(),
302                    status: old_item.find('[name="taskStatus"]').val()
303                };
304
305                tasks.length += 1;
306                                                               
307                blkAddTask.find('dd.task-activity-list ul.task-activity-list')
308                    .append(DataLayer.render(path+'templates/task_add_itemlist.ejs', [{
309                        idTask: old_item.find('[name="id"]').val(),
310                            description: old_item.find('.description').html(),
311                            isWrite: false
312                        }]))
313                        .scrollTo('max');
314                callbackTask();
315                registerStatus();
316                blkAddTask.find('.not-activity').addClass('hidden');
317                old_item.remove();
318            }
319        });
320    }
321    event.preventDefault();
322    }
323});
324
325/*Carrega as tarefas já existentes em uma atividade*/
326if(objActivity.tasks.length){
327    tasks = objActivity.tasks;
328
329    for(var i in objActivity.tasks){
330        if(i != 'length')
331            blkAddTask.find('dd.task-activity-list ul.task-activity-list')
332                .append(DataLayer.render(path+'templates/task_add_itemlist.ejs', [{
333                    idTask: i,
334                    description: tasks[i].description,
335                    idTaskToActivity: tasks[i].taskToActivity,
336                    isWrite: true
337                 }]))
338            .scrollTo('max');
339    }
340
341    callbackTask();
342    registerStatus();
343    blkAddTask.find('.not-activity').addClass('hidden');
344}
345
346UI.dialogs.addActivity.find('.row.fileupload-buttonbar-activity .button').filter('.delete').button({
347    icons: {
348           primary: "ui-icon-close"
349    },
350    text: 'Excluir'
351}).click(function () {
352    $.Zebra_Dialog('Tem certeza que deseja excluir todos anexos?', {
353        'type':     'question',
354        'overlay_opacity': '0.5',
355        'buttons':  ['Sim', 'Não'],
356        'onClose':  function(clicked) {
357            if(clicked == 'Sim'){
358               
359                var ids = [];
360                $.each($('.attachment-list input'), function (i, input) {
361                     DataLayer.remove('schedulableToAttachment', {
362                        filter: ['=', 'id', ''+input.value]
363                        });
364                });
365                $('div.new-activity-win .attachment-list input').remove();
366                $('div.new-activity-win .row.fileupload-buttonbar-activity .attachments-list p').remove();
367                $('div.new-activity-win .btn-danger.delete').addClass('hidden');
368            }
369        }});
370}).end()
371.filter('.close').button({
372    icons: {
373           primary: "ui-icon-close"
374    },
375    text: false
376}).click(function () {
377    DataLayer.remove('schedulableToAttachment', $(this).parents('p').find('input[name="fileId[]"]').val());
378    $(this).parents('p').remove();
379}).end()
380.filter('.downlaod-archive').button({
381    icons: {
382           primary: "ui-icon-arrowthickstop-1-s"
383    },
384    text: false
385});
386
387extendsFileupload('activity', path);
388
389UI.dialogs.addActivity.find(':input').change(function(event){
390    if (event.keyCode != '27' && event.keyCode != '13')
391        canDiscardActivityDialog = false;
392}).keydown(function(event){
393    if (event.keyCode != '27' && event.keyCode != '13')
394        canDiscardActivityDialog = false;
395});
396
397UI.dialogs.addActivity.dialog('open');
398}
399
400function refreshTaskActivity(){
401    updateActivity = false;
402
403    var objActivity = DataLayer.get('schedulable:activity', UI.dialogs.addActivity.find('input[name="idActivity"]').val());
404    var blkAddTask = UI.dialogs.addActivity.find('#group_addactivity_details8');
405    var blkAuto = UI.dialogs.addActivity.find('#group_addactivity_details1');
406   
407   tasks = objActivity.tasks;
408   blkAddTask.find('dd.task-activity-list ul.task-activity-list').html('');
409   
410   for(var i in tasks)
411       DataLayer.remove('schedulable', i, false);
412
413    for(var i in objActivity.tasks){
414        if(i != 'length')
415            blkAddTask.find('dd.task-activity-list ul.task-activity-list')
416                .append(DataLayer.render('templates/task_add_itemlist.ejs', [{
417                    idTask: i,
418                    description: tasks[i].description,
419                    idTaskToActivity: tasks[i].taskToActivity,
420                    isWrite: true
421                 }]))
422            .scrollTo('max');
423    }
424
425    callbackTask(blkAddTask);
426    registerStatus(blkAuto);
427}
428
429function registerStatus(blkAuto){
430    if(!blkAuto)
431        blkAuto = UI.dialogs.addActivity.find('#group_addactivity_details1');
432
433    var startDate = false;
434    var endDate = new Date;
435    var dueDate = new Date;
436    var percentage = 0;         
437            var statusTasks = {1: 0, 2: 0, 3: 0, 4: 0};
438            var allDay = true;
439
440    var formatString =  User.preferences.dateFormat + " " +  User.preferences.hourFormat;
441
442    if(tasks.length == 0){
443
444        startDate = new Date();
445        var configData = (startDate.toString('mm') < 30)  ? {minutes: (30 - parseInt(startDate.toString('mm')))} : {hours: 1, minutes: '-'+startDate.toString('mm')};
446        startDate.add(configData);
447
448        endDate = new Date(dateCalendar.decodeRange(startDate, (!!User.preferences.defaultCalendar ? (   !!Calendar.signatureOf[User.preferences.defaultCalendar].calendar.defaultDuration ?  (Calendar.signatureOf[User.preferences.defaultCalendar].calendar.defaultDuration) : (User.preferences.defaultDuration)) : (User.preferences.defaultDuration))));
449
450        blkAuto.find('input[name="startDate"]').val(startDate.toString(User.preferences.dateFormat ));
451        blkAuto.find('input[name="startHour"]').val(startDate.toString(User.preferences.hourFormat ));
452
453        blkAuto.find('input[name="endDate"]').val(endDate.toString(User.preferences.dateFormat ));
454        blkAuto.find('input[name="endHour"]').val(endDate.toString(User.preferences.hourFormat ));
455
456        blkAuto.find('input[name="dueDate"]').val('');
457        blkAuto.find('input[name="dueHour"]').val('');
458
459        blkAuto.find('input[name="percentage"]').val(percentage);
460
461        todoStatus('addActivity', 1);
462
463        UI.dialogs.addActivity.find('select[name="activityStatus"] option[value="'+1+'"]').attr('selected','selected');
464
465        blkAuto.find('input[name="allDay"]').attr('checked', false);
466
467        return true;
468    }
469
470    for (var i in tasks){
471
472        if(i == 'length')
473            continue;
474
475        statusTasks[tasks[i].status]++;
476
477        var stTime = Date.parseExact( tasks[i].startDate + " "+$.trim( tasks[i].startHour) , formatString);
478        var enTime = Date.parseExact( tasks[i].endDate + " "+$.trim( tasks[i].endHour), formatString );
479
480        startDate = (startDate && startDate.compareTo(stTime) == -1) ? startDate : stTime;
481        endDate = endDate.compareTo(enTime) == -1 ? enTime : endDate;
482
483        if(tasks[i].dueDate != ''){
484            var pvTime = Date.parseExact( tasks[i].dueDate + " "+$.trim( tasks[i].dueTime), formatString );
485            dueDate = dueDate.compareTo(pvTime) == -1 ? pvTime : dueDate;
486        }
487
488        if(parseInt(tasks[i].percentage) > 0)
489            percentage += parseInt(parseInt((100 / tasks.length)) * ( parseInt(tasks[i].percentage) / 100));
490    }
491    var statusActivity = 1;
492
493    if(statusTasks[4] != 0)
494        statusActivity = 4;
495    else if(statusTasks[2] != 0)
496        statusActivity = 2;
497    else if(statusTasks[3] == tasks.length)
498        statusActivity = 3;
499    else if(statusTasks[1] == tasks.length)
500        statusActivity = 1;
501    else
502        statusActivity = 2;                     
503
504    todoStatus('addActivity', statusActivity);
505
506    UI.dialogs.addActivity.find('select[name="activityStatus"] option[value="'+statusActivity+'"]').attr('selected','selected');
507
508    dueDate = dueDate.compareTo(endDate) == -1 ? endDate : dueDate;
509
510    blkAuto.find('input[name="startDate"]').val(startDate.toString(User.preferences.dateFormat ));
511    blkAuto.find('input[name="startHour"]').val(startDate.toString(User.preferences.hourFormat ));
512
513    blkAuto.find('input[name="endDate"]').val(endDate.toString(User.preferences.dateFormat ));
514    blkAuto.find('input[name="endHour"]').val(endDate.toString(User.preferences.hourFormat ));
515
516    blkAuto.find('input[name="dueDate"]').val(dueDate.toString(User.preferences.dateFormat ));
517    blkAuto.find('input[name="dueHour"]').val(dueDate.toString(User.preferences.hourFormat ));
518
519    blkAuto.find('input[name="percentage"]').val(percentage);
520
521    blkAuto.find('input[name="allDay"]').attr('checked', (!!(startDate.compareTo(endDate) == 0) || (startDate.toString('HH:mm') == endDate.toString('HH:mm')) ? true : false));
522}
523
524function callbackTask(blkAddTask){
525        if(!blkAddTask)
526            blkAddTask = UI.dialogs.addActivity.find('#group_addactivity_details8');
527
528        blkAddTask.find("li .button").filter(".close.new").button({
529            icons: {
530            primary: "ui-icon-close"
531            },
532            text: false
533        }).click(function () {
534
535            delete tasks[$(this).parents('li').find('input[name="idtask[]"]').val()]
536            tasks.length +=  -1;
537
538            idTaskToActivity = $(this).parents('li').find('input[name="idTaskToActivity[]"]').val()
539
540            if(idTaskToActivity != '')
541                DataLayer.remove('taskToActivity', idTaskToActivity);
542           
543            $(this).parents('li').remove();
544               
545            if(blkAddTask.find(".task-activity-list li").length == 1)
546                blkAddTask.find("li.not-activity    ").removeClass('hidden');
547
548            registerStatus();
549        })
550        .addClass('tiny disable ui-button-disabled ui-state-disabled')
551        .removeClass('new').end()
552
553        .filter(".info.new").button({
554            icons: {
555                primary:  "ui-icon-notice"
556            },
557            text: false
558        }).click(function () {
559            var positionY = $(this).parents("li").offset().top;
560             
561            var name = $(this).parents('li').find("div").find(".name").text();
562            var email = $(this).parents('li').find("div").find(".mail").text()
563                       
564            if( $('.qtip.qtip-blue.qtip-active').val() !== ''){
565                $(this).qtip({
566                    show: {
567                        ready: true,
568                        solo: true,
569                        when: {
570                            event: 'click'
571                        }
572                    },
573                    hide: false,
574                    content: {
575                        text: $('<div></div>').html( DataLayer.render( path + 'templates/activity_information_task.ejs', {
576                            'name' : name
577                        } ) ),
578                        title: {
579                            text:'Informações',
580                            button: '<a class="button close" href="#">close</a>'
581                        }
582                    },
583                style: {
584                    name: 'blue',
585                        tip: {
586                             },
587                        border: {
588                            width: 4,
589                            radius: 8
590                        },
591                        width: {
592                            min: 230,
593                            max:230
594                        }
595                },
596                position: {
597                    corner: {
598                        target: 'rightMiddle',
599                        tooltip: 'leftMiddle'
600                    },
601                    adjust: {
602                        x: 30,
603                        y: 0
604                    }
605                }
606            })
607            .qtip("api").onShow = function(arg0) {
608                $('.qtip-active .button.close').button({
609                    icons: {
610                        primary: "ui-icon-close"
611                    },
612                    text: false
613                })
614                .click(function(){
615                    blkAddAtendee.find('dd.task-activity-list').qtip('destroy');
616                });
617                                       
618                $('.qtip-active .button.cancel').button().click(function(){
619                    blkAddAtendee.find('dd.activity-list [type=checkbox]').attr('checked', false);
620                    blkAddAtendee.find('dd.activity-list').qtip('destroy');
621                });
622
623                $('.qtip .button').button();
624                                       
625            };
626         }             
627     })
628 .addClass('tiny disable ui-button-disabled ui-state-disabled')
629 .removeClass('new').end()
630 .filter(".edit.new").button({
631            icons: {
632            primary: "ui-icon-pencil"
633            },
634            text: false
635        }).click(function () {
636            var task = DataLayer.get('schedulable:task', $(this).parents('li').find('input[name="idtask[]"]').val());
637            taskDetails(task, true, '',true, null, true);           
638        })
639        .addClass('tiny disable ui-button-disabled ui-state-disabled')
640        .removeClass('new').end()
641
642        UI.dialogs.addActivity.find('.task-activity-list li').hover(
643            function () {
644                $(this).addClass("hover-attendee");
645                $(this).find('.button').removeClass('disable ui-button-disabled ui-state-disabled').end()
646                .find('.activity-options').addClass('hover-attendee');
647            },
648            function () {
649                $(this).removeClass("hover-attendee");
650                $(this).find('.button').addClass('disable ui-button-disabled ui-state-disabled').end()
651                .find('.activity-options').removeClass('hover-attendee');
652            }
653        );       
654    }
Note: See TracBrowser for help on using the repository browser.