Index: /sandbox/expressoMail1_2/MailArchiver/2.2/expressoMail1_2/js/main.js
===================================================================
--- /sandbox/expressoMail1_2/MailArchiver/2.2/expressoMail1_2/js/main.js	(revision 4644)
+++ /sandbox/expressoMail1_2/MailArchiver/2.2/expressoMail1_2/js/main.js	(revision 4665)
@@ -5,4 +5,12 @@
 var autosave_time = 20000;
 
+//MAILARCHIVE
+// Intervalo de tempo de verificacao de comunicacao com o MailArchiver (milisegundos)
+var check_services_interval = 2000;
+// Numero de tentativas de reconexao
+var check_services_tryouts = 1;
+// Limite de tentativas de reconexao
+var check_services_tryouts_limit = 5;
+
 function init(){
 	if (!is_ie)
@@ -24,6 +32,7 @@
 		if( (window.google && google.gears) && !google.gears.factory.getPermission())
 		    preferences.use_local_messages=0;
-
-		if ((preferences.use_local_messages==1) && (!window.google || !google.gears)) {
+                
+                //MAILARCHIVER TODO_01 = only offline needs to be handled
+		/*if ((preferences.use_local_messages==1) && (!window.google || !google.gears)) {
 		    temp = confirm(get_lang("To use local messages you have to install google gears. Would you like to be redirected to gears installation page?"));
 		    if (temp) {
@@ -35,5 +44,5 @@
 		    }
 		}
-		if (preferences.use_local_messages==1) { //O I.E 7 estava se atrapalhando caso esses loads fossem feitos após as chamadas ajax. Antes não apresentou problemas...
+		if (preferences.use_local_messages==1) { //O I.E 7 estava se atrapalhando caso esses loads fossem feitos apï¿œs as chamadas ajax. Antes nï¿œo apresentou problemas...
 			connector.loadScript('mail_sync');
 			if (is_ie)
@@ -42,4 +51,16 @@
 			
 		}
+                */
+                //MAILARCHIVER
+                //Try to get ArchiveServices object directly
+                //window.alert('em init com ArchiveServices = ' + ArchiveServices);
+                if(ArchiveServices)
+                    expresso_mail_archive.Startup();
+                //ArchiveServices not runnnig: catch the user preferences to set up message at header
+                else{
+                    if(preferences.use_local_messages=="1")
+                        write_msg(get_lang('Sorry, but Mail Archiver does not seems to be running or installed at this workstation. By now, we are turning off local messages!'));
+                }         
+                
 		cExecute ("$this.imap_functions.get_range_msgs2&folder=INBOX&msg_range_begin=1&msg_range_end="+preferences.max_email_per_page+"&sort_box_type=SORTARRIVAL&search_box_type=ALL&sort_box_reverse=1", handler_draw_box);
 		cExecute ("$this.imap_functions.get_folders_list&onload=true", update_menu);
@@ -56,6 +77,7 @@
 		ConstructMenuTools();
 		
-		if ( (preferences.use_local_messages==1) && (expresso_local_messages.is_offline_installed()) )  //Precisa ser feito após a renderização da caixa de emails
-			check_mail_in_queue();
+                //Disabled -> check futurelly to offline only
+		//if ( (preferences.use_local_messages==1) && (expresso_local_messages.is_offline_installed()) )  //Precisa ser feito apï¿œs a renderizaï¿œï¿œo da caixa de emails
+		//	check_mail_in_queue();
 		
 		// Insere a applet de criptografia
@@ -63,5 +85,5 @@
 			loadApplet();
 		}
-		// Fim da inserção da applet
+		// Fim da inserï¿œï¿œo da applet
 
 	}
@@ -72,5 +94,5 @@
 	}
 
-	// Versão
+	// Versï¿œo
 	Element('divAppboxHeader').innerHTML = title_app;
 
@@ -98,5 +120,5 @@
 		'<td style="padding-left:17px" width=33% id="content_quota" align=left></td>' +
 		'<td width=33% height=16px align=center nowrap><font face=Verdana, Arial, Helvetica, sans-serif color=#000066 size=2>' +
-		'<b>ExpressoMail Offline</b><font size=1><b> - Versão 1.0</b></font></td>' +
+		'<b>ExpressoMail Offline</b><font size=1><b> - Versï¿œo 1.0</b></font></td>' +
 		'<td width=33% id="div_menu_c3" align=right></td>' +
 		'</tr></table>';
@@ -119,5 +141,5 @@
 /**
  * Carrega a applet java no objeto search_div
- * @author Mário César Kolling <mario.kolling@serpro.gov.br>
+ * @author Mï¿œrio Cï¿œsar Kolling <mario.kolling@serpro.gov.br>
  */
 
@@ -187,5 +209,5 @@
 }
 /*
-	função que remove todos os anexos...
+	funï¿œï¿œo que remove todos os anexos...
 */
 function remove_all_attachments(folder,msg_num) {
@@ -279,9 +301,9 @@
 		// Verifica se existe o objeto applet
 		if (!Element('cert_applet')){
-			// se não existir, mostra mensagem de erro.
+			// se nï¿œo existir, mostra mensagem de erro.
 			write_msg(get_lang('The preference "%1" isn\'t enabled.', get_lang('Enable digitally sign/cipher the message?')));
 		} else {
 			// se existir prepara os dados para serem enviados e chama a
-			// operação na applet
+			// operaï¿œï¿œo na applet
 
 			connector.showProgressBar();
@@ -856,26 +878,26 @@
 }
 
-function archive_msgs(folder,folder_dest,id_msgs) {
-	if(proxy_mensagens.is_local_folder(folder)) {
-		write_msg(get_lang("You cant archive local mails"));
-		return;
-	}
-
-	if(currentTab.toString().indexOf("_r") != -1){
-            id_msgs = currentTab.toString().substr(0,currentTab.toString().indexOf("_r"));
-        }
-
-	if(!id_msgs)
-		id_msgs = get_selected_messages();
-
-	if(folder_dest=='local_root' || folder_dest==null) //Caso seja o primeiro arquivamento...
-		folder_dest = 'local_Inbox';
-
-	if (parseInt(id_msgs) > 0 || id_msgs.length > 0)
-		expresso_mail_sync.archive_msgs(folder,folder_dest,id_msgs);
-		//cExecute("$this.imap_functions.get_info_msgs&folder=" + folder + "&msgs_number=" + id_msgs , handler_arquivar_mensagens);
-	else
-		write_msg(get_lang('No selected message.'));
-
+//MAILARCHIVE NEW FUNC
+function archive_msgs(folder,folder_dest,id_msgs){
+    /*if(proxy_mensagens.is_local_folder(folder)) {
+        write_msg(get_lang("You cant archive local mails"));
+        return;
+    }*/
+
+    if(currentTab.toString().indexOf("_r") != -1){
+        id_msgs = currentTab.toString().substr(0,currentTab.toString().indexOf("_r"));
+    }
+
+    if(!id_msgs)
+        id_msgs = get_selected_messages();
+
+    if(folder_dest=='local_root' || folder_dest==null) //Caso seja o primeiro arquivamento...
+        folder_dest = 'local_Inbox';
+
+    if (parseInt(id_msgs) > 0 || id_msgs.length > 0){
+        expresso_mail_archive.Archive(folder,folder_dest,id_msgs);                   
+    }
+    else
+        write_msg(get_lang('No selected message.'));
 }
 
@@ -1265,5 +1287,5 @@
 						tmp = tmp.substring(0, tmp.length - 2);//corta a aspas e o parenteses
 						tmp = replaceAll(tmp,"%20"," ");
-						if (!tmp.match(/inc\/gotodownload.php/)) { //Anexos após ticket #1257 que usa gotodownload
+						if (!tmp.match(/inc\/gotodownload.php/)) { //Anexos apï¿œs ticket #1257 que usa gotodownload
 							var tempNomeArquivo = tmp.split("/");
 							var nomeArquivo = tempNomeArquivo[tempNomeArquivo.length - 1];
@@ -1274,5 +1296,5 @@
 						}
 						
-						if(nomeArquivo.match(/\.[a-z]{1,3}\.php$/i)!=null) //Anexos no gears podem vir com .php depois de sua extensão. tenho que tirar o .php para ficar o nome real do arquivo.
+						if(nomeArquivo.match(/\.[a-z]{1,3}\.php$/i)!=null) //Anexos no gears podem vir com .php depois de sua extensï¿œo. tenho que tirar o .php para ficar o nome real do arquivo.
 							nomeArquivo = nomeArquivo.substring(0, nomeArquivo.length - 4);
 						campo_arquivo = addForwardedFile(new_border_ID, nomeArquivo, link_attachment.href);
@@ -1364,5 +1386,5 @@
 			openTab.imapUid[new_border_ID] = parseInt(border_ID.substr(0,border_ID.indexOf("_")));
 			document.getElementById('font_border_id_'+new_border_ID).innerHTML = data.subject;
-			title = "Edição: "+data.subject;
+			title = "Ediï¿œï¿œo: "+data.subject;
 			
 			data.to = Element("to_values_" + border_ID).value;
@@ -1576,5 +1598,5 @@
 			}
 			else { // crypt
-				//TODO: Colocar mensagem de erro, e finalizar o método.
+				//TODO: Colocar mensagem de erro, e finalizar o mï¿œtodo.
 				operation = 'nop';
 			}
@@ -1644,10 +1666,10 @@
 
 /**
- * Método chamado pela applet para retornar o resultado da assinatura/decifragem do e-mail.
+ * Mï¿œtodo chamado pela applet para retornar o resultado da assinatura/decifragem do e-mail.
  * para posterior envio ao servidor.
- * @author Mário César Kolling <mario.kolling@serpro.gov.br>, Bruno Vieira da Costa <bruno.vieira-costa@serpro.gov.br>
+ * @author Mï¿œrio Cï¿œsar Kolling <mario.kolling@serpro.gov.br>, Bruno Vieira da Costa <bruno.vieira-costa@serpro.gov.br>
  * @param smime O e-mail decifrado/assinado
- * @param ID O ID do e-mail, para saber em que aba esse e-mail será mostrado.
- * @param operation A operação que foi realizada pela applet (assinatura ou decifragem)
+ * @param ID O ID do e-mail, para saber em que aba esse e-mail serï¿œ mostrado.
+ * @param operation A operaï¿œï¿œo que foi realizada pela applet (assinatura ou decifragem)
  */
 function appletReturn(smime, ID, operation, folder){
@@ -1680,8 +1702,8 @@
 	{
 		ID_tmp = ID;
-		// Lê a variável e chama a nova função cExecuteForm
+		// Lï¿œ a variï¿œvel e chama a nova funï¿œï¿œo cExecuteForm
 		// Processa e envia para o servidor web
 		// Faz o request do connector novamente. Talvez implementar no connector
-		// para manter coerência.
+		// para manter coerï¿œncia.
 
 		var handler_send_smime = function(data){
@@ -1695,8 +1717,8 @@
 		textArea.value += smime;
 
-		// Lê a variável e chama a nova função cExecuteForm
+		// Lï¿œ a variï¿œvel e chama a nova funï¿œï¿œo cExecuteForm
 		// Processa e envia para o servidor web
 		// Faz o request do connector novamente. Talvez implementar no connector
-		// para manter coerência.
+		// para manter coerï¿œncia.
 		if (is_ie){
 			var i = 0;
@@ -1764,7 +1786,7 @@
 		form = document.forms["form_message_"+ID];
 
-		// Evita que e-mails assinados sejam enviados quando o usuário tenta enviar um e-mail
-		// não assinado (desmarcou a opção) após tentar enviar um e-mail assinado que não passou
-		// no teste de validação.
+		// Evita que e-mails assinados sejam enviados quando o usuï¿œrio tenta enviar um e-mail
+		// nï¿œo assinado (desmarcou a opï¿œï¿œo) apï¿œs tentar enviar um e-mail assinado que nï¿œo passou
+		// no teste de validaï¿œï¿œo.
 		var checkSign = document.getElementById('return_digital_'+ID);
 		if (checkSign && !checkSign.checked){
@@ -1802,5 +1824,5 @@
 			return;
 		}else if(invalidEmail[0] == true){
-			write_msg("Os endereços de destinatário a seguir estão incorretos: "+invalidEmail[1]);
+			write_msg("Os endereï¿œos de destinatï¿œrio a seguir estï¿œo incorretos: "+invalidEmail[1]);
 			return;
 		}
@@ -2352,15 +2374,15 @@
 			if(to) {
 				if(!printListTO)
-					to = 'Os destinatários não estão sendo exibidos para esta impressão';
+					to = 'Os destinatï¿œrios nï¿œo estï¿œo sendo exibidos para esta impressï¿œo';
 				html += "<tr><td width=7%><font size='2'>" + get_lang('To') + ": </font></td><td><font size='2'>"+to+"</font></td></tr>";
 			}
 			if (cc) {
 				if(!printListCC)
-					cc = 'Os destinatários não estão sendo exibidos para esta impressão';
+					cc = 'Os destinatï¿œrios nï¿œo estï¿œo sendo exibidos para esta impressï¿œo';
 				html += "<tr><td width=7%><font size='2'>" + get_lang('Cc') + ": </font></td><td><font size='2'>"+cc+"</font></td></tr>";
 			}
 			if (cco) {
 				if(!printListCCO)
-					cco = 'Os destinatários não estão sendo exibidos para esta impressão';
+					cco = 'Os destinatï¿œrios nï¿œo estï¿œo sendo exibidos para esta impressï¿œo';
 				html += "<tr><td width=7%><font size='2'>" + get_lang('Cco') + ": </font></td><td><font size='2'>"+cco+"</font></td></tr>";
 			}
@@ -2709,5 +2731,5 @@
 	else {
 		expresso_local_messages.set_as_sent(rowid_message);
-		if(document.getElementById('_action')) { //Não posso manter esse elemento, pois o connector irá criar outro com o mesmo id para a próxima mensagem.
+		if(document.getElementById('_action')) { //Nï¿œo posso manter esse elemento, pois o connector irï¿œ criar outro com o mesmo id para a prï¿œxima mensagem.
 			el =document.getElementById('_action');
 			father = el.parentNode;
@@ -2792,2 +2814,131 @@
 		return arrayInvalidEmails;
 }
+
+//MAILARCHIVER
+function services_retry(){
+    //window.alert('services_retry invoked');
+    try{
+        /*if(ttintval)
+            window.alert('services_retry:\nttintval= ' + ttintval + '\nttintval2= ' + ttintval2 + '\ntryouts= ' + check_services_tryouts);
+        */
+        connector.purgeCache(); 
+        //window.alert('expresso var dump:\nenabled = ' + expresso_mail_archive.enabled + '\ntimer = ' + expresso_mail_archive.timer +'\ncounter = ' + expresso_mail_archive.counter);
+
+        if ((expresso_mail_archive.enabled == null) && (expresso_mail_archive.timer == null) && (expresso_mail_archive.counter > 0)){
+           
+            //window.clearInterval(ttintval);
+            //window.clearInterval(ttintval2);
+            connector.hideProgressBar();
+            connector.resetProgressBarText();
+            write_msg(get_lang('Sorry, but you need to reload this web page. Click at reload page at web browsing top navigation.'));
+            //location.reload();
+            return;
+
+        }
+
+        if (arguments.length == 0){
+           connector.setProgressBarText(get_lang('Trying to communicate with Mail Archiver...'));
+        }
+
+        connector.showProgressBar();
+        //var head= document.getElementsByTagName('head')[0];
+        var head = document.getElementById('send_queue');
+        var script= document.createElement('script');
+        var script_tag_id = 'mail_archiver_retry';
+
+        var script_utils= document.createElement('script');
+        var script_utils_tag_id = 'mail_archiver_retry_utils';
+
+        var script_transport= document.createElement('script');
+        var script_transport_tag_id = 'mail_archiver_retry_transport';
+
+        if(document.getElementById(script_tag_id)){
+            document.getElementById(script_tag_id).parentNode.removeChild(document.getElementById(script_tag_id));
+        }
+
+        if(document.getElementById(script_utils_tag_id)){
+            document.getElementById(script_utils_tag_id).parentNode.removeChild(document.getElementById(script_utils_tag_id));
+        }
+
+        if(document.getElementById(script_transport_tag_id)){
+            document.getElementById(script_transport_tag_id).parentNode.removeChild(document.getElementById(script_transport_tag_id));
+        }
+
+        //Transport
+        script_transport.type= 'text/javascript';
+        script_transport.src=  mail_archive_protocol + '://' + mail_archive_host + ':' + mail_archive_port  + '/arcservutil/cxf-addon-transport.js';
+        script_transport.id= script_transport_tag_id;
+        head.appendChild(script_transport);
+
+        //Utils Cors support
+        script_utils.type= 'text/javascript';
+        script_utils.src= mail_archive_protocol + '://' + mail_archive_host + ':' + mail_archive_port  + '/arcservutil/cxf-utils-cors.js';
+        script_utils.id= script_utils_tag_id;
+        head.appendChild(script_utils);
+
+        //Cxf core
+        script.type= 'text/javascript';
+        script.src= mail_archive_protocol + '://' + mail_archive_host + ':' + mail_archive_port  + '/arcserv/ArchiveServices?js&nojsutils';
+        script.id= script_tag_id;
+        head.appendChild(script);
+
+        //window.alert('Script tag added.  URL = ' + script.src);
+        ttintval = window.setTimeout('check_services_restart()', 1000);
+    }
+    catch (e){
+        //window.alert('e:' + e);
+        write_msg(get_lang('Sorry, but Mail Archiver still seems to be sleeping. Check out your system services!'));
+        connector.hideProgressBar();
+        connector.resetProgressBarText();
+        check_services_tryouts = 1;
+    }
+}
+
+//MAILARCHIVER
+function check_services_restart(){
+    //window.alert('check_services_restart invoked: expresso_mail_archive.enabled = ' + expresso_mail_archive.enabled + '\nArchiveServices = ' + ArchiveServices + '\nTryouts = ' + check_services_tryouts);
+    try{
+        connector.setProgressBarText(get_lang('Wait: attempt %1 from %2...', check_services_tryouts, check_services_tryouts_limit));
+        if(check_services_tryouts <= 5){
+            try{
+                ArchiveServices = new web_service_mailarchiver_serpro__ArchiveServices();
+                ArchiveServices.url = mail_archive_protocol + "://" + mail_archive_host + ":" + mail_archive_port + "/arcserv/ArchiveServices";
+                window.clearInterval(ttintval2);
+                //window.alert('ttintval2 cleaned up. ArchServ = ' + ArchiveServices);
+                expresso_mail_archive.Restart(expresso_mail_archive);
+            }
+            catch (e){
+                //window.alert('check_services_restart failure [attempt ' + check_services_tryouts +'] :' + e);
+                check_services_tryouts++;
+                //window.setTimeout('check_services_restart()', check_services_interval);
+                window.clearInterval(ttintval);
+                //window.alert('ttintval cleaned up.');
+                ttintval2 = window.setTimeout('services_retry(true)',1);
+                //window.alert('ttintval2 setted.');
+                //throw('check_services_restart failure [attempt ' + check_services_tryouts +'] :' + e);
+            }
+        }
+        else{
+           /* if (document.getElementById(script_tag_id))
+               var tem_tag = true;
+            else
+               var tem_tag = false;
+           */
+            //window.alert('else2 de check_services_restart...' + check_services_tryouts + '\ntag script? ' + tem_tag);
+            write_msg(get_lang('Sorry, but Mail Archiver still seems to be sleeping. Check out your system services!'));
+            connector.hideProgressBar();
+            connector.resetProgressBarText();
+            check_services_tryouts = 1;
+            //throw('else2 de check_services_restart...' + check_services_tryouts + '\ntag script? ' + tem_tag);
+        }
+    }
+    catch (e){
+        //window.alert('else3 de check_services_restart... :O' + e);
+        //check_services_tryouts++;
+        //window.setTimeout('check_services_restart()', check_services_interval);
+        write_msg(get_lang('Sorry, but Mail Archiver still seems to be sleeping. Check out your system services!'));
+        connector.hideProgressBar();
+        connector.resetProgressBarText();
+        check_services_tryouts = 1;
+    }
+}
