Ignore:
Timestamp:
07/25/12 17:05:36 (12 years ago)
Author:
acoutinho
Message:

Ticket #2966 - Criacao e edicao de tarefas / suporte a anexos, alarmes, participantes e mapa de disponibilidade

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sandbox/2.4.2-expresso1/prototype/modules/calendar/js/task.helpers.js

    r6815 r6876  
    1 function taskDetails( objEvent, decoded, path, isMail, repeat){ 
     1function taskDetails(objTask, decoded, path, isMail, repeat) { 
     2 
     3    $('.qtip.qtip-blue').remove(); 
    24 
    35    attendees = {}; 
    4          
    5     if(path == undefined) 
    6         path = ""; 
    7                  
    8     if( !decoded ) 
    9         objEvent = DataLayer.decode( "schedulable:calendar", objEvent ); 
    10  
    11     if(!isMail) 
    12         objEvent = DataLayer.encode( "schedulable:preview", objEvent ); 
    13          
    14     if(typeof(objEvent.id) == 'undefined'){ 
    15         objEvent.alarms = Calendar.signatureOf[User.preferences.defaultCalendar || Calendar.calendarIds[0]].defaultAlarms || false; 
    16         objEvent.useAlarmDefault = 1; 
     6 
     7    if (path == undefined) path = ""; 
     8 
     9    if (!decoded) objTask = DataLayer.decode("task:calendar", objTask); 
     10 
     11    if (!isMail) objTask = DataLayer.encode("schedulable:task", objTask); 
     12 
     13    if (typeof (objTask.id) == 'undefined') { 
     14        objTask.alarms = Calendar.signatureOf[User.preferences.defaultCalendar || Calendar.calendarIds[0]].defaultAlarms || false; 
     15        objTask.useAlarmDefault = 1; 
    1716    } 
    18          
     17 
     18 
     19    if(objTask.me.id == User.me.id){ 
     20        objTask.me.id = DataLayer.put('participant', { 
     21            user: objTask.me.id,  
     22            mail: objTask.me.mail 
     23        }); 
     24        objTask.organizer.id = objTask.me.id; 
     25    } 
     26 
     27    var dependsDelegate = function(reference, inverse){ 
     28        if(inverse){ 
     29            if(reference.find('input[name="attendee[]"]').val() == blkAddAtendee.find('li.organizer input[name="attendee_organizer"]').val()) 
     30                blkAddAtendee.find('li.organizer input[name="attendee_organizer"]').val(blkAddAtendee.find('.me input[name="attendee[]"]').val()); 
     31        }else{ 
     32            if(blkAddAtendee.find('.me input[name="attendee[]"]').val() == blkAddAtendee.find('li.organizer input[name="attendee_organizer"]').val()) 
     33                blkAddAtendee.find('li.organizer input[name="attendee_organizer"]').val(reference.find('input[name="attendee[]"]').val()); 
     34        } 
     35    }; 
     36 
     37    var removeOthers = function(){ 
     38        var other = blkAddAtendee.find('.delegate.attendee-permissions-change-button'); 
     39        if(other.lenght) 
     40            dependsDelegate(other.parents('li'), true); 
     41 
     42        blkAddAtendee.find('.delegate').removeClass('attendee-permissions-change-button'); 
     43        blkAddAtendee.find('.ui-icon-transferthick-e-w').removeClass('attendee-permissions-change'); 
     44     
     45    }; 
     46 
     47    var callbackAttendee = function(){ 
     48        var checked = false; 
     49        blkAddAtendee.find("li.not-attendee").addClass('hidden'); 
     50         
     51        blkAddAtendee.find("li .button").filter(".close.new").button({ 
     52            icons: { 
     53            primary: "ui-icon-close" 
     54            }, 
     55            text: false 
     56        }).click(function () { 
     57            DataLayer.remove('participant', $(this).parents('li').find('[type=checkbox]').val()); 
     58            if($(this).parent().find('.button.delegate').hasClass('attendee-permissions-change-button')){ 
     59                removeOthers(); 
     60                blkAddAtendee.find('.request-update').addClass('hidden'); 
     61                blkAddAtendee.find('.status option').toggleClass('hidden'); 
     62                         
     63                blkAddAtendee.find('option[value=1]').attr('selected','selected').trigger('change'); 
     64            } 
     65                 
     66            $(this).parents('li').remove(); 
     67                 
     68            if(blkAddAtendee.find(".attendee-list li").length == 1) 
     69                blkAddAtendee.find("li.not-attendee").removeClass('hidden'); 
     70        }) 
     71        .addClass('tiny disable ui-button-disabled ui-state-disabled') 
     72        .removeClass('new').end() 
     73         
     74        .filter(".delegate.new").button({ 
     75            icons: { 
     76                primary: "ui-icon-transferthick-e-w" 
     77            }, 
     78            text: false 
     79        }).click(function () { 
     80            var me = $(this).parents('li'); 
     81            if($(this).hasClass('attendee-permissions-change-button')){ 
     82                $(this).removeClass('attendee-permissions-change-button')    
     83                .find('.ui-icon-transferthick-e-w').removeClass('attendee-permissions-change').end();                
     84             
     85                me.find('input[name="delegatedFrom[]"]').val(''); 
     86                dependsDelegate(me, true); 
     87                         
     88                blkAddAtendee.find('.request-update').addClass('hidden'); 
     89                blkAddAtendee.find('.status option').toggleClass('hidden'); 
     90 
     91                blkAddAtendee.find('option[value=1]').attr('selected','selected').trigger('change'); 
     92                     
     93            }else{ 
     94                removeOthers(); 
     95                 
     96                $(this).addClass('attendee-permissions-change-button')    
     97                .find('.ui-icon-transferthick-e-w').addClass('attendee-permissions-change').end();                
     98                 
     99                me.find('input[name="delegatedFrom[]"]').val(blkAddAtendee.find('.me input[name="attendee[]"]').val()); 
     100                 
     101                dependsDelegate(me, false); 
     102                     
     103                blkAddAtendee.find('.request-update').removeClass('hidden'); 
     104                if(blkAddAtendee.find('.status option.hidden').length == 1) 
     105                    blkAddAtendee.find('.status option').toggleClass('hidden'); 
     106                     
     107                blkAddAtendee.find('option[value=5]').attr('selected','selected').trigger('change'); 
     108            } 
     109        }) 
     110        .addClass('tiny disable ui-button-disabled ui-state-disabled') 
     111        .removeClass('new').end()             
     112             
     113        .filter(".open-delegate.new").click(function(){ 
     114            if($(this).hasClass('ui-icon-triangle-1-e')){ 
     115                $(this).removeClass('ui-icon-triangle-1-e').addClass('ui-icon-triangle-1-s'); 
     116                $(this).parents('li').find('.list-delegates').removeClass('hidden'); 
     117            }else{ 
     118                $(this).removeClass('ui-icon-triangle-1-s').addClass('ui-icon-triangle-1-e'); 
     119                $(this).parents('li').find('.list-delegates').addClass('hidden'); 
     120            } 
     121             
     122        }).removeClass('new'); 
     123 
     124        UI.dialogs.addTask.find('.attendees-list li').hover( 
     125            function () { 
     126                $(this).addClass("hover-attendee"); 
     127                $(this).find('.button').removeClass('disable ui-button-disabled ui-state-disabled').end() 
     128                .find('.attendee-options').addClass('hover-attendee'); 
     129            }, 
     130            function () { 
     131                $(this).removeClass("hover-attendee"); 
     132                $(this).find('.button').addClass('disable ui-button-disabled ui-state-disabled').end() 
     133                .find('.attendee-options').removeClass('hover-attendee'); 
     134            } 
     135        );         
     136    } 
     137 
    19138    /** 
    20          * canDiscardEventDialog deve ser true se não houver alterações no evento 
    21         */ 
    22     canDiscardEventDialog = true; 
     139     * canDiscardTaskDialog deve ser true se não houver alterações no task 
     140    */ 
     141    canDiscardTaskDialog = true; 
    23142    /** 
    24          * zebraDiscardEventDialog é uma flag indicando que uma janela de confirmação (Zebra_Dialog) 
    25          * já está aberta na tela, uma vez que não é possivel acessar o evento ESC utilizado para fechá-la 
    26          */ 
    27     zebraDiscardEventDialog = false; 
    28          
    29     /** 
    30                 ACLs do participant 
    31         */ 
    32     acl_names = { 
    33         'w': 'acl-white', 
    34         'i': 'acl-invite-guests', 
    35         'p': 'acl-participation-required' 
    36     }; 
    37  
    38     var dependsDelegate = function(reference, inverse){ 
    39         if(inverse){ 
    40             if(reference.find('input[name="attendee[]"]').val() == blkAddAtendee.find('li.organizer input[name="attendee_organizer"]').val()) 
    41                 blkAddAtendee.find('li.organizer input[name="attendee_organizer"]').val(blkAddAtendee.find('.me input[name="attendee[]"]').val()); 
    42         }else{ 
    43             if(blkAddAtendee.find('.me input[name="attendee[]"]').val() == blkAddAtendee.find('li.organizer input[name="attendee_organizer"]').val()) 
    44                 blkAddAtendee.find('li.organizer input[name="attendee_organizer"]').val(reference.find('input[name="attendee[]"]').val()); 
    45         } 
    46          
    47     }; 
    48      
    49     var removeOthers = function(){ 
    50         var other = blkAddAtendee.find('.delegate.attendee-permissions-change-button'); 
    51         if(other.lenght){ 
    52             dependsDelegate(other.parents('li'), true); 
    53         } 
    54         blkAddAtendee.find('.delegate').removeClass('attendee-permissions-change-button'); 
    55         blkAddAtendee.find('.ui-icon-transferthick-e-w').removeClass('attendee-permissions-change'); 
    56          
    57     }; 
    58          
    59         var html = DataLayer.render( path+'templates/task_add.ejs', { 
    60             event:objEvent 
    61         });      
    62                          
    63         if (!UI.dialogs.addTask) { 
    64  
    65             UI.dialogs.addTask = jQuery('#sandbox').append('<div title="Criar tarefa" class="new-event-win active"> <div>').find('.new-event-win.active').html(html).dialog({ 
    66                 resizable: false,  
    67                 modal:true,  
    68                 autoOpen: false, 
    69                 width:774,  
    70                 position: 'center',  
    71                 close: function(event, ui) { 
    72                         /** 
    73                          * Remove tooltip possivelmente existente 
    74                          */ 
    75                         if ($('.qtip.qtip-blue.qtip-active').length) 
    76                                 $('.qtip.qtip-blue.qtip-active').qtip('destroy');                                                
    77                         attendees  = {}; 
    78                 }, 
    79                 beforeClose: function(event, ui) { 
    80                  
    81                     if (!canDiscardEventDialog && !zebraDiscardEventDialog) { 
    82                         zebraDiscardEventDialog = true; 
    83                         window.setTimeout(function() { 
    84                             $.Zebra_Dialog('Suas alterações no evento não foram salvas. Deseja descartar as alterações?', { 
    85                                 'type':     'question', 
    86                                 'overlay_opacity': '0.5', 
    87                                 'buttons':  ['Descartar alterações', 'Continuar editando'], 
    88                                 'onClose':  function(clicked) { 
    89                                     if(clicked == 'Descartar alterações') { 
    90                                         canDiscardEventDialog = true; 
    91                                         /** 
    92                                         *Remoção dos anexos do eventos caso seja cancelado a edição 
    93                                         */ 
    94                                         DataLayer.rollback(); 
    95  
    96                                         var ids = false; 
    97                                         $.each($('.attachment-list input'), function (i, input) { 
    98                                             DataLayer.put('attachment', {id: ''+input.value}); 
    99                                             DataLayer.remove('attachment', ''+input.value); 
    100                                                 ids = true; 
    101                                         }); 
    102                                         if(ids) 
    103                                                 DataLayer.commit(); 
    104                                  
    105                                          
    106                                                                                          
    107                                         UI.dialogs.addTask.dialog('close'); 
    108                                     }else{ 
    109                                         zebraDiscardEventDialog = false; 
    110                                     } 
    111                                                                                  
    112                                     /** 
    113                                     * Uma vez aberta uma janela de confirmação (Zebra_Dialog), ao fechá-la 
    114                                     * com ESC, para que o evento ESC não seja propagado para fechamento da 
    115                                     * janela de edição de eventos, deve ser setada uma flag indicando que 
    116                                     * já existe uma janela de confirmação aberta. 
    117                                     */ 
    118                                     if (!clicked) { 
    119                                         window.setTimeout(function() { 
    120                                             zebraDiscardEventDialog = false; 
    121                                         }, 200); 
    122                                     } 
    123                                 } 
    124                             }); 
    125                                                                  
    126                         }, 300); 
    127  
    128                     } 
    129                     //DataLayer.rollback(); 
    130                     return canDiscardEventDialog; 
    131                 }, 
    132                 dragStart: function(event, ui) { 
    133                         if ($('.qtip.qtip-blue.qtip-active').length) 
    134                                 $('.qtip.qtip-blue.qtip-active').qtip('destroy'); 
    135                 } 
    136             }); 
    137                                  
    138         } else { 
    139             UI.dialogs.addTask.html(html); 
    140         } 
    141                  
    142 var tabs = UI.dialogs.addTask.children('.content').tabs({ 
    143         select: function(event, ui) {  
    144                 if ($('.qtip.qtip-blue.qtip-active').length) 
    145                         $('.qtip.qtip-blue.qtip-active').qtip('destroy'); 
    146         }        
    147         }); 
    148 var calendar = DataLayer.get('calendar', objEvent.calendar); 
    149                                  
    150 if (calendar.timezone != objEvent.timezone){ 
    151     UI.dialogs.addTask.find('.calendar-addevent-details-txt-timezone').find('option[value="'+objEvent.timezone+'"]').attr('selected','selected').trigger('change'); 
    152     UI.dialogs.addTask.find('.calendar_addevent_details_lnk_timezone').addClass('hidden'); 
    153     $('.calendar-addevent-details-txt-timezone').removeClass('hidden'); 
    154                          
     143     * zebraDiscardTaskDialog é uma flag indicando que uma janela de confirmação (Zebra_Dialog) 
     144     * já estão aberta na tela, uma vez que não é possivel acessar o task ESC utilizado para fechá-la 
     145     */ 
     146    zebraDiscardTaskDialog = false; 
     147 
     148    var html = DataLayer.render(path + 'templates/task_add.ejs', { 
     149        task: objTask 
     150    }); 
     151 
     152    if (!UI.dialogs.addTask) { 
     153 
     154        UI.dialogs.addTask = jQuery('#sandbox').append('<div title="Criar tarefa" class="new-task-win active"> <div>').find('.new-task-win.active').html(html).dialog({ 
     155            resizable: false, 
     156            modal: true, 
     157            autoOpen: false, 
     158            width: 774, 
     159            position: 'center', 
     160            close: function (event, ui) { 
     161                /** 
     162                 * Remove tooltip possivelmente existente 
     163                 */ 
     164                if ($('.qtip.qtip-blue.qtip-active').length) $('.qtip.qtip-blue.qtip-active').qtip('destroy'); 
     165                attendees = {}; 
     166            }, 
     167            beforeClose: function (event, ui) { 
     168 
     169                if (!canDiscardTaskDialog && !zebraDiscardTaskDialog) { 
     170                    zebraDiscardTaskDialog = true; 
     171                    window.setTimeout(function () { 
     172                        $.Zebra_Dialog('Suas alterações na tarefa não foram salvas. Deseja descartar as alterações?', { 
     173                            'type': 'question', 
     174                            'overlay_opacity': '0.5', 
     175                            'buttons': ['Descartar alterações', 'Continuar editando'], 
     176                            'onClose': function (clicked) { 
     177                                if (clicked == 'Descartar alterações') { 
     178                                    canDiscardTaskDialog = true; 
     179                                    /** 
     180                                     *Remoção dos anexos da task caso seja cancelado a ediçãoo 
     181                                     */ 
     182                                    DataLayer.rollback(); 
     183 
     184                                    var ids = false; 
     185                                    $.each($('.attachment-list input'), function (i, input) { 
     186                                        DataLayer.put('attachment', { 
     187                                            id: '' + input.value 
     188                                        }); 
     189                                        DataLayer.remove('attachment', '' + input.value); 
     190                                        ids = true; 
     191                                    }); 
     192                                    if (ids) DataLayer.commit(); 
     193 
     194                                    UI.dialogs.addTask.dialog('close'); 
     195                                } else { 
     196                                    zebraDiscardTaskDialog = false; 
     197                                } 
     198 
     199                                /** 
     200                                 * Uma vez aberta uma janela de confirmação (Zebra_Dialog), ao fechá-la 
     201                                 * com ESC, para que o task ESC nÃo seja propagado para fechamento da 
     202                                 * janela de edição de tasks, deve ser setada uma flag indicando que 
     203                                 * já existe uma janela de confirmação aberta. 
     204                                 */ 
     205                                if (!clicked) { 
     206                                    window.setTimeout(function () { 
     207                                        zebraDiscardTaskDialog = false; 
     208                                    }, 200); 
     209                                } 
     210                            } 
     211                        }); 
     212 
     213                    }, 300); 
     214 
     215                } 
     216                //DataLayer.rollback(); 
     217                return canDiscardTaskDialog; 
     218            }, 
     219            dragStart: function (task, ui) { 
     220                if ($('.qtip.qtip-blue.qtip-active').length) $('.qtip.qtip-blue.qtip-active').qtip('destroy'); 
     221            } 
     222        }); 
     223 
     224    } else { 
     225        UI.dialogs.addTask.html(html); 
     226    } 
     227 
     228    var tabs = UI.dialogs.addTask.children('.content').tabs({ 
     229        select: function (task, ui) { 
     230            if ($('.qtip.qtip-blue.qtip-active').length) $('.qtip.qtip-blue.qtip-active').qtip('destroy'); 
     231        } 
     232    }); 
     233    var group = DataLayer.get('calendar', objTask.group); 
     234 
     235    if (group.timezone != objTask.timezone) { 
     236        UI.dialogs.addTask.find('.calendar-addtask-details-txt-timezone').find('option[value="' + objTask.timezone + '"]').attr('selected', 'selected').trigger('change'); 
     237        UI.dialogs.addTask.find('.calendar_addtask_details_lnk_timezone').addClass('hidden'); 
     238        $('.calendar-addtask-details-txt-timezone').removeClass('hidden'); 
     239 
     240    } 
     241 
     242    UI.dialogs.addTask.find('.calendar_addtask_details_lnk_timezone').click(function (e) { 
     243        $(this).addClass('hidden'); 
     244        $('.calendar-addtask-details-txt-timezone').removeClass('hidden'); 
     245        e.prtaskDefault(); 
     246    }); 
     247 
     248    UI.dialogs.addTask.find('.button.remove').button({ 
     249    text:false,  
     250    icons:{ 
     251        primary:'ui-icon-close' 
     252    } 
     253    }).click(function(el){ 
     254        var id; 
     255        if( id = $(this).parent().find('input[name="alarmId[]"]').val()) 
     256        DataLayer.remove('alarm', id); 
     257        $(this).parent().remove().find('li').is(':empty'); 
     258    }); 
     259 
     260    /*Seleciona a agenda padrão para visualização edição de um task*/ 
     261    if (objTask.id) UI.dialogs.addTask.find('option[value="' + objTask.group + '"]').attr('selected', 'selected').trigger('change'); 
     262 
     263    /* Checkbox allday */ 
     264    UI.dialogs.addTask.find('input[name="allDay"]').click(function () { 
     265        $(this).attr("checked") ? UI.dialogs.addTask.find('.start-time, .end-time').addClass('hidden') : UI.dialogs.addTask.find('.start-time, .end-time').removeClass('hidden'); 
     266        updateMap(true); 
     267    }); 
     268 
     269    UI.dialogs.addTask.find('.button').button(); 
     270    UI.dialogs.addTask.find('.button.add').button({ 
     271        icons: { 
     272            secondary: "ui-icon-plus" 
     273        } 
     274    }); 
     275 
     276    // ==== validation tasks ==== 
     277    UI.dialogs.addTask.find(".input-group .h1").Watermark("Tarefa sem título"); 
     278    if (User.preferences.hourFormat.length == 5) { 
     279        UI.dialogs.addTask.find(".end-time, .start-time").mask("99:99", { 
     280            completed: function () { 
     281                updateMap(); 
     282            } 
     283        }); 
     284    } else { 
     285        $.mask.definitions['{'] = '[ap]'; 
     286        $.mask.definitions['}'] = '[m]'; 
     287        UI.dialogs.addTask.find(".end-time, .start-time").mask("99:99 {}", { 
     288            completed: function () { 
     289                $(this).val(date.Calendar.defaultToAmPm($(this).val())); 
     290                $(this).timepicker("refresh"); 
     291                $(this).val($(this).val().replace(/[\.]/gi, "")); 
     292                updateMap(); 
     293            } 
     294        }); 
     295    } 
     296    UI.dialogs.addTask.find(".number").numeric(); 
     297    User.preferences.dateFormat.indexOf('-') > 0 ? UI.dialogs.addTask.find(".date").mask("99-99-9999", { 
     298        completed: function () { 
     299            updateMap(); 
     300        } 
     301    }) : UI.dialogs.addTask.find(".date").mask("99/99/9999", { 
     302        completed: function () { 
     303            updateMap(); 
     304        } 
     305    }); 
     306 
     307    UI.dialogs.addTask.find(".menu-addtask").children(".delete").click(function () { 
     308        $.Zebra_Dialog('Tem certeza que deseja excluir esta tarefa?', { 
     309            'type': 'question', 
     310            'overlay_opacity': '0.5', 
     311            'buttons': ['Sim', 'Não'], 
     312            'onClose': function (clicked) { 
     313                if (clicked == 'Sim') { 
     314                    canDiscardTaskDialog = true; /* Remove por filtro */ 
     315                    DataLayer.removeFilter('schedulable', { 
     316                        filter: ['AND', ['=', 'id', objTask.id], 
     317                            ['=', 'calendar', objTask.group], 
     318                            ['=', 'user', (objTask.me.user ? objTask.me.user.id : objTask.me.id)] 
     319                        ] 
     320                    }); 
     321                    Calendar.rerenderView(true); /********************/ 
     322                    UI.dialogs.addTask.dialog("close"); 
     323                } 
     324            } 
     325        }); 
     326    }).end() 
     327 
     328    .children(".cancel").click(function () { 
     329        UI.dialogs.addTask.dialog("close"); 
     330    }).end() 
     331 
     332    .children(".save").click(function () { /* Validação */ 
     333        /*if (msg = validDateTask()) { 
     334            $(".new-task-win.active").find('.messages-validation').removeClass('hidden').find('.message label').html(msg); 
     335            return false; 
     336        }*/ 
     337 
     338        UI.dialogs.addTask.children().find('form.form-addtask').submit(); 
     339        UI.dialogs.addTask.dialog("close"); 
     340 
     341    }).end() 
     342 
     343    .children(".export").click(function () { 
     344        UI.dialogs.addTask.children().find(".form-export").submit(); 
     345    }); 
     346 
     347    var attendeeHtml = DataLayer.render(path + 'templates/attendees_task.ejs', { 
     348        task: objTask 
     349    }); 
     350 
     351    // load template of attendees 
     352    var blkAddAtendee = UI.dialogs.addTask.find('#calendar_addtask_details6').append(attendeeHtml); 
     353 
     354    if(objTask.attendee.length) 
     355        callbackAttendee(); 
     356 
     357    /* 
     358     *   Opções de delegação do participante/organizer 
     359     */       
     360    blkAddAtendee.find(".button.participant-delegate").button({ 
     361        icons: { 
     362        primary: "ui-icon-transferthick-e-w" 
     363        }, 
     364        text: false 
     365    }).click(function () { 
     366        if($(this).hasClass('attendee-permissions-change-button')){ 
     367        if(!$(this).hasClass('disable')){ 
     368            $(this).removeClass('attendee-permissions-change-button')    
     369            .find('.ui-icon-transferthick-e-w').removeClass('attendee-permissions-change').end();                
     370            blkAddAtendee.find('.block-add-attendee.search').addClass('hidden'); 
     371            blkAddAtendee.find('.block-add-attendee.search dt').html('Adicionar outros contatos'); 
     372        } 
     373        }else{                                   
     374        $(this).addClass('attendee-permissions-change-button')    
     375        .find('.ui-icon-transferthick-e-w').addClass('attendee-permissions-change').end();                
     376        blkAddAtendee.find('.block-add-attendee.search dt').html('Delegar participação para'); 
     377        blkAddAtendee.find('.block-add-attendee.search').removeClass('hidden'); 
     378        blkAddAtendee.find('.block-add-attendee.search input.search').focus(); 
     379        } 
     380    }) 
     381    .addClass('tiny'); 
     382 
     383    var dates = UI.dialogs.addTask.find('input.date').datepicker({ 
     384        dateFormat: User.preferences.dateFormat.replace(/M/g, 'm').replace(/yyyy/g, 'yy'), 
     385        onSelect: function (selectedDate) { 
     386            updateMap(); 
     387        } 
     388    }); 
     389 
     390    UI.dialogs.addTask.find('input.time').timepicker({ 
     391        closeText: 'Ok', 
     392        hourGrid: 4, 
     393        minuteGrid: 10, 
     394        ampm: ((User.preferences.hourFormat.length > 5) ? true : false), 
     395        timeFormat: "hh:mm tt", 
     396        onSelect: function (selectedDateTime) { 
     397            if (!(User.preferences.hourFormat.length == 5)) $(this).val(selectedDateTime.replace(/[\.]/gi, "")); 
     398            updateMap(); 
     399        }, 
     400        onClose: function (selectedDateTime) { 
     401            if (!(User.preferences.hourFormat.length == 5)) $(this).val(selectedDateTime.replace(/[\.]/gi, "")); 
     402        } 
     403    }); 
     404 
     405    blkAddAtendee.find('.add-attendee-search .ui-icon-search').click(function (task) { 
     406        blkAddAtendee.find('.add-attendee-search input').keydown(); 
     407    }); 
     408 
     409    blkAddAtendee.find('.add-attendee-search input').keydown(function (task) { 
     410 
     411        if (task.keyCode == '13' || typeof (task.keyCode) == 'undefined') { 
     412            var result = DataLayer.get('user', ["*", "name", $(this).val()], true); 
     413 
     414            /** 
     415             * TODO: trocar por template 
     416             */ 
     417            blkAddAtendee.find('ul.search-result-list').empty().css('overflow', 'hidden'); 
     418            if (!result) { 
     419                blkAddAtendee.find('ul.search-result-list').append('<li><label class="empty">Nenhum resultado encontrado.</label></li>'); 
     420            } 
     421 
     422            for (i = 0; i < result.length; i++) 
     423            result[i].enabled = (blkAddAtendee.find('dd.attendee-list ul.attendee-list label.mail[title="' + result[i].mail + '"]').length) ? false : true; 
     424 
     425            blkAddAtendee.find('ul.search-result-list').append(DataLayer.render(path + 'templates/participants_search_itemlist.ejs', result)); 
     426 
     427            blkAddAtendee.find('ul.search-result-list li').click(function (task, ui) { 
     428                if ($(task.target).is('input')) { 
     429                    old_item = $(task.target).parents('li'); 
     430                    newAttendeeId = DataLayer.put('participant', { 
     431                        user: old_item.find('.id').html(), 
     432                        isExternal: old_item.find('.isExternal').html() 
     433                    }); 
     434 
     435                    attendees[old_item.find('.id').html()] = old_item.find('.name').html(); 
     436 
     437                    blkAddAtendee.find('dd.attendee-list ul.attendee-list').append(DataLayer.render(path + 'templates/participants_add_itemlist.ejs', [{ 
     438                        id: newAttendeeId, 
     439                        name: old_item.find('.name').html(), 
     440                        mail: old_item.find('.mail').html(), 
     441                        isExternal: old_item.find('.isExternal').html(), 
     442                        notEvent: true, 
     443                        isDirty: !! !objTask.id 
     444                    }])).scrollTo('max'); 
     445                    /** 
     446                     * Delegação de participação de um participante com permissão apenas de leitura 
     447                     * 
     448                     */ 
     449                    if (objTask.me.id != objTask.organizer.id) { 
     450 
     451                        blkAddAtendee.find('.block-add-attendee.search').addClass('hidden'); 
     452                        blkAddAtendee.find('.block-add-attendee.search dt').html('Adicionar outros contatos'); 
     453 
     454                        blkAddAtendee.find('.status option').toggleClass('hidden'); 
     455                        blkAddAtendee.find('option[value=5]').attr('selected', 'selected').trigger('change'); 
     456                        blkAddAtendee.find('.request-update').removeClass('hidden'); 
     457 
     458                        blkAddAtendee.find('dd.attendee-list ul.attendee-list li .button.close').parents('li').find('input[name="delegatedFrom[]"]').val(blkAddAtendee.find('.me input[name="attendee[]"]').val()); 
     459 
     460                        blkAddAtendee.find('.me .participant-delegate').addClass('disable ui-button-disabled ui-state-disabled'); 
     461                        blkAddAtendee.find(".button.close").button({ 
     462                            icons: { 
     463                                primary: "ui-icon-close" 
     464                            }, 
     465                            text: false 
     466                        }).click(function () { 
     467 
     468                            $(this).parents('li').find('input[name="delegatedFrom[]"]').val(''); 
     469                            blkAddAtendee.find('.request-update').addClass('hidden'); 
     470                            blkAddAtendee.find('.status option').toggleClass('hidden'); 
     471                            blkAddAtendee.find('option[value=1]').attr('selected', 'selected').trigger('change'); 
     472                            blkAddAtendee.find('.me .participant-delegate').removeClass('disable ui-button-disabled ui-state-disabled attendee-permissions-change-button').find('.ui-icon-person').removeClass('attendee-permissions-change').end(); 
     473 
     474                            DataLayer.remove('participant', $(this).parents('li').find('[type=checkbox]').val()); 
     475                            $(this).parents('li').remove(); 
     476                        }).addClass('tiny'); 
     477                    } else { 
     478                        callbackAttendee(); 
     479                        old_item.remove(); 
     480                    } 
     481                } 
     482            }); 
     483 
     484            event.preventDefault(); 
     485        } 
     486    }); 
     487 
     488    UI.dialogs.addTask.find('.row.fileupload-buttonbar-task .button').filter('.delete').button({ 
     489        icons: { 
     490            primary: "ui-icon-close" 
     491        }, 
     492        text: 'Excluir' 
     493    }).click(function () { 
     494        $.Zebra_Dialog('Tem certeza que deseja excluir todos anexos?', { 
     495            'type': 'question', 
     496            'overlay_opacity': '0.5', 
     497            'buttons': ['Sim', 'Não'], 
     498            'onClose': function (clicked) { 
     499                if (clicked == 'Sim') { 
     500 
     501                    var ids = []; 
     502                    $.each($('.attachment-list input'), function (i, input) { 
     503                        DataLayer.remove('schedulableToAttachment', { 
     504                            filter: ['=', 'id', '' + input.value] 
     505                        }); 
     506                    }); 
     507                    $('.attachment-list input').remove(); 
     508                    $('.row.fileupload-buttonbar .attachments-list p').remove(); 
     509                } 
     510            } 
     511        }); 
     512    }).end().filter('.close').button({ 
     513        icons: { 
     514            primary: "ui-icon-close" 
     515        }, 
     516        text: false 
     517    }).click(function () { 
     518        DataLayer.remove('schedulableToAttachment', $(this).parents('p').find('input[name="fileId[]"]').val()); 
     519        $(this).parents('p').remove(); 
     520    }).end().filter('.downlaod-archive').button({ 
     521        icons: { 
     522            primary: "ui-icon-arrowthickstop-1-s" 
     523        }, 
     524        text: false 
     525    }); 
     526    var maxSizeFile = 2000000; 
     527    $('#fileupload').fileupload({ 
     528        sequentialUploads: true, 
     529        add: function (e, data) { 
     530            if (data.files[0].size < maxSizeFile) data.submit(); 
     531        }, 
     532        change: function (e, data) { 
     533            $.each(data.files, function (index, file) { 
     534                var attach = {}; 
     535                attach.fileName = file.name; 
     536                var ext = file.name.split('.'); 
     537                if (file.name.length > 10) attach.fileName = ext.length == 1 ? file.name.substr(0, 10) : file.name.substr(0, 6) + '.' + ext[ext.length - 1]; 
     538                attach.fileSize = formatBytes(file.size); 
     539                if (file.size > maxSizeFile) attach.error = 'Tamanho de arquivo nao permitido!!' 
     540 
     541                $('.attachments-list').append(DataLayer.render(path + 'templates/attachment_add_itemlist.ejs', { 
     542                    file: attach 
     543                })); 
     544 
     545                if (file.size < maxSizeFile) { 
     546                    $('.fileinput-button.new').append(data.fileInput[0]).removeClass('new'); 
     547                    $('.attachments-list').find('[type=file]').addClass('hidden'); 
     548 
     549                } else $('.fileinput-button.new').removeClass('new'); 
     550 
     551 
     552                $('.attachments-list').find('.button.close').button({ 
     553                    icons: { 
     554                        primary: "ui-icon-close" 
     555                    }, 
     556                    text: false 
     557                }).click(function () { 
     558                    var idAttach = $(this).parent().find('input[name="fileId[]"]').val(); 
     559                    $('.attachment-list').find('input[value="' + idAttach + '"]') 
     560                    $(this).parent().remove(); 
     561                }); 
     562 
     563            }) 
     564        }, 
     565        done: function (e, data) { 
     566            var currentUpload = $('.progress.after-upload:first').removeClass('after-upload').addClass('on-complete').hide(); 
     567 
     568            if ( !! data.result && data.result != "[]") { 
     569                var newAttach = (attch = jQuery.parseJSON(data.result)) ? attch : jQuery.parseJSON(data.result[0].activeElement.childNodes[0].data); 
     570                $('.attachment-list').append('<input tyepe="hidden" name="attachment[]" value="' + newAttach['attachment'][0][0].id + '"/>'); 
     571                currentUpload.removeClass('on-complete').parents('p').append('<input type="hidden" name="fileId[]" value="' + newAttach['attachment'][0][0].id + '"/>').find('.status-upload').addClass('ui-icon ui-icon-check'); 
     572            } else currentUpload.removeClass('on-complete').parents('p').find('.status-upload').addClass('ui-icon ui-icon-cancel'); 
     573        } 
     574    }); 
     575    $('.attachments-list .button').button(); 
     576 
     577    if ( !! window.FormData) $('#fileupload').bind('fileuploadstart', function () { 
     578        var widget = $(this), 
     579            progressElement = $('#fileupload-progress').fadeIn(), 
     580            interval = 500, 
     581            total = 0, 
     582            loaded = 0, 
     583            loadedBefore = 0, 
     584            progressTimer, progressHandler = function (e, data) { 
     585                loaded = data.loaded; 
     586                total = data.total; 
     587            }, 
     588            stopHandler = function () { 
     589                widget.unbind('fileuploadprogressall', progressHandler).unbind('fileuploadstop', stopHandler); 
     590                window.clearInterval(progressTimer); 
     591                progressElement.fadeOut(function () { 
     592                    progressElement.html(''); 
     593                }); 
     594            }, 
     595            formatTime = function (seconds) { 
     596                var date = new Date(seconds * 1000); 
     597                return ('0' + date.getUTCHours()).slice(-2) + ':' + ('0' + date.getUTCMinutes()).slice(-2) + ':' + ('0' + date.getUTCSeconds()).slice(-2); 
     598            }, 
     599 
     600            formatPercentage = function (floatValue) { 
     601                return (floatValue * 100).toFixed(2) + ' %'; 
     602            }, 
     603            updateProgressElement = function (loaded, total, bps) { 
     604                progressElement.html( 
     605                formatBytes(bps) + 'ps | ' + formatTime((total - loaded) / bps) + ' | ' + formatPercentage(loaded / total) + ' | ' + formatBytes(loaded) + ' / ' + formatBytes(total)); 
     606            }, 
     607            intervalHandler = function () { 
     608                var diff = loaded - loadedBefore; 
     609                if (!diff) { 
     610                    return; 
     611                } 
     612                loadedBefore = loaded; 
     613                updateProgressElement( 
     614                loaded, total, diff * (1000 / interval)); 
     615            }; 
     616        widget.bind('fileuploadprogressall', progressHandler).bind('fileuploadstop', stopHandler); 
     617        progressTimer = window.setInterval(intervalHandler, interval); 
     618    }); 
     619 
     620    disponibily(objTask, path, attendees, 'task'); 
     621 
     622    UI.dialogs.addTask.find('.button-add-alarms').click(function () { 
     623        var li_attach = DataLayer.render(path + 'templates/alarms_add_itemlist.ejs', { 
     624            type: 1 
     625        }); 
     626 
     627        jQuery('.task-alarms-list').append(li_attach).find('.button.remove').button({ 
     628            text: false, 
     629            icons: { 
     630                primary: 'ui-icon-close' 
     631            } 
     632        }).click(function (el) { 
     633            $(this).parent().remove().find('li').is(':empty') 
     634        }); 
     635        // valicacao de campos numericos 
     636        $('.number').numeric(); 
     637    }); 
     638 
     639 
     640    UI.dialogs.addTask.dialog('open'); 
    155641} 
    156  
    157 UI.dialogs.addTask.find('.calendar_addevent_details_lnk_timezone').click(function(e){ 
    158     $(this).addClass('hidden'); 
    159     $('.calendar-addtask-details-txt-timezone').removeClass('hidden'); 
    160     e.preventDefault(); 
    161 }); 
    162  
    163 /*Seleciona a agenda padrão para visualização/edição de um evento*/ 
    164 if(objEvent.id) 
    165     UI.dialogs.addTask.find('option[value="'+objEvent.calendar+'"]').attr('selected','selected').trigger('change'); 
    166  
    167 /* Checkbox allday */ 
    168  
    169 UI.dialogs.addTask.find('input[name="allDay"]').click(function(){ 
    170     $(this).attr("checked") ?  
    171     UI.dialogs.addTask.find('.start-time, .end-time').addClass('hidden') : 
    172     UI.dialogs.addTask.find('.start-time, .end-time').removeClass('hidden');  
    173     updateMap(true); 
    174 }); 
    175  
    176 UI.dialogs.addTask.find('.button').button(); 
    177 UI.dialogs.addTask.find('.button.add').button({ 
    178     icons: { 
    179         secondary: "ui-icon-plus" 
    180     } 
    181 }); 
    182  
    183 // ==== validation events ==== 
    184 UI.dialogs.addTask.find(".input-group .h1").Watermark("Tarefa sem título"); 
    185 if(User.preferences.hourFormat.length == 5) { 
    186     UI.dialogs.addTask.find(".end-time, .start-time").mask("99:99", { 
    187         completed: function(){ 
    188             updateMap(); 
    189         } 
    190     }); 
    191 } else { 
    192     $.mask.definitions['{']='[ap]'; 
    193     $.mask.definitions['}']='[m]'; 
    194     UI.dialogs.addTask.find(".end-time, .start-time").mask("99:99 {}", { 
    195         completed:function(){ 
    196             $(this).val(date.Calendar.defaultToAmPm($(this).val())); 
    197             $(this).timepicker("refresh"); 
    198             $(this).val($(this).val().replace(/[\.]/gi, "")); 
    199             updateMap(); 
    200         } 
    201     }); 
    202 } 
    203 UI.dialogs.addTask.find(".number").numeric(); 
    204 User.preferences.dateFormat.indexOf('-') > 0 ?  
    205 UI.dialogs.addTask.find(".date").mask("99-99-9999", { 
    206     completed:function(){ 
    207         updateMap(); 
    208     } 
    209 }) :  
    210 UI.dialogs.addTask.find(".date").mask("99/99/9999", { 
    211     completed:function(){ 
    212         updateMap(); 
    213     } 
    214 }); 
    215  
    216 UI.dialogs.addTask.find(".menu-addtask") 
    217 .children(".delete").click(function(){ 
    218     $.Zebra_Dialog('Tem certeza que deseja excluir o evento?', { 
    219         'type':     'question', 
    220         'overlay_opacity': '0.5', 
    221         'buttons':  ['Sim', 'Não'], 
    222         'onClose':  function(clicked) { 
    223             if(clicked == 'Sim'){ 
    224                 canDiscardEventDialog = true; 
    225                 /* Remove por filtro */ 
    226                 DataLayer.removeFilter('schedulable', {filter: ['AND', ['=', 'id', objEvent.id], ['=', 'calendar', objEvent.calendar], ['=','user',(objEvent.me.user ? objEvent.me.user.id : objEvent.me.id)]]}); 
    227                 Calendar.rerenderView(true); 
    228                 /********************/ 
    229                 UI.dialogs.addTask.dialog("close"); 
    230             } 
    231         } 
    232     }); 
    233 }).end() 
    234              
    235 .children(".cancel").click(function(){ 
    236     UI.dialogs.addTask.dialog("close"); 
    237 }).end() 
    238              
    239 .children(".save").click(function(){ 
    240     /* Validação */ 
    241     var msg = false;                     
    242     if(msg = validDateEvent()){ 
    243         $(".new-event-win.active").find('.messages-validation').removeClass('hidden').find('.message label').html(msg);  
    244         return false; 
    245     } 
    246                          
    247     canDiscardEventDialog = true; 
    248                          
    249     var exit = function(event){ 
    250         if(event) 
    251             DataLayer.remove('schedulable', event, false);  
    252  
    253         UI.dialogs.addTask.children().find('form.form-addevent').submit(); 
    254         UI.dialogs.addTask.dialog("close");    } 
    255                          
    256     if(repeat){ 
    257         DataLayer.remove('repeat', false); 
    258         DataLayer.put('repeat', repeat); 
    259         DataLayer.commit('repeat', false, exit(repeat.schedulable)); 
    260     }else 
    261         exit(); 
    262 }).end() 
    263                  
    264 .children(".export").click(function(){ 
    265     UI.dialogs.addTask.children().find(".form-export").submit(); 
    266 }); 
    267  
    268 var attendeeHtml = DataLayer.render( path+'templates/attendee_add.ejs', { 
    269     event:objEvent 
    270 });              
    271          
    272 // load template of attendees 
    273 var blkAddAtendee = UI.dialogs.addTask.find('#calendar_addtask_details6').append(attendeeHtml); 
    274  
    275 var dates = UI.dialogs.addTask.find('input.date').datepicker({ 
    276     dateFormat: User.preferences.dateFormat.replace(/M/g, 'm').replace(/yyyy/g, 'yy'), 
    277     onSelect : function( selectedDate ){ 
    278         updateMap(); 
    279     } 
    280 }); 
    281  
    282 UI.dialogs.addTask.find('input.time').timepicker({  
    283     closeText: 'Ok', 
    284     hourGrid: 4, 
    285     minuteGrid: 10, 
    286     ampm : ((User.preferences.hourFormat.length > 5) ? true: false), 
    287     timeFormat: "hh:mm tt", 
    288     onSelect: function (selectedDateTime){ 
    289         if(!(User.preferences.hourFormat.length == 5)) 
    290             $(this).val(selectedDateTime.replace(/[\.]/gi, ""));                                                                 
    291         updateMap(); 
    292     }, 
    293     onClose : function (selectedDateTime){ 
    294         if(!(User.preferences.hourFormat.length == 5)) 
    295             $(this).val(selectedDateTime.replace(/[\.]/gi, "")); 
    296     } 
    297          
    298  
    299 }); 
    300  
    301 blkAddAtendee.find('.add-attendee-search .ui-icon-search').click(function(event) { 
    302     blkAddAtendee.find('.add-attendee-search input').keydown(); 
    303 }); 
    304                          
    305                          
    306 blkAddAtendee.find('.add-attendee-search input').keydown(function(event) { 
    307  
    308     if(event.keyCode == '13' || typeof(event.keyCode) == 'undefined') {                  
    309         var result = DataLayer.get('user', ["*", "name", $(this).val()], true); 
    310  
    311         /** 
    312         * TODO: trocar por template 
    313         */ 
    314         blkAddAtendee.find('ul.search-result-list').empty().css('overflow', 'hidden'); 
    315         if (!result) { 
    316             blkAddAtendee.find('ul.search-result-list').append('<li><label class="empty">Nenhum resultado encontrado.</label></li>'); 
    317         } 
    318  
    319         for(i=0; i<result.length; i++) 
    320             result[i].enabled = (blkAddAtendee.find('dd.attendee-list ul.attendee-list label.mail[title="' +  result[i].mail + '"]').length) ? false : true; 
    321                                                                                          
    322         blkAddAtendee.find('ul.search-result-list').append(DataLayer.render( path+'templates/participants_search_itemlist.ejs', result)); 
    323  
    324         blkAddAtendee.find('ul.search-result-list li').click(function(event, ui){ 
    325             if ($(event.target).is('input')) { 
    326                 old_item = $(event.target).parents('li'); 
    327                 newAttendeeId = DataLayer.put('participant', { 
    328                     user: old_item.find('.id').html(),  
    329                     isExternal: old_item.find('.isExternal').html() 
    330                 }); 
    331                                                          
    332                 attendees[old_item.find('.id').html()] = old_item.find('.name').html(); 
    333                                                          
    334                 blkAddAtendee.find('dd.attendee-list ul.attendee-list') 
    335                 .append(DataLayer.render(path+'templates/participants_add_itemlist.ejs', [{ 
    336                     id: newAttendeeId,  
    337                     name: old_item.find('.name').html(),  
    338                     mail: old_item.find('.mail').html(),  
    339                     isExternal: old_item.find('.isExternal').html(),  
    340                     acl: objEvent.acl, 
    341                     isDirty: !!!objEvent.id 
    342                     }])) 
    343                 .scrollTo('max'); 
    344                 /** 
    345                                                         * Delegação de participação de um participante com permissão apenas de leitura 
    346                                                         * 
    347                                                         */ 
    348                 if(!objEvent.acl.organization && !objEvent.acl.write && !objEvent.acl.inviteGuests && objEvent.acl.read ){ 
    349                                                                  
    350                     blkAddAtendee.find('.block-add-attendee.search').addClass('hidden'); 
    351                     blkAddAtendee.find('.block-add-attendee.search dt').html('Adicionar outros contatos'); 
    352                                                                  
    353                     blkAddAtendee.find('.status option').toggleClass('hidden'); 
    354                     blkAddAtendee.find('option[value=5]').attr('selected','selected').trigger('change'); 
    355                     blkAddAtendee.find('.request-update').removeClass('hidden'); 
    356  
    357                     blkAddAtendee.find('dd.attendee-list ul.attendee-list li .button.close').parents('li').find('input[name="delegatedFrom[]"]').val(blkAddAtendee.find('.me input[name="attendee[]"]').val()); 
    358                                                                  
    359                     blkAddAtendee.find('.me .participant-delegate').addClass('disable ui-button-disabled ui-state-disabled'); 
    360                     blkAddAtendee.find(".button.close").button({ 
    361                         icons: { 
    362                             primary: "ui-icon-close" 
    363                         }, 
    364                         text: false 
    365                     }).click(function () { 
    366                                                                          
    367                         $(this).parents('li').find('input[name="delegatedFrom[]"]').val(''); 
    368                         blkAddAtendee.find('.request-update').addClass('hidden'); 
    369                         blkAddAtendee.find('.status option').toggleClass('hidden'); 
    370                         blkAddAtendee.find('option[value=1]').attr('selected','selected').trigger('change');                     
    371                         blkAddAtendee.find('.me .participant-delegate').removeClass('disable ui-button-disabled ui-state-disabled attendee-permissions-change-button') 
    372                         .find('.ui-icon-person').removeClass('attendee-permissions-change').end();                       
    373                                                                          
    374                         DataLayer.remove('participant', $(this).parents('li').find('[type=checkbox]').val()); 
    375                         $(this).parents('li').remove(); 
    376                     }) 
    377                     .addClass('tiny'); 
    378                 }else{ 
    379                     callbackAttendee(); 
    380                     old_item.remove(); 
    381                 } 
    382             } 
    383         }); 
    384  
    385         event.preventDefault(); 
    386     } 
    387 }); 
    388  
    389 UI.dialogs.addTask.find('.row.fileupload-buttonbar .button').filter('.delete').button({ 
    390     icons: { 
    391         primary: "ui-icon-close" 
    392     }, 
    393     text: 'Excluir' 
    394 }).click(function () { 
    395     $.Zebra_Dialog('Tem certeza que deseja excluir todos anexos?', { 
    396         'type':     'question', 
    397         'overlay_opacity': '0.5', 
    398         'buttons':  ['Sim', 'Não'], 
    399         'onClose':  function(clicked) { 
    400             if(clicked == 'Sim'){ 
    401                  
    402                 var ids = []; 
    403                 $.each($('.attachment-list input'), function (i, input) { 
    404                      DataLayer.remove('schedulableToAttachment', { 
    405                         filter: ['=', 'id', ''+input.value] 
    406                         }); 
    407                 }); 
    408                 $('.attachment-list input').remove(); 
    409                 $('.row.fileupload-buttonbar .attachments-list p').remove(); 
    410             } 
    411         }}); 
    412 }).end() 
    413 .filter('.close').button({ 
    414     icons: { 
    415         primary: "ui-icon-close" 
    416     }, 
    417     text: false 
    418 }).click(function () { 
    419     DataLayer.remove('schedulableToAttachment', $(this).parents('p').find('input[name="fileId[]"]').val()); 
    420     $(this).parents('p').remove(); 
    421 }).end() 
    422 .filter('.downlaod-archive').button({ 
    423     icons: { 
    424         primary: "ui-icon-arrowthickstop-1-s" 
    425     }, 
    426     text: false 
    427 }); 
    428 var maxSizeFile = 2000000; 
    429 $('#fileupload').fileupload({ 
    430     sequentialUploads: true, 
    431     add: function (e, data) { 
    432         if(data.files[0].size < maxSizeFile) 
    433             data.submit(); 
    434     }, 
    435     change: function (e, data) { 
    436         $.each(data.files, function (index, file) { 
    437             var attach = {}; 
    438             attach.fileName = file.name; 
    439             var ext = file.name.split('.'); 
    440             if(file.name.length > 10) 
    441                 attach.fileName = ext.length == 1 ? file.name.substr(0, 10) :  file.name.substr(0, 6) + '.' + ext[ext.length -1]; 
    442             attach.fileSize = formatBytes(file.size); 
    443             if(file.size > maxSizeFile) 
    444                 attach.error = 'Tamanho de arquivo nao permitido!!' 
    445                                  
    446             $('.attachments-list').append(DataLayer.render(path+'templates/attachment_add_itemlist.ejs', { 
    447                 file : attach 
    448             })); 
    449                                  
    450             if(file.size < maxSizeFile){ 
    451                 $('.fileinput-button.new').append(data.fileInput[0]).removeClass('new'); 
    452                 $('.attachments-list').find('[type=file]').addClass('hidden'); 
    453                                          
    454             }else 
    455                 $('.fileinput-button.new').removeClass('new'); 
    456                                  
    457                                  
    458             $('.attachments-list').find('.button.close').button({ 
    459                 icons: { 
    460                     primary: "ui-icon-close" 
    461                 }, 
    462                 text: false 
    463             }).click(function(){ 
    464                 var idAttach = $(this).parent().find('input[name="fileId[]"]').val(); 
    465                 $('.attachment-list').find('input[value="'+idAttach+'"]') 
    466                 $(this).parent().remove(); 
    467             });  
    468                                  
    469         }) 
    470         }, 
    471     done: function(e, data){ 
    472         var currentUpload = $('.progress.after-upload:first').removeClass('after-upload').addClass('on-complete').hide(); 
    473  
    474         if(!!data.result && data.result != "[]"){ 
    475             var newAttach = (attch = jQuery.parseJSON(data.result)) ? attch : jQuery.parseJSON(data.result[0].activeElement.childNodes[0].data); 
    476             $('.attachment-list').append('<input tyepe="hidden" name="attachment[]" value="'+newAttach['attachment'][0][0].id+'"/>'); 
    477             currentUpload.removeClass('on-complete').parents('p') 
    478             .append('<input type="hidden" name="fileId[]" value="'+newAttach['attachment'][0][0].id+'"/>') 
    479             .find('.status-upload').addClass('ui-icon ui-icon-check'); 
    480         }else 
    481             currentUpload.removeClass('on-complete').parents('p').find('.status-upload').addClass('ui-icon ui-icon-cancel'); 
    482     } 
    483 }); 
    484 $('.attachments-list .button').button(); 
    485  
    486 if(!!window.FormData)                    
    487 $('#fileupload').bind('fileuploadstart', function () { 
    488     var widget = $(this), 
    489     progressElement = $('#fileupload-progress').fadeIn(), 
    490     interval = 500, 
    491     total = 0, 
    492     loaded = 0, 
    493     loadedBefore = 0, 
    494     progressTimer, 
    495     progressHandler = function (e, data) { 
    496         loaded = data.loaded; 
    497         total = data.total; 
    498     }, 
    499     stopHandler = function () { 
    500         widget 
    501         .unbind('fileuploadprogressall', progressHandler) 
    502         .unbind('fileuploadstop', stopHandler); 
    503         window.clearInterval(progressTimer); 
    504         progressElement.fadeOut(function () { 
    505             progressElement.html(''); 
    506         }); 
    507     }, 
    508     formatTime = function (seconds) { 
    509         var date = new Date(seconds * 1000); 
    510         return ('0' + date.getUTCHours()).slice(-2) + ':' + 
    511         ('0' + date.getUTCMinutes()).slice(-2) + ':' + 
    512         ('0' + date.getUTCSeconds()).slice(-2); 
    513     }, 
    514     /* formatBytes = function (bytes) { 
    515             if (bytes >= 1000000000) { 
    516                 return (bytes / 1000000000).toFixed(2) + ' GB'; 
    517             } 
    518             if (bytes >= 1000000) { 
    519                 return (bytes / 1000000).toFixed(2) + ' MB'; 
    520             } 
    521             if (bytes >= 1000) { 
    522                 return (bytes / 1000).toFixed(2) + ' KB'; 
    523             } 
    524             return bytes + ' B'; 
    525         },*/ 
    526     formatPercentage = function (floatValue) { 
    527         return (floatValue * 100).toFixed(2) + ' %'; 
    528     }, 
    529     updateProgressElement = function (loaded, total, bps) { 
    530         progressElement.html( 
    531             formatBytes(bps) + 'ps | ' + 
    532             formatTime((total - loaded) / bps) + ' | ' + 
    533             formatPercentage(loaded / total) + ' | ' + 
    534             formatBytes(loaded) + ' / ' + formatBytes(total) 
    535             ); 
    536     }, 
    537     intervalHandler = function () { 
    538         var diff = loaded - loadedBefore; 
    539         if (!diff) { 
    540             return; 
    541         } 
    542         loadedBefore = loaded; 
    543         updateProgressElement( 
    544             loaded, 
    545             total, 
    546             diff * (1000 / interval) 
    547             ); 
    548     }; 
    549     widget 
    550     .bind('fileuploadprogressall', progressHandler) 
    551     .bind('fileuploadstop', stopHandler); 
    552     progressTimer = window.setInterval(intervalHandler, interval); 
    553 }); 
    554          
    555 if(objEvent.isShared){ 
    556                  
    557     var acls = Calendar.signatureOf[objEvent.calendar].permission.acl; 
    558                  
    559     if(!acls.write){ 
    560         UI.dialogs.addTask.find(':input').attr('disabled', 'disabled'); 
    561         UI.dialogs.addTask.find('.button').hide(); 
    562     } 
    563                  
    564     if(acls.remove) 
    565         UI.dialogs.addTask.find('.button.remove').show(); 
    566      
    567     UI.dialogs.addTask.find('.button.cancel').show();    
    568 } 
    569  
    570 disponibily(objEvent, path, attendees); 
    571  
    572 UI.dialogs.addTask.find('.button-add-alarms').click(function(){ 
    573     var li_attach = DataLayer.render(path+'templates/alarms_add_itemlist.ejs', {type: 1}); 
    574  
    575     jQuery('.task-alarms-list').append(li_attach).find('.button.remove').button({ 
    576         text:false,  
    577         icons:{ 
    578             primary:'ui-icon-close' 
    579         } 
    580     }).click(function(el) { 
    581                 $(this).parent().remove().find('li').is(':empty') 
    582         }); 
    583 // valicacao de campos numericos 
    584 $('.number').numeric(); 
    585 }); 
    586  
    587  
    588 UI.dialogs.addTask.dialog('open'); 
    589 } 
Note: See TracChangeset for help on using the changeset viewer.