/*
 * Ever Ezida (c) 2004 
 * @author tdn
 *
 */
 
var XmlTreeViewName = "xmlTreeView";

// Renvoie l'objet TreeView mis en cache
function Xml_getTreeView()
{
   return TreeView_getCacheInstance(XmlTreeViewName);
}

// Renvoie le TreeView Xml s'il est prêt.
// Sinon affiche un message et renvoie null
function Xml_checkWaitState()
{
   var tv = Xml_getTreeView();
   if ( tv == null ) return null;
   if ( tv.getWaitState() )
   {
      alert(mess_xml_treeview_busy);
      tv = null;
   }
   return tv;
}

// Remet à zéro le cache local
function Xml_reinitCache()
{
   TreeView_setCacheInstance(XmlTreeViewName, null);
}
 
// Indique une attente à l'utilisateur dans la barre de status
function Xml_setWaitState(wait)
{
  /* var tv = Xml_getTreeView()
   if ( tv != null )
      tv.setWaitState(wait);

   var win_status = sysFindFrameWithinApp("hds_status");
   if ( win_status == null ) return;
   if ( win_status.setWaitState )
      win_status.setWaitState(wait);
   */
}

/// -----------------------------------------------------------------------------
// Objet mlTreeHandler
// Doit implémenter les méthodes :
//  TreeViewItem [] getChildren(parentId);
// -----------------------------------------------------------------------------
function XmlTreeHandler(dataActionUrl)
{
   if ( dataActionUrl == null )
      dataActionUrl = sysGetAppRoot() + "/servlet/DcmManager";

   this.action = dataActionUrl + "?"; 
   this.recordId = ""; 
}

XmlTreeHandler.prototype.setRecordId = function (recordId)
{
   this.recordId = recordId;
}

// Renvoie l'item racine
XmlTreeHandler.prototype.getRootFolder = function ()      
{
}


// Appelle l'action avec les paramètres action=getChildren & item=parentId
// Renvoie un tableau de TreeViewItem ou null
XmlTreeHandler.prototype.getChildren = function (parentId)      
{
   var action = 
	   this.action + "action=getChildrenElementsForView&parentId=" + parentId +
	   "&recordId=" + this.recordId;
	
   var xmlDoc = XMLUtil_LoadXML(action);
   if ( xmlDoc == null  )
   {
      // Message d'erreur géré au niveau de fct XMLUtil_LoadXML()
      return null;
   }
   var errMsg = XMLUtil_IsError(xmlDoc);
   if ( errMsg )
   {
      alert(errMsg);
      return null;
   }
   var ret = this._xmlDocToTreeViewItems(xmlDoc);
   return ret;
}

// Appelle l'action avec les paramètres : 
// action=createFolder & item=parentId & name=folderName
// Renvoie un TreeViewItem ou null
XmlTreeHandler.prototype.createFolder = function (parentFolder, newName)      
{
}

// Appelle l'action avec les paramètres : 
// action=createItem & item=parentId & name=itemName & type=itemType & objectId=itemData
// Renvoie un TreeViewItem ou null
XmlTreeHandler.prototype.createItem = function (parentFolder, newName, itemType, itemData)      
{
 
}

// Appelle l'action avec les paramètres : 
// action=deleteFolder/deleteItem & item=id
// Renvoie true ou false
XmlTreeHandler.prototype.deleteItem = function (item)
{
}

// Appelle l'action avec les paramètres : 
// action=moveFolder/moveItem & parentItem=parentId item=id
// Renvoie l'item déplacé ou null
XmlTreeHandler.prototype.moveItem = function (item, parentFolder)
{
}

// Appelle l'action avec les paramètres : 
// action=duplicateFolder/duplicateItem & parentItem=parentId item=id
// Renvoie le nouveau item ou null
XmlTreeHandler.prototype.duplicateItem = function (item, parentFolder)
{
}

// Appelle l'action avec les paramètres : 
// action=getDefaultItemName & objectId=objectId
// Renvoie le nom par défaut ou null
XmlTreeHandler.prototype.getDefaultItemName = function (objectId)
{
 
   
}

// Affiche dans la frame de droite la vue de la notice lié à l'item
// 
XmlTreeHandler.prototype.onItemSelected = function (item)      
{
    // Ne fait rien actuellement pour le dossier
   if ( item.isFolder )
   { 
      return;
   }
   // Si jamais la donnée de l'item est vide, on ne fait rien
   var objectId = item.data.viewTreeItem.objectId;
   var documentId = item.data.viewTreeItem.documentId;
   
   // alert(objectId);
   if ( objectId == null ) {return;}
   var fileAttrib = "";
   if(item.data.viewTreeItem.file!=null)
   {
      fileAttrib="&file="+myEscape(item.data.viewTreeItem.file);
   }
   // en fonction du type de document
   //multiTiff / website / standard, on charge dans différentes servlets
   if(item.data.viewTreeItem.typeDoc==null || item.data.viewTreeItem.typeDoc=="standard")
   {
   var url = sysGetAppRoot() + "/servlet/DocumentFileManager?source="+myEscape(item.data.viewTreeItem.source)+"&document="+documentId+"&resolution=MEDIUM&recordId=" + myEscape(objectId)+fileAttrib;
   }
   else
   {
	   if(item.data.viewTreeItem.typeDoc=="multiTiff") 
	   {
	     var url = sysGetAppRoot() + "/jsp/dcm/dcm_multi_tiff_main.jsp?source="+myEscape(item.data.viewTreeItem.source)+"&nbPages="+myEscape(item.data.viewTreeItem.nbPages)+"&location=visualisation&label="+myEscape(item.name)+"&document="+documentId+"&resolution=MEDIUM&recordId=" + myEscape(objectId)+fileAttrib;
	   }
       else 
       {
		  if(item.data.viewTreeItem.typeDoc=="website") 
		  {
		     // tdn 02/04/2007 pour un site web, ouvrir directement l'URL
		     // var url = item.data.viewTreeItem.file;
		     // csi 050507 Visualisation des sites web via DocumentFileManager
		     var url = sysGetAppRoot() + "/servlet/DocumentFileManager?source="+myEscape(item.data.viewTreeItem.source)+"&document="+documentId+"&resolution=MEDIUM&recordId=" + myEscape(objectId)+fileAttrib;
		     //alert("onItemSelected url website = " + url);
		  }
	   }
   }
   // alert("onItemSelected url = " + url);
   var win_view = document.getElementById("viewDocument");
   if ( ! win_view )
   {
         var winName = "document_popup";
   		sysOpenWindow(winName, url);
   }
   else
   {
      // Pour un item, s'il n'est pas déjà visualisé (pour ne pas effacer la liste
      // en cours de visu), on affiche la vue de la notice
      var curId = win_view.currentRecordId;
      if ( objectId == curId ) return;
      //alert("action sur " + item.toString()+ "\n\n" + url);
      win_view.src = url;
   }
}


// Appelle l'action avec les paramètres : 
// action=renameFolder/renameItem & item=id & name=itemName
// Renvoie un TreeViewItem ou null
XmlTreeHandler.prototype.renameItem = function (item, newName)
{
 
}
// Attribue une requête à un dossier
// Renvoie un TreeViewItem ou null
XmlTreeHandler.prototype.setFolderRequest = function (item, newRequestName)
{
 
}

// Chargement de la racine et des éléments de premier niveau
XmlTreeHandler.prototype.loadTree = function (TV, RECORDID)
{
   //TV.clearAll();
   // Crée la racine
   var data = new DcmElement( "DCM_ROOT_ID", null, DOCUMENT_DOSSIER, null, null, null, null, null);
   var rootItem = TV.addItem(null, DCM_ROOT_ID, DCM_ROOT_LABEL, true, "", data);

   var dcmTreeItems = this.getRootElements(RECORDID);
   if ( dcmTreeItems )
   {
      for (var i=0; i<dcmTreeItems.length; i++)
      {
         var item = dcmTreeItems[i];
       	 TV.addItem(DCM_ROOT_ID, item.id, item.name, item.isFolder, 0, item.data);        
      }
   }          
}


// Récupération des éléments de premier niveau
XmlTreeHandler.prototype.getRootElements = function (recordId)
{
	var action = 
	   this.action + "action=getRootElementsForView&recordId=" + recordId;
	
    var xmlDoc = XMLUtil_LoadXML(action);
   if ( xmlDoc == null  )
   {
      // Message d'erreur géré au niveau de fct XMLUtil_LoadXML()
      return null;
   }
   var errMsg = XMLUtil_IsError(xmlDoc);
   if ( errMsg )
   {
      alert(errMsg);
      return null;
   }
   var ret = this._xmlDocToTreeViewItems(xmlDoc);
   return ret;
}


// Lire le document xml renvoyé par le serveur et crée les TreeViewItem correspondants
XmlTreeHandler.prototype._xmlDocToTreeViewItems = function (xmlDoc)
{
   var ret = null;
   var elements = xmlDoc.getElementsByTagName("ELEMENT");
   if ( (elements != null) && (elements.length > 0) )
   {
      ret = new Array(elements.length);
      for (var i=0; i< elements.length; i++)
      {
         var ele = elements[i];         
         var eleId = ele.getAttribute("id");
         var name = ele.getAttribute("label");
         var type = ele.getAttribute("docType");        
         var isFolder = (type.substring(0, 16) == DOCUMENT_DOSSIER);
         var level = ele.getAttribute("level");
         
         var description = ele.getAttribute("description");
         var fileName = ele.getAttribute("fileName");
         var actionUrl = ele.getAttribute("actionUrl");
         var parentId = ele.getAttribute("parentId");
         var accessibility = ele.getAttribute("accessibility");
         var prevId = ele.getAttribute("prevId");
         var nextId = ele.getAttribute("nextId");       
         var data = new DcmElement(eleId, parentId, type, actionUrl, description, accessibility, prevId, nextId);         
         var objectId = ele.getAttribute("objectId");       
         var source = ele.getAttribute("source");
         var file = ele.getAttribute("file");    
         var typeDoc = ele.getAttribute("typeDoc");       
         var nbPages = ele.getAttribute("nbPages");
         var viewTreeItem = new ViewTreeItem(objectId,eleId, source, file,typeDoc,nbPages)
         data.setViewTreeItem(viewTreeItem);         
         var treeItem = new TreeViewItem( eleId, name, isFolder, type, data);
         ret[i] = treeItem;
      }
   }
   return ret;
}





/**
 * Methode générant un objet GEDTreeItem héritant de TreeViewItem
 * à partir du document xmlDoc
 * @param {Element} document xml permettant de construire un objet GEDTreeItem
 * @return {GEDTreeItem} 
 */
XmlTreeHandler.prototype.buildItem = function (xmlElement)
{
   var eleId = HTMLUtil_encodeEntities(xmlElement.getAttribute("id"));
   var element_name = xmlElement.getAttribute("name");
   var type = xmlElement.getAttribute("type");        
   var isFolder = ("true" == xmlElement.getAttribute("isFolder"));
   
   //nouvelles informations n'existant pas dans doris
   var level = (isFolder)?"1":"0";
   var description = element_name;
   var fileName = xmlElement.getAttribute("file"); 
   var actionUrl = "";
   var parentId = "";
   var accessibility ="";
   var prevId = "";
   var nextId ="";       

   var data = new DcmElement(eleId, parentId, type, actionUrl, description, accessibility, prevId, nextId);         

   var objectId = xmlElement.getAttribute("objectId"); 
   var documentId = xmlElement.getAttribute("document");       
   var source = xmlElement.getAttribute("source");
   var file =  xmlElement.getAttribute("file");    
   var typeDoc = xmlElement.getAttribute("typeDoc");       
   var nbPages = xmlElement.getAttribute("nbPages");
   var viewTreeItem = new ViewTreeItem(objectId, documentId,source, file,typeDoc,nbPages)
   data.setViewTreeItem(viewTreeItem);         
   var treeItem = new TreeViewItem( eleId, element_name, isFolder, type, data);
   return treeItem;
   
}


//TreeItem propre à la GED
//GEDTreeItem.prototype = new TreeViewItem();

function OBSOLETE_GEDTreeItem(id, name, isFolder, type, data, source, file,typeDoc,nbPages)
{
   this.parent = TreeViewItem;
   this.parent(id, name, isFolder, type, data);
 
   this.source = source;
   this.file = file;
   this.typeDoc=typeDoc;
   this.nbPages=nbPages;
}

function ViewTreeItem(objectId, documentId, source, file,typeDoc,nbPages)
{
   this.objectId = objectId;
   //pru avant stock dans item.id mais n'est pas unique pour doris
   //Un document Doris peut contenir plusieurs item. il ne peut donc pas s'agir
   //d'un identifiant unique pour les items doris
   this.documentId = documentId; 
   this.source = source;
   this.file = file;
   this.typeDoc=typeDoc;
   this.nbPages=nbPages;
}
