Index: /sandbox/2.4.2-expresso1/prototype/modules/calendar/interceptors/DBMapping.php
===================================================================
--- /sandbox/2.4.2-expresso1/prototype/modules/calendar/interceptors/DBMapping.php	(revision 6985)
+++ /sandbox/2.4.2-expresso1/prototype/modules/calendar/interceptors/DBMapping.php	(revision 6988)
@@ -13,20 +13,19 @@
     {
 
-    	if (!is_numeric($params['startTime']))
+    	if (isset($params['startTime']) && !is_numeric($params['startTime'])){
     	    $params['startTime'] = self::parseTimeDate($params['startTime'], $params['timezone']);
-
-    	if (!is_numeric($params['endTime'])) {
+	    $params['rangeStart'] = $params['startTime'];
+	}
+    	if (isset($params['endTime']) && !is_numeric($params['endTime'])) {
     	    $params['endTime'] = self::parseTimeDate($params['endTime'], $params['timezone']);
 
     	    if ($params['allDay'])
     		$params['endTime'] = $params['endTime'] + 86400000;
+	    
+	    $params['rangeEnd'] = $params['endTime'];
     	}
 
         if (isset($params['due']) && $params['due'] != '' && !is_numeric($params['due']))
             $params['due'] = self::parseTimeDate($params['due'], $params['timezone']);
-
-
-    	$params['rangeEnd'] = $params['endTime'];
-    	$params['rangeStart'] = $params['startTime'];
 
     	///////////////////////////////////////////////////////////////////
Index: /sandbox/2.4.2-expresso1/prototype/modules/calendar/js/calendar.codecs.js
===================================================================
--- /sandbox/2.4.2-expresso1/prototype/modules/calendar/js/calendar.codecs.js	(revision 6985)
+++ /sandbox/2.4.2-expresso1/prototype/modules/calendar/js/calendar.codecs.js	(revision 6988)
@@ -391,4 +391,87 @@
 });
 
+DataLayer.codec( "schedulable", "taskEdit", {
+
+    decoder: function( evtObj ){
+	Encoder.EncodeType = "entity";
+	
+	if( notArray = $.type(evtObj) !== "array" )
+	    evtObj = [ evtObj ];
+
+	var pref = User.preferences;
+		
+	var res = $.map(evtObj, function( form ){
+			
+	    return DataLayer.merge({
+		id: form.idTask,
+		percentage: form.percentage,
+		type: '2', 
+		status: form.taskStatus,
+		participants : $.map(form.attendee, function( attendee, i ){
+		    if(isNaN(attendee)){
+			return{
+			    id: attendee,
+			    acl: form.attendeeAcl[i],
+			    delegatedFrom: !!form.delegatedFrom[i] ? form.delegatedFrom[i] : 0,
+			    isOrganizer: (form.attendee_organizer == attendee ? 1 : 0 ),
+			    isExternal: !!parseInt(form.attendeeType[i]) ? 1 : 0,
+			    acl: form.attendeeAcl[i].replace('o', '')
+			};
+		    }else{
+			if(DataLayer.get('participant', attendee).user == User.me.id){
+			    var me = {
+				user: User.me.id,
+				status: form.status,
+				id: attendee,
+				isOrganizer: 0,
+				receiveNotification : (!!form.receiveNotification ? 1 : 0),
+				alarms: typeof(form.alarmTime) != 'undefined' ? 
+				$.map( form.alarmTime || [], function( alarmTime, i ){
+
+				    if( alarmTime === "" )
+					return( null );
+
+				    return !!form.alarmId[i] ?
+				    {
+					type: form.alarmType[i], 
+					unit: form.alarmUnit[i], 
+					time: form.alarmTime[i], 
+					id: form.alarmId[i]
+					} : 
+{
+					type: form.alarmType[i],
+					unit: form.alarmUnit[i], 
+					time: form.alarmTime[i]
+					};
+				}) : []
+			    };
+							
+			    if(form.startDate){
+				var tzId =  DataLayer.get('schedulable', form.idEvent).timezone || User.preferences.timezone,
+				formatString = pref.dateFormat + " " + pref.hourFormat;
+								
+				DataLayer.put('notification', {
+				    participant: me.id,
+				    type: 'suggestion',
+				    startTime: Date.parseExact(form.startDate + (!!form.allDay ? " 00:00": " "+$.trim(form.startHour)) , formatString ).toString('yyyy-MM-dd HH:mm:00'),
+				    endTime:  Date.parseExact(form.endDate + ( !!form.allDay ? " 00:00": " "+$.trim(form.endHour)), formatString ).toString('yyyy-MM-dd HH:mm:00'),
+				    allDay: ( !!form.allDay ? 1 : 0 ),
+				    schedulable: form.idEvent
+				});
+							
+			    }
+			    return me;
+			}else return(null);
+		    };
+		})
+	    }, (form.group != form.lastGroup? {calendar: form.group, lastCalendar: form.lastGroup} : {}))
+	});
+	return notArray ? res[0] : res;
+    },
+
+    encoder: function( evtObj ){}
+
+});
+
 DataLayer.codec( "schedulable", "preview", {
 
@@ -794,4 +877,5 @@
         }),
         organizer: participantInfo.organizer || me,
+	isOrganizer: (participantInfo.organizer || me).id == me.id,
         alarms: !!participantInfo.user ? participantInfo.user.alarms : [],
         status: !!participantInfo.user ? participantInfo.user.status : 1,
Index: /sandbox/2.4.2-expresso1/prototype/modules/calendar/js/helpers.js
===================================================================
--- /sandbox/2.4.2-expresso1/prototype/modules/calendar/js/helpers.js	(revision 6985)
+++ /sandbox/2.4.2-expresso1/prototype/modules/calendar/js/helpers.js	(revision 6988)
@@ -2629,5 +2629,6 @@
     DataLayer.render( 'templates/import_export.ejs', {
 	calendars: typeView == 0 ? Calendar.calendars : Calendar.groups, 
-	owner: User.me.id
+	owner: User.me.id,
+	typeView: typeView
 	}, function( html ){
 
Index: /sandbox/2.4.2-expresso1/prototype/modules/calendar/templates/task_add.ejs
===================================================================
--- /sandbox/2.4.2-expresso1/prototype/modules/calendar/templates/task_add.ejs	(revision 6981)
+++ /sandbox/2.4.2-expresso1/prototype/modules/calendar/templates/task_add.ejs	(revision 6988)
@@ -1,9 +1,9 @@
 <div title="Criar Tarefa" class="div-addtask content">
-    <form method="POST" action="schedulable:task" class="form-addtask content">
+    <form method="POST" action="<%= data.task.isOrganizer ? 'schedulable:task' : 'schedulable:taskEdit' %>" class="form-addtask content">
 
 	<fieldset id="calendar_addtask_details1">
 		<legend class="hidden">Detalhes da tarefa</legend>
 		<p class="input-group">
-		    <input type="text" class="h1" name="summary" value="<%= (data.task.summary) ? data.task.summary : '' %>"/>
+		    <input type="text" class="h1" <%= data.task.isOrganizer ? '' : 'disabled="disabled"'%> name="summary" value="<%= (data.task.summary) ? data.task.summary : '' %>"/>
 		    <% if( data.task.id ){ %>
 			    <input type="hidden" class="id-task" name="idTask" value="<%= data.task.id %>"/>
@@ -14,19 +14,19 @@
 		</p>
 		<p class="input-group date-info">
-			<input type="text" class="date start-date" value="<%= (data.task.startDate) ? data.task.startDate : '' %>" name="startDate" />
-			<input type="text" class="time start-time<%= (data.task.allDay) ? ' hidden' : '' %>" value="<%= (data.task.startHour) ? data.task.startHour : '' %>" name="startHour" /> 
+			<input type="text" class="date start-date" <%= data.task.isOrganizer ? '' : 'disabled="disabled"'%> value="<%= (data.task.startDate) ? data.task.startDate : '' %>" name="startDate" />
+			<input type="text" class="time start-time<%= (data.task.allDay) ? ' hidden' : '' %>" <%= data.task.isOrganizer ? '' : 'disabled="disabled"'%> value="<%= (data.task.startHour) ? data.task.startHour : '' %>" name="startHour" /> 
 			<span>até</span>
-			<input type="text" class="date end-date" value="<%= (data.task.endDate) ? data.task.endDate : '' %>" name="endDate" />
-			<input type="text" class="time end-time<%= (data.task.allDay) ? ' hidden' : '' %>" value="<%= (data.task.endHour) ? data.task.endHour : '' %>" name="endHour" />
+			<input type="text" class="date end-date" value="<%= (data.task.endDate) ? data.task.endDate : '' %>" <%= data.task.isOrganizer ? '' : 'disabled="disabled"'%> name="endDate" />
+			<input type="text" class="time end-time<%= (data.task.allDay) ? ' hidden' : '' %>" <%= data.task.isOrganizer ? '' : 'disabled="disabled"'%> value="<%= (data.task.endHour) ? data.task.endHour : '' %>" name="endHour" />
 
 				<span class="previsao-termino">Previsão término:</span>
-				<input type="text" name="dueDate" class="date date-previsao" value="<%= data.task.dueDate %>">
-				<input type="text" name="dueTime" class="time time-previsao" value="<%= data.task.dueTime %>">
-
-				<a href="#" class="calendar_addtask_details_lnk_timezone">Fuso horário</a>
+				<input type="text" name="dueDate" class="date date-previsao" <%= data.task.isOrganizer ? '' : 'disabled="disabled"'%> value="<%= data.task.dueDate %>">
+				<input type="text" name="dueTime" class="time time-previsao" <%= data.task.isOrganizer ? '' : 'disabled="disabled"'%> value="<%= data.task.dueTime %>">
+
+				<a href="#" class="calendar_addtask_details_lnk_timezone" <%= data.task.isOrganizer ? '' : 'disabled="disabled"'%>>Fuso horário</a>
 			
 			
 <!--			<input type="text" name="timezone" style="display: none;" />-->
-			<select name="timezone" class="hidden calendar-addtask-details-txt-timezone">
+			<select name="timezone" class="hidden calendar-addtask-details-txt-timezone" <%= data.task.isOrganizer ? '' : 'disabled="disabled"'%>>
 				<option value="">- None selected -</option>
 				<% for( var tzId in data.task.timezones ){ %>
@@ -34,4 +34,7 @@
 				<% } %>
 			</select>
+
+			<a class="button suggestion-hours small hidden" href="#">Sugerir horário</a>
+
 
 		</p>
@@ -47,5 +50,5 @@
 		
 		<p class="input-group task-type">
-			<input type="checkbox" name="allDay" value="true" <%= (data.task.allDay) ? 'checked="checked"' : '' %>/>
+			<input type="checkbox" name="allDay" value="true" <%= (data.task.allDay) ? 'checked="checked"' : '' %> <%= data.task.isOrganizer ? '' : 'disabled="disabled"'%>/>
 			<label for="allDay">Dia inteiro</label>
 <!--
@@ -56,5 +59,5 @@
 				% Conclusão: <input type="text" name="percentage" class="done" value="<%= data.task.percentage %>">
 				<span style="margin:0 0 0 5px;">Status:</span> 
-                <select name="taskStatus" style="margin: 0 0 0 5px;">
+		    <select name="taskStatus" style="margin: 0 0 0 5px;">
                     <option class="taskStatus-noAction"<%= (data.task.taskStatus == '1') ? 'selected="selected"' : '' %> value="1">Sem ações</option>
                     <option class="taskStatus-inProcess"<%= (data.task.taskStatus == '2') ? 'selected="selected"' : '' %> value="2">Em Processo</option>
@@ -63,5 +66,5 @@
 				</select>
 				<span style="margin:0 0 0 5px;">Prioridade:</span> 
-				<select name="priority">
+				<select name="priority" <%= data.task.isOrganizer ? '' : 'disabled="disabled"'%>>
 					<option <%= (data.task.priority == '1') ? 'selected="selected"' : '' %> value="1">Alta</option>
 					<option <%= (data.task.priority == '2') ? 'selected="selected"' : '' %> value="2">Normal</option>
@@ -84,5 +87,5 @@
 		<p class="input-group">
 			<label for="calendar_addtask_details_txtarea_description" class="for-textarea" >Descrição</label>
-			<textarea name="description"><%=(data.task) ? data.task.description : '' %></textarea>
+			<textarea name="description" <%= data.task.isOrganizer ? '' : 'disabled="disabled"'%>><%=(data.task) ? data.task.description : '' %></textarea>
 		</p>
 
@@ -208,9 +211,9 @@
             <div class="button-files-upload">
                 <!-- The fileinput-button span is used to style the file input field as button --> 
-		      <span class="button btn-success fileinput-button">
+		      <span class="button btn-success fileinput-button" <%= data.task.isOrganizer ? '' : 'disabled="disabled"'%>>
                     <span><i class="icon-plus icon-white"></i> Adicionar</span>
-                    <input type="file" name="files[]" multiple>
+                    <input type="file" name="files[]" multiple <%= data.task.isOrganizer ? '' : 'disabled="disabled"'%>>
                 </span>
-		<button type="button" class="button btn-danger delete <%= data.task && data.task.attachments && data.task.attachments.length ? '' : 'hidden' %>">
+		<button type="button" class="button btn-danger delete <%= data.task && data.task.attachments && data.task.attachments.length ? '' : 'hidden' %>" <%= data.task.isOrganizer ? '' : 'disabled="disabled"'%>>
 			<i class="icon-trash icon-white"></i> Remover Todos
 		</button>
Index: /sandbox/2.4.2-expresso1/prototype/modules/calendar/templates/import_export.ejs
===================================================================
--- /sandbox/2.4.2-expresso1/prototype/modules/calendar/templates/import_export.ejs	(revision 5901)
+++ /sandbox/2.4.2-expresso1/prototype/modules/calendar/templates/import_export.ejs	(revision 6988)
@@ -15,5 +15,5 @@
 		<input type="hidden" name="type" value="iCal">
 		<input type="hidden" name="params[owner]" value="<%= data.owner %>">
-                <legend class="hidden">Importar agenda</legend>
+                <legend class="hidden">Importar <%=data.typeView == 0 ? 'eventos' : 'tarefas'%></legend>
                 <p class="input-group">
                         <label for="data">Arquivo:</label>
@@ -21,5 +21,5 @@
                         <input type="file" name="data" value=""/>
                         <span class="tip">Escolha o arquivo que contenha um ou vários eventos. A Agenda do Expresso pode importar informações de evento no formato iCal.</span>
-                        <label for="calendar">Agenda:</label>
+                        <label for="calendar"><%=data.typeView == 0 ? 'Agenda:' : 'Grupo:'%></label>
                         <select name="params[calendar]">
 			<% for( var i = 0; i < data.calendars.length; i++ ){ %>
@@ -27,5 +27,5 @@
 			<% } %>
                         </select>
-                        <span class="tip">Agenda da qual os eventos serão importados</span>
+                        <span class="tip"><%=data.typeView == 0 ? 'Agenda da' : 'Grupo do'%> qual os eventos serão importados</span>
                 </p>
         </fieldset>
@@ -42,5 +42,5 @@
                 <legend class="hidden">Exportar agenda</legend>
                 <p class="input-group">
-                        <label for="calendar">Agenda:</label>
+                        <label for="calendar"><%=data.typeView == 0 ? 'Agenda:' : 'Grupo:'%></label>
                         <select name="calendar">
                             <!--<option value="cal_all">Todas agendas</option>-->
@@ -49,5 +49,5 @@
 			    <% } %>
                         </select>
-                        <span class="tip">Escolha a agenda que deseja exportar. A Agenda do Expresso pode exportar informações de evento no formato iCal.</span>
+                        <span class="tip">Escolha <%=data.typeView == 0 ? 'a agenda' : 'o grupo'%> que deseja exportar. <%=data.typeView == 0 ? 'A Agenda' : 'O Grupo'%> do Expresso pode exportar informações de <%=data.typeView == 0 ? 'eventos' : 'tarefas'%> no formato iCal.</span>
                 </p>
         </fieldset>
Index: /sandbox/2.4.2-expresso1/prototype/modules/calendar/templates/task_activity_add.ejs
===================================================================
--- /sandbox/2.4.2-expresso1/prototype/modules/calendar/templates/task_activity_add.ejs	(revision 6945)
+++ /sandbox/2.4.2-expresso1/prototype/modules/calendar/templates/task_activity_add.ejs	(revision 6988)
@@ -1,4 +1,4 @@
     <dl class="block-activity-group-select activitys-list">
-        <dt class="activity-group-select">Grupo de evento</dt>
+        <dt class="activity-group-select">Grupo de tarefas</dt>
         <dd class="group-select">
             <ul class="activity-group-select">
Index: /sandbox/2.4.2-expresso1/prototype/modules/calendar/templates/attendees_task.ejs
===================================================================
--- /sandbox/2.4.2-expresso1/prototype/modules/calendar/templates/attendees_task.ejs	(revision 6974)
+++ /sandbox/2.4.2-expresso1/prototype/modules/calendar/templates/attendees_task.ejs	(revision 6988)
@@ -15,12 +15,12 @@
                 <%}%>
             </select>
-				<% if (data.task.id && (data.task.me.id != data.task.organizer.id) && !data.task.delegatedFrom[data.task.me.id]) { %>
-					<fieldset class="add-attendee-options-read">
-						<a href="#" class="button participant-delegate add-attendee-options-button">Delegar participaÃ§Ã£o a um novo participante</a>
-					</fieldset>
-				<%}%>
+	    <% if (data.task.id && !data.task.delegatedFrom[data.task.me.id]) { %>
+		    <fieldset class="add-attendee-options-read">
+			    <a href="#" class="button participant-delegate add-attendee-options-button">Delegar participação a um novo participante</a>
+		    </fieldset>
+	    <%}%>
             <p class="input-group request-update <%=data.task.delegatedFrom[data.task.me.id] ? '' : "hidden"%>">
                 <input type="checkbox" name="receiveNotification" value="true" <%=data.task.me.receiveNotification =='1' ? 'checked="checked"' : ''%>/>
-                <label for="request-update">Receber atualizaÃ§Ãµes</label>
+                <label for="request-update">Receber atualizações</label>
             </p>
             
@@ -35,5 +35,5 @@
                 <label for="attendee" title="<%=  data.task.me.user ? data.task.me.user.mail : data.task.me.mail %>" class="mail hidden"></label>
                 
-                <li class="organizer <%= data.task.me.id == data.task.organizer.id ? "hidden" : "" %>"> 
+                <li class="organizer <%= data.task.isOrganizer ? "hidden" : "" %>"> 
                     <div style="overflow:hidden; width:100%; display:table;">
                         <span class="space-status ui-icon <%=iconStatus[data.task.organizer.status]%>" title="<%=legendStatus[data.task.organizer.status]%>"></span>
@@ -74,5 +74,5 @@
                             <span class="space-special ui-icon <%= !!data.task.delegatedFrom[data.task.attendee[i].id] ? iconStatus[5] : iconStatus[6]%>" title="<%=!!data.task.delegatedFrom[data.task.attendee[i].id] ? legendStatus[5] : legendStatus[6]%>"></span>
 
-                            <input type="checkbox" class="new" value="<%= data.task.attendee[i].id %>">
+                            <input type="checkbox" class="new" <%= data.task.isOrganizer ? '' : 'disabled="disabled"'%> value="<%= data.task.attendee[i].id %>">
 
                             <input type="hidden" name="attendee[]" value="<%=data.task.attendee[i].id%>">
@@ -83,9 +83,10 @@
                             <label title="<%= data.task.attendee[i].mail ? data.task.attendee[i].mail : ''%>" class="mail <%= !!data.task.delegatedFrom[data.task.attendee[i].id] ? "name-special-delegated" : "name-special"%>"><%= data.task.attendee[i].mail ? data.task.attendee[i].mail : '' %></label>
                             <span class="ui-icon ui-icon-close ui-corner-all ui-icon-float-right"></span>
-                        </div> 
-                        <div class="attendee-options">
-                            <a class="button close new">Remover</a>
                         </div>
-
+			<%if(data.isOrganizer){%>
+			    <div class="attendee-options">
+				<a class="button close new">Remover</a>
+			    </div>
+			<%}%>
 
                         <%if(!!data.task.delegatedFrom[data.task.attendee[i].id]){%>
@@ -117,8 +118,8 @@
             </ul>
         </dd>
-        <dd class="attendee-list-add">
+        <dd class="attendee-list-add" <%= data.isOrganizer ? '' : 'disabled="disabled"'%>>
             <fieldset class="add-attendee-input input-field-rounded ui-corner-all">
-                <span class="ui-icon ui-icon-plus"></span>
-                <input class="plus" type="text" />
+                <span class="ui-icon ui-icon-plus" <%= data.isOrganizer ? '' : 'disabled="disabled"'%>></span>
+                <input class="plus" <%= data.isOrganizer ? '' : 'disabled="disabled"'%> type="text" />
             </fieldset>
         </dd>
@@ -137,5 +138,5 @@
           <ul class="attendees-count">
             <li><label>Sim:</label><%=data.task.statusParticipants.accepted%></li>
-            <li><label>NÃ£o:</label><%=data.task.statusParticipants.cancelled%></li>
+            <li><label>Não:</label><%=data.task.statusParticipants.cancelled%></li>
             <li><label>Talvez:</label><%=data.task.statusParticipants.tentative%></li>
             <li><label>Aguardando:</label><%=data.task.statusParticipants.unanswered%></li>
@@ -151,5 +152,5 @@
     </dl>
 
-<dl class="block-add-attendee search">
+    <dl class="block-add-attendee search <%= data.isOrganizer ? '' : 'hidden'%>">
     <dt class="add-attendee search">Adicionar outros convidados</dt>
     <dd class="add-attendee">
