Index: trunk/prototype/modules/filters/interceptors/FilterMapping.php
===================================================================
--- trunk/prototype/modules/filters/interceptors/FilterMapping.php	(revision 5747)
+++ trunk/prototype/modules/filters/interceptors/FilterMapping.php	(revision 5862)
@@ -50,6 +50,6 @@
 * @license    http://www.gnu.org/copyleft/gpl.html GPL
 * @author     ConsÃ³rcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br)
-* @author     Airton Bordin Junior
-* @author     Gustavo Pereira dos Santos
+* @author     Airton Bordin Junior <airton@prognus.com.br>
+* @author     Gustavo Pereira dos Santos <gustavo@prognus.com.br>
 * @version    1.0
 * @since      Classe disponibilizada na versÃ£o 2.4
@@ -67,6 +67,6 @@
 	* @author     ConsÃ³rcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br)
 	* @sponsor    Caixa EconÃŽmica Federal
-	* @author     Airton Bordin Junior
-	* @author	  Gustavo Pereira dos Santos	
+	* @author     Airton Bordin Junior <airton@prognus.com.br>
+	* @author	  Gustavo Pereira dos Santos <gustavo@prognus.com.br>	
 	* @param      <Array> <$rules> <Array com as regras do usuÃ¡rio>
 	* @return     <Regra de acordo com a sintaxe do Sieve>
@@ -109,9 +109,8 @@
 			$data['isExact'] == 'false' ?  $script_match .= 'if anyof (' : $script_match .= 'if allof (';
 
-
 			if( is_array($criteria) )
 			foreach ($criteria as $j => $value);
 			{					
-				 
+
 				switch($criteria[$j]['field']) {
 					case 'To':    
@@ -174,5 +173,5 @@
 					/* 
 					   TO-DO:
-					   Arrrumar regra do "nÃ£o contÃ©m".
+					   InconsistÃªncia na regra do "nÃ£o contÃ©m".
 					*/
 					case '!*':
@@ -232,6 +231,6 @@
 				$i++;
 			$script_match = "";
-			$script_criteria = "";
-			
+			$script_criteria = "";	
+			$data['applyMessages'] = "";					 		
 		}
 
@@ -258,5 +257,4 @@
 
 		$content = $script_begin . $script_header . $script_rules . "\r\n\r\n#PseudoScript#" . "\r\n#" . $json_data;
-		//$content = ""; 
 
 		return( $content );
@@ -269,6 +267,6 @@
 	* @author     ConsÃ³rcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br)
 	* @sponsor    Caixa EconÃŽmica Federal
-	* @author     Airton Bordin Junior
-	* @author	  Gustavo Pereira dos Santos	
+	* @author     Airton Bordin Junior <airton@prognus.com.br>
+	* @author	  Gustavo Pereira dos Santos <gustavo@prognus.com.br>	
 	* @param      <$scriptName> <Regras do usuÃ¡rio>
 	* @return     <Regra do usuÃ¡rio parseada>
@@ -285,20 +283,20 @@
 
         // Recebe o tamanho do script, pela primeira linha;
-        $this->size = trim($size_rule);
+        //$this->size = trim($size_rule);
 
         // Verifica a composiÃ§Ã£o do script; */
-         $line = array_shift($lines);
+        $line = array_shift($lines);
 
         // Variaveis para a regra e o campo ferias;
-        $regexps = array('^ *##PSEUDO', '^ *#rule', '^ *#vacation', '^ *#mode');
+        $regexps = array('##PSEUDO', '#rule', '#vacation', '#mode');
         $retorno['rule'] = array();
 
         $line = array_shift($lines);
-        while (isset($line)) {
+        while (isset($line)) { 
             foreach ($regexps as $regp) {
-                if (preg_match("/$regp/i", $line)) {
+                if (preg_match("/$regp/i", $line)) { 
                     // Recebe todas as regras criadas no servidor;
-                    if (preg_match("/^ *#rule&&/i", $line)) {
-                        $retorno['rule'][] = $line . "\n";
+                    if (preg_match("/#rule&&/i", $line)) {
+                        $retorno['rule'][] = ltrim($line) . "\n";                          
                     }
                 }
@@ -319,6 +317,6 @@
 	* @author     ConsÃ³rcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br)
 	* @sponsor    Caixa EconÃŽmica Federal
-	* @author     Airton Bordin Junior
-	* @author	  Gustavo Pereira dos Santos	
+	* @author     Airton Bordin Junior <airton@prognus.com.br>
+	* @author	  Gustavo Pereira dos Santos <gustavo@prognus.com.br>	
 	* @param      <String> <$script> <Script Sieve com as regras do usuÃ¡rio>
 	* @return     <Regras do usuÃ¡rio em Array>
@@ -327,36 +325,66 @@
 	public function parseSieveScript( $script )
 	{
-		/*
+		/* Faz a verificaÃ§Ã£o por filtros criados com a funcionalidade antiga */
 		$old_rule = strripos($script, "##PSEUDO script start");
 		
 		if($old_rule) {
-			
-			$parsed_rule = $this->readOldScript($old_script);
-			$array_rule = explode("&&", $parsed_rule['rule'][0]);
-
-			$old_retorno = array();
-			$old_retorno['isExact'] = false;
-			$old_retorno['name'] = $array_rule[1];
-			$old_retorno['criteria'] = array();
-			$old_retorno['criteria'][0] = array();
-			$old_retorno['criteria'][0]['value'] = $array_rule[5];
-			$old_retorno['criteria'][0]['operator'] = '=';
-			$old_retorno['criteria'][0]['field'] = 'subject';
-			$old_retorno['actions'] = array();
-			$old_retorno['actions'][0] = array();
-			$old_retorno['actions'][0]['parameter'] = $array_rule[7];
-			$old_retorno['actions'][0]['type'] = $array_rule[6];
-			$old_retorno['enabled'] = true;
-			$old_retorno['id'] = $array_rule[1];
-			$old_retorno['applyMessages'] = '';
-
-			return $old_retorno;
+			$parsed_rule = $this->readOldScript($script);
+			$old_rules = array(); 
+			$j = 0;
+			foreach ($parsed_rule['rule'] as $i => $value) {
+				
+				$array_rule = explode("&&", $parsed_rule['rule'][$i]);
+
+				/* TO-DO: Ver as actions possÃ­veis alÃ©m de reject e fileinto */
+				switch($array_rule[6]) {
+					case 'reject':
+						$action_type      = 'reject';
+						$action_parameter = $array_rule[7];
+						break;
+					case 'folder':
+						$action_type      = 'fileinto';
+						$action_parameter = $array_rule[7];
+						break;
+				}
+
+				if($array_rule[3] != "") {
+					$criteria_value = $array_rule[3];
+					$criteria_operator = '=';
+					$criteria_field = 'from';
+				} 
+				else
+				{
+					$criteria_value = $array_rule[5];
+					$criteria_operator = '=';
+					$criteria_field = 'subject';
+				}
+
+				$old_retorno = array();
+				$old_retorno['isExact'] 				= true;
+				$old_retorno['name']					= 'regra_migrada_' . $array_rule[1];
+				$old_retorno['criteria'] 				= array();
+				$old_retorno['criteria'][0] 			= array();
+				$old_retorno['criteria'][0]['value']    = $criteria_value;
+				$old_retorno['criteria'][0]['operator'] = $criteria_operator;
+				$old_retorno['criteria'][0]['field']    = $criteria_field;
+				$old_retorno['actions']                 = array();
+				$old_retorno['actions'][0]              = array();
+				$old_retorno['actions'][0]['parameter'] = $action_parameter;
+				$old_retorno['actions'][0]['type']      = $action_type;
+				$old_retorno['enabled']                 = ($array_rule[2] == 'ENABLED') ? true: false;
+				$old_retorno['id']                      = 'regra_migrada_' . $array_rule[1];
+				$old_retorno['applyMessages']           = '';
+
+				$old_rules[$j] = $old_retorno;
+				$j++;
+			}			
+			return $old_rules;
 		}
-		*/
+		/* NÃ£o tem regra antiga */
 		$pos = strripos($script, "#PseudoScript#");
 		$pseudo_script = substr( $script, $pos+17 );
 
 		$return = json_decode( $pseudo_script, true );
-
+	
 		return $return;
 	}
@@ -370,6 +398,6 @@
 	* @author     ConsÃ³rcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br)
 	* @sponsor    Caixa EconÃŽmica Federal
-	* @author     Airton Bordin Junior
-	* @author	  Gustavo Pereira dos Santos	
+	* @author     Airton Bordin Junior <airton@prognus.com.br>
+	* @author	  Gustavo Pereira dos Santos <gustavo@prognus.com.br>	
 	* @access     <public>
 	*/
@@ -386,6 +414,6 @@
 	* @author     ConsÃ³rcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br)
 	* @sponsor    Caixa EconÃŽmica Federal
-	* @author     Airton Bordin Junior
-	* @author	  Gustavo Pereira dos Santos	
+	* @author     Airton Bordin Junior <airton@prognus.com.br>
+	* @author	  Gustavo Pereira dos Santos <gustavo@prognus.com.br>	
 	* @return     <Regras do usuÃ¡rio>
 	* @access     <public>
@@ -398,4 +426,5 @@
 			$this->rules = array();
 		}
+		
 		return( $this->rules );
 	}
@@ -408,6 +437,6 @@
 	* @author     ConsÃ³rcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br)
 	* @sponsor    Caixa EconÃŽmica Federal
-	* @author     Airton Bordin Junior
-	* @author	  Gustavo Pereira dos Santos	
+	* @author     Airton Bordin Junior <airton@prognus.com.br>
+	* @author	  Gustavo Pereira dos Santos <gustavo@prognus.com.br>	
 	* @param      <$uri> 
 	* @param      <$result> 
@@ -418,32 +447,37 @@
 	public function applySieveFilter( &$uri , &$result , &$criteria , $original  )
 	{
-		/*
-		$result['id'] = $uri['id'];
-		$rule_apply = array(); 
 		
-		$filter = Controller::read($uri);
-		$filter_ = $this->parseSieveScript($filter['content']);
-		
-		foreach ($filter_ as $f_) {
-			if($f_['id'] == $uri['id']) { 
-				$rule_apply	= $f_;
+		//if() 			
+		//{						
+			$result['id'] = $uri['id'];
+			$rule_apply = array(); 
+			
+			$filter = Controller::read($uri);
+			$filter_ = $this->parseSieveScript($filter['content']);
+			
+			foreach ($filter_ as $f_) {
+				if($f_['id'] == $uri['id']) { 
+					$rule_apply	= $f_;
+				}
 			}
-		}
-		
-		$actions = array();
-		$actions['type']      = $rule_apply['actions'][0]['type'];
-		$actions['parameter'] = $rule_apply['actions'][0]['parameter'];
-		
-		$messages = $rule_apply['applyMessages'];
-		  
-			  
-		$proc = array();
-		$proc['keep'] = false;
-		*/      
-		
-		//$imap = Controller::service( 'Imap' );
-		//$imap->apliSieveFilter($original['properties']['applyMessages'] , $proc ); 
-		//$imap->apliSieveFilter($messages , $actions ); 
-		//return $result;
+					
+			$actions = array();
+			$actions['type']      = $rule_apply['actions'][0]['type'];
+			$actions['parameter'] = $rule_apply['actions'][0]['parameter'];
+			/* Hardcoded */
+			$actions['keep']      = false;
+
+			$messages_to_apply = array();			
+
+			$messages = $rule_apply['applyMessages'];
+			/*	  
+			$proc = array();
+			$proc['keep'] = false;
+				 
+			*/
+			$imap = Controller::service( 'Imap' );
+			$imap->apliSieveFilter($messages , $actions); 
+			return $result;
+		//}
 	}
 
@@ -455,6 +489,6 @@
 	* @author     ConsÃ³rcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br)
 	* @sponsor    Caixa EconÃŽmica Federal
-	* @author     Airton Bordin Junior
-	* @author	  Gustavo Pereira dos Santos	
+	* @author     Airton Bordin Junior <airton@prognus.com.br>
+	* @author	  Gustavo Pereira dos Santos <gustavo@prognus.com.br>	
 	* @param      <$uri> 
 	* @param      <$result> 
@@ -476,6 +510,6 @@
 	* @author     ConsÃ³rcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br)
 	* @sponsor    Caixa EconÃŽmica Federal
-	* @author     Airton Bordin Junior
-	* @author	  Gustavo Pereira dos Santos	
+	* @author     Airton Bordin Junior <airton@prognus.com.br>
+	* @author	  Gustavo Pereira dos Santos <gustavo@prognus.com.br>	
 	* @param      <$uri> 
 	* @param      <$result> 
@@ -510,6 +544,6 @@
 	* @author     ConsÃ³rcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br)
 	* @sponsor    Caixa EconÃŽmica Federal
-	* @author     Airton Bordin Junior
-	* @author	  Gustavo Pereira dos Santos	
+	* @author     Airton Bordin Junior <airton@prognus.com.br>
+	* @author	  Gustavo Pereira dos Santos <gustavo@prognus.com.br>	
 	* @param      <$uri> 
 	* @param      <$result> 
@@ -554,6 +588,6 @@
 	* @author     ConsÃ³rcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br)
 	* @sponsor    Caixa EconÃŽmica Federal
-	* @author     Airton Bordin Junior
-	* @author	  Gustavo Pereira dos Santos	
+	* @author     Airton Bordin Junior <airton@prognus.com.br>
+	* @author	  Gustavo Pereira dos Santos <gustavo@prognus.com.br>	
 	* @param      <$uri> 
 	* @param      <$result> 
@@ -580,6 +614,6 @@
 	* @author     ConsÃ³rcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br)
 	* @sponsor    Caixa EconÃŽmica Federal
-	* @author     Airton Bordin Junior
-	* @author	  Gustavo Pereira dos Santos	
+	* @author     Airton Bordin Junior <airton@prognus.com.br>
+	* @author	  Gustavo Pereira dos Santos <gustavo@prognus.com.br>	
 	* @param      <$uri> 
 	* @param      <$result> 
Index: trunk/prototype/modules/filters/filters.js
===================================================================
--- trunk/prototype/modules/filters/filters.js	(revision 5801)
+++ trunk/prototype/modules/filters/filters.js	(revision 5862)
@@ -154,4 +154,7 @@
       }
 
+	  var apply_messages_ = keys(selectedMessages);
+	  delete selectedMessages; 
+
       return {
 		//id: form.name,
@@ -199,12 +202,12 @@
 		}),
 		enabled : false,
-		applyMessages: allMessages? !$.isEmptyObject( selectedMessages ) ?
-		keys( selectedMessages ) : allMessages : ""
-		
+		//applyMessages: allMessages? !$.isEmptyObject( selectedMessages ) ?
+		//keys( selectedMessages ) : allMessages : ""
+		applyMessages: apply_messages_ 
+		//applyMessages: ""
       };
   },
   
   encoder: function( filters ){
-	
 	var rules = [];
 
@@ -215,4 +218,5 @@
 
   }
+  
 });
 
@@ -681,5 +685,4 @@
 					{ name: email, isExact: false, 
 						criteria:{ 0: {value: email, operator: "=", field: "from"} },
-						/* To-do: Arrumar para popular a tela com o reject, pois não há essa opção na interface. */
 						actions: { 0: {parameter: "INBOX/Spam", type: "fileinto"}}, 
 						enabled: true, 
@@ -885,5 +888,5 @@
 			}).end().filter(".cancel").click(function(){
 				DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters);
-			}).end().filter(".submit").click(function(){
+			}).end().filter(".submit").click(function() {
 				if(valid_save())
 					$(this).submit();
@@ -893,6 +896,107 @@
 					DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters);
 				});
-			});
-		});	
+			}).end().filter('.button.search').click(function() {				
+				/* Valida se o usuário preencheu as informações */
+				if(valid_save())
+				{	
+					var criteria_list          = list_container.find('[name="criteriaValue[]"]');
+					var criteria_operator_list = list_container.find('[name="criteriaOperator[]"]');
+					var criteria_value = "";
+					var criteria = "";
+					$.each(criteria_list, function(index, value){
+						criteria += $.trim($(criteria_list[index]).val()) + ",";
+					});
+					var criteria_ = criteria.split(",");
+					var criteria_operator  = "";
+					$.each(criteria_operator_list, function(index, value){
+						criteria_operator += $.trim($(criteria_list[index]).val()) != "" ? index + "," : ",";
+						criteria_value    += $.trim($(criteria_operator_list[index]).val()) + ",";
+					});
+					var criteria_operator_  = criteria_operator.split(",");
+					var criteria_value_     = criteria_value.split(",");
+					var options = ["from", "to", "subject", "body", "size"];
+					var criterias_ = new Array();
+					var j = 0;		
+					for (i in criteria_) {
+						if(criteria_[i] != "") {
+							(j == 0) ? criterias_[j] = {"0": options[i], "1": criteria_value_[i], "2": criteria_[i]} : criterias_[j] = {"0": "OR", "1": options[i], "2": criteria_value_[i], "3": criteria_[i]}; 
+							j++;
+						}	
+					}
+					showGridButton = $(this).parent();
+					$.ajax({  
+						url: DataLayer.basePath + 'folder/INBOX/message&' +  $.param( {"filter": criterias_} ),
+						dataType: 'json',
+						success: function(data){	
+							allMessages = data;
+							var parametro = "";
+							(data != false) ? parametro = {"filter": [ "msgNumber", "IN", data ]} : parametro = {"filter": criterias_};
+							
+							grid = showGridButton.addClass('hidden')
+							.siblings(".fields-search-messages-grid, .fields-search-messages-grid-pager")
+							.removeClass('hidden').filter(".fields-search-messages-grid").jqGrid({
+								//url: DataLayer.basePath + 'folder/INBOX/message&' +  $.param( {"filter": [ "msgNumber", "IN", data ]} ),
+								url: DataLayer.basePath + 'folder/INBOX/message&' +  $.param( parametro ),
+								datatype: "json",
+								mtype: 'GET',
+								colNames:['#', ' ', 'De', 'Assunto', 'Data', 'Tamanho'],
+								colModel:[
+									{name:'msg_number',index:'msg_number', width:45, hidden:true, sortable:false},
+									{name:'flags',index:'msg_number', width:40, sortable:false, formatter:flags2Class},
+									{name:'from.name',index:'msg_number', width:130, sortable:false},
+									{name:'subject',index:'subject', width:250, sortable:false},
+									{name:'timestamp',index:'timestamp', width:65, align:"center", sortable:false, formatter:date2Time},
+									{name:'size',index:'size', width:50, align:"right", sortable:false, formatter:bytes2Size}
+								],
+								jsonReader : {
+									root:"rows",
+									page: "page",
+									total: "total",
+									records: "records",
+									repeatitems: false,
+									id: "0"
+								},
+								rowNum:10,
+								//rowList:[10,25,50],
+								rowList:[10],
+								pager: '#fields-search-messages-grid-pager',
+								sortname: 'id',
+								viewrecords: true,
+								sortorder: "desc",
+								multiselect: true,
+								autowidth: true,
+								height:40,
+								loadComplete: function(data) {
+							  //				// aplica o contador
+							  //				jQuery('.timable').each(function (i) {
+							  //					jQuery(this).countdown({
+							  //						since: new Date(parseInt(this.title)), 
+							  //						significant: 1,
+							  //						layout: 'h&aacute; {d<}{dn} {dl} {d>}{h<}{hn} {hl} {h>}{m<}{mn} {ml} {m>}{s<}{sn} {sl}{s>}', 
+							  //						description: ' atr&aacute;s'
+							  //					});
+							  //				});
+								},
+								onSelectRow: function (id, selected) {
+									if( selected ) 
+									{
+										selectedMessages[ id ] = true;
+									}
+									else
+									{
+										delete selectedMessages[ id ];
+									}
+								},
+								caption: 'Mensagens que atendem aos crit&eacute;rios'
+							}); // end jqGrid
+						} // end success
+					}); // end ajax
+				} 
+				else
+				{
+					return;
+				}
+			}); // end function click
+		});	// end DataLayer.render
 	});
 	list_container.parent().find(".button.add.vacation").click(function(){
Index: trunk/prototype/modules/filters/edit-filter.ejs
===================================================================
--- trunk/prototype/modules/filters/edit-filter.ejs	(revision 5801)
+++ trunk/prototype/modules/filters/edit-filter.ejs	(revision 5862)
@@ -20,5 +20,5 @@
 				<label class="small"><%= get_lang("Sender")%></label>
 				<select name="criteriaOperator[]">
-					<option value="="><%= get_lang("is equal to")%></option>
+					<option value="="><%= get_lang("contains")%></option>
 					<option value="*"><%= get_lang("contains the phrase")%></option>
 					<option value="!*"><%= get_lang("doesn't contain the phrase")%></option>
@@ -33,5 +33,5 @@
 				<label class="small"><%= get_lang("Receiver")%></label>
 				<select name="criteriaOperator[]">
-					<option value="="><%= get_lang("is equal to")%></option>
+					<option value="="><%= get_lang("contains")%></option>
 					<option value="*"><%= get_lang("contains the phrase")%></option>
 					<option value="!*"><%= get_lang("doesn't contain the phrase")%></option>
@@ -45,5 +45,5 @@
 				<label class="small"><%= get_lang("Subject")%></label>
 				<select name="criteriaOperator[]">
-					<option value="="><%= get_lang("is equal to")%></option>
+					<option value="="><%= get_lang("contains")%></option>
 					<option value="*"><%= get_lang("contains the phrase")%></option>
 					<option value="!*"><%= get_lang("doesn't contain the phrase")%></option>
@@ -58,5 +58,5 @@
 				<label class="small"><%= get_lang("Message")%></label>
 				<select name="criteriaOperator[]">
-					<option value="="><%= get_lang("is equal to")%></option>
+					<option value="="><%= get_lang("contains")%></option>
 					<option value="*"><%= get_lang("contains the phrase")%></option>
 					<option value="!*"><%= get_lang("doesn't contain the phrase")%></option>
@@ -144,5 +144,5 @@
 			<fieldset>
 				<input type="radio" name="actionType[]" value="fileintoTrash" onchange="$('.ui-widget-content :checkbox').parent().removeClass(' hidden');"/>
-				<label><%= get_lang("Seen")%></label>
+				<label><%= get_lang("Trash")%></label>
 				<input type="hidden" name="actionParameter[]" value="Trash"/>
 			</fieldset>
@@ -157,5 +157,7 @@
 				<input type="hidden" name="actionParameter[]" value="INBOX"/>
 			</fieldset>
-			<!--
+			
+			
+			
 			<fieldset class="fields-search-messages">
 				<label>Clique no botão "Buscar" para verificar se existem mensagens na sua Caixa de Entrada que 
@@ -165,5 +167,7 @@
 			<table class="hidden fields-search-messages-grid" id="fields-search-messages-grid"><tr><td/></tr></table>
 			<div class="hidden fields-search-messages-grid-pager" id="fields-search-messages-grid-pager"></div>
-			-->
+			
+			
+			
 			<div class="menu-container">	
 				<a class="button back"   href="#" >&laquo; <%= get_lang("Previous")%></a>
