home *** CD-ROM | disk | FTP | other *** search
/ Windows News 2006 October / wn148cd2.iso / Windows / Communiquer / V4S / V4Sfr.exe / V4S.dll / 1036 / HTML / 162 < prev    next >
Text File  |  2006-02-03  |  45KB  |  1,386 lines

  1. <!DOCTYPE root [
  2. <!ENTITY nbsp " ">
  3. <!ENTITY eacute "é">
  4. <!ENTITY egrave "è">
  5. <!ENTITY ecirc "ê">
  6. ]>
  7. <html>
  8. <head>
  9. <title>V4S - Créer un message</title>
  10. <style>
  11.     body { margin: 0; margin-left: 20px; margin-top: 0px; }
  12.     body,td,a,p,.h {font: 11px 'Lucida Grande', Geneva, Arial, Verdana, sans-serif; }
  13.     
  14.     a {text-decoration:none; font-weight:bold; color:#304d75;}
  15.     a:hover {color:#333;}            
  16.     a.nav {color:#555;text-decoration:none}            
  17.     a:hover.nav {color:#287ac1;}
  18.     a.small {text-decoration:none; font-weight:normal; color:#287ac1;}
  19.     a:hover.small {color:#333;}
  20.     .bold{font-weight:bold;}
  21.     .odd{background-color: #eef5fc; cursor: pointer;}
  22.      .even{cursor: pointer;}
  23.      .select{background-color: #c1defa;cursor: pointer;}
  24.     
  25.     .a2 {text-decoration:underline; font-weight:bold; color:rgb(255,90,90);}
  26.     .a2:hover {text-decoration:underline; font-weight:bold; color:rgb(255,90,90);}            
  27.  
  28.     h1 {font-size: 16px; font-weight:bold;margin:0px; color:#287ac1;}
  29.     h2 {font-size: 12px; font-weight:bold;margin:0px; color:#333;}
  30.     h3 {font-size: 12px; font-weight:bold;margin:0px; color:#287ac1;}
  31.     h4 {font-size: 20px; font-weight:bold;margin:0px; color:#287ac1;}
  32.     
  33.     .status {color: #ffffff; font-size:10;}
  34. </style>
  35. </head>
  36. <body onload="onPageLoad();" onResize="onResize();">
  37.  
  38. <script language="javascript" type="text/javascript">
  39. <!--
  40.     var starting = true;
  41.     var v4sAppletRecorder = null;
  42.     var recordStatus = "Téléchargement en cours...";
  43.     var recordInfo = "";
  44.     var recordIsInfoError = false;
  45.     var oldRecordCount = 0;
  46.     var v4sBtnRecord;
  47.     var v4sBtnPlay;
  48.     
  49.     var loadTimeout = 30000;
  50.     var loadRefresh = 500;
  51.     
  52.     function onPageLoad()
  53.     {
  54.         v4sBtnSend = document.getElementById("v4sBtnSend");
  55.         v4sBtnRecord = document.getElementById("v4sBtnRecord");
  56.         v4sBtnPlay = document.getElementById("v4sBtnPlay");
  57.         
  58.         v4sBtnSend.disabled = false;
  59.         loadContacts();
  60.     }
  61.  
  62.     function onResize()
  63.     {
  64.         if ( document.getElementById("contactList")) {
  65.             var myWidth = 800, myHeight = 600;
  66.           if( typeof( window.innerWidth ) == 'number' ) {
  67.             //Non-IE
  68.             myWidth = window.innerWidth;
  69.             myHeight = window.innerHeight;
  70.           } else if( document.documentElement &&
  71.               ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
  72.             //IE 6+ in 'standards compliant mode'
  73.             myWidth = document.documentElement.clientWidth;
  74.             myHeight = document.documentElement.clientHeight;
  75.           } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
  76.             //IE 4 compatible
  77.             myWidth = document.body.clientWidth;
  78.             myHeight = document.body.clientHeight;
  79.           }
  80.  
  81.                 document.getElementById("contactList").style.height = myHeight - 104;
  82.         }
  83.     }
  84.  
  85.     function toggleContacts() {
  86.         var contactDiv = document.getElementById("contactsDiv");
  87.  
  88.         if (contactDiv != null) {
  89.             if (contactDiv.style.display == "") {
  90.                 contactDiv.style.display = "none";
  91.                 document.getElementById("togglecontacts").value="Afficher les contacts";
  92.             }
  93.             else {
  94.                 contactDiv.style.display = "";
  95.                 document.getElementById("togglecontacts").value="Cacher les contacts";
  96.             }
  97.         }    
  98.     }
  99.  
  100.     //Contact selection
  101.     function toggleContact(i, tr)
  102.     {
  103.         if (tr.className == "select")
  104.         {
  105.             if(i % 2 == 0)
  106.             {
  107.                 tr.className = "odd";
  108.             }
  109.             else
  110.             {
  111.                 tr.className = "even";
  112.             }
  113.         }
  114.         else
  115.         {
  116.             tr.className = "select";
  117.         }
  118.     }
  119. var detect = navigator.userAgent.toLowerCase();
  120. function checkIt(string)
  121. {
  122.     place = detect.indexOf(string) + 1;
  123.     thestring = string;
  124.     return place;
  125. }
  126. function isIE()
  127. {
  128.     return checkIt('msie') && !checkIt('opera');
  129. }
  130.     function addSelectedToRecipients() {
  131.         var i = 0;
  132.         var tr = document.getElementById("contactTr" + i);
  133.         while (tr)
  134.         {
  135.             if (tr.className == "select")
  136.             {
  137.                 addContact(i);
  138.             }
  139.             i++;
  140.             tr = document.getElementById("contactTr" + i);
  141.         }
  142.     }
  143.     function addContact(i)
  144.     {
  145.         var contactInfo = document.getElementById("contactInfo"+i);                
  146.         var selectedContacts;
  147.         selectedContacts = contactInfo.getAttribute("contact");
  148.  
  149.         var toArea = document.getElementById("toArea");
  150.         var toAreaValue = toArea.value;
  151.         
  152.         if ((toAreaValue != "") && (toAreaValue.match(/(,|;)\s*$/) == null)) {
  153.             selectedContacts = ", " + selectedContacts;
  154.         }
  155.         toArea.value += selectedContacts;
  156.     }
  157.     
  158.     function toggleRecorder() {        
  159.         v4sUpdateInfo();
  160.         
  161.         setTimeout("toggleRecorder_()", 250);
  162.     }
  163.     
  164.     function toggleRecorder_() {
  165.         if (document.getElementById("recording").checked) {
  166.         
  167.             if (document.getElementById("v4sAppletRecorder") == null) {            
  168.                 var content;
  169.                 var url = "{orb://page?orbName=upload&type=compose&orbFullScreen=true&orbFullUrl=true&orbSimpleUrl=true&orbUseHttps=true}";
  170.               
  171.                 if (isIE()) {
  172.                     content = ' \
  173.                         \n<object id="v4sAppletRecorder" \
  174.                         \n  classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" \
  175.                         \n  codebase="https://java.sun.com/update/1.5.0/jinstall-1_5-windows-i586.cab#Version=5,0,0,5" \
  176.                         \n  width="3" height="3"> \
  177.                         \n        <param name="code" value="com.orb.v4s.Record.class" /> \
  178.                         \n        <param name="codebase" value="https://<tmpl_var host/>/orb/applets/jars" /> \
  179.                         \n        <param name="archive" value="record.jar" /> \
  180.                         \n        <param name="type" value="application/x-java-applet;version=1.5" /> \
  181.                         \n        <param name="scriptable" value="true" /> \
  182.                         \
  183.                         <tmpl_if debug>\n      <param name="debug" value="true" /></tmpl_if> \
  184.                         \n        <param name="url" value="' + url + '" /> \
  185.                         \n        <param name="locale" value="fr" /> \
  186.                         \n        <param name="stateChangedCallback" value="v4sStateChanged" /> \
  187.                         \n        <param name="filenameCallback" value="v4sSetRecordFilename" /> \
  188.                         \n        <param name="statusCallback" value="v4sSetRecordStatus" /> \
  189.                         \n        <param name="infoCallback" value="v4sSetRecordInfo" /> \
  190.                         \n</object> \
  191.                     ';
  192.                 }
  193.                 else {
  194.                     content = ' \
  195.                         \n<embed id="v4sAppletRecorder" \
  196.                         \n    type="application/x-java-applet;version=1.5" \
  197.                         \n    pluginspage="http://java.sun.com/products/plugin/index.html#download" \
  198.                         \n    code="com.orb.v4s.Record.class" \
  199.                         \n    codebase="https://<tmpl_var host/>/orb/applets/jars" \
  200.                         \n    archive="record.jar" \
  201.                         \n    width="3" height="3" \
  202.                         \n    mayscript="true" \
  203.                         \
  204.                         <tmpl_if debug>\n    debug="true"/</tmpl_if> \
  205.                         \n    url="' + url + '" \
  206.                         \n    locale="fr" \
  207.                         \n    stateChangedCallback="v4sStateChanged" \
  208.                         \n    filenameCallback="v4sSetRecordFilename" \
  209.                         \n    statusCallback="v4sSetRecordStatus" \
  210.                         \n    infoCallback="v4sSetRecordInfo" \
  211.                         \n/> \
  212.                     ';
  213.                 }
  214.             
  215.                 var recorderSpan = document.getElementById("v4sRecordDiv");
  216.                 recorderSpan.innerHTML = content;
  217.                 
  218.                 // start a fake recording just so that everything in Java is preloaded
  219.                 v4sWaitForApplet();
  220.             }
  221.             else {
  222.                 v4sStateChanged();
  223.             }
  224.         }
  225.         else {
  226.             v4sAppletRecorder.setState("STATE_READY");
  227.             v4sBtnRecord.src = "{orb://image?orbName=recordDisabled.gif&orbSimpleUrl=true}";
  228.             v4sBtnRecord.title = "Start recording";
  229.             v4sBtnRecord.style.cursor = "default";
  230.             
  231.             v4sBtnPlay.src = "{orb://image?orbName=playDisabled.gif&orbSimpleUrl=true}";
  232.             v4sBtnPlay.title = "Start playing";
  233.             v4sBtnPlay.style.cursor = "default";
  234.         }
  235.     }
  236.  
  237.     function v4sSetRecordFilename(filename) {
  238.         var recording = document.getElementById("recording");
  239.         recording.value = filename;
  240.         
  241.         var input = document.createElement("input");
  242.         input.setAttribute("type", "hidden");
  243.         input.setAttribute("name", "oldRecording" + oldRecordCount);
  244.         input.setAttribute("value", filename);
  245.         var composeForm = document.getElementById("composeForm");
  246.         composeForm.appendChild(input);
  247.         oldRecordCount++;
  248.     }
  249.  
  250.     function v4sSetRecordStatus(text) {
  251.         if (!starting) {
  252.             recordStatus = text;
  253.             v4sUpdateInfo();
  254.         }
  255.     }
  256.  
  257.     function v4sSetRecordInfo(text, isError) {
  258.         if (!starting) {
  259.             recordInfo = text;
  260.             // check if isError is the native type "boolean" or the object "Boolean"
  261.             if (typeof(isError) == "boolean") {
  262.                 recordIsInfoError = isError;
  263.             }
  264.             else {
  265.                 recordIsInfoError = isError.booleanValue();
  266.             }
  267.             v4sUpdateInfo();
  268.         }
  269.     }
  270.  
  271.     function v4sUpdateInfo() {
  272.         var fullText;
  273.         var recordDiv = document.getElementById("recorderInfo");
  274.         
  275.         fullText = recordStatus;
  276.         if ((recordInfo != null) && (recordInfo != "")) {
  277.             fullText += ' (';
  278.             if (recordIsInfoError) {
  279.                 fullText += '<span style="font-weight: bold; color: rgb(255,90,90);">';
  280.             }
  281.             fullText += recordInfo;
  282.             if (recordIsInfoError) {
  283.                 fullText += '</span>';
  284.             }
  285.             fullText += ')';
  286.         }
  287.         recordDiv.innerHTML = fullText;
  288.     }
  289.     
  290.     function v4sStateChanged() {
  291.         var state = v4sAppletRecorder.getState();
  292.         if (starting) {
  293.             if (state == "STATE_READY") {
  294.                 starting = false;
  295.                 v4sAppletRecorder.clearAudio();
  296.                 v4sBtnRecord.src = "{orb://image?orbName=recordStart.gif&orbSimpleUrl=true}";
  297.                 v4sBtnRecord.title = "Start recording";
  298.                 v4sBtnRecord.style.cursor = "pointer";
  299.                 
  300.                 v4sBtnPlay.src = "{orb://image?orbName=playDisabled.gif&orbSimpleUrl=true}";
  301.                 v4sBtnPlay.title = "Start playing";
  302.                 v4sBtnPlay.style.cursor = "default";
  303.                 
  304.                 v4sBtnSend.disabled = false;
  305.                 v4sSetRecordStatus("Prêt");
  306.             }
  307.         }
  308.         else {
  309.             if (state == "STATE_READY") {
  310.                 v4sBtnRecord.src = "{orb://image?orbName=recordStart.gif&orbSimpleUrl=true}";
  311.                 v4sBtnRecord.title = "Start recording";
  312.                 v4sBtnRecord.style.cursor = "pointer";
  313.                 if (v4sAppletRecorder.hasAudio()) {
  314.                     v4sBtnPlay.src = "{orb://image?orbName=playStart.gif&orbSimpleUrl=true}";
  315.                     v4sBtnPlay.title = "Start playing";
  316.                     v4sBtnPlay.style.cursor = "pointer";
  317.                 }
  318.                 else {    
  319.                     v4sBtnPlay.src = "{orb://image?orbName=playDisabled.gif&orbSimpleUrl=true}";
  320.                     v4sBtnPlay.title = "Start playing";
  321.                     v4sBtnPlay.style.cursor = "default";
  322.                 }
  323.                 v4sBtnSend.disabled = false;
  324.                 if (v4sAppletRecorder.hasAudio()) {
  325.                     v4sSetRecordStatus("Message enregistré");
  326.                 }
  327.                 else {
  328.                     v4sSetRecordStatus("Prêt");
  329.                 }
  330.             }
  331.             else if (state == "STATE_RECORDING") {
  332.                 v4sBtnRecord.src = "{orb://image?orbName=recordStop.gif&orbSimpleUrl=true}";
  333.                 v4sBtnRecord.title = "Arreter l'enregistrement";
  334.                 v4sBtnRecord.style.cursor = "pointer";
  335.                 
  336.                 v4sBtnPlay.src = "{orb://image?orbName=playDisabled.gif&orbSimpleUrl=true}";
  337.                 v4sBtnPlay.title = "Démarrer l'écoute";
  338.                 v4sBtnPlay.style.cursor = "default";
  339.                 
  340.                 v4sBtnSend.disabled = true;
  341.                 v4sSetRecordStatus("Enregistrement en cours...");
  342.             }
  343.             else if (state == "STATE_SENDING") {
  344.                 v4sBtnRecord.src = "{orb://image?orbName=recordDisabled.gif&orbSimpleUrl=true}";
  345.                 v4sBtnRecord.title = "Démarre l'enregistrement";
  346.                 v4sBtnRecord.style.cursor = "default";
  347.                 
  348.                 v4sBtnPlay.src = "{orb://image?orbName=playDisabled.gif&orbSimpleUrl=true}";
  349.                 v4sBtnPlay.title = "Démarrer l'écoute";
  350.                 v4sBtnPlay.style.cursor = "default";
  351.                 
  352.                 v4sBtnSend.disabled = true;
  353.                 v4sSetRecordStatus("Patientez...");
  354.             }
  355.             else if (state == "STATE_PLAYING") {
  356.                 v4sBtnRecord.src = "{orb://image?orbName=recordDisabled.gif&orbSimpleUrl=true}";
  357.                 v4sBtnRecord.title = "Démarre l'enregistrement";
  358.                 v4sBtnRecord.style.cursor = "default";
  359.                 
  360.                 v4sBtnPlay.src = "{orb://image?orbName=playStop.gif&orbSimpleUrl=true}";
  361.                 v4sBtnPlay.title = "Arreter l'écoute";
  362.                 v4sBtnPlay.style.cursor = "pointer";
  363.                 
  364.                 v4sBtnSend.disabled = true;
  365.                 v4sSetRecordStatus("Ecoute en cours...");
  366.             }
  367.         }
  368.     }
  369.     
  370.     function v4sWaitForRecord() {
  371.         if (v4sAppletRecorder.getState() == "STATE_RECORDING") {
  372.             v4sAppletRecorder.setState("STATE_READY");
  373.         }
  374.         else {
  375.             setTimeout("v4sWaitForRecord()",1000);
  376.         }    
  377.     }
  378.         
  379.     var v4sWaitForAppletCounter = 0;
  380.     function v4sWaitForApplet() {
  381.         var done = false;
  382.         
  383.         if (!v4sAppletRecorder) {
  384.             v4sAppletRecorder = document.getElementById("v4sAppletRecorder");
  385.         }
  386.         if (v4sAppletRecorder) {
  387.             if (typeof (v4sAppletRecorder.isActive) == "undefined") {
  388.                 recordStatus = 'Java n\'est pas installé ou est désactivé';
  389.                 v4sUpdateInfo();
  390.                 v4sAppletRecorder = null;
  391.                 return;
  392.             }
  393.             if (v4sAppletRecorder.isActive()) {
  394.                 v4sAppletRecorder.setState("STATE_RECORDING");
  395.                 setTimeout("v4sWaitForRecord()",1000);
  396.                 done = true;
  397.             }
  398.         }
  399.         
  400.         if (!done) {
  401.             if (v4sWaitForAppletCounter == loadTimeout) {
  402.                 recordStatus = 'Problème avec Java, consulté la <a class="a2" target="_blank" href="http://support.orb.com/support/index.jsp?cat=6&scat=29">FAQ</a>.';
  403.                 v4sUpdateInfo();
  404.             }
  405.             else {
  406.                 recordStatus += ".";
  407.                 v4sUpdateInfo();
  408.                 
  409.                 v4sWaitForAppletCounter += loadRefresh;
  410.                 setTimeout("v4sWaitForApplet()",loadRefresh);
  411.             }
  412.         }
  413.     }
  414.     
  415.     function v4sRecordClicked() {
  416.         if (!starting) {
  417.             var state = v4sAppletRecorder.getState();
  418.             if (state == "STATE_READY"){
  419.                 if (v4sBtnRecord.style.cursor == "pointer") {
  420.                     v4sBtnRecord.src = "{orb://image?orbName=recordDisabled.gif&orbSimpleUrl=true}";
  421.                     v4sBtnRecord.style.cursor = "default";
  422.                     v4sBtnPlay.src = "{orb://image?orbName=playDisabled.gif&orbSimpleUrl=true}";
  423.                     v4sBtnPlay.style.cursor = "default";
  424.                     v4sSetRecordInfo("", Boolean(false));
  425.                     v4sSetRecordStatus("Initialisation...");
  426.                     v4sAppletRecorder.setState("STATE_RECORDING");
  427.                 }
  428.             }
  429.             else if (state == "STATE_RECORDING") {
  430.                 v4sAppletRecorder.setState("STATE_SENDING");
  431.             }
  432.         }
  433.     }
  434.     
  435.     function v4sPlayClicked() {
  436.         if (!starting) {
  437.             var state = v4sAppletRecorder.getState();
  438.             if (state == "STATE_READY") {
  439.                 if (v4sBtnPlay.style.cursor == "pointer") {
  440.                     if (v4sAppletRecorder.hasAudio()) {
  441.                         v4sAppletRecorder.setState("STATE_PLAYING");
  442.                     }
  443.                 }
  444.             }
  445.             else if (state == "STATE_PLAYING") {
  446.                 v4sAppletRecorder.setState("STATE_READY");
  447.             }
  448.         }
  449.     }
  450.     
  451. //AJAX functions for loading contacts
  452. function makeObject()
  453. {
  454.     if (window.XMLHttpRequest) {
  455.         return new XMLHttpRequest();
  456.     }
  457.     else if (window.ActiveXObject) {
  458.         return new ActiveXObject("Microsoft.XMLHTTP");
  459.     }
  460.     else {
  461.         return null;
  462.     }
  463. }
  464. function loadContacts(){        
  465.     var url = '{orb://page?orbName=contactsDiv&orbFullScreen=true&orbSimpleUrl=true&orbNoTimeout=true}';
  466.     requester.open('get', url);
  467.     
  468.     requester.onreadystatechange = parseInfo;
  469.     
  470.     requester.send('');    
  471. }
  472. function parseInfo(){
  473.     if(requester.readyState == 1){
  474.         document.getElementById('contactListDiv').innerHTML = 'Loading...';
  475.     }
  476.     if(requester.readyState == 4){        
  477.         if (requester.status == 200)
  478.         {
  479.             document.getElementById('contactListDiv').innerHTML = requester.responseText;
  480.             initAutoComplete();
  481.         }
  482.         else
  483.         {
  484.             document.getElementById('contactListDiv').innerHTML = "Error retrieving contacts";
  485.         }
  486.     }
  487. }
  488. var requester = makeObject();
  489.  
  490. var http_request = false;
  491. var formSubmitted = false;
  492. function makePOSTRequest(url, parameters) {
  493.     if (formSubmitted)
  494.         return false;
  495.     formSubmitted = true;
  496.     v4sBtnSend.disabled = true;
  497.     
  498.   http_request = makeObject();
  499.   
  500.   http_request.onreadystatechange = onSendStateChange;
  501.   http_request.open('POST', url, true);
  502.   http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  503.   http_request.setRequestHeader("Content-length", parameters.length);
  504.   http_request.setRequestHeader("Connection", "close");
  505.   
  506.   http_request.send(parameters);
  507.   return false;
  508. }
  509.  
  510. function onSendStateChange() {
  511.     if(http_request.readyState == 1){
  512.         document.getElementById('statusDiv').innerHTML = 'Envoi du message en court...';
  513.     }
  514.   if (http_request.readyState == 4) {
  515.       formSubmitted = false;
  516.       v4sBtnSend.disabled = false;
  517.      if (http_request.status == 200) {        
  518.         result = http_request.responseXML;
  519.         message = "Error parsing XML";
  520.         if (result)
  521.         {
  522.             var root = result.getElementsByTagName("v4sComposeDone")[0];
  523.             if (root)
  524.             {
  525.                 var errorCode = root.getAttribute('errorCode');
  526.                 if (errorCode != 0)
  527.                 {
  528.                     message = root.childNodes[0].nodeValue;
  529.                     if (message == "")
  530.                         message = "Unknown error";
  531.                 }
  532.                 else
  533.                 {
  534.                     message = "";
  535.                 }
  536.             }
  537.         }
  538.         if (message != "")
  539.         {            
  540.             document.getElementById('statusDiv').innerHTML = '<font color="red">' +  message + '</font>';
  541.         }
  542.         else
  543.         {
  544.             //Done
  545.             document.getElementById('statusDiv').innerHTML = '<font color="green">Message envoyé avec succès.</font>';
  546.             v4sBtnSend.disabled = true;
  547.             setTimeout( 'window.close();', 1000 );
  548.         }
  549.         
  550.      } else {
  551.              document.getElementById('statusDiv').innerHTML = '<font color="red">Le message n'a pas pu être envoyé.</font>';
  552.      }
  553.   }
  554. }
  555. function getFormValues(fobj)
  556. {
  557.     var str = "";
  558.     var valueArr = null;
  559.     var val = "";
  560.     var cmd = "";
  561.     for(var i = 0;i < fobj.elements.length;i++)
  562.     {
  563.         if(fobj.elements[i].type == "select-one")
  564.         {
  565.             str += encodeURIComponent(fobj.elements[i].name) + "=" + encodeURIComponent(fobj.elements[i].options[fobj.elements[i].selectedIndex].value) + "&";
  566.         }
  567.         else
  568.         {
  569.             if (fobj.elements[i].type == "checkbox" && !fobj.elements[i].checked)
  570.             {                
  571.                 str += encodeURIComponent(fobj.elements[i].name) + "=&";
  572.             }
  573.             else
  574.             {
  575.                 str += encodeURIComponent(fobj.elements[i].name) + "=" + encodeURIComponent(fobj.elements[i].value) + "&";
  576.             }
  577.         }
  578.     }
  579.     str = str.substr(0,(str.length - 1));
  580.     return str;
  581. }
  582. function submitform(obj) {
  583.     //check that to is not empty
  584.     var fobj = document.getElementById('composeForm');
  585.     if (fobj.to.value == "")
  586.     {
  587.         alert("Please enter a recipient");
  588.         return false;
  589.     }
  590.     //if (fobj.subject.value == "")
  591.     //{
  592.     //    var subject = prompt ("You did not specify a subject for this message. If you would like to provide one, please type it now.","(no subject)");
  593.     //    if (subject == null)
  594.     //        return false;
  595.     //    fobj.subject.value = subject;        
  596.     //}
  597.   var poststr = getFormValues( document.getElementById('composeForm') );
  598.   makePOSTRequest('{orb://page?orbName=msgSend&orbFullScreen=true&orbNoTimeout=true}', poststr);
  599.   return false;
  600. }
  601.  
  602. //Autocomplete
  603. var customarray=new Array();;
  604. var obj;
  605. function initAutoComplete()
  606. {    
  607.     var i = 0;
  608.     var tr = document.getElementById("contactTr" + i);
  609.     while (tr)
  610.     {
  611.         var contactInfo = document.getElementById("contactInfo"+i);
  612.         customarray[i] = contactInfo.getAttribute("contact");
  613.         i++;
  614.         tr = document.getElementById("contactTr" + i);
  615.     }    
  616.     //obj=actb(document.getElementById('toArea'),customarray);
  617.     obj.actb_keywords = customarray;
  618. }
  619.  
  620. function addEvent(obj,event_name,func_name){
  621.     if (obj.attachEvent){
  622.         obj.attachEvent("on"+event_name, func_name);
  623.     }else if(obj.addEventListener){
  624.         obj.addEventListener(event_name,func_name,true);
  625.     }else{
  626.         obj["on"+event_name] = func_name;
  627.     }
  628. }
  629. function removeEvent(obj,event_name,func_name){
  630.     if (obj.detachEvent){
  631.         obj.detachEvent("on"+event_name,func_name);
  632.     }else if(obj.removeEventListener){
  633.         obj.removeEventListener(event_name,func_name,true);
  634.     }else{
  635.         obj["on"+event_name] = null;
  636.     }
  637. }
  638. function stopEvent(evt){
  639.     evt || window.event;
  640.     if (evt.stopPropagation){
  641.         evt.stopPropagation();
  642.         evt.preventDefault();
  643.     }else if(typeof evt.cancelBubble != "undefined"){
  644.         evt.cancelBubble = true;
  645.         evt.returnValue = false;
  646.     }
  647.     return false;
  648. }
  649. function getElement(evt){
  650.     if (window.event){
  651.         return window.event.srcElement;
  652.     }else{
  653.         return evt.currentTarget;
  654.     }
  655. }
  656. function getTargetElement(evt){
  657.     if (window.event){
  658.         return window.event.srcElement;
  659.     }else{
  660.         return evt.target;
  661.     }
  662. }
  663. function stopSelect(obj){
  664.     if (typeof obj.onselectstart != 'undefined'){
  665.         addEvent(obj,"selectstart",function(){ return false;});
  666.     }
  667. }
  668. function getCaretEnd(obj){
  669.     if(typeof obj.selectionEnd != "undefined"){
  670.         return obj.selectionEnd;
  671.     }else if(document.selection&&document.selection.createRange){
  672.         var M=document.selection.createRange();
  673.         try{
  674.             var Lp = M.duplicate();
  675.             Lp.moveToElementText(obj);
  676.         }catch(e){
  677.             var Lp=obj.createTextRange();
  678.         }
  679.         Lp.setEndPoint("EndToEnd",M);
  680.         var rb=Lp.text.length;
  681.         if(rb>obj.value.length){
  682.             return -1;
  683.         }
  684.         return rb;
  685.     }
  686. }
  687. function getCaretStart(obj){
  688.     if(typeof obj.selectionStart != "undefined"){
  689.         return obj.selectionStart;
  690.     }else if(document.selection&&document.selection.createRange){
  691.         var M=document.selection.createRange();
  692.         try{
  693.             var Lp = M.duplicate();
  694.             Lp.moveToElementText(obj);
  695.         }catch(e){
  696.             var Lp=obj.createTextRange();
  697.         }
  698.         Lp.setEndPoint("EndToStart",M);
  699.         var rb=Lp.text.length;
  700.         if(rb>obj.value.length){
  701.             return -1;
  702.         }
  703.         return rb;
  704.     }
  705. }
  706. function setCaret(obj,l){
  707.     obj.focus();
  708.     if (obj.setSelectionRange){
  709.         obj.setSelectionRange(l,l);
  710.     }else if(obj.createTextRange){
  711.         m = obj.createTextRange();        
  712.         m.moveStart('character',l);
  713.         m.collapse();
  714.         m.select();
  715.     }
  716. }
  717. function setSelection(obj,s,e){
  718.     obj.focus();
  719.     if (obj.setSelectionRange){
  720.         obj.setSelectionRange(s,e);
  721.     }else if(obj.createTextRange){
  722.         m = obj.createTextRange();        
  723.         m.moveStart('character',s);
  724.         m.moveEnd('character',e);
  725.         m.select();
  726.     }
  727. }
  728. String.prototype.addslashes = function(){
  729.     return this.replace(/(["\\\.\|\[\]\^\*\+\?\$\(\)])/g, '\\$1');
  730. }
  731. String.prototype.trim = function () {
  732.     return this.replace(/^\s*(\S*(\s+\S+)*)\s*$/, "$1");
  733. };
  734. function curTop(obj){
  735.     toreturn = 0;
  736.     while(obj){
  737.         toreturn += obj.offsetTop;
  738.         obj = obj.offsetParent;
  739.     }
  740.     return toreturn;
  741. }
  742. function curLeft(obj){
  743.     toreturn = 0;
  744.     while(obj){
  745.         toreturn += obj.offsetLeft;
  746.         obj = obj.offsetParent;
  747.     }
  748.     return toreturn;
  749. }
  750. function isNumber(a) {
  751.     return typeof a == 'number' && isFinite(a);
  752. }
  753. function replaceHTML(obj,text){
  754.     while(el = obj.childNodes[0]){
  755.         obj.removeChild(el);
  756.     };
  757.     obj.appendChild(document.createTextNode(text));
  758. }
  759.  
  760. function actb(obj,ca){    
  761.     this.actb_timeOut = -1; // Autocomplete Timeout in ms (-1: autocomplete never time out)
  762.     this.actb_lim = 10;    // Number of elements autocomplete can show (-1: no limit)
  763.     this.actb_firstText = true; // should the auto complete be limited to the beginning of keyword?
  764.     this.actb_mouse = true; // Enable Mouse Support
  765.     this.actb_delimiter = new Array(';',',');  // Delimiter for multiple autocomplete. Set it to empty array for single autocomplete
  766.     this.actb_startcheck = 1; // Show widget only after this number of characters is typed in.
  767.  
  768.     this.actb_bgColor = '#eef5fc';
  769.     this.actb_textColor = '#000000';
  770.     this.actb_hColor = '#c1defa';
  771.     this.actb_fFamily = 'Verdana';
  772.     this.actb_fSize = '11px';
  773.     this.actb_hStyle = 'text-decoration:underline;font-weight: bold';
  774.  
  775.     var actb_delimwords = new Array();
  776.     var actb_cdelimword = 0;
  777.     var actb_delimchar = new Array();
  778.     var actb_display = false;
  779.     var actb_pos = 0;
  780.     var actb_total = 0;
  781.     var actb_curr = null;
  782.     var actb_rangeu = 0;
  783.     var actb_ranged = 0;
  784.     var actb_bool = new Array();
  785.     var actb_pre = 0;
  786.     var actb_toid;
  787.     var actb_tomake = false;
  788.     var actb_getpre = "";
  789.     var actb_mouse_on_list = 1;
  790.     var actb_kwcount = 0;
  791.     var actb_caretmove = false;
  792.     this.actb_keywords = new Array();
  793.     
  794.     this.actb_keywords = ca;
  795.     var actb_self = this;
  796.  
  797.     actb_curr = obj;
  798.  
  799.     addEvent(actb_curr,"focus",actb_setup);
  800.     function actb_setup(){
  801.         addEvent(document,"keydown",actb_checkkey);
  802.         addEvent(actb_curr,"blur",actb_clear);
  803.         addEvent(document,"keypress",actb_keypress);
  804.     }
  805.  
  806.     function actb_clear(evt){
  807.         if (!evt) evt = event;
  808.         removeEvent(document,"keydown",actb_checkkey);
  809.         removeEvent(actb_curr,"blur",actb_clear);
  810.         removeEvent(document,"keypress",actb_keypress);
  811.         actb_removedisp();        
  812.     }
  813.     function actb_parse(n){
  814.         if (actb_self.actb_delimiter.length > 0){
  815.             var t = actb_delimwords[actb_cdelimword].trim().addslashes();
  816.             var plen = actb_delimwords[actb_cdelimword].trim().length;
  817.         }else{
  818.             var t = actb_curr.value.addslashes();
  819.             var plen = actb_curr.value.length;
  820.         }
  821.         var tobuild = '';
  822.         var i;
  823.  
  824.         if (actb_self.actb_firstText){
  825.             var re = new RegExp("(^|\\W)" + t, "i");
  826.         }else{
  827.             var re = new RegExp(t, "i");
  828.         }
  829.         var p = n.search(re)+1;
  830.                 
  831.         for (i=0;i<p;i++){
  832.             ch = n.substr(i,1);
  833.             if (ch == '<'){
  834.                 tobuild += '<';
  835.             }
  836.             else if (ch =='>'){
  837.                 tobuild += '>';
  838.             }
  839.             else
  840.                 tobuild += ch;
  841.         }
  842.         tobuild += "<font style='"+(actb_self.actb_hStyle)+"'>"
  843.         for (i=p;i<plen+p;i++){
  844.             ch = n.substr(i,1);
  845.             if (ch == '<'){
  846.                 tobuild += '<';
  847.             }
  848.             else if (ch =='>'){
  849.                 tobuild += '>';
  850.             }
  851.             else
  852.                 tobuild += ch;
  853.         }
  854.         tobuild += "</font>";
  855.         for (i=plen+p;i<n.length;i++){
  856.             ch = n.substr(i,1);
  857.             if (ch == '<'){
  858.                 tobuild += '<';
  859.             }
  860.             else if (ch =='>'){
  861.                 tobuild += '>';
  862.             }
  863.             else
  864.                 tobuild += ch;
  865.         }        
  866.         return tobuild;
  867.     }
  868.     function actb_generate(){
  869.         if (document.getElementById('tat_table')){ actb_display = false;document.body.removeChild(document.getElementById('tat_table')); } 
  870.         if (actb_kwcount == 0){
  871.             actb_display = false;
  872.             return;
  873.         }
  874.         a = document.createElement('table');
  875.         a.cellSpacing='1px';
  876.         a.cellPadding='2px';
  877.         a.style.position='absolute';
  878.         a.style.top = eval(curTop(actb_curr) + actb_curr.offsetHeight) + "px";
  879.         a.style.left = curLeft(actb_curr) + "px";
  880.         a.style.backgroundColor=actb_self.actb_bgColor;
  881.         a.id = 'tat_table';
  882.         document.body.appendChild(a);
  883.         var i;
  884.         var first = true;
  885.         var j = 1;
  886.         if (actb_self.actb_mouse){
  887.             a.onmouseout = actb_table_unfocus;
  888.             a.onmouseover = actb_table_focus;
  889.         }
  890.         var counter = 0;
  891.         for (i=0;i<actb_self.actb_keywords.length;i++){
  892.             if (actb_bool[i]){
  893.                 counter++;
  894.                 r = a.insertRow(-1);
  895.                 if (first && !actb_tomake){
  896.                     r.style.backgroundColor = actb_self.actb_hColor;
  897.                     first = false;
  898.                     actb_pos = counter;
  899.                 }else if(actb_pre == i){
  900.                     r.style.backgroundColor = actb_self.actb_hColor;
  901.                     first = false;
  902.                     actb_pos = counter;
  903.                 }else{
  904.                     r.style.backgroundColor = actb_self.actb_bgColor;
  905.                 }
  906.                 r.id = 'tat_tr'+(j);
  907.                 c = r.insertCell(-1);
  908.                 c.style.color = actb_self.actb_textColor;
  909.                 c.style.fontFamily = actb_self.actb_fFamily;
  910.                 c.style.fontSize = actb_self.actb_fSize;
  911.                 c.innerHTML = actb_parse(actb_self.actb_keywords[i]);
  912.                 c.id = 'tat_td'+(j);
  913.                 c.setAttribute('pos',j);
  914.                 if (actb_self.actb_mouse){
  915.                     c.style.cursor = 'pointer';
  916.                     c.onclick=actb_mouseclick;
  917.                     c.onmouseover = actb_table_highlight;
  918.                 }
  919.                 j++;
  920.             }
  921.             if (j - 1 == actb_self.actb_lim && j < actb_total){
  922.                 r = a.insertRow(-1);
  923.                 r.style.backgroundColor = actb_self.actb_bgColor;
  924.                 c = r.insertCell(-1);
  925.                 c.style.color = actb_self.actb_textColor;
  926.                 c.style.fontFamily = 'arial narrow';
  927.                 c.style.fontSize = actb_self.actb_fSize;
  928.                 c.align='center';
  929.                 replaceHTML(c,'\\/');
  930.                 if (actb_self.actb_mouse){
  931.                     c.style.cursor = 'pointer';
  932.                     c.onclick = actb_mouse_down;
  933.                 }
  934.                 break;
  935.             }
  936.         }
  937.         actb_rangeu = 1;
  938.         actb_ranged = j-1;
  939.         actb_display = true;
  940.         if (actb_pos <= 0) actb_pos = 1;
  941.     }
  942.     function actb_remake(){
  943.         document.body.removeChild(document.getElementById('tat_table'));
  944.         a = document.createElement('table');
  945.         a.cellSpacing='1px';
  946.         a.cellPadding='2px';
  947.         a.style.position='absolute';
  948.         a.style.top = eval(curTop(actb_curr) + actb_curr.offsetHeight) + "px";
  949.         a.style.left = curLeft(actb_curr) + "px";
  950.         a.style.backgroundColor=actb_self.actb_bgColor;
  951.         a.id = 'tat_table';
  952.         if (actb_self.actb_mouse){
  953.             a.onmouseout= actb_table_unfocus;
  954.             a.onmouseover=actb_table_focus;
  955.         }
  956.         document.body.appendChild(a);
  957.         var i;
  958.         var first = true;
  959.         var j = 1;
  960.         if (actb_rangeu > 1){
  961.             r = a.insertRow(-1);
  962.             r.style.backgroundColor = actb_self.actb_bgColor;
  963.             c = r.insertCell(-1);
  964.             c.style.color = actb_self.actb_textColor;
  965.             c.style.fontFamily = 'arial narrow';
  966.             c.style.fontSize = actb_self.actb_fSize;
  967.             c.align='center';
  968.             replaceHTML(c,'/\\');
  969.             if (actb_self.actb_mouse){
  970.                 c.style.cursor = 'pointer';
  971.                 c.onclick = actb_mouse_up;
  972.             }
  973.         }
  974.         for (i=0;i<actb_self.actb_keywords.length;i++){
  975.             if (actb_bool[i]){
  976.                 if (j >= actb_rangeu && j <= actb_ranged){
  977.                     r = a.insertRow(-1);
  978.                     r.style.backgroundColor = actb_self.actb_bgColor;
  979.                     r.id = 'tat_tr'+(j);
  980.                     c = r.insertCell(-1);
  981.                     c.style.color = actb_self.actb_textColor;
  982.                     c.style.fontFamily = actb_self.actb_fFamily;
  983.                     c.style.fontSize = actb_self.actb_fSize;
  984.                     c.innerHTML = actb_parse(actb_self.actb_keywords[i]);
  985.                     c.id = 'tat_td'+(j);
  986.                     c.setAttribute('pos',j);
  987.                     if (actb_self.actb_mouse){
  988.                         c.style.cursor = 'pointer';
  989.                         c.onclick=actb_mouseclick;
  990.                         c.onmouseover = actb_table_highlight;
  991.                     }
  992.                     j++;
  993.                 }else{
  994.                     j++;
  995.                 }
  996.             }
  997.             if (j > actb_ranged) break;
  998.         }
  999.         if (j-1 < actb_total){
  1000.             r = a.insertRow(-1);
  1001.             r.style.backgroundColor = actb_self.actb_bgColor;
  1002.             c = r.insertCell(-1);
  1003.             c.style.color = actb_self.actb_textColor;
  1004.             c.style.fontFamily = 'arial narrow';
  1005.             c.style.fontSize = actb_self.actb_fSize;
  1006.             c.align='center';
  1007.             replaceHTML(c,'\\/');
  1008.             if (actb_self.actb_mouse){
  1009.                 c.style.cursor = 'pointer';
  1010.                 c.onclick = actb_mouse_down;
  1011.             }
  1012.         }
  1013.     }
  1014.     function actb_goup(){
  1015.         if (!actb_display) return;
  1016.         if (actb_pos == 1) return;
  1017.         document.getElementById('tat_tr'+actb_pos).style.backgroundColor = actb_self.actb_bgColor;
  1018.         actb_pos = actb_pos-1;
  1019.         if (actb_pos < actb_rangeu) actb_moveup();
  1020.         document.getElementById('tat_tr'+actb_pos).style.backgroundColor = actb_self.actb_hColor;
  1021.         if (actb_toid) clearTimeout(actb_toid);
  1022.         if (actb_self.actb_timeOut > 0) actb_toid = setTimeout(function(){actb_mouse_on_list=0;actb_removedisp();},actb_self.actb_timeOut);
  1023.     }
  1024.     function actb_godown(){
  1025.         if (!actb_display) return;
  1026.         if (actb_pos == actb_total) return;
  1027.         document.getElementById('tat_tr'+actb_pos).style.backgroundColor = actb_self.actb_bgColor;
  1028.         actb_pos++;
  1029.         if (actb_pos > actb_ranged) actb_movedown();
  1030.         document.getElementById('tat_tr'+actb_pos).style.backgroundColor = actb_self.actb_hColor;
  1031.         if (actb_toid) clearTimeout(actb_toid);
  1032.         if (actb_self.actb_timeOut > 0) actb_toid = setTimeout(function(){actb_mouse_on_list=0;actb_removedisp();},actb_self.actb_timeOut);
  1033.     }
  1034.     function actb_movedown(){
  1035.         actb_rangeu++;
  1036.         actb_ranged++;
  1037.         actb_remake();
  1038.     }
  1039.     function actb_moveup(){
  1040.         actb_rangeu = actb_rangeu-1;
  1041.         actb_ranged = actb_ranged-1;
  1042.         actb_remake();
  1043.     }
  1044.  
  1045.     /* Mouse */
  1046.     function actb_mouse_down(){
  1047.         document.getElementById('tat_tr'+actb_pos).style.backgroundColor = actb_self.actb_bgColor;
  1048.         actb_pos++;
  1049.         actb_movedown();
  1050.         document.getElementById('tat_tr'+actb_pos).style.backgroundColor = actb_self.actb_hColor;
  1051.         actb_curr.focus();
  1052.         actb_mouse_on_list = 0;
  1053.         if (actb_toid) clearTimeout(actb_toid);
  1054.         if (actb_self.actb_timeOut > 0) actb_toid = setTimeout(function(){actb_mouse_on_list=0;actb_removedisp();},actb_self.actb_timeOut);
  1055.     }
  1056.     function actb_mouse_up(evt){
  1057.         if (!evt) evt = event;
  1058.         if (evt.stopPropagation){
  1059.             evt.stopPropagation();
  1060.         }else{
  1061.             evt.cancelBubble = true;
  1062.         }
  1063.         document.getElementById('tat_tr'+actb_pos).style.backgroundColor = actb_self.actb_bgColor;
  1064.         actb_pos = actb_pos-1;
  1065.         actb_moveup();
  1066.         document.getElementById('tat_tr'+actb_pos).style.backgroundColor = actb_self.actb_hColor;
  1067.         actb_curr.focus();
  1068.         actb_mouse_on_list = 0;
  1069.         if (actb_toid) clearTimeout(actb_toid);
  1070.         if (actb_self.actb_timeOut > 0) actb_toid = setTimeout(function(){actb_mouse_on_list=0;actb_removedisp();},actb_self.actb_timeOut);
  1071.     }
  1072.     function actb_mouseclick(evt){
  1073.         if (!evt) evt = event;
  1074.         if (!actb_display) return;
  1075.         actb_mouse_on_list = 0;
  1076.         actb_pos = this.getAttribute('pos');
  1077.         actb_penter();
  1078.     }
  1079.     function actb_table_focus(){
  1080.         actb_mouse_on_list = 1;
  1081.     }
  1082.     function actb_table_unfocus(){
  1083.         actb_mouse_on_list = 0;
  1084.         if (actb_toid) clearTimeout(actb_toid);
  1085.         if (actb_self.actb_timeOut > 0) actb_toid = setTimeout(function(){actb_mouse_on_list = 0;actb_removedisp();},actb_self.actb_timeOut);
  1086.     }
  1087.     function actb_table_highlight(){
  1088.         actb_mouse_on_list = 1;
  1089.         document.getElementById('tat_tr'+actb_pos).style.backgroundColor = actb_self.actb_bgColor;
  1090.         actb_pos = this.getAttribute('pos');
  1091.         while (actb_pos < actb_rangeu) actb_moveup();
  1092.         while (actb_pos > actb_ranged) actb_movedown();
  1093.         document.getElementById('tat_tr'+actb_pos).style.backgroundColor = actb_self.actb_hColor;
  1094.         if (actb_toid) clearTimeout(actb_toid);
  1095.         if (actb_self.actb_timeOut > 0) actb_toid = setTimeout(function(){actb_mouse_on_list = 0;actb_removedisp();},actb_self.actb_timeOut);
  1096.     }
  1097.  
  1098.     function actb_insertword(a){
  1099.         if (actb_self.actb_delimiter.length > 0){
  1100.             str = '';
  1101.             l=0;
  1102.             for (i=0;i<actb_delimwords.length;i++){
  1103.                 if (actb_cdelimword == i){
  1104.                     prespace = postspace = '';
  1105.                     gotbreak = false;
  1106.                     for (j=0;j<actb_delimwords[i].length;++j){
  1107.                         if (actb_delimwords[i].charAt(j) != ' '){
  1108.                             gotbreak = true;
  1109.                             break;
  1110.                         }
  1111.                         prespace += ' ';
  1112.                     }
  1113.                     for (j=actb_delimwords[i].length-1;j>=0;j=j-1){
  1114.                         if (actb_delimwords[i].charAt(j) != ' ') break;
  1115.                         postspace += ' ';
  1116.                     }
  1117.                     str += prespace;
  1118.                     str += a;
  1119.                     l = str.length;
  1120.                     if (gotbreak) str += postspace;
  1121.                 }else{
  1122.                     str += actb_delimwords[i];
  1123.                 }
  1124.                 if (i != actb_delimwords.length - 1){
  1125.                     str += actb_delimchar[i];
  1126.                 }
  1127.             }
  1128.             actb_curr.value = str + ', ';
  1129.             setCaret(actb_curr,l+2);
  1130.         }else{
  1131.             actb_curr.value = a + ', ';
  1132.         }
  1133.         actb_mouse_on_list = 0;
  1134.         actb_removedisp();
  1135.     }
  1136.     function actb_penter(){
  1137.         if (!actb_display) return;
  1138.         actb_display = false;
  1139.         var word = '';
  1140.         var c = 0;
  1141.         for (var i=0;i<=actb_self.actb_keywords.length;i++){
  1142.             if (actb_bool[i]) c++;
  1143.             if (c == actb_pos){
  1144.                 word = actb_self.actb_keywords[i];
  1145.                 break;
  1146.             }
  1147.         }
  1148.         actb_insertword(word);
  1149.         l = getCaretStart(actb_curr);
  1150.     }
  1151.     function actb_removedisp(){
  1152.         if (actb_mouse_on_list==0){
  1153.             actb_display = 0;
  1154.             if (document.getElementById('tat_table')){ document.body.removeChild(document.getElementById('tat_table')); }
  1155.             if (actb_toid) clearTimeout(actb_toid);
  1156.         }
  1157.     }
  1158.     function actb_keypress(e){
  1159.         if (actb_caretmove) stopEvent(e);
  1160.         return !actb_caretmove;
  1161.     }
  1162.     function actb_checkkey(evt){
  1163.         if (!evt) evt = event;
  1164.         a = evt.keyCode;
  1165.         caret_pos_start = getCaretStart(actb_curr);
  1166.         actb_caretmove = 0;
  1167.         switch (a){
  1168.             case 38:
  1169.                 actb_goup();
  1170.                 actb_caretmove = 1;
  1171.                 return false;
  1172.                 break;
  1173.             case 40:
  1174.                 actb_godown();
  1175.                 actb_caretmove = 1;
  1176.                 return false;
  1177.                 break;
  1178.             case 13: case 9:
  1179.                 if (actb_display){
  1180.                     actb_caretmove = 1;
  1181.                     actb_penter();
  1182.                     return false;
  1183.                 }else{
  1184.                     return true;
  1185.                 }
  1186.                 break;
  1187.             default:
  1188.                 setTimeout(function(){actb_tocomplete(a)},50);
  1189.                 break;
  1190.         }
  1191.     }
  1192.  
  1193.     function actb_tocomplete(kc){
  1194.         if (kc == 38 || kc == 40 || kc == 13) return;
  1195.         var i;
  1196.         if (actb_display){ 
  1197.             var word = 0;
  1198.             var c = 0;
  1199.             for (var i=0;i<=actb_self.actb_keywords.length;i++){
  1200.                 if (actb_bool[i]) c++;
  1201.                 if (c == actb_pos){
  1202.                     word = i;
  1203.                     break;
  1204.                 }
  1205.             }
  1206.             actb_pre = word;
  1207.         }else{ actb_pre = -1};
  1208.         
  1209.         if (actb_curr.value == ''){
  1210.             actb_mouse_on_list = 0;
  1211.             actb_removedisp();
  1212.             return;
  1213.         }
  1214.         if (actb_self.actb_delimiter.length > 0){
  1215.             caret_pos_start = getCaretStart(actb_curr);
  1216.             caret_pos_end = getCaretEnd(actb_curr);
  1217.             
  1218.             delim_split = '';
  1219.             for (i=0;i<actb_self.actb_delimiter.length;i++){
  1220.                 delim_split += actb_self.actb_delimiter[i];
  1221.             }
  1222.             delim_split = delim_split.addslashes();
  1223.             delim_split_rx = new RegExp("(["+delim_split+"])");
  1224.             c = 0;
  1225.             actb_delimwords = new Array();
  1226.             actb_delimwords[0] = '';
  1227.             for (i=0,j=actb_curr.value.length;i<actb_curr.value.length;i++,j=j-1){
  1228.                 if (actb_curr.value.substr(i,j).search(delim_split_rx) == 0){
  1229.                     ma = actb_curr.value.substr(i,j).match(delim_split_rx);
  1230.                     actb_delimchar[c] = ma[1];
  1231.                     c++;
  1232.                     actb_delimwords[c] = '';
  1233.                 }else{
  1234.                     actb_delimwords[c] += actb_curr.value.charAt(i);
  1235.                 }
  1236.             }
  1237.  
  1238.             var l = 0;
  1239.             actb_cdelimword = -1;
  1240.             for (i=0;i<actb_delimwords.length;i++){
  1241.                 if (caret_pos_end >= l && caret_pos_end <= l + actb_delimwords[i].length){
  1242.                     actb_cdelimword = i;
  1243.                 }
  1244.                 l+=actb_delimwords[i].length + 1;
  1245.             }
  1246.             var ot = actb_delimwords[actb_cdelimword].trim(); 
  1247.             var t = actb_delimwords[actb_cdelimword].addslashes().trim();
  1248.         }else{
  1249.             var ot = actb_curr.value;
  1250.             var t = actb_curr.value.addslashes();
  1251.         }
  1252.         if (ot.length == 0){
  1253.             actb_mouse_on_list = 0;
  1254.             actb_removedisp();
  1255.         }
  1256.         if (ot.length < actb_self.actb_startcheck) return this;
  1257.         if (actb_self.actb_firstText){
  1258.             var re = new RegExp("(^|\\W)" + t, "i");
  1259.         }else{
  1260.             var re = new RegExp(t, "i");
  1261.         }
  1262.  
  1263.         actb_total = 0;
  1264.         actb_tomake = false;
  1265.         actb_kwcount = 0;
  1266.         for (i=0;i<actb_self.actb_keywords.length;i++){
  1267.             actb_bool[i] = false;
  1268.             if (re.test(actb_self.actb_keywords[i])){
  1269.                 actb_total++;
  1270.                 actb_bool[i] = true;
  1271.                 actb_kwcount++;
  1272.                 if (actb_pre == i) actb_tomake = true;
  1273.             }
  1274.         }
  1275.  
  1276.         if (actb_toid) clearTimeout(actb_toid);
  1277.         if (actb_self.actb_timeOut > 0) actb_toid = setTimeout(function(){actb_mouse_on_list = 0;actb_removedisp();},actb_self.actb_timeOut);
  1278.         actb_generate();
  1279.     }
  1280.     return this;
  1281. }
  1282. function play(url) {
  1283.     var hiddenFrame = document.getElementById("hiddenFrame");
  1284.     if (hiddenFrame) {
  1285.         hiddenFrame.src = url;
  1286.         return false;
  1287.     }
  1288.     return true;
  1289. }
  1290. //-->
  1291. </script>
  1292.     <iframe id="hiddenFrame" src="/null" style="width:0px; height:0px; border: 0px">
  1293.     </iframe>
  1294.     <form id="composeForm" action="javascript:;" method="POST">
  1295.         <input type="hidden" name="from" value="{ORB_EMAIL}"/>
  1296.         <table style="width: 100%; height: 100%;">
  1297.             <tr>
  1298.                 <td colspan="2"><h3><br/>
  1299.                   Envoyez des messages par email ou par Skype!</h3></td></tr>
  1300.             <tr>                
  1301.                 <td style="width: 100%; height: 100%;">
  1302.                     <table border="0" cellpadding="0" cellspacing="0" style="width: 100%; height: 100%;" >
  1303.                         <tr>
  1304.                             <td width="7" height="7" ><img border="0" src="orb://image?orbName=box_w_top_left.gif" width="7" height="7"/></td>
  1305.                             <td height="7" background="orb://image?orbName=box_w_top.gif"></td>
  1306.                             <td width="8" height="7" ><img border="0" src="orb://image?orbName=box_w_top_right.gif" width="8" height="7"/></td>
  1307.                         </tr>
  1308.                         <tr>
  1309.                             <td width="7" background="orb://image?orbName=box_w_left.gif" valign="top" > </td>
  1310.                             <td valign="top" >
  1311.                     <table style="width: 100%; height: 100%;">
  1312.                         <tr>
  1313.                             <td colspan="3"><b>A:</b> (Séparez les adresses par des virgules ou des points-virgules)</td></tr>
  1314.                         <tr>
  1315.                             <td style="width: 100%;" colspan="2">
  1316.                                 <textarea id="toArea" name="to" style="width: 100%;" rows="2" wrap="soft" ><tmpl_var to escape=html /></textarea>
  1317.                                 <script>
  1318.                                 obj=actb(document.getElementById('toArea'),customarray);
  1319.                                 </script>
  1320.                             </td>
  1321.                             <td nowrap="nowrap" style="width:75px;" align="left"><span onclick="toggleContacts()"><br/><input type="button" id="togglecontacts" name="dummy" value="Afficher les contacts" style="font-size: 10px;"/></span></td>
  1322.                         </tr>
  1323.                         <tmpl_if ccEmail><tr>
  1324.                             <td colspan="3"><input type="checkbox" id="ccMe" name="ccMe" value="{ORB_EMAIL}" <tmpl_if ccMe>checked="checked"</tmpl_if> /><label for="ccMe" id="ccMeText">CC moi ({ORB_EMAIL})</label></td>
  1325.                         </tr></tmpl_if>
  1326.                         <tr>
  1327.                             <td colspan="3"><b>Objet:</b><br/><input type="text" name="subject" style="width: 100%;"/></td>
  1328.                         </tr>
  1329.                         <tmpl_if hasAttachment>
  1330.                             <tr>
  1331.                                 <td colspan="3"><input type="checkbox" id="voicemail" name="voicemail" value="<tmpl_var mediumId escappe=url />" <tmpl_if checked>checked="checked"</tmpl_if> /><label for="voicemail">Attacher le message original:</label> <a href="orb://play?orbMediumId=<tmpl_var mediumId />" onclick="return play(this.href);" title="Ecouter le message originale"><img src="orb://image?orbName=playthis.gif" width="15" height="15" border="0"/></a></td>
  1332.                             </tr>
  1333.                         </tmpl_if>
  1334.                         <tr>
  1335.                             <td colspan="3"><table cellpadding="0" cellspacing="0" border="0"><tr><td><input type="checkbox" id="recording" name="recording" onClick="toggleRecorder()" value=""/><label for="recording">Joindre un message vocal:</label></td><td><table cellpadding="0" cellspacing="0" border="0"><tr><td><img src="orb://image?orbName=recorder_left.gif" /></td><td background="orb://image?orbName=recorder_back.gif"><img id="v4sBtnRecord" src="orb://image?orbName=recordDisabled.gif" onClick="v4sRecordClicked();"/><img id="v4sBtnPlay" src="orb://image?orbName=playDisabled.gif" onClick="v4sPlayClicked();"/></td><td><img src="orb://image?orbName=recorder_status_left.gif" /></td><td width="250px" background="orb://image?orbName=recorder_status_back.gif" nowrap="nowrap"><div id="recorderInfo" class="status" style="height: 22px; display: inline; border-style: none; margin: 0px; padding: 0px; padding-top:4;">Cochez la case α gauche pour pouvoir enregistrer</div></td><td><img src="orb://image?orbName=recorder_status_right.gif" /></td></tr></table></td><td><div id="v4sRecordDiv" style="display: inline; border-style: none; margin: 0px; padding: 0px;"></div></td></tr></table></td>
  1336.                         </tr>
  1337.                         <tr style="height: 100%;">
  1338.                             <td colspan="3"><textarea name="body" style="width: 100%; height: 100%;" wrap="soft" ><tmpl_var content escape=html /></textarea></td>
  1339.                         </tr>
  1340.                         <tr>
  1341.                             <td colspan="3"><input type="submit" id="v4sBtnSend" name="send" value="Envoyer" style="font-size: 10px;" disabled="true" onclick="return submitform(this.parentNode);"/> <span id="statusDiv" style="font-size: 10px;"></span></td>
  1342.                         </tr>
  1343.                     </table>
  1344.                     </td>
  1345.                             <td width="8" background="orb://image?orbName=box_w_right.gif" valign="bottom" > </td>
  1346.                         </tr>
  1347.                         <tr>
  1348.                             <td width="7" height="8" ><img border="0" src="orb://image?orbName=box_w_bot_left.gif" width="7" height="8"/></td>
  1349.                             <td height="8" background="orb://image?orbName=box_w_bot.gif" ></td>
  1350.                             <td width="8" height="8" ><img border="0" src="orb://image?orbName=box_w_bot_right.gif" width="8" height="8"/></td>
  1351.                         </tr>
  1352.                       </table>
  1353.                 </td>
  1354.                 <td style="width: 50px;">
  1355.                     <div id="contactsDiv" style="display: none; height: 100%;">
  1356.                     <table border="0" cellpadding="0" cellspacing="0" style="width: 100%; height: 100%;" >
  1357.                         <tr>
  1358.                             <td width="7" height="7" ><img border="0" src="orb://image?orbName=box_w_top_left.gif" width="7" height="7"/></td>
  1359.                             <td height="7" background="orb://image?orbName=box_w_top.gif"></td>
  1360.                             <td width="8" height="7" ><img border="0" src="orb://image?orbName=box_w_top_right.gif" width="8" height="7"/></td>
  1361.                         </tr>
  1362.                         <tr>
  1363.                             <td width="7" background="orb://image?orbName=box_w_left.gif" valign="top" > </td>
  1364.                             <td valign="top" ><img src="orb://image?orbName=contact.gif" border="0"/> <b>Contacts:</b>
  1365.                             <div id="contactListDiv">
  1366.                             <span style="{display: none;}"><img src="orb://image?orbName=icon_mail.gif" width="16" height="16" border="0"/><img src="orb://image?orbName=icon_skype.gif" width="16" height="16" border="0"/></span>
  1367.                             </div>
  1368.                         <span onclick="addSelectedToRecipients()"><input type="button" value="Ajouter la sΘlection" style="font-size: 10px;"/></span>
  1369.                     </td>
  1370.                             <td width="8" background="orb://image?orbName=box_w_right.gif" valign="bottom" > </td>
  1371.                         </tr>
  1372.                         <tr>
  1373.                             <td width="7" height="8" ><img border="0" src="orb://image?orbName=box_w_bot_left.gif" width="7" height="8"/></td>
  1374.                             <td height="8" background="orb://image?orbName=box_w_bot.gif" ></td>
  1375.                             <td width="8" height="8" ><img border="0" src="orb://image?orbName=box_w_bot_right.gif" width="8" height="8"/></td>
  1376.                         </tr>
  1377.                       </table>
  1378.                     </div>
  1379.                 </td>
  1380.                 
  1381.             </tr>
  1382.         </table>
  1383.     </form>    
  1384. </body>
  1385. </html>
  1386.