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

Location:
sandbox/2.4.2-expresso1/prototype/modules/calendar/js
Files:
6 edited

Legend:

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

    r6797 r6876  
    596596}); 
    597597 
     598DataLayer.codec( "schedulable", "task", { 
     599 
     600    decoder: function( evtObj ){ 
     601    Encoder.EncodeType = "entity"; 
     602     
     603    if( notArray = $.type(evtObj) !== "array" ) 
     604        evtObj = [ evtObj ]; 
     605 
     606    var pref = User.preferences; 
     607 
     608    var res = $.map(evtObj, function( form ){ 
     609     
     610        var tzId =  form.timezone || Calendar.signatureOf[form.group].calendar.timezone || User.preferences.timezone, 
     611 
     612        formatString = pref.dateFormat + " " + pref.hourFormat; 
     613 
     614        return DataLayer.merge({ 
     615        "class": form["class"], 
     616        startTime: Date.parseExact(form.startDate + " "+$.trim(form.startHour) , formatString ).toString(!!form.allDay ? 'yyyy-MM-dd 00:00:00' : 'yyyy-MM-dd HH:mm:00'), 
     617        endTime:  Date.parseExact(form.endDate + " "+$.trim(form.endHour), formatString ).toString(!!form.allDay ? 'yyyy-MM-dd 00:00:00' : 'yyyy-MM-dd HH:mm:00'),  //+ (!!form.allDay ? 86400000 : 0) , 
     618        due: (form.dueDate == '' )? 0 : Date.parseExact(form.dueDate + " "+$.trim(form.dueTime) , formatString ).toString(!!form.allDay ? 'yyyy-MM-dd 00:00:00' : 'yyyy-MM-dd HH:mm:00'), 
     619        allDay: ( !!form.allDay ? 1 : 0 ),       
     620        status: form.taskStatus,       
     621        id: form.idTask, 
     622        location: form.location, 
     623        type: 2, 
     624        percentage: form.percentage, 
     625        priority: form.priority, 
     626        category: form.category, 
     627        summary: form.summary, 
     628        description: form.description, 
     629        timezone: tzId, 
     630        attachments: $.map(form.attachment || [], function( attachment, i ){ 
     631            return { 
     632            attachment: attachment 
     633            } 
     634        }), 
     635        participants: $.map( form.attendee || [], function( attendee, i ){ 
     636 
     637            if( !attendee || attendee === "" ) 
     638            return( null ); 
     639 
     640            var participant = {}; 
     641            participant.user = (attendee!= User.me.id) ? DataLayer.get('participant', attendee).user : attendee ; 
     642 
     643            if( participant.user === User.me.id ){ 
     644            return DataLayer.merge({ 
     645                id: attendee, 
     646                isOrganizer: (form.attendee_organizer == attendee ? 1 : 0 ), 
     647                alarms: participant.alarms = $.map( form.alarmTime || [], function( alarmTime, i ){ 
     648                if( alarmTime === "" ) 
     649                    return( null ); 
     650                return !!form.alarmId[i] ? { 
     651                    type: form.alarmType[i],  
     652                    unit: form.alarmUnit[i],  
     653                    time: form.alarmTime[i],  
     654                    id: form.alarmId[i] 
     655                    }: 
     656 
     657                    { 
     658                    type: form.alarmType[i], 
     659                    unit: form.alarmUnit[i],  
     660                    time: form.alarmTime[i] 
     661                    }; 
     662                }), 
     663                status: !!form.status ? form.status : 3 
     664            }, (form.delegatedFrom[i] != '0' && form.delegatedFrom[i] != '')  ? { 
     665                delegatedFrom: form.delegatedFrom[i] 
     666                } : {}); 
     667            }else{ 
     668                return { 
     669                    id: attendee, 
     670                    isOrganizer: (form.attendee_organizer == attendee ? 1 : 0 ), 
     671                    isExternal: !!parseInt(form.attendeeType[i]) ? 1 : 0, 
     672                    }; 
     673            }; 
     674        }) 
     675        }, form.lastGroup ? (( form.lastGroup == form.group ) ? {} : {calendar: form.group, lastGroup: form.lastGroup}) : {calendar: form.group}); 
     676    }); 
     677 
     678    return notArray ? res[0] : res; 
     679    }, 
     680 
     681    encoder: function( evtObj ){ 
     682 
     683    var notArray = false; 
     684       
     685    if( notArray = $.type(evtObj) !== "array" ) 
     686        evtObj = [ evtObj ]; 
     687 
     688    var statusParticipants = {},  isAttendee = false, 
     689    
     690    statusLabels = [ '', 'accepted', 'tentative', 'cancelled', 'unanswered', 'delegated' ], 
     691 
     692    participantInfo = {}, delegatedFrom = {}, me = DataLayer.copy( User.me ); 
     693     
     694    var delegateAttendee = {}; 
     695     
     696    for( var i = 0; i < statusLabels.length; i++ ) 
     697        statusParticipants[ statusLabels[i] ] = 0; 
     698     
     699    var res = $.map(evtObj, function( objEvent ){            
     700             
     701        if(!(typeof(objEvent) == 'object')) 
     702            return (null); 
     703 
     704        var limitAttendee = false; 
     705 
     706        return { 
     707        "class": objEvent["class"], 
     708        id: objEvent.id, 
     709        location: objEvent.location, 
     710        category: objEvent.category, 
     711        taskStatus: objEvent.status, 
     712        groups: Calendar.groups, 
     713        group: objEvent.group, 
     714        summary: objEvent.summary, 
     715        description: objEvent.description, 
     716        timezone: objEvent.timezone, 
     717        timezones: Timezone.timezones, 
     718        percentage: (objEvent.percentage) ? objEvent.percentage : '0', 
     719        priority: objEvent.priority, 
     720        startDate: new Date( parseInt(objEvent.startTime) ).setTimezoneOffset( Timezone.timezone( objEvent.timezone ) ).toString( User.preferences.dateFormat ), 
     721        startHour: dateCalendar.formatDate(Timezone.getDateEvent(new Date( parseInt(objEvent.startTime)), objEvent.timezone, objEvent.calendar, objEvent.DayLigth, 'startTime'), User.preferences.hourFormat), 
     722        endDate: new Date( parseInt(objEvent.endTime) - (!!parseInt(objEvent.allDay) ? 86400000 : 0)  ).setTimezoneOffset( Timezone.timezone( objEvent.timezone ) ).toString( User.preferences.dateFormat ), 
     723        endHour: dateCalendar.formatDate(Timezone.getDateEvent(new Date(parseInt(objEvent.endTime)),  objEvent.timezone, objEvent.calendar, objEvent.DayLigth, 'endTime'), User.preferences.hourFormat), 
     724        dueDate: (!objEvent.due || objEvent.due == '' || objEvent.due == '0') ? '' : new Date( parseInt(objEvent.due) ).setTimezoneOffset( Timezone.timezone( objEvent.timezone ) ).toString( User.preferences.dateFormat ), 
     725        dueTime: (!objEvent.due || objEvent.due == '' || objEvent.due == '0') ? '' : dateCalendar.formatDate(Timezone.getDateEvent(new Date( parseInt(objEvent.due)), objEvent.timezone, objEvent.calendar, objEvent.DayLigth, 'startTime'), User.preferences.hourFormat), 
     726        allDay: !!parseInt( objEvent.allDay ), 
     727            historic: [], 
     728        attachments: $.map(objEvent.attachments || [], function( attachment, i ){ 
     729            var attach = DataLayer.get('schedulableToAttachment', attachment, false); 
     730            //TODO - Verificar na API retorno de id sobre os conceitos em que s?o utilizados tabelas de liga??o 
     731            if(!attach.name) return(null);  
     732             
     733            var ext = attach.name.split('.'); 
     734            attach.name = attach.name.length < 10 ?  attach.name : ( ext.length == 1 ? attach.name.substr(0, 10) : (attach.name.substr(0, 6) + '.' +  ext[ext.length -1])); 
     735            attach.size = formatBytes(attach.size); 
     736            return attach; 
     737        }),                      
     738        attendee: $.map(objEvent.participants || [], function( participant, i ){                         
     739 
     740            if(delegateAttendee[participant]) 
     741                return(null); 
     742 
     743            var attend = DataLayer.get('participant', (participant.id || participant)); 
     744            attend.user = DataLayer.get('user', attend.user); 
     745 
     746            statusParticipants[ statusLabels[attend.status] ]++;     
     747 
     748            if(attend.user.mail == User.me.mail) 
     749                isAttendee = true; 
     750 
     751            if( attend.user.id ===  me.id ){ 
     752                participantInfo.user = { 
     753                    id: attend.id, 
     754                    status : attend.status, 
     755                    delegatedFrom: attend.delegatedFrom || '0', 
     756                    acl: attend.acl, 
     757                    receiveNotification : attend.receiveNotification, 
     758                    alarms : $.map(attend.alarms || [], function( alarm ){ 
     759                    var alarm = DataLayer.get('alarm', alarm); 
     760                    return (alarm == "" ? (null) : alarm); 
     761                    }) 
     762                }; 
     763                me = attend; 
     764                return(null); 
     765            }; 
     766 
     767            var person = { 
     768                id: attend.id, 
     769                name: attend.user.name != 'false' ? attend.user.name : '', 
     770                mail: attend.user.mail, 
     771                status : attend.status, 
     772                isExternal: attend.isExternal, 
     773                acl: attend.acl, 
     774                delegatedFrom: attend.delegatedFrom 
     775            }; 
     776 
     777            if(!!parseInt(attend.delegatedFrom)){ 
     778                delegatedFrom[attend.delegatedFrom] = DataLayer.copy(person); 
     779                return(null); 
     780            } 
     781 
     782            if( !!parseInt(attend.isOrganizer)){ 
     783                participantInfo.organizer = DataLayer.copy(person); 
     784                return(null); 
     785            };                   
     786 
     787            return (person); 
     788        }), 
     789        organizer: participantInfo.organizer || me, 
     790        alarms: !!participantInfo.user ? participantInfo.user.alarms : [], 
     791        status: !!participantInfo.user ? participantInfo.user.status : 1, 
     792        isAttendee: isAttendee, 
     793        me: me, 
     794        delegatedFrom: delegatedFrom, 
     795        statusParticipants: (objEvent.sizeAttendees != "") ? objEvent.statusAttendees : statusParticipants, 
     796        sizeAttendeeLimit: (objEvent.sizeAttendees != "") ? objEvent.sizeAttendees : false 
     797        }; 
     798    }); 
     799    console.log(res[0]); 
     800    return (notArray ? res[0] : res); 
     801    } 
     802}); 
    598803 
    599804function decodeOwnerCalendar(calendar){ 
     
    10551260                            ] 
    10561261                        ], 
    1057                         ['IN', 'calendar',  Calendar.calendarIds] 
     1262                        ['IN', 'calendar',  $.merge( Calendar.calendarIds, Calendar.groupIds )] 
    10581263                ],  
    10591264            criteria: { 
  • sandbox/2.4.2-expresso1/prototype/modules/calendar/js/helpers.js

    r6857 r6876  
    942942    callbackAttendee(); 
    943943/** 
    944                                 Opções de delegação do participante/organizer 
    945                         */               
     944Opções de delegação do participante/organizer 
     945*/               
    946946blkAddAtendee.find(".button.participant-delegate").button({ 
    947947    icons: { 
     
    971971 
    972972UI.dialogs.addEvent.find(".attendee-list-add .add-attendee-input input").Watermark("digite um email para convidar"); 
    973 /* Trata a edição de um novo participante adicionado 
    974                         *  
    975                         */ 
     973/*  
     974 * Trata a edição de um novo participante adicionado 
     975 */ 
    976976var hasNewAttendee = false; 
    977977                         
     
    11971197} else if (!skipAddNewLine) {            
    11981198    /** 
    1199                                                 * a) salva como novo usuario externo no banco (apenas com email) e... 
    1200                                                 * adiciona novo contato externo à lista de convidados 
    1201                                                 */ 
     1199    * a) salva como novo usuario externo no banco (apenas com email) e... 
     1200    * adiciona novo contato externo à lista de convidados 
     1201    */ 
    12021202 
    12031203    userId = DataLayer.put('user', { 
     
    15601560} 
    15611561 
    1562 disponibily(objEvent, path, attendees); 
     1562disponibily(objEvent, path, attendees, 'event'); 
    15631563 
    15641564/*Seleciona a agenda padrão para criação de um evento*/ 
     
    15761576 
    15771577UI.dialogs.addEvent.dialog('open'); 
    1578 //$('[href="#calendar_addevent_details7"]').trigger('click'); 
    1579 //$('[href="#calendar_addevent_details2"]').trigger('click'); 
     1578 
    15801579} 
    15811580 
  • sandbox/2.4.2-expresso1/prototype/modules/calendar/js/init.js

    r6857 r6876  
    247247 
    248248                            $('.qtip-active .button.advanced').button().click(function(){ 
    249                                  
    250                                         $(componente).qtip('destroy'); 
    251                                          
     249 
    252250                                var startEvent = new Date(); 
    253251                                        var configData = (startEvent.toString('mm') < 30)  ? {minutes: (30 - parseInt(startEvent.toString('mm')))} : {hours: 1, minutes: '-'+startEvent.toString('mm')}; 
     
    255253                         
    256254                                                var componente = $(this); 
    257  
    258                                         taskDetails({  
     255                        var description = $('div.qtip div.add-simple-task textarea[name="description"]').val(); 
     256 
     257                                        taskDetails({ 
     258                            summary: $('div.qtip div.add-simple-task input[name="summary"]').val(), 
     259                            description: description == 'Descrição' ? '' : description, 
    259260                                                startTime: startEvent.getTime(), 
    260261                                                endTime: dateCalendar.decodeRange(startEvent, (!!User.preferences.defaultCalendar ? (   !!Calendar.signatureOf[User.preferences.defaultCalendar].calendar.defaultDuration ?   
    261262                                                        (Calendar.signatureOf[User.preferences.defaultCalendar].calendar.defaultDuration) : (User.preferences.defaultDuration)) : (User.preferences.defaultDuration))) 
    262263                                        }, true ); 
    263                          
     264 
     265                        $(componente).qtip('destroy'); 
    264266                            }); 
    265267                                                                 
     
    450452                            }else{ 
    451453                                var schedulable = DataLayer.get( "schedulable", evt.id); 
    452                                 schedulable.calendar = evt.calendar; 
     454                                schedulable.group = evt.calendar; 
    453455                                eventDetails( schedulable, true); 
    454456                            } 
    455457                        } 
    456             }else 
    457                                 alert('Editar Tarefa'); 
     458            }else{ 
     459                var task = DataLayer.get( "schedulable", evt.id); 
     460                task.group = evt.calendar; 
     461                taskDetails( task, true); 
     462            } 
    458463                }, 
    459464                 
  • sandbox/2.4.2-expresso1/prototype/modules/calendar/js/load.js

    r6768 r6876  
    5454    } 
    5555 
    56     this.calendarIds = [], this.signatureOf = {}, this.calendars = [], this.calendarOf= {}; 
     56    this.calendarIds = [], this.groupIds = [], this.signatureOf = {}, this.calendars = [], this.groups = [], this.calendarOf = {}, this.groupOf= {}; 
    5757 
    5858    for( var i = 0; i < this.signatures.length; i++ ){ 
    5959        if(this.signatures[i].isOwner == "0") 
    6060            this.signatures[i].permission =  DataLayer.encode('calendarToPermission:detail', this.signatures[i].permission); 
    61         this.signatureOf[ this.calendarIds[i] = ( this.calendars[ this.calendars.length ] = this.calendarOf[ this.signatures[i].id ] = this.signatures[i].calendar ).id ] = this.signatures[i]; 
     61 
     62        if(this.signatures[i].calendar.type == '1') 
     63           this.signatureOf[ this.groupIds[this.groupIds.length] = ( this.groups[ this.groups.length ] = this.groupOf[ this.signatures[i].id ] = this.signatures[i].calendar ).id ] = this.signatures[i]; 
     64        else 
     65           this.signatureOf[ this.calendarIds[ this.calendarIds.length] = ( this.calendars[ this.calendars.length ] = this.calendarOf[ this.signatures[i].id ] = this.signatures[i].calendar ).id ] = this.signatures[i]; 
    6266    } 
    6367 
  • sandbox/2.4.2-expresso1/prototype/modules/calendar/js/map.disponibility.js

    r6444 r6876  
    88 
    99 
    10 function updateMap(data){ 
    11         var start_date = $(".new-event-win.active .start-date").val(); 
    12         var end_date   = $(".new-event-win.active .end-date").val(); 
    13         var start_time = $(".new-event-win.active .start-time").val(); 
    14         var end_time   = $(".new-event-win.active .end-time").val(); 
    15         var isAllDay   = $('.new-event-win.active input[name="allDay"]').is(':checked'); 
     10function updateMap(viewName){ 
     11        var start_date = $(".new-"+viewName+"-win.active .start-date").val(); 
     12        var end_date   = $(".new-"+viewName+"-win.active .end-date").val(); 
     13        var start_time = $(".new-"+viewName+"-win.active .start-time").val(); 
     14        var end_time   = $(".new-"+viewName+"-win.active .end-time").val(); 
     15        var isAllDay   = $('.new-'+viewName+'-win.active input[name="allDay"]').is(':checked'); 
    1616         
    1717        var formatString = User.preferences.dateFormat + " " + User.preferences.hourFormat; 
     
    2121         
    2222         
    23         var event = $("#new_event_map").fullCalendar('clientEvents', 'map')[0]; 
     23        var event = $('.new-'+viewName+'-win .map_disponibility').fullCalendar('clientEvents', 'map')[0]; 
    2424         
    2525         
     
    2828                        event.end = endDate; 
    2929                        event.allDay = isAllDay; 
    30                         $("#new_event_map").fullCalendar( 'updateEvent', event ) 
     30                        $('.new-'+viewName+'-win .map_disponibility').fullCalendar( 'updateEvent', event ) 
    3131                } 
    3232                 
     
    3535 
    3636 
    37 function disponibily(objEvent, path, attendees){ 
     37function disponibily(objEvent, path, attendees, viewName){ 
    3838        var formatString = User.preferences.dateFormat + " " + User.preferences.hourFormat; 
    3939        var startDate = Date.parseExact( objEvent.startDate + " " + $.trim(objEvent.startHour) , formatString ); 
    4040        var endDate = Date.parseExact( objEvent.endDate + " " + $.trim(objEvent.endHour) , formatString ); 
     41 
     42    var dialogName = {event: 'addEvent', task: 'addTask', activity: 'addActivity'} 
    4143          
    4244        var mapHtml = DataLayer.render( path+'templates/availability_map.ejs', {}); 
    43         $("#calendar_addevent_details7").html(mapHtml); 
    44         $("#new_event_map").fullCalendar(DataLayer.merge({ 
     45        $('#calendar_add'+viewName+'_details7').html(mapHtml); 
     46        $('.new-'+viewName+'-win .map_disponibility').fullCalendar(DataLayer.merge({ 
    4547                height : 300, 
    4648                timeFormat: User.preferences.hourFormat, 
     
    7779                        if(!allDay){ 
    7880                                $('[name="allDay"]').attr("checked", false);  
    79                                 UI.dialogs.addEvent.find('.start-time, .end-time').removeClass('hidden'); 
     81                                UI.dialogs[dialogName[viewName]].find('.start-time, .end-time').removeClass('hidden'); 
    8082                                 
    8183                                $('[name="startHour"]').val(start.toString(User.preferences.hourFormat)); 
     
    8587                        }else{ 
    8688                                $('[name="allDay"]').attr("checked", true);  
    87                                 UI.dialogs.addEvent.find('.start-time, .end-time').addClass('hidden'); 
     89                                UI.dialogs[dialogName[viewName]].find('.start-time, .end-time').addClass('hidden'); 
    8890                        } 
    8991                }, 
     
    98100                                className : "map-event", 
    99101                                backgroundColor : "transparent !important", 
    100                                 editable : objEvent.acl.write || objEvent.acl.organization 
     102                                editable : objEvent.acl ? (objEvent.acl.write || objEvent.acl.organization) : true 
    101103                        } 
    102104                ], 
     
    104106                        if(event.allDay){ 
    105107                                $('[name="allDay"]').attr("checked", true);  
    106                                 UI.dialogs.addEvent.find('.start-time, .end-time').addClass('hidden'); 
     108                                UI.dialogs[dialogName[viewName]].find('.start-time, .end-time').addClass('hidden'); 
    107109                                 
    108110                                $('[name="startDate"]').val(dateCalendar.toString(event.start, User.preferences.dateFormat));                            
     
    111113                        }else{ 
    112114                                $('[name="allDay"]').attr("checked", false);  
    113                                 UI.dialogs.addEvent.find('.start-time, .end-time').removeClass('hidden'); 
     115                                UI.dialogs[dialogName[viewName]].find('.start-time, .end-time').removeClass('hidden'); 
    114116                         
    115117                                $('[name="startHour"]').val(dateCalendar.formatDate(event.start, User.preferences.hourFormat)); 
     
    132134        var eventSource = new Array(); 
    133135        var updateMapView = function(){ 
    134                 updateMap(); 
    135                 var view = $("#new_event_map").fullCalendar('getView'); 
     136                updateMap(viewName); 
     137                var view = $('.new-'+viewName+'-win .map_disponibility').fullCalendar('getView'); 
    136138                var map = {}; 
    137                 $("#new_event_map").fullCalendar( 'removeEventSource', eventSource ); 
     139                $('.new-'+viewName+'-win .map_disponibility').fullCalendar( 'removeEventSource', eventSource ); 
    138140                eventSource = new Array();       
    139141                map = {startTime : view.start.getTime(), endTime : view.end.getTime(), attendees: {}, timezone: (objEvent.timezone || User.preferences.timezone)}; 
     
    167169                } 
    168170                if(eventSource.length) 
    169                         $("#new_event_map").fullCalendar( 'addEventSource', eventSource ); 
     171                        $('.new-'+viewName+'-win .map_disponibility').fullCalendar( 'addEventSource', eventSource ); 
    170172        };  
    171         $('[href="#calendar_addevent_details7"]').click(function(eventData, eventObject){ 
    172                 $("#new_event_map").fullCalendar( 'gotoDate', Date.parseExact($('[name="startDate"]').val() + " " + $.trim($('[name="startHour"]').val()), formatString) , formatString); 
    173                 //if(eventObject == undefined) 
    174                         updateMapView(); 
     173        $('[href="#calendar_add'+viewName+'_details7"]').click(function(eventData, eventObject){ 
     174                $('.new-'+viewName+'-win .map_disponibility').fullCalendar( 'gotoDate', Date.parseExact($('[name="startDate"]').val() + " " + $.trim($('[name="startHour"]').val()), formatString) , formatString); 
     175                  updateMapView(); 
    175176        });      
    176         $("#new_event_map").find(".fc-button-prev, .fc-button-next, .fc-button-today").click(function(){ 
     177        $('.new-'+viewName+'-win .map_disponibility').find(".fc-button-prev, .fc-button-next, .fc-button-today").click(function(){ 
    177178                updateMapView(); 
    178179        }); 
  • 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.