Index: /sandbox/expressoMail1_2/MailArchiver/2.2/expressoMail1_2/inc/class.imap_functions.inc.php
===================================================================
--- /sandbox/expressoMail1_2/MailArchiver/2.2/expressoMail1_2/inc/class.imap_functions.inc.php	(revision 4644)
+++ /sandbox/expressoMail1_2/MailArchiver/2.2/expressoMail1_2/inc/class.imap_functions.inc.php	(revision 4893)
@@ -14,5 +14,6 @@
 		'get_folders_list'				=> True,
 		'import_msgs'					=> True,
-		'msgs_to_archive'				=> True
+		'msgs_to_archive'				=> True,
+                'get_offset_gmt'                                => True
 	);
 
@@ -116,5 +117,5 @@
 		$return['folder'] = $folder;
 		
-		//Para enviar o offset entre o timezone definido pelo usuário e GMT
+		//Para enviar o offset entre o timezone definido pelo usuï¿œrio e GMT
 		$return['offsetToGMT'] = $this->functions->CalculateDateOffset();
 		
@@ -182,11 +183,11 @@
 		//if ($this->prefs['use_important_flag'] )
 		//{
-			/*Como eu preciso do atributo Importance para saber se o email é
-			 * importante ou não, uso abaixo a função imap_fetchheader e busco
-			 * o atributo importance nela. Isso faz com que eu acesse o cabeçalho
+			/*Como eu preciso do atributo Importance para saber se o email ï¿œ
+			 * importante ou nï¿œo, uso abaixo a funï¿œï¿œo imap_fetchheader e busco
+			 * o atributo importance nela. Isso faz com que eu acesse o cabeï¿œalho
 			 * duas vezes e de duas formas diferentes, mas em contrapartida, eu
-			 * não preciso reimplementar o método utilizando o fetchheader.
-			 * Como as mensagens são renderizadas em um número pequeno por vez,
-			 * não parece ter perda considerável de performance.
+			 * nï¿œo preciso reimplementar o mï¿œtodo utilizando o fetchheader.
+			 * Como as mensagens sï¿œo renderizadas em um nï¿œmero pequeno por vez,
+			 * nï¿œo parece ter perda considerï¿œvel de performance.
 			 */
 
@@ -194,6 +195,6 @@
 			$flag = preg_match('/importance *: *(.*)\r/i', $tempHeader, $importance);
                 //}
-                // Reimplementado código para identificação dos e-mails assinados e cifrados
-                // no método getMessageType(). Mário César Kolling <mario.kolling@serpro.gov.br>
+                // Reimplementado cï¿œdigo para identificaï¿œï¿œo dos e-mails assinados e cifrados
+                // no mï¿œtodo getMessageType(). Mï¿œrio Cï¿œsar Kolling <mario.kolling@serpro.gov.br>
                 $head_array['ContentType'] = $this->getMessageType($msg_number, $tempHeader);
                 $head_array['Importance'] = $flag==0?"Normal":$importance[1];
@@ -242,5 +243,5 @@
 		$to = $header->to;
 		$head_array['to'] = array();
-		if($to[1] && $to[1]->host == ".SYNTAX-ERROR.") { //E-mails que não possuem o campo "para", vêm com o recipiente preenchido, porém com um recipiente a mais alegando erro de sintaxe.
+		if($to[1] && $to[1]->host == ".SYNTAX-ERROR.") { //E-mails que nï¿œo possuem o campo "para", vï¿œm com o recipiente preenchido, porï¿œm com um recipiente a mais alegando erro de sintaxe.
 			$head_array['to']['name'] = $head_array['to']['email'] = NULL;
 		}
@@ -316,6 +317,6 @@
 	}
 	/**
-	* Função que importa arquivos .eml exportados pelo expresso para a caixa do usuário. Testado apenas
-	* com .emls gerados pelo expresso, e o arquivo pode ser um zip contendo vários emls ou um .eml.
+	* Funï¿œï¿œo que importa arquivos .eml exportados pelo expresso para a caixa do usuï¿œrio. Testado apenas
+	* com .emls gerados pelo expresso, e o arquivo pode ser um zip contendo vï¿œrios emls ou um .eml.
 	*/
 	function import_msgs($params) {
@@ -408,7 +409,7 @@
 	}
         /*
-		Remove os anexos de uma mensagem. A estratégia para isso é criar uma mensagem nova sem os anexos, mantendo apenas
-		a primeira parte do e-mail, que é o texto, sem anexos.
-		O método considera que o email é multpart.
+		Remove os anexos de uma mensagem. A estratï¿œgia para isso ï¿œ criar uma mensagem nova sem os anexos, mantendo apenas
+		a primeira parte do e-mail, que ï¿œ o texto, sem anexos.
+		O mï¿œtodo considera que o email ï¿œ multpart.
 	*/
 	function remove_attachments($params) {
@@ -420,5 +421,5 @@
 
 		$headertemp = explode("\n",imap_fetchheader($this->mbox, imap_msgno($this->mbox, $params["msg_num"])));
-		foreach($headertemp as $head) {//Se eu colocar todo o header do email dá pau no append, então procuro apenas o que interessa.
+		foreach($headertemp as $head) {//Se eu colocar todo o header do email dï¿œ pau no append, entï¿œo procuro apenas o que interessa.
 			$head1 = explode(":",$head);
 			if ( (strtoupper($head1[0]) == "TO") ||
@@ -430,7 +431,7 @@
 
 		$msg = &new message_components($this->mbox);
-		$msg->fetch_structure($params["msg_num"]);/* O fetchbody tava trazendo o email com problemas na acentuação.
-							     Então uso essa classe para verificar a codificação e o charset,
-							     para que o método decodeBody do expresso possa trazer tudo certinho*/
+		$msg->fetch_structure($params["msg_num"]);/* O fetchbody tava trazendo o email com problemas na acentuaï¿œï¿œo.
+							     Entï¿œo uso essa classe para verificar a codificaï¿œï¿œo e o charset,
+							     para que o mï¿œtodo decodeBody do expresso possa trazer tudo certinho*/
 
 		$all_body_type = strtolower($msg->file_type[$params["msg_num"]][0]);
@@ -470,5 +471,5 @@
 								)
 						)
-						, "\\Seen"); //Append do novo email, só com header e conteúdo sem anexos.			
+						, "\\Seen"); //Append do novo email, sï¿œ com header e conteï¿œdo sem anexos.			
 		}else{	
 			$status = imap_append($this->mbox,
@@ -485,5 +486,5 @@
 								)
 						)
-						, "\\Seen"); //Append do novo email, só com header e conteúdo sem anexos.
+						, "\\Seen"); //Append do novo email, sï¿œ com header e conteï¿œdo sem anexos.
 		}
 
@@ -555,5 +556,5 @@
 			$msg_info = $this->get_info_msg($new_params);
 
-			$this->mbox = $this->open_mbox($params['folder']); //Não sei porque, mas se não abrir de novo a caixa dá erro.
+			$this->mbox = $this->open_mbox($params['folder']); //Nï¿œo sei porque, mas se nï¿œo abrir de novo a caixa dï¿œ erro.
 			$msg_info['header'] = $this->get_info_head_msg($msg_number);
 
@@ -1361,8 +1362,8 @@
 		$body = $this-> replace_links($body);
 
-		//Remoção de tags <span></span> para correção de erro no firefox 
+		//Remoï¿œï¿œo de tags <span></span> para correï¿œï¿œo de erro no firefox 
 		$body = mb_eregi_replace("<span><span>","",$body); 
 		$body = mb_eregi_replace("</span></span>","",$body); 
-		//Correção para compatibilização com Outlook, ao visualizar a mensagem 
+		//Correï¿œï¿œo para compatibilizaï¿œï¿œo com Outlook, ao visualizar a mensagem 
 		$body = mb_ereg_replace('<!--\[','<!-- [',$body); 
 		$body = mb_ereg_replace('&lt;!\[endif\]--&gt;', '<![endif]-->', $body);
@@ -1424,5 +1425,5 @@
 		 */ 
 
-		// PHP 5.2.x - Remover assim que possível 
+		// PHP 5.2.x - Remover assim que possï¿œvel 
 		$body = preg_replace_callback( $pattern, 
 			create_function( 
@@ -1646,11 +1647,11 @@
 		foreach($msgs_to_exec as $msg_number)
 		{
-			/*A função imap_headerinfo não traz o cabeçalho completo, e sim alguns
-			* atributos do cabeçalho. Como eu preciso do atributo Importance
-			* para saber se o email é importante ou não, uso abaixo a função
+			/*A funï¿œï¿œo imap_headerinfo nï¿œo traz o cabeï¿œalho completo, e sim alguns
+			* atributos do cabeï¿œalho. Como eu preciso do atributo Importance
+			* para saber se o email ï¿œ importante ou nï¿œo, uso abaixo a funï¿œï¿œo
 			* imap_fetchheader e busco o atributo importance nela para passar
-			* para as funções ajax. Isso faz com que eu acesse o cabeçalho
+			* para as funï¿œï¿œes ajax. Isso faz com que eu acesse o cabeï¿œalho
 			* duas vezes e de duas formas diferentes, mas em contrapartida, eu
-			* não preciso reimplementar o método utilizando o fetchheader.
+			* nï¿œo preciso reimplementar o mï¿œtodo utilizando o fetchheader.
 			*/
     
@@ -1740,9 +1741,9 @@
 
      /**
-     * Método que faz a verificação do Content-Type do e-mail e verifica se é um e-mail normal,
+     * Mï¿œtodo que faz a verificaï¿œï¿œo do Content-Type do e-mail e verifica se ï¿œ um e-mail normal,
      * assinado ou cifrado.
-     * @author Mário César Kolling <mario.kolling@serpro.gov.br>
-     * @param $headers Uma String contendo os Headers do e-mail retornados pela função imap_imap_fetchheader
-     * @param $msg_number O número da mesagem
+     * @author Mï¿œrio Cï¿œsar Kolling <mario.kolling@serpro.gov.br>
+     * @param $headers Uma String contendo os Headers do e-mail retornados pela funï¿œï¿œo imap_imap_fetchheader
+     * @param $msg_number O nï¿œmero da mesagem
      * @return Retorna o tipo da mensagem (normal, signature, cipher).
      */
@@ -1766,9 +1767,9 @@
      * Metodo que retorna todas as pastas do usuario logado.
      * @param $params array opcional para repassar os argumentos ao metodo.
-     * Se usar $params['noSharedFolders'] = true, ira retornar todas as pastas do usuário logado,
+     * Se usar $params['noSharedFolders'] = true, ira retornar todas as pastas do usuï¿œrio logado,
      * excluindo as compartilhadas para ele.
-     * Se usar $params['folderType'] = "default" irá retornar somente as pastas defaults
-     * Se usar $params['folderType'] = "personal" irá retornar somente as pastas pessoais
-     * Se usar $params['folderType'] = null irá retornar todas as pastas
+     * Se usar $params['folderType'] = "default" irï¿œ retornar somente as pastas defaults
+     * Se usar $params['folderType'] = "personal" irï¿œ retornar somente as pastas pessoais
+     * Se usar $params['folderType'] = null irï¿œ retornar todas as pastas
      * @return Retorna um array contendo as seguintes informacoes de cada pasta: folder_unseen,
      * folder_id, folder_name, folder_parent e folder_hasChildren.
@@ -2131,5 +2132,5 @@
         {
             $body = $params['body'];
-	    //Compatibilização com Outlook, ao encaminhar a mensagem
+	    //Compatibilizaï¿œï¿œo com Outlook, ao encaminhar a mensagem
 	    $body = mb_ereg_replace('<!--\[','<!-- [',$body);
         }
@@ -3464,5 +3465,5 @@
 	function remove_accents($string) {
 		return strtr($string,
-	 	"?Ó??ó?Ý?úÁÀÃÂÄÇÉÈÊËÍÌ?ÎÏÑÕÔÓÒÖÚÙ?ÛÜ?áàãâäçéèêëíì?îïñóòõôöúù?ûüýÿ",
+	 	"?ï¿œ??ï¿œ?ï¿œ?ï¿œï¿œï¿œï¿œï¿œï¿œï¿œï¿œï¿œï¿œï¿œï¿œï¿œ?ï¿œï¿œï¿œï¿œï¿œï¿œï¿œï¿œï¿œï¿œ?ï¿œï¿œ?ï¿œï¿œï¿œï¿œï¿œï¿œï¿œï¿œï¿œï¿œï¿œï¿œ?ï¿œï¿œï¿œï¿œï¿œï¿œï¿œï¿œï¿œï¿œ?ï¿œï¿œï¿œï¿œ",
 	 	"SOZsozYYuAAAAACEEEEIIIIINOOOOOUUUUUsaaaaaceeeeiiiiinooooouuuuuyy");
 	}
@@ -3948,5 +3949,5 @@
 
 //Por Bruno Costa(bruno.vieira-costa@serpro.gov.br - Insere emails no imap a partir do fonte do mesmo. Se o argumento timestamp for passado ele utiliza do script python
-///expressoMail1_2/imap.py para inserir uma msg com o horário correto pois isso não é porssível com a função imap_append do php.
+///expressoMail1_2/imap.py para inserir uma msg com o horï¿œrio correto pois isso nï¿œo ï¿œ porssï¿œvel com a funï¿œï¿œo imap_append do php.
 
     function insert_email($source,$folder,$timestamp,$flags){
@@ -4004,10 +4005,10 @@
         if (version_compare(PHP_VERSION, '5.2.0', '>=')){
             if(!$source = base64_decode($source,true))
-                return "error ".$source."Espaços ".$i;
+                return "error ".$source."Espaï¿œos ".$i;
 
         }
         else {
             if(!$source = base64_decode($source))
-                return "error ".$source."Espaços ".$i;
+                return "error ".$source."Espaï¿œos ".$i;
         }
 
@@ -4045,5 +4046,5 @@
 
 //Por Bruno Costa(bruno.vieira-costa@serpro.gov.br - Trata fontes de emails enviados via POST para o servidor por um xmlhttprequest, as partes codificados com
-//Base64 os "+" são substituidos por " " no envio e essa função arruma esse efeito.
+//Base64 os "+" sï¿œo substituidos por " " no envio e essa funï¿œï¿œo arruma esse efeito.
 
     function treat_base64_from_post($source){
@@ -4071,5 +4072,5 @@
     }
 
-//Por Bruno Costa(bruno.vieira-costa@serpro.gov.br - Recebe os fontes dos emails a serem desarquivados, separa e envia cada um para função insert_mail.
+//Por Bruno Costa(bruno.vieira-costa@serpro.gov.br - Recebe os fontes dos emails a serem desarquivados, separa e envia cada um para funï¿œï¿œo insert_mail.
 
     function unarchive_mail($params)
@@ -4139,4 +4140,9 @@
 	    return $data; 
     }  
+    
+    //MailArchiver -> get offsettogmt as a global javascript variable, invoked at "main.js", init()
+    function get_offset_gmt(){
+        return($this->functions->CalculateDateOffset());
+    }
 }
 ?>
Index: /sandbox/expressoMail1_2/MailArchiver/2.2/expressoMail1_2/js/mail_archiver.js
===================================================================
--- /sandbox/expressoMail1_2/MailArchiver/2.2/expressoMail1_2/js/mail_archiver.js	(revision 4878)
+++ /sandbox/expressoMail1_2/MailArchiver/2.2/expressoMail1_2/js/mail_archiver.js	(revision 4893)
@@ -880,4 +880,11 @@
 }
 
+MailArchiver.prototype.toExpressoDate = function(data){
+    var ndate = new Date(data);
+    //ndate.setTime(data);
+    var odate = zeroFill(ndate.getDate()) + '/' + zeroFill(ndate.getMonth()+1) + '/' + zeroFill(ndate.getFullYear() + ' ' + zeroFill(ndate.getHours()) + ':' + zeroFill(ndate.getMinutes()) + ':' + zeroFill(ndate.getSeconds()));
+    return(odate);
+}
+
 MailArchiver.prototype.toExpressoFlags = function(data){
     if((data.length > 0) && (typeof(data) != 'undefined')){
@@ -916,5 +923,5 @@
 
 MailArchiver.prototype.toExpressoHeader = function(data){   
-    var tplHeader = 'a:19:{'
+    var tplHeader = 'a:16:{'
 +           's:11:"ContentType";'
 +           's:' + data.getContentType().length + ':"' + data.getContentType() + '";'
@@ -924,12 +931,6 @@
 +           's:5:"udate";'
 +           'i:' + parseInt(data.getDate()/1000) + ';'
-+           's:11:"offsetToGMT";'
-+           'i:-10800;'
 +           's:9:"timestamp";'
 +           'i:' + parseInt(data.getDate()/1000) + ';'
-+           's:9:"smalldate";'
-+           's:10:"01/04/2011";'
-+           's:8:"aux_date";'
-+           's:1:" ";'
 +           's:4:"from";'
 +           expresso_mail_archive.toExpressoAddress(data.getFrom())
@@ -943,5 +944,5 @@
 +           expresso_mail_archive.toExpressoAttachmentsHeader(data.getAttachments())
 +           '}';
-    //window.alert('Serialized data\n\n' + tplHeader);
+    //window.alert('Serialized data\n\n' + tplHeader + '\ngmtoffset: ' + gmtoffset);
     return(tplHeader);
 }
Index: /sandbox/expressoMail1_2/MailArchiver/2.2/expressoMail1_2/js/main.js
===================================================================
--- /sandbox/expressoMail1_2/MailArchiver/2.2/expressoMail1_2/js/main.js	(revision 4665)
+++ /sandbox/expressoMail1_2/MailArchiver/2.2/expressoMail1_2/js/main.js	(revision 4893)
@@ -14,5 +14,5 @@
 
 function init(){
-	if (!is_ie)
+        if (!is_ie)
 		Element('tableDivAppbox').width = '100%';
 
@@ -24,4 +24,9 @@
 
 	}
+        //MailArchiver save offset to gmt user preference data to list correctly date/time from messages list
+        var save_gmtoffset = function(data){
+            gmtoffset = data;
+        }
+        
 	var save_preferences = function(data){
 
@@ -66,4 +71,5 @@
 		cExecute ("$this.imap_functions.get_folders_list&onload=true", update_menu);
 		cExecute ("$this.db_functions.get_dropdown_contacts", save_contacts); //Save contacts needs preferences.
+                
 		if(preferences.hide_folders == "1")
 			Element('divAppboxHeader').innerHTML =  title_app_menu;
@@ -101,4 +107,7 @@
 
 	cExecute ("$this.functions.get_preferences", save_preferences);
+        //MailArchiver invoke get_offset_gmt from imap functions
+        cExecute ("$this.imap_functions.get_offset_gmt", save_gmtoffset);
+        
 	cExecute ("phpgwapi.browser.isMobile", function( data )
 	{
Index: /sandbox/expressoMail1_2/MailArchiver/2.2/expressoMail1_2/js/draw_api.js
===================================================================
--- /sandbox/expressoMail1_2/MailArchiver/2.2/expressoMail1_2/js/draw_api.js	(revision 4778)
+++ /sandbox/expressoMail1_2/MailArchiver/2.2/expressoMail1_2/js/draw_api.js	(revision 4893)
@@ -877,4 +877,5 @@
                         if ((headers_msgs[i].Unseen == 'U') || (headers_msgs[i].Recent == 'N'))
 				f_unseen++;
+                        //alert('adicionando mensagem ' + i + ' de ' + headers_msgs.length + '[' +headers_msgs[i].attachment+ ']')
                         tr_element = make_tr_message(headers_msgs[i], msg_folder, headers_msgs.offsetToGMT);
 			if (tr_element){
@@ -979,5 +980,5 @@
 		td_element2 = document.createElement("TD");
 		td_element2.className = "td_msg";
-		td_element2.setAttribute("width", "2%");
+		td_element2.setAttribute("width", "2%");                
 		if (headers_msgs.attachment && headers_msgs.attachment.number_attachments > 0)
 			td_element2.innerHTML = "<img src ='templates/"+template+"/images/clip.gif' title='" + url_decode(headers_msgs.attachment.names) + "'>";
@@ -1173,8 +1174,9 @@
                         // Using offset between user defined timezone and GMT
                         // Date object converts time to local timezone, so we have to adjust it
-                        udate_local = headers_msgs.udate*1000 + offsetToGMT*1000 + today.getTimezoneOffset()*60*1000;
+                        // MailArchiver: use global user preference from GMT to calculate time slice instead message serialized based
+                        //udate_local = headers_msgs.udate*1000 + offsetToGMT*1000 + today.getTimezoneOffset()*60*1000;
+                        udate_local = headers_msgs.udate*1000 + gmtoffset*1000 + today.getTimezoneOffset()*60*1000;
                         date_msg = new Date(udate_local);
                     }
-
                 if (today.getTime() - date_msg.getTime() < 86400000)
 			td_element5.innerHTML = norm(date_msg.getHours()) + ':' + norm(date_msg.getMinutes());
