Index: trunk/prototype/modules/calendar/js/init.js
===================================================================
--- trunk/prototype/modules/calendar/js/init.js	(revision 6444)
+++ trunk/prototype/modules/calendar/js/init.js	(revision 6996)
@@ -147,4 +147,161 @@
 			}, true );
 		});
+		
+		var currentToolTip = null;
+		$('#divAppbox').on('scroll',function(){
+			if ($(".new-task").length)			
+				currentToolTip.qtip('destroy');
+		});
+		
+		/* Quick add task
+      	-----------------------------------------------------------------*/
+		$(".button.add.add-task").click(function(event){
+			currentToolTip = $(this);
+			var componente = $(this);
+			
+            if(!$('div.qtip.qtip-blue.new-task').length){
+
+                $('div.qtip.qtip-blue').remove();
+
+    			$(componente).qtip({
+    			    show: {
+    			    	ready: true, 
+    		    		solo: true, 
+    		    		when: {
+    			    		event: 'click'
+    			    	}
+    				},
+    				hide: false,
+    				content: {
+    					text: $('<div></div>').html( DataLayer.render( 'templates/task_quick_add.ejs', {"componente" : componente} ) ),
+    					title: {
+    						text:'Nova tarefa', 
+    						button: '<a class="button close" href="#">close</a>'
+    					}
+    				},
+    				style: {
+    					name: 'blue', 
+    			    	tip: {
+    						corner: 'leftMiddle'
+    					}, 
+    		    		border: {
+    					    width: 4, 
+    					    radius: 8
+    					}, 
+    			    	width: {
+    						min: 225, 
+    					    max:225
+    					}
+    		   		},
+    		    	position: {
+    		    		corner: {
+    					    target: 'rightMiddle',
+    					    tooltip: 'leftMiddle'
+    		    		},
+    		    		adjust: {
+    					    x:0, 
+    					    y:0
+    		    		}
+    		    	}
+    		    })
+    	    	.qtip("api").onShow = function(arg0) {
+
+	    		/*------------------------------------------------------------------------*/
+	    		/*               Seta os valores padrões nos inputs do qtip               */
+	    		 $('div.qtip div.add-simple-task input.task').Watermark("Tarefa sem título");
+			     $('div.qtip div.add-simple-task textarea').Watermark("Descrição");
+    			/*------------------------------------------------------------------------*/
+
+    			    $('.qtip-active .button.close').button({
+    				icons: {
+    				    primary: "ui-icon-close"
+    				},
+    				text: false
+    			    })
+    			    .click(function(){
+    					$(componente).qtip('destroy');
+    			    });
+    							
+    			    $('.qtip-active .button.save').button().click(function(){
+    			    	
+    			    	var title = $('div.qtip div.add-simple-task input.task').val();
+    					var description = $('div.qtip div.add-simple-task textarea').val();
+
+    					var calendar, timezone = '';
+
+    					for (var i = 0; i < Calendar.signatures.length; i++){
+    						if(Calendar.signatures[i].type == 1 && Calendar.signatures[i].calendar.type == 1){
+    							calendar = Calendar.signatures[i].calendar.id;
+    							timezone = Calendar.signatures[i].calendar.timezone;
+    							break;
+    						}
+    					}
+
+    			    	DataLayer.put('schedulable', 
+    		    		{
+    		    			summary: title, 
+    		    			description: description, 
+    		    			type: '2', 
+    		    			calendar: calendar, 
+    		    			timezone: timezone,
+							status: '1',
+    		    			startTime: new Date().toString('yyyy-MM-dd 00:00:00'),
+    		    			endTime: new Date().toString('yyyy-MM-dd 00:00:00'),
+    		    			allDay: '1',
+					participants: 
+					[{  
+					    user: User.me.id, 
+					    isOrganizer: 1,
+					    acl: 'row'
+					}]
+    		    		});
+    			    	
+                        $(componente).qtip('destroy');
+
+                    });
+
+    			    $('.qtip-active .button.advanced').button().click(function(){
+
+    			    	var startEvent = new Date();
+    					var configData = (startEvent.toString('mm') < 30)  ? {minutes: (30 - parseInt(startEvent.toString('mm')))} : {hours: 1, minutes: '-'+startEvent.toString('mm')};
+    					startEvent.add(configData);
+    			
+						var componente = $(this);
+                        var description = $('div.qtip div.add-simple-task textarea[name="description"]').val();
+
+    					taskDetails({
+                            summary: $('div.qtip div.add-simple-task input[name="summary"]').val(),
+                            description: description == 'Descrição' ? '' : description,
+    						startTime: startEvent.getTime(),
+    						endTime: dateCalendar.decodeRange(startEvent, (!!User.preferences.defaultCalendar ? (	!!Calendar.signatureOf[User.preferences.defaultCalendar].calendar.defaultDuration ?  
+    							(Calendar.signatureOf[User.preferences.defaultCalendar].calendar.defaultDuration) : (User.preferences.defaultDuration)) : (User.preferences.defaultDuration)))
+    					}, true );
+
+                        $(componente).qtip('destroy');
+    			    });
+    								
+    				$('.qtip-active .button.cancel').button().click(function(){
+    					$(componente).qtip('destroy');
+    			    });
+    							
+    			    $('.qtip-active .button').button();
+    			
+    			$('div.qtip.qtip-blue.qtip-active').addClass('new-task');
+            }
+	}
+		});
+
+	$(".button.add.add-activity").click(function(event){
+			var startEvent = new Date();
+			var configData = (startEvent.toString('mm') < 30)  ? {minutes: (30 - parseInt(startEvent.toString('mm')))} : {hours: 1, minutes: '-'+startEvent.toString('mm')};
+			startEvent.add(configData); 
+			
+			activityDetails({ 
+				startTime: startEvent.getTime(),
+				endTime: dateCalendar.decodeRange(startEvent, (!!User.preferences.defaultCalendar ? (	!!Calendar.signatureOf[User.preferences.defaultCalendar].calendar.defaultDuration ?  
+						(Calendar.signatureOf[User.preferences.defaultCalendar].calendar.defaultDuration) : (User.preferences.defaultDuration)) : (User.preferences.defaultDuration)))
+			}, true );
+
+	});
 
 	var calendar = $('#calendar').fullCalendar(DataLayer.merge({ 
@@ -189,9 +346,21 @@
 			year: 'ano'
 		},
+		
+		eventRender: function( event, element, view ){
 		/*
-		eventRender: function( event, element, view ){
-			$(element).attr( 'event-id', event.id );
-		},
-		*/
+			 * TODO - Encontrar icones mais filé
+			 */
+			var img_icon = "";
+			if(event.type == 1)
+				img_icon = "mini-event.png";
+			if(event.type == 2)
+				img_icon = "mini-task.png";
+			if(event.type == 3)
+				img_icon = "activity_icon.jpg";
+
+			
+    	    element.find(".fc-event-inner.fc-event-skin").prepend($('<img style="width: 11px; height: 13px;" class="" src="../prototype/modules/calendar/img/' + img_icon + '"></img>'));
+		},
+		
 		select: function( start, end, allDay, event, view ){
 			if (view.name == "month") {
@@ -285,36 +454,48 @@
 		eventClick: function( evt, event, view ){
 			evt.id = evt.id.split('-')[0];
-                        if(evt.selectable){
-                            if(evt.isRepeat){
-                                $.Zebra_Dialog(evt.title + ' é um evento com repetição.', {
-                                        'type':     'question',
-                                        'overlay_opacity': '0.5',
-                                        'buttons':  ['Editar todas ocorrências', 'Editar essa ocorrência'],
-                                        'onClose':  function(clicked) {
-                                                if(clicked == 'Editar todas ocorrências') {
-                                                    eventDetails( DataLayer.get( "schedulable", evt.id), true);
-                                                }else{
-                                                    /*
-                                                    * TODO - repeat foi adicionado pois melhorias devem ser feitas no rollback do
-                                                    *DataLayer, repeat somente é usado quando se trata da criação de um evento
-                                                    *pela edição de uma ocorrência.
-                                                    */      
-                                                    var repeat = mount_exception(evt.id, evt.occurrence);
-                                                                                                  
-                                                    $('.calendar-copy-move input[name="typeEvent"]').val("3");
-                                                    
-                                                    eventDetails(copyAndMoveTo(false , evt.id , false, "3", evt), true, '', false, repeat);
-                                                }       
-                                        }
-                                });
-                                
-                            }else{
-				var schedulable = DataLayer.get( "schedulable", evt.id);
-				schedulable.calendar = evt.calendar;
-				eventDetails( schedulable, true);
-				
-			    }
-                                
+            
+            switch (parseInt(evt.type)){
+                case 1:
+                    if(evt.selectable){
+                        if(evt.isRepeat){
+                            $.Zebra_Dialog(evt.title + ' é um evento com repetição.', {
+                                'type':     'question',
+                                'overlay_opacity': '0.5',
+                                'buttons':  ['Editar todas ocorrências', 'Editar essa ocorrência'],
+                                'onClose':  function(clicked) {
+                                    if(clicked == 'Editar todas ocorrências') {
+                                        eventDetails( DataLayer.get( "schedulable", evt.id), true);
+                                    }else{
+                                        /*
+                                        * TODO - repeat foi adicionado pois melhorias devem ser feitas no rollback do
+                                        *DataLayer, repeat somente é usado quando se trata da criação de um evento
+                                        *pela edição de uma ocorrência.
+                                        */      
+                                        var repeat = mount_exception(evt.id, evt.occurrence);
+                                                                                          
+                                        $('.calendar-copy-move input[name="typeEvent"]').val("3");
+                                        
+                                        eventDetails(copyAndMoveTo(false , evt.id , false, "3", evt), true, '', false, repeat);
+                                    }       
+                                }
+                            });
+                        }else{
+                            var schedulable = DataLayer.get( "schedulable", evt.id);
+                            schedulable.group = evt.calendar;
+                            eventDetails( schedulable, true);
+                            }
                         }
+                        break;
+                    case 2:
+                        var task = DataLayer.get( "schedulable", evt.id);
+                        task.group = evt.calendar;
+                        taskDetails( task, true);
+                        break;
+                    case 3:
+                        var activity = DataLayer.get( "schedulable", evt.id);
+                        activity.group = evt.calendar;
+                        activityDetails( activity, true);
+                        break;
+            }
 		},
 		
@@ -322,6 +503,7 @@
 			contentMenu();
 		}
-	}, dateCalendar));
- 
+	}, dateCalendar));	
+		
+		
 	contentMenu();
 	 
@@ -346,4 +528,9 @@
 	});	  
 	//Todo chamada do metodo que adiciona ao full calendar o botao de listagem de eventos  
-	//listEvents();
+	printEvents();
 });
+
+
+function useDesktopNotification(){
+	return !!parseInt(User.preferences.useDesktopNotification);
+}
