Index: trunk/prototype/modules/filters/filters.js
===================================================================
--- trunk/prototype/modules/filters/filters.js	(revision 6452)
+++ trunk/prototype/modules/filters/filters.js	(revision 6487)
@@ -1,4 +1,25 @@
-/* Verifica se a regra fora de escritório está ativa */
-function outOfficeVerify() {
+/* 
+ * Retorna as regras por remetente e que o usuário deseja ser avisado 
+ */
+function getFromAlertRules() { 
+	var filters = DataLayer.get("filter");
+	fromRules = [];
+	var alertMessage;
+	var active;
+	for (var index in filters) {
+		alertMessage = filters[index]['alertMessage'];		
+		active = filters[index]['enabled'];
+		for(var criterias in filters[index]['actions']) {
+			if (filters[index]['actions'][criterias]['type'] == 'fileinto' && alertMessage == 'true' && active == 'true')
+				fromRules[fromRules.length] = filters[index]['actions'][criterias]['parameter'];
+		}
+	}
+	return fromRules;
+}
+
+/* 
+ * Verifica se a regra Fora de escritório está ativa
+ */
+function outOfficeVerify() { 	
 	DataLayer.remove('filter', false);
 	var filters = DataLayer.get("filter");
@@ -18,5 +39,7 @@
 }
 
-/* Valida as informações do formulário de filtro de mensagens */
+/* 
+ * Valida os campos do formulário da tela de filtros para salvar.
+ */
 valid_save = function(){
 	var accord = list_container.find(".rule-details-container").accordion({autoHeight: false});
@@ -103,4 +126,24 @@
 		}
 	}
+	var criteria_operator_list = list_container.find('[name="criteriaOperator[]"]');
+	if(list_container.find('.alertMessage').is(':checked')){
+		if($(criteria_list[0]).val() != "" && $('.select-folderlist').find('[type="radio"]').is(':checked') && $(criteria_operator_list[0]).find('option:selected').val() != "!*"){
+			var hasValue = false;
+			$.each(criteria_list, function(index, value){
+				if(($(criteria_list[index]).val() != "" && index != 0 && index != 5) || ($(criteria_list[index]).is(':checked'))){
+					if($('.fields-isexact').find(':checked').val() == 'or'){
+						hasValue = true;
+					}
+				}
+			});
+			if(hasValue){
+				$.Zebra_Dialog(get_lang('<strong>Filtro com alerta</strong><br>Se houver mais que um critério para o filtro, a opção "Atender a todos os critérios" deve estar selecionada'));
+				return false;
+			} 
+		}else{
+			$.Zebra_Dialog(get_lang('<strong>Filtro com alerta</strong><br> O filtro deve ter como critério definido "Remetente" e ação "Arquivar na pasta"'));
+			return false;
+		}
+	}
 	return true;
 };
@@ -154,5 +197,7 @@
 }
 
-/* Mostra os detalhes do filtro para edição */
+/* 
+ * Preenche o formulário de filtros com as informações originais para edição
+ */
 showDetails = function( filter ){
 
@@ -182,4 +227,6 @@
     }
 	isExact.filter('[value="'+(filter.isExact != "false"? "and" : "or")+'"]').attr("checked", "True");
+	
+	if (filter.alertMessage == 'true') $('.alertMessage').attr('checked', 'True');
 }
 
@@ -188,5 +235,5 @@
 
   decoder: function( form ){
-      if( form.vacation )
+	  if( form.vacation )
 	  return {
 		criteria: [{ value: "vacation", operator: "", field: "vacation" }],
@@ -218,5 +265,14 @@
 
 			!the_parameter ? the_parameter = form.actionParameter[i+1] : "";
-			if (type == 'fileinto') {
+
+			if (type == 'alertMessage') { 
+				//if(!$('[value="alertMessage"]').parent().hasClass("hidden")){
+					type = 'addflag';
+					the_parameter = '$FilteredMessage';
+				//}else{
+				//	return;
+				//}
+			} 
+			if (type == 'fileinto') { 
 				the_parameter = form.valueFileInto;
 			}
@@ -248,5 +304,9 @@
 		}),
 		enabled : true,
-		applyMessages: apply_messages_
+		alertMessage: $('.alertMessage').is(':checked'),
+		//applyMessages: allMessages? !$.isEmptyObject( selectedMessages ) ?
+		//keys( selectedMessages ) : allMessages : ""
+		applyMessages: apply_messages_ 
+		//applyMessages: ""
     };
   },
@@ -303,4 +363,7 @@
 });
 
+
+fromRules = getFromAlertRules();
+
 var BASE_PATH = '../prototype/';
 
@@ -311,5 +374,7 @@
 var allMessages = false;
 
-/* Bloqueio de usuários na tela de mensagem do ExpressoMail */
+/* 
+ * Bloqueia usuário por email - utilizado na tela de mensagens do ExpressoMail
+ */
 function block_user_email(email) {
 	delete selectedMessages;
@@ -325,4 +390,5 @@
 					$.Zebra_Dialog(get_lang("Lock User") + " " + email + " " + get_lang("removed"));
 					list_filters();
+					getFromAlertRules();
 				});
 				return true;
@@ -343,4 +409,5 @@
 			$.Zebra_Dialog(get_lang("User") + " " + email + " " + get_lang("blocked"));
 			list_filters();
+			getFromAlertRules();
 		});
 
@@ -358,5 +425,7 @@
 });
 
-/* Gerencia o grid das mensagens da caixa de entrada */
+/* Gerencia o grid das mensagens da caixa de entrada 
+ * Mostra o grid de mensagens para aplicar a regra nas mensagens da caixa de entrada.
+ */
 function showGridMessages(thiss) {
 	var criteria_list = list_container.find('[name="criteriaValue[]"]');
@@ -484,4 +553,7 @@
 
 /* Gerencia a listagem de filtros do usuário */
+/* 
+ * Lista os filtros para o usuário
+ */
 function list_filters(html){
 	outOfficeVerify();
@@ -495,4 +567,5 @@
 	}
 	list_container = $(".expresso-window-filters").dialog({
+		title: get_lang('Filters'),
 	    width:700,
 	    modal: true,
@@ -580,5 +653,11 @@
 					else
 						return;
-					DataLayer.commit( 'filter', false,function(){
+					DataLayer.commit( 'filter', false,function(data){
+						if(filters['alertMessage'] == "true"){
+							if(filters['alertMessage'] != $('.alertMessage').is(':checked').toString()){
+								/**RETIRA FLAG*/
+								removeMessagesFlag(filters['id']);
+							}
+						}
 						if($('#gbox_fields-search-messages-grid').length > 0 && action != '') {
 							for (var index in selectedMessages) {
@@ -587,4 +666,5 @@
 						}
 						DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters);
+						getFromAlertRules();
 					});
 				}).end().filter('.button.search').click(function() {
@@ -604,4 +684,5 @@
 					DataLayer.commit( 'filter', false,function(){
 						DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters);
+						getFromAlertRules();
 					});
 				});
@@ -618,6 +699,9 @@
 		var id = $(this).parents("li.rule").find('.id').val();
 		DataLayer.put( 'filter', id, { enabled: false  });
+		/**RETIRA FLAG*/
+		removeMessagesFlag(id);
 		DataLayer.commit("filter", false,function(){
 			DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters);
+			getFromAlertRules();
 		});
 	}).end()
@@ -633,4 +717,5 @@
 		DataLayer.commit("filter", false,function(){
 			DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters);
+			getFromAlertRules();
 		});
 	}).end()
@@ -653,7 +738,11 @@
 					DataLayer.remove('filter', false);
 					DataLayer.get('filter');
+					/**RETIRA FLAG*/
+					removeMessagesFlag(filter_name);
 					DataLayer.remove( 'filter', filter_name);
+
 					DataLayer.commit("filter", false,function(){
 						DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters);
+						getFromAlertRules();
 					});
 				}else{
@@ -670,4 +759,5 @@
 		DataLayer.commit("filter", false, function(){
 			DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters);
+			getFromAlertRules();
 		});
 	});
@@ -676,7 +766,10 @@
 		container.find('.rule-list').find('.rule').find('.select').find(':checked').parents('.rule').find('.title').each(function(i,o){
 			DataLayer.put( 'filter', o.innerHTML, { enabled: false  });
+			/**RETIRA FLAG*/
+			removeMessagesFlag(o.innerHTML);
 		});
 		DataLayer.commit("filter", false, function(){
 			DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters);
+			getFromAlertRules();
 		});
 	});
@@ -693,8 +786,13 @@
 					DataLayer.get('filter');
 					container.find('.rule-list').find('.rule').find('.select').find(':checked').parents('.rule').find('.title').each(function(i,o){
+						/**RETIRA FLAG*/
+						removeMessagesFlag(urlencode(o.innerHTML));
 						DataLayer.remove( 'filter', urlencode(o.innerHTML) );
+
+
 					});
 					DataLayer.commit("filter", false,function(){
 						DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters);
+						getFromAlertRules();
 					});
 				}else{
@@ -734,4 +832,5 @@
 					}
 					DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters);
+					getFromAlertRules();
 				});
 			}).end().filter('.button.search').click(function() {
@@ -760,4 +859,5 @@
 					DataLayer.commit( 'filter',false,function(){
 						DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters);
+						getFromAlertRules();
 					});
 				}
@@ -767,7 +867,37 @@
 }
 
-/* Inicializa os filtros e chama o list_filters */
+
+/* Inicializa os filtros e chama o list_filters 
+ * Inicia a funcionalidade de filtros de mensagens
+ */
 function  init_filters(){
 	var html = DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {});
 	list_filters(html);
 }
+
+/*
+ * Ao excluir filtro, desabilitar filtro ou retirar a ação Alerta de um filtro
+ * esta função é chamada para retirar as flags que caracterizam uma mensagem como alertada pelos Filtros por Remetente 
+ */
+function removeMessagesFlag(id){
+	var filters_c = DataLayer.get('filter', id);
+	var folder = '';
+	var from = '';
+
+	for(var i=0; i < filters_c['actions'].length; i++){
+		if(filters_c['actions'][i].type == 'fileinto'){
+			folder = filters_c['actions'][i].parameter;
+		}
+	}
+	$.each(fromRules, function(index, value) {
+		if(value == folder){
+			for(var i=0; i < filters_c['criteria'].length; i++){
+				if(filters_c['criteria'][i].field == 'from'){
+					from = filters_c['criteria'][i].value;
+				}
+			}
+			cExecute ("$this.imap_functions.removeFlagMessagesFilter&folder="+folder+"&from="+from, function(){}); 
+			return false;
+		}
+	});
+}
