
var DOCFLOW_MANAGER = sysGetAppBaseUrl() + "servlet/DocflowManager?";
var VIEW_MANAGER = sysGetAppBaseUrl() + "servlet/ViewManager?menu=menu_view"; 
var SYS_BASE_URL = sysGetAppBaseUrl();
var EXTENSION_DOCFLOW = "doc";
var EXTENSION_XLS = "xls";
var isMSIE = (navigator.appName == "Microsoft Internet Explorer");


/**
* Fonction permettant d'appliquer un modéle
* Parcours un document XML et met à jour les 
* champs se trouvant dans le formulaire
*/
function Docflow_ApplyDocumentModel(formName, xmlTemplateDoc)
{
   var formulaire = document.forms[formName];
   if (xmlTemplateDoc)
   {
      var rootElem = xmlTemplateDoc.documentElement;
      var docElements = rootElem.getElementsByTagName("*");
      // On parcourt tous les champs non vides et on met à jour les
      // champs du formulaires s'ils existent
      for (var i=0; docElements != null && i<docElements.length; i++)
      {
         //Récupère la nouvelle valeur à appliquer
         var value = XMLUtil_getElementContent(docElements[i]);
         //Si la valeur n'est pas null on met à jour le formulaire
         if (value != null)
         {
            var fieldName = docElements[i].tagName;
            if (formulaire)
               setFieldValue(formulaire, fieldName, value);
         }
      }
   }
}


// Renvoie un tableau de ListeItem de code=value=nom du modèle
function Docflow_GetTemplateList()
{
   var action = DOCFLOW_MANAGER + "action=getTemplateNames";
   var xmlList = XMLUtil_GetContent(action);
   return XMLUtil_MakeList(xmlList);
}

// renvoie le DOM de la notice du template
function Docflow_GetTemplateRecord(name)
{
   var action = DOCFLOW_MANAGER + "action=getTemplateRecord&template=" + myEscape(name);
   return XMLUtil_LoadXML(action);
}

//Consolidation d'un document
//recordid, recordid de la notice
//downloadFileName, chemin du fichier local
//versionId, identifiant de la version courante lors de la création de la page html
//askConfirm  -true, demande une confirmation avant archivage
//            -false, archivage du fichier local sans demande de confirmation
function Docflow_CheckIn(formName, recordId, downloadFileName, versionId, askConfirm)
{   
   //alert("Entrée Docflow_CheckIn");
   var vform = document.getElementById(formName);
   var ocxOK = false;
   if (isMSIE)
   {
      ocxOK = Docflow_OcxOK();
   }
   
   if (isMSIE && ocxOK) 
   //Fonctionnement IE avec ocx, checkIn automatique si l'extension le permet
   {
      if ( (Docflow_AutoFileExt(downloadFileName)) || (Docflow_AutoFileXls(downloadFileName)))
      {
         //1-Encodage du fichier local en base 64 et suppression du fichier local
         var sContentEncodedFile = EncodeFileToString(downloadFileName);
         var localFileExist = false;
         var archiveLocalFile = true;           //Positionné à true par défaut pour le cas askConfirm = false
         if (sContentEncodedFile.length > 0)
            localFileExist = true;
      
         //Fichier local existe, on demande la confirmation
         if (localFileExist && askConfirm)      
         {
            var msgConfirm = mess_confirm_checkin + downloadFileName;
            archiveLocalFile = confirm(msgConfirm);
         }
         
         if (localFileExist && archiveLocalFile)            //On archive le fichier local
         {  
            //2-Submit du formulaire pour envoi du fichier encodé sur le serveur
            //Après la mise à jour du fichier, forward sur la consolidation
            vform.ContentFile.value = sContentEncodedFile;
             
            //Action pour consolider
            var action = DOCFLOW_MANAGER + "action=checkIn";
            vform.action = action+"&recordId="+recordId
                           +"&localFilePath="+downloadFileName
                           +"&versionId="+versionId
                           +"&forward=/servlet/ViewManager?menu=menu_view&record="+recordId; 
            vform.submit();                         
         }
         else                                               //Choix du fichier à archiver
         {
            var action = SYS_BASE_URL + "jsp/docflow/checkin_multipart.jsp?recordId="+recordId
                                      +"&versionId="+versionId;
            vform.action = action;
            vform.submit();                  
         }      
      }
      else
      {
         var action = SYS_BASE_URL + "jsp/docflow/checkin_multipart.jsp?recordId="+recordId
                                   +"&versionId="+versionId;
         vform.action = action;
         vform.submit();                       
      }

   }
   else
   //Fonctionnement non IE ou sans OCX, le checkIn est un multipart classique
   {
      var action = SYS_BASE_URL + "jsp/docflow/checkin_multipart.jsp?recordId="+recordId
                                +"&versionId="+versionId;
      vform.action = action;
      vform.submit();                  
   } 
}

//CheckOut du fichier (Création d'une nouvelle version)
function Docflow_CheckOut (formName, recordId, versionId, connectionSSO)
{
   var vform = document.getElementById(formName);
   var saveAs;
   var ocxOK = false;
   if (isMSIE)
   {
      ocxOK = Docflow_OcxOK();
   }
 
   if (isMSIE && ocxOK)
   //Fonctionnement IE avec ocx
   {
      //2.2-Récupération du flux du fichier
      var tmpPath = GetTempoPath();        
      //var downloadFileName = tmpPath +serverFileName;       
      var downloadFileName = tmpPath;
      action = DOCFLOW_MANAGER+"action=checkOut";
      action += "&versionId=" + versionId +"&recordId=" + recordId + "&createVersion=true"
                +"&localFilePath=" + downloadFileName; 
      action += "&encodeFile=true";
      var encodedContentFile = XMLUtil_GetContent(action);
      //Si tout se passe bien, le retour n'est pas du XML
      //Sinon, c'est du XML contenant un message d'erreur.
      var domContent = XMLUtil_MakeDocument(encodedContentFile);
      if (domContent)
      {
         var msgErr = XMLUtil_IsError(domContent);
         alert(msgErr);
      }
      else
      {
         //2.1-Récupération du nom du fichier lorsque la nouvelle version a été créée 
         //et pas avant ! 
         var action = DOCFLOW_MANAGER + "action=getCurrentVersionFileName";
         action += "&recordId=" + recordId;
         var serverFileName = XMLUtil_GetContent(action);
         downloadFileName = tmpPath + serverFileName;       
         // CSI_DEMO_OIPC Consolidation auto depuis excel
         if (Docflow_AutoFileXls(serverFileName))
         {
               DecodeStringToFile(encodedContentFile, downloadFileName);      
               //alert("Appel xls_openDocument");
               xls_openDocument(downloadFileName);       
               
               var checkInURL = Docflow_GetCheckInURL(connectionSSO, downloadFileName, recordId);
               action = DOCFLOW_MANAGER + "action=getCurrentVersionId";
               action += "&recordId=" + recordId;
               var lastVersionId = XMLUtil_GetContent(action);  
               checkInURL = checkInURL + "&versionId=" + lastVersionId;
               xls_CheckInFromExcel_SetUrl (checkInURL);
               xls_CheckInFromExcel_SetRecordId (recordId);                          
               xls_CheckInFromExcel_SetVersionId (lastVersionId);
               xls_CheckInFromExcel_documentSetFocus();        
         }
         else
         {
            if (Docflow_AutoFileExt(serverFileName))
            {
               //2.3-Décodage du flux du fichier dans un répertoire local
               DecodeStringToFile(encodedContentFile, downloadFileName);      
               //2.4-Ouverture du document dans word
               openDocument(downloadFileName);       
               //2.5-Enregistrement des variables nécessaires au checkIn depuis word
               // uploadData est déjà renseigné (initialisation du document via un modèle)
               // si il n'y a pas de macro, c'est pas grave car on positionne uniquement des variables
               var checkInURL = Docflow_GetCheckInURL(connectionSSO, downloadFileName, recordId);
               CheckInFromWord_SetDocParam ("docflow_checkInURL", checkInURL);
               CheckInFromWord_SetDocParam ("docflow_RecordId", recordId);            
               // Attention, au début de la fonction a été généré une nouvelle version !!!
               action = DOCFLOW_MANAGER + "action=getCurrentVersionId";
               action += "&recordId=" + recordId;
               var lastVersionId = XMLUtil_GetContent(action);  
               //alert("checkOut positionnement docflow_VersionId = " + lastVersionId);
               CheckInFromWord_SetDocParam ("docflow_VersionId", lastVersionId);
               CheckInFromWord_documentSetFocus();
            }
            else
            {
               saveAs = serverFileName;
            }
         }
      }     
   }
   else
   //Fonctionnement non IE ou sans OCX
   {
      //Création de la nouvelle version qui sera extraite
      var downloadFileName = "";
      var action = DOCFLOW_MANAGER+"action=checkOut";
      action += "&versionId=" + versionId +"&recordId=" + recordId + "&createVersion=true"
                +"&localFilePath=" + downloadFileName;             
      var ret = XMLUtil_GetContent(action);
      var domContent = XMLUtil_MakeDocument(ret);
      //domContent est null sous IE quand il n'y a pas de pb mais pas avec Mozilla
      if (domContent)    
      {
         var msgErr = XMLUtil_IsError(domContent);
         //Attention, msgErr est null sous Mozilla quand il n'y a pas de pb...
         if (msgErr)
            alert(msgErr);
         else
            {
               //Récupération du nom de la nouvelle version
               var action = DOCFLOW_MANAGER + "action=getCurrentVersionFileName";
               action += "&recordId=" + recordId;
               var serverFileName = XMLUtil_GetContent(action);      
               saveAs = serverFileName;
            }
      }
      else
      {
      //Récupération du nom de la nouvelle version
      var action = DOCFLOW_MANAGER + "action=getCurrentVersionFileName";
      action += "&recordId=" + recordId;
      var serverFileName = XMLUtil_GetContent(action);      
      saveAs = serverFileName;
      }
   }
   
   //2.5-rafraichissement de la page en cours
   action = VIEW_MANAGER + "&record="+recordId;
   if (saveAs)
   {
      action = action + "&saveAs=" + saveAs;
   }
   vform.action = action;                 
   vform.submit(); 

}

//Obtention de la version  qui vient d'être checkOut par download HTML
//L'action de download s'execute dans la frame (ou iframe) win_download
//L'action principale (Rafraichissement de la notice) se poursuit dans la frame win_main

//Si on ne veut pas que win_download soit une frame système, on peut la placer dans
//menu_view, le saveAs sera activé uniquement si le paramètre saveAs est renseigné.
function Docflow_CheckSaveAs(FSrecordId, serverFileName)
{
   var action = sysGetAppBaseUrl() + "servlet/DocflowManager?action=saveAsCurrentVersion";
   action = action + "&recordId=" + FSrecordId;
   action = action + "&saveAs=" + serverFileName;
   windown_frame = open("","win_download");
   if ( windown_frame == null )
   {
      alert("La frame win_download est introuvable !");
      return null;
   }
   else         
   {
      windown_frame.location.href = action;
   }           
}


//Execution d'une transition complexe
function Docflow_TransitionForm(formName, cmd, fsRecordId, transitionRecordId, cmdMail, versionId)
{
   var rootUrl = sysGetAppBaseUrl();  
   var action = rootUrl + cmd +"?recordId="+fsRecordId+"&transitionRecordId="+transitionRecordId+
                "&cmdSendMail="+cmdMail+"&versionId="+versionId;
   var vform = document.getElementById(formName);
   vform.action=action;
   vform.submit();      
}


//Rafraichissement de la vue d'une FS
function Docflow_RefreshFs(formName, recordId)   
{
   var vform = document.getElementById(formName);
   var action = VIEW_MANAGER + "&record="+recordId;
   vform.action = action;                 
   vform.submit();    
}

//Vérification que le fichier du docflow :
// -a bien une extension .doc
function Docflow_AutoFileExt(fileName)
{
   var doOpenDoc = false;
   var idxPoint = fileName.lastIndexOf(".");
   if ( idxPoint > -1 )
   {
      var ext = fileName.substring(idxPoint+1);
      if ( (ext == EXTENSION_DOCFLOW) )
      {
         doOpenDoc = true;
      }
   }
   return doOpenDoc;
}


//Vérification que le fichier du docflow :
// -a bien une extension .xls
function Docflow_AutoFileXls(fileName)
{
   var doOpenDoc = false;
   var idxPoint = fileName.lastIndexOf(".");
   if ( idxPoint > -1 )
   {
      var ext = fileName.substring(idxPoint+1);
      if ( (ext == EXTENSION_XLS) )
      {
         doOpenDoc = true;
      }
   }
   return doOpenDoc;
}


//Vérification que l'ocx EsUtils est installé
function Docflow_OcxOK()
{
   var ocxOK = true;
   try
   {
      GetTempoPath();
   }
   catch (ex)
   {
      ocxOK = false;
   }
   return ocxOK;
}

//Vérification que le fichier du docflow :
// -a bien été selectionné
// -a une extension .doc
//fileId, nom du composant html de type file
function Docflow_VerifyFile(fileId, noVerifyExtension)   
{
   //Evolution : Autorisation d'une extension différente d'un .doc pour le check
   noVerifyExtension = true;
   var vFile = document.getElementById(fileId);
   if (vFile)                          //fileId existe
   {
      var fileName = vFile.value;      
      if (fileName)                   //fileId est renseigné
      {          
         if (noVerifyExtension)
         {
            return true;
         }
         else
         {
            var fileSplit=fileName.split(".");
            if (fileSplit.length > 0)
            {
               var extFile = fileSplit[fileSplit.length-1];                
               if (extFile == EXTENSION_DOCFLOW)     //fileId a une extension correcte
               {
                  return true;
               }
               else
               {
                  alert(mess_docflow_checkin_extension_doc);                
                  return false;
               }
            }          
         }
      }
      else
         {
           alert(mess_docflow_checkin_select_file);
           return false;
         }      
   }
   else
   {
      alert(mess_docflow_create_template_file_version_oblig);
      return false;
   }
}


// Fonction retournant l'URL de checkin depuis word.
// De la forme http://serveur:port/flora/jsp/name.jsp?DocFlowFilePath=localFilePath
function Docflow_GetCheckInURL(connectionSSO, localFilePath, recordId)
{
   var connectionURL = "jsp/index.jsp";
   //alert("Docflow_GetCheckInURL " + connectionSSO);
   if (connectionSSO && (connectionSSO != ""))
      connectionURL = connectionSSO;   
   
   // ATTENTION, pour localFilePath, remplacer les \ par des /
   localFilePath = localFilePath.replace(/\\/g, "/");
   var ret = sysGetAppBaseUrl();
   ret = ret + connectionURL + "?docflowFilePath=" + localFilePath + "&docflowRecordId=" + recordId;
   return ret;
}


/**
* Gestion du docflow, checkin + checkout
*/
function frmFlowCheckIn(formName, action, p0, recordId, p1, versionLocalFilePath, p2, versionId, p3, askConfirm)
{
   if (askConfirm == "true")
      Docflow_CheckIn(formName,recordId, versionLocalFilePath, versionId, true);
   else      
      Docflow_CheckIn(formName,recordId, versionLocalFilePath, versionId, false);   
}

function frmFlowCheckOut(formName, action, p0, recordId, p1, versionId, p2, connectionSSO)
{
   Docflow_CheckOut(formName, recordId, versionId, connectionSSO);
}


/**
 Génération commande d'une transition complexe (avec modification de la FS :
    cmdTransition, formulaire de modification de la FS
    recordId, recordId de la FS
    transitionId, recordId de la transition a executer
    cmdSendMail, formulaire d'envoi de mail
*/
function frmFlowTransition(formName, action, p0, cmdTransition, p1, recordId, p2, transitionId, p3, cmdSendMail, p4, versionId )
{
   Docflow_TransitionForm (formName, cmdTransition, recordId, transitionId, cmdSendMail, versionId);
}


// Annulation du checkIn depuis word
function cancelCheckInFromWord(recordId)
{
   //alert("frmcancelCheckInFromWord TODO !");
   // Demander confirmation de l'annulation
   var confirmCancel = confirm(mess_docflow_confirm_checkin_word_cancel);
   if (confirmCancel)
   {
      // Forward sur l'affichage de la notice en cas d'annulation
      var rootUrl = sysGetAppBaseUrl();
      var finalUrl = rootUrl + "servlet/ViewManager?menu=menu_view&record="+recordId;
      window.location.href = finalUrl;
   }
   else
      return false;
}

// Validation du checkIn depuis word
function checkInFromWord(formName, recordId, versionId, downloadFileName)
{
   //alert("fCheckInFromWord");
   var vform = document.getElementById(formName);
   //1-Encodage du fichier local en base 64 et suppression du fichier local
   var sContentEncodedFile = EncodeFileToString(downloadFileName);
   vform.ContentFile.value = sContentEncodedFile;
    
   // Définir l'action checkInFromWord
   var action = DOCFLOW_MANAGER + "action=checkIn";
   vform.action = action+"&recordId="+recordId
                        +"&localFilePath="+downloadFileName
                        +"&versionId="+versionId
                        +"&updateNotice=true"
                        +"&forward=/servlet/ViewManager?menu=menu_view&record="+recordId; 
   //alert("checkInFromWord action = " + vform.action);
   vform.submit();                         
}

