diff --git a/apps/maarch_entreprise/actions/send_attachments_to_contact.php b/apps/maarch_entreprise/actions/send_attachments_to_contact.php
deleted file mode 100755
index 4cf96c09a58a8b44f21642006e3bdac81f6248f3..0000000000000000000000000000000000000000
--- a/apps/maarch_entreprise/actions/send_attachments_to_contact.php
+++ /dev/null
@@ -1,137 +0,0 @@
-<?php
-/*
-*    Copyright 2008,2009 Maarch
-*
-*  This file is part of Maarch Framework.
-*
-*   Maarch Framework is free software: you can redistribute it and/or modify
-*   it under the terms of the GNU General Public License as published by
-*   the Free Software Foundation, either version 3 of the License, or
-*   (at your option) any later version.
-*
-*   Maarch Framework is distributed in the hope that it will be useful,
-*   but WITHOUT ANY WARRANTY; without even the implied warranty of
-*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-*   GNU General Public License for more details.
-*
-*   You should have received a copy of the GNU General Public License
-*    along with Maarch Framework.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-/**
-* @brief   Action : simple confirm
-*
-* Open a modal box to confirm a status modification. Used by the core (manage_action.php page).
-*
-* @file
-* @author Claire Figueras <dev@maarch.org>
-* @date $date$
-* @version $Revision$
-* @ingroup apps
-*/
-
-/**
-* $confirm  bool false
-*/
-$confirm = false;
-$etapes = array('form');
-$frm_width='800px';
-$frm_height = 'auto';
-
-function get_form_txt($values, $path_manage_action,  $id_action, $table, $module, $coll_id, $mode )
- {
-
-
-$module='apps';
-$mode='add';
-$parameters='&action=send_attachments_to_contact';
-
-$parameters = '&coll_id='.$_REQUEST['coll_id'].'&size=full';
-        $frm_str .='<iframe name="form_mail" id="form_mail" src="'. $_SESSION['config']['businessappurl'].'index.php?display=true&module=sendmail&page=mail_form_to_contact&identifier='.$_REQUEST['values'].'&origin=document&coll_id=letterbox_coll&mode='.$mode.$parameters.'" frameborder="0" width="100%" style="height:540px;padding:0px;overflow-x:hidden;overflow-y: auto;"></iframe>';
-
-$mode='page';
- 
-        $frm_str .='<div id="form2" style="border:none;">';
-        $frm_str .= '<form name="frm_redirect_dep" id="frm_redirect_dep" method="post" class="forms" action="#">';
-        $frm_str .= '<input type="hidden" name="chosen_action" id="chosen_action" value="end_action" />';
-        $frm_str .= '<input type="hidden" name="note_content_to_users" id="note_content_to_users" />';
-            $frm_str .='</form>';
-        $frm_str .='</div>';
-    $frm_str .='<div align="center">';
-
-
-        $frm_str .=' <input type="button" name="redirect_dep" value="'._VALIDATE.'" id="redirect_dep" class="button" onclick="window.frames.form_mail.document.getElementsByName(\'valid\')[0].click();valid_action_form( \'frm_redirect_dep\', \''.$path_manage_action.'\', \''. $id_action.'\', \''.$_REQUEST['values'].'\', \''.$table.'\', \''.$module.'\', \''.$coll_id.'\', \''.$mode.'\');" />';
-        $frm_str .=' <input type="button" name="cancel" id="cancel" class="button"  value="'._CANCEL.'" onclick="pile_actions.action_pop();destroyModal(\'modal_'.$id_action.'\');"/>';
-    $frm_str .='</div>';
-
-    return addslashes($frm_str);
- }
-
- function check_form($form_id,$values)
- {
-    return true;
- }
-
-function manage_form($arr_id, $history, $id_action, $label_action, $status, $coll_id, $table, $values_form )
-{
-    
-    if(empty($values_form) || count($arr_id) < 1) 
-        return false;
-
-    require_once('modules/notes/class/notes_controler.php');
-    $note = new notes_controler();
-
-
-    $db = new Database();
-    
-    $formValues = array();
-    for($i=0; $i<count($values_form); $i++) {
-        $formValue = $values_form[$i];
-        $id = $formValue['ID'];
-        $value = $formValue['VALUE'];
-        $formValues[$id] = $value;
-    }
-    
-    $db = new Database();
-    $_SESSION['action_error'] = '';
-    $result = '';
-    $coll_id = $_SESSION['current_basket']['coll_id'];
-    $res_id = $arr_id[0];
-    require_once("core/class/class_security.php");
-    $sec = new security();
-    $table = $sec->retrieve_table_from_coll($coll_id);
-
-    # save note
-    if($formValues['note_content_to_users'] != ''){
-        //Add notes
-        $nb_avis = $sequence +1;
-        $userIdTypist = $_SESSION['user']['UserId'];
-        $content_note = $formValues['note_content_to_users'];
-        $content_note = str_replace(";", ".", $content_note);
-        $content_note = str_replace("--", "-", $content_note);
-        $content_note = $content_note;
-        $note->addNote($res_id, $coll_id, $content_note);
-        
-    }
-    return array('result' => $res_id.'#', 'history_msg' => '');
-}
-
- /**
- * Get the value of a given field in the values returned by the form
- *
- * @param $values Array Values of the form to check
- * @param $field String the field
- * @return String the value, false if the field is not found
- **/
-function get_value_fields($values, $field)
-{
-    for($i=0; $i<count($values);$i++)
-    {
-        if($values[$i]['ID'] == $field)
-        {
-            return  $values[$i]['VALUE'];
-        }
-    }
-    return false;
-}
-?>
diff --git a/apps/maarch_entreprise/actions/send_to_contact_with_mandatory_attachment.php b/apps/maarch_entreprise/actions/send_to_contact_with_mandatory_attachment.php
deleted file mode 100755
index 75e0878a32d7d553ab7e1edfa3c9ad61368abbb4..0000000000000000000000000000000000000000
--- a/apps/maarch_entreprise/actions/send_to_contact_with_mandatory_attachment.php
+++ /dev/null
@@ -1,165 +0,0 @@
-<?php
-/*
-*    Copyright 2008,2009 Maarch
-*
-*  This file is part of Maarch Framework.
-*
-*   Maarch Framework is free software: you can redistribute it and/or modify
-*   it under the terms of the GNU General Public License as published by
-*   the Free Software Foundation, either version 3 of the License, or
-*   (at your option) any later version.
-*
-*   Maarch Framework is distributed in the hope that it will be useful,
-*   but WITHOUT ANY WARRANTY; without even the implied warranty of
-*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-*   GNU General Public License for more details.
-*
-*   You should have received a copy of the GNU General Public License
-*    along with Maarch Framework.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-/**
-* @brief   Action : simple confirm
-*
-* Open a modal box to confirm a status modification. Used by the core (manage_action.php page).
-*
-* @file
-* @author Claire Figueras <dev@maarch.org>
-* @date $date$
-* @version $Revision$
-* @ingroup apps
-*/
-
-/**
-* $confirm  bool false
-*/
-$_SESSION['id_action'] = $id_action;
-
-if($_SESSION['features']['send_to_contact_with_mandatory_attachment'] == true){
-    require_once('core'.DIRECTORY_SEPARATOR.'class'.DIRECTORY_SEPARATOR.'class_request.php');
-    $db = new Database();
-    $stmt = $db->query("SELECT count(res_id_master) FROM res_attachments WHERE res_id_master = ?", array($_POST['values']));
-    $nbAttachments = $stmt->fetchObject(); 
-    $nbAttachments = json_decode(json_encode($nbAttachments), True);
-
-    if($nbAttachments['count'] == 0){
-        $confirm = false;
-        $etapes = array('no_attachment');
-
-    }elseif($nbAttachments['count'] != 0){
-        $confirm = false; 
-        $etapes = array('form');
-    }
-}elseif($_SESSION['features']['send_to_contact_with_mandatory_attachment'] == false){
-        $etapes = array('form'); 
-}
-
-
-$confirm = false;
-
-$frm_width='800px';
-$frm_height = 'auto';
-
-
-function get_attachment_txt($values, $path_manage_action,  $id_action, $table, $module, $coll_id, $mode){
-    var_dump('ok get_attachment_txt');
-}
-
-function get_form_txt($values, $path_manage_action,  $id_action, $table, $module, $coll_id, $mode )
-{
-
-$module='apps';
-$mode='add';
-$parameters='&action=send_to_contact_with_mandatory_attachment';
-
-$parameters = '&coll_id='.$_REQUEST['coll_id'].'&size=full';
-        $frm_str .='<iframe name="form_mail" id="form_mail" src="'. $_SESSION['config']['businessappurl'].'index.php?display=true&module=sendmail&page=mail_form_to_contact&identifier='.$_REQUEST['values'].'&origin=document&coll_id=letterbox_coll&mode='.$mode.$parameters.'" frameborder="0" width="100%" style="height:540px;padding:0px;overflow-x:hidden;overflow-y: auto;"></iframe>';
-
-$mode='page';
- 
-        $frm_str .='<div id="form2" style="border:none;">';
-        $frm_str .= '<form name="frm_redirect_dep" id="frm_redirect_dep" method="post" class="forms" action="#">';
-        $frm_str .= '<input type="hidden" name="chosen_action" id="chosen_action" value="end_action" />';
-        $frm_str .= '<input type="hidden" name="note_content_to_users" id="note_content_to_users" />';
-            $frm_str .='</form>';
-        $frm_str .='</div>';
-        $frm_str .='<div align="center">';
-
-
-        $frm_str .=' <input type="button" name="redirect_dep" value="'._VALIDATE.'" id="redirect_dep" class="button" onclick="window.frames.form_mail.document.getElementsByName(\'valid\')[0].click();" />';
-        // $frm_str .=' <input type="button" name="storage" class="button" id="storage" onclick="alert(\'TEST\')";/>';
-        $frm_str .=' <input style="display:none;" type="button" name="storage" class="button" id="storage" onclick="valid_action_form( \'frm_redirect_dep\', \''.$path_manage_action.'\', \''. $id_action.'\', \''.$_REQUEST['values'].'\', \''.$table.'\', \''.$module.'\', \''.$coll_id.'\', \''.$mode.'\');";/>';
-        $frm_str .=' <input type="button" name="cancel" id="cancel" class="button"  value="'._CANCEL.'" onclick="pile_actions.action_pop();destroyModal(\'modal_'.$id_action.'\');"/>';
-        $frm_str .='</div>';
-
-    return addslashes($frm_str);
- }
-
-function check_form($form_id,$values)
-{
-    return true;
-}
-
-function manage_form($arr_id, $history, $id_action, $label_action, $status, $coll_id, $table, $values_form )
-{
-    
-    if(empty($values_form) || count($arr_id) < 1) 
-        return false;
-
-    require_once('modules/notes/class/notes_controler.php');
-    $note = new notes_controler();
-
-
-    $db = new Database();
-    
-    $formValues = array();
-    for($i=0; $i<count($values_form); $i++) {
-        $formValue = $values_form[$i];
-        $id = $formValue['ID'];
-        $value = $formValue['VALUE'];
-        $formValues[$id] = $value;
-    }
-    
-    $db = new Database();
-    $_SESSION['action_error'] = '';
-    $result = '';
-    $coll_id = $_SESSION['current_basket']['coll_id'];
-    $res_id = $arr_id[0];
-    require_once("core/class/class_security.php");
-    $sec = new security();
-    $table = $sec->retrieve_table_from_coll($coll_id);
-
-    # save note
-    if($formValues['note_content_to_users'] != ''){
-        //Add notes
-        $nb_avis = $sequence +1;
-        $userIdTypist = $_SESSION['user']['UserId'];
-        $content_note = $formValues['note_content_to_users'];
-        $content_note = str_replace(";", ".", $content_note);
-        $content_note = str_replace("--", "-", $content_note);
-        $content_note = $content_note;
-        $note->addNote($res_id, $coll_id, $content_note);
-        
-    }
-    return array('result' => $res_id.'#', 'history_msg' => '');
-}
-
- /**
- * Get the value of a given field in the values returned by the form
- *
- * @param $values Array Values of the form to check
- * @param $field String the field
- * @return String the value, false if the field is not found
- **/
-function get_value_fields($values, $field)
-{
-    for($i=0; $i<count($values);$i++)
-    {
-        if($values[$i]['ID'] == $field)
-        {
-            return  $values[$i]['VALUE'];
-        }
-    }
-    return false;
-}
-?>
diff --git a/apps/maarch_entreprise/class/class_types.php b/apps/maarch_entreprise/class/class_types.php
deleted file mode 100755
index 44d45a1f78b03396bc759c1960a4cb2377b1f86b..0000000000000000000000000000000000000000
--- a/apps/maarch_entreprise/class/class_types.php
+++ /dev/null
@@ -1,41 +0,0 @@
-<?php
-
-/*
-*
-*   Copyright 2015 Maarch
-*
-*   This file is part of Maarch Framework.
-*
-*   Maarch Framework is free software: you can redistribute it and/or modify
-*   it under the terms of the GNU General Public License as published by
-*   the Free Software Foundation, either version 3 of the License, or
-*   (at your option) any later version.
-*
-*   Maarch Framework is distributed in the hope that it will be useful,
-*   but WITHOUT ANY WARRANTY; without even the implied warranty of
-*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-*   GNU General Public License for more details.
-*
-*   You should have received a copy of the GNU General Public License
-*   along with Maarch Framework.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-/**
-* Types Class
-*
-* Contains all the function to manage the doctypes
-*
-* @package  Maarch LetterBox 1.0
-* @version 2.0
-* @since 10/2005
-* @license GPL
-* @author  Claire Figueras  <dev@maarch.org>
-*
-*/
-
-require_once 'apps/'. $_SESSION['config']['app_id'] .'/class/class_types_Abstract.php';
-
-class types extends types_Abstract
-{
-    // custom
-}
diff --git a/apps/maarch_entreprise/class/class_types_Abstract.php b/apps/maarch_entreprise/class/class_types_Abstract.php
deleted file mode 100755
index f8989f532329f0f108734278312ba3a76b975e73..0000000000000000000000000000000000000000
--- a/apps/maarch_entreprise/class/class_types_Abstract.php
+++ /dev/null
@@ -1,373 +0,0 @@
-<?php
-
-/**
- * Copyright Maarch since 2008 under licence GPLv3.
- * See LICENCE.txt file at the root folder for more details.
- * This file is part of Maarch software.
- */
-
-/**
- * @brief Contains all the function to manage the doctypes
- *
- * @author dev@maarch.org
-*
-* @package  Maarch
-* @version 2.0
-* @since 10/2005
-* @license GPL
-*
-*/
-
-require_once "core" . DIRECTORY_SEPARATOR . "class" . DIRECTORY_SEPARATOR
-    ."class_security.php";
-require_once 'core/core_tables.php';
-require_once "core" . DIRECTORY_SEPARATOR . "class" . DIRECTORY_SEPARATOR
-    . "class_history.php";
-
-abstract class types_Abstract extends database
-{
-
-    /**
-    * Returns in an array all indexes possible for a given collection
-    *
-    * @param string $collId Collection identifier
-    * @return array $indexes[$i]
-    *                   ['column'] : database field of the index
-    *                   ['label'] : Index label
-    *                   ['type'] : Index type ('date', 'string', 'integer' or 'float')
-    *                   ['img'] : url to the image index
-    */
-    public function get_all_indexes($collId)
-    {
-        $sec = new security();
-        $db = new Database();
-        $indColl = $sec->get_ind_collection($collId);
-        if (file_exists(
-            $_SESSION['config']['corepath'] . 'custom' . DIRECTORY_SEPARATOR
-            . $_SESSION['custom_override_id'] . DIRECTORY_SEPARATOR . 'apps'
-            . DIRECTORY_SEPARATOR . $_SESSION['config']['app_id']
-            . DIRECTORY_SEPARATOR . "xml" . DIRECTORY_SEPARATOR
-            . $_SESSION['collections'][$indColl]['index_file']
-        )
-        ) {
-            $path = $_SESSION['config']['corepath'] . 'custom'
-                  . DIRECTORY_SEPARATOR . $_SESSION['custom_override_id']
-                  . DIRECTORY_SEPARATOR . 'apps' . DIRECTORY_SEPARATOR
-                  . $_SESSION['config']['app_id'] . DIRECTORY_SEPARATOR . "xml"
-                  . DIRECTORY_SEPARATOR
-                  . $_SESSION['collections'][$indColl]['index_file'];
-        } else {
-            $path = 'apps' . DIRECTORY_SEPARATOR . $_SESSION['config']['app_id']
-                  . DIRECTORY_SEPARATOR . "xml" . DIRECTORY_SEPARATOR
-                  . $_SESSION['collections'][$indColl]['index_file'];
-        }
-
-        $xmlfile = simplexml_load_file($path);
-
-        $pathLang = 'apps' . DIRECTORY_SEPARATOR . $_SESSION['config']['app_id']
-                  . DIRECTORY_SEPARATOR . 'lang' . DIRECTORY_SEPARATOR
-                  . $_SESSION['config']['lang'] . '.php';
-        $indexes = array();
-        foreach ($xmlfile->INDEX as $item) {
-            $label = (string) $item->label;
-            if (!empty($label) && defined($label) && constant($label) <> null) {
-                $label = constant($label);
-            }
-            $img = (string) $item->img;
-            if (isset($item->default_value) && ! empty($item->default_value)) {
-                $default = (string) $item->default_value;
-                if (!empty($default) && defined($default)
-                    && constant($default) <> null
-                ) {
-                    $default = constant($default);
-                }
-            } else {
-                $default = false;
-            }
-            if (isset($item->values_list)) {
-                $values = array();
-                $list = $item->values_list ;
-                foreach ($list->value as $val) {
-                    $labelVal = (string) $val->label;
-                    if (!empty($labelVal) && defined($labelVal)
-                        && constant($labelVal) <> null
-                    ) {
-                        $labelVal = constant($labelVal);
-                    }
-                   
-                    array_push(
-                        $values,
-                        array(
-                            'id' => (string) $val->id,
-                            'label' => $labelVal,
-                        )
-                    );
-                }
-                $tmpArr = array(
-                    'column' => (string) $item->column,
-                    'label' => $label,
-                    'type' => (string) $item->type,
-                    'img' => $img,
-                    'type_field' => 'select',
-                    'values' => $values,
-                    'default_value' => $default
-                );
-            } elseif (isset($item->table)) {
-                $values = array();
-                $tableXml = $item->table;
-                //$this->show_array($tableXml);
-                $tableName = (string) $tableXml->table_name;
-                $foreignKey = (string) $tableXml->foreign_key;
-                $foreignLabel = (string) $tableXml->foreign_label;
-                $whereClause = (string) $tableXml->where_clause;
-                $order = (string) $tableXml->order;
-                $query = "select " . $foreignKey . ", " . $foreignLabel
-                       . " from " . $tableName;
-                if (isset($whereClause) && ! empty($whereClause)) {
-                    $query .= " where " . $whereClause;
-                }
-                if (isset($order) && ! empty($order)) {
-                    $query .= ' '.$order;
-                }
-                
-                $stmt = $db->query($query);
-                while ($res = $stmt->fetch()) {
-                    array_push(
-                         $values,
-                         array(
-                             'id' => (string) $res[0],
-                             'label' => (string) $res[1],
-                         )
-                     );
-                }
-                $tmpArr = array(
-                    'column' => (string) $item->column,
-                    'label' => $label,
-                    'type' => (string) $item->type,
-                    'img' => $img,
-                    'type_field' => 'select',
-                    'values' => $values,
-                    'default_value' => $default,
-                );
-            } else {
-                $tmpArr = array(
-                    'column' => (string) $item->column,
-                    'label' => $label,
-                    'type' => (string) $item->type,
-                    'img' => $img,
-                    'type_field' => 'input',
-                    'default_value' => $default,
-                );
-            }
-            //$this->show_array($tmpArr);
-            array_push($indexes, $tmpArr);
-        }
-        return $indexes;
-    }
-
-    /**
-    * Returns in an array all indexes for a doctype
-    *
-    * @param string $typeId Document type identifier
-    * @param string $collId Collection identifier
-    * @param string $mode Mode 'full' or 'minimal', 'full' by default
-    * @return array array of the indexes, depends on the chosen mode :
-    *       1) mode = 'full' : $indexes[field_name] :  the key is the field name in the database
-    *                                       ['label'] : Index label
-    *                                       ['type'] : Index type ('date', 'string', 'integer' or 'float')
-    *                                       ['img'] : url to the image index
-    *       2) mode = 'minimal' : $indexes[$i] = field name in the database
-    */
-    public function get_indexes($typeId, $collId, $mode='full')
-    {
-        $fields = array();
-        $db = new Database();
-        if (!empty($typeId)) {
-            $stmt = $db->query(
-                "SELECT field_name FROM doctypes_indexes WHERE coll_id = ? and type_id = ?",
-                array($collId, $typeId)
-            );
-        } else {
-            return array();
-        }
-
-        while ($res = $stmt->fetchObject()) {
-            array_push($fields, $res->field_name);
-        }
-        if ($mode == 'minimal') {
-            return $fields;
-        }
-
-        $indexes = array();
-        $sec = new security();
-        $indColl = $sec->get_ind_collection($collId);
-        if (file_exists(
-            $_SESSION['config']['corepath'] . 'custom' . DIRECTORY_SEPARATOR
-            . $_SESSION['custom_override_id'] . DIRECTORY_SEPARATOR . 'apps'
-            . DIRECTORY_SEPARATOR . $_SESSION['config']['app_id']
-            . DIRECTORY_SEPARATOR . "xml" . DIRECTORY_SEPARATOR
-            . $_SESSION['collections'][$indColl]['index_file']
-        )
-        ) {
-            $path = $_SESSION['config']['corepath'] . 'custom'
-                  . DIRECTORY_SEPARATOR . $_SESSION['custom_override_id']
-                  . DIRECTORY_SEPARATOR . 'apps' . DIRECTORY_SEPARATOR
-                  . $_SESSION['config']['app_id'] . DIRECTORY_SEPARATOR
-                  . "xml" . DIRECTORY_SEPARATOR
-                  . $_SESSION['collections'][$indColl]['index_file'];
-        } else {
-            $path = 'apps' . DIRECTORY_SEPARATOR . $_SESSION['config']['app_id']
-                  . DIRECTORY_SEPARATOR . "xml" . DIRECTORY_SEPARATOR
-                  . $_SESSION['collections'][$indColl]['index_file'];
-        }
-
-        $xmlfile = simplexml_load_file($path);
-        $pathLang = 'apps' . DIRECTORY_SEPARATOR . $_SESSION['config']['app_id']
-                  . DIRECTORY_SEPARATOR . 'lang' . DIRECTORY_SEPARATOR
-                  . $_SESSION['config']['lang'] . '.php';
-        foreach ($xmlfile->INDEX as $item) {
-            $label = (string) $item->label;
-            if (!empty($label) && defined($label)
-                && constant($label) <> null
-            ) {
-                $label = constant($label);
-            }
-           
-            $col = (string) $item->column;
-            $img = (string) $item->img;
-            if (isset($item->default_value) && ! empty($item->default_value)) {
-                $default = (string) $item->default_value;
-                if (!empty($default) && defined($default)
-                    && constant($default) <> null
-                ) {
-                    $default = constant($default);
-                }
-            } else {
-                $default = false;
-            }
-            if (in_array($col, $fields)) {
-                if (isset($item->values_list)) {
-                    $values = array();
-                    $list = $item->values_list ;
-                    foreach ($list->value as $val) {
-                        $labelVal = (string) $val->label;
-                        if (!empty($labelVal) && defined($labelVal)
-                            && constant($labelVal) <> null
-                        ) {
-                            $labelVal = constant($labelVal);
-                        }
-                       
-                        array_push(
-                            $values,
-                            array(
-                                'id' => (string) $val->id,
-                                'label' => $labelVal,
-                            )
-                        );
-                    }
-                    $indexes[$col] = array(
-                        'label'         => $label,
-                        'type'          => (string) $item->type,
-                        'img'           => $img,
-                        'type_field'    => 'select',
-                        'values'        => $values,
-                        'default_value' => $default,
-                        'origin'        => 'document',
-                        'only_detail'   => $item->only_detail
-                    );
-                } elseif (isset($item->table)) {
-                    $values = array();
-                    $tableXml = $item->table;
-                    //$this->show_array($tableXml);
-                    $tableName = (string) $tableXml->table_name;
-                    $foreignKey = (string) $tableXml->foreign_key;
-                    $foreignLabel = (string) $tableXml->foreign_label;
-                    $whereClause = (string) $tableXml->where_clause;
-                    $order = (string) $tableXml->order;
-                    $query = "select " . $foreignKey . ", " . $foreignLabel
-                           . " from " . $tableName;
-                    if (isset($whereClause) && ! empty($whereClause)) {
-                        $query .= " where " . $whereClause;
-                    }
-                    if (isset($order) && ! empty($order)) {
-                        $query .= ' '.$order;
-                    }
-                    
-                    $stmt = $db->query($query);
-                    while ($res = $stmt->fetchObject()) {
-                        array_push(
-                             $values,
-                             array(
-                                 'id' => (string) $res->{$foreignKey},
-                                 'label' => $res->{$foreignLabel},
-                             )
-                         );
-                    }
-                    $indexes[$col] = array(
-                        'label'         => $label,
-                        'type'          => (string) $item->type,
-                        'img'           => $img,
-                        'type_field'    => 'select',
-                        'values'        => $values,
-                        'default_value' => $default,
-                        'origin'        => 'document',
-                        'only_detail'   => $item->only_detail
-                    );
-                } else {
-                    $indexes[$col] = array(
-                        'label'         => $label,
-                        'type'          => (string) $item->type,
-                        'img'           => $img,
-                        'type_field'    => 'input',
-                        'default_value' => $default,
-                        'origin'        => 'document',
-                        'only_detail'   => $item->only_detail
-                    );
-                }
-            }
-        }
-
-        foreach (array_keys($indexes) as $key) {
-            if (is_array($indexes[$key])) {
-                $indexes[$key]['label']         = functions::xssafe($indexes[$key]['label']);
-                $indexes[$key]['type']          = functions::xssafe($indexes[$key]['type']);
-                $indexes[$key]['img']           = functions::xssafe($indexes[$key]['img']);
-                $indexes[$key]['type_field']    = functions::xssafe($indexes[$key]['type_field']);
-                $indexes[$key]['default_value'] = functions::xssafe($indexes[$key]['default_value']);
-                $indexes[$key]['origin']        = functions::xssafe($indexes[$key]['origin']);
-                $indexes[$key]['only_detail']   = functions::xssafe($indexes[$key]['only_detail']);
-                if (is_array($indexes[$key]['values'])) {
-                    for ($cpt=0;$cpt<count($indexes[$key]['values']);$cpt++) {
-                        $indexes[$key]['values'][$cpt]['id'] = functions::xssafe($indexes[$key]['values'][$cpt]['id']);
-                        $indexes[$key]['values'][$cpt]['label'] = functions::xssafe($indexes[$key]['values'][$cpt]['label']);
-                    }
-                    $indexes[$key]['type_field'] = functions::xssafe($indexes[$key]['type_field']);
-                }
-            }
-        }
-        return $indexes;
-    }
-
-    /**
-    * Returns in an array all manadatory indexes possible for a given type
-    *
-    * @param string $typeId Document type identifier
-    * @param string $collId Collection identifier
-    * @return array Array of the manadatory indexes, $indexes[$i] = field name
-    * in the db
-    */
-    public function get_mandatory_indexes($typeId, $collId)
-    {
-        $fields = array();
-        $db = new Database();
-        $stmt = $db->query(
-            "SELECT field_name FROM doctypes_indexes WHERE coll_id = ? and type_id = ? and mandatory = 'Y'",
-            array($collId, $typeId)
-        );
-
-        while ($res = $stmt->fetchObject()) {
-            array_push($fields, $res->field_name);
-        }
-        return $fields;
-    }
-}
diff --git a/apps/maarch_entreprise/css/styles.css b/apps/maarch_entreprise/css/styles.css
index d0ec3844fc2fd656a4f12868754e69addb82433b..4e0aa6659d2005c1f1068f5fa279c5e3df73eb4f 100755
--- a/apps/maarch_entreprise/css/styles.css
+++ b/apps/maarch_entreprise/css/styles.css
@@ -5,17 +5,6 @@ html {
     height: 100%;
 }
 
-.detailsDisplayDiv {
-    background: #fff;
-    border-top: 1px solid #666;
-    clear: both;
-    margin: 0 0 0 -5px;
-    overflow: auto;
-    padding: 5px;
-    height: 93%;
-    width: auto;
-}
-
 .func {
 
   background: #F2F2F2;
@@ -30,40 +19,6 @@ html {
     font-size: 14px;
 }
 
-.detailsTab {
-    background: #F2F2F2;
-    border: 1px solid #666;
-    border-bottom: 0;
-    cursor: pointer;
-    display: inline;
-    float: right;
-    margin: 2px 0 0 -1px;
-    padding: 2px 5px;
-    position: relative;
-    font-size: 14px;
-    display: block;
-}
-
-.whole-panel{ 
-    background: #135F7F;
-    border: 1px solid #000;
-    display: inline-block;
-    height: 735px;
-    min-width: 995px;
-    margin: 0 auto 1em;
-    padding: 5px 0 0 5px;
-    display: block;
-}
-.technical-infos{
-    display: inline-block;
-    font: normal normal normal 14px/1 FontAwesome;
-    font-size: inherit;
-    text-rendering: auto;
-    -webkit-font-smoothing: antialiased;
-    -moz-osx-font-smoothing: grayscale;
-   /* display: block;*/
-}
-
 .diffusion-list{
     
     background: #F2F2F2;
@@ -77,74 +32,6 @@ html {
     position: relative;
     font-size: 14px;
 }
- 
-.print-folder {
-
-
-    background: #F2F2F2;
-    border: 1px solid #666;
-    border-bottom: 0;
-    cursor: pointer;
-    display: inline;
-    float: right;
-    margin: 2px 0 0 -1px;
-    padding: 2px 5px;
-    position: relative;
-    font-size: 14px;
-}
-
-
-.visa-circuit{
-    background: #F2F2F2;
-    border: 1px solid #666;
-    border-bottom: 0;
-    cursor: pointer;
-    display: inline;
-    float: right;
-    margin: 2px 0 0 -1px;
-    padding: 2px 5px;
-    position: relative;
-    font-size: 14px;
-}
-
-.opinion-circuit {
-    background: #F2F2F2;
-    border: 1px solid #666;
-    border-bottom: 0;
-    cursor: pointer;
-    display: inline;
-    float: right;
-    margin: 2px 0 0 -1px;
-    padding: 2px 5px;
-    position: relative;
-    font-size: 14px;
-}
-
-.attached-files {
-    background: #F2F2F2;
-    border: 1px solid #666;
-    border-bottom: 0;
-    cursor: pointer;
-    display: inline;
-    float: right;
-    margin: 2px 0 0 -1px;
-    padding: 2px 5px;
-    position: relative;
-    font-size: 14px;
-}
-
-.answers-done{
-    background: #F2F2F2;
-    border: 1px solid #666;
-    border-bottom: 0;
-    cursor: pointer;
-    display: inline;
-    float: right;
-    margin: 2px 0 0 -1px;
-    padding: 2px 5px;
-    position: relative;
-    font-size: 14px;
-}
 
 .history{
     background: #F2F2F2;
@@ -224,13 +111,6 @@ html {
     font-size: 14px;
 }
 
-.border_on {
-    border-style:solid;
-    border-color:#003399;
-    border-width:thin;
-    margin-top: 10px;
-}
-
 body {
     color: #666;
     /*background: white url(static.php?filename=bg_body.gif) top center repeat-y;*/
@@ -326,20 +206,6 @@ a:hover {
     display: block;
 }
 
-#view_tree_types {
-    background:  url(static.php?filename=manage_architecture.gif) no-repeat 2px top;
-    width: 315px;
-    min-height: 110px;
-    float: left;
-    padding-top: 0px;
-    padding-right: 18px;
-    padding-bottom: 0px;
-    padding-left: 0px;
-    margin: 0px 0px 15px;
-    position: relative;
-    display: block;
-}
-
 /* floated blocks */
 
 .clear {
@@ -2774,19 +2640,6 @@ font-size: 14px;
 height:10px;
 }
 
-.maarch_credits_left_box{
-
-float: left;
-width:680px;
-height:660px;
-}
-
-.credits_list{
-text-align:center;
-float: right;
-width:300px;
-}
-
 .img_credits_maarch_box{
 width:100%;
 position:relative;
@@ -2831,17 +2684,6 @@ div.autocomplete ul li span.informal {
     color: grey;
 }
 
-/* clear search */
-.clearsearch {
-    position:absolute;
-    display:block;
-    margin-left:800px;
-}
-.clearsearch img{
-    vertical-align:middle;
-    margin-right:10px;
-}
-
 /* HR */
 hr{
   border: none;
@@ -3003,11 +2845,6 @@ hr{
     /*background:  url(static.php?filename=manage_users.gif) no-repeat 2px top;*/
 }
 
-#view_tree_types {
-    background:  url(static.php?filename=manage_architecture.gif) no-repeat 2px top;
-
-}
-
 .admin_subtitle
 {
     margin-top: 10px;
@@ -3338,23 +3175,6 @@ a.legend hr
     border: 0.2em gray;
 }
 
-.doctype_level1
-{
-    background-color:#EFECCA;
-}
-
-.doctype_level2
-{
-    color: #002F2F;
-}
-
-.access_info
-{
-    margin-left: 5%;
-    background-color: #EFFAFF;
-    padding:5px;
-}
-
 .task
 {
     background-color: #EFFAFF;
@@ -3363,13 +3183,6 @@ a.legend hr
     height: 41px;
 }
 
-#welcome_table
-{
- width:100%;
- height:95px;
- /*background-image: url(static.php?filename=illustr_home.jpg);*/
-}
-
 #welcome_title
 {
     font-size: 14px;
@@ -3380,11 +3193,6 @@ a.legend hr
     margin: auto auto;
 }
 
-.center_text
-{
-    text-align:center;
-}
-
 .h2_title
 {
     margin: 0;
@@ -3399,26 +3207,6 @@ a.legend hr
     /*width: 520px;*/
 }
 
-.linkDiv {
-    padding: 5px;
-    padding-left: 15px;
-    margin: 0px;
-    margin-bottom: 5px;
-    border-bottom: 1px solid rgba(28, 153, 197, 1);
-    border-left: 1px solid rgba(28, 153, 197, 1);
-    border-right: 1px solid rgba(28, 153, 197, 1);
-    background-color: rgba(200, 224, 255, 0.1);
-}
-.linkDiv:hover {
-    background-color: rgba(200, 224, 255, 0.6);
-    border-left: 5px solid rgba(28, 153, 197, 1);
-}
-
-.linkDiv .barreLinks {
-    background-color: rgba(0, 0, 0, 0.1);
-    width: 2px;
-}
-
 .listletter {
     padding: 4px 0 4px 0px;
 }
@@ -3453,44 +3241,12 @@ table.listing  {
 
 /*** NEW WF ***/
 
-.multicontactInput {
-    font: -moz-field;
-    font: -webkit-small-control;
-    margin-top: 2px;
-    padding: 2px 2px;
-    width: 225px;
-    min-height: 13px;
-    overflow: hidden;
-}
-
 .largerList{
     margin: 0;
     min-width: 900px;
     width: 100%;
 }
 
-#inner_content_contact {
-    border-top: none;
-    border-bottom: none;
-    padding: 15px 0px 0px;
-    height: auto;
-    margin-left: 0px;
-}
-
-#post #inner_content_contact {
-    padding: 0 4px 0px 0px;
-}
-
-.multicontact_element {
-    display:inline-block; 
-    margin:3px;
-    padding: 1px 3px 2px 3px;
-    /*color:white;*/
-    font-size: .8em;
-    background-color: #BAD1E2;
-    border-radius: 5px;
-}
-
 /*added by lgi*/
 a.actionList {
     padding-left: 20px;
@@ -3560,14 +3316,6 @@ a.actionList {
     color: #070B19;
 }
 
-.closeModale{
-  padding: 0.5em;
-  color: #ffffff;
-  right: 0px;
-  top: -7px;
-  position: absolute;
-}
-
 #nbLines_chosen{
     margin-top: -11px;
 }
@@ -3576,44 +3324,6 @@ input.button {
 width:auto;
 }
 
-.TabSelected{
-    background: #fff !important;
-    margin-top: 0 !important;
-    margin-bottom: -3px !important;
-    padding-bottom: 5px !important;
-    position: relative !important;
-    z-index: 1 !important;
-}
-
-.DetailsTabFunc  {
-    background: #F2F2F2;
-    border: 1px solid #666;
-    border-bottom: 0;
-    cursor: pointer;
-    display: inline;
-    margin: 2px 0 0 -1px;
-    padding: 2px 5px;
-    position: relative;
-    font-size: 2em;
-    padding-left: 15px;
-    padding-right: 15px;
-    padding-top: 5px;
-}
-
-.detailsTab {
-    background: #F2F2F2;
-    border: 1px solid #666;
-    border-bottom: 0;
-    cursor: pointer;
-    display: inline;
-    float: right;
-    margin: 2px 0 0 -1px;
-    padding: 2px 5px;
-    position: relative;
-    font-size: 14px;
-    display: block;
-}
-
 #frmsearch2 .autocomplete, #frmcontact .autocomplete{
     top:auto !important;
 }
diff --git a/apps/maarch_entreprise/display_tab.php b/apps/maarch_entreprise/display_tab.php
deleted file mode 100755
index ce1762f75effe1ec66ab54bc988c9c405328b19d..0000000000000000000000000000000000000000
--- a/apps/maarch_entreprise/display_tab.php
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-if(isset($_REQUEST["titleTab"])){
-    $titleTab = $_REQUEST["titleTab"];
-    $res_id   = $_REQUEST["resId"];
-    $coll_id  = $_REQUEST["collId"];
-    $script   = $_REQUEST["pathScriptTab"];
-} else {
-    echo 'NO TAB FOUND!';
-    exit();
-}
-require_once 'core'.DIRECTORY_SEPARATOR.'class'.DIRECTORY_SEPARATOR.'class_request.php';
-
-$core_tools = new core_tools();
-$core_tools->load_lang();
-$core_tools->load_html();
-$core_tools->load_header('', true, false);
-$core_tools->load_js();
-    
-$frm_str .= '<div class="desc" id="notes_div">';
-$frm_str .= '<div class="ref-unit block" style="margin-top:-2px;">';
-if(!empty($titleTab)){
-    $frm_str .= '<center><h2 onmouseover="this.style.cursor=\'pointer\';">' . urldecode($titleTab) . '</h2></center>';
-}
-$frm_str .= '<div id="load_tab" title="loading..." style="text-align:center;"><i class="fa fa-spinner fa-spin fa-3x fa-fw"></i></div>';
-$frm_str .= '<iframe src="' . $script . '" '
-            . 'name="iframe_tab" id="iframe_tab" width="100%" height="590px" align="center" '
-            . 'scrolling="auto" frameborder="0" onload="document.getElementById(\'load_tab\').style.display=\'none\';"></iframe>';
-//var_dump($frm_str);
-echo $frm_str;
diff --git a/apps/maarch_entreprise/indexing_searching/document_history.php b/apps/maarch_entreprise/indexing_searching/document_history.php
deleted file mode 100755
index 5d2b7b7eb4d5e18aecb747283c51df8422ed9f54..0000000000000000000000000000000000000000
--- a/apps/maarch_entreprise/indexing_searching/document_history.php
+++ /dev/null
@@ -1,256 +0,0 @@
-<?php
-/**
-* Copyright Maarch since 2008 under licence GPLv3.
-* See LICENCE.txt file at the root folder for more details.
-* This file is part of Maarch software.
-
-* @brief   document_history
-* @author  dev <dev@maarch.org>
-* @ingroup indexing_searching
-*/
-
-require_once "core" . DIRECTORY_SEPARATOR . "class" . DIRECTORY_SEPARATOR . "class_request.php";
-require_once "core" . DIRECTORY_SEPARATOR . "class" . DIRECTORY_SEPARATOR . "class_security.php";
-require_once "apps" . DIRECTORY_SEPARATOR . $_SESSION['config']['app_id'] . DIRECTORY_SEPARATOR
-    . "class" . DIRECTORY_SEPARATOR . "class_lists.php";
-
-$core_tools = new core_tools();
-$request    = new request();
-$sec        = new security();
-$list       = new lists();
-$db         = new Database();
-
-$parameters = '';
-
-//Ressource ID
-if (isset($_REQUEST['id']) && !empty($_REQUEST['id'])) {
-    $id = $_REQUEST['id'];
-} else {
-    echo '<span class="error">' . _ID . ' ' . _IS_EMPTY . '</span>';
-    exit();
-}
-
-$right = $sec->test_right_doc('letterbox_coll', $id);
-if (!$right) {
-    exit(_NO_RIGHT_TXT);
-}
-
-$small = false;
-$smallQuery = '';
-if ($_REQUEST['small'] == 'true') {
-    $small = true;
-    $smallQuery = "&small=true";
-} else {
-    $small = false;
-}
-
-//Collection ID
-if (isset($_REQUEST['coll_id']) && !empty($_REQUEST['coll_id'])) {
-    $table = $sec->retrieve_table_from_coll($_REQUEST['coll_id']);
-    $view = $sec->retrieve_view_from_coll_id($_REQUEST['coll_id']);
-    $parameters = "&coll_id=" . $_REQUEST['coll_id'];
-} else {
-    echo '<span class="error">' . _COLLECTION . ' ' . _IS_EMPTY . '</span>';
-    exit();
-}
-
-//Extra parameters
-if (isset($_REQUEST['size']) && !empty($_REQUEST['size'])) {
-    $parameters .= '&size=' . $_REQUEST['size'];
-}
-
-if (isset($_REQUEST['load'])) {
-    //
-    $core_tools->load_lang();
-    $core_tools->load_html();
-    $core_tools->load_header('', true, false); ?>
-
-<body>
-    <?php
-            $core_tools->load_js();
-    
-    //Load list
-    $target = $_SESSION['config']['businessappurl'] . 'index.php?display=true&dir=indexing_searching&page=document_history&id=' . $id . $parameters . $smallQuery;
-    $listContent = $list->loadList($target);
-    $list->_resetFilter2();
-    echo $listContent; ?>
-</body>
-
-</html>
-<?php
-} else {
-
-    //If size is full change some parameters
-        if (isset($_REQUEST['size']) && ($_REQUEST['size'] == "full")) {
-            $sizeUser    = "15";
-            $sizeText    = "30";
-            $css         = "listing spec";
-            $cutString   = 200;
-            $linesToShow = 15;
-        } elseif (isset($_REQUEST['size']) && ($_REQUEST['size'] == "medium")) {
-            $sizeUser    = "15";
-            $sizeText    = "30";
-            $css         = "listing2 spec";
-            $cutString   = 100;
-            $linesToShow = 15;
-        } else {
-            $sizeUser    = "10";
-            $sizeText    = "10";
-            $css         = "listingsmall";
-            $cutString   = 20;
-            $linesToShow = 15;
-        }
-    
-        //Order
-        $order = $order_field = '';
-        $order = $list->getOrder();
-        $order_field = $list->getOrderField();
-        if (!empty($order_field) && !empty($order)) {
-            $orderstr = "order by " . $order_field . " " . $order;
-        } else {
-            $list->setOrder();
-            $list->setOrderField('event_date');
-            $orderstr = "order by event_date desc";
-        }
-        if (isset($_REQUEST['start']) && !empty($_REQUEST['start'])) {
-            $parameters .= '&start='.$_REQUEST['start'];
-            $start = $_REQUEST['start'];
-        } else {
-            $start = $list->getStart();
-            $parameters .= '&start='.$start;
-        }
-    
-        //select
-        $select['history'] = array();
-        $select['users'] = array();
-
-        array_push(
-        $select['history'],
-        'event_date',
-        'info',
-        'info'
-    );
-        array_push(
-        $select['users'],
-        'user_id',
-        'firstname',
-        'lastname'
-    );
-
-        //From filters
-        $whereTab = [];
-        $filterClause = $list->getFilters();
-        if (!empty($filterClause)) {
-            $whereTab[] = $filterClause;
-        }
-
-        //Where tablename or view
-        if ((empty($table) || !$table) && (!empty($view) && $view <> false)) {
-            $whereTab[] = "history.table_name= '" . $view . "'";
-        } elseif ((empty($view) || !$view) && (!empty($table) && $table <> false)) {
-            $whereTab[] = "history.table_name= '" . $table . "'";
-        } elseif (!empty($view) && !empty($table) && $view <> false && $table <> false) {
-            $whereTab[] = "(history.table_name= '" . $table . "' OR history.table_name = '" . $view . "')";
-        }
-
-        //Where query
-        $whereTab[] = "history.record_id = ? and history.user_id = users.user_id";
-
-        //Build Where
-        $where = implode(' AND ', $whereTab);
-
-        $arrayPDO = [$id];
-
-        $tab = $request->PDOselect(
-        $select,
-        $where,
-        $arrayPDO,
-        $orderstr,
-        $_SESSION['config']['databasetype'],
-        'default',
-        false,
-        '',
-        '',
-        '',
-        false,
-        false,
-        false,
-        $start
-    );
-        //Result Array
-        if (!empty($tab)) {
-            for ($i = 0; $i < count($tab); $i++) {
-                for ($j = 0; $j < count($tab[$i]); $j++) {
-                    foreach (array_keys($tab[$i][$j]) as $value) {
-                        if ($tab[$i][$j][$value] == "id") {
-                            $tab[$i][$j]["id"] = $tab[$i][$j]['value'];
-                            $tab[$i][$j]["label"] = _ID;
-                            $tab[$i][$j]["size"] = "1";
-                            $tab[$i][$j]["label_align"] = "left";
-                            $tab[$i][$j]["align"] = "left";
-                            $tab[$i][$j]["valign"] = "bottom";
-                            $tab[$i][$j]["show"] = true;
-                            $tab[$i][$j]["order"] = 'id';
-                        }
-                        if ($tab[$i][$j][$value] == "event_date") {
-                            $tab[$i][$j]["value"] = $request->dateformat($tab[$i][$j]["value"]);
-                            $tab[$i][$j]["label"] = _DATE;
-                            $tab[$i][$j]["size"] = "10";
-                            $tab[$i][$j]["label_align"] = "left";
-                            $tab[$i][$j]["align"] = "left";
-                            $tab[$i][$j]["valign"] = "bottom";
-                            $tab[$i][$j]["show"] = true;
-                            $tab[$i][$j]["order"] = 'event_date';
-                        }
-                        if ($tab[$i][$j][$value] == "firstname") {
-                            $firstname = $request->show_string($tab[$i][$j]["value"]);
-                        }
-                        if ($tab[$i][$j][$value] == "lastname") {
-                            $tab[$i][$j]["value"] = $firstname . ' ' . $request->show_string($tab[$i][$j]["value"]);
-                            $tab[$i][$j]["label"] = _USER;
-                            $tab[$i][$j]["size"] = $sizeUser;
-                            $tab[$i][$j]["label_align"] = "left";
-                            $tab[$i][$j]["align"] = "left";
-                            $tab[$i][$j]["valign"] = "bottom";
-                            $tab[$i][$j]["show"] = true;
-                            $tab[$i][$j]["order"] = 'lastname';
-                        }
-                        if ($tab[$i][$j][$value] == "info") {
-                            $tab[$i][$j]["value"] = $request->show_string($tab[$i][$j]["value"]);
-                            $tab[$i][$j]["label"] = _EVENT;
-                            $tab[$i][$j]["size"] = $sizeText;
-                            $tab[$i][$j]["label_align"] = "left";
-                            $tab[$i][$j]["align"] = "left";
-                            $tab[$i][$j]["valign"] = "bottom";
-                            $tab[$i][$j]["show"] = true;
-                            $tab[$i][$j]["order"] = 'info';
-                        }
-                    }
-                }
-            }
-        }
-
-        //List
-    $listKey = 'id';                                                            //Cl� de la liste
-    $paramsTab = array();                                                       //Initialiser le tableau de param�tres
-    $paramsTab['bool_sortColumn'] = true;                                       //Affichage Tri
-    $paramsTab['pageTitle'] = '';                                                //Titre de la page
-    $paramsTab['bool_bigPageTitle'] = false;                                    //Affichage du titre en grand
-    $paramsTab['urlParameters'] = 'dir=indexing_searching&id='
-        . $id . '&display=true' . $parameters;                                       //Parametres d'url supplementaires
-
-        if ($small) {
-            $paramsTab['filters'] = array('user', 'history_action');                //Filtres
-        } else {
-            $paramsTab['filters'] = array('user', 'history_action', 'history_date');    //Filtres
-        }
-
-        $paramsTab['start'] = $start;
-        $paramsTab['listHeight'] = '100%';                                         //Hauteur de la liste
-
-        $status = 0;
-        $content = $list->showList($tab, $paramsTab, $listKey);
-        $debug = '';
-
-        echo "{status : " . $status . ", content : '" . addslashes($debug . $content) . "', error : '" . addslashes($error) . "'}";
-    }
diff --git a/apps/maarch_entreprise/indexing_searching/document_workflow_history.php b/apps/maarch_entreprise/indexing_searching/document_workflow_history.php
deleted file mode 100755
index 853c7b758bb9c055dd62600e85f05d8267ffd9df..0000000000000000000000000000000000000000
--- a/apps/maarch_entreprise/indexing_searching/document_workflow_history.php
+++ /dev/null
@@ -1,238 +0,0 @@
-<?php
-/**
-* Copyright Maarch since 2008 under licence GPLv3.
-* See LICENCE.txt file at the root folder for more details.
-* This file is part of Maarch software.
-
-* @brief   document_workflow_history
-* @author  dev <dev@maarch.org>
-* @ingroup indexing_searching
-*/
-
-require_once "core".DIRECTORY_SEPARATOR."class".DIRECTORY_SEPARATOR."class_request.php";
-require_once "core".DIRECTORY_SEPARATOR."class".DIRECTORY_SEPARATOR."class_security.php";
-require_once "apps".DIRECTORY_SEPARATOR.$_SESSION['config']['app_id'].DIRECTORY_SEPARATOR
-            ."class".DIRECTORY_SEPARATOR."class_lists.php";
-            
-$core_tools = new core_tools();
-$request    = new request();
-$sec        = new security();
-$list       = new lists();
-$db         = new Database();
-
-$parameters = '';
-
-//Ressource ID
-if (isset($_REQUEST['id']) && !empty($_REQUEST['id'])) {
-    $id = $_REQUEST['id'];
-} else {
-    echo '<span class="error">'._ID.' '._IS_EMPTY.'</span>';
-    exit();
-}
-
-$right = $sec->test_right_doc('letterbox_coll', $id);
-if (!$right) {
-    exit(_NO_RIGHT_TXT);
-}
-
-//Collection ID
-if (isset($_REQUEST['coll_id']) && !empty($_REQUEST['coll_id'])) {
-    $table = $sec->retrieve_table_from_coll($_REQUEST['coll_id']);
-    $view = $sec->retrieve_view_from_coll_id($_REQUEST['coll_id']);
-    $parameters = "&coll_id=".$_REQUEST['coll_id'];
-} else {
-    echo '<span class="error">'._COLLECTION.' '._IS_EMPTY.'</span>';
-    exit();
-}
-
-//Extra parameters
-if (isset($_REQUEST['size']) && !empty($_REQUEST['size'])) {
-    $parameters .= '&size='.$_REQUEST['size'];
-}
-
-if (isset($_REQUEST['load'])) {
-    //
-    $core_tools->load_lang();
-    $core_tools->load_html();
-    $core_tools->load_header('', true, false); ?>
-
-<body>
-    <?php
-        $core_tools->load_js();
-        
-    //Load list
-    $target = $_SESSION['config']['businessappurl'].'index.php?display=true&dir=indexing_searching&page=document_workflow_history&id='.$id.$parameters;
-    $listContent = $list->loadList($target);
-    echo $listContent; ?>
-</body>
-
-</html>
-<?php
-} else {
-        //If size is full change some parameters
-        if (isset($_REQUEST['size']) && ($_REQUEST['size'] == "full")) {
-            $sizeUser = "15";
-            $sizeText = "30";
-            $css = "listing spec";
-            $cutString = 200;
-        // $linesToShow  = 15;
-        } elseif (isset($_REQUEST['size']) && ($_REQUEST['size'] == "medium")) {
-            $sizeUser = "15";
-            $sizeText = "30";
-            $css = "listing2 spec";
-            $cutString = 100;
-            $linesToShow  = 15;
-        } else {
-            $sizeUser = "10";
-            $sizeText = "10";
-            $css = "listingsmall";
-            $cutString = 20;
-            $linesToShow  = 15;
-        }
-
-        //Order
-        $order = $order_field = '';
-        $order = $list->getOrder();
-        $order_field = $list->getOrderField();
-        if (!empty($order_field) && !empty($order)) {
-            $orderstr = "order by ".$order_field." ".$order;
-        } else {
-            $list->setOrder();
-            $list->setOrderField('event_date');
-            $orderstr = "order by event_date desc";
-        }
-        if (isset($_REQUEST['start']) && !empty($_REQUEST['start'])) {
-            $parameters .= '&start='.$_REQUEST['start'];
-            $start = $_REQUEST['start'];
-        } else {
-            $start = $list->getStart();
-            $parameters .= '&start='.$start;
-        }
-
-        //select
-        $select['history'] = array();
-        $select['users'] = array();
-
-        array_push(
-    $select['history'],
-    'event_date',
-    'info',
-    'info'
-    );
-        array_push(
-    $select['users'],
-    'user_id',
-    'firstname',
-    'lastname'
-    );
-
-        //From filters
-        $whereTab = [];
-        $filterClause = $list->getFilters();
-        if (!empty($filterClause)) {
-            $whereTab[] = $filterClause;
-        }
-
-        //Where tablename or view
-        if ((empty($table) || !$table) && (!empty($view) && $view <> false)) {
-            $whereTab[] = "history.table_name= '" . $view . "'";
-        } elseif ((empty($view) || !$view) && (!empty($table) && $table <> false)) {
-            $whereTab[] = "history.table_name= '" . $table . "'";
-        } elseif (!empty($view) && !empty($table) && $view <> false && $table <> false) {
-            $whereTab[] = "(history.table_name= '" . $table . "' OR history.table_name = '" . $view . "')";
-        }
-
-        //Where query
-        $whereTab[] = "history.record_id = ? and history.user_id = users.user_id and event_id NOT LIKE '^[0-9]+$' and event_type like 'ACTION#%'";
-
-        //Build Where
-        $where = implode(' AND ', $whereTab);
-
-        $arrayPDO = [$id];
-
-        $tab = $request->PDOselect(
-    $select,
-    $where,
-    $arrayPDO,
-    $orderstr,
-    $_SESSION['config']['databasetype'],
-    'default',
-    false,
-    '',
-    '',
-    '',
-    false,
-    false,
-    false,
-    $start
-    );
-
-        //Result Array
-        for ($i=0; $i<count($tab); $i++) {
-            for ($j=0; $j<count($tab[$i]); $j++) {
-                foreach (array_keys($tab[$i][$j]) as $value) {
-                    if ($tab[$i][$j][$value]=="id") {
-                        $tab[$i][$j]["id"]=$tab[$i][$j]['value'];
-                        $tab[$i][$j]["label"]=_ID;
-                        $tab[$i][$j]["size"]="1";
-                        $tab[$i][$j]["label_align"]="left";
-                        $tab[$i][$j]["align"]="left";
-                        $tab[$i][$j]["valign"]="bottom";
-                        $tab[$i][$j]["show"]=true;
-                        $tab[$i][$j]["order"]='id';
-                    }
-                    if ($tab[$i][$j][$value]=="event_date") {
-                        $tab[$i][$j]["value"]=$request->dateformat($tab[$i][$j]["value"]);
-                        $tab[$i][$j]["label"]=_DATE;
-                        $tab[$i][$j]["size"]="10";
-                        $tab[$i][$j]["label_align"]="left";
-                        $tab[$i][$j]["align"]="left";
-                        $tab[$i][$j]["valign"]="bottom";
-                        $tab[$i][$j]["show"]=true;
-                        $tab[$i][$j]["order"]='event_date';
-                    }
-                    if ($tab[$i][$j][$value]=="firstname") {
-                        $firstname =  $request->show_string($tab[$i][$j]["value"]);
-                    }
-                    if ($tab[$i][$j][$value]=="lastname") {
-                        $tab[$i][$j]["value"] = $firstname . ' ' . $request->show_string($tab[$i][$j]["value"]) ;
-                        $tab[$i][$j]["label"]=_USER;
-                        $tab[$i][$j]["size"]=$sizeUser;
-                        $tab[$i][$j]["label_align"]="left";
-                        $tab[$i][$j]["align"]="left";
-                        $tab[$i][$j]["valign"]="bottom";
-                        $tab[$i][$j]["show"]=true;
-                        $tab[$i][$j]["order"]='lastname';
-                    }
-                    if ($tab[$i][$j][$value]=="info") {
-                        $tab[$i][$j]["value"] = $request->show_string($tab[$i][$j]["value"]);
-                        $tab[$i][$j]["label"]=_EVENT;
-                        $tab[$i][$j]["size"]=$sizeText;
-                        $tab[$i][$j]["label_align"]="left";
-                        $tab[$i][$j]["align"]="left";
-                        $tab[$i][$j]["valign"]="bottom";
-                        $tab[$i][$j]["show"]=true;
-                        $tab[$i][$j]["order"]='info';
-                    }
-                }
-            }
-        }
-
-        //List
-    $listKey = 'id';                                                            //Clee de la liste
-    $paramsTab = array();                                                       //Initialiser le tableau de parametres
-    $paramsTab['bool_sortColumn'] = true;                                       //Affichage Tri
-    $paramsTab['pageTitle'] ='';                                                //Titre de la page
-    $paramsTab['bool_bigPageTitle'] = false;                                    //Affichage du titre en grand
-    $paramsTab['urlParameters'] = 'dir=indexing_searching&id='
-        .$id.'&display=true'.$parameters;                                       //Parametres d'url supplementaires
-    $paramsTab['listHeight'] = '100%';                                          //Hauteur de la liste
-    $paramsTab['start'] = $start;
-
-        //Output
-        $status = 0;
-        $content = $list->showList($tab, $paramsTab, $listKey);
-        $debug = '';
-
-        echo "{status : " . $status . ", content : '" . addslashes($debug.$content) . "', error : '" . addslashes($error) . "'}";
-    }
diff --git a/apps/maarch_entreprise/indexing_searching/list_results_addresses.php b/apps/maarch_entreprise/indexing_searching/list_results_addresses.php
deleted file mode 100755
index 26f5fe5f20aec7e350210ccc02c90bb07c43a39c..0000000000000000000000000000000000000000
--- a/apps/maarch_entreprise/indexing_searching/list_results_addresses.php
+++ /dev/null
@@ -1,62 +0,0 @@
-<?php
-/*
-*
-*    Copyright 2014 Maarch
-*
-*  This file is part of Maarch Framework.
-*
-*   Maarch Framework is free software: you can redistribute it and/or modify
-*   it under the terms of the GNU General Public License as published by
-*   the Free Software Foundation, either version 3 of the License, or
-*   (at your option) any later version.
-*
-*   Maarch Framework is distributed in the hope that it will be useful,
-*   but WITHOUT ANY WARRANTY; without even the implied warranty of
-*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-*   GNU General Public License for more details.
-*
-*   You should have received a copy of the GNU General Public License
-*    along with Maarch Framework.  If not, see <http://www.gnu.org/licenses/>.
-*
-* @brief   Displays contacts list in search mode
-*
-* @file
-* @author <dev@maarch.org>
-* @date $date$
-* @version $Revision$
-* @ingroup basket
-*/
-
-require_once "apps".DIRECTORY_SEPARATOR.$_SESSION['config']['app_id'].DIRECTORY_SEPARATOR
-            ."class".DIRECTORY_SEPARATOR."class_lists.php";
-
-$core_tools = new core_tools();
-$list       = new lists();
-    
-//Begin
-
-/****************Management of the location bar  ************/
-$init = false;
-if(isset($_REQUEST['reinit']) && $_REQUEST['reinit'] == "true")
-{
-    $init = true;
-}
-$level = "";
-if(isset($_REQUEST['level']) && ($_REQUEST['level'] == 2 || $_REQUEST['level'] == 3 || $_REQUEST['level'] == 4 || $_REQUEST['level'] == 1))
-{
-    $level = $_REQUEST['level'];
-}
-$page_path = $_SESSION['config']['businessappurl'].'index.php?page=list_results_addresses&dir=indexing_searching';
-$page_label = _ADDRESSES_LIST;
-$page_id = "list_results_addresses";
-$core_tools->manage_location_bar($page_path, $page_label, $page_id, $init, $level);
-/***********************************************************/
-
-$saveTool       = false;
-$useTemplate    = false;
-$exportTool     = true;
-
-//List
-$target = $_SESSION['config']['businessappurl'].'index.php?page=addresses_list&dir=indexing_searching';
-$listContent = $list->loadList($target, true, 'divList', 'false');
-echo '<br />'.$listContent;
\ No newline at end of file
diff --git a/apps/maarch_entreprise/lang/en.php b/apps/maarch_entreprise/lang/en.php
index 529ba041f916b5f8536aad6f9d51e8dac5261fbe..5567f9ed4c24302523b2e09d93e0eaad656d4419 100755
--- a/apps/maarch_entreprise/lang/en.php
+++ b/apps/maarch_entreprise/lang/en.php
@@ -50,12 +50,6 @@ if (!defined('_PLEASE_CHOOSE_AN_ATTACHMENT')) {
 if (!defined('_ADD_ATTACHMENT_TO_SEND_TO_CONTACT')) {
     define('_ADD_ATTACHMENT_TO_SEND_TO_CONTACT', 'Please add an attachment before sending this mail to the contact.');
 }
-if (!defined('_SEND_TO_CONTACT_WITH_MANDATORY_ATTACHMENT')) {
-    define('_SEND_TO_CONTACT_WITH_MANDATORY_ATTACHMENT', 'Send to the contact with a mandatory attachment');
-}
-if (!defined('_SEND_ATTACHMENTS_TO_CONTACT')) {
-    define('_SEND_ATTACHMENTS_TO_CONTACT', 'Send to the contact');
-}
 if (!defined('_PROCESSING_MODE')) {
     define('_PROCESSING_MODE', 'Handling mode');
 }
@@ -409,12 +403,6 @@ if (!defined('_DEFINITIVE_ACTION')) {
 if (!defined('_AND')) {
     define('_AND', ' and ');
 }
-if (!defined('_PLEASE_CHECK_LISTDIFF')) {
-    define('_PLEASE_CHECK_LISTDIFF', ' is on the diffusion list(s). Please change the recipient in the diffusion list(s) of');
-}
-if (!defined('_THE_USER_JS')) {
-    define('_THE_USER_JS', 'The user ');
-}
 
 /************** Divers **************/
 if (!defined('_YES')) {
@@ -1407,30 +1395,6 @@ if (!defined('_DIFFLIST_NEVER_MODIFIED')) {
     define('_DIFFLIST_NEVER_MODIFIED', 'The diffusion list has never been modified');
 }
 
-//BIT MASK
-if (!defined('_BITMASK_VALUE_ALREADY_EXIST')) {
-    define('_BITMASK_VALUE_ALREADY_EXIST', 'Bit mask is already used in an other type');
-}
-
-if (!defined('_ASSISTANT_MODE')) {
-    define('_ASSISTANT_MODE', 'Assistant mode');
-}
-if (!defined('_EDIT_WITH_ASSISTANT')) {
-    define('_EDIT_WITH_ASSISTANT', 'Click here to edit the where clause with the assistant mode');
-}
-if (!defined('_VALID_THE_WHERE_CLAUSE')) {
-    define('_VALID_THE_WHERE_CLAUSE', 'Click here to VALIDATE the where clause');
-}
-if (!defined('_MUST_CHOOSE_COLLECTION_FIRST')) {
-    define('_MUST_CHOOSE_COLLECTION_FIRST', 'You have to choose a collection');
-}
-if (!defined('_CANTCHANGECOLL')) {
-    define('_CANTCHANGECOLL', 'You can not change the collection');
-}
-if (!defined('_DOCUMENTS_EXISTS_FOR_COUPLE_FOLDER_TYPE_COLLECTION')) {
-    define('_DOCUMENTS_EXISTS_FOR_COUPLE_FOLDER_TYPE_COLLECTION', 'mails exist for the folder type / collection pair');
-}
-
 if (!defined('_NO_RIGHT')) {
     define('_NO_RIGHT', 'Error');
 }
@@ -1481,13 +1445,6 @@ if (!defined('_CHOOSE_ONE_DOC')) {
 if (!defined('_CHOOSE_ONE_OBJECT')) {
     define('_CHOOSE_ONE_OBJECT', 'Choose an element at least');
 }
-
-if (!defined('_CLICK_LINE_TO_CHECK_INVOICE')) {
-    define('_CLICK_LINE_TO_CHECK_INVOICE', 'Click on a lign to check a bill');
-}
-if (!defined('_FOUND_INVOICES')) {
-    define('_FOUND_INVOICES', ' Found bill(s)');
-}
 if (!defined('_SIMPLE_CONFIRM')) {
     define('_SIMPLE_CONFIRM', 'Simple confirmation');
 }
@@ -1503,18 +1460,6 @@ if (!defined('_NO_STRUCTURE_ATTACHED')) {
 }
 
 ///// Credits
-if (!defined('_MAARCH_CREDITS')) {
-    define('_MAARCH_CREDITS', 'About Maarch ');
-}
-if (!defined('_THANKS_TO_EXT_DEV')) {
-    define('_THANKS_TO_EXT_DEV', 'Maarch depend upon some external components. A thank-you to their developers !');
-}
-if (!defined('_PROCESSING_DATE')) {
-    define('_PROCESSING_DATE', 'Processing deadline');
-}
-if (!defined('_PROCESS_NUM')) {
-    define('_PROCESS_NUM', 'Processing of the mail number ...');
-}
 if (!defined('_PROCESS_LIMIT_DATE')) {
     define('_PROCESS_LIMIT_DATE', 'Processing deadline');
 }
@@ -1660,12 +1605,6 @@ if (!defined('_PROCESS_DATE')) {
 if (!defined('_CHOOSE_STATUS')) {
     define('_CHOOSE_STATUS', 'Choose a status');
 }
-if (!defined('_PROCESS_RECEIPT')) {
-    define('_PROCESS_RECEIPT', 'Recipient(s) for processing');
-}
-if (!defined('_CHOOSE_RECEIPT')) {
-    define('_CHOOSE_RECEIPT', 'Choose a recipient');
-}
 if (!defined('_TO_CC')) {
     define('_TO_CC', 'On copy');
 }
@@ -1760,7 +1699,7 @@ if (!defined('_MULTI_FIELD')) {
     define('_MULTI_FIELD', 'Multi-fields');
 }
 if (!defined('_MULTI_FIELD_HELP')) {
-    define('_MULTI_FIELD_HELP', 'Object, description, title, EDM number, Chrono number, processing notes...');
+    define('_MULTI_FIELD_HELP', 'Object, barcode, EDM number, Chrono number, processing notes');
 }
 if (!defined('_SAVE_QUERY')) {
     define('_SAVE_QUERY', 'Save my search');
@@ -1845,18 +1784,6 @@ if (!defined('_MAIL_DATE')) {
 if (!defined('_DOC_HISTORY')) {
     define('_DOC_HISTORY', 'History');
 }
-if (!defined('_DONE_ANSWERS')) {
-    define('_DONE_ANSWERS', 'Done responses');
-}
-if (!defined('_MUST_DEFINE_ANSWER_TYPE')) {
-    define('_MUST_DEFINE_ANSWER_TYPE', 'You have to clarify the response type');
-}
-if (!defined('_MUST_CHECK_ONE_BOX')) {
-    define('_MUST_CHECK_ONE_BOX', 'You have to tick one case at least');
-}
-if (!defined('_ANSWER_TYPE')) {
-    define('_ANSWER_TYPE', 'Response type(s)');
-}
 if (!defined('_CHOOSE_FILE')) {
     define('_CHOOSE_FILE', 'Choose the file');
 }
@@ -1895,9 +1822,6 @@ if (!defined('_ATTACHMENTS_VERS_COLL')) {
 if (!defined('_APA_COLL')) {
     define('_APA_COLL', 'Collection of the physical archiving');
 }
-if (!defined('_REDIRECT_TO_ACTION')) {
-    define('_REDIRECT_TO_ACTION', 'Redirect to an action');
-}
 if (!defined('_DOCUMENTS_LIST')) {
     define('_DOCUMENTS_LIST', 'List');
 }
@@ -2574,9 +2498,6 @@ if (!defined('_WORK_BATCH')) {
 if (!defined('_DONE')) {
     define('_DONE', 'Made actions');
 }
-if (!defined('_ANSWER_TYPES_DONE')) {
-    define('_ANSWER_TYPES_DONE', 'Type(s) of made responses');
-}
 if (!defined('_CLOSING_DATE')) {
     define('_CLOSING_DATE', 'Closing date');
 }
@@ -2753,15 +2674,6 @@ if (!defined('_PROJECT')) {
 if (!defined('_MARKET')) {
     define('_MARKET', 'Sub-folder');
 }
-if (!defined('_SEARCH_CUSTOMER')) {
-    define('_SEARCH_CUSTOMER', 'Consultation folders/ sub-folders');
-}
-if (!defined('_SEARCH_CUSTOMER_TITLE')) {
-    define('_SEARCH_CUSTOMER_TITLE', 'Search folders / sub-folders');
-}
-if (!defined('_TO_SEARCH_DEFINE_A_SEARCH_ADV')) {
-    define('_TO_SEARCH_DEFINE_A_SEARCH_ADV', 'To start a search, you have to enter a folder number or a folder name or a sub-folder name');
-}
 if (!defined('_DAYS')) {
     define('_DAYS', 'Days');
 }
diff --git a/apps/maarch_entreprise/lang/fr.php b/apps/maarch_entreprise/lang/fr.php
index 4bd8250fb139b8c26c8d5ab6663668ad324b2ec0..d305e2765ee3a71dfbc80d0f4577cbe8bbed7e10 100755
--- a/apps/maarch_entreprise/lang/fr.php
+++ b/apps/maarch_entreprise/lang/fr.php
@@ -39,18 +39,6 @@ if (!defined('_PLEASE_CHOOSE_AN_ATTACHMENT')) {
 if (!defined('_ADD_ATTACHMENT_TO_SEND_TO_CONTACT')) {
     define('_ADD_ATTACHMENT_TO_SEND_TO_CONTACT', "Veuillez ajouter une pièce jointe avant d'envoyer ce courrier au contact");
 }
-if (!defined('_SEND_TO_CONTACT_WITH_MANDATORY_ATTACHMENT')) {
-    define('_SEND_TO_CONTACT_WITH_MANDATORY_ATTACHMENT', 'Envoyer au contact avec une pièce jointe obligatoire et accusé de réception');
-}
-if (!defined('_SEND_TO_CONTACT_WITH_MANDATORY_ATTACHMENT_DESC')) {
-    define('_SEND_TO_CONTACT_WITH_MANDATORY_ATTACHMENT_DESC', "Ouvre une modal d'envoi de mail avec l'email du contact associé au document en tant que destinataire, présence OBLIGATOIRE de pièce(s) jointe(s) à l'envoi.");
-}
-if (!defined('_SEND_ATTACHMENTS_TO_CONTACT')) {
-    define('_SEND_ATTACHMENTS_TO_CONTACT', 'Envoyer au contact avec accusé de réception');
-}
-if (!defined('_SEND_ATTACHMENTS_TO_CONTACT_DESC')) {
-    define('_SEND_ATTACHMENTS_TO_CONTACT_DESC', "Ouvre une modal d'envoi de mail avec l'email du contact associé au document en tant que destinataire.");
-}
 if (!defined('_PROCESSING_MODE')) {
     define('_PROCESSING_MODE', 'Mode de traitement');
 }
@@ -404,13 +392,6 @@ if (!defined('_DEFINITIVE_ACTION')) {
 if (!defined('_AND')) {
     define('_AND', ' et ');
 }
-//if (!defined("_PLEASE_CHECK_LISTDIFF")) define("_PLEASE_CHECK_LISTDIFF", " est dans une ou des listes de diffusion. Veuillez le remplacer dans la ou les listes de ");
-if (!defined('_PLEASE_CHECK_LISTDIFF')) {
-    define('_PLEASE_CHECK_LISTDIFF', "L'utilisateur est présent en tant que destinataire d'un ou plusieurs modèle(s) de liste de diffusion, veuillez le remplacer par un autre utilisateur.");
-}
-if (!defined('_THE_USER_JS')) {
-    define('_THE_USER_JS', "L\'utilisateur ");
-}
 
 /************** Divers **************/
 if (!defined('_YES')) {
@@ -1415,30 +1396,6 @@ if (!defined('_DIFFLIST_NEVER_MODIFIED')) {
     define('_DIFFLIST_NEVER_MODIFIED', "La liste de diffusion n'a jamais été modifiée");
 }
 
-//BITMASK
-if (!defined('_BITMASK_VALUE_ALREADY_EXIST')) {
-    define('_BITMASK_VALUE_ALREADY_EXIST', 'Bitmask déjà utilisé dans un autre type');
-}
-
-if (!defined('_ASSISTANT_MODE')) {
-    define('_ASSISTANT_MODE', 'Mode assisstant');
-}
-if (!defined('_EDIT_WITH_ASSISTANT')) {
-    define('_EDIT_WITH_ASSISTANT', 'Cliquez ici pour éditer la clause where avec le mode assistant');
-}
-if (!defined('_VALID_THE_WHERE_CLAUSE')) {
-    define('_VALID_THE_WHERE_CLAUSE', 'Cliquez ici pour VALIDER la clause where');
-}
-if (!defined('_MUST_CHOOSE_COLLECTION_FIRST')) {
-    define('_MUST_CHOOSE_COLLECTION_FIRST', 'Vous devez choisir une collection');
-}
-if (!defined('_CANTCHANGECOLL')) {
-    define('_CANTCHANGECOLL', 'Vous ne pouvez pas changer la collection');
-}
-if (!defined('_DOCUMENTS_EXISTS_FOR_COUPLE_FOLDER_TYPE_COLLECTION')) {
-    define('_DOCUMENTS_EXISTS_FOR_COUPLE_FOLDER_TYPE_COLLECTION', 'courriers existent pour le couple type de dossier/collection');
-}
-
 if (!defined('_NO_RIGHT')) {
     define('_NO_RIGHT', 'Erreur');
 }
@@ -1492,13 +1449,6 @@ if (!defined('_CHOOSE_ONE_DOC')) {
 if (!defined('_CHOOSE_ONE_OBJECT')) {
     define('_CHOOSE_ONE_OBJECT', 'Choisissez au moins un élément');
 }
-
-if (!defined('_CLICK_LINE_TO_CHECK_INVOICE')) {
-    define('_CLICK_LINE_TO_CHECK_INVOICE', 'Cliquer sur une ligne pour vérifier une facture');
-}
-if (!defined('_FOUND_INVOICES')) {
-    define('_FOUND_INVOICES', ' facture(s) trouvée(s)');
-}
 if (!defined('_SIMPLE_CONFIRM')) {
     define('_SIMPLE_CONFIRM', 'Confirmation simple');
 }
@@ -1517,18 +1467,6 @@ if (!defined('_NO_STRUCTURE_ATTACHED')) {
 }
 
 ///// Credits
-if (!defined('_MAARCH_CREDITS')) {
-    define('_MAARCH_CREDITS', 'A propos de Maarch ');
-}
-if (!defined('_THANKS_TO_EXT_DEV')) {
-    define('_THANKS_TO_EXT_DEV', "Maarch s'appuie sur quelques composants externes. Merci à leurs développeurs !");
-}
-if (!defined('_PROCESSING_DATE')) {
-    define('_PROCESSING_DATE', 'Date limite de traitement');
-}
-if (!defined('_PROCESS_NUM')) {
-    define('_PROCESS_NUM', 'Traitement du courrier n°');
-}
 if (!defined('_PROCESS_LIMIT_DATE')) {
     define('_PROCESS_LIMIT_DATE', 'Date limite de traitement');
 }
@@ -1678,12 +1616,6 @@ if (!defined('_PROCESS_DATE')) {
 if (!defined('_CHOOSE_STATUS')) {
     define('_CHOOSE_STATUS', 'Choisissez un statut');
 }
-if (!defined('_PROCESS_RECEIPT')) {
-    define('_PROCESS_RECEIPT', 'Destinataire(s) pour traitement');
-}
-if (!defined('_CHOOSE_RECEIPT')) {
-    define('_CHOOSE_RECEIPT', 'Choisissez un destinataire');
-}
 if (!defined('_TO_CC')) {
     define('_TO_CC', 'En copie');
 }
@@ -1782,7 +1714,7 @@ if (!defined('_MULTI_FIELD')) {
     define('_MULTI_FIELD', 'Multi-champs');
 }
 if (!defined('_MULTI_FIELD_HELP')) {
-    define('_MULTI_FIELD_HELP', 'Objet, description, titre, Num GED, Num chrono, annotations de traitement...');
+    define('_MULTI_FIELD_HELP', 'Objet, code à barres, Num GED, Num chrono, annotations de traitement');
 }
 if (!defined('_SAVE_QUERY')) {
     define('_SAVE_QUERY', 'Enregistrer ma recherche');
@@ -1866,18 +1798,6 @@ if (!defined('_MAIL_DATE')) {
 if (!defined('_DOC_HISTORY')) {
     define('_DOC_HISTORY', 'Historique');
 }
-if (!defined('_DONE_ANSWERS')) {
-    define('_DONE_ANSWERS', 'Réponses effectuées');
-}
-if (!defined('_MUST_DEFINE_ANSWER_TYPE')) {
-    define('_MUST_DEFINE_ANSWER_TYPE', 'Vous devez préciser le type de réponse');
-}
-if (!defined('_MUST_CHECK_ONE_BOX')) {
-    define('_MUST_CHECK_ONE_BOX', 'Vous devez cocher au moins une case');
-}
-if (!defined('_ANSWER_TYPE')) {
-    define('_ANSWER_TYPE', 'Type(s) de réponse');
-}
 if (!defined('_CHOOSE_FILE')) {
     define('_CHOOSE_FILE', 'Choisissez le fichier');
 }
@@ -1916,9 +1836,6 @@ if (!defined('_ATTACHMENTS_VERS_COLL')) {
 if (!defined('_APA_COLL')) {
     define('_APA_COLL', "Collection de l'archivage physique");
 }
-if (!defined('_REDIRECT_TO_ACTION')) {
-    define('_REDIRECT_TO_ACTION', 'Rediriger vers une action');
-}
 if (!defined('_DOCUMENTS_LIST')) {
     define('_DOCUMENTS_LIST', 'Liste');
 }
@@ -2601,9 +2518,6 @@ if (!defined('_WORK_BATCH')) {
 if (!defined('_DONE')) {
     define('_DONE', 'Actions effectuées');
 }
-if (!defined('_ANSWER_TYPES_DONE')) {
-    define('_ANSWER_TYPES_DONE', 'Type(s) de réponses effectuées');
-}
 if (!defined('_CLOSING_DATE')) {
     define('_CLOSING_DATE', 'Date de clôture');
 }
@@ -2783,15 +2697,6 @@ if (!defined('_PROJECT')) {
 if (!defined('_MARKET')) {
     define('_MARKET', 'Sous-dossier');
 }
-if (!defined('_SEARCH_CUSTOMER')) {
-    define('_SEARCH_CUSTOMER', 'Consultation Dossiers Sous-dossiers');
-}
-if (!defined('_SEARCH_CUSTOMER_TITLE')) {
-    define('_SEARCH_CUSTOMER_TITLE', 'Recherche Dossiers Sous-dossiers');
-}
-if (!defined('_TO_SEARCH_DEFINE_A_SEARCH_ADV')) {
-    define('_TO_SEARCH_DEFINE_A_SEARCH_ADV', 'Pour lancer une recherche vous devez saisir un n° de dossier ou un nom de Dossier ou de Sous-dossier');
-}
 if (!defined('_DAYS')) {
     define('_DAYS', 'jours');
 }
diff --git a/apps/maarch_entreprise/lang/nl.php b/apps/maarch_entreprise/lang/nl.php
index a8b7d8b402271e26ab2cb657680c9521c799a0b1..1b827201890a2efb9f13750a17afc870f8fc52ce 100755
--- a/apps/maarch_entreprise/lang/nl.php
+++ b/apps/maarch_entreprise/lang/nl.php
@@ -19,10 +19,6 @@ if (!defined('_UPDATED')) { define('_UPDATED', 'gewijzigd');}
 if (!defined('_DELETED')) { define('_DELETED', 'verwijderd');}
 if (!defined('_PLEASE_CHOOSE_AN_ATTACHMENT')) { define('_PLEASE_CHOOSE_AN_ATTACHMENT', 'Voeg een bijlage toe a.u.b.');}
 if (!defined('_ADD_ATTACHMENT_TO_SEND_TO_CONTACT')) { define('_ADD_ATTACHMENT_TO_SEND_TO_CONTACT', 'Voeg een bijlage toe vooraleer deze mail naar het contact te verzenden');}
-if (!defined('_SEND_TO_CONTACT_WITH_MANDATORY_ATTACHMENT')) { define('_SEND_TO_CONTACT_WITH_MANDATORY_ATTACHMENT', 'Verzenden naar het contact met een bijlage verplicht');}
-if (!defined('_SEND_TO_CONTACT_WITH_MANDATORY_ATTACHMENT_DESC')) { define('_SEND_TO_CONTACT_WITH_MANDATORY_ATTACHMENT_DESC', 'Opent een mailverzendingsmodaliteit met de mail van het aan het document gekoppelde contact als bestemmeling. Bijlage(n) VERPLICHT bij de verzending.');}
-if (!defined('_SEND_ATTACHMENTS_TO_CONTACT')) { define('_SEND_ATTACHMENTS_TO_CONTACT', 'Verzenden aan het contact');}
-if (!defined('_SEND_ATTACHMENTS_TO_CONTACT_DESC')) { define('_SEND_ATTACHMENTS_TO_CONTACT_DESC', 'Opent een mailverzendingsmodaliteit met de e-mail van het aan het document gekoppelde contact als bestemmeling.');}
 if (!defined('_PROCESSING_MODE')) { define('_PROCESSING_MODE', 'Verwerkingswijze');}
 if (!defined('_ADMIN_USERS')) { define('_ADMIN_USERS', 'Gebruikers');}
 if (!defined('_ADMIN_GROUPS')) { define('_ADMIN_GROUPS', 'Gebruikersgroepen');}
@@ -136,8 +132,6 @@ if (!defined('_REALLY_DELETE')) { define('_REALLY_DELETE', 'Wilt u echt verwijde
 if (!defined('_REALLY_CONTINUE')) { define('_REALLY_CONTINUE', 'Wilt u echt verdergaan');}
 if (!defined('_DEFINITIVE_ACTION')) { define('_DEFINITIVE_ACTION', 'Deze actie is definitief');}
 if (!defined('_AND')) { define('_AND', 'en');}
-if (!defined('_PLEASE_CHECK_LISTDIFF')) { define('_PLEASE_CHECK_LISTDIFF', 'De gebruiker is aanwezig als bestemmeling van één of meer model(len) van de verdelingslijst: vervang hem door een andere gebruiker.');}
-if (!defined('_THE_USER_JS')) { define('_THE_USER_JS', 'G\ebruiker');}
 if (!defined('_YES')) { define('_YES', 'Ja');}
 if (!defined('_NO')) { define('_NO', 'Nee');}
 if (!defined('_UNKNOWN')) { define('_UNKNOWN', 'Onbekend');}
@@ -446,14 +440,6 @@ if (!defined('_DIFF_LIST_VISA_HISTORY')) { define('_DIFF_LIST_VISA_HISTORY', 'Ge
 if (!defined('_DIFF_LIST_AVIS_HISTORY')) { define('_DIFF_LIST_AVIS_HISTORY', 'Geschiedenis van het berichtencircuit');}
 if (!defined('_MODIFY_BY')) { define('_MODIFY_BY', 'Gewijzigd door');}
 if (!defined('_DIFFLIST_NEVER_MODIFIED')) { define('_DIFFLIST_NEVER_MODIFIED', 'De verdelingslijst werd nooit gewijzigd');}
-if (!defined('_BITMASK_VALUE_ALREADY_EXIST')) { define('_BITMASK_VALUE_ALREADY_EXIST', 'Bitmask reeds gebruikt in een ander type');}
-if (!defined('_ASSISTANT_MODE')) { define('_ASSISTANT_MODE', 'Assistentmodus');}
-if (!defined('_EDIT_WITH_ASSISTANT')) { define('_EDIT_WITH_ASSISTANT', 'Klik hier om de where clause met de assistentmodus te wijzigen');}
-if (!defined('_VALID_THE_WHERE_CLAUSE')) { define('_VALID_THE_WHERE_CLAUSE', 'Klik hier om de where clause te BEVESTIGEN');}
-if (!defined('_DELETE_SHORT')) { define('_DELETE_SHORT', 'Verwijderen');}
-if (!defined('_MUST_CHOOSE_COLLECTION_FIRST')) { define('_MUST_CHOOSE_COLLECTION_FIRST', 'U moet een verzameling kiezen');}
-if (!defined('_CANTCHANGECOLL')) { define('_CANTCHANGECOLL', 'U kunt de verzameling niet wijzigen');}
-if (!defined('_DOCUMENTS_EXISTS_FOR_COUPLE_FOLDER_TYPE_COLLECTION')) { define('_DOCUMENTS_EXISTS_FOR_COUPLE_FOLDER_TYPE_COLLECTION', 'brieven bestaan voor het koppel type map/verzameling');}
 if (!defined('_NO_RIGHT')) { define('_NO_RIGHT', 'Fout');}
 if (!defined('_NO_RIGHT_TXT')) { define('_NO_RIGHT_TXT', 'U probeerde toegang te verkrijgen tot een document waar u geen recht op heeft of het document bestaat niet...');}
 if (!defined('_NUM_GED')) { define('_NUM_GED', 'GED NR.');}
@@ -471,8 +457,6 @@ if (!defined('_ERROR_SCRIPT')) { define('_ERROR_SCRIPT', 'Resultaatpagina van de
 if (!defined('_SERVER_ERROR')) { define('_SERVER_ERROR', 'Serverfout');}
 if (!defined('_CHOOSE_ONE_DOC')) { define('_CHOOSE_ONE_DOC', 'Kies minstens een document');}
 if (!defined('_CHOOSE_ONE_OBJECT')) { define('_CHOOSE_ONE_OBJECT', 'Kies minstens een element');}
-if (!defined('_CLICK_LINE_TO_CHECK_INVOICE')) { define('_CLICK_LINE_TO_CHECK_INVOICE', 'Klik op een lijn om een factuur te controleren');}
-if (!defined('_FOUND_INVOICES')) { define('_FOUND_INVOICES', 'Factu(u)r(en) gevonden');}
 if (!defined('_SIMPLE_CONFIRM')) { define('_SIMPLE_CONFIRM', 'Eenvoudige bevestiging');}
 if (!defined('_SIMPLE_CONFIRM_DESC')) { define('_SIMPLE_CONFIRM_DESC', 'Opent eenvoudigweg een bevestigingsmodaliteit van de uit te voeren actie.');}
 if (!defined('_CHECK_INVOICE')) { define('_CHECK_INVOICE', 'Factuur controleren');}
@@ -483,11 +467,6 @@ if (!defined('_MAARCH_LICENCE')) { define('_MAARCH_LICENCE', 'Maarch Courrier wo
 if (!defined('_OFFICIAL_WEBSITE')) { define('_OFFICIAL_WEBSITE', 'Officiële site');}
 if (!defined('_COMMUNITY')) { define('_COMMUNITY', 'Gemeenschap');}
 if (!defined('_DOCUMENTATION')) { define('_DOCUMENTATION', 'Documentatie');}
-if (!defined('_THANKS_TO_EXT_DEV')) { define('_THANKS_TO_EXT_DEV', 'Maarch steunt op enkele externe onderdelen. Hartelijk dank aan de ontwikkelaars ervan!');}
-if (!defined('_EXTERNAL_COMPONENTS')) { define('_EXTERNAL_COMPONENTS', 'Externe onderdelen');}
-if (!defined('_THANKS_TO_COMMUNITY')) { define('_THANKS_TO_COMMUNITY', 'En de volledige Maarch-community!');}
-if (!defined('_PROCESSING_DATE')) { define('_PROCESSING_DATE', 'Verwerkingsdeadline');}
-if (!defined('_PROCESS_NUM')) { define('_PROCESS_NUM', 'Verwerking van brief nr.');}
 if (!defined('_PROCESS_LIMIT_DATE')) { define('_PROCESS_LIMIT_DATE', 'Verwerkingsdeadline');}
 if (!defined('_LATE_PROCESS')) { define('_LATE_PROCESS', 'Te laat');}
 if (!defined('_PROCESS_DELAY')) { define('_PROCESS_DELAY', 'Verwerkingstermijn (in dagen)');}
@@ -534,8 +513,6 @@ if (!defined('_GED_DOC')) { define('_GED_DOC', 'GED document');}
 if (!defined('_REG_DATE')) { define('_REG_DATE', 'Datum van bewaring');}
 if (!defined('_PROCESS_DATE')) { define('_PROCESS_DATE', 'Datum van verwerking');}
 if (!defined('_CHOOSE_STATUS')) { define('_CHOOSE_STATUS', 'Kies een status');}
-if (!defined('_PROCESS_RECEIPT')) { define('_PROCESS_RECEIPT', 'Bestemmeling(en) voor verwerking');}
-if (!defined('_CHOOSE_RECEIPT')) { define('_CHOOSE_RECEIPT', 'Kies een bestemmeling');}
 if (!defined('_TO_CC')) { define('_TO_CC', 'In kopie');}
 if (!defined('_ADD_CC')) { define('_ADD_CC', 'In kopie');}
 if (!defined('_ADD_COPIES')) { define('_ADD_COPIES', 'Personen in kopie toevoegen');}
@@ -567,7 +544,6 @@ if (!defined('_MAIL_OBJECT_HELP')) { define('_MAIL_OBJECT_HELP', 'Voer een woord
 if (!defined('_N_GED_HELP')) { define('_N_GED_HELP', '');}
 if (!defined('_CHOOSE_RECIPIENT_SEARCH_TITLE')) { define('_CHOOSE_RECIPIENT_SEARCH_TITLE', 'Voeg de gewenste ontvanger(s) toe om de opzoeking in te perken');}
 if (!defined('_MULTI_FIELD')) { define('_MULTI_FIELD', 'Multivelden');}
-if (!defined('_MULTI_FIELD_HELP')) { define('_MULTI_FIELD_HELP', 'Onderwerp beschrijving titel Num GED Num chrono verwerkingsnotities...');}
 if (!defined('_SAVE_QUERY')) { define('_SAVE_QUERY', 'Mijn opzoeking bewaren');}
 if (!defined('_SAVE_QUERY_TITLE')) { define('_SAVE_QUERY_TITLE', 'Opzoeking bewaard');}
 if (!defined('_QUERY_NAME')) { define('_QUERY_NAME', 'Naam van mijn opzoeking');}
@@ -596,10 +572,6 @@ if (!defined('_ON_DOC_NUM')) { define('_ON_DOC_NUM', 'voor document nr.');}
 if (!defined('_PRIORITY')) { define('_PRIORITY', 'Prioriteit');}
 if (!defined('_MAIL_DATE')) { define('_MAIL_DATE', 'Datum van de brief');}
 if (!defined('_DOC_HISTORY')) { define('_DOC_HISTORY', 'Geschiedenis');}
-if (!defined('_DONE_ANSWERS')) { define('_DONE_ANSWERS', 'Uitgevoerde antwoorden');}
-if (!defined('_MUST_DEFINE_ANSWER_TYPE')) { define('_MUST_DEFINE_ANSWER_TYPE', 'U moet het type antwoord preciseren');}
-if (!defined('_MUST_CHECK_ONE_BOX')) { define('_MUST_CHECK_ONE_BOX', 'U moet minstens één vakje aanvinken');}
-if (!defined('_ANSWER_TYPE')) { define('_ANSWER_TYPE', 'Antwoordtype(s)');}
 if (!defined('_CHOOSE_FILE')) { define('_CHOOSE_FILE', 'Kies het bestand');}
 if (!defined('_CHOOSE_TYPE')) { define('_CHOOSE_TYPE', 'Kies een type');}
 if (!defined('_FILE_LOADED_BUT_NOT_VISIBLE')) { define('_FILE_LOADED_BUT_NOT_VISIBLE', 'Het bestand is geladen en is klaar om bewaard te worden op de server.<br/>');}
@@ -612,7 +584,6 @@ if (!defined('_LETTERBOX')) { define('_LETTERBOX', 'Verzameling van de brieven')
 if (!defined('_ATTACHMENTS_COLL')) { define('_ATTACHMENTS_COLL', 'Verzameling van de bijlagen');}
 if (!defined('_ATTACHMENTS_VERS_COLL')) { define('_ATTACHMENTS_VERS_COLL', 'Verzameling van de bijlageversies');}
 if (!defined('_APA_COLL')) { define('_APA_COLL', 'Verzameling van de fysieke archivering');}
-if (!defined('_REDIRECT_TO_ACTION')) { define('_REDIRECT_TO_ACTION', 'Doorsturen naar een andere actie');}
 if (!defined('_DOCUMENTS_LIST')) { define('_DOCUMENTS_LIST', 'Lijst');}
 if (!defined('_LOGS_LIST')) { define('_LOGS_LIST', 'Logslijst');}
 if (!defined('_ADMIN_CONTACTS')) { define('_ADMIN_CONTACTS', 'Contacten');}
@@ -827,7 +798,6 @@ if (!defined('_MAILDATE')) { define('_MAILDATE', 'Datum van de brief');}
 if (!defined('_MD5')) { define('_MD5', 'Digitale afdruk');}
 if (!defined('_WORK_BATCH')) { define('_WORK_BATCH', 'Ladingset');}
 if (!defined('_DONE')) { define('_DONE', 'Uitgevoerde acties');}
-if (!defined('_ANSWER_TYPES_DONE')) { define('_ANSWER_TYPES_DONE', 'Uitgevoerde antwoordtype(s) ');}
 if (!defined('_CLOSING_DATE')) { define('_CLOSING_DATE', 'Afsluitingsdatum');}
 if (!defined('_FULLTEXT')) { define('_FULLTEXT', 'Volle tekst');}
 if (!defined('_FULLTEXT_HELP')) { define('_FULLTEXT_HELP', 'Zoeken in de inhoud van de brieven');}
@@ -885,9 +855,6 @@ if (!defined('_N_DAYS')) { define('_N_DAYS', 'AANT DAGEN');}
 if (!defined('_INCLUDE_SUB_ENTITIES')) { define('_INCLUDE_SUB_ENTITIES', 'De subeenheden insluiten');}
 if (!defined('_PROJECT')) { define('_PROJECT', 'Map');}
 if (!defined('_MARKET')) { define('_MARKET', 'Submap');}
-if (!defined('_SEARCH_CUSTOMER')) { define('_SEARCH_CUSTOMER', 'Raadpleging Mappen, Submappen');}
-if (!defined('_SEARCH_CUSTOMER_TITLE')) { define('_SEARCH_CUSTOMER_TITLE', 'Zoeken Mappen, Submappen');}
-if (!defined('_TO_SEARCH_DEFINE_A_SEARCH_ADV')) { define('_TO_SEARCH_DEFINE_A_SEARCH_ADV', 'Om een opzoeking te starten moet u een mapnummer of een map- of submapnaam ingeven');}
 if (!defined('_DAYS')) { define('_DAYS', 'dagen');}
 if (!defined('_LAST_DAY')) { define('_LAST_DAY', 'Laatste dag');}
 if (!defined('_CONTACT_NAME')) { define('_CONTACT_NAME', 'Contact factuur');}
@@ -1447,7 +1414,7 @@ if (!defined('_DEPARTMENT_EXP')) { define('_DEPARTMENT_EXP', 'Opstellende eenhei
 if (!defined('_PROCESS_NOTES')) { define('_PROCESS_NOTES', 'Verwerkingsopmerkingen');}
 if (!defined('_CHOOSE_ENTITES_SEARCH_TITLE')) { define('_CHOOSE_ENTITES_SEARCH_TITLE', 'Voeg de gewenste eenheid (eenheden) toe om de opzoeking in te perken');}
 if (!defined('_DESTINATION_SEARCH')) { define('_DESTINATION_SEARCH', 'Getroffen eenheid (eenheden)');}
-if (!defined('_MULTI_FIELD_HELP')) { define('_MULTI_FIELD_HELP', 'Onderwerp beschrijving titel Num GED, Num chrono verwerkingsopmerkingen...');}
+if (!defined('_MULTI_FIELD_HELP')) { define('_MULTI_FIELD_HELP', 'Onderwerp, Num GED, Num chrono, verwerkingsopmerkingen');}
 if (!defined('_CONTACT_ID')) { define('_CONTACT_ID', 'Contact ID');}
 if (!defined('_UPDATE_CONTACTS')) { define('_UPDATE_CONTACTS', 'Contacten bijwerken');}
 if (!defined('_VIEW_CONTACTS_GROUPS_DESC')) { define('_VIEW_CONTACTS_GROUPS_DESC', 'Contactgroeperingen gebruikt voor de indexering van een brief');}
diff --git a/apps/maarch_entreprise/load_toolbar_links.php b/apps/maarch_entreprise/load_toolbar_links.php
deleted file mode 100755
index 87daec30133db4a993b31f75ddb92e621d88f603..0000000000000000000000000000000000000000
--- a/apps/maarch_entreprise/load_toolbar_links.php
+++ /dev/null
@@ -1,50 +0,0 @@
-<?php
-$targetTab = $_REQUEST['targetTab'];
-$res_id = $_REQUEST['resId'];
-$coll_id = $_REQUEST['collId'];
-
-require_once('core/class/LinkController.php');
-
-$Class_LinkController = new LinkController();
-$nbLink = $Class_LinkController->nbDirectLink($res_id, $coll_id, 'all');
-
-if ($nbLink == 0){
-    $class = 'nbResZero';
-    $style2 = 'display:none;';
-    $style = '0.5';
-    $styleDetail = '#9AA7AB';
-}
-else{
-    $class = 'nbRes';
-    $style = '';
-    $style2 = 'display:inherit;';
-    $styleDetail = '#666';
-}
-
-if($_SESSION['req'] == 'details'){
-
-    if($nbLink == 0 && strpos($_SERVER['HTTP_USER_AGENT'], 'Chrome')){
-            $nav = 'links_tab';
-            $style2 = 'visibility:hidden;';
-
-        }
-        
-    if($_REQUEST['origin'] == 'parent'){
-        $js .= 'parent.$(\''.$targetTab.'\').style.color=\''.$styleDetail.'\';parent.$(\''.$targetTab.'_badge\').innerHTML = \'<span id="nb_'.$targetTab.'" style="'.$style2.'font-size: 10px;" class="'.$class.'">'.$nbLink.'</span>\'';
-
-    }else {
-       $js .= '$(\''.$targetTab.'\').style.color=\''.$styleDetail.'\';$(\''.$targetTab.'_badge\').innerHTML = \'<span id="nb_'.$targetTab.'" style="'.$style2.'font-size: 10px;" class="'.$class.'">'.$nbLink.'</span>\'';
-
-    }
-}else{
-    if($_REQUEST['origin'] == 'parent'){
-        $js .= 'parent.$(\''.$targetTab.'_img\').style.opacity=\''.$style.'\';parent.$(\''.$targetTab.'_badge\').innerHTML = \'&nbsp;<sup><span id="nb_'.$targetTab.'" style="'.$style2.'" class="'.$class.'">'.$nbLink.'</span></sup>\'';
-
-    }else {
-       $js .= '$(\''.$targetTab.'_img\').style.opacity=\''.$style.'\';$(\''.$targetTab.'_badge\').innerHTML = \'&nbsp;<sup><span id="nb_'.$targetTab.'" style="'.$style2.'" class="'.$class.'">'.$nbLink.'</span></sup>\'';
-
-    }
-}
-      
-echo "{status : 0, nav : '".$nav."',content : '', error : '', exec_js : '".addslashes($js)."'}";
-exit ();
\ No newline at end of file
diff --git a/apps/maarch_entreprise/redirect_to_action.php b/apps/maarch_entreprise/redirect_to_action.php
deleted file mode 100755
index 89dd3a4d6250cd7492f6c3e7a82283ccc02e8c3b..0000000000000000000000000000000000000000
--- a/apps/maarch_entreprise/redirect_to_action.php
+++ /dev/null
@@ -1,43 +0,0 @@
-<?php
-
-require_once("core".DIRECTORY_SEPARATOR."class".DIRECTORY_SEPARATOR."class_security.php");
-$security = new security();
-$core_tools = new core_tools();
-$core_tools->load_lang();
-$core_tools->load_html();
-$core_tools->load_header('', false, false);
-require_once("modules".DIRECTORY_SEPARATOR."basket".DIRECTORY_SEPARATOR."class".DIRECTORY_SEPARATOR."class_modules_tools.php");
-
-$bask = new basket();
-if(!empty($_REQUEST['id']))
-{
-	$bask->load_current_basket(trim($_REQUEST['id']), 'frame');
-}
-$actions_json = $bask->translates_actions_to_json($_SESSION['current_basket']['actions']);
-?>
-<body>
-<script type="text/javascript">
-
-	var arr_actions = <?php echo $actions_json;?>;
-	//alert(arr_actions);
-	var arr_msg_error = {'confirm_title' : '<?php echo addslashes(_ACTION_CONFIRM);?>',
-							'validate' : '<?php echo addslashes(_VALIDATE);?>',
-							'cancel' : '<?php echo addslashes(_CANCEL);?>',
-							'choose_action' : '<?php echo addslashes(_CHOOSE_ACTION);?>',
-							'choose_one_doc' : '<?php echo addslashes(_CHOOSE_ONE_DOC);?>'
-						};
-
-	var val = 'none';
-	var action_id = '<?php functions::xecho($_SESSION['current_basket']['default_action']);?>';
-	var table = '<?php functions::xecho($_SESSION['current_basket']['table']);?>';
-	var coll_id = '<?php functions::xecho($_SESSION['current_basket']['coll_id']);?>';
-	var module = 'apps';
-	var mode = 'page';
-	var val_frm = {'values' : val,  'action_id' : action_id, 'table' : table, 'coll_id' : coll_id, 'module' : module}
-	//alert(val_frm);
-	action_send_first_request('<?php echo $_SESSION['config']['businessappurl'];?>index.php?display=true&page=manage_action&module=core', mode,  val_frm['action_id'], val_frm['values'], val_frm['table'], val_frm['module'], val_frm['coll_id']);
-//	alert('apres_action_send');
-
-</script>
-</body>
-</html>
diff --git a/apps/maarch_entreprise/show_history_tab.php b/apps/maarch_entreprise/show_history_tab.php
deleted file mode 100755
index 149df24227ff1b422e6827e1014a6844a5d5a38e..0000000000000000000000000000000000000000
--- a/apps/maarch_entreprise/show_history_tab.php
+++ /dev/null
@@ -1,53 +0,0 @@
-<?php
-
-require_once 'core'.DIRECTORY_SEPARATOR.'class'.DIRECTORY_SEPARATOR.'class_request.php';
-require_once 'core'.DIRECTORY_SEPARATOR.'class'.DIRECTORY_SEPARATOR.'class_security.php';
-
-$res_id = $_REQUEST['resId'];
-$coll_id = $_REQUEST['collId'];
-
-$security = new security();
-$right = $security->test_right_doc($coll_id, $res_id);
-
-if (!$right) {
-    exit(_NO_RIGHT_TXT);
-}
-
-$core_tools = new core_tools();
-$core_tools->load_lang();
-$core_tools->load_html();
-$core_tools->load_header('', true, false);
-$core_tools->load_js();
-
-if ($core->test_service('view_doc_history', 'apps', false)) {
-    $frm_str .= '<iframe src="'
-            .$_SESSION['config']['businessappurl']
-            .'index.php?display=true&dir=indexing_searching&page=document_workflow_history&id='
-            .$res_id.'&coll_id='.$coll_id.'&load&size=medium" '
-            .'name="hist_wf_doc_process" id="hist_wf_doc_process" width="100%" height="500px" align="center" '
-            .'scrolling="auto" frameborder="0" style="height: 500px; max-height: 500px; overflow: scroll;"></iframe>';
-
-    $frm_str .= '<br/>';
-}
-if ($core->test_service('view_full_history', 'apps', false)) {
-    $frm_str .= '<span style="cursor: pointer;" onmouseover="this.style.cursor=\'pointer\';" onclick="new Effect.toggle(\'hist_doc_process\', \'blind\', {delay:0.2});whatIsTheDivStatus(\'hist_doc_process\', \'divStatus_all_history_div\');return false;">';
-    if ($core->test_service('view_doc_history', 'apps', false)) {
-        $frm_str .= '<span id="divStatus_all_history_div" style="color:#1C99C5;"><i class="fa fa-plus-square"></i></span>';
-    } else {
-        $frm_str .= '<span id="divStatus_all_history_div" style="color:#1C99C5;"><i class="fa fa-minus-square"></i></span>';
-    }
-    $frm_str .= '<b>&nbsp;'._ALL_HISTORY.'</b>'.'</span>';
-    $frm_str .= '<iframe src="'
-            .$_SESSION['config']['businessappurl']
-            .'index.php?display=true&dir=indexing_searching&page=document_history&id='
-            .$res_id.'&coll_id='.$coll_id.'&load&size=medium" '
-            .'name="hist_doc_process" id="hist_doc_process" width="100%" height="650px" align="center" '
-            .'scrolling="auto" frameborder="0" style="height: 650px; max-height: 650px; overflow: scroll;';
-    if ($core->test_service('view_doc_history', 'apps', false)) {
-        $frm_str .= 'display: none" ></iframe>';
-    } else {
-        $frm_str .= '" ></iframe>';
-    }
-}
-
-echo $frm_str;
diff --git a/apps/maarch_entreprise/show_technicalInfo_tab.php b/apps/maarch_entreprise/show_technicalInfo_tab.php
deleted file mode 100755
index 59ec30a154584a65dc197c92fbad7cb8328625ca..0000000000000000000000000000000000000000
--- a/apps/maarch_entreprise/show_technicalInfo_tab.php
+++ /dev/null
@@ -1,167 +0,0 @@
-<?php
-
-/*
-*   Copyright 2008-2011 Maarch
-*
-*   This file is part of Maarch Framework.
-*
-*   Maarch Framework is free software: you can redistribute it and/or modify
-*   it under the terms of the GNU General Public License as published by
-*   the Free Software Foundation, either version 3 of the License, or
-*   (at your option) any later version.
-*
-*   Maarch Framework is distributed in the hope that it will be useful,
-*   but WITHOUT ANY WARRANTY; without even the implied warranty of
-*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-*   GNU General Public License for more details.
-*
-*   You should have received a copy of the GNU General Public License
-*   along with Maarch Framework.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-/*
-* @brief view technical informations
-*
-* @file
-* @author Laurent Giovannoni <dev@maarch.org>
-* @date $date$
-* @version $Revision$
-* @ingroup apps
-*/
-
-require_once 'core'.DIRECTORY_SEPARATOR.'class'.DIRECTORY_SEPARATOR
-    .'class_request.php';
-require_once 'core'.DIRECTORY_SEPARATOR.'class'.DIRECTORY_SEPARATOR
-    .'class_functions.php';
-require_once 'core'.DIRECTORY_SEPARATOR.'class'.DIRECTORY_SEPARATOR
-    .'class_security.php';
-require_once 'core'.DIRECTORY_SEPARATOR.'class'.DIRECTORY_SEPARATOR
-    .'class_resource.php';
-require_once 'core'.DIRECTORY_SEPARATOR.'class'.DIRECTORY_SEPARATOR
-    .'docservers_controler.php';
-
-$security = new security();
-$right = $security->test_right_doc($_SESSION['collection_id_choice'], $_SESSION['doc_id']);
-
-if (!$right) {
-    exit(_NO_RIGHT_TXT);
-}
-
-$func = new functions();
-$coreTools = new core_tools();
-$coreTools->test_user();
-$coreTools->load_lang();
-$coreTools->load_html();
-$coreTools->load_header('', true, false);
-$coreTools->load_js();
-$db = new Database();
-
-    $collId = $_SESSION['collection_id_choice'];
-    $table = $security->retrieve_view_from_coll_id($collId);
-    $isView = true;
-    if (empty($table)) {
-        $table = $security->retrieve_table_from_coll($collId);
-        $isView = false;
-    }
-    for ($cptColl = 0; $cptColl < count($_SESSION['collections']); ++$cptColl) {
-        if ($table == $_SESSION['collections'][$cptColl]['table']
-            || $table == $_SESSION['collections'][$cptColl]['view']
-        ) {
-            $adrTable = $_SESSION['collections'][$cptColl]['adr'];
-        }
-    }
-    $selectRes = 'SELECT * FROM '.$table.' WHERE res_id = ?';
-    $stmt = $db->query($selectRes, array($_SESSION['doc_id']));
-    $res = $stmt->fetchObject();
-    $typist = $res->typist;
-    $format = $res->format;
-    $filesize = $res->filesize;
-    $docserverId = $res->docserver_id;
-    $path = $res->path;
-    $fileName = $res->filename;
-    $creationDate = functions::format_date_db($res->creation_date, false);
-    $fingerprint = $res->fingerprint;
-    $workBatch = $res->work_batch;
-    ?>
-        <h2>
-            <span class="date">
-                <b><?php echo _SOURCE_FILE_PROPERTIES; ?></b>
-            </span>
-        </h2>
-        <br/>
-        <table cellpadding="2" cellspacing="2" border="0" class="block forms details" width="100%">
-            <tr>
-                <th align="left" class="picto">
-                    <i class="fa fa-user fa-2x" title="<?php echo _TYPIST; ?>"></i>
-                </th>
-                <td align="left" width="200px"><?php echo _TYPIST; ?> :</td>
-                <td>
-                    <input type="text" class="readonly" readonly="readonly" value="<?php functions::xecho($typist); ?>"  />
-                </td>
-                <th align="left" class="picto">
-                    <i class="fa fa-square fa-2x" title="<?php echo _SIZE; ?>"></i>
-                </th>
-                <td align="left" width="200px"><?php echo _SIZE; ?> :</td>
-                <?php
-                $txtByte = '';
-                if (isset($_SESSION['lang'])) {
-                    $txtByte = $_SESSION['lang']['txt_byte'];
-                }
-                ?>
-                <td><input type="text" class="readonly" readonly="readonly" value="<?php functions::xecho($filesize.' '.$txtByte.' ( '.round($filesize / 1024, 2).'K )'); ?>" /></td>
-            </tr>
-            <tr class="col">
-                <th align="left" class="picto">
-                    <i class="fa fa-file-image fa-2x" title="<?php echo _FORMAT; ?>"></i>
-                </th>
-                <td align="left"><?php echo _FORMAT; ?> :</td>
-                <td><input type="text" class="readonly" readonly="readonly" value="<?php functions::xecho($format); ?>" size="40"  /></td>
-                <th align="left" class="picto">
-                    <i class="fa fa-calendar-alt fa-2x" title="<?php echo _CREATION_DATE; ?>"></i>
-                </th>
-                <td align="left"><?php echo _CREATION_DATE; ?> :</td>
-                <td><input type="text" class="readonly" readonly="readonly" value="<?php functions::xecho($func->format_date_db($creationDate, false)); ?>"/></td>
-            </tr>
-            <tr>
-                <th align="left" class="picto">
-                    <i class="fa fa-lock fa-2x" title="<?php echo _FINGERPRINT; ?>"></i>
-                </th>
-                <td align="left"><?php echo _FINGERPRINT; ?> :</td>
-                <td><input type="text" class="readonly" readonly="readonly" value="<?php functions::xecho($fingerprint); ?>"  title="<?php functions::xecho($fingerprint); ?>" alt="<?php functions::xecho($fingerprint); ?>" /></td>
-
-                <th align="left" class="picto">
-                    <i class="fa fa-cogs fa-2x" title="<?php echo _WORK_BATCH; ?>"></i>
-                </th>
-                <td align="left"><?php echo _WORK_BATCH; ?> :</td>
-                <td><input type="text" class="readonly" readonly="readonly" value="<?php functions::xecho($workBatch); ?>" title="<?php functions::xecho($workBatch); ?>" alt="<?php functions::xecho($workBatch); ?>" /></td>
-            </tr>
-        </table>
-        <br>
-        <h2>
-        <span class="date">
-            <b><?php echo _DOCSERVERS; ?></b>
-        </span>
-        </h2>
-        <br/>
-        <?php
-        $docserversControler = new docservers_controler();
-            $docserver = $docserversControler->get($docserverId);
-            echo '<h4>'.functions::xssafe($docserverId)
-                    .' ('.functions::xssafe($docserver->device_label).')</h4>'; ?>
-            <table cellpadding="2" cellspacing="2" border="0" class="block forms details" width="100%">
-                <tr>
-                    <th align="left" class="picto">
-                        &nbsp;
-                    </th>
-                    <td align="left" width="200px"><?php echo _PATH_TEMPLATE; ?> :</td>
-                    <td><input type="text" class="readonly" readonly="readonly" value="<?php echo functions::xssafe(str_replace('#', '/', $path)); ?>"/></td>
-                    <th align="left" class="picto">
-                        &nbsp;
-                    </th>
-                    <td align="left" width="200px"><?php echo _FILE; ?> :</td>
-                    <td><input type="text" class="readonly" readonly="readonly" value="<?php functions::xecho($fileName); ?>" /></td>
-                </tr>
-            </table>
-            <?php
-        ?>
-        <br>
diff --git a/apps/maarch_entreprise/show_versions_tab.php b/apps/maarch_entreprise/show_versions_tab.php
deleted file mode 100755
index 920b675618ec5d9070dc0e5db9cba729705ae22c..0000000000000000000000000000000000000000
--- a/apps/maarch_entreprise/show_versions_tab.php
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-require_once 'core'.DIRECTORY_SEPARATOR.'class'.DIRECTORY_SEPARATOR.'class_request.php';
-require_once 'core' . DIRECTORY_SEPARATOR . 'class' . DIRECTORY_SEPARATOR . 'class_security.php';
-
-$res_id = $_REQUEST["resId"];
-$coll_id = $_REQUEST["collId"];
-$objectTable = $_REQUEST["objectTable"];
-
-$security = new security();
-$right = $security->test_right_doc($coll_id, $res_id);
-
-if(!$right){
-    exit(_NO_RIGHT_TXT);
-}
-
-$core_tools = new core_tools();
-$core_tools->load_lang();
-$core_tools->load_html();
-$core_tools->load_header('', true, false);
-$core_tools->load_js();
-
-//test service add new version
-$addNewVersion = false;
-if ($core_tools->test_service('add_new_version', 'apps', false)) {
-    $addNewVersion = true;
-}
-$viewVersions = false;
-if ($core_tools->test_service('add_new_version', 'apps', false)) {
-    $viewVersions = true;
-}
- 
-$frm_str .= '<div class="error" id="divError" name="divError"></div>';
-$frm_str .= '<div style="text-align:center;">';
-$frm_str .= '<a href="';
-$frm_str .= $_SESSION['config']['businessappurl'];
-$frm_str .= 'index.php?display=true&dir=indexing_searching&page=view_resource_controler&original&id=';
-$frm_str .= $res_id;
-$frm_str .= '" target="_blank">';
-$frm_str .= '<i class="fa fa-download fa-2x" title="' . _VIEW_ORIGINAL . '"></i>&nbsp;';
-$frm_str .= _VIEW_ORIGINAL . ' | ';
-$frm_str .= '</a>';
-if ($addNewVersion) {
-    $_SESSION['cm']['objectTable'] = $objectTable;
-    $frm_str .= '<div id="createVersion" style="display: inline;"></div>';
-}
-$frm_str .= '<div id="loadVersions"></div>';
-$frm_str .= '<script language="javascript">';
-$frm_str .= 'showDiv("loadVersions", "nbVersions", "createVersion", "';
-$frm_str .= $_SESSION['config']['businessappurl'];
-$frm_str .= 'index.php?display=false&module=content_management&page=list_versions")';
-$frm_str .= '</script>';
-$frm_str .= '</div><br>';
-
-echo $frm_str;
\ No newline at end of file
diff --git a/apps/maarch_entreprise/tools/tafelTree/.cvsignore b/apps/maarch_entreprise/tools/tafelTree/.cvsignore
deleted file mode 100755
index dbdc74905c3b3f618416d1eb6f4b4f9649a3aa7c..0000000000000000000000000000000000000000
--- a/apps/maarch_entreprise/tools/tafelTree/.cvsignore
+++ /dev/null
@@ -1,3 +0,0 @@
-_notes
-test2.html
-Tree2.js
\ No newline at end of file
diff --git a/apps/maarch_entreprise/tools/tafelTree/CHANGELOG.txt b/apps/maarch_entreprise/tools/tafelTree/CHANGELOG.txt
deleted file mode 100755
index 34f9b494fedb2c913e19a3eb9e5ebfba52928eb1..0000000000000000000000000000000000000000
--- a/apps/maarch_entreprise/tools/tafelTree/CHANGELOG.txt
+++ /dev/null
@@ -1,102 +0,0 @@
-2007.07.23
-- added "select" : true/false for branch
-
-2007.01.15 :
-- branch function switchWith and replace
-- tree function switchWith and replace
-- disabling checkbox on certain branches
-- branch function insert (alias of insertIntoLast)
-- branch function moveAfter, moveIntoFirst and moveIntoLast
-- tree.getBranchById() optimized
-- changes on clone() function
-- debug setIconsSelected()
-
-2007.01.03 :
-- Changement d'icône à la sélection de la branche
-- Retour de la branche copiée après un drag&drop
-- Fonction enableCopyDrag()
-
-2006.12.04 :
-- Gestion de droite à gauche (RTL mode)
-- Ajout des images pour le RTL mode
-- Fonction disableDropALT()
-
-2006.11.13 :
-- Le nom des fonctions peuvent être entre guillemets
-- Gestion coté serveur PHP4
-- Gestion coté serveur PHP5
-
-2006.11.03 :
-- Correction bug ScriptFragment pour les UL/LI
-- Amélioration du F2
-- TafelTreeManager : keyboardStructuralEvents
-- Ajout effectif de la touche POMME pour les couper-copier-coller
-
-2006.10.21 :
-- Touches Home et End
-- Correction bugs
-- getNext(Previous)Branch
-- correction unselect sous IE
-
-2006.10.08 :
-- Tous les événements et fonctions sur les roots (sauf drag)
-- Création du TafelTreeManager
-- Optimisation de la gestion clavier
-- Ajout de onErrorAjax()
-- Changement de comportement du ondrop
-- Optimisation du code
-
-2006.10.02 :
-- Correction du removeDragDrop (plantage IE)
-- Typeof dans setOptions()
-
-2006.09.19
-- gestion des images par défaut
-- Fonctionnalité : drag&drop "as sibling"
-- Fonctionnalité : moveBefore
-- paramètre "options" dans le constructeur
-- lors d'un drop sur une branche onopenpopulate, la population se fait, puis le drop ensuite
-
-2006.09.10
-- la sérialisation retourne les parametres persos
-- le toString retourne les paramètres persos
-
-2006.09.08
-- Fonctionnalité : changeId
-- gestion de la multisélection
-- attention : getSelectedBranches remplace getSelectedBranch
-
-2006.09.07
-- Fonctionnalité : getLevel
-- Fonctionnalité : removeChildren
-
-2006.09.06
-- les multilines sont gérées par javascript
-- correction de bug oneditajax
-
-2006.09.04
-- Evénement : oneditajax
-- Fonctionnalité : title
-- correction de bug cookies
-- ouverture des branches qui proviennent du serveur
-
-2006.09.01
-- Fonctionnalité : tooltip
-- Fonctionnalité : getters et setters pour les branches
-- correction bug root
-
-2006.08.31
-- Fonctionnalité : serialize
-
-2006.08.29
-- Fonctionnalité : canhavechildren
-- Evénement : setOnOpenPopulate
-- Evénement : onopenpopulate
-
-2006.08.26
-- Fonctionnalité : last
-- Toncheck et Tonbeforecheck disponibles pour les <ul><li>
-
-2006.08.19
-- version Beta
-- Mise en service
diff --git a/apps/maarch_entreprise/tools/tafelTree/Tree-optimized.js b/apps/maarch_entreprise/tools/tafelTree/Tree-optimized.js
deleted file mode 100755
index 9878a1acaaeba01f3c6eb3d2c6e2e893b1822e9c..0000000000000000000000000000000000000000
--- a/apps/maarch_entreprise/tools/tafelTree/Tree-optimized.js
+++ /dev/null
@@ -1,3641 +0,0 @@
-
-var TAFELTREE_WRONG_BRANCH_STRUCTURE="La structure de la branche n'est pas correcte. Il faut au moins un id et un texte";
-var TAFELTREE_NO_BODY_TAG="Il n'y a pas de balise BODY!";
-var TAFELTREE_DEBUG=false;
-var TafelTree=Class.create();
-TafelTree.version='1.9.1';
-TafelTree.lastUpdate='2007-07-21';
-TafelTree.scriptFragment=/[\s]*<[/]?[ul|li].*>.*/ig;
-TafelTree.debugReturn='<br />';
-TafelTree.debugTab='&nbsp;&nbsp;&nbsp;&nbsp;';
-TafelTree.prefixAttribute='T';
-TafelTree.textAttributes=[
-TafelTree.prefixAttribute+'img',
-TafelTree.prefixAttribute+'imgopen',
-TafelTree.prefixAttribute+'imgclose',
-TafelTree.prefixAttribute+'imgselect',
-TafelTree.prefixAttribute+'imgselectopen',
-TafelTree.prefixAttribute+'imgselectclose',
-TafelTree.prefixAttribute+'style',
-TafelTree.prefixAttribute+'droplink',
-TafelTree.prefixAttribute+'openlink',
-TafelTree.prefixAttribute+'editlink',
-TafelTree.prefixAttribute+'tooltip',
-TafelTree.prefixAttribute+'title'
-];
-TafelTree.numericAttributes=[
-TafelTree.prefixAttribute+'canhavechildren',
-TafelTree.prefixAttribute+'acceptdrop',
-TafelTree.prefixAttribute+'draggable',
-TafelTree.prefixAttribute+'editable',
-TafelTree.prefixAttribute+'open',
-TafelTree.prefixAttribute+'check',
-TafelTree.prefixAttribute+'checkbox',
-TafelTree.prefixAttribute+'select',
-TafelTree.prefixAttribute+'last'
-];
-TafelTree.functionAttributes=[
-TafelTree.prefixAttribute+'onbeforecheck',
-TafelTree.prefixAttribute+'oncheck',
-TafelTree.prefixAttribute+'onclick',
-TafelTree.prefixAttribute+'ondblclick',
-TafelTree.prefixAttribute+'onbeforeopen',
-TafelTree.prefixAttribute+'onopen',
-TafelTree.prefixAttribute+'onedit',
-TafelTree.prefixAttribute+'oneditajax',
-TafelTree.prefixAttribute+'onmouseover',
-TafelTree.prefixAttribute+'onmouseout',
-TafelTree.prefixAttribute+'onmousedown',
-TafelTree.prefixAttribute+'onmouseup',
-TafelTree.prefixAttribute+'ondrop',
-TafelTree.prefixAttribute+'ondragstarteffect',
-TafelTree.prefixAttribute+'ondragendeffect',
-TafelTree.prefixAttribute+'onerrorajax',
-TafelTree.prefixAttribute+'ondropajax',
-TafelTree.prefixAttribute+'onopenpopulate'
-];
-TafelTree.loadFromUL=function(id,imgBase,width,height,options,debug){
-if(typeof(imgBase)== 'object'){
-options=imgBase;
-debug=width;
-imgBase =(options.imgBase)? options.imgBase:'imgs/';
-width =(options.width)? options.width:'100%';
-height =(options.height)? options.height:'auto';
-}
-var obj=$(id);
-var load=document.createElement('img');
-load.setAttribute('title','load');
-load.setAttribute('alt','load');
-load.src =((imgBase)? imgBase:'imgs/')+ 'load.gif';
-obj.parentNode.insertBefore(load,obj);
-Element.hide(obj);
-var tab='';
-var tabModel =(debug)? TafelTree.debugTab:'';
-var rt =(debug)? TafelTree.debugReturn:'';
-var virgule='';
-var str =(debug)? 'var struct=[':'([';
-for(var i=0;i<obj.childNodes.length;i++){
-if(obj.childNodes[i].nodeName.toLowerCase()== 'li'){
-str += this._loadFromUL(obj.childNodes[i],virgule,rt,tab,tabModel);
-virgule=',';
-}
-}
-str += rt +((debug)? '];':'])');
-var div=document.createElement('div');
-div.id=obj.id;
-obj.id += '____todelete';
-obj.parentNode.insertBefore(div,obj);
-if(!debug){
-var m=TafelTree.prefixAttribute;
-var struct=eval(str);
-var _tree=new TafelTree(id,struct,options);
-} else{
-div.innerHTML=str.replace(/</img,'&lt;');
-var _tree=str;
-}
-obj.parentNode.removeChild(load);
-obj.parentNode.removeChild(obj);
-return _tree;
-};
-TafelTree._loadFromUL=function(obj,virgule,rt,tab,tabModel){
-tab += tabModel;
-var contenu=TafelTree.trim(obj.innerHTML.replace(TafelTree.scriptFragment,''));
-var str=virgule+rt+tab+'{'+rt;
-str += tab+"'id':'"+obj.id+"'";
-if(contenu){
-str += ","+rt+tab+"'txt':'"+contenu+"'";
-}
-TafelTree.textAttributes.each(function(attr){
-if(obj.getAttribute(attr))str += ","+rt+tab+"'"+attr.replace(TafelTree.prefixAttribute,'')+ "':'"+obj.getAttribute(attr)+ "'";
-});
-TafelTree.numericAttributes.each(function(attr){
-if(obj.getAttribute(attr))str += ","+rt+tab+"'"+attr.replace(TafelTree.prefixAttribute,'')+ "':"+obj.getAttribute(attr);
-});
-TafelTree.functionAttributes.each(function(attr){
-if(obj.getAttribute(attr))str += ","+rt+tab+"'"+attr.replace(TafelTree.prefixAttribute,'')+ "':"+obj.getAttribute(attr);
-});
-for(var i=0;i<obj.childNodes.length;i++){
-if(obj.childNodes[i].nodeName.toLowerCase()== 'ul'){
-virgule='';
-str += ','+rt+tab+"'items':[";
-for(var j=0;j<obj.childNodes[i].childNodes.length;j++){
-if(obj.childNodes[i].childNodes[j].nodeName.toLowerCase()== 'li'){
-str += this._loadFromUL(obj.childNodes[i].childNodes[j],virgule,rt,tab,tabModel);
-virgule=',';
-}
-}
-str += rt+tab+']';
-}
-}
-str += rt+tab+'}';
-return str;
-};
-TafelTree.trim=function(string){
-return string.replace(/(^\s*)|(\s*$)|\n|\r|\t/g,'');
-};
-TafelTree.prototype ={
-initialize:function(id,struct,imgBase,width,height,options){
-if(typeof(imgBase)== 'object'){
-options=imgBase;
-imgBase =(options.imgBase)? options.imgBase:'imgs/';
-width =(options.width)? options.width:'100%';
-height =(options.height)? options.height:'auto';
-}
-this.imgBase =(imgBase)? imgBase:'imgs/';
-this.setLineStyle('line');
-this.options =(options)? options :{};
-this.copyName='(%n)';
-this.copyNameBreak='_';
-this.classTree='tafelTree';
-this.classTreeRoot=this.classTree+'_root';
-this.classTreeBranch=this.classTree+'_row';
-this.classCopy =(this.options.copyCSS)? this.options.copyCSS:null;
-this.classCut =(this.options.cutCSS)? this.options.cutCSS:null;
-this.classDrag='tafelTreedrag';
-this.classSelected='tafelTreeselected';
-this.classEditable='tafelTreeeditable';
-this.classContent='tafelTreecontent';
-this.classCanevas='tafelTreecanevas';
-this.classDragOver='tafelTreedragOver';
-this.classTooltip='tafelTreetooltip';
-this.classOpenable='tafelTreeopenable';
-this.defaultStruct=[];
-this.idTree=0;
-this.behaviourDrop=0;
-this.durationTooltipShow=1000;
-this.durationTooltipHide=100;
-this.baseStruct=struct;
-this.width =(width)? width:'100%';
-this.height =(height)? height:'auto';
-this.div=$(id);
-this.div.style.width=this.width;
-this.div.style.height=this.height;
-this.id=this.div.id;
-this.isTree=true;
-this.dropALT=true;
-this.openAll=false;
-this.rtlMode=false;
-this.dropCTRL=true;
-this.multiline=false;
-this.checkboxes=false;
-this.propagation=true;
-this.dragRevert=true;
-this.dragGhosting=true;
-this.bigTreeLoading=-1;
-this.dropAsSibling=true;
-this.onlyOneOpened=false;
-this.openedAfterAdd=true;
-this.editableBranches=true;
-this.reopenFromServer=true;
-this.selectedBranchShowed=true,
-this.checkboxesThreeState=false;
-this.roots=[];
-this.icons=[null,null,null];
-this.iconsSelected=[null,null,null];
-this.otherTrees=[];
-this.cuttedBranches=[];
-this.copiedBranches=[];
-this.checkedBranches=[];
-this.selectedBranches=[];
-this.idTreeBranch=this.classTree+'_'+this.id+'_id_';
-this.loaded=false;
-Element.addClassName(this.div,this.classTree);
-this.useCookie=true;
-this.cookieSeparator='|';
-this.cookieCheckSeparator='[check]';
-this.cookieOpened=null;
-this.cookieChecked=null;
-this.setOptions(this.options);
-var fromCookie=this.getCookie(this.classTree+this.id);
-if(fromCookie){
-var branches=fromCookie.split(this.cookieCheckSeparator);
-this.cookieOpened=[];
-this.cookieOpened=branches[0].split(this.cookieSeparator);
-this.cookieOpened.shift();
-this.cookieChecked=[];
-if(branches.length>1){
-this.cookieChecked=branches[1].split(this.cookieSeparator);
-}
-}
-this.debugObj=document.createElement('div');
-this.debugObj.setAttribute('id',this.classTree+'_debug');
-Element.hide(this.debugObj);
-this.div.appendChild(this.debugObj);
-this.ajaxObj=document.createElement('div');
-this.ajaxObj.setAttribute('id',this.classTree+'_ajax');
-Element.hide(this.ajaxObj);
-this.div.appendChild(this.ajaxObj);
-Event.observe(this.div,'mousedown',this.evt_setAsCurrent.bindAsEventListener(this),false);
-Event.observe(this.div,'focus',this.evt_setAsCurrent.bindAsEventListener(this),false);
-if(!this.serverCookie){
-if(this.options.generate){
-this.generate();
-}
-if(this.options.generateBigTree){
-this.generate(true);
-}
-}
-TafelTreeManager.add(this);
-},
-evt_setAsCurrent:function(ev){
-var obj=Event.element(ev);
-TafelTreeManager.setCurrentTree(this);
-},
-orderListBranches:function(list){
-var ordered=[];
-var level=[];
-var nivmin=100;
-var nivmax=0;
-var niv=0;
-for(var i=0;i<list.length;i++){
-niv=list[i].getLevel();
-if(typeof(level[niv])== 'undefined'){
-level[niv]=[];
-}
-level[niv].push(list[i]);
-if(niv>nivmax)nivmax=niv;
-if(niv<nivmin)nivmin=niv;
-}
-for(var i=nivmin;i<=nivmax;i++){
-if(level[i]){
-ordered.push(level[i]);
-}
-}
-return ordered;
-},
-getCopiedBranches:function(){
-var branches=this.copiedBranches;
-if(branches.length==0){
-for(var i=0;i<this.otherTrees.length;i++){
-branches=this.otherTrees[i].copiedBranches;
-if(branches.length>0)break;
-}
-}
-return branches;
-},
-getCuttedBranches:function(){
-var branches=this.cuttedBranches;
-if(branches.length==0){
-for(var i=0;i<this.otherTrees.length;i++){
-branches=this.otherTrees[i].cuttedBranches;
-if(branches.length>0)break;
-}
-}
-return branches;
-},
-cut:function(){
-this.unsetCut();
-this.unsetCopy();
-var level=this.orderListBranches(this.selectedBranches);
-var sel=null;
-for(var i=0;i<level.length;i++){
-for(var j=0;j<level[i].length;j++){
-sel=level[i][j];
-this._cut(sel);
-this.cuttedBranches.push(sel);
-}
-}
-return true;
-},
-copy:function(){
-this.unsetCut();
-this.unsetCopy();
-var level=this.orderListBranches(this.selectedBranches);
-var sel=null;
-for(var i=0;i<this.selectedBranches.length;i++){
-sel=this.selectedBranches[i];
-this._copy(sel);
-this.copiedBranches[i]=sel;
-}
-return true;
-},
-paste:function(){
-if(this.selectedBranches.length!=1)return false;
-var branch=this.selectedBranches[0];
-var copied=this.getCopiedBranches();
-var cutted=this.getCuttedBranches();
-var nbCopy=copied.length;
-var nbCut=cutted.length;
-if(nbCopy>0){
-var list=copied;
-var b=null;
-for(var i=0;i<list.length;i++){
-if(this._okForPaste(branch,list,i)){
-b=branch.insertIntoLast(list[i].clone());
-}
-}
-}
-if(nbCut>0){
-var list=cutted;
-for(var i=0;i<list.length;i++){
-if(this._okForPaste(branch,list,i)){
-list[i].move(branch);
-}
-}
-}
-this.unsetCut();
-return true;
-},
-_okForPaste:function(branch,list,i){
-var ok=true;
-if(!branch.isChild(list[i])){
-for(var j=0;j<i;j++){
-if(list[i].isChild(list[j])){
-ok=false;
-break;
-}
-}
-} else{
-ok=false;
-}
-return ok;
-},
-unsetCut:function(){
-var _tree=null;
-var branches=null;
-for(var i=0;i<this.otherTrees.length;i++){
-_tree=this.otherTrees[i];
-branches=_tree.cuttedBranches;
-for(var t=0;t<branches.length;t++){
-_tree._unsetCut(branches[t]);
-}
-_tree.cuttedBranches=[];
-}
-var cut=null;
-for(var i=0;i<this.cuttedBranches.length;i++){
-cut=this.cuttedBranches[i];
-this._unsetCut(cut);
-}
-this.cuttedBranches=[];
-},
-unsetCopy:function(){
-var _tree=null;
-var branches=null;
-for(var i=0;i<this.otherTrees.length;i++){
-_tree=this.otherTrees[i];
-branches=_tree.copiedBranches;
-for(var t=0;t<branches.length;t++){
-_tree._unsetCopy(branches[t]);
-}
-_tree.copiedBranches=[];
-}
-var copy=null;
-for(var i=0;i<this.copiedBranches.length;i++){
-copy=this.copiedBranches[i];
-this._unsetCopy(copy);
-}
-this.copiedBranches=[];
-},
-undo:function(){
-},
-_cut:function(branch){
-if(!this.classCut){
-new Effect.Opacity(branch.txt,{
-duration: 0.1,
-transition: Effect.Transitions.linear,
-from: 1.0,to: 0.4
-});
-new Effect.Opacity(branch.img,{
-duration: 0.1,
-transition: Effect.Transitions.linear,
-from: 1.0,to: 0.4
-});
-} else{
-Element.addClassName(branch.txt,this.classCut);
-Element.addClassName(branch.img,this.classCut);
-}
-if(branch.hasChildren()){
-for(var i=0;i<branch.children.length;i++){
-this._cut(branch.children[i]);
-}
-}
-},
-_unsetCut:function(branch){
-if(!this.classCut){
-new Effect.Opacity(branch.txt,{
-duration: 0.1,
-transition: Effect.Transitions.linear,
-from: 0.4,to: 1.0
-});
-new Effect.Opacity(branch.img,{
-duration: 0.1,
-transition: Effect.Transitions.linear,
-from: 0.4,to: 1.0
-});
-} else{
-Element.removeClassName(branch.txt,this.classCut);
-Element.removeClassName(branch.img,this.classCut);
-}
-if(branch.hasChildren()){
-for(var i=0;i<branch.children.length;i++){
-this._unsetCut(branch.children[i]);
-}
-}
-},
-_copy:function(branch){
-if(this.classCopy){
-Element.addClassName(branch.txt,this.classCopy);
-Element.addClassName(branch.img,this.classCopy);
-}
-if(branch.hasChildren()){
-for(var i=0;i<branch.children.length;i++){
-this._copy(branch.children[i]);
-}
-}
-},
-_unsetCopy:function(branch){
-if(this.classCopy){
-Element.removeClassName(branch.txt,this.classCopy);
-Element.removeClassName(branch.img,this.classCopy);
-}
-if(branch.hasChildren()){
-for(var i=0;i<branch.children.length;i++){
-this._unsetCopy(branch.children[i]);
-}
-}
-},
-enableMultiline:function(multiline){
-this.multiline =(multiline)? true:false;
-},
-enableRTL:function(rtl){
-this.rtlMode =(rtl)? true:false;
-if(this.rtlMode){
-this.div.style.textAlign='right';
-this.div.style.direction='rtl';
-} else{
-this.div.style.textAlign='left';
-this.div.style.direction='ltr';
-}
-this.setLineStyle(this.lineStyle);
-},
-isRTL:function(){
-return this.rtlMode;
-},
-disableDropALT:function(alt){
-this.dropALT =(alt)? true:false;
-},
-disableDropCTRL:function(copy){
-this.dropCTRL =(copy)? true:false;
-},
-enableCheckboxes:function(enable){
-this.checkboxes =(enable)? true:false;
-},
-enableCheckboxesThreeState:function(enable){
-this.enableCheckboxes(enable);
-this.checkboxesThreeState =(enable)? true:false;
-},
-enableCookies:function(enable,separator){
-this.useCookie =(enable)? true:false;
-if(typeof(separator)!= 'undefined'){
-this.cookieSeparator=separator;
-}
-},
-openOneAtOnce:function(yes){
-this.onlyOneOpened =(yes)? true:false;
-},
-openAfterAdd:function(yes){
-this.openedAfterAdd =(yes)? true:false;
-},
-reopenFromServerAfterLoad:function(yes){
-this.reopenFromServer =(yes)? true:false;
-},
-openAtLoad:function(open){
-this.openAll =(open)? true:false;
-},
-showSelectedBranch:function(show){
-this.selectedBranchShowed =(show)? true:false;
-},
-setBehaviourDrop:function(def){
-switch(def){
-case 'sibling':this.behaviourDrop=1;break;
-case 'childcopy':this.behaviourDrop=2;break;
-case 'siblingcopy':this.behaviourDrop=3;break;
-case 'child' :
-default :
-this.behaviourDrop=0;
-}
-},
-setIcons:function(img,imgopen,imgclose){
-this.icons[0]=img;
-this.icons[1] =(imgopen)? imgopen:img;
-this.icons[2] =(imgclose)? imgclose:img;
-},
-setIconsSelected:function(img,imgopen,imgclose){
-this.iconsSelected[0]=img;
-this.iconsSelected[1] =(imgopen)? imgopen:null;
-this.iconsSelected[2] =(imgclose)? imgclose:null;
-},
-setLineStyle:function(style){
-this.lineStyle=style;
-switch(style){
-case 'none' :
-this.imgLine0='empty.gif';this.imgLine1='empty.gif';this.imgLine2='empty.gif';
-this.imgLine3='empty.gif';this.imgLine4='empty.gif';this.imgLine5='empty.gif';
-this.imgWait='wait.gif';this.imgEmpty='empty.gif';
-this.imgMinus1='minus0.gif';this.imgMinus2='minus0.gif';this.imgMinus3='minus0.gif';
-this.imgMinus4='minus0.gif';this.imgMinus5='minus0.gif';
-this.imgPlus1='plus0.gif';this.imgPlus2='plus0.gif';this.imgPlus3='plus0.gif';
-this.imgPlus4='plus0.gif';this.imgPlus5='plus0.gif';
-this.imgCheck1='check1.gif';this.imgCheck2='check2.gif';this.imgCheck3='check3.gif';
-this.imgMulti1='empty.gif';this.imgMulti2='empty.gif';
-this.imgMulti3='';this.imgMulti4='';
-break;
-case 'full' :
-if(this.isRTL()){
-this.imgLine0='rtl_linefull0.gif';this.imgLine1='rtl_linefull1.gif';this.imgLine2='rtl_linefull2.gif';
-this.imgLine3='rtl_linefull3.gif';this.imgLine4='rtl_linefull4.gif';this.imgLine5='rtl_linefull5.gif';
-this.imgWait='wait.gif';this.imgEmpty='empty.gif';
-this.imgMinus1='rtl_minusfull1.gif';this.imgMinus2='rtl_minusfull2.gif';this.imgMinus3='rtl_minusfull3.gif';
-this.imgMinus4='rtl_minusfull4.gif';this.imgMinus5='rtl_minusfull5.gif';
-this.imgPlus1='rtl_plusfull1.gif';this.imgPlus2='rtl_plusfull2.gif';this.imgPlus3='rtl_plusfull3.gif';
-this.imgPlus4='rtl_plusfull4.gif';this.imgPlus5='rtl_plusfull5.gif';
-this.imgCheck1='check1.gif';this.imgCheck2='check2.gif';this.imgCheck3='check3.gif';
-this.imgMulti1='rtl_linebgfull.gif';this.imgMulti2='rtl_linebgfull2.gif';
-this.imgMulti3='multiline';this.imgMulti4='multiline2';
-} else{
-this.imgLine0='linefull0.gif';this.imgLine1='linefull1.gif';this.imgLine2='linefull2.gif';
-this.imgLine3='linefull3.gif';this.imgLine4='linefull4.gif';this.imgLine5='linefull5.gif';
-this.imgWait='wait.gif';this.imgEmpty='empty.gif';
-this.imgMinus1='minusfull1.gif';this.imgMinus2='minusfull2.gif';this.imgMinus3='minusfull3.gif';
-this.imgMinus4='minusfull4.gif';this.imgMinus5='minusfull5.gif';
-this.imgPlus1='plusfull1.gif';this.imgPlus2='plusfull2.gif';this.imgPlus3='plusfull3.gif';
-this.imgPlus4='plusfull4.gif';this.imgPlus5='plusfull5.gif';
-this.imgCheck1='check1.gif';this.imgCheck2='check2.gif';this.imgCheck3='check3.gif';
-this.imgMulti1='linebgfull.gif';this.imgMulti2='linebgfull2.gif';
-this.imgMulti3='multiline';this.imgMulti4='multiline2';
-}
-break;
-case 'line' :
-default :
-if(this.isRTL()){
-this.imgLine0='rtl_line0.gif';this.imgLine1='rtl_line1.gif';this.imgLine2='rtl_line2.gif';
-this.imgLine3='rtl_line3.gif';this.imgLine4='rtl_line4.gif';this.imgLine5='rtl_line5.gif';
-this.imgWait='wait.gif';this.imgEmpty='empty.gif';
-this.imgMinus1='rtl_minus1.gif';this.imgMinus2='rtl_minus2.gif';this.imgMinus3='rtl_minus3.gif';
-this.imgMinus4='rtl_minus4.gif';this.imgMinus5='rtl_minus5.gif';
-this.imgPlus1='rtl_plus1.gif';this.imgPlus2='rtl_plus2.gif';this.imgPlus3='rtl_plus3.gif';
-this.imgPlus4='rtl_plus4.gif';this.imgPlus5='rtl_plus5.gif';
-this.imgCheck1='check1.gif';this.imgCheck2='check2.gif';this.imgCheck3='check3.gif';
-this.imgMulti1='rtl_linebg.gif';this.imgMulti2='rtl_linebg2.gif';
-this.imgMulti3='multiline';this.imgMulti4='multiline2';
-} else{
-this.imgLine0='line0.gif';this.imgLine1='line1.gif';this.imgLine2='line2.gif';
-this.imgLine3='line3.gif';this.imgLine4='line4.gif';this.imgLine5='line5.gif';
-this.imgWait='wait.gif';this.imgEmpty='empty.gif';
-this.imgMinus1='minus1.gif';this.imgMinus2='minus2.gif';this.imgMinus3='minus3.gif';
-this.imgMinus4='minus4.gif';this.imgMinus5='minus5.gif';
-this.imgPlus1='plus1.gif';this.imgPlus2='plus2.gif';this.imgPlus3='plus3.gif';
-this.imgPlus4='plus4.gif';this.imgPlus5='plus5.gif';
-this.imgCheck1='check1.gif';this.imgCheck2='check2.gif';this.imgCheck3='check3.gif';
-this.imgMulti1='linebg.gif';this.imgMulti2='linebg2.gif';
-this.imgMulti3='multiline';this.imgMulti4='multiline2';
-}
-}
-},
-setTooltipDuration:function(show,hide){
-this.durationTooltipShow=show;
-this.durationTooltipHide=hide;
-},
-propagateRestriction:function(propagate){
-this.propagation =(typeof(propagate)== 'undefined')? true:propagate;
-},
-getSelectedBranches:function(){
-return this.selectedBranches;
-},
-setContextMenu:function(menu){
-var div=document.createElement('div');
-div.innerHTML=menu;
-this.div.appendChild(div);
-},
-generate:function(bigTree){
-if(!bigTree){
-var isNotFirst=false;
-var isNotLast=false;
-for(var i=0;i<this.baseStruct.length;i++){
-isNotFirst =(i>0)? true:false;
-isNotLast =(i<this.baseStruct.length-1)? true:false;
-this.roots[i]=new TafelTreeRoot(this,this.baseStruct[i],0,isNotFirst,isNotLast,i);
-this.div.appendChild(this.roots[i].obj);
-}
-this.loadComplete();
-} else{
-this.bigTreeLoading=0;
-setTimeout(this._checkLoad.bind(this),100);
-setTimeout(this._generateBigTree.bind(this),10);
-}
-},
-setOptions:function(options){
-if(options.onLoad)this.setOnLoad(options.onLoad);
-if(options.onDebug)this.setOnDebug(options.onDebug);
-if(options.onCheck)this.setOnCheck(options.onCheck);
-if(options.onBeforeCheck)this.setOnBeforeCheck(options.onBeforeCheck);
-if(options.onClick)this.setOnClick(options.onClick);
-if(options.onMouseDown)this.setOnMouseDown(options.onMouseDown);
-if(options.onMouseUp)this.setOnMouseUp(options.onMouseUp);
-if(options.onDblClick)this.setOnDblClick(options.onDblClick);
-if(options.onBeforeOpen)this.setOnBeforeOpen(options.onBeforeOpen);
-if(options.onOpen)this.setOnOpen(options.onOpen);
-if(options.onMouseOver)this.setOnMouseOver(options.onMouseOver);
-if(options.onMouseOut)this.setOnMouseOut(options.onMouseOut);
-if(options.onDrop)this.setOnDrop(options.onDrop);
-if(options.onDragStartEffect)this.setOnDragStartEffect(options.onDragStartEffect);
-if(options.onDragEndEffect)this.setOnDragEndEffect(options.onDragEndEffect);
-if(options.onErrorAjax)this.setOnDropAfter(options.onErrorAjax);
-if(options.onEdit)this.setOnEdit(options.onEdit);
-if(options.onEditAjax)this.setOnEditAjax(options.onEditAjax[0],options.onEditAjax[1]);
-if(options.onDropAjax)this.setOnDropAjax(options.onDropAjax[0],options.onDropAjax[1]);
-if(options.onOpenPopulate)this.setOnOpenPopulate(options.onOpenPopulate[0],options.onOpenPopulate[1]);
-if(typeof(options.rtlMode)!= 'undefined')this.enableRTL(options.rtlMode);
-if(typeof(options.dropALT)!= 'undefined')this.disableDropALT(options.dropALT);
-if(typeof(options.dropCTRL)!= 'undefined')this.disableDropCTRL(options.dropCTRL);
-if(typeof(options.multiline)!= 'undefined')this.enableMultiline(options.multiline);
-if(typeof(options.checkboxes)!= 'undefined')this.enableCheckboxes(options.checkboxes);
-if(typeof(options.checkboxesThreeState)!= 'undefined')this.enableCheckboxesThreeState(options.checkboxesThreeState);
-if(typeof(options.cookies)!= 'undefined')this.enableCookies(options.cookies);
-if(typeof(options.openOneAtOnce)!= 'undefined')this.openOneAtOnce(options.openOneAtOnce);
-if(typeof(options.openAtLoad)!= 'undefined')this.openAtLoad(options.openAtLoad);
-if(typeof(options.openAfterAdd)!= 'undefined')this.openAfterAdd(options.openAfterAdd);
-if(typeof(options.showSelectedBranch)!= 'undefined')this.showSelectedBranch(options.showSelectedBranch);
-if(typeof(options.reopenFromServer)!= 'undefined')this.reopenFromServerAfterLoad(options.reopenFromServer);
-if(typeof(options.propagateRestriction)!= 'undefined')this.propagateRestriction(options.propagateRestriction);
-if(options.lineStyle)this.setLineStyle(options.lineStyle);
-if(options.behaviourDrop)this.setBehaviourDrop(options.behaviourDrop);
-if(options.contextMenu)this.setContextMenu(options.contextMenu);
-if(options.bind){
-for(var i=0;i<options.bind.length;i++){
-this.bind(options.bind[i]);
-}
-}
-if(options.bindAsUnidirectional){
-for(var i=0;i<options.bindAsUnidirectional.length;i++){
-this.bind(options.bindAsUnidirectional[i]);
-}
-}
-if(options.defaultImg){
-var imgopen =(options.defaultImgOpen)? options.defaultImgOpen:options.defaultImg;
-var imgclose =(options.defaultImgClose)? options.defaultImgClose:options.defaultImg;
-this.setIcons(options.defaultImg,imgopen,imgclose);
-}
-if(options.defaultImgSelected||options.defaultImgOpenSelected||options.defaultImgCloseSelected){
-var img =(options.defaultImgSelected)? options.defaultImgSelected:null;
-var imgopen =(options.defaultImgOpenSelected)? options.defaultImgOpenSelected:null;
-var imgclose =(options.defaultImgCloseSelected)? options.defaultImgCloseSelected :null;
-this.setIconsSelected(img,imgopen,imgclose);
-}
-this.serverCookie =(options.serverCookie)? options.serverCookie:false;
-},
-loadComplete:function(){
-this._adjustOpening();
-this._adjustCheck();
-this.setCookie(this.classTree+this.id);
-this.loaded=true;
-if(typeof(this.onLoad)== 'function'){
-this.onLoad();
-}
-},
-loadRunning:function(loaded){
-if(typeof(this.onLoading)== 'function'){
-this.onLoading(loaded);
-}
-},
-replace:function(modelBranch,replacedBranch,copy){
-var branch1=this.getBranchById(modelBranch);
-if(!branch1)return false;
-return branch1.replace(replacedBranch,copy);
-},
-switchBranches:function(branch1,branch2){
-var branch1=this.getBranchById(branch1);
-if(!branch1)return false;
-branch1.switchWith(branch2);
-},
-restoreDefault:function(type){
-var s=this.defaultStruct;
-this._restaureDefault(s,type);
-},
-_restaureDefault:function(s,type){
-var b=null;
-var open=false;
-var check=0;
-for(var i=0;i<s.length;i++){
-b=this.getBranchById(s[i].id);
-if(b){
-open =(s[i].open)? true:this.openAll;
-check =(s[i].check==1)? 1:0;
-switch(type){
-case 'open' :
-if(b.hasChildren()){
-b.openIt(open);
-}
-break;
-case 'check' :
-b.check(check);
-b._adjustParentCheck();
-break;
-case 'all' :
-default :
-if(b.hasChildren()){
-b.openIt(open);
-}
-b.check(check);
-b._adjustParentCheck();
-}
-if(typeof(s[i].items)!= 'undefined'){
-this._restaureDefault(s[i].items,type);
-}
-}
-}
-},
-bind:function(){
-var trees=this.bind.arguments;
-for(var i=0;i<trees.length;i++){
-if(!this.isBindedWith(trees[i])){
-this.otherTrees.push(trees[i]);
-if(!trees[i].isBindedWith(this)){
-trees[i].bind(this);
-}
-}
-}
-},
-bindAsUnidirectional:function(){
-var trees=this.bindAsUnidirectional.arguments;
-for(var i=0;i<trees.length;i++){
-if(!this.isBindedWith(trees[i])){
-this.otherTrees.push(trees[i]);
-}
-}
-},
-isBindedWith:function(_tree){
-var binded=false;
-for(var i=0;i<this.otherTrees.length;i++){
-if(this.otherTrees[i].id==_tree.id){
-binded=true;
-break;
-}
-}
-return binded;
-},
-unselect:function(){
-var branch=null;
-for(var i=0;i<this.selectedBranches.length;i++){
-branch=this.selectedBranches[i];
-Element.removeClassName(branch.txt,this.classSelected);
-if(branch.getIconSelected()|| branch.getOpenIconSelected()|| branch.getCloseIconSelected()){
-if(branch.hasChildren()){
-branch.img.src =(branch.isOpened())? branch.tree.imgBase+branch.struct.imgopen:branch.tree.imgBase+branch.struct.imgclose;
-} else{
-branch.img.src=branch.tree.imgBase+branch.struct.img;
-}
-}
-}
-this.selectedBranches=[];
-},
-getBranchesBetween:function(branch1,branch2){
-var branch1=this.getBranchById(branch1);
-var branch2=this.getBranchById(branch2);
-if(!branch1||!branch2)return false;
-if(branch1.tree.id!=branch2.tree.id)return false;
-var found=false;
-var selected=[];
-var pos1=branch1.getWithinOffset();
-var pos2=branch2.getWithinOffset();
-var next =(pos1[1]<=pos2[1])? true:false;
-branch =(next)? branch1.getNextBranch(): branch1.getPreviousBranch();
-while(branch){
-selected.push(branch);
-if(branch.getId()== branch2.getId()){
-found=true;
-break;
-}
-branch =(next)? branch.getNextBranch(): branch.getPreviousBranch();
-}
-return(found)? selected:false;
-},
-countBranches:function(){
-var nb=this.roots.length;
-for(var i=0;i<this.roots.length;i++){
-nb += this.roots[i].countBranches();
-}
-return nb;
-},
-getBranches:function(filter){
-var branches=[];
-for(var i=0;i<this.roots.length;i++){
-if(typeof(filter)== 'function'){
-if(filter(this.roots[i])){
-branches.push(this.roots[i]);
-}
-} else{
-branches.push(this.roots[i]);
-}
-branches=this.roots[i].getBranches(filter,branches);
-}
-return branches;
-},
-getOpenedBranches:function(){
-var openedBranches=[];
-for(var i=0;i<this.roots.length;i++){
-if(this.roots[i].isOpened()&& this.roots[i].hasChildren()){
-openedBranches.push(this.roots[i]);
-}
-openedBranches=this.roots[i].getOpenedBranches(openedBranches);
-}
-return openedBranches;
-},
-getCheckedBranches:function(){
-var checkedBranches=[];
-for(var i=0;i<this.roots.length;i++){
-if(this.roots[i].isChecked()== 1){
-checkedBranches.push(this.roots[i]);
-}
-checkedBranches=this.roots[i].getCheckedBranches(checkedBranches);
-}
-return checkedBranches;
-},
-getUnCheckedBranches:function(){
-var uncheckedBranches=[];
-for(var i=0;i<this.roots.length;i++){
-if(this.roots[i].isChecked()== 0){
-uncheckedBranches.push(this.roots[i]);
-}
-uncheckedBranches=this.roots[i].getUnCheckedBranches(uncheckedBranches);
-}
-return uncheckedBranches;
-},
-getPartCheckedBranches:function(){
-var uncheckedBranches=[];
-for(var i=0;i<this.roots.length;i++){
-if(this.roots[i].isChecked()== -1){
-uncheckedBranches.push(this.roots[i]);
-}
-uncheckedBranches=this.roots[i].getPartCheckedBranches(uncheckedBranches);
-}
-return uncheckedBranches;
-},
-getParentBranches:function(){
-var parents=[];
-for(var i=0;i<this.roots.length;i++){
-if(this.roots[i].hasChildren()){
-parents.push(this.roots[i]);
-}
-parents=this.roots[i].getParentBranches(parents);
-}
-return parents;
-},
-getLeafBranches:function(){
-var leafs=[];
-for(var i=0;i<this.roots.length;i++){
-if(!this.roots[i].hasChildren()){
-leafs.push(this.roots[i]);
-}
-leafs=this.roots[i].getLeafBranches(leafs);
-}
-return leafs;
-},
-expend:function(){
-for(var i=0;i<this.roots.length;i++){
-this.roots[i].expend();
-}
-},
-collapse:function(){
-for(var i=0;i<this.roots.length;i++){
-this.roots[i].collapse();
-}
-},
-insertBranch:function(position,item,sibling,isFirst){
-var position=this.getBranchById(position);
-if(!position)return false;
-if(!sibling){
-if(!isFirst){
-position.insertIntoLast(item);
-} else{
-position.insertIntoFirst(item);
-}
-} else{
-if(!isFirst){
-position.insertAfter(item);
-} else{
-position.insertBefore(item);
-}
-}
-},
-moveBranch:function(position,item,sibling,isFirst){
-var position=this.getBranchById(position);
-if(!position)return false;
-if(!sibling){
-if(!isFirst){
-position.moveIntoLast(item);
-} else{
-position.moveIntoFirst(item);
-}
-} else{
-if(!isFirst){
-position.moveAfter(item);
-} else{
-position.moveBefore(item);
-}
-}
-},
-removeBranch:function(branch){
-try{
-var branch=this.getBranchById(branch);
-if(!branch)return false;
-if(branch.objDrag){
-branch.removeDragDrop();
-}
-if(!branch.isRoot){
-branch.parent.obj.removeChild(branch.obj);
-branch.parent.children.splice(branch.pos,1);
-branch.parent.struct.items.splice(branch.pos,1);
-if(branch.parent.children.length==0){
-branch.parent.setOpenableIcon(false);
-if(branch.tree.multiline){
-branch._manageMultiline(branch.parent.tdImg,2,false);
-}
-}
-branch.parent._manageLine();
-} else{
-this.div.removeChild(branch.obj);
-this.roots.splice(branch.pos,1);
-if(this.roots[branch.pos-1]){
-this.roots[branch.pos-1]._manageAfterRootInsert();
-}
-}
-branch=null;
-} catch(err){
-throw new Error('remove(base): '+err.message);
-}
-},
-getBranchByIdObj:function(id){
-try{
-var obj=null;
-for(var r=0;r<this.roots.length;r++){
-obj=this._getBranchByIdObj(id,this.roots[r]);
-if(obj){
-break;
-}
-}
-return obj;
-} catch(err){
-throw new Error('getBranchByIdObj(func): '+err.message);
-}
-},
-getBranchById:function(id){
-try{
-if(typeof(id)== 'object')return id;
-var obj=null;
-for(var r=0;r<this.roots.length;r++){
-obj=this._getBranchById(id,this.roots[r]);
-if(obj)break;
-}
-if(!obj){
-var ro=null;
-for(var i=0;i<this.otherTrees.length;i++){
-ro=this.otherTrees[i].roots;
-for(var r=0;r<ro.length;r++){
-obj=this.otherTrees[i]._getBranchById(id,ro[r]);
-if(obj)break;
-}
-if(obj)break;
-}
-}
-return obj;
-} catch(err){
-throw new Error('getBranchById(func): '+err.message);
-}
-},
-debug:function(str){
-try{
-this.debugObj.style.display='block';
-if(typeof(this.onDebug)== 'function'){
-this.onDebug(this,this.debugObj,(str)? str:'');
-} else{
-this.debugObj.innerHTML += str;
-}
-} catch(err){
-throw new Error('debug(func): '+err.message);
-}
-},
-toString:function(){
-var obj ={
-'id':this.id,
-'width':this.div.offsetWidth,
-'height':this.div.offsetHeight,
-'imgPath':this.imgBase,
-'roots':this.roots.length
-};
-var str='TafelTree{';
-for(var i in obj){
-str += TafelTree.debugReturn+TafelTree.debugTab+i+':'+obj[i];
-}
-str += TafelTree.debugReturn+'}';
-return str;
-},
-serialize:function(debug){
-var rt =(debug)? TafelTree.debugReturn:'';
-var str =(debug)? 'TafelTree('+this.id+')[':'[';
-for(var i=0;i<this.roots.length;i++){
-str += this.roots[i].serialize(debug,true);
-if(i<this.roots.length-1){
-str += ',';
-}
-}
-str += rt +((debug)? '];':']');
-if(debug){
-return str;
-} else{
-return encodeURIComponent(str);
-}
-},
-getURLParams:function(url){
-var params=[];
-if(url.indexOf('?')> -1){
-var a1=url.split('?');
-var a2=a1[1].split('&');
-var a3='';
-for(var i=0;i<a2.length;i++){
-a3=a2[i].split('=');
-if(a3.length==2){
-params.push({
-'name':a3[0],
-'value': a3[1]
-})
-}
-}
-}
-return params;
-},
-_generateBigTree:function(){
-var i=this.bigTreeLoading;
-var isNotFirst=false;
-var isNotLast=false;
-if(i<this.baseStruct.length){
-isNotFirst =(i>0)? true:false;
-isNotLast =(i<this.baseStruct.length-1)? true:false;
-this.roots[i]=new TafelTreeRoot(this,this.baseStruct[i],0,isNotFirst,isNotLast,i);
-this.div.appendChild(this.roots[i].obj);
-this.loadRunning(this.roots[i]);
-this.bigTreeLoading++;
-setTimeout(this._generateBigTree.bind(this),10);
-} else{
-this.loaded=true;
-}
-},
-_checkLoad:function(){
-var complete=true;
-if(this.loaded){
-for(var i=0;i<this.roots.length;i++){
-if(!this.roots[i].loaded||!this._checkLoadChildren(this.roots[i])){
-complete=false;
-break;
-}
-}
-} else{
-complete=false;
-}
-if(!complete){
-setTimeout(this._checkLoad.bind(this),100);
-} else{
-this.loadComplete();
-}
-},
-_checkLoadChildren:function(branch){
-var complete=true;
-if(branch.loaded){
-for(var i=0;i<branch.children.length;i++){
-if(!branch.children[i].loaded||!this._checkLoadChildren(branch.children[i])){
-complete=false;
-break;
-}
-}
-} else{
-complete=false;
-}
-return complete;
-},
-_adjustOpening:function(){
-if(this.useCookie&&this.cookieOpened){
-var branch=null;
-for(var i=0;i<this.cookieOpened.length;i++){
-branch=this.getBranchById(this.cookieOpened[i]);
-if(typeof(branch)== 'object'&&branch.hasChildren()){
-if(branch.children.length>0){
-branch.openIt(true);
-} else{
-if(typeof(branch.struct.onopenpopulate)== 'function'&&branch.eventable){
-branch._openPopulate();
-branch.openIt(true);
-}
-}
-}
-}
-}
-},
-_adjustCheck:function(){
-var branch=null;
-if(this.checkboxes&&this.useCookie&&this.cookieChecked){
-for(var i=0;i<this.cookieChecked.length;i++){
-branch=this.getBranchById(this.cookieChecked[i]);
-if(typeof(branch)== 'object'){
-branch.check(1);
-}
-}
-}
-if(this.checkboxes&&this.checkboxesThreeState){
-var checked=this.getCheckedBranches();
-for(var i=0;i<checked.length;i++){
-checked[i]._adjustParentCheck();
-}
-}
-},
-_getBranchByIdObj:function(id,obj){
-try{
-var ob='';
-if(obj.idObj==id){
-return obj;
-}
-if(typeof(obj.children)== 'object'){
-for(var c=0;c<obj.children.length;c++){
-ob=this._getBranchByIdObj(id,obj.children[c]);
-if(ob){
-return ob;
-}
-}
-}
-return ob;
-} catch(err){
-throw new Error('_getBranchByIdObj(func): '+err.message);
-}
-},
-_getBranchById:function(id,obj){
-try{
-var ob='';
-if(obj.getId()== id){
-return obj;
-}
-if(typeof(obj.children)== 'object'){
-for(var c=0;c<obj.children.length;c++){
-ob=this._getBranchById(id,obj.children[c]);
-if(ob){
-return ob;
-}
-}
-}
-return ob;
-} catch(err){
-throw new Error('_getBranchById(func): '+err.message);
-}
-},
-_changeStruct:function(branch){
-try{
-while(typeof(branch.parent)!= 'undefined'){
-branch.parent.struct.items.splice(branch.pos,1,branch.struct);
-if(typeof(branch.parent)!= 'undefined'){
-branch=branch.parent;
-}
-}
-} catch(err){
-throw new Error('_changeStruct(func): '+err.message);
-}
-},
-_addTree:function(){
-var div=document.createElement('div');
-div.className=this.classTree;
-return div;
-},
-setCookie:function(name){
-try{
-var str='cookieactivate'+this.cookieSeparator;
-var arr=this.getOpenedBranches();
-for(var i=0;i<arr.length;i++){
-str=str+arr[i].getId()+ this.cookieSeparator;
-}
-str += this.cookieCheckSeparator;
-var arr=this.getCheckedBranches();
-for(var i=0;i<arr.length;i++){
-str=str+arr[i].getId()+ this.cookieSeparator;
-}
-if(!this.serverCookie){
-this._saveCookie(name,str,'','/','','');
-} else{
-if(this.loaded){
-new Ajax.Request(this.serverCookie,{
-'method':'post',
-'parameters':'type=set&cookieString='+str,
-'onComplete':this._cookieSend.bind(this),
-'onFailure':this._cookieFailure.bind(this)
-});
-}
-}
-} catch(err){
-throw new Error('setCookie(func): '+err.message);
-}
-},
-getCookie:function(name){
-try{
-if(!this.serverCookie){
-if(name!=''){
-var start=document.cookie.indexOf(name+'=');
-var len=start+name.length+1;
-if((!start)&&(name!=document.cookie.substring(0,name.length))){
-return null;
-}
-if( start==-1 )return null;
-var end=document.cookie.indexOf(';',len);
-if(end==-1){
-end=document.cookie.length;
-}
-return unescape(document.cookie.substring(len,end));
-}
-} else{
-new Ajax.Request(this.serverCookie,{
-'method':'post',
-'parameters':'type=get',
-'onComplete':this._getCookieComplete.bind(this),
-'onFailure':this._cookieFailure.bind(this)
-});
-}
-return null;
-} catch(err){
-throw new Error('getCookie(func): '+err.message);
-}
-},
-_cookieSend:function(response){
-alert('ok');
-},
-_getCookieComplete:function(response){
-var fromCookie=response.responseText;
-if(fromCookie){
-var branches=fromCookie.split(this.cookieCheckSeparator);
-this.cookieOpened=[];
-this.cookieOpened=branches[0].split(this.cookieSeparator);
-this.cookieOpened.shift();
-this.cookieChecked=[];
-if(branches.length>1){
-this.cookieChecked=branches[1].split(this.cookieSeparator);
-}
-}
-if(this.options.generate){
-this.generate();
-}
-if(this.options.generateBigTree){
-this.generate(true);
-}
-},
-_cookieFailure:function(response){
-},
-deleteCookie:function(name,path,domain){
-try{
-if(get_cookie(name))document.cookie=name+'=' +
-(( path )? ';path='+path:"")+
-(( domain )? ';domain='+domain:'')+
-';expires=Thu,01-Jan-1970 00:00:01 GMT';
-} catch(err){
-throw new Error('deleteCookie(func): '+err.message);
-}
-},
-_saveCookie:function(name,value,expires,path,domain,secure){
-try{
-var today=new Date();
-today.setTime(today.getTime());
-if(expires){
-expires=expires * 1000 * 60 * 60 * 24;
-}
-var expires_date=new Date(today.getTime()+(expires));
-document.cookie=name+'=' +escape(value)+
-(( expires )? ';expires='+expires_date.toGMTString(): '')+
-(( path )? ';path='+path:'')+
-(( domain )? ';domain='+domain:'')+
-(( secure )? ';secure':'');
-} catch(err){
-throw new Error('_saveCookie(func): '+err.message);
-}
-},
-setOnLoad:function(func){
-this.onLoad=eval(func);
-},
-setOnLoading:function(func){
-this.onLoading=eval(func);
-},
-setOnOpen:function(func){
-this.onOpen=eval(func);
-},
-setOnBeforeOpen:function(func){
-this.onBeforeOpen=eval(func);
-},
-setOnMouseOver:function(func){
-this.onMouseOver=eval(func);
-},
-setOnMouseOut:function(func){
-this.onMouseOut=eval(func);
-},
-setOnClick:function(func){
-this.onClick=eval(func);
-},
-setOnMouseDown:function(func){
-this.onMouseDown=eval(func);
-},
-setOnMouseUp:function(func){
-this.onMouseUp=eval(func);
-},
-setOnDblClick:function(func){
-this.onDblClick=eval(func);
-},
-setOnEdit:function(func,link){
-if(link){
-this.onEditAjax ={
-'func':eval(func),
-'link':link
-};
-} else{
-this.onEdit=eval(func);
-}
-this.editableBranches=true;
-},
-setOnBeforeCheck:function(func){
-this.onBeforeCheck=eval(func);
-},
-setOnCheck:function(func){
-this.onCheck=eval(func);
-},
-setOnDrop:function(func){
-this.onDrop=eval(func);
-},
-setOnDropAfter:function(func){
-this.onErrorAjax=eval(func);
-},
-setOnDropAjax:function(func,link){
-this.onDropAjax ={
-'func':eval(func),
-'link':link
-};
-},
-setOnOpenPopulate:function(func,link){
-this.onOpenPopulate ={
-'func':eval(func),
-'link':link
-};
-},
-setOnEditAjax:function(func,link){
-this.onEditAjax ={
-'func':eval(func),
-'link':link
-};
-this.editableBranches=true;
-},
-setOnDragStartEffect:function(func){
-this.onDragStartEffect=eval(func);
-},
-setOnDragEndEffect:function(func){
-this.onDragEndEffect=eval(func);
-}
-};
-var TafelTreeBaseBranch=Class.create();
-TafelTreeBaseBranch.prototype ={
-initialize:function(){},
-getId:function(){
-return this.struct.id;
-},
-getText:function(){
-return this.struct.txt;
-},
-getLevel:function(){
-return this.level;
-},
-getTree:function(){
-return this.tree;
-},
-getParent:function(){
-return(this.isRoot)? null:this.parent;
-},
-getAncestor:function(){
-return(this.isRoot)? null:this.root;
-},
-getParents:function(){
-var parents=[];
-var branch=this;
-while(branch.parent){
-parents.push(branch.parent);
-branch=branch.parent;
-}
-return parents;
-},
-getChildren:function(){
-return this.children;
-},
-getIcon:function(){
-return this.struct.img;
-},
-getOpenIcon:function(){
-return this.struct.imgopen;
-},
-getCloseIcon:function(){
-return this.struct.imgclose;
-},
-getIconSelected:function(){
-return this.struct.imgselected;
-},
-getOpenIconSelected:function(){
-return this.struct.imgopenselected;
-},
-getCloseIconSelected:function(){
-return this.struct.imgcloseselected;
-},
-getCurrentIcon:function(){
-var img=this._getImgInfo(this.img);
-return img.fullName;
-},
-setText:function(text){
-this.struct.txt=text;
-this.txt.innerHTML=text;
-},
-setIcons:function(icon,iconOpen,iconClose){
-this.struct.img=icon;
-this.struct.imgopen =(iconOpen)? iconOpen:icon;
-this.struct.imgclose =(iconClose)? iconClose:icon;
-if(this.hasChildren()){
-this.img.src =(this.isOpened())? this.tree.imgBase+this.struct.imgopen:this.tree.imgBase+this.struct.imgclose;
-} else{
-this.img.src=this.tree.imgBase+this.struct.img;
-}
-},
-setIconsSelected:function(icon,iconOpen,iconClose){
-this.struct.imgselected=icon;
-this.struct.imgopenselected =(iconOpen)? iconOpen:null;
-this.struct.imgcloseselected =(iconClose)? iconClose:null;
-if(this.isSelected()){
-if(this.hasChildren()){
-this.img.src =(this.isOpened())? this.tree.imgBase+this.struct.imgopenselected:this.tree.imgBase+this.struct.imgcloseselected;
-} else{
-this.img.src=this.tree.imgBase+this.struct.imgselected;
-}
-}
-},
-changeId:function(newId){
-var used=this.tree.getBranchById(newId);
-if(!used){
-this.struct.id=newId;
-this.tree._changeStruct(this);
-return true;
-} else{
-return false;
-}
-},
-hasChildren:function(){
-return(this.struct.items.length>0||this.struct.canhavechildren)? true:false;
-},
-isOpened:function(){
-return(this.struct.open)? true:false;
-},
-isAlwaysLast:function(){
-return(this.struct.last)? true:false;
-},
-isOpenedInCookie:function(){
-if(this.tree.useCookie&&this.tree.cookieOpened){
-for(var i=0;i<this.tree.cookieOpened.length;i++){
-if(this.getId()== this.tree.cookieOpened[i])return true;
-}
-}
-return false;
-},
-isVisible:function(){
-var visible=true;
-var branch=this;
-while(branch.parent){
-if(branch.parent.isOpened()){
-branch=branch.parent;
-} else{
-visible=false;
-break;
-}
-}
-return visible;
-},
-isSelected:function(){
-return(Element.hasClassName(this.txt,this.tree.classSelected))? true:false;
-},
-refreshChildren:function(){
-this.removeChildren();
-this._openPopulate();
-},
-clone:function(withDefaultFunc){
-var struct ={};
-for(var property in this.struct){
-if(property!='items'){
-if(!withDefaultFunc&&typeof(this.struct[property])== 'function'){
-if(!eval('this.'+property+'Default')){
-struct[property]=this.struct[property];
-}
-} else{
-struct[property]=this.struct[property];
-}
-}
-}
-if(this.hasChildren()){
-struct.items=[];
-for(var i=0;i<this.children.length;i++){
-struct.items.push(this.children[i].clone(withDefaultFunc));
-}
-}
-this.copiedTimes++;
-struct.id=struct.id+this.tree.copyNameBreak+this.tree.idTree;
-struct.txt=struct.txt+this.tree.copyName.replace('%n',this.copiedTimes);
-return struct;
-},
-getFirstBranch:function(){
-return(this.children.length>0)? this.children[0]:null;
-},
-getLastBranch:function(){
-var pos=this.children.length-1;
-return(pos>=0)? this.children[pos]:null;
-},
-getPreviousSibling:function(){
-var pos=this.pos-1;
-var branch=null;
-if(this.isRoot){
-if(pos>=0)branch=this.tree.roots[pos];
-} else{
-if(pos>=0)branch=this.parent.children[pos];
-}
-return branch;
-},
-getNextSibling:function(){
-var pos=this.pos+1;
-var branch=null;
-if(this.isRoot){
-if(pos<this.tree.roots.length)branch=this.tree.roots[pos];
-} else{
-if(pos<this.parent.children.length)branch=this.parent.children[pos];
-}
-return branch;
-},
-getPreviousBranch:function(){
-var branch=null;
-var previous=this.getPreviousSibling();
-if(previous){
-if(previous.hasChildren()){
-while(previous.hasChildren()){
-previous=previous.getLastBranch();
-}
-branch=previous;
-} else{
-branch=previous;
-}
-} else{
-if(this.parent){
-branch=this.parent;
-}
-}
-return branch;
-},
-getNextBranch:function(){
-var branch=null;
-branch=this.getFirstBranch();
-if(!branch){
-branch=this.getNextSibling();
-if(!branch){
-var b=null;
-branch=this.parent;
-while(!b&&branch){
-b=branch.getNextSibling();
-branch=branch.parent;
-}
-branch=b;
-}
-}
-return branch;
-},
-getPreviousOpenedBranch:function(){
-var branch=null;
-var previous=this.getPreviousSibling();
-if(previous){
-if(previous.hasChildren()&& previous.isOpened()){
-while(previous.hasChildren()&& previous.isOpened()){
-previous=previous.getLastBranch();
-}
-branch=previous;
-} else{
-branch=previous;
-}
-} else{
-if(this.parent){
-branch=this.parent;
-}
-}
-return branch;
-},
-getNextOpenedBranch:function(){
-var branch=null;
-if(this.hasChildren()&& this.isOpened()){
-branch=this.getFirstBranch();
-} else{
-var next=this;
-while(!branch){
-branch=next.getNextSibling();
-next=next.parent;
-if(!next)break;
-}
-}
-return branch;
-},
-removeChildren:function(){
-var children=this.children.concat();
-for(var i=0;i<children.length;i++){
-this.tree.removeBranch(children[i]);
-}
-},
-isChild:function(elem){
-var elem=this.tree.getBranchById(elem);
-if(!elem)return false;
-return this._isChild(this,elem);
-},
-openIt:function(open){
-try{
-if(!open){
-this._closeChild();
-if(this.tree.multiline){
-this._manageMultiline(this.tdImg,2,false);
-}
-} else{
-if(this.tree.onlyOneOpened){
-this.closeSiblings();
-}
-this._openChild();
-if(this.tree.multiline){
-this._manageMultiline(this.tdImg,2,true);
-}
-}
-if(this.tree.useCookie){
-this.tree.setCookie(this.tree.classTree+this.tree.id);
-}
-} catch(err){
-throw new Error('openIt(base): '+err.message);
-}
-},
-insert:function(item){
-return this.insertIntoLast(item);
-},
-insertIntoLast:function(item){
-var pos=this.children.length;
-var isNotFirst =(this.hasChildren())? true:false;
-this.children[pos]=new TafelTreeBranch((this.isRoot)? this:this.root,this,item,this.level+1,isNotFirst,false,pos);
-this.struct.items[pos]=item;
-this.obj.appendChild(this.children[pos].obj);
-this._manageAfterInsert(pos);
-return this.children[pos];
-},
-insertIntoFirst:function(item){
-var pos=0;
-var posBefore=1;
-var isNotLast =(this.hasChildren())? false:true;
-this._movePartStruct(pos);
-this.struct.items[pos]=item;
-this.children[pos]=new TafelTreeBranch((this.isRoot)? this:this.root,this,item,this.level+1,false,isNotLast,pos);
-try{
-this.obj.insertBefore(this.children[pos].obj,this.children[posBefore].obj);
-} catch(err){
-this.obj.appendChild(this.children[pos].obj);
-}
-this._manageAfterInsert(pos);
-return this.children[pos];
-},
-closeSiblings:function(){
-var obj=null;
-if(this.parent){
-for(var i=0;i<this.parent.children.length;i++){
-obj=this.parent.children[i];
-if(obj.idObj!=this.idObj&&obj.hasChildren()){
-obj.openIt(false);
-}
-}
-} else if(this.isRoot){
-for(var i=0;i<this.tree.roots.length;i++){
-obj=this.tree.roots[i];
-if(obj.idObj!=this.idObj&&obj.hasChildren()){
-obj.openIt(false);
-}
-}
-}
-},
-addClass:function(style){
-Element.addClassName(this.txt,style);
-},
-removeClass:function(style){
-Element.removeClassName(this.txt,style);
-},
-getImgBeforeIcon:function(){
-try{
-var img=this.beforeIcon.getElementsByTagName('img')[0];
-return this._getImgInfo(img);
-} catch(err){
-throw new Error('getImgBeforeIcon(base): '+err.message);
-}
-},
-setOpenableIcon:function(openable){
-var im=this.getImgBeforeIcon();
-var img=im.img;
-if(openable){
-this.struct.open=true;
-this.img.src=this.tree.imgBase+this.struct.imgopen;
-if(!this.isRoot){
-img.src =(this.hasSiblingsAfter)? this.tree.imgBase+this.tree.imgMinus3:this.tree.imgBase+this.tree.imgMinus2;
-} else{
-if(this.hasSiblingsBefore){
-img.src =(this.hasSiblingsAfter)? this.tree.imgBase+this.tree.imgMinus3:this.tree.imgBase+this.tree.imgMinus2;
-} else{
-img.src =(this.hasSiblingsAfter)? this.tree.imgBase+this.tree.imgMinus4:this.tree.imgBase+this.tree.imgMinus5;
-}
-}
-Event.observe(img,'click',this.setOpen.bindAsEventListener(this),false);
-Event.observe(img,'mouseover',this.evt_openMouseOver.bindAsEventListener(this),false);
-Event.observe(img,'mouseout',this.evt_openMouseOut.bindAsEventListener(this),false);
-} else{
-this.struct.open=false;
-this.struct.canhavechildren=false;
-this.img.src=this.tree.imgBase+this.struct.img;
-var td=img.parentNode;
-var newImg=document.createElement('img');
-td.removeChild(img);
-if(!this.isRoot){
-newImg.src =(this.hasSiblingsAfter)? this.tree.imgBase+this.tree.imgLine3:this.tree.imgBase+this.tree.imgLine2;
-} else{
-if(this.hasSiblingsBefore){
-newImg.src =(this.hasSiblingsAfter)? this.tree.imgBase+this.tree.imgLine3:this.tree.imgBase+this.tree.imgLine2;
-} else{
-newImg.src =(this.hasSiblingsAfter)? this.tree.imgBase+this.tree.imgLine4:this.tree.imgBase+this.tree.imgLine5;
-}
-}
-td.appendChild(newImg);
-}
-},
-toString:function(){
-var str =(this.isRoot)? 'TafelTreeRoot{':'TafelTreeBranch{';
-var strSave='';
-for(var attr in this.struct){
-if(attr!='items'){
-strSave =(typeof(this.struct[attr])!= 'function')? this.struct[attr]:true;
-str += TafelTree.debugReturn+TafelTree.debugTab+attr+':'+strSave;
-}
-}
-str += TafelTree.debugReturn+TafelTree.debugTab+'children:'+this.children.length;
-str += TafelTree.debugReturn+'}';
-return str;
-},
-isChecked:function(dbg){
-if(this.tree.checkboxes&&this.checkbox){
-var img=this._getImgInfo(this.checkbox);
-if(img.fullName.replace('_over','')== this.tree.imgCheck2){
-return 1;
-}
-if(img.fullName.replace('_over','')== this.tree.imgCheck3){
-return -1;
-}
-return 0;
-}
-return 0;
-},
-getCheckbox:function(){
-return(this.checkbox)? this.checkbox:false;
-},
-check:function(checked){
-if(this.checkbox){
-if(checked==-1){
-this.checkbox.src=this.tree.imgBase+this.tree.imgCheck3;
-this.struct.check=-1;
-} else if(checked){
-this.checkbox.src=this.tree.imgBase+this.tree.imgCheck2;
-this.struct.check=1;
-if(this.tree.useCookie){
-this.tree.setCookie(this.tree.classTree+this.tree.id);
-}
-} else{
-this.checkbox.src=this.tree.imgBase+this.tree.imgCheck1;
-this.struct.check=0;
-if(this.tree.useCookie){
-this.tree.setCookie(this.tree.classTree+this.tree.id);
-}
-}
-}
-},
-hasAllChildrenChecked:function(){
-var allChecked=false;
-var anyChecked=false;
-for(var i=0;i<this.children.length;i++){
-if(this.children[i].isChecked()== -1){
-allChecked=true;
-anyChecked=true;
-break;
-}
-if(this.children[i].isChecked()== 1)allChecked=true;
-else anyChecked=true;
-}
-if(allChecked&&anyChecked)return -1;
-if(allChecked)return 1;
-else return 0;
-},
-switchWith:function(branchId){
-var branch=this.tree.getBranchById(branchId);
-if(!branch)return false;
-var copyThis=this.copiedTimes;
-var newThis=this.clone();
-var txtThis=this.getText();
-var idThis=this.getId();
-var copyBanch=branch.copiedTimes;
-var newBranch=branch.clone();
-var txtBranch=branch.getText();
-var idBranch=branch.getId();
-this.changeId('temp_switch_change_'+this.tree.idTree);
-var n1=branch.insertBefore(newThis);
-this.tree.removeBranch(branch);
-n1.setText(txtThis);
-n1.changeId(idThis);
-n1.copiedTimes=copyThis;
-var n2=this.insertBefore(newBranch);
-this.tree.removeBranch(this);
-n2.setText(txtBranch);
-n2.changeId(idBranch);
-n2.copiedTimes=copyBranch;
-},
-replace:function(branchId,copy){
-var branch=this.tree.getBranchById(branchId);
-if(!branch)return false;
-var copyThis=this.copiedTimes;
-var newThis=this.clone();
-var n1=branch.insertBefore(newThis);
-this.tree.removeBranch(branch);
-if(!copy){
-var idThis=this.getId();
-n1.setText(this.getText())
-this.tree.removeBranch(this);
-n1.changeId(idThis);
-n1.copiedTimes=copyThis;
-}
-return n1;
-},
-expend:function(){
-if(this.isOpened()!= true&&this.hasChildren()){
-this.openIt(true);
-}
-for(var i=0;i<this.children.length;i++){
-this.children[i].expend();
-}
-},
-collapse:function(){
-if(this.isOpened()!= false&&this.hasChildren()){
-this.openIt(false);
-}
-for(var i=0;i<this.children.length;i++){
-this.children[i].collapse();
-}
-},
-getBranches:function(filter,branches){
-if(!branches)branches=[];
-for(var i=0;i<this.children.length;i++){
-if(typeof(filter)== 'function'){
-if(filter(this.children[i])){
-branches.push(this.children[i]);
-}
-} else{
-branches.push(this.children[i]);
-}
-branches=this.children[i].getBranches(filter,branches);
-}
-return branches;
-},
-getParentBranches:function(parents){
-if(!parents)parents=[];
-for(var i=0;i<this.children.length;i++){
-if(this.children[i].hasChildren()){
-parents.push(this.children[i]);
-}
-parents=this.children[i].getParentBranches(parents);
-}
-return parents;
-},
-getLeafBranches:function(leafs){
-if(!leafs)leafs=[];
-for(var i=0;i<this.children.length;i++){
-if(!this.children[i].hasChildren()){
-leafs.push(this.children[i]);
-}
-leafs=this.children[i].getLeafBranches(leafs);
-}
-return leafs;
-},
-countBranches:function(){
-var nb=this.children.length;
-for(var i=0;i<this.children.length;i++){
-nb += this.children[i].countBranches();
-}
-return nb;
-},
-getOpenedBranches:function(openedBranches){
-if(!openedBranches)openedBranches=[];
-for(var i=0;i<this.children.length;i++){
-if(this.children[i].isOpened()&& this.children[i].hasChildren()){
-openedBranches.push(this.children[i]);
-}
-openedBranches=this.children[i].getOpenedBranches(openedBranches);
-}
-return openedBranches;
-},
-getCheckedBranches:function(checkedBranches){
-return this._getCheckedBranches(checkedBranches,1);
-},
-getUnCheckedBranches:function(checkedBranches){
-return this._getCheckedBranches(checkedBranches,0);
-},
-getPartCheckedBranches:function(checkedBranches){
-return this._getCheckedBranches(checkedBranches,-1);
-},
-select:function(ev){
-var ctrl =(ev)? TafelTreeManager.ctrlOn(ev): false;
-var shift =(ev)? TafelTreeManager.shiftOn(ev): false;
-if(ctrl){
-this.tree.selectedBranches.push(this);
-} else if(shift&&this.tree.selectedBranches.length>0){
-var last=this.tree.selectedBranches.length-1;
-var sel=this.tree.getBranchesBetween(this.tree.selectedBranches[last],this);
-for(var i=0;i<sel.length;i++){
-this.tree.selectedBranches.push(sel[i]);
-Element.addClassName(sel[i].txt,this.tree.classSelected);
-}
-} else{
-this.tree.unselect();
-this.tree.selectedBranches.push(this);
-}
-Element.addClassName(this.txt,this.tree.classSelected);
-if(this.isOpened()&& this.hasChildren()&& this.getOpenIconSelected()){
-this.img.src=this.tree.imgBase+this.getOpenIconSelected();
-} else if(!this.isOpened()&& this.hasChildren()&& this.getCloseIconSelected()){
-this.img.src=this.tree.imgBase+this.getCloseIconSelected();
-} else if(!this.hasChildren()&& this.getIconSelected()){
-this.img.src=this.tree.imgBase+this.getIconSelected();
-}
-if(ev)Event.stop(ev);
-},
-unselect:function(){
-var ln=this.tree.selectedBranches.length;
-if(ln>0){
-for(var i=0;i<ln;i++){
-if(this.tree.selectedBranches[i].getId()== this.getId()){
-this.tree.selectedBranches.splice(i,1);
-Element.removeClassName(this.txt,this.tree.classSelected);
-if(this.hasChildren()){
-this.img.src =(this.isOpened())? this.tree.imgBase+this.struct.imgopen:this.tree.imgBase+this.struct.imgclose;
-} else{
-this.img.src=this.tree.imgBase+this.struct.img;
-}
-return true;
-}
-}
-}
-return false;
-},
-getWithinOffset:function(){
-var realPos=Position.positionedOffset(this.txt);
-var posTree=Position.positionedOffset(this.tree.div);
-var pos=[
-realPos[0]-posTree[0],
-realPos[1]-posTree[1]
-];
-return pos;
-},
-getAbsoluteOffset:function(){
-return Position.positionedOffset(this.txt);
-},
-serialize:function(debug,noEncoding){
-var tab='';
-var rt='';
-if(debug){
-rt=TafelTree.debugReturn;
-for(var i=0;i<this.level;i++){
-tab += TafelTree.debugTab;
-}
-}
-var strSave='';
-var str=rt+tab+'{'+rt;
-str += tab+'"id":"'+this._encode(this.struct.id)+ '"';
-for(var attr in this.struct){
-if(attr!='items'&&attr!='id'){
-strSave =(typeof(this.struct[attr])!= 'function')? this.struct[attr]:true;
-if(this.isBool(strSave)){
-str += ","+rt+tab+'"'+attr+'":'+this._encode(strSave);
-} else{
-str += ","+rt+tab+'"'+attr+'":"'+this._encode(strSave)+ '"';
-}
-}
-}
-if(this.hasChildren()){
-str += ','+rt+tab+'"items":[';
-for(var i=0;i<this.children.length;i++){
-str += this.children[i].serialize(debug,true);
-if(i<this.children.length-1){
-str += ',';
-}
-}
-str += rt+tab+']';
-}
-str += rt+tab+'}';
-if(!noEncoding){
-return encodeURIComponent(str);
-} else{
-return str;
-}
-},
-isBool:function(str){
-switch(str){
-case 'true':case 'false':
-case true:case false:
-case '1':case '0' :
-case 1:case 0 :
-return true;
-default :
-return false;
-}
-},
-showTooltip:function(){
-if(this.displayTooltip){
-this.tooltip.style.display='block';
-}
-},
-hideTooltip:function(){
-if(!this.displayTooltip){
-Element.hide(this.tooltip);
-}
-},
-removeDragDrop:function(){
-if(this.objDrag){
-this.objDrag.destroy();
-}
-Droppables.remove(this.txt);
-for(var i=0;i<this.children.length;i++){
-this.children[i].removeDragDrop();
-}
-},
-_manageMultiline:function(element,type,add){
-switch(type){
-case 2 :
-if(!add){
-Element.removeClassName(element,this.tree.imgMulti4);
-element.style.background='none';
-} else{
-Element.addClassName(element,this.tree.imgMulti4);
-element.style.background='url("'+this.tree.imgBase+this.tree.imgMulti2+'")';
-element.style.backgroundRepeat='repeat-y';
-}
-break;
-case 1 :
-default :
-if(!add){
-Element.removeClassName(element,this.tree.imgMulti3);
-element.style.background='none';
-} else{
-Element.addClassName(element,this.tree.imgMulti3);
-element.style.background='url("'+this.tree.imgBase+this.tree.imgMulti1+'")';
-element.style.backgroundRepeat='repeat-y';
-}
-}
-},
-_createTooltip:function(){
-var div=document.createElement('div');
-div.className=this.tree.classTooltip;
-div.innerHTML =(this.struct.tooltip)? this.struct.tooltip:'&nbsp;';
-Event.observe(div,'mouseover',this.showTooltip.bindAsEventListener(this),false);
-return div;
-},
-_manageAfterInsert:function(pos){
-this.tree._changeStruct(this);
-this._manageLine();
-if(this.tree.checkboxes&&this.tree.checkboxesThreeState){
-this.children[pos]._adjustParentCheck();
-}
-if(this.children.length==1&&!this.struct.canhavechildren){
-this.setOpenableIcon(true);
-}
-this.openIt((!this.tree.openedAfterAdd&&!this.isOpened())? false:true);
-},
-_movePartStruct:function(pos){
-var nb=this.struct.items.length-1;
-var newPos=0;
-for(var i=nb;i>=pos;i--){
-newPos=i+1;
-this.struct.items[newPos]=this.struct.items[i];
-this.children[newPos]=this.children[i];
-this.children[newPos].pos=newPos;
-}
-},
-_getCheckedBranches:function(checkedBranches,checked){
-if(!checkedBranches)checkedBranches=[];
-for(var i=0;i<this.children.length;i++){
-if(this.children[i].isChecked()== checked){
-checkedBranches.push(this.children[i]);
-}
-checkedBranches=this.children[i]._getCheckedBranches(checkedBranches,checked);
-}
-return checkedBranches;
-},
-_generate:function(){
-var i=this.bigTreeLoading;
-if(i<this.struct.items.length){
-if(this.tree.checkboxesThreeState&&this.struct.check&&typeof(this.struct.items[i].check)== 'undefined'){
-this.struct.items[i].check=1;
-}
-isNotFirst =(i>0)? true:false;
-isNotLast =(i<this.struct.items.length-1)? true:false;
-this.children[i]=new TafelTreeBranch((this.isRoot)? this:this.root,this,this.struct.items[i],this.level+1,isNotFirst,isNotLast,i);
-this.obj.appendChild(this.children[i].obj);
-this.openIt((this.tree.useCookie)?  this.isOpenedInCookie:this.struct.open);
-this.tree.loadRunning(this.children[i]);
-this.bigTreeLoading++;
-setTimeout(this._generate.bind(this),10);
-} else{
-this.loaded=true;
-}
-},
-_getPos:function(){
-pos=this.children.length;
-for(var i=0;i<this.children.length;i++){
-if(this.children[i].isAlwaysLast()){
-pos--;
-}
-}
-if(pos<0 )pos=0;
-return pos;
-},
-_adjustParentCheck:function(fromBranch){
-if(this.parent){
-var branch =(!fromBranch)? this.parent:this;
-while(branch&&branch.checkbox){
-branch.check(branch.hasAllChildrenChecked());
-branch=branch.parent;
-}
-}
-},
-_manageCheckThreeState:function(branch,checked){
-for(var i=0;i<branch.children.length;i++){
-if(branch.tree.checkboxes&&branch.children[i].checkbox){
-branch.children[i].check(checked);
-branch._manageCheckThreeState(branch.children[i],checked);
-}
-}
-},
-_getImgInfo:function(img){
-var url=img.src.split('/');
-var name=url[url.length-1].split('.');
-var obj ={
-'img': img,
-'number': name[0].charAt(name[0].length-1),
-'type': name[0].substr(0,name[0].length-1),
-'name': name[0],
-'fullName': url[url.length-1]
-};
-return obj;
-},
-_encode:function(str){
-var obj =(str === null)? '':str;
-return obj.toString().replace(/\"/g,'\\"');
-},
-_closeChild:function(img){
-try{
-img=this.getImgBeforeIcon().img;
-this.struct.open=false;
-if(this.isSelected()&& this.getCloseIconSelected()){
-this.img.src=this.tree.imgBase+this.getCloseIconSelected();
-} else{
-this.img.src=this.tree.imgBase+this.struct.imgclose;
-}
-for(var i=0;i<this.obj.childNodes.length;i++){
-if(this.obj.childNodes[i].nodeName.toLowerCase()== 'div'){
-Element.hide(this.obj.childNodes[i]);
-}
-}
-if(!this.isRoot){
-img.src =(this.hasSiblingsAfter)? this.tree.imgBase+this.tree.imgPlus3:this.tree.imgBase+this.tree.imgPlus2;
-} else{
-if(this.hasSiblingsBefore){
-img.src =(this.hasSiblingsAfter)? this.tree.imgBase+this.tree.imgPlus3:this.tree.imgBase+this.tree.imgPlus2;
-} else{
-img.src =(this.hasSiblingsAfter)? this.tree.imgBase+this.tree.imgPlus4:this.tree.imgBase+this.tree.imgPlus5;
-}
-}
-} catch(err){
-throw new Error('_closeChild(base): '+err.message);
-}
-},
-_openChild:function(img){
-try{
-img=this.getImgBeforeIcon().img;
-this.struct.open=true;
-if(this.isSelected()&& this.getOpenIconSelected()){
-this.img.src=this.tree.imgBase+this.getOpenIconSelected();
-} else{
-this.img.src=this.tree.imgBase+this.struct.imgopen;
-}
-for(var i=0;i<this.obj.childNodes.length;i++){
-if(this.obj.childNodes[i].nodeName.toLowerCase()== 'div'){
-this.obj.childNodes[i].style.display='';
-}
-}
-if(!this.isRoot){
-img.src =(this.hasSiblingsAfter)? this.tree.imgBase+this.tree.imgMinus3:this.tree.imgBase+this.tree.imgMinus2;
-} else{
-if(this.hasSiblingsBefore){
-img.src =(this.hasSiblingsAfter)? this.tree.imgBase+this.tree.imgMinus3:this.tree.imgBase+this.tree.imgMinus2;
-} else{
-img.src =(this.hasSiblingsAfter)? this.tree.imgBase+this.tree.imgMinus4:this.tree.imgBase+this.tree.imgMinus5;
-}
-}
-} catch(err){
-throw new Error('_openChild(base): '+err.message);
-}
-},
-_manageLine:function(){
-try{
-for(var i=0;i<this.children.length;i++){
-this.children[i].pos=i;
-if(i==this.children.length-1&&this.children[i].hasSiblingsAfter){
-this.children[i].hasSiblingsAfter=false;
-this._manageMultiline(this.children[i].beforeIcon,1,false);
-this._clearLine(this.children[i],this.level);
-}
-if(i<this.children.length-1&&!this.children[i].hasSiblingsAfter){
-this.children[i].hasSiblingsAfter=true;
-this._manageMultiline(this.children[i].beforeIcon,1,true);
-this._addLine(this.children[i],this.level);
-}
-}
-this.tree._changeStruct(this);
-} catch(err){
-throw new Error('_manageLine(base): '+err.message);
-}
-},
-_manageLineForRoot:function(add){
-for(var i=0;i<this.children.length;i++){
-this.children[i]._manageLineForRoot(add);
-}
-var td=this.table.getElementsByTagName('td')[0];
-var img=td.getElementsByTagName('img')[0];
-if(add){
-img.src=this.tree.imgBase+this.tree.imgLine1;
-} else{
-img.src=this.tree.imgBase+this.tree.imgEmpty;
-}
-},
-_clearLine:function(obj,level,ok){
-try{
-for(var i=0;i<obj.children.length;i++){
-this._clearLine(obj.children[i],level,true);
-}
-var img=obj.table.getElementsByTagName('img')[level+1];
-if(ok){
-img.src=this.tree.imgBase+this.tree.imgEmpty;
-if(this.tree.multiline){
-this._manageMultiline(img.parentNode,1,false);
-}
-} else{
-var old=obj.getImgBeforeIcon();
-switch(old.fullName.replace('_over','')){
-case this.tree.imgLine1 :
-case this.tree.imgLine3:newImg=this.tree.imgLine2;break;
-case this.tree.imgPlus1 :
-case this.tree.imgPlus3:newImg=this.tree.imgPlus2;break;
-case this.tree.imgMinus1:
-case this.tree.imgMinus3: newImg=this.tree.imgMinus2;break;
-default:
-newImg=obj.fullName;
-}
-img.src=this.tree.imgBase+newImg;
-}
-} catch(err){
-throw new Error('_clearLine(base): '+err.message);
-}
-},
-_addLine:function(obj,level,ok){
-try{
-for(var i=0;i<obj.children.length;i++){
-this._addLine(obj.children[i],level,true);
-}
-var img=obj.table.getElementsByTagName('img')[level+1];
-if(ok){
-img.src=this.tree.imgBase+this.tree.imgLine1;
-if(this.tree.multiline){
-this._manageMultiline(img.parentNode,1,true);
-}
-} else{
-var old=obj.getImgBeforeIcon();
-switch(old.fullName.replace('_over','')){
-case this.tree.imgLine1 :
-case this.tree.imgLine2:newImg=this.tree.imgLine3;break;
-case this.tree.imgPlus1 :
-case this.tree.imgPlus2:newImg=this.tree.imgPlus3;break;
-case this.tree.imgMinus1:
-case this.tree.imgMinus2: newImg=this.tree.imgMinus3;break;
-default:
-newImg=obj.fullName;
-}
-img.src=this.tree.imgBase+newImg;
-}
-} catch(err){
-throw new Error('_addLine(base): '+err.message);
-}
-},
-_isChild:function(child,parent){
-try{
-if(parent.idObj==child.idObj)return true;
-if(child.parent){
-return this._isChild(child.parent,parent);
-}
-return false;
-} catch(err){
-throw new Error('_isChild(base): '+err.message);
-}
-},
-_setProperties:function(){
-if((typeof(this.struct.img)== 'undefined')){
-this.struct.img =(this.tree.icons[0])? this.tree.icons[0]:this.tree.imgLine0;
-}
-if((typeof(this.struct.imgopen)== 'undefined')){
-this.struct.imgopen =(this.tree.icons[1])? this.tree.icons[1]:this.struct.img;
-}
-if((typeof(this.struct.imgclose)== 'undefined')){
-this.struct.imgclose =(this.tree.icons[2])? this.tree.icons[2]:this.struct.img;
-}
-if((typeof(this.struct.imgselected)== 'undefined')){
-this.struct.imgselected =(this.tree.iconsSelected[0])? this.tree.iconsSelected[0]:null;
-}
-if((typeof(this.struct.imgopenselected)== 'undefined')){
-this.struct.imgopenselected =(this.tree.iconsSelected[1])? this.tree.iconsSelected[1]:null;
-}
-if((typeof(this.struct.imgcloseselected)== 'undefined')){
-this.struct.imgcloseselected =(this.tree.iconsSelected[2])? this.tree.iconsSelected[2]:null;
-}
-if(typeof(this.struct.open)== 'undefined'){
-this.struct.open =(this.tree.useCookie&&this.tree.cookieOpened)? false:this.tree.openAll;
-} else if(this.tree.useCookie&&this.tree.cookieOpened){
-this.struct.open=false;
-}
-if(typeof(this.struct.check)== 'undefined' ||(this.tree.useCookie&&this.tree.cookieChecked))this.struct.check=0;
-if(typeof(this.struct.items)== 'undefined'){
-this.struct.items=[];
-}
-if(typeof(this.struct.canhavechildren)== 'undefined')this.struct.canhavechildren=false;
-if(typeof(this.struct.id)== 'undefined')this.struct.id=this.idObj;
-if(typeof(this.struct.acceptdrop)== 'undefined')this.struct.acceptdrop=true;
-if(typeof(this.struct.last)== 'undefined')this.struct.last=false;
-if(typeof(this.struct.editable)== 'undefined')this.struct.editable=this.tree.editableBranches;
-if(typeof(this.struct.checkbox)== 'undefined')this.struct.checkbox=true;
-},
-_setFunctions:function(){
-if(typeof(this.struct.ondragstarteffect)== 'undefined'){
-if(typeof(this.tree.onDragStartEffect)== 'function'){
-this.struct.ondragstarteffect=this.tree.onDragStartEffect;
-this.ondragstarteffectDefault=true;
-}
-} else{this.struct.ondragstarteffect=eval(this.struct.ondragstarteffect);}
-if(typeof(this.struct.ondragendeffect)== 'undefined'){
-if(typeof(this.tree.onDragEndEffect)== 'function'){
-this.struct.ondragendeffect=this.tree.onDragEndEffect;
-this.ondragendeffectDefault=true;
-}
-} else{this.struct.ondragendeffect=eval(this.struct.ondragendeffect);}
-if(typeof(this.struct.onerrorajax)== 'undefined'){
-if(typeof(this.tree.onErrorAjax)== 'function'){
-this.struct.onerrorajax=this.tree.onErrorAjax;
-this.onerrorajaxDefault=true;
-}
-} else{this.struct.onerrorajax=eval(this.struct.onerrorajax);}
-if(typeof(this.struct.oneditajax)== 'undefined'){
-if(this.tree.onEditAjax&&typeof(this.tree.onEditAjax.func)== 'function'){
-this.struct.oneditajax=this.tree.onEditAjax.func;
-this.struct.editlink=this.tree.onEditAjax.link;
-this.oneditajaxDefault=true;
-}
-} else{this.struct.oneditajax=eval(this.struct.oneditajax);}
-if(typeof(this.struct.onopenpopulate)== 'undefined'){
-if(this.tree.onOpenPopulate&&typeof(this.tree.onOpenPopulate.func)== 'function'){
-this.struct.onopenpopulate=this.tree.onOpenPopulate.func;
-this.struct.openlink=this.tree.onOpenPopulate.link;
-this.onopenpopulateDefault=true;
-}
-} else{this.struct.onopenpopulate=eval(this.struct.onopenpopulate);}
-if(typeof(this.struct.onedit)== 'undefined'){
-if(typeof(this.tree.onEdit)== 'function'){
-this.struct.onedit=this.tree.onEdit;
-this.oneditDefault=true;
-}
-} else{this.struct.onedit=eval(this.struct.onedit);}
-if(typeof(this.struct.oncheck)== 'undefined'){
-if(typeof(this.tree.onCheck)== 'function'){
-this.struct.oncheck=this.tree.onCheck;
-this.oncheckDefault=true;
-}
-} else{this.struct.oncheck=eval(this.struct.oncheck);}
-if(typeof(this.struct.onbeforecheck)== 'undefined'){
-if(typeof(this.tree.onBeforeCheck)== 'function'){
-this.struct.onbeforecheck=this.tree.onBeforeCheck;
-this.onbeforecheckDefault=true;
-}
-} else{this.struct.onbeforecheck=eval(this.struct.onbeforecheck);}
-if(typeof(this.struct.onopen)== 'undefined'){
-if(typeof(this.tree.onOpen)== 'function'){
-this.struct.onopen=this.tree.onOpen;
-this.onopenDefault=true;
-}
-} else{this.struct.onopen=eval(this.struct.onopen);}
-if(typeof(this.struct.onbeforeopen)== 'undefined'){
-if(typeof(this.tree.onBeforeOpen)== 'function'){
-this.struct.onbeforeopen=this.tree.onBeforeOpen;
-this.onbeforeopenDefault=true;
-}
-} else{this.struct.onbeforeopen=eval(this.struct.onbeforeopen);}
-if(typeof(this.struct.onmouseover)== 'undefined'){
-if(typeof(this.tree.onMouseOver)== 'function'){
-this.struct.onmouseover=this.tree.onMouseOver;
-this.onmouseoverDefault=true;
-}
-} else{this.struct.onmouseover=eval(this.struct.onmouseover);}
-if(typeof(this.struct.onmouseout)== 'undefined'){
-if(typeof(this.tree.onMouseOut)== 'function'){
-this.struct.onmouseout=this.tree.onMouseOut;
-this.onmouseoutDefault=true;
-}
-} else{this.struct.onmouseout=eval(this.struct.onmouseout);}
-if(typeof(this.struct.onmousedown)== 'undefined'){
-if(typeof(this.tree.onMouseDown)== 'function'){
-this.struct.onmousedown=this.tree.onMouseDown;
-this.onmousedownDefault=true;
-}
-} else{this.struct.onmousedown=eval(this.struct.onmousedown);}
-if(typeof(this.struct.onmouseup)== 'undefined'){
-if(typeof(this.tree.onMouseUp)== 'function'){
-this.struct.onmouseup=this.tree.onMouseUp;
-this.onmouseupDefault=true;
-}
-} else{this.struct.onmouseup=eval(this.struct.onmouseup);}
-if(typeof(this.struct.onclick)== 'undefined'){
-if(typeof(this.tree.onClick)== 'function'){
-this.struct.onclick=this.tree.onClick;
-this.onclickDefault=true;
-}
-} else{this.struct.onclick=eval(this.struct.onclick);}
-if(typeof(this.struct.ondblclick)== 'undefined'){
-if(typeof(this.tree.onDblClick)== 'function'){
-this.struct.ondblclick=this.tree.onDblClick;
-this.ondblclickDefault=true;
-}
-} else{this.struct.ondblclick=eval(this.struct.ondblclick);}
-},
-_setActions:function(){
-if(this.struct.select){
-this.select();
-}
-},
-_setEvents:function(event,tdImg){
-Event.observe(this.txt,'mousedown',this.setMouseDown.bindAsEventListener(this),false);
-Event.observe(this.txt,'mouseup',this.setMouseUp.bindAsEventListener(this),false);
-if(typeof(this.struct.onclick)== 'function'){
-Event.observe(event,'click',this.setClick.bindAsEventListener(this),false);
-}
-if(typeof(this.struct.ondblclick)== 'function'||this.struct.editable){
-Event.observe(event,'dblclick',this.setDblClick.bindAsEventListener(this),false);
-}
-if(typeof(this.struct.onmouseover)== 'function'){
-Event.observe(event,'mouseover',this.setMouseOver.bindAsEventListener(this),false);
-}
-if(typeof(this.struct.onmouseout)== 'function'){
-Event.observe(event,'mouseout',this.setMouseOut.bindAsEventListener(this),false);
-}
-if(this.struct.editable &&(typeof(this.struct.onedit)== 'function'||typeof(this.struct.oneditajax)== 'function')){
-this.editableInput=document.createElement('input');
-this.editableInput.setAttribute('type','text');
-this.editableInput.setAttribute('autocomplete','off');
-this.editableInput.className=this.tree.classEditable;
-event.appendChild(this.editableInput);
-Event.observe(this.editableInput,'blur',this.hideEditable.bindAsEventListener(this),false);
-}
-if(!this.isRoot){
-if(this.struct.draggable &&(typeof(this.struct.ondrop)== 'function'||typeof(this.struct.ondropajax)== 'function')){
-this.objDrag=new Draggable(this.txt,{
-revert: this.tree.dragRevert,
-starteffect:this.ondragstarteffect.bindAsEventListener(this),
-endeffect:this.ondragendeffect.bindAsEventListener(this)
-});
-Element.addClassName(this.txt,this.tree.classDrag);
-}
-}
-if(this.struct.acceptdrop){
-Droppables.add(this.txt,{hoverclass: this.tree.classDragOver,onDrop: this.setDrop.bindAsEventListener(this)});
-}
-if(this.struct.tooltip){
-Event.observe(event,'mouseover',this.evt_showTooltip.bindAsEventListener(this),false);
-Event.observe(event,'mouseout',this.evt_hideTooltip.bindAsEventListener(this),false);
-}
-if(this.tree.checkboxes&&this.struct.checkbox){
-if(this.struct.check==1)imgc=this.tree.imgCheck2;
-else if(this.struct.check==-1)imgc=this.tree.imgCheck3;
-else imgc=this.tree.imgCheck1;
-this.checkbox=document.createElement('img');
-this.checkbox.src=this.tree.imgBase+imgc;
-tdImg.appendChild(this.checkbox);
-Event.observe(this.checkbox,'click',this.checkOnClick.bindAsEventListener(this),false);
-Event.observe(this.checkbox,'mouseover',this.evt_openMouseOver.bindAsEventListener(this),false);
-Event.observe(this.checkbox,'mouseout',this.evt_openMouseOut.bindAsEventListener(this),false);
-} else if(this.tree.checkboxes){
-var vide=document.createElement('img');
-vide.src=this.tree.imgBase+this.tree.imgEmpty;
-tdImg.appendChild(vide);
-}
-},
-_getImgBeforeIcon:function(){
-try{
-var td=document.createElement('td');
-var img=document.createElement('img');
-Element.addClassName(img,this.tree.classOpenable);
-if(this.hasSiblingsAfter){
-if(!this.hasChildren()){
-if(this.isRoot){
-img.src=this.tree.imgBase +((this.hasSiblingsBefore)? this.tree.imgLine3:this.tree.imgLine4);
-} else{
-img.src=this.tree.imgBase+this.tree.imgLine3;
-}
-} else{
-Event.observe(img,'click',this.setOpen.bindAsEventListener(this),false);
-Event.observe(img,'mouseover',this.evt_openMouseOver.bindAsEventListener(this),false);
-Event.observe(img,'mouseout',this.evt_openMouseOut.bindAsEventListener(this),false);
-if(this.isRoot){
-img.src=this.tree.imgBase +((this.hasSiblingsBefore)? this.tree.imgMinus3:this.tree.imgMinus4);
-} else{
-img.src=this.tree.imgBase+this.tree.imgMinus3;
-}
-}
-if(this.tree.multiline){
-this._manageMultiline(td,(this.isRoot ? 2:1),true);
-}
-} else{
-if(!this.hasChildren()){
-if(this.isRoot){
-img.src=this.tree.imgBase +((this.hasSiblingsBefore)? this.tree.imgLine2:this.tree.imgEmpty);
-} else{
-img.src=this.tree.imgBase+this.tree.imgLine2;
-}
-} else{
-Event.observe(img,'click',this.setOpen.bindAsEventListener(this),false);
-Event.observe(img,'mouseover',this.evt_openMouseOver.bindAsEventListener(this),false);
-Event.observe(img,'mouseout',this.evt_openMouseOut.bindAsEventListener(this),false);
-if(this.isRoot){
-img.src=this.tree.imgBase +((this.hasSiblingsBefore)? this.tree.imgMinus2:this.tree.imgMinus5);
-} else{
-img.src=this.tree.imgBase+this.tree.imgMinus2;
-}
-}
-}
-td.appendChild(img);
-return td;
-} catch(err){
-throw new Error('_getImgBeforeIcon(base): '+err.message);
-}
-},
-_setChildren:function(root){
-if(this.hasChildren()){
-if(this.tree.bigTreeLoading>=0){
-this.loaded=false;
-this.bigTreeLoading=0;
-setTimeout(this._generate.bind(this),10);
-} else{
-for(var i=0;i<this.struct.items.length;i++){
-if(this.tree.checkboxesThreeState&&this.struct.check&&typeof(this.struct.items[i].check)== 'undefined'){
-this.struct.items[i].check=1;
-}
-isNotFirst =(i>0)? true:false;
-isNotLast =(i<this.struct.items.length-1)? true:false;
-this.children[i]=new TafelTreeBranch(root,this,this.struct.items[i],this.level+1,isNotFirst,isNotLast,i);
-this.obj.appendChild(this.children[i].obj);
-}
-this.openIt(this.struct.open);
-}
-}
-},
-_setWaitImg:function(branch,wait,localPropagationStop){
-try{
-this.inProcess=wait;
-if(wait){
-branch.oldImgSrc=branch.img.src;
-branch.img.src=branch.tree.imgBase+branch.tree.imgWait;
-branch.eventable=false;
-} else{
-branch.eventable=true;
-branch.img.src=branch.oldImgSrc;
-}
-if(this.tree.propagation&&!localPropagationStop){
-for(var i=0;i<branch.children.length;i++){
-this._setWaitImg(branch.children[i],wait);
-}
-}
-} catch(err){
-throw new Error('_setWaitImg(base): '+err.message);
-}
-},
-_openPopulate:function(ev){
-try{
-this._setWaitImg(this,true);
-var params='branch='+this.serialize()+ '&branch_id='+this.getId()+ '&tree_id='+this.tree.id;
-var otherParams=this.tree.getURLParams(this.struct.openlink);
-for(var i=0;i<otherParams.length;i++){
-params += '&'+otherParams[i].name+'='+otherParams[i].value;
-}
-new Ajax.Updater(
-this.tree.ajaxObj,
-this.struct.openlink,
-{
-'method'    :'post',
-'parameters':params,
-'evalScripts': true,
-'onComplete':function(event){this._completeOpenPopulate(event);}.bind(this),
-'onFailure':function(event){this._failureOpenPopulate(event);}.bind(this)
-}
-);
-} catch(err){
-this._setWaitImg(this,false);
-throw('_openPopulate(base): '+err.message);
-}
-},
-_failureOpenPopulate:function(){
-this._setWaitImg(this,false);
-if(typeof(this.struct.onerrorajax)== 'function'){
-this.struct.onerrorajax('open','failure request',this);
-}
-},
-_completeOpenPopulate:function(response){
-try{
-this._setWaitImg(this,false);
-var rep=this.struct.onopenpopulate(this,response.responseText);
-if(rep){
-rep =(rep === true)? response.responseText:rep;
-var items=eval(rep);
-if(items){
-var ok=[];
-for(var i=0 ;i<items.length;i++){
-if(this.tree.getBranchById(items[i].id))continue;
-if(typeof(items[i].id)== 'undefined'||typeof(items[i].txt)== 'undefined'){
-throw new Error(TAFELTREE_WRONG_BRANCH_STRUCTURE);
-}
-ok.push(this.insertIntoLast(items[i]));
-}
-if(this.tree.useCookie&&this.tree.cookieOpened&&this.tree.reopenFromServer){
-var okay=false;
-for(var o=0;o<ok.length;o++){
-okay=false;
-for(var i=0;i<this.tree.cookieOpened.length;i++){
-if(this.tree.cookieOpened[i]==ok[o].getId()){
-okay=true;
-break;
-}
-}
-if(okay){
-if(typeof(ok[o].struct.onopenpopulate)== 'function'&&ok[o].eventable){
-ok[o]._openPopulate();
-ok[o].openIt(true);
-}
-}
-}
-}
-}
-}
-} catch(err){
-this._setWaitImg(this,false);
-if(typeof(this.struct.onerrorajax)== 'function'){
-this.struct.onerrorajax('open',response.responseText,this);
-} else{
-alert('_completeOpenPopulate('+response.responseText+'): '+err.message);
-}
-}
-},
-_setDropAjax:function(newParentObj,asSibling,copydrag,ev){
-try{
-this._setWaitImg(this,true);
-var sibling =(asSibling)? 1:0;
-var cdrag =(copydrag)? 1:0;
-var params='drag='+this.serialize()+ '&drag_id='+this.getId()+ '&drop='+newParentObj.serialize()+ '&drop_id='+newParentObj.getId();
-params += '&treedrag_id='+this.tree.id+'&treedrop_id='+newParentObj.tree.id+'&sibling='+sibling+'&copydrag='+cdrag;
-if(cdrag){
-var cdragId=this.id+this.tree.copyNameBreak+this.tree.idTree;
-params += '&copydrag_id='+cdragId;
-}
-var otherParams=this.tree.getURLParams(this.struct.droplink);
-for(var i=0;i<otherParams.length;i++){
-params += '&'+otherParams[i].name+'='+otherParams[i].value;
-}
-this.newParent=newParentObj;
-this.asSibling=asSibling;
-this.copyDrag=cdrag;
-new Ajax.Updater(
-this.tree.ajaxObj,
-this.struct.droplink,
-{
-'method'    :'post',
-'parameters':params,
-'evalScripts': true,
-'onComplete':function(event){this._completeDropAjax(event);}.bind(this),
-'onFailure':function(event){this._failureDropAjax(event);}.bind(this)
-}
-);
-} catch(err){
-this._setWaitImg(this,false);
-throw('_setDropAjax(base): '+err.message);
-}
-},
-_failureDropAjax:function(){
-this._setWaitImg(this,false);
-if(typeof(this.struct.onerrorajax)== 'function'){
-this.struct.onerrorajax('drop','failure request',this,this.newParent);
-}
-},
-_completeDropAjax:function(response){
-try{
-if(this.struct.ondropajax(this,this.newParent,response.responseText,false,null)){
-var newBranch=null;
-if(!this.asSibling){
-if(!this.copyDrag){
-this.move(this.newParent);
-} else{
-newBranch=this.newParent.insertIntoLast(this.clone());
-}
-} else{
-if(!this.copyDrag){
-this.moveBefore(this.newParent);
-} else{
-newBranch=this.newParent.insertBefore(this.clone());
-}
-}
-this.struct.ondropajax(this,this.newParent,response.responseText,true,newBranch);
-}
-this._setWaitImg(this,false);
-} catch(err){
-if(typeof(this.struct.onerrorajax)== 'function'){
-this.struct.onerrorajax('drop',response.responseText,this,this.newParent);
-} else{
-alert('_completeDropAjax(base): '+err.message);
-}
-}
-},
-_editAjax:function(newValue,oldValue,ev){
-try{
-this._setWaitImg(this,true,true);
-var params='branch='+this.serialize()+ '&branch_id='+this.getId()+ '&tree_id='+this.tree.id;
-params += '&new_value='+newValue+'&old_value='+oldValue;
-var otherParams=this.tree.getURLParams(this.struct.editlink);
-for(var i=0;i<otherParams.length;i++){
-params += '&'+otherParams[i].name+'='+otherParams[i].value;
-}
-new Ajax.Updater(
-this.tree.ajaxObj,
-this.struct.editlink,
-{
-'method'    :'post',
-'parameters':params,
-'evalScripts': true,
-'onComplete':function(event){this._completeEditAjax(event);}.bind(this),
-'onFailure':function(event){this._failureEditAjax(event);}.bind(this)
-}
-);
-} catch(err){
-this._setWaitImg(this,false,true);
-throw('_editAjax(base): '+err.message);
-}
-},
-_failureEditAjax:function(){
-this._setWaitImg(this,false);
-if(typeof(this.struct.onerrorajax)== 'function'){
-this.struct.onerrorajax('edit','failure request',this);
-}
-},
-_completeEditAjax:function(response){
-try{
-this._setWaitImg(this,false,true);
-var rep=this.struct.oneditajax(this,response.responseText,this.txt.innerHTML);
-if(rep){
-this.setText((rep === true ? response.responseText:rep));
-}
-this.hideEditableElement();
-} catch(err){
-this._setWaitImg(this,false,true);
-if(typeof(this.struct.onerrorajax)== 'function'){
-this.struct.onerrorajax('edit',response.responseText,this);
-} else{
-alert('_completeOpenPopulate('+response.responseText+'): '+err.message);
-}
-}
-},
-evt_openMouseOver:function(ev){
-if(Event.element){
-var obj=Event.element(ev);
-var img=this._getImgInfo(obj);
-obj.src=this.tree.imgBase+img.type+'_over'+img.number+'.gif';
-}
-},
-evt_openMouseOut:function(ev){
-if(Event.element){
-var obj=Event.element(ev);
-var img=this._getImgInfo(obj);
-obj.src=this.tree.imgBase+img.type.replace(/_over/g,'')+ img.number+'.gif';
-}
-},
-evt_showTooltip:function(ev){
-this.displayTooltip=true;
-setTimeout(this.showTooltip.bind(this),this.tree.durationTooltipShow);
-},
-evt_hideTooltip:function(ev){
-this.displayTooltip=false;
-setTimeout(this.hideTooltip.bind(this),this.tree.durationTooltipHide);
-},
-setMouseOver:function(ev){
-if(typeof(this.struct.onmouseover)== 'function'){
-return this.struct.onmouseover(this,ev);
-}
-},
-setMouseOut:function(ev){
-if(typeof(this.struct.onmouseout)== 'function'){
-return this.struct.onmouseout(this,ev);
-}
-},
-setMouseDown:function(ev){
-this.tree.evt_setAsCurrent(ev);
-if(this.tree.selectedBranchShowed){
-if(!this.isSelected()){
-this.select(ev);
-this.okayForUnselect=false;
-} else{
-this.okayForUnselect=true;
-}
-}
-if(this.tooltip){
-this.displayTooltip=false;
-this.hideTooltip();
-}
-if(typeof(this.struct.onmousedown)== 'function'){
-this.struct.onmousedown(this,ev);
-}
-},
-setMouseUp:function(ev){
-if(this.tree.lastEdited){
-this.tree.lastEdited.hideEditable(ev);
-}
-if(this.isSelected()&& this.okayForUnselect){
-return true;
-}
-this.okayForUnselect=true;
-if(typeof(this.struct.onmouseup)== 'function'){
-this.struct.onmouseup(this,ev);
-}
-},
-setClick:function(ev){
-if(this.tree.lastEdited)return false;
-if(typeof(this.struct.onclick)== 'function'){
-return this.struct.onclick(this,ev);
-}
-},
-checkOnClick:function(ev){
-if(this.tree.checkboxes&&this.checkbox){
-var checked =(this.isChecked()> 0)? 0:1;
-var ok=true;
-if(typeof(this.struct.onbeforecheck)== 'function'){
-ok=this.struct.onbeforecheck(this,checked,ev);
-}
-if(ok){
-this.check(checked);
-if(this.tree.checkboxesThreeState){
-this._manageCheckThreeState(this,checked);
-this._adjustParentCheck();
-}
-if(typeof(this.struct.oncheck)== 'function'){
-this.struct.oncheck(this,checked,ev);
-}
-}
-}
-},
-setOpen:function(ev){
-if(!this.hasChildren())return false;
-var ok=true;
-if(typeof(this.struct.onbeforeopen)== 'function'){
-ok=this.struct.onbeforeopen(this,this.struct.open,ev);
-}
-if(!ok)return false;
-if(typeof(this.struct.onopenpopulate)== 'function'&&!this.eventable)return false;
-this.openIt((this.isOpened())? false:true);
-if(typeof(this.struct.onopen)== 'function'){
-return this.struct.onopen(this,this.struct.open,ev);
-} else if(typeof(this.struct.onopenpopulate)== 'function'&&this.isOpened()&& this.children.length==0){
-if(!this.eventable)return false;
-return this._openPopulate(ev);
-}
-return true;
-},
-ondragstarteffect:function(drag,dragbis){
-var dragObj=this.tree.getBranchByIdObj(drag.id);
-if(!dragObj){
-for(var i=0;i<this.tree.otherTrees.length;i++){
-dragObj=this.tree.otherTrees[i].getBranchByIdObj(drag.id);
-if(dragObj)break;
-}
-if(!dragObj)return false;
-}
-if(typeof(dragObj.struct.ondragstarteffect)== 'function'){
-var ok=dragObj.struct.ondragstarteffect(dragObj);
-}
-},
-ondragendeffect:function(drag,dragbis){
-var dragObj=this.tree.getBranchByIdObj(drag.id);
-if(!dragObj){
-for(var i=0;i<this.tree.otherTrees.length;i++){
-dragObj=this.tree.otherTrees[i].getBranchByIdObj(drag.id);
-if(dragObj)break;
-}
-if(!dragObj)return false;
-}
-if(typeof(dragObj.struct.ondragendeffect)== 'function'){
-var ok=dragObj.struct.ondragendeffect(dragObj);
-}
-},
-setDrop:function(drag,html,html2,ev){
-var dragObj=this.tree.getBranchByIdObj(drag.id);
-if(!dragObj){
-for(var i=0;i<this.tree.otherTrees.length;i++){
-dragObj=this.tree.otherTrees[i].getBranchByIdObj(drag.id);
-if(dragObj)break;
-}
-if(!dragObj)return false;
-}
-var alt =(dragObj.tree.dropALT)? TafelTreeManager.altOn(ev): false;
-var ctrl =(dragObj.tree.dropCTRL)? TafelTreeManager.ctrlOn(ev)|| TafelTreeManager.metaOn(ev): false;
-var ok=true;
-if((this.tree.id==dragObj.tree.id&&this.isChild(dragObj))|| !dragObj.eventable||!this.eventable)return false;
-if(typeof(dragObj.struct.ondrop)== 'function'){
-ok=dragObj.struct.ondrop(dragObj,this,false,null,ev);
-}
-if(ok){
-var asSibling =((dragObj.tree.behaviourDrop==1||dragObj.tree.behaviourDrop==3)&& !alt ||(dragObj.tree.behaviourDrop==0||dragObj.tree.behaviourDrop==2)&& alt)? true:false;
-var copyDrag =((dragObj.tree.behaviourDrop==2||dragObj.tree.behaviourDrop==3)&& !ctrl ||(dragObj.tree.behaviourDrop==0||dragObj.tree.behaviourDrop==1)&& ctrl)? true:false;
-if(!asSibling&&typeof(this.struct.onopenpopulate)== 'function'&&!this.isOpened()&& this.children.length==0){
-this._openPopulate(ev);
-}
-if(typeof(dragObj.struct.ondropajax)== 'function'){
-dragObj._setDropAjax(this,asSibling,copyDrag,ev);
-} else{
-var newBranch=null;
-if(!asSibling){
-if(!copyDrag){
-dragObj.move(this);
-} else{
-newBranch=this.insertIntoLast(dragObj.clone());
-}
-} else{
-if(!copyDrag){
-dragObj.moveBefore(this);
-} else{
-newBranch=this.insertBefore(dragObj.clone());
-}
-}
-if(typeof(dragObj.struct.ondrop)== 'function'){
-ok=dragObj.struct.ondrop(dragObj,this,true,newBranch,ev);
-}
-}
-}
-},
-setDblClick:function(ev){
-if(this.tree.lastEdited)return false;
-if(typeof(this.struct.ondblclick)== 'function'){
-this.struct.ondblclick(this,ev);
-}
-if(this.struct.editable&&this.editableInput){
-if(!this.tree.lastEdited||this.tree.lastEdited.getId()!= this.getId()){
-this.editableInput.style.width =(this.txt.offsetWidth+20)+ 'px';
-}
-Element.hide(this.txt);
-this.editableInput.value=this.txt.innerHTML;
-this.editableInput.style.display='block';
-this.editableInput.focus();
-this.tree.lastEdited=this;
-}
-},
-hideEditable:function(ev){
-if(this.editableInput&&this.struct.editable){
-var obj=this.editableInput;
-var value=obj.value;
-if(this.struct.oneditajax){
-if(!this.eventable)return false;
-this._editAjax(obj.value,this.txt.innerHTML,ev);
-} else{
-if(typeof(this.struct.onedit)== 'function'){
-value=this.struct.onedit(this,obj.value,this.txt.innerHTML,ev);
-}
-this.setText(value);
-this.hideEditableElement();
-}
-return true;
-}
-return false;
-},
-hideEditableElement:function(){
-Element.hide(this.editableInput);
-this.editableInput.value=this.getText();
-this.txt.style.display='block';
-this.tree.lastEdited=null;
-}
-};
-var TafelTreeRoot=Class.create();
-TafelTreeRoot.prototype=Object.extend(new TafelTreeBaseBranch,{
-initialize:function(tree,struct,level,before,after,pos){
-this.isRoot=true;
-this.tree=tree;
-this.pos=pos;
-this.level=level;
-this.struct=struct;
-this.tree.idTree++;
-this.idObj=this.tree.idTreeBranch+this.tree.idTree;
-this.hasSiblingsBefore=before;
-this.hasSiblingsAfter=after;
-this.eventable=true;
-this.loaded=true;
-this.children=[];
-this.copiedTimes=0;
-this._setProperties();
-this._setFunctions();
-this.obj=this._addRoot();
-this.content=this._addContent();
-this.obj.appendChild(this.table);
-this._setChildren(this);
-this._setActions();
-},
-insertBefore:function(item){
-if(this.parent)return false;
-var pos=this.pos;
-var posBefore=pos+1;
-var isNotFirst =(pos==0)? false:true;
-this._movePartStructRoot(pos);
-this.tree.roots[pos]=new TafelTreeRoot(this.tree,item,this.level,isNotFirst,true,pos);
-this.tree.div.insertBefore(this.tree.roots[pos].obj,this.obj);
-this._manageAfterRootInsert(pos);
-return this.tree.roots[pos];
-},
-insertAfter:function(item){
-if(this.parent)return false;
-var pos=this.pos+1;
-var posBefore=pos+1;
-var isNotLast =(pos==this.tree.roots.length)? false:true;
-this._movePartStructRoot(pos);
-this.tree.roots[pos]=new TafelTreeRoot(this.tree,item,this.level,true,isNotLast,pos);
-try{
-this.tree.div.insertBefore(this.tree.roots[pos].obj,this.tree.roots[posBefore].obj);
-} catch(err){
-this.tree.div.appendChild(this.tree.roots[pos].obj);
-}
-this._manageAfterRootInsert(pos);
-return this.tree.roots[pos];
-},
-_manageAfterRootInsert:function(pos){
-for(var i=0;i<this.tree.roots.length;i++){
-if(i<this.tree.roots.length-1){
-this.tree.roots[i].hasSiblingsAfter=true;
-}
-if(i>0){
-this.tree.roots[i].hasSiblingsBefore=true;
-}
-}
-for(var i=0;i<this.children.length;i++){
-this.children[i]._manageLineForRoot(this.hasSiblingsAfter);
-}
-},
-_movePartStructRoot:function(pos){
-var nb=this.tree.roots.length-1;
-var newPos=0;
-for(var i=nb;i>=pos;i--){
-newPos=i+1;
-this.tree.roots[newPos]=this.tree.roots[i];
-this.tree.roots[newPos].pos=newPos;
-}
-},
-_addRoot:function(){
-var div=document.createElement('div');
-div.className=this.tree.classTreeRoot;
-return div;
-},
-_addContent:function(){
-var table=document.createElement('table');
-var tbody=document.createElement('tbody');
-var tr=document.createElement('tr');
-var tdImg=document.createElement('td');
-var tdTxt=document.createElement('td');
-var img=document.createElement('img');
-var span=document.createElement('div');
-var txt=document.createTextNode(txt);
-img.src=this.tree.imgBase+this.struct.img;
-span.innerHTML=this.struct.txt;
-if(this.struct.title){
-span.setAttribute('title',this.struct.title);
-}
-span.setAttribute('id',this.idObj);
-Element.addClassName(span,this.tree.classContent);
-Element.addClassName(tdTxt,this.tree.classCanevas);
-tdTxt.appendChild(span);
-tdImg.appendChild(img);
-if(this.struct.tooltip){
-this.tooltip=this._createTooltip();
-tdTxt.appendChild(this.tooltip);
-}
-this.tdImg=tdImg;
-this.beforeIcon=this._getImgBeforeIcon();
-tr.appendChild(this.beforeIcon);
-tr.appendChild(tdImg);
-tr.appendChild(tdTxt);
-tbody.appendChild(tr);
-table.appendChild(tbody);
-if(this.tree.multiline){
-tdTxt.style.whiteSpace='normal';
-if(this.hasChildren())this._manageMultiline(this.tdImg,2,true);
-}
-if(this.struct.style){
-Element.addClassName(tdTxt,this.struct.style);
-}
-this.txt=span;
-this.img=img;
-this.table=table;
-this._setEvents(tdTxt,tdImg);
-return tbody;
-}
-});
-var TafelTreeBranch=Class.create();
-TafelTreeBranch.prototype=Object.extend(new TafelTreeBaseBranch,{
-initialize:function(root,parent,struct,level,before,after,pos){
-this.tree=root.tree;
-this.root=root;
-this.level=level;
-this.pos=pos;
-this.parent=parent;
-this.tree.idTree++;
-this.idObj=this.tree.idTreeBranch+this.tree.idTree;
-this.hasSiblingsBefore=before;
-this.hasSiblingsAfter=after;
-this.struct=struct;
-this.eventable=true;
-this.loaded=true;
-this.inProcess=false;
-this.children=[];
-this.copiedTimes=0;
-if(typeof(this.struct.draggable)== 'undefined')this.struct.draggable=1;
-this._setProperties();
-if(typeof(this.struct.ondrop)== 'undefined'){
-if(typeof(this.tree.onDrop)== 'function'){
-this.struct.ondrop=this.tree.onDrop;
-this.ondropDefault=true;
-}
-} else{this.struct.ondrop=eval(this.struct.ondrop);}
-if(typeof(this.struct.ondropajax)== 'undefined'){
-if(this.tree.onDropAjax&&typeof(this.tree.onDropAjax.func)== 'function'){
-this.struct.ondropajax=this.tree.onDropAjax.func;
-this.struct.droplink=this.tree.onDropAjax.link;
-this.ondropajaxDefault=true;
-}
-} else{this.struct.ondropajax=eval(this.struct.ondropajax);}
-this._setFunctions();
-this.obj=this._addBranch();
-this.content=this._addContent();
-this.obj.appendChild(this.table);
-this._setChildren(root);
-this._setActions();
-},
-insertBefore:function(item){
-if(!this.parent)return false;
-var pos=this.pos;
-var posBefore=pos+1;
-var isNotFirst =(pos==0)? false:true;
-this.parent._movePartStruct(pos);
-this.parent.struct.items[pos]=item;
-this.parent.children[pos]=new TafelTreeBranch(this.root,this.parent,item,this.level,isNotFirst,true,pos);
-this.parent.obj.insertBefore(this.parent.children[pos].obj,this.obj);
-this.parent._manageAfterInsert(pos);
-return this.parent.children[pos];
-},
-insertAfter:function(item){
-if(!this.parent)return false;
-var pos=this.pos+1;
-var posBefore=pos+1;
-var isNotLast =(pos==this.parent.children.length)? false:true;
-this.parent._movePartStruct(pos);
-this.parent.struct.items[pos]=item;
-this.parent.children[pos]=new TafelTreeBranch(this.root,this.parent,item,this.level,true,isNotLast,pos);
-try{
-this.parent.obj.insertBefore(this.parent.children[pos].obj,this.parent.children[posBefore].obj);
-} catch(err){
-this.parent.obj.appendChild(this.parent.children[pos].obj);
-}
-this.parent._manageAfterInsert(pos);
-return this.parent.children[pos];
-},
-move:function(hereb){
-return this.moveIntoLast(hereb);
-},
-moveIntoLast:function(hereb){
-var here=this.tree.getBranchById(hereb);
-if(!here)return false
-var pos=here._getPos();
-var id=this.getId();
-var txt=this.getText();
-if(pos==here.children.length){
-obj=here.insertIntoLast(this.struct);
-} else{
-obj=here.children[pos].insertBefore(this.struct);
-}
-this.tree.removeBranch(this);
-return obj;
-},
-moveIntoFirst:function(hereb){
-var here=this.tree.getBranchById(hereb);
-if(!here)return false
-var id=this.getId();
-var txt=this.getText();
-var obj=here.insertIntoFirst(this.struct);
-this.tree.removeBranch(this);
-return obj;
-},
-moveBefore:function(hereb){
-var here=this.tree.getBranchById(hereb);
-if(!here)return false;
-var id=this.getId();
-var txt=this.getText();
-var obj=here.insertBefore(this.struct);
-this.tree.removeBranch(this);
-return obj;
-},
-moveAfter:function(hereb){
-var here=this.tree.getBranchById(hereb);
-if(!here)return false;
-var id=this.getId();
-var txt=this.getText();
-var obj=here.insertAfter(this.struct);
-this.tree.removeBranch(this);
-return obj;
-},
-_addBranch:function(){
-var div=document.createElement('div');
-div.className=this.tree.classTreeBranch;
-return div;
-},
-_addContent:function(){
-var table=document.createElement('table');
-var tbody=document.createElement('tbody');
-var tr=document.createElement('tr');
-var img=document.createElement('img');
-var imgs=this._addImgs();
-var nbImgs=imgs.length;
-for(var i=nbImgs-1;i>=0;i--){
-tr.appendChild(imgs[i]);
-}
-this.beforeIcon=this._getImgBeforeIcon();
-tr.appendChild(this.beforeIcon);
-var tdImg=document.createElement('td');
-var tdTxt=document.createElement('td');
-var img=document.createElement('img');
-var span=document.createElement('div');
-span.innerHTML=this.struct.txt;
-if(this.struct.title){
-span.setAttribute('title',this.struct.title);
-}
-span.setAttribute('id',this.idObj);
-Element.addClassName(span,this.tree.classContent);
-Element.addClassName(tdTxt,this.tree.classCanevas);
-img.src=this.tree.imgBase+this.struct.img;
-this.tdImg=tdImg;
-if(this.tree.multiline){
-tdTxt.style.whiteSpace='normal';
-if(this.hasChildren())this._manageMultiline(this.tdImg,2,true);
-}
-if(this.struct.style){
-Element.addClassName(tdTxt,this.struct.style);
-}
-tdTxt.appendChild(span);
-if(this.struct.tooltip){
-this.tooltip=this._createTooltip();
-tdTxt.appendChild(this.tooltip);
-}
-tdImg.appendChild(img);
-tr.appendChild(tdImg);
-tr.appendChild(tdTxt);
-tbody.appendChild(tr);
-table.appendChild(tbody);
-this.tdImg=tdImg;
-this.txt=span;
-this.img=img;
-this.table=table;
-this._setEvents(tdTxt,tdImg);
-return tbody;
-},
-_addImgs:function(){
-var obj=this.parent;
-var cpt=0;
-var imgs=[];
-var img=null;
-var td=null;
-while(obj.parent){
-td=document.createElement('td');
-img=document.createElement('img');
-if(!obj.hasSiblingsAfter){
-img.src=this.tree.imgBase+this.tree.imgEmpty;
-} else{
-img.src=this.tree.imgBase+this.tree.imgLine1;
-if(this.tree.multiline){
-this._manageMultiline(td,1,true);
-}
-}
-td.appendChild(img);
-imgs[cpt]=td;
-cpt++;
-obj=obj.parent;
-}
-td=document.createElement('td');
-img=document.createElement('img');
-if(!this.root.hasSiblingsAfter){
-img.src=this.tree.imgBase+this.tree.imgEmpty;
-} else{
-img.src=this.tree.imgBase+this.tree.imgLine1;
-if(this.tree.multiline){
-this._manageMultiline(td,1,true);
-}
-}
-td.appendChild(img);
-imgs[cpt]=td;
-return imgs;
-}
-});
-var TafelTreeManager ={
-stopEvent:true,
-keyboardEvents:true,
-keyboardStructuralEvents:true,
-trees:[],
-currentTree:null,
-userKeys:[],
-setKeys:function(keys){
-this.userKeys=keys;
-},
-add:function(tree){
-this.trees.push(tree);
-},
-disableKeyboardEvents:function(){
-this.keyboardEvents=false;
-},
-disableKeyboardStructuralEvents:function(){
-this.keyboardStructuralEvents=false;
-},
-getCurrentTree:function(){
-return this.currentTree;
-},
-setCurrentTree:function(tree){
-this.currentTree=tree;
-},
-metaOn:function(ev){
-var ok=false;
-if(ev &&(ev.metaKey)){
-ok=true;
-}
-return ok;
-},
-ctrlOn:function(ev){
-var ok=false;
-if(ev &&(ev.ctrlKey||ev.modifier==2)){
-ok=true;
-}
-return ok;
-},
-altOn:function(ev){
-var ok=false;
-if(ev &&(ev.altKey||ev.modifier==1)){
-ok=true;
-}
-return ok;
-},
-shiftOn:function(ev){
-var ok=false;
-if(ev &&(ev.shiftKey||ev.modifier==3)){
-ok=true;
-}
-return ok;
-},
-getCode:function(ev){
-return(ev.which)? ev.which:ev.keyCode;
-},
-setControlEvents:function(){
-Event.observe(document,'keypress',this.evt_keyPress.bindAsEventListener(this),false);
-var body=document.getElementsByTagName('body');
-if(!body||!body[0]){
-throw new Error(TAFELTREE_NO_BODY_TAG);
-} else{
-Event.observe(body[0],'mouseup',this.evt_unselect.bindAsEventListener(this),false);
-}
-},
-evt_unselect:function(ev){
-var obj=Event.element(ev);
-var current=this.getCurrentTree();
-if(current){
-if(!Element.hasClassName(obj,current.classSelected)&& !Element.hasClassName(obj,current.classOpenable)){
-current.unselect();
-this.setCurrentTree(null);
-}
-}
-},
-enter:function(tree,code,keys,ev){
-if(tree.lastEdited){
-tree.lastEdited.editableInput.blur();
-if(this.stopEvent)Event.stop(ev);
-}
-},
-escape:function(tree,code,keys,ev){
-var selected=tree.getSelectedBranches();
-var lastPos=selected.length-1;
-var nounselect=false;
-if(lastPos==0&&tree.lastEdited){
-if(tree.lastEdited.hideEditable(ev)){
-nounselect=true;
-}
-}
-if(!nounselect){
-tree.unselect();
-}
-tree.unsetCut();
-tree.unsetCopy();
-if(this.stopEvent)Event.stop(ev);
-},
-moveStart:function(tree,code,keys,ev){
-if(!tree.lastEdited){
-tree.unselect();
-if(tree.roots.length>0){
-var branch=tree.roots[0];
-branch.select();
-}
-if(this.stopEvent)Event.stop(ev);
-}
-},
-moveEnd:function(tree,code,keys,ev){
-if(!tree.lastEdited){
-tree.unselect();
-if(tree.roots.length>0){
-var last=tree.roots.length-1;
-var branch=tree.roots[last];
-while(branch.hasChildren()){
-branch=branch.getLastBranch();
-}
-branch.select();
-}
-if(this.stopEvent)Event.stop(ev);
-}
-},
-moveUp:function(tree,code,keys,ev){
-var selected=tree.getSelectedBranches();
-var lastPos=selected.length-1;
-if(!tree.lastEdited){
-if(lastPos>=0){
-var branch=selected[lastPos].getPreviousOpenedBranch();
-if(branch)branch.select(ev);
-} else{
-if(typeof(tree.roots[0])!= 'undefined')tree.roots[0].select();
-}
-if(this.stopEvent)Event.stop(ev);
-}
-},
-moveDown:function(tree,code,keys,ev){
-var selected=tree.getSelectedBranches();
-var lastPos=selected.length-1;
-if(!tree.lastEdited){
-if(lastPos>=0){
-var branch=selected[lastPos].getNextOpenedBranch();
-if(branch)branch.select(ev);
-} else{
-if(typeof(tree.roots[0])!= 'undefined')tree.roots[0].select();
-}
-if(this.stopEvent)Event.stop(ev);
-}
-},
-moveRight:function(tree,code,keys,ev){
-var selected=tree.getSelectedBranches();
-var lastPos=selected.length-1;
-if(!tree.lastEdited){
-if(lastPos>=0){
-var branch=selected[lastPos];
-if(branch.hasChildren()&& !branch.isOpened()){
-branch.setOpen(ev);
-} else{
-if(branch.hasChildren()){
-var sel=branch.getFirstBranch();
-var sel=sel.select(ev);
-}
-}
-} else{
-if(typeof(tree.roots[0])!= 'undefined')tree.roots[0].select();
-}
-if(this.stopEvent)Event.stop(ev);
-}
-},
-moveLeft:function(tree,code,keys,ev){
-var selected=tree.getSelectedBranches();
-var lastPos=selected.length-1;
-if(!tree.lastEdited){
-if(lastPos>=0){
-var branch=selected[lastPos];
-if(lastPos==0&&branch.hasChildren()&& branch.isOpened()){
-branch.openIt(false);
-} else{
-if(!branch.isRoot)branch.parent.select(ev);
-}
-} else{
-if(typeof(tree.roots[0])!= 'undefined')tree.roots[0].select();
-}
-if(this.stopEvent)Event.stop(ev);
-}
-},
-edit:function(tree,code,keys,ev){
-var selected=tree.getSelectedBranches();
-var lastPos=selected.length-1;
-if(lastPos==0){
-selected[lastPos].setDblClick(ev);
-}
-if(this.stopEvent)Event.stop(ev);
-},
-remove:function(tree,code,keys,ev){
-if(!tree.lastEdited){
-var selected=tree.getSelectedBranches();
-for(var i=0;i<selected.length;i++){
-tree.removeBranch(selected[i]);
-}
-if(this.stopEvent)Event.stop(ev);
-}
-},
-cut:function(tree,code,keys,ev){
-if(keys.ctrlKey||keys.metaKey){
-tree.cut();
-if(this.stopEvent)Event.stop(ev);
-}
-},
-copy:function(tree,code,keys,ev){
-if(keys.ctrlKey||keys.metaKey){
-tree.copy();
-if(this.stopEvent)Event.stop(ev);
-}
-},
-paste:function(tree,code,keys,ev){
-if(keys.ctrlKey||keys.metaKey){
-tree.paste();
-if(this.stopEvent)Event.stop(ev);
-}
-},
-undo:function(tree,code,keys,ev){
-if(keys.ctrlKey||keys.metaKey){
-tree.undo();
-if(this.stopEvent)Event.stop(ev);
-}
-},
-evt_keyPress:function(ev){
-var current=this.getCurrentTree();
-if(current&&this.keyboardEvents){
-var keys ={
-'ctrlKey' :this.ctrlOn(ev),
-'metaKey' :this.metaOn(ev),
-'altKey'  :this.altOn(ev),
-'shiftKey':this.shiftOn(ev)
-};
-var code=this.getCode(ev);
-for(var i=0;i<this.userKeys.length;i++){
-if(code==this.userKeys[i].key&&typeof(this.userKeys[i].func)== 'function'){
-if(!this.userKeys[i].func(current,code,keys,ev)){
-return false;
-}
-break;
-}
-}
-switch(code){
-case Event.KEY_HOME:this.moveStart(current,code,keys,ev);break;
-case Event.KEY_END:this.moveEnd(current,code,keys,ev);break;
-case Event.KEY_UP:this.moveUp(current,code,keys,ev);break;
-case Event.KEY_DOWN:this.moveDown(current,code,keys,ev);break;
-case Event.KEY_RIGHT:this.moveRight(current,code,keys,ev);break;
-case Event.KEY_LEFT:this.moveLeft(current,code,keys,ev);break;
-}
-if(this.keyboardStructuralEvents){
-switch(code){
-case Event.KEY_RETURN:this.enter(current,code,keys,ev);break;
-case Event.KEY_ESC:this.escape(current,code,keys,ev);break;
-case Event.KEY_DELETE:this.remove(current,code,keys,ev);break;
-case 113: this.edit(current,code,keys,ev);break;
-case 120: case 88: this.cut(current,code,keys,ev);break;
-case 99:case 67: this.copy(current,code,keys,ev);break;
-case 118: case 86: this.paste(current,code,keys,ev);break;
-case 122: case 90: this.undo(current,code,keys,ev);break;
-}
-}
-}
-}
-};
-function TafelTreeInitBase(ev){
-TafelTreeManager.setControlEvents();
-if(typeof(TafelTreeInit)== 'function'){
-TafelTreeInit();
-}
-};
-Event.observe(window,'load',TafelTreeInitBase,false);
\ No newline at end of file
diff --git a/apps/maarch_entreprise/tools/tafelTree/Tree.js b/apps/maarch_entreprise/tools/tafelTree/Tree.js
deleted file mode 100755
index f24a29dc2cf5a7e9dde0d053ab915bf9bf066a61..0000000000000000000000000000000000000000
--- a/apps/maarch_entreprise/tools/tafelTree/Tree.js
+++ /dev/null
@@ -1,5874 +0,0 @@
-// Copyright (c) 2006 Tafel, Fabien Tafelmacher
-//
-// See http://membres.lycos.fr/tafelmak/arbre.php for more info
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-// This is distributed under Free-BSD licence.
-
-/*
-@todo
-------------------
-check-restore default
-gestion xml (load + save)
-multidrop
-scrolldrop
-*/
-
-
-
-
-
-
-/**
- *------------------------------------------------------------------------------
- *                          TafelTree Class
- *------------------------------------------------------------------------------
- */
-
-var TAFELTREE_WRONG_BRANCH_STRUCTURE = "La structure de la branche n'est pas correcte. Il faut au moins un id et un texte";
-var TAFELTREE_NO_BODY_TAG = "Il n'y a pas de balise BODY!";
-var TAFELTREE_DEBUG = false;
-
-var TafelTree = Class.create();
-
-/**
- * Fragment de script pour supprimer les <ul></ul> lors du loadFromUL()
- */
-//TafelTree.scriptFragment = /(?:<ul.*?>)((\n|\r|.)*)*/img;
-
-TafelTree.version = '1.9.1';
-TafelTree.lastUpdate = '2007-07-21';
-
-TafelTree.scriptFragment = /[\s]*<[/]?[ul|li].*>.*/ig;
-
-TafelTree.debugReturn = '<br />';
-TafelTree.debugTab = '&nbsp;&nbsp;&nbsp;&nbsp;';
-
-/**
- * Attributs des LI
- */
-TafelTree.prefixAttribute = 'T';
-TafelTree.textAttributes = [
-    TafelTree.prefixAttribute + 'img',
-    TafelTree.prefixAttribute + 'imgopen',
-    TafelTree.prefixAttribute + 'imgclose',
-    TafelTree.prefixAttribute + 'imgselect',
-    TafelTree.prefixAttribute + 'imgselectopen',
-    TafelTree.prefixAttribute + 'imgselectclose',
-    TafelTree.prefixAttribute + 'style',
-    TafelTree.prefixAttribute + 'droplink',
-    TafelTree.prefixAttribute + 'openlink',
-    TafelTree.prefixAttribute + 'editlink',
-    TafelTree.prefixAttribute + 'tooltip',
-    TafelTree.prefixAttribute + 'title'
-];
-TafelTree.numericAttributes = [
-    TafelTree.prefixAttribute + 'canhavechildren',
-    TafelTree.prefixAttribute + 'acceptdrop',
-    TafelTree.prefixAttribute + 'draggable',
-    TafelTree.prefixAttribute + 'editable',
-    TafelTree.prefixAttribute + 'open',
-    TafelTree.prefixAttribute + 'check',
-    TafelTree.prefixAttribute + 'checkbox',
-    TafelTree.prefixAttribute + 'select',
-    TafelTree.prefixAttribute + 'last'
-];
-TafelTree.functionAttributes = [
-    TafelTree.prefixAttribute + 'onbeforecheck',
-    TafelTree.prefixAttribute + 'oncheck',
-    TafelTree.prefixAttribute + 'onclick',
-    TafelTree.prefixAttribute + 'ondblclick',
-    TafelTree.prefixAttribute + 'onbeforeopen',
-    TafelTree.prefixAttribute + 'onopen',
-    TafelTree.prefixAttribute + 'onedit',
-    TafelTree.prefixAttribute + 'oneditajax',
-    TafelTree.prefixAttribute + 'onmouseover',
-    TafelTree.prefixAttribute + 'onmouseout',
-    TafelTree.prefixAttribute + 'onmousedown',
-    TafelTree.prefixAttribute + 'onmouseup',
-    TafelTree.prefixAttribute + 'ondrop',
-    TafelTree.prefixAttribute + 'ondragstarteffect',
-    TafelTree.prefixAttribute + 'ondragendeffect',
-    TafelTree.prefixAttribute + 'onerrorajax',
-    TafelTree.prefixAttribute + 'ondropajax',
-    TafelTree.prefixAttribute + 'onopenpopulate'
-];
-
-
-
-/**
- *------------------------------------------------------------------------------
- *                          TafelTree static methods
- *------------------------------------------------------------------------------
- */
-
-/**
- * Constructeur d'un nouvel arbre via UL
- *
- * @access  public
- * @param   string              id                      L'id de l'élément HTML conteneur
- * @param   string              imgBase                 Le path vers les images, ou les options
- * @param   integer             width                   La largeur de l'arbre
- * @param   integer             height                  La hauteur de l'arbre
- * @param   object              options                 Les options de génération
- * @return  TafelTree                                   L'arbre créé sur la base des UL - LI
- */
-TafelTree.loadFromUL = function (id, imgBase, width, height, options, debug) {
-    // 2006-11-25 : "options" est maintenant à la place de "imgBase"
-    if (typeof(imgBase) == 'object') {
-        options = imgBase;
-        debug = width;
-        imgBase = (options.imgBase) ? options.imgBase : 'imgs/';
-        width = (options.width) ? options.width : '100%';
-        height = (options.height) ? options.height : 'auto';
-    }
-
-    // Suite
-    var obj = $(id);
-    var load = document.createElement('img');
-    load.setAttribute('title', 'load');
-    load.setAttribute('alt', 'load');
-    load.src = ((imgBase) ? imgBase : 'imgs/') + 'load.gif';
-    obj.parentNode.insertBefore(load, obj);
-    Element.hide(obj);
-
-    var tab = '';
-    var tabModel = (debug) ? TafelTree.debugTab : '';
-    var rt = (debug) ? TafelTree.debugReturn : '';
-    var virgule = '';
-    var str = (debug) ? 'var struct = [' : '([';
-    for (var i = 0; i < obj.childNodes.length; i++) {
-        if (obj.childNodes[i].nodeName.toLowerCase() == 'li') {
-            str += this._loadFromUL(obj.childNodes[i], virgule, rt, tab, tabModel);
-            virgule = ',';
-        }
-    }
-    str += rt + ((debug) ? '];' : '])');
-
-    var div = document.createElement('div');
-    div.id = obj.id;
-    obj.id += '____todelete';
-    obj.parentNode.insertBefore(div, obj);
-    if (!debug) {
-        var m = TafelTree.prefixAttribute;
-        var struct = eval(str);
-        var _tree = new TafelTree(id, struct, options);
-    } else {
-        div.innerHTML = str.replace(/</img, '&lt;');
-        var _tree = str;
-    }
-    obj.parentNode.removeChild(load);
-    obj.parentNode.removeChild(obj);
-    return _tree;
-};
-
-/**
- * Méthode récursive qui va récupérer les infos de tous les LI
- *
- * @access  private
- * @param   HTMLLiElement       obj                     La LI courante
- * @param   string              virgule                 Détermine s'il y a une virgule avant l'accolade ouvrante
- * @param   string              rt                      Retour de ligne (pour le debug)
- * @param   string              tab                     La tabulation courante (pour le debug)
- * @param   string              tabModel                La grandeur d'une tabulation (pour le debug)
- * @return  string                                      La string JSON dérivée de la structure UL - LI
- */
-TafelTree._loadFromUL = function (obj, virgule, rt, tab, tabModel) {
-    tab += tabModel;
-    var contenu = TafelTree.trim(obj.innerHTML.replace(TafelTree.scriptFragment, ''));
-    var str = virgule + rt + tab + '{' + rt;
-    // Définition de toutes les propriétés
-    str += tab + "'id' : '" + obj.id + "'";
-    if (contenu) {
-        str += "," + rt + tab + "'txt' : '" + contenu + "'";
-    }
-    TafelTree.textAttributes.each(function (attr) {
-        if (obj.getAttribute(attr)) str += "," + rt + tab + "'" + attr.replace(TafelTree.prefixAttribute, '') + "' : '" + obj.getAttribute(attr) + "'";
-    });
-    TafelTree.numericAttributes.each(function (attr) {
-        if (obj.getAttribute(attr)) str += "," + rt + tab + "'" + attr.replace(TafelTree.prefixAttribute, '') + "' : " + obj.getAttribute(attr);
-    });
-    TafelTree.functionAttributes.each(function (attr) {
-        if (obj.getAttribute(attr)) str += "," + rt + tab + "'" + attr.replace(TafelTree.prefixAttribute, '') + "' : " + obj.getAttribute(attr);
-    });
-    // Définition des enfants
-    for (var i = 0; i < obj.childNodes.length; i++) {
-        if (obj.childNodes[i].nodeName.toLowerCase() == 'ul') {
-            virgule = '';
-            str += ',' + rt + tab + "'items' : [";
-            for (var j = 0; j < obj.childNodes[i].childNodes.length; j++) {
-                if (obj.childNodes[i].childNodes[j].nodeName.toLowerCase() == 'li') {
-                    str += this._loadFromUL(obj.childNodes[i].childNodes[j], virgule, rt, tab, tabModel);
-                    virgule = ',';
-                }
-            }
-            str += rt + tab + ']';
-        }
-    }
-    str += rt + tab + '}';
-    return str;
-};
-
-TafelTree.trim = function (string) {
-    return string.replace(/(^\s*)|(\s*$)|\n|\r|\t/g,'');
-};
-
-
-
-
-/**
- *------------------------------------------------------------------------------
- *                          TafelTree Class Constructor
- *------------------------------------------------------------------------------
- */
-
-TafelTree.prototype = {
-    /**
-     * Constructeur d'un nouvel arbre. Supporte facilement 700 éléments
-     *
-     * 2006-11-25 : changement des paramètres dans le constructeur. On peut mettre les options
-     * à la place de "imgBase". Les autres paramètres peuvent maintenant être passé via
-     * "options"
-     *
-     * @access  public
-     * @param   string              id                      L'id de l'élément HTML conteneur
-     * @param   object              struct                  La structure de l'arbre
-     * @param   string              imgBase                 Le path vers les images (ou les options)
-     * @param   integer             width                   La largeur de l'arbre
-     * @param   integer             height                  La hauteur de l'arbre
-     * @param   object              options                 Les fonctions de load et autres binz de génération
-     */
-    initialize : function (id, struct, imgBase, treeWidth, height, options) {
-        // 2006-11-25 : "options" est maintenant à la place de "imgBase"
-        if (typeof(imgBase) == 'object') {
-            options = imgBase;
-            imgBase = (options.imgBase) ? options.imgBase : 'imgs/';
-            width = (options.width) ? options.width : '100%';
-            height = (options.height) ? options.height : 'auto';
-        }
-        // Variables images
-        this.imgBase = (imgBase) ? imgBase : 'imgs/';
-        this.setLineStyle('line');
-        this.options = (options) ? options : {};
-        this.copyName = ' (%n)';
-        this.copyNameBreak = '_';
-
-        // Variables CSS
-        this.classTree = 'tafelTree';
-        this.classTreeRoot = this.classTree + '_root';
-        this.classTreeBranch = this.classTree + '_row';
-        this.classCopy = (this.options.copyCSS) ? this.options.copyCSS : null;
-        this.classCut = (this.options.cutCSS) ? this.options.cutCSS : null;
-        this.classDrag = 'tafelTreedrag';
-        this.classSelected = 'tafelTreeselected';
-        this.classEditable = 'tafelTreeeditable';
-        this.classContent = 'tafelTreecontent';
-        this.classCanevas = 'tafelTreecanevas';
-        this.classDragOver = 'tafelTreedragOver';
-        this.classTooltip = 'tafelTreetooltip';
-        this.classOpenable = 'tafelTreeopenable';
-
-        // Default structure
-        this.defaultStruct = [];
-        /*for (var i = 0; i < struct.length; i++) {
-            this.defaultStruct.push(Object.clone(struct[i]));
-        }*/
-
-        // Autres variables
-        this.idTree = 0;
-        this.behaviourDrop = 0;
-        this.durationTooltipShow = 1000;
-        this.durationTooltipHide = 100;
-        this.baseStruct = struct;
-        this.width = (treeWidth) ? treeWidth : '100%';
-        this.height = (height) ? height : 'auto';
-        this.div = $(id);
-        this.div.style.width = this.width;
-        this.div.style.height = this.height;
-        this.id = this.div.id;
-        this.isTree = true;
-        this.dropALT = true;
-        this.openAll = false;
-        this.rtlMode = false;
-        this.dropCTRL = true;
-        this.multiline = false;
-        this.checkboxes = false;
-        this.propagation = true;
-        this.dragRevert = true;
-        this.dragGhosting = true;
-        this.bigTreeLoading = -1;
-        this.dropAsSibling = true;
-        this.onlyOneOpened = false;
-        this.openedAfterAdd = true;
-        this.editableBranches = true;
-        this.reopenFromServer = true;
-        this.selectedBranchShowed = true,
-        this.checkboxesThreeState = false;
-        this.roots = [];
-        this.icons = [null, null, null];
-        this.iconsSelected = [null, null, null];
-        this.otherTrees = [];
-        this.cuttedBranches = [];
-        this.copiedBranches = [];
-        this.checkedBranches = [];
-        this.selectedBranches = [];
-        this.idTreeBranch = this.classTree + '_' + this.id + '_id_';
-        this.loaded = false;
-        Element.addClassName(this.div, this.classTree);
-
-        // Cookie
-        this.useCookie = true;
-        this.cookieSeparator = '|';
-        this.cookieCheckSeparator = '[check]';
-        this.cookieOpened = null;
-        this.cookieChecked = null;
-        this.setOptions(this.options);
-        var fromCookie = this.getCookie(this.classTree + this.id);
-        if (fromCookie) {
-            var branches = fromCookie.split(this.cookieCheckSeparator);
-            // Branches ouvertes
-            this.cookieOpened = [];
-            this.cookieOpened = branches[0].split(this.cookieSeparator);
-            this.cookieOpened.shift();
-            // Branches checkées (avec anti-bug pour les anciennes versions et anciens cookies)
-            this.cookieChecked = [];
-            if (branches.length > 1) {
-                this.cookieChecked = branches[1].split(this.cookieSeparator);
-            }
-        }
-
-        // Instance de debug
-        this.debugObj = document.createElement('div');
-        this.debugObj.setAttribute('id', this.classTree + '_debug');
-        Element.hide(this.debugObj);
-        this.div.appendChild(this.debugObj);
-        // Instance Ajax
-        this.ajaxObj = document.createElement('div');
-        this.ajaxObj.setAttribute('id', this.classTree + '_ajax');
-        Element.hide(this.ajaxObj);
-        this.div.appendChild(this.ajaxObj);
-        Event.observe(this.div, 'mousedown', this.evt_setAsCurrent.bindAsEventListener(this), false);
-        Event.observe(this.div, 'focus', this.evt_setAsCurrent.bindAsEventListener(this), false);
-        // don't generate if cookie is on server side
-        if (!this.serverCookie) {
-            if (this.options.generate) {
-                this.generate();
-            }
-            if (this.options.generateBigTree) {
-                this.generate(true);
-            }
-        }
-        TafelTreeManager.add(this);
-    },
-
-
-    /**
-     *------------------------------------------------------------------------------
-     *                          TafelTree global events management
-     *------------------------------------------------------------------------------
-     */
-
-    /**
-     * Set l'arbre comme étant l'arbre courant
-     *
-     * Toutes les actions claviers auront effet seulement sur cet arbre et non sur les autres*
-     *
-     * @access  public
-     * @param   Event           ev                      L'événement déclencheur
-     * @return  void
-     */
-    evt_setAsCurrent : function (ev) {
-        var obj = Event.element(ev);
-        TafelTreeManager.setCurrentTree(this);
-    },
-
-    /**
-     * Retourne une liste de branches ordrée (en fonction de leur position dans l'arbre)
-     *
-     * @access  public
-     * @param   array               list                    Un tableau de TafelTreeBranch
-     * @return  array                                       Un tableau ordré de TafelTreeBranch
-     */
-    orderListBranches : function (list) {
-        var ordered = [];
-        var level = [];
-        var nivmin = 100;
-        var nivmax = 0;
-        // On ordre par niveau
-        var niv = 0;
-        for (var i = 0; i < list.length; i++) {
-            niv = list[i].getLevel();
-            if (typeof(level[niv]) == 'undefined') {
-                level[niv] = [];
-            }
-            level[niv].push(list[i]);
-            if (niv > nivmax) nivmax = niv;
-            if (niv < nivmin) nivmin = niv;
-        }
-        // On enlève le cheni de m... à cause de la gestion tableau javascript
-        for (var i = nivmin; i <= nivmax; i++) {
-            if (level[i]) {
-                ordered.push(level[i]);
-            }
-        }
-        // Pour chaque niveau, on ordre par position dans l'arbre
-
-        // On ne récupère que les 1er niveaux. S'il y a des enfants, on les ignore
-        return ordered;
-    },
-
-    /**
-     * Retourne les branches copiées de l'arbre, ou d'un arbre lié
-     *
-     * Si le tableau n'a pas de branches, la méthode va voir dans les arbres liés
-     * pour récupérer les branches qui seraient copiées dans l'autre arbre
-     *
-     * @access  public
-     * @return  array                                   Les branches copiées
-     */
-    getCopiedBranches : function () {
-        var branches = this.copiedBranches;
-        if (branches.length == 0) {
-            for (var i = 0; i < this.otherTrees.length; i++) {
-                branches = this.otherTrees[i].copiedBranches;
-                if (branches.length > 0) break;
-            }
-        }
-        return branches;
-    },
-
-    /**
-     * Retourne les branches coupées de l'arbre, ou d'un arbre lié
-     *
-     * Si le tableau n'a pas de branches, la méthode va voir dans les arbres liés
-     * pour récupérer les branches qui seraient coupées dans l'autre arbre
-     *
-     * @access  public
-     * @return  array                                   Les branches coupées
-     */
-    getCuttedBranches : function () {
-        var branches = this.cuttedBranches;
-        if (branches.length == 0) {
-            for (var i = 0; i < this.otherTrees.length; i++) {
-                branches = this.otherTrees[i].cuttedBranches;
-                if (branches.length > 0) break;
-            }
-        }
-        return branches;
-    },
-
-    /**
-     * Fonction qui coupe la sélection et la met dans un cache
-     *
-     * @access  public
-     * @return  return                                      True si ça coupe, false sinon
-     */
-    cut : function () {
-        this.unsetCut();
-        this.unsetCopy();
-        var level = this.orderListBranches(this.selectedBranches);
-        //this.debug(level);
-        var sel = null;
-        for (var i = 0; i < level.length; i++) {
-            for (var j = 0; j < level[i].length; j++) {
-                sel = level[i][j];
-                this._cut(sel);
-                this.cuttedBranches.push(sel);
-            }
-        }
-        return true;
-    },
-
-    /**
-     * Fonction qui copie la sélection dans un cache
-     *
-     * @access  public
-     * @return  return                                      True si ça copie, false sinon
-     */
-    copy : function () {
-        this.unsetCut();
-        this.unsetCopy();
-        var level = this.orderListBranches(this.selectedBranches);
-        var sel = null;
-        for (var i = 0; i < this.selectedBranches.length; i++) {
-            sel = this.selectedBranches[i];
-            this._copy(sel);
-            this.copiedBranches[i] = sel;
-        }
-        return true;
-    },
-
-    /**
-     * Fonction qui colle le cache à l'endroit sélectionné. Il ne doit y avoir qu'une sélection
-     *
-     * @access  public
-     * @return  return                                      True si ça colle, false sinon
-     */
-    paste : function () {
-        if (this.selectedBranches.length != 1) return false;
-        var branch = this.selectedBranches[0];
-        var copied = this.getCopiedBranches();
-        var cutted = this.getCuttedBranches();
-        var nbCopy = copied.length;
-        var nbCut = cutted.length;
-        if (nbCopy > 0) {
-            var list = copied;
-            var b = null;
-            for (var i = 0; i < list.length; i++) {
-                if (this._okForPaste(branch, list, i)) {
-                    b = branch.insertIntoLast(list[i].clone());
-                }
-            }
-        }
-        if (nbCut > 0) {
-            var list = cutted;
-            for (var i = 0; i < list.length; i++) {
-                if (this._okForPaste(branch, list, i)) {
-                    list[i].move(branch);
-                }
-            }
-        }
-        //this.unsetCopy();
-        this.unsetCut();
-        return true;
-    },
-
-    /**
-     * Détermine si on peut coller la partie courante du cache ou non
-     *
-     * @access  private
-     * @param   TafelTreeBranch     branch                  La branche dans laquelle on colle
-     * @param   array               list                    Le tableau de cache ordré par niveau
-     * @param   integer             i                       La position courante dans le cache
-     * @return  boolean                                     True si on peut coller, false sinon
-     */
-    _okForPaste : function (branch, list, i) {
-        var ok = true;
-        if (!branch.isChild(list[i])) {
-            for (var j = 0; j < i; j++) {
-                if (list[i].isChild(list[j])) {
-                    ok = false;
-                    break;
-                }
-            }
-        } else {
-            ok = false;
-        }
-        return ok;
-    },
-
-    unsetCut : function () {
-        // On enlève les branches coupées des autres arbres (suppression du "presse-papier")
-        var _tree = null;
-        var branches = null;
-        for (var i = 0; i < this.otherTrees.length; i++) {
-            _tree = this.otherTrees[i];
-            branches = _tree.cuttedBranches;
-            for (var t = 0; t < branches.length; t++) {
-                _tree._unsetCut(branches[t]);
-            }
-            _tree.cuttedBranches = [];
-        }
-        var cut = null;
-        for (var i = 0; i < this.cuttedBranches.length; i++) {
-            cut = this.cuttedBranches[i];
-            this._unsetCut(cut);
-        }
-        this.cuttedBranches = [];
-    },
-
-    unsetCopy : function () {
-        // On enlève les branches copiées des autres arbres (suppression du "presse-papier")
-        var _tree = null;
-        var branches = null;
-        for (var i = 0; i < this.otherTrees.length; i++) {
-            _tree = this.otherTrees[i];
-            branches = _tree.copiedBranches;
-            for (var t = 0; t < branches.length; t++) {
-                _tree._unsetCopy(branches[t]);
-            }
-            _tree.copiedBranches = [];
-        }
-        var copy = null;
-        for (var i = 0; i < this.copiedBranches.length; i++) {
-            copy = this.copiedBranches[i];
-            this._unsetCopy(copy);
-        }
-        this.copiedBranches = [];
-    },
-
-    /**
-     * Annule les [n] dernières actions (todo...)
-     *
-     * @access  public
-     * @return  boolean                                 True si quelque chose a été annulé
-     */
-    undo : function () {
-
-    },
-
-
-    /**
-     *------------------------------------------------------------------------------
-     *                          TafelTree private keyboard methods
-     *------------------------------------------------------------------------------
-     */
-
-    /**
-     * Méthode récursive qui fait l'effet "couper" sur toutes les sous-branches
-     *
-     * @access  private
-     * @param   TafelTreeBranch     branch                  La branche courante
-     * @return  void
-     */
-    _cut : function (branch) {
-        if (!this.classCut) {
-            new Effect.Opacity(branch.txt, {
-                duration: 0.1,
-                transition: Effect.Transitions.linear,
-                from: 1.0, to: 0.4
-            });
-            new Effect.Opacity(branch.img, {
-                duration: 0.1,
-                transition: Effect.Transitions.linear,
-                from: 1.0, to: 0.4
-            });
-        } else {
-            Element.addClassName(branch.txt, this.classCut);
-            Element.addClassName(branch.img, this.classCut);
-        }
-        if (branch.hasChildren()) {
-            for (var i = 0; i < branch.children.length; i++) {
-                this._cut(branch.children[i]);
-            }
-        }
-    },
-
-    /**
-     * Méthode récursive qui enlève l'effet "couper" sur toutes les sous-branches
-     *
-     * @access  private
-     * @param   TafelTreeBranch     branch                  La branche courante
-     * @return  void
-     */
-    _unsetCut : function (branch) {
-        if (!this.classCut) {
-            new Effect.Opacity(branch.txt, {
-                duration: 0.1,
-                transition: Effect.Transitions.linear,
-                from: 0.4, to: 1.0
-            });
-            new Effect.Opacity(branch.img, {
-                duration: 0.1,
-                transition: Effect.Transitions.linear,
-                from: 0.4, to: 1.0
-            });
-        } else {
-            Element.removeClassName(branch.txt, this.classCut);
-            Element.removeClassName(branch.img, this.classCut);
-        }
-        if (branch.hasChildren()) {
-            for (var i = 0; i < branch.children.length; i++) {
-                this._unsetCut(branch.children[i]);
-            }
-        }
-    },
-
-    /**
-     * Méthode récursive qui fait l'effet "copier" sur toutes les sous-branches
-     *
-     * @access  private
-     * @param   TafelTreeBranch     branch                  La branche courante
-     * @return  void
-     */
-    _copy : function (branch) {
-        if (this.classCopy) {
-            Element.addClassName(branch.txt, this.classCopy);
-            Element.addClassName(branch.img, this.classCopy);
-        }
-        if (branch.hasChildren()) {
-            for (var i = 0; i < branch.children.length; i++) {
-                this._copy(branch.children[i]);
-            }
-        }
-    },
-
-    /**
-     * Méthode récursive qui enlève l'effet "copier" sur toutes les sous-branches
-     *
-     * @access  private
-     * @param   TafelTreeBranch     branch                  La branche courante
-     * @return  void
-     */
-    _unsetCopy : function (branch) {
-        if (this.classCopy) {
-            Element.removeClassName(branch.txt, this.classCopy);
-            Element.removeClassName(branch.img, this.classCopy);
-        }
-        if (branch.hasChildren()) {
-            for (var i = 0; i < branch.children.length; i++) {
-                this._unsetCopy(branch.children[i]);
-            }
-        }
-    },
-
-    /**
-     *------------------------------------------------------------------------------
-     *                          TafelTree getters and setters methods
-     *------------------------------------------------------------------------------
-     */
-
-    enableMultiline : function (multiline) {
-        this.multiline = (multiline) ? true : false;
-    },
-
-    enableRTL : function (rtl) {
-        this.rtlMode = (rtl) ? true : false;
-        if (this.rtlMode) {
-            // plante sous Safari...
-            //this.div.style.float = 'right';
-            this.div.style.textAlign = 'right';
-            this.div.style.direction = 'rtl';
-        } else {
-            // plante sous Safari
-            //this.div.style.float = 'left';
-            this.div.style.textAlign = 'left';
-            this.div.style.direction = 'ltr';
-        }
-        this.setLineStyle(this.lineStyle);
-    },
-
-    isRTL : function () {
-        return this.rtlMode;
-    },
-
-    disableDropALT : function (alt) {
-        this.dropALT = (alt) ? true : false;
-    },
-
-    disableDropCTRL : function (copy) {
-        this.dropCTRL = (copy) ? true : false;
-    },
-
-    enableCheckboxes : function (enable) {
-        this.checkboxes = (enable) ? true : false;
-    },
-
-    enableCheckboxesThreeState : function (enable) {
-        this.enableCheckboxes(enable);
-        this.checkboxesThreeState = (enable) ? true : false;
-    },
-
-    /**
-     * Permet d'utiliser les cookies ou non. Le séparateur est optionnel, '|' par défaut
-     *
-     * @access  public
-     * @param   boolean             enable                  True (par défaut) pour gérer les cookies
-     * @param   string              separator               Le séparateur dans le cookie )
-     */
-    enableCookies : function (enable, separator) {
-        this.useCookie = (enable) ? true : false;
-        if (typeof(separator) != 'undefined') {
-            this.cookieSeparator = separator;
-        }
-    },
-
-    openOneAtOnce : function (yes) {
-        this.onlyOneOpened = (yes) ? true : false;
-    },
-
-    openAfterAdd : function (yes) {
-        this.openedAfterAdd = (yes) ? true : false;
-    },
-
-    reopenFromServerAfterLoad : function (yes) {
-        this.reopenFromServer = (yes) ? true : false;
-    },
-
-    /**
-     * Fonction qui set par défaut l'état des branches (ouvert ou fermé)
-     *
-     * @access  public
-     * @param   boolean             open                    True pour tout ouvrir, false pour tout fermer
-     * @return  void
-     */
-    openAtLoad : function (open) {
-        this.openAll = (open) ? true : false;
-    },
-
-    showSelectedBranch : function (show) {
-        this.selectedBranchShowed = (show) ? true : false;
-    },
-
-    /**
-     * Permet de choisir quel comportement par defaut le drop aura
-     *
-     * L'autre comportement s'obtient en gardant la touche ALT appuyée et/ou CTRL
-     *
-     * @access  public
-     * @param   string          def                         'sibling', 'siblingcopy', 'child' ou 'childcopy'
-     * @return  void
-     */
-    setBehaviourDrop : function (def) {
-        switch (def) {
-            case 'sibling' : this.behaviourDrop = 1; break;
-            case 'childcopy' : this.behaviourDrop = 2; break;
-            case 'siblingcopy' : this.behaviourDrop = 3; break;
-            case 'child' :
-            default :
-                this.behaviourDrop = 0;
-        }
-    },
-
-    /**
-     * Set les icônes par défaut pour toutes les branches
-     *
-     * Si imgopen n'est pas défini, il prend la valeur d'img. Pareil pour imgclose.
-     *
-     * @access  public
-     * @param   string              img                     L'image quand la branche n'a pas d'enfants
-     * @param   string              imgopen                 L'image quand la branche des enfants et est ouverte
-     * @param   string              imgclose                L'image quand la branche a des enfants et est fermée
-     * @return  void
-     */
-    setIcons : function (img, imgopen, imgclose) {
-        this.icons[0] = img;
-        this.icons[1] = (imgopen) ? imgopen : img;
-        this.icons[2] = (imgclose) ? imgclose : img;
-    },
-
-    /**
-     * Set les icônes de sélection par défaut pour toutes les branches
-     *
-     * @access  public
-     * @param   string              img                     L'image quand la branche n'a pas d'enfants
-     * @param   string              imgopen                 L'image quand la branche des enfants et est ouverte
-     * @param   string              imgclose                L'image quand la branche a des enfants et est fermée
-     * @return  void
-     */
-    setIconsSelected : function (img, imgopen, imgclose) {
-        this.iconsSelected[0] = img;
-        this.iconsSelected[1] = (imgopen) ? imgopen : null;
-        this.iconsSelected[2] = (imgclose) ? imgclose : null;
-    },
-
-    /**
-     * Fonction qui permet de choisir le style des lignes entre les branches
-     *
-     * @access  public
-     * @param   string              style                   LE style des lignes, 'none' ou 'line'
-     * @return  void
-     */
-    setLineStyle : function (style) {
-        this.lineStyle = style;
-        switch (style) {
-            case 'none' :
-                this.imgLine0 = 'empty.gif'; this.imgLine1 = 'empty.gif'; this.imgLine2 = 'empty.gif';
-                this.imgLine3 = 'empty.gif'; this.imgLine4 = 'empty.gif'; this.imgLine5 = 'empty.gif';
-                this.imgWait = 'wait.gif'; this.imgEmpty = 'empty.gif';
-                this.imgMinus1 = 'minus0.gif'; this.imgMinus2 = 'minus0.gif'; this.imgMinus3 = 'minus0.gif';
-                this.imgMinus4 = 'minus0.gif'; this.imgMinus5 = 'minus0.gif';
-                this.imgPlus1 = 'plus0.gif'; this.imgPlus2 = 'plus0.gif'; this.imgPlus3 = 'plus0.gif';
-                this.imgPlus4 = 'plus0.gif'; this.imgPlus5 = 'plus0.gif';
-                this.imgCheck1 = 'check1.gif'; this.imgCheck2 = 'check2.gif'; this.imgCheck3 = 'check3.gif';
-                // Les 2 premiers sont des noms d'images, les 2 autres de classes CSS
-                this.imgMulti1 = 'empty.gif'; this.imgMulti2 = 'empty.gif';
-                this.imgMulti3 = ''; this.imgMulti4 = '';
-                break;
-            case 'full' :
-                if (this.isRTL()) {
-                this.imgLine0 = 'rtl_linefull0.gif'; this.imgLine1 = 'rtl_linefull1.gif'; this.imgLine2 = 'rtl_linefull2.gif';
-                this.imgLine3 = 'rtl_linefull3.gif'; this.imgLine4 = 'rtl_linefull4.gif'; this.imgLine5 = 'rtl_linefull5.gif';
-                this.imgWait = 'wait.gif'; this.imgEmpty = 'empty.gif';
-                this.imgMinus1 = 'rtl_minusfull1.gif'; this.imgMinus2 = 'rtl_minusfull2.gif'; this.imgMinus3 = 'rtl_minusfull3.gif';
-                this.imgMinus4 = 'rtl_minusfull4.gif'; this.imgMinus5 = 'rtl_minusfull5.gif';
-                this.imgPlus1 = 'rtl_plusfull1.gif'; this.imgPlus2 = 'rtl_plusfull2.gif'; this.imgPlus3 = 'rtl_plusfull3.gif';
-                this.imgPlus4 = 'rtl_plusfull4.gif'; this.imgPlus5 = 'rtl_plusfull5.gif';
-                this.imgCheck1 = 'check1.gif'; this.imgCheck2 = 'check2.gif'; this.imgCheck3 = 'check3.gif';
-                // Les 2 premiers sont des noms d'images, les 2 autres de classes CSS
-                this.imgMulti1 = 'rtl_linebgfull.gif'; this.imgMulti2 = 'rtl_linebgfull2.gif';
-                this.imgMulti3 = 'multiline'; this.imgMulti4 = 'multiline2';
-                } else {
-                this.imgLine0 = 'linefull0.gif'; this.imgLine1 = 'linefull1.gif'; this.imgLine2 = 'linefull2.gif';
-                this.imgLine3 = 'linefull3.gif'; this.imgLine4 = 'linefull4.gif'; this.imgLine5 = 'linefull5.gif';
-                this.imgWait = 'wait.gif'; this.imgEmpty = 'empty.gif';
-                this.imgMinus1 = 'minusfull1.gif'; this.imgMinus2 = 'minusfull2.gif'; this.imgMinus3 = 'minusfull3.gif';
-                this.imgMinus4 = 'minusfull4.gif'; this.imgMinus5 = 'minusfull5.gif';
-                this.imgPlus1 = 'plusfull1.gif'; this.imgPlus2 = 'plusfull2.gif'; this.imgPlus3 = 'plusfull3.gif';
-                this.imgPlus4 = 'plusfull4.gif'; this.imgPlus5 = 'plusfull5.gif';
-                this.imgCheck1 = 'check1.gif'; this.imgCheck2 = 'check2.gif'; this.imgCheck3 = 'check3.gif';
-                // Les 2 premiers sont des noms d'images, les 2 autres de classes CSS
-                this.imgMulti1 = 'linebgfull.gif'; this.imgMulti2 = 'linebgfull2.gif';
-                this.imgMulti3 = 'multiline'; this.imgMulti4 = 'multiline2';
-                }
-                break;
-            case 'line' :
-            default :
-                if (this.isRTL()) {
-                this.imgLine0 = 'rtl_line0.gif'; this.imgLine1 = 'rtl_line1.gif'; this.imgLine2 = 'rtl_line2.gif';
-                this.imgLine3 = 'rtl_line3.gif'; this.imgLine4 = 'rtl_line4.gif'; this.imgLine5 = 'rtl_line5.gif';
-                this.imgWait = 'wait.gif'; this.imgEmpty = 'empty.gif';
-                this.imgMinus1 = 'rtl_minus1.gif'; this.imgMinus2 = 'rtl_minus2.gif'; this.imgMinus3 = 'rtl_minus3.gif';
-                this.imgMinus4 = 'rtl_minus4.gif'; this.imgMinus5 = 'rtl_minus5.gif';
-                this.imgPlus1 = 'rtl_plus1.gif'; this.imgPlus2 = 'rtl_plus2.gif'; this.imgPlus3 = 'rtl_plus3.gif';
-                this.imgPlus4 = 'rtl_plus4.gif'; this.imgPlus5 = 'rtl_plus5.gif';
-                this.imgCheck1 = 'check1.gif'; this.imgCheck2 = 'check2.gif'; this.imgCheck3 = 'check3.gif';
-                // Les 2 premiers sont des noms d'images, les 2 autres de classes CSS
-                this.imgMulti1 = 'rtl_linebg.gif'; this.imgMulti2 = 'rtl_linebg2.gif';
-                this.imgMulti3 = 'multiline'; this.imgMulti4 = 'multiline2';
-                } else {
-                this.imgLine0 = 'line0.gif'; this.imgLine1 = 'line1.gif'; this.imgLine2 = 'line2.gif';
-                this.imgLine3 = 'line3.gif'; this.imgLine4 = 'line4.gif'; this.imgLine5 = 'line5.gif';
-                this.imgWait = 'wait.gif'; this.imgEmpty = 'empty.gif';
-                this.imgMinus1 = 'minus1.gif'; this.imgMinus2 = 'minus2.gif'; this.imgMinus3 = 'minus3.gif';
-                this.imgMinus4 = 'minus4.gif'; this.imgMinus5 = 'minus5.gif';
-                this.imgPlus1 = 'plus1.gif'; this.imgPlus2 = 'plus2.gif'; this.imgPlus3 = 'plus3.gif';
-                this.imgPlus4 = 'plus4.gif'; this.imgPlus5 = 'plus5.gif';
-                this.imgCheck1 = 'check1.gif'; this.imgCheck2 = 'check2.gif'; this.imgCheck3 = 'check3.gif';
-                // Les 2 premiers sont des noms d'images, les 2 autres de classes CSS
-                this.imgMulti1 = 'linebg.gif'; this.imgMulti2 = 'linebg2.gif';
-                this.imgMulti3 = 'multiline'; this.imgMulti4 = 'multiline2';
-                }
-        }
-    },
-
-    setTooltipDuration : function (show, hide) {
-        this.durationTooltipShow = show;
-        this.durationTooltipHide = hide;
-    },
-
-    /**
-     * Méthode qui permet d'interdir les mouvements dans la branche dragguée
-     *
-     * @access  public
-     * @param   boolean             propagateRestiction     True pour interdir le mouvement des enfants de la branche droppée
-     * @return  void
-     */
-    propagateRestriction : function (propagate) {
-        this.propagation = (typeof(propagate) == 'undefined') ? true : propagate;
-    },
-
-    getSelectedBranches : function () {
-        return this.selectedBranches;
-    },
-
-    setContextMenu : function (menu) {
-        var div = document.createElement('div');
-        div.innerHTML = menu;
-        this.div.appendChild(div);
-    },
-
-
-    /**
-     *------------------------------------------------------------------------------
-     *                          TafelTree public methods
-     *------------------------------------------------------------------------------
-     */
-
-    /**
-     * Fonction pour générer l'arbre
-     *
-     * @access  public
-     * @param   boolean             bigTree                 True pour spécifier que c'est un gros arbre
-     * @return  void
-     */
-    generate : function (bigTree) {
-        if (!bigTree) {
-            var isNotFirst = false;
-            var isNotLast = false;
-            for (var i = 0; i < this.baseStruct.length; i++) {
-                isNotFirst = (i > 0) ? true : false;
-                isNotLast = (i < this.baseStruct.length - 1) ? true : false;
-                this.roots[i] = new TafelTreeRoot(this, this.baseStruct[i], 0, isNotFirst, isNotLast, i);
-                this.div.appendChild(this.roots[i].obj);
-            }
-            this.loadComplete();
-        } else {
-            this.bigTreeLoading = 0;
-            setTimeout(this._checkLoad.bind(this), 100);
-            setTimeout(this._generateBigTree.bind(this), 10);
-        }
-    },
-
-    /**
-     * Lance les fonctions générales de l'arbre
-     *
-     * @access  public
-     * @param   object              options                 Les fonctions et autres ouvertures automatiques*
-     * @return  void
-     */
-    setOptions : function (options) {
-        // Fonctions événementielles
-        if (options.onLoad) this.setOnLoad(options.onLoad);
-        if (options.onDebug) this.setOnDebug(options.onDebug);
-        if (options.onCheck) this.setOnCheck(options.onCheck);
-        if (options.onBeforeCheck) this.setOnBeforeCheck(options.onBeforeCheck);
-        if (options.onClick) this.setOnClick(options.onClick);
-        if (options.onMouseDown) this.setOnMouseDown(options.onMouseDown);
-        if (options.onMouseUp) this.setOnMouseUp(options.onMouseUp);
-        if (options.onDblClick) this.setOnDblClick(options.onDblClick);
-        if (options.onBeforeOpen) this.setOnBeforeOpen(options.onBeforeOpen);
-        if (options.onOpen) this.setOnOpen(options.onOpen);
-        if (options.onMouseOver) this.setOnMouseOver(options.onMouseOver);
-        if (options.onMouseOut) this.setOnMouseOut(options.onMouseOut);
-        if (options.onDrop) this.setOnDrop(options.onDrop);
-        if (options.onDragStartEffect) this.setOnDragStartEffect(options.onDragStartEffect);
-        if (options.onDragEndEffect) this.setOnDragEndEffect(options.onDragEndEffect);
-        if (options.onErrorAjax) this.setOnDropAfter(options.onErrorAjax);
-        if (options.onEdit) this.setOnEdit(options.onEdit);
-        if (options.onEditAjax) this.setOnEditAjax(options.onEditAjax[0], options.onEditAjax[1]);
-        if (options.onDropAjax) this.setOnDropAjax(options.onDropAjax[0], options.onDropAjax[1]);
-        if (options.onOpenPopulate) this.setOnOpenPopulate(options.onOpenPopulate[0], options.onOpenPopulate[1]);
-        // Fonctions avancées
-        if (typeof(options.rtlMode) != 'undefined') this.enableRTL(options.rtlMode);
-        if (typeof(options.dropALT) != 'undefined') this.disableDropALT(options.dropALT);
-        if (typeof(options.dropCTRL) != 'undefined') this.disableDropCTRL(options.dropCTRL);
-        if (typeof(options.multiline) != 'undefined') this.enableMultiline(options.multiline);
-        if (typeof(options.checkboxes) != 'undefined') this.enableCheckboxes(options.checkboxes);
-        if (typeof(options.checkboxesThreeState) != 'undefined') this.enableCheckboxesThreeState(options.checkboxesThreeState);
-        if (typeof(options.cookies) != 'undefined') this.enableCookies(options.cookies);
-        if (typeof(options.openOneAtOnce) != 'undefined') this.openOneAtOnce(options.openOneAtOnce);
-        if (typeof(options.openAtLoad) != 'undefined') this.openAtLoad(options.openAtLoad);
-        if (typeof(options.openAfterAdd) != 'undefined') this.openAfterAdd(options.openAfterAdd);
-        if (typeof(options.showSelectedBranch) != 'undefined') this.showSelectedBranch(options.showSelectedBranch);
-        if (typeof(options.reopenFromServer) != 'undefined') this.reopenFromServerAfterLoad(options.reopenFromServer);
-        if (typeof(options.propagateRestriction) != 'undefined') this.propagateRestriction(options.propagateRestriction);
-        if (options.lineStyle) this.setLineStyle(options.lineStyle);
-        if (options.behaviourDrop) this.setBehaviourDrop(options.behaviourDrop);
-        if (options.contextMenu) this.setContextMenu(options.contextMenu);
-        // Fonctions diverses
-        if (options.bind) {
-            for (var i = 0; i < options.bind.length; i++) {
-                this.bind(options.bind[i]);
-            }
-        }
-        if (options.bindAsUnidirectional) {
-            for (var i = 0; i < options.bindAsUnidirectional.length; i++) {
-                this.bind(options.bindAsUnidirectional[i]);
-            }
-        }
-        if (options.defaultImg) {
-            var imgopen = (options.defaultImgOpen) ? options.defaultImgOpen : options.defaultImg;
-            var imgclose = (options.defaultImgClose) ? options.defaultImgClose : options.defaultImg;
-            this.setIcons(options.defaultImg, imgopen, imgclose);
-        }
-        if (options.defaultImgSelected || options.defaultImgOpenSelected || options.defaultImgCloseSelected) {
-            var img = (options.defaultImgSelected) ? options.defaultImgSelected : null;
-            var imgopen = (options.defaultImgOpenSelected) ? options.defaultImgOpenSelected : null;
-            var imgclose = (options.defaultImgCloseSelected) ? options.defaultImgCloseSelected :null;
-            this.setIconsSelected(img, imgopen, imgclose);
-        }
-        this.serverCookie = (options.serverCookie) ? options.serverCookie : false;
-    },
-
-    loadComplete : function () {
-        this._adjustOpening();
-        this._adjustCheck();
-        this.setCookie(this.classTree + this.id);
-        this.loaded = true;
-        if (typeof(this.onLoad) == 'function') {
-            this.onLoad();
-        }
-    },
-
-    loadRunning : function (loaded) {
-        if (typeof(this.onLoading) == 'function') {
-            this.onLoading(loaded);
-        }
-    },
-
-    replace : function (modelBranch, replacedBranch, copy) {
-        var branch1 = this.getBranchById(modelBranch);
-        if (!branch1) return false;
-        return branch1.replace(replacedBranch, copy);
-    },
-
-    switchBranches : function (branch1, branch2) {
-        var branch1 = this.getBranchById(branch1);
-        if (!branch1) return false;
-        branch1.switchWith(branch2);
-    },
-
-    /**
-     * Restaure les valeurs par défaut d'ouverture et check (selon type)
-     *
-     * Le type peut prendre la valeur "open", "check" ou "all"
-     *
-     * @access  public
-     * @param   string          type                    Le type de default (open, check ou all)
-     * @return  void
-     */
-    restoreDefault : function (type) {
-        var s = this.defaultStruct;
-        this._restaureDefault(s, type);
-    },
-
-    _restaureDefault : function (s, type) {
-        var b = null;
-        var open = false;
-        var check = 0;
-        for (var i = 0; i < s.length; i++) {
-            b = this.getBranchById(s[i].id);
-            if (b) {
-                open = (s[i].open) ? true : this.openAll;
-                check = (s[i].check == 1) ? 1 : 0;
-                switch (type) {
-                    case 'open' :
-                        if (b.hasChildren()) {
-                            b.openIt(open);
-                        }
-                        break;
-                    case 'check' :
-                        b.check(check);
-                        b._adjustParentCheck();
-                        break;
-                    case 'all' :
-                    default :
-                        if (b.hasChildren()) {
-                            b.openIt(open);
-                        }
-                        //alert(b.getText() + ' : ' + check);
-                        b.check(check);
-                        b._adjustParentCheck();
-                }
-                // S'il y a des enfants, on va les restaurer aussi
-                if (typeof(s[i].items) != 'undefined') {
-                    this._restaureDefault(s[i].items, type);
-                }
-            }
-        }
-    },
-
-    /**
-     * Fonction qui lie des arbres TafelTree entre eux, bidirecitonnellement
-     *
-     * On lui passe autant de TafelTree voulu, en les séparant par des virgules
-     *
-     * @access  public
-     * @param   TafelTree           argument                Un ou plusieurs TafelTree
-     * @return  void
-     */
-    bind : function () {
-        var trees = this.bind.arguments;
-        for (var i = 0; i < trees.length; i++) {
-            if (!this.isBindedWith(trees[i])) {
-                this.otherTrees.push(trees[i]);
-                if (!trees[i].isBindedWith(this)) {
-                    trees[i].bind(this);
-                }
-            }
-        }
-    },
-
-    /**
-     * Fonction qui lie des arbres TafelTree entre eux, mais unnidirecitonnel
-     *
-     * On lui passe autant de TafelTree voulu, en les séparant par des virgules
-     *
-     * @access  public
-     * @param   TafelTree           argument                Un ou plusieurs TafelTree
-     * @return  void
-     */
-    bindAsUnidirectional : function () {
-        var trees = this.bindAsUnidirectional.arguments;
-        for (var i = 0; i < trees.length; i++) {
-            if (!this.isBindedWith(trees[i])) {
-                this.otherTrees.push(trees[i]);
-            }
-        }
-    },
-
-    isBindedWith : function (_tree) {
-        var binded = false;
-        for (var i = 0; i < this.otherTrees.length; i++) {
-            if (this.otherTrees[i].id == _tree.id) {
-                binded = true;
-                break;
-            }
-        }
-        return binded;
-    },
-
-    unselect : function () {
-        var branch = null;
-        for (var i = 0; i < this.selectedBranches.length; i++) {
-            branch = this.selectedBranches[i];
-            Element.removeClassName(branch.txt, this.classSelected);
-            // On set l'icône s'il doit changer
-            if (branch.getIconSelected() || branch.getOpenIconSelected() || branch.getCloseIconSelected()) {
-                if (branch.hasChildren()) {
-                    branch.img.src = (branch.isOpened()) ? branch.tree.imgBase + branch.struct.imgopen : branch.tree.imgBase + branch.struct.imgclose;
-                } else {
-                    branch.img.src = branch.tree.imgBase + branch.struct.img;
-                }
-            }
-        }
-        this.selectedBranches = [];
-    },
-
-    /**
-     * Retourne toutes les branches contenues entre deux d'entre-elles
-     *
-     * @access  public
-     * @param   TafelTreeBranch     branch1             La première borne
-     * @param   TafelTreeBranch     branch2             La deuxième borne
-     * @return  array                                   Un tableau de branche, ou false si rien n'a été trouvé
-     */
-    getBranchesBetween : function (branch1, branch2) {
-        var branch1 = this.getBranchById(branch1);
-        var branch2 = this.getBranchById(branch2);
-        if (!branch1 || !branch2) return false;
-        // On quitte si ce n'est pas le même arbre
-        if (branch1.tree.id != branch2.tree.id) return false;
-        var found = false;
-        var selected = [];
-        var pos1 = branch1.getWithinOffset();
-        var pos2 = branch2.getWithinOffset();
-        var next = (pos1[1] <= pos2[1]) ? true : false;
-        // On va chercher l'autre branche plus bas
-        branch = (next) ? branch1.getNextBranch() : branch1.getPreviousBranch();
-        while (branch) {
-            selected.push(branch);
-            if (branch.getId() == branch2.getId()) {
-                found = true;
-                break;
-            }
-            branch = (next) ? branch.getNextBranch() : branch.getPreviousBranch();
-        }
-        return (found) ? selected : false;
-    },
-
-    /**
-     * Retourne le nombre de branche comprises dans l'arbre
-     *
-     * @access  public
-     * @return  integer                                     Le nombre de branches
-     */
-    countBranches : function () {
-        var nb = this.roots.length;
-        for (var i = 0; i < this.roots.length; i++) {
-            nb += this.roots[i].countBranches();
-        }
-        return nb;
-    },
-
-    /**
-     * Retourne toutes les branches de l'arbre
-     *
-     * @access  public
-     * @param   function        filter                      Le filtre des branches
-     * @return  array                                       Un tableau des branches de l'arbre
-     */
-    getBranches : function (filter) {
-        var branches = [];
-        for (var i = 0; i < this.roots.length; i++) {
-            if (typeof(filter) == 'function') {
-                if (filter(this.roots[i])) {
-                    branches.push(this.roots[i]);
-                }
-            } else {
-                branches.push(this.roots[i]);
-            }
-            branches = this.roots[i].getBranches(filter, branches);
-        }
-        return branches;
-    },
-
-    /**
-     * Récupère toutes les branches ouvertes
-     *
-     * @access  public
-     * @return  void
-     */
-    getOpenedBranches : function () {
-        var openedBranches = [];
-        for (var i = 0; i < this.roots.length; i++) {
-            if (this.roots[i].isOpened() && this.roots[i].hasChildren()) {
-                openedBranches.push(this.roots[i]);
-            }
-            openedBranches = this.roots[i].getOpenedBranches(openedBranches);
-        }
-        return openedBranches;
-    },
-
-    /**
-     * Récupère toutes les branches checkées
-     *
-     * @access  public
-     * @return  void
-     */
-    getCheckedBranches : function () {
-        var checkedBranches = [];
-        for (var i = 0; i < this.roots.length; i++) {
-            if (this.roots[i].isChecked() == 1) {
-                checkedBranches.push(this.roots[i]);
-            }
-            checkedBranches = this.roots[i].getCheckedBranches(checkedBranches);
-        }
-        return checkedBranches;
-    },
-
-    /**
-     * Récupère toutes les branches non checkées
-     *
-     * @access  public
-     * @return  void
-     */
-    getUnCheckedBranches : function () {
-        var uncheckedBranches = [];
-        for (var i = 0; i < this.roots.length; i++) {
-            if (this.roots[i].isChecked() == 0) {
-                uncheckedBranches.push(this.roots[i]);
-            }
-            uncheckedBranches = this.roots[i].getUnCheckedBranches(uncheckedBranches);
-        }
-        return uncheckedBranches;
-    },
-
-    /**
-     * Récupère toutes les branches partiellement checkées
-     *
-     * @access  public
-     * @return  void
-     */
-    getPartCheckedBranches : function () {
-        var uncheckedBranches = [];
-        for (var i = 0; i < this.roots.length; i++) {
-            if (this.roots[i].isChecked() == -1) {
-                uncheckedBranches.push(this.roots[i]);
-            }
-            uncheckedBranches = this.roots[i].getPartCheckedBranches(uncheckedBranches);
-        }
-        return uncheckedBranches;
-    },
-
-    getParentBranches : function () {
-        var parents = [];
-        for (var i = 0; i < this.roots.length; i++) {
-            if (this.roots[i].hasChildren()) {
-                parents.push(this.roots[i]);
-            }
-            parents = this.roots[i].getParentBranches(parents);
-        }
-        return parents;
-    },
-
-    getLeafBranches : function () {
-        var leafs = [];
-        for (var i = 0; i < this.roots.length; i++) {
-            if (!this.roots[i].hasChildren()) {
-                leafs.push(this.roots[i]);
-            }
-            leafs = this.roots[i].getLeafBranches(leafs);
-        }
-        return leafs;
-    },
-
-    /**
-     * Fonction qui ouvre tout l'arbre d'un coup
-     *
-     * @access  public
-     * @return  void
-     */
-    expend : function () {
-        for (var i = 0; i < this.roots.length; i++) {
-            this.roots[i].expend();
-        }
-    },
-
-    /**
-     * Fonction qui ferme tout l'arbre d'un coup
-     *
-     * @access  public
-     * @return  void
-     */
-    collapse : function () {
-        for (var i = 0; i < this.roots.length; i++) {
-            this.roots[i].collapse();
-        }
-    },
-
-    /**
-     * Méthode pour récupérer une branche en fonction de son id
-     *
-     * @access  public
-     * @param   string              position                L'id de la branche soeur ou parente, ou l'objet
-     * @param   object              item                    La nouvelle branche
-     * @param   boolean             sibling                 True pour 'sibling', false pour 'child'
-     * @param   boolean             isFirst                 True pour l'insérer, soit comme 1er enfant, soit avant la soeur
-     * @return  void
-     */
-    insertBranch : function (position, item, sibling, isFirst) {
-        var position = this.getBranchById(position);
-        if (!position) return false;
-        if (!sibling) {
-            if (!isFirst) {
-                position.insertIntoLast(item);
-            } else {
-                position.insertIntoFirst(item);
-            }
-        } else {
-            if (!isFirst) {
-                position.insertAfter(item);
-            } else {
-                position.insertBefore(item);
-            }
-        }
-    },
-
-    moveBranch : function (position, item, sibling, isFirst) {
-        var position = this.getBranchById(position);
-        if (!position) return false;
-        if (!sibling) {
-            if (!isFirst) {
-                position.moveIntoLast(item);
-            } else {
-                position.moveIntoFirst(item);
-            }
-        } else {
-            if (!isFirst) {
-                position.moveAfter(item);
-            } else {
-                position.moveBefore(item);
-            }
-        }
-    },
-
-    /**
-     * Fonction qui efface la branche
-     *
-     * @access  public
-     * @return  void
-     */
-    removeBranch : function (branch) {
-        try {
-            var branch = this.getBranchById(branch);
-            if (!branch) return false;
-            // On enlève le drag&drop
-            if (branch.objDrag) {
-                branch.removeDragDrop();
-            }
-            if (!branch.isRoot) {
-                // On supprime le noeud HTML
-                branch.parent.obj.removeChild(branch.obj);
-                // On l'enlève de la structure Javacript
-                branch.parent.children.splice(branch.pos, 1);
-                branch.parent.struct.items.splice(branch.pos, 1);
-                if (branch.parent.children.length == 0) {
-                    branch.parent.setOpenableIcon(false);
-                    if (branch.tree.multiline) {
-                        branch._manageMultiline(branch.parent.tdImg, 2, false);
-                    }
-                }
-                // On repositionne la structure
-                branch.parent._manageLine();
-            } else {
-                // On supprime le noeud HTML
-                this.div.removeChild(branch.obj);
-                // On l'enlève de la structure Javacript
-                this.roots.splice(branch.pos, 1);
-                if (this.roots[branch.pos-1]) {
-                    this.roots[branch.pos-1]._manageAfterRootInsert();
-                }
-            }
-            branch = null;
-        } catch (err) {
-            throw new Error ('remove(base) : ' + err.message);
-        }
-    },
-
-    /**
-     * Méthode pour récupérer une branche en fonction de son id généré
-     *
-     * @access  public
-     * @param   string              id                      L'id généré de la branche
-     * @return  TafelBranch                                 La branche sélectionnée
-     */
-    getBranchByIdObj : function (id) {
-        try {
-            var obj = null;
-            for (var r = 0; r < this.roots.length; r++) {
-                obj = this._getBranchByIdObj(id, this.roots[r]);
-                if (obj) {
-                    break;
-                }
-            }
-            return obj;
-        } catch (err) {
-            throw new Error ('getBranchByIdObj(func) : ' + err.message);
-        }
-    },
-
-    /**
-     * Méthode pour récupérer une branche en fonction de son id utilisateur
-     *
-     * @access  public
-     * @param   string              id                      L'id utilisateur de la branche
-     * @return  TafelBranch                                 La branche sélectionnée
-     */
-    getBranchById : function (id) {
-        try {
-            if (typeof(id) == 'object') return id;
-            var obj = null;
-            for (var r = 0; r < this.roots.length; r++) {
-                obj = this._getBranchById(id, this.roots[r]);
-                if (obj) break;
-            }
-            if (!obj) {
-                // On magouille avec les roots pour ne pas passer
-                // dans une boucle infinie (à cause du getBranchById)
-                var ro = null;
-                for (var i = 0; i < this.otherTrees.length; i++) {
-                    ro = this.otherTrees[i].roots;
-                    for (var r = 0; r < ro.length; r++) {
-                        obj = this.otherTrees[i]._getBranchById(id, ro[r]);
-                        if (obj) break;
-                    }
-                    if (obj) break;
-                }
-            }
-            return obj;
-        } catch (err) {
-            throw new Error ('getBranchById(func) : ' + err.message);
-        }
-    },
-
-    /**
-     * Méthode de gestion de debug
-     *
-     * @access  public
-     * @param   string              str                     Une string à afficher (optionnel)
-     * @return  void
-     */
-    debug : function (str) {
-        try {
-            this.debugObj.style.display = 'block';
-            if (typeof(this.onDebug) == 'function') {
-                this.onDebug(this, this.debugObj, (str) ? str : '');
-            } else {
-                this.debugObj.innerHTML += str;
-            }
-        } catch (err) {
-            throw new Error ('debug(func) : ' + err.message);
-        }
-    },
-
-    /**
-     * Fonction pour afficher l'ojbet de manière cool
-     *
-     * @access  public
-     * @return  string                                      La string de l'objet
-     */
-    toString : function () {
-        var obj = {
-            'id' : this.id,
-            'width' : this.div.offsetWidth,
-            'height' : this.div.offsetHeight,
-            'imgPath' : this.imgBase,
-            'roots' : this.roots.length
-        };
-        var str = 'TafelTree {';
-        for (var i in obj) {
-            str += TafelTree.debugReturn + TafelTree.debugTab + i + ' : ' + obj[i];
-        }
-        str += TafelTree.debugReturn + '}';
-        return str;
-    },
-
-    /**
-     * Fonction qui sérialise l'arbre pour en faire une string JSON
-     *
-     * @access  public
-     * @return  string                                      La string de l'objet
-     */
-    serialize : function (debug) {
-        var rt = (debug) ? TafelTree.debugReturn : '';
-        var str = (debug) ? 'TafelTree (' + this.id + ') [' : '[';
-        for (var i = 0; i < this.roots.length; i++) {
-            str += this.roots[i].serialize(debug, true);
-            if (i < this.roots.length - 1) {
-                str += ',';
-            }
-        }
-        str += rt + ((debug) ? '];' : ']');
-        if (debug) {
-            return str;
-        } else {
-            return encodeURIComponent(str);
-        }
-    },
-
-    /**
-     * Fonction qui renvoie les paramètres de l'URL
-     *
-     * ils sont renvoyés sous cette forme :
-            params[0] = {
-                'name' : 'paramName',
-                'value': 'paramValue'
-            }
-     *
-     * @access  public
-     * @param   string              url                     L'url à decomposer
-     * @return  array                                       Le tableau de paramètres
-     */
-    getURLParams : function (url) {
-        var params = [];
-        if (url.indexOf('?') > -1) {
-            var a1 = url.split('?');
-            var a2 = a1[1].split('&');
-            var a3 = '';
-            for (var i = 0; i < a2.length; i++) {
-                a3 = a2[i].split('=');
-                if (a3.length == 2) {
-                    params.push({
-                        'name' : a3[0],
-                        'value': a3[1]
-                    })
-                }
-            }
-        }
-        return params;
-    },
-
-
-    /**
-     *------------------------------------------------------------------------------
-     *                          TafelTree private methods
-     *------------------------------------------------------------------------------
-     */
-
-    _generateBigTree : function () {
-        var i = this.bigTreeLoading;
-        var isNotFirst = false;
-        var isNotLast = false;
-        if (i < this.baseStruct.length) {
-            isNotFirst = (i > 0) ? true : false;
-            isNotLast = (i < this.baseStruct.length - 1) ? true : false;
-            this.roots[i] = new TafelTreeRoot(this, this.baseStruct[i], 0, isNotFirst, isNotLast, i);
-            this.div.appendChild(this.roots[i].obj);
-            this.loadRunning(this.roots[i]);
-            this.bigTreeLoading++;
-            setTimeout(this._generateBigTree.bind(this), 10);
-        } else {
-            this.loaded = true;
-        }
-    },
-
-    _checkLoad : function () {
-        var complete = true;
-        if (this.loaded) {
-            for (var i = 0; i < this.roots.length; i++) {
-                if (!this.roots[i].loaded || !this._checkLoadChildren(this.roots[i])) {
-                    complete = false;
-                    break;
-                }
-            }
-        } else {
-            complete = false;
-        }
-        if (!complete){
-            setTimeout(this._checkLoad.bind(this), 100);
-        } else {
-            this.loadComplete();
-        }
-    },
-
-    _checkLoadChildren : function (branch) {
-        var complete = true;
-        if (branch.loaded) {
-            for (var i = 0; i < branch.children.length; i++) {
-                if (!branch.children[i].loaded || !this._checkLoadChildren(branch.children[i])) {
-                    complete = false;
-                    break;
-                }
-            }
-        } else {
-            complete = false;
-        }
-        return complete;
-    },
-
-    _adjustOpening : function () {
-        // Si on utilise les cookies, on s'en sert pour ouvrir ou fermer les branches
-        if (this.useCookie && this.cookieOpened) {
-            var branch = null;
-            for (var i = 0; i < this.cookieOpened.length; i++) {
-                branch = this.getBranchById(this.cookieOpened[i]);
-                if (typeof(branch) == 'object' && branch.hasChildren()) {
-                    if (branch.children.length > 0) {
-                        // Cette branche est une branche normale
-                        branch.openIt(true);
-                    } else {
-                        // Cette branche est une branche qui a ses enfants sur le serveur
-                        // On va donc les récupérer
-                        if (typeof(branch.struct.onopenpopulate) == 'function' && branch.eventable) {
-                            branch._openPopulate();
-                            branch.openIt(true);
-                        }
-                    }
-                }
-            }
-        }
-    },
-
-    _adjustCheck : function () {
-        // On ajuste les checks d'après les cookies
-        var branch = null;
-        if (this.checkboxes && this.useCookie && this.cookieChecked) {
-            for (var i = 0; i < this.cookieChecked.length; i++) {
-                branch = this.getBranchById(this.cookieChecked[i]);
-                if (typeof(branch) == 'object') {
-                    branch.check(1);
-                }
-            }
-        }
-        // Si on a des checkboxes, on corrige les images en fonction des checks
-        if (this.checkboxes && this.checkboxesThreeState) {
-            var checked = this.getCheckedBranches();
-            for (var i = 0; i < checked.length; i++) {
-                checked[i]._adjustParentCheck();
-            }
-        }
-    },
-
-    /**
-     * Méthode récursive pour récupérer une branche en fonction de son id généré
-     *
-     * @access  private
-     * @param   string              id                      L'id généré de la branche recherchée
-     * @param   TafelTreeBranch     obj                     La branche courante
-     * @return  TafelBranch                                 La branche sélectionnée
-     */
-    _getBranchByIdObj : function (id, obj) {
-        try {
-            var ob = '';
-            if (obj.idObj == id) {
-                return obj;
-            }
-            if (typeof(obj.children) == 'object') {
-                for (var c = 0; c < obj.children.length; c++) {
-                    ob = this._getBranchByIdObj(id, obj.children[c]);
-                    if (ob) {
-                        return ob;
-                    }
-                }
-            }
-            return ob;
-        } catch (err) {
-            throw new Error ('_getBranchByIdObj(func) : ' + err.message);
-        }
-    },
-
-    /**
-     * Méthode récursive pour récupérer une branche en fonction de son id utilisateur
-     *
-     * @access  private
-     * @param   string              id                      L'id utilisateur de la branche recherchée
-     * @param   TafelTreeBranch     obj                     La branche courante
-     * @return  TafelBranch                                 La branche sélectionnée
-     */
-    _getBranchById : function (id, obj) {
-        try {
-            var ob = '';
-            if (obj.getId() == id) {
-                return obj;
-            }
-            if (typeof(obj.children) == 'object') {
-                for (var c = 0; c < obj.children.length; c++) {
-                    ob = this._getBranchById(id, obj.children[c]);
-                    if (ob) {
-                        return ob;
-                    }
-                }
-            }
-            return ob;
-        } catch (err) {
-            throw new Error ('_getBranchById(func) : ' + err.message);
-        }
-    },
-
-    /**
-     * Fonction qui change la structure de la branche
-     *
-     * @access  private
-     * @param   TafelTreeBranch     branch                  La nouvelle structure
-     * @return  void
-     */
-    _changeStruct : function (branch) {
-        try {
-            while (typeof(branch.parent) != 'undefined') {
-                branch.parent.struct.items.splice(branch.pos, 1, branch.struct);
-                if (typeof(branch.parent) != 'undefined') {
-                    branch = branch.parent;
-                }
-            }
-        } catch (err) {
-            throw new Error ('_changeStruct(func) : ' + err.message);
-        }
-    },
-
-    /**
-     * Méthode pour ajouter l'élément principal
-     *
-     * @access  private
-     * @return  HTMLDivElement                              L'élément DIV créé
-     */
-    _addTree : function () {
-        var div = document.createElement('div');
-        div.className = this.classTree;
-        return div;
-    },
-
-
-    /**
-     *------------------------------------------------------------------------------
-     *                          TafelTree Cookies Management
-     *------------------------------------------------------------------------------
-     */
-
-    /**
-     * Méthode qui sauve le contenu dans le cookie. Propre à l'application
-     *
-     * @access  public
-     * @param   string              name                    Nom du cookie
-     * @return  void
-     */
-    setCookie : function (name) {
-        try {
-            var str = 'cookieactivate' + this.cookieSeparator;
-            // Les branches ouvertes
-            var arr = this.getOpenedBranches();
-            for (var i = 0; i < arr.length; i++) {
-                str = str + arr[i].getId() + this.cookieSeparator;
-            }
-            // Les branches checkées
-            str += this.cookieCheckSeparator;
-            var arr = this.getCheckedBranches();
-            for (var i = 0; i < arr.length; i++) {
-                str = str + arr[i].getId() + this.cookieSeparator;
-            }
-            if (!this.serverCookie) {
-                this._saveCookie(name, str, '', '/', '', '');
-            } else {
-                // send cookie server only if tree is loaded (optimization)
-                if (this.loaded) {
-                    new Ajax.Request(this.serverCookie, {
-                        'method' : 'post',
-                        'parameters' : 'type=set&cookieString=' + str,
-                        'onComplete' : this._cookieSend.bind(this),
-                        'onFailure' : this._cookieFailure.bind(this)
-                    });
-                }
-            }
-        } catch (err) {
-            throw new Error ('setCookie(func) : ' + err.message);
-        }
-    },
-
-    /**
-     * Méthode qui récupère le contenu d'un cookie en fonction du nom
-     *
-     * @access  public
-     * @param   string              name                    Nom du cookie
-     * @return  string                                      Le contenu du cookie
-     */
-    getCookie : function (name) {
-        try {
-            if (!this.serverCookie) {
-                if (name != ''){
-                    var start = document.cookie.indexOf(name + '=');
-                    var len = start + name.length + 1;
-                    if ((!start) && (name != document.cookie.substring(0, name.length))){
-                        return null;
-                    }
-                    if ( start == -1 ) return null;
-                    var end = document.cookie.indexOf(';', len);
-                    if (end == -1){
-                        end = document.cookie.length;
-                    }
-                    return unescape(document.cookie.substring(len, end));
-                }
-            } else {
-                new Ajax.Request(this.serverCookie, {
-                    'method' : 'post',
-                    'parameters' : 'type=get',
-                    'onComplete' : this._getCookieComplete.bind(this),
-                    'onFailure' : this._cookieFailure.bind(this)
-                });
-            }
-            return null;
-        } catch (err) {
-            throw new Error ('getCookie(func) : ' + err.message);
-        }
-    },
-
-    _cookieSend : function (response) {
-        alert('ok');
-    },
-
-    _getCookieComplete : function (response) {
-        var fromCookie = response.responseText;
-        if (fromCookie) {
-            var branches = fromCookie.split(this.cookieCheckSeparator);
-            // Branches ouvertes
-            this.cookieOpened = [];
-            this.cookieOpened = branches[0].split(this.cookieSeparator);
-            this.cookieOpened.shift();
-            // Branches checkées (avec anti-bug pour les anciennes versions et anciens cookies)
-            this.cookieChecked = [];
-            if (branches.length > 1) {
-                this.cookieChecked = branches[1].split(this.cookieSeparator);
-            }
-        }
-        if (this.options.generate) {
-            this.generate();
-        }
-        if (this.options.generateBigTree) {
-            this.generate(true);
-        }
-    },
-
-    _cookieFailure : function (response) {
-        // do nothing
-    },
-
-    /**
-     * Méthode qui supprime un cookie. Seul le nom est obligatoire
-     *
-     * @access  public
-     * @param   string              name                    Nom du cookie
-     * @param   string              path                    Le chemin
-     * @param   string              domain                  Le domaine
-     * @return  void
-     */
-    deleteCookie : function (name, path, domain) {
-        try {
-            if (get_cookie(name)) document.cookie = name + '=' +
-            ( ( path ) ? ';path=' + path : "") +
-            ( ( domain ) ? ';domain=' + domain : '') +
-            ';expires=Thu, 01-Jan-1970 00:00:01 GMT';
-        } catch (err) {
-            throw new Error ('deleteCookie(func) : ' + err.message);
-        }
-    },
-
-    /**
-     * Méthode qui sauve le contenu dans le cookie. Propre à toute application
-     *
-     * @access  private
-     * @param   string              name                    Nom du cookie
-     * @param   string              value                   La valeur à enregistrer
-     * @param   integer             expires                 La durée de vie du cookie, en jour
-     * @param   string              path                    Le chemin
-     * @param   string              domain                  Le domaine
-     * @param   string              secure                  ?
-     * @return  void
-     */
-    _saveCookie : function (name, value, expires, path, domain, secure) {
-        try {
-            // set time, it's in milliseconds
-            var today = new Date();
-            today.setTime(today.getTime());
-            if (expires){
-                expires = expires * 1000 * 60 * 60 * 24;
-            }
-            var expires_date = new Date(today.getTime() + (expires));
-
-            document.cookie = name + '=' +escape(value) +
-            ( ( expires ) ? ';expires=' + expires_date.toGMTString() : '') +
-            ( ( path ) ? ';path=' + path : '') +
-            ( ( domain ) ? ';domain=' + domain : '') +
-            ( ( secure ) ? ';secure' : '');
-        } catch (err) {
-            throw new Error ('_saveCookie(func) : ' + err.message);
-        }
-    },
-
-
-    /**
-     *------------------------------------------------------------------------------
-     *                          TafelTree Events Management
-     *------------------------------------------------------------------------------
-     */
-
-    /**
-     * Méthode qui appelle la méthode utilisateur après le load de l'arbre
-     *
-     * @access  public
-     * @param   function            func                    La fonction utilisateur
-     * @return  void
-     */
-    setOnLoad : function (func) {
-        this.onLoad = eval(func);
-    },
-
-    /**
-     * Méthode qui appelle la méthode utilisateur pendant le load de l'arbre
-     *
-     * @access  public
-     * @param   function            func                    La fonction utilisateur
-     * @return  void
-     */
-    setOnLoading : function (func) {
-        this.onLoading = eval(func);
-    },
-
-    /**
-     * Méthode qui appelle la méthode utilisateur après l'ouverture ou fermeture d'un noeud
-     *
-     * @access  public
-     * @param   function            func                    La fonction utilisateur
-     * @return  void
-     */
-    setOnOpen : function (func) {
-        this.onOpen = eval(func);
-    },
-
-    /**
-     * Méthode qui appelle la méthode utilisateur avant l'ouverture ou fermeture d'un noeud
-     *
-     * @access  public
-     * @param   function            func                    La fonction utilisateur
-     * @return  void
-     */
-    setOnBeforeOpen : function (func) {
-        this.onBeforeOpen = eval(func);
-    },
-
-    /**
-     * Méthode qui appelle la méthode utilisateur lorsque la souris est sur un noeud
-     *
-     * @access  public
-     * @param   function            func                    La fonction utilisateur
-     * @return  void
-     */
-    setOnMouseOver : function (func) {
-        this.onMouseOver = eval(func);
-    },
-
-    /**
-     * Méthode qui appelle la méthode utilisateur lorsque la souris quitte le noeud
-     *
-     * @access  public
-     * @param   function            func                    La fonction utilisateur
-     * @return  void
-     */
-    setOnMouseOut : function (func) {
-        this.onMouseOut = eval(func);
-    },
-
-    /**
-     * Méthode qui appelle la méthode utilisateur après un clic sur un noeud
-     *
-     * @access  public
-     * @param   function            func                    La fonction utilisateur
-     * @return  void
-     */
-    setOnClick : function (func) {
-        this.onClick = eval(func);
-    },
-
-    /**
-     * Méthode qui appelle la méthode utilisateur après un mouse down
-     *
-     * @access  public
-     * @param   function            func                    La fonction utilisateur
-     * @return  void
-     */
-    setOnMouseDown : function (func) {
-        this.onMouseDown = eval(func);
-    },
-
-    /**
-     * Méthode qui appelle la méthode utilisateur après un mouse up
-     *
-     * @access  public
-     * @param   function            func                    La fonction utilisateur
-     * @return  void
-     */
-    setOnMouseUp : function (func) {
-        this.onMouseUp = eval(func);
-    },
-
-    /**
-     * Méthode qui appelle la méthode utilisateur lors d'un double-clic sur un noeud
-     *
-     * @access  public
-     * @param   function            func                    La fonction utilisateur
-     * @return  void
-     */
-    setOnDblClick : function (func) {
-        this.onDblClick = eval(func);
-    },
-
-    /**
-     * Méthode qui appelle la méthode utilisateur lors de la fin de l'édition d'une branche
-     *
-     * @access  public
-     * @param   function            func                    La fonction utilisateur
-     * @param   string              link                    Le lien de la page ajax
-     * @return  void
-     */
-    setOnEdit : function (func, link) {
-        if (link) {
-            this.onEditAjax = {
-                'func' : eval(func),
-                'link' : link
-            };
-        } else {
-            this.onEdit = eval(func);
-        }
-        this.editableBranches = true;
-    },
-
-    /**
-     * Méthode qui appelle la méthode utilisateur lorsqu'on clique sur une checkbox, avant que celle-ci change de status
-     *
-     * @access  public
-     * @param   function            func                    La fonction utilisateur
-     * @return  void
-     */
-    setOnBeforeCheck : function (func) {
-        this.onBeforeCheck = eval(func);
-    },
-
-    /**
-     * Méthode qui appelle la méthode utilisateur lorsqu'on clique sur une checkbox, après qu'elle ait changé de status
-     *
-     * @access  public
-     * @param   function            func                    La fonction utilisateur
-     * @return  void
-     */
-    setOnCheck : function (func) {
-        this.onCheck = eval(func);
-    },
-
-    /**
-     * Méthode qui appelle la méthode utilisateur lors d'un drop sur un noeud
-     *
-     * @access  public
-     * @param   function            func                    La fonction utilisateur
-     * @return  void
-     */
-    setOnDrop : function (func) {
-        this.onDrop = eval(func);
-    },
-
-    /**
-     * Méthode qui appelle la méthode utilisateur après un drop sur un noeud
-     *
-     * @access  public
-     * @param   function            func                    La fonction utilisateur
-     * @return  void
-     */
-    setOnDropAfter : function (func) {
-        this.onErrorAjax = eval(func);
-    },
-
-    /**
-     * Méthode qui appelle la méthode utilisateur lors d'un drop sur un noeud
-     *
-     * @access  public
-     * @param   function            func                    La fonction utilisateur
-     * @param   string              link                    Le lien de la page ajax
-     * @param   boolean             propagateRestiction     True pour interdir le mouvement des enfants de la branche droppée
-     * @return  void
-     */
-    setOnDropAjax : function (func, link) {
-        this.onDropAjax = {
-            'func' : eval(func),
-            'link' : link
-        };
-    },
-
-    /**
-     * Fonction appelée au retour de la requête Ajax après un open de la branche
-     *
-     * @access  public
-     * @param   function|boolean    func                    La fonction utilisateur ou true
-     * @param   string              link                    Le lien de la page ajax
-     * @return  void
-     */
-    setOnOpenPopulate : function (func, link) {
-        this.onOpenPopulate = {
-            'func' : eval(func),
-            'link' : link
-        };
-    },
-
-    /**
-     * Méthode qui appelle la méthode utilisateur lors de la fin de l'édition d'une branche
-     *
-     * @access  public
-     * @param   function            func                    La fonction utilisateur
-     * @param   string              link                    Le lien de la page ajax
-     * @return  void
-     */
-    setOnEditAjax : function (func, link) {
-        this.onEditAjax = {
-            'func' : eval(func),
-            'link' : link
-        };
-        this.editableBranches = true;
-    },
-
-    setOnDragStartEffect : function (func) {
-        this.onDragStartEffect = eval(func);
-    },
-
-    setOnDragEndEffect : function (func) {
-        this.onDragEndEffect = eval(func);
-    }
-};
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-/**
- *------------------------------------------------------------------------------
- *                          Abstract TafelTreeBaseBranch Class
- *------------------------------------------------------------------------------
- */
-
-var TafelTreeBaseBranch = Class.create();
-
-TafelTreeBaseBranch.prototype = {
-
-    initialize : function () {},
-
-
-    /**
-     *------------------------------------------------------------------------------
-     *                          TafelTreeBaseBranch getters & setters
-     *------------------------------------------------------------------------------
-     */
-
-    getId : function () {
-        return this.struct.id;
-    },
-
-    getText : function () {
-        return this.struct.txt;
-    },
-
-    getLevel : function () {
-        return this.level;
-    },
-
-    getTree : function () {
-        return this.tree;
-    },
-
-    getParent : function () {
-        return (this.isRoot) ? null : this.parent;
-    },
-
-    /**
-     * Retourne la racine parente, null s'il n'y en a pas
-     *
-     * @access  public
-     * @return  TafelTreeRoot                           La racine parente
-     */
-    getAncestor : function () {
-        return (this.isRoot) ? null : this.root;
-    },
-
-    /**
-     * Retourne tous les parents, racine comprise.
-     *
-     * Le 1er élément du tableau est le parent direct, le dernier étant
-     * la racine
-     *
-     * @access  public
-     * @return  array                                   Les parents
-     */
-    getParents : function () {
-        var parents = [];
-        var branch = this;
-        while (branch.parent) {
-            parents.push(branch.parent);
-            branch = branch.parent;
-        }
-        return parents;
-    },
-
-    getChildren : function () {
-        return this.children;
-    },
-
-    getIcon : function () {
-        return this.struct.img;
-    },
-
-    getOpenIcon : function () {
-        return this.struct.imgopen;
-    },
-
-    getCloseIcon : function () {
-        return this.struct.imgclose;
-    },
-
-    getIconSelected : function () {
-        return this.struct.imgselected;
-    },
-
-    getOpenIconSelected : function () {
-        return this.struct.imgopenselected;
-    },
-
-    getCloseIconSelected : function () {
-        return this.struct.imgcloseselected;
-    },
-
-    getCurrentIcon : function () {
-        var img = this._getImgInfo(this.img);
-        return img.fullName;
-    },
-
-    setText : function (text) {
-        this.struct.txt = text;
-        this.txt.innerHTML = text;
-    },
-
-    setIcons : function (icon, iconOpen, iconClose) {
-        this.struct.img = icon;
-        this.struct.imgopen = (iconOpen) ? iconOpen : icon;
-        this.struct.imgclose = (iconClose) ? iconClose : icon;
-        if (this.hasChildren()) {
-            this.img.src = (this.isOpened()) ? this.tree.imgBase + this.struct.imgopen : this.tree.imgBase + this.struct.imgclose;
-        } else {
-            this.img.src = this.tree.imgBase + this.struct.img;
-        }
-    },
-
-    setIconsSelected : function (icon, iconOpen, iconClose) {
-        this.struct.imgselected = icon;
-        this.struct.imgopenselected = (iconOpen) ? iconOpen : null;
-        this.struct.imgcloseselected = (iconClose) ? iconClose : null;
-        if (this.isSelected()) {
-            if (this.hasChildren()) {
-                this.img.src = (this.isOpened()) ? this.tree.imgBase + this.struct.imgopenselected : this.tree.imgBase + this.struct.imgcloseselected;
-            } else {
-                this.img.src = this.tree.imgBase + this.struct.imgselected;
-            }
-        }
-    },
-
-    /**
-     * Méthode qui change l'id de l'élément. A utiliser avec parcimonie
-     *
-     * @access  public
-     * @param   string          newId                   Le nouvel id
-     * @return  boolean                                 True si tout est ok, false si l'id existe déjà dans l'arbre
-     */
-    changeId : function (newId) {
-        var used = this.tree.getBranchById(newId);
-        if (!used) {
-            this.struct.id = newId;
-            this.tree._changeStruct(this);
-            return true;
-        } else {
-            return false;
-        }
-    },
-
-    /**
-     * Méthode qui détermine si l'élément a des enfants ou non*
-     *
-     * @access  public
-     * @return  boolean                                 True s'il a des enfants, false sinon
-     */
-    hasChildren : function () {
-        return (this.struct.items.length > 0 || this.struct.canhavechildren) ? true : false;
-    },
-
-    isOpened : function () {
-        return (this.struct.open) ? true : false;
-    },
-
-    isAlwaysLast : function () {
-        return (this.struct.last) ? true : false;
-    },
-
-    isOpenedInCookie : function () {
-        if (this.tree.useCookie && this.tree.cookieOpened) {
-            for (var i = 0; i < this.tree.cookieOpened.length; i++) {
-                if (this.getId() == this.tree.cookieOpened[i]) return true;
-            }
-        }
-        return false;
-    },
-
-    /**
-     * Retourne true si la branche est visible
-     *
-     * @access  public
-     * @return  boolean                                 True si la branche est visible, false sinon
-     */
-    isVisible : function () {
-        var visible = true;
-        var branch = this;
-        while (branch.parent) {
-            if (branch.parent.isOpened()) {
-                branch = branch.parent;
-            } else {
-                visible = false;
-                break;
-            }
-        }
-        return visible;
-    },
-
-    /**
-     * Retourne TRUE si la branche est sélectionnée
-     *
-     * @access  public
-     * @return  boolean                                     True si la branche est sélectionnée, false sinon
-     */
-    isSelected : function () {
-        return (Element.hasClassName(this.txt, this.tree.classSelected)) ? true : false;
-    },
-
-
-    /**
-     *------------------------------------------------------------------------------
-     *                          TafelTreeBaseBranch public functions
-     *------------------------------------------------------------------------------
-     */
-
-    /**
-     * Rafraichit les enfants de la branche en fonction de ce qu'il y a sur le serveur
-     *
-     * @access  public
-     * @return  void
-     */
-    refreshChildren : function () {
-        this.removeChildren();
-        this._openPopulate();
-    },
-
-    /**
-     * Clone toute la structure de la branche
-     *
-     * @access  public*
-     * @param   boolean         withDefaultFunc         True pour copier les fonctions par defaut de l'arbre
-     * @return  object                                  La structure JSON de la branche
-     */
-    clone : function (withDefaultFunc) {
-        var struct = {};
-        for (var property in this.struct) {
-            if (property != 'items') {
-                // On prend les fonctions seulement si elles sont définies pour la branche
-                if (!withDefaultFunc && typeof(this.struct[property]) == 'function') {
-                    if (!eval('this.' + property + 'Default')) {
-                        struct[property] = this.struct[property];
-                    }
-                } else {
-                    struct[property] = this.struct[property];
-                }
-            }
-        }
-        if (this.hasChildren()) {
-            struct.items = [];
-            for (var i = 0; i < this.children.length; i++) {
-                struct.items.push(this.children[i].clone(withDefaultFunc));
-            }
-        }
-        this.copiedTimes++;
-        struct.id = struct.id + this.tree.copyNameBreak + this.tree.idTree;
-        struct.txt = struct.txt + this.tree.copyName.replace('%n', this.copiedTimes);
-        return struct;
-    },
-
-    /**
-     * Retourne le premier enfant de la branche, ou null s'il y en a pas
-     *
-     * @access  public
-     * @return  TafelTreeBranch                             Le premier enfant de la branche
-     */
-    getFirstBranch : function () {
-        return (this.children.length > 0) ? this.children[0] : null;
-    },
-
-    /**
-     * Retourne le dernier enfant de la branche, ou null s'il y en a pas
-     *
-     * @access  public
-     * @return  TafelTreeBranch                             Le dernier enfant de la branche
-     */
-    getLastBranch : function () {
-        var pos = this.children.length - 1;
-        return (pos >= 0) ? this.children[pos] : null;
-    },
-
-    /**
-     * Fonction qui récupère la branche précédente du même niveau
-     *
-     * @access  public
-     * @return  TafelTreeBranch                             La branche si elle existe, null sinon
-     */
-    getPreviousSibling : function () {
-        var pos = this.pos - 1;
-        var branch = null;
-        if (this.isRoot) {
-            if (pos >= 0) branch = this.tree.roots[pos];
-        } else {
-            if (pos >= 0) branch = this.parent.children[pos];
-        }
-        return branch;
-    },
-
-    /**
-     * Fonction qui récupère la branche suivante du même niveau
-     *
-     * @access  public
-     * @return  TafelTreeBranch                             La branche si elle existe, null sinon
-     */
-    getNextSibling : function () {
-        var pos = this.pos + 1;
-        var branch = null;
-        if (this.isRoot) {
-            if (pos < this.tree.roots.length) branch = this.tree.roots[pos];
-        } else {
-            if (pos < this.parent.children.length) branch = this.parent.children[pos];
-        }
-        return branch;
-    },
-
-    /**
-     * Retourne la branche précédente dans l'arbre, pas forcément de même niveau
-     *
-     * @access  public
-     * @return  TafelTreeBranch                             La branche précédente, null s'il n'y en a pas
-     */
-    getPreviousBranch : function () {
-        var branch = null;
-        var previous = this.getPreviousSibling();
-        // Si elle a une soeur précédente
-        if (previous) {
-            // On regarde si elle a des enfants et est ouverte
-            if (previous.hasChildren()) {
-                // Si oui, on prend son dernier enfant
-                while (previous.hasChildren()) {
-                    previous = previous.getLastBranch();
-                }
-                branch = previous;
-            } else {
-                // Si ce n'est pas le cas, on la prend elle
-                branch = previous;
-            }
-        } else {
-            // Si elle n'a pas de soeur précédente, on prend le parent (s'il existe)
-            if (this.parent) {
-                branch = this.parent;
-            }
-        }
-        return branch;
-    },
-
-    /**
-     * Retourne la branche suivante dans l'arbre, pas forcément de même niveau
-     *
-     * @access  public
-     * @return  TafelTreeBranch                             La branche suivante, null s'il n'y en a pas
-     */
-    getNextBranch : function () {
-        var branch = null;
-        // Récupère le premier enfant, s'il y en a un
-        branch = this.getFirstBranch();
-        if (!branch) {
-            // Récupère sa prochaine soeur
-            branch = this.getNextSibling();
-            if (!branch) {
-                // Récupère la soeur du parent ou tout du moins d'un ancêtre
-                var b = null;
-                branch = this.parent;
-                while (!b && branch) {
-                    b = branch.getNextSibling();
-                    branch = branch.parent;
-                }
-                branch = b;
-            }
-        }
-        return branch;
-    },
-
-    /**
-     * Retourne la branch ouverte précédente (pas forcément du même niveau)
-     *
-     * @access  public
-     * @return  TafelTreeBranch                             La branche précédente ouverte, null s'il n'y en a pas
-     */
-    getPreviousOpenedBranch : function () {
-        var branch = null;
-        var previous = this.getPreviousSibling();
-        // Si elle a une soeur précédente
-        if (previous) {
-            // On regarde si elle a des enfants et est ouverte
-            if (previous.hasChildren() && previous.isOpened()) {
-                // Si oui, on prend son dernier enfant
-                while (previous.hasChildren() && previous.isOpened()) {
-                    previous = previous.getLastBranch();
-                }
-                branch = previous;
-            } else {
-                // Si ce n'est pas le cas, on la prend elle
-                branch = previous;
-            }
-        } else {
-            // Si elle n'a pas de soeur précédente, on prend le parent (s'il existe)
-            if (this.parent) {
-                branch = this.parent;
-            }
-        }
-        return branch;
-    },
-
-    /**
-     * Retourne la branch ouverte suivante (pas forcément du même niveau)
-     *
-     * @access  public
-     * @return  TafelTreeBranch                             La branche suivante ouverte, null s'il n'y en a pas
-     */
-    getNextOpenedBranch : function () {
-        var branch = null;
-        // Si elle a des enfants et qu'elle est ouverte, on prend le 1er
-        if (this.hasChildren() && this.isOpened()) {
-            branch = this.getFirstBranch();
-        } else {
-            // Si elle a pas d'enfants, on prend sa prochaine soeur
-            var next = this;
-            while (!branch) {
-                branch = next.getNextSibling();
-                next = next.parent;
-                if (!next) break;
-            }
-        }
-        return branch;
-    },
-
-    /**
-     * Fonction qui supprime tous les enfants
-     *
-     * @access  public
-     * @return  boolean                                     True si la branche est un enfant de elem
-     */
-    removeChildren : function () {
-        // On utilise concat() pour ne pas faire de référence sur this.children
-        var children = this.children.concat();
-        for (var i = 0; i < children.length; i++) {
-            this.tree.removeBranch(children[i]);
-        }
-    },
-
-    /**
-     * Fonction qui détermine si la branche est enfant de elem
-     *
-     * @access  public
-     * @param   TafelTreeBranch     elem                    La branche dont on veut savoir si elle est un ancêtre
-     * @return  boolean                                     True si la branche est un enfant de elem
-     */
-    isChild : function (elem) {
-        var elem = this.tree.getBranchById(elem);
-        if (!elem) return false;
-        return this._isChild(this, elem);
-    },
-
-    /**
-     * Fonction qui ouvre ou ferme la branche
-     *
-     * @access  public
-     * @param   boolean             open                    True pour ouvrir la branche
-     * @return  void
-     */
-    openIt : function (open) {
-        try {
-            if (!open) {
-                this._closeChild();
-                if (this.tree.multiline) {
-                    this._manageMultiline(this.tdImg, 2, false);
-                }
-            } else {
-                if (this.tree.onlyOneOpened) {
-                    this.closeSiblings();
-                }
-                this._openChild();
-                if (this.tree.multiline) {
-                    this._manageMultiline(this.tdImg, 2, true);
-                }
-            }
-            if (this.tree.useCookie) {
-                this.tree.setCookie(this.tree.classTree + this.tree.id);
-            }
-        } catch (err) {
-            throw new Error ('openIt(base) : ' + err.message);
-        }
-    },
-
-    /**
-     * Fonction qui insère une branche comme enfant, en fin de liste
-     *
-     * @access  public
-     * @param   object              item                    La nouvelle branche
-     * @return  void
-     */
-    insert : function (item) {
-        return this.insertIntoLast(item);
-    },
-    insertIntoLast : function (item) {
-        var pos = this.children.length;
-        var isNotFirst = (this.hasChildren()) ? true : false;
-        this.children[pos] = new TafelTreeBranch((this.isRoot) ? this : this.root, this, item, this.level + 1, isNotFirst, false, pos);
-        this.struct.items[pos] = item;
-        this.obj.appendChild(this.children[pos].obj);
-       // this._manageAfterInsert(pos);
-        return this.children[pos];
-    },
-
-    insertIntoFirst : function (item) {
-        var pos = 0;
-        var posBefore = 1;
-        var isNotLast = (this.hasChildren()) ? false : true;
-        this._movePartStruct(pos);
-        this.struct.items[pos] = item;
-        this.children[pos] = new TafelTreeBranch((this.isRoot) ? this : this.root, this, item, this.level + 1, false, isNotLast, pos);
-        try {
-            this.obj.insertBefore(this.children[pos].obj, this.children[posBefore].obj);
-        } catch (err) {
-            this.obj.appendChild(this.children[pos].obj);
-        }
-        this._manageAfterInsert(pos);
-        return this.children[pos];
-    },
-
-    /**
-     * Fonction qui ferme toutes les branches soeurs
-     *
-     * @access  public
-     * @return  void
-     */
-    closeSiblings : function () {
-        var obj = null;
-        if (this.parent) {
-            for (var i = 0; i < this.parent.children.length; i++) {
-                obj = this.parent.children[i];
-                if (obj.idObj != this.idObj && obj.hasChildren()) {
-                    obj.openIt(false);
-                }
-            }
-        } else if (this.isRoot) {
-            for (var i = 0; i < this.tree.roots.length; i++) {
-                obj = this.tree.roots[i];
-                if (obj.idObj != this.idObj && obj.hasChildren()) {
-                    obj.openIt(false);
-                }
-            }
-        }
-    },
-
-    /**
-     * Ajoute une classe CSS au texte
-     *
-     * @access  public
-     * @param   string          style                   Le style CSS à ajouter
-     * @return  void
-     */
-    addClass : function (style) {
-        Element.addClassName(this.txt, style);
-    },
-
-    /**
-     * Retire une classe CSS du texte
-     *
-     * @access  public
-     * @param   string          style                   Le style CSS à enlever
-     * @return  void
-     */
-    removeClass : function (style) {
-        Element.removeClassName(this.txt, style);
-    },
-
-    /**
-     * Retourne un objet anonyme représentant l'image précédant l'icône (un plus, par ex.)
-     *
-     * L'objet a cette structure :
-        var obj = {
-            'img'     : HTMLimgElement,
-            'number'  : Le numéro de l'image (juste avant l'extension),
-            'type'    : le nom de l'image sans le numéro et sans l'extension
-            'name'    : Le nom de l'image sans l'extension,
-            'fullName': Le nom de l'image avec l'extension
-        };
-     *
-     * @access  public
-     * @return  object                                      L'objet anonyme de l'image
-     */
-    getImgBeforeIcon : function () {
-        try {
-            var img = this.beforeIcon.getElementsByTagName('img')[0];
-            return this._getImgInfo(img);
-        } catch (err) {
-            throw new Error ('getImgBeforeIcon(base) : ' + err.message);
-        }
-    },
-
-    /**
-     * Fonction change l'icône en fonction des enfants, s'il y en a ou pas
-     *
-     * @access  public
-     * @param   boolean         openable                    True pour mettre l'icone d'ouverture
-     * @return  void
-     */
-    setOpenableIcon : function (openable) {
-        var im = this.getImgBeforeIcon();
-        var img = im.img;
-        if (openable) {
-            this.struct.open = true;
-            this.img.src = this.tree.imgBase + this.struct.imgopen;
-            if (!this.isRoot) {
-                img.src = (this.hasSiblingsAfter) ? this.tree.imgBase + this.tree.imgMinus3 : this.tree.imgBase + this.tree.imgMinus2;
-            } else {
-                if (this.hasSiblingsBefore) {
-                    img.src = (this.hasSiblingsAfter) ? this.tree.imgBase + this.tree.imgMinus3 : this.tree.imgBase + this.tree.imgMinus2;
-                } else {
-                    img.src = (this.hasSiblingsAfter) ? this.tree.imgBase + this.tree.imgMinus4 : this.tree.imgBase + this.tree.imgMinus5;
-                }
-            }
-            Event.observe(img, 'click', this.setOpen.bindAsEventListener(this), false);
-            Event.observe(img, 'mouseover', this.evt_openMouseOver.bindAsEventListener(this), false);
-            Event.observe(img, 'mouseout', this.evt_openMouseOut.bindAsEventListener(this), false);
-        } else {
-            this.struct.open = false;
-            this.struct.canhavechildren = false;
-            this.img.src = this.tree.imgBase + this.struct.img;
-            var td = img.parentNode;
-            var newImg = document.createElement('img');
-            td.removeChild(img);
-            if (!this.isRoot) {
-                newImg.src = (this.hasSiblingsAfter) ? this.tree.imgBase + this.tree.imgLine3 : this.tree.imgBase + this.tree.imgLine2;
-            } else {
-                if (this.hasSiblingsBefore) {
-                    newImg.src = (this.hasSiblingsAfter) ? this.tree.imgBase + this.tree.imgLine3 : this.tree.imgBase + this.tree.imgLine2;
-                } else {
-                    newImg.src = (this.hasSiblingsAfter) ? this.tree.imgBase + this.tree.imgLine4 : this.tree.imgBase + this.tree.imgLine5;
-                }
-            }
-            td.appendChild(newImg);
-        }
-    },
-
-    /**
-     * Fonction qui affiche la branche de manière cool
-     *
-     * @access  public
-     * @return  string                                      La string à afficher
-     */
-    toString : function () {
-        var str = (this.isRoot) ? 'TafelTreeRoot {' : 'TafelTreeBranch {';
-        // Définition de toutes les propriétés
-        var strSave = '';
-        for (var attr in this.struct) {
-            if (attr != 'items') {
-                strSave = (typeof(this.struct[attr]) != 'function') ? this.struct[attr] : true;
-                str += TafelTree.debugReturn + TafelTree.debugTab + attr + ' : ' + strSave;
-            }
-        }
-        str += TafelTree.debugReturn + TafelTree.debugTab + 'children : ' + this.children.length;
-        str += TafelTree.debugReturn + '}';
-        return str;
-    },
-
-    isChecked : function (dbg) {
-        if (this.tree.checkboxes && this.checkbox) {
-            var img = this._getImgInfo(this.checkbox);
-            if (img.fullName.replace('_over', '') == this.tree.imgCheck2) {
-                return 1;
-            }
-            if (img.fullName.replace('_over', '') == this.tree.imgCheck3) {
-                return -1;
-            }
-            return 0;
-        }
-        return 0;
-    },
-
-    getCheckbox : function () {
-        return (this.checkbox) ? this.checkbox : false;
-    },
-
-    check : function (checked) {
-        if (this.checkbox) {
-            if (checked == -1) {
-                this.checkbox.src = this.tree.imgBase + this.tree.imgCheck3;
-                this.struct.check = -1;
-            } else if (checked) {
-                this.checkbox.src = this.tree.imgBase + this.tree.imgCheck2;
-                this.struct.check = 1;
-                if (this.tree.useCookie) {
-                    this.tree.setCookie(this.tree.classTree + this.tree.id);
-                }
-            } else {
-                this.checkbox.src = this.tree.imgBase + this.tree.imgCheck1;
-                this.struct.check = 0;
-                if (this.tree.useCookie) {
-                    this.tree.setCookie(this.tree.classTree + this.tree.id);
-                }
-            }
-        }
-    },
-
-    /**
-     * Fonction qui retourne 1 si tous les enfants sont checkés, 0 si aucun et -1 si quelques uns
-     *
-     * @access  public
-     * @return  integer                                     1 si tout check, 0 si aucun, -1 si pas tous
-     */
-    hasAllChildrenChecked : function () {
-        var allChecked = false;
-        var anyChecked = false;
-        for (var i = 0; i < this.children.length; i++) {
-            if (this.children[i].isChecked() == -1) {
-                allChecked = true;
-                anyChecked = true;
-                break;
-            }
-            if (this.children[i].isChecked() == 1) allChecked = true;
-            else anyChecked = true;
-        }
-        if (allChecked && anyChecked) return -1;
-        if (allChecked) return 1;
-        else return 0;
-    },
-
-    /**
-     * Permet d'intervertir les deux branches. Elles conserveront toutes leurs
-     * caractéristiques (heureusement)
-     *
-     * @access  public
-     * @param   TafelTreeBranch     branchId            L'id de l'autre branche ou l'autre branche elle-même
-     * @return  void
-     */
-    switchWith : function (branchId) {
-        var branch = this.tree.getBranchById(branchId);
-        if (!branch) return false;
-
-        var copyThis = this.copiedTimes;
-        var newThis = this.clone();
-        var txtThis = this.getText();
-        var idThis = this.getId();
-        var copyBanch = branch.copiedTimes;
-        var newBranch = branch.clone();
-        var txtBranch = branch.getText();
-        var idBranch = branch.getId();
-        // On change l'id de la branche courante
-        this.changeId('temp_switch_change_' + this.tree.idTree);
-        // Inversion des branches
-        var n1 = branch.insertBefore(newThis);
-        this.tree.removeBranch(branch);
-        n1.setText(txtThis);
-        n1.changeId(idThis);
-        n1.copiedTimes = copyThis;
-        var n2 = this.insertBefore(newBranch);
-        this.tree.removeBranch(this);
-        n2.setText(txtBranch);
-        n2.changeId(idBranch);
-        n2.copiedTimes = copyBranch;
-    },
-
-    /**
-     * Remplace la branche passée en paramètre par l'autre.
-     *
-     * @access  public
-     * @param   TafelTreeBranch     branchId            L'id de la branche à remplacer ou l'objet lui-même
-     * @param   boolean             copy                True pour faire une copie de la branche qui remplace
-     * @return  TafelTreeBranch                         La branche remplacée
-     */
-    replace : function (branchId, copy) {
-        var branch = this.tree.getBranchById(branchId);
-        if (!branch) return false;
-
-        // Préparation du remplacement
-        var copyThis = this.copiedTimes;
-        var newThis = this.clone();
-        var n1 = branch.insertBefore(newThis);
-        this.tree.removeBranch(branch);
-        if (!copy) {
-            var idThis = this.getId();
-            n1.setText(this.getText())
-            this.tree.removeBranch(this);
-            n1.changeId(idThis);
-            n1.copiedTimes = copyThis;
-        }
-        return n1;
-    },
-
-    /**
-     * Méthode récursive qui ouvre la branche
-     *
-     * @access  public
-     * @return  void
-     */
-    expend : function () {
-        if (this.isOpened() != true && this.hasChildren()) {
-            this.openIt(true);
-        }
-        for (var i = 0; i < this.children.length; i++) {
-            this.children[i].expend();
-        }
-    },
-
-    /**
-     * Méthode récursive qui ferme la branche
-     *
-     * @access  public
-     * @return  void
-     */
-    collapse : function () {
-        if (this.isOpened() != false && this.hasChildren()) {
-            this.openIt(false);
-        }
-        for (var i = 0; i < this.children.length; i++) {
-            this.children[i].collapse();
-        }
-    },
-
-    /**
-     * Retourne toutes les branches de l'arbre
-     *
-     * @access  public
-     * @param   function        filter                  Le filtre des branches
-     * @param   array           [branches]              Optionnel, le tableau des branches incomplet
-     * @return  array                                   Un tableau des branches de l'arbre
-     */
-    getBranches : function (filter, branches) {
-        if (!branches) branches = [];
-        for (var i = 0; i < this.children.length; i++) {
-            if (typeof(filter) == 'function') {
-                if (filter(this.children[i])) {
-                    branches.push(this.children[i]);
-                }
-            } else {
-                branches.push(this.children[i]);
-            }
-            branches = this.children[i].getBranches(filter, branches);
-        }
-        return branches;
-    },
-
-    /**
-     * Retourne les branches parentes (qui ont des enfants)
-     *
-     * @access  public
-     * @param   array           [parent]                Optionnel, le tableau des branches parentes incomplet
-     * @return  array                                   Le tableau des branches parentes complet
-     */
-    getParentBranches : function (parents) {
-        if (!parents) parents = [];
-        for (var i = 0; i < this.children.length; i++) {
-            if (this.children[i].hasChildren()) {
-                parents.push(this.children[i]);
-            }
-            parents = this.children[i].getParentBranches(parents);
-        }
-        return parents;
-    },
-
-    /**
-     * Retourne les branches qui n'ont pas d'enfants
-     *
-     * @access  public
-     * @param   array           [leafs]                 Optionnel, le tableau des branches incomplet
-     * @return  array                                   Le tableau des branches complet
-     */
-    getLeafBranches : function (leafs) {
-        if (!leafs) leafs = [];
-        for (var i = 0; i < this.children.length; i++) {
-            if (!this.children[i].hasChildren()) {
-                leafs.push(this.children[i]);
-            }
-            leafs = this.children[i].getLeafBranches(leafs);
-        }
-        return leafs;
-    },
-
-    /**
-     * Retourne le nombre de branche comprises dans la branche courante
-     *
-     * @access  public
-     * @return  integer                                     Le nombre de branches
-     */
-    countBranches : function () {
-        var nb = this.children.length;
-        for (var i = 0; i < this.children.length; i++) {
-            nb += this.children[i].countBranches();
-        }
-        return nb;
-    },
-
-    /**
-     * Méthode récursive qui détermine si la branche est ouverte ou non
-     *
-     * @access  public
-     * @param   array               openedBranches          Le tableau des branches ouvertes
-     * @return  void
-     */
-    getOpenedBranches : function (openedBranches) {
-        if (!openedBranches) openedBranches = [];
-        for (var i = 0; i < this.children.length; i++) {
-            if (this.children[i].isOpened() && this.children[i].hasChildren()) {
-                openedBranches.push(this.children[i]);
-            }
-            openedBranches = this.children[i].getOpenedBranches(openedBranches);
-        }
-        return openedBranches;
-    },
-
-    /**
-     * Méthode récursive qui détermine si la branche est checkée
-     *
-     * @access  private
-     * @param   array               checkedBranches         Le tableau des branches checkées
-     * @return  void
-     */
-    getCheckedBranches : function (checkedBranches) {
-        return this._getCheckedBranches(checkedBranches, 1);
-    },
-
-    /**
-     * Méthode récursive qui détermine si la branche est checkée
-     *
-     * @access  private
-     * @param   array               checkedBranches         Le tableau des branches checkées
-     * @return  void
-     */
-    getUnCheckedBranches : function (checkedBranches) {
-        return this._getCheckedBranches(checkedBranches, 0);
-    },
-
-    /**
-     * Méthode récursive qui détermine si la branche est checkée
-     *
-     * @access  private
-     * @param   array               checkedBranches         Le tableau des branches checkées
-     * @return  void
-     */
-    getPartCheckedBranches : function (checkedBranches) {
-        return this._getCheckedBranches(checkedBranches, -1);
-    },
-
-    /**
-     * Sélectionne la branche
-     *
-     * @access  public
-     * @param   Event           ev                          L'événement déclencheur
-     * @return  void
-     */
-    select : function (ev) {
-        var ctrl = (ev) ? TafelTreeManager.ctrlOn(ev) : false;
-        var shift = (ev) ? TafelTreeManager.shiftOn(ev) : false;
-        if (ctrl) {
-            this.tree.selectedBranches.push(this);
-        } else if (shift && this.tree.selectedBranches.length > 0) {
-            var last = this.tree.selectedBranches.length - 1;
-            var sel = this.tree.getBranchesBetween(this.tree.selectedBranches[last], this);
-            for (var i = 0; i < sel.length; i++) {
-                this.tree.selectedBranches.push(sel[i]);
-                Element.addClassName(sel[i].txt, this.tree.classSelected);
-            }
-        } else {
-            this.tree.unselect();
-            this.tree.selectedBranches.push(this);
-        }
-        Element.addClassName(this.txt, this.tree.classSelected);
-        // On set l'icône s'il doit changer
-        if (this.isOpened() && this.hasChildren() && this.getOpenIconSelected()) {
-            this.img.src = this.tree.imgBase + this.getOpenIconSelected();
-        } else if (!this.isOpened() && this.hasChildren() && this.getCloseIconSelected()) {
-            this.img.src = this.tree.imgBase + this.getCloseIconSelected();
-        } else if (!this.hasChildren() && this.getIconSelected()) {
-            this.img.src = this.tree.imgBase + this.getIconSelected();
-        }
-        if (ev) Event.stop(ev);
-    },
-
-    /**
-     * Désélectionne la branche
-     *
-     * @access  public
-     * @return  boolean                                         True si la branche a pu être déselectionnée, false sinon
-     */
-    unselect : function () {
-        var ln = this.tree.selectedBranches.length;
-        if (ln > 0) {
-            for (var i = 0; i < ln; i++) {
-                if (this.tree.selectedBranches[i].getId() == this.getId()) {
-                    this.tree.selectedBranches.splice(i, 1);
-                    Element.removeClassName(this.txt, this.tree.classSelected);
-                    // On set l'icône s'il doit changer
-                    if (this.hasChildren()) {
-                        this.img.src = (this.isOpened()) ? this.tree.imgBase + this.struct.imgopen : this.tree.imgBase + this.struct.imgclose;
-                    } else {
-                        this.img.src = this.tree.imgBase + this.struct.img;
-                    }
-                    return true;
-                }
-            }
-        }
-        return false;
-    },
-
-    /**
-     * Calcule la position de la branche à l'intérieur de l'arbre
-     *
-     * @access  public
-     * @return  array                                   [0] Left pos, [1] Top pos
-     */
-    getWithinOffset : function () {
-        var realPos = Position.positionedOffset(this.txt);
-        var posTree = Position.positionedOffset(this.tree.div);
-        var pos = [
-            realPos[0] - posTree[0],
-            realPos[1] - posTree[1]
-        ];
-        return pos;
-    },
-
-    /**
-     * Calcule la position de la branche dans l'écran
-     *
-     * @access  public
-     * @return  array                                   [0] Left pos, [1] Top pos
-     */
-    getAbsoluteOffset : function () {
-        return Position.positionedOffset(this.txt);
-    },
-
-    /**
-     * Permet de sérialiser la branche, pour en faire une string au format JSON
-     *
-     * Les fonctions ne sont pas encodées dans la string (comme onopen, onclick, etc.). Par contre, on indique
-     * true si la fonction existe bel et bien pour la branche
-     *
-     * @access  public
-     * @param   boolean             debug                   True pour afficher le debug de la string
-     * @param   boolean             noEncoding              True pour ne pas encoder la string automatiquement
-     * @return  string                                      La string JSON de la branche
-     */
-    serialize : function (debug, noEncoding) {
-        var tab = '';
-        var rt = '';
-        if (debug) {
-            rt = TafelTree.debugReturn;
-            for (var i = 0; i < this.level; i++) {
-                tab += TafelTree.debugTab;
-            }
-        }
-        var strSave = '';
-        var str = rt + tab + '{' + rt;
-        // Définition de toutes les propriétés
-        str += tab + '"id":"' + this._encode(this.struct.id) + '"';
-        for (var attr in this.struct) {
-            if (attr != 'items' && attr != 'id') {
-                strSave = (typeof(this.struct[attr]) != 'function') ? this.struct[attr] : true;
-                if (this.isBool(strSave)) {
-                    str += "," + rt + tab + '"' + attr + '":' + this._encode(strSave);
-                } else {
-                    str += "," + rt + tab + '"' + attr + '":"' + this._encode(strSave) + '"';
-                }
-            }
-        }
-        // Définition des enfants
-        if (this.hasChildren()) {
-            str += ',' + rt + tab + '"items":[';
-            for (var i = 0; i < this.children.length; i++) {
-                str += this.children[i].serialize(debug, true);
-                if (i < this.children.length - 1) {
-                    str += ',';
-                }
-            }
-            str += rt + tab + ']';
-        }
-        str += rt + tab + '}';
-        if (!noEncoding) {
-            return encodeURIComponent(str);
-        } else {
-            return str;
-        }
-    },
-
-    isBool : function (str) {
-        switch (str) {
-            case 'true':    case 'false':
-            case true:      case false:
-            case '1':       case '0' :
-            case 1:         case 0 :
-                return true;
-            default :
-                return false;
-        }
-    },
-
-    showTooltip : function () {
-        if (this.displayTooltip) {
-            this.tooltip.style.display = 'block';
-        }
-    },
-
-    hideTooltip : function () {
-        if (!this.displayTooltip) {
-            Element.hide(this.tooltip);
-        }
-    },
-
-    /**
-     * Fonction récursive qui supprime les liens avec Droppables et Draggable
-     *
-     * @access  public
-     * @param   TafelTreeBranch         obj                 La branche courante
-     * @return  void
-     */
-    removeDragDrop : function () {
-        if (this.objDrag) {
-            this.objDrag.destroy();
-        }
-        Droppables.remove(this.txt);
-        for (var i = 0; i < this.children.length; i++) {
-            this.children[i].removeDragDrop();
-        }
-    },
-
-
-    /**
-     *------------------------------------------------------------------------------
-     *                          TafelTreeBaseBranch private methods
-     *------------------------------------------------------------------------------
-     */
-
-    /**
-     * Fonction qui met à jour l'élément en terme de multiline
-     *
-     * @access  private
-     * @param   HTMLElement     element                 L'élément HTML incriminé
-     * @param   integer         type                    1 ou 2 (suivant le type de ligne)
-     * @param   boolean         add                     True si on ajoute le multiline, false si on l'enlève
-     * @return  void
-     */
-    _manageMultiline : function (element, type, add) {
-        switch (type) {
-            case 2 :
-                if (!add) {
-                    Element.removeClassName(element, this.tree.imgMulti4);
-                    element.style.background = 'none';
-                } else {
-                    Element.addClassName(element, this.tree.imgMulti4);
-                    element.style.background = 'url("' + this.tree.imgBase + this.tree.imgMulti2 + '")';
-                    element.style.backgroundRepeat = 'repeat-y';
-                }
-                break;
-            case 1 :
-            default :
-                if (!add) {
-                    Element.removeClassName(element, this.tree.imgMulti3);
-                    element.style.background = 'none';
-                } else {
-                    Element.addClassName(element, this.tree.imgMulti3);
-                    element.style.background = 'url("' + this.tree.imgBase + this.tree.imgMulti1 + '")';
-                    element.style.backgroundRepeat = 'repeat-y';
-                }
-        }
-    },
-
-    _createTooltip : function () {
-        var div = document.createElement('div');
-        div.className = this.tree.classTooltip;
-        div.innerHTML = (this.struct.tooltip) ? this.struct.tooltip : '&nbsp;';
-        Event.observe(div, 'mouseover', this.showTooltip.bindAsEventListener(this), false);
-        return div;
-    },
-
-    _manageAfterInsert : function (pos) {
-        this.tree._changeStruct(this);
-        this._manageLine();
-        // Si on a des checkboxes, on corrige les images en fonction des checks par défaut
-        if (this.tree.checkboxes && this.tree.checkboxesThreeState) {
-            this.children[pos]._adjustParentCheck();
-        }
-        if (this.children.length == 1 && !this.struct.canhavechildren) {
-            this.setOpenableIcon(true);
-        }
-        this.openIt((!this.tree.openedAfterAdd && !this.isOpened()) ? false : true);
-    },
-
-    _movePartStruct : function (pos) {
-        var nb = this.struct.items.length - 1;
-        var newPos = 0;
-        for (var i = nb; i >= pos; i--) {
-            newPos = i + 1;
-            this.struct.items[newPos] = this.struct.items[i];
-            this.children[newPos] = this.children[i];
-            this.children[newPos].pos = newPos;
-        }
-    },
-
-    /**
-     * Méthode récursive qui détermine si la branche est checkée ou non
-     *
-     * @access  private
-     * @param   array               checkedBranches         Le tableau des branches checkées
-     * @param   boolean             checked                 1 pour récupérer les branches checkées
-     * @return  void
-     */
-     _getCheckedBranches : function (checkedBranches, checked) {
-        if (!checkedBranches) checkedBranches = [];
-        for (var i = 0; i < this.children.length; i++) {
-            if (this.children[i].isChecked() == checked) {
-                checkedBranches.push(this.children[i]);
-            }
-            checkedBranches = this.children[i]._getCheckedBranches(checkedBranches, checked);
-        }
-        return checkedBranches;
-     },
-
-    _generate : function () {
-        var i = this.bigTreeLoading;
-        if (i < this.struct.items.length) {
-            if (this.tree.checkboxesThreeState && this.struct.check && typeof(this.struct.items[i].check) == 'undefined') {
-                this.struct.items[i].check = 1;
-            }
-            isNotFirst = (i > 0) ? true : false;
-            isNotLast = (i < this.struct.items.length - 1) ? true : false;
-            this.children[i] = new TafelTreeBranch((this.isRoot) ? this : this.root, this, this.struct.items[i], this.level + 1, isNotFirst, isNotLast, i);
-            this.obj.appendChild(this.children[i].obj);
-            this.openIt((this.tree.useCookie) ?  this.isOpenedInCookie : this.struct.open);
-            this.tree.loadRunning(this.children[i]);
-            this.bigTreeLoading++;
-            setTimeout(this._generate.bind(this), 10);
-        } else {
-            this.loaded = true;
-        }
-    },
-
-    _getPos : function () {
-        pos = this.children.length;
-        for (var i = 0; i < this.children.length; i++) {
-            if (this.children[i].isAlwaysLast()) {
-                pos--;
-            }
-        }
-        if (pos < 0 ) pos = 0;
-        return pos;
-    },
-
-    /**
-     * Fonction qui ajuste le check des parent de la branche, suite à un changement
-     *
-     * @access  private
-     * @param   boolean         fromBranch              True pour commencer l'ajustement depuis la branche même
-     * @return  void
-     */
-    _adjustParentCheck : function (fromBranch) {
-        if (this.parent) {
-            var branch = (!fromBranch) ? this.parent : this;
-            while (branch && branch.checkbox) {
-                branch.check(branch.hasAllChildrenChecked());
-                branch = branch.parent;
-            }
-        }
-    },
-
-    /**
-     * Fonction récursive qui va changer le status des checkboxes enfants
-     *
-     * @access  private
-     * @param   TafelTreeBranch     branch                  La branche courante
-     * @param   boolean             checked                 True ou false
-     * @return  void
-     */
-    _manageCheckThreeState : function (branch, checked) {
-        for (var i = 0; i < branch.children.length; i++) {
-            if (branch.tree.checkboxes && branch.children[i].checkbox) {
-                branch.children[i].check(checked);
-                branch._manageCheckThreeState(branch.children[i], checked);
-            }
-        }
-    },
-
-    _getImgInfo : function (img) {
-        var url = img.src.split('/');
-        var name = url[url.length-1].split('.');
-        var obj = {
-            'img': img,
-            'number': name[0].charAt(name[0].length-1),
-            'type': name[0].substr(0, name[0].length-1),
-            'name': name[0],
-            'fullName': url[url.length-1]
-        };
-        return obj;
-    },
-
-    /**
-     * Permet d'encoder la string avant l'envoi en JSON
-     *
-     * @access  private
-     * @param   string              str                     La string correspondant à la propriété (this.struct.*)
-     * @return  string                                      La valeur de la propriété encodée
-     */
-    _encode : function (str) {
-        //var obj = eval(str);
-        var obj = (str === null) ? '' : str;
-        return obj.toString().replace(/\"/g, '\\"');
-    },
-
-    _closeChild : function (img) {
-        try {
-            img = this.getImgBeforeIcon().img;
-            this.struct.open = false;
-            if (this.isSelected() && this.getCloseIconSelected()) {
-                this.img.src = this.tree.imgBase + this.getCloseIconSelected();
-            } else {
-                this.img.src = this.tree.imgBase + this.struct.imgclose;
-            }
-            for (var i = 0; i < this.obj.childNodes.length; i++) {
-                if (this.obj.childNodes[i].nodeName.toLowerCase() == 'div') {
-                    Element.hide(this.obj.childNodes[i]);
-                }
-            }
-            if (!this.isRoot) {
-                img.src = (this.hasSiblingsAfter) ? this.tree.imgBase + this.tree.imgPlus3 : this.tree.imgBase + this.tree.imgPlus2;
-            } else {
-                if (this.hasSiblingsBefore) {
-                    img.src = (this.hasSiblingsAfter) ? this.tree.imgBase + this.tree.imgPlus3 : this.tree.imgBase + this.tree.imgPlus2;
-                } else {
-                    img.src = (this.hasSiblingsAfter) ? this.tree.imgBase + this.tree.imgPlus4 : this.tree.imgBase + this.tree.imgPlus5;
-                }
-            }
-        } catch (err) {
-            throw new Error ('_closeChild(base) : ' + err.message);
-        }
-    },
-
-    _openChild : function (img) {
-        try {
-            img = this.getImgBeforeIcon().img;
-            this.struct.open = true;
-            if (this.isSelected() && this.getOpenIconSelected()) {
-                this.img.src = this.tree.imgBase + this.getOpenIconSelected();
-            } else {
-                this.img.src = this.tree.imgBase + this.struct.imgopen;
-            }
-            for (var i = 0; i < this.obj.childNodes.length; i++) {
-                if (this.obj.childNodes[i].nodeName.toLowerCase() == 'div') {
-                    this.obj.childNodes[i].style.display = '';
-                }
-            }
-            if (!this.isRoot) {
-                img.src = (this.hasSiblingsAfter) ? this.tree.imgBase + this.tree.imgMinus3 : this.tree.imgBase + this.tree.imgMinus2;
-            } else {
-                if (this.hasSiblingsBefore) {
-                    img.src = (this.hasSiblingsAfter) ? this.tree.imgBase + this.tree.imgMinus3 : this.tree.imgBase + this.tree.imgMinus2;
-                } else {
-                    img.src = (this.hasSiblingsAfter) ? this.tree.imgBase + this.tree.imgMinus4 : this.tree.imgBase + this.tree.imgMinus5;
-                }
-            }
-        } catch (err) {
-            throw new Error ('_openChild(base) : ' + err.message);
-        }
-    },
-
-    /**
-     * Fonction qui gère les lignes verticales après un drag and drop
-     *
-     * @access  private
-     * @return  void
-     */
-    _manageLine : function () {
-        try {
-            for (var i = 0; i < this.children.length; i++) {
-                this.children[i].pos = i;
-                // Si on est au dernier enfant et que celui-ci n'était pas le dernier avant le remove
-                if (i == this.children.length - 1 && this.children[i].hasSiblingsAfter) {
-                    this.children[i].hasSiblingsAfter = false;
-                    this._manageMultiline(this.children[i].beforeIcon, 1, false);
-                    this._clearLine(this.children[i], this.level);
-                }
-                // Si on n'est pas au dernier enfant et que celui-ci était le dernier avant le remove
-                if (i < this.children.length - 1 && !this.children[i].hasSiblingsAfter) {
-                    this.children[i].hasSiblingsAfter = true;
-                    this._manageMultiline(this.children[i].beforeIcon, 1, true);
-                    this._addLine(this.children[i], this.level);
-                }
-            }
-            this.tree._changeStruct(this);
-        } catch (err) {
-            throw new Error ('_manageLine(base) : ' + err.message);
-        }
-    },
-
-    _manageLineForRoot : function (add) {
-        for (var i = 0; i < this.children.length; i++) {
-            this.children[i]._manageLineForRoot(add);
-        }
-        var td = this.table.getElementsByTagName('td')[0];
-        var img = td.getElementsByTagName('img')[0];
-        if (add) {
-            img.src = this.tree.imgBase + this.tree.imgLine1;
-        } else {
-            img.src = this.tree.imgBase + this.tree.imgEmpty;
-        }
-    },
-
-    /**
-     * Fonction qui supprime des lignes au bon endroit*
-     *
-     * @param   TafelTreeBranch     obj                     La branche courante
-     * @param   integer             level                   Le niveau où supprimer des lignes
-     * @param   boolean             ok                      False pour le 1er niveau de branche
-     * @return  void
-     */
-    _clearLine : function (obj, level, ok) {
-        try {
-            for (var i = 0; i < obj.children.length; i++) {
-                this._clearLine(obj.children[i], level, true);
-            }
-            // On récupère la bonne TD et la bonne image
-            var img = obj.table.getElementsByTagName('img')[level+1];
-            if (ok) {
-                img.src = this.tree.imgBase + this.tree.imgEmpty;
-                if (this.tree.multiline) {
-                    this._manageMultiline(img.parentNode, 1, false);
-                }
-            } else {
-                var old = obj.getImgBeforeIcon();
-                switch (old.fullName.replace('_over', '')) {
-                    case this.tree.imgLine1 :
-                    case this.tree.imgLine3 : newImg = this.tree.imgLine2; break;
-                    case this.tree.imgPlus1 :
-                    case this.tree.imgPlus3 : newImg = this.tree.imgPlus2; break;
-                    case this.tree.imgMinus1:
-                    case this.tree.imgMinus3: newImg = this.tree.imgMinus2; break;
-                    default:
-                        newImg = obj.fullName;
-                }
-                img.src = this.tree.imgBase + newImg;
-            }
-        } catch (err) {
-            throw new Error ('_clearLine(base) : ' + err.message);
-        }
-    },
-
-    /**
-     * Fonction qui ajoute des lignes au bon endroit*
-     *
-     * @param   TafelTreeBranch     obj                     La branche courante
-     * @param   integer             level                   Le niveau où ajouter des lignes
-     * @param   boolean             ok                      False pour le 1er niveau de branche
-     * @return  void
-     */
-    _addLine : function (obj, level, ok) {
-        try {
-            for (var i = 0; i < obj.children.length; i++) {
-                this._addLine(obj.children[i], level, true);
-            }
-            // On récupère la bonne TD et la bonne image
-            var img = obj.table.getElementsByTagName('img')[level+1];
-            if (ok) {
-                img.src = this.tree.imgBase + this.tree.imgLine1;
-                if (this.tree.multiline) {
-                    this._manageMultiline(img.parentNode, 1, true);
-                }
-            } else {
-                var old = obj.getImgBeforeIcon();
-                switch (old.fullName.replace('_over', '')) {
-                    case this.tree.imgLine1 :
-                    case this.tree.imgLine2 : newImg = this.tree.imgLine3; break;
-                    case this.tree.imgPlus1 :
-                    case this.tree.imgPlus2 : newImg = this.tree.imgPlus3; break;
-                    case this.tree.imgMinus1:
-                    case this.tree.imgMinus2: newImg = this.tree.imgMinus3; break;
-                    default:
-                        newImg = obj.fullName;
-                }
-                img.src = this.tree.imgBase + newImg;
-            }
-        } catch (err) {
-            throw new Error ('_addLine(base) : ' + err.message);
-        }
-    },
-
-    _isChild : function (child, parent) {
-        try {
-            if (parent.idObj == child.idObj) return true;
-            if (child.parent) {
-                return this._isChild(child.parent, parent);
-            }
-            return false;
-        } catch (err) {
-            throw new Error ('_isChild(base) : ' + err.message);
-        }
-    },
-
-    /**
-     * Set les propriétés utilisateur de la branche, ou celles par défaut
-     *
-     * @access  private
-     * @return  void
-     */
-    _setProperties : function () {
-        // Images
-        if ((typeof(this.struct.img) == 'undefined')) {
-            this.struct.img = (this.tree.icons[0]) ? this.tree.icons[0] : this.tree.imgLine0;
-        }
-        if ((typeof(this.struct.imgopen) == 'undefined')) {
-            this.struct.imgopen = (this.tree.icons[1]) ? this.tree.icons[1] : this.struct.img;
-        }
-        if ((typeof(this.struct.imgclose) == 'undefined')) {
-            this.struct.imgclose = (this.tree.icons[2]) ? this.tree.icons[2] : this.struct.img;
-        }
-        if ((typeof(this.struct.imgselected) == 'undefined')) {
-            this.struct.imgselected = (this.tree.iconsSelected[0]) ? this.tree.iconsSelected[0] : null;
-        }
-        if ((typeof(this.struct.imgopenselected) == 'undefined')) {
-            this.struct.imgopenselected = (this.tree.iconsSelected[1]) ? this.tree.iconsSelected[1] : null;
-        }
-        if ((typeof(this.struct.imgcloseselected) == 'undefined')) {
-            this.struct.imgcloseselected = (this.tree.iconsSelected[2]) ? this.tree.iconsSelected[2] : null;
-        }
-        // Fonctions
-        if (typeof(this.struct.open) == 'undefined') {
-            this.struct.open = (this.tree.useCookie && this.tree.cookieOpened) ? false : this.tree.openAll;
-        } else if (this.tree.useCookie && this.tree.cookieOpened) {
-            this.struct.open = false;
-        }
-
-        if (typeof(this.struct.check) == 'undefined' || (this.tree.useCookie && this.tree.cookieChecked)) this.struct.check = 0;
-
-        if (typeof(this.struct.items) == 'undefined') {
-            this.struct.items = [];
-        }
-        if (typeof(this.struct.canhavechildren) == 'undefined') this.struct.canhavechildren = false;
-        if (typeof(this.struct.id) == 'undefined') this.struct.id = this.idObj;
-        if (typeof(this.struct.acceptdrop) == 'undefined') this.struct.acceptdrop = true;
-        if (typeof(this.struct.last) == 'undefined') this.struct.last = false;
-        if (typeof(this.struct.editable) == 'undefined') this.struct.editable = this.tree.editableBranches;
-        if (typeof(this.struct.checkbox) == 'undefined') this.struct.checkbox = true;
-    },
-
-    /**
-     * Set les fonctions utilisateur et les fonctions par défaut, s'il y en a
-     *
-     * @access  private
-     * @return  void
-     */
-    _setFunctions : function () {
-        if (typeof(this.struct.ondragstarteffect) == 'undefined') {
-            if (typeof(this.tree.onDragStartEffect) == 'function') {
-                this.struct.ondragstarteffect = this.tree.onDragStartEffect;
-                this.ondragstarteffectDefault = true;
-            }
-        } else {this.struct.ondragstarteffect = eval(this.struct.ondragstarteffect);}
-        if (typeof(this.struct.ondragendeffect) == 'undefined') {
-            if (typeof(this.tree.onDragEndEffect) == 'function') {
-                this.struct.ondragendeffect = this.tree.onDragEndEffect;
-                this.ondragendeffectDefault = true;
-            }
-        } else {this.struct.ondragendeffect = eval(this.struct.ondragendeffect);}
-        if (typeof(this.struct.onerrorajax) == 'undefined') {
-            if (typeof(this.tree.onErrorAjax) == 'function') {
-                this.struct.onerrorajax = this.tree.onErrorAjax;
-                this.onerrorajaxDefault = true;
-            }
-        } else {this.struct.onerrorajax = eval(this.struct.onerrorajax);}
-        if (typeof(this.struct.oneditajax) == 'undefined') {
-            if (this.tree.onEditAjax && typeof(this.tree.onEditAjax.func) == 'function') {
-                this.struct.oneditajax = this.tree.onEditAjax.func;
-                this.struct.editlink = this.tree.onEditAjax.link;
-                this.oneditajaxDefault = true;
-            }
-        } else {this.struct.oneditajax = eval(this.struct.oneditajax);}
-        if (typeof(this.struct.onopenpopulate) == 'undefined') {
-            if (this.tree.onOpenPopulate && typeof(this.tree.onOpenPopulate.func) == 'function') {
-                this.struct.onopenpopulate = this.tree.onOpenPopulate.func;
-                this.struct.openlink = this.tree.onOpenPopulate.link;
-                this.onopenpopulateDefault = true;
-            }
-        } else {this.struct.onopenpopulate = eval(this.struct.onopenpopulate);}
-        if (typeof(this.struct.onedit) == 'undefined') {
-            if (typeof(this.tree.onEdit) == 'function') {
-                this.struct.onedit = this.tree.onEdit;
-                this.oneditDefault = true;
-            }
-        } else {this.struct.onedit = eval(this.struct.onedit);}
-        if (typeof(this.struct.oncheck) == 'undefined') {
-            if (typeof(this.tree.onCheck) == 'function') {
-                this.struct.oncheck = this.tree.onCheck;
-                this.oncheckDefault = true;
-            }
-        } else {this.struct.oncheck = eval(this.struct.oncheck);}
-        if (typeof(this.struct.onbeforecheck) == 'undefined') {
-            if (typeof(this.tree.onBeforeCheck) == 'function') {
-                this.struct.onbeforecheck = this.tree.onBeforeCheck;
-                this.onbeforecheckDefault = true;
-            }
-        } else {this.struct.onbeforecheck = eval(this.struct.onbeforecheck);}
-        if (typeof(this.struct.onopen) == 'undefined') {
-            if (typeof(this.tree.onOpen) == 'function') {
-                this.struct.onopen = this.tree.onOpen;
-                this.onopenDefault = true;
-            }
-        } else {this.struct.onopen = eval(this.struct.onopen);}
-        if (typeof(this.struct.onbeforeopen) == 'undefined') {
-            if (typeof(this.tree.onBeforeOpen) == 'function') {
-                this.struct.onbeforeopen = this.tree.onBeforeOpen;
-                this.onbeforeopenDefault = true;
-            }
-        } else {this.struct.onbeforeopen = eval(this.struct.onbeforeopen);}
-        if (typeof(this.struct.onmouseover) == 'undefined') {
-            if (typeof(this.tree.onMouseOver) == 'function') {
-                this.struct.onmouseover = this.tree.onMouseOver;
-                this.onmouseoverDefault = true;
-            }
-        } else {this.struct.onmouseover = eval(this.struct.onmouseover);}
-        if (typeof(this.struct.onmouseout) == 'undefined') {
-            if (typeof(this.tree.onMouseOut) == 'function') {
-                this.struct.onmouseout = this.tree.onMouseOut;
-                this.onmouseoutDefault = true;
-            }
-        } else {this.struct.onmouseout = eval(this.struct.onmouseout);}
-        if (typeof(this.struct.onmousedown) == 'undefined') {
-            if (typeof(this.tree.onMouseDown) == 'function') {
-                this.struct.onmousedown = this.tree.onMouseDown;
-                this.onmousedownDefault = true;
-            }
-        } else {this.struct.onmousedown = eval(this.struct.onmousedown);}
-        if (typeof(this.struct.onmouseup) == 'undefined') {
-            if (typeof(this.tree.onMouseUp) == 'function') {
-                this.struct.onmouseup = this.tree.onMouseUp;
-                this.onmouseupDefault = true;
-            }
-        } else {this.struct.onmouseup = eval(this.struct.onmouseup);}
-        if (typeof(this.struct.onclick) == 'undefined') {
-            if (typeof(this.tree.onClick) == 'function') {
-                this.struct.onclick = this.tree.onClick;
-                this.onclickDefault = true;
-            }
-        } else {this.struct.onclick = eval(this.struct.onclick);}
-        if (typeof(this.struct.ondblclick) == 'undefined') {
-            if (typeof(this.tree.onDblClick) == 'function') {
-                this.struct.ondblclick = this.tree.onDblClick;
-                this.ondblclickDefault = true;
-            }
-        } else {this.struct.ondblclick = eval(this.struct.ondblclick);}
-    },
-
-    /**
-     * Set actions like selecting node
-     *
-     * @access private
-     * @return void
-     */
-    _setActions : function () {
-        if (this.struct.select) {
-            this.select();
-        }
-    },
-
-    /**
-     * Fonction qui set les divers événements en fonction des données utilisateur
-     *
-     * @access  private
-     * @param   HTMLTdElement       event                   La cellule qui contient le texte
-     * @param   HTMLTdElement       tdImg                   La cellule qui contient l'icône
-     * @return  void
-     */
-    _setEvents : function (event, tdImg) {
-        // Le onclick se fait de toutes façon
-        Event.observe(this.txt, 'mousedown', this.setMouseDown.bindAsEventListener(this), false);
-        Event.observe(this.txt, 'mouseup', this.setMouseUp.bindAsEventListener(this), false);
-        // On set les événements
-        if (typeof(this.struct.onclick) == 'function') {
-            Event.observe(event, 'click', this.setClick.bindAsEventListener(this), false);
-        }
-        if (typeof(this.struct.ondblclick) == 'function' || this.struct.editable) {
-            Event.observe(event, 'dblclick', this.setDblClick.bindAsEventListener(this), false);
-        }
-        if (typeof(this.struct.onmouseover) == 'function') {
-            Event.observe(event, 'mouseover', this.setMouseOver.bindAsEventListener(this), false);
-        }
-        if (typeof(this.struct.onmouseout) == 'function') {
-            Event.observe(event, 'mouseout', this.setMouseOut.bindAsEventListener(this), false);
-        }
-        if (this.struct.editable && (typeof(this.struct.onedit) == 'function' || typeof(this.struct.oneditajax) == 'function')) {
-            this.editableInput = document.createElement('input');
-            this.editableInput.setAttribute('type', 'text');
-            this.editableInput.setAttribute('autocomplete', 'off');
-            this.editableInput.className = this.tree.classEditable;
-            event.appendChild(this.editableInput);
-            Event.observe(this.editableInput, 'blur', this.hideEditable.bindAsEventListener(this), false);
-        }
-        // On set l'option drag and drop
-        if (!this.isRoot) {
-            if (this.struct.draggable && (typeof(this.struct.ondrop) == 'function' || typeof(this.struct.ondropajax) == 'function')) {
-                //this.objDrag = new Draggable(this.txt, {revert: this.tree.dragRevert, scroll: this.tree.div, ghosting: this.tree.dragGhosting});
-                this.objDrag = new Draggable(this.txt, {
-                    revert: this.tree.dragRevert,
-                    starteffect:this.ondragstarteffect.bindAsEventListener(this),
-                    endeffect:this.ondragendeffect.bindAsEventListener(this)
-                });
-                Element.addClassName(this.txt, this.tree.classDrag);
-            }
-        }
-        if (this.struct.acceptdrop) {
-            Droppables.add(this.txt, {hoverclass: this.tree.classDragOver, onDrop: this.setDrop.bindAsEventListener(this)});
-        }
-        if (this.struct.tooltip) {
-            Event.observe(event, 'mouseover', this.evt_showTooltip.bindAsEventListener(this), false);
-            Event.observe(event, 'mouseout', this.evt_hideTooltip.bindAsEventListener(this), false);
-        }
-        // On s'occupe des checkboxes, le cas échéant
-        if (this.tree.checkboxes && this.struct.checkbox) {
-            if (this.struct.check == 1) imgc = this.tree.imgCheck2;
-            else if (this.struct.check == -1) imgc = this.tree.imgCheck3;
-            else imgc = this.tree.imgCheck1;
-            this.checkbox = document.createElement('img');
-            this.checkbox.src = this.tree.imgBase + imgc;
-            tdImg.appendChild(this.checkbox);
-            Event.observe(this.checkbox, 'click', this.checkOnClick.bindAsEventListener(this), false);
-            Event.observe(this.checkbox, 'mouseover', this.evt_openMouseOver.bindAsEventListener(this), false);
-            Event.observe(this.checkbox, 'mouseout', this.evt_openMouseOut.bindAsEventListener(this), false);
-        } else if (this.tree.checkboxes) {
-            // On met éventuellement une image vide au lieu de la checkbox
-            var vide = document.createElement('img');
-            vide.src = this.tree.imgBase + this.tree.imgEmpty;
-            tdImg.appendChild(vide);
-        }
-    },
-
-    _getImgBeforeIcon : function () {
-        try {
-            var td = document.createElement('td');
-            var img = document.createElement('img');
-            Element.addClassName(img, this.tree.classOpenable);
-            // On détermine s'il y a des frères
-            if (this.hasSiblingsAfter) {
-                // On détermine s'il y a des enfants
-                if (!this.hasChildren()) {
-                    if (this.isRoot) {
-                        img.src = this.tree.imgBase + ((this.hasSiblingsBefore) ? this.tree.imgLine3 : this.tree.imgLine4);
-                    } else {
-                        img.src = this.tree.imgBase + this.tree.imgLine3;
-                    }
-                } else {
-                    Event.observe(img, 'click', this.setOpen.bindAsEventListener(this), false);
-                    Event.observe(img, 'mouseover', this.evt_openMouseOver.bindAsEventListener(this), false);
-                    Event.observe(img, 'mouseout', this.evt_openMouseOut.bindAsEventListener(this), false);
-                    if (this.isRoot) {
-                        img.src = this.tree.imgBase + ((this.hasSiblingsBefore) ? this.tree.imgMinus3 : this.tree.imgMinus4);
-                    } else {
-                        img.src = this.tree.imgBase + this.tree.imgMinus3;
-                    }
-                }
-                if (this.tree.multiline) {
-                    this._manageMultiline(td, (this.isRoot ? 2 : 1), true);
-                }
-            } else {
-                // On détermine s'il y a des enfants
-                if (!this.hasChildren()) {
-                    if (this.isRoot) {
-                        img.src = this.tree.imgBase + ((this.hasSiblingsBefore) ? this.tree.imgLine2 : this.tree.imgEmpty);
-                    } else {
-                        img.src = this.tree.imgBase + this.tree.imgLine2;
-                    }
-                } else {
-                    Event.observe(img, 'click', this.setOpen.bindAsEventListener(this), false);
-                    Event.observe(img, 'mouseover', this.evt_openMouseOver.bindAsEventListener(this), false);
-                    Event.observe(img, 'mouseout', this.evt_openMouseOut.bindAsEventListener(this), false);
-                    if (this.isRoot) {
-                        img.src = this.tree.imgBase + ((this.hasSiblingsBefore) ? this.tree.imgMinus2 : this.tree.imgMinus5);
-                    } else {
-                        img.src = this.tree.imgBase + this.tree.imgMinus2;
-                    }
-                }
-            }
-            td.appendChild(img);
-            return td;
-        } catch (err) {
-            throw new Error ('_getImgBeforeIcon(base) : ' + err.message);
-        }
-    },
-
-    /**
-     * Insère les enfants de la branche
-     *
-     * @access  private
-     * @param   TafelTreeRoot   root                    L'élément racine parent
-     * @return  void
-     */
-    _setChildren : function (root) {
-        if (this.hasChildren()) {
-            if (this.tree.bigTreeLoading >= 0) {
-                this.loaded = false;
-                this.bigTreeLoading = 0;
-                setTimeout(this._generate.bind(this), 10);
-            } else {
-                for (var i = 0; i < this.struct.items.length; i++) {
-                    if (this.tree.checkboxesThreeState && this.struct.check && typeof(this.struct.items[i].check) == 'undefined') {
-                        this.struct.items[i].check = 1;
-                    }
-                    isNotFirst = (i > 0) ? true : false;
-                    isNotLast = (i < this.struct.items.length - 1) ? true : false;
-                    this.children[i] = new TafelTreeBranch(root, this, this.struct.items[i], this.level + 1, isNotFirst, isNotLast, i);
-                    this.obj.appendChild(this.children[i].obj);
-                }
-                this.openIt(this.struct.open);
-            }
-        }
-    },
-
-    /**
-     * Set l'image de la branche à wait ainsi que ses enfants
-     *
-     * @access  private
-     * @param   TafelTreeBranch     branch                  La branche courante
-     * @param   boolean             wait                    True pour afficher l'image d'attente
-     * @param   boolean             localPropagationStop    True pour ne pas avoir de propagation, false par défaut
-     * @return  void
-     */
-    _setWaitImg : function (branch, wait, localPropagationStop) {
-        try {
-            this.inProcess = wait;
-            if (wait) {
-                branch.oldImgSrc = branch.img.src;
-                branch.img.src = branch.tree.imgBase + branch.tree.imgWait;
-                branch.eventable = false;
-            } else {
-                branch.eventable = true;
-                branch.img.src = branch.oldImgSrc;
-            }
-            if (this.tree.propagation && !localPropagationStop) {
-                for (var i = 0; i < branch.children.length; i++) {
-                    this._setWaitImg(branch.children[i], wait);
-                }
-            }
-        } catch (err) {
-            throw new Error ('_setWaitImg(base) : ' + err.message);
-        }
-    },
-
-    /**
-     * Envoi d'une requête Ajax suite à une ouverture de branche
-     *
-     * @access  private
-     * @return  void
-     */
-    _openPopulate : function (ev) {
-        try {
-            this._setWaitImg(this, true);
-            var params = 'branch=' + this.serialize() + '&branch_id=' + this.getId() + '&tree_id=' + this.tree.id;
-            var otherParams = this.tree.getURLParams(this.struct.openlink);
-            for (var i = 0; i < otherParams.length; i++) {
-                params += '&' + otherParams[i].name + '=' + otherParams[i].value;
-            }
-            new Ajax.Updater (
-                this.tree.ajaxObj,
-                this.struct.openlink,
-                {
-                    'method'     : 'post',
-                    'parameters' : params,
-                    'evalScripts': true,
-                    'onComplete' : function(event){this._completeOpenPopulate(event);}.bind(this),
-                    'onFailure' : function(event){this._failureOpenPopulate(event);}.bind(this)
-                }
-            );
-        } catch (err) {
-            this._setWaitImg(this, false);
-            throw ('_openPopulate(base) : ' + err.message);
-        }
-    },
-
-    _failureOpenPopulate : function () {
-        this._setWaitImg(this, false);
-        if (typeof(this.struct.onerrorajax) == 'function') {
-            this.struct.onerrorajax('open', 'failure request', this);
-        }
-    },
-
-    /**
-     * Méthode appelée lorsque le retour ajax est effectué
-     *
-     * Pour pailler aux éventualités : str.match(/(?:\(\[)((\n|\r|.)*?)(?:\]\))/)[0]
-     *
-     * @access  private
-     * @param   XMLhttpResquest     response                L'objet Ajax
-     * @return  void
-     */
-    _completeOpenPopulate : function (response) {
-        try {
-            this._setWaitImg(this, false);
-            var rep = this.struct.onopenpopulate(this, response.responseText);
-            if (rep) {
-                rep = (rep === true) ? response.responseText : rep;
-                var items = eval(rep);
-                if (items) {
-                    var ok = [];
-                    for (var i = 0 ; i < items.length; i++) {
-                        // unicity test
-                        if (this.tree.getBranchById(items[i].id)) continue;
-                        if (typeof(items[i].id) == 'undefined' || typeof(items[i].txt) == 'undefined') {
-                            throw new Error (TAFELTREE_WRONG_BRANCH_STRUCTURE);
-                        }
-                        ok.push(this.insertIntoLast(items[i]));
-                    }
-                    // Permet d'ouvrir les branches qui viennent du serveur au load de la page
-                    if (this.tree.useCookie && this.tree.cookieOpened && this.tree.reopenFromServer) {
-                        var okay = false;
-                        for (var o = 0; o < ok.length; o++) {
-                            okay = false;
-                            for (var i = 0; i < this.tree.cookieOpened.length; i++) {
-                                if (this.tree.cookieOpened[i] == ok[o].getId()) {
-                                    okay = true;
-                                    break;
-                                }
-                            }
-                            if (okay) {
-                                if (typeof(ok[o].struct.onopenpopulate) == 'function' && ok[o].eventable) {
-                                    ok[o]._openPopulate();
-                                    ok[o].openIt(true);
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-        } catch (err) {
-            this._setWaitImg(this, false);
-            if (typeof(this.struct.onerrorajax) == 'function') {
-                this.struct.onerrorajax('open', response.responseText, this);
-            } else {
-                alert ('_completeOpenPopulate(' + response.responseText + ') : ' + err.message);
-            }
-        }
-    },
-
-    /**
-     * Envoi d'une requête Ajax suite à un drop
-     *
-     * @access  private
-     * @param   TafelTreeBranch     newParentObj            Le nouveau parent
-     * @param   boolean             asSibling               True pour dropper l'élément comme frère
-     * @param   boolean             copydrag                True si on fait un copy-drag
-     * @return  void
-     */
-    _setDropAjax : function (newParentObj, asSibling, copydrag, ev) {
-        try {
-            this._setWaitImg(this, true);
-            var sibling = (asSibling) ? 1 : 0;
-            var cdrag = (copydrag) ? 1 : 0;
-            var params = 'drag=' + this.serialize() + '&drag_id=' + this.getId() + '&drop=' + newParentObj.serialize() + '&drop_id=' + newParentObj.getId();
-            params += '&treedrag_id=' + this.tree.id + '&treedrop_id=' + newParentObj.tree.id + '&sibling=' + sibling + '&copydrag=' + cdrag;
-            // On passe le futur id de l'élément copié s'il s'agit d'une copie
-            if (cdrag) {
-                var cdragId = this.id + this.tree.copyNameBreak + this.tree.idTree;
-                params += '&copydrag_id=' + cdragId;
-            }
-            var otherParams = this.tree.getURLParams(this.struct.droplink);
-            for (var i = 0; i < otherParams.length; i++) {
-                params += '&' + otherParams[i].name + '=' + otherParams[i].value;
-            }
-            this.newParent = newParentObj;
-            this.asSibling = asSibling;
-            this.copyDrag = cdrag;
-            new Ajax.Updater (
-                this.tree.ajaxObj,
-                this.struct.droplink,
-                {
-                    'method'     : 'post',
-                    'parameters' : params,
-                    'evalScripts': true,
-                    'onComplete' : function(event){this._completeDropAjax(event);}.bind(this),
-                    'onFailure' : function(event){this._failureDropAjax(event);}.bind(this)
-                }
-            );
-        } catch (err) {
-            this._setWaitImg(this, false);
-            throw ('_setDropAjax(base) : ' + err.message);
-        }
-    },
-
-    _failureDropAjax : function () {
-        this._setWaitImg(this, false);
-        if (typeof(this.struct.onerrorajax) == 'function') {
-            this.struct.onerrorajax('drop', 'failure request', this, this.newParent);
-        }
-    },
-
-    /**
-     * Méthode appelée lorsque le retour ajax est effectué
-     *
-     * @access  private
-     * @param   XMLhttpResquest     response                L'objet Ajax
-     * @return  void
-     */
-    _completeDropAjax : function (response) {
-        try {
-            if (this.struct.ondropajax(this, this.newParent, response.responseText, false, null)) {
-                var newBranch = null;
-                if (!this.asSibling) {
-                    if (!this.copyDrag) {
-                        this.move(this.newParent);
-                    } else {
-                        newBranch = this.newParent.insertIntoLast(this.clone());
-                    }
-                } else {
-                    if (!this.copyDrag) {
-                        this.moveBefore(this.newParent);
-                    } else {
-                        newBranch = this.newParent.insertBefore(this.clone());
-                    }
-                }
-                this.struct.ondropajax(this, this.newParent, response.responseText, true, newBranch);
-            }
-            this._setWaitImg(this, false);
-        } catch (err) {
-            if (typeof(this.struct.onerrorajax) == 'function') {
-                this.struct.onerrorajax('drop', response.responseText, this, this.newParent);
-            } else {
-                alert ('_completeDropAjax(base) : ' + err.message);
-            }
-        }
-    },
-
-    /**
-     * Envoi d'une requête Ajax suite à une édition de branche
-     *
-     * @access  private
-     * @return  void
-     */
-    _editAjax : function (newValue, oldValue, ev) {
-        try {
-            this._setWaitImg(this, true, true);
-            var params = 'branch=' + this.serialize() + '&branch_id=' + this.getId() + '&tree_id=' + this.tree.id;
-            params += '&new_value=' + newValue + '&old_value=' + oldValue;
-            var otherParams = this.tree.getURLParams(this.struct.editlink);
-            for (var i = 0; i < otherParams.length; i++) {
-                params += '&' + otherParams[i].name + '=' + otherParams[i].value;
-            }
-            new Ajax.Updater (
-                this.tree.ajaxObj,
-                this.struct.editlink,
-                {
-                    'method'     : 'post',
-                    'parameters' : params,
-                    'evalScripts': true,
-                    'onComplete' : function(event){this._completeEditAjax(event);}.bind(this),
-                    'onFailure' : function(event){this._failureEditAjax(event);}.bind(this)
-                }
-            );
-        } catch (err) {
-            this._setWaitImg(this, false, true);
-            throw ('_editAjax(base) : ' + err.message);
-        }
-    },
-
-    _failureEditAjax : function () {
-        this._setWaitImg(this, false);
-        if (typeof(this.struct.onerrorajax) == 'function') {
-            this.struct.onerrorajax('edit', 'failure request', this);
-        }
-    },
-
-    /**
-     * Méthode appelée lorsque le retour ajax est effectué
-     *
-     * @access  private
-     * @param   XMLhttpResquest     response                L'objet Ajax
-     * @return  void
-     */
-    _completeEditAjax : function (response) {
-        try {
-            this._setWaitImg(this, false, true);
-            var rep = this.struct.oneditajax(this, response.responseText, this.txt.innerHTML);
-            if (rep) {
-                this.setText((rep === true ? response.responseText : rep));
-            }
-            this.hideEditableElement();
-        } catch (err) {
-            this._setWaitImg(this, false, true);
-            if (typeof(this.struct.onerrorajax) == 'function') {
-                this.struct.onerrorajax('edit', response.responseText, this);
-            } else {
-                alert ('_completeOpenPopulate(' + response.responseText + ') : ' + err.message);
-            }
-        }
-    },
-
-
-    /**
-     *------------------------------------------------------------------------------
-     *                          TafelTreeBaseBranch Events Management
-     *------------------------------------------------------------------------------
-     */
-
-    evt_openMouseOver : function (ev) {
-        if (Event.element) {
-            var obj = Event.element(ev);
-            var img = this._getImgInfo(obj);
-            obj.src = this.tree.imgBase + img.type + '_over' + img.number + '.gif';
-        }
-    },
-
-    evt_openMouseOut : function (ev) {
-        if (Event.element) {
-            var obj = Event.element(ev);
-            var img = this._getImgInfo(obj);
-            obj.src = this.tree.imgBase + img.type.replace(/_over/g, '') + img.number + '.gif';
-        }
-    },
-
-    evt_showTooltip : function (ev) {
-        this.displayTooltip = true;
-        setTimeout(this.showTooltip.bind(this), this.tree.durationTooltipShow);
-    },
-
-    evt_hideTooltip : function (ev) {
-        this.displayTooltip = false;
-        setTimeout(this.hideTooltip.bind(this), this.tree.durationTooltipHide);
-    },
-
-    /**
-     * Méthode appelée lorsque la souris passe sur le noeud
-     *
-     * @access  public
-     * @param   Element             ev                      L'élément déclencheur
-     * @return  boolean                                     True si le changement s'est fait, false sinon
-     */
-    setMouseOver : function (ev) {
-        if (typeof(this.struct.onmouseover) == 'function') {
-            return this.struct.onmouseover(this, ev);
-        }
-    },
-
-    /**
-     * Méthode appelée lorsqu'on clic sur le noeud
-     *
-     * @access  public
-     * @param   Element             ev                      L'élément déclencheur
-     * @return  boolean                                     True si le changement s'est fait, false sinon
-     */
-    setMouseOut : function (ev) {
-        if (typeof(this.struct.onmouseout) == 'function') {
-            return this.struct.onmouseout(this, ev);
-        }
-    },
-
-    /**
-     * Méthode appelée lorsqu'on clique sur le noeud (mousedown)
-     *
-     * @access  public
-     * @param   Element             ev                      L'élément déclencheur
-     * @return  void
-     */
-    setMouseDown : function (ev) {
-        // Pour une raison ou une autre, le mousedown du div principal n'est pas appelé...
-        this.tree.evt_setAsCurrent(ev);
-        if (this.tree.selectedBranchShowed) {
-            if (!this.isSelected()) {
-                this.select(ev);
-                this.okayForUnselect = false;
-            } else {
-                this.okayForUnselect = true;
-            }
-        }
-        if (this.tooltip) {
-            this.displayTooltip = false;
-            this.hideTooltip();
-        }
-        if (typeof(this.struct.onmousedown) == 'function') {
-            this.struct.onmousedown(this, ev);
-        }
-    },
-
-    /**
-     * Méthode appelée lorsqu'on "déclique"
-     *
-     * @access  public
-     * @param   Element             ev                      L'élément déclencheur
-     * @return  void
-     */
-    setMouseUp : function (ev) {
-        if (this.tree.lastEdited) {
-            this.tree.lastEdited.hideEditable(ev);
-        }
-        // Si la branche est déjà sélectionnée, on la déselectionne
-        if (this.isSelected() && this.okayForUnselect) {
-            //this.unselect();
-            return true;
-        }
-        this.okayForUnselect = true;
-        if (typeof(this.struct.onmouseup) == 'function') {
-            this.struct.onmouseup(this, ev);
-        }
-    },
-
-    /**
-     * Méthode appelée lorsqu'on clique sur le noeud
-     *
-     * @access  public
-     * @param   Element             ev                      L'élément déclencheur
-     * @return  void
-     */
-    setClick : function (ev) {
-        if (this.tree.lastEdited) return false;
-        if (typeof(this.struct.onclick) == 'function') {
-            return this.struct.onclick(this, ev);
-        }
-    },
-
-    /**
-     * Fonction appelée lorsqu'on clique sur une checkbox
-     *
-     * @access  public
-     * @param   HTMLimgElement      ev                      L'élément déclencheur
-     * @return  boolean                                     True si le changement s'est fait, false sinon
-     */
-    checkOnClick : function (ev) {
-        if (this.tree.checkboxes && this.checkbox) {
-            var checked = (this.isChecked() > 0) ? 0 : 1;
-            var ok = true;
-            if (typeof(this.struct.onbeforecheck) == 'function') {
-                ok = this.struct.onbeforecheck(this, checked, ev);
-            }
-            if (ok) {
-                this.check(checked);
-                if (this.tree.checkboxesThreeState) {
-                    this._manageCheckThreeState(this, checked);
-                    this._adjustParentCheck();
-                }
-                if (typeof(this.struct.oncheck) == 'function') {
-                    this.struct.oncheck(this, checked, ev);
-                }
-            }
-        }
-    },
-
-    /**
-     * Méthode appelée lors de l'ouverture ou fermeture d'un noeud
-     *
-     * @access  public
-     * @param   HTMLimgElement      ev                      L'élément déclencheur
-     * @return  boolean                                     True si le changement s'est fait, false sinon
-     */
-    setOpen : function (ev) {
-        if (!this.hasChildren()) return false;
-        var ok = true;
-        if (typeof(this.struct.onbeforeopen) == 'function') {
-            ok = this.struct.onbeforeopen(this, this.struct.open, ev);
-        }
-        if (!ok) return false;
-        // On ne peut pas fermer la branche si elle subit un événement d'ouverture
-        if (typeof(this.struct.onopenpopulate) == 'function' && !this.eventable) return false;
-        this.openIt((this.isOpened()) ? false : true);
-        if (typeof(this.struct.onopen) == 'function') {
-            return this.struct.onopen(this, this.struct.open, ev);
-        } else if (typeof(this.struct.onopenpopulate) == 'function' && this.isOpened() && this.children.length == 0) {
-            if (!this.eventable) return false;
-            return this._openPopulate(ev);
-        }
-        return true;
-    },
-
-    /**
-     * Ajoute une fonction utilisateur au start du drag
-     *
-     * @access public
-     * @author coucoudom
-     * @param HTMLObject drag l'objet draggé
-     * @param HTMLObject dragbis
-     */
-    ondragstarteffect : function (drag, dragbis) {
-        var dragObj = this.tree.getBranchByIdObj(drag.id);
-        if (!dragObj) {
-            for (var i = 0; i < this.tree.otherTrees.length; i++) {
-                dragObj = this.tree.otherTrees[i].getBranchByIdObj(drag.id);
-                if (dragObj) break;
-            }
-            if (!dragObj) return false;
-        }
-        // appel de la function user
-        if (typeof(dragObj.struct.ondragstarteffect) == 'function') {
-            var ok = dragObj.struct.ondragstarteffect(dragObj);
-        }
-    },
-
-    /**
-     * Ajoute une fonction utilisateur au end du drag
-     *
-     * @access public
-     * @author coucoudom
-     * @param HTMLObject drag l'objet draggé
-     * @param HTMLObject dragbis
-     */
-    ondragendeffect : function (drag, dragbis) {
-        var dragObj = this.tree.getBranchByIdObj(drag.id);
-        if (!dragObj) {
-            for (var i = 0; i < this.tree.otherTrees.length; i++) {
-                dragObj = this.tree.otherTrees[i].getBranchByIdObj(drag.id);
-                if (dragObj) break;
-            }
-            if (!dragObj) return false;
-        }
-        // appel de la function user
-        if (typeof(dragObj.struct.ondragendeffect) == 'function') {
-            var ok = dragObj.struct.ondragendeffect(dragObj);
-        }
-    },
-
-    /**
-     * Méthode appelée lorsqu'on drop sur le noeud
-     *
-     * Ici, le this correspond à l'objet qui réceptionne le drag
-     *
-     * @access  public
-     * @param   HTMLElement         drag                    L'élément draggué
-     * @return  boolean                                     True si le changement s'est fait, false sinon
-     */
-    setDrop : function (drag, html, html2, ev) {
-        var dragObj = this.tree.getBranchByIdObj(drag.id);
-        // Si l'objet n'est pas dans l'arbre courant, on va chercher dans les autres liés
-        if (!dragObj) {
-            for (var i = 0; i < this.tree.otherTrees.length; i++) {
-                dragObj = this.tree.otherTrees[i].getBranchByIdObj(drag.id);
-                if (dragObj) break;
-            }
-            if (!dragObj) return false;
-        }
-        var alt = (dragObj.tree.dropALT) ? TafelTreeManager.altOn(ev) : false;
-        var ctrl = (dragObj.tree.dropCTRL) ? TafelTreeManager.ctrlOn(ev) || TafelTreeManager.metaOn(ev) : false;
-        var ok = true;
-        if ((this.tree.id == dragObj.tree.id && this.isChild(dragObj)) || !dragObj.eventable || !this.eventable) return false;
-        // Fonction utilisateur avant le drop
-        if (typeof(dragObj.struct.ondrop) == 'function') {
-            ok = dragObj.struct.ondrop(dragObj, this, false, null, ev);
-        }
-        if (ok) {
-            var asSibling = ((dragObj.tree.behaviourDrop == 1 || dragObj.tree.behaviourDrop == 3) && !alt || (dragObj.tree.behaviourDrop == 0 || dragObj.tree.behaviourDrop == 2) && alt) ? true : false;
-            var copyDrag = ((dragObj.tree.behaviourDrop == 2 || dragObj.tree.behaviourDrop == 3) && !ctrl || (dragObj.tree.behaviourDrop == 0 || dragObj.tree.behaviourDrop == 1) && ctrl) ? true : false;
-            // On va chercher les noeuds sur le serveur s'il y en a
-            if (!asSibling && typeof(this.struct.onopenpopulate) == 'function' && !this.isOpened() && this.children.length == 0) {
-                this._openPopulate(ev);
-            }
-            if (typeof(dragObj.struct.ondropajax) == 'function') {
-                dragObj._setDropAjax(this, asSibling, copyDrag, ev);
-            } else {
-                // Drop normal
-                var newBranch = null;
-                if (!asSibling) {
-                    if (!copyDrag) {
-                        dragObj.move(this);
-                    } else {
-                        newBranch = this.insertIntoLast(dragObj.clone());
-                    }
-                } else {
-                    if (!copyDrag) {
-                        dragObj.moveBefore(this);
-                    } else {
-                        newBranch = this.insertBefore(dragObj.clone());
-                    }
-                }
-                // Fonction utilisateur après le drop
-                if (typeof(dragObj.struct.ondrop) == 'function') {
-                    ok = dragObj.struct.ondrop(dragObj, this, true, newBranch, ev);
-                }
-            }
-        }
-    },
-
-    /**
-     * Méthode appelée lorsqu'on double-clic sur le noeud
-     *
-     * @access  public
-     * @param   Element             ev                      L'élément déclencheur
-     * @return  boolean                                     True si le changement s'est fait, false sinon
-     */
-    setDblClick : function (ev) {
-        if (this.tree.lastEdited) return false;
-        if (typeof(this.struct.ondblclick) == 'function') {
-            this.struct.ondblclick(this, ev);
-        }
-        if (this.struct.editable && this.editableInput) {
-            if (!this.tree.lastEdited || this.tree.lastEdited.getId() != this.getId()) {
-                this.editableInput.style.width = (this.txt.offsetWidth + 20) + 'px';
-            }
-            Element.hide(this.txt);
-            this.editableInput.value = this.txt.innerHTML;
-            this.editableInput.style.display = 'block';
-            this.editableInput.focus();
-            this.tree.lastEdited = this;
-        }
-    },
-
-    /**
-     * Enlève l'édition de la branche
-     *
-     * @access  public
-     * @param   Event           ev                      L'événement déclencheur
-     * @return  boolean                                 True si l'élément a été caché, false sinon
-     */
-    hideEditable : function (ev) {
-        if (this.editableInput && this.struct.editable) {
-            var obj = this.editableInput;
-            var value = obj.value;
-            if (this.struct.oneditajax) {
-                if (!this.eventable) return false;
-                this._editAjax(obj.value, this.txt.innerHTML, ev);
-            } else {
-                if (typeof(this.struct.onedit) == 'function') {
-                    value = this.struct.onedit(this, obj.value, this.txt.innerHTML, ev);
-                }
-                this.setText(value);
-                this.hideEditableElement();
-            }
-            return true;
-        }
-        return false;
-    },
-
-    hideEditableElement : function () {
-        Element.hide(this.editableInput);
-        this.editableInput.value = this.getText();
-        this.txt.style.display = 'block';
-        this.tree.lastEdited = null;
-    }
-};
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-/**
- *------------------------------------------------------------------------------
- *                          TafelTreeRoot Class
- *------------------------------------------------------------------------------
- */
-
-var TafelTreeRoot = Class.create();
-
-TafelTreeRoot.prototype = Object.extend(new TafelTreeBaseBranch, {
-    /**
-     * Constructeur d'un élément racine
-     *
-     * @access  public
-     * @param   TafelTree           tree                    L'objet TafelTree courant
-     * @param   object              struct                  Les infos concernant la racine est ses enfants
-     * @param   integer             level                   Le niveau du noeud (0 pour la racine)
-     * @param   boolean             before                  True s'il y a des noeuds avant
-     * @param   boolean             after                   True s'il y a des noeuds après
-     */
-    initialize : function (tree, struct, level, before, after, pos) {
-        this.isRoot = true;
-        this.tree = tree;
-        this.pos = pos;
-        this.level = level;
-        this.struct = struct;
-        this.tree.idTree++;
-        this.idObj = this.tree.idTreeBranch + this.tree.idTree;
-        this.hasSiblingsBefore = before;
-        this.hasSiblingsAfter = after;
-        this.eventable = true;
-        this.loaded = true;
-        this.children = [];
-        this.copiedTimes = 0;
-
-        this._setProperties();
-        this._setFunctions();
-
-        this.obj = this._addRoot();
-        this.content = this._addContent();
-        this.obj.appendChild(this.table);
-        this._setChildren(this);
-        this._setActions();
-    },
-
-    /**
-     * Méthode qui insère une branche avant celle courante
-     *
-     * @access  public
-     * @param   object              item                    Un objet au format TafelTreeBranch
-     * @return  TafelTreeRoot                               La nouvelle racine insérée
-     */
-    insertBefore : function (item) {
-        if (this.parent) return false;
-        var pos = this.pos;
-        var posBefore = pos + 1;
-        var isNotFirst = (pos == 0) ? false : true;
-        this._movePartStructRoot(pos);
-        this.tree.roots[pos] = new TafelTreeRoot(this.tree, item, this.level, isNotFirst, true, pos);
-        this.tree.div.insertBefore(this.tree.roots[pos].obj, this.obj);
-        this._manageAfterRootInsert(pos);
-        return this.tree.roots[pos];
-    },
-
-    /**
-     * Méthode qui insère une branche après celle courante
-     *
-     * @access  public
-     * @param   object              item                    Un objet au format TafelTreeBranch
-     * @return  TafelTreeRoot                               La nouvelle racine insérée
-     */
-    insertAfter : function (item) {
-        if (this.parent) return false;
-        var pos = this.pos + 1;
-        var posBefore = pos + 1;
-        var isNotLast = (pos == this.tree.roots.length) ? false : true;
-        this._movePartStructRoot(pos);
-        this.tree.roots[pos] = new TafelTreeRoot(this.tree, item, this.level, true, isNotLast, pos);
-        try {
-            this.tree.div.insertBefore(this.tree.roots[pos].obj, this.tree.roots[posBefore].obj);
-        } catch (err) {
-            this.tree.div.appendChild(this.tree.roots[pos].obj);
-        }
-        this._manageAfterRootInsert(pos);
-        return this.tree.roots[pos];
-    },
-
-
-    /**
-     *------------------------------------------------------------------------------
-     *                          TafelTreeRoot private methods
-     *------------------------------------------------------------------------------
-     */
-
-    _manageAfterRootInsert : function (pos) {
-        for (var i = 0; i < this.tree.roots.length; i++) {
-            if (i < this.tree.roots.length - 1) {
-                this.tree.roots[i].hasSiblingsAfter = true;
-            }
-            if (i > 0) {
-                this.tree.roots[i].hasSiblingsBefore = true;
-            }
-        }
-        for (var i = 0; i < this.children.length; i++) {
-            this.children[i]._manageLineForRoot(this.hasSiblingsAfter);
-        }
-    },
-
-    _movePartStructRoot : function (pos) {
-        var nb = this.tree.roots.length - 1;
-        var newPos = 0;
-        for (var i = nb; i >= pos; i--) {
-            newPos = i + 1;
-            this.tree.roots[newPos] = this.tree.roots[i];
-            this.tree.roots[newPos].pos = newPos;
-        }
-    },
-
-    /**
-     * Méthode pour ajouter l'élément principal
-     *
-     * @access  private
-     * @return  HTMLDivElement                              L'élément DIV créé
-     */
-    _addRoot : function () {
-        var div = document.createElement('div');
-        div.className = this.tree.classTreeRoot;
-        return div;
-    },
-
-    /**
-     * Méthode pour ajouter le contenu de l'élément (images + textes)
-     *
-     * Créé une structure comme suit :
-     *  <table><tbody><tr>
-     *      <td><img /></td>
-     *      <td><![-- CDATA --]></td>
-     *  </tr></tbody></table>
-     *
-     * @access  private
-     * @return  HTMLTbodyElement                            L'élément TBODY créé
-     */
-    _addContent : function () {
-        var table = document.createElement('table');
-        var tbody = document.createElement('tbody');
-        var tr = document.createElement('tr');
-        var tdImg = document.createElement('td');
-        var tdTxt = document.createElement('td');
-        var img = document.createElement('img');
-        var span = document.createElement('div');
-        var txt = document.createTextNode(txt);
-        img.src = this.tree.imgBase + this.struct.img;
-        span.innerHTML = this.struct.txt;
-        // Ajout du title (de NoisetteProd)
-        if (this.struct.title) {
-            span.setAttribute('title', this.struct.title);
-        }
-        // Fin ajout du title
-        span.setAttribute('id', this.idObj);
-        Element.addClassName(span, this.tree.classContent);
-        Element.addClassName(tdTxt, this.tree.classCanevas);
-        tdTxt.appendChild(span);
-        tdImg.appendChild(img);
-        // Insertion du tooltip, s'il existe
-        if (this.struct.tooltip) {
-            this.tooltip = this._createTooltip();
-            tdTxt.appendChild(this.tooltip);
-        }
-        // Insertion de l'image avant l'icône
-        this.tdImg = tdImg;
-        this.beforeIcon = this._getImgBeforeIcon();
-        tr.appendChild(this.beforeIcon);
-        tr.appendChild(tdImg);
-        tr.appendChild(tdTxt);
-        tbody.appendChild(tr);
-        table.appendChild(tbody);
-        if (this.tree.multiline) {
-            tdTxt.style.whiteSpace = 'normal';
-            if (this.hasChildren()) this._manageMultiline(this.tdImg, 2, true);
-        }
-        if (this.struct.style) {
-            Element.addClassName(tdTxt, this.struct.style);
-        }
-        this.txt = span;
-        this.img = img;
-        this.table = table;
-        this._setEvents(tdTxt, tdImg);
-        return tbody;
-    }
-});
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-/**
- *------------------------------------------------------------------------------
- *                          TafelTreeBranch Class
- *------------------------------------------------------------------------------
- */
-
-/**
-Properties description
-
-this.tree     : l'arbre de la branche
-this.root     : la racine de la branche
-this.parent   : le parent de la branche (peut être this.root)
-this.level    : le niveau de la branche. Le 1er niveau sous la racine est le 1
-this.pos      : la position de la branche au sein des enfants du parent
-this.idObj    : l'id attribué automatiquement. Ne pas se baser dessus pour les developpements externes
-this.children : les enfants de la branche
-this.objDrag  : L'objet Draggable
-
-this.struct           : la structure de la branche avec toutes les infos utilisateur
-
-this.eventable :
-Détermine si la branche peut être drag n' droppée ou non.
-Utilisé uniquement lors du dragndrop ajax et open ajax.
-
-this.obj        : HTMLDivElement qui symbolise la branche
-this.content    : HTMLTBodyElement qui symbolise le contenu de la branche
-this.beforeIcon : HTMLTdElement qui symbolise la TD contenant le picto avant l'icône
-this.img        : HTMLImgElement qui représente l'icône avant le texte
-this.txt        : HTMLTextNodeElement qui représente le texte de la branche
-this.table      : HTMLTableElement qui est le parent du Tbody (this.content)
-*/
-
-var TafelTreeBranch = Class.create();
-
-TafelTreeBranch.prototype = Object.extend(new TafelTreeBaseBranch, {
-    /**
-     * Constructeur d'une branche de l'arbre
-     *
-     * @access  public
-     * @param   TafelRoot           root                    L'objet racine parent
-     * @param   TafelBranch         parent                  L'objet directement parent
-     * @param   object              struct                  Les infos concernant la branche est ses enfants
-     * @param   integer             level                   Le niveau du noeud
-     * @param   boolean             before                  True s'il y a des noeuds avant
-     * @param   boolean             after                   True s'il y a des noeuds après
-     * @param   integer             pos                     La position dans le tableau children[] du parent
-     */
-    initialize : function (root, parent, struct, level, before, after, pos) {
-        this.tree = root.tree;
-        this.root = root;
-        this.level = level;
-        this.pos = pos;
-        this.parent = parent;
-        this.tree.idTree++;
-        this.idObj = this.tree.idTreeBranch + this.tree.idTree;
-        this.hasSiblingsBefore = before;
-        this.hasSiblingsAfter = after;
-        this.struct = struct;
-        this.eventable = true;
-        this.loaded = true;
-        this.inProcess = false;
-        this.children = [];
-        this.copiedTimes = 0;
-
-        if (typeof(this.struct.draggable) == 'undefined') this.struct.draggable = 1;
-        this._setProperties();
-
-        // Fonctions utilisateurs
-        if (typeof(this.struct.ondrop) == 'undefined') {
-            if (typeof(this.tree.onDrop) == 'function') {
-                this.struct.ondrop = this.tree.onDrop;
-                this.ondropDefault = true;
-            }
-        } else {this.struct.ondrop = eval(this.struct.ondrop);}
-        if (typeof(this.struct.ondropajax) == 'undefined') {
-            if (this.tree.onDropAjax && typeof(this.tree.onDropAjax.func) == 'function') {
-                this.struct.ondropajax = this.tree.onDropAjax.func;
-                this.struct.droplink = this.tree.onDropAjax.link;
-                this.ondropajaxDefault = true;
-            }
-        } else {this.struct.ondropajax = eval(this.struct.ondropajax);}
-        this._setFunctions();
-
-        // Initialisation de la branche
-        this.obj = this._addBranch();
-        this.content = this._addContent();
-        this.obj.appendChild(this.table);
-        this._setChildren(root);
-        // set actions like select node
-        this._setActions();
-    },
-
-    insertBefore : function (item) {
-        if (!this.parent) return false;
-        var pos = this.pos;
-        var posBefore = pos + 1;
-        var isNotFirst = (pos == 0) ? false : true;
-        this.parent._movePartStruct(pos);
-        this.parent.struct.items[pos] = item;
-        this.parent.children[pos] = new TafelTreeBranch(this.root, this.parent, item, this.level, isNotFirst, true, pos);
-        this.parent.obj.insertBefore(this.parent.children[pos].obj, this.obj);
-        this.parent._manageAfterInsert(pos);
-        return this.parent.children[pos];
-    },
-
-    insertAfter : function (item) {
-        if (!this.parent) return false;
-        var pos = this.pos + 1;
-        var posBefore = pos + 1;
-        var isNotLast = (pos == this.parent.children.length) ? false : true;
-        this.parent._movePartStruct(pos);
-        this.parent.struct.items[pos] = item;
-        this.parent.children[pos] = new TafelTreeBranch(this.root, this.parent, item, this.level, true, isNotLast, pos);
-        try {
-            this.parent.obj.insertBefore(this.parent.children[pos].obj, this.parent.children[posBefore].obj);
-        } catch (err) {
-            this.parent.obj.appendChild(this.parent.children[pos].obj);
-        }
-        this.parent._manageAfterInsert(pos);
-        return this.parent.children[pos];
-    },
-
-    /**
-     * Méthode pour déplacer une branche dans l'arbre comme fille
-     *
-     * @access  public
-     * @param   string              hereb                   L'id de la nouvelle branche parente
-     * @return  TafelTreeBranch                             La branche bougée
-     */
-    move : function (hereb) {
-        return this.moveIntoLast(hereb);
-    },
-    moveIntoLast : function (hereb) {
-        // On récupère l'objet "here"
-        var here = this.tree.getBranchById(hereb);
-        if (!here) return false
-
-        var pos = here._getPos();
-        var id = this.getId();
-        var txt = this.getText();
-        if (pos == here.children.length) {
-            obj = here.insertIntoLast(this.struct);
-        } else {
-            obj = here.children[pos].insertBefore(this.struct);
-        }
-        this.tree.removeBranch(this);
-        return obj;
-    },
-
-    moveIntoFirst : function (hereb) {
-        // On récupère l'objet "here"
-        var here = this.tree.getBranchById(hereb);
-        if (!here) return false
-
-        var id = this.getId();
-        var txt = this.getText();
-        var obj = here.insertIntoFirst(this.struct);
-        this.tree.removeBranch(this);
-        return obj;
-    },
-
-    /**
-     * Méthode pour déplacer une branche dans l'arbre comme soeur
-     *
-     * @access  public
-     * @param   string              hereb                   L'id de la nouvelle branche soeur
-     * @return  void
-     */
-    moveBefore : function (hereb) {
-        // On récupère l'objet "here"
-        var here = this.tree.getBranchById(hereb);
-        if (!here) return false;
-
-        var id = this.getId();
-        var txt = this.getText();
-        var obj = here.insertBefore(this.struct);
-        this.tree.removeBranch(this);
-        return obj;
-    },
-
-    moveAfter : function (hereb) {
-        // On récupère l'objet "here"
-        var here = this.tree.getBranchById(hereb);
-        if (!here) return false;
-
-        var id = this.getId();
-        var txt = this.getText();
-        var obj = here.insertAfter(this.struct);
-        this.tree.removeBranch(this);
-        return obj;
-    },
-
-
-    /**
-     *------------------------------------------------------------------------------
-     *                          TafelTreeBranch private methods
-     *------------------------------------------------------------------------------
-     */
-
-    /**
-     * Méthode pour ajouter l'élément principal
-     *
-     * @access  private
-     * @return  HTMLDivElement                              L'élément DIV créé
-     */
-    _addBranch : function () {
-        var div = document.createElement('div');
-        div.className = this.tree.classTreeBranch;
-        return div;
-    },
-
-    /**
-     * Méthode pour ajouter le contenu de l'élément (images + textes)
-     *
-     * Créé une structure comme suit :
-     *  <table><tbody><tr>
-     *      <td><img /></td>
-     *      <td><img /></td>
-     *      <td>etc. (relatif au niveau de l'élément courant)</td>
-     *      <td><![-- CDATA --]></td>
-     *  </tr></tbody></table>
-     *
-     * @access  private
-     * @return  HTMLTbodyElement                            L'élément TBODY créé
-     */
-    _addContent : function () {
-        var table = document.createElement('table');
-        var tbody = document.createElement('tbody');
-        var tr = document.createElement('tr');
-        var img = document.createElement('img');
-        // Toutes les images jusqu'à celle avant l'icône
-        var imgs = this._addImgs();
-        var nbImgs = imgs.length;
-        for (var i = nbImgs - 1; i >= 0; i--) {
-            tr.appendChild(imgs[i]);
-        }
-        // On récupère l'image avant l'icône
-        this.beforeIcon = this._getImgBeforeIcon();
-        tr.appendChild(this.beforeIcon);
-
-        // On créé l'icone et le texte
-        var tdImg = document.createElement('td');
-        var tdTxt = document.createElement('td');
-        var img = document.createElement('img');
-        var span = document.createElement('div');
-        span.innerHTML = this.struct.txt;
-        // Ajout du title (de NoisetteProd)
-        if (this.struct.title) {
-            span.setAttribute('title', this.struct.title);
-        }
-        // Fin ajout du title
-        span.setAttribute('id', this.idObj);
-        Element.addClassName(span, this.tree.classContent);
-        Element.addClassName(tdTxt, this.tree.classCanevas);
-        img.src = this.tree.imgBase + this.struct.img;
-        this.tdImg = tdImg;
-        if (this.tree.multiline) {
-            tdTxt.style.whiteSpace = 'normal';
-            if (this.hasChildren()) this._manageMultiline(this.tdImg, 2, true);
-        }
-        if (this.struct.style) {
-            Element.addClassName(tdTxt, this.struct.style);
-        }
-        // On append l'ensemble à la table HTML
-        tdTxt.appendChild(span);
-        // Insertion du tooltip, s'il existe
-        if (this.struct.tooltip) {
-            this.tooltip = this._createTooltip();
-            tdTxt.appendChild(this.tooltip);
-        }
-        tdImg.appendChild(img);
-        tr.appendChild(tdImg);
-        tr.appendChild(tdTxt);
-        tbody.appendChild(tr);
-        table.appendChild(tbody);
-        this.tdImg = tdImg;
-        this.txt = span;
-        this.img = img;
-        this.table = table;
-        this._setEvents(tdTxt, tdImg);
-        return tbody;
-    },
-
-    /**
-     * Fonction qui permet de gérer toutes les lignes verticales qui précèdent l'icone
-     *
-     * @access  private
-     * @return  array                                       Les images à mettre avant l'icône
-     */
-    _addImgs : function () {
-        var obj = this.parent;
-        var cpt = 0;
-        var imgs = [];
-        var img = null;
-        // On détermine s'il y a des lignes verticales avant l'icone et le texte
-        var td = null;
-        while (obj.parent) {
-            td = document.createElement('td');
-            img = document.createElement('img');
-            if (!obj.hasSiblingsAfter) {
-                img.src = this.tree.imgBase + this.tree.imgEmpty;
-            } else {
-                img.src = this.tree.imgBase + this.tree.imgLine1;
-                if (this.tree.multiline) {
-                    this._manageMultiline(td, 1, true);
-                }
-            }
-            td.appendChild(img);
-            imgs[cpt] = td;
-            cpt++;
-            obj = obj.parent;
-        }
-        // On teste si le root à des soeurs. Si oui, on ajoute encore une ligne
-        td = document.createElement('td');
-        img = document.createElement('img');
-        if (!this.root.hasSiblingsAfter) {
-            img.src = this.tree.imgBase + this.tree.imgEmpty;
-        } else {
-            img.src = this.tree.imgBase + this.tree.imgLine1;
-            if (this.tree.multiline) {
-                this._manageMultiline(td, 1, true);
-            }
-        }
-        td.appendChild(img);
-        imgs[cpt] = td;
-        return imgs;
-    }
-});
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-/**
- *------------------------------------------------------------------------------
- *                          TafelTrees Management
- *------------------------------------------------------------------------------
- */
-
-var TafelTreeManager = {
-    /**
-     *------------------------------------------------------------------------------
-     *                          TafelTreeManager properties
-     *------------------------------------------------------------------------------
-     */
-
-    /**
-     * @var     boolean         stopEvent               Stoppe la propagation de l'événement
-     */
-    stopEvent : true,
-
-    /**
-     * @var     boolean         keyboardEvents          True pour activer la gestion clavier
-     */
-    keyboardEvents : true,
-
-    /**
-     * @var     boolean         keyboardStructEvents    True pour activer la gestion clavier relative à la structure
-     */
-    keyboardStructuralEvents : true,
-
-    /**
-     * @var     array           trees                   Les arbres actuellement loadés
-     */
-    trees : [],
-
-    /**
-     * @var     TafelTree       currentTree             L'arbre actuellement actif
-     */
-    currentTree : null,
-
-    /**
-     * @var     array           userKeys                Les touches utilisateur
-     */
-    userKeys : [],
-
-
-
-    /**
-     *------------------------------------------------------------------------------
-     *                          TafelTreeManager public methods
-     *------------------------------------------------------------------------------
-     */
-
-    /**
-     * Permet de setter des fonctions utilisateur pour les touches voulues
-     *
-     * L'objet keys est formé comme ceci :
-     *  - keys[0].key = code de la touche
-     *  - keys[0].func = fonction utilisateur
-     *
-     * @access  public
-     * @param   array           keys                    Les touchces et leur fonction
-     * @return  void
-     */
-    setKeys : function (keys) {
-        this.userKeys = keys;
-    },
-
-    /**
-     * Ajoute un arbre dans le manager
-     *
-     * @access  public
-     * @param   TafelTree       tree                    L'arbre à ajouter
-     * @return  void
-     */
-    add : function (tree) {
-        this.trees.push(tree);
-    },
-
-    disableKeyboardEvents : function () {
-        this.keyboardEvents = false;
-    },
-
-    disableKeyboardStructuralEvents : function () {
-        this.keyboardStructuralEvents = false;
-    },
-
-    /**
-     * Retourne l'arbre actuellement actif
-     *
-     * @access  public
-     * @return  TafelTree                               L'arbre actuellement actif
-     */
-    getCurrentTree : function () {
-        return this.currentTree;
-    },
-
-    /**
-     * Set l'arbre actuellement actif
-     *
-     * @access  public
-     * @param   TafelTree                               L'arbre actuellement actif
-     * @return  void
-     */
-    setCurrentTree : function (tree) {
-        this.currentTree = tree;
-    },
-
-    /**
-     * Retourne true si la touche POMME est appuyée (sur Mac Safari)
-     *
-     * @access  public
-     * @return  boolean                                 True si POMME est appuyé
-     */
-    metaOn : function (ev) {
-        var ok = false;
-        if (ev && (ev.metaKey)) {
-            ok = true;
-        }
-        return ok;
-    },
-
-    /**
-     * Retourne true si la touche CTRL est appuyée
-     *
-     * @access  public
-     * @return  boolean                                 True si CTRL est appuyé
-     */
-    ctrlOn : function (ev) {
-        var ok = false;
-        if (ev && (ev.ctrlKey || ev.modifier == 2)) {
-            ok = true;
-        }
-        return ok;
-    },
-
-    /**
-     * Retourne true si la touche ALT est appuyée
-     *
-     * @access  public
-     * @return  boolean                                 True si ALT est appuyé
-     */
-    altOn : function (ev) {
-        var ok = false;
-        if (ev && (ev.altKey || ev.modifier == 1)) {
-            ok = true;
-        }
-        return ok;
-    },
-
-    /**
-     * Retourne true si la touche SHIFT est appuyée
-     *
-     * @access  public
-     * @return  boolean                                 True si ALT est appuyé
-     */
-    shiftOn : function (ev) {
-        var ok = false;
-        if (ev && (ev.shiftKey || ev.modifier == 3)) {
-            ok = true;
-        }
-        return ok;
-    },
-
-    /**
-     * Retourne le code clavier
-     *
-     * @access  public
-     * @param   Event           ev                      L'événement déclencheur
-     * @return  void
-     */
-    getCode : function (ev) {
-        return (ev.which) ? ev.which : ev.keyCode;
-    },
-
-    /**
-     * Assigne tous les événements nécessaires
-     *
-     * @access  public
-     * @return  void
-     */
-    setControlEvents : function () {
-        Event.observe(document, 'keypress', this.evt_keyPress.bindAsEventListener(this), false);
-        var body = document.getElementsByTagName('body');
-        if (!body || !body[0]) {
-            throw new Error(TAFELTREE_NO_BODY_TAG);
-        } else {
-            Event.observe(body[0], 'mouseup', this.evt_unselect.bindAsEventListener(this), false);
-        }
-    },
-
-
-    /**
-     *------------------------------------------------------------------------------
-     *                          TafelTreeManager events management
-     *------------------------------------------------------------------------------
-     */
-
-    /**
-     * Déselectionne l'arbre courant
-     *
-     * @access  public
-     * @param   Event           ev                      L'événement déclencheur
-     * @return  void
-     */
-    evt_unselect : function (ev) {
-        var obj = Event.element(ev);
-        var current = this.getCurrentTree();
-        if (current) {
-            if (!Element.hasClassName(obj, current.classSelected) && !Element.hasClassName(obj, current.classOpenable)) {
-                current.unselect();
-                this.setCurrentTree(null);
-            }
-        }
-    },
-
-    /**
-     * Appel lors de la touche ENTER
-     *
-     * @access  public
-     * @param   TafelTree       tree                    L'arbre incriminé
-     * @param   integer         code                    Le code de la touche
-     * @param   Object          keys                    Les infos des "metakeys" ctrl, shift, alt et meta
-     * @param   Event           ev                      L'événement déclencheur
-     * @return  void
-     */
-    enter : function (tree, code, keys, ev) {
-        if (tree.lastEdited) {
-            tree.lastEdited.editableInput.blur();
-            if (this.stopEvent) Event.stop(ev);
-        }
-    },
-
-    /**
-     * Appel lors de la touche ESCAPE
-     *
-     * @access  public
-     */
-    escape : function (tree, code, keys, ev) {
-        var selected = tree.getSelectedBranches();
-        var lastPos = selected.length - 1;
-        var nounselect = false;
-        if (lastPos == 0 && tree.lastEdited) {
-            if (tree.lastEdited.hideEditable(ev)) {
-                nounselect = true;
-            }
-        }
-        if (!nounselect) {
-            tree.unselect();
-        }
-        tree.unsetCut();
-        tree.unsetCopy();
-        if (this.stopEvent) Event.stop(ev);
-    },
-
-    /**
-     * Appel lors de la touche HOME
-     *
-     * @access  public
-     */
-    moveStart : function (tree, code, keys, ev) {
-        if (!tree.lastEdited) {
-            tree.unselect();
-            if (tree.roots.length > 0) {
-                var branch = tree.roots[0];
-                branch.select();
-            }
-            if (this.stopEvent) Event.stop(ev);
-        }
-    },
-
-    /**
-     * Appel lors de la touche END
-     *
-     * @access  public
-     */
-    moveEnd : function (tree, code, keys, ev) {
-        if (!tree.lastEdited) {
-            tree.unselect();
-            if (tree.roots.length > 0) {
-                var last = tree.roots.length - 1;
-                var branch = tree.roots[last];
-                while (branch.hasChildren()) {
-                    branch = branch.getLastBranch();
-                }
-                branch.select();
-            }
-            if (this.stopEvent) Event.stop(ev);
-        }
-    },
-
-    /**
-     * Appel lors de la touche Fleche haut
-     *
-     * @access  public
-     */
-    moveUp : function (tree, code, keys, ev) {
-        var selected = tree.getSelectedBranches();
-        var lastPos = selected.length - 1;
-        if (!tree.lastEdited) {
-            if (lastPos >= 0) {
-                var branch = selected[lastPos].getPreviousOpenedBranch();
-                if (branch) branch.select(ev);
-            } else {
-                // On sélectionne automatiquement le 1er élément de l'arbre
-                if (typeof(tree.roots[0]) != 'undefined') tree.roots[0].select();
-            }
-            if (this.stopEvent) Event.stop(ev);
-        }
-    },
-
-    /**
-     * Appel lors de la touche Fleche bas
-     *
-     * @access  public
-     */
-    moveDown : function (tree, code, keys, ev) {
-        var selected = tree.getSelectedBranches();
-        var lastPos = selected.length - 1;
-        if (!tree.lastEdited) {
-            if (lastPos >= 0) {
-                var branch = selected[lastPos].getNextOpenedBranch();
-                if (branch) branch.select(ev);
-            } else {
-                // On sélectionne automatiquement le 1er élément de l'arbre
-                if (typeof(tree.roots[0]) != 'undefined') tree.roots[0].select();
-            }
-            if (this.stopEvent) Event.stop(ev);
-        }
-    },
-
-    /**
-     * Appel lors de la touche Fleche droite
-     *
-     * @access  public
-     */
-    moveRight : function (tree, code, keys, ev) {
-        var selected = tree.getSelectedBranches();
-        var lastPos = selected.length - 1;
-        if (!tree.lastEdited) {
-            if (lastPos >= 0) {
-                var branch = selected[lastPos];
-                if (branch.hasChildren() && !branch.isOpened()) {
-                    branch.setOpen(ev);
-                } else {
-                    if (branch.hasChildren()) {
-                        var sel = branch.getFirstBranch();
-                        var sel = sel.select(ev);
-                    }
-                }
-            } else {
-                // On sélectionne automatiquement le 1er élément de l'arbre
-                if (typeof(tree.roots[0]) != 'undefined') tree.roots[0].select();
-            }
-            if (this.stopEvent) Event.stop(ev);
-        }
-    },
-
-    /**
-     * Appel lors de la touche Fleche gauche
-     *
-     * @access  public
-     */
-    moveLeft : function (tree, code, keys, ev) {
-        var selected = tree.getSelectedBranches();
-        var lastPos = selected.length - 1;
-        if (!tree.lastEdited) {
-            if (lastPos >= 0) {
-                var branch = selected[lastPos];
-                if (lastPos == 0 && branch.hasChildren() && branch.isOpened()) {
-                    branch.openIt(false);
-                } else {
-                    if (!branch.isRoot) branch.parent.select(ev);
-                }
-            } else {
-                // On sélectionne automatiquement le 1er élément de l'arbre
-                if (typeof(tree.roots[0]) != 'undefined') tree.roots[0].select();
-            }
-            if (this.stopEvent) Event.stop(ev);
-        }
-    },
-
-    /**
-     * Appel lors de la touche F2
-     *
-     * @access  public
-     */
-    edit : function (tree, code, keys, ev) {
-        var selected = tree.getSelectedBranches();
-        var lastPos = selected.length - 1;
-        if (lastPos == 0) {
-            selected[lastPos].setDblClick(ev);
-        }
-        if (this.stopEvent) Event.stop(ev);
-    },
-
-    /**
-     * Appel lors de la touche DELETE
-     *
-     * @access  public
-     */
-    remove : function (tree, code, keys, ev) {
-        if (!tree.lastEdited) {
-            var selected = tree.getSelectedBranches();
-            for (var i = 0; i < selected.length; i++) {
-                tree.removeBranch(selected[i]);
-            }
-            if (this.stopEvent) Event.stop(ev);
-        }
-    },
-
-    /**
-     * Appel lors de la touche x ou X
-     *
-     * @access  public
-     */
-    cut : function (tree, code, keys, ev) {
-        if (keys.ctrlKey || keys.metaKey) {
-            tree.cut();
-            if (this.stopEvent) Event.stop(ev);
-        }
-    },
-
-    /**
-     * Appel lors de la touche c ou C
-     *
-     * @access  public
-     */
-    copy : function (tree, code, keys, ev) {
-        if (keys.ctrlKey || keys.metaKey) {
-            tree.copy();
-            if (this.stopEvent) Event.stop(ev);
-        }
-    },
-
-    /**
-     * Appel lors de la touche v ou V
-     *
-     * @access  public
-     */
-    paste : function (tree, code, keys, ev) {
-        if (keys.ctrlKey || keys.metaKey) {
-            tree.paste();
-            if (this.stopEvent) Event.stop(ev);
-        }
-    },
-
-    /**
-     * Appel lors de la touche z ou Z
-     *
-     * @access  public
-     */
-    undo : function (tree, code, keys, ev) {
-        if (keys.ctrlKey || keys.metaKey) {
-            tree.undo();
-            if (this.stopEvent) Event.stop(ev);
-        }
-    },
-
-    /**
-     * Gestion du clavier
-     *
-     * @access  private
-     * @param   Event                   ev                          L'événement déclencheur
-     * @return  void
-     */
-    evt_keyPress : function (ev) {
-        var current = this.getCurrentTree();
-        if (current && this.keyboardEvents) {
-            // Check Control Ctrl
-            var keys = {
-                'ctrlKey'  : this.ctrlOn(ev),
-                'metaKey'  : this.metaOn(ev),
-                'altKey'   : this.altOn(ev),
-                'shiftKey' : this.shiftOn(ev)
-            };
-            // Check de la touche appuyée
-            var code = this.getCode(ev);
-            // Check si l'utilisateur a fourni une fonction particulière
-            for (var i = 0; i < this.userKeys.length; i++) {
-                if (code == this.userKeys[i].key && typeof(this.userKeys[i].func) == 'function') {
-                    if (!this.userKeys[i].func(current, code, keys, ev)) {
-                        return false;
-                    }
-                    break;
-                }
-            }
-            switch (code) {
-                // Retour au début (Home) et fin (End)
-                case Event.KEY_HOME : this.moveStart(current, code, keys, ev); break;
-                case Event.KEY_END : this.moveEnd(current, code, keys, ev); break;
-                // Mouvements haut, bas, gauche et droite
-                case Event.KEY_UP : this.moveUp(current, code, keys, ev); break;
-                case Event.KEY_DOWN : this.moveDown(current, code, keys, ev); break;
-                case Event.KEY_RIGHT : this.moveRight(current, code, keys, ev); break;
-                case Event.KEY_LEFT : this.moveLeft(current, code, keys, ev); break;
-            }
-            if (this.keyboardStructuralEvents) {
-                switch (code) {
-                    // Fin de l'édition d'une branche
-                    case Event.KEY_RETURN : this.enter(current, code, keys, ev); break;
-                    // Déselection
-                    case Event.KEY_ESC : this.escape(current, code, keys, ev); break;
-                    // Effacer (Del)
-                    case Event.KEY_DELETE : this.remove(current, code, keys, ev); break;
-                    // Editer (F2)
-                    case 113: this.edit(current, code, keys, ev); break;
-                    // Couper (x-X)
-                    case 120: case 88: this.cut(current, code, keys, ev); break;
-                    // Copier (c-C)
-                    case 99 : case 67: this.copy(current, code, keys, ev); break;
-                    // Coller (v-V)
-                    case 118: case 86: this.paste(current, code, keys, ev); break;
-                    // Annuler (z-Z)
-                    case 122: case 90: this.undo(current, code, keys, ev); break;
-                }
-            }
-        }
-    }
-};
-
-
-/**
- *------------------------------------------------------------------------------
- *                          TafelTree pre-instanciation
- *------------------------------------------------------------------------------
- */
-
-function TafelTreeInitBase (ev) {
-    TafelTreeManager.setControlEvents();
-    if (typeof(TafelTreeInit) == 'function') {
-        TafelTreeInit();
-    }
-};
-
-Event.observe(window, 'load', TafelTreeInitBase, false);
\ No newline at end of file
diff --git a/apps/maarch_entreprise/tools/tafelTree/css/tree.css b/apps/maarch_entreprise/tools/tafelTree/css/tree.css
deleted file mode 100755
index df9b93cad6ebbf2afa37b4081b2053910c63ac4c..0000000000000000000000000000000000000000
--- a/apps/maarch_entreprise/tools/tafelTree/css/tree.css
+++ /dev/null
@@ -1,85 +0,0 @@
-.tafelTree {
-text-align: left;
-float: left;
-direction: ltr;
-overflow: auto;
-}
-
-.tafelTree, .tafelTree table {
-font-size: small;
-}
-
-.tafelTree, .tafelTree span, .tafelTree img, .tafelTree div {
-margin: 0;
-padding: 0;
-}
-
-.tafelTree table {
-border-collapse: collapse;
-margin: 0;
-padding: 0;
-}
-
-.tafelTree table tr, .tafelTree table td {
-direction: ltr;
-margin: 0;
-padding: 0;
-}
-
-.tafelTree table td {
-white-space: nowrap;
-vertical-align: top;
-}
-
-.tafelTree .tafelTreedrag {
-cursor: pointer;
-}
-
-.tafelTree .tafelTreecontent {
-padding: 0 0.1em;
-}
-
-.tafelTree .tafelTreecanevas {
-vertical-align: middle;
-}
-
-.tafelTree .tafelTreeselected {
-background-color: #9999FF;
-color: #FFFFFF;
-}
-
-.tafelTree .tafelTreeeditable {
-display: none;
-padding: 0 0.2em;
-border: 1px solid #CCCCFF;
-background-color: #EEEEFF;
-}
-
-.tafelTree .tafelTreedragOver {
-background-color: #9999CC;
-color: #EEEEFF;
-}
-
-.tafelTree .tafelTreetooltip {
-display: none;
-position: absolute;
-border: 1px solid #9999FF;
-background-color: #EEEEFF;
-padding: 0.3em;
-z-index: 9000;
-}
-
-
-
-/**
- * Multiline
- */
-.tafelTree table td.tafelTreemultiline {
-background-repeat: repeat-y;
-background-position: top left;
-}
-
-.tafelTree table td.tafelTreemultiline2 {
-background-repeat: repeat-y;
-background-position: top left;
-}
\ No newline at end of file
diff --git a/apps/maarch_entreprise/tools/tafelTree/doc/docOffline_en.html b/apps/maarch_entreprise/tools/tafelTree/doc/docOffline_en.html
deleted file mode 100755
index a045d59ed314c9e155daeb1122e4c3afdf7e4687..0000000000000000000000000000000000000000
--- a/apps/maarch_entreprise/tools/tafelTree/doc/docOffline_en.html
+++ /dev/null
@@ -1,2577 +0,0 @@
-<html>
-<head>
-	<title>TafelTree v1.7, 2006-11-14 >> Documentation</title>
-	<style>
-	body, table, select, option, input, textarea {
-	font-family: Verdana, Arial, sans-serif;
-	}
-
-	body {
-	margin-top: 50px;
-	text-align: center;
-	background-color: #FFFFFF;
-	padding-bottom: 30px;
-	}
-
-	div.body {
-	text-align: left;
-	width: 850px;
-	font-size: 0.7em;
-	margin: 0 auto;
-	}
-
-	h1 {
-	text-align: right;
-	font-size: 2em;
-	color: #333399;
-	margin: 0;
-	padding: 0.1em;
-	}
-
-	h2 {
-	text-align: right;
-	font-size: 1.5em;
-	color: #9999FF;
-	margin: 0;
-	padding: 0.2em;
-	padding-bottom: 1em;
-	border-bottom: 1px solid #999999;
-	}
-
-	h1 span {
-	font-size: 0.5em;
-	font-style: italic;
-	}
-
-	img.titre {
-	float: left;
-	}
-
-	.spacer {
-	clear: both;
-	}
-
-	a:visited {
-	color: #9999FF;
-	}
-
-	a:hover {
-	color: #009900;
-	}
-
-	/**
-	 * Le menu
-	 */
-	#menu {
-	list-style: none;
-	margin: 0;
-	padding: 0;
-	font-weight: bold;
-	font-size: 1.2em;
-	}
-
-	#menu li {
-	float: left;
-	width: 16.64%;
-	background-color: #EEEEFF;
-	}
-
-	#menu a {
-	display: block;
-	text-align: center;
-	text-decoration: none;
-	border-bottom: 1px solid #999999;
-	}
-
-	#menu a:visited {
-	color: #0000FF;
-	}
-
-	#menu .ici a {
-	color: #009900;
-	}
-
-	#menu a:hover {
-	background-color: #CCCCFF;
-	color: #EEEEFF;
-	}
-
-	#contenu {
-	clear: both;
-	}
-
-	#contenu .gauche {
-	font-size: 1.1em;
-	text-align: justify;
-	margin-top: 1em;
-	}
-
-	/**
-	 * Le contenu de gauche
-	 */
-	#contenu code {
-	display: block;
-	padding: 0.2em;
-	background-color: #EEEEEE;
-	border: 1px solid #999999;
-	margin: 1em 0;
-	font-size: 1em;
-	}
-
-	#contenu .gauche > code {
-	font-size: 1.3em;
-	}
-
-	#contenu .gauche h4 {
-	border-bottom: 1px solid #CCCCCC;
-	font-size: 1em;
-	color: #999999;
-	margin-top: 2em;
-	margin-bottom: 0;
-	}
-
-	#contenu h3 {
-	text-align: center;
-	margin: 0;
-	font-size: 1.2em;
-	padding-bottom: 55px;
-	}
-
-	/**
-	 * Le bas du site
-	 */
-	div.bottom {
-	clear: both;
-	border-top: 1px solid #CCCCCC;
-	color: #555555;
-	margin-top: 1em;
-	padding-right: 25px;
-	background: url('../imgs/fleche.jpg') right center no-repeat;
-	}
-
-	div.bottom p {
-	text-align: right;
-	margin: 0;
-	padding: 0;
-	}
-
-	.classe {
-	color: #009900;
-	}
-
-	.var {
-	color: #000099;
-	}
-
-	.err {
-	color: #990000;
-	}
-
-	.defaut {
-	font-weight: bold;
-	color: #990000;
-	}
-
-	em {
-	color: inherit;
-	}
-
-	.develop {
-	margin-left: 5em;
-	display: none;
-	}
-
-	.doc h4 {
-	cursor: pointer;
-	}
-
-	#contenu .gauche .doc h4:hover {
-	color: #009900;
-	}
-
-
-	div.code {
-	border: 1px solid #999999;
-	margin-bottom: 1em;
-	}
-
-	div.code table {
-	border-collapse: collapse;
-	font-family: monospace;
-	}
-
-	div.code td {
-	vertical-align: top;
-	}
-
-	div.code td.num {
-	background-color: #EEEEEE;
-	border-right: 1px solid #DDDDDD;
-	}
-
-	div.code td th {
-	font-size: 11px;
-	text-align: right;
-	font-weight: normal;
-	background-color: #EEEEEE;
-	color: #777777;
-	width: 2em;
-	}
-
-	div.code td td {
-	font-size: 13px;
-	padding: 0 0 0 0.5em;
-	}
-
-	div.code span.reserved {
-	color: #0000FF;
-	}
-
-	div.code span.string {
-	color: #CC0000;
-	}
-
-	div.code span.object {
-	color: #660000;
-	}
-
-	div.code span.php {
-	font-weight: bold;
-	color: #CC33CC;
-	}
-
-	div.code span.comment, span.comment span.reserved, span.comment span.object, span.comment span.string {
-	color: #009900;
-	}
-
-	.doc h1 {
-	text-align: left;
-	margin-top: 1em;
-	}
-	.doc h2 {
-	text-align: left;
-	margin-top: 0.5em;
-	}
-
-	#contenu .gauche h4.new {
-	color: #CC5555;
-	background-image: url('../imgs/new.png');
-	background-position: top right;
-	background-repeat: no-repeat;
-	}
-
-	.doc table.prop {
-	margin-left: 5%;
-	font-size: 0.9em;
-	border-collapse: collapse;
-	width: 95%;
-	}
-
-	.doc table.prop th {
-	text-align: left;
-	}
-	.doc table.prop th.long {
-	width: 30%;
-	}
-
-	.doc table.prop tr:hover {
-	background-color: #EEEEEE;
-	}
-	</style>
-	<script type="text/javascript">
-		function shownext(obj) {
-			var div = obj;
-			while (div && div.nodeName.toLowerCase() != 'div') {
-				div = div.nextSibling;
-			}
-			if (div.style.display == 'block') {
-				div.style.display = 'none';
-			} else {
-				div.style.display = 'block';
-			}
-		}
-	</script>
-</head>
-<body>
-
-<div class="body">
-
-	<div id="contenu">
-		<div class="gauche" >
-
-			<h3 class="m4">Documentation</h3>
-
-			<h4>Offline documentation</h4>
-			<ul>
-				<li><a href="docOffline_en.html" target="_blank">See offline documentation (HTML)</a></li>
-				<li><a href="docOffline_en.zip">Offline documentation (ZIP, 270 kb)</a></li>
-			</ul>
-			<h4>HTML format</h4>
-			<p>TafelTree is an opensource Javascript tree which has a lot of behaviours useful for managing datas. It's based on JSON and DOM. The HTML structure, totally transparent for the user of course, is like that :</p>
-
-			<div id="myTree"></div>
-			<div class="spacer">&nbsp;</div>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr><tr><th>14</th></tr><tr><th>15</th></tr><tr><th>16</th></tr><tr><th>17</th></tr><tr><th>18</th></tr><tr><th>19</th></tr><tr><th>20</th></tr><tr><th>21</th></tr><tr><th>22</th></tr><tr><th>23</th></tr><tr><th>24</th></tr><tr><th>25</th></tr><tr><th>26</th></tr><tr><th>27</th></tr><tr><th>28</th></tr><tr><th>29</th></tr><tr><th>30</th></tr><tr><th>31</th></tr><tr><th>32</th></tr><tr><th>33</th></tr><tr><th>34</th></tr><tr><th>35</th></tr><tr><th>36</th></tr><tr><th>37</th></tr><tr><th>38</th></tr><tr><th>39</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;div id=<span class="string">"tree"</span> class="tafelTree"></p></td></tr><tr><td><p style="padding-left:4ex;">&lt;div class="tafelTree_root"></p></td></tr><tr><td><p style="padding-left:8ex;">&lt;table>&lt;tbody>&lt;tr></p></td></tr><tr><td><p style="padding-left:12ex;">&lt;td>&lt;img class="openable<span class="string">" src="</span>../imgs/minus5.gif"/>&lt;/td></p></td></tr><tr><td><p style="padding-left:12ex;">&lt;td>&lt;img src=<span class="string">"../imgs/globe.gif"</span>/>&lt;/td></p></td></tr><tr><td><p style="padding-left:12ex;">&lt;td class="canevas<span class="string">">&lt;div class="</span>content">Root&lt;/div>&lt;/td></p></td></tr><tr><td><p style="padding-left:8ex;">&lt;/tr>&lt;/tbody>&lt;/table></p></td></tr><tr><td><p style="padding-left:8ex;">&lt;div class="tafelTree_branch"></p></td></tr><tr><td><p style="padding-left:12ex;">&lt;table>&lt;tbody>&lt;tr></p></td></tr><tr><td><p style="padding-left:16ex;">&lt;td>&lt;img src=<span class="string">"../imgs/empty.gif"</span>/>&lt;/td></p></td></tr><tr><td><p style="padding-left:16ex;">&lt;td>&lt;img class="openable<span class="string">" src="</span>../imgs/line3.gif"/>&lt;/td></p></td></tr><tr><td><p style="padding-left:16ex;">&lt;td>&lt;img src=<span class="string">"../imgs/page.gif"</span>/>&lt;/td></p></td></tr><tr><td><p style="padding-left:16ex;">&lt;td class="canevas<span class="string">">&lt;div class="</span>content"></p></td></tr><tr><td><p style="padding-left:20ex;">Child 1&lt;/div>&lt;/td></p></td></tr><tr><td><p style="padding-left:12ex;">&lt;/tr>&lt;/tbody>&lt;/table></p></td></tr><tr><td><p style="padding-left:8ex;">&lt;/div></p></td></tr><tr><td><p style="padding-left:8ex;">&lt;div class="tafelTree_branch"></p></td></tr><tr><td><p style="padding-left:12ex;">&lt;table>&lt;tbody>&lt;tr></p></td></tr><tr><td><p style="padding-left:16ex;">&lt;td>&lt;img src=<span class="string">"../imgs/empty.gif"</span>/>&lt;/td></p></td></tr><tr><td><p style="padding-left:16ex;">&lt;td>&lt;img class="openable<span class="string">" src="</span>../imgs/minus2.gif"/>&lt;/td></p></td></tr><tr><td><p style="padding-left:16ex;">&lt;td>&lt;img src=<span class="string">"../imgs/folderopen.gif"</span>/>&lt;/td></p></td></tr><tr><td><p style="padding-left:16ex;">&lt;td class="canevas<span class="string">">&lt;div class="</span>content"></p></td></tr><tr><td><p style="padding-left:20ex;">Child 2&lt;/div>&lt;/td></p></td></tr><tr><td><p style="padding-left:12ex;">&lt;/tr>&lt;/tbody>&lt;/table></p></td></tr><tr><td><p style="padding-left:12ex;">&lt;div class="tafelTree_branch"></p></td></tr><tr><td><p style="padding-left:16ex;">&lt;table>&lt;tbody>&lt;tr></p></td></tr><tr><td><p style="padding-left:20ex;">&lt;td>&lt;img src=<span class="string">"../imgs/empty.gif"</span>/>&lt;/td></p></td></tr><tr><td><p style="padding-left:20ex;">&lt;td>&lt;img src=<span class="string">"../imgs/empty.gif"</span>/>&lt;/td></p></td></tr><tr><td><p style="padding-left:20ex;">&lt;td>&lt;img class="openable"</p></td></tr><tr><td><p style="padding-left:24ex;">src=<span class="string">"../imgs/line2.gif"</span>/>&lt;/td></p></td></tr><tr><td><p style="padding-left:20ex;">&lt;td>&lt;img src=<span class="string">"../imgs/page.gif"</span>/>&lt;/td></p></td></tr><tr><td><p style="padding-left:20ex;">&lt;td class="canevas<span class="string">">&lt;div class="</span>content"></p></td></tr><tr><td><p style="padding-left:24ex;">Child with child&lt;/div>&lt;/td></p></td></tr><tr><td><p style="padding-left:16ex;">&lt;/tr>&lt;/tbody>&lt;/table></p></td></tr><tr><td><p style="padding-left:12ex;">&lt;/div></p></td></tr><tr><td><p style="padding-left:8ex;">&lt;/div></p></td></tr><tr><td><p style="padding-left:4ex;">&lt;/div></p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/div></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			<div class="doc">
-			<h1>TafelTreeBranch Properties structure</h1>
-			<h2>TafelTreeBranch basic properties</h2>
-			
-			<a name="tag"></a>
-			<h4 onclick="shownext(this)">id <em>(string)</em></h4>
-			<div class="develop">
-				<p class="classe">Required</p>
-
-				<p>The branch's user ID. Must be unique in the whole page, event if it's not in the same tree.
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"myId"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"My super text"</span></p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// UL - LI</span></p></td></tr><tr><td><p style="padding-left:0ex;">&lt;li id=<span class="string">"myId"</span>>My super text&lt;/li></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-			
-			<a name="txt"></a>
-			<h4 onclick="shownext(this)">txt <em>(string)</em></h4>
-			<div class="develop">
-				<p class="classe">Required</p>
-				<p>The text which is showed just next the icon</p>
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"myId"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"My super text"</span></p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// UL - LI</span></p></td></tr><tr><td><p style="padding-left:0ex;">&lt;li id=<span class="string">"myId"</span>>My super text&lt;/li></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<a name="acceptdrop"></a>
-			<h4 onclick="shownext(this)">acceptdrop <em>(boolean)</em></h4>
-			<div class="develop">
-				<p class="classe">Optional. Defaul value : true</p>
-				<p><strong>True</strong> means you can drop a branch into it, <strong>false</strong> make this action impossible.</p>
-
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"myId"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"My super text"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"acceptdrop"</span> : <span class="reserved">true</span></p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// UL - LI</span></p></td></tr><tr><td><p style="padding-left:0ex;">&lt;li id=<span class="string">"myId"</span> Tacceptdrop=<span class="string">"1"</span>>My super text&lt;/li></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-			
-			<a name="canhavechildren"></a>
-			<h4 onclick="shownext(this)">canhavechildren <em>(boolean)</em></h4>
-			<div class="develop">
-				<p class="classe">Optional. Defaul value : false</p>
-				<p><strong>*rue</strong> means the branch can have children from the server. You need it with the function <strong><a href="#onopenpopulate">onopenpopulate()</a></strong>. That allow the branch to have the " + " which shows that the branch has children.</p>
-
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"myId"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"My super text"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"canhavechildren"</span> : <span class="reserved">true</span></p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// UL - LI</span></p></td></tr><tr><td><p style="padding-left:0ex;">&lt;li id=<span class="string">"myId"</span> Tcanhavechildren=<span class="string">"1"</span>>My super text&lt;/li></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-			
-			<a name="check"></a>
-			<h4 onclick="shownext(this)">check <em>(integer)</em></h4>
-			<div class="develop">
-				<p class="classe">Optional. Defaul value : 0</p>
-				<p>Put <strong>1</strong> and the branch will be checked, if checkboxes are activated</p>
-
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"myId"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"My super text"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"check"</span> : 1</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// UL - LI</span></p></td></tr><tr><td><p style="padding-left:0ex;">&lt;li id=<span class="string">"myId"</span> Tcheck=<span class="string">"1"</span>>My super text&lt;/li></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-			
-			<a name="draggable"></a>
-			<h4 onclick="shownext(this)">draggable <em>(boolean)</em></h4>
-			<div class="develop">
-				<p class="classe">Optional. Defaul value : true</p>
-				<p><strong>True</strong> allows you to drag the branch, <strong>false</strong> make this action impossible. Have no effects if the functions setOnDrop() or setOnDropAjax() aren't defined. (or ondrop or ondropajax)</p>
-
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"myId"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"My super text"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"draggable"</span> : <span class="reserved">true</span></p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// UL - LI</span></p></td></tr><tr><td><p style="padding-left:0ex;">&lt;li id=<span class="string">"myId"</span> Tdraggable=<span class="string">"1"</span>>My super text&lt;/li></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-			
-			<a name="editable"></a>
-			<h4 onclick="shownext(this)">editable <em>(boolean)</em></h4>
-			<div class="develop">
-				<p class="classe">Optional. Defaul value : 1</p>
-				<p>Permit the branch to be edited or not. If the funciton onEdit() exists, you can put 0 to force the branch to be "readonly"</p>
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"myId"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"My super text"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"editable"</span> : <span class="reserved">false</span></p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// UL - LI</span></p></td></tr><tr><td><p style="padding-left:0ex;">&lt;li id=<span class="string">"myId"</span> Teditable=<span class="string">"0"</span>>My super text&lt;/li></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-			
-			<a name="img"></a>
-			<h4 onclick="shownext(this)">img <em>(string)</em></h4>
-			<div class="develop">
-				<p class="classe">Optional. Defaul value : no icon</p>
-				<p>The icon if the branch hasn't children</p>
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"myId"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"My super text"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"img"</span> : <span class="string">"anImg.gif"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"imgopen"</span> : <span class="string">"anImg.gif"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"imgclose"</span> : <span class="string">"anImg.gif"</span></p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// UL - LI</span></p></td></tr><tr><td><p style="padding-left:0ex;">&lt;li id=<span class="string">"myId"</span> Timg=<span class="string">"anImg.gif"</span> Timgopen=<span class="string">"anImg.gif"</span> Timgclose=<span class="string">"anImg.gif"</span>>My super text&lt;/li></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-			
-			<a name="imgclose"></a>
-			<h4 onclick="shownext(this)">imgclose <em>(string)</em></h4>
-			<div class="develop">
-				<p class="classe">Optional. Defaul value : the same as <a href="#img">img</a></p>
-				<p>The icon if the branch has children and is closed.</p>
-
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"myId"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"My super text"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"img"</span> : <span class="string">"anImg.gif"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"imgopen"</span> : <span class="string">"anImg.gif"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"imgclose"</span> : <span class="string">"anImg.gif"</span></p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// UL - LI</span></p></td></tr><tr><td><p style="padding-left:0ex;">&lt;li id=<span class="string">"myId"</span> Timg=<span class="string">"anImg.gif"</span> Timgopen=<span class="string">"anImg.gif"</span> Timgclose=<span class="string">"anImg.gif"</span>>My super text&lt;/li></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-			
-			<a name="imgopen"></a>
-			<h4 onclick="shownext(this)">imgopen <em>(string)</em></h4>
-			<div class="develop">
-				<p class="classe">Optional. Defaul value : the same as <a href="#img">img</a></p>
-				<p>The icon if the branch has children and is opened.</p>
-
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"myId"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"My super text"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"img"</span> : <span class="string">"anImg.gif"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"imgopen"</span> : <span class="string">"anImg.gif"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"imgclose"</span> : <span class="string">"anImg.gif"</span></p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// UL - LI</span></p></td></tr><tr><td><p style="padding-left:0ex;">&lt;li id=<span class="string">"myId"</span> Timg=<span class="string">"anImg.gif"</span> Timgopen=<span class="string">"anImg.gif"</span> Timgclose=<span class="string">"anImg.gif"</span>>My super text&lt;/li></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-			
-			<a name="img"></a>
-			<h4 class="new" onclick="shownext(this)">imgselected <em>(string)</em></h4>
-			<div class="develop">
-				<p class="classe">Optional. Defaul value : the same as <a href="#img">img</a></p>
-				<p>The icon if the branch hasn't children and is selected</p>
-
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"myId"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"My super text"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"imgselected"</span> : <span class="string">"anImgSelect.gif"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"img"</span> : <span class="string">"anImg.gif"</span></p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// UL - LI</span></p></td></tr><tr><td><p style="padding-left:0ex;">&lt;li id=<span class="string">"myId"</span> Timg=<span class="string">"anImg.gif"</span> Timgselected=<span class="string">"anImgSelect.gif"</span>>My super text&lt;/li></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-			
-			<a name="imgclose"></a>
-			<h4 class="new" onclick="shownext(this)">imgcloseselected <em>(string)</em></h4>
-			<div class="develop">
-				<p class="classe">Optional. Defaul value : the same as <a href="#img">imgclose</a></p>
-				<p>The icon if the branch has children and is closed and selected.</p>
-
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"myId"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"My super text"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"imgcloseselected"</span> : <span class="string">"anImgSelect.gif"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"imgclose"</span> : <span class="string">"anImg.gif"</span></p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// UL - LI</span></p></td></tr><tr><td><p style="padding-left:0ex;">&lt;li id=<span class="string">"myId"</span> Timgcloseselected=<span class="string">"anImgSelect.gif"</span> Timgclose=<span class="string">"anImg.gif"</span>>My super text&lt;/li></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-			
-			<a name="imgopen"></a>
-			<h4 class="new" onclick="shownext(this)">imgopenselected <em>(string)</em></h4>
-			<div class="develop">
-				<p class="classe">Optional. Defaul value : the same as <a href="#img">imgopen</a></p>
-				<p>The icon if the branch has children and is opened and selected.</p>
-
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"myId"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"My super text"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"imgopenselected"</span> : <span class="string">"anImgSelect.gif"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"imgopen"</span> : <span class="string">"anImg.gif"</span></p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// UL - LI</span></p></td></tr><tr><td><p style="padding-left:0ex;">&lt;li id=<span class="string">"myId"</span> Timgopen=<span class="string">"anImg.gif"</span> Timgopenselected=<span class="string">"anImgSelect.gif"</span>>My super text&lt;/li></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-			
-			<a name="items"></a>
-			<h4 onclick="shownext(this)">items <em>(array)</em></h4>
-			<div class="develop">
-				<p class="classe">Optional</p>
-				<p>An array of TafelTreeBranch descriptions. Represents the children of the branch.</p>
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr><tr><th>14</th></tr><tr><th>15</th></tr><tr><th>16</th></tr><tr><th>17</th></tr><tr><th>18</th></tr><tr><th>19</th></tr><tr><th>20</th></tr><tr><th>21</th></tr><tr><th>22</th></tr><tr><th>23</th></tr><tr><th>24</th></tr><tr><th>25</th></tr><tr><th>26</th></tr><tr><th>27</th></tr><tr><th>28</th></tr><tr><th>29</th></tr><tr><th>30</th></tr><tr><th>31</th></tr><tr><th>32</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"myId"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"My super text"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"items"</span> : [</p></td></tr><tr><td><p style="padding-left:4ex;">{</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"id"</span> : <span class="string">"child1"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"txt"</span> : <span class="string">"Child 1"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"items"</span> : [</p></td></tr><tr><td><p style="padding-left:8ex;">{</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="string">"id"</span> : <span class="string">"child1_1"</span>,</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="string">"txt"</span> : <span class="string">"Child of child 1"</span></p></td></tr><tr><td><p style="padding-left:8ex;">}</p></td></tr><tr><td><p style="padding-left:8ex;">]</p></td></tr><tr><td><p style="padding-left:4ex;">}, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"id"</span> : <span class="string">"child2"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"txt"</span> : <span class="string">"Child 2"</span></p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:4ex;">]</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// UL - LI</span></p></td></tr><tr><td><p style="padding-left:0ex;">&lt;li id=<span class="string">"myId"</span>>My super text</p></td></tr><tr><td><p style="padding-left:4ex;">&lt;ul></p></td></tr><tr><td><p style="padding-left:8ex;">&lt;li id=<span class="string">"child1"</span>>Child 1</p></td></tr><tr><td><p style="padding-left:12ex;">&lt;ul></p></td></tr><tr><td><p style="padding-left:16ex;">&lt;li id=<span class="string">"child1_1"</span>>Child of child 1&lt;/li></p></td></tr><tr><td><p style="padding-left:12ex;">&lt;/ul></p></td></tr><tr><td><p style="padding-left:8ex;">&lt;/li></p></td></tr><tr><td><p style="padding-left:8ex;">&lt;li id=<span class="string">"child2"</span>>Child 2&lt;/li></p></td></tr><tr><td><p style="padding-left:4ex;">&lt;/ul></p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/li></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-			
-			<a name="last"></a>
-			<h4 onclick="shownext(this)">last <em>(boolean)</em></h4>
-			<div class="develop">
-				<p class="classe">Optional. Defaul value : false</p>
-				<p><strong>True</strong> allows you to have the branch always in the last position (in its parent). Useful after drag&drop, if you drag an other branch into the parent and whish to have this one always last.</p>
-
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"myId"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"Trash"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"img"</span> : <span class="string">"trash.gif"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"last"</span> : <span class="reserved">true</span></p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// UL - LI</span></p></td></tr><tr><td><p style="padding-left:0ex;">&lt;li id=<span class="string">"myId"</span> Tlast=<span class="string">"1"</span>>My super text&lt;/li></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-			
-			<a name="open"></a>
-			<h4 onclick="shownext(this)">open <em>(boolean)</em></h4>
-			<div class="develop">
-				<p class="classe">Optional. Defaul value, the value of (<a href="#setOpenAll">setOpenAll()</a>). If cookies are activated, it's the cookie's state which is the default.</p>
-				<p><strong>True</strong> to have the branch open, <strong>false</strong> to have it closed.</p>
-
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"myId"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"My super text"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"open"</span> : <span class="reserved">true</span></p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// UL - LI</span></p></td></tr><tr><td><p style="padding-left:0ex;">&lt;li id=<span class="string">"myId"</span> Topen=<span class="string">"1"</span>>My super text&lt;/li></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-			
-			<a name="style"></a>
-			<h4 onclick="shownext(this)">style <em>(string)</em></h4>
-			<div class="develop">
-				<p class="classe">Optional</p>
-				<p>The name of a CSS class. This class will be set for the text</p>
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"myId"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"My super text"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"style"</span> : <span class="string">"aCSSclassName"</span></p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// UL - LI</span></p></td></tr><tr><td><p style="padding-left:0ex;">&lt;li id=<span class="string">"myId"</span> Tstyle=<span class="string">"aCCSclassName"</span>>My super text&lt;/li></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-			
-			<a name="title"></a>
-			<h4 onclick="shownext(this)">title <em>(string)</em></h4>
-			<div class="develop">
-				<p class="classe">Optional</p>
-				<p>The content of the HTML attribute "title". It can contains only plain normal text.</p>
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"myId"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"My super text"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"title"</span> : <span class="string">"My title"</span></p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// UL - LI</span></p></td></tr><tr><td><p style="padding-left:0ex;">&lt;li id=<span class="string">"myId"</span> Ttitle=<span class="string">"My title"</span>>My super text&lt;/li></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-			
-			<a name="style"></a>
-			<h4 onclick="shownext(this)">tooltip <em>(string)</em></h4>
-			<div class="develop">
-				<p class="classe">Optional</p>
-				<p>A tooltip which shows after an "onmouseover". The content can be HTML or text (or both)</p>
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"myId"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"My super text"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"tooltip"</span> : <span class="string">"Mon joli tooltip"</span></p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// UL - LI</span></p></td></tr><tr><td><p style="padding-left:0ex;">&lt;li id=<span class="string">"myId"</span> Ttooltip=<span class="string">"Mon joli tooltip"</span>>My super text&lt;/li></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-				<h4>Notes</h4>
-				<ul>
-					<li>It's possible to put HTML. Beware with ( ' ) and ( " )</li>
-					<li>The tooltip is automatically inserted into a hidden DIV</li>
-					<li>The CSS style is <strong>div.tooltip</strong></li>
-				</ul>
-
-			</div>
-
-
-			<h2>TafelTreeBranch function properties</h2>
-
-			<a name="onbeforecheck"></a>
-			<h4 onclick="shownext(this)">onbeforecheck <em>(function)</em></h4>
-			<div class="develop">
-				<h4>Arguments</h4>
-
-				<table class="prop">
-					<tr><th>branch <em>(TafelTreeBranch)</em></th>
-						<td>the branch which called this action</td></tr>
-					<tr><th>checked <em>(boolean)</em></th>
-						<td>the check state of the branch</td></tr>
-				</table>
-
-				<p class="var">Optional</p>
-				<p>Called when you check or uncheck a branch, BEFORE changes are made.</p>
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">function</span> myBeforeCheck (branch, checked) {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(branch.getId());</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">return</span> <span class="reserved">true</span>;</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"tag1"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"A branch"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"onbeforecheck"</span> : myBeforeCheck</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<a name="onbeforeopen"></a>
-			<h4 onclick="shownext(this)">onbeforeopen <em>(function)</em></h4>
-			<div class="develop">
-				<h4>Arguments</h4>
-				<table class="prop">
-					<tr><th>branch <em>(TafelTreeBranch)</em></th>
-
-						<td>the branch which called this action</td></tr>
-					<tr><th>opened <em>(boolean)</em></th>
-						<td>the open state of the branch</td></tr>
-				</table>
-				<p class="var">Optional</p>
-				<p>Called just before the branch is opened or closed. <strong>It must return a boolean</strong>. Override <strong><a href="#setOnBeforeOpen">setOnBeforeOpen()</a></strong> of TafelTree</p>
-
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr><tr><th>14</th></tr><tr><th>15</th></tr><tr><th>16</th></tr><tr><th>17</th></tr><tr><th>18</th></tr><tr><th>19</th></tr><tr><th>20</th></tr><tr><th>21</th></tr><tr><th>22</th></tr><tr><th>23</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">function</span> myBeforeOpen (branch, opened) {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Tests</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">if</span> (resultsFromTest) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// OK, the branch will open</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">return</span> <span class="reserved">true</span>;</p></td></tr><tr><td><p style="padding-left:4ex;">} <span class="reserved">else</span> {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// Here, the branch won't open. The <span class="reserved">function</span></span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// myOpen() won't be called</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">return</span> <span class="reserved">false</span>;</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="reserved">function</span> myOpen (branch, opened) {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(branch.getTag());</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"tag1"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"A branch"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"onbeforeopen"</span> : myBeforeOpen,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"onopen"</span> : myOpen</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<a name="oncheck"></a>
-			<h4 onclick="shownext(this)">oncheck <em>(function)</em></h4>
-			<div class="develop">
-				<h4>Arguments</h4>
-				<table class="prop">
-					<tr><th>branch <em>(TafelTreeBranch)</em></th>
-
-						<td>the branch which called this action</td></tr>
-					<tr><th>checked <em>(boolean)</em></th>
-						<td>the check state of the branch</td></tr>
-				</table>
-				<p class="var">Optional</p>
-				<p>Called after the check (or uncheck) is done</p>
-
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">function</span> myCheck (branch, checked) {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(branch.getId());</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"tag1"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"A branch"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"oncheck"</span> : myCheck</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<a name="onclick"></a>
-			<h4 onclick="shownext(this)">onclick <em>(function)</em></h4>
-			<div class="develop">
-				<h4>Arguments</h4>
-				<table class="prop">
-					<tr><th>branch <em>(TafelTreeBranch)</em></th>
-
-						<td>the branch which called this action</td></tr>
-				</table>
-				<p class="var">Optional</p>
-				<p>Called when you click on the branch. Override <strong><a href="#setOnClick">setOnClick()</a></strong> of TafelTree</p>
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">function</span> myClick (branch) {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(branch.getId());</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"tag1"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"A branch click"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"onclick"</span> : myClick</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<a name="ondblclick"></a>
-			<h4 onclick="shownext(this)">ondblclick <em>(function)</em></h4>
-			<div class="develop">
-				<h4>Arguments</h4>
-				<table class="prop">
-					<tr><th>branch <em>(TafelTreeBranch)</em></th>
-
-						<td>the branch which called this action</td></tr>
-				</table>
-				<p class="var">Optional</p>
-				<p>Called when you double-click on the branch. Override <strong><a href="#setOnDblClick">setOnDblClick()</a></strong> of TafelTree</p>
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">function</span> myDblClick (branch) {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(branch.getId());</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"tag1"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"A branch double-click"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"ondblclick"</span> : myDblClick</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<a name="ondrop"></a>
-			<h4 class="new" onclick="shownext(this)">ondrop <em>(function)</em></h4>
-			<div class="develop">
-				<h4>Arguments</h4>
-				<table class="prop">
-					<tr><th>branch_move <em>(TafelTreeBranch)</em></th>
-
-						<td>the dragged branch</td></tr>
-					<tr><th>branch_here <em>(TafelTreeBranch)</em></th>
-						<td>branch where the drop is done</td></tr>
-					<tr><th>drop_finished <em>(boolean)</em></th>
-						<td>False if drop isn't done, True if drop is done</td></tr>
-
-					<tr><th>new_branch <em>(boolean)</em></th>
-						<td>The inserted branch, if it's a copyDrag</td></tr>
-				</table>
-				<p class="var">Optional</p>
-				<p>Called after the drop of the branch. <strong>It must return a boolean</strong>. You can make a "drop as sibling" if you keep the <strong>ALT</strong> key pressed. You can also do a "copydrag" if you maintain the <strong>CONTROL</strong> key pressed. Override <strong><a href="#setOnDrop">setOnDrop()</a></strong> of TafelTree</p>
-
-				<p>This method is called twice. One time before drop happens (drop_finished = false) and one time after the drop is done (drop_finished = true), if there were no errors before.</p>
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr><tr><th>14</th></tr><tr><th>15</th></tr><tr><th>16</th></tr><tr><th>17</th></tr><tr><th>18</th></tr><tr><th>19</th></tr><tr><th>20</th></tr><tr><th>21</th></tr><tr><th>22</th></tr><tr><th>23</th></tr><tr><th>24</th></tr><tr><th>25</th></tr><tr><th>26</th></tr><tr><th>27</th></tr><tr><th>28</th></tr><tr><th>29</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">function</span> myDrop (branch_move, branch_here, drop_finished,</p></td></tr><tr><td><p style="padding-left:4ex;">new_branch) {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Beware, the <span class="reserved">function</span> is called twice. One time before drop</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// happends, one time after. Here, we check before drop</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// happends</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">if</span> (!drop_finished) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// Tests</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">if</span> (resultsFromTest) {</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="comment">// OK, the branch will be dropped here</span></p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">return</span> <span class="reserved">true</span>;</p></td></tr><tr><td><p style="padding-left:8ex;">} <span class="reserved">else</span> {</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="comment">// Here, the branch won't be dropped and will return</span></p></td></tr><tr><td><p style="padding-left:12ex;"><span class="comment">// at her place</span></p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">return</span> <span class="reserved">false</span>;</p></td></tr><tr><td><p style="padding-left:8ex;">}</p></td></tr><tr><td><p style="padding-left:4ex;">} <span class="reserved">else</span> {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// We can get the <span class="reserved">new</span> inserted branch, <span class="reserved">if</span> it's a copyDrag</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">if</span> (new_branch) {</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">alert</span>(new_branch.getId())</p></td></tr><tr><td><p style="padding-left:8ex;">}</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"tag1"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"A branch"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"ondrop"</span> : myDrop</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-				<h4>Notes</h4>
-				<ul>
-					<li>Keep ALT pressed for an "as sibling" drop</li>
-					<li>Keep CONTROL pressed to make a "copydrag"</li>
-				</ul>
-			</div>
-
-			<a name="onedit"></a>
-
-			<h4 onclick="shownext(this)">onedit <em>(function)</em></h4>
-			<div class="develop">
-				<h4>Arguments</h4>
-				<table class="prop">
-					<tr><th>branch <em>(TafelTreeBranch)</em></th>
-						<td>the edited branch</td></tr>
-
-					<tr><th>newValue <em>(string)</em></th>
-						<td>the new value</td></tr>
-					<tr><th>oldValue <em>(string)</em></th>
-						<td>the old value</td></tr>
-				</table>
-				<p class="var">Optional</p>
-
-				<p>Called after the edition of the branch (precisely, after the blur() of the input)</p>
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr><tr><th>14</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">function</span> myEdit (branch, newValue, oldValue) {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">if</span> (newValue.toLowerCase() == <span class="string">"trop facile"</span>) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">return</span> <span class="string">"Vraiment trop facile"</span>;</p></td></tr><tr><td><p style="padding-left:4ex;">} <span class="reserved">else</span> {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">return</span> newValue;</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"tag1"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"To be edited..."</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"onedit"</span> : myEdit</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-				<h4>Notes</h4>
-				<ul>
-					<li>Returns the string that will be the new value of the branch</li>
-				</ul>
-			</div>
-
-			<a name="onmouseout"></a>
-			<h4 onclick="shownext(this)">onmouseout <em>(function)</em></h4>
-
-			<div class="develop">
-				<h4>Arguments</h4>
-				<table class="prop">
-					<tr><th>branch <em>(TafelTreeBranch)</em></th>
-						<td>the branch which called this action</td></tr>
-				</table>
-				<p class="var">Optional</p>
-
-				<p>Called after a "mouse out" of the branch. Override <strong><a href="#setOnMouseOut">setOnMouseOut()</a></strong> of TafelTree</p>
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr><tr><th>14</th></tr><tr><th>15</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">function</span> myMouseOut (branch) {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(<span class="string">"out : "</span> + branch.getId());</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="reserved">function</span> myMouseOver (branch) {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(<span class="string">"over : "</span> + branch.getId());</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"tag1"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"A branch mouse over and out"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"onmouseover"</span> : myMouseOver,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"onmouseout"</span> : myMouseOut</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<a name="onmouseover"></a>
-			<h4 onclick="shownext(this)">onmouseover <em>(function)</em></h4>
-			<div class="develop">
-				<h4>Arguments</h4>
-				<table class="prop">
-					<tr><th>branch <em>(TafelTreeBranch)</em></th>
-
-						<td>the branch which called this action</td></tr>
-				</table>
-				<p class="var">Optional</p>
-				<p>Called after a "mouse over" of the branch. Override <strong><a href="#setOnMouseOver">setOnMouseOver()</a></strong> of TafelTree</p>
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr><tr><th>14</th></tr><tr><th>15</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">function</span> myMouseOut (branch) {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(<span class="string">"out : "</span> + branch.getId());</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="reserved">function</span> myMouseOver (branch) {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(<span class="string">"over : "</span> + branch.getId());</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"tag1"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"A branch mouse over and out"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"onmouseover"</span> : myMouseOver,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"onmouseout"</span> : myMouseOut</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<a name="onmousedown"></a>
-			<h4 class="new" onclick="shownext(this)">onmousedown <em>(function)</em></h4>
-			<div class="develop">
-				<h4>Arguments</h4>
-				<table class="prop">
-					<tr><th>branch <em>(TafelTreeBranch)</em></th>
-
-						<td>the branch which called this action</td></tr>
-				</table>
-				<p class="var">Optional</p>
-				<p>Called after a "mouse down" of the branch. Override <strong><a href="#setOnMouseDown">setOnMouseDown()</a></strong> of TafelTree</p>
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">function</span> myMouseDown (branch) {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(<span class="string">"down : "</span> + branch.getId());</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"tag1"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"A branch mouse down"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"onmousedown"</span> : myMouseDown</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<a name="onmouseup"></a>
-			<h4 class="new" onclick="shownext(this)">onmouseup <em>(function)</em></h4>
-			<div class="develop">
-				<h4>Arguments</h4>
-				<table class="prop">
-					<tr><th>branch <em>(TafelTreeBranch)</em></th>
-
-						<td>the branch which called this action</td></tr>
-				</table>
-				<p class="var">Optional</p>
-				<p>Called after a "mouse up" of the branch. Override <strong><a href="#setOnMouseUp">setOnMouseUp()</a></strong> of TafelTree</p>
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">function</span> myMouseUp (branch) {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(<span class="string">"up : "</span> + branch.getId());</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"tag1"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"A branch mouse up"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"onmouseup"</span> : myMouseUp</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<a name="onopen"></a>
-			<h4 onclick="shownext(this)">onopen <em>(function)</em></h4>
-			<div class="develop">
-				<h4>Arguments</h4>
-				<table class="prop">
-					<tr><th>branch <em>(TafelTreeBranch)</em></th>
-
-						<td>the branch which called this action</td></tr>
-					<tr><th>opened <em>(boolean)</em></th>
-						<td>the state of the branch</td></tr>
-				</table>
-				<p class="var">Optional</p>
-				<p>Called after the branch is opened or closed. Override <strong><a href="#setOnOpen">setOnOpen()</a></strong> of TafelTree</p>
-
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr><tr><th>14</th></tr><tr><th>15</th></tr><tr><th>16</th></tr><tr><th>17</th></tr><tr><th>18</th></tr><tr><th>19</th></tr><tr><th>20</th></tr><tr><th>21</th></tr><tr><th>22</th></tr><tr><th>23</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">function</span> myBeforeOpen (branch, opened) {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Tests</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">if</span> (resultsFromTest) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// OK, the branch will open</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">return</span> <span class="reserved">true</span>;</p></td></tr><tr><td><p style="padding-left:4ex;">} <span class="reserved">else</span> {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// Here, the branch won't open. The <span class="reserved">function</span></span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// myOpen() won't be called</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">return</span> <span class="reserved">false</span>;</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="reserved">function</span> myOpen (branch, opened) {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(branch.getTag());</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"tag1"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"A branch"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"onbeforeopen"</span> : myBeforeOpen,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"onopen"</span> : myOpen</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-
-			<h2>Specialities</h2>
-
-			<h4 class="new" onclick="shownext(this)">onerrorajax(function)</h4>
-			<div class="develop">
-				<h4>Arguments</h4>
-				<table class="prop">
-
-					<tr><th>type <em>(string)</em></th>
-						<td>error type (open, drop or edit)</td></tr>
-					<tr><th>response <em>(string)</em></th>
-						<td>Ajax response text</td></tr>
-					<tr><th>branch <em>(TafelTreeBranch)</em></th>
-
-						<td>current branch</td></tr>
-					<tr><th>droppedOn <em>(TafelTreeBranch)</em></th>
-						<td>branch dropped on (if it's a "drop" error)</td></tr>
-				</table>
-				<p>Called after an error Ajax in functions drop, open or edit</p>
-				<h4>Samples</h4>
-
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr><tr><th>14</th></tr><tr><th>15</th></tr><tr><th>16</th></tr><tr><th>17</th></tr><tr><th>18</th></tr><tr><th>19</th></tr><tr><th>20</th></tr><tr><th>21</th></tr><tr><th>22</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">function</span> myErrorAjax (type, response, branch, droppedOn) {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Check the type of error. Can be drop, edit or open</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">switch</span> (type) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">case</span> <span class="string">"drop"</span> :</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">alert</span>(<span class="string">"An error occured during the drop"</span>);</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">break</span>;</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">case</span> <span class="string">"open"</span> :</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">break</span>;</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">case</span> <span class="string">"edit"</span> :</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">break</span>;</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"tag1"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"A branch"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"ondropajax"</span> : myDrop,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"droplink"</span> : <span class="string">"page.php"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"onerrorajax"</span> : myErrorAjax</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<a name="openlink"></a>
-			<h4 onclick="shownext(this)">openlink <em>(string)</em></h4>
-			<div class="develop">
-				<p class="err">Optional, but required if <strong>onopenpopulate</strong> is defined. Used with the branch property <strong><a href="#canhavechildren">canhavechildren</a></strong></p>
-
-				<p>Path of a script page on the server. Override <strong><a href="#setOnOpenPopulate">setOnOpenPopulate()</a></strong> of TafelTree</p>
-			</div>
-
-			<a name="onopenpopulate"></a>
-			<h4 onclick="shownext(this)">onopenpopulate <em>(function)</em></h4>
-			<div class="develop">
-
-				<h4>Arguments</h4>
-				<table class="prop">
-					<tr><th>branch <em>(TafelTreeBranch)</em></th>
-						<td>the branch opened</td></tr>
-					<tr><th>response <em>(string)</em></th>
-						<td>the Ajax response text</td></tr>
-
-				</table>
-				<p class="err">Optional</p>
-				<p>Called after a branch is opened. When it's open, it launch an Ajax request at the page <strong>openlink</strong> and send the Ajax response to the user function. <strong>It must return a JSON string representing an array of one or more TafelTreeBranch</strong>. Override <strong><a href="#setOnOpenPopulate">setOnOpenPopulate()</a></strong> of TafelTree</p>
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr><tr><th>14</th></tr><tr><th>15</th></tr><tr><th>16</th></tr><tr><th>17</th></tr><tr><th>18</th></tr><tr><th>19</th></tr><tr><th>20</th></tr><tr><th>21</th></tr><tr><th>22</th></tr><tr><th>23</th></tr><tr><th>24</th></tr><tr><th>25</th></tr><tr><th>26</th></tr><tr><th>27</th></tr><tr><th>28</th></tr><tr><th>29</th></tr><tr><th>30</th></tr><tr><th>31</th></tr><tr><th>32</th></tr><tr><th>33</th></tr><tr><th>34</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">function</span> myOpenPopulate (branch, response) {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// To see the content of response, you can <span class="string">"<span class="reserved">alert</span>"</span> it or</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// put it in a div content like that :</span></p></td></tr><tr><td><p style="padding-left:4ex;">branch.tree.debug(response);</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Evaluate a JSON response (note that the JSON is an array)</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// The response MUST BE a description of one or more</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// TafelTreeBranch</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// [{</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// <span class="string">"id"</span> : <span class="string">"id_from_server_1"</span>,</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// <span class="string">"txt"</span> : <span class="string">"This is one is from the server"</span>,</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// <span class="string">"img"</span> : <span class="string">"globe.gif"</span></span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// }]</span></p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Some tests</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">if</span> (resultsFromTest) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// OK, the branch will be open with <span class="reserved">new</span> children</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// from the server;</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">return</span> response;</p></td></tr><tr><td><p style="padding-left:4ex;">} <span class="reserved">else</span> {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// Here, the branch won't be open and no children will</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// be added</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">return</span> <span class="reserved">false</span>;</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"tag1"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"A branch"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"onopenpopulate"</span> : myOpenPopulate,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"openlink"</span> : <span class="string">"somewhere/serverScriptPage.php"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"canhavechildren"</span> : <span class="reserved">true</span></p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-				<h4>Notes</h4>
-				<ul>
-					<li>Response MUST BE an JSON array ( <strong>[ ]</strong> ) representing one or more TafelTreeBranch</li>
-					<li>JSON MUST BE a description of one or more TafelTreeBranch</li>
-					<li>Vars sent to the script page <a href="#openlink">openlink</a> are sent in POST</li>
-
-					<li>These vars are :
-						<ul>
-							<li>" branch " = JSON description of the branch opened</li>
-							<li>" branch_id " = id of the branch opened</li>
-							<li>" tree_id " = id of the branch's parent tree</li>
-						</ul>
-					</li>
-					<li>All other vars passed throught <a href="#openlink">openlink</a> are in POST. For example, if openlink = "page.php?spec=1", you'll get <em>spec</em> in POST.</li>
-
-				</ul>
-			</div>
-
-			<a name="editlink"></a>
-			<h4 onclick="shownext(this)">editlink <em>(string)</em></h4>
-			<div class="develop">
-				<p class="err">Optional, but required if <strong>oneditajax</strong> is defined. Can be used with the branch property <strong><a href="#editable">editable</a></strong></p>
-
-				<p>Path of a script page on the server. Override <strong><a href="#setOnEditAjax">setOnEditAjax()</a></strong> of TafelTree</p>
-			</div>
-
-			<a name="oneditajax"></a>
-			<h4 onclick="shownext(this)">oneditajax <em>(function)</em></h4>
-			<div class="develop">
-
-				<h4>Arguments</h4>
-				<table class="prop">
-					<tr><th>branch <em>(TafelTreeBranch)</em></th>
-						<td>the edited branch</td></tr>
-					<tr><th>response <em>(string)</em></th>
-						<td>the Ajax response text</td></tr>
-
-					<tr><th>oldValue <em>(string)</em></th>
-						<td>the old value</td></tr>
-				</table>
-				<p class="err">Optional</p>
-				<p>Called after the branch is edited. It launch an Ajax request at the page <strong>editlink</strong> and send the Ajax response to the user function. <strong>The method must return a string representing the new value of the branch</strong>. Override <strong><a href="#setOnEditAjax">setOnEditAjax()</a></strong> of TafelTree</p>
-
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr><tr><th>14</th></tr><tr><th>15</th></tr><tr><th>16</th></tr><tr><th>17</th></tr><tr><th>18</th></tr><tr><th>19</th></tr><tr><th>20</th></tr><tr><th>21</th></tr><tr><th>22</th></tr><tr><th>23</th></tr><tr><th>24</th></tr><tr><th>25</th></tr><tr><th>26</th></tr><tr><th>27</th></tr><tr><th>28</th></tr><tr><th>29</th></tr><tr><th>30</th></tr><tr><th>31</th></tr><tr><th>32</th></tr><tr><th>33</th></tr><tr><th>34</th></tr><tr><th>35</th></tr><tr><th>36</th></tr><tr><th>37</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">function</span> myEditAjax (branch, response, oldValue) {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// To see the content of response, you can <span class="string">"<span class="reserved">alert</span>"</span> it or</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// put it in a div content like that :</span></p></td></tr><tr><td><p style="padding-left:4ex;">branch.tree.debug(response);</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Evaluate a JSON response (note that the JSON is inside</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// brackets). The response should contain, somehow, the</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// <span class="reserved">new</span> value of the branch</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// ({</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// <span class="string">"message"</span> : <span class="string">"Everything was fine on the server"</span>,</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// <span class="string">"newValue"</span> : <span class="string">"<span class="reserved">new</span> value of the branch"</span>,</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// <span class="string">"anyOtherParams"</span> : <span class="reserved">true</span></span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// })</span></p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// You can also just <span class="reserved">return</span> the <span class="reserved">new</span> value, <span class="reserved">if</span> you want</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// (and so you don't need brackets anymore). For example:</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span> (response); <span class="comment">// show the <span class="reserved">new</span> text</span></p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Some tests</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">if</span> (resultsFromTest) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// OK, the branch will be edited and will have as</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// value what is returned by this <span class="reserved">function</span></span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">return</span> theNewValue;</p></td></tr><tr><td><p style="padding-left:4ex;">} <span class="reserved">else</span> {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// Here, the branch won<span class="string">'t be edited and it'</span>ll keep</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// the oldValue</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">return</span> <span class="reserved">false</span>;</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"tag1"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"A branch"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"oneditajax"</span> : myEditAjax,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"editlink"</span> : <span class="string">"somewhere/serverScriptPage.php"</span></p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-				<h4>Notes</h4>
-				<ul>
-					<li>The Ajax response should contain the new value of the branch</li>
-					<li>Vars sent to the script page <a href="#editlink">editlink</a> are sent in POST</li>
-					<li>These vars are :
-						<ul>
-
-							<li>" branch " = JSON description of the branch</li>
-							<li>" branch_id " = id of the branch</li>
-							<li>" tree_id " = id of the branch's parent tree</li>
-							<li>" new_value " = the new value</li>
-							<li>" old_value " = the old value</li>
-						</ul>
-
-					</li>
-					<li>All other vars passed throught <a href="#editlink">editlink</a> are in POST. For example, if editlink = "page.php?spec=1", you'll get <em>spec</em> in POST.</li>
-				</ul>
-			</div>
-
-			<a name="droplink"></a>
-
-			<h4 onclick="shownext(this)">droplink <em>(string)</em></h4>
-			<div class="develop">
-				<p class="err">Optional, but required if <strong>ondropajax</strong> is defined.</p>
-				<p>Path of a script page on the server. Override <strong><a href="#setOnDropAjax">setOnDropAjax()</a></strong> of TafelTree</p>
-
-			</div>
-
-			<a name="ondropajax"></a>
-			<h4 class="new" onclick="shownext(this)">ondropajax <em>(function)</em></h4>
-			<div class="develop">
-				<h4>Arguments</h4>
-				<table class="prop">
-					<tr><th>branch_move <em>(TafelTreeBranch)</em></th>
-
-						<td>the dragged branch</td></tr>
-					<tr><th>branch_here <em>(TafelTreeBranch)</em></th>
-						<td>the branch dropped on</td></tr>
-					<tr><th>response <em>(string)</em></th>
-						<td>the Ajax response text</td></tr>
-
-					<tr><th>drop_finished <em>(boolean)</em></th>
-						<td>False if drop isn't done, True if drop is done</td></tr>
-					<tr><th>new_branch <em>(boolean)</em></th>
-						<td>The inserted branch, if it's a copyDrag</td></tr>
-				</table>
-				<p class="err">Optional</p>
-
-				<p>Called after a drag&drop. When the branch is dropped, it launch an Ajax request at the page  <strong>droplink</strong> and send the Ajax response to the user function. <strong>The medthod must return a boolean</strong>. You can make a "drop as sibling" if you keep the <strong>ALT</strong> key pressed. You can also do a "copydrag" if you maintain the <strong>CONTROL</strong> key pressed. Override <strong><a href="#setOnDropAjax">setOnDropAjax()</a></strong> of TafelTree</p>
-
-				<p>This method is called twice. One time before drop happens (drop_finished = false) and one time after the drop is done (drop_finished = true), if there were no errors before.</p>
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr><tr><th>14</th></tr><tr><th>15</th></tr><tr><th>16</th></tr><tr><th>17</th></tr><tr><th>18</th></tr><tr><th>19</th></tr><tr><th>20</th></tr><tr><th>21</th></tr><tr><th>22</th></tr><tr><th>23</th></tr><tr><th>24</th></tr><tr><th>25</th></tr><tr><th>26</th></tr><tr><th>27</th></tr><tr><th>28</th></tr><tr><th>29</th></tr><tr><th>30</th></tr><tr><th>31</th></tr><tr><th>32</th></tr><tr><th>33</th></tr><tr><th>34</th></tr><tr><th>35</th></tr><tr><th>36</th></tr><tr><th>37</th></tr><tr><th>38</th></tr><tr><th>39</th></tr><tr><th>40</th></tr><tr><th>41</th></tr><tr><th>42</th></tr><tr><th>43</th></tr><tr><th>44</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">function</span> myDropAjax(branch_move, branch_here, response,</p></td></tr><tr><td><p style="padding-left:4ex;">drop_finished, new_branch){</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Check that the move is not done now</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">if</span> (!drop_finished) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// To see the content of response, you can <span class="string">"<span class="reserved">alert</span>"</span> it or</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// put it in a div content like that :</span></p></td></tr><tr><td><p style="padding-left:8ex;">branch_move.tree.debug(response); <span class="comment">// you can use branch_here too</span></p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// Evaluate a JSON response (note that the JSON is</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// inside brackets). For example, <span class="reserved">if</span> response equal :</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// ({</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// <span class="string">"param1"</span> : <span class="reserved">true</span>,</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// <span class="string">"param2"</span> : <span class="string">"salut biscuit"</span></span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// })</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">var</span> obj = eval(response);</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">if</span> (obj.param1) {</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">alert</span>(obj.param2);</p></td></tr><tr><td><p style="padding-left:8ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// Some tests</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">if</span> (resultsFromTest) {</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="comment">// OK, the branch will be dropped here</span></p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">return</span> <span class="reserved">true</span>;</p></td></tr><tr><td><p style="padding-left:8ex;">} <span class="reserved">else</span> {</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="comment">// Here, the branch won't be dropped and will</span></p></td></tr><tr><td><p style="padding-left:12ex;"><span class="comment">// <span class="reserved">return</span> at her place</span></p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">return</span> <span class="reserved">false</span>;</p></td></tr><tr><td><p style="padding-left:8ex;">}</p></td></tr><tr><td><p style="padding-left:4ex;">} <span class="reserved">else</span> {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// We can get the <span class="reserved">new</span> inserted branch, <span class="reserved">if</span> it's a copyDrag</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// style</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">if</span> (new_branch) {</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">alert</span>(new_branch.getId())</p></td></tr><tr><td><p style="padding-left:8ex;">}</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"tag1"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"A branch"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"ondropajax"</span> : myDropAjax,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"droplink"</span> : <span class="string">"somewhere/serverScriptPage.php"</span></p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-				<h4>Notes</h4>
-				<ul>
-					<li>Keep ALT pressed for an "as sibling" drop</li>
-					<li>Keep CONTROL pressed to make a "copydrag"</li>
-					<li>Vars sent to the script page <a href="#droplink">droplink</a> are sent in POST</li>
-
-					<li>These vars are :
-						<ul>
-							<li>" drag " = JSON description of dragged branch</li>
-							<li>" drop " = JSON description of dropped-on branch</li>
-							<li>" drag_id " = dragged branch id</li>
-							<li>" drop_id " = drop branch id</li>
-							<li>" treedrag_id " = dragged branch's tree id</li>
-
-							<li>" treedrop_id " = drop branch's tree id</li>
-							<li>" sibling " = 0 if it's a drop "as child", 1 if it's an "as-sibling"</li>
-						</ul>
-					</li>
-					<li>All other vars passed throught <a href="#droplink">droplink</a> are in POST. For example, if droplink = "page.php?spec=1", you'll get <em>spec</em> in POST.</li>
-
-				</ul>
-			</div>
-
-			<a name="other"></a>
-			<h4 onclick="shownext(this)">...my own parameter <em>(integer, float, string, object, function, boolean, array)</em></h4>
-			<div class="develop">
-				<p>It's possible to add any other prameters. When you manipulate a branch, you can access these properties throught the branch's property <strong>struct</strong>.</p>
-
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr><tr><th>14</th></tr><tr><th>15</th></tr><tr><th>16</th></tr><tr><th>17</th></tr><tr><th>18</th></tr><tr><th>19</th></tr><tr><th>20</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">function</span> myClick (branch) {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">if</span> (branch.struct.theWhetherIsBeautiful) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">var</span> str = branch.struct.wow;</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(branch.struct.aStrangeObject.param1 + <span class="string">" | "</span> + str);</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">for</span> (<span class="reserved">var</span> i = 0; i &lt; branch.struct.frenchNames.length; i++) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(branch.struct.frenchNames[i]);</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"tag1"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"A branch"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"wow"</span> : <span class="string">"some text"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"theWhetherIsBeautiful"</span> : <span class="reserved">true</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"aStrangeObject"</span> : {<span class="string">"param1"</span> : <span class="string">"object in object"</span>},</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"frenchNames"</span> : [<span class="string">"Albert"</span>, <span class="string">"Gilbertin"</span>, <span class="string">"Zéphirin"</span>, <span class="string">"Anatole"</span>, <span class="string">"Gontan"</span>],</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"onclick"</span> : myClick</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-				<h4>Notes</h4>
-				<ul>
-					<li>These parameters ARE AVAILABLE in serialisation</li>
-					<li>They ARE VISIBLE in a toString()</li>
-					<li>They AREN'T INTERPRETED if you have an UL-LI structure</li>
-				</ul>
-			</div>
-
-
-			<h1>TafelTreeBranch methods</h1>
-			<h2>TafelTreeBranch public methods</h2>
-
-			<h4 onclick="shownext(this)">hasChildren()</h4>
-			<div class="develop">
-			<p>Returns true if branch has children, false if not</p>
-
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a tree was created</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(branch.hasChildren());</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">isOpened()</h4>
-			<div class="develop">
-			<p>Returns true if the branch is opened</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a tree was created</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(branch.isOpened());</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 class="new" onclick="shownext(this)">isVisible()</h4>
-			<div class="develop">
-			<p>Returns true if the branch is visible, false if not</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a tree was created</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(branch.isVisible());</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">getId()</h4>
-			<div class="develop">
-			<p>Returns the ID of the branch</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a tree was created</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(branch.getId());</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">changeId()</h4>
-			<div class="develop">
-			<p>Change the branch's ID. Returns true if all is ok, false if the ID already exists in the tree.</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a tree was created</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">if</span> (branch.changeId(<span class="string">"newId"</span>)) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(<span class="string">"Change ok"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;">} <span class="reserved">else</span> {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(<span class="string">"This id ("</span> + newId + <span class="string">") already exists"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">getText()</h4>
-			<div class="develop">
-			<p>Returns branch's content</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a tree was created</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(branch.getText());</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 class="new" onclick="shownext(this)">getParent()</h4>
-			<div class="develop">
-			<p>Returns parent branch, if it exists</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a tree was created</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> parent = branch.getParent();</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">if</span> (parent) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(parent.getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 class="new" onclick="shownext(this)">getParents()</h4>
-			<div class="develop">
-			<p>Returns all parent branches. The first array's element is the closer parent. The last element is th root branch.</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a tree was created</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> parents = branch.getParents();</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">for</span> (<span class="reserved">var</span> i = 0; i &lt; parents.length; i++) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">if</span> (i &lt; parents.length - 1) {</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">alert</span>(<span class="string">"Parent : "</span> + parents[i].getId());</p></td></tr><tr><td><p style="padding-left:8ex;">} <span class="reserved">else</span> {</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">alert</span>(<span class="string">"Root : "</span> + parents[i].getId());</p></td></tr><tr><td><p style="padding-left:8ex;">}</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 class="new" onclick="shownext(this)">getAncestor()</h4>
-			<div class="develop">
-			<p>Returns the root of the branch. IF you search the root's ancestor, it will returns "null"</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a tree was created</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> root = branch.getAncestor();</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">if</span> (root) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(root.getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">getFirstBranch()</h4>
-			<div class="develop">
-			<p>Returns the first branch's child, null if there isn't any</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a tree was created</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> child = branch.getFirstBranch();</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">if</span> (child) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(child.getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">getLastBranch()</h4>
-			<div class="develop">
-			<p>Returns the last branch's child, null if there isn't any</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a tree was created</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> child = branch.getLastBranch();</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">if</span> (child) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(child.getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">getPreviousSibling()</h4>
-			<div class="develop">
-			<p>Returns the previous branch's sibling, null if there isn't any</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a tree was created</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> sibling = branch.getPreviousSibling();</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">if</span> (sibling) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(sibling.getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">getNextSibling()</h4>
-			<div class="develop">
-			<p>Returns the next branch's sibling, null if there isn't any</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a tree was created</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> sibling = branch.getNextSibling();</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">if</span> (sibling) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(sibling.getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">getPreviousBranch()</h4>
-			<div class="develop">
-			<p>Returns the previous branch's sibling (without taking care of depth), null if there isn't any</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a tree was created</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> previous = branch.getPreviousBranch();</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">if</span> (previous) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(previous.getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">getNextBranch()</h4>
-			<div class="develop">
-			<p>Returns the next branch's sibling (without taking care of depth), null if there isn't any</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a tree was created</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> next = branch.getNextBranch();</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">if</span> (next) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(next.getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">getPreviousOpenedBranch()</h4>
-			<div class="develop">
-			<p>Returns the previous branch's opened sibling (without taking care of depth), null if there isn't any</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a tree was created</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> opened = branch.getPreviousOpenedBranch();</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">if</span> (opened) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(opened.getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">getNextOpenedBranch()</h4>
-			<div class="develop">
-			<p>Returns the next branch's opened sibling (without taking care of depth), null if there isn't any</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a tree was created</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> opened = branch.getNextOpenedBranch();</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">if</span> (opened) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(opened.getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">setText()</h4>
-			<div class="develop">
-			<h4>Arguments</h4>
-			<table class="prop">
-				<tr><th>txt <em>(string)</em></th>
-
-					<td>the new text of the branch</td></tr>
-			</table>
-			<p>Set branch's texte</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a tree was created</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;">branch.setText(<span class="string">"Hello"</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">getChildren()</h4>
-			<div class="develop">
-			<p>Returns branch's children in an array</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a tree was created</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> children = branch.getChildren();</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">for</span> (<span class="reserved">var</span> i = 0; i &lt; children.length; i++) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(children[i].getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">getLevel()</h4>
-			<div class="develop">
-			<p>Returns branch's depth. Root is at depth 0</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a tree was created</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(branch.getLevel());</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">getIcon()</h4>
-			<div class="develop">
-			<p>Returns the icon when the branch hasn't children</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a tree was created</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(branch.getIcon());</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">getOpenIcon()</h4>
-			<div class="develop">
-			<p>Returns the icon when the branch has children and is opened</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a tree was created</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(branch.getOpenIcon());</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">getCloseIcon()</h4>
-			<div class="develop">
-			<p>Returns the icon when the branch has children and is closed</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a tree was created</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(branch.getCloseIcon());</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 class="new" onclick="shownext(this)">getIconSelected()</h4>
-			<div class="develop">
-			<p>Returns the icon when the branch hasn't children and is selected</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a tree was created</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(branch.getIconSelected());</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 class="new" onclick="shownext(this)">getOpenIconSelected()</h4>
-			<div class="develop">
-			<p>Returns the icon when the branch has children and is opened and selected</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a tree was created</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(branch.getOpenIconSelected());</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 class="new" onclick="shownext(this)">getCloseIconSelected()</h4>
-			<div class="develop">
-			<p>Returns the icon when the branch has children and is closed and selected</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a tree was created</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(branch.getCloseIconSelected());</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">getCurrentIcon()</h4>
-			<div class="develop">
-			<p>Returns the icon of the current state of the branch (open, close, children or not)</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a tree was created</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(branch.getCurrentIcon());</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">setIcons()</h4>
-			<div class="develop">
-			<h4>Arguments</h4>
-			<table class="prop">
-				<tr><th>icon <em>(string)</em></th>
-
-					<td>icon when the branch hasn't children</td></tr>
-				<tr class="classe"><th>iconOpen <em>(string)</em></th>
-					<td>icon when the branch has children and is opened</td></tr>
-				<tr class="classe"><th>iconClose <em>(string)</em></th>
-					<td>icon when the branch has children and is closed</td></tr>
-
-			</table>
-			<p>Set branch's icon. If <strong>iconOpen</strong> or <strong>iconClose</strong> aren't defined, they take the value of <strong>icon</strong></p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a tree was created</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Branch will have page.g<span class="reserved">if</span> <span class="reserved">for</span> all states</span></p></td></tr><tr><td><p style="padding-left:4ex;">branch.setIcons(<span class="string">"page.gif"</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Here, each state will have a different icon</span></p></td></tr><tr><td><p style="padding-left:4ex;">branch.setIcons(<span class="string">"page.gif"</span>, <span class="string">"folderopen.gif"</span>, <span class="string">"folder.gif"</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 class="new" onclick="shownext(this)">setIconsSelected()</h4>
-			<div class="develop">
-			<h4>Arguments</h4>
-			<table class="prop">
-				<tr><th>iconSelected <em>(string)</em></th>
-
-					<td>icon when the branch hasn't children and is selected</td></tr>
-				<tr class="classe"><th>iconOpenSelected <em>(string)</em></th>
-					<td>icon when the branch has children and is opened and selected</td></tr>
-				<tr class="classe"><th>iconCloseSelected <em>(string)</em></th>
-					<td>icon when the branch has children and is closed and selected</td></tr>
-
-			</table>
-			<p>Set branch's icon. If <strong>iconOpenSelected</strong> or <strong>iconCloseSelected</strong> aren't defined, they take respectively the value of <strong>iconopen</strong> and <strong>iconclose</strong> (see function <em>setIcons()</em>)</p>
-
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a tree was created</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Branch will have page.g<span class="reserved">if</span> <span class="reserved">if</span> it<span class="string">'s selected and hasn'</span>t</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// any children</span></p></td></tr><tr><td><p style="padding-left:4ex;">branch.setIconsSelected(<span class="string">"page.gif"</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Here, each state will have a different icon</span></p></td></tr><tr><td><p style="padding-left:4ex;">branch.setIconsSelected(<span class="string">"page.gif"</span>, <span class="string">"folderopen.gif"</span>, <span class="string">"folder.gif"</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">isChild()</h4>
-			<div class="develop">
-			<h4>Arguments</h4>
-			<table class="prop">
-				<tr><th>branch <em>(TafelTreeBranch, string)</em></th>
-
-					<td>branch to test, or just its ID</td></tr>
-			</table>
-			<p>Returns true if the branch in argument is an ancestor, false if not.</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a tree was created</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(branch.isChild(<span class="string">"otherBranch"</span>));</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">openIt()</h4>
-			<div class="develop">
-			<h4>Arguments</h4>
-			<table class="prop">
-				<tr><th>open <em>(boolean)</em></th>
-
-					<td>True open the branch, false close it</td></tr>
-			</table>
-			<p>Permits to open or close the branch</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a tree was created</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;">branch.openIt(<span class="reserved">true</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">insertIntoFirst()</h4>
-			<div class="develop">
-			<h4>Arguments</h4>
-			<table class="prop">
-				<tr><th>item <em>(object)</em></th>
-
-					<td>a JSON object describing a TafelTreeBranch</td></tr>
-			</table>
-			<p>Insert the branch as a child, in the first position</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a tree was created</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> item = {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"id"</span> : <span class="string">"branch1"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"txt"</span> : <span class="string">"child first"</span></p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> newBranch = branch.insertIntoFirst(item);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(newBranch.getId());</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">insertIntoLast()</h4>
-			<div class="develop">
-			<h4>Arguments</h4>
-			<table class="prop">
-				<tr><th>item <em>(object)</em></th>
-
-					<td>a JSON object describing a TafelTreeBranch</td></tr>
-			</table>
-			<p>Insert the branch as a child, in the last position</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a tree was created</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> item = {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"id"</span> : <span class="string">"branch2"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"txt"</span> : <span class="string">"child last"</span></p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> newBranch = branch.insertIntoLast(item);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(newBranch.getId());</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">insertBefore()</h4>
-			<div class="develop">
-			<h4>Arguments</h4>
-			<table class="prop">
-				<tr><th>item <em>(object)</em></th>
-
-					<td>a JSON object describing a TafelTreeBranch</td></tr>
-			</table>
-			<p>Insert the branch as a sibling, just before</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a tree was created</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> item = {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"id"</span> : <span class="string">"branch3"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"txt"</span> : <span class="string">"sibling first"</span></p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> newBranch = branch.insertBefore(item);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(newBranch.getId());</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">insertAfter()</h4>
-			<div class="develop">
-			<h4>Arguments</h4>
-			<table class="prop">
-				<tr><th>item <em>(object)</em></th>
-
-					<td>a JSON object describing a TafelTreeBranch</td></tr>
-			</table>
-			<p>Insert the branch as a sibling, just after</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a tree was created</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> item = {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"id"</span> : <span class="string">"branch4"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"txt"</span> : <span class="string">"sibling last"</span></p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> newBranch = branch.insertAfter(item);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(newBranch.getId());</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 class="new" onclick="shownext(this)">clone()</h4>
-			<div class="develop">
-			<p>Clone the structure of the initial branch. Doesn't create a new branch. It just returns a JSON object.</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a tree was created</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> clonedStructure = branch.clone();</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;">clonedStructure.id = <span class="string">"newid"</span>;</p></td></tr><tr><td><p style="padding-left:4ex;">clonedStructure.txt = <span class="string">"My <span class="reserved">new</span> branch cloned"</span>;</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> newBranch = branch.insertAfter(clonedStructure);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(newBranch.getId());</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			<h4>Notes</h4>
-			<ul>
-				<li>Doesn't create a branch. Returns only the JSON structure</li>
-			</ul>
-			</div>
-
-			<h4 onclick="shownext(this)">move()</h4>
-			<div class="develop">
-
-			<h4>Arguments</h4>
-			<table class="prop">
-				<tr><th>here <em>(TafelTreeBranch, string)</em></th>
-					<td>the new parent branch, or just its ID</td></tr>
-			</table>
-			<p>Method which move the branch as a child of "here", in the last position</p>
-
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a tree was created</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;">branch.move(<span class="string">"idNewParent"</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">moveBefore()</h4>
-			<div class="develop">
-			<h4>Arguments</h4>
-			<table class="prop">
-				<tr><th>here <em>(TafelTreeBranch, string)</em></th>
-
-					<td>the new parent branch, or just its ID</td></tr>
-			</table>
-			<p>Method which move the branch as a sibling after "here"</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a tree was created</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;">branch.moveBefore(<span class="string">"idNewSibling"</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">closeSiblings()</h4>
-			<div class="develop">
-			<p>Close all sibling branches</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a tree was created</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;">branch.closeSiblings();</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">addClass()</h4>
-			<div class="develop">
-			<h4>Arguments</h4>
-			<table class="prop">
-				<tr><th>class <em>(string)</em></th>
-
-					<td>CSS class to add</td></tr>
-			</table>
-			<p>Add a CSS class for the text</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a tree was created</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;">branch.addClass(<span class="string">"myCSSclass"</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">removeClass()</h4>
-			<div class="develop">
-			<h4>Arguments</h4>
-			<table class="prop">
-				<tr><th>class <em>(string)</em></th>
-
-					<td>CSS class to retrieve</td></tr>
-			</table>
-			<p>Retrieve a CSS class of the branch</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a tree was created</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;">branch.removeClass(<span class="string">"myCSSclass"</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">removeChildren()</h4>
-			<div class="develop">
-			<p>Remove all children of the branch</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a tree was created</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;">branch.removeChildren();</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">hasAllChildrenChecked()</h4>
-			<div class="develop">
-			<p>Returns 1 if all children are checked, 0 if any, and -1 if some but not all</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a tree was created</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(branch.hasAllChildrenChecked());</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">isChecked()</h4>
-			<div class="develop">
-			<p>Returns 1 if the branch is checked, 0 if not, and -1 if partially checked</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a tree was created</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(branch.isChecked());</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">check()</h4>
-			<div class="develop">
-			<h4>Arguments</h4>
-			<table class="prop">
-				<tr><th>check <em>(integer)</em></th>
-
-					<td>Le status é donner é la branche</td></tr>
-			</table>
-			<p>Passer 1 pour la checker, 0 pour la unchecker</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a tree was created</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;">branch.check(1);</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">select()</h4>
-			<div class="develop">
-			<p>Select the branch</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a tree was created</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;">branch.select();</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">unselect()</h4>
-			<div class="develop">
-			<p>Unselect the branch</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a tree was created</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branches = tree.getSelectedBranches();</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">if</span> (branches.length > 0) {</p></td></tr><tr><td><p style="padding-left:8ex;">branches[0].unselect();</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 class="new" onclick="shownext(this)">getWithinOffset()</h4>
-			<div class="develop">
-			<p>Returns branch's coordinates inside the tree</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a tree was created</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> pos = branch.getWithinOffset();</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(<span class="string">"Left : "</span> + pos[0] + <span class="string">", Top : "</span> + pos[1]);</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 class="new" onclick="shownext(this)">getAbsoluteOffset()</h4>
-			<div class="develop">
-			<p>Returns branch's coordinates inside the navigator</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a tree was created</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> pos = branch.getAbsoluteOffset();</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(<span class="string">"Left : "</span> + pos[0] + <span class="string">", Top : "</span> + pos[1]);</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-
-			<h2>TafelTreeBranch tree-like public methods</h2>
-
-			<h4 onclick="shownext(this)">serialize()</h4>
-			<div class="develop">
-			<h4>Arguments</h4>
-			<table class="prop">
-
-				<tr><th>debug <em>(boolean)</em></th>
-					<td>true allows you to have a nice display of the serialized string. ONLY FOR DEBUG! Default value is false</td></tr>
-			</table>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a tree was created</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// True to see a nice string (usefull <span class="reserved">for</span> control)</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(branch.serialize(<span class="reserved">true</span>));</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Send the serialization to the server</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">new</span> Ajax.Request(<span class="string">"mapage.php"</span>, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"parameters"</span>: <span class="string">"tree="</span> + branch.serialize()</p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">countBranches()</h4>
-			<div class="develop">
-			<p>Count the number of branches inside tthis branch</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a tree was created</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(branch.countBranches());</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">getOpenedBranches()</h4>
-			<div class="develop">
-			<p>Retruns an array of all children-branches that are opened</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a tree was created</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branches = branch.getOpenedBranches();</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">for</span> (<span class="reserved">var</span> i = 0; i &lt; branches.length; i++) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(branches[i].getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">getCheckedBranches()</h4>
-			<div class="develop">
-			<p>Retruns an array of all children-branches that are checked</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a tree was created</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branches = branch.getCheckedBranches();</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">for</span> (<span class="reserved">var</span> i = 0; i &lt; branches.length; i++) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(branches[i].getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">getUnCheckedBranches()</h4>
-			<div class="develop">
-			<p>Retruns an array of all children-branches that aren't checked</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a tree was created</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branches = branch.getUnCheckedBranches();</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">for</span> (<span class="reserved">var</span> i = 0; i &lt; branches.length; i++) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(branches[i].getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">getPartCheckedBranches()</h4>
-			<div class="develop">
-			<p>Retruns an array of all children-branches that are partially checked</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a tree was created</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branches = branch.getPartCheckedBranches();</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">for</span> (<span class="reserved">var</span> i = 0; i &lt; branches.length; i++) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(branches[i].getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">getParentBranches()</h4>
-			<div class="develop">
-			<p>Retruns an array of all children-branches that are themself parent of other branches</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a tree was created</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branches = branch.getParentBranches();</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">for</span> (<span class="reserved">var</span> i = 0; i &lt; branches.length; i++) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(branches[i].getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">getLeafBranches()</h4>
-			<div class="develop">
-			<p>Retruns an array of all children-branches that are leaf branches (without children)</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a tree was created</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branches = branch.getLeafBranches();</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">for</span> (<span class="reserved">var</span> i = 0; i &lt; branches.length; i++) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(branches[i].getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 class="new" onclick="shownext(this)">getBranches()</h4>
-			<div class="develop">
-				<h4>Arguments</h4>
-				<table class="prop">
-					<tr><th>filter <em>(function)</em></th>
-
-						<td>the user function</td></tr>
-				</table>
-				<p>Retruns an array of all branches below this one. It's possible to put a filter.</p>
-				<h4>Samples</h4>
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr><tr><th>14</th></tr><tr><th>15</th></tr><tr><th>16</th></tr><tr><th>17</th></tr><tr><th>18</th></tr><tr><th>19</th></tr><tr><th>20</th></tr><tr><th>21</th></tr><tr><th>22</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a tree was created</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branches = branch.getBranches();</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">for</span> (<span class="reserved">var</span> i = 0; i &lt; branches.length; i++) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(branches[i].getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// We can filter branches with an user <span class="reserved">function</span></span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">function</span> myFilter (branch) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">if</span> (branch.getText() == <span class="string">"This one"</span>) {</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">return</span> <span class="reserved">true</span>;</p></td></tr><tr><td><p style="padding-left:8ex;">} <span class="reserved">else</span> {</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">return</span> <span class="reserved">false</span>;</p></td></tr><tr><td><p style="padding-left:8ex;">}</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branches = branch.getBranches(myFilter);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">for</span> (<span class="reserved">var</span> i = 0; i &lt; branches.length; i++) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(branches[i].getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">expend()</h4>
-			<div class="develop">
-			<p>Expends all children-branches</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a tree was created</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;">branch.expend();</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">collapse()</h4>
-			<div class="develop">
-			<p>Collapses all children-branches</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a tree was created</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;">branch.collapse();</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-
-			<h1>TafelTree methods</h1>
-			<h2>TafelTree static methods</h2>
-			<h4 onclick="shownext(this)">loadFromUL()</h4>
-			<div class="develop">
-			<h4>Arguments</h4>
-
-			<table class="prop">
-				<tr>
-					<th>id <em>(string)</em></th>
-					<td>UL id</td>
-				</tr>
-				<tr class="classe">
-					<th>options (optional) <em>(object)</em></th>
-
-					<td>All functions and parameters that can be set before generate(), including generate()</td>
-				</tr>
-				<tr class="classe">
-					<th>debug (optional) <em>(boolean)</em></th>
-					<td>True display the JSON structure without creating the tree. Default value is false</td>
-				</tr>
-			</table>
-
-			<p>UL generation doesn't allow to set your own parameters.</p>
-			<h4>Exemple</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr><tr><th>14</th></tr><tr><th>15</th></tr><tr><th>16</th></tr><tr><th>17</th></tr><tr><th>18</th></tr><tr><th>19</th></tr><tr><th>20</th></tr><tr><th>21</th></tr><tr><th>22</th></tr><tr><th>23</th></tr><tr><th>24</th></tr><tr><th>25</th></tr><tr><th>26</th></tr><tr><th>27</th></tr><tr><th>28</th></tr><tr><th>29</th></tr><tr><th>30</th></tr><tr><th>31</th></tr><tr><th>32</th></tr><tr><th>33</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;ul id=<span class="string">"idTree"</span>></p></td></tr><tr><td><p style="padding-left:4ex;">&lt;li id=<span class="string">"b1"</span> Timg=<span class="string">"base.gif"</span>>My text&lt;/li></p></td></tr><tr><td><p style="padding-left:4ex;">&lt;li id=<span class="string">"b2"</span> Timg=<span class="string">"base.gif"</span>>Other text</p></td></tr><tr><td><p style="padding-left:8ex;">&lt;ul></p></td></tr><tr><td><p style="padding-left:12ex;">&lt;li id=<span class="string">"b3"</span> Timg=<span class="string">"page.gif"</span> >Child&lt;/li></p></td></tr><tr><td><p style="padding-left:12ex;">&lt;li id=<span class="string">"b4"</span> Timg=<span class="string">"page.gif"</span> Timgclose=<span class="string">"folder.gif"</span></p></td></tr><tr><td><p style="padding-left:16ex;">Timgopen=<span class="string">"folderopen.gif"</span>>Other child</p></td></tr><tr><td><p style="padding-left:16ex;">&lt;ul></p></td></tr><tr><td><p style="padding-left:20ex;">&lt;li id=<span class="string">"b5"</span> Timg=<span class="string">"page.gif"</span>>Child&lt;/li></p></td></tr><tr><td><p style="padding-left:20ex;">&lt;li id=<span class="string">"b6"</span> Timg=<span class="string">"page.gif"</span> Teditable=<span class="string">"1"</span>></p></td></tr><tr><td><p style="padding-left:24ex;">Other child&lt;/li></p></td></tr><tr><td><p style="padding-left:16ex;">&lt;/ul></p></td></tr><tr><td><p style="padding-left:12ex;">&lt;/li></p></td></tr><tr><td><p style="padding-left:8ex;">&lt;/ul></p></td></tr><tr><td><p style="padding-left:4ex;">&lt;/li></p></td></tr><tr><td><p style="padding-left:4ex;">&lt;li id=<span class="string">"b7"</span> Timg=<span class="string">"base.gif"</span>>Fin&lt;/li></p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/ul></p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">function</span> myFuncClick(branch) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(branch.getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = TafelTree.loadFromUL(<span class="string">"idTree"</span>, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"generate"</span> : <span class="reserved">true</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"imgBase"</span> : <span class="string">"imgs/"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"width"</span> : <span class="string">"300px"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"height"</span> : <span class="string">"250px"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onclick"</span> : myFuncClick,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"openAtLoad"</span> : <span class="reserved">true</span></p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			<h4>Notes</h4>
-			<ul>
-				<li>Functions to execute before generate() are set with the parameter OPTIONS</li>
-				<li>All branch's attirbutes are preceded with a " T " except ID</li>
-				<li>Attribute is <em>NEVER</em> between " " and its content is <em>ESCAPED (simple quote)</em> and is <em>ALWAYS</em> inside " "</li>
-
-				<li>Attribute's content <em>MUST NOT</em> contains double quotes</li>
-				<li>It's not possible to set your own parameter</li>
-			</ul>
-			</div>
-
-			<h2>TafelTree getters & setters methods</h2>
-
-			<a name="new"></a>
-			<h4 onclick="shownext(this)">new TafelTree()</h4>
-			<div class="develop">
-			<h4>Arguments</h4>
-			<table class="prop">
-				<tr>
-					<th>id <em>(string)</em></th>
-
-					<td>DIV ID</td>
-				</tr>
-				<tr>
-					<th>struct <em>(array)</em></th>
-					<td>JSON structure</td>
-				</tr>
-				<tr class="classe">
-
-					<th>options (optional) <em>(object)</em></th>
-					<td>All functions and parameters that can be set before generate(), including generate()</td>
-				</tr>
-			</table>
-			<h4>Exemple</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr><tr><th>14</th></tr><tr><th>15</th></tr><tr><th>16</th></tr><tr><th>17</th></tr><tr><th>18</th></tr><tr><th>19</th></tr><tr><th>20</th></tr><tr><th>21</th></tr><tr><th>22</th></tr><tr><th>23</th></tr><tr><th>24</th></tr><tr><th>25</th></tr><tr><th>26</th></tr><tr><th>27</th></tr><tr><th>28</th></tr><tr><th>29</th></tr><tr><th>30</th></tr><tr><th>31</th></tr><tr><th>32</th></tr><tr><th>33</th></tr><tr><th>34</th></tr><tr><th>35</th></tr><tr><th>36</th></tr><tr><th>37</th></tr><tr><th>38</th></tr><tr><th>39</th></tr><tr><th>40</th></tr><tr><th>41</th></tr><tr><th>42</th></tr><tr><th>43</th></tr><tr><th>44</th></tr><tr><th>45</th></tr><tr><th>46</th></tr><tr><th>47</th></tr><tr><th>48</th></tr><tr><th>49</th></tr><tr><th>50</th></tr><tr><th>51</th></tr><tr><th>52</th></tr><tr><th>53</th></tr><tr><th>54</th></tr><tr><th>55</th></tr><tr><th>56</th></tr><tr><th>57</th></tr><tr><th>58</th></tr><tr><th>59</th></tr><tr><th>60</th></tr><tr><th>61</th></tr><tr><th>62</th></tr><tr><th>63</th></tr><tr><th>64</th></tr><tr><th>65</th></tr><tr><th>66</th></tr><tr><th>67</th></tr><tr><th>68</th></tr><tr><th>69</th></tr><tr><th>70</th></tr><tr><th>71</th></tr><tr><th>72</th></tr><tr><th>73</th></tr><tr><th>74</th></tr><tr><th>75</th></tr><tr><th>76</th></tr><tr><th>77</th></tr><tr><th>78</th></tr><tr><th>79</th></tr><tr><th>80</th></tr><tr><th>81</th></tr><tr><th>82</th></tr><tr><th>83</th></tr><tr><th>84</th></tr><tr><th>85</th></tr><tr><th>86</th></tr><tr><th>87</th></tr><tr><th>88</th></tr><tr><th>89</th></tr><tr><th>90</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;div id=<span class="string">"idTree"</span>>&lt;/div></p></td></tr><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> myStruct = [</p></td></tr><tr><td><p style="padding-left:4ex;">{</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"id"</span> : <span class="string">"root"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"txt"</span> : <span class="string">"Root node"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"img"</span> : <span class="string">"base.gif"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"style"</span> : <span class="string">"cssBoldStyle"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"items"</span> : [</p></td></tr><tr><td><p style="padding-left:8ex;">{</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="string">"id"</span> : <span class="string">"node1"</span>,</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="string">"txt"</span> : <span class="string">"Node 1"</span>,</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="string">"img"</span> : <span class="string">"folderopen.gif"</span></p></td></tr><tr><td><p style="padding-left:8ex;">},</p></td></tr><tr><td><p style="padding-left:8ex;">{</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="string">"id"</span> : <span class="string">"music"</span>,</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="string">"txt"</span> : <span class="string">"My music"</span>,</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="string">"img"</span> : <span class="string">"musicfolder.gif"</span></p></td></tr><tr><td><p style="padding-left:8ex;">}</p></td></tr><tr><td><p style="padding-left:8ex;">]</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:4ex;">];</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"generate"</span> : <span class="reserved">true</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"imgBase"</span> : <span class="string">"imgs/"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"width"</span> : <span class="string">"300px"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"height"</span> : <span class="string">"150px"</span></p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Example using options</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> treeToBind = <span class="reserved">new</span> TafelTree(<span class="string">"idTreeToBind"</span>, structBind, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"generate"</span> : <span class="reserved">true</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"imgBase"</span> : <span class="string">"imgs/"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"width"</span> : <span class="string">"300px"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"height"</span> : <span class="string">"150px"</span></p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> treeToBind2 = <span class="reserved">new</span> TafelTree(<span class="string">"idTreeToBind2"</span>, structBind2, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"generate"</span> : <span class="reserved">true</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"imgBase"</span> : <span class="string">"imgs/"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"width"</span> : <span class="string">"300px"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"height"</span> : <span class="string">"150px"</span></p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"generate"</span> : <span class="reserved">true</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"imgBase"</span> : <span class="string">"imgs/"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"width"</span> : <span class="string">"300px"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"height"</span> : <span class="string">"250px"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"defaultImg"</span> : <span class="string">"page.gif"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"defaultImgOpen"</span> : <span class="string">"folderopen.gif"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"defaultImgClose"</span> : <span class="string">"folder.gif"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"defaultImgSelected"</span> : <span class="string">"page.gif"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"defaultImgOpenSelected"</span> : <span class="string">"folderopen.gif"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"defaultImgCloseSelected"</span> : <span class="string">"folder.gif"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onLoad"</span> : myFuncLoad,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onDebug"</span> : myFuncDebug,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onCheck"</span> : myFuncCheck,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onBeforeCheck"</span> : myFuncBeforeCheck,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onclick"</span> : myFuncClick,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onDblClick"</span> : myFuncDblClick,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onBeforeOpen"</span> : myFuncBeforeOpen,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onOpen"</span> : myFunconOpen,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onMouseOver"</span> : myFuncMouseOver,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onMouseOut"</span> : myFuncMouseOut,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onMouseDown"</span> : myFuncMouseDown,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onMouseUp"</span> : myFuncMouseUp,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onDrop"</span> : myFuncDrop,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onEdit"</span> : myFuncEdit,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onEditAjax"</span> : [myFuncEditAjax, <span class="string">"server/edit.php"</span>],</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onDropAjax"</span> : [myFuncDropAjax, <span class="string">"server/drop.php"</span>]</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onOpenPopulate"</span> : [myFuncOpenPopulate, <span class="string">"server/open.php"</span>],</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"multiline"</span> : <span class="reserved">false</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"checkboxes"</span> : <span class="reserved">false</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"checkboxesThreeState"</span> : <span class="reserved">false</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"cookies"</span> : <span class="reserved">true</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"openOneAtOnce"</span> : <span class="reserved">false</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"openAtLoad"</span> : <span class="reserved">true</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"openAfterAdd"</span> : <span class="reserved">true</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"showSelectedBranch"</span> : <span class="reserved">true</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"lineStyle"</span> : <span class="string">"line"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"rtlMode"</span> : <span class="reserved">false</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"dropALT"</span> : <span class="reserved">true</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"dropCTRL"</span> : <span class="reserved">false</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"propagateRestriction"</span> : <span class="reserved">true</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"reopenFromServer"</span> : <span class="reserved">true</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"behaviourDrop"</span> : <span class="string">"child"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"bind"</span> : [treeToBind],</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"bindAsUnidirectional"</span> : [treeToBind2]</p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">enableMultiline()</h4>
-			<div class="develop">
-			<h4>Arguments</h4>
-			<table class="prop">
-				<tr>
-					<th>enable <em>(boolean)</em></th>
-
-					<td>true for activating multi-line behaviour (default value, false)</td>
-				</tr>
-			</table>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a structure was defined</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct);</p></td></tr><tr><td><p style="padding-left:4ex;">tree.enableMultiline(<span class="reserved">true</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Options</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"multiline"</span> : <span class="reserved">true</span></p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 class="new" onclick="shownext(this)">reopenFromServerAfterLoad()</h4>
-			<div class="develop">
-			<h4>Arguments</h4>
-			<table class="prop">
-				<tr>
-					<th>enable <em>(boolean)</em></th>
-
-					<td>false to empécher branches to be reopened from cookie, if their children are from the server. Default value is true</td>
-				</tr>
-			</table>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a structure was defined</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct);</p></td></tr><tr><td><p style="padding-left:4ex;">tree.reopenFromServerAfterLoad(<span class="reserved">true</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Options</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"reopenFromServer"</span> : <span class="reserved">true</span></p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">enableCheckboxes()</h4>
-			<div class="develop">
-			<h4>Arguments</h4>
-			<table class="prop">
-				<tr>
-					<th>enable <em>(boolean)</em></th>
-
-					<td>True activate the "checkbox 2 states" behaviour (default value, false)</td>
-				</tr>
-			</table>
-			<p>"Checkbox 2 states" means that you can check or uncheck a branch, but you'll never have partially checked branches.</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a structure was defined</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct);</p></td></tr><tr><td><p style="padding-left:4ex;">tree.enableCheckboxes(<span class="reserved">true</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Options</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"checkboxes"</span> : <span class="reserved">true</span></p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			<h4>Notes</h4>
-			<ul>
-				<li>Checkboxes 2 states can be either " checked " or " unchecked "</li>
-				<li>For managing 3 states, see enableCheckboxesThreeState() function</li>
-			</ul>
-			</div>
-
-			<h4 onclick="shownext(this)">enableCheckboxesThreeState()</h4>
-
-			<div class="develop">
-			<h4>Arguments</h4>
-			<table class="prop">
-				<tr>
-					<th>enable <em>(boolean)</em></th>
-					<td>True activate the "checkbox 3 states" behaviour (default value, false)</td>
-				</tr>
-
-			</table>
-			<p>"Checkbox 2 states" means that it's an "clever check". When you check or uncheck a branch, il will automatically check or uncheck all children. If some children aren't checked and some other are, the parent will be partially checked.<p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a structure was defined</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct);</p></td></tr><tr><td><p style="padding-left:4ex;">tree.enableCheckboxesThreeState(<span class="reserved">true</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Options</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"checkboxesThreeState"</span> : <span class="reserved">true</span></p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			<h4>Notes</h4>
-			<ul>
-				<li>There's no need to call enableCheckboxes() function.</li>
-			</ul>
-			</div>
-
-			<h4 onclick="shownext(this)">enableCookies()</h4>
-			<div class="develop">
-
-			<h4>Arguments</h4>
-			<table class="prop">
-				<tr>
-					<th>enable <em>(boolean)</em></th>
-					<td>True activates cookies management (default value, true)</td>
-				</tr>
-				<tr class="classe">
-
-					<th>separator (optional) <em>(string)</em></th>
-					<td>Separator used in cookies (default value, " | ")</td>
-				</tr>
-			</table>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a structure was defined</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct);</p></td></tr><tr><td><p style="padding-left:4ex;">tree.enableCookies(<span class="reserved">true</span>, <span class="string">"#___#"</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Options. It's not possible to set the separator from here</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"cookies"</span> : <span class="reserved">true</span></p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			<h4>Notes</h4>
-			<ul>
-				<li>Cookies remember which branches are opened after a reload</li>
-				<li>Modify the separator can be useful if a " | " is part of branches ID</li>
-			</ul>
-			</div>
-
-			<h4 onclick="shownext(this)">openOneAtOnce()</h4>
-
-			<div class="develop">
-			<h4>Arguments</h4>
-			<table class="prop">
-				<tr>
-					<th>enable <em>(boolean)</em></th>
-					<td>True enable the fact that you can only open one branch at one (default value, false)</td>
-				</tr>
-
-			</table>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a structure was defined</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct);</p></td></tr><tr><td><p style="padding-left:4ex;">tree.openOneAtOnce(<span class="reserved">true</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Options</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"openOneAtOnce"</span> : <span class="reserved">true</span></p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">openAtLoad()</h4>
-			<div class="develop">
-			<h4>Arguments</h4>
-			<table class="prop">
-				<tr>
-					<th>open <em>(boolean)</em></th>
-
-					<td>True open all tree at load (default value, false)</td>
-				</tr>
-			</table>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a structure was defined</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct);</p></td></tr><tr><td><p style="padding-left:4ex;">tree.openAtLoad(<span class="reserved">true</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Options</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"openAtLoad"</span> : <span class="reserved">true</span></p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			<h4>Notes</h4>
-			<ul>
-				<li>When cookies are activated, it's the cookie state which is interpreted</li>
-			</ul>
-			</div>
-
-			<h4 onclick="shownext(this)">openAfterAdd()</h4>
-			<div class="develop">
-
-			<h4>Arguments</h4>
-			<table class="prop">
-				<tr>
-					<th>open <em>(boolean)</em></th>
-					<td>True open the branch after an insert or a drop, false keep it closed</td>
-				</tr>
-			</table>
-
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a structure was defined</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct);</p></td></tr><tr><td><p style="padding-left:4ex;">tree.openAfterAdd(<span class="reserved">false</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Options</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"openAfterAdd"</span> : <span class="reserved">false</span></p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">showSelectedBranch()</h4>
-			<div class="develop">
-			<h4>Arguments</h4>
-			<table class="prop">
-				<tr>
-					<th>show <em>(boolean)</em></th>
-
-					<td>True highlight the selected branch (default value, true)</td>
-				</tr>
-			</table>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a structure was defined</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct);</p></td></tr><tr><td><p style="padding-left:4ex;">tree.showSelectedBranch(<span class="reserved">false</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Options</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"showSelectedBranch"</span> : <span class="reserved">false</span></p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">setLineStyle()</h4>
-			<div class="develop">
-			<h4>Arguments</h4>
-			<table class="prop">
-				<tr>
-					<th>style <em>(string)</em></th>
-
-					<td>Set the line style of the tree (default value, " line ")</td>
-				</tr>
-			</table>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a structure was defined</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct);</p></td></tr><tr><td><p style="padding-left:4ex;">tree.setLineStyle(<span class="string">"none"</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Options</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"lineStyle"</span> : <span class="string">"none"</span></p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			<h4>Notes</h4>
-			<ul>
-				<li>Les valeurs possibles sont " line ", " full " ou " none ".</li>
-			</ul>
-			</div>
-
-			<h4 onclick="shownext(this)">setIcons()</h4>
-			<div class="develop">
-
-			<h4>Arguments</h4>
-			<table class="prop">
-				<tr><th>icon <em>(string)</em></th>
-					<td>The icon if the branch hasn't children</td></tr>
-				<tr class="classe"><th>iconOpen <em>(string)</em></th>
-					<td>The icon if the branch has children and is opened</td></tr>
-
-				<tr class="classe"><th>iconClose <em>(string)</em></th>
-					<td>The icon if the branch has children and is closed</td></tr>
-			</table>
-			<p>Set default icons for all banches. If <strong>iconOpen</strong> or <strong>iconClose</strong> aren't defined, they take the value of <strong>icon</strong></p>
-
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a structure was defined</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct);</p></td></tr><tr><td><p style="padding-left:4ex;">tree.setIcons(<span class="string">"page.gif"</span>, <span class="string">"folderopen.gif"</span>, <span class="string">"folder.gif"</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Options</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"defaultImg"</span> : <span class="string">"page.gif"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"defaultImgOpen"</span> : <span class="string">"folderopen.gif"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"defaultImgClose"</span> : <span class="string">"folder.gif"</span></p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 class="new" onclick="shownext(this)">setIconsSelected()</h4>
-			<div class="develop">
-			<h4>Arguments</h4>
-			<table class="prop">
-				<tr><th>iconSelected <em>(string)</em></th>
-
-					<td>icon when the branch hasn't children and is selected</td></tr>
-				<tr class="classe"><th>iconOpenSelected <em>(string)</em></th>
-					<td>icon when the branch has children and is opened and selected</td></tr>
-				<tr class="classe"><th>iconCloseSelected <em>(string)</em></th>
-					<td>icon when the branch has children and is closed and selected</td></tr>
-
-			</table>
-			<p>Set branch's icon. If <strong>iconOpenSelected</strong> or <strong>iconCloseSelected</strong> aren't defined, they take respectively the value of <strong>iconopen</strong> and <strong>iconclose</strong> (see function <em>setIcons()</em>)</p>
-
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a structure was defined</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct);</p></td></tr><tr><td><p style="padding-left:4ex;">tree.setIconsSelected(<span class="string">"page.gif"</span>, <span class="string">"folderopen.gif"</span>, <span class="string">"folder.gif"</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Options</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"defaultImgSelected"</span> : <span class="string">"page.gif"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"defaultImgOpenSelected"</span> : <span class="string">"folderopen.gif"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"defaultImgCloseSelected"</span> : <span class="string">"folder.gif"</span></p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<a name="#behaviourDrop"></a>
-			<h4 class="new" onclick="shownext(this)">setBehaviourDrop()</h4>
-			<div class="develop">
-			<h4>Arguments</h4>
-			<table class="prop">
-				<tr><th>dropStyle <em>(string)</em></th>
-
-					<td>'sibling', 'siblingcopy', child' or 'childcopy', default value is 'child'</td></tr>
-			</table>
-			<p>Set default drop behaviour. Set <strong>sibling</strong> and dropping a branch will make a new sibling or, by keeping ALT pressed, a new child. And vice-versa if it's set to <strong>child</strong>.</p>
-			<p>If you set  <strong>siblingcopy</strong>, the drop will result in a new sibling which is a copy of the branch dropped. If you maintain ALT + CTRL pressed, it will move the branch as child, without copy. Well, the best thing to do is to test the four keywords, and see what happends...</p>
-
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a structure was defined</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct);</p></td></tr><tr><td><p style="padding-left:4ex;">tree.setBehaviourDrop(<span class="string">"sibling"</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Options</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"behaviourDrop"</span> : <span class="string">"sibling"</span></p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 class="new" onclick="shownext(this)">disableDropCTRL()</h4>
-			<div class="develop">
-			<h4>Arguments</h4>
-			<table class="prop">
-				<tr><th>ctrlDrop <em>(boolean)</em></th>
-
-					<td>False disable the functionality CTRL drop, default value true</td></tr>
-			</table>
-			<p>If you give "false", it will disable the CTRL key. So it you'll not be able to make a copyDrag. A copyDrag makes a copy of the branch moved. An insertDrag just move the branch without creating any other.</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a structure was defined</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct);</p></td></tr><tr><td><p style="padding-left:4ex;">tree.disableDropCTRL(<span class="reserved">false</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Options</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"dropCTRL"</span> : <span class="reserved">false</span></p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 class="new" onclick="shownext(this)">disableDropALT()</h4>
-			<div class="develop">
-			<h4>Arguments</h4>
-			<table class="prop">
-				<tr><th>altDrop <em>(string)</em></th>
-
-					<td>False disable the functionality ALT drop, default value true</td></tr>
-			</table>
-			<p>False disable the functionality of having 2 different drop styles. Either "as sibling" or "as child". If you give "false" to this function, you
-			will have only the possibility of drop defined by the function <a href="#">setBehaviourDrop()</a></p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a structure was defined</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct);</p></td></tr><tr><td><p style="padding-left:4ex;">tree.disableDropALT(<span class="reserved">false</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Options</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"dropALT"</span> : <span class="reserved">false</span></p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">propagateRestriction()</h4>
-			<div class="develop">
-			<h4>Arguments</h4>
-			<table class="prop">
-				<tr>
-					<th>propagate <em>(boolean)</em></th>
-
-					<td>True propagate the interdiction to move after a ajax drag&drop (default value, true)</td>
-				</tr>
-			</table>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a structure was defined</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct);</p></td></tr><tr><td><p style="padding-left:4ex;">tree.setOnDropAjax(myFunc, <span class="string">"mypage.php"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;">tree.propagateRestriction(<span class="reserved">false</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Options</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onDropAjax"</span> : [myFunc, <span class="string">"mypage.php"</span>],</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"propagateRestriction"</span> : <span class="reserved">false</span></p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			<h4>Notes</h4>
-			<ul>
-				<li>Propagation means that children of the branch moved are blocked and can't be moved. (used to skip data problems).</li>
-			</ul>
-			</div>
-
-			<h4 class="new" onclick="shownext(this)">enableRTL()</h4>
-			<div class="develop">
-
-			<h4>Arguments</h4>
-			<table class="prop">
-				<tr>
-					<th>rtl <em>(boolean)</em></th>
-					<td>True display the tree from right to left (default value, false)</td>
-				</tr>
-			</table>
-
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a structure was defined</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct);</p></td></tr><tr><td><p style="padding-left:4ex;">tree.enableRTL(<span class="reserved">true</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Options</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"rtlMode"</span> : <span class="reserved">true</span></p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-
-			<h2>TafelTree public methods</h2>
-			<h4 onclick="shownext(this)">generate()</h4>
-			<div class="develop">
-			<h4>Arguments</h4>
-			<table class="prop">
-
-				<tr>
-					<th>partLoad <em>(boolean)</em></th>
-					<td>True generate the tree step-by-step (experimental), default value is false</td>
-				</tr>
-			</table>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a structure was defined</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct);</p></td></tr><tr><td><p style="padding-left:4ex;">tree.generate();</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">serialize()</h4>
-			<div class="develop">
-			<h4>Arguments</h4>
-			<table class="prop">
-				<tr><th>debug <em>(boolean)</em></th>
-
-					<td>true allows you to have a nice display of the serialized string. ONLY FOR DEBUG! Default value is false</td></tr>
-			</table>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr><tr><th>14</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a structure was defined</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct);</p></td></tr><tr><td><p style="padding-left:4ex;">tree.generate();</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// True to see a nice string (usefull <span class="reserved">for</span> control)</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(tree.serialize(<span class="reserved">true</span>));</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Send the serialization to the server</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">new</span> Ajax.Request(<span class="string">"mapage.php"</span>, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"parameters"</span> : <span class="string">"tree="</span> + tree.serialize()</p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">getSelectedBranches()</h4>
-			<div class="develop">
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a structure was defined</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> selected = tree.getSelectedBranches();</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">if</span> (selected.length > 0) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">for</span> (<span class="reserved">var</span> i = 0; i &lt; selected.length; i++) {</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">alert</span>(selected[i].getId());</p></td></tr><tr><td><p style="padding-left:8ex;">}</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">getBranchById()</h4>
-			<div class="develop">
-			<h4>Arguments</h4>
-			<table class="prop">
-				<tr><th>id <em>(string)</em></th>
-
-					<td>branch ID</td></tr>
-			</table>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a structure was defined</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(branch.getId();</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">bind()</h4>
-			<div class="develop">
-			<h4>Arguments</h4>
-			<table class="prop">
-				<tr><th>tree <em>(TafelTree)</em></th>
-
-					<td>the tree to bind</td></tr>
-				<tr class="classe"><th>tree <em>(TafelTree)</em></th>
-					<td>an other tree</td></tr>
-				<tr class="classe"><th>... <em>(TafelTree)</em></th>
-					<td>all the trees we want</td></tr>
-
-			</table>
-			<p>This binding is bi-directional. That means that you can drop from tree1 to tree2 and from tree2 to tree1.</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a structure was defined</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// In this case, it will be possible to drag&drop between</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// tree_1 and tree_2 and inversement</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree_2 = <span class="reserved">new</span> TafelTree(<span class="string">"idTree_2"</span>, myOtherStruct);</p></td></tr><tr><td><p style="padding-left:4ex;">tree.bind(tree_2);</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			<h4>Notes</h4>
-			<ul>
-				<li>This binding is bi-directional</li>
-			</ul>
-			</div>
-
-			<h4 onclick="shownext(this)">bindAsUnidirecitonal()</h4>
-			<div class="develop">
-
-			<h4>Arguments</h4>
-			<table class="prop">
-				<tr><th>tree <em>(TafelTree)</em></th>
-					<td>the tree to bind</td></tr>
-				<tr class="classe"><th>tree <em>(TafelTree)</em></th>
-					<td>an other tree</td></tr>
-
-				<tr class="classe"><th>... <em>(TafelTree)</em></th>
-					<td>all the trees we want</td></tr>
-			</table>
-
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a structure was defined</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// In this case, it will only be possible to drag&drop</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// from tree to tree_2</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree_2 = <span class="reserved">new</span> TafelTree(<span class="string">"idTree_2"</span>, myOtherStruct);</p></td></tr><tr><td><p style="padding-left:4ex;">tree.bindAsUnidirecitonal(tree_2);</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			<h4>Notes</h4>
-			<ul>
-				<li>This binding is uni-directional</li>
-			</ul>
-			</div>
-
-			<h4 onclick="shownext(this)">isBindedWith()</h4>
-			<div class="develop">
-
-			<h4>Arguments</h4>
-			<table class="prop">
-				<tr><th>tree <em>(TafelTree)</em></th>
-					<td>the tree to test if it's binded with</td></tr>
-			</table>
-			<h4>Samples</h4>
-
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a structure was defined</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree_2 = <span class="reserved">new</span> TafelTree(<span class="string">"idTree_2"</span>, myOtherStruct);</p></td></tr><tr><td><p style="padding-left:4ex;">tree.bindAsUnidirectional(tree_2);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(tree.isBindedWith(tree_2)); <span class="comment">// returns <span class="reserved">true</span></span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(tree_2.isBindedWith(tree)); <span class="comment">// returns <span class="reserved">false</span></span></p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">unselect()</h4>
-			<div class="develop">
-			<p>Unselect branches, if one or more were selected</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a structure was defined</span></p></td></tr><tr><td><p style="padding-left:4ex;">tree.unselect();</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">countBranches()</h4>
-			<div class="develop">
-			<p>Count the number of branches</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a structure was defined</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(tree.countBranches());</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">getOpenedBranches()</h4>
-			<div class="develop">
-			<p>Retruns an array of all branches that are opened</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// Let's say a structure was defined</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branches = tree.getOpenedBranches();</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">for</span> (<span class="reserved">var</span> i = 0; i &lt; branches.length; i++) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(branches[i].getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">getCheckedBranches()</h4>
-			<div class="develop">
-			<p>Retruns an array of all branches that are checked</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// Let's say a structure was defined</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branches = tree.getCheckedBranches();</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">for</span> (<span class="reserved">var</span> i = 0; i &lt; branches.length; i++) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(branches[i].getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">getUnCheckedBranches()</h4>
-			<div class="develop">
-			<p>Retruns an array of all branches that aren't checked</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a structure was defined</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branches = tree.getUnCheckedBranches();</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">for</span> (<span class="reserved">var</span> i = 0; i &lt; branches.length; i++) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(branches[i].getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">getPartCheckedBranches()</h4>
-			<div class="develop">
-			<p>Retruns an array of all branches that are partially checked</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a structure was defined</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branches = tree.getPartCheckedBranches();</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">for</span> (<span class="reserved">var</span> i = 0; i &lt; branches.length; i++) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(branches[i].getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">getParentBranches()</h4>
-			<div class="develop">
-			<p>Retruns an array of all branches that are themself parent of other branches</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a structure was defined</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branches = tree.getParentBranches();</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">for</span> (<span class="reserved">var</span> i = 0; i &lt; branches.length; i++) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(branches[i].getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">getLeafBranches()</h4>
-			<div class="develop">
-			<p>Retruns an array of all branches that are leaf branches (without children)</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a structure was defined</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branches = tree.getLeafBranches();</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">for</span> (<span class="reserved">var</span> i = 0; i &lt; branches.length; i++) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(branches[i].getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 class="new" onclick="shownext(this)">getBranches()</h4>
-			<div class="develop">
-				<h4>Arguments</h4>
-				<table class="prop">
-					<tr><th>filter <em>(function)</em></th>
-
-						<td>the user function</td></tr>
-				</table>
-				<p>Retruns an array of all branches. It's possible to put a filter.</p>
-				<h4>Samples</h4>
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr><tr><th>14</th></tr><tr><th>15</th></tr><tr><th>16</th></tr><tr><th>17</th></tr><tr><th>18</th></tr><tr><th>19</th></tr><tr><th>20</th></tr><tr><th>21</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a structure was defined</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branches = tree.getBranches();</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">for</span> (<span class="reserved">var</span> i = 0; i &lt; branches.length; i++) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(branches[i].getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// We can filter branches with an user <span class="reserved">function</span></span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">function</span> myFilter (branch) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">if</span> (branch.getText() == <span class="string">"Celle-ci"</span>) {</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">return</span> <span class="reserved">true</span>;</p></td></tr><tr><td><p style="padding-left:8ex;">} <span class="reserved">else</span> {</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">return</span> <span class="reserved">false</span>;</p></td></tr><tr><td><p style="padding-left:8ex;">}</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branches = tree.getBranches(myFilter);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">for</span> (<span class="reserved">var</span> i = 0; i &lt; branches.length; i++) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(branches[i].getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">expend()</h4>
-			<div class="develop">
-			<p>Expends all branches</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a structure was defined</span></p></td></tr><tr><td><p style="padding-left:4ex;">tree.expend();</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">collapse()</h4>
-			<div class="develop">
-			<p>Collapses all branches</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a structure was defined</span></p></td></tr><tr><td><p style="padding-left:4ex;">tree.collapse();</p></td></tr><tr><td><p style="padding-left:4ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">insertBranch()</h4>
-			<div class="develop">
-			<h4>Arguments</h4>
-			<table class="prop">
-				<tr><th>position <em>(TafelTreeBranch, string)</em></th>
-
-					<td>the source branch (or just the ID)</td></tr>
-				<tr><th>item <em>(object)</em></th>
-					<td>new branch (format JSON <a href="#tag"><em>TafelTreeBranch properties</em></a>)</td></tr>
-				<tr class="classe"><th>sibling <em>(boolean)</em></th>
-					<td>true means we want to insert it as sibling, default value false (=child)</td></tr>
-
-				<tr class="classe"><th>first <em>(boolean)</em></th>
-					<td>true means we want to insert it as first child or sibling before, default value false</td></tr>
-			</table>
-			<p>Allows you to insert a branch as sibling or as child, before, after, in the first or last place.</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr><tr><th>14</th></tr><tr><th>15</th></tr><tr><th>16</th></tr><tr><th>17</th></tr><tr><th>18</th></tr><tr><th>19</th></tr><tr><th>20</th></tr><tr><th>21</th></tr><tr><th>22</th></tr><tr><th>23</th></tr><tr><th>24</th></tr><tr><th>25</th></tr><tr><th>26</th></tr><tr><th>27</th></tr><tr><th>28</th></tr><tr><th>29</th></tr><tr><th>30</th></tr><tr><th>31</th></tr><tr><th>32</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a structure was defined</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> item = {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"id"</span>:<span class="string">"new1"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"img"</span>:<span class="string">"page.gif"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"txt"</span>:<span class="string">"child before"</span></p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> item2 = {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"id"</span>:<span class="string">"new2"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"img"</span>:<span class="string">"page.gif"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"txt"</span>:<span class="string">"child after"</span></p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> item3 = {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"id"</span>:<span class="string">"new3"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"img"</span>:<span class="string">"page.gif"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"txt"</span>:<span class="string">"sibling before"</span></p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> item4 = {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"id"</span>:<span class="string">"new4"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"img"</span>:<span class="string">"page.gif"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"txt"</span>:<span class="string">"sibling after"</span></p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Child branch - in first</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch1 = tree.insertBranch(<span class="string">"id_branch"</span>, item, <span class="reserved">false</span>, <span class="reserved">true</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Child branch - in last</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch2 = tree.insertBranch(<span class="string">"id_branch"</span>, item2, <span class="reserved">false</span>, <span class="reserved">false</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Sibling branch - before</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch3 = tree.insertBranch(<span class="string">"id_branch"</span>, item3, <span class="reserved">true</span>, <span class="reserved">true</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Sibling branch - after</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch4 = tree.insertBranch(<span class="string">"id_branch"</span>, item4, <span class="reserved">true</span>, <span class="reserved">false</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">removeBranch()</h4>
-			<div class="develop">
-			<h4>Arguments</h4>
-			<table class="prop">
-				<tr><th>branch <em>(TafelTreeBranch, string)</em></th>
-
-					<td>the branch to remove (or just the ID)</td></tr>
-			</table>
-			<p>Remove the branch and all its children</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a structure was defined</span></p></td></tr><tr><td><p style="padding-left:4ex;">tree.removeBranch(<span class="string">"id_branch_to_delete"</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">debug()</h4>
-			<div class="develop">
-			<h4>Arguments</h4>
-			<table class="prop">
-				<tr><th>str <em>(string)</em></th>
-
-					<td>The string to display</td></tr>
-			</table>
-			<p>Display a string into the Debug Zone</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Let's say a structure was defined</span></p></td></tr><tr><td><p style="padding-left:4ex;">tree.debug(<span class="string">"text to debug : "</span> + tree.id);</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h2>TafelTree event methods</h2>
-			<h4 onclick="shownext(this)">setOnDebug()</h4>
-			<div class="develop">
-			<h4>Arguments</h4>
-			<table class="prop">
-				<tr><th>func <em>(function)</em></th>
-
-					<td>The user function to call</td></tr>
-			</table>
-			<p>Called after the function tree.debug()</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr><tr><th>14</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// User <span class="reserved">function</span></span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">function</span> myDebug (tree, HTMLDebugObj, str) {</p></td></tr><tr><td><p style="padding-left:8ex;">HTMLDebugObj.innerHTML = <span class="string">"My func : "</span> + str;</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree (<span class="string">"idtree"</span>, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"generate"</span> : <span class="reserved">true</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onDebug"</span> : myDebug</p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;">tree.debug(<span class="string">"text to debug"</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			<h4>Notes</h4>
-			<ul>
-				<li>By default, tree.debug() display only the text into the HTMLDebugObj</li>
-			</ul>
-			</div>
-
-			<h4 onclick="shownext(this)">setOnLoad()</h4>
-			<div class="develop">
-
-			<h4>Arguments</h4>
-			<table class="prop">
-				<tr><th>func <em>(function)</em></th>
-					<td>The user function to call</td></tr>
-			</table>
-			<p>Called when the tree finished to load</p>
-
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// User <span class="reserved">function</span></span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">function</span> myLoad () {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(<span class="string">"load finished"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree (<span class="string">"idtree"</span>, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"generate"</span> : <span class="reserved">true</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onLoad"</span> : myLoad</p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">setOnOpen()</h4>
-			<div class="develop">
-			<h4>Arguments</h4>
-			<table class="prop">
-				<tr><th>func <em>(function)</em></th>
-
-					<td>The user function to call</td></tr>
-			</table>
-			<p>Called after a branch is opened (<em>status = true</em>) or closed (<em>status = false</em>)</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// User <span class="reserved">function</span></span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">function</span> myOpen (branch, status) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">var</span> str = (status) ? <span class="string">"opened"</span> : <span class="string">"closed"</span>;</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(branch.getId() + <span class="string">" has been "</span> + str);</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree (<span class="string">"idtree"</span>, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"generate"</span> : <span class="reserved">true</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onOpen"</span> : myOpen</p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">setOnBeforeOpen()</h4>
-			<div class="develop">
-			<h4>Arguments</h4>
-			<table class="prop">
-				<tr><th>func <em>(function)</em></th>
-
-					<td>The user function to call</td></tr>
-			</table>
-			<p>Called before a branch is open (<em>status = true</em>) or closed (<em>status = false</em>). If it returns <strong>false</strong>, the branch will keep its actual state.</p>
-			<h4>Samples</h4>
-
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr><tr><th>14</th></tr><tr><th>15</th></tr><tr><th>16</th></tr><tr><th>17</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// User <span class="reserved">function</span></span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">function</span> myBeforeOpen (branch, status) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">var</span> strNow = (status) ? <span class="string">"opened"</span> : <span class="string">"closed"</span>;</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">var</span> strNext = (status) ? <span class="string">"closed"</span> : <span class="string">"opened"</span>;</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(branch.getId() + <span class="string">" is "</span> + strNow +</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="string">" and will be "</span> + strNext +</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="string">" <span class="reserved">if</span> this <span class="reserved">function</span> returns <span class="reserved">true</span>"</span>);</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">return</span> <span class="reserved">true</span>;</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree (<span class="string">"idtree"</span>, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"generate"</span> : <span class="reserved">true</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onBeforeOpen"</span> : myBeforeOpen</p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">setOnMouseOver()</h4>
-			<div class="develop">
-			<h4>Arguments</h4>
-			<table class="prop">
-				<tr><th>func <em>(function)</em></th>
-
-					<td>The user function to call</td></tr>
-			</table>
-			<p>Called when the mouse pass trought the branch</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// User <span class="reserved">function</span></span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">function</span> myMouseOver (branch) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(<span class="string">"over : "</span> + branch.getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree (<span class="string">"idtree"</span>, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"generate"</span> : <span class="reserved">true</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onMouseOver"</span> : myMouseOver</p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">setOnMouseOut()</h4>
-			<div class="develop">
-			<h4>Arguments</h4>
-			<table class="prop">
-				<tr><th>func <em>(function)</em></th>
-
-					<td>The user function to call</td></tr>
-			</table>
-			<p>Called when the mouse quit the branch</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// User <span class="reserved">function</span></span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">function</span> myMouseOut (branch) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(<span class="string">"out : "</span> + branch.getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree (<span class="string">"idtree"</span>, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"generate"</span> : <span class="reserved">true</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onMouseOut"</span> : myMouseOut</p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 class="new" onclick="shownext(this)">setOnMouseDown()</h4>
-			<div class="develop">
-			<h4>Arguments</h4>
-			<table class="prop">
-				<tr><th>func <em>(function)</em></th>
-
-					<td>The user function to call</td></tr>
-			</table>
-			<p>Called when the mouse "down" on the branch</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// User <span class="reserved">function</span></span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">function</span> myMouseDown (branch) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(<span class="string">"down : "</span> + branch.getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree (<span class="string">"idtree"</span>, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"generate"</span> : <span class="reserved">true</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onMouseDown"</span> : myMouseDown</p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 class="new" onclick="shownext(this)">setOnMouseUp()</h4>
-			<div class="develop">
-			<h4>Arguments</h4>
-			<table class="prop">
-				<tr><th>func <em>(function)</em></th>
-
-					<td>The user function to call</td></tr>
-			</table>
-			<p>Called when the mouse "up" on the branch</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// User <span class="reserved">function</span></span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">function</span> myMouseUp (branch) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(<span class="string">"up : "</span> + branch.getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree (<span class="string">"idtree"</span>, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"generate"</span> : <span class="reserved">true</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onMouseUp"</span> : myMouseUp</p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">setOnClick()</h4>
-			<div class="develop">
-			<h4>Arguments</h4>
-			<table class="prop">
-				<tr><th>func <em>(function)</em></th>
-
-					<td>The user function to call</td></tr>
-			</table>
-			<p>Called after a click on the branch</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// User <span class="reserved">function</span></span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">function</span> myClick (branch) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(branch.getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree (<span class="string">"idtree"</span>, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"generate"</span> : <span class="reserved">true</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onclick"</span> : myClick</p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			<h4>Notes</h4>
-			<ul>
-				<li>A clicked-branch will be automatically selected</li>
-			</ul>
-			</div>
-
-			<h4 onclick="shownext(this)">setOnDblClick()</h4>
-			<div class="develop">
-
-			<h4>Arguments</h4>
-			<table class="prop">
-				<tr><th>func <em>(function)</em></th>
-					<td>The user function to call</td></tr>
-			</table>
-			<p>Called after a double-click on a branch</p>
-
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// User <span class="reserved">function</span></span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">function</span> myDblClick (branch) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(branch.getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree (<span class="string">"idtree"</span>, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"generate"</span> : <span class="reserved">true</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onDblClick"</span> : myDblClick</p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			<h4>Notes</h4>
-			<ul>
-				<li>If edition is defined, the double-clic will start the branch's edition</li>
-			</ul>
-			</div>
-
-			<h4 onclick="shownext(this)">setOnEdit()</h4>
-			<div class="develop">
-
-			<h4>Arguments</h4>
-			<table class="prop">
-				<tr><th>func <em>(function)</em></th>
-					<td>The user function to call</td></tr>
-			</table>
-			<p>Activate branches edition. Called after the edition of the branch (precisely, after the blur() of the input). The new content will be the one returned by the user function.</p>
-
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// User <span class="reserved">function</span></span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">function</span> myEdit (branch, newValue, oldValue) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">var</span> str = branch.getId() + <span class="string">" : "</span> + newValue;</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">return</span> str;</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree (<span class="string">"idtree"</span>, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"generate"</span> : <span class="reserved">true</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onEdit"</span> : myEdit</p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			<h4>Notes</h4>
-			<ul>
-				<li>If you have a doube-click fuction <em>(tree.setOnDblClick())</em>, the edition is no more available. It's one or the other, but not edition and double-click together</li>
-			</ul>
-			</div>
-
-			<h4 onclick="shownext(this)">setOnBeforeCheck()</h4>
-
-			<div class="develop">
-			<h4>Arguments</h4>
-			<table class="prop">
-				<tr><th>func <em>(function)</em></th>
-					<td>The user function to call</td></tr>
-			</table>
-			<p>Called when you check or uncheck a branch, BEFORE changes are made. If you don't want its state to change, just return <strong>false</strong></p>
-
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr><tr><th>14</th></tr><tr><th>15</th></tr><tr><th>16</th></tr><tr><th>17</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// User <span class="reserved">function</span></span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">function</span> myBeforeCheck (branch, status) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">var</span> strNow = (status) ? <span class="string">"checked"</span> : <span class="string">"unchecked"</span>;</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">var</span> strNext = (status) ? <span class="string">"unchecked"</span> : <span class="string">"checked"</span>;</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(branch.getId() + <span class="string">" is "</span> + strNow +</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="string">" and will be "</span> + strNext +</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="string">" <span class="reserved">if</span> this <span class="reserved">function</span> returns <span class="reserved">true</span>"</span>);</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">return</span> <span class="reserved">true</span>;</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree (<span class="string">"idtree"</span>, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"generate"</span> : <span class="reserved">true</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onBeforeCheck"</span> : myBeforeCheck</p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">setOnCheck()</h4>
-			<div class="develop">
-			<h4>Arguments</h4>
-			<table class="prop">
-				<tr><th>func <em>(function)</em></th>
-
-					<td>The user function to call</td></tr>
-			</table>
-			<p>Called after the check (or uncheck) is done</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// User <span class="reserved">function</span></span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">function</span> myCheck (branch, status) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">var</span> str = (status) ? <span class="string">"checked"</span> : <span class="string">"unchecked"</span>;</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(branch.getId() + <span class="string">" is now "</span> + str);</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree (<span class="string">"idtree"</span>, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"generate"</span> : <span class="reserved">true</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onCheck"</span> : myCheck</p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 class="new" onclick="shownext(this)">setOnDrop()</h4>
-			<div class="develop">
-			<h4>Arguments</h4>
-			<table class="prop">
-				<tr><th>func <em>(function)</em></th>
-
-					<td>The user function to call</td></tr>
-			</table>
-			<p>Called after the drop of the branch. <strong>It must return a boolean</strong>. You can make a "drop as sibling" if you keep the <strong>ALT</strong> key pressed. You can also do a "copydrag" if you maintain the <strong>CONTROL</strong> key pressed.</p>
-			<p>This method is called twice. One time before drop happens (drop_finished = false) and one time after the drop is done (drop_finished = true), if there were no errors before.</p>
-
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr><tr><th>14</th></tr><tr><th>15</th></tr><tr><th>16</th></tr><tr><th>17</th></tr><tr><th>18</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// User <span class="reserved">function</span></span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">function</span> myDrop (branchMoved, newParent, dropFinished) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">if</span> (!dropFinished) {</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">alert</span>(branchMoved.getId()+ <span class="string">" will be child of "</span></p></td></tr><tr><td><p style="padding-left:16ex;">+ newParent.getId());</p></td></tr><tr><td><p style="padding-left:8ex;">} <span class="reserved">else</span> {</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">alert</span>(branchMoved.getId()+ <span class="string">" is now child of "</span></p></td></tr><tr><td><p style="padding-left:16ex;">+ newParent.getId());</p></td></tr><tr><td><p style="padding-left:8ex;">}</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree (<span class="string">"idtree"</span>, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"generate"</span> : <span class="reserved">true</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onDrop"</span> : myDrop</p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			<h4>Notes</h4>
-			<ul>
-				<li>Keep ALT pressed for an "as sibling" drop</li>
-				<li>Keep CONTROL pressed to make a "copydrag"</li>
-			</ul>
-			</div>
-
-			<h4 class="new" onclick="shownext(this)">setOnDropAjax()</h4>
-
-			<div class="develop">
-			<h4>Arguments</h4>
-			<table class="prop">
-				<tr><th>func <em>(function)</em></th>
-					<td>The user function to call</td></tr>
-				<tr><th>link <em>(string)</em></th>
-
-					<td>Link to the server page</td></tr>
-			</table>
-			<p>Called after a drag&drop. When the branch is dropped, it launch an Ajax request at the page  <strong>droplink</strong> and send the Ajax response to the user function. <strong>The medthod must return a boolean</strong>. You can make a "drop as sibling" if you keep the <strong>ALT</strong> key pressed. You can also do a "copydrag" if you maintain the <strong>CONTROL</strong> key pressed.</p>
-
-			<p>This method is called twice. One time before drop happens (drop_finished = false) and one time after the drop is done (drop_finished = true), if there were no errors before.</p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr><tr><th>14</th></tr><tr><th>15</th></tr><tr><th>16</th></tr><tr><th>17</th></tr><tr><th>18</th></tr><tr><th>19</th></tr><tr><th>20</th></tr><tr><th>21</th></tr><tr><th>22</th></tr><tr><th>23</th></tr><tr><th>24</th></tr><tr><th>25</th></tr><tr><th>26</th></tr><tr><th>27</th></tr><tr><th>28</th></tr><tr><th>29</th></tr><tr><th>30</th></tr><tr><th>31</th></tr><tr><th>32</th></tr><tr><th>33</th></tr><tr><th>34</th></tr><tr><th>35</th></tr><tr><th>36</th></tr><tr><th>37</th></tr><tr><th>38</th></tr><tr><th>39</th></tr><tr><th>40</th></tr><tr><th>41</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// User <span class="reserved">function</span></span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">function</span> myDrop(branchMoved,newParent,response,dropFinished){</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// Beware, the <span class="reserved">function</span> is called twice. Here, we</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// check before drop happends</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">if</span> (!dropFinished) {</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="comment">// The response is the responseText of XMLHttpRequest</span></p></td></tr><tr><td><p style="padding-left:12ex;"><span class="comment">// object</span></p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">alert</span>(response);</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="comment">// The text can be a JSON string, so you should</span></p></td></tr><tr><td><p style="padding-left:12ex;"><span class="comment">// evaluate it like that :</span></p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">var</span> obj = eval(<span class="string">""</span> + response + <span class="string">""</span>);</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="comment">// You have to put brackets <span class="reserved">if</span> you didn't put</span></p></td></tr><tr><td><p style="padding-left:12ex;"><span class="comment">// them in the server side</span></p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">alert</span>(obj.myProperty);</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">alert</span>(branchMoved.getId()+ <span class="string">" will be child of "</span> +</p></td></tr><tr><td><p style="padding-left:16ex;">newParent.getId() +</p></td></tr><tr><td><p style="padding-left:16ex;"><span class="string">" <span class="reserved">if</span> this <span class="reserved">function</span> returns <span class="reserved">true</span>"</span>);</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">return</span> <span class="reserved">true</span>;</p></td></tr><tr><td><p style="padding-left:8ex;">}</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree (<span class="string">"idtree"</span>, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"generate"</span> : <span class="reserved">true</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onDropAjax"</span> : [myDrop, <span class="string">"pageScript.php"</span>]</p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// PHP file sample</span></p></td></tr><tr><td><p style="padding-left:0ex;"><span class="php">&lt;?php</span></p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// Do some stuff</span></p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// ...</span></p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// And display a JSON string. Note that <span class="reserved">if</span> you <span class="reserved">return</span> an object</span></p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// you need to display it inside brackets</span></p></td></tr><tr><td><p style="padding-left:0ex;"><span class="php">?&gt;</span></p></td></tr><tr><td><p style="padding-left:0ex;">({</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="string">"myProperty"</span> : <span class="string">"myValue"</span>,</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="string">"other"</span> : [<span class="string">"this"</span>, <span class="string">"is"</span>, <span class="string">"an"</span>, <span class="string">"array"</span>]</p></td></tr><tr><td><p style="padding-left:0ex;">})</p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			<h4>Notes</h4>
-			<ul>
-				<li>Keep ALT pressed for an "as sibling" drop</li>
-				<li>Keep CONTROL pressed to make a "copydrag"</li>
-				<li>Vars sent to the script page <a href="#droplink">droplink</a> are sent in POST</li>
-
-				<li>These vars are :
-					<ul>
-						<li>" drag " = JSON description of dragged branch</li>
-						<li>" drop " = JSON description of dropped-on branch</li>
-						<li>" drag_id " = dragged branch id</li>
-						<li>" drop_id " = drop branch id</li>
-						<li>" treedrag_id " = dragged branch's tree id</li>
-
-						<li>" treedrop_id " = drop branch's tree id</li>
-						<li>" sibling " = 0 if it's a drop "as child", 1 if it's an "as-sibling"</li>
-					</ul>
-				</li>
-				<li>All other vars passed throught <a href="#droplink">droplink</a> are in POST. For example, if droplink = "page.php?spec=1", you'll get <em>spec</em> in POST.</li>
-
-			</ul>
-			</div>
-
-			<h4 onclick="shownext(this)">setOnOpenPopulate()</h4>
-			<div class="develop">
-			<h4>Arguments</h4>
-			<table class="prop">
-				<tr><th>func <em>(function)</em></th>
-
-					<td>The user function to call</td></tr>
-				<tr><th>link <em>(string)</em></th>
-					<td>Link to the server page</td></tr>
-			</table>
-			<p>Called after a branch is opened. When it's open, it launch an Ajax request at the page <strong>openlink</strong> and send the Ajax response to the user function. <strong>It must return a JSON string representing an array of one or more TafelTreeBranch</strong></p>
-
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr><tr><th>14</th></tr><tr><th>15</th></tr><tr><th>16</th></tr><tr><th>17</th></tr><tr><th>18</th></tr><tr><th>19</th></tr><tr><th>20</th></tr><tr><th>21</th></tr><tr><th>22</th></tr><tr><th>23</th></tr><tr><th>24</th></tr><tr><th>25</th></tr><tr><th>26</th></tr><tr><th>27</th></tr><tr><th>28</th></tr><tr><th>29</th></tr><tr><th>30</th></tr><tr><th>31</th></tr><tr><th>32</th></tr><tr><th>33</th></tr><tr><th>34</th></tr><tr><th>35</th></tr><tr><th>36</th></tr><tr><th>37</th></tr><tr><th>38</th></tr><tr><th>39</th></tr><tr><th>40</th></tr><tr><th>41</th></tr><tr><th>42</th></tr><tr><th>43</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// User <span class="reserved">function</span></span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">function</span> myOpen (branch, response) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// The response is the responseText of XMLHttpRequest</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// object</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(response);</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// It MUST BE a JSON string which MUST BE the structure</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// of a TafelTreeBranch</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">var</span> childBranch = eval(response);</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(childBranch.id + <span class="string">"\n"</span> + childBranch.txt);</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(branch.getId() + <span class="string">" will be opened <span class="reserved">if</span> "</span> +</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="string">"this <span class="reserved">function</span> returns <span class="reserved">true</span>"</span>);</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">return</span> response;</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree (<span class="string">"idtree"</span>, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"generate"</span> : <span class="reserved">true</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onOpenPopulate"</span> : [myOpen, <span class="string">"pageScript.php"</span>]</p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// PHP file sample</span></p></td></tr><tr><td><p style="padding-left:0ex;"><span class="php">&lt;?php</span></p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// Do some stuff</span></p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// ...</span></p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// Et on affiche une string JSON. A noter qu'on retourne</span></p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// systématiquement un TABLEAU</span></p></td></tr><tr><td><p style="padding-left:0ex;"><span class="php">?&gt;</span></p></td></tr><tr><td><p style="padding-left:0ex;">[</p></td></tr><tr><td><p style="padding-left:0ex;">{</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="string">"id"</span> : <span class="string">"child1"</span>,</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="string">"txt"</span> : <span class="string">"Texte 1"</span>,</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="string">"items"</span> : [</p></td></tr><tr><td><p style="padding-left:4ex;">{</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"child2"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"Texte 2"</span></p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">]</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">]</p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			<h4>Notes</h4>
-			<ul>
-				<li>Response MUST BE an JSON array ( <strong>[ ]</strong> ) representing one or more TafelTreeBranch</li>
-				<li>JSON MUST BE a description of one or more TafelTreeBranch</li>
-				<li>Vars sent to the script page <a href="#openlink">openlink</a> are sent in POST</li>
-
-				<li>These vars are :
-					<ul>
-						<li>" branch " = JSON description of the branch opened</li>
-						<li>" branch_id " = id of the branch opened</li>
-						<li>" tree_id " = id of the branch's parent tree</li>
-					</ul>
-				</li>
-				<li>All other vars passed throught <a href="#openlink">openlink</a> are in POST. For example, if openlink = "page.php?spec=1", you'll get <em>spec</em> in POST.</li>
-
-			</ul>
-			</div>
-
-			<h4 onclick="shownext(this)">setOnEditAjax()</h4>
-			<div class="develop">
-			<h4>Arguments</h4>
-			<table class="prop">
-				<tr><th>func <em>(function)</em></th>
-
-					<td>The user function to call</td></tr>
-				<tr><th>link <em>(string)</em></th>
-					<td>Link to the server page</td></tr>
-			</table>
-			<p>Called after the branch is edited. It launch an Ajax request at the page <strong>editlink</strong> and send the Ajax response to the user function. <strong>The method must return a string representing the new value of the branch</strong>.</p>
-
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr><tr><th>14</th></tr><tr><th>15</th></tr><tr><th>16</th></tr><tr><th>17</th></tr><tr><th>18</th></tr><tr><th>19</th></tr><tr><th>20</th></tr><tr><th>21</th></tr><tr><th>22</th></tr><tr><th>23</th></tr><tr><th>24</th></tr><tr><th>25</th></tr><tr><th>26</th></tr><tr><th>27</th></tr><tr><th>28</th></tr><tr><th>29</th></tr><tr><th>30</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">function</span> myEditAjax (branch, response, oldValue) {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// To see the content of response, you can <span class="string">"<span class="reserved">alert</span>"</span> it or</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// put it in a div content like that :</span></p></td></tr><tr><td><p style="padding-left:4ex;">branch.tree.debug(response);</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Evaluate a JSON response (note that the JSON is</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// inside brackets). The response should contain, somehow,</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// the <span class="reserved">new</span> value of the branch</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// ({</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// <span class="string">"message"</span> : <span class="string">"Everything was fine on the server"</span>,</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// <span class="string">"newValue"</span> : <span class="string">"<span class="reserved">new</span> value"</span>,</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// <span class="string">"anyOtherParams"</span> : <span class="reserved">true</span></span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// })</span></p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// You can also just <span class="reserved">return</span> the <span class="reserved">new</span> value, <span class="reserved">if</span> you want.</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// For example :</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span> (response); <span class="comment">// show the <span class="reserved">new</span> text</span></p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Some tests</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">if</span> (resultsFromTest) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// OK, the branch will be edited and will have as</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// value what is returned by this <span class="reserved">function</span>;</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">return</span> theNewValue;</p></td></tr><tr><td><p style="padding-left:4ex;">} <span class="reserved">else</span> {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// Here, the branch won<span class="string">"t be edited and it"</span>ll keep</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// the oldValue</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">return</span> <span class="reserved">false</span>;</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			<h4>Notes</h4>
-			<ul>
-				<li>The Ajax response should contain the new value of the branch</li>
-				<li>Vars sent to the script page <a href="#editlink">editlink</a> are sent in POST</li>
-				<li>These vars are :
-					<ul>
-
-						<li>" branch " = JSON description of the branch</li>
-						<li>" branch_id " = id of the branch</li>
-						<li>" tree_id " = id of the branch's parent tree</li>
-						<li>" new_value " = the new value</li>
-						<li>" old_value " = the old value</li>
-					</ul>
-
-				</li>
-				<li>All other vars passed throught <a href="#editlink">editlink</a> are in POST. For example, if editlink = "page.php?spec=1", you'll get <em>spec</em> in POST.</li>
-			</ul>
-			</div>
-
-			<h4 class="new" onclick="shownext(this)">setOnErrorAjax()</h4>
-
-			<div class="develop">
-			<h4>Arguments</h4>
-			<table class="prop">
-				<tr><th>func <em>(function)</em></th>
-					<td>The user function to call</td></tr>
-			</table>
-			<p>Called after an error Ajax in functions drop, open or edit</p>
-
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr><tr><th>14</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">function</span> myErrorAjax (type, response, branch, droppedOn) {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Check error type. Can be drop, edit ou open</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">switch</span> (type) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">case</span> <span class="string">"drop"</span> :</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">break</span>;</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">case</span> <span class="string">"open"</span> :</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">break</span>;</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">case</span> <span class="string">"edit"</span> :</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">break</span>;</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">alert</span>(<span class="string">"Une erreur est survenue pendant l'édition"</span>);</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">break</span>;</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h1>TafelTreeManager methods</h1>
-			<h2>TafelTreeManager Keyboard events description</h2>
-			<h4 class="new" onclick="shownext(this)">Events</h4>
-			<div class="develop">
-			<p>The follwing keyboard keys are managed :</p>
-
-			<ul>
-				<li>ARROW_LEFT</li>
-				<li>ARROW_RIGHT</li>
-				<li>ARROW_UP</li>
-				<li>ARROW_DOWN</li>
-				<li>HOME</li>
-
-				<li>END</li>
-				<li>F2 (editing)</li>
-				<li>ENTER (stop editing)</li>
-				<li>ESCAPE (unselect)</li>
-				<li>DELETE</li>
-				<li>CTRL + X (APPLE-KEY on mac Safari)</li>
-
-				<li>CTRL + C (APPLE-KEY on mac Safari)</li>
-				<li>CTRL + V (APPLE-KEY on mac Safari)</li>
-			</ul>
-			<p>It's possible to desactivate certain keys or adding your own. See setKey() function</p>
-			</div>
-			<h2>TafelTreeManager public methods</h2>
-			<h4 class="new" onclick="shownext(this)">setKeys()</h4>
-
-			<div class="develop">
-			<h4>Arguments</h4>
-			<table class="prop">
-				<tr>
-					<th>keys <em>(array)</em></th>
-					<td>array containing the key code and the function for the key</td>
-				</tr>
-
-			</table>
-			<p>Can manage on or more behaviour for one or more keyboard keys. The function is called just after the key is pressed. The user function has for arguments the tree where the key was pressed, the modifiers-key pressed (ctrl, alt, shit or meta), the key code and the Event object.</p>
-			<h4>Exemple</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr><tr><th>14</th></tr><tr><th>15</th></tr><tr><th>16</th></tr><tr><th>17</th></tr><tr><th>18</th></tr><tr><th>19</th></tr><tr><th>20</th></tr><tr><th>21</th></tr><tr><th>22</th></tr><tr><th>23</th></tr><tr><th>24</th></tr><tr><th>25</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// <span class="reserved">function</span> definition</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">function</span> myOnDelete (tree, code, modifiers, ev) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// Do some stuff and <span class="reserved">return</span> <span class="reserved">true</span> <span class="reserved">if</span> you want</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// the process to continue. For DEL key, <span class="reserved">for</span> example,</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// there's already a build-in <span class="reserved">function</span>. If you</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// <span class="reserved">return</span> <span class="reserved">true</span>, the delete <span class="reserved">function</span> will be called.</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// If you <span class="reserved">return</span> <span class="reserved">false</span>, it will not be called...</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">if</span> (okForDelete) {</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">return</span> <span class="reserved">true</span>;</p></td></tr><tr><td><p style="padding-left:8ex;">} <span class="reserved">else</span> {</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">return</span> <span class="reserved">false</span>;</p></td></tr><tr><td><p style="padding-left:8ex;">}</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// key definition</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> keys = [</p></td></tr><tr><td><p style="padding-left:4ex;">{</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"key"</span> : 46,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"func"</span> : myOnDelete</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:4ex;">];</p></td></tr><tr><td><p style="padding-left:4ex;">TafelTreeManager.setKeys(keys);</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			<h4>Notes</h4>
-			<ul>
-				<li>modifiers.ctrlKey = true if Ctrl is pressed</li>
-				<li>modifiers.altKey = true if Alt is pressed</li>
-				<li>modifiers.shiftKey = true if Shift is pressed</li>
-				<li>modifiers.metaKey = true if "Pomme" (on mac Safari) is pressed</li>
-
-			</ul>
-			</div>
-
-			<h4 class="new" onclick="shownext(this)">disableKeyboardEvents()</h4>
-			<div class="develop">
-			<p>Disable all keyboard events</p>
-			<h4>Exemple</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;">TafelTreeManager.disableKeyboardEvents();</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 class="new" onclick="shownext(this)">disableKeyboardStructuralEvents()</h4>
-			<div class="develop">
-			<p>Disable all build-in structural functions., like DEL, COPY, PASTE, etc. So it's still possible to navigate with arrows. User functions are active too.</p>
-			<h4>Exemple</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;">TafelTreeManager.disableKeyboardStructuralEvents();</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 class="new" onclick="shownext(this)">getCurrentTree()</h4>
-			<div class="develop">
-			<p>Returns the current tree. Null if no tree is selected.</p>
-			<h4>Exemple</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(TafelTreeManager.getCurrentTree());</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 class="new" onclick="shownext(this)">setCurrentTree()</h4>
-			<div class="develop">
-			<p>Set the current tree where all keyboard actions will be done.</p>
-			<h4>Exemple</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;">TafelTreeManager.setCurrentTree(myTree);</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			</div>
-
-		</div>
-	</div>
-	<div class="bottom">
-		<p>Treeview JS TafelTree</p>
-		<p>2006-12-30, <a href="#" onclick="gereStyle()">Tafel</a>. Optimised for Mozilla Firefox</p>
-	</div>
-
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/apps/maarch_entreprise/tools/tafelTree/doc/docOffline_fr.html b/apps/maarch_entreprise/tools/tafelTree/doc/docOffline_fr.html
deleted file mode 100755
index c2e9737a0e1ce013996b22fbe499fc79c4ee53e1..0000000000000000000000000000000000000000
--- a/apps/maarch_entreprise/tools/tafelTree/doc/docOffline_fr.html
+++ /dev/null
@@ -1,2607 +0,0 @@
-<html>
-<head>
-	<style>
-	body, table, select, option, input, textarea {
-	font-family: Verdana, Arial, sans-serif;
-	}
-
-	body {
-	margin-top: 50px;
-	text-align: center;
-	background-color: #FFFFFF;
-	padding-bottom: 30px;
-	}
-
-	div.body {
-	text-align: left;
-	width: 850px;
-	font-size: 0.7em;
-	margin: 0 auto;
-	}
-
-	h1 {
-	text-align: right;
-	font-size: 2em;
-	color: #333399;
-	margin: 0;
-	padding: 0.1em;
-	}
-
-	h2 {
-	text-align: right;
-	font-size: 1.5em;
-	color: #9999FF;
-	margin: 0;
-	padding: 0.2em;
-	padding-bottom: 1em;
-	border-bottom: 1px solid #999999;
-	}
-
-	h1 span {
-	font-size: 0.5em;
-	font-style: italic;
-	}
-
-	img.titre {
-	float: left;
-	}
-
-	.spacer {
-	clear: both;
-	}
-
-	a:visited {
-	color: #9999FF;
-	}
-
-	a:hover {
-	color: #009900;
-	}
-
-	/**
-	 * Le menu
-	 */
-	#menu {
-	list-style: none;
-	margin: 0;
-	padding: 0;
-	font-weight: bold;
-	font-size: 1.2em;
-	}
-
-	#menu li {
-	float: left;
-	width: 16.64%;
-	background-color: #EEEEFF;
-	}
-
-	#menu a {
-	display: block;
-	text-align: center;
-	text-decoration: none;
-	border-bottom: 1px solid #999999;
-	}
-
-	#menu a:visited {
-	color: #0000FF;
-	}
-
-	#menu .ici a {
-	color: #009900;
-	}
-
-	#menu a:hover {
-	background-color: #CCCCFF;
-	color: #EEEEFF;
-	}
-
-	#contenu {
-	clear: both;
-	}
-
-	#contenu .gauche {
-	font-size: 1.1em;
-	text-align: justify;
-	margin-top: 1em;
-	}
-
-	/**
-	 * Le contenu de gauche
-	 */
-	#contenu code {
-	display: block;
-	padding: 0.2em;
-	background-color: #EEEEEE;
-	border: 1px solid #999999;
-	margin: 1em 0;
-	font-size: 1em;
-	}
-
-	#contenu .gauche > code {
-	font-size: 1.3em;
-	}
-
-	#contenu .gauche h4 {
-	border-bottom: 1px solid #CCCCCC;
-	font-size: 1em;
-	color: #999999;
-	margin-top: 2em;
-	margin-bottom: 0;
-	}
-
-	#contenu h3 {
-	text-align: center;
-	margin: 0;
-	font-size: 1.2em;
-	padding-bottom: 55px;
-	}
-
-	/**
-	 * Le bas du site
-	 */
-	div.bottom {
-	clear: both;
-	border-top: 1px solid #CCCCCC;
-	color: #555555;
-	margin-top: 1em;
-	padding-right: 25px;
-	background: url('../imgs/fleche.jpg') right center no-repeat;
-	}
-
-	div.bottom p {
-	text-align: right;
-	margin: 0;
-	padding: 0;
-	}
-
-	.classe {
-	color: #009900;
-	}
-
-	.var {
-	color: #000099;
-	}
-
-	.err {
-	color: #990000;
-	}
-
-	.defaut {
-	font-weight: bold;
-	color: #990000;
-	}
-
-	em {
-	color: inherit;
-	}
-
-	.develop {
-	margin-left: 5em;
-	display: none;
-	}
-
-	.doc h4 {
-	cursor: pointer;
-	}
-
-	#contenu .gauche .doc h4:hover {
-	color: #009900;
-	}
-
-
-	div.code {
-	border: 1px solid #999999;
-	margin-bottom: 1em;
-	}
-
-	div.code table {
-	border-collapse: collapse;
-	font-family: monospace;
-	}
-
-	div.code td {
-	vertical-align: top;
-	}
-
-	div.code td.num {
-	background-color: #EEEEEE;
-	border-right: 1px solid #DDDDDD;
-	}
-
-	div.code td th {
-	font-size: 11px;
-	text-align: right;
-	font-weight: normal;
-	background-color: #EEEEEE;
-	color: #777777;
-	width: 2em;
-	}
-
-	div.code td td {
-	font-size: 13px;
-	padding: 0 0 0 0.5em;
-	}
-
-	div.code span.reserved {
-	color: #0000FF;
-	}
-
-	div.code span.string {
-	color: #CC0000;
-	}
-
-	div.code span.object {
-	color: #660000;
-	}
-
-	div.code span.php {
-	font-weight: bold;
-	color: #CC33CC;
-	}
-
-	div.code span.comment, span.comment span.reserved, span.comment span.object, span.comment span.string {
-	color: #009900;
-	}
-
-	.doc h1 {
-	text-align: left;
-	margin-top: 1em;
-	}
-	.doc h2 {
-	text-align: left;
-	margin-top: 0.5em;
-	}
-
-	#contenu .gauche h4.new {
-	color: #CC5555;
-	background-image: url('../imgs/new.png');
-	background-position: top right;
-	background-repeat: no-repeat;
-	}
-
-	.doc table.prop {
-	margin-left: 5%;
-	font-size: 0.9em;
-	border-collapse: collapse;
-	width: 95%;
-	}
-
-	.doc table.prop th {
-	text-align: left;
-	}
-	.doc table.prop th.long {
-	width: 30%;
-	}
-
-	.doc table.prop tr:hover {
-	background-color: #EEEEEE;
-	}
-	</style>
-	<script type="text/javascript">
-		function shownext(obj) {
-			var div = obj;
-			while (div && div.nodeName.toLowerCase() != 'div') {
-				div = div.nextSibling;
-			}
-			if (div.style.display == 'block') {
-				div.style.display = 'none';
-			} else {
-				div.style.display = 'block';
-			}
-		}
-	</script>
-</head>
-<body>
-
-<div class="body">
-	<div id="contenu">
-		<div class="gauche" >
-
-			<h3 class="m4">Documentation</h3>
-
-			<h4>Documentation offline</h4>
-			<ul>
-				<li><a href="docOffline.html" target="_blank">Voir la documentation offline (HTML)</a></li>
-				<li><a href="docOffline.zip">Documentation offline (ZIP, décompressé : 270 kb)</a></li>
-			</ul>
-			<h4>Format HTML</h4>
-			<p>TafelTree est un arbre Javascript open source qui permet de faire énormément de choses, ou presque.
-			Il est basé sur JSON et DOM, notamment. La structure HTML, complètement transparente (l'utilisateur touille 
-			tout via du javascript, bien entendu) est comme ceci :</p>
-
-			<div id="myTree"></div>
-			<div class="spacer">&nbsp;</div>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr><tr><th>14</th></tr><tr><th>15</th></tr><tr><th>16</th></tr><tr><th>17</th></tr><tr><th>18</th></tr><tr><th>19</th></tr><tr><th>20</th></tr><tr><th>21</th></tr><tr><th>22</th></tr><tr><th>23</th></tr><tr><th>24</th></tr><tr><th>25</th></tr><tr><th>26</th></tr><tr><th>27</th></tr><tr><th>28</th></tr><tr><th>29</th></tr><tr><th>30</th></tr><tr><th>31</th></tr><tr><th>32</th></tr><tr><th>33</th></tr><tr><th>34</th></tr><tr><th>35</th></tr><tr><th>36</th></tr><tr><th>37</th></tr><tr><th>38</th></tr><tr><th>39</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;div id=<span class="string">"tree"</span> class="tafelTree"></p></td></tr><tr><td><p style="padding-left:4ex;">&lt;div class="tafelTree_root"></p></td></tr><tr><td><p style="padding-left:8ex;">&lt;table>&lt;tbody>&lt;tr></p></td></tr><tr><td><p style="padding-left:12ex;">&lt;td>&lt;img class="openable<span class="string">" src="</span>../imgs/minus5.gif"/>&lt;/td></p></td></tr><tr><td><p style="padding-left:12ex;">&lt;td>&lt;img src=<span class="string">"../imgs/globe.gif"</span>/>&lt;/td></p></td></tr><tr><td><p style="padding-left:12ex;">&lt;td class="canevas<span class="string">">&lt;div class="</span>content">Racine&lt;/div>&lt;/td></p></td></tr><tr><td><p style="padding-left:8ex;">&lt;/tr>&lt;/tbody>&lt;/table></p></td></tr><tr><td><p style="padding-left:8ex;">&lt;div class="tafelTree_branch"></p></td></tr><tr><td><p style="padding-left:12ex;">&lt;table>&lt;tbody>&lt;tr></p></td></tr><tr><td><p style="padding-left:16ex;">&lt;td>&lt;img src=<span class="string">"../imgs/empty.gif"</span>/>&lt;/td></p></td></tr><tr><td><p style="padding-left:16ex;">&lt;td>&lt;img class="openable<span class="string">" src="</span>../imgs/line3.gif"/>&lt;/td></p></td></tr><tr><td><p style="padding-left:16ex;">&lt;td>&lt;img src=<span class="string">"../imgs/page.gif"</span>/>&lt;/td></p></td></tr><tr><td><p style="padding-left:16ex;">&lt;td class="canevas<span class="string">">&lt;div class="</span>content"></p></td></tr><tr><td><p style="padding-left:20ex;">Enfant 1&lt;/div>&lt;/td></p></td></tr><tr><td><p style="padding-left:12ex;">&lt;/tr>&lt;/tbody>&lt;/table></p></td></tr><tr><td><p style="padding-left:8ex;">&lt;/div></p></td></tr><tr><td><p style="padding-left:8ex;">&lt;div class="tafelTree_branch"></p></td></tr><tr><td><p style="padding-left:12ex;">&lt;table>&lt;tbody>&lt;tr></p></td></tr><tr><td><p style="padding-left:16ex;">&lt;td>&lt;img src=<span class="string">"../imgs/empty.gif"</span>/>&lt;/td></p></td></tr><tr><td><p style="padding-left:16ex;">&lt;td>&lt;img class="openable<span class="string">" src="</span>../imgs/minus2.gif"/>&lt;/td></p></td></tr><tr><td><p style="padding-left:16ex;">&lt;td>&lt;img src=<span class="string">"../imgs/folderopen.gif"</span>/>&lt;/td></p></td></tr><tr><td><p style="padding-left:16ex;">&lt;td class="canevas<span class="string">">&lt;div class="</span>content"></p></td></tr><tr><td><p style="padding-left:20ex;">Enfant 2&lt;/div>&lt;/td></p></td></tr><tr><td><p style="padding-left:12ex;">&lt;/tr>&lt;/tbody>&lt;/table></p></td></tr><tr><td><p style="padding-left:12ex;">&lt;div class="tafelTree_branch"></p></td></tr><tr><td><p style="padding-left:16ex;">&lt;table>&lt;tbody>&lt;tr></p></td></tr><tr><td><p style="padding-left:20ex;">&lt;td>&lt;img src=<span class="string">"../imgs/empty.gif"</span>/>&lt;/td></p></td></tr><tr><td><p style="padding-left:20ex;">&lt;td>&lt;img src=<span class="string">"../imgs/empty.gif"</span>/>&lt;/td></p></td></tr><tr><td><p style="padding-left:20ex;">&lt;td>&lt;img class="openable"</p></td></tr><tr><td><p style="padding-left:24ex;">src=<span class="string">"../imgs/line2.gif"</span>/>&lt;/td></p></td></tr><tr><td><p style="padding-left:20ex;">&lt;td>&lt;img src=<span class="string">"../imgs/page.gif"</span>/>&lt;/td></p></td></tr><tr><td><p style="padding-left:20ex;">&lt;td class="canevas<span class="string">">&lt;div class="</span>content"></p></td></tr><tr><td><p style="padding-left:24ex;">Enfant avec enfant&lt;/div>&lt;/td></p></td></tr><tr><td><p style="padding-left:16ex;">&lt;/tr>&lt;/tbody>&lt;/table></p></td></tr><tr><td><p style="padding-left:12ex;">&lt;/div></p></td></tr><tr><td><p style="padding-left:8ex;">&lt;/div></p></td></tr><tr><td><p style="padding-left:4ex;">&lt;/div></p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/div></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			<div class="doc">
-			<h1>Propriétés TafelTreeBranch de structure</h1>
-			<h2>Propriétés TafelTreeBranch basiques</h2>
-			
-			<a name="tag"></a>
-			<h4 onclick="shownext(this)">id <em>(string)</em></h4>
-			<div class="develop">
-				<p class="classe">Obligatoire</p>
-
-				<p>L'id utilisateur de la branche. Doit être unique. Attention, donc, lors de drag'n drop entre deux arbres, de bien vérifier que le tag de l'élément dropé n'existe pas encore.</p>
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"myId"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"My super text"</span></p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// UL - LI</span></p></td></tr><tr><td><p style="padding-left:0ex;">&lt;li id=<span class="string">"myId"</span>>My super text&lt;/li></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-			
-			<a name="txt"></a>
-			<h4 onclick="shownext(this)">txt <em>(string)</em></h4>
-			<div class="develop">
-				<p class="classe">Obligatoire</p>
-				<p>Le texte affiché à coté de l'icône</p>
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"myId"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"My super text"</span></p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// UL - LI</span></p></td></tr><tr><td><p style="padding-left:0ex;">&lt;li id=<span class="string">"myId"</span>>My super text&lt;/li></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<a name="acceptdrop"></a>
-			<h4 onclick="shownext(this)">acceptdrop <em>(boolean)</em></h4>
-			<div class="develop">
-				<p class="classe">Optionnel. Par défaut : true</p>
-				<p><strong>True</strong> pour pouvoir droper des éléments sur la branche, <strong>false</strong> pour rendre cette action impossible.</p>
-
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"myId"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"My super text"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"acceptdrop"</span> : <span class="reserved">true</span></p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// UL - LI</span></p></td></tr><tr><td><p style="padding-left:0ex;">&lt;li id=<span class="string">"myId"</span> Tacceptdrop=<span class="string">"1"</span>>My super text&lt;/li></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-			
-			<a name="canhavechildren"></a>
-			<h4 onclick="shownext(this)">canhavechildren <em>(boolean)</em></h4>
-			<div class="develop">
-				<p class="classe">Optionnel. Par défaut : false</p>
-				<p>Mettre <strong>true</strong> pour dire que la branche peut avoir des enfants. Est nécessaire lorsqu'on utilise la fonction <strong><a href="#onopenpopulate">onopenpopulate()</a></strong>. Cela permet de faire apparaître le " + " pour ouvrir la branche alors qu'elle n'a pas encore d'enfants.</p>
-
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"myId"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"My super text"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"canhavechildren"</span> : <span class="reserved">true</span></p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// UL - LI</span></p></td></tr><tr><td><p style="padding-left:0ex;">&lt;li id=<span class="string">"myId"</span> Tcanhavechildren=<span class="string">"1"</span>>My super text&lt;/li></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-			
-			<a name="check"></a>
-			<h4 onclick="shownext(this)">check <em>(integer)</em></h4>
-			<div class="develop">
-				<p class="classe">Optionnel. Par défaut : 0</p>
-				<p>Mettre <strong>1</strong> pour que la branche soit chechée d'office, s'il y a les checkboxes activées</p>
-
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"myId"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"My super text"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"check"</span> : 1</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// UL - LI</span></p></td></tr><tr><td><p style="padding-left:0ex;">&lt;li id=<span class="string">"myId"</span> Tcheck=<span class="string">"1"</span>>My super text&lt;/li></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-			
-			<a name="draggable"></a>
-			<h4 onclick="shownext(this)">draggable <em>(boolean)</em></h4>
-			<div class="develop">
-				<p class="classe">Optionnel. Par défaut : true</p>
-				<p><strong>True</strong> pour pouvoir dragger la branche, <strong>false</strong> pour rendre cette action impossible. N'a aucun effet s'il n'y a pas de fonction setOnDrop() ou setOnDropAjax() définie. (ou encore ondrop ou ondropajax)</p>
-
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"myId"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"My super text"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"draggable"</span> : <span class="reserved">true</span></p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// UL - LI</span></p></td></tr><tr><td><p style="padding-left:0ex;">&lt;li id=<span class="string">"myId"</span> Tdraggable=<span class="string">"1"</span>>My super text&lt;/li></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-			
-			<a name="editable"></a>
-			<h4 onclick="shownext(this)">editable <em>(boolean)</em></h4>
-			<div class="develop">
-				<p class="classe">Optionnel. Par défaut : 1</p>
-				<p>Indique si la branche peut être éditée ou non. Si la fonciton onEdit() existe, mettre ce paramètre à false permet d'empêcher l'édition malgré tout</p>
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"myId"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"My super text"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"editable"</span> : <span class="reserved">false</span></p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// UL - LI</span></p></td></tr><tr><td><p style="padding-left:0ex;">&lt;li id=<span class="string">"myId"</span> Teditable=<span class="string">"0"</span>>My super text&lt;/li></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-			
-			<a name="img"></a>
-			<h4 onclick="shownext(this)">img <em>(string)</em></h4>
-			<div class="develop">
-				<p class="classe">Optionnel. Par défaut : pas d'image</p>
-				<p>L'icône affiché lorsque la branche n'a pas d'enfants.</p>
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"myId"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"My super text"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"img"</span> : <span class="string">"anImg.gif"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"imgopen"</span> : <span class="string">"anImg.gif"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"imgclose"</span> : <span class="string">"anImg.gif"</span></p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// UL - LI</span></p></td></tr><tr><td><p style="padding-left:0ex;">&lt;li id=<span class="string">"myId"</span> Timg=<span class="string">"anImg.gif"</span> Timgopen=<span class="string">"anImg.gif"</span> Timgclose=<span class="string">"anImg.gif"</span>>My super text&lt;/li></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-			
-			<a name="imgclose"></a>
-			<h4 onclick="shownext(this)">imgclose <em>(string)</em></h4>
-			<div class="develop">
-				<p class="classe">Optionnel. Par défaut : le même que <a href="#img">img</a></p>
-				<p>L'icône affiché lorsque la branche a des enfants et est fermée.</p>
-
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"myId"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"My super text"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"img"</span> : <span class="string">"anImg.gif"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"imgopen"</span> : <span class="string">"anImg.gif"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"imgclose"</span> : <span class="string">"anImg.gif"</span></p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// UL - LI</span></p></td></tr><tr><td><p style="padding-left:0ex;">&lt;li id=<span class="string">"myId"</span> Timg=<span class="string">"anImg.gif"</span> Timgopen=<span class="string">"anImg.gif"</span> Timgclose=<span class="string">"anImg.gif"</span>>My super text&lt;/li></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-			
-			<a name="imgopen"></a>
-			<h4 onclick="shownext(this)">imgopen <em>(string)</em></h4>
-			<div class="develop">
-				<p class="classe">Optionnel. Par défaut : le même que <a href="#img">img</a></p>
-				<p>L'icône affiché lorsque la branche a des enfants et est ouverte.</p>
-
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"myId"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"My super text"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"img"</span> : <span class="string">"anImg.gif"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"imgopen"</span> : <span class="string">"anImg.gif"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"imgclose"</span> : <span class="string">"anImg.gif"</span></p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// UL - LI</span></p></td></tr><tr><td><p style="padding-left:0ex;">&lt;li id=<span class="string">"myId"</span> Timg=<span class="string">"anImg.gif"</span> Timgopen=<span class="string">"anImg.gif"</span> Timgclose=<span class="string">"anImg.gif"</span>>My super text&lt;/li></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-			
-			<a name="img"></a>
-			<h4 class="new" onclick="shownext(this)">imgselected <em>(string)</em></h4>
-			<div class="develop">
-				<p class="classe">Optionnel. Par défaut : le même que <a href="#img">img</a></p>
-				<p>L'icône affiché lorsque la branche n'a pas d'enfants et est sélectionnée.</p>
-
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"myId"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"My super text"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"imgselected"</span> : <span class="string">"anImgSelect.gif"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"img"</span> : <span class="string">"anImg.gif"</span></p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// UL - LI</span></p></td></tr><tr><td><p style="padding-left:0ex;">&lt;li id=<span class="string">"myId"</span> Timg=<span class="string">"anImg.gif"</span> Timgselected=<span class="string">"anImgSelect.gif"</span>>My super text&lt;/li></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-			
-			<a name="imgclose"></a>
-			<h4 class="new" onclick="shownext(this)">imgcloseselected <em>(string)</em></h4>
-			<div class="develop">
-				<p class="classe">Optionnel. Par défaut : le même que <a href="#img">imgclose</a></p>
-				<p>L'icône affiché lorsque la branche a des enfants et est fermée et sélectionnée.</p>
-
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"myId"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"My super text"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"imgcloseselected"</span> : <span class="string">"anImgSelect.gif"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"imgclose"</span> : <span class="string">"anImg.gif"</span></p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// UL - LI</span></p></td></tr><tr><td><p style="padding-left:0ex;">&lt;li id=<span class="string">"myId"</span> Timgcloseselected=<span class="string">"anImgSelect.gif"</span> Timgclose=<span class="string">"anImg.gif"</span>>My super text&lt;/li></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-			
-			<a name="imgopen"></a>
-			<h4 class="new" onclick="shownext(this)">imgopenselected <em>(string)</em></h4>
-			<div class="develop">
-				<p class="classe">Optionnel. Par défaut : le même que <a href="#img">imgopen</a></p>
-				<p>L'icône affiché lorsque la branche a des enfants et est ouverte et sélectionnée.</p>
-
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"myId"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"My super text"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"imgopenselected"</span> : <span class="string">"anImgSelect.gif"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"imgopen"</span> : <span class="string">"anImg.gif"</span></p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// UL - LI</span></p></td></tr><tr><td><p style="padding-left:0ex;">&lt;li id=<span class="string">"myId"</span> Timgopen=<span class="string">"anImg.gif"</span> Timgopenselected=<span class="string">"anImgSelect.gif"</span>>My super text&lt;/li></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-			
-			<a name="items"></a>
-			<h4 onclick="shownext(this)">items <em>(array)</em></h4>
-			<div class="develop">
-				<p class="classe">Optionnel</p>
-				<p>Un tableau composé de branches. Représente les enfants de la branche</p>
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr><tr><th>14</th></tr><tr><th>15</th></tr><tr><th>16</th></tr><tr><th>17</th></tr><tr><th>18</th></tr><tr><th>19</th></tr><tr><th>20</th></tr><tr><th>21</th></tr><tr><th>22</th></tr><tr><th>23</th></tr><tr><th>24</th></tr><tr><th>25</th></tr><tr><th>26</th></tr><tr><th>27</th></tr><tr><th>28</th></tr><tr><th>29</th></tr><tr><th>30</th></tr><tr><th>31</th></tr><tr><th>32</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"myId"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"My super text"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"items"</span> : [</p></td></tr><tr><td><p style="padding-left:4ex;">{</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"id"</span> : <span class="string">"child1"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"txt"</span> : <span class="string">"Child 1"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"items"</span> : [</p></td></tr><tr><td><p style="padding-left:8ex;">{</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="string">"id"</span> : <span class="string">"child1_1"</span>,</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="string">"txt"</span> : <span class="string">"Child of child 1"</span></p></td></tr><tr><td><p style="padding-left:8ex;">}</p></td></tr><tr><td><p style="padding-left:8ex;">]</p></td></tr><tr><td><p style="padding-left:4ex;">}, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"id"</span> : <span class="string">"child2"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"txt"</span> : <span class="string">"Child 2"</span></p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:4ex;">]</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// UL - LI</span></p></td></tr><tr><td><p style="padding-left:0ex;">&lt;li id=<span class="string">"myId"</span>>My super text</p></td></tr><tr><td><p style="padding-left:4ex;">&lt;ul></p></td></tr><tr><td><p style="padding-left:8ex;">&lt;li id=<span class="string">"child1"</span>>Child 1</p></td></tr><tr><td><p style="padding-left:12ex;">&lt;ul></p></td></tr><tr><td><p style="padding-left:16ex;">&lt;li id=<span class="string">"child1_1"</span>>Child of child 1&lt;/li></p></td></tr><tr><td><p style="padding-left:12ex;">&lt;/ul></p></td></tr><tr><td><p style="padding-left:8ex;">&lt;/li></p></td></tr><tr><td><p style="padding-left:8ex;">&lt;li id=<span class="string">"child2"</span>>Child 2&lt;/li></p></td></tr><tr><td><p style="padding-left:4ex;">&lt;/ul></p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/li></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-			
-			<a name="last"></a>
-			<h4 onclick="shownext(this)">last <em>(boolean)</em></h4>
-			<div class="develop">
-				<p class="classe">Optionnel. Par défaut : false</p>
-				<p><strong>True</strong> pour toujours avoir la branche en dernière position dans l'arbre. Utilisé après le drop d'une branche, pour éviter que cette dernière ne se retrouve tout en bas.</p>
-
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"myId"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"Trash"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"img"</span> : <span class="string">"trash.gif"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"last"</span> : <span class="reserved">true</span></p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// UL - LI</span></p></td></tr><tr><td><p style="padding-left:0ex;">&lt;li id=<span class="string">"myId"</span> Tlast=<span class="string">"1"</span>>My super text&lt;/li></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-			
-			<a name="open"></a>
-			<h4 onclick="shownext(this)">open <em>(boolean)</em></h4>
-			<div class="develop">
-				<p class="classe">Optionnel. Par défaut, elle prend la valeur de l'arbre (<a href="#setOpenAll">setOpenAll()</a>). Si la gestion des cookies est activée, celle-ci passe par-dessus tout.</p>
-				<p><strong>True</strong> pour avoir la branche ouverte, <strong>false</strong> pour l'avoir fermée.</p>
-
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"myId"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"My super text"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"open"</span> : <span class="reserved">true</span></p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// UL - LI</span></p></td></tr><tr><td><p style="padding-left:0ex;">&lt;li id=<span class="string">"myId"</span> Topen=<span class="string">"1"</span>>My super text&lt;/li></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-			
-			<a name="style"></a>
-			<h4 onclick="shownext(this)">style <em>(string)</em></h4>
-			<div class="develop">
-				<p class="classe">Optionnel</p>
-				<p>Le nom d'une classe CSS qui s'appliquera uniquement au texte</p>
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"myId"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"My super text"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"style"</span> : <span class="string">"aCSSclassName"</span></p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// UL - LI</span></p></td></tr><tr><td><p style="padding-left:0ex;">&lt;li id=<span class="string">"myId"</span> Tstyle=<span class="string">"aCCSclassName"</span>>My super text&lt;/li></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-			
-			<a name="title"></a>
-			<h4 onclick="shownext(this)">title <em>(string)</em></h4>
-			<div class="develop">
-				<p class="classe">Optionnel</p>
-				<p>Le contenu de l'attribut HTML "title" du texte de la branche (équivalent au tooltip). Le title ne peut contenir que du texte.</p>
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"myId"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"My super text"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"title"</span> : <span class="string">"My title"</span></p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// UL - LI</span></p></td></tr><tr><td><p style="padding-left:0ex;">&lt;li id=<span class="string">"myId"</span> Ttitle=<span class="string">"My title"</span>>My super text&lt;/li></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-			
-			<a name="style"></a>
-			<h4 onclick="shownext(this)">tooltip <em>(string)</em></h4>
-			<div class="develop">
-				<p class="classe">Optionnel</p>
-				<p>Un tooltip qui s'affiche au survol de la branche avec la souris (équivalent au title). Le contenu peut être de l'HTML</p>
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"myId"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"My super text"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"tooltip"</span> : <span class="string">"Mon joli tooltip"</span></p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// UL - LI</span></p></td></tr><tr><td><p style="padding-left:0ex;">&lt;li id=<span class="string">"myId"</span> Ttooltip=<span class="string">"Mon joli tooltip"</span>>My super text&lt;/li></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-				<h4>Notes</h4>
-				<ul>
-					<li>On peut y mettre de l'HTML. Attention toutefois avec les quotes ( ' ) et guillemets ( " )</li>
-					<li>Le tooltip est automatiquement inséré dans un DIV</li>
-					<li>Le style CSS s'appelle <strong>div.tooltip</strong></li>
-				</ul>
-
-			</div>
-
-
-			<h2>Propriétés TafelTreeBranch de fonctions</h2>
-
-			<a name="onbeforecheck"></a>
-			<h4 onclick="shownext(this)">onbeforecheck <em>(function)</em></h4>
-			<div class="develop">
-				<h4>Propriétés</h4>
-
-				<table class="prop">
-					<tr><th>branch <em>(TafelTreeBranch)</em></th>
-						<td>la branche qui va changer son status de check</td></tr>
-					<tr><th>checked <em>(boolean)</em></th>
-						<td>Le status de la branche si le changement est validé</td></tr>
-				</table>
-
-				<p class="var">Optionnel</p>
-				<p>Méthode appelée lorsqu'on clique sur une checkbox, avant que le changement de status soit fait</p>
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">function</span> myBeforeCheck (branch, checked) {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(branch.getId());</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">return</span> <span class="reserved">true</span>;</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"tag1"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"A branch"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"onbeforecheck"</span> : myBeforeCheck</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<a name="onbeforeopen"></a>
-			<h4 onclick="shownext(this)">onbeforeopen <em>(function)</em></h4>
-			<div class="develop">
-				<h4>Propriétés</h4>
-				<table class="prop">
-					<tr><th>branch <em>(TafelTreeBranch)</em></th>
-
-						<td>la branche qui va s'ouvrir</td></tr>
-					<tr><th>opened <em>(boolean)</em></th>
-						<td>A true, la branche est ouverte et va donc se fermer. A false, c'est l'inverse</td></tr>
-				</table>
-				<p class="var">Optionnel</p>
-				<p>Méthode appelée juste avant d'ouvrir la branche. <strong>Elle doit retourner un boolean</strong>. Prend le pas sur la méthode <strong><a href="#setOnBeforeOpen">setOnBeforeOpen()</a></strong> de TafelTree</p>
-
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr><tr><th>14</th></tr><tr><th>15</th></tr><tr><th>16</th></tr><tr><th>17</th></tr><tr><th>18</th></tr><tr><th>19</th></tr><tr><th>20</th></tr><tr><th>21</th></tr><tr><th>22</th></tr><tr><th>23</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">function</span> myBeforeOpen (branch, opened) {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Tests divers</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">if</span> (resultsFromTest) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// OK, la branche va s'ouvrir</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">return</span> <span class="reserved">true</span>;</p></td></tr><tr><td><p style="padding-left:4ex;">} <span class="reserved">else</span> {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// Ici, la branche ne s'ouvrira pas. La fonciton myOpen ne sera</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// pas appelée</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">return</span> <span class="reserved">false</span>;</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="reserved">function</span> myOpen (branch, opened) {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(branch.getTag());</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"tag1"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"A branch"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"onbeforeopen"</span> : myBeforeOpen,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"onopen"</span> : myOpen</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<a name="oncheck"></a>
-			<h4 onclick="shownext(this)">oncheck <em>(function)</em></h4>
-			<div class="develop">
-				<h4>Propriétés</h4>
-				<table class="prop">
-					<tr><th>branch <em>(TafelTreeBranch)</em></th>
-
-						<td>la branche qui a changé son status de check</td></tr>
-					<tr><th>checked <em>(boolean)</em></th>
-						<td>Le nouveau status de la branche</td></tr>
-				</table>
-				<p class="var">Optionnel</p>
-				<p>Méthode appelée lorsqu'on clique sur une checkbox</p>
-
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">function</span> myCheck (branch, checked) {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(branch.getId());</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"tag1"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"A branch"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"oncheck"</span> : myCheck</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<a name="onclick"></a>
-			<h4 onclick="shownext(this)">onclick <em>(function)</em></h4>
-			<div class="develop">
-				<h4>Propriétés</h4>
-				<table class="prop">
-					<tr><th>branch <em>(TafelTreeBranch)</em></th>
-
-						<td>la branche sur laquelle on clique</td></tr>
-				</table>
-				<p class="var">Optionnel</p>
-				<p>Méthode appelée lorsqu'on clique sur le texte de la branche. Prend le pas sur la méthode <strong><a href="#setOnClick">setOnClick()</a></strong> de TafelTree</p>
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">function</span> myClick (branch) {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(branch.getId());</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"tag1"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"A branch click"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"onclick"</span> : myClick</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<a name="ondblclick"></a>
-			<h4 onclick="shownext(this)">ondblclick <em>(function)</em></h4>
-			<div class="develop">
-				<h4>Propriétés</h4>
-				<table class="prop">
-					<tr><th>branch <em>(TafelTreeBranch)</em></th>
-
-						<td>la branche sur laquelle on double-clique</td></tr>
-				</table>
-				<p class="var">Optionnel</p>
-				<p>Méthode appelée lorsqu'on double-clique sur le texte de la branche. Prend le pas sur la méthode <strong><a href="#setOnDblClick">setOnDblClick()</a></strong> de TafelTree</p>
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">function</span> myDblClick (branch) {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(branch.getId());</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"tag1"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"A branch double-click"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"ondblclick"</span> : myDblClick</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<a name="ondrop"></a>
-			<h4 class="new" onclick="shownext(this)">ondrop <em>(function)</em></h4>
-			<div class="develop">
-				<h4>Propriétés</h4>
-				<table class="prop">
-					<tr><th>branch_move <em>(TafelTreeBranch)</em></th>
-
-						<td>la branche dragguée</td></tr>
-					<tr><th>branch_here <em>(TafelTreeBranch)</em></th>
-						<td>La branche sur qui il y a eu le drop</td></tr>
-					<tr><th>drop_finished <em>(boolean)</em></th>
-						<td>False si le drop n'est pas encore effectué, True si le drop est effectué</td></tr>
-
-					<tr><th>new_branch <em>(boolean)</em></th>
-						<td>La branche insérée, s'il s'agit d'un copyDrag</td></tr>
-				</table>
-				<p class="var">Optionnel</p>
-				<p>Méthode appelée après avoir drag'n dropé la branche. <strong>Elle doit retourner un boolean</strong>. On peut faire un "drop as sibling (frère)" en gardant la touche <strong>ALT</strong> appuyée. Il est également possible de faire un "copydrag" en
-				maintenant la touche <strong>CONTROL</strong> appuyée. Prend le pas sur la méthode <strong><a href="#setOnDrop">setOnDrop()</a></strong> de TafelTree</p>
-
-				<p>La méthode est appelée deux fois. Une fois avant que le drop soit fait (drop_finished = false) et une fois après que le drop soit fait (drop_finished = true), pour autant qu'il n'y ait pas eu d'erreurs avant.</p>
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr><tr><th>14</th></tr><tr><th>15</th></tr><tr><th>16</th></tr><tr><th>17</th></tr><tr><th>18</th></tr><tr><th>19</th></tr><tr><th>20</th></tr><tr><th>21</th></tr><tr><th>22</th></tr><tr><th>23</th></tr><tr><th>24</th></tr><tr><th>25</th></tr><tr><th>26</th></tr><tr><th>27</th></tr><tr><th>28</th></tr><tr><th>29</th></tr><tr><th>30</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">function</span> myDrop (branch_move, branch_here, drop_finished,</p></td></tr><tr><td><p style="padding-left:4ex;">new_branch) {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Attention, cette fonction est appelée 2x. D'abord avant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// que le drop soit fait, puis ensuite après coup. Là, on</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// teste si le drop n'a pas encore été effectué</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">if</span> (!drop_finished) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// Tests divers</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">if</span> (resultsFromTest) {</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="comment">// OK, la branche pourra être droppée ici</span></p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">return</span> <span class="reserved">true</span>;</p></td></tr><tr><td><p style="padding-left:8ex;">} <span class="reserved">else</span> {</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="comment">// Ici, la branche ne sera pas droppée et reviendra</span></p></td></tr><tr><td><p style="padding-left:12ex;"><span class="comment">// à sa place initiale</span></p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">return</span> <span class="reserved">false</span>;</p></td></tr><tr><td><p style="padding-left:8ex;">}</p></td></tr><tr><td><p style="padding-left:4ex;">} <span class="reserved">else</span> {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// On peut récupérer la nouvelle branche insérée</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// s<span class="string">'il s'</span>agit d'un copyDrag</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">if</span> (new_branch) {</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">alert</span>(new_branch.getId())</p></td></tr><tr><td><p style="padding-left:8ex;">}</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"tag1"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"A branch"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"ondrop"</span> : myDrop</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-				<h4>Notes</h4>
-				<ul>
-					<li>Maintenir ALT pour dropper "as sibling"</li>
-					<li>Maintenir CONTROL pour faire un "copydrag"</li>
-				</ul>
-			</div>
-
-			<a name="onedit"></a>
-
-			<h4 onclick="shownext(this)">onedit <em>(function)</em></h4>
-			<div class="develop">
-				<h4>Propriétés</h4>
-				<table class="prop">
-					<tr><th>branch <em>(TafelTreeBranch)</em></th>
-						<td>la branche qui a été éditée</td></tr>
-
-					<tr><th>newValue <em>(string)</em></th>
-						<td>La nouvelle valeur qui sera enregistrée</td></tr>
-					<tr><th>oldValue <em>(string)</em></th>
-						<td>L'ancienne valeur de la branche</td></tr>
-				</table>
-				<p class="var">Optionnel</p>
-
-				<p>Méthode appelée lorsqu'on édite une branche (précisément, après le blur() de l'input qui apparaît suite à un double-clic sur la branche)</p>
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr><tr><th>14</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">function</span> myEdit (branch, newValue, oldValue) {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">if</span> (newValue.toLowerCase() == <span class="string">"trop facile"</span>) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">return</span> <span class="string">"Vraiment trop facile"</span>;</p></td></tr><tr><td><p style="padding-left:4ex;">} <span class="reserved">else</span> {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">return</span> newValue;</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"tag1"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"To be edited..."</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"onedit"</span> : myEdit</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-				<h4>Notes</h4>
-				<ul>
-					<li>Retourne la string qui sera effectivement enregistrée</li>
-				</ul>
-			</div>
-
-			<a name="onmouseout"></a>
-			<h4 onclick="shownext(this)">onmouseout <em>(function)</em></h4>
-
-			<div class="develop">
-				<h4>Propriétés</h4>
-				<table class="prop">
-					<tr><th>branch <em>(TafelTreeBranch)</em></th>
-						<td>la branche que la souris quitte</td></tr>
-				</table>
-				<p class="var">Optionnel</p>
-
-				<p>Méthode appelée lorsqu'on retire la souris du texte de la branche. Prend le pas sur la méthode <strong><a href="#setOnMouseOut">setOnMouseOut()</a></strong> de TafelTree</p>
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr><tr><th>14</th></tr><tr><th>15</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">function</span> myMouseOut (branch) {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(<span class="string">"out : "</span> + branch.getId());</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="reserved">function</span> myMouseOver (branch) {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(<span class="string">"over : "</span> + branch.getId());</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"tag1"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"A branch mouse over and out"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"onmouseover"</span> : myMouseOver,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"onmouseout"</span> : myMouseOut</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<a name="onmouseover"></a>
-			<h4 onclick="shownext(this)">onmouseover <em>(function)</em></h4>
-			<div class="develop">
-				<h4>Propriétés</h4>
-				<table class="prop">
-					<tr><th>branch <em>(TafelTreeBranch)</em></th>
-
-						<td>la branche sur qui la souris passe</td></tr>
-				</table>
-				<p class="var">Optionnel</p>
-				<p>Méthode appelée lorsqu'on passe la souris sur le texte de la branche. Prend le pas sur la méthode <strong><a href="#setOnMouseOver">setOnMouseOver()</a></strong> de TafelTree</p>
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr><tr><th>14</th></tr><tr><th>15</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">function</span> myMouseOut (branch) {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(<span class="string">"out : "</span> + branch.getId());</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="reserved">function</span> myMouseOver (branch) {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(<span class="string">"over : "</span> + branch.getId());</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"tag1"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"A branch mouse over and out"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"onmouseover"</span> : myMouseOver,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"onmouseout"</span> : myMouseOut</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<a name="onmousedown"></a>
-			<h4 class="new" onclick="shownext(this)">onmousedown <em>(function)</em></h4>
-			<div class="develop">
-				<h4>Propriétés</h4>
-				<table class="prop">
-					<tr><th>branch <em>(TafelTreeBranch)</em></th>
-
-						<td>la branche sur qui la souris passe</td></tr>
-				</table>
-				<p class="var">Optionnel</p>
-				<p>Méthode appelée lorsqu'on fait un mouse down sur la branche. Prend le pas sur la méthode <strong><a href="#setOnMouseDown">setOnMouseDown()</a></strong> de TafelTree</p>
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">function</span> myMouseDown (branch) {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(<span class="string">"down : "</span> + branch.getId());</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"tag1"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"A branch mouse down"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"onmousedown"</span> : myMouseDown</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<a name="onmouseup"></a>
-			<h4 class="new" onclick="shownext(this)">onmouseup <em>(function)</em></h4>
-			<div class="develop">
-				<h4>Propriétés</h4>
-				<table class="prop">
-					<tr><th>branch <em>(TafelTreeBranch)</em></th>
-
-						<td>la branche sur qui la souris passe</td></tr>
-				</table>
-				<p class="var">Optionnel</p>
-				<p>Méthode appelée lorsqu'on fait un mouse up sur la branche. Prend le pas sur la méthode <strong><a href="#setOnMouseUp">setOnMouseUp()</a></strong> de TafelTree</p>
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">function</span> myMouseUp (branch) {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(<span class="string">"up : "</span> + branch.getId());</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"tag1"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"A branch mouse up"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"onmouseup"</span> : myMouseUp</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<a name="onopen"></a>
-			<h4 onclick="shownext(this)">onopen <em>(function)</em></h4>
-			<div class="develop">
-				<h4>Propriétés</h4>
-				<table class="prop">
-					<tr><th>branch <em>(TafelTreeBranch)</em></th>
-
-						<td>la branche qui s'ouvre ou ferme</td></tr>
-					<tr><th>opened <em>(boolean)</em></th>
-						<td>A true, la branche est ouverte, à false non</td></tr>
-				</table>
-				<p class="var">Optionnel</p>
-				<p>Méthode appelée après l'ouverture de la branche. Prend le pas sur la méthode <strong><a href="#setOnOpen">setOnOpen()</a></strong> de TafelTree</p>
-
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr><tr><th>14</th></tr><tr><th>15</th></tr><tr><th>16</th></tr><tr><th>17</th></tr><tr><th>18</th></tr><tr><th>19</th></tr><tr><th>20</th></tr><tr><th>21</th></tr><tr><th>22</th></tr><tr><th>23</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">function</span> myBeforeOpen (branch, opened) {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Tests divers</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">if</span> (resultsFromTest) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// OK, la branche va s'ouvrir</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">return</span> <span class="reserved">true</span>;</p></td></tr><tr><td><p style="padding-left:4ex;">} <span class="reserved">else</span> {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// Ici, la branche ne s'ouvrira pas. La fonciton myOpen ne sera</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// pas appelée</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">return</span> <span class="reserved">false</span>;</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="reserved">function</span> myOpen (branch, opened) {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(branch.getTag());</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"tag1"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"A branch"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"onbeforeopen"</span> : myBeforeOpen,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"onopen"</span> : myOpen</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-
-			<h2>Spécificités</h2>
-
-			<h4 class="new" onclick="shownext(this)">onerrorajax(function)</h4>
-			<div class="develop">
-				<h4>Paramètres</h4>
-				<table class="prop">
-
-					<tr><th>type <em>(string)</em></th>
-						<td>Le type d'erreur (open, drop ou edit)</td></tr>
-					<tr><th>response <em>(string)</em></th>
-						<td>La réponse texte Ajax</td></tr>
-					<tr><th>branch <em>(TafelTreeBranch)</em></th>
-
-						<td>La branche courante</td></tr>
-					<tr><th>droppedOn <em>(TafelTreeBranch)</em></th>
-						<td>La branche sur laquelle il y a eu un drop (s'il s'agit d'un drop, évidemment)</td></tr>
-				</table>
-				<p>Méthode appelée suite à une erreur dans une requête Ajax de drop, open ou edit</p>
-				<h4>Exemples</h4>
-
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr><tr><th>14</th></tr><tr><th>15</th></tr><tr><th>16</th></tr><tr><th>17</th></tr><tr><th>18</th></tr><tr><th>19</th></tr><tr><th>20</th></tr><tr><th>21</th></tr><tr><th>22</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">function</span> myErrorAjax (type, response, branch, droppedOn) {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Vérifie le type d'erreur. Peut être drop, edit ou open</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">switch</span> (type) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">case</span> <span class="string">"drop"</span> :</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">alert</span>(<span class="string">"Une erreur est survenue pendant le drop"</span>);</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">break</span>;</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">case</span> <span class="string">"open"</span> :</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">break</span>;</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">case</span> <span class="string">"edit"</span> :</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">break</span>;</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"tag1"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"A branch"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"ondropajax"</span> : myDrop,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"droplink"</span> : <span class="string">"page.php"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"onerrorajax"</span> : myErrorAjax</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<a name="openlink"></a>
-			<h4 onclick="shownext(this)">openlink <em>(string)</em></h4>
-			<div class="develop">
-				<p class="err">Optionnel, mais obligatoire si <strong>onopenpopulate</strong> est une fonction. Uitlisé avec la propriété de branche <strong><a href="#canhavechildren">canhavechildren</a></strong></p>
-
-				<p>Page de script coté serveur appelée après l'ouverture de la branche, s'il s'agit de la fonction <strong>onopenpopulate</strong>. Prend le pas sur la méthode <strong><a href="#setOnOpenPopulate">setOnOpenPopulate()</a></strong> de TafelTree</p>
-			</div>
-
-			<a name="onopenpopulate"></a>
-			<h4 onclick="shownext(this)">onopenpopulate <em>(function)</em></h4>
-
-			<div class="develop">
-				<h4>Propriétés</h4>
-				<table class="prop">
-					<tr><th>branch <em>(TafelTreeBranch)</em></th>
-						<td>la branche ouverte</td></tr>
-					<tr><th>response <em>(string)</em></th>
-
-						<td>La string retournée par la requête</td></tr>
-				</table>
-				<p class="err">Optionnel</p>
-				<p>Méthode appelée après l'ouverture de la branche. Lorsque celle-ci est ouverte, elle lance une requête Ajax à la page <strong>openlink</strong> et renvoie le retour Ajax à la méthode utilisateur. <strong>La méthode doit retourner une string JSON représentant des TafelTreeBranch</strong>. Prend le pas sur la méthode <strong><a href="#setOnOpenPopulate">setOnOpenPopulate()</a></strong> de TafelTree</p>
-
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr><tr><th>14</th></tr><tr><th>15</th></tr><tr><th>16</th></tr><tr><th>17</th></tr><tr><th>18</th></tr><tr><th>19</th></tr><tr><th>20</th></tr><tr><th>21</th></tr><tr><th>22</th></tr><tr><th>23</th></tr><tr><th>24</th></tr><tr><th>25</th></tr><tr><th>26</th></tr><tr><th>27</th></tr><tr><th>28</th></tr><tr><th>29</th></tr><tr><th>30</th></tr><tr><th>31</th></tr><tr><th>32</th></tr><tr><th>33</th></tr><tr><th>34</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">function</span> myOpenPopulate (branch, response) {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Pour voir le contenu de la réponse, on peut faire une</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// <span class="string">"<span class="reserved">alert</span>"</span> ou le mettre dans le DIV de debug de l'arbre</span></p></td></tr><tr><td><p style="padding-left:4ex;">branch.tree.debug(response);</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On peut aussi évaluer la réponse en tant qu'objet JSON</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// (à noter qu<span class="string">'il s'</span>agit d'un tableau). La réponse DOIT</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// ETRE une description d'une ou plusieurs TafelTreeBranch</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// [{</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// <span class="string">"id"</span> : <span class="string">"id_from_server_1"</span>,</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// <span class="string">"txt"</span> : <span class="string">"This is one is from the server"</span>,</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// <span class="string">"img"</span> : <span class="string">"globe.gif"</span></span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// }]</span></p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Tests divers</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">if</span> (resultsFromTest) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// OK, la branche sera ouverte avec les nouvelles</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// branches qui viennent du serveur</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">return</span> response;</p></td></tr><tr><td><p style="padding-left:4ex;">} <span class="reserved">else</span> {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// Ici, la branche ne sera pas ouverte et aucune</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// branche ne sera ajoutée</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">return</span> <span class="reserved">false</span>;</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"tag1"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"A branch"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"onopenpopulate"</span> : myOpenPopulate,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"openlink"</span> : <span class="string">"somewhere/serverScriptPage.php"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"canhavechildren"</span> : <span class="reserved">true</span></p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-				<h4>Notes</h4>
-				<ul>
-					<li>Le réponse DOIT ETRE un tableau JSON ( <strong>[ ]</strong> ) contenant des TafelTreeBranch</li>
-					<li>Le JSON DOIT ETRE une description de une ou plusieurs TafelTreeBranch</li>
-					<li>Les variables envoyées à la page <a href="#openlink">openlink</a> passent par la méthode POST</li>
-
-					<li>Ces variables sont :
-						<ul>
-							<li>" branch " = description JSON de la branche</li>
-							<li>" branch_id " = id de la branche qui s'ouvre</li>
-							<li>" tree_id " = id de l'arbre d'où est tiré la branche qui s'ouvre</li>
-						</ul>
-					</li>
-					<li>Toutes autres variables passée par <a href="#openlink">openlink</a> sont également transmises en POST. Par exemple, si openlink = "page.php?spec=1", on récuperera <em>spec</em> en POST malgré tout.</li>
-
-				</ul>
-			</div>
-
-			<a name="editlink"></a>
-			<h4 onclick="shownext(this)">editlink <em>(string)</em></h4>
-			<div class="develop">
-				<p class="err">Optionnel, mais obligatoire si <strong>oneditajax</strong> est une fonction. Peut être utilisé avec la propriété de branche <strong><a href="#editable">editable</a></strong></p>
-
-				<p>Page de script coté serveur appelée après l'édition de la branche, s'il s'agit de la fonction <strong>oneditajax</strong>. Prend le pas sur la méthode <strong><a href="#setOnEditAjax">setOnEditAjax()</a></strong> de TafelTree</p>
-			</div>
-
-			<a name="oneditajax"></a>
-			<h4 onclick="shownext(this)">oneditajax <em>(function)</em></h4>
-
-			<div class="develop">
-				<h4>Propriétés</h4>
-				<table class="prop">
-					<tr><th>branch <em>(TafelTreeBranch)</em></th>
-						<td>la branche ouverte</td></tr>
-					<tr><th>response <em>(string)</em></th>
-
-						<td>La string retournée par la requête</td></tr>
-					<tr><th>oldValue <em>(string)</em></th>
-						<td>L'ancienne valeur de la branche</td></tr>
-				</table>
-				<p class="err">Optionnel</p>
-				<p>Méthode appelée après l'édition de la branche. Lorsque celle-ci a terminé d'être éditée, elle lance une requête Ajax à la page <strong>editlink</strong> et renvoie le retour Ajax à la méthode utilisateur. <strong>La méthode doit retourner une string représentant la nouvelle valeur de la branche</strong>. Prend le pas sur la méthode <strong><a href="#setOnEditAjax">setOnEditAjax()</a></strong> de TafelTree</p>
-
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr><tr><th>14</th></tr><tr><th>15</th></tr><tr><th>16</th></tr><tr><th>17</th></tr><tr><th>18</th></tr><tr><th>19</th></tr><tr><th>20</th></tr><tr><th>21</th></tr><tr><th>22</th></tr><tr><th>23</th></tr><tr><th>24</th></tr><tr><th>25</th></tr><tr><th>26</th></tr><tr><th>27</th></tr><tr><th>28</th></tr><tr><th>29</th></tr><tr><th>30</th></tr><tr><th>31</th></tr><tr><th>32</th></tr><tr><th>33</th></tr><tr><th>34</th></tr><tr><th>35</th></tr><tr><th>36</th></tr><tr><th>37</th></tr><tr><th>38</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">function</span> myEditAjax (branch, response, oldValue) {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Pour voir le contenu de la réponse, on peut faire une</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// <span class="string">"<span class="reserved">alert</span>"</span> ou le mettre dans le DIV de debug de l'arbre</span></p></td></tr><tr><td><p style="padding-left:4ex;">branch.tree.debug(response);</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On peut aussi évaluer la réponse en tant qu'objet JSON</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// (à noter qu'elle est entre parenthèses). La réponse</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// doit contenir, d<span class="string">'une manière ou d'</span>une autre, la</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// nouvelle valeur de la branche</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// ({</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// <span class="string">"message"</span> : <span class="string">"Tout est ok sur le serveur"</span>,</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// <span class="string">"newValue"</span> : <span class="string">"Nouvelle valeur de la branche"</span>,</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// <span class="string">"anyOtherParams"</span> : <span class="reserved">true</span></span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// })</span></p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On peut aussi retourner seulement la nouvelle valeur</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// (dans ce cas, plus besoin de parenthèses)</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// <span class="reserved">alert</span> (response); // show the <span class="reserved">new</span> text</span></p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Tests divers</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">if</span> (resultsFromTest) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// OK, la branche sera éditée et aura la</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// nouvelle valeur retournée par cette fonction</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">return</span> theNewValue;</p></td></tr><tr><td><p style="padding-left:4ex;">} <span class="reserved">else</span> {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// Ici, la branche ne sera pas éditée et conservera</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// son ancienne valeur (oldValue)</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">return</span> <span class="reserved">false</span>;</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"tag1"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"A branch"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"oneditajax"</span> : myEditAjax,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"editlink"</span> : <span class="string">"somewhere/serverScriptPage.php"</span></p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-				<h4>Notes</h4>
-				<ul>
-					<li>La réponse devrait contenir la nouvelle valeur à insérer dans la branche</li>
-					<li>Les variables envoyées à la page <a href="#editlink">editlink</a> passent par la méthode POST</li>
-					<li>Ces variables sont :
-						<ul>
-
-							<li>" branch " = description JSON de la branche</li>
-							<li>" branch_id " = id de la branche qui s'ouvreé</li>
-							<li>" tree_id " = id de l'arbre d'où est tiré la branche qui s'ouvre</li>
-							<li>" new_value " = la nouvelle valeur de la branche</li>
-							<li>" old_value " = l'ancienne valeur de la branche</li>
-						</ul>
-
-					</li>
-					<li>Toutes autres variables passée par <a href="#editlink">editlink</a> sont également transmises en POST. Par exemple, si editlink = "page.php?spec=1", on récuperera <em>spec</em> en POST malgré tout.</li>
-				</ul>
-			</div>
-
-			<a name="droplink"></a>
-
-			<h4 onclick="shownext(this)">droplink <em>(string)</em></h4>
-			<div class="develop">
-				<p class="err">Optionnel, mais obligatoire si <strong>ondropajax</strong> est une fonction</p>
-				<p>Page de script coté serveur appelée après le drop de la branche, s'il s'agit de la fonction <strong>ondropajax</strong>. Prend le pas sur la méthode <strong><a href="#setOnDropAjax">setOnDropAjax()</a></strong> de TafelTree</p>
-
-			</div>
-
-			<a name="ondropajax"></a>
-			<h4 class="new" onclick="shownext(this)">ondropajax <em>(function)</em></h4>
-			<div class="develop">
-				<h4>Propriétés</h4>
-				<table class="prop">
-					<tr><th>branch_move <em>(TafelTreeBranch)</em></th>
-
-						<td>la branche dragguée</td></tr>
-					<tr><th>branch_here <em>(TafelTreeBranch)</em></th>
-						<td>La branche sur qui il y a eu le drop</td></tr>
-					<tr><th>response <em>(string)</em></th>
-						<td>La string retournée par la requête</td></tr>
-
-					<tr><th>drop_finished <em>(boolean)</em></th>
-						<td>False si le drop n'est pas encore effectué, True si le drop est effectué</td></tr>
-					<tr><th>new_branch <em>(boolean)</em></th>
-						<td>La branche insérée, s'il s'agit d'un copyDrag</td></tr>
-				</table>
-				<p class="err">Optionnel</p>
-
-				<p>Méthode appelée après le drag'n drop de la branche. Lorsque celle-ci est dropée, elle lance une requête Ajax à la page <strong>droplink</strong> et renvoie le retour Ajax à la méthode utilisateur. <strong>La méthode doit retourner un boolean</strong>. On peut faire un "drop as sibling (frère)" en gardant la touche <strong>ALT</strong> appuyée. Il est également possible de faire un "copydrag" en maintenant la touche <strong>CONTROL</strong> appuyée. Prend le pas sur la méthode <strong><a href="#setOnDropAjax">setOnDropAjax()</a></strong> de TafelTree</p>
-
-				<p>La méthode est appelée deux fois. Une fois avant que le drop soit fait (drop_finished = false) et une fois après que le drop soit fait (drop_finished = true), pour autant qu'il n'y ait pas eu d'erreurs avant.</p>
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr><tr><th>14</th></tr><tr><th>15</th></tr><tr><th>16</th></tr><tr><th>17</th></tr><tr><th>18</th></tr><tr><th>19</th></tr><tr><th>20</th></tr><tr><th>21</th></tr><tr><th>22</th></tr><tr><th>23</th></tr><tr><th>24</th></tr><tr><th>25</th></tr><tr><th>26</th></tr><tr><th>27</th></tr><tr><th>28</th></tr><tr><th>29</th></tr><tr><th>30</th></tr><tr><th>31</th></tr><tr><th>32</th></tr><tr><th>33</th></tr><tr><th>34</th></tr><tr><th>35</th></tr><tr><th>36</th></tr><tr><th>37</th></tr><tr><th>38</th></tr><tr><th>39</th></tr><tr><th>40</th></tr><tr><th>41</th></tr><tr><th>42</th></tr><tr><th>43</th></tr><tr><th>44</th></tr><tr><th>45</th></tr><tr><th>46</th></tr><tr><th>47</th></tr><tr><th>48</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">function</span> myDropAjax (branch_move, branch_here, response,</p></td></tr><tr><td><p style="padding-left:4ex;">drop_finished, new_branch) {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On vérifie que le drop n'est pas encore effectué</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">if</span> (!drop_finished) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// Pour voir le contenu de la réponse, on peut soit</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// faire une <span class="string">"<span class="reserved">alert</span>"</span>, soit la mettre dans le DIV de</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// debug</span></p></td></tr><tr><td><p style="padding-left:8ex;">branch_move.tree.debug(response);</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// Evalue une réponse JSON (à noter que le JSON est</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// entre parenthèses). Imaginons que la réponse égale</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// ceci :</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// ({</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// <span class="string">"param1"</span> : <span class="reserved">true</span>,</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// <span class="string">"param2"</span> : <span class="string">"salut biscuit"</span></span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// })</span></p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// On pourra dès lors faire ceci :</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">var</span> obj = eval(response);</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">if</span> (obj.param1) {</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">alert</span>(obj.param2);</p></td></tr><tr><td><p style="padding-left:8ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// Tests divers</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">if</span> (resultsFromTest) {</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="comment">// OK, la branche sera droppée ici</span></p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">return</span> <span class="reserved">true</span>;</p></td></tr><tr><td><p style="padding-left:8ex;">} <span class="reserved">else</span> {</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="comment">// Ici, la branche ne sera pas droppée et</span></p></td></tr><tr><td><p style="padding-left:12ex;"><span class="comment">// retournera à sa place initiale</span></p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">return</span> <span class="reserved">false</span>;</p></td></tr><tr><td><p style="padding-left:8ex;">}</p></td></tr><tr><td><p style="padding-left:4ex;">} <span class="reserved">else</span> {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// On peut récupérer la nouvelle branche insérée</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// s<span class="string">'il s'</span>agit d'un copyDrag</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">if</span> (new_branch) {</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">alert</span>(new_branch.getId())</p></td></tr><tr><td><p style="padding-left:8ex;">}</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"tag1"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"A branch"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"ondropajax"</span> : myDropAjax,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"droplink"</span> : <span class="string">"somewhere/serverScriptPage.php"</span></p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-				<h4>Notes</h4>
-				<ul>
-					<li>Maintenir ALT pour dropper "as sibling"</li>
-					<li>Maintenir CONTROL pour faire un "copydrag"</li>
-					<li>Les variables envoyées à la page <a href="#droplink">droplink</a> passent par la méthode POST</li>
-
-					<li>Ces variables sont :
-						<ul>
-							<li>" drag " = description JSON de la branche qui a bougé</li>
-							<li>" drop " = description JSON de la branche sur laquelle on a déposé le drag</li>
-							<li>" drag_id " = id de la branche qui a bougé</li>
-							<li>" drop_id " = id de la branche sur laquelle on a déposé le drag_id</li>
-							<li>" treedrag_id " = id de l'arbre d'où est tiré la branche qui a bougé</li>
-
-							<li>" treedrop_id " = id de l'arbre qui accueille la branche qui a bougé</li>
-							<li>" sibling " = 0 si on le drop comme fils, 1 s'il est comme frère</li>
-						</ul>
-					</li>
-					<li>Toutes autres variables passée par <a href="#droplink">droplink</a> sont également transmises en POST. Par exemple, si droplink = "page.php?spec=1", on récuperera <em>spec</em> en POST malgré tout.</li>
-
-				</ul>
-			</div>
-
-			<a name="other"></a>
-			<h4 onclick="shownext(this)">...mon propre paramètre <em>(integer, float, string, object, function, boolean, array)</em></h4>
-			<div class="develop">
-				<p>Il est possible d'ajouter autant de paramètres souhaités, suivant les besoins. Lors de l'appel d'une fonction, ils sont récupérables en passant par la propriété <strong>struct</strong>.</p>
-
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr><tr><th>14</th></tr><tr><th>15</th></tr><tr><th>16</th></tr><tr><th>17</th></tr><tr><th>18</th></tr><tr><th>19</th></tr><tr><th>20</th></tr><tr><th>21</th></tr><tr><th>22</th></tr><tr><th>23</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">function</span> myClick (branch) {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">if</span> (branch.struct.theWhetherIsBeautiful) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">var</span> str = branch.struct.wow;</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(branch.struct.aStrangeObject.param1 + <span class="string">"|"</span>+ str);</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">for</span> (<span class="reserved">var</span> i=0; i &lt; branch.struct.frenchNames.length; i++){</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(branch.struct.frenchNames[i]);</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="reserved">var</span> branch = {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"tag1"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"A branch"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"wow"</span> : <span class="string">"some text"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"theWhetherIsBeautiful"</span> : <span class="reserved">true</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"aStrangeObject"</span> : {<span class="string">"param1"</span> : <span class="string">"object in object"</span>},</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"frenchNames"</span> : [</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"Albert"</span>, <span class="string">"Gilbertin"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"Zéphirin"</span>, <span class="string">"Anatole"</span>, <span class="string">"Gontan"</span></p></td></tr><tr><td><p style="padding-left:4ex;">],</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"onclick"</span> : myClick</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-				<h4>Notes</h4>
-				<ul>
-					<li>Les paramètres persos SONT DISPONIBLES dans la sérialisation</li>
-					<li>Ils APPARAISSENT lors d'un toString()</li>
-					<li>Ils NE SONT PAS INTERPRETES lors d'une création UL - LI</li>
-				</ul>
-			</div>
-
-
-			<h1>Méthodes de TafelTreeBranch</h1>
-			<h2>Méthodes publiques TafelTreeBranch</h2>
-
-			<h4 onclick="shownext(this)">hasChildren()</h4>
-			<div class="develop">
-			<p>Retourne true si la branche a des enfants, false sinon</p>
-
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu'un arbre a été créé auparavant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(branch.hasChildren());</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">isOpened()</h4>
-			<div class="develop">
-			<p>Retourne true si la branche est ouverte, false sinon</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu'un arbre a été créé auparavant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(branch.isOpened());</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 class="new" onclick="shownext(this)">isVisible()</h4>
-			<div class="develop">
-			<p>Retourne true si la branche est visible, false sinon</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu'un arbre a été créé auparavant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(branch.isVisible());</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">getId()</h4>
-			<div class="develop">
-			<p>Retourne l'identifiant (id) de la branche</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu'un arbre a été créé auparavant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(branch.getId());</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">changeId()</h4>
-			<div class="develop">
-			<p>Change l'identifiant (id) de la branche. Retourne true si tout est ok, false si l'id de la branche existe déjà dans l'arbre</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu'un arbre a été créé auparavant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">if</span> (branch.changeId(<span class="string">"newId"</span>)) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(<span class="string">"Changement ok"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;">} <span class="reserved">else</span> {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(<span class="string">"Cet id ("</span> + newId + <span class="string">") existe déjà"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">getText()</h4>
-			<div class="develop">
-			<p>Retourne le contenu de la branche</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu'un arbre a été créé auparavant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(branch.getText());</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 class="new" onclick="shownext(this)">getParent()</h4>
-			<div class="develop">
-			<p>Retourne la branche parente, si elle existe</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu'un arbre a été créé auparavant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> parent = branch.getParent();</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">if</span> (parent) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(parent.getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 class="new" onclick="shownext(this)">getParents()</h4>
-			<div class="develop">
-			<p>Retourne toutes les branches parentes. Le premier élément du tableau est le parent direct. Le dernier élément du tableau représente la racine</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu'un arbre a été créé auparavant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> parents = branch.getParents();</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">for</span> (<span class="reserved">var</span> i = 0; i &lt; parents.length; i++) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">if</span> (i &lt; parents.length - 1) {</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">alert</span>(<span class="string">"Parent : "</span> + parents[i].getId());</p></td></tr><tr><td><p style="padding-left:8ex;">} <span class="reserved">else</span> {</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">alert</span>(<span class="string">"Racine : "</span> + parents[i].getId());</p></td></tr><tr><td><p style="padding-left:8ex;">}</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 class="new" onclick="shownext(this)">getAncestor()</h4>
-			<div class="develop">
-			<p>Retourne la racine de la branche. Si on cherche l'ancêtre d'une racine, ça retournera "null"</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu'un arbre a été créé auparavant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> root = branch.getAncestor();</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">if</span> (root) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(root.getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">getFirstBranch()</h4>
-			<div class="develop">
-			<p>Retourne le premier enfant de la branche, null s'il n'y en a pas</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu'un arbre a été créé auparavant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> child = branch.getFirstBranch();</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">if</span> (child) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(child.getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">getLastBranch()</h4>
-			<div class="develop">
-			<p>Retourne le dernier enfant de la branche, null s'il n'y en a pas</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu'un arbre a été créé auparavant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> child = branch.getLastBranch();</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">if</span> (child) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(child.getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">getPreviousSibling()</h4>
-			<div class="develop">
-			<p>Retourne la branche soeur précédente, null s'il n'y en a pas</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu'un arbre a été créé auparavant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> sibling = branch.getPreviousSibling();</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">if</span> (sibling) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(sibling.getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">getNextSibling()</h4>
-			<div class="develop">
-			<p>Retourne la branche soeur suivante, null s'il n'y en a pas</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu'un arbre a été créé auparavant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> sibling = branch.getNextSibling();</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">if</span> (sibling) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(sibling.getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">getPreviousBranch()</h4>
-			<div class="develop">
-			<p>Retourne la branche précédente (pas forcément de même niveau), null s'il n'y en a pas</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu'un arbre a été créé auparavant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> previous = branch.getPreviousBranch();</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">if</span> (previous) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(previous.getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">getNextBranch()</h4>
-			<div class="develop">
-			<p>Retourne la branche suivante (pas forcément de même niveau), null s'il n'y en a pas</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu'un arbre a été créé auparavant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> next = branch.getNextBranch();</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">if</span> (next) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(next.getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">getPreviousOpenedBranch()</h4>
-			<div class="develop">
-			<p>Retourne la branche ouverte précédente (pas forcément de même niveau), null s'il n'y en a pas</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu'un arbre a été créé auparavant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> opened = branch.getPreviousOpenedBranch();</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">if</span> (opened) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(opened.getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">getNextOpenedBranch()</h4>
-			<div class="develop">
-			<p>Retourne la branche ouverte suivante (pas forcément de même niveau), null s'il n'y en a pas</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu'un arbre a été créé auparavant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> opened = branch.getNextOpenedBranch();</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">if</span> (opened) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(opened.getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">setText()</h4>
-			<div class="develop">
-			<h4>Paramètres</h4>
-			<table class="prop">
-				<tr><th>txt <em>(string)</em></th>
-
-					<td>Le nouveau texte de la branche</td></tr>
-			</table>
-			<p>Set le contenu de la branche</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu'un arbre a été créé auparavant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;">branch.setText(<span class="string">"Salut biscuit"</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">getChildren()</h4>
-			<div class="develop">
-			<p>Retourne les enfants de la branche</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu'un arbre a été créé auparavant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> children = branch.getChildren();</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">for</span> (<span class="reserved">var</span> i = 0; i &lt; children.length; i++) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(children[i].getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">getLevel()</h4>
-			<div class="develop">
-			<p>Retourne le niveau de la branche. La racine est au niveau 0</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu'un arbre a été créé auparavant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(branch.getLevel());</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">getIcon()</h4>
-			<div class="develop">
-			<p>Retourne l'icône de la branche lorsque celle-ci n'a pas d'enfants</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu'un arbre a été créé auparavant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(branch.getIcon());</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">getOpenIcon()</h4>
-			<div class="develop">
-			<p>Retourne l'icône de la branche lorsque celle-ci a des enfants et est ouverte</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu'un arbre a été créé auparavant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(branch.getOpenIcon());</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">getCloseIcon()</h4>
-			<div class="develop">
-			<p>Retourne l'icône de la branche lorsque celle-ci a des enfants et est fermée</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu'un arbre a été créé auparavant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(branch.getCloseIcon());</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 class="new" onclick="shownext(this)">getIconSelected()</h4>
-			<div class="develop">
-			<p>Retourne l'icône de la branche lorsque celle-ci n'a pas d'enfants et est sélectionnée</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu'un arbre a été créé auparavant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(branch.getIconSelected());</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 class="new" onclick="shownext(this)">getOpenIconSelected()</h4>
-			<div class="develop">
-			<p>Retourne l'icône de la branche lorsque celle-ci a des enfants et est ouverte et sélectionnée</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu'un arbre a été créé auparavant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(branch.getOpenIconSelected());</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 class="new" onclick="shownext(this)">getCloseIconSelected()</h4>
-			<div class="develop">
-			<p>Retourne l'icône de la branche lorsque celle-ci a des enfants et est fermée et sélectionnée</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu'un arbre a été créé auparavant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(branch.getCloseIconSelected());</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">getCurrentIcon()</h4>
-			<div class="develop">
-			<p>Retourne l'icône actuel de la branche</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu'un arbre a été créé auparavant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(branch.getCurrentIcon());</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">setIcons()</h4>
-			<div class="develop">
-			<h4>Paramètres</h4>
-			<table class="prop">
-				<tr><th>icon <em>(string)</em></th>
-
-					<td>L'icône si la branche n'a pas d'enfants</td></tr>
-				<tr class="classe"><th>iconOpen <em>(string)</em></th>
-					<td>L'icône si la branche a des enfants et est ouverte</td></tr>
-				<tr class="classe"><th>iconClose <em>(string)</em></th>
-					<td>L'icône si la branche a des enfants et est fermée</td></tr>
-
-			</table>
-			<p>Set les icônes de la branche. Si <strong>iconOpen</strong> ou <strong>iconClose</strong> ne sont pas renseignés, ils prennent la valeur de <strong>icon</strong></p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu'un arbre a été créé auparavant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// La branche aura page.g<span class="reserved">if</span> pour tous les états</span></p></td></tr><tr><td><p style="padding-left:4ex;">branch.setIcons(<span class="string">"page.gif"</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Ici, on distingue les différents états par différents</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// icônes</span></p></td></tr><tr><td><p style="padding-left:4ex;">branch.setIcons(<span class="string">"page.gif"</span>, <span class="string">"folderopen.gif"</span>, <span class="string">"folder.gif"</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 class="new" onclick="shownext(this)">setIconsSelected()</h4>
-			<div class="develop">
-			<h4>Paramètres</h4>
-			<table class="prop">
-				<tr><th>iconSelected <em>(string)</em></th>
-
-					<td>L'icône si la branche n'a pas d'enfants et est sélectionée</td></tr>
-				<tr class="classe"><th>iconOpenSelected <em>(string)</em></th>
-					<td>L'icône si la branche a des enfants et est ouverte et sélectionée</td></tr>
-				<tr class="classe"><th>iconCloseSelected <em>(string)</em></th>
-					<td>L'icône si la branche a des enfants et est fermée et sélectionée</td></tr>
-
-			</table>
-			<p>Set les icônes de la branche. Si <strong>iconOpenSelected</strong> ou <strong>iconCloseSelected</strong> ne sont pas renseignés, ils prennent respectivement les valeurs de <strong>iconOpen</strong> et <strong>iconClose</strong> (voir la fonction <em>setIcons()</em>)</p>
-
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu'un arbre a été créé auparavant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// La branche aura page.g<span class="reserved">if</span> comme état sélectionné si elle</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// n<span class="string">'a pas d'</span>enfants</span></p></td></tr><tr><td><p style="padding-left:4ex;">branch.setIconsSelected(<span class="string">"page.gif"</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Ici, on distingue les différents états par différents</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// icônes</span></p></td></tr><tr><td><p style="padding-left:4ex;">branch.setIconSelected(<span class="string">"page.gif"</span>, <span class="string">"folderopen.gif"</span>, <span class="string">"folder.gif"</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">isChild()</h4>
-			<div class="develop">
-			<h4>Paramètres</h4>
-			<table class="prop">
-				<tr><th>branch <em>(TafelTreeBranch, string)</em></th>
-
-					<td>La branche peut-être parente, ou juste son ID</td></tr>
-			</table>
-			<p>Méthode qui détermine si la branche est un enfant de celle passée en paramètre. Retourne true si la branche est effectivement une descendante.</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu'un arbre a été créé auparavant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(branch.isChild(<span class="string">"otherBranch"</span>));</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">openIt()</h4>
-			<div class="develop">
-			<h4>Paramètres</h4>
-			<table class="prop">
-				<tr><th>open <em>(boolean)</em></th>
-
-					<td>True pour ouvrir la branche, false pour la fermer</td></tr>
-			</table>
-			<p>Méthode qui permet d'ouvrir ou fermer la branche</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu'un arbre a été créé auparavant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;">branch.openIt(<span class="reserved">true</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">insertIntoFirst()</h4>
-			<div class="develop">
-			<h4>Paramètres</h4>
-			<table class="prop">
-				<tr><th>item <em>(object)</em></th>
-
-					<td>Un objet au format JSON correspondant à une TafelTreeBranch</td></tr>
-			</table>
-			<p>Méthode qui permet d'insérer une branche comme fille, en première de liste</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu'un arbre a été créé auparavant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> item = {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"id"</span> : <span class="string">"branch1"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"txt"</span> : <span class="string">"child first"</span></p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> newBranch = branch.insertIntoFirst(item);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(newBranch.getId());</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">insertIntoLast()</h4>
-			<div class="develop">
-			<h4>Paramètres</h4>
-			<table class="prop">
-				<tr><th>item <em>(object)</em></th>
-
-					<td>Un objet au format JSON correspondant à une TafelTreeBranch</td></tr>
-			</table>
-			<p>Méthode qui permet d'insérer une branche comme fille, en dernière de liste</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu'un arbre a été créé auparavant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> item = {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"id"</span> : <span class="string">"branch2"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"txt"</span> : <span class="string">"child last"</span></p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> newBranch = branch.insertIntoLast(item);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(newBranch.getId());</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">insertBefore()</h4>
-			<div class="develop">
-			<h4>Paramètres</h4>
-			<table class="prop">
-				<tr><th>item <em>(object)</em></th>
-
-					<td>Un objet au format JSON correspondant à une TafelTreeBranch</td></tr>
-			</table>
-			<p>Méthode qui permet d'insérer une branche comme soeur, juste avant elle</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu'un arbre a été créé auparavant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> item = {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"id"</span> : <span class="string">"branch3"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"txt"</span> : <span class="string">"sibling first"</span></p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> newBranch = branch.insertBefore(item);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(newBranch.getId());</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">insertAfter()</h4>
-			<div class="develop">
-			<h4>Paramètres</h4>
-			<table class="prop">
-				<tr><th>item <em>(object)</em></th>
-
-					<td>Un objet au format JSON correspondant à une TafelTreeBranch</td></tr>
-			</table>
-			<p>Méthode qui permet d'insérer une branche comme soeur, juste après elle</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu'un arbre a été créé auparavant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> item = {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"id"</span> : <span class="string">"branch4"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"txt"</span> : <span class="string">"sibling last"</span></p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> newBranch = branch.insertAfter(item);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(newBranch.getId());</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 class="new" onclick="shownext(this)">clone()</h4>
-			<div class="develop">
-			<p>Permet de cloner la strucutre de la branche. Ne créé pas une nouvelle branche. Elle ne fait que de retourner
-			la structure initiale.</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu'un arbre a été créé auparavant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> clonedStructure = branch.clone();</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;">clonedStructure.id = <span class="string">"newid"</span>;</p></td></tr><tr><td><p style="padding-left:4ex;">clonedStructure.txt = <span class="string">"Ma nouvelle branche clonée"</span>;</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> newBranch = branch.insertAfter(clonedStructure);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(newBranch.getId());</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			<h4>Notes</h4>
-			<ul>
-				<li>Ne créé pas la nouvelle branche dans l'arbre. Ne retourne que la structure</li>
-				<li>La structure est toujours au format JSON</li>
-			</ul>
-			</div>
-
-			<h4 onclick="shownext(this)">move()</h4>
-
-			<div class="develop">
-			<h4>Paramètres</h4>
-			<table class="prop">
-				<tr><th>here <em>(TafelTreeBranch, string)</em></th>
-					<td>La nouvelle branche parente, ou juste son ID</td></tr>
-			</table>
-			<p>Méthode qui permet de changer une branche de place, en la plaçant comme fille</p>
-
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu'un arbre a été créé auparavant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;">branch.move(<span class="string">"idNewParent"</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">moveBefore()</h4>
-			<div class="develop">
-			<h4>Paramètres</h4>
-			<table class="prop">
-				<tr><th>here <em>(TafelTreeBranch, string)</em></th>
-
-					<td>La branche soeur, ou juste son ID</td></tr>
-			</table>
-			<p>Méthode qui permet de changer une branche de place, en la plaçant comme soeur</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu'un arbre a été créé auparavant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;">branch.moveBefore(<span class="string">"idNewSibling"</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">closeSiblings()</h4>
-			<div class="develop">
-			<p>Ferme toutes les branches soeurs</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu'un arbre a été créé auparavant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;">branch.closeSiblings();</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">addClass()</h4>
-			<div class="develop">
-			<h4>Paramètres</h4>
-			<table class="prop">
-				<tr><th>class <em>(string)</em></th>
-
-					<td>La classe CSS à ajouter</td></tr>
-			</table>
-			<p>Méthode qui ajoute une classe CSS à la branche</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu'un arbre a été créé auparavant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;">branch.addClass(<span class="string">"myCSSclass"</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">removeClass()</h4>
-			<div class="develop">
-			<h4>Paramètres</h4>
-			<table class="prop">
-				<tr><th>class <em>(string)</em></th>
-
-					<td>La classe CSS à retirer</td></tr>
-			</table>
-			<p>Méthode qui retire une classe CSS à la branche</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu'un arbre a été créé auparavant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;">branch.removeClass(<span class="string">"myCSSclass"</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">removeChildren()</h4>
-			<div class="develop">
-			<p>Méthode qui supprime tous les enfants de la branche</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu'un arbre a été créé auparavant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;">branch.removeChildren();</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">hasAllChildrenChecked()</h4>
-			<div class="develop">
-			<p>Retourne 1 si tous les enfants de la branche sont checkés, 0 si aucuns ne le sont et -1 si certains le sont</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu'un arbre a été créé auparavant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(branch.hasAllChildrenChecked());</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">isChecked()</h4>
-			<div class="develop">
-			<p>Retourne 1 si la branche est checkée, 0 si elle ne l'est pas et -1 si elle est partiellement checkée</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu'un arbre a été créé auparavant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(branch.isChecked());</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">check()</h4>
-			<div class="develop">
-			<h4>Paramètres</h4>
-			<table class="prop">
-				<tr><th>check <em>(integer)</em></th>
-
-					<td>Le status à donner à la branche</td></tr>
-			</table>
-			<p>Passer 1 pour la checker, 0 pour la unchecker</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu'un arbre a été créé auparavant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;">branch.check(1);</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">select()</h4>
-			<div class="develop">
-			<p>Sélectionne la branche et place le focus dessus</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu'un arbre a été créé auparavant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;">branch.select();</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">unselect()</h4>
-			<div class="develop">
-			<p>Désélectionne la branche</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu'un arbre a été créé auparavant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branches = tree.getSelectedBranches();</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">if</span> (branches.length > 0) {</p></td></tr><tr><td><p style="padding-left:8ex;">branches[0].unselect();</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 class="new" onclick="shownext(this)">getWithinOffset()</h4>
-			<div class="develop">
-			<p>Récupère les coordonnées de la branche au sein de l'arbre</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu'un arbre a été créé auparavant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> pos = branch.getWithinOffset();</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(<span class="string">"Left : "</span> + pos[0] + <span class="string">", Top : "</span> + pos[1]);</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 class="new" onclick="shownext(this)">getAbsoluteOffset()</h4>
-			<div class="develop">
-			<p>Récupère les coordonnées de la branche dans l'écran</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu'un arbre a été créé auparavant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> pos = branch.getAbsoluteOffset();</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(<span class="string">"Left : "</span> + pos[0] + <span class="string">", Top : "</span> + pos[1]);</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-
-			<h2>Méthodes de TafelTreeBranch découlant de TafelTree</h2>
-
-			<h4 onclick="shownext(this)">serialize()</h4>
-			<div class="develop">
-			<h4>Paramètres</h4>
-			<table class="prop">
-
-				<tr><th>debug <em>(boolean)</em></th>
-					<td>Mettre true pour avoir un joli affichage du contenu de la branche. UNIQUEMENT POUR LE DEBUG. False par défaut</td></tr>
-			</table>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu'un arbre a été créé auparavant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On met <span class="reserved">true</span> pour visualiser et contrôler la string</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(branch.serialize(<span class="reserved">true</span>));</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On met rien pour traiter la string</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">new</span> Ajax.Request(<span class="string">"mapage.php"</span>, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"parameters"</span>: <span class="string">"tree="</span> + branch.serialize()</p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">countBranches()</h4>
-			<div class="develop">
-			<p>Compte le nombre de branches contenues dans la branche</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu'un arbre a été créé auparavant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(branch.countBranches());</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">getOpenedBranches()</h4>
-			<div class="develop">
-			<p>Retourne un tableau contenant les branches ouvertes sous la branche</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu'un arbre a été créé auparavant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branches = branch.getOpenedBranches();</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">for</span> (<span class="reserved">var</span> i = 0; i &lt; branches.length; i++) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(branches[i].getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">getCheckedBranches()</h4>
-			<div class="develop">
-			<p>Retourne un tableau contenant les branches checkées sous la branche</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu'un arbre a été créé auparavant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branches = branch.getCheckedBranches();</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">for</span> (<span class="reserved">var</span> i = 0; i &lt; branches.length; i++) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(branches[i].getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">getUnCheckedBranches()</h4>
-			<div class="develop">
-			<p>Retourne un tableau contenant les branches non checkées sous la branche</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu'un arbre a été créé auparavant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branches = branch.getUnCheckedBranches();</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">for</span> (<span class="reserved">var</span> i = 0; i &lt; branches.length; i++) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(branches[i].getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">getPartCheckedBranches()</h4>
-			<div class="develop">
-			<p>Retourne un tableau contenant les branches partiellement checkées sous la branche</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu'un arbre a été créé auparavant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branches = branch.getPartCheckedBranches();</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">for</span> (<span class="reserved">var</span> i = 0; i &lt; branches.length; i++) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(branches[i].getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">getParentBranches()</h4>
-			<div class="develop">
-			<p>Retourne un tableau contenant les branches qui ont des enfants</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu'un arbre a été créé auparavant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branches = branch.getParentBranches();</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">for</span> (<span class="reserved">var</span> i = 0; i &lt; branches.length; i++) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(branches[i].getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">getLeafBranches()</h4>
-			<div class="develop">
-			<p>Retourne un tableau contenant les branches qui n'ont pas d'enfants</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu'un arbre a été créé auparavant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branches = branch.getLeafBranches();</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">for</span> (<span class="reserved">var</span> i = 0; i &lt; branches.length; i++) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(branches[i].getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 class="new" onclick="shownext(this)">getBranches()</h4>
-			<div class="develop">
-				<h4>Paramètres</h4>
-				<table class="prop">
-					<tr><th>filter <em>(function)</em></th>
-
-						<td>La fonction utilisateur</td></tr>
-				</table>
-				<p>Retourne un tableau contenant toutes les branches sous celle-ci. On peut y mettre un filtre.</p>
-				<h4>Exemples</h4>
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr><tr><th>14</th></tr><tr><th>15</th></tr><tr><th>16</th></tr><tr><th>17</th></tr><tr><th>18</th></tr><tr><th>19</th></tr><tr><th>20</th></tr><tr><th>21</th></tr><tr><th>22</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu'un arbre a été créé auparavant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branches = branch.getBranches();</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">for</span> (<span class="reserved">var</span> i = 0; i &lt; branches.length; i++) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(branches[i].getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On peut filtrer les branches avec une fonction</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">function</span> myFilter (branch) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">if</span> (branch.getText() == <span class="string">"Celle-ci"</span>) {</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">return</span> <span class="reserved">true</span>;</p></td></tr><tr><td><p style="padding-left:8ex;">} <span class="reserved">else</span> {</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">return</span> <span class="reserved">false</span>;</p></td></tr><tr><td><p style="padding-left:8ex;">}</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branches = branch.getBranches(myFilter);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">for</span> (<span class="reserved">var</span> i = 0; i &lt; branches.length; i++) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(branches[i].getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">expend()</h4>
-			<div class="develop">
-			<p>Ouvre toutes les branches sous la branche</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu'un arbre a été créé auparavant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;">branch.expend();</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">collapse()</h4>
-			<div class="develop">
-			<p>Ferme toutes les branches sous la branche</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu'un arbre a été créé auparavant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;">branch.collapse();</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-
-			<h1>Méthodes TafelTree</h1>
-			<h2>Méthodes TafelTree statiques</h2>
-			<h4 onclick="shownext(this)">loadFromUL()</h4>
-			<div class="develop">
-			<h4>Paramètres</h4>
-
-			<table class="prop">
-				<tr>
-					<th>id <em>(string)</em></th>
-					<td>L'id de l'UL qui contient les informations</td>
-				</tr>
-				<tr class="classe">
-					<th>imgBase (optionnel) <em>(string)</em></th>
-
-					<td>Le chemin vers le dossier des images de l'arbre, " imgs/ " par défaut</td>
-				</tr>
-				<tr class="classe">
-					<th>width (optionnel) <em>(string ou integer)</em></th>
-					<td>La largeur max de l'arbre, " 100% " par défaut</td>
-				</tr>
-				<tr class="classe">
-
-					<th>height (optionnel) <em>(string ou integer)</em></th>
-					<td>La hauteur max de l'arbre, " auto " par défaut</td>
-				</tr>
-				<tr class="classe">
-					<th>options (optionnel) <em>(object)</em></th>
-					<td>Tout ce qui doit s'exécuter avant le generate(), génération comprise</td>
-
-				</tr>
-				<tr class="classe">
-					<th>debug (optionnel) <em>(boolean)</em></th>
-					<td>A True, Affiche la structure JSON mais ne créé pas l'arbre, false par défaut</td>
-				</tr>
-			</table>
-			<p>La génération par UL ne permet pas de gérer ses propres attributs. Pour ce qui est des fonctions de l'arbre, on doit les gérer via le paramètre <strong>options</strong>.
-			Pour plus de détails sur ce paramètre, voir <a href="#new">new TafelTree()</a></p>
-
-			<h4>Exemple</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr><tr><th>14</th></tr><tr><th>15</th></tr><tr><th>16</th></tr><tr><th>17</th></tr><tr><th>18</th></tr><tr><th>19</th></tr><tr><th>20</th></tr><tr><th>21</th></tr><tr><th>22</th></tr><tr><th>23</th></tr><tr><th>24</th></tr><tr><th>25</th></tr><tr><th>26</th></tr><tr><th>27</th></tr><tr><th>28</th></tr><tr><th>29</th></tr><tr><th>30</th></tr><tr><th>31</th></tr><tr><th>32</th></tr><tr><th>33</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;ul id=<span class="string">"idTree"</span>></p></td></tr><tr><td><p style="padding-left:4ex;">&lt;li id=<span class="string">"b1"</span> Timg=<span class="string">"base.gif"</span>>Mon texte&lt;/li></p></td></tr><tr><td><p style="padding-left:4ex;">&lt;li id=<span class="string">"b2"</span> Timg=<span class="string">"base.gif"</span>>Texte autre</p></td></tr><tr><td><p style="padding-left:8ex;">&lt;ul></p></td></tr><tr><td><p style="padding-left:12ex;">&lt;li id=<span class="string">"b3"</span> Timg=<span class="string">"page.gif"</span> >Enfant&lt;/li></p></td></tr><tr><td><p style="padding-left:12ex;">&lt;li id=<span class="string">"b4"</span> Timg=<span class="string">"page.gif"</span> Timgclose=<span class="string">"folder.gif"</span></p></td></tr><tr><td><p style="padding-left:16ex;">Timgopen=<span class="string">"folderopen.gif"</span>>Autre Enfant</p></td></tr><tr><td><p style="padding-left:16ex;">&lt;ul></p></td></tr><tr><td><p style="padding-left:20ex;">&lt;li id=<span class="string">"b5"</span> Timg=<span class="string">"page.gif"</span>>Enfant&lt;/li></p></td></tr><tr><td><p style="padding-left:20ex;">&lt;li id=<span class="string">"b6"</span> Timg=<span class="string">"page.gif"</span> Teditable=<span class="string">"1"</span>></p></td></tr><tr><td><p style="padding-left:24ex;">Autre Enfant&lt;/li></p></td></tr><tr><td><p style="padding-left:16ex;">&lt;/ul></p></td></tr><tr><td><p style="padding-left:12ex;">&lt;/li></p></td></tr><tr><td><p style="padding-left:8ex;">&lt;/ul></p></td></tr><tr><td><p style="padding-left:4ex;">&lt;/li></p></td></tr><tr><td><p style="padding-left:4ex;">&lt;li id=<span class="string">"b7"</span> Timg=<span class="string">"base.gif"</span>>Fin&lt;/li></p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/ul></p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">function</span> myFuncClick(branch) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(branch.getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = TafelTree.loadFromUL(<span class="string">"idTree"</span>, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"generate"</span> : <span class="reserved">true</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"imgBase"</span> : <span class="string">"imgs/"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"width"</span> : <span class="string">"300px"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"height"</span> : <span class="string">"250px"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onclick"</span> : myFuncClick,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"openAtLoad"</span> : <span class="reserved">true</span></p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			<h4>Notes</h4>
-			<ul>
-				<li>Les fonctions à faire avant la génération (génération comprise) sont chargées via le paramètre OPTIONS</li>
-				<li>Tous les attributs des branches sont précédés d'un " T " sauf l'id</li>
-				<li>Les attributs de branches sont les mêmes que pour le JSON</li>
-				<li>L'attribut n'est <em>JAMAIS</em> entre guillemets et son contenu est <em>ÉCHAPPÉ (simple quotes)</em> et <em>TOUJOURS</em> entre guillemets</li>
-
-				<li>Le contenu d'un attribut <em>NE DOIT PAS</em> contenir de double quotes (guillemets)</li>
-				<li>Il n'est pas possible d'assigner des attributs persos, malheureusement</li>
-			</ul>
-			</div>
-
-			<h2>Getter et setter TafelTree</h2>
-
-			<a name="new"></a>
-			<h4 onclick="shownext(this)">new TafelTree()</h4>
-			<div class="develop">
-			<h4>Paramètres</h4>
-			<table class="prop">
-				<tr>
-					<th>id <em>(string)</em></th>
-
-					<td>L'id du DIV qui contiendra l'ensemble de l'arbre</td>
-				</tr>
-				<tr>
-					<th>struct <em>(array)</em></th>
-					<td>La structure de l'arbre formatté JSON</td>
-				</tr>
-				<tr class="classe">
-
-					<th>imgBase (optionnel) <em>(string)</em></th>
-					<td>Le chemin vers le dossier des images de l'arbre, " imgs/ " par défaut</td>
-				</tr>
-				<tr class="classe">
-					<th>width (optionnel) <em>(string ou integer)</em></th>
-					<td>La largeur max de l'arbre, " 100% " par défaut</td>
-
-				</tr>
-				<tr class="classe">
-					<th>height (optionnel) <em>(string ou integer)</em></th>
-					<td>La hauteur max de l'arbre, " auto " par défaut</td>
-				</tr>
-				<tr class="classe">
-					<th>options (optionnel) <em>(object)</em></th>
-
-					<td>Tout ce qui doit s'exécuter avant le generate(), génération comprise</td>
-				</tr>
-			</table>
-			<h4>Exemple</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr><tr><th>14</th></tr><tr><th>15</th></tr><tr><th>16</th></tr><tr><th>17</th></tr><tr><th>18</th></tr><tr><th>19</th></tr><tr><th>20</th></tr><tr><th>21</th></tr><tr><th>22</th></tr><tr><th>23</th></tr><tr><th>24</th></tr><tr><th>25</th></tr><tr><th>26</th></tr><tr><th>27</th></tr><tr><th>28</th></tr><tr><th>29</th></tr><tr><th>30</th></tr><tr><th>31</th></tr><tr><th>32</th></tr><tr><th>33</th></tr><tr><th>34</th></tr><tr><th>35</th></tr><tr><th>36</th></tr><tr><th>37</th></tr><tr><th>38</th></tr><tr><th>39</th></tr><tr><th>40</th></tr><tr><th>41</th></tr><tr><th>42</th></tr><tr><th>43</th></tr><tr><th>44</th></tr><tr><th>45</th></tr><tr><th>46</th></tr><tr><th>47</th></tr><tr><th>48</th></tr><tr><th>49</th></tr><tr><th>50</th></tr><tr><th>51</th></tr><tr><th>52</th></tr><tr><th>53</th></tr><tr><th>54</th></tr><tr><th>55</th></tr><tr><th>56</th></tr><tr><th>57</th></tr><tr><th>58</th></tr><tr><th>59</th></tr><tr><th>60</th></tr><tr><th>61</th></tr><tr><th>62</th></tr><tr><th>63</th></tr><tr><th>64</th></tr><tr><th>65</th></tr><tr><th>66</th></tr><tr><th>67</th></tr><tr><th>68</th></tr><tr><th>69</th></tr><tr><th>70</th></tr><tr><th>71</th></tr><tr><th>72</th></tr><tr><th>73</th></tr><tr><th>74</th></tr><tr><th>75</th></tr><tr><th>76</th></tr><tr><th>77</th></tr><tr><th>78</th></tr><tr><th>79</th></tr><tr><th>80</th></tr><tr><th>81</th></tr><tr><th>82</th></tr><tr><th>83</th></tr><tr><th>84</th></tr><tr><th>85</th></tr><tr><th>86</th></tr><tr><th>87</th></tr><tr><th>88</th></tr><tr><th>89</th></tr><tr><th>90</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;div id=<span class="string">"idTree"</span>>&lt;/div></p></td></tr><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> myStruct = [</p></td></tr><tr><td><p style="padding-left:4ex;">{</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"id"</span> : <span class="string">"root"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"txt"</span> : <span class="string">"Root node"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"img"</span> : <span class="string">"base.gif"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"style"</span> : <span class="string">"cssBoldStyle"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"items"</span> : [</p></td></tr><tr><td><p style="padding-left:8ex;">{</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="string">"id"</span> : <span class="string">"node1"</span>,</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="string">"txt"</span> : <span class="string">"Node 1"</span>,</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="string">"img"</span> : <span class="string">"folderopen.gif"</span></p></td></tr><tr><td><p style="padding-left:8ex;">},</p></td></tr><tr><td><p style="padding-left:8ex;">{</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="string">"id"</span> : <span class="string">"music"</span>,</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="string">"txt"</span> : <span class="string">"My music"</span>,</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="string">"img"</span> : <span class="string">"musicfolder.gif"</span></p></td></tr><tr><td><p style="padding-left:8ex;">}</p></td></tr><tr><td><p style="padding-left:8ex;">]</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:4ex;">];</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"generate"</span> : <span class="reserved">true</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"imgBase"</span> : <span class="string">"imgs/"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"width"</span> : <span class="string">"300px"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"height"</span> : <span class="string">"150px"</span></p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Example using options</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> treeToBind = <span class="reserved">new</span> TafelTree(<span class="string">"idTreeToBind"</span>, structBind, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"generate"</span> : <span class="reserved">true</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"imgBase"</span> : <span class="string">"imgs/"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"width"</span> : <span class="string">"300px"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"height"</span> : <span class="string">"150px"</span></p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> treeToBind2 = <span class="reserved">new</span> TafelTree(<span class="string">"idTreeToBind2"</span>, structBind2, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"generate"</span> : <span class="reserved">true</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"imgBase"</span> : <span class="string">"imgs/"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"width"</span> : <span class="string">"300px"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"height"</span> : <span class="string">"150px"</span></p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"generate"</span> : <span class="reserved">true</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"imgBase"</span> : <span class="string">"imgs/"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"width"</span> : <span class="string">"300px"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"height"</span> : <span class="string">"250px"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"defaultImg"</span> : <span class="string">"page.gif"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"defaultImgOpen"</span> : <span class="string">"folderopen.gif"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"defaultImgClose"</span> : <span class="string">"folder.gif"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"defaultImgSelected"</span> : <span class="string">"page.gif"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"defaultImgOpenSelected"</span> : <span class="string">"folderopen.gif"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"defaultImgCloseSelected"</span> : <span class="string">"folder.gif"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onLoad"</span> : myFuncLoad,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onDebug"</span> : myFuncDebug,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onCheck"</span> : myFuncCheck,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onBeforeCheck"</span> : myFuncBeforeCheck,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onclick"</span> : myFuncClick,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onDblClick"</span> : myFuncDblClick,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onBeforeOpen"</span> : myFuncBeforeOpen,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onOpen"</span> : myFunconOpen,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onMouseOver"</span> : myFuncMouseOver,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onMouseOut"</span> : myFuncMouseOut,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onMouseDown"</span> : myFuncMouseDown,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onMouseUp"</span> : myFuncMouseUp,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onDrop"</span> : myFuncDrop,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onEdit"</span> : myFuncEdit,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onEditAjax"</span> : [myFuncEditAjax, <span class="string">"server/edit.php"</span>],</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onDropAjax"</span> : [myFuncDropAjax, <span class="string">"server/drop.php"</span>]</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onOpenPopulate"</span> : [myFuncOpenPopulate, <span class="string">"server/open.php"</span>],</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"multiline"</span> : <span class="reserved">false</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"checkboxes"</span> : <span class="reserved">false</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"checkboxesThreeState"</span> : <span class="reserved">false</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"cookies"</span> : <span class="reserved">true</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"openOneAtOnce"</span> : <span class="reserved">false</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"openAtLoad"</span> : <span class="reserved">true</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"openAfterAdd"</span> : <span class="reserved">true</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"showSelectedBranch"</span> : <span class="reserved">true</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"lineStyle"</span> : <span class="string">"line"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"rtlMode"</span> : <span class="reserved">false</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"dropALT"</span> : <span class="reserved">true</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"dropCTRL"</span> : <span class="reserved">false</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"propagateRestriction"</span> : <span class="reserved">true</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"reopenFromServer"</span> : <span class="reserved">true</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"behaviourDrop"</span> : <span class="string">"child"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"bind"</span> : [treeToBind],</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"bindAsUnidirectional"</span> : [treeToBind2]</p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">enableMultiline()</h4>
-			<div class="develop">
-			<h4>Paramètres</h4>
-			<table class="prop">
-				<tr>
-					<th>enable <em>(boolean)</em></th>
-
-					<td>True pour activer la gestion multi-ligne (par défaut, false)</td>
-				</tr>
-			</table>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe que la structure est définie en amont</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct);</p></td></tr><tr><td><p style="padding-left:4ex;">tree.enableMultiline(<span class="reserved">true</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Options</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"multiline"</span> : <span class="reserved">true</span></p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 class="new" onclick="shownext(this)">reopenFromServerAfterLoad()</h4>
-			<div class="develop">
-			<h4>Paramètres</h4>
-			<table class="prop">
-				<tr>
-					<th>enable <em>(boolean)</em></th>
-
-					<td>False pour ne pas ouvrir les noeuds qui ont leurs enfants sur le serveur après un reload, true par défaut</td>
-				</tr>
-			</table>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe que la structure est définie en amont</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct);</p></td></tr><tr><td><p style="padding-left:4ex;">tree.reopenFromServerAfterLoad(<span class="reserved">true</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Options</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"reopenFromServer"</span> : <span class="reserved">true</span></p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">enableCheckboxes()</h4>
-			<div class="develop">
-			<h4>Paramètres</h4>
-			<table class="prop">
-				<tr>
-					<th>enable <em>(boolean)</em></th>
-
-					<td>True pour activer la gestion des checkboxes à 2 états (par défaut, false)</td>
-				</tr>
-			</table>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe que la structure est définie en amont</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct);</p></td></tr><tr><td><p style="padding-left:4ex;">tree.enableCheckboxes(<span class="reserved">true</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Options</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"checkboxes"</span> : <span class="reserved">true</span></p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			<h4>Notes</h4>
-			<ul>
-				<li>Les checkboxes à deux états peuvent être soit " checked ", soit " unchecked "</li>
-				<li>Pour gérer 3 états, voir la fonction enableCheckboxesThreeState()</li>
-			</ul>
-			</div>
-
-			<h4 onclick="shownext(this)">enableCheckboxesThreeState()</h4>
-
-			<div class="develop">
-			<h4>Paramètres</h4>
-			<table class="prop">
-				<tr>
-					<th>enable <em>(boolean)</em></th>
-					<td>True pour activer la gestion des checkboxes à 3 états (par défaut, false)</td>
-				</tr>
-
-			</table>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe que la structure est définie en amont</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct);</p></td></tr><tr><td><p style="padding-left:4ex;">tree.enableCheckboxesThreeState(<span class="reserved">true</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Options</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"checkboxesThreeState"</span> : <span class="reserved">true</span></p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			<h4>Notes</h4>
-			<ul>
-				<li>Il n'y a pas besoin d'appeler la méthode enableCheckboxes().</li>
-			</ul>
-			</div>
-
-			<h4 onclick="shownext(this)">enableCookies()</h4>
-			<div class="develop">
-
-			<h4>Paramètres</h4>
-			<table class="prop">
-				<tr>
-					<th>enable <em>(boolean)</em></th>
-					<td>True pour activer les cookies (par défaut, true)</td>
-				</tr>
-				<tr class="classe">
-
-					<th>separator (optionnel) <em>(string)</em></th>
-					<td>Le séparateur utilisé dans les cookies (par défaut, " | ")</td>
-				</tr>
-			</table>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe que la structure est définie en amont</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct);</p></td></tr><tr><td><p style="padding-left:4ex;">tree.enableCookies(<span class="reserved">true</span>, <span class="string">"#___#"</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Options. On ne peut pas choisir le séparateur, depuis lé</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"cookies"</span> : <span class="reserved">true</span></p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			<h4>Notes</h4>
-			<ul>
-				<li>Les cookies permettent de se souvenir de quelles branches sont ouvertes</li>
-				<li>Changer le séparateur peut servir si une barre verticale fait partie de l'id des branches</li>
-			</ul>
-			</div>
-
-			<h4 onclick="shownext(this)">openOneAtOnce()</h4>
-
-			<div class="develop">
-			<h4>Paramètres</h4>
-			<table class="prop">
-				<tr>
-					<th>enable <em>(boolean)</em></th>
-					<td>True pour ne pouvoir ouvrir qu'une seule branche à la fois (par défaut, false)</td>
-				</tr>
-
-			</table>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe que la structure est définie en amont</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct);</p></td></tr><tr><td><p style="padding-left:4ex;">tree.openOneAtOnce(<span class="reserved">true</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Options</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"openOneAtOnce"</span> : <span class="reserved">true</span></p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">openAtLoad()</h4>
-			<div class="develop">
-			<h4>Paramètres</h4>
-			<table class="prop">
-				<tr>
-					<th>open <em>(boolean)</em></th>
-
-					<td>True pour avoir l'arbre ouvert après le premier load (par défaut, false)</td>
-				</tr>
-			</table>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe que la structure est définie en amont</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct);</p></td></tr><tr><td><p style="padding-left:4ex;">tree.openAtLoad(<span class="reserved">true</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Options</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"openAtLoad"</span> : <span class="reserved">true</span></p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			<h4>Notes</h4>
-			<ul>
-				<li>Lorsque les cookies sont activés, ceux-ci prennent le pas sur cette fonction</li>
-			</ul>
-			</div>
-
-			<h4 onclick="shownext(this)">openAfterAdd()</h4>
-			<div class="develop">
-
-			<h4>Paramètres</h4>
-			<table class="prop">
-				<tr>
-					<th>open <em>(boolean)</em></th>
-					<td>True pour avoir la branche qui s'ouvre après un insert ou un drop, false pour la garder fermée</td>
-				</tr>
-			</table>
-
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe que la structure est définie en amont</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct);</p></td></tr><tr><td><p style="padding-left:4ex;">tree.openAfterAdd(<span class="reserved">false</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Options</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"openAfterAdd"</span> : <span class="reserved">false</span></p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">showSelectedBranch()</h4>
-			<div class="develop">
-			<h4>Paramètres</h4>
-			<table class="prop">
-				<tr>
-					<th>show <em>(boolean)</em></th>
-
-					<td>True pour avoir la branche sélectionnée en surbrillance (par défaut, true)</td>
-				</tr>
-			</table>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe que la structure est définie en amont</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct);</p></td></tr><tr><td><p style="padding-left:4ex;">tree.showSelectedBranch(<span class="reserved">false</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Options</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"showSelectedBranch"</span> : <span class="reserved">false</span></p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">setLineStyle()</h4>
-			<div class="develop">
-			<h4>Paramètres</h4>
-			<table class="prop">
-				<tr>
-					<th>style <em>(string)</em></th>
-
-					<td>Le style choisi pour l'affichage de l'arbre (par défaut, " line ")</td>
-				</tr>
-			</table>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe que la structure est définie en amont</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct);</p></td></tr><tr><td><p style="padding-left:4ex;">tree.setLineStyle(<span class="string">"none"</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Options</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"lineStyle"</span> : <span class="string">"none"</span></p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			<h4>Notes</h4>
-			<ul>
-				<li>Les valeurs possibles sont " line ", " full " ou " none ".</li>
-			</ul>
-			</div>
-
-			<h4 onclick="shownext(this)">setIcons()</h4>
-			<div class="develop">
-
-			<h4>Paramètres</h4>
-			<table class="prop">
-				<tr><th>icon <em>(string)</em></th>
-					<td>L'icône si la branche n'a pas d'enfants</td></tr>
-				<tr class="classe"><th>iconOpen <em>(string)</em></th>
-					<td>L'icône si la branche a des enfants et est ouverte</td></tr>
-
-				<tr class="classe"><th>iconClose <em>(string)</em></th>
-					<td>L'icône si la branche a des enfants et est fermée</td></tr>
-			</table>
-			<p>Set les icônes par défaut des branches. Si <strong>iconOpen</strong> ou <strong>iconClose</strong> ne sont pas renseignés, ils prennent la valeur de <strong>icon</strong></p>
-
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe que la structure est définie en amont</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct);</p></td></tr><tr><td><p style="padding-left:4ex;">tree.setIcons(<span class="string">"page.gif"</span>, <span class="string">"folderopen.gif"</span>, <span class="string">"folder.gif"</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Options</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"defaultImg"</span> : <span class="string">"page.gif"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"defaultImgOpen"</span> : <span class="string">"folderopen.gif"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"defaultImgClose"</span> : <span class="string">"folder.gif"</span></p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 class="new" onclick="shownext(this)">setIconsSelected()</h4>
-			<div class="develop">
-			<h4>Paramètres</h4>
-			<table class="prop">
-				<tr><th>iconSelected <em>(string)</em></th>
-
-					<td>L'icône si la branche n'a pas d'enfants et est sélectionée</td></tr>
-				<tr class="classe"><th>iconOpenSelected <em>(string)</em></th>
-					<td>L'icône si la branche a des enfants et est ouverte et sélectionée</td></tr>
-				<tr class="classe"><th>iconCloseSelected <em>(string)</em></th>
-					<td>L'icône si la branche a des enfants et est fermée et sélectionée</td></tr>
-
-			</table>
-			<p>Set les icônes de la branche. Si <strong>iconOpenSelected</strong> ou <strong>iconCloseSelected</strong> ne sont pas renseignés, ils prennent respectivement les valeurs de <strong>iconOpen</strong> et <strong>iconClose</strong> (voir la fonction <em>setIcons()</em>)</p>
-
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe que la structure est définie en amont</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct);</p></td></tr><tr><td><p style="padding-left:4ex;">tree.setIconsSelected(<span class="string">"page.gif"</span>, <span class="string">"folderopen.gif"</span>, <span class="string">"folder.gif"</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Options</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"defaultImgSelected"</span> : <span class="string">"page.gif"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"defaultImgOpenSelected"</span> : <span class="string">"folderopen.gif"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"defaultImgCloseSelected"</span> : <span class="string">"folder.gif"</span></p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<a name="#behaviourDrop"></a>
-			<h4 class="new" onclick="shownext(this)">setBehaviourDrop()</h4>
-			<div class="develop">
-			<h4>Paramètres</h4>
-			<table class="prop">
-				<tr><th>dropStyle <em>(string)</em></th>
-
-					<td>'sibling', 'siblingcopy', 'child' ou 'childcopy', suivant le type de drop voulu, 'child' par défaut</td></tr>
-			</table>
-			<p>Set le comportement de drop par défaut. En mettant <strong>sibling</strong>, on droppera les branches comme soeur ou, en maintenant ALT appuyé, comme fille. Et inversément si on met <strong>child</strong>.</p>
-			<p>Si on opte pour <strong>siblingcopy</strong>, on droppera les branches comme soeur et sera un copie ou, en maintenant ALT + CTRL appuyé, comme fille et pas copie. En fait, ça inverse les comportements des touches ALT et CTRL. Le mieux pour comprendre, c'est d'essayer...</p>
-
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe que la structure est définie en amont</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct);</p></td></tr><tr><td><p style="padding-left:4ex;">tree.setBehaviourDrop(<span class="string">"sibling"</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Options</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"behaviourDrop"</span> : <span class="string">"sibling"</span></p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 class="new" onclick="shownext(this)">disableDropCTRL()</h4>
-			<div class="develop">
-			<h4>Paramètres</h4>
-			<table class="prop">
-				<tr><th>ctrlDrop <em>(boolean)</em></th>
-
-					<td>False désactive la fonctionnalité CTRL avec drop, la valeur par défaut est true</td></tr>
-			</table>
-			<p>En passant "false", la touche CTRL sera désactivée. Il ne sera plus possible de faire des copy-drag. Un copy-drag copie la branche drag&dropée à l'emplacement de drop. Un insertDrag déplace simplement la branche sans pour autant en créer une nouvelle.</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe que la structure est définie en amont</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct);</p></td></tr><tr><td><p style="padding-left:4ex;">tree.disableDropCTRL(<span class="reserved">false</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Options</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"dropCTRL"</span> : <span class="reserved">false</span></p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 class="new" onclick="shownext(this)">disableDropALT()</h4>
-			<div class="develop">
-			<h4>Arguments</h4>
-			<table class="prop">
-				<tr><th>altDrop <em>(string)</em></th>
-
-					<td>False désactive la fonctionnalité ALT avec drop, la valeur par défaut est true</td></tr>
-			</table>
-			<p>False enlève la possibilité d'avoir 2 différents types de drop. Soit "comme soeur" soit "comme fille". En passant "false", il ne
-			sera possible de faire que les types de drop définis par la fonction <a href="#">setBehaviourDrop()</a></p>
-			<h4>Samples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe que la structure est définie en amont</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct);</p></td></tr><tr><td><p style="padding-left:4ex;">tree.disableDropALT(<span class="reserved">false</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Options</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"dropALT"</span> : <span class="reserved">false</span></p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">propagateRestriction()</h4>
-			<div class="develop">
-			<h4>Paramètres</h4>
-			<table class="prop">
-				<tr>
-					<th>propagate <em>(boolean)</em></th>
-
-					<td>True pour propager l'interdiction de bouger après un drag&drop ajax (par défaut, true)</td>
-				</tr>
-			</table>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe que la structure est définie en amont</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct);</p></td></tr><tr><td><p style="padding-left:4ex;">tree.setOnDropAjax(myFunc, <span class="string">"mypage.php"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;">tree.propagateRestriction(<span class="reserved">false</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Options</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onDropAjax"</span> : [myFunc, <span class="string">"mypage.php"</span>],</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"propagateRestriction"</span> : <span class="reserved">false</span></p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			<h4>Notes</h4>
-			<ul>
-				<li>La propagation implique que les enfants de la branche droppée sont également bloqués (pour éviter des problèmes de croisements de données)</li>
-			</ul>
-			</div>
-
-			<h4 class="new" onclick="shownext(this)">enableRTL()</h4>
-			<div class="develop">
-
-			<h4>Paramètres</h4>
-			<table class="prop">
-				<tr>
-					<th>rtl <em>(boolean)</em></th>
-					<td>True pour avoir l'arbre qui se lit de droite à gauche (par défaut, false)</td>
-				</tr>
-			</table>
-
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe que la structure est définie en amont</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct);</p></td></tr><tr><td><p style="padding-left:4ex;">tree.enableRTL(<span class="reserved">true</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Options</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"rtlMode"</span> : <span class="reserved">true</span></p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-
-			<h2>Méthodes TafelTree publiques</h2>
-			<h4 onclick="shownext(this)">generate()</h4>
-			<div class="develop">
-			<h4>Paramètres</h4>
-			<table class="prop">
-
-				<tr>
-					<th>partLoad <em>(boolean)</em></th>
-					<td>True pour générer l'arbre petit-à-petit (expérimental), false par défaut</td>
-				</tr>
-			</table>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe que la structure est définie en amont</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct);</p></td></tr><tr><td><p style="padding-left:4ex;">tree.generate();</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On peut générer l"arbre petit-à-petit (pour les gros arbre)</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Attention, c"est vaguement expérimental;</span></p></td></tr><tr><td><p style="padding-left:4ex;">tree.generate(<span class="reserved">true</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">serialize()</h4>
-			<div class="develop">
-			<h4>Paramètres</h4>
-			<table class="prop">
-				<tr><th>debug <em>(boolean)</em></th>
-
-					<td>Mettre true pour avoir un joli affichage du contenu de l'arbre. UNIQUEMENT POUR LE DEBUG. False par défaut</td></tr>
-			</table>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr><tr><th>14</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe que la structure est définie en amont</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree(<span class="string">"idTree"</span>, myStruct);</p></td></tr><tr><td><p style="padding-left:4ex;">tree.generate();</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On met <span class="reserved">true</span> pour visualiser et contrôler la string</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(tree.serialize(<span class="reserved">true</span>));</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On met rien pour traiter la string</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">new</span> Ajax.Request(<span class="string">"mapage.php"</span>, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"parameters"</span> : <span class="string">"tree="</span> + tree.serialize()</p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">getSelectedBranches()</h4>
-			<div class="develop">
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu"un arbre a été généré en amont</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> selected = tree.getSelectedBranches();</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">if</span> (selected.length > 0) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">for</span> (<span class="reserved">var</span> i = 0; i &lt; selected.length; i++) {</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">alert</span>(selected[i].getId());</p></td></tr><tr><td><p style="padding-left:8ex;">}</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">getBranchById()</h4>
-			<div class="develop">
-			<h4>Paramètres</h4>
-			<table class="prop">
-				<tr><th>id <em>(string)</em></th>
-
-					<td>L'id de la branche</td></tr>
-			</table>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu"un arbre a été généré en amont</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch = tree.getBranchById(<span class="string">"idBranch"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(branch.getId();</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">bind()</h4>
-			<div class="develop">
-			<h4>Paramètres</h4>
-			<table class="prop">
-				<tr><th>tree <em>(TafelTree)</em></th>
-
-					<td>L'arbre avec lequel on veut faire le lien</td></tr>
-				<tr class="classe"><th>tree <em>(TafelTree)</em></th>
-					<td>Un autre arbre</td></tr>
-				<tr class="classe"><th>... <em>(TafelTree)</em></th>
-					<td>Autant d'autres arbres que l'on veut</td></tr>
-
-			</table>
-			<p>Le lien bi-directionnel permet de faire, en une fois, les liens drag&drop entre les arbres, dans les deux sens (arbre1 vers arbre2 et vice-versa)</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu"un arbre a été généré en amont</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// A noter dans ce cas qu"on pourra faire des drag&drop de</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// tree vers tree_2, et inversément</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree_2 = <span class="reserved">new</span> TafelTree(<span class="string">"idTree_2"</span>, myOtherStruct);</p></td></tr><tr><td><p style="padding-left:4ex;">tree.bind(tree_2);</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			<h4>Notes</h4>
-			<ul>
-				<li>Le lien sert à pouvoir faire des drag&drop entre les arbres</li>
-				<li>Ce lien est bi-directionnel</li>
-			</ul>
-			</div>
-
-			<h4 onclick="shownext(this)">bindAsUnidirecitonal()</h4>
-			<div class="develop">
-			<h4>Paramètres</h4>
-			<table class="prop">
-				<tr><th>tree <em>(TafelTree)</em></th>
-					<td>L'arbre avec lequel on veut faire le lien</td></tr>
-
-				<tr class="classe"><th>tree <em>(TafelTree)</em></th>
-					<td>Un autre arbre</td></tr>
-				<tr class="classe"><th>... <em>(TafelTree)</em></th>
-					<td>Autant d'autres arbres que l'on veut</td></tr>
-			</table>
-
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu"un arbre a été généré en amont</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// A noter dans ce cas qu"on ne pourra faire des drag&drop</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// que de tree vers tree_2 et pas inversément</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree_2 = <span class="reserved">new</span> TafelTree(<span class="string">"idTree_2"</span>, myOtherStruct);</p></td></tr><tr><td><p style="padding-left:4ex;">tree.bindAsUnidirecitonal(tree_2);</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			<h4>Notes</h4>
-			<ul>
-				<li>Le lien sert à pouvoir faire des drag&drop entre les arbres</li>
-				<li>Ce lien est uni-directionnel</li>
-			</ul>
-			</div>
-
-			<h4 onclick="shownext(this)">isBindedWith()</h4>
-			<div class="develop">
-			<h4>Paramètres</h4>
-			<table class="prop">
-				<tr><th>tree <em>(TafelTree)</em></th>
-					<td>L'arbre avec lequel on veut savoir s'il y a un lien</td></tr>
-
-			</table>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu"un arbre a été généré en amont</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree_2 = <span class="reserved">new</span> TafelTree(<span class="string">"idTree_2"</span>, myOtherStruct);</p></td></tr><tr><td><p style="padding-left:4ex;">tree.bindAsUnidirectional(tree_2);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(tree.isBindedWith(tree_2)); <span class="comment">// retourne <span class="reserved">true</span></span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(tree_2.isBindedWith(tree)); <span class="comment">// retourne <span class="reserved">false</span></span></p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">unselect()</h4>
-			<div class="develop">
-			<p>Déselectionne la branche, s'il y en avait une sélectionnée</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu"un arbre a été généré en amont</span></p></td></tr><tr><td><p style="padding-left:4ex;">tree.unselect();</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">countBranches()</h4>
-			<div class="develop">
-			<p>Compte le nombre de branches contenues dans l'arbre</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu"un arbre a été généré en amont</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(tree.countBranches());</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">getOpenedBranches()</h4>
-			<div class="develop">
-			<p>Retourne un tableau contenant les branches ouvertes</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// On part du principe qu"un arbre a été généré en amont</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branches = tree.getOpenedBranches();</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">for</span> (<span class="reserved">var</span> i = 0; i &lt; branches.length; i++) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(branches[i].getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">getCheckedBranches()</h4>
-			<div class="develop">
-			<p>Retourne un tableau contenant les branches checkées</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// On part du principe qu"un arbre a été généré en amont</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branches = tree.getCheckedBranches();</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">for</span> (<span class="reserved">var</span> i = 0; i &lt; branches.length; i++) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(branches[i].getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">getUnCheckedBranches()</h4>
-			<div class="develop">
-			<p>Retourne un tableau contenant les branches non checkées</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu"un arbre a été généré en amont</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branches = tree.getUnCheckedBranches();</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">for</span> (<span class="reserved">var</span> i = 0; i &lt; branches.length; i++) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(branches[i].getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">getPartCheckedBranches()</h4>
-			<div class="develop">
-			<p>Retourne un tableau contenant les branches partiellement checkées</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu"un arbre a été généré en amont</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branches = tree.getPartCheckedBranches();</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">for</span> (<span class="reserved">var</span> i = 0; i &lt; branches.length; i++) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(branches[i].getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">getParentBranches()</h4>
-			<div class="develop">
-			<p>Retourne un tableau contenant les branches qui ont des enfants</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu"un arbre a été généré en amont</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branches = tree.getParentBranches();</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">for</span> (<span class="reserved">var</span> i = 0; i &lt; branches.length; i++) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(branches[i].getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">getLeafBranches()</h4>
-			<div class="develop">
-			<p>Retourne un tableau contenant les branches qui n'ont pas d'enfants</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu"un arbre a été généré en amont</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branches = tree.getLeafBranches();</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">for</span> (<span class="reserved">var</span> i = 0; i &lt; branches.length; i++) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(branches[i].getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 class="new" onclick="shownext(this)">getBranches()</h4>
-			<div class="develop">
-				<h4>Paramètres</h4>
-				<table class="prop">
-					<tr><th>filter <em>(function)</em></th>
-
-						<td>La fonction utilisateur</td></tr>
-				</table>
-				<p>Retourne un tableau contenant toutes les branches de l'arbre. On peut y mettre un filtre.</p>
-				<h4>Exemples</h4>
-				<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr><tr><th>14</th></tr><tr><th>15</th></tr><tr><th>16</th></tr><tr><th>17</th></tr><tr><th>18</th></tr><tr><th>19</th></tr><tr><th>20</th></tr><tr><th>21</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu'un arbre a été créé auparavant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branches = tree.getBranches();</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">for</span> (<span class="reserved">var</span> i = 0; i &lt; branches.length; i++) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(branches[i].getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On peut filtrer les branches avec une fonction</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">function</span> myFilter (branch) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">if</span> (branch.getText() == <span class="string">"Celle-ci"</span>) {</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">return</span> <span class="reserved">true</span>;</p></td></tr><tr><td><p style="padding-left:8ex;">} <span class="reserved">else</span> {</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">return</span> <span class="reserved">false</span>;</p></td></tr><tr><td><p style="padding-left:8ex;">}</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branches = tree.getBranches(myFilter);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">for</span> (<span class="reserved">var</span> i = 0; i &lt; branches.length; i++) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(branches[i].getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">expend()</h4>
-			<div class="develop">
-			<p>Ouvre toutes les branches</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu"un arbre a été généré en amont</span></p></td></tr><tr><td><p style="padding-left:4ex;">tree.expend();</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">collapse()</h4>
-			<div class="develop">
-			<p>Ferme toutes les branches</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu"un arbre a été généré en amont</span></p></td></tr><tr><td><p style="padding-left:4ex;">tree.collapse();</p></td></tr><tr><td><p style="padding-left:4ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">insertBranch()</h4>
-			<div class="develop">
-			<h4>Paramètres</h4>
-			<table class="prop">
-				<tr><th>position <em>(TafelTreeBranch, string)</em></th>
-
-					<td>La branche source (ou juste l'id)</td></tr>
-				<tr><th>item <em>(object)</em></th>
-					<td>La nouvelle branche (au format <a href="#tag"><em>TafelTreeBranch properties</em></a>)</td></tr>
-				<tr class="classe"><th>sibling <em>(boolean)</em></th>
-					<td>True pour indiquer qu'on veut l'insérer en tant que soeur, par défaut false</td></tr>
-
-				<tr class="classe"><th>first <em>(boolean)</em></th>
-					<td>True pour indiquer qu'on veut l'insérer avant ou en premier, false par défaut</td></tr>
-			</table>
-			<p>Premet de rajouter une branche comme fille ou comme soeur, avant ou après la branche désirée</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr><tr><th>14</th></tr><tr><th>15</th></tr><tr><th>16</th></tr><tr><th>17</th></tr><tr><th>18</th></tr><tr><th>19</th></tr><tr><th>20</th></tr><tr><th>21</th></tr><tr><th>22</th></tr><tr><th>23</th></tr><tr><th>24</th></tr><tr><th>25</th></tr><tr><th>26</th></tr><tr><th>27</th></tr><tr><th>28</th></tr><tr><th>29</th></tr><tr><th>30</th></tr><tr><th>31</th></tr><tr><th>32</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu"un arbre a été généré en amont</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> item = {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"id"</span>:<span class="string">"new1"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"img"</span>:<span class="string">"page.gif"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"txt"</span>:<span class="string">"child before"</span></p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> item2 = {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"id"</span>:<span class="string">"new2"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"img"</span>:<span class="string">"page.gif"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"txt"</span>:<span class="string">"child after"</span></p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> item3 = {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"id"</span>:<span class="string">"new3"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"img"</span>:<span class="string">"page.gif"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"txt"</span>:<span class="string">"sibling before"</span></p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> item4 = {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"id"</span>:<span class="string">"new4"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"img"</span>:<span class="string">"page.gif"</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"txt"</span>:<span class="string">"sibling after"</span></p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Branche fille (enfant) - en premier</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch1 = tree.insertBranch(<span class="string">"id_branch"</span>, item, <span class="reserved">false</span>, <span class="reserved">true</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Branche fille (enfant) - en dernier</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch2 = tree.insertBranch(<span class="string">"id_branch"</span>, item2, <span class="reserved">false</span>, <span class="reserved">false</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Branche soeur - avant</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch3 = tree.insertBranch(<span class="string">"id_branch"</span>, item3, <span class="reserved">true</span>, <span class="reserved">true</span>);</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Branche soeur - après</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> branch4 = tree.insertBranch(<span class="string">"id_branch"</span>, item4, <span class="reserved">true</span>, <span class="reserved">false</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">removeBranch()</h4>
-			<div class="develop">
-			<h4>Paramètres</h4>
-			<table class="prop">
-				<tr><th>branch <em>(TafelTreeBranch, string)</em></th>
-
-					<td>La branche source (ou juste l'id)</td></tr>
-			</table>
-			<p>Supprime la branche est toutes ses filles</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu"un arbre a été généré en amont</span></p></td></tr><tr><td><p style="padding-left:4ex;">tree.removeBranch(<span class="string">"id_branch_to_delete"</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">debug()</h4>
-			<div class="develop">
-			<h4>Paramètres</h4>
-			<table class="prop">
-				<tr><th>str <em>(string)</em></th>
-
-					<td>Le texte à afficher</td></tr>
-			</table>
-			<p>Affiche un texte dans la zone de débug</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On part du principe qu"un arbre a été généré en amont</span></p></td></tr><tr><td><p style="padding-left:4ex;">tree.debug(<span class="string">"text to debug : "</span> + tree.id);</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h2>Méthodes TafelTree d'événements</h2>
-			<h4 onclick="shownext(this)">setOnDebug()</h4>
-			<div class="develop">
-			<h4>Paramètres</h4>
-			<table class="prop">
-				<tr><th>func <em>(function)</em></th>
-
-					<td>La méthode à appeler</td></tr>
-			</table>
-			<p>Méthode qui est appelée lorsqu'on fait appel à tree.debug()</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr><tr><th>14</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Fonction utilisateur</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">function</span> myDebug (tree, HTMLDebugObj, str) {</p></td></tr><tr><td><p style="padding-left:8ex;">HTMLDebugObj.innerHTML = <span class="string">"Ma fonction : "</span> + str;</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree (<span class="string">"idtree"</span>, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"generate"</span> : <span class="reserved">true</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onDebug"</span> : myDebug</p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;">tree.debug(<span class="string">"text to debug"</span>);</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			<h4>Notes</h4>
-			<ul>
-				<li>Par défaut, la méthode tree.debug() affiche simplement le texte dans le HTMLDebugObj</li>
-			</ul>
-			</div>
-
-			<h4 onclick="shownext(this)">setOnLoad()</h4>
-			<div class="develop">
-
-			<h4>Paramètres</h4>
-			<table class="prop">
-				<tr><th>func <em>(function)</em></th>
-					<td>La méthode à appeler</td></tr>
-			</table>
-			<p>Méthode qui est appelée lorsque l'arbre a fini de loader (en le générant avec true : <strong>tree.generate(true)</strong>)</p>
-
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Fonction utilisateur</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">function</span> myLoad () {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(<span class="string">"load terminé"</span>);</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree (<span class="string">"idtree"</span>, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"generate"</span> : <span class="reserved">true</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onLoad"</span> : myLoad</p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">setOnOpen()</h4>
-			<div class="develop">
-			<h4>Paramètres</h4>
-			<table class="prop">
-				<tr><th>func <em>(function)</em></th>
-
-					<td>La méthode à appeler</td></tr>
-			</table>
-			<p>Méthode qui est appelée après qu'une branche ait été ouverte (<em>status = true</em>) ou fermée (<em>status = false</em>)</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Fonction utilisateur</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">function</span> myOpen (branch, status) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">var</span> str = (status) ? <span class="string">"ouverte"</span> : <span class="string">"fermée"</span>;</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(branch.getId() + <span class="string">" a été "</span> + str);</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree (<span class="string">"idtree"</span>, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"generate"</span> : <span class="reserved">true</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onOpen"</span> : myOpen</p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">setOnBeforeOpen()</h4>
-			<div class="develop">
-			<h4>Paramètres</h4>
-			<table class="prop">
-				<tr><th>func <em>(function)</em></th>
-
-					<td>La méthode à appeler</td></tr>
-			</table>
-			<p>Méthode qui est appelée avant qu'une branche soit ouverte (<em>status = true</em>) ou fermée (<em>status = false</em>). Si elle retourne <strong>false</strong>, la branche conservera son status actuel.</p>
-			<h4>Exemples</h4>
-
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr><tr><th>14</th></tr><tr><th>15</th></tr><tr><th>16</th></tr><tr><th>17</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// Fonction utilisateur</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">function</span> myBeforeOpen (branch, status) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">var</span> strNow = (status) ? <span class="string">"ouverte"</span> : <span class="string">"fermée"</span>;</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">var</span> strNext = (status) ? <span class="string">"fermée"</span> : <span class="string">"ouverte"</span>;</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(branch.getId() + <span class="string">" est actuellement "</span> + strNow +</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="string">" et sera donc "</span> + strNext +</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="string">" si cette fonction retourne <span class="reserved">true</span>"</span>);</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">return</span> <span class="reserved">true</span>;</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree (<span class="string">"idtree"</span>, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"generate"</span> : <span class="reserved">true</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onBeforeOpen"</span> : myBeforeOpen</p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">setOnMouseOver()</h4>
-			<div class="develop">
-			<h4>Paramètres</h4>
-			<table class="prop">
-				<tr><th>func <em>(function)</em></th>
-
-					<td>La méthode à appeler</td></tr>
-			</table>
-			<p>Méthode qui est appelée lorsque la souris passe sur la branche</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Fonction utilisateur</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">function</span> myMouseOver (branch) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(<span class="string">"over : "</span> + branch.getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree (<span class="string">"idtree"</span>, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"generate"</span> : <span class="reserved">true</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onMouseOver"</span> : myMouseOver</p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">setOnMouseOut()</h4>
-			<div class="develop">
-			<h4>Paramètres</h4>
-			<table class="prop">
-				<tr><th>func <em>(function)</em></th>
-
-					<td>La méthode à appeler</td></tr>
-			</table>
-			<p>Méthode qui est appelée lorsque la souris n'est plus sur la branche</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Fonction utilisateur</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">function</span> myMouseOut (branch) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(<span class="string">"out : "</span> + branch.getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree (<span class="string">"idtree"</span>, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"generate"</span> : <span class="reserved">true</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onMouseOut"</span> : myMouseOut</p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 class="new" onclick="shownext(this)">setOnMouseDown()</h4>
-			<div class="develop">
-			<h4>Paramètres</h4>
-			<table class="prop">
-				<tr><th>func <em>(function)</em></th>
-
-					<td>La méthode à appeler</td></tr>
-			</table>
-			<p>Méthode qui est appelée lorsqu'on fait un "mouse down" sur la branche</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// User <span class="reserved">function</span></span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">function</span> myMouseDown (branch) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(<span class="string">"down : "</span> + branch.getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree (<span class="string">"idtree"</span>, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"generate"</span> : <span class="reserved">true</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onMouseDown"</span> : myMouseDown</p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 class="new" onclick="shownext(this)">setOnMouseUp()</h4>
-			<div class="develop">
-			<h4>Paramètres</h4>
-			<table class="prop">
-				<tr><th>func <em>(function)</em></th>
-
-					<td>La méthode à appeler</td></tr>
-			</table>
-			<p>Méthode qui est appelée lorsqu'on fait un "mouse up" sur la branche</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// User <span class="reserved">function</span></span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">function</span> myMouseUp (branch) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(<span class="string">"up : "</span> + branch.getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree (<span class="string">"idtree"</span>, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"generate"</span> : <span class="reserved">true</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onMouseUp"</span> : myMouseUp</p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">setOnClick()</h4>
-			<div class="develop">
-			<h4>Paramètres</h4>
-			<table class="prop">
-				<tr><th>func <em>(function)</em></th>
-
-					<td>La méthode à appeler</td></tr>
-			</table>
-			<p>Méthode qui est appelée lorsqu'on clique sur la branche</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Fonction utilisateur</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">function</span> myClick (branch) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(branch.getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree (<span class="string">"idtree"</span>, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"generate"</span> : <span class="reserved">true</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onclick"</span> : myClick</p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			<h4>Notes</h4>
-			<ul>
-				<li>Quoiqu'il arrive, la branche sur laquelle on clique sera sélectionnée</li>
-			</ul>
-			</div>
-
-			<h4 onclick="shownext(this)">setOnDblClick()</h4>
-			<div class="develop">
-
-			<h4>Paramètres</h4>
-			<table class="prop">
-				<tr><th>func <em>(function)</em></th>
-					<td>La méthode à appeler</td></tr>
-			</table>
-			<p>Méthode qui est appelée lorsqu'on double-clique sur la branche</p>
-
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Fonction utilisateur</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">function</span> myDblClick (branch) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(branch.getId());</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree (<span class="string">"idtree"</span>, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"generate"</span> : <span class="reserved">true</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onDblClick"</span> : myDblClick</p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">setOnEdit()</h4>
-			<div class="develop">
-			<h4>Paramètres</h4>
-			<table class="prop">
-				<tr><th>func <em>(function)</em></th>
-
-					<td>La méthode à appeler</td></tr>
-			</table>
-			<p>Active l'édition des branches. Méthode qui est appelée lorsqu'on fini d'éditer une branche (concrétement, lors du blur du champ texte). Le contenu de la branche sera celui que la fonction utilisateur retournera.</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Fonction utilisateur</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">function</span> myEdit (branch, newValue, oldValue) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">var</span> str = branch.getId() + <span class="string">" : "</span> + newValue;</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">return</span> str;</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree (<span class="string">"idtree"</span>, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"generate"</span> : <span class="reserved">true</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onEdit"</span> : myEdit</p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			<h4>Notes</h4>
-			<ul>
-				<li>Lorsqu'on a une fonction assignée en double-clic <em>(tree.setOnDblClick())</em>, l'utilisation du onEdit disparaît. C'est soit l'un, soit l'autre</li>
-			</ul>
-			</div>
-
-			<h4 onclick="shownext(this)">setOnBeforeCheck()</h4>
-
-			<div class="develop">
-			<h4>Paramètres</h4>
-			<table class="prop">
-				<tr><th>func <em>(function)</em></th>
-					<td>La méthode à appeler</td></tr>
-			</table>
-			<p>Méthode qui est appelée lorsqu'on check ou uncheck la branche, juste avant qu'elle change de status. Pour ne pas changer son status, il faut retourner <strong>false</strong></p>
-
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr><tr><th>14</th></tr><tr><th>15</th></tr><tr><th>16</th></tr><tr><th>17</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Fonction utilisateur</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">function</span> myBeforeCheck (branch, status) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">var</span> strNow = (status) ? <span class="string">"checkée"</span> : <span class="string">"uncheckée"</span>;</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">var</span> strNext = (status) ? <span class="string">"uncheckée"</span> : <span class="string">"checkée"</span>;</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(branch.getId() + <span class="string">" est actuellement "</span> + strNow +</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="string">" et sera "</span> + strNext +</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="string">" si cette fonction retourne <span class="reserved">true</span>"</span>);</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">return</span> <span class="reserved">true</span>;</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree (<span class="string">"idtree"</span>, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"generate"</span> : <span class="reserved">true</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onBeforeCheck"</span> : myBeforeCheck</p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 onclick="shownext(this)">setOnCheck()</h4>
-			<div class="develop">
-			<h4>Paramètres</h4>
-			<table class="prop">
-				<tr><th>func <em>(function)</em></th>
-
-					<td>La méthode à appeler</td></tr>
-			</table>
-			<p>Méthode qui est appelée lorsqu'on check ou uncheck la branche</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Fonction utilisateur</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">function</span> myCheck (branch, status) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">var</span> str = (status) ? <span class="string">"checkée"</span> : <span class="string">"uncheckée"</span>;</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(branch.getId() + <span class="string">" est maintenant "</span> + str);</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree (<span class="string">"idtree"</span>, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"generate"</span> : <span class="reserved">true</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onCheck"</span> : myCheck</p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 class="new" onclick="shownext(this)">setOnDrop()</h4>
-			<div class="develop">
-			<h4>Paramètres</h4>
-			<table class="prop">
-				<tr><th>func <em>(function)</em></th>
-
-					<td>La méthode à appeler</td></tr>
-			</table>
-			<p>Active le drag&dorp. Méthode qui est appelée lorsqu'on drop la branche. On peut faire un "drop as sibling (frère)" en gardant la touche <strong>ALT</strong> appuyée. Il est également possible de faire un "copydrag" en maintenant la touche <strong>CONTROL</strong> appuyée.</p>
-			<p>La méthode est appelée deux fois. Une fois avant que le drop soit fait (drop_finished = false) et une fois après que le drop soit fait (drop_finished = true), pour autant qu'il n'y ait pas eu d'erreurs avant.</p>
-
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr><tr><th>14</th></tr><tr><th>15</th></tr><tr><th>16</th></tr><tr><th>17</th></tr><tr><th>18</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Fonction utilisateur</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">function</span> myDrop (branchMoved, newParent, dropFinished) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">if</span> (!dropFinished) {</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">alert</span>(branchMoved.getId() + <span class="string">" sera fille de "</span></p></td></tr><tr><td><p style="padding-left:16ex;">+ newParent.getId());</p></td></tr><tr><td><p style="padding-left:8ex;">} <span class="reserved">else</span> {</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">alert</span>(branchMoved.getId() + <span class="string">" est maintenant fille de "</span></p></td></tr><tr><td><p style="padding-left:16ex;">+ newParent.getId());</p></td></tr><tr><td><p style="padding-left:8ex;">}</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree (<span class="string">"idtree"</span>, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"generate"</span> : <span class="reserved">true</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onDrop"</span> : myDrop</p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			<h4>Notes</h4>
-			<ul>
-				<li>Maintenir ALT pour dropper "as sibling"</li>
-				<li>Maintenir CONTROL pour faire un "copydrag"</li>
-			</ul>
-			</div>
-
-			<h4 class="new" onclick="shownext(this)">setOnDropAjax()</h4>
-
-			<div class="develop">
-			<h4>Paramètres</h4>
-			<table class="prop">
-				<tr><th>func <em>(function)</em></th>
-					<td>La méthode à appeler</td></tr>
-				<tr><th>link <em>(string)</em></th>
-
-					<td>Le lien vers la page de traitement coté serveur</td></tr>
-			</table>
-			<p>Active le drag&dorp. Méthode qui est appelée lorsqu'on drop la branche et qui envoie du même coup une requête Ajax. On peut faire un "drop as sibling (frère)" en gardant la touche <strong>ALT</strong> appuyée. Il est également possible de faire un "copydrag" en maintenant la touche <strong>CONTROL</strong> appuyée. Pour d'autres exemples, voir <a href="#ondropajax">Drop Ajax </a></p>
-
-			<p>La méthode est appelée deux fois. Une fois avant que le drop soit fait (drop_finished = false) et une fois après que le drop soit fait (drop_finished = true), pour autant qu'il n'y ait pas eu d'erreurs avant.</p>
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr><tr><th>14</th></tr><tr><th>15</th></tr><tr><th>16</th></tr><tr><th>17</th></tr><tr><th>18</th></tr><tr><th>19</th></tr><tr><th>20</th></tr><tr><th>21</th></tr><tr><th>22</th></tr><tr><th>23</th></tr><tr><th>24</th></tr><tr><th>25</th></tr><tr><th>26</th></tr><tr><th>27</th></tr><tr><th>28</th></tr><tr><th>29</th></tr><tr><th>30</th></tr><tr><th>31</th></tr><tr><th>32</th></tr><tr><th>33</th></tr><tr><th>34</th></tr><tr><th>35</th></tr><tr><th>36</th></tr><tr><th>37</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Fonction utilisateur</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">function</span> myDrop(branchMoved,newParent,response,dropFinished){</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// On check avant que le drop soit fait</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">if</span> (!dropFinished) {</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="comment">// La réponse correspond au responseText de</span></p></td></tr><tr><td><p style="padding-left:12ex;"><span class="comment">// l'objet XMLHttpRequest</span></p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">alert</span>(response);</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="comment">// Il peut tout-à-fait s'agir d"une string JSON,</span></p></td></tr><tr><td><p style="padding-left:12ex;"><span class="comment">// auquel cas on peut l'évaluer comme ceci :</span></p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">var</span> obj = eval(<span class="string">"("</span> + response + <span class="string">")"</span>);</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">alert</span>(obj.myProperty);</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">alert</span>(branchMoved.getId() + <span class="string">" sera fille de "</span> +</p></td></tr><tr><td><p style="padding-left:16ex;">newParent.getId() +</p></td></tr><tr><td><p style="padding-left:16ex;"><span class="string">" si cette fonction retourne <span class="reserved">true</span>"</span>);</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">return</span> <span class="reserved">true</span>;</p></td></tr><tr><td><p style="padding-left:8ex;">}</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree (<span class="string">"idtree"</span>, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"generate"</span> : <span class="reserved">true</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onDropAjax"</span> : [myDrop, <span class="string">"pageScript.php"</span>]</p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// Exemple de fichier PHP coté serveur</span></p></td></tr><tr><td><p style="padding-left:0ex;"><span class="php">&lt;?php</span></p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// On fait divers traitements</span></p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// ...</span></p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// Et on affiche une string JSON</span></p></td></tr><tr><td><p style="padding-left:0ex;"><span class="php">?&gt;</span></p></td></tr><tr><td><p style="padding-left:0ex;">({</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="string">"myProperty"</span> : <span class="string">"myValue"</span>,</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="string">"other"</span> : [<span class="string">"this"</span>, <span class="string">"is"</span>, <span class="string">"an"</span>, <span class="string">"array"</span>]</p></td></tr><tr><td><p style="padding-left:0ex;">})</p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			<h4>Notes</h4>
-			<ul>
-				<li>Maintenir ALT pour dropper "as sibling"</li>
-				<li>Maintenir CONTROL pour faire un "copydrag"</li>
-				<li>Les variables envoyées à la page <a href="#droplink">droplink</a> passent par la méthode POST</li>
-
-				<li>Ces variables sont :
-					<ul>
-						<li>" drag " = description JSON de la branche qui a bougé</li>
-						<li>" drop " = description JSON de la branche sur laquelle on a déposé le drag</li>
-						<li>" drag_id " = id de la branche qui a bougé</li>
-						<li>" drop_id " = id de la branche sur laquelle on a déposé le drag_id</li>
-						<li>" treedrag_id " = id de l'arbre d'où est tiré la branche qui a bougé</li>
-
-						<li>" treedrop_id " = id de l'arbre qui accueille la branche qui a bougé</li>
-						<li>" sibling " = 0 si on le drop est comme fils, 1 s'il est comme frère</li>
-					</ul>
-				</li>
-				<li>Toutes autres variables passée par <a href="#droplink">droplink</a> sont également transmises en POST. Par exemple, si droplink = "page.php?spec=1", on récuperera <em>spec</em> en POST malgré tout.</li>
-
-			</ul>
-			</div>
-
-			<h4 onclick="shownext(this)">setOnOpenPopulate()</h4>
-			<div class="develop">
-			<h4>Paramètres</h4>
-			<table class="prop">
-				<tr><th>func <em>(function)</em></th>
-
-					<td>La méthode à appeler</td></tr>
-				<tr><th>link <em>(string)</em></th>
-					<td>Le lien vers la page de traitement coté serveur</td></tr>
-			</table>
-			<p>Active la remplissage des enfants au moment de l'ouverture de la branche. Méthode qui est appelée lorsqu'on ouvre la branche et qui envoie du même coup une requête Ajax. Pour d'autres exemples, voir <a href="#onopenpopulate">onopenpopulate</a></p>
-			<h4>Exemples</h4>
-
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr><tr><th>14</th></tr><tr><th>15</th></tr><tr><th>16</th></tr><tr><th>17</th></tr><tr><th>18</th></tr><tr><th>19</th></tr><tr><th>20</th></tr><tr><th>21</th></tr><tr><th>22</th></tr><tr><th>23</th></tr><tr><th>24</th></tr><tr><th>25</th></tr><tr><th>26</th></tr><tr><th>27</th></tr><tr><th>28</th></tr><tr><th>29</th></tr><tr><th>30</th></tr><tr><th>31</th></tr><tr><th>32</th></tr><tr><th>33</th></tr><tr><th>34</th></tr><tr><th>35</th></tr><tr><th>36</th></tr><tr><th>37</th></tr><tr><th>38</th></tr><tr><th>39</th></tr><tr><th>40</th></tr><tr><th>41</th></tr><tr><th>42</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Fonction utilisateur</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">function</span> myOpen (branch, response) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// La réponse correspond au responseText de</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// l'objet XMLHttpRequest</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(response);</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// Il DOIT string JSON, qui DOIT être structurée</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// à la façon d'une TafelTreeBranch</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">var</span> childBranch = eval(response);</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(childBranch.id + <span class="string">"\n"</span> + childBranch.txt);</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">alert</span>(branch.getId() + <span class="string">" sera ouverte si cette "</span> +</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="string">"fonction retourne <span class="reserved">true</span>"</span>);</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">return</span> response;</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> tree = <span class="reserved">new</span> TafelTree (<span class="string">"idtree"</span>, {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"generate"</span> : <span class="reserved">true</span>,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"onOpenPopulate"</span> : [myOpen, <span class="string">"pageScript.php"</span>]</p></td></tr><tr><td><p style="padding-left:4ex;">});</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;!-- Exemple de fichier PHP coté serveur --></p></td></tr><tr><td><p style="padding-left:0ex;"><span class="php">&lt;?php</span></p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// On fait divers traitements</span></p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// ...</span></p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// Et on affiche une string JSON. A noter qu'on retourne</span></p></td></tr><tr><td><p style="padding-left:0ex;"><span class="comment">// systématiquement un TABLEAU</span></p></td></tr><tr><td><p style="padding-left:0ex;"><span class="php">?&gt;</span></p></td></tr><tr><td><p style="padding-left:0ex;">[</p></td></tr><tr><td><p style="padding-left:0ex;">{</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="string">"id"</span> : <span class="string">"child1"</span>,</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="string">"txt"</span> : <span class="string">"Texte 1"</span>,</p></td></tr><tr><td><p style="padding-left:0ex;"><span class="string">"items"</span> : [</p></td></tr><tr><td><p style="padding-left:4ex;">{</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"id"</span> : <span class="string">"child2"</span>,</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="string">"txt"</span> : <span class="string">"Texte 2"</span></p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">]</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">]</p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			<h4>Notes</h4>
-			<ul>
-				<li>La fonction utilisateur DOIT retourner une string JSON représentant des TafelTreeBranch. Ou false pour annuler l'ouverture.</li>
-				<li>Le JSON DOIT ETRE entre parenthèses <strong>( )</strong></li>
-				<li>Les variables envoyées à la page <a href="#openlink">openlink</a> passent par la méthode POST</li>
-
-				<li>Ces variables sont :
-					<ul>
-						<li>" branch " = description JSON de la branche</li>
-						<li>" branch_id " = id de la branche qui s'ouvre</li>
-						<li>" tree_id " = id de l'arbre qui accueille la branche qui s'ouvre</li>
-					</ul>
-				</li>
-				<li>Toutes autres variables passée par <a href="#openlink">openlink</a> sont également transmises en POST. Par exemple, si openlink = "page.php?spec=1", on récuperera <em>spec</em> en POST malgré tout.</li>
-
-			</ul>
-			</div>
-
-			<h4 onclick="shownext(this)">setOnEditAjax()</h4>
-			<div class="develop">
-			<h4>Paramètres</h4>
-			<table class="prop">
-				<tr><th>func <em>(function)</em></th>
-
-					<td>La méthode à appeler</td></tr>
-				<tr><th>link <em>(string)</em></th>
-					<td>Le lien vers la page de traitement coté serveur</td></tr>
-			</table>
-			<p>Méthode appelée après l'édition de la branche. Lorsque celle-ci a terminé d'être éditée, elle lance une requête Ajax à la page <strong>editlink</strong> et renvoie le retour Ajax à la méthode utilisateur. <strong>La méthode doit retourner une string représentant la nouvelle valeur de la branche</strong>. Prend le pas sur la méthode <strong><a href="#setOnEditAjax">setOnEditAjax()</a></strong> de TafelTree</p>
-
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr><tr><th>14</th></tr><tr><th>15</th></tr><tr><th>16</th></tr><tr><th>17</th></tr><tr><th>18</th></tr><tr><th>19</th></tr><tr><th>20</th></tr><tr><th>21</th></tr><tr><th>22</th></tr><tr><th>23</th></tr><tr><th>24</th></tr><tr><th>25</th></tr><tr><th>26</th></tr><tr><th>27</th></tr><tr><th>28</th></tr><tr><th>29</th></tr><tr><th>30</th></tr><tr><th>31</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">function</span> myEditAjax (branch, response, oldValue) {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Pour voir le contenu de la réponse, on peut en faire une</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// <span class="string">"<span class="reserved">alert</span>"</span> ou le mettre dans le DIV de debug comme ceci :</span></p></td></tr><tr><td><p style="padding-left:4ex;">branch.tree.debug(response);</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On peut aussi évaluer la réponse en tant qu'objet JSON</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// (à noter qu'elle est entre parenthèses). La réponse</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// doit contenir, d<span class="string">'une manière ou d'</span>une autre, la</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// nouvelle valeur de la branche</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// ({</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// <span class="string">"message"</span> : <span class="string">"Tout est ok sur le serveur"</span>,</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// <span class="string">"newValue"</span> : <span class="string">"Nouvelle valeur de la branche"</span>,</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// <span class="string">"anyOtherParams"</span> : <span class="reserved">true</span></span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// })</span></p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// On peut aussi retourner seulement la nouvelle valeur</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// (dans ce cas, plus besoin de parenthèses)</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// <span class="reserved">alert</span> (response); // show the <span class="reserved">new</span> text</span></p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Tests divers</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">if</span> (resultsFromTest) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// OK, la branche sera éditée et aura la</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// nouvelle valeur retournée par cette fonction</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">return</span> theNewValue;</p></td></tr><tr><td><p style="padding-left:4ex;">} <span class="reserved">else</span> {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// Ici, la branche ne sera pas éditée et conservera</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// son ancienne valeur (oldValue)</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">return</span> <span class="reserved">false</span>;</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			<h4>Notes</h4>
-			<ul>
-				<li>La réponse devrait contenir la nouvelle valeur à insérer dans la branche</li>
-				<li>Les variables envoyées à la page <a href="#editlink">editlink</a> passent par la méthode POST</li>
-				<li>Ces variables sont :
-					<ul>
-
-						<li>" branch " = description JSON de la branche</li>
-						<li>" branch_id " = id de la branche qui s'ouvreé</li>
-						<li>" tree_id " = id de l'arbre d'où est tiré la branche qui s'ouvre</li>
-						<li>" new_value " = la nouvelle valeur de la branche</li>
-						<li>" old_value " = l'ancienne valeur de la branche</li>
-					</ul>
-
-				</li>
-				<li>Toutes autres variables passée par <a href="#editlink">editlink</a> sont également transmises en POST. Par exemple, si openlink = "page.php?spec=1", on récuperera <em>spec</em> en POST malgré tout.</li>
-			</ul>
-			</div>
-
-			<h4 class="new" onclick="shownext(this)">setOnErrorAjax()</h4>
-
-			<div class="develop">
-			<h4>Paramètres</h4>
-			<table class="prop">
-				<tr><th>func <em>(function)</em></th>
-					<td>La méthode à appeler</td></tr>
-			</table>
-			<p>Méthode appelée suite à une erreur dans une requête Ajax de drop, open ou edit</p>
-
-			<h4>Exemples</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr><tr><th>14</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;"><span class="reserved">function</span> myErrorAjax (type, response, branch, droppedOn) {</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Vérifie le type d'erreur. Peue être drop, edit ou open</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">switch</span> (type) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">case</span> <span class="string">"drop"</span> :</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">break</span>;</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">case</span> <span class="string">"open"</span> :</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">break</span>;</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">case</span> <span class="string">"edit"</span> :</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">break</span>;</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">alert</span>(<span class="string">"Une erreur est survenue pendant l'édition"</span>);</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">break</span>;</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">}</p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h1>Méthodes TafelTreeManager</h1>
-			<h2>Description des événements clavier</h2>
-			<h4 class="new" onclick="shownext(this)">Events</h4>
-			<div class="develop">
-			<p>Les touches suivantes sont gérées :</p>
-
-			<ul>
-				<li>ARROW_LEFT</li>
-				<li>ARROW_RIGHT</li>
-				<li>ARROW_UP</li>
-				<li>ARROW_DOWN</li>
-				<li>HOME</li>
-
-				<li>END</li>
-				<li>F2 (édition)</li>
-				<li>ENTER (stop de l'édition)</li>
-				<li>ESCAPE (déselection)</li>
-				<li>DELETE</li>
-				<li>CTRL + X (touche POMME sur mac Safari)</li>
-
-				<li>CTRL + C (touche POMME sur mac Safari)</li>
-				<li>CTRL + V (touche POMME sur mac Safari)</li>
-			</ul>
-			<p>Il est possible de désactiver certaines touches ou d'ajouter ses propres touches. Voir la fonction setKey()</p>
-			</div>
-			<h2>Méthodes TafelTreeManager publiques</h2>
-			<h4 class="new" onclick="shownext(this)">setKeys()</h4>
-
-			<div class="develop">
-			<h4>Paramètres</h4>
-			<table class="prop">
-				<tr>
-					<th>keys <em>(array)</em></th>
-					<td>Le tableau contenant les informations des code touche et la fonction approrpiée</td>
-				</tr>
-
-			</table>
-			<p>Permet de gérer un ou plusieurs comportements pour une touche donnée. Concrétement, la fonction associée à la touche est
-			appelée dès que la touche est appuyée. Cette fonction contient les données d'environnement (l'arbre sur lequel se passe
-			l'action, les touches appuyées (ctrl, alt, shift ou meta) etc).</p>
-			<h4>Exemple</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr><tr><th>5</th></tr><tr><th>6</th></tr><tr><th>7</th></tr><tr><th>8</th></tr><tr><th>9</th></tr><tr><th>10</th></tr><tr><th>11</th></tr><tr><th>12</th></tr><tr><th>13</th></tr><tr><th>14</th></tr><tr><th>15</th></tr><tr><th>16</th></tr><tr><th>17</th></tr><tr><th>18</th></tr><tr><th>19</th></tr><tr><th>20</th></tr><tr><th>21</th></tr><tr><th>22</th></tr><tr><th>23</th></tr><tr><th>24</th></tr><tr><th>25</th></tr><tr><th>26</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Définition de la fonction pour la touche n°46 (DEL)</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">function</span> myOnDelete (tree, code, modifiers, ev) {</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// Là, il s<span class="string">'agit de faire se qu'</span>on veut et retourner</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// <span class="string">"<span class="reserved">true</span>"</span> si on veut que le process continue. Par</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// exemple, pour la touche DEL, il y a déjà une</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// fonction intégrée. Si on retourne <span class="string">"<span class="reserved">true</span>"</span>, cette</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// fonction sera appelée. Si on retourne <span class="string">"<span class="reserved">false</span>"</span>, elle</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="comment">// ne sera pas appelée...</span></p></td></tr><tr><td><p style="padding-left:8ex;"><span class="reserved">if</span> (okForDelete) {</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">return</span> <span class="reserved">true</span>;</p></td></tr><tr><td><p style="padding-left:8ex;">} <span class="reserved">else</span> {</p></td></tr><tr><td><p style="padding-left:12ex;"><span class="reserved">return</span> <span class="reserved">false</span>;</p></td></tr><tr><td><p style="padding-left:8ex;">}</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:0ex;">&nbsp;</p></td></tr><tr><td><p style="padding-left:4ex;"><span class="comment">// Définition des touches</span></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">var</span> keys = [</p></td></tr><tr><td><p style="padding-left:4ex;">{</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"key"</span> : 46,</p></td></tr><tr><td><p style="padding-left:8ex;"><span class="string">"func"</span> : myOnDelete</p></td></tr><tr><td><p style="padding-left:4ex;">}</p></td></tr><tr><td><p style="padding-left:4ex;">];</p></td></tr><tr><td><p style="padding-left:4ex;">TafelTreeManager.setKeys(keys);</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			<h4>Notes</h4>
-			<ul>
-				<li>modifiers.ctrlKey = true si Ctrl est appuyé</li>
-				<li>modifiers.altKey = true si Alt est appuyé</li>
-				<li>modifiers.shiftKey = true si Shift est appuyé</li>
-				<li>modifiers.metaKey = true si "Pomme" (sous mac Safari) est appuyé</li>
-
-			</ul>
-			</div>
-
-			<h4 class="new" onclick="shownext(this)">disableKeyboardEvents()</h4>
-			<div class="develop">
-			<p>Désactive la gestion clavier</p>
-			<h4>Exemple</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;">TafelTreeManager.disableKeyboardEvents();</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 class="new" onclick="shownext(this)">disableKeyboardStructuralEvents()</h4>
-			<div class="develop">
-			<p>Désactive la gestion clavier pour ce qui est changement de structure. Il est donc possible de se déplacer avec les
-			flèches mais pas de copier-coller ou supprimer, par exemple.</p>
-			<h4>Exemple</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;">TafelTreeManager.disableKeyboardStructuralEvents();</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 class="new" onclick="shownext(this)">getCurrentTree()</h4>
-			<div class="develop">
-			<p>Retourne l'arbre courant sur lequel se passe les actions. Null si aucun arbre n'est courant.</p>
-			<h4>Exemple</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;"><span class="reserved">alert</span>(TafelTreeManager.getCurrentTree());</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			<h4 class="new" onclick="shownext(this)">setCurrentTree()</h4>
-			<div class="develop">
-			<p>Set l'arbre courant sur lequel va se passer les actions</p>
-			<h4>Exemple</h4>
-			<div class="code"><table><tr><td class="num"><table><tr><th>1</th></tr><tr><th>2</th></tr><tr><th>3</th></tr><tr><th>4</th></tr></table></td><td><table><tr><td><p style="padding-left:0ex;">&lt;script type=<span class="string">"text/javascript"</span>></p></td></tr><tr><td><p style="padding-left:4ex;">TafelTreeManager.setCurrentTree(myTree);</p></td></tr><tr><td><p style="padding-left:0ex;">&lt;/script></p></td></tr><tr><td>&nbsp;</td></tr></table></td></tr></table></div>
-
-			</div>
-
-			</div>
-
-		</div>
-	</div>
-	<div class="bottom">
-		<p>Treeview JS TafelTree</p>
-		<p>2006-12-30, <a href="#" onclick="gereStyle()">Tafel</a>. Optimisé pour Mozilla Firefox</p>
-
-	</div>
-</div>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/apps/maarch_entreprise/tools/tafelTree/doc/new.png b/apps/maarch_entreprise/tools/tafelTree/doc/new.png
deleted file mode 100755
index ff033a94f300390ff87127758f25f72b8c0bb93b..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/doc/new.png and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/edit.html b/apps/maarch_entreprise/tools/tafelTree/edit.html
deleted file mode 100755
index 0c86984c4ad85786fc1c8622361fbf6914ef3cd2..0000000000000000000000000000000000000000
--- a/apps/maarch_entreprise/tools/tafelTree/edit.html
+++ /dev/null
@@ -1,146 +0,0 @@
-<html>
-<head>
-	<title>OpenOfficeGeneration Documentation</title>
-	<link rel="stylesheet" type="text/css" href="css/tree.css" />
-	<style>
-	body {
-	background-color: #FFFFFF;
-	}
-	.mover {
-	background-color: #FF9999;
-	color: #FFEEEE;
-	}
-	
-	.special {
-	color: #CC0000;
-	}
-	
-	.tafelTree h3, .tafelTree p, .tafelTree ol {
-	margin: 0;
-	padding: 0;
-	}
-	
-	.tafelTree p {
-	padding-bottom: 1em;
-	}
-	
-	.tafelTree h3 {
-	color: #009900;
-	}
-	</style>
-	<script type="text/javascript" src="js/prototype.js"></script>
-	<script type="text/javascript" src="js/scriptaculous.js"></script>
-	<script type="text/javascript" src="Tree.js"></script>
-</head>
-<body>
-			
-			<script type="text/javascript">
-			function funcEdit (branch, response) {
-				// Ici tu peux traiter le retour et retourner true si
-				// tu veux assigner la valeur retournée par le serveur
-				// Tu peux aussi retourner autre chose et c'est cette
-				// valeur qui sera prise en compte 
-				return "Arbre 1 : " + response;
-			}
-			function funcEdit2 (branch, response) {
-				// Ici tu peux traiter le retour et retourner true si
-				// tu veux assigner la valeur retournée par le serveur
-				// Tu peux aussi retourner autre chose et c'est cette
-				// valeur qui sera prise en compte 
-				return "Arbre 2 : " + response;
-			}
-			var tree = null;
-			var tree2 = null;
-			function TafelTreeInit () {
-				var struct = [
-				{
-				'id':'root1',
-				'txt':'Element racine',
-				'items':[
-					{
-					'id':'child1',
-					'txt':'Un enfant',
-					'onclick' : function(b){b.tree.debug('hop');}
-					},
-					{
-					'id':'child2',
-					'txt':'Un enfant 2',
-					'editable' : false
-					},
-					{
-					'id':'child3',
-					'txt':'Un enfant 3'
-					},
-					{
-					'id':'child4',
-					'txt':'Un enfant 4'
-					}
-				]
-				}
-				];
-				var struct2 = [
-				{
-				'id':'root12',
-				'txt':'Element racine',
-				'items':[
-					{
-					'id':'child12',
-					'txt':'Un enfant'
-					},
-					{
-					'id':'child22',
-					'txt':'Un enfant 2',
-					'editable' : false
-					},
-					{
-					'id':'child32',
-					'txt':'Un enfant 3'
-					},
-					{
-					'id':'child42',
-					'txt':'Un enfant 4'
-					}
-				]
-				}
-				];
-				tree = new TafelTree('test', struct, {
-					'generate' : true,
-					'imgBase' : 'imgs/',
-					'defaultImg' : 'page.gif',
-					'defaultImgOpen' : 'folderopen.gif',
-					'defaultImgClose' : 'folder.gif',
-					'onEditAjax' : [funcEdit, 'sampleEdit1.php'],
-					'onDrop' : function(){return true;},
-					'copyDrag' : true,
-					'behaviourDrop' : 'sibling'
-				});
-				tree2 = new TafelTree('test2', struct2, {
-					'generate' : true,
-					'imgBase' : 'imgs/',
-					'defaultImg' : 'page.gif',
-					'defaultImgOpen' : 'folderopen.gif',
-					'defaultImgClose' : 'folder.gif',
-					'onEditAjax' : [funcEdit2, 'sampleEdit1.php'],
-					'onDrop' : function(){return true;},
-					'bind' : [tree]
-				});
-			}
-
-			function effet () {
-				var branch = tree.getBranchById('child1');
-				var s = '1 . ';
-				if (!branch) {
-					branch = tree2.getBranchById('child1');
-					s = '2 . ';
-				}
-				alert(s + branch.getText());
-			}
-			</script>
-			<div id="test"></div>
-			<div id="test2"></div>
-			<p><a href="#" onclick="effet()">Effet</a></p>
-
-
-	
-</body>
-</html>
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/base.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/base.gif
deleted file mode 100755
index 337a77f1636d90e12696f57e05f8bded176e5187..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/base.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/check1.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/check1.gif
deleted file mode 100755
index b1680b05b78dc46afb88fd02b1e3f299e7e8b443..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/check1.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/check2.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/check2.gif
deleted file mode 100755
index 549ce94e87d8954272e2cb3f5e6293754a46cc1e..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/check2.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/check3.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/check3.gif
deleted file mode 100755
index d8ac736933d3072af8aa54dbc3a16520121c833b..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/check3.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/check_over1.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/check_over1.gif
deleted file mode 100755
index dbd90d8ab0cda2bed291adc8590f71761491f125..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/check_over1.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/check_over2.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/check_over2.gif
deleted file mode 100755
index f1925b20b7a2b0aed8fecbfeee19c7deec8a04b5..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/check_over2.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/check_over3.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/check_over3.gif
deleted file mode 100755
index 451c82130e76ded58dcb6bdb197031d9e32b2fd2..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/check_over3.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/empty.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/empty.gif
deleted file mode 100755
index d7ae4067134ffb090de8adafdeaf575fe11a411d..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/empty.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/folder.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/folder.gif
deleted file mode 100755
index 3acd63d694bc2ae8a78708f308587ef8c55b6cca..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/folder.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/folderopen.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/folderopen.gif
deleted file mode 100755
index f296307d1593f6eebcfbe9d2531aef9a305d4c59..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/folderopen.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/globe.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/globe.gif
deleted file mode 100755
index 89d901237465ec86700a1bea57ffed6c9448d8ec..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/globe.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/imgfolder.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/imgfolder.gif
deleted file mode 100755
index e6d880347f518bbd1239f2af3e3059ccb1e674e3..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/imgfolder.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/line0.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/line0.gif
deleted file mode 100755
index ceda243e9ccf74a6cdf6316e2f4a785613ab2abb..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/line0.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/line1.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/line1.gif
deleted file mode 100755
index 60f2ccb26efc24e92c7bba5f35f2ca243d4838dd..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/line1.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/line2.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/line2.gif
deleted file mode 100755
index f2d7bdd5065ad01d005de788ffceb90e7ba39aab..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/line2.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/line3.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/line3.gif
deleted file mode 100755
index d718be218facdbdf057fc5e92b5b86580b131071..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/line3.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/line4.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/line4.gif
deleted file mode 100755
index 1b1a3496a807364295a32bf21ff0f2fea3c0827e..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/line4.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/line5.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/line5.gif
deleted file mode 100755
index 2421b138d39dd4434044d5882aae112b86e9b52e..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/line5.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/linebg.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/linebg.gif
deleted file mode 100755
index fbbff5dc80424dc3f6f4055bb539a661abb69ce8..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/linebg.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/linebg2.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/linebg2.gif
deleted file mode 100755
index a0cf9eace2c811cfddf7f9d0207d01cf7d0a52cd..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/linebg2.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/linebgfull.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/linebgfull.gif
deleted file mode 100755
index e8ecb8fd30145a81f34c8a463c3b8fefce346fc4..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/linebgfull.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/linebgfull2.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/linebgfull2.gif
deleted file mode 100755
index 82da3504f32797b9265d5082b96436fa3f63532c..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/linebgfull2.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/linefull0.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/linefull0.gif
deleted file mode 100755
index af25d1229466398573cf01e9201b291b577ec2ac..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/linefull0.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/linefull1.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/linefull1.gif
deleted file mode 100755
index d49a17314343b0aed2daf86d7fc8d68ca28c981a..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/linefull1.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/linefull2.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/linefull2.gif
deleted file mode 100755
index 05f251f099ee4cdc9f7e75413fb3b5b0a67d4ef2..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/linefull2.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/linefull3.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/linefull3.gif
deleted file mode 100755
index 74591b961dac855191ac23534735856a56197859..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/linefull3.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/linefull4.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/linefull4.gif
deleted file mode 100755
index 266b770a55255c52ac340f65403bbbe5f11957d5..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/linefull4.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/linefull5.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/linefull5.gif
deleted file mode 100755
index a941fa9ae792990647216511ff626baddd8c90ee..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/linefull5.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/load.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/load.gif
deleted file mode 100755
index 1eac9d69e7c9515d3f14c5630c3b66a2aac8b44e..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/load.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/lock.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/lock.gif
deleted file mode 100755
index ce683fcceb9a04b4d8b0c2d0fba5c1418a07fb45..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/lock.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/minus0.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/minus0.gif
deleted file mode 100755
index 3bf101b000a2368d0e167c7c059a1d89d4ce3eab..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/minus0.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/minus2.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/minus2.gif
deleted file mode 100755
index 0372294cb98eb287dd2f3be297f179f355ec7e35..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/minus2.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/minus3.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/minus3.gif
deleted file mode 100755
index d928af6394a83a9ae7f52b159e81a8bc98dd5b8c..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/minus3.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/minus4.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/minus4.gif
deleted file mode 100755
index 30bc7deecb497409fd1b02e5e0274962f0cf8e28..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/minus4.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/minus5.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/minus5.gif
deleted file mode 100755
index e2e30fcb24250b3743eae8c00ec94c54c8bf9cc4..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/minus5.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/minus_over0.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/minus_over0.gif
deleted file mode 100755
index b4311df656ef9bbd249836a28385d56540110ada..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/minus_over0.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/minus_over2.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/minus_over2.gif
deleted file mode 100755
index f3af634187f5c83824c2be13dea1a70a3b9abab5..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/minus_over2.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/minus_over3.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/minus_over3.gif
deleted file mode 100755
index bbbedd1505be600bd7ef206ceeec20740907ec99..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/minus_over3.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/minus_over4.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/minus_over4.gif
deleted file mode 100755
index 6569da9fced947194501b5c32a0484644b2434af..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/minus_over4.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/minus_over5.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/minus_over5.gif
deleted file mode 100755
index 94a2504b87dd3710c6059eed8331407156697a70..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/minus_over5.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/minusfull2.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/minusfull2.gif
deleted file mode 100755
index 95deed63eef7a37e84c2c2a121b82dc277c4811d..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/minusfull2.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/minusfull3.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/minusfull3.gif
deleted file mode 100755
index 5e78643943f7d00ec0f4b4796be94e96f0672d48..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/minusfull3.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/minusfull4.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/minusfull4.gif
deleted file mode 100755
index 94e24b3ae1da9aee43639724fe97d90f2b1dcf05..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/minusfull4.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/minusfull5.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/minusfull5.gif
deleted file mode 100755
index a7f73d0d608fe5fcc2568c1d899f2fb170cd96a7..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/minusfull5.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/minusfull_over2.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/minusfull_over2.gif
deleted file mode 100755
index e74ced4a37e5aedd9749f73f701df118e3ed9a9e..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/minusfull_over2.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/minusfull_over3.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/minusfull_over3.gif
deleted file mode 100755
index 4422da2a0b11536eab675d44430f842eba077c36..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/minusfull_over3.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/minusfull_over4.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/minusfull_over4.gif
deleted file mode 100755
index 8495bf04748af1ac9c2edc66cb8cd9a8e7eef286..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/minusfull_over4.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/minusfull_over5.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/minusfull_over5.gif
deleted file mode 100755
index 6e3ec1bd6ac6ca1400a7fd9b81ab5ec63feac356..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/minusfull_over5.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/musicfolder.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/musicfolder.gif
deleted file mode 100755
index f620789feb3c4b1222909d255f51aeaa81faefb6..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/musicfolder.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/page.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/page.gif
deleted file mode 100755
index 3304be6db05d25a0804841b3aa230a088b7e2c28..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/page.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/plus0.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/plus0.gif
deleted file mode 100755
index 35ad7874dbb4312f7533f41f2d18cce021386b09..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/plus0.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/plus2.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/plus2.gif
deleted file mode 100755
index ea2816efcea7a32f53f467c4a5fde344d9b4f585..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/plus2.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/plus3.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/plus3.gif
deleted file mode 100755
index cd6967e52b92d46da70950f18335896de54c9fcd..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/plus3.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/plus4.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/plus4.gif
deleted file mode 100755
index 185bd9b7047143849a01d2e6e92a24e96abdf335..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/plus4.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/plus5.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/plus5.gif
deleted file mode 100755
index 72fe4e577f3a24dc19f47a60f070d55cc0dc1b2a..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/plus5.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/plus_over0.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/plus_over0.gif
deleted file mode 100755
index cef8ba843ca8a3a26c457d3d158f3bac604672e1..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/plus_over0.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/plus_over2.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/plus_over2.gif
deleted file mode 100755
index 976438bfd501c06f011a331ef53f69b580d45fb3..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/plus_over2.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/plus_over3.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/plus_over3.gif
deleted file mode 100755
index 4c5e7fa8b8936be834f137b9a0b2f1597953eff1..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/plus_over3.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/plus_over4.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/plus_over4.gif
deleted file mode 100755
index 3be8ffc1682d5d6c1065a4145ff056051785cdc3..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/plus_over4.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/plus_over5.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/plus_over5.gif
deleted file mode 100755
index 0aeb3a51adec35e887680cd8aed4d6de0dc9fe88..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/plus_over5.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/plusfull2.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/plusfull2.gif
deleted file mode 100755
index d7c5898d9dbe68708ec74126e54f20bee6f470a5..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/plusfull2.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/plusfull3.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/plusfull3.gif
deleted file mode 100755
index 35d95f880b7e39778df61570e5e0b380013d1ac8..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/plusfull3.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/plusfull4.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/plusfull4.gif
deleted file mode 100755
index ee094656f3be498765431663e673adcfca135dab..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/plusfull4.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/plusfull5.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/plusfull5.gif
deleted file mode 100755
index 48f4bfece085972aeca42f9e1ab30a8d94d31f39..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/plusfull5.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/plusfull_over2.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/plusfull_over2.gif
deleted file mode 100755
index 366ee904d68cc872bbb7b1f4c5ba1d7f09dab5ac..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/plusfull_over2.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/plusfull_over3.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/plusfull_over3.gif
deleted file mode 100755
index 60bdddaadc389d8a556c96b44330a4f1074bfae1..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/plusfull_over3.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/plusfull_over4.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/plusfull_over4.gif
deleted file mode 100755
index 90553e9d1f4b6ac675b81606ec843415182ba76d..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/plusfull_over4.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/plusfull_over5.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/plusfull_over5.gif
deleted file mode 100755
index 4cb0f9994f6f0c473c99b089b796751da9b8211e..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/plusfull_over5.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/position.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/position.gif
deleted file mode 100755
index 6614fc1b150c441276151d697ddcf8237ee2882c..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/position.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/position_on.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/position_on.gif
deleted file mode 100755
index d7891f87663a9c42c578190c391044c745bf176a..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/position_on.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/pt.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/pt.gif
deleted file mode 100755
index f4a2493a1f8939a9731429423fed62dca96d6f38..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/pt.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/pt2.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/pt2.gif
deleted file mode 100755
index 33c52fdc1415c509efa864d5e853062e1471ba5b..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/pt2.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_line0.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_line0.gif
deleted file mode 100755
index 45be7f3638f585f1e78c5d2239c6845cb397ed63..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_line0.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_line1.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_line1.gif
deleted file mode 100755
index 1c05212f4ae8ff3bd40e83645e7698b0d0bd23d7..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_line1.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_line2.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_line2.gif
deleted file mode 100755
index bd4a09f4e4869af5f360aa59cc1f2f421299353b..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_line2.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_line3.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_line3.gif
deleted file mode 100755
index 1fa0cc305adebf665ff6eec8abfc125391ddefc7..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_line3.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_line4.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_line4.gif
deleted file mode 100755
index 646a2e48c7269fbde652d67f6b9721f866ec5cc2..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_line4.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_line5.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_line5.gif
deleted file mode 100755
index 99309d7f9c4bd0f708d51c344347062231906c23..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_line5.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_linebg.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_linebg.gif
deleted file mode 100755
index b383b230bc1e5d9210e6beceea05508610a55051..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_linebg.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_linebg2.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_linebg2.gif
deleted file mode 100755
index 459915c81c607e490520d60330b6c5020d329a0b..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_linebg2.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_linebgfull.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_linebgfull.gif
deleted file mode 100755
index ccd9db20679ef97cd5b76a21432b309805fd702c..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_linebgfull.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_linebgfull2.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_linebgfull2.gif
deleted file mode 100755
index 4d013cd8f73624cdece0b783f9635b9a696febe3..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_linebgfull2.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_linefull0.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_linefull0.gif
deleted file mode 100755
index 6f066da4366ea237cce1d09c1d285fbb711cb60e..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_linefull0.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_linefull1.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_linefull1.gif
deleted file mode 100755
index 3874a81de9d92d4271084d59c6d8704bc70b6b0b..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_linefull1.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_linefull2.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_linefull2.gif
deleted file mode 100755
index f4260146c6a2ff9d0fce705ef97773783c944eb9..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_linefull2.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_linefull3.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_linefull3.gif
deleted file mode 100755
index bdf804cc982023879e09fa38ef1c9281056b3139..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_linefull3.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_linefull4.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_linefull4.gif
deleted file mode 100755
index 2959a0bc79659781225f5b9160e3c9ade5adb36e..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_linefull4.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_linefull5.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_linefull5.gif
deleted file mode 100755
index bcd04baecdf00abc4be7689750bbcc18a84fd13c..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_linefull5.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_minus2.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_minus2.gif
deleted file mode 100755
index 08e4c7c9fe0ad022b074983e7a008967c2f684d7..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_minus2.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_minus3.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_minus3.gif
deleted file mode 100755
index 33090cb980c5a59e296e3ecdf06134f8453b8b6e..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_minus3.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_minus4.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_minus4.gif
deleted file mode 100755
index 9a1343668f4355c9085a54a35f266a294ee5d6ff..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_minus4.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_minus5.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_minus5.gif
deleted file mode 100755
index bd55d03d3f3ae73e64827e46db815bc7627b5bc0..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_minus5.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_minus_over2.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_minus_over2.gif
deleted file mode 100755
index 898f2ef055351251445bffc67a96d148dcfb6c98..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_minus_over2.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_minus_over3.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_minus_over3.gif
deleted file mode 100755
index 793c0297443923119dfd0af440a2a266f9381ef8..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_minus_over3.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_minus_over4.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_minus_over4.gif
deleted file mode 100755
index daa99866bb814ba141815d090fcf75947df03d0c..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_minus_over4.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_minus_over5.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_minus_over5.gif
deleted file mode 100755
index a3cd1225a4651b90bffdfd230a0859947c45ac03..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_minus_over5.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_minusfull2.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_minusfull2.gif
deleted file mode 100755
index fd2d3ac0ddfe0904038e743a7ec00f2daff385a1..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_minusfull2.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_minusfull3.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_minusfull3.gif
deleted file mode 100755
index a27ea1aec3c4d70af15df1a795b6063ebd7b633d..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_minusfull3.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_minusfull4.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_minusfull4.gif
deleted file mode 100755
index 1c1846300d86562a01970da6e31c49d6ba39ef79..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_minusfull4.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_minusfull5.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_minusfull5.gif
deleted file mode 100755
index 893a3033a816a81b69775ea6540015cb2dbec4f5..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_minusfull5.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_minusfull_over2.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_minusfull_over2.gif
deleted file mode 100755
index ebfbb793d33b428b24fddec5e71ac4ec5485e074..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_minusfull_over2.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_minusfull_over3.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_minusfull_over3.gif
deleted file mode 100755
index 60dd6cd81b9d0424870a5a14176f1b6f48cb6c66..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_minusfull_over3.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_minusfull_over4.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_minusfull_over4.gif
deleted file mode 100755
index e2cc4f953959b041c00255570e12e86246bb2bba..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_minusfull_over4.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_minusfull_over5.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_minusfull_over5.gif
deleted file mode 100755
index 523d8402437580368d46331f0f54231ee96e502b..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_minusfull_over5.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_plus2.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_plus2.gif
deleted file mode 100755
index 02db24175a74ab389e9a9fb8c2cc923a43ba8d22..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_plus2.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_plus3.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_plus3.gif
deleted file mode 100755
index 6e4902821a4e711e679837b032cc7fc32f77baca..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_plus3.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_plus4.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_plus4.gif
deleted file mode 100755
index 30438a900aa23f40b2817c0e148bda9a3c268e60..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_plus4.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_plus5.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_plus5.gif
deleted file mode 100755
index 2911859da7b804d3fff4108ed09338171e759c38..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_plus5.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_plus_over2.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_plus_over2.gif
deleted file mode 100755
index 9f83ba5158380da4e0d6d36b8ba94bc563cbeee0..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_plus_over2.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_plus_over3.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_plus_over3.gif
deleted file mode 100755
index c4ce660420585c722bc6262abfa4fdd34e64b036..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_plus_over3.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_plus_over4.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_plus_over4.gif
deleted file mode 100755
index 8900221b33873b74d9979e70a42861bf09103bc3..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_plus_over4.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_plus_over5.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_plus_over5.gif
deleted file mode 100755
index 04faba92b5f4aaf143f1aa18a721bcfadeb68de4..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_plus_over5.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_plusfull2.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_plusfull2.gif
deleted file mode 100755
index bcd6bf600262af44c8b66985ba3a6cf68fc7c63f..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_plusfull2.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_plusfull3.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_plusfull3.gif
deleted file mode 100755
index f0e56afe1ff0701f32e4eaaf03da9c746cb3e3d3..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_plusfull3.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_plusfull4.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_plusfull4.gif
deleted file mode 100755
index 62fc4e0551f6e2d50ccd206c1904745996962218..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_plusfull4.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_plusfull5.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_plusfull5.gif
deleted file mode 100755
index 669163ab6cf4c3d0dffd787af3884a6e87c46cff..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_plusfull5.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_plusfull_over2.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_plusfull_over2.gif
deleted file mode 100755
index d23cb5324f9a912788472c4d5177539918303f2f..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_plusfull_over2.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_plusfull_over3.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_plusfull_over3.gif
deleted file mode 100755
index a315054f58255ec8f1bb6c34792a85697b29285e..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_plusfull_over3.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_plusfull_over4.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_plusfull_over4.gif
deleted file mode 100755
index 668da6f980b96f6c37873b77f272fcb03d8728b4..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_plusfull_over4.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_plusfull_over5.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_plusfull_over5.gif
deleted file mode 100755
index 34f33319eed298f18ebbdc4672e55545bcf21e36..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_plusfull_over5.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_pt2.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_pt2.gif
deleted file mode 100755
index 8b4b349f2864a55280583af44e0406ecd0a8435d..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/rtl_pt2.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/trash.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/trash.gif
deleted file mode 100755
index cfa0f000e1ed3b61c8737fcfbef4b78035a6abe7..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/trash.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/trashfull.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/trashfull.gif
deleted file mode 100755
index e1cc61b5503d55c24438eafe1f782a37ac2516cf..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/trashfull.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/unlock.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/unlock.gif
deleted file mode 100755
index 4fd2ec4621a2c1569d818b9d5c35f284322840a8..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/unlock.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/user.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/user.gif
deleted file mode 100755
index 62e061786e4e7f01f8da93eaa3a9eef5ac417466..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/user.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/wait.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/wait.gif
deleted file mode 100755
index 085ccaecaf5fa5c34bc14cd2c2ed5cbbd8e25dcb..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/wait.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/imgs/watch.gif b/apps/maarch_entreprise/tools/tafelTree/imgs/watch.gif
deleted file mode 100755
index 2f9a7f842c69c654c5c85baf2ea3285ddd6cc61c..0000000000000000000000000000000000000000
Binary files a/apps/maarch_entreprise/tools/tafelTree/imgs/watch.gif and /dev/null differ
diff --git a/apps/maarch_entreprise/tools/tafelTree/index.html b/apps/maarch_entreprise/tools/tafelTree/index.html
deleted file mode 100755
index afd9e56224977dfe75593e065943859a015bf9ad..0000000000000000000000000000000000000000
--- a/apps/maarch_entreprise/tools/tafelTree/index.html
+++ /dev/null
@@ -1,319 +0,0 @@
-<html>
-<head>
-	<title>OpenOfficeGeneration Documentation</title>
-	<link rel="stylesheet" type="text/css" href="css/tree.css" />
-	<style>
-	body {
-	background-color: #FFEEFF;
-	}
-	.mover {
-	background-color: #FF9999;
-	color: #FFEEEE;
-	}
-	
-	.special {
-	color: #CC0000;
-	}
-	
-	.tafelTree h3, .tafelTree p, .tafelTree ol {
-	margin: 0;
-	padding: 0;
-	}
-	
-	.tafelTree p {
-	padding-bottom: 1em;
-	}
-	
-	.tafelTree h3 {
-	color: #009900;
-	}
-	</style>
-	<script type="text/javascript" src="js/prototype.js"></script>
-	<script type="text/javascript" src="js/scriptaculous.js"></script>
-	<script type="text/javascript" src="Tree-optimized.js"></script>
-	<script type="text/javascript">
-	function opp(branch, response){
-		return response;
-	}
-	var struct = [
-		{
-		'id' : 'root0',
-		'txt' : 'root 0'
-		},
-		{
-		'id':'root1',
-		'txt':'TafelTree JS',
-		'img':'base.gif',
-		'items':[
-			{
-			'id':'child1',
-			'txt':'L\'objet en question',
-			'items':[
-				{
-				'id':'child2',
-				'txt':'<span>Ses méthodes</span>'
-				},
-				{
-				'id':'3',
-				'txt':'Ses propriétés',
-				'checkbox':false
-				},
-				{
-				'id':'child4',
-				'txt':'Ses functions utilisateur (genre onclick)',
-				'onclick':function(branch){alert("le texte de ce noeud est le suivant : \n" + branch.struct.txt);},
-				'items' : [
-					{
-					'id' : 'blu',
-					'txt' : 'hop',
-					'check':1
-					}
-				]
-				},
-				{
-				'id':'child10',
-				'txt':"<div><h3>On peut même mettre de l\'HTML</h3><p>Y\'a rien besoin de spécial, juste avoir :</p><ol><li>des notions du HTML</li><li>de l'imagination</li><li>Echapper les simples quotes (\\' au lieu de \')</li></ol></div>"
-				},
-				{
-				'id':'child4t',
-				'txt':'Ici, on a une classe CSS particulière',
-				'style' : 'special'
-				},
-				{
-				'id':'child8',
-				'txt':'Celui-ci est draggable',
-				'ondrop':function(move, here){return true;}
-				}
-			]
-			},
-			{
-			'id':'child5',
-			'txt':'Les événements',
-			'items':[
-				{
-				'id':'child6',
-				'txt':'Un petit mouseover et mouseout',
-				'img':'globe.gif',
-				'onmouseover':function(branch){branch.addClass('mover');}, 
-				'onmouseout':function(branch){branch.removeClass('mover');}
-				},
-				{
-				'id':'child7',
-				'txt':'Avec un double clic',
-				'ondblclick':function(branch){alert('double-clic sur ' + branch.getId());}
-				},
-				{
-				'id':'ouvertureinfinie',
-				'txt':'Ici, il y a une infinité d\'enfants',
-				'onopenpopulate':function(branch, response){return true;},
-				'openlink':'open.php',
-				'canhavechildren':true,
-				'onopenpopulate':null,
-				'openlink':'server/open.php'
-				},
-				{
-				'id':'child9',
-				'txt':'Contenu éditable',
-				'acceptdrop':false,
-				'editable':true,
-				'onedit':function(branch, newv, oldv){return newv;}
-				}
-			]
-			},
-			{
-			'id':'pb',
-			'txt':'Poubelle',
-			'img':'trash.gif',
-			'imgopen':'trashfull.gif',
-			'imgclose':'trashfull.gif',
-			'draggable':false,
-			'last': true
-			}
-		]
-		}
-	];
-	var struct2 = [
-	{
-	'id' : 'root043',
-	'txt' : 'root 0'
-	}];
-	var tree1 = null;
-	var tree2 = null;
-	function TafelTreeInit () {
-		tree2 = new TafelTree('test2', struct2, {
-			'generate':true
-		});
-		tree1 = new TafelTree('test1', struct, {
-			'generate':true,
-			'imgBase' : 'imgs/',
-			'openAtLoad':true,
-			'cookies':true,
-			'onDrop':drop,
-			'multiline':true,
-			'defaultImg':'page.gif',
-			'defaultImgSelected':'globe.gif',
-			'defaultImgOpen':'folderopen.gif',
-			'defaultImgClose':'folder.gif',
-			'defaultImgCloseSelected':'unlock.gif',
-			'defaultImgOpenSelected':'imgfolder.gif',
-			'rtlMode':false,
-			'dropALT':false,
-			'checkboxes':true,
-			'onClick' : testParent,
-			'behaviourDrop':'child',
-			'dropALT' : false,
-			'dropCTRL' : false,
-			'bind':[tree2]
-		});
-		var b = tree1.getBranchById('root043');
-		alert(b);
-	}
-
-	function glu (branch) {
-		return (branch.children.length > 0) ? true : false;
-	}
-
-	function testParent (branch) {
-		var p = tree1.getBranches(glu);
-		var str = '';
-		for (var i = 0; i < p.length; i++) {
-			str += p[i].getText() + ' : ' + p[i].children.length + "\n";
-		}
-		alert(str);
-	}
-	function drop () {
-		return true;
-	}
-	function tojson(){
-		//tree1.debug(tree1.serialize(true));
-		var branch = tree1.getBranchById('child5');
-		//tree1.debug(branch.serialize(true));
-		tree1.restoreDefault();
-	}
-	</script>
-</head>
-<body>
-<div id="test2"></div>
-<a href="#" onClick="tojson()">Serialise</a>
-<div class="body">
-	<img class="titre" src="imgs/doc.jpg" alt="doc" title="doc" />
-	<h1>Génération de Treeview <span>(Javascript)</span></h1>
-	<h2>Treeview basé sur la libraire <a href="http://script.aculo.us" target="_blank">Script Aculous</a></h2>
-	<!--<ul id="menu">
-		<li><a href="index.html">Accueil</a></li>
-		<li><a href="install.html">Installation</a></li>
-		<li><a href="exemples.html">Exemples</a></li>
-		<li><a href="doc.html">Doc</a></li>
-		<li><a href="forum.html">Forum</a></li>
-		<li><a href="liens.html">Liens</a></li>
-		<li class="ici"><a href="arbre.php">Treeview</a></li>
-	</ul>-->
-	<div id="contenu">
-		<div class="gauche">
-			<h3>Treeview - Accueil</h3>
-			<div id="test1"></div>
-			<h4>Comment commencer ?</h4>
-			<p>C'est très simple, procédons donc pas-à-pas. D'abord, on inclu tous les fichiers nécessaires Javascript et CSS
-			entre les balises &lt;head>&lt;/head></p>
-			<code>
-&lt;link rel="stylesheet" type="text/css" href="css/tree.css" />
-<br />&lt;script type="text/javascript" src="js/prototype.js">&lt;/script>
-<br />&lt;script type="text/javascript" src="js/scriptaculous.js">&lt;/script>
-<br />&lt;script type="text/javascript" src="Tree.js">&lt;/script>
-			</code>
-			<p>La CSS est celle contenue dans le dossier CSS du zip. Quand au scripts JS, il faut savoir qu'il est basé sur la 
-			librairie de Script Aculous. Il faut donc intégrer la librairie prototype.js ainsi que scriptaculous.js. Toutes
-			les deux sont contenues dans le dossier JS. Mais si tu as déjà script aculous quelque part, tu n'es pas obligé
-			de le remettre.</p>
-			<p>La dernière librairie, c'est Tree.js. C'est le corps du programme.</p>
-			<h4>Créer un arbre</h4>
-			<p>Voici donc comment créer un arbre très simple</p>
-			<code>
-&lt;script type="text/javascript">
-<br />var struct = [
-<br />{
-<br />'id':'root1',
-<br />'txt':'Element racine',
-<br />'img':'page.gif', // Image s'il n'a pas d'enfants
-<br />'imgopen':'folderopen.gif', // Image s'il a des enfants et qu'il est ouvert
-<br />'imgclose':'folder.gif', // Image s'il a des enfants et qu'il est fermé
-<br />'items':[
-<br />&nbsp;&nbsp;&nbsp;&nbsp;{
-<br />&nbsp;&nbsp;&nbsp;&nbsp;'id':'child1',
-<br />&nbsp;&nbsp;&nbsp;&nbsp;'txt':'Un enfant',
-<br />&nbsp;&nbsp;&nbsp;&nbsp;'img':'page.gif'
-<br />&nbsp;&nbsp;&nbsp;&nbsp;}
-<br />]
-<br />}
-<br />];
-<br />var tree = new TafelTree('test2', struct, 'tree/imgs/', '100%', 'auto');
-<br />tree.generate();
-<br />&lt;/script>
-			</code>
-			<script type="text/javascript">
-			function load1 () {
-				var struct = [
-				{
-				'id':'root1',
-				'txt':'Element racine',
-				'img':'page.gif', // Image s'il n'a pas d'enfants
-				'imgopen':'folderopen.gif', // Image s'il a des enfants et qu'il est ouvert
-				'imgclose':'folder.gif', // Image s'il a des enfants et qu'il est fermé
-				'items':[
-					{
-					'id':'child1',
-					'txt':'Un enfant',
-					'img':'page.gif'
-					}
-				]
-				}
-				];
-				var tree2 = new TafelTree('test2', struct, 'imgs/', '100%', 'auto');
-				tree2.generate();
-			}
-			Event.observe(window, 'load', load1, false);
-			</script>
-			<div id="test2"></div>
-			<p><a href="download/tafeltree.zip">Download de l'arbre</a></p>
-		</div><!--
-		<div class="droite">
-			<div>
-				<h4>Dernières mise-à-jour</h4>
-				<p>La dernière mise à jour date du 21 oaût 2006.</p>
-				<p><a href="download/tafeltree.zip">Téléchargez ici!</a></p>
-				<cite>Par Tafel</cite>
-			</div>
-			<div>
-				<h4>Accueil</h4>
-				<p>Les bases. Comment créer un arbre, la logique du truc, tout ça tout ça</p>
-				<p><a href="arbre.php">Voir la page</a></p>
-				<cite>Par Tafel</cite>
-			</div>
-			<div>
-				<h4>TafelTree</h4>
-				<p>L'arbre en détail.</p>
-				<p><a href="arbre4.html">Voir la page</a></p>
-				<cite>Par Tafel</cite>
-			</div>
-			<div>
-				<h4>TafelTreeBranch</h4>
-				<p>Les actions sur la branche. Sa structure et ses méthodes</p>
-				<p><a href="arbre4.html">Voir la page</a></p>
-				<cite>Par Tafel</cite>
-			</div>
-			<div>
-				<h4>Documentation</h4>
-				<p>Une doc rapide et plus ou moins exhaustive</p>
-				<p><a href="arbre4.html">Voir la page</a></p>
-				<cite>Par Tafel</cite>
-			</div>
-		</div>-->
-	</div>
-	<div class="bottom">
-		<p>OpenOffice Generation PHP + Treeview JS</p>
-		<p>Le 26 août 2006, <a href="#" onClick="gereStyle()">Tafel</a>. Optimisé pour Mozilla Firefox</p>
-	</div>
-</div>
-	
-</body>
-</html>
diff --git a/apps/maarch_entreprise/tools/tafelTree/js/builder.js b/apps/maarch_entreprise/tools/tafelTree/js/builder.js
deleted file mode 100755
index 199afc12f6d9cd467ab0103a9b87dc5aa5d5bd17..0000000000000000000000000000000000000000
--- a/apps/maarch_entreprise/tools/tafelTree/js/builder.js
+++ /dev/null
@@ -1,131 +0,0 @@
-// script.aculo.us builder.js v1.7.0, Fri Jan 19 19:16:36 CET 2007
-
-// Copyright (c) 2005, 2006 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
-//
-// script.aculo.us is freely distributable under the terms of an MIT-style license.
-// For details, see the script.aculo.us web site: http://script.aculo.us/
-
-var Builder = {
-  NODEMAP: {
-    AREA: 'map',
-    CAPTION: 'table',
-    COL: 'table',
-    COLGROUP: 'table',
-    LEGEND: 'fieldset',
-    OPTGROUP: 'select',
-    OPTION: 'select',
-    PARAM: 'object',
-    TBODY: 'table',
-    TD: 'table',
-    TFOOT: 'table',
-    TH: 'table',
-    THEAD: 'table',
-    TR: 'table'
-  },
-  // note: For Firefox < 1.5, OPTION and OPTGROUP tags are currently broken,
-  //       due to a Firefox bug
-  node: function(elementName) {
-    elementName = elementName.toUpperCase();
-    
-    // try innerHTML approach
-    var parentTag = this.NODEMAP[elementName] || 'div';
-    var parentElement = document.createElement(parentTag);
-    try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707
-      parentElement.innerHTML = "<" + elementName + "></" + elementName + ">";
-    } catch(e) {}
-    var element = parentElement.firstChild || null;
-      
-    // see if browser added wrapping tags
-    if(element && (element.tagName.toUpperCase() != elementName))
-      element = element.getElementsByTagName(elementName)[0];
-    
-    // fallback to createElement approach
-    if(!element) element = document.createElement(elementName);
-    
-    // abort if nothing could be created
-    if(!element) return;
-
-    // attributes (or text)
-    if(arguments[1])
-      if(this._isStringOrNumber(arguments[1]) ||
-        (arguments[1] instanceof Array)) {
-          this._children(element, arguments[1]);
-        } else {
-          var attrs = this._attributes(arguments[1]);
-          if(attrs.length) {
-            try { // prevent IE "feature": http://dev.rubyonrails.org/ticket/2707
-              parentElement.innerHTML = "<" +elementName + " " +
-                attrs + "></" + elementName + ">";
-            } catch(e) {}
-            element = parentElement.firstChild || null;
-            // workaround firefox 1.0.X bug
-            if(!element) {
-              element = document.createElement(elementName);
-              for(attr in arguments[1]) 
-                element[attr == 'class' ? 'className' : attr] = arguments[1][attr];
-            }
-            if(element.tagName.toUpperCase() != elementName)
-              element = parentElement.getElementsByTagName(elementName)[0];
-            }
-        } 
-
-    // text, or array of children
-    if(arguments[2])
-      this._children(element, arguments[2]);
-
-     return element;
-  },
-  _text: function(text) {
-     return document.createTextNode(text);
-  },
-
-  ATTR_MAP: {
-    'className': 'class',
-    'htmlFor': 'for'
-  },
-
-  _attributes: function(attributes) {
-    var attrs = [];
-    for(attribute in attributes)
-      attrs.push((attribute in this.ATTR_MAP ? this.ATTR_MAP[attribute] : attribute) +
-          '="' + attributes[attribute].toString().escapeHTML() + '"');
-    return attrs.join(" ");
-  },
-  _children: function(element, children) {
-    if(typeof children=='object') { // array can hold nodes and text
-      children.flatten().each( function(e) {
-        if(typeof e=='object')
-          element.appendChild(e)
-        else
-          if(Builder._isStringOrNumber(e))
-            element.appendChild(Builder._text(e));
-      });
-    } else
-      if(Builder._isStringOrNumber(children)) 
-         element.appendChild(Builder._text(children));
-  },
-  _isStringOrNumber: function(param) {
-    return(typeof param=='string' || typeof param=='number');
-  },
-  build: function(html) {
-    var element = this.node('div');
-    $(element).update(html.strip());
-    return element.down();
-  },
-  dump: function(scope) { 
-    if(typeof scope != 'object' && typeof scope != 'function') scope = window; //global scope 
-  
-    var tags = ("A ABBR ACRONYM ADDRESS APPLET AREA B BASE BASEFONT BDO BIG BLOCKQUOTE BODY " +
-      "BR BUTTON CAPTION CENTER CITE CODE COL COLGROUP DD DEL DFN DIR DIV DL DT EM FIELDSET " +
-      "FONT FORM FRAME FRAMESET H1 H2 H3 H4 H5 H6 HEAD HR HTML I IFRAME IMG INPUT INS ISINDEX "+
-      "KBD LABEL LEGEND LI LINK MAP MENU META NOFRAMES NOSCRIPT OBJECT OL OPTGROUP OPTION P "+
-      "PARAM PRE Q S SAMP SCRIPT SELECT SMALL SPAN STRIKE STRONG STYLE SUB SUP TABLE TBODY TD "+
-      "TEXTAREA TFOOT TH THEAD TITLE TR TT U UL VAR").split(/\s+/);
-  
-    tags.each( function(tag){ 
-      scope[tag] = function() { 
-        return Builder.node.apply(Builder, [tag].concat($A(arguments)));  
-      } 
-    });
-  }
-}
diff --git a/apps/maarch_entreprise/tools/tafelTree/js/controls.js b/apps/maarch_entreprise/tools/tafelTree/js/controls.js
deleted file mode 100755
index d5a16e8c41877ba46d9d18a066a0ba8dc0b35f2d..0000000000000000000000000000000000000000
--- a/apps/maarch_entreprise/tools/tafelTree/js/controls.js
+++ /dev/null
@@ -1,835 +0,0 @@
-// script.aculo.us controls.js v1.7.0, Fri Jan 19 19:16:36 CET 2007
-
-// Copyright (c) 2005, 2006 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
-//           (c) 2005, 2006 Ivan Krstic (http://blogs.law.harvard.edu/ivan)
-//           (c) 2005, 2006 Jon Tirsen (http://www.tirsen.com)
-// Contributors:
-//  Richard Livsey
-//  Rahul Bhargava
-//  Rob Wills
-// 
-// script.aculo.us is freely distributable under the terms of an MIT-style license.
-// For details, see the script.aculo.us web site: http://script.aculo.us/
-
-// Autocompleter.Base handles all the autocompletion functionality 
-// that's independent of the data source for autocompletion. This
-// includes drawing the autocompletion menu, observing keyboard
-// and mouse events, and similar.
-//
-// Specific autocompleters need to provide, at the very least, 
-// a getUpdatedChoices function that will be invoked every time
-// the text inside the monitored textbox changes. This method 
-// should get the text for which to provide autocompletion by
-// invoking this.getToken(), NOT by directly accessing
-// this.element.value. This is to allow incremental tokenized
-// autocompletion. Specific auto-completion logic (AJAX, etc)
-// belongs in getUpdatedChoices.
-//
-// Tokenized incremental autocompletion is enabled automatically
-// when an autocompleter is instantiated with the 'tokens' option
-// in the options parameter, e.g.:
-// new Ajax.Autocompleter('id','upd', '/url/', { tokens: ',' });
-// will incrementally autocomplete with a comma as the token.
-// Additionally, ',' in the above example can be replaced with
-// a token array, e.g. { tokens: [',', '\n'] } which
-// enables autocompletion on multiple tokens. This is most 
-// useful when one of the tokens is \n (a newline), as it 
-// allows smart autocompletion after linebreaks.
-
-if(typeof Effect == 'undefined')
-  throw("controls.js requires including script.aculo.us' effects.js library");
-
-var Autocompleter = {}
-Autocompleter.Base = function() {};
-Autocompleter.Base.prototype = {
-  baseInitialize: function(element, update, options) {
-    this.element     = $(element); 
-    this.update      = $(update);  
-    this.hasFocus    = false; 
-    this.changed     = false; 
-    this.active      = false; 
-    this.index       = 0;     
-    this.entryCount  = 0;
-
-    if(this.setOptions)
-      this.setOptions(options);
-    else
-      this.options = options || {};
-
-    this.options.paramName    = this.options.paramName || this.element.name;
-    this.options.tokens       = this.options.tokens || [];
-    this.options.frequency    = this.options.frequency || 0.4;
-    this.options.minChars     = this.options.minChars || 1;
-    this.options.onShow       = this.options.onShow || 
-      function(element, update){ 
-        if(!update.style.position || update.style.position=='absolute') {
-          update.style.position = 'absolute';
-          Position.clone(element, update, {
-            setHeight: false, 
-            offsetTop: element.offsetHeight
-          });
-        }
-        Effect.Appear(update,{duration:0.15});
-      };
-    this.options.onHide = this.options.onHide || 
-      function(element, update){ new Effect.Fade(update,{duration:0.15}) };
-
-    if(typeof(this.options.tokens) == 'string') 
-      this.options.tokens = new Array(this.options.tokens);
-
-    this.observer = null;
-    
-    this.element.setAttribute('autocomplete','off');
-
-    Element.hide(this.update);
-
-    Event.observe(this.element, "blur", this.onBlur.bindAsEventListener(this));
-    Event.observe(this.element, "keypress", this.onKeyPress.bindAsEventListener(this));
-  },
-
-  show: function() {
-    if(Element.getStyle(this.update, 'display')=='none') this.options.onShow(this.element, this.update);
-    if(!this.iefix && 
-      (navigator.appVersion.indexOf('MSIE')>0) &&
-      (navigator.userAgent.indexOf('Opera')<0) &&
-      (Element.getStyle(this.update, 'position')=='absolute')) {
-      new Insertion.After(this.update, 
-       '<iframe id="' + this.update.id + '_iefix" '+
-       'style="display:none;position:absolute;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);" ' +
-       'src="javascript:false;" frameborder="0" scrolling="no"></iframe>');
-      this.iefix = $(this.update.id+'_iefix');
-    }
-    if(this.iefix) setTimeout(this.fixIEOverlapping.bind(this), 50);
-  },
-  
-  fixIEOverlapping: function() {
-    Position.clone(this.update, this.iefix, {setTop:(!this.update.style.height)});
-    this.iefix.style.zIndex = 1;
-    this.update.style.zIndex = 2;
-    Element.show(this.iefix);
-  },
-
-  hide: function() {
-    this.stopIndicator();
-    if(Element.getStyle(this.update, 'display')!='none') this.options.onHide(this.element, this.update);
-    if(this.iefix) Element.hide(this.iefix);
-  },
-
-  startIndicator: function() {
-    if(this.options.indicator) Element.show(this.options.indicator);
-  },
-
-  stopIndicator: function() {
-    if(this.options.indicator) Element.hide(this.options.indicator);
-  },
-
-  onKeyPress: function(event) {
-    if(this.active)
-      switch(event.keyCode) {
-       case Event.KEY_TAB:
-       case Event.KEY_RETURN:
-         this.selectEntry();
-         Event.stop(event);
-       case Event.KEY_ESC:
-         this.hide();
-         this.active = false;
-         Event.stop(event);
-         return;
-       case Event.KEY_LEFT:
-       case Event.KEY_RIGHT:
-         return;
-       case Event.KEY_UP:
-         this.markPrevious();
-         this.render();
-         if(navigator.appVersion.indexOf('AppleWebKit')>0) Event.stop(event);
-         return;
-       case Event.KEY_DOWN:
-         this.markNext();
-         this.render();
-         if(navigator.appVersion.indexOf('AppleWebKit')>0) Event.stop(event);
-         return;
-      }
-     else 
-       if(event.keyCode==Event.KEY_TAB || event.keyCode==Event.KEY_RETURN || 
-         (navigator.appVersion.indexOf('AppleWebKit') > 0 && event.keyCode == 0)) return;
-
-    this.changed = true;
-    this.hasFocus = true;
-
-    if(this.observer) clearTimeout(this.observer);
-      this.observer = 
-        setTimeout(this.onObserverEvent.bind(this), this.options.frequency*1000);
-  },
-
-  activate: function() {
-    this.changed = false;
-    this.hasFocus = true;
-    this.getUpdatedChoices();
-  },
-
-  onHover: function(event) {
-    var element = Event.findElement(event, 'LI');
-    if(this.index != element.autocompleteIndex) 
-    {
-        this.index = element.autocompleteIndex;
-        this.render();
-    }
-    Event.stop(event);
-  },
-  
-  onClick: function(event) {
-    var element = Event.findElement(event, 'LI');
-    this.index = element.autocompleteIndex;
-    this.selectEntry();
-    this.hide();
-  },
-  
-  onBlur: function(event) {
-    // needed to make click events working
-    setTimeout(this.hide.bind(this), 250);
-    this.hasFocus = false;
-    this.active = false;     
-  }, 
-  
-  render: function() {
-    if(this.entryCount > 0) {
-      for (var i = 0; i < this.entryCount; i++)
-        this.index==i ? 
-          Element.addClassName(this.getEntry(i),"selected") : 
-          Element.removeClassName(this.getEntry(i),"selected");
-        
-      if(this.hasFocus) { 
-        this.show();
-        this.active = true;
-      }
-    } else {
-      this.active = false;
-      this.hide();
-    }
-  },
-  
-  markPrevious: function() {
-    if(this.index > 0) this.index--
-      else this.index = this.entryCount-1;
-    this.getEntry(this.index).scrollIntoView(true);
-  },
-  
-  markNext: function() {
-    if(this.index < this.entryCount-1) this.index++
-      else this.index = 0;
-    this.getEntry(this.index).scrollIntoView(false);
-  },
-  
-  getEntry: function(index) {
-    return this.update.firstChild.childNodes[index];
-  },
-  
-  getCurrentEntry: function() {
-    return this.getEntry(this.index);
-  },
-  
-  selectEntry: function() {
-    this.active = false;
-    this.updateElement(this.getCurrentEntry());
-  },
-
-  updateElement: function(selectedElement) {
-    if (this.options.updateElement) {
-      this.options.updateElement(selectedElement);
-      return;
-    }
-    var value = '';
-    if (this.options.select) {
-      var nodes = document.getElementsByClassName(this.options.select, selectedElement) || [];
-      if(nodes.length>0) value = Element.collectTextNodes(nodes[0], this.options.select);
-    } else
-      value = Element.collectTextNodesIgnoreClass(selectedElement, 'informal');
-    
-    var lastTokenPos = this.findLastToken();
-    if (lastTokenPos != -1) {
-      var newValue = this.element.value.substr(0, lastTokenPos + 1);
-      var whitespace = this.element.value.substr(lastTokenPos + 1).match(/^\s+/);
-      if (whitespace)
-        newValue += whitespace[0];
-      this.element.value = newValue + value;
-    } else {
-      this.element.value = value;
-    }
-    this.element.focus();
-    
-    if (this.options.afterUpdateElement)
-      this.options.afterUpdateElement(this.element, selectedElement);
-  },
-
-  updateChoices: function(choices) {
-    if(!this.changed && this.hasFocus) {
-      this.update.innerHTML = choices;
-      Element.cleanWhitespace(this.update);
-      Element.cleanWhitespace(this.update.down());
-
-      if(this.update.firstChild && this.update.down().childNodes) {
-        this.entryCount = 
-          this.update.down().childNodes.length;
-        for (var i = 0; i < this.entryCount; i++) {
-          var entry = this.getEntry(i);
-          entry.autocompleteIndex = i;
-          this.addObservers(entry);
-        }
-      } else { 
-        this.entryCount = 0;
-      }
-
-      this.stopIndicator();
-      this.index = 0;
-      
-      if(this.entryCount==1 && this.options.autoSelect) {
-        this.selectEntry();
-        this.hide();
-      } else {
-        this.render();
-      }
-    }
-  },
-
-  addObservers: function(element) {
-    Event.observe(element, "mouseover", this.onHover.bindAsEventListener(this));
-    Event.observe(element, "click", this.onClick.bindAsEventListener(this));
-  },
-
-  onObserverEvent: function() {
-    this.changed = false;   
-    if(this.getToken().length>=this.options.minChars) {
-      this.startIndicator();
-      this.getUpdatedChoices();
-    } else {
-      this.active = false;
-      this.hide();
-    }
-  },
-
-  getToken: function() {
-    var tokenPos = this.findLastToken();
-    if (tokenPos != -1)
-      var ret = this.element.value.substr(tokenPos + 1).replace(/^\s+/,'').replace(/\s+$/,'');
-    else
-      var ret = this.element.value;
-
-    return /\n/.test(ret) ? '' : ret;
-  },
-
-  findLastToken: function() {
-    var lastTokenPos = -1;
-
-    for (var i=0; i<this.options.tokens.length; i++) {
-      var thisTokenPos = this.element.value.lastIndexOf(this.options.tokens[i]);
-      if (thisTokenPos > lastTokenPos)
-        lastTokenPos = thisTokenPos;
-    }
-    return lastTokenPos;
-  }
-}
-
-Ajax.Autocompleter = Class.create();
-Object.extend(Object.extend(Ajax.Autocompleter.prototype, Autocompleter.Base.prototype), {
-  initialize: function(element, update, url, options) {
-    this.baseInitialize(element, update, options);
-    this.options.asynchronous  = true;
-    this.options.onComplete    = this.onComplete.bind(this);
-    this.options.defaultParams = this.options.parameters || null;
-    this.url                   = url;
-  },
-
-  getUpdatedChoices: function() {
-    entry = encodeURIComponent(this.options.paramName) + '=' + 
-      encodeURIComponent(this.getToken());
-
-    this.options.parameters = this.options.callback ?
-      this.options.callback(this.element, entry) : entry;
-
-    if(this.options.defaultParams) 
-      this.options.parameters += '&' + this.options.defaultParams;
-
-    new Ajax.Request(this.url, this.options);
-  },
-
-  onComplete: function(request) {
-    this.updateChoices(request.responseText);
-  }
-
-});
-
-// The local array autocompleter. Used when you'd prefer to
-// inject an array of autocompletion options into the page, rather
-// than sending out Ajax queries, which can be quite slow sometimes.
-//
-// The constructor takes four parameters. The first two are, as usual,
-// the id of the monitored textbox, and id of the autocompletion menu.
-// The third is the array you want to autocomplete from, and the fourth
-// is the options block.
-//
-// Extra local autocompletion options:
-// - choices - How many autocompletion choices to offer
-//
-// - partialSearch - If false, the autocompleter will match entered
-//                    text only at the beginning of strings in the 
-//                    autocomplete array. Defaults to true, which will
-//                    match text at the beginning of any *word* in the
-//                    strings in the autocomplete array. If you want to
-//                    search anywhere in the string, additionally set
-//                    the option fullSearch to true (default: off).
-//
-// - fullSsearch - Search anywhere in autocomplete array strings.
-//
-// - partialChars - How many characters to enter before triggering
-//                   a partial match (unlike minChars, which defines
-//                   how many characters are required to do any match
-//                   at all). Defaults to 2.
-//
-// - ignoreCase - Whether to ignore case when autocompleting.
-//                 Defaults to true.
-//
-// It's possible to pass in a custom function as the 'selector' 
-// option, if you prefer to write your own autocompletion logic.
-// In that case, the other options above will not apply unless
-// you support them.
-
-Autocompleter.Local = Class.create();
-Autocompleter.Local.prototype = Object.extend(new Autocompleter.Base(), {
-  initialize: function(element, update, array, options) {
-    this.baseInitialize(element, update, options);
-    this.options.array = array;
-  },
-
-  getUpdatedChoices: function() {
-    this.updateChoices(this.options.selector(this));
-  },
-
-  setOptions: function(options) {
-    this.options = Object.extend({
-      choices: 10,
-      partialSearch: true,
-      partialChars: 2,
-      ignoreCase: true,
-      fullSearch: false,
-      selector: function(instance) {
-        var ret       = []; // Beginning matches
-        var partial   = []; // Inside matches
-        var entry     = instance.getToken();
-        var count     = 0;
-
-        for (var i = 0; i < instance.options.array.length &&  
-          ret.length < instance.options.choices ; i++) { 
-
-          var elem = instance.options.array[i];
-          var foundPos = instance.options.ignoreCase ? 
-            elem.toLowerCase().indexOf(entry.toLowerCase()) : 
-            elem.indexOf(entry);
-
-          while (foundPos != -1) {
-            if (foundPos == 0 && elem.length != entry.length) { 
-              ret.push("<li><strong>" + elem.substr(0, entry.length) + "</strong>" + 
-                elem.substr(entry.length) + "</li>");
-              break;
-            } else if (entry.length >= instance.options.partialChars && 
-              instance.options.partialSearch && foundPos != -1) {
-              if (instance.options.fullSearch || /\s/.test(elem.substr(foundPos-1,1))) {
-                partial.push("<li>" + elem.substr(0, foundPos) + "<strong>" +
-                  elem.substr(foundPos, entry.length) + "</strong>" + elem.substr(
-                  foundPos + entry.length) + "</li>");
-                break;
-              }
-            }
-
-            foundPos = instance.options.ignoreCase ? 
-              elem.toLowerCase().indexOf(entry.toLowerCase(), foundPos + 1) : 
-              elem.indexOf(entry, foundPos + 1);
-
-          }
-        }
-        if (partial.length)
-          ret = ret.concat(partial.slice(0, instance.options.choices - ret.length))
-        return "<ul>" + ret.join('') + "</ul>";
-      }
-    }, options || {});
-  }
-});
-
-// AJAX in-place editor
-//
-// see documentation on http://wiki.script.aculo.us/scriptaculous/show/Ajax.InPlaceEditor
-
-// Use this if you notice weird scrolling problems on some browsers,
-// the DOM might be a bit confused when this gets called so do this
-// waits 1 ms (with setTimeout) until it does the activation
-Field.scrollFreeActivate = function(field) {
-  setTimeout(function() {
-    Field.activate(field);
-  }, 1);
-}
-
-Ajax.InPlaceEditor = Class.create();
-Ajax.InPlaceEditor.defaultHighlightColor = "#FFFF99";
-Ajax.InPlaceEditor.prototype = {
-  initialize: function(element, url, options) {
-    this.url = url;
-    this.element = $(element);
-
-    this.options = Object.extend({
-      paramName: "value",
-      okButton: true,
-      okText: "ok",
-      cancelLink: true,
-      cancelText: "cancel",
-      savingText: "Saving...",
-      clickToEditText: "Click to edit",
-      okText: "ok",
-      rows: 1,
-      onComplete: function(transport, element) {
-        new Effect.Highlight(element, {startcolor: this.options.highlightcolor});
-      },
-      onFailure: function(transport) {
-        alert("Error communicating with the server: " + transport.responseText.stripTags());
-      },
-      callback: function(form) {
-        return Form.serialize(form);
-      },
-      handleLineBreaks: true,
-      loadingText: 'Loading...',
-      savingClassName: 'inplaceeditor-saving',
-      loadingClassName: 'inplaceeditor-loading',
-      formClassName: 'inplaceeditor-form',
-      highlightcolor: Ajax.InPlaceEditor.defaultHighlightColor,
-      highlightendcolor: "#FFFFFF",
-      externalControl: null,
-      submitOnBlur: false,
-      ajaxOptions: {},
-      evalScripts: false
-    }, options || {});
-
-    if(!this.options.formId && this.element.id) {
-      this.options.formId = this.element.id + "-inplaceeditor";
-      if ($(this.options.formId)) {
-        // there's already a form with that name, don't specify an id
-        this.options.formId = null;
-      }
-    }
-    
-    if (this.options.externalControl) {
-      this.options.externalControl = $(this.options.externalControl);
-    }
-    
-    this.originalBackground = Element.getStyle(this.element, 'background-color');
-    if (!this.originalBackground) {
-      this.originalBackground = "transparent";
-    }
-    
-    this.element.title = this.options.clickToEditText;
-    
-    this.onclickListener = this.enterEditMode.bindAsEventListener(this);
-    this.mouseoverListener = this.enterHover.bindAsEventListener(this);
-    this.mouseoutListener = this.leaveHover.bindAsEventListener(this);
-    Event.observe(this.element, 'click', this.onclickListener);
-    Event.observe(this.element, 'mouseover', this.mouseoverListener);
-    Event.observe(this.element, 'mouseout', this.mouseoutListener);
-    if (this.options.externalControl) {
-      Event.observe(this.options.externalControl, 'click', this.onclickListener);
-      Event.observe(this.options.externalControl, 'mouseover', this.mouseoverListener);
-      Event.observe(this.options.externalControl, 'mouseout', this.mouseoutListener);
-    }
-  },
-  enterEditMode: function(evt) {
-    if (this.saving) return;
-    if (this.editing) return;
-    this.editing = true;
-    this.onEnterEditMode();
-    if (this.options.externalControl) {
-      Element.hide(this.options.externalControl);
-    }
-    Element.hide(this.element);
-    this.createForm();
-    this.element.parentNode.insertBefore(this.form, this.element);
-    if (!this.options.loadTextURL) Field.scrollFreeActivate(this.editField);
-    // stop the event to avoid a page refresh in Safari
-    if (evt) {
-      Event.stop(evt);
-    }
-    return false;
-  },
-  createForm: function() {
-    this.form = document.createElement("form");
-    this.form.id = this.options.formId;
-    Element.addClassName(this.form, this.options.formClassName)
-    this.form.onsubmit = this.onSubmit.bind(this);
-
-    this.createEditField();
-
-    if (this.options.textarea) {
-      var br = document.createElement("br");
-      this.form.appendChild(br);
-    }
-
-    if (this.options.okButton) {
-      okButton = document.createElement("input");
-      okButton.type = "submit";
-      okButton.value = this.options.okText;
-      okButton.className = 'editor_ok_button';
-      this.form.appendChild(okButton);
-    }
-
-    if (this.options.cancelLink) {
-      cancelLink = document.createElement("a");
-      cancelLink.href = "#";
-      cancelLink.appendChild(document.createTextNode(this.options.cancelText));
-      cancelLink.onclick = this.onclickCancel.bind(this);
-      cancelLink.className = 'editor_cancel';      
-      this.form.appendChild(cancelLink);
-    }
-  },
-  hasHTMLLineBreaks: function(string) {
-    if (!this.options.handleLineBreaks) return false;
-    return string.match(/<br/i) || string.match(/<p>/i);
-  },
-  convertHTMLLineBreaks: function(string) {
-    return string.replace(/<br>/gi, "\n").replace(/<br\/>/gi, "\n").replace(/<\/p>/gi, "\n").replace(/<p>/gi, "");
-  },
-  createEditField: function() {
-    var text;
-    if(this.options.loadTextURL) {
-      text = this.options.loadingText;
-    } else {
-      text = this.getText();
-    }
-
-    var obj = this;
-    
-    if (this.options.rows == 1 && !this.hasHTMLLineBreaks(text)) {
-      this.options.textarea = false;
-      var textField = document.createElement("input");
-      textField.obj = this;
-      textField.type = "text";
-      textField.name = this.options.paramName;
-      textField.value = text;
-      textField.style.backgroundColor = this.options.highlightcolor;
-      textField.className = 'editor_field';
-      var size = this.options.size || this.options.cols || 0;
-      if (size != 0) textField.size = size;
-      if (this.options.submitOnBlur)
-        textField.onblur = this.onSubmit.bind(this);
-      this.editField = textField;
-    } else {
-      this.options.textarea = true;
-      var textArea = document.createElement("textarea");
-      textArea.obj = this;
-      textArea.name = this.options.paramName;
-      textArea.value = this.convertHTMLLineBreaks(text);
-      textArea.rows = this.options.rows;
-      textArea.cols = this.options.cols || 40;
-      textArea.className = 'editor_field';      
-      if (this.options.submitOnBlur)
-        textArea.onblur = this.onSubmit.bind(this);
-      this.editField = textArea;
-    }
-    
-    if(this.options.loadTextURL) {
-      this.loadExternalText();
-    }
-    this.form.appendChild(this.editField);
-  },
-  getText: function() {
-    return this.element.innerHTML;
-  },
-  loadExternalText: function() {
-    Element.addClassName(this.form, this.options.loadingClassName);
-    this.editField.disabled = true;
-    new Ajax.Request(
-      this.options.loadTextURL,
-      Object.extend({
-        asynchronous: true,
-        onComplete: this.onLoadedExternalText.bind(this)
-      }, this.options.ajaxOptions)
-    );
-  },
-  onLoadedExternalText: function(transport) {
-    Element.removeClassName(this.form, this.options.loadingClassName);
-    this.editField.disabled = false;
-    this.editField.value = transport.responseText.stripTags();
-    Field.scrollFreeActivate(this.editField);
-  },
-  onclickCancel: function() {
-    this.onComplete();
-    this.leaveEditMode();
-    return false;
-  },
-  onFailure: function(transport) {
-    this.options.onFailure(transport);
-    if (this.oldInnerHTML) {
-      this.element.innerHTML = this.oldInnerHTML;
-      this.oldInnerHTML = null;
-    }
-    return false;
-  },
-  onSubmit: function() {
-    // onLoading resets these so we need to save them away for the Ajax call
-    var form = this.form;
-    var value = this.editField.value;
-    
-    // do this first, sometimes the ajax call returns before we get a chance to switch on Saving...
-    // which means this will actually switch on Saving... *after* we've left edit mode causing Saving...
-    // to be displayed indefinitely
-    this.onLoading();
-    
-    if (this.options.evalScripts) {
-      new Ajax.Request(
-        this.url, Object.extend({
-          parameters: this.options.callback(form, value),
-          onComplete: this.onComplete.bind(this),
-          onFailure: this.onFailure.bind(this),
-          asynchronous:true, 
-          evalScripts:true
-        }, this.options.ajaxOptions));
-    } else  {
-      new Ajax.Updater(
-        { success: this.element,
-          // don't update on failure (this could be an option)
-          failure: null }, 
-        this.url, Object.extend({
-          parameters: this.options.callback(form, value),
-          onComplete: this.onComplete.bind(this),
-          onFailure: this.onFailure.bind(this)
-        }, this.options.ajaxOptions));
-    }
-    // stop the event to avoid a page refresh in Safari
-    if (arguments.length > 1) {
-      Event.stop(arguments[0]);
-    }
-    return false;
-  },
-  onLoading: function() {
-    this.saving = true;
-    this.removeForm();
-    this.leaveHover();
-    this.showSaving();
-  },
-  showSaving: function() {
-    this.oldInnerHTML = this.element.innerHTML;
-    this.element.innerHTML = this.options.savingText;
-    Element.addClassName(this.element, this.options.savingClassName);
-    this.element.style.backgroundColor = this.originalBackground;
-    Element.show(this.element);
-  },
-  removeForm: function() {
-    if(this.form) {
-      if (this.form.parentNode) Element.remove(this.form);
-      this.form = null;
-    }
-  },
-  enterHover: function() {
-    if (this.saving) return;
-    this.element.style.backgroundColor = this.options.highlightcolor;
-    if (this.effect) {
-      this.effect.cancel();
-    }
-    Element.addClassName(this.element, this.options.hoverClassName)
-  },
-  leaveHover: function() {
-    if (this.options.backgroundColor) {
-      this.element.style.backgroundColor = this.oldBackground;
-    }
-    Element.removeClassName(this.element, this.options.hoverClassName)
-    if (this.saving) return;
-    this.effect = new Effect.Highlight(this.element, {
-      startcolor: this.options.highlightcolor,
-      endcolor: this.options.highlightendcolor,
-      restorecolor: this.originalBackground
-    });
-  },
-  leaveEditMode: function() {
-    Element.removeClassName(this.element, this.options.savingClassName);
-    this.removeForm();
-    this.leaveHover();
-    this.element.style.backgroundColor = this.originalBackground;
-    Element.show(this.element);
-    if (this.options.externalControl) {
-      Element.show(this.options.externalControl);
-    }
-    this.editing = false;
-    this.saving = false;
-    this.oldInnerHTML = null;
-    this.onLeaveEditMode();
-  },
-  onComplete: function(transport) {
-    this.leaveEditMode();
-    this.options.onComplete.bind(this)(transport, this.element);
-  },
-  onEnterEditMode: function() {},
-  onLeaveEditMode: function() {},
-  dispose: function() {
-    if (this.oldInnerHTML) {
-      this.element.innerHTML = this.oldInnerHTML;
-    }
-    this.leaveEditMode();
-    Event.stopObserving(this.element, 'click', this.onclickListener);
-    Event.stopObserving(this.element, 'mouseover', this.mouseoverListener);
-    Event.stopObserving(this.element, 'mouseout', this.mouseoutListener);
-    if (this.options.externalControl) {
-      Event.stopObserving(this.options.externalControl, 'click', this.onclickListener);
-      Event.stopObserving(this.options.externalControl, 'mouseover', this.mouseoverListener);
-      Event.stopObserving(this.options.externalControl, 'mouseout', this.mouseoutListener);
-    }
-  }
-};
-
-Ajax.InPlaceCollectionEditor = Class.create();
-Object.extend(Ajax.InPlaceCollectionEditor.prototype, Ajax.InPlaceEditor.prototype);
-Object.extend(Ajax.InPlaceCollectionEditor.prototype, {
-  createEditField: function() {
-    if (!this.cached_selectTag) {
-      var selectTag = document.createElement("select");
-      var collection = this.options.collection || [];
-      var optionTag;
-      collection.each(function(e,i) {
-        optionTag = document.createElement("option");
-        optionTag.value = (e instanceof Array) ? e[0] : e;
-        if((typeof this.options.value == 'undefined') && 
-          ((e instanceof Array) ? this.element.innerHTML == e[1] : e == optionTag.value)) optionTag.selected = true;
-        if(this.options.value==optionTag.value) optionTag.selected = true;
-        optionTag.appendChild(document.createTextNode((e instanceof Array) ? e[1] : e));
-        selectTag.appendChild(optionTag);
-      }.bind(this));
-      this.cached_selectTag = selectTag;
-    }
-
-    this.editField = this.cached_selectTag;
-    if(this.options.loadTextURL) this.loadExternalText();
-    this.form.appendChild(this.editField);
-    this.options.callback = function(form, value) {
-      return "value=" + encodeURIComponent(value);
-    }
-  }
-});
-
-// Delayed observer, like Form.Element.Observer, 
-// but waits for delay after last key input
-// Ideal for live-search fields
-
-Form.Element.DelayedObserver = Class.create();
-Form.Element.DelayedObserver.prototype = {
-  initialize: function(element, delay, callback) {
-    this.delay     = delay || 0.5;
-    this.element   = $(element);
-    this.callback  = callback;
-    this.timer     = null;
-    this.lastValue = $F(this.element); 
-    Event.observe(this.element,'keyup',this.delayedListener.bindAsEventListener(this));
-  },
-  delayedListener: function(event) {
-    if(this.lastValue == $F(this.element)) return;
-    if(this.timer) clearTimeout(this.timer);
-    this.timer = setTimeout(this.onTimerEvent.bind(this), this.delay * 1000);
-    this.lastValue = $F(this.element);
-  },
-  onTimerEvent: function() {
-    this.timer = null;
-    this.callback(this.element, $F(this.element));
-  }
-};
diff --git a/apps/maarch_entreprise/tools/tafelTree/js/dragdrop.js b/apps/maarch_entreprise/tools/tafelTree/js/dragdrop.js
deleted file mode 100755
index 32c91bc342b43bf441e421700b9a821442cf948b..0000000000000000000000000000000000000000
--- a/apps/maarch_entreprise/tools/tafelTree/js/dragdrop.js
+++ /dev/null
@@ -1,944 +0,0 @@
-// script.aculo.us dragdrop.js v1.7.0, Fri Jan 19 19:16:36 CET 2007
-
-// Copyright (c) 2005, 2006 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
-//           (c) 2005, 2006 Sammi Williams (http://www.oriontransfer.co.nz, sammi@oriontransfer.co.nz)
-// 
-// script.aculo.us is freely distributable under the terms of an MIT-style license.
-// For details, see the script.aculo.us web site: http://script.aculo.us/
-
-if(typeof Effect == 'undefined')
-  throw("dragdrop.js requires including script.aculo.us' effects.js library");
-
-var Droppables = {
-  drops: [],
-
-  remove: function(element) {
-    this.drops = this.drops.reject(function(d) { return d.element==$(element) });
-  },
-
-  add: function(element) {
-    element = $(element);
-    var options = Object.extend({
-      greedy:     true,
-      hoverclass: null,
-      tree:       false
-    }, arguments[1] || {});
-
-    // cache containers
-    if(options.containment) {
-      options._containers = [];
-      var containment = options.containment;
-      if((typeof containment == 'object') && 
-        (containment.constructor == Array)) {
-        containment.each( function(c) { options._containers.push($(c)) });
-      } else {
-        options._containers.push($(containment));
-      }
-    }
-    
-    if(options.accept) options.accept = [options.accept].flatten();
-
-    Element.makePositioned(element); // fix IE
-    options.element = element;
-
-    this.drops.push(options);
-  },
-  
-  findDeepestChild: function(drops) {
-    deepest = drops[0];
-      
-    for (i = 1; i < drops.length; ++i)
-      if (Element.isParent(drops[i].element, deepest.element))
-        deepest = drops[i];
-    
-    return deepest;
-  },
-
-  isContained: function(element, drop) {
-    var containmentNode;
-    if(drop.tree) {
-      containmentNode = element.treeNode; 
-    } else {
-      containmentNode = element.parentNode;
-    }
-    return drop._containers.detect(function(c) { return containmentNode == c });
-  },
-  
-  isAffected: function(point, element, drop) {
-    return (
-      (drop.element!=element) &&
-      ((!drop._containers) ||
-        this.isContained(element, drop)) &&
-      ((!drop.accept) ||
-        (Element.classNames(element).detect( 
-          function(v) { return drop.accept.include(v) } ) )) &&
-      Position.within(drop.element, point[0], point[1]) );
-  },
-
-  deactivate: function(drop) {
-    if(drop.hoverclass)
-      Element.removeClassName(drop.element, drop.hoverclass);
-    this.last_active = null;
-  },
-
-  activate: function(drop) {
-    if(drop.hoverclass)
-      Element.addClassName(drop.element, drop.hoverclass);
-    this.last_active = drop;
-  },
-
-  show: function(point, element) {
-    if(!this.drops.length) return;
-    var affected = [];
-    
-    if(this.last_active) this.deactivate(this.last_active);
-    this.drops.each( function(drop) {
-      if(Droppables.isAffected(point, element, drop))
-        affected.push(drop);
-    });
-        
-    if(affected.length>0) {
-      drop = Droppables.findDeepestChild(affected);
-      Position.within(drop.element, point[0], point[1]);
-      if(drop.onHover)
-        drop.onHover(element, drop.element, Position.overlap(drop.overlap, drop.element));
-      
-      Droppables.activate(drop);
-    }
-  },
-
-  fire: function(event, element) {
-    if(!this.last_active) return;
-    Position.prepare();
-
-    if (this.isAffected([Event.pointerX(event), Event.pointerY(event)], element, this.last_active))
-      if (this.last_active.onDrop) 
-        this.last_active.onDrop(element, this.last_active.element, event);
-  },
-
-  reset: function() {
-    if(this.last_active)
-      this.deactivate(this.last_active);
-  }
-}
-
-var Draggables = {
-  drags: [],
-  observers: [],
-  
-  register: function(draggable) {
-    if(this.drags.length == 0) {
-      this.eventMouseUp   = this.endDrag.bindAsEventListener(this);
-      this.eventMouseMove = this.updateDrag.bindAsEventListener(this);
-      this.eventKeypress  = this.keyPress.bindAsEventListener(this);
-      
-      Event.observe(document, "mouseup", this.eventMouseUp);
-      Event.observe(document, "mousemove", this.eventMouseMove);
-      Event.observe(document, "keypress", this.eventKeypress);
-    }
-    this.drags.push(draggable);
-  },
-  
-  unregister: function(draggable) {
-    this.drags = this.drags.reject(function(d) { return d==draggable });
-    if(this.drags.length == 0) {
-      Event.stopObserving(document, "mouseup", this.eventMouseUp);
-      Event.stopObserving(document, "mousemove", this.eventMouseMove);
-      Event.stopObserving(document, "keypress", this.eventKeypress);
-    }
-  },
-  
-  activate: function(draggable) {
-    if(draggable.options.delay) { 
-      this._timeout = setTimeout(function() { 
-        Draggables._timeout = null; 
-        window.focus(); 
-        Draggables.activeDraggable = draggable; 
-      }.bind(this), draggable.options.delay); 
-    } else {
-      window.focus(); // allows keypress events if window isn't currently focused, fails for Safari
-      this.activeDraggable = draggable;
-    }
-  },
-  
-  deactivate: function() {
-    this.activeDraggable = null;
-  },
-  
-  updateDrag: function(event) {
-    if(!this.activeDraggable) return;
-    var pointer = [Event.pointerX(event), Event.pointerY(event)];
-    // Mozilla-based browsers fire successive mousemove events with
-    // the same coordinates, prevent needless redrawing (moz bug?)
-    if(this._lastPointer && (this._lastPointer.inspect() == pointer.inspect())) return;
-    this._lastPointer = pointer;
-    
-    this.activeDraggable.updateDrag(event, pointer);
-  },
-  
-  endDrag: function(event) {
-    if(this._timeout) { 
-      clearTimeout(this._timeout); 
-      this._timeout = null; 
-    }
-    if(!this.activeDraggable) return;
-    this._lastPointer = null;
-    this.activeDraggable.endDrag(event);
-    this.activeDraggable = null;
-  },
-  
-  keyPress: function(event) {
-    if(this.activeDraggable)
-      this.activeDraggable.keyPress(event);
-  },
-  
-  addObserver: function(observer) {
-    this.observers.push(observer);
-    this._cacheObserverCallbacks();
-  },
-  
-  removeObserver: function(element) {  // element instead of observer fixes mem leaks
-    this.observers = this.observers.reject( function(o) { return o.element==element });
-    this._cacheObserverCallbacks();
-  },
-  
-  notify: function(eventName, draggable, event) {  // 'onStart', 'onEnd', 'onDrag'
-    if(this[eventName+'Count'] > 0)
-      this.observers.each( function(o) {
-        if(o[eventName]) o[eventName](eventName, draggable, event);
-      });
-    if(draggable.options[eventName]) draggable.options[eventName](draggable, event);
-  },
-  
-  _cacheObserverCallbacks: function() {
-    ['onStart','onEnd','onDrag'].each( function(eventName) {
-      Draggables[eventName+'Count'] = Draggables.observers.select(
-        function(o) { return o[eventName]; }
-      ).length;
-    });
-  }
-}
-
-/*--------------------------------------------------------------------------*/
-
-var Draggable = Class.create();
-Draggable._dragging    = {};
-
-Draggable.prototype = {
-  initialize: function(element) {
-    var defaults = {
-      handle: false,
-      reverteffect: function(element, top_offset, left_offset) {
-        var dur = Math.sqrt(Math.abs(top_offset^2)+Math.abs(left_offset^2))*0.02;
-        new Effect.Move(element, { x: -left_offset, y: -top_offset, duration: dur,
-          queue: {scope:'_draggable', position:'end'}
-        });
-      },
-      endeffect: function(element) {
-        var toOpacity = typeof element._opacity == 'number' ? element._opacity : 1.0;
-        new Effect.Opacity(element, {duration:0.2, from:0.7, to:toOpacity, 
-          queue: {scope:'_draggable', position:'end'},
-          afterFinish: function(){ 
-            Draggable._dragging[element] = false 
-          }
-        }); 
-      },
-      zindex: 1000,
-      revert: false,
-      scroll: false,
-      scrollSensitivity: 20,
-      scrollSpeed: 15,
-      snap: false,  // false, or xy or [x,y] or function(x,y){ return [x,y] }
-      delay: 0
-    };
-    
-    if(!arguments[1] || typeof arguments[1].endeffect == 'undefined')
-      Object.extend(defaults, {
-        starteffect: function(element) {
-          element._opacity = Element.getOpacity(element);
-          Draggable._dragging[element] = true;
-          new Effect.Opacity(element, {duration:0.2, from:element._opacity, to:0.7}); 
-        }
-      });
-    
-    var options = Object.extend(defaults, arguments[1] || {});
-
-    this.element = $(element);
-    
-    if(options.handle && (typeof options.handle == 'string'))
-      this.handle = this.element.down('.'+options.handle, 0);
-    
-    if(!this.handle) this.handle = $(options.handle);
-    if(!this.handle) this.handle = this.element;
-    
-    if(options.scroll && !options.scroll.scrollTo && !options.scroll.outerHTML) {
-      options.scroll = $(options.scroll);
-      this._isScrollChild = Element.childOf(this.element, options.scroll);
-    }
-
-    Element.makePositioned(this.element); // fix IE    
-
-    this.delta    = this.currentDelta();
-    this.options  = options;
-    this.dragging = false;   
-
-    this.eventMouseDown = this.initDrag.bindAsEventListener(this);
-    Event.observe(this.handle, "mousedown", this.eventMouseDown);
-    
-    Draggables.register(this);
-  },
-  
-  destroy: function() {
-    Event.stopObserving(this.handle, "mousedown", this.eventMouseDown);
-    Draggables.unregister(this);
-  },
-  
-  currentDelta: function() {
-    return([
-      parseInt(Element.getStyle(this.element,'left') || '0'),
-      parseInt(Element.getStyle(this.element,'top') || '0')]);
-  },
-  
-  initDrag: function(event) {
-    if(typeof Draggable._dragging[this.element] != 'undefined' &&
-      Draggable._dragging[this.element]) return;
-    if(Event.isLeftClick(event)) {    
-      // abort on form elements, fixes a Firefox issue
-      var src = Event.element(event);
-      if((tag_name = src.tagName.toUpperCase()) && (
-        tag_name=='INPUT' ||
-        tag_name=='SELECT' ||
-        tag_name=='OPTION' ||
-        tag_name=='BUTTON' ||
-        tag_name=='TEXTAREA')) return;
-        
-      var pointer = [Event.pointerX(event), Event.pointerY(event)];
-      var pos     = Position.cumulativeOffset(this.element);
-      this.offset = [0,1].map( function(i) { return (pointer[i] - pos[i]) });
-      
-      Draggables.activate(this);
-      Event.stop(event);
-    }
-  },
-  
-  startDrag: function(event) {
-    this.dragging = true;
-    
-    if(this.options.zindex) {
-      this.originalZ = parseInt(Element.getStyle(this.element,'z-index') || 0);
-      this.element.style.zIndex = this.options.zindex;
-    }
-    
-    if(this.options.ghosting) {
-      this._clone = this.element.cloneNode(true);
-      Position.absolutize(this.element);
-      this.element.parentNode.insertBefore(this._clone, this.element);
-    }
-    
-    if(this.options.scroll) {
-      if (this.options.scroll == window) {
-        var where = this._getWindowScroll(this.options.scroll);
-        this.originalScrollLeft = where.left;
-        this.originalScrollTop = where.top;
-      } else {
-        this.originalScrollLeft = this.options.scroll.scrollLeft;
-        this.originalScrollTop = this.options.scroll.scrollTop;
-      }
-    }
-    
-    Draggables.notify('onStart', this, event);
-        
-    if(this.options.starteffect) this.options.starteffect(this.element);
-  },
-  
-  updateDrag: function(event, pointer) {
-    if(!this.dragging) this.startDrag(event);
-    Position.prepare();
-    Droppables.show(pointer, this.element);
-    Draggables.notify('onDrag', this, event);
-    
-    this.draw(pointer);
-    if(this.options.change) this.options.change(this);
-    
-    if(this.options.scroll) {
-      this.stopScrolling();
-      
-      var p;
-      if (this.options.scroll == window) {
-        with(this._getWindowScroll(this.options.scroll)) { p = [ left, top, left+width, top+height ]; }
-      } else {
-        p = Position.page(this.options.scroll);
-        p[0] += this.options.scroll.scrollLeft + Position.deltaX;
-        p[1] += this.options.scroll.scrollTop + Position.deltaY;
-        p.push(p[0]+this.options.scroll.offsetWidth);
-        p.push(p[1]+this.options.scroll.offsetHeight);
-      }
-      var speed = [0,0];
-      if(pointer[0] < (p[0]+this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[0]+this.options.scrollSensitivity);
-      if(pointer[1] < (p[1]+this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[1]+this.options.scrollSensitivity);
-      if(pointer[0] > (p[2]-this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[2]-this.options.scrollSensitivity);
-      if(pointer[1] > (p[3]-this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[3]-this.options.scrollSensitivity);
-      this.startScrolling(speed);
-    }
-    
-    // fix AppleWebKit rendering
-    if(navigator.appVersion.indexOf('AppleWebKit')>0) window.scrollBy(0,0);
-    
-    Event.stop(event);
-  },
-  
-  finishDrag: function(event, success) {
-    this.dragging = false;
-
-    if(this.options.ghosting) {
-      Position.relativize(this.element);
-      Element.remove(this._clone);
-      this._clone = null;
-    }
-
-    if(success) Droppables.fire(event, this.element);
-    Draggables.notify('onEnd', this, event);
-
-    var revert = this.options.revert;
-    if(revert && typeof revert == 'function') revert = revert(this.element);
-    
-    var d = this.currentDelta();
-    if(revert && this.options.reverteffect) {
-      this.options.reverteffect(this.element, 
-        d[1]-this.delta[1], d[0]-this.delta[0]);
-    } else {
-      this.delta = d;
-    }
-
-    if(this.options.zindex)
-      this.element.style.zIndex = this.originalZ;
-
-    if(this.options.endeffect) 
-      this.options.endeffect(this.element);
-      
-    Draggables.deactivate(this);
-    Droppables.reset();
-  },
-  
-  keyPress: function(event) {
-    if(event.keyCode!=Event.KEY_ESC) return;
-    this.finishDrag(event, false);
-    Event.stop(event);
-  },
-  
-  endDrag: function(event) {
-    if(!this.dragging) return;
-    this.stopScrolling();
-    this.finishDrag(event, true);
-    Event.stop(event);
-  },
-  
-  draw: function(point) {
-    var pos = Position.cumulativeOffset(this.element);
-    if(this.options.ghosting) {
-      var r   = Position.realOffset(this.element);
-      pos[0] += r[0] - Position.deltaX; pos[1] += r[1] - Position.deltaY;
-    }
-    
-    var d = this.currentDelta();
-    pos[0] -= d[0]; pos[1] -= d[1];
-    
-    if(this.options.scroll && (this.options.scroll != window && this._isScrollChild)) {
-      pos[0] -= this.options.scroll.scrollLeft-this.originalScrollLeft;
-      pos[1] -= this.options.scroll.scrollTop-this.originalScrollTop;
-    }
-    
-    var p = [0,1].map(function(i){ 
-      return (point[i]-pos[i]-this.offset[i]) 
-    }.bind(this));
-    
-    if(this.options.snap) {
-      if(typeof this.options.snap == 'function') {
-        p = this.options.snap(p[0],p[1],this);
-      } else {
-      if(this.options.snap instanceof Array) {
-        p = p.map( function(v, i) {
-          return Math.round(v/this.options.snap[i])*this.options.snap[i] }.bind(this))
-      } else {
-        p = p.map( function(v) {
-          return Math.round(v/this.options.snap)*this.options.snap }.bind(this))
-      }
-    }}
-    
-    var style = this.element.style;
-    if((!this.options.constraint) || (this.options.constraint=='horizontal'))
-      style.left = p[0] + "px";
-    if((!this.options.constraint) || (this.options.constraint=='vertical'))
-      style.top  = p[1] + "px";
-    
-    if(style.visibility=="hidden") style.visibility = ""; // fix gecko rendering
-  },
-  
-  stopScrolling: function() {
-    if(this.scrollInterval) {
-      clearInterval(this.scrollInterval);
-      this.scrollInterval = null;
-      Draggables._lastScrollPointer = null;
-    }
-  },
-  
-  startScrolling: function(speed) {
-    if(!(speed[0] || speed[1])) return;
-    this.scrollSpeed = [speed[0]*this.options.scrollSpeed,speed[1]*this.options.scrollSpeed];
-    this.lastScrolled = new Date();
-    this.scrollInterval = setInterval(this.scroll.bind(this), 10);
-  },
-  
-  scroll: function() {
-    var current = new Date();
-    var delta = current - this.lastScrolled;
-    this.lastScrolled = current;
-    if(this.options.scroll == window) {
-      with (this._getWindowScroll(this.options.scroll)) {
-        if (this.scrollSpeed[0] || this.scrollSpeed[1]) {
-          var d = delta / 1000;
-          this.options.scroll.scrollTo( left + d*this.scrollSpeed[0], top + d*this.scrollSpeed[1] );
-        }
-      }
-    } else {
-      this.options.scroll.scrollLeft += this.scrollSpeed[0] * delta / 1000;
-      this.options.scroll.scrollTop  += this.scrollSpeed[1] * delta / 1000;
-    }
-    
-    Position.prepare();
-    Droppables.show(Draggables._lastPointer, this.element);
-    Draggables.notify('onDrag', this);
-    if (this._isScrollChild) {
-      Draggables._lastScrollPointer = Draggables._lastScrollPointer || $A(Draggables._lastPointer);
-      Draggables._lastScrollPointer[0] += this.scrollSpeed[0] * delta / 1000;
-      Draggables._lastScrollPointer[1] += this.scrollSpeed[1] * delta / 1000;
-      if (Draggables._lastScrollPointer[0] < 0)
-        Draggables._lastScrollPointer[0] = 0;
-      if (Draggables._lastScrollPointer[1] < 0)
-        Draggables._lastScrollPointer[1] = 0;
-      this.draw(Draggables._lastScrollPointer);
-    }
-    
-    if(this.options.change) this.options.change(this);
-  },
-  
-  _getWindowScroll: function(w) {
-    var T, L, W, H;
-    with (w.document) {
-      if (w.document.documentElement && documentElement.scrollTop) {
-        T = documentElement.scrollTop;
-        L = documentElement.scrollLeft;
-      } else if (w.document.body) {
-        T = body.scrollTop;
-        L = body.scrollLeft;
-      }
-      if (w.innerWidth) {
-        W = w.innerWidth;
-        H = w.innerHeight;
-      } else if (w.document.documentElement && documentElement.clientWidth) {
-        W = documentElement.clientWidth;
-        H = documentElement.clientHeight;
-      } else {
-        W = body.offsetWidth;
-        H = body.offsetHeight
-      }
-    }
-    return { top: T, left: L, width: W, height: H };
-  }
-}
-
-/*--------------------------------------------------------------------------*/
-
-var SortableObserver = Class.create();
-SortableObserver.prototype = {
-  initialize: function(element, observer) {
-    this.element   = $(element);
-    this.observer  = observer;
-    this.lastValue = Sortable.serialize(this.element);
-  },
-  
-  onStart: function() {
-    this.lastValue = Sortable.serialize(this.element);
-  },
-  
-  onEnd: function() {
-    Sortable.unmark();
-    if(this.lastValue != Sortable.serialize(this.element))
-      this.observer(this.element)
-  }
-}
-
-var Sortable = {
-  SERIALIZE_RULE: /^[^_\-](?:[A-Za-z0-9\-\_]*)[_](.*)$/,
-  
-  sortables: {},
-  
-  _findRootElement: function(element) {
-    while (element.tagName.toUpperCase() != "BODY") {  
-      if(element.id && Sortable.sortables[element.id]) return element;
-      element = element.parentNode;
-    }
-  },
-
-  options: function(element) {
-    element = Sortable._findRootElement($(element));
-    if(!element) return;
-    return Sortable.sortables[element.id];
-  },
-  
-  destroy: function(element){
-    var s = Sortable.options(element);
-    
-    if(s) {
-      Draggables.removeObserver(s.element);
-      s.droppables.each(function(d){ Droppables.remove(d) });
-      s.draggables.invoke('destroy');
-      
-      delete Sortable.sortables[s.element.id];
-    }
-  },
-
-  create: function(element) {
-    element = $(element);
-    var options = Object.extend({ 
-      element:     element,
-      tag:         'li',       // assumes li children, override with tag: 'tagname'
-      dropOnEmpty: false,
-      tree:        false,
-      treeTag:     'ul',
-      overlap:     'vertical', // one of 'vertical', 'horizontal'
-      constraint:  'vertical', // one of 'vertical', 'horizontal', false
-      containment: element,    // also takes array of elements (or id's); or false
-      handle:      false,      // or a CSS class
-      only:        false,
-      delay:       0,
-      hoverclass:  null,
-      ghosting:    false,
-      scroll:      false,
-      scrollSensitivity: 20,
-      scrollSpeed: 15,
-      format:      this.SERIALIZE_RULE,
-      onChange:    Prototype.emptyFunction,
-      onUpdate:    Prototype.emptyFunction
-    }, arguments[1] || {});
-
-    // clear any old sortable with same element
-    this.destroy(element);
-
-    // build options for the draggables
-    var options_for_draggable = {
-      revert:      true,
-      scroll:      options.scroll,
-      scrollSpeed: options.scrollSpeed,
-      scrollSensitivity: options.scrollSensitivity,
-      delay:       options.delay,
-      ghosting:    options.ghosting,
-      constraint:  options.constraint,
-      handle:      options.handle };
-
-    if(options.starteffect)
-      options_for_draggable.starteffect = options.starteffect;
-
-    if(options.reverteffect)
-      options_for_draggable.reverteffect = options.reverteffect;
-    else
-      if(options.ghosting) options_for_draggable.reverteffect = function(element) {
-        element.style.top  = 0;
-        element.style.left = 0;
-      };
-
-    if(options.endeffect)
-      options_for_draggable.endeffect = options.endeffect;
-
-    if(options.zindex)
-      options_for_draggable.zindex = options.zindex;
-
-    // build options for the droppables  
-    var options_for_droppable = {
-      overlap:     options.overlap,
-      containment: options.containment,
-      tree:        options.tree,
-      hoverclass:  options.hoverclass,
-      onHover:     Sortable.onHover
-    }
-    
-    var options_for_tree = {
-      onHover:      Sortable.onEmptyHover,
-      overlap:      options.overlap,
-      containment:  options.containment,
-      hoverclass:   options.hoverclass
-    }
-
-    // fix for gecko engine
-    Element.cleanWhitespace(element); 
-
-    options.draggables = [];
-    options.droppables = [];
-
-    // drop on empty handling
-    if(options.dropOnEmpty || options.tree) {
-      Droppables.add(element, options_for_tree);
-      options.droppables.push(element);
-    }
-
-    (this.findElements(element, options) || []).each( function(e) {
-      // handles are per-draggable
-      var handle = options.handle ? 
-        $(e).down('.'+options.handle,0) : e;    
-      options.draggables.push(
-        new Draggable(e, Object.extend(options_for_draggable, { handle: handle })));
-      Droppables.add(e, options_for_droppable);
-      if(options.tree) e.treeNode = element;
-      options.droppables.push(e);      
-    });
-    
-    if(options.tree) {
-      (Sortable.findTreeElements(element, options) || []).each( function(e) {
-        Droppables.add(e, options_for_tree);
-        e.treeNode = element;
-        options.droppables.push(e);
-      });
-    }
-
-    // keep reference
-    this.sortables[element.id] = options;
-
-    // for onupdate
-    Draggables.addObserver(new SortableObserver(element, options.onUpdate));
-
-  },
-
-  // return all suitable-for-sortable elements in a guaranteed order
-  findElements: function(element, options) {
-    return Element.findChildren(
-      element, options.only, options.tree ? true : false, options.tag);
-  },
-  
-  findTreeElements: function(element, options) {
-    return Element.findChildren(
-      element, options.only, options.tree ? true : false, options.treeTag);
-  },
-
-  onHover: function(element, dropon, overlap) {
-    if(Element.isParent(dropon, element)) return;
-
-    if(overlap > .33 && overlap < .66 && Sortable.options(dropon).tree) {
-      return;
-    } else if(overlap>0.5) {
-      Sortable.mark(dropon, 'before');
-      if(dropon.previousSibling != element) {
-        var oldParentNode = element.parentNode;
-        element.style.visibility = "hidden"; // fix gecko rendering
-        dropon.parentNode.insertBefore(element, dropon);
-        if(dropon.parentNode!=oldParentNode) 
-          Sortable.options(oldParentNode).onChange(element);
-        Sortable.options(dropon.parentNode).onChange(element);
-      }
-    } else {
-      Sortable.mark(dropon, 'after');
-      var nextElement = dropon.nextSibling || null;
-      if(nextElement != element) {
-        var oldParentNode = element.parentNode;
-        element.style.visibility = "hidden"; // fix gecko rendering
-        dropon.parentNode.insertBefore(element, nextElement);
-        if(dropon.parentNode!=oldParentNode) 
-          Sortable.options(oldParentNode).onChange(element);
-        Sortable.options(dropon.parentNode).onChange(element);
-      }
-    }
-  },
-  
-  onEmptyHover: function(element, dropon, overlap) {
-    var oldParentNode = element.parentNode;
-    var droponOptions = Sortable.options(dropon);
-        
-    if(!Element.isParent(dropon, element)) {
-      var index;
-      
-      var children = Sortable.findElements(dropon, {tag: droponOptions.tag, only: droponOptions.only});
-      var child = null;
-            
-      if(children) {
-        var offset = Element.offsetSize(dropon, droponOptions.overlap) * (1.0 - overlap);
-        
-        for (index = 0; index < children.length; index += 1) {
-          if (offset - Element.offsetSize (children[index], droponOptions.overlap) >= 0) {
-            offset -= Element.offsetSize (children[index], droponOptions.overlap);
-          } else if (offset - (Element.offsetSize (children[index], droponOptions.overlap) / 2) >= 0) {
-            child = index + 1 < children.length ? children[index + 1] : null;
-            break;
-          } else {
-            child = children[index];
-            break;
-          }
-        }
-      }
-      
-      dropon.insertBefore(element, child);
-      
-      Sortable.options(oldParentNode).onChange(element);
-      droponOptions.onChange(element);
-    }
-  },
-
-  unmark: function() {
-    if(Sortable._marker) Sortable._marker.hide();
-  },
-
-  mark: function(dropon, position) {
-    // mark on ghosting only
-    var sortable = Sortable.options(dropon.parentNode);
-    if(sortable && !sortable.ghosting) return; 
-
-    if(!Sortable._marker) {
-      Sortable._marker = 
-        ($('dropmarker') || Element.extend(document.createElement('DIV'))).
-          hide().addClassName('dropmarker').setStyle({position:'absolute'});
-      document.getElementsByTagName("body").item(0).appendChild(Sortable._marker);
-    }    
-    var offsets = Position.cumulativeOffset(dropon);
-    Sortable._marker.setStyle({left: offsets[0]+'px', top: offsets[1] + 'px'});
-    
-    if(position=='after')
-      if(sortable.overlap == 'horizontal') 
-        Sortable._marker.setStyle({left: (offsets[0]+dropon.clientWidth) + 'px'});
-      else
-        Sortable._marker.setStyle({top: (offsets[1]+dropon.clientHeight) + 'px'});
-    
-    Sortable._marker.show();
-  },
-  
-  _tree: function(element, options, parent) {
-    var children = Sortable.findElements(element, options) || [];
-  
-    for (var i = 0; i < children.length; ++i) {
-      var match = children[i].id.match(options.format);
-
-      if (!match) continue;
-      
-      var child = {
-        id: encodeURIComponent(match ? match[1] : null),
-        element: element,
-        parent: parent,
-        children: [],
-        position: parent.children.length,
-        container: $(children[i]).down(options.treeTag)
-      }
-      
-      /* Get the element containing the children and recurse over it */
-      if (child.container)
-        this._tree(child.container, options, child)
-      
-      parent.children.push (child);
-    }
-
-    return parent; 
-  },
-
-  tree: function(element) {
-    element = $(element);
-    var sortableOptions = this.options(element);
-    var options = Object.extend({
-      tag: sortableOptions.tag,
-      treeTag: sortableOptions.treeTag,
-      only: sortableOptions.only,
-      name: element.id,
-      format: sortableOptions.format
-    }, arguments[1] || {});
-    
-    var root = {
-      id: null,
-      parent: null,
-      children: [],
-      container: element,
-      position: 0
-    }
-    
-    return Sortable._tree(element, options, root);
-  },
-
-  /* Construct a [i] index for a particular node */
-  _constructIndex: function(node) {
-    var index = '';
-    do {
-      if (node.id) index = '[' + node.position + ']' + index;
-    } while ((node = node.parent) != null);
-    return index;
-  },
-
-  sequence: function(element) {
-    element = $(element);
-    var options = Object.extend(this.options(element), arguments[1] || {});
-    
-    return $(this.findElements(element, options) || []).map( function(item) {
-      return item.id.match(options.format) ? item.id.match(options.format)[1] : '';
-    });
-  },
-
-  setSequence: function(element, new_sequence) {
-    element = $(element);
-    var options = Object.extend(this.options(element), arguments[2] || {});
-    
-    var nodeMap = {};
-    this.findElements(element, options).each( function(n) {
-        if (n.id.match(options.format))
-            nodeMap[n.id.match(options.format)[1]] = [n, n.parentNode];
-        n.parentNode.removeChild(n);
-    });
-   
-    new_sequence.each(function(ident) {
-      var n = nodeMap[ident];
-      if (n) {
-        n[1].appendChild(n[0]);
-        delete nodeMap[ident];
-      }
-    });
-  },
-  
-  serialize: function(element) {
-    element = $(element);
-    var options = Object.extend(Sortable.options(element), arguments[1] || {});
-    var name = encodeURIComponent(
-      (arguments[1] && arguments[1].name) ? arguments[1].name : element.id);
-    
-    if (options.tree) {
-      return Sortable.tree(element, arguments[1]).children.map( function (item) {
-        return [name + Sortable._constructIndex(item) + "[id]=" + 
-                encodeURIComponent(item.id)].concat(item.children.map(arguments.callee));
-      }).flatten().join('&');
-    } else {
-      return Sortable.sequence(element, arguments[1]).map( function(item) {
-        return name + "[]=" + encodeURIComponent(item);
-      }).join('&');
-    }
-  }
-}
-
-// Returns true if child is contained within element
-Element.isParent = function(child, element) {
-  if (!child.parentNode || child == element) return false;
-  if (child.parentNode == element) return true;
-  return Element.isParent(child.parentNode, element);
-}
-
-Element.findChildren = function(element, only, recursive, tagName) {    
-  if(!element.hasChildNodes()) return null;
-  tagName = tagName.toUpperCase();
-  if(only) only = [only].flatten();
-  var elements = [];
-  $A(element.childNodes).each( function(e) {
-    if(e.tagName && e.tagName.toUpperCase()==tagName &&
-      (!only || (Element.classNames(e).detect(function(v) { return only.include(v) }))))
-        elements.push(e);
-    if(recursive) {
-      var grandchildren = Element.findChildren(e, only, recursive, tagName);
-      if(grandchildren) elements.push(grandchildren);
-    }
-  });
-
-  return (elements.length>0 ? elements.flatten() : []);
-}
-
-Element.offsetSize = function (element, type) {
-  return element['offset' + ((type=='vertical' || type=='height') ? 'Height' : 'Width')];
-}
diff --git a/apps/maarch_entreprise/tools/tafelTree/js/effects.js b/apps/maarch_entreprise/tools/tafelTree/js/effects.js
deleted file mode 100755
index 06f59b47698e61d0f4c63bd8a5147147d0217b04..0000000000000000000000000000000000000000
--- a/apps/maarch_entreprise/tools/tafelTree/js/effects.js
+++ /dev/null
@@ -1,1090 +0,0 @@
-// script.aculo.us effects.js v1.7.0, Fri Jan 19 19:16:36 CET 2007
-
-// Copyright (c) 2005, 2006 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
-// Contributors:
-//  Justin Palmer (http://encytemedia.com/)
-//  Mark Pilgrim (http://diveintomark.org/)
-//  Martin Bialasinki
-// 
-// script.aculo.us is freely distributable under the terms of an MIT-style license.
-// For details, see the script.aculo.us web site: http://script.aculo.us/ 
-
-// converts rgb() and #xxx to #xxxxxx format,  
-// returns self (or first argument) if not convertable  
-String.prototype.parseColor = function() {  
-  var color = '#';
-  if(this.slice(0,4) == 'rgb(') {  
-    var cols = this.slice(4,this.length-1).split(',');  
-    var i=0; do { color += parseInt(cols[i]).toColorPart() } while (++i<3);  
-  } else {  
-    if(this.slice(0,1) == '#') {  
-      if(this.length==4) for(var i=1;i<4;i++) color += (this.charAt(i) + this.charAt(i)).toLowerCase();  
-      if(this.length==7) color = this.toLowerCase();  
-    }  
-  }  
-  return(color.length==7 ? color : (arguments[0] || this));  
-}
-
-/*--------------------------------------------------------------------------*/
-
-Element.collectTextNodes = function(element) {  
-  return $A($(element).childNodes).collect( function(node) {
-    return (node.nodeType==3 ? node.nodeValue : 
-      (node.hasChildNodes() ? Element.collectTextNodes(node) : ''));
-  }).flatten().join('');
-}
-
-Element.collectTextNodesIgnoreClass = function(element, className) {  
-  return $A($(element).childNodes).collect( function(node) {
-    return (node.nodeType==3 ? node.nodeValue : 
-      ((node.hasChildNodes() && !Element.hasClassName(node,className)) ? 
-        Element.collectTextNodesIgnoreClass(node, className) : ''));
-  }).flatten().join('');
-}
-
-Element.setContentZoom = function(element, percent) {
-  element = $(element);  
-  element.setStyle({fontSize: (percent/100) + 'em'});   
-  if(navigator.appVersion.indexOf('AppleWebKit')>0) window.scrollBy(0,0);
-  return element;
-}
-
-Element.getOpacity = function(element){
-  return $(element).getStyle('opacity');
-}
-
-Element.setOpacity = function(element, value){
-  return $(element).setStyle({opacity:value});
-}
-
-Element.getInlineOpacity = function(element){
-  return $(element).style.opacity || '';
-}
-
-Element.forceRerendering = function(element) {
-  try {
-    element = $(element);
-    var n = document.createTextNode(' ');
-    element.appendChild(n);
-    element.removeChild(n);
-  } catch(e) { }
-};
-
-/*--------------------------------------------------------------------------*/
-
-Array.prototype.call = function() {
-  var args = arguments;
-  this.each(function(f){ f.apply(this, args) });
-}
-
-/*--------------------------------------------------------------------------*/
-
-var Effect = {
-  _elementDoesNotExistError: {
-    name: 'ElementDoesNotExistError',
-    message: 'The specified DOM element does not exist, but is required for this effect to operate'
-  },
-  tagifyText: function(element) {
-    if(typeof Builder == 'undefined')
-      throw("Effect.tagifyText requires including script.aculo.us' builder.js library");
-      
-    var tagifyStyle = 'position:relative';
-    if(/MSIE/.test(navigator.userAgent) && !window.opera) tagifyStyle += ';zoom:1';
-    
-    element = $(element);
-    $A(element.childNodes).each( function(child) {
-      if(child.nodeType==3) {
-        child.nodeValue.toArray().each( function(character) {
-          element.insertBefore(
-            Builder.node('span',{style: tagifyStyle},
-              character == ' ' ? String.fromCharCode(160) : character), 
-              child);
-        });
-        Element.remove(child);
-      }
-    });
-  },
-  multiple: function(element, effect) {
-    var elements;
-    if(((typeof element == 'object') || 
-        (typeof element == 'function')) && 
-       (element.length))
-      elements = element;
-    else
-      elements = $(element).childNodes;
-      
-    var options = Object.extend({
-      speed: 0.1,
-      delay: 0.0
-    }, arguments[2] || {});
-    var masterDelay = options.delay;
-
-    $A(elements).each( function(element, index) {
-      new effect(element, Object.extend(options, { delay: index * options.speed + masterDelay }));
-    });
-  },
-  PAIRS: {
-    'slide':  ['SlideDown','SlideUp'],
-    'blind':  ['BlindDown','BlindUp'],
-    'appear': ['Appear','Fade']
-  },
-  toggle: function(element, effect) {
-    element = $(element);
-    effect = (effect || 'appear').toLowerCase();
-    var options = Object.extend({
-      queue: { position:'end', scope:(element.id || 'global'), limit: 1 }
-    }, arguments[2] || {});
-    Effect[element.visible() ? 
-      Effect.PAIRS[effect][1] : Effect.PAIRS[effect][0]](element, options);
-  }
-};
-
-var Effect2 = Effect; // deprecated
-
-/* ------------- transitions ------------- */
-
-Effect.Transitions = {
-  linear: Prototype.K,
-  sinoidal: function(pos) {
-    return (-Math.cos(pos*Math.PI)/2) + 0.5;
-  },
-  reverse: function(pos) {
-    return 1-pos;
-  },
-  flicker: function(pos) {
-    return ((-Math.cos(pos*Math.PI)/4) + 0.75) + Math.random()/4;
-  },
-  wobble: function(pos) {
-    return (-Math.cos(pos*Math.PI*(9*pos))/2) + 0.5;
-  },
-  pulse: function(pos, pulses) { 
-    pulses = pulses || 5; 
-    return (
-      Math.round((pos % (1/pulses)) * pulses) == 0 ? 
-            ((pos * pulses * 2) - Math.floor(pos * pulses * 2)) : 
-        1 - ((pos * pulses * 2) - Math.floor(pos * pulses * 2))
-      );
-  },
-  none: function(pos) {
-    return 0;
-  },
-  full: function(pos) {
-    return 1;
-  }
-};
-
-/* ------------- core effects ------------- */
-
-Effect.ScopedQueue = Class.create();
-Object.extend(Object.extend(Effect.ScopedQueue.prototype, Enumerable), {
-  initialize: function() {
-    this.effects  = [];
-    this.interval = null;
-  },
-  _each: function(iterator) {
-    this.effects._each(iterator);
-  },
-  add: function(effect) {
-    var timestamp = new Date().getTime();
-    
-    var position = (typeof effect.options.queue == 'string') ? 
-      effect.options.queue : effect.options.queue.position;
-    
-    switch(position) {
-      case 'front':
-        // move unstarted effects after this effect  
-        this.effects.findAll(function(e){ return e.state=='idle' }).each( function(e) {
-            e.startOn  += effect.finishOn;
-            e.finishOn += effect.finishOn;
-          });
-        break;
-      case 'with-last':
-        timestamp = this.effects.pluck('startOn').max() || timestamp;
-        break;
-      case 'end':
-        // start effect after last queued effect has finished
-        timestamp = this.effects.pluck('finishOn').max() || timestamp;
-        break;
-    }
-    
-    effect.startOn  += timestamp;
-    effect.finishOn += timestamp;
-
-    if(!effect.options.queue.limit || (this.effects.length < effect.options.queue.limit))
-      this.effects.push(effect);
-    
-    if(!this.interval) 
-      this.interval = setInterval(this.loop.bind(this), 15);
-  },
-  remove: function(effect) {
-    this.effects = this.effects.reject(function(e) { return e==effect });
-    if(this.effects.length == 0) {
-      clearInterval(this.interval);
-      this.interval = null;
-    }
-  },
-  loop: function() {
-    var timePos = new Date().getTime();
-    for(var i=0, len=this.effects.length;i<len;i++) 
-      if(this.effects[i]) this.effects[i].loop(timePos);
-  }
-});
-
-Effect.Queues = {
-  instances: $H(),
-  get: function(queueName) {
-    if(typeof queueName != 'string') return queueName;
-    
-    if(!this.instances[queueName])
-      this.instances[queueName] = new Effect.ScopedQueue();
-      
-    return this.instances[queueName];
-  }
-}
-Effect.Queue = Effect.Queues.get('global');
-
-Effect.DefaultOptions = {
-  transition: Effect.Transitions.sinoidal,
-  duration:   1.0,   // seconds
-  fps:        60.0,  // max. 60fps due to Effect.Queue implementation
-  sync:       false, // true for combining
-  from:       0.0,
-  to:         1.0,
-  delay:      0.0,
-  queue:      'parallel'
-}
-
-Effect.Base = function() {};
-Effect.Base.prototype = {
-  position: null,
-  start: function(options) {
-    this.options      = Object.extend(Object.extend({},Effect.DefaultOptions), options || {});
-    this.currentFrame = 0;
-    this.state        = 'idle';
-    this.startOn      = this.options.delay*1000;
-    this.finishOn     = this.startOn + (this.options.duration*1000);
-    this.event('beforeStart');
-    if(!this.options.sync)
-      Effect.Queues.get(typeof this.options.queue == 'string' ? 
-        'global' : this.options.queue.scope).add(this);
-  },
-  loop: function(timePos) {
-    if(timePos >= this.startOn) {
-      if(timePos >= this.finishOn) {
-        this.render(1.0);
-        this.cancel();
-        this.event('beforeFinish');
-        if(this.finish) this.finish(); 
-        this.event('afterFinish');
-        return;  
-      }
-      var pos   = (timePos - this.startOn) / (this.finishOn - this.startOn);
-      var frame = Math.round(pos * this.options.fps * this.options.duration);
-      if(frame > this.currentFrame) {
-        this.render(pos);
-        this.currentFrame = frame;
-      }
-    }
-  },
-  render: function(pos) {
-    if(this.state == 'idle') {
-      this.state = 'running';
-      this.event('beforeSetup');
-      if(this.setup) this.setup();
-      this.event('afterSetup');
-    }
-    if(this.state == 'running') {
-      if(this.options.transition) pos = this.options.transition(pos);
-      pos *= (this.options.to-this.options.from);
-      pos += this.options.from;
-      this.position = pos;
-      this.event('beforeUpdate');
-      if(this.update) this.update(pos);
-      this.event('afterUpdate');
-    }
-  },
-  cancel: function() {
-    if(!this.options.sync)
-      Effect.Queues.get(typeof this.options.queue == 'string' ? 
-        'global' : this.options.queue.scope).remove(this);
-    this.state = 'finished';
-  },
-  event: function(eventName) {
-    if(this.options[eventName + 'Internal']) this.options[eventName + 'Internal'](this);
-    if(this.options[eventName]) this.options[eventName](this);
-  },
-  inspect: function() {
-    var data = $H();
-    for(property in this)
-      if(typeof this[property] != 'function') data[property] = this[property];
-    return '#<Effect:' + data.inspect() + ',options:' + $H(this.options).inspect() + '>';
-  }
-}
-
-Effect.Parallel = Class.create();
-Object.extend(Object.extend(Effect.Parallel.prototype, Effect.Base.prototype), {
-  initialize: function(effects) {
-    this.effects = effects || [];
-    this.start(arguments[1]);
-  },
-  update: function(position) {
-    this.effects.invoke('render', position);
-  },
-  finish: function(position) {
-    this.effects.each( function(effect) {
-      effect.render(1.0);
-      effect.cancel();
-      effect.event('beforeFinish');
-      if(effect.finish) effect.finish(position);
-      effect.event('afterFinish');
-    });
-  }
-});
-
-Effect.Event = Class.create();
-Object.extend(Object.extend(Effect.Event.prototype, Effect.Base.prototype), {
-  initialize: function() {
-    var options = Object.extend({
-      duration: 0
-    }, arguments[0] || {});
-    this.start(options);
-  },
-  update: Prototype.emptyFunction
-});
-
-Effect.Opacity = Class.create();
-Object.extend(Object.extend(Effect.Opacity.prototype, Effect.Base.prototype), {
-  initialize: function(element) {
-    this.element = $(element);
-    if(!this.element) throw(Effect._elementDoesNotExistError);
-    // make this work on IE on elements without 'layout'
-    if(/MSIE/.test(navigator.userAgent) && !window.opera && (!this.element.currentStyle.hasLayout))
-      this.element.setStyle({zoom: 1});
-    var options = Object.extend({
-      from: this.element.getOpacity() || 0.0,
-      to:   1.0
-    }, arguments[1] || {});
-    this.start(options);
-  },
-  update: function(position) {
-    this.element.setOpacity(position);
-  }
-});
-
-Effect.Move = Class.create();
-Object.extend(Object.extend(Effect.Move.prototype, Effect.Base.prototype), {
-  initialize: function(element) {
-    this.element = $(element);
-    if(!this.element) throw(Effect._elementDoesNotExistError);
-    var options = Object.extend({
-      x:    0,
-      y:    0,
-      mode: 'relative'
-    }, arguments[1] || {});
-    this.start(options);
-  },
-  setup: function() {
-    // Bug in Opera: Opera returns the "real" position of a static element or
-    // relative element that does not have top/left explicitly set.
-    // ==> Always set top and left for position relative elements in your stylesheets 
-    // (to 0 if you do not need them) 
-    this.element.makePositioned();
-    this.originalLeft = parseFloat(this.element.getStyle('left') || '0');
-    this.originalTop  = parseFloat(this.element.getStyle('top')  || '0');
-    if(this.options.mode == 'absolute') {
-      // absolute movement, so we need to calc deltaX and deltaY
-      this.options.x = this.options.x - this.originalLeft;
-      this.options.y = this.options.y - this.originalTop;
-    }
-  },
-  update: function(position) {
-    this.element.setStyle({
-      left: Math.round(this.options.x  * position + this.originalLeft) + 'px',
-      top:  Math.round(this.options.y  * position + this.originalTop)  + 'px'
-    });
-  }
-});
-
-// for backwards compatibility
-Effect.MoveBy = function(element, toTop, toLeft) {
-  return new Effect.Move(element, 
-    Object.extend({ x: toLeft, y: toTop }, arguments[3] || {}));
-};
-
-Effect.Scale = Class.create();
-Object.extend(Object.extend(Effect.Scale.prototype, Effect.Base.prototype), {
-  initialize: function(element, percent) {
-    this.element = $(element);
-    if(!this.element) throw(Effect._elementDoesNotExistError);
-    var options = Object.extend({
-      scaleX: true,
-      scaleY: true,
-      scaleContent: true,
-      scaleFromCenter: false,
-      scaleMode: 'box',        // 'box' or 'contents' or {} with provided values
-      scaleFrom: 100.0,
-      scaleTo:   percent
-    }, arguments[2] || {});
-    this.start(options);
-  },
-  setup: function() {
-    this.restoreAfterFinish = this.options.restoreAfterFinish || false;
-    this.elementPositioning = this.element.getStyle('position');
-    
-    this.originalStyle = {};
-    ['top','left','width','height','fontSize'].each( function(k) {
-      this.originalStyle[k] = this.element.style[k];
-    }.bind(this));
-      
-    this.originalTop  = this.element.offsetTop;
-    this.originalLeft = this.element.offsetLeft;
-    
-    var fontSize = this.element.getStyle('font-size') || '100%';
-    ['em','px','%','pt'].each( function(fontSizeType) {
-      if(fontSize.indexOf(fontSizeType)>0) {
-        this.fontSize     = parseFloat(fontSize);
-        this.fontSizeType = fontSizeType;
-      }
-    }.bind(this));
-    
-    this.factor = (this.options.scaleTo - this.options.scaleFrom)/100;
-    
-    this.dims = null;
-    if(this.options.scaleMode=='box')
-      this.dims = [this.element.offsetHeight, this.element.offsetWidth];
-    if(/^content/.test(this.options.scaleMode))
-      this.dims = [this.element.scrollHeight, this.element.scrollWidth];
-    if(!this.dims)
-      this.dims = [this.options.scaleMode.originalHeight,
-                   this.options.scaleMode.originalWidth];
-  },
-  update: function(position) {
-    var currentScale = (this.options.scaleFrom/100.0) + (this.factor * position);
-    if(this.options.scaleContent && this.fontSize)
-      this.element.setStyle({fontSize: this.fontSize * currentScale + this.fontSizeType });
-    this.setDimensions(this.dims[0] * currentScale, this.dims[1] * currentScale);
-  },
-  finish: function(position) {
-    if(this.restoreAfterFinish) this.element.setStyle(this.originalStyle);
-  },
-  setDimensions: function(height, width) {
-    var d = {};
-    if(this.options.scaleX) d.width = Math.round(width) + 'px';
-    if(this.options.scaleY) d.height = Math.round(height) + 'px';
-    if(this.options.scaleFromCenter) {
-      var topd  = (height - this.dims[0])/2;
-      var leftd = (width  - this.dims[1])/2;
-      if(this.elementPositioning == 'absolute') {
-        if(this.options.scaleY) d.top = this.originalTop-topd + 'px';
-        if(this.options.scaleX) d.left = this.originalLeft-leftd + 'px';
-      } else {
-        if(this.options.scaleY) d.top = -topd + 'px';
-        if(this.options.scaleX) d.left = -leftd + 'px';
-      }
-    }
-    this.element.setStyle(d);
-  }
-});
-
-Effect.Highlight = Class.create();
-Object.extend(Object.extend(Effect.Highlight.prototype, Effect.Base.prototype), {
-  initialize: function(element) {
-    this.element = $(element);
-    if(!this.element) throw(Effect._elementDoesNotExistError);
-    var options = Object.extend({ startcolor: '#ffff99' }, arguments[1] || {});
-    this.start(options);
-  },
-  setup: function() {
-    // Prevent executing on elements not in the layout flow
-    if(this.element.getStyle('display')=='none') { this.cancel(); return; }
-    // Disable background image during the effect
-    this.oldStyle = {};
-    if (!this.options.keepBackgroundImage) {
-      this.oldStyle.backgroundImage = this.element.getStyle('background-image');
-      this.element.setStyle({backgroundImage: 'none'});
-    }
-    if(!this.options.endcolor)
-      this.options.endcolor = this.element.getStyle('background-color').parseColor('#ffffff');
-    if(!this.options.restorecolor)
-      this.options.restorecolor = this.element.getStyle('background-color');
-    // init color calculations
-    this._base  = $R(0,2).map(function(i){ return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16) }.bind(this));
-    this._delta = $R(0,2).map(function(i){ return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i] }.bind(this));
-  },
-  update: function(position) {
-    this.element.setStyle({backgroundColor: $R(0,2).inject('#',function(m,v,i){
-      return m+(Math.round(this._base[i]+(this._delta[i]*position)).toColorPart()); }.bind(this)) });
-  },
-  finish: function() {
-    this.element.setStyle(Object.extend(this.oldStyle, {
-      backgroundColor: this.options.restorecolor
-    }));
-  }
-});
-
-Effect.ScrollTo = Class.create();
-Object.extend(Object.extend(Effect.ScrollTo.prototype, Effect.Base.prototype), {
-  initialize: function(element) {
-    this.element = $(element);
-    this.start(arguments[1] || {});
-  },
-  setup: function() {
-    Position.prepare();
-    var offsets = Position.cumulativeOffset(this.element);
-    if(this.options.offset) offsets[1] += this.options.offset;
-    var max = window.innerHeight ? 
-      window.height - window.innerHeight :
-      document.body.scrollHeight - 
-        (document.documentElement.clientHeight ? 
-          document.documentElement.clientHeight : document.body.clientHeight);
-    this.scrollStart = Position.deltaY;
-    this.delta = (offsets[1] > max ? max : offsets[1]) - this.scrollStart;
-  },
-  update: function(position) {
-    Position.prepare();
-    window.scrollTo(Position.deltaX, 
-      this.scrollStart + (position*this.delta));
-  }
-});
-
-/* ------------- combination effects ------------- */
-
-Effect.Fade = function(element) {
-  element = $(element);
-  var oldOpacity = element.getInlineOpacity();
-  var options = Object.extend({
-  from: element.getOpacity() || 1.0,
-  to:   0.0,
-  afterFinishInternal: function(effect) { 
-    if(effect.options.to!=0) return;
-    effect.element.hide().setStyle({opacity: oldOpacity}); 
-  }}, arguments[1] || {});
-  return new Effect.Opacity(element,options);
-}
-
-Effect.Appear = function(element) {
-  element = $(element);
-  var options = Object.extend({
-  from: (element.getStyle('display') == 'none' ? 0.0 : element.getOpacity() || 0.0),
-  to:   1.0,
-  // force Safari to render floated elements properly
-  afterFinishInternal: function(effect) {
-    effect.element.forceRerendering();
-  },
-  beforeSetup: function(effect) {
-    effect.element.setOpacity(effect.options.from).show(); 
-  }}, arguments[1] || {});
-  return new Effect.Opacity(element,options);
-}
-
-Effect.Puff = function(element) {
-  element = $(element);
-  var oldStyle = { 
-    opacity: element.getInlineOpacity(), 
-    position: element.getStyle('position'),
-    top:  element.style.top,
-    left: element.style.left,
-    width: element.style.width,
-    height: element.style.height
-  };
-  return new Effect.Parallel(
-   [ new Effect.Scale(element, 200, 
-      { sync: true, scaleFromCenter: true, scaleContent: true, restoreAfterFinish: true }), 
-     new Effect.Opacity(element, { sync: true, to: 0.0 } ) ], 
-     Object.extend({ duration: 1.0, 
-      beforeSetupInternal: function(effect) {
-        Position.absolutize(effect.effects[0].element)
-      },
-      afterFinishInternal: function(effect) {
-         effect.effects[0].element.hide().setStyle(oldStyle); }
-     }, arguments[1] || {})
-   );
-}
-
-Effect.BlindUp = function(element) {
-  element = $(element);
-  element.makeClipping();
-  return new Effect.Scale(element, 0,
-    Object.extend({ scaleContent: false, 
-      scaleX: false, 
-      restoreAfterFinish: true,
-      afterFinishInternal: function(effect) {
-        effect.element.hide().undoClipping();
-      } 
-    }, arguments[1] || {})
-  );
-}
-
-Effect.BlindDown = function(element) {
-  element = $(element);
-  var elementDimensions = element.getDimensions();
-  return new Effect.Scale(element, 100, Object.extend({ 
-    scaleContent: false, 
-    scaleX: false,
-    scaleFrom: 0,
-    scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
-    restoreAfterFinish: true,
-    afterSetup: function(effect) {
-      effect.element.makeClipping().setStyle({height: '0px'}).show(); 
-    },  
-    afterFinishInternal: function(effect) {
-      effect.element.undoClipping();
-    }
-  }, arguments[1] || {}));
-}
-
-Effect.SwitchOff = function(element) {
-  element = $(element);
-  var oldOpacity = element.getInlineOpacity();
-  return new Effect.Appear(element, Object.extend({
-    duration: 0.4,
-    from: 0,
-    transition: Effect.Transitions.flicker,
-    afterFinishInternal: function(effect) {
-      new Effect.Scale(effect.element, 1, { 
-        duration: 0.3, scaleFromCenter: true,
-        scaleX: false, scaleContent: false, restoreAfterFinish: true,
-        beforeSetup: function(effect) { 
-          effect.element.makePositioned().makeClipping();
-        },
-        afterFinishInternal: function(effect) {
-          effect.element.hide().undoClipping().undoPositioned().setStyle({opacity: oldOpacity});
-        }
-      })
-    }
-  }, arguments[1] || {}));
-}
-
-Effect.DropOut = function(element) {
-  element = $(element);
-  var oldStyle = {
-    top: element.getStyle('top'),
-    left: element.getStyle('left'),
-    opacity: element.getInlineOpacity() };
-  return new Effect.Parallel(
-    [ new Effect.Move(element, {x: 0, y: 100, sync: true }), 
-      new Effect.Opacity(element, { sync: true, to: 0.0 }) ],
-    Object.extend(
-      { duration: 0.5,
-        beforeSetup: function(effect) {
-          effect.effects[0].element.makePositioned(); 
-        },
-        afterFinishInternal: function(effect) {
-          effect.effects[0].element.hide().undoPositioned().setStyle(oldStyle);
-        } 
-      }, arguments[1] || {}));
-}
-
-Effect.Shake = function(element) {
-  element = $(element);
-  var oldStyle = {
-    top: element.getStyle('top'),
-    left: element.getStyle('left') };
-    return new Effect.Move(element, 
-      { x:  20, y: 0, duration: 0.05, afterFinishInternal: function(effect) {
-    new Effect.Move(effect.element,
-      { x: -40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {
-    new Effect.Move(effect.element,
-      { x:  40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {
-    new Effect.Move(effect.element,
-      { x: -40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {
-    new Effect.Move(effect.element,
-      { x:  40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {
-    new Effect.Move(effect.element,
-      { x: -20, y: 0, duration: 0.05, afterFinishInternal: function(effect) {
-        effect.element.undoPositioned().setStyle(oldStyle);
-  }}) }}) }}) }}) }}) }});
-}
-
-Effect.SlideDown = function(element) {
-  element = $(element).cleanWhitespace();
-  // SlideDown need to have the content of the element wrapped in a container element with fixed height!
-  var oldInnerBottom = element.down().getStyle('bottom');
-  var elementDimensions = element.getDimensions();
-  return new Effect.Scale(element, 100, Object.extend({ 
-    scaleContent: false, 
-    scaleX: false, 
-    scaleFrom: window.opera ? 0 : 1,
-    scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
-    restoreAfterFinish: true,
-    afterSetup: function(effect) {
-      effect.element.makePositioned();
-      effect.element.down().makePositioned();
-      if(window.opera) effect.element.setStyle({top: ''});
-      effect.element.makeClipping().setStyle({height: '0px'}).show(); 
-    },
-    afterUpdateInternal: function(effect) {
-      effect.element.down().setStyle({bottom:
-        (effect.dims[0] - effect.element.clientHeight) + 'px' }); 
-    },
-    afterFinishInternal: function(effect) {
-      effect.element.undoClipping().undoPositioned();
-      effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom}); }
-    }, arguments[1] || {})
-  );
-}
-
-Effect.SlideUp = function(element) {
-  element = $(element).cleanWhitespace();
-  var oldInnerBottom = element.down().getStyle('bottom');
-  return new Effect.Scale(element, window.opera ? 0 : 1,
-   Object.extend({ scaleContent: false, 
-    scaleX: false, 
-    scaleMode: 'box',
-    scaleFrom: 100,
-    restoreAfterFinish: true,
-    beforeStartInternal: function(effect) {
-      effect.element.makePositioned();
-      effect.element.down().makePositioned();
-      if(window.opera) effect.element.setStyle({top: ''});
-      effect.element.makeClipping().show();
-    },  
-    afterUpdateInternal: function(effect) {
-      effect.element.down().setStyle({bottom:
-        (effect.dims[0] - effect.element.clientHeight) + 'px' });
-    },
-    afterFinishInternal: function(effect) {
-      effect.element.hide().undoClipping().undoPositioned().setStyle({bottom: oldInnerBottom});
-      effect.element.down().undoPositioned();
-    }
-   }, arguments[1] || {})
-  );
-}
-
-// Bug in opera makes the TD containing this element expand for a instance after finish 
-Effect.Squish = function(element) {
-  return new Effect.Scale(element, window.opera ? 1 : 0, { 
-    restoreAfterFinish: true,
-    beforeSetup: function(effect) {
-      effect.element.makeClipping(); 
-    },  
-    afterFinishInternal: function(effect) {
-      effect.element.hide().undoClipping(); 
-    }
-  });
-}
-
-Effect.Grow = function(element) {
-  element = $(element);
-  var options = Object.extend({
-    direction: 'center',
-    moveTransition: Effect.Transitions.sinoidal,
-    scaleTransition: Effect.Transitions.sinoidal,
-    opacityTransition: Effect.Transitions.full
-  }, arguments[1] || {});
-  var oldStyle = {
-    top: element.style.top,
-    left: element.style.left,
-    height: element.style.height,
-    width: element.style.width,
-    opacity: element.getInlineOpacity() };
-
-  var dims = element.getDimensions();    
-  var initialMoveX, initialMoveY;
-  var moveX, moveY;
-  
-  switch (options.direction) {
-    case 'top-left':
-      initialMoveX = initialMoveY = moveX = moveY = 0; 
-      break;
-    case 'top-right':
-      initialMoveX = dims.width;
-      initialMoveY = moveY = 0;
-      moveX = -dims.width;
-      break;
-    case 'bottom-left':
-      initialMoveX = moveX = 0;
-      initialMoveY = dims.height;
-      moveY = -dims.height;
-      break;
-    case 'bottom-right':
-      initialMoveX = dims.width;
-      initialMoveY = dims.height;
-      moveX = -dims.width;
-      moveY = -dims.height;
-      break;
-    case 'center':
-      initialMoveX = dims.width / 2;
-      initialMoveY = dims.height / 2;
-      moveX = -dims.width / 2;
-      moveY = -dims.height / 2;
-      break;
-  }
-  
-  return new Effect.Move(element, {
-    x: initialMoveX,
-    y: initialMoveY,
-    duration: 0.01, 
-    beforeSetup: function(effect) {
-      effect.element.hide().makeClipping().makePositioned();
-    },
-    afterFinishInternal: function(effect) {
-      new Effect.Parallel(
-        [ new Effect.Opacity(effect.element, { sync: true, to: 1.0, from: 0.0, transition: options.opacityTransition }),
-          new Effect.Move(effect.element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition }),
-          new Effect.Scale(effect.element, 100, {
-            scaleMode: { originalHeight: dims.height, originalWidth: dims.width }, 
-            sync: true, scaleFrom: window.opera ? 1 : 0, transition: options.scaleTransition, restoreAfterFinish: true})
-        ], Object.extend({
-             beforeSetup: function(effect) {
-               effect.effects[0].element.setStyle({height: '0px'}).show(); 
-             },
-             afterFinishInternal: function(effect) {
-               effect.effects[0].element.undoClipping().undoPositioned().setStyle(oldStyle); 
-             }
-           }, options)
-      )
-    }
-  });
-}
-
-Effect.Shrink = function(element) {
-  element = $(element);
-  var options = Object.extend({
-    direction: 'center',
-    moveTransition: Effect.Transitions.sinoidal,
-    scaleTransition: Effect.Transitions.sinoidal,
-    opacityTransition: Effect.Transitions.none
-  }, arguments[1] || {});
-  var oldStyle = {
-    top: element.style.top,
-    left: element.style.left,
-    height: element.style.height,
-    width: element.style.width,
-    opacity: element.getInlineOpacity() };
-
-  var dims = element.getDimensions();
-  var moveX, moveY;
-  
-  switch (options.direction) {
-    case 'top-left':
-      moveX = moveY = 0;
-      break;
-    case 'top-right':
-      moveX = dims.width;
-      moveY = 0;
-      break;
-    case 'bottom-left':
-      moveX = 0;
-      moveY = dims.height;
-      break;
-    case 'bottom-right':
-      moveX = dims.width;
-      moveY = dims.height;
-      break;
-    case 'center':  
-      moveX = dims.width / 2;
-      moveY = dims.height / 2;
-      break;
-  }
-  
-  return new Effect.Parallel(
-    [ new Effect.Opacity(element, { sync: true, to: 0.0, from: 1.0, transition: options.opacityTransition }),
-      new Effect.Scale(element, window.opera ? 1 : 0, { sync: true, transition: options.scaleTransition, restoreAfterFinish: true}),
-      new Effect.Move(element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition })
-    ], Object.extend({            
-         beforeStartInternal: function(effect) {
-           effect.effects[0].element.makePositioned().makeClipping(); 
-         },
-         afterFinishInternal: function(effect) {
-           effect.effects[0].element.hide().undoClipping().undoPositioned().setStyle(oldStyle); }
-       }, options)
-  );
-}
-
-Effect.Pulsate = function(element) {
-  element = $(element);
-  var options    = arguments[1] || {};
-  var oldOpacity = element.getInlineOpacity();
-  var transition = options.transition || Effect.Transitions.sinoidal;
-  var reverser   = function(pos){ return transition(1-Effect.Transitions.pulse(pos, options.pulses)) };
-  reverser.bind(transition);
-  return new Effect.Opacity(element, 
-    Object.extend(Object.extend({  duration: 2.0, from: 0,
-      afterFinishInternal: function(effect) { effect.element.setStyle({opacity: oldOpacity}); }
-    }, options), {transition: reverser}));
-}
-
-Effect.Fold = function(element) {
-  element = $(element);
-  var oldStyle = {
-    top: element.style.top,
-    left: element.style.left,
-    width: element.style.width,
-    height: element.style.height };
-  element.makeClipping();
-  return new Effect.Scale(element, 5, Object.extend({   
-    scaleContent: false,
-    scaleX: false,
-    afterFinishInternal: function(effect) {
-    new Effect.Scale(element, 1, { 
-      scaleContent: false, 
-      scaleY: false,
-      afterFinishInternal: function(effect) {
-        effect.element.hide().undoClipping().setStyle(oldStyle);
-      } });
-  }}, arguments[1] || {}));
-};
-
-Effect.Morph = Class.create();
-Object.extend(Object.extend(Effect.Morph.prototype, Effect.Base.prototype), {
-  initialize: function(element) {
-    this.element = $(element);
-    if(!this.element) throw(Effect._elementDoesNotExistError);
-    var options = Object.extend({
-      style: {}
-    }, arguments[1] || {});
-    if (typeof options.style == 'string') {
-      if(options.style.indexOf(':') == -1) {
-        var cssText = '', selector = '.' + options.style;
-        $A(document.styleSheets).reverse().each(function(styleSheet) {
-          if (styleSheet.cssRules) cssRules = styleSheet.cssRules;
-          else if (styleSheet.rules) cssRules = styleSheet.rules;
-          $A(cssRules).reverse().each(function(rule) {
-            if (selector == rule.selectorText) {
-              cssText = rule.style.cssText;
-              throw $break;
-            }
-          });
-          if (cssText) throw $break;
-        });
-        this.style = cssText.parseStyle();
-        options.afterFinishInternal = function(effect){
-          effect.element.addClassName(effect.options.style);
-          effect.transforms.each(function(transform) {
-            if(transform.style != 'opacity')
-              effect.element.style[transform.style.camelize()] = '';
-          });
-        }
-      } else this.style = options.style.parseStyle();
-    } else this.style = $H(options.style)
-    this.start(options);
-  },
-  setup: function(){
-    function parseColor(color){
-      if(!color || ['rgba(0, 0, 0, 0)','transparent'].include(color)) color = '#ffffff';
-      color = color.parseColor();
-      return $R(0,2).map(function(i){
-        return parseInt( color.slice(i*2+1,i*2+3), 16 ) 
-      });
-    }
-    this.transforms = this.style.map(function(pair){
-      var property = pair[0].underscore().dasherize(), value = pair[1], unit = null;
-
-      if(value.parseColor('#zzzzzz') != '#zzzzzz') {
-        value = value.parseColor();
-        unit  = 'color';
-      } else if(property == 'opacity') {
-        value = parseFloat(value);
-        if(/MSIE/.test(navigator.userAgent) && !window.opera && (!this.element.currentStyle.hasLayout))
-          this.element.setStyle({zoom: 1});
-      } else if(Element.CSS_LENGTH.test(value)) 
-        var components = value.match(/^([\+\-]?[0-9\.]+)(.*)$/),
-          value = parseFloat(components[1]), unit = (components.length == 3) ? components[2] : null;
-
-      var originalValue = this.element.getStyle(property);
-      return $H({ 
-        style: property, 
-        originalValue: unit=='color' ? parseColor(originalValue) : parseFloat(originalValue || 0), 
-        targetValue: unit=='color' ? parseColor(value) : value,
-        unit: unit
-      });
-    }.bind(this)).reject(function(transform){
-      return (
-        (transform.originalValue == transform.targetValue) ||
-        (
-          transform.unit != 'color' &&
-          (isNaN(transform.originalValue) || isNaN(transform.targetValue))
-        )
-      )
-    });
-  },
-  update: function(position) {
-    var style = $H(), value = null;
-    this.transforms.each(function(transform){
-      value = transform.unit=='color' ?
-        $R(0,2).inject('#',function(m,v,i){
-          return m+(Math.round(transform.originalValue[i]+
-            (transform.targetValue[i] - transform.originalValue[i])*position)).toColorPart() }) : 
-        transform.originalValue + Math.round(
-          ((transform.targetValue - transform.originalValue) * position) * 1000)/1000 + transform.unit;
-      style[transform.style] = value;
-    });
-    this.element.setStyle(style);
-  }
-});
-
-Effect.Transform = Class.create();
-Object.extend(Effect.Transform.prototype, {
-  initialize: function(tracks){
-    this.tracks  = [];
-    this.options = arguments[1] || {};
-    this.addTracks(tracks);
-  },
-  addTracks: function(tracks){
-    tracks.each(function(track){
-      var data = $H(track).values().first();
-      this.tracks.push($H({
-        ids:     $H(track).keys().first(),
-        effect:  Effect.Morph,
-        options: { style: data }
-      }));
-    }.bind(this));
-    return this;
-  },
-  play: function(){
-    return new Effect.Parallel(
-      this.tracks.map(function(track){
-        var elements = [$(track.ids) || $$(track.ids)].flatten();
-        return elements.map(function(e){ return new track.effect(e, Object.extend({ sync:true }, track.options)) });
-      }).flatten(),
-      this.options
-    );
-  }
-});
-
-Element.CSS_PROPERTIES = $w(
-  'backgroundColor backgroundPosition borderBottomColor borderBottomStyle ' + 
-  'borderBottomWidth borderLeftColor borderLeftStyle borderLeftWidth ' +
-  'borderRightColor borderRightStyle borderRightWidth borderSpacing ' +
-  'borderTopColor borderTopStyle borderTopWidth bottom clip color ' +
-  'fontSize fontWeight height left letterSpacing lineHeight ' +
-  'marginBottom marginLeft marginRight marginTop markerOffset maxHeight '+
-  'maxWidth minHeight minWidth opacity outlineColor outlineOffset ' +
-  'outlineWidth paddingBottom paddingLeft paddingRight paddingTop ' +
-  'right textIndent top width wordSpacing zIndex');
-  
-Element.CSS_LENGTH = /^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/;
-
-String.prototype.parseStyle = function(){
-  var element = Element.extend(document.createElement('div'));
-  element.innerHTML = '<div style="' + this + '"></div>';
-  var style = element.down().style, styleRules = $H();
-  
-  Element.CSS_PROPERTIES.each(function(property){
-    if(style[property]) styleRules[property] = style[property]; 
-  });
-  if(/MSIE/.test(navigator.userAgent) && !window.opera && this.indexOf('opacity') > -1) {
-    styleRules.opacity = this.match(/opacity:\s*((?:0|1)?(?:\.\d*)?)/)[1];
-  }
-  return styleRules;
-};
-
-Element.morph = function(element, style) {
-  new Effect.Morph(element, Object.extend({ style: style }, arguments[2] || {}));
-  return element;
-};
-
-['setOpacity','getOpacity','getInlineOpacity','forceRerendering','setContentZoom',
- 'collectTextNodes','collectTextNodesIgnoreClass','morph'].each( 
-  function(f) { Element.Methods[f] = Element[f]; }
-);
-
-Element.Methods.visualEffect = function(element, effect, options) {
-  s = effect.gsub(/_/, '-').camelize();
-  effect_class = s.charAt(0).toUpperCase() + s.substring(1);
-  new Effect[effect_class](element, options);
-  return $(element);
-};
-
-Element.addMethods();
\ No newline at end of file
diff --git a/apps/maarch_entreprise/tools/tafelTree/js/prototype.js b/apps/maarch_entreprise/tools/tafelTree/js/prototype.js
deleted file mode 100755
index 0476b8fdccc0717b3be623ff464748d1c5e751e6..0000000000000000000000000000000000000000
--- a/apps/maarch_entreprise/tools/tafelTree/js/prototype.js
+++ /dev/null
@@ -1,2515 +0,0 @@
-/*  Prototype JavaScript framework, version 1.5.0
- *  (c) 2005-2007 Sam Stephenson
- *
- *  Prototype is freely distributable under the terms of an MIT-style license.
- *  For details, see the Prototype web site: http://prototype.conio.net/
- *
-/*--------------------------------------------------------------------------*/
-
-var Prototype = {
-  Version: '1.5.0',
-  BrowserFeatures: {
-    XPath: !!document.evaluate
-  },
-
-  ScriptFragment: '(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)',
-  emptyFunction: function() {},
-  K: function(x) { return x }
-}
-
-var Class = {
-  create: function() {
-    return function() {
-      this.initialize.apply(this, arguments);
-    }
-  }
-}
-
-var Abstract = new Object();
-
-Object.extend = function(destination, source) {
-  for (var property in source) {
-    destination[property] = source[property];
-  }
-  return destination;
-}
-
-Object.extend(Object, {
-  inspect: function(object) {
-    try {
-      if (object === undefined) return 'undefined';
-      if (object === null) return 'null';
-      return object.inspect ? object.inspect() : object.toString();
-    } catch (e) {
-      if (e instanceof RangeError) return '...';
-      throw e;
-    }
-  },
-
-  keys: function(object) {
-    var keys = [];
-    for (var property in object)
-      keys.push(property);
-    return keys;
-  },
-
-  values: function(object) {
-    var values = [];
-    for (var property in object)
-      values.push(object[property]);
-    return values;
-  },
-
-  clone: function(object) {
-    return Object.extend({}, object);
-  }
-});
-
-Function.prototype.bind = function() {
-  var __method = this, args = $A(arguments), object = args.shift();
-  return function() {
-    return __method.apply(object, args.concat($A(arguments)));
-  }
-}
-
-Function.prototype.bindAsEventListener = function(object) {
-  var __method = this, args = $A(arguments), object = args.shift();
-  return function(event) {
-    return __method.apply(object, [( event || window.event)].concat(args).concat($A(arguments)));
-  }
-}
-
-Object.extend(Number.prototype, {
-  toColorPart: function() {
-    var digits = this.toString(16);
-    if (this < 16) return '0' + digits;
-    return digits;
-  },
-
-  succ: function() {
-    return this + 1;
-  },
-
-  times: function(iterator) {
-    $R(0, this, true).each(iterator);
-    return this;
-  }
-});
-
-var Try = {
-  these: function() {
-    var returnValue;
-
-    for (var i = 0, length = arguments.length; i < length; i++) {
-      var lambda = arguments[i];
-      try {
-        returnValue = lambda();
-        break;
-      } catch (e) {}
-    }
-
-    return returnValue;
-  }
-}
-
-/*--------------------------------------------------------------------------*/
-
-var PeriodicalExecuter = Class.create();
-PeriodicalExecuter.prototype = {
-  initialize: function(callback, frequency) {
-    this.callback = callback;
-    this.frequency = frequency;
-    this.currentlyExecuting = false;
-
-    this.registerCallback();
-  },
-
-  registerCallback: function() {
-    this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
-  },
-
-  stop: function() {
-    if (!this.timer) return;
-    clearInterval(this.timer);
-    this.timer = null;
-  },
-
-  onTimerEvent: function() {
-    if (!this.currentlyExecuting) {
-      try {
-        this.currentlyExecuting = true;
-        this.callback(this);
-      } finally {
-        this.currentlyExecuting = false;
-      }
-    }
-  }
-}
-String.interpret = function(value){
-  return value == null ? '' : String(value);
-}
-
-Object.extend(String.prototype, {
-  gsub: function(pattern, replacement) {
-    var result = '', source = this, match;
-    replacement = arguments.callee.prepareReplacement(replacement);
-
-    while (source.length > 0) {
-      if (match = source.match(pattern)) {
-        result += source.slice(0, match.index);
-        result += String.interpret(replacement(match));
-        source  = source.slice(match.index + match[0].length);
-      } else {
-        result += source, source = '';
-      }
-    }
-    return result;
-  },
-
-  sub: function(pattern, replacement, count) {
-    replacement = this.gsub.prepareReplacement(replacement);
-    count = count === undefined ? 1 : count;
-
-    return this.gsub(pattern, function(match) {
-      if (--count < 0) return match[0];
-      return replacement(match);
-    });
-  },
-
-  scan: function(pattern, iterator) {
-    this.gsub(pattern, iterator);
-    return this;
-  },
-
-  truncate: function(length, truncation) {
-    length = length || 30;
-    truncation = truncation === undefined ? '...' : truncation;
-    return this.length > length ?
-      this.slice(0, length - truncation.length) + truncation : this;
-  },
-
-  strip: function() {
-    return this.replace(/^\s+/, '').replace(/\s+$/, '');
-  },
-
-  stripTags: function() {
-    return this.replace(/<\/?[^>]+>/gi, '');
-  },
-
-  stripScripts: function() {
-    return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');
-  },
-
-  extractScripts: function() {
-    var matchAll = new RegExp(Prototype.ScriptFragment, 'img');
-    var matchOne = new RegExp(Prototype.ScriptFragment, 'im');
-    return (this.match(matchAll) || []).map(function(scriptTag) {
-      return (scriptTag.match(matchOne) || ['', ''])[1];
-    });
-  },
-
-  evalScripts: function() {
-    return this.extractScripts().map(function(script) { return eval(script) });
-  },
-
-  escapeHTML: function() {
-    var div = document.createElement('div');
-    var text = document.createTextNode(this);
-    div.appendChild(text);
-    return div.innerHTML;
-  },
-
-  unescapeHTML: function() {
-    var div = document.createElement('div');
-    div.innerHTML = this.stripTags();
-    return div.childNodes[0] ? (div.childNodes.length > 1 ?
-      $A(div.childNodes).inject('',function(memo,node){ return memo+node.nodeValue }) :
-      div.childNodes[0].nodeValue) : '';
-  },
-
-  toQueryParams: function(separator) {
-    var match = this.strip().match(/([^?#]*)(#.*)?$/);
-    if (!match) return {};
-
-    return match[1].split(separator || '&').inject({}, function(hash, pair) {
-      if ((pair = pair.split('='))[0]) {
-        var name = decodeURIComponent(pair[0]);
-        var value = pair[1] ? decodeURIComponent(pair[1]) : undefined;
-
-        if (hash[name] !== undefined) {
-          if (hash[name].constructor != Array)
-            hash[name] = [hash[name]];
-          if (value) hash[name].push(value);
-        }
-        else hash[name] = value;
-      }
-      return hash;
-    });
-  },
-
-  toArray: function() {
-    return this.split('');
-  },
-
-  succ: function() {
-    return this.slice(0, this.length - 1) +
-      String.fromCharCode(this.charCodeAt(this.length - 1) + 1);
-  },
-
-  camelize: function() {
-    var parts = this.split('-'), len = parts.length;
-    if (len == 1) return parts[0];
-
-    var camelized = this.charAt(0) == '-'
-      ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1)
-      : parts[0];
-
-    for (var i = 1; i < len; i++)
-      camelized += parts[i].charAt(0).toUpperCase() + parts[i].substring(1);
-
-    return camelized;
-  },
-
-  capitalize: function(){
-    return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase();
-  },
-
-  underscore: function() {
-    return this.gsub(/::/, '/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\d])([A-Z])/,'#{1}_#{2}').gsub(/-/,'_').toLowerCase();
-  },
-
-  dasherize: function() {
-    return this.gsub(/_/,'-');
-  },
-
-  inspect: function(useDoubleQuotes) {
-    var escapedString = this.replace(/\\/g, '\\\\');
-    if (useDoubleQuotes)
-      return '"' + escapedString.replace(/"/g, '\\"') + '"';
-    else
-      return "'" + escapedString.replace(/'/g, '\\\'') + "'";
-  }
-});
-
-String.prototype.gsub.prepareReplacement = function(replacement) {
-  if (typeof replacement == 'function') return replacement;
-  var template = new Template(replacement);
-  return function(match) { return template.evaluate(match) };
-}
-
-String.prototype.parseQuery = String.prototype.toQueryParams;
-
-var Template = Class.create();
-Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/;
-Template.prototype = {
-  initialize: function(template, pattern) {
-    this.template = template.toString();
-    this.pattern  = pattern || Template.Pattern;
-  },
-
-  evaluate: function(object) {
-    return this.template.gsub(this.pattern, function(match) {
-      var before = match[1];
-      if (before == '\\') return match[2];
-      return before + String.interpret(object[match[3]]);
-    });
-  }
-}
-
-var $break    = new Object();
-var $continue = new Object();
-
-var Enumerable = {
-  each: function(iterator) {
-    var index = 0;
-    try {
-      this._each(function(value) {
-        try {
-          iterator(value, index++);
-        } catch (e) {
-          if (e != $continue) throw e;
-        }
-      });
-    } catch (e) {
-      if (e != $break) throw e;
-    }
-    return this;
-  },
-
-  eachSlice: function(number, iterator) {
-    var index = -number, slices = [], array = this.toArray();
-    while ((index += number) < array.length)
-      slices.push(array.slice(index, index+number));
-    return slices.map(iterator);
-  },
-
-  all: function(iterator) {
-    var result = true;
-    this.each(function(value, index) {
-      result = result && !!(iterator || Prototype.K)(value, index);
-      if (!result) throw $break;
-    });
-    return result;
-  },
-
-  any: function(iterator) {
-    var result = false;
-    this.each(function(value, index) {
-      if (result = !!(iterator || Prototype.K)(value, index))
-        throw $break;
-    });
-    return result;
-  },
-
-  collect: function(iterator) {
-    var results = [];
-    this.each(function(value, index) {
-      results.push((iterator || Prototype.K)(value, index));
-    });
-    return results;
-  },
-
-  detect: function(iterator) {
-    var result;
-    this.each(function(value, index) {
-      if (iterator(value, index)) {
-        result = value;
-        throw $break;
-      }
-    });
-    return result;
-  },
-
-  findAll: function(iterator) {
-    var results = [];
-    this.each(function(value, index) {
-      if (iterator(value, index))
-        results.push(value);
-    });
-    return results;
-  },
-
-  grep: function(pattern, iterator) {
-    var results = [];
-    this.each(function(value, index) {
-      var stringValue = value.toString();
-      if (stringValue.match(pattern))
-        results.push((iterator || Prototype.K)(value, index));
-    })
-    return results;
-  },
-
-  include: function(object) {
-    var found = false;
-    this.each(function(value) {
-      if (value == object) {
-        found = true;
-        throw $break;
-      }
-    });
-    return found;
-  },
-
-  inGroupsOf: function(number, fillWith) {
-    fillWith = fillWith === undefined ? null : fillWith;
-    return this.eachSlice(number, function(slice) {
-      while(slice.length < number) slice.push(fillWith);
-      return slice;
-    });
-  },
-
-  inject: function(memo, iterator) {
-    this.each(function(value, index) {
-      memo = iterator(memo, value, index);
-    });
-    return memo;
-  },
-
-  invoke: function(method) {
-    var args = $A(arguments).slice(1);
-    return this.map(function(value) {
-      return value[method].apply(value, args);
-    });
-  },
-
-  max: function(iterator) {
-    var result;
-    this.each(function(value, index) {
-      value = (iterator || Prototype.K)(value, index);
-      if (result == undefined || value >= result)
-        result = value;
-    });
-    return result;
-  },
-
-  min: function(iterator) {
-    var result;
-    this.each(function(value, index) {
-      value = (iterator || Prototype.K)(value, index);
-      if (result == undefined || value < result)
-        result = value;
-    });
-    return result;
-  },
-
-  partition: function(iterator) {
-    var trues = [], falses = [];
-    this.each(function(value, index) {
-      ((iterator || Prototype.K)(value, index) ?
-        trues : falses).push(value);
-    });
-    return [trues, falses];
-  },
-
-  pluck: function(property) {
-    var results = [];
-    this.each(function(value, index) {
-      results.push(value[property]);
-    });
-    return results;
-  },
-
-  reject: function(iterator) {
-    var results = [];
-    this.each(function(value, index) {
-      if (!iterator(value, index))
-        results.push(value);
-    });
-    return results;
-  },
-
-  sortBy: function(iterator) {
-    return this.map(function(value, index) {
-      return {value: value, criteria: iterator(value, index)};
-    }).sort(function(left, right) {
-      var a = left.criteria, b = right.criteria;
-      return a < b ? -1 : a > b ? 1 : 0;
-    }).pluck('value');
-  },
-
-  toArray: function() {
-    return this.map();
-  },
-
-  zip: function() {
-    var iterator = Prototype.K, args = $A(arguments);
-    if (typeof args.last() == 'function')
-      iterator = args.pop();
-
-    var collections = [this].concat(args).map($A);
-    return this.map(function(value, index) {
-      return iterator(collections.pluck(index));
-    });
-  },
-
-  size: function() {
-    return this.toArray().length;
-  },
-
-  inspect: function() {
-    return '#<Enumerable:' + this.toArray().inspect() + '>';
-  }
-}
-
-Object.extend(Enumerable, {
-  map:     Enumerable.collect,
-  find:    Enumerable.detect,
-  select:  Enumerable.findAll,
-  member:  Enumerable.include,
-  entries: Enumerable.toArray
-});
-var $A = Array.from = function(iterable) {
-  if (!iterable) return [];
-  if (iterable.toArray) {
-    return iterable.toArray();
-  } else {
-    var results = [];
-    for (var i = 0, length = iterable.length; i < length; i++)
-      results.push(iterable[i]);
-    return results;
-  }
-}
-
-Object.extend(Array.prototype, Enumerable);
-
-if (!Array.prototype._reverse)
-  Array.prototype._reverse = Array.prototype.reverse;
-
-Object.extend(Array.prototype, {
-  _each: function(iterator) {
-    for (var i = 0, length = this.length; i < length; i++)
-      iterator(this[i]);
-  },
-
-  clear: function() {
-    this.length = 0;
-    return this;
-  },
-
-  first: function() {
-    return this[0];
-  },
-
-  last: function() {
-    return this[this.length - 1];
-  },
-
-  compact: function() {
-    return this.select(function(value) {
-      return value != null;
-    });
-  },
-
-  flatten: function() {
-    return this.inject([], function(array, value) {
-      return array.concat(value && value.constructor == Array ?
-        value.flatten() : [value]);
-    });
-  },
-
-  without: function() {
-    var values = $A(arguments);
-    return this.select(function(value) {
-      return !values.include(value);
-    });
-  },
-
-  indexOf: function(object) {
-    for (var i = 0, length = this.length; i < length; i++)
-      if (this[i] == object) return i;
-    return -1;
-  },
-
-  reverse: function(inline) {
-    return (inline !== false ? this : this.toArray())._reverse();
-  },
-
-  reduce: function() {
-    return this.length > 1 ? this : this[0];
-  },
-
-  uniq: function() {
-    return this.inject([], function(array, value) {
-      return array.include(value) ? array : array.concat([value]);
-    });
-  },
-
-  clone: function() {
-    return [].concat(this);
-  },
-
-  size: function() {
-    return this.length;
-  },
-
-  inspect: function() {
-    return '[' + this.map(Object.inspect).join(', ') + ']';
-  }
-});
-
-Array.prototype.toArray = Array.prototype.clone;
-
-function $w(string){
-  string = string.strip();
-  return string ? string.split(/\s+/) : [];
-}
-
-if(window.opera){
-  Array.prototype.concat = function(){
-    var array = [];
-    for(var i = 0, length = this.length; i < length; i++) array.push(this[i]);
-    for(var i = 0, length = arguments.length; i < length; i++) {
-      if(arguments[i].constructor == Array) {
-        for(var j = 0, arrayLength = arguments[i].length; j < arrayLength; j++)
-          array.push(arguments[i][j]);
-      } else {
-        array.push(arguments[i]);
-      }
-    }
-    return array;
-  }
-}
-var Hash = function(obj) {
-  Object.extend(this, obj || {});
-};
-
-Object.extend(Hash, {
-  toQueryString: function(obj) {
-    var parts = [];
-
-	  this.prototype._each.call(obj, function(pair) {
-      if (!pair.key) return;
-
-      if (pair.value && pair.value.constructor == Array) {
-        var values = pair.value.compact();
-        if (values.length < 2) pair.value = values.reduce();
-        else {
-        	key = encodeURIComponent(pair.key);
-          values.each(function(value) {
-            value = value != undefined ? encodeURIComponent(value) : '';
-            parts.push(key + '=' + encodeURIComponent(value));
-          });
-          return;
-        }
-      }
-      if (pair.value == undefined) pair[1] = '';
-      parts.push(pair.map(encodeURIComponent).join('='));
-	  });
-
-    return parts.join('&');
-  }
-});
-
-Object.extend(Hash.prototype, Enumerable);
-Object.extend(Hash.prototype, {
-  _each: function(iterator) {
-    for (var key in this) {
-      var value = this[key];
-      if (value && value == Hash.prototype[key]) continue;
-
-      var pair = [key, value];
-      pair.key = key;
-      pair.value = value;
-      iterator(pair);
-    }
-  },
-
-  keys: function() {
-    return this.pluck('key');
-  },
-
-  values: function() {
-    return this.pluck('value');
-  },
-
-  merge: function(hash) {
-    return $H(hash).inject(this, function(mergedHash, pair) {
-      mergedHash[pair.key] = pair.value;
-      return mergedHash;
-    });
-  },
-
-  remove: function() {
-    var result;
-    for(var i = 0, length = arguments.length; i < length; i++) {
-      var value = this[arguments[i]];
-      if (value !== undefined){
-        if (result === undefined) result = value;
-        else {
-          if (result.constructor != Array) result = [result];
-          result.push(value)
-        }
-      }
-      delete this[arguments[i]];
-    }
-    return result;
-  },
-
-  toQueryString: function() {
-    return Hash.toQueryString(this);
-  },
-
-  inspect: function() {
-    return '#<Hash:{' + this.map(function(pair) {
-      return pair.map(Object.inspect).join(': ');
-    }).join(', ') + '}>';
-  }
-});
-
-function $H(object) {
-  if (object && object.constructor == Hash) return object;
-  return new Hash(object);
-};
-ObjectRange = Class.create();
-Object.extend(ObjectRange.prototype, Enumerable);
-Object.extend(ObjectRange.prototype, {
-  initialize: function(start, end, exclusive) {
-    this.start = start;
-    this.end = end;
-    this.exclusive = exclusive;
-  },
-
-  _each: function(iterator) {
-    var value = this.start;
-    while (this.include(value)) {
-      iterator(value);
-      value = value.succ();
-    }
-  },
-
-  include: function(value) {
-    if (value < this.start)
-      return false;
-    if (this.exclusive)
-      return value < this.end;
-    return value <= this.end;
-  }
-});
-
-var $R = function(start, end, exclusive) {
-  return new ObjectRange(start, end, exclusive);
-}
-
-var Ajax = {
-  getTransport: function() {
-    return Try.these(
-      function() {return new XMLHttpRequest()},
-      function() {return new ActiveXObject('Msxml2.XMLHTTP')},
-      function() {return new ActiveXObject('Microsoft.XMLHTTP')}
-    ) || false;
-  },
-
-  activeRequestCount: 0
-}
-
-Ajax.Responders = {
-  responders: [],
-
-  _each: function(iterator) {
-    this.responders._each(iterator);
-  },
-
-  register: function(responder) {
-    if (!this.include(responder))
-      this.responders.push(responder);
-  },
-
-  unregister: function(responder) {
-    this.responders = this.responders.without(responder);
-  },
-
-  dispatch: function(callback, request, transport, json) {
-    this.each(function(responder) {
-      if (typeof responder[callback] == 'function') {
-        try {
-          responder[callback].apply(responder, [request, transport, json]);
-        } catch (e) {}
-      }
-    });
-  }
-};
-
-Object.extend(Ajax.Responders, Enumerable);
-
-Ajax.Responders.register({
-  onCreate: function() {
-    Ajax.activeRequestCount++;
-  },
-  onComplete: function() {
-    Ajax.activeRequestCount--;
-  }
-});
-
-Ajax.Base = function() {};
-Ajax.Base.prototype = {
-  setOptions: function(options) {
-    this.options = {
-      method:       'post',
-      asynchronous: true,
-      contentType:  'application/x-www-form-urlencoded',
-      encoding:     'UTF-8',
-      parameters:   ''
-    }
-    Object.extend(this.options, options || {});
-
-    this.options.method = this.options.method.toLowerCase();
-    if (typeof this.options.parameters == 'string')
-      this.options.parameters = this.options.parameters.toQueryParams();
-  }
-}
-
-Ajax.Request = Class.create();
-Ajax.Request.Events =
-  ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];
-
-Ajax.Request.prototype = Object.extend(new Ajax.Base(), {
-  _complete: false,
-
-  initialize: function(url, options) {
-    this.transport = Ajax.getTransport();
-    this.setOptions(options);
-    this.request(url);
-  },
-
-  request: function(url) {
-    this.url = url;
-    this.method = this.options.method;
-    var params = this.options.parameters;
-
-    if (!['get', 'post'].include(this.method)) {
-      // simulate other verbs over post
-      params['_method'] = this.method;
-      this.method = 'post';
-    }
-
-    params = Hash.toQueryString(params);
-    if (params && /Konqueror|Safari|KHTML/.test(navigator.userAgent)) params += '&_='
-
-    // when GET, append parameters to URL
-    if (this.method == 'get' && params)
-      this.url += (this.url.indexOf('?') > -1 ? '&' : '?') + params;
-
-    try {
-      Ajax.Responders.dispatch('onCreate', this, this.transport);
-
-      this.transport.open(this.method.toUpperCase(), this.url,
-        this.options.asynchronous);
-
-      if (this.options.asynchronous)
-        setTimeout(function() { this.respondToReadyState(1) }.bind(this), 10);
-
-      this.transport.onreadystatechange = this.onStateChange.bind(this);
-      this.setRequestHeaders();
-
-      var body = this.method == 'post' ? (this.options.postBody || params) : null;
-
-      this.transport.send(body);
-
-      /* Force Firefox to handle ready state 4 for synchronous requests */
-      if (!this.options.asynchronous && this.transport.overrideMimeType)
-        this.onStateChange();
-
-    }
-    catch (e) {
-      this.dispatchException(e);
-    }
-  },
-
-  onStateChange: function() {
-    var readyState = this.transport.readyState;
-    if (readyState > 1 && !((readyState == 4) && this._complete))
-      this.respondToReadyState(this.transport.readyState);
-  },
-
-  setRequestHeaders: function() {
-    var headers = {
-      'X-Requested-With': 'XMLHttpRequest',
-      'X-Prototype-Version': Prototype.Version,
-      'Accept': 'text/javascript, text/html, application/xml, text/xml, */*'
-    };
-
-    if (this.method == 'post') {
-      headers['Content-type'] = this.options.contentType +
-        (this.options.encoding ? '; charset=' + this.options.encoding : '');
-
-      /* Force "Connection: close" for older Mozilla browsers to work
-       * around a bug where XMLHttpRequest sends an incorrect
-       * Content-length header. See Mozilla Bugzilla #246651.
-       */
-      if (this.transport.overrideMimeType &&
-          (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005)
-            headers['Connection'] = 'close';
-    }
-
-    // user-defined headers
-    if (typeof this.options.requestHeaders == 'object') {
-      var extras = this.options.requestHeaders;
-
-      if (typeof extras.push == 'function')
-        for (var i = 0, length = extras.length; i < length; i += 2)
-          headers[extras[i]] = extras[i+1];
-      else
-        $H(extras).each(function(pair) { headers[pair.key] = pair.value });
-    }
-
-    for (var name in headers)
-      this.transport.setRequestHeader(name, headers[name]);
-  },
-
-  success: function() {
-    return !this.transport.status
-        || (this.transport.status >= 200 && this.transport.status < 300);
-  },
-
-  respondToReadyState: function(readyState) {
-    var state = Ajax.Request.Events[readyState];
-    var transport = this.transport, json = this.evalJSON();
-
-    if (state == 'Complete') {
-      try {
-        this._complete = true;
-        (this.options['on' + this.transport.status]
-         || this.options['on' + (this.success() ? 'Success' : 'Failure')]
-         || Prototype.emptyFunction)(transport, json);
-      } catch (e) {
-        this.dispatchException(e);
-      }
-
-      if ((this.getHeader('Content-type') || 'text/javascript').strip().
-        match(/^(text|application)\/(x-)?(java|ecma)script(;.*)?$/i))
-          this.evalResponse();
-    }
-
-    try {
-      (this.options['on' + state] || Prototype.emptyFunction)(transport, json);
-      Ajax.Responders.dispatch('on' + state, this, transport, json);
-    } catch (e) {
-      this.dispatchException(e);
-    }
-
-    if (state == 'Complete') {
-      // avoid memory leak in MSIE: clean up
-      this.transport.onreadystatechange = Prototype.emptyFunction;
-    }
-  },
-
-  getHeader: function(name) {
-    try {
-      return this.transport.getResponseHeader(name);
-    } catch (e) { return null }
-  },
-
-  evalJSON: function() {
-    try {
-      var json = this.getHeader('X-JSON');
-      return json ? eval('(' + json + ')') : null;
-    } catch (e) { return null }
-  },
-
-  evalResponse: function() {
-    try {
-      return eval(this.transport.responseText);
-    } catch (e) {
-      this.dispatchException(e);
-    }
-  },
-
-  dispatchException: function(exception) {
-    (this.options.onException || Prototype.emptyFunction)(this, exception);
-    Ajax.Responders.dispatch('onException', this, exception);
-  }
-});
-
-Ajax.Updater = Class.create();
-
-Object.extend(Object.extend(Ajax.Updater.prototype, Ajax.Request.prototype), {
-  initialize: function(container, url, options) {
-    this.container = {
-      success: (container.success || container),
-      failure: (container.failure || (container.success ? null : container))
-    }
-
-    this.transport = Ajax.getTransport();
-    this.setOptions(options);
-
-    var onComplete = this.options.onComplete || Prototype.emptyFunction;
-    this.options.onComplete = (function(transport, param) {
-      this.updateContent();
-      onComplete(transport, param);
-    }).bind(this);
-
-    this.request(url);
-  },
-
-  updateContent: function() {
-    var receiver = this.container[this.success() ? 'success' : 'failure'];
-    var response = this.transport.responseText;
-
-    if (!this.options.evalScripts) response = response.stripScripts();
-
-    if (receiver = $(receiver)) {
-      if (this.options.insertion)
-        new this.options.insertion(receiver, response);
-      else
-        receiver.update(response);
-    }
-
-    if (this.success()) {
-      if (this.onComplete)
-        setTimeout(this.onComplete.bind(this), 10);
-    }
-  }
-});
-
-Ajax.PeriodicalUpdater = Class.create();
-Ajax.PeriodicalUpdater.prototype = Object.extend(new Ajax.Base(), {
-  initialize: function(container, url, options) {
-    this.setOptions(options);
-    this.onComplete = this.options.onComplete;
-
-    this.frequency = (this.options.frequency || 2);
-    this.decay = (this.options.decay || 1);
-
-    this.updater = {};
-    this.container = container;
-    this.url = url;
-
-    this.start();
-  },
-
-  start: function() {
-    this.options.onComplete = this.updateComplete.bind(this);
-    this.onTimerEvent();
-  },
-
-  stop: function() {
-    this.updater.options.onComplete = undefined;
-    clearTimeout(this.timer);
-    (this.onComplete || Prototype.emptyFunction).apply(this, arguments);
-  },
-
-  updateComplete: function(request) {
-    if (this.options.decay) {
-      this.decay = (request.responseText == this.lastText ?
-        this.decay * this.options.decay : 1);
-
-      this.lastText = request.responseText;
-    }
-    this.timer = setTimeout(this.onTimerEvent.bind(this),
-      this.decay * this.frequency * 1000);
-  },
-
-  onTimerEvent: function() {
-    this.updater = new Ajax.Updater(this.container, this.url, this.options);
-  }
-});
-function $(element) {
-  if (arguments.length > 1) {
-    for (var i = 0, elements = [], length = arguments.length; i < length; i++)
-      elements.push($(arguments[i]));
-    return elements;
-  }
-  if (typeof element == 'string')
-    element = document.getElementById(element);
-  return Element.extend(element);
-}
-
-if (Prototype.BrowserFeatures.XPath) {
-  document._getElementsByXPath = function(expression, parentElement) {
-    var results = [];
-    var query = document.evaluate(expression, $(parentElement) || document,
-      null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
-    for (var i = 0, length = query.snapshotLength; i < length; i++)
-      results.push(query.snapshotItem(i));
-    return results;
-  };
-}
-
-document.getElementsByClassName = function(className, parentElement) {
-  if (Prototype.BrowserFeatures.XPath) {
-    var q = ".//*[contains(concat(' ', @class, ' '), ' " + className + " ')]";
-    return document._getElementsByXPath(q, parentElement);
-  } else {
-    var children = ($(parentElement) || document.body).getElementsByTagName('*');
-    var elements = [], child;
-    for (var i = 0, length = children.length; i < length; i++) {
-      child = children[i];
-      if (Element.hasClassName(child, className))
-        elements.push(Element.extend(child));
-    }
-    return elements;
-  }
-};
-
-/*--------------------------------------------------------------------------*/
-
-if (!window.Element)
-  var Element = new Object();
-
-Element.extend = function(element) {
-  if (!element || _nativeExtensions || element.nodeType == 3) return element;
-
-  if (!element._extended && element.tagName && element != window) {
-    var methods = Object.clone(Element.Methods), cache = Element.extend.cache;
-
-    if (element.tagName == 'FORM')
-      Object.extend(methods, Form.Methods);
-    if (['INPUT', 'TEXTAREA', 'SELECT'].include(element.tagName))
-      Object.extend(methods, Form.Element.Methods);
-
-    Object.extend(methods, Element.Methods.Simulated);
-
-    for (var property in methods) {
-      var value = methods[property];
-      if (typeof value == 'function' && !(property in element))
-        element[property] = cache.findOrStore(value);
-    }
-  }
-
-  element._extended = true;
-  return element;
-};
-
-Element.extend.cache = {
-  findOrStore: function(value) {
-    return this[value] = this[value] || function() {
-      return value.apply(null, [this].concat($A(arguments)));
-    }
-  }
-};
-
-Element.Methods = {
-  visible: function(element) {
-    return $(element).style.display != 'none';
-  },
-
-  toggle: function(element) {
-    element = $(element);
-    Element[Element.visible(element) ? 'hide' : 'show'](element);
-    return element;
-  },
-
-  hide: function(element) {
-    $(element).style.display = 'none';
-    return element;
-  },
-
-  show: function(element) {
-    $(element).style.display = '';
-    return element;
-  },
-
-  remove: function(element) {
-    element = $(element);
-    element.parentNode.removeChild(element);
-    return element;
-  },
-
-  update: function(element, html) {
-    html = typeof html == 'undefined' ? '' : html.toString();
-    $(element).innerHTML = html.stripScripts();
-    setTimeout(function() {html.evalScripts()}, 10);
-    return element;
-  },
-
-  replace: function(element, html) {
-    element = $(element);
-    html = typeof html == 'undefined' ? '' : html.toString();
-    if (element.outerHTML) {
-      element.outerHTML = html.stripScripts();
-    } else {
-      var range = element.ownerDocument.createRange();
-      range.selectNodeContents(element);
-      element.parentNode.replaceChild(
-        range.createContextualFragment(html.stripScripts()), element);
-    }
-    setTimeout(function() {html.evalScripts()}, 10);
-    return element;
-  },
-
-  inspect: function(element) {
-    element = $(element);
-    var result = '<' + element.tagName.toLowerCase();
-    $H({'id': 'id', 'className': 'class'}).each(function(pair) {
-      var property = pair.first(), attribute = pair.last();
-      var value = (element[property] || '').toString();
-      if (value) result += ' ' + attribute + '=' + value.inspect(true);
-    });
-    return result + '>';
-  },
-
-  recursivelyCollect: function(element, property) {
-    element = $(element);
-    var elements = [];
-    while (element = element[property])
-      if (element.nodeType == 1)
-        elements.push(Element.extend(element));
-    return elements;
-  },
-
-  ancestors: function(element) {
-    return $(element).recursivelyCollect('parentNode');
-  },
-
-  descendants: function(element) {
-    return $A($(element).getElementsByTagName('*'));
-  },
-
-  immediateDescendants: function(element) {
-    if (!(element = $(element).firstChild)) return [];
-    while (element && element.nodeType != 1) element = element.nextSibling;
-    if (element) return [element].concat($(element).nextSiblings());
-    return [];
-  },
-
-  previousSiblings: function(element) {
-    return $(element).recursivelyCollect('previousSibling');
-  },
-
-  nextSiblings: function(element) {
-    return $(element).recursivelyCollect('nextSibling');
-  },
-
-  siblings: function(element) {
-    element = $(element);
-    return element.previousSiblings().reverse().concat(element.nextSiblings());
-  },
-
-  match: function(element, selector) {
-    if (typeof selector == 'string')
-      selector = new Selector(selector);
-    return selector.match($(element));
-  },
-
-  up: function(element, expression, index) {
-    return Selector.findElement($(element).ancestors(), expression, index);
-  },
-
-  down: function(element, expression, index) {
-    return Selector.findElement($(element).descendants(), expression, index);
-  },
-
-  previous: function(element, expression, index) {
-    return Selector.findElement($(element).previousSiblings(), expression, index);
-  },
-
-  next: function(element, expression, index) {
-    return Selector.findElement($(element).nextSiblings(), expression, index);
-  },
-
-  getElementsBySelector: function() {
-    var args = $A(arguments), element = $(args.shift());
-    return Selector.findChildElements(element, args);
-  },
-
-  getElementsByClassName: function(element, className) {
-    return document.getElementsByClassName(className, element);
-  },
-
-  readAttribute: function(element, name) {
-    element = $(element);
-    if (document.all && !window.opera) {
-      var t = Element._attributeTranslations;
-      if (t.values[name]) return t.values[name](element, name);
-      if (t.names[name])  name = t.names[name];
-      var attribute = element.attributes[name];
-      if(attribute) return attribute.nodeValue;
-    }
-    return element.getAttribute(name);
-  },
-
-  getHeight: function(element) {
-    return $(element).getDimensions().height;
-  },
-
-  getWidth: function(element) {
-    return $(element).getDimensions().width;
-  },
-
-  classNames: function(element) {
-    return new Element.ClassNames(element);
-  },
-
-  hasClassName: function(element, className) {
-    if (!(element = $(element))) return;
-    var elementClassName = element.className;
-    if (elementClassName.length == 0) return false;
-    if (elementClassName == className ||
-        elementClassName.match(new RegExp("(^|\\s)" + className + "(\\s|$)")))
-      return true;
-    return false;
-  },
-
-  addClassName: function(element, className) {
-    if (!(element = $(element))) return;
-    Element.classNames(element).add(className);
-    return element;
-  },
-
-  removeClassName: function(element, className) {
-    if (!(element = $(element))) return;
-    Element.classNames(element).remove(className);
-    return element;
-  },
-
-  toggleClassName: function(element, className) {
-    if (!(element = $(element))) return;
-    Element.classNames(element)[element.hasClassName(className) ? 'remove' : 'add'](className);
-    return element;
-  },
-
-  observe: function() {
-    Event.observe.apply(Event, arguments);
-    return $A(arguments).first();
-  },
-
-  stopObserving: function() {
-    Event.stopObserving.apply(Event, arguments);
-    return $A(arguments).first();
-  },
-
-  // removes whitespace-only text node children
-  cleanWhitespace: function(element) {
-    element = $(element);
-    var node = element.firstChild;
-    while (node) {
-      var nextNode = node.nextSibling;
-      if (node.nodeType == 3 && !/\S/.test(node.nodeValue))
-        element.removeChild(node);
-      node = nextNode;
-    }
-    return element;
-  },
-
-  empty: function(element) {
-    return $(element).innerHTML.match(/^\s*$/);
-  },
-
-  descendantOf: function(element, ancestor) {
-    element = $(element), ancestor = $(ancestor);
-    while (element = element.parentNode)
-      if (element == ancestor) return true;
-    return false;
-  },
-
-  scrollTo: function(element) {
-    element = $(element);
-    var pos = Position.cumulativeOffset(element);
-    window.scrollTo(pos[0], pos[1]);
-    return element;
-  },
-
-  getStyle: function(element, style) {
-    element = $(element);
-    if (['float','cssFloat'].include(style))
-      style = (typeof element.style.styleFloat != 'undefined' ? 'styleFloat' : 'cssFloat');
-    style = style.camelize();
-    var value = element.style[style];
-    if (!value) {
-      if (document.defaultView && document.defaultView.getComputedStyle) {
-        var css = document.defaultView.getComputedStyle(element, null);
-        value = css ? css[style] : null;
-      } else if (element.currentStyle) {
-        value = element.currentStyle[style];
-      }
-    }
-
-    if((value == 'auto') && ['width','height'].include(style) && (element.getStyle('display') != 'none'))
-      value = element['offset'+style.capitalize()] + 'px';
-
-    if (window.opera && ['left', 'top', 'right', 'bottom'].include(style))
-      if (Element.getStyle(element, 'position') == 'static') value = 'auto';
-    if(style == 'opacity') {
-      if(value) return parseFloat(value);
-      if(value = (element.getStyle('filter') || '').match(/alpha\(opacity=(.*)\)/))
-        if(value[1]) return parseFloat(value[1]) / 100;
-      return 1.0;
-    }
-    return value == 'auto' ? null : value;
-  },
-
-  setStyle: function(element, style) {
-    element = $(element);
-    for (var name in style) {
-      var value = style[name];
-      if(name == 'opacity') {
-        if (value == 1) {
-          value = (/Gecko/.test(navigator.userAgent) &&
-            !/Konqueror|Safari|KHTML/.test(navigator.userAgent)) ? 0.999999 : 1.0;
-          if(/MSIE/.test(navigator.userAgent) && !window.opera)
-            element.style.filter = element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,'');
-        } else if(value === '') {
-          if(/MSIE/.test(navigator.userAgent) && !window.opera)
-            element.style.filter = element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,'');
-        } else {
-          if(value < 0.00001) value = 0;
-          if(/MSIE/.test(navigator.userAgent) && !window.opera)
-            element.style.filter = element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,'') +
-              'alpha(opacity='+value*100+')';
-        }
-      } else if(['float','cssFloat'].include(name)) name = (typeof element.style.styleFloat != 'undefined') ? 'styleFloat' : 'cssFloat';
-      element.style[name.camelize()] = value;
-    }
-    return element;
-  },
-
-  getDimensions: function(element) {
-    element = $(element);
-    var display = $(element).getStyle('display');
-    if (display != 'none' && display != null) // Safari bug
-      return {width: element.offsetWidth, height: element.offsetHeight};
-
-    // All *Width and *Height properties give 0 on elements with display none,
-    // so enable the element temporarily
-    var els = element.style;
-    var originalVisibility = els.visibility;
-    var originalPosition = els.position;
-    var originalDisplay = els.display;
-    els.visibility = 'hidden';
-    els.position = 'absolute';
-    els.display = 'block';
-    var originalWidth = element.clientWidth;
-    var originalHeight = element.clientHeight;
-    els.display = originalDisplay;
-    els.position = originalPosition;
-    els.visibility = originalVisibility;
-    return {width: originalWidth, height: originalHeight};
-  },
-
-  makePositioned: function(element) {
-    element = $(element);
-    var pos = Element.getStyle(element, 'position');
-    if (pos == 'static' || !pos) {
-      element._madePositioned = true;
-      element.style.position = 'relative';
-      // Opera returns the offset relative to the positioning context, when an
-      // element is position relative but top and left have not been defined
-      if (window.opera) {
-        element.style.top = 0;
-        element.style.left = 0;
-      }
-    }
-    return element;
-  },
-
-  undoPositioned: function(element) {
-    element = $(element);
-    if (element._madePositioned) {
-      element._madePositioned = undefined;
-      element.style.position =
-        element.style.top =
-        element.style.left =
-        element.style.bottom =
-        element.style.right = '';
-    }
-    return element;
-  },
-
-  makeClipping: function(element) {
-    element = $(element);
-    if (element._overflow) return element;
-    element._overflow = element.style.overflow || 'auto';
-    if ((Element.getStyle(element, 'overflow') || 'visible') != 'hidden')
-      element.style.overflow = 'hidden';
-    return element;
-  },
-
-  undoClipping: function(element) {
-    element = $(element);
-    if (!element._overflow) return element;
-    element.style.overflow = element._overflow == 'auto' ? '' : element._overflow;
-    element._overflow = null;
-    return element;
-  }
-};
-
-Object.extend(Element.Methods, {childOf: Element.Methods.descendantOf});
-
-Element._attributeTranslations = {};
-
-Element._attributeTranslations.names = {
-  colspan:   "colSpan",
-  rowspan:   "rowSpan",
-  valign:    "vAlign",
-  datetime:  "dateTime",
-  accesskey: "accessKey",
-  tabindex:  "tabIndex",
-  enctype:   "encType",
-  maxlength: "maxLength",
-  readonly:  "readOnly",
-  longdesc:  "longDesc"
-};
-
-Element._attributeTranslations.values = {
-  _getAttr: function(element, attribute) {
-    return element.getAttribute(attribute, 2);
-  },
-
-  _flag: function(element, attribute) {
-    return $(element).hasAttribute(attribute) ? attribute : null;
-  },
-
-  style: function(element) {
-    return element.style.cssText.toLowerCase();
-  },
-
-  title: function(element) {
-    var node = element.getAttributeNode('title');
-    return node.specified ? node.nodeValue : null;
-  }
-};
-
-Object.extend(Element._attributeTranslations.values, {
-  href: Element._attributeTranslations.values._getAttr,
-  src:  Element._attributeTranslations.values._getAttr,
-  disabled: Element._attributeTranslations.values._flag,
-  checked:  Element._attributeTranslations.values._flag,
-  readonly: Element._attributeTranslations.values._flag,
-  multiple: Element._attributeTranslations.values._flag
-});
-
-Element.Methods.Simulated = {
-  hasAttribute: function(element, attribute) {
-    var t = Element._attributeTranslations;
-    attribute = t.names[attribute] || attribute;
-    return $(element).getAttributeNode(attribute).specified;
-  }
-};
-
-// IE is missing .innerHTML support for TABLE-related elements
-if (document.all && !window.opera){
-  Element.Methods.update = function(element, html) {
-    element = $(element);
-    html = typeof html == 'undefined' ? '' : html.toString();
-    var tagName = element.tagName.toUpperCase();
-    if (['THEAD','TBODY','TR','TD'].include(tagName)) {
-      var div = document.createElement('div');
-      switch (tagName) {
-        case 'THEAD':
-        case 'TBODY':
-          div.innerHTML = '<table><tbody>' +  html.stripScripts() + '</tbody></table>';
-          depth = 2;
-          break;
-        case 'TR':
-          div.innerHTML = '<table><tbody><tr>' +  html.stripScripts() + '</tr></tbody></table>';
-          depth = 3;
-          break;
-        case 'TD':
-          div.innerHTML = '<table><tbody><tr><td>' +  html.stripScripts() + '</td></tr></tbody></table>';
-          depth = 4;
-      }
-      $A(element.childNodes).each(function(node){
-        element.removeChild(node)
-      });
-      depth.times(function(){ div = div.firstChild });
-
-      $A(div.childNodes).each(
-        function(node){ element.appendChild(node) });
-    } else {
-      element.innerHTML = html.stripScripts();
-    }
-    setTimeout(function() {html.evalScripts()}, 10);
-    return element;
-  }
-};
-
-Object.extend(Element, Element.Methods);
-
-var _nativeExtensions = false;
-
-if(/Konqueror|Safari|KHTML/.test(navigator.userAgent))
-  ['', 'Form', 'Input', 'TextArea', 'Select'].each(function(tag) {
-    var className = 'HTML' + tag + 'Element';
-    if(window[className]) return;
-    var klass = window[className] = {};
-    klass.prototype = document.createElement(tag ? tag.toLowerCase() : 'div').__proto__;
-  });
-
-Element.addMethods = function(methods) {
-  Object.extend(Element.Methods, methods || {});
-
-  function copy(methods, destination, onlyIfAbsent) {
-    onlyIfAbsent = onlyIfAbsent || false;
-    var cache = Element.extend.cache;
-    for (var property in methods) {
-      var value = methods[property];
-      if (!onlyIfAbsent || !(property in destination))
-        destination[property] = cache.findOrStore(value);
-    }
-  }
-
-  if (typeof HTMLElement != 'undefined') {
-    copy(Element.Methods, HTMLElement.prototype);
-    copy(Element.Methods.Simulated, HTMLElement.prototype, true);
-    copy(Form.Methods, HTMLFormElement.prototype);
-    [HTMLInputElement, HTMLTextAreaElement, HTMLSelectElement].each(function(klass) {
-      copy(Form.Element.Methods, klass.prototype);
-    });
-    _nativeExtensions = true;
-  }
-}
-
-var Toggle = new Object();
-Toggle.display = Element.toggle;
-
-/*--------------------------------------------------------------------------*/
-
-Abstract.Insertion = function(adjacency) {
-  this.adjacency = adjacency;
-}
-
-Abstract.Insertion.prototype = {
-  initialize: function(element, content) {
-    this.element = $(element);
-    this.content = content.stripScripts();
-
-    if (this.adjacency && this.element.insertAdjacentHTML) {
-      try {
-        this.element.insertAdjacentHTML(this.adjacency, this.content);
-      } catch (e) {
-        var tagName = this.element.tagName.toUpperCase();
-        if (['TBODY', 'TR'].include(tagName)) {
-          this.insertContent(this.contentFromAnonymousTable());
-        } else {
-          throw e;
-        }
-      }
-    } else {
-      this.range = this.element.ownerDocument.createRange();
-      if (this.initializeRange) this.initializeRange();
-      this.insertContent([this.range.createContextualFragment(this.content)]);
-    }
-
-    setTimeout(function() {content.evalScripts()}, 10);
-  },
-
-  contentFromAnonymousTable: function() {
-    var div = document.createElement('div');
-    div.innerHTML = '<table><tbody>' + this.content + '</tbody></table>';
-    return $A(div.childNodes[0].childNodes[0].childNodes);
-  }
-}
-
-var Insertion = new Object();
-
-Insertion.Before = Class.create();
-Insertion.Before.prototype = Object.extend(new Abstract.Insertion('beforeBegin'), {
-  initializeRange: function() {
-    this.range.setStartBefore(this.element);
-  },
-
-  insertContent: function(fragments) {
-    fragments.each((function(fragment) {
-      this.element.parentNode.insertBefore(fragment, this.element);
-    }).bind(this));
-  }
-});
-
-Insertion.Top = Class.create();
-Insertion.Top.prototype = Object.extend(new Abstract.Insertion('afterBegin'), {
-  initializeRange: function() {
-    this.range.selectNodeContents(this.element);
-    this.range.collapse(true);
-  },
-
-  insertContent: function(fragments) {
-    fragments.reverse(false).each((function(fragment) {
-      this.element.insertBefore(fragment, this.element.firstChild);
-    }).bind(this));
-  }
-});
-
-Insertion.Bottom = Class.create();
-Insertion.Bottom.prototype = Object.extend(new Abstract.Insertion('beforeEnd'), {
-  initializeRange: function() {
-    this.range.selectNodeContents(this.element);
-    this.range.collapse(this.element);
-  },
-
-  insertContent: function(fragments) {
-    fragments.each((function(fragment) {
-      this.element.appendChild(fragment);
-    }).bind(this));
-  }
-});
-
-Insertion.After = Class.create();
-Insertion.After.prototype = Object.extend(new Abstract.Insertion('afterEnd'), {
-  initializeRange: function() {
-    this.range.setStartAfter(this.element);
-  },
-
-  insertContent: function(fragments) {
-    fragments.each((function(fragment) {
-      this.element.parentNode.insertBefore(fragment,
-        this.element.nextSibling);
-    }).bind(this));
-  }
-});
-
-/*--------------------------------------------------------------------------*/
-
-Element.ClassNames = Class.create();
-Element.ClassNames.prototype = {
-  initialize: function(element) {
-    this.element = $(element);
-  },
-
-  _each: function(iterator) {
-    this.element.className.split(/\s+/).select(function(name) {
-      return name.length > 0;
-    })._each(iterator);
-  },
-
-  set: function(className) {
-    this.element.className = className;
-  },
-
-  add: function(classNameToAdd) {
-    if (this.include(classNameToAdd)) return;
-    this.set($A(this).concat(classNameToAdd).join(' '));
-  },
-
-  remove: function(classNameToRemove) {
-    if (!this.include(classNameToRemove)) return;
-    this.set($A(this).without(classNameToRemove).join(' '));
-  },
-
-  toString: function() {
-    return $A(this).join(' ');
-  }
-};
-
-Object.extend(Element.ClassNames.prototype, Enumerable);
-var Selector = Class.create();
-Selector.prototype = {
-  initialize: function(expression) {
-    this.params = {classNames: []};
-    this.expression = expression.toString().strip();
-    this.parseExpression();
-    this.compileMatcher();
-  },
-
-  parseExpression: function() {
-    function abort(message) { throw 'Parse error in selector: ' + message; }
-
-    if (this.expression == '')  abort('empty expression');
-
-    var params = this.params, expr = this.expression, match, modifier, clause, rest;
-    while (match = expr.match(/^(.*)\[([a-z0-9_:-]+?)(?:([~\|!]?=)(?:"([^"]*)"|([^\]\s]*)))?\]$/i)) {
-      params.attributes = params.attributes || [];
-      params.attributes.push({name: match[2], operator: match[3], value: match[4] || match[5] || ''});
-      expr = match[1];
-    }
-
-    if (expr == '*') return this.params.wildcard = true;
-
-    while (match = expr.match(/^([^a-z0-9_-])?([a-z0-9_-]+)(.*)/i)) {
-      modifier = match[1], clause = match[2], rest = match[3];
-      switch (modifier) {
-        case '#':       params.id = clause; break;
-        case '.':       params.classNames.push(clause); break;
-        case '':
-        case undefined: params.tagName = clause.toUpperCase(); break;
-        default:        abort(expr.inspect());
-      }
-      expr = rest;
-    }
-
-    if (expr.length > 0) abort(expr.inspect());
-  },
-
-  buildMatchExpression: function() {
-    var params = this.params, conditions = [], clause;
-
-    if (params.wildcard)
-      conditions.push('true');
-    if (clause = params.id)
-      conditions.push('element.readAttribute("id") == ' + clause.inspect());
-    if (clause = params.tagName)
-      conditions.push('element.tagName.toUpperCase() == ' + clause.inspect());
-    if ((clause = params.classNames).length > 0)
-      for (var i = 0, length = clause.length; i < length; i++)
-        conditions.push('element.hasClassName(' + clause[i].inspect() + ')');
-    if (clause = params.attributes) {
-      clause.each(function(attribute) {
-        var value = 'element.readAttribute(' + attribute.name.inspect() + ')';
-        var splitValueBy = function(delimiter) {
-          return value + ' && ' + value + '.split(' + delimiter.inspect() + ')';
-        }
-
-        switch (attribute.operator) {
-          case '=':       conditions.push(value + ' == ' + attribute.value.inspect()); break;
-          case '~=':      conditions.push(splitValueBy(' ') + '.include(' + attribute.value.inspect() + ')'); break;
-          case '|=':      conditions.push(
-                            splitValueBy('-') + '.first().toUpperCase() == ' + attribute.value.toUpperCase().inspect()
-                          ); break;
-          case '!=':      conditions.push(value + ' != ' + attribute.value.inspect()); break;
-          case '':
-          case undefined: conditions.push('element.hasAttribute(' + attribute.name.inspect() + ')'); break;
-          default:        throw 'Unknown operator ' + attribute.operator + ' in selector';
-        }
-      });
-    }
-
-    return conditions.join(' && ');
-  },
-
-  compileMatcher: function() {
-    this.match = new Function('element', 'if (!element.tagName) return false; \
-      element = $(element); \
-      return ' + this.buildMatchExpression());
-  },
-
-  findElements: function(scope) {
-    var element;
-
-    if (element = $(this.params.id))
-      if (this.match(element))
-        if (!scope || Element.childOf(element, scope))
-          return [element];
-
-    scope = (scope || document).getElementsByTagName(this.params.tagName || '*');
-
-    var results = [];
-    for (var i = 0, length = scope.length; i < length; i++)
-      if (this.match(element = scope[i]))
-        results.push(Element.extend(element));
-
-    return results;
-  },
-
-  toString: function() {
-    return this.expression;
-  }
-}
-
-Object.extend(Selector, {
-  matchElements: function(elements, expression) {
-    var selector = new Selector(expression);
-    return elements.select(selector.match.bind(selector)).map(Element.extend);
-  },
-
-  findElement: function(elements, expression, index) {
-    if (typeof expression == 'number') index = expression, expression = false;
-    return Selector.matchElements(elements, expression || '*')[index || 0];
-  },
-
-  findChildElements: function(element, expressions) {
-    return expressions.map(function(expression) {
-      return expression.match(/[^\s"]+(?:"[^"]*"[^\s"]+)*/g).inject([null], function(results, expr) {
-        var selector = new Selector(expr);
-        return results.inject([], function(elements, result) {
-          return elements.concat(selector.findElements(result || element));
-        });
-      });
-    }).flatten();
-  }
-});
-
-function $$() {
-  return Selector.findChildElements(document, $A(arguments));
-}
-var Form = {
-  reset: function(form) {
-    $(form).reset();
-    return form;
-  },
-
-  serializeElements: function(elements, getHash) {
-    var data = elements.inject({}, function(result, element) {
-      if (!element.disabled && element.name) {
-        var key = element.name, value = $(element).getValue();
-        if (value != undefined) {
-          if (result[key]) {
-            if (result[key].constructor != Array) result[key] = [result[key]];
-            result[key].push(value);
-          }
-          else result[key] = value;
-        }
-      }
-      return result;
-    });
-
-    return getHash ? data : Hash.toQueryString(data);
-  }
-};
-
-Form.Methods = {
-  serialize: function(form, getHash) {
-    return Form.serializeElements(Form.getElements(form), getHash);
-  },
-
-  getElements: function(form) {
-    return $A($(form).getElementsByTagName('*')).inject([],
-      function(elements, child) {
-        if (Form.Element.Serializers[child.tagName.toLowerCase()])
-          elements.push(Element.extend(child));
-        return elements;
-      }
-    );
-  },
-
-  getInputs: function(form, typeName, name) {
-    form = $(form);
-    var inputs = form.getElementsByTagName('input');
-
-    if (!typeName && !name) return $A(inputs).map(Element.extend);
-
-    for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) {
-      var input = inputs[i];
-      if ((typeName && input.type != typeName) || (name && input.name != name))
-        continue;
-      matchingInputs.push(Element.extend(input));
-    }
-
-    return matchingInputs;
-  },
-
-  disable: function(form) {
-    form = $(form);
-    form.getElements().each(function(element) {
-      element.blur();
-      element.disabled = 'true';
-    });
-    return form;
-  },
-
-  enable: function(form) {
-    form = $(form);
-    form.getElements().each(function(element) {
-      element.disabled = '';
-    });
-    return form;
-  },
-
-  findFirstElement: function(form) {
-    return $(form).getElements().find(function(element) {
-      return element.type != 'hidden' && !element.disabled &&
-        ['input', 'select', 'textarea'].include(element.tagName.toLowerCase());
-    });
-  },
-
-  focusFirstElement: function(form) {
-    form = $(form);
-    form.findFirstElement().activate();
-    return form;
-  }
-}
-
-Object.extend(Form, Form.Methods);
-
-/*--------------------------------------------------------------------------*/
-
-Form.Element = {
-  focus: function(element) {
-    $(element).focus();
-    return element;
-  },
-
-  select: function(element) {
-    $(element).select();
-    return element;
-  }
-}
-
-Form.Element.Methods = {
-  serialize: function(element) {
-    element = $(element);
-    if (!element.disabled && element.name) {
-      var value = element.getValue();
-      if (value != undefined) {
-        var pair = {};
-        pair[element.name] = value;
-        return Hash.toQueryString(pair);
-      }
-    }
-    return '';
-  },
-
-  getValue: function(element) {
-    element = $(element);
-    var method = element.tagName.toLowerCase();
-    return Form.Element.Serializers[method](element);
-  },
-
-  clear: function(element) {
-    $(element).value = '';
-    return element;
-  },
-
-  present: function(element) {
-    return $(element).value != '';
-  },
-
-  activate: function(element) {
-    element = $(element);
-    element.focus();
-    if (element.select && ( element.tagName.toLowerCase() != 'input' ||
-      !['button', 'reset', 'submit'].include(element.type) ) )
-      element.select();
-    return element;
-  },
-
-  disable: function(element) {
-    element = $(element);
-    element.disabled = true;
-    return element;
-  },
-
-  enable: function(element) {
-    element = $(element);
-    element.blur();
-    element.disabled = false;
-    return element;
-  }
-}
-
-Object.extend(Form.Element, Form.Element.Methods);
-var Field = Form.Element;
-var $F = Form.Element.getValue;
-
-/*--------------------------------------------------------------------------*/
-
-Form.Element.Serializers = {
-  input: function(element) {
-    switch (element.type.toLowerCase()) {
-      case 'checkbox':
-      case 'radio':
-        return Form.Element.Serializers.inputSelector(element);
-      default:
-        return Form.Element.Serializers.textarea(element);
-    }
-  },
-
-  inputSelector: function(element) {
-    return element.checked ? element.value : null;
-  },
-
-  textarea: function(element) {
-    return element.value;
-  },
-
-  select: function(element) {
-    return this[element.type == 'select-one' ?
-      'selectOne' : 'selectMany'](element);
-  },
-
-  selectOne: function(element) {
-    var index = element.selectedIndex;
-    return index >= 0 ? this.optionValue(element.options[index]) : null;
-  },
-
-  selectMany: function(element) {
-    var values, length = element.length;
-    if (!length) return null;
-
-    for (var i = 0, values = []; i < length; i++) {
-      var opt = element.options[i];
-      if (opt.selected) values.push(this.optionValue(opt));
-    }
-    return values;
-  },
-
-  optionValue: function(opt) {
-    // extend element because hasAttribute may not be native
-    return Element.extend(opt).hasAttribute('value') ? opt.value : opt.text;
-  }
-}
-
-/*--------------------------------------------------------------------------*/
-
-Abstract.TimedObserver = function() {}
-Abstract.TimedObserver.prototype = {
-  initialize: function(element, frequency, callback) {
-    this.frequency = frequency;
-    this.element   = $(element);
-    this.callback  = callback;
-
-    this.lastValue = this.getValue();
-    this.registerCallback();
-  },
-
-  registerCallback: function() {
-    setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
-  },
-
-  onTimerEvent: function() {
-    var value = this.getValue();
-    var changed = ('string' == typeof this.lastValue && 'string' == typeof value
-      ? this.lastValue != value : String(this.lastValue) != String(value));
-    if (changed) {
-      this.callback(this.element, value);
-      this.lastValue = value;
-    }
-  }
-}
-
-Form.Element.Observer = Class.create();
-Form.Element.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {
-  getValue: function() {
-    return Form.Element.getValue(this.element);
-  }
-});
-
-Form.Observer = Class.create();
-Form.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {
-  getValue: function() {
-    return Form.serialize(this.element);
-  }
-});
-
-/*--------------------------------------------------------------------------*/
-
-Abstract.EventObserver = function() {}
-Abstract.EventObserver.prototype = {
-  initialize: function(element, callback) {
-    this.element  = $(element);
-    this.callback = callback;
-
-    this.lastValue = this.getValue();
-    if (this.element.tagName.toLowerCase() == 'form')
-      this.registerFormCallbacks();
-    else
-      this.registerCallback(this.element);
-  },
-
-  onElementEvent: function() {
-    var value = this.getValue();
-    if (this.lastValue != value) {
-      this.callback(this.element, value);
-      this.lastValue = value;
-    }
-  },
-
-  registerFormCallbacks: function() {
-    Form.getElements(this.element).each(this.registerCallback.bind(this));
-  },
-
-  registerCallback: function(element) {
-    if (element.type) {
-      switch (element.type.toLowerCase()) {
-        case 'checkbox':
-        case 'radio':
-          Event.observe(element, 'click', this.onElementEvent.bind(this));
-          break;
-        default:
-          Event.observe(element, 'change', this.onElementEvent.bind(this));
-          break;
-      }
-    }
-  }
-}
-
-Form.Element.EventObserver = Class.create();
-Form.Element.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {
-  getValue: function() {
-    return Form.Element.getValue(this.element);
-  }
-});
-
-Form.EventObserver = Class.create();
-Form.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {
-  getValue: function() {
-    return Form.serialize(this.element);
-  }
-});
-if (!window.Event) {
-  var Event = new Object();
-}
-
-Object.extend(Event, {
-  KEY_BACKSPACE: 8,
-  KEY_TAB:       9,
-  KEY_RETURN:   13,
-  KEY_ESC:      27,
-  KEY_LEFT:     37,
-  KEY_UP:       38,
-  KEY_RIGHT:    39,
-  KEY_DOWN:     40,
-  KEY_DELETE:   46,
-  KEY_HOME:     36,
-  KEY_END:      35,
-  KEY_PAGEUP:   33,
-  KEY_PAGEDOWN: 34,
-
-  element: function(event) {
-    return event.target || event.srcElement;
-  },
-
-  isLeftClick: function(event) {
-    return (((event.which) && (event.which == 1)) ||
-            ((event.button) && (event.button == 1)));
-  },
-
-  pointerX: function(event) {
-    return event.pageX || (event.clientX +
-      (document.documentElement.scrollLeft || document.body.scrollLeft));
-  },
-
-  pointerY: function(event) {
-    return event.pageY || (event.clientY +
-      (document.documentElement.scrollTop || document.body.scrollTop));
-  },
-
-  stop: function(event) {
-    if (event.preventDefault) {
-      event.preventDefault();
-      event.stopPropagation();
-    } else {
-      event.returnValue = false;
-      event.cancelBubble = true;
-    }
-  },
-
-  // find the first node with the given tagName, starting from the
-  // node the event was triggered on; traverses the DOM upwards
-  findElement: function(event, tagName) {
-    var element = Event.element(event);
-    while (element.parentNode && (!element.tagName ||
-        (element.tagName.toUpperCase() != tagName.toUpperCase())))
-      element = element.parentNode;
-    return element;
-  },
-
-  observers: false,
-
-  _observeAndCache: function(element, name, observer, useCapture) {
-    if (!this.observers) this.observers = [];
-    if (element.addEventListener) {
-      this.observers.push([element, name, observer, useCapture]);
-      element.addEventListener(name, observer, useCapture);
-    } else if (element.attachEvent) {
-      this.observers.push([element, name, observer, useCapture]);
-      element.attachEvent('on' + name, observer);
-    }
-  },
-
-  unloadCache: function() {
-    if (!Event.observers) return;
-    for (var i = 0, length = Event.observers.length; i < length; i++) {
-      Event.stopObserving.apply(this, Event.observers[i]);
-      Event.observers[i][0] = null;
-    }
-    Event.observers = false;
-  },
-
-  observe: function(element, name, observer, useCapture) {
-    element = $(element);
-    useCapture = useCapture || false;
-
-    if (name == 'keypress' &&
-        (navigator.appVersion.match(/Konqueror|Safari|KHTML/)
-        || element.attachEvent))
-      name = 'keydown';
-
-    Event._observeAndCache(element, name, observer, useCapture);
-  },
-
-  stopObserving: function(element, name, observer, useCapture) {
-    element = $(element);
-    useCapture = useCapture || false;
-
-    if (name == 'keypress' &&
-        (navigator.appVersion.match(/Konqueror|Safari|KHTML/)
-        || element.detachEvent))
-      name = 'keydown';
-
-    if (element.removeEventListener) {
-      element.removeEventListener(name, observer, useCapture);
-    } else if (element.detachEvent) {
-      try {
-        element.detachEvent('on' + name, observer);
-      } catch (e) {}
-    }
-  }
-});
-
-/* prevent memory leaks in IE */
-if (navigator.appVersion.match(/\bMSIE\b/))
-  Event.observe(window, 'unload', Event.unloadCache, false);
-var Position = {
-  // set to true if needed, warning: firefox performance problems
-  // NOT neeeded for page scrolling, only if draggable contained in
-  // scrollable elements
-  includeScrollOffsets: false,
-
-  // must be called before calling withinIncludingScrolloffset, every time the
-  // page is scrolled
-  prepare: function() {
-    this.deltaX =  window.pageXOffset
-                || document.documentElement.scrollLeft
-                || document.body.scrollLeft
-                || 0;
-    this.deltaY =  window.pageYOffset
-                || document.documentElement.scrollTop
-                || document.body.scrollTop
-                || 0;
-  },
-
-  realOffset: function(element) {
-    var valueT = 0, valueL = 0;
-    do {
-      valueT += element.scrollTop  || 0;
-      valueL += element.scrollLeft || 0;
-      element = element.parentNode;
-    } while (element);
-    return [valueL, valueT];
-  },
-
-  cumulativeOffset: function(element) {
-    var valueT = 0, valueL = 0;
-    do {
-      valueT += element.offsetTop  || 0;
-      valueL += element.offsetLeft || 0;
-      element = element.offsetParent;
-    } while (element);
-    return [valueL, valueT];
-  },
-
-  positionedOffset: function(element) {
-    var valueT = 0, valueL = 0;
-    do {
-      valueT += element.offsetTop  || 0;
-      valueL += element.offsetLeft || 0;
-      element = element.offsetParent;
-      if (element) {
-        if(element.tagName=='BODY') break;
-        var p = Element.getStyle(element, 'position');
-        if (p == 'relative' || p == 'absolute') break;
-      }
-    } while (element);
-    return [valueL, valueT];
-  },
-
-  offsetParent: function(element) {
-    if (element.offsetParent) return element.offsetParent;
-    if (element == document.body) return element;
-
-    while ((element = element.parentNode) && element != document.body)
-      if (Element.getStyle(element, 'position') != 'static')
-        return element;
-
-    return document.body;
-  },
-
-  // caches x/y coordinate pair to use with overlap
-  within: function(element, x, y) {
-    if (this.includeScrollOffsets)
-      return this.withinIncludingScrolloffsets(element, x, y);
-    this.xcomp = x;
-    this.ycomp = y;
-    this.offset = this.cumulativeOffset(element);
-
-    return (y >= this.offset[1] &&
-            y <  this.offset[1] + element.offsetHeight &&
-            x >= this.offset[0] &&
-            x <  this.offset[0] + element.offsetWidth);
-  },
-
-  withinIncludingScrolloffsets: function(element, x, y) {
-    var offsetcache = this.realOffset(element);
-
-    this.xcomp = x + offsetcache[0] - this.deltaX;
-    this.ycomp = y + offsetcache[1] - this.deltaY;
-    this.offset = this.cumulativeOffset(element);
-
-    return (this.ycomp >= this.offset[1] &&
-            this.ycomp <  this.offset[1] + element.offsetHeight &&
-            this.xcomp >= this.offset[0] &&
-            this.xcomp <  this.offset[0] + element.offsetWidth);
-  },
-
-  // within must be called directly before
-  overlap: function(mode, element) {
-    if (!mode) return 0;
-    if (mode == 'vertical')
-      return ((this.offset[1] + element.offsetHeight) - this.ycomp) /
-        element.offsetHeight;
-    if (mode == 'horizontal')
-      return ((this.offset[0] + element.offsetWidth) - this.xcomp) /
-        element.offsetWidth;
-  },
-
-  page: function(forElement) {
-    var valueT = 0, valueL = 0;
-
-    var element = forElement;
-    do {
-      valueT += element.offsetTop  || 0;
-      valueL += element.offsetLeft || 0;
-
-      // Safari fix
-      if (element.offsetParent==document.body)
-        if (Element.getStyle(element,'position')=='absolute') break;
-
-    } while (element = element.offsetParent);
-
-    element = forElement;
-    do {
-      if (!window.opera || element.tagName=='BODY') {
-        valueT -= element.scrollTop  || 0;
-        valueL -= element.scrollLeft || 0;
-      }
-    } while (element = element.parentNode);
-
-    return [valueL, valueT];
-  },
-
-  clone: function(source, target) {
-    var options = Object.extend({
-      setLeft:    true,
-      setTop:     true,
-      setWidth:   true,
-      setHeight:  true,
-      offsetTop:  0,
-      offsetLeft: 0
-    }, arguments[2] || {})
-
-    // find page position of source
-    source = $(source);
-    var p = Position.page(source);
-
-    // find coordinate system to use
-    target = $(target);
-    var delta = [0, 0];
-    var parent = null;
-    // delta [0,0] will do fine with position: fixed elements,
-    // position:absolute needs offsetParent deltas
-    if (Element.getStyle(target,'position') == 'absolute') {
-      parent = Position.offsetParent(target);
-      delta = Position.page(parent);
-    }
-
-    // correct by body offsets (fixes Safari)
-    if (parent == document.body) {
-      delta[0] -= document.body.offsetLeft;
-      delta[1] -= document.body.offsetTop;
-    }
-
-    // set position
-    if(options.setLeft)   target.style.left  = (p[0] - delta[0] + options.offsetLeft) + 'px';
-    if(options.setTop)    target.style.top   = (p[1] - delta[1] + options.offsetTop) + 'px';
-    if(options.setWidth)  target.style.width = source.offsetWidth + 'px';
-    if(options.setHeight) target.style.height = source.offsetHeight + 'px';
-  },
-
-  absolutize: function(element) {
-    element = $(element);
-    if (element.style.position == 'absolute') return;
-    Position.prepare();
-
-    var offsets = Position.positionedOffset(element);
-    var top     = offsets[1];
-    var left    = offsets[0];
-    var width   = element.clientWidth;
-    var height  = element.clientHeight;
-
-    element._originalLeft   = left - parseFloat(element.style.left  || 0);
-    element._originalTop    = top  - parseFloat(element.style.top || 0);
-    element._originalWidth  = element.style.width;
-    element._originalHeight = element.style.height;
-
-    element.style.position = 'absolute';
-    element.style.top    = top + 'px';
-    element.style.left   = left + 'px';
-    element.style.width  = width + 'px';
-    element.style.height = height + 'px';
-  },
-
-  relativize: function(element) {
-    element = $(element);
-    if (element.style.position == 'relative') return;
-    Position.prepare();
-
-    element.style.position = 'relative';
-    var top  = parseFloat(element.style.top  || 0) - (element._originalTop || 0);
-    var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0);
-
-    element.style.top    = top + 'px';
-    element.style.left   = left + 'px';
-    element.style.height = element._originalHeight;
-    element.style.width  = element._originalWidth;
-  }
-}
-
-// Safari returns margins on body which is incorrect if the child is absolutely
-// positioned.  For performance reasons, redefine Position.cumulativeOffset for
-// KHTML/WebKit only.
-if (/Konqueror|Safari|KHTML/.test(navigator.userAgent)) {
-  Position.cumulativeOffset = function(element) {
-    var valueT = 0, valueL = 0;
-    do {
-      valueT += element.offsetTop  || 0;
-      valueL += element.offsetLeft || 0;
-      if (element.offsetParent == document.body)
-        if (Element.getStyle(element, 'position') == 'absolute') break;
-
-      element = element.offsetParent;
-    } while (element);
-
-    return [valueL, valueT];
-  }
-}
-
-Element.addMethods();
\ No newline at end of file
diff --git a/apps/maarch_entreprise/tools/tafelTree/js/scriptaculous.js b/apps/maarch_entreprise/tools/tafelTree/js/scriptaculous.js
deleted file mode 100755
index 585313c3a87a25e4e500c28dcac1e66f25f67b4f..0000000000000000000000000000000000000000
--- a/apps/maarch_entreprise/tools/tafelTree/js/scriptaculous.js
+++ /dev/null
@@ -1,51 +0,0 @@
-// script.aculo.us scriptaculous.js v1.7.0, Fri Jan 19 19:16:36 CET 2007
-
-// Copyright (c) 2005, 2006 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
-// 
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-// For details, see the script.aculo.us web site: http://script.aculo.us/
-
-var Scriptaculous = {
-  Version: '1.7.0',
-  require: function(libraryName) {
-    // inserting via DOM fails in Safari 2.0, so brute force approach
-    document.write('<script type="text/javascript" src="'+libraryName+'"></script>');
-  },
-  load: function() {
-    if((typeof Prototype=='undefined') || 
-       (typeof Element == 'undefined') || 
-       (typeof Element.Methods=='undefined') ||
-       parseFloat(Prototype.Version.split(".")[0] + "." +
-                  Prototype.Version.split(".")[1]) < 1.5)
-       throw("script.aculo.us requires the Prototype JavaScript framework >= 1.5.0");
-    
-    $A(document.getElementsByTagName("script")).findAll( function(s) {
-      return (s.src && s.src.match(/scriptaculous\.js(\?.*)?$/))
-    }).each( function(s) {
-      var path = s.src.replace(/scriptaculous\.js(\?.*)?$/,'');
-      var includes = s.src.match(/\?.*load=([a-z,]*)/);
-      (includes ? includes[1] : 'builder,effects,dragdrop,controls,slider').split(',').each(
-       function(include) { Scriptaculous.require(path+include+'.js') });
-    });
-  }
-}
-
-Scriptaculous.load();
\ No newline at end of file
diff --git a/apps/maarch_entreprise/tools/tafelTree/js/slider.js b/apps/maarch_entreprise/tools/tafelTree/js/slider.js
deleted file mode 100755
index f24f28233032f49bd8d83b886b63855b81501f53..0000000000000000000000000000000000000000
--- a/apps/maarch_entreprise/tools/tafelTree/js/slider.js
+++ /dev/null
@@ -1,278 +0,0 @@
-// script.aculo.us slider.js v1.7.0, Fri Jan 19 19:16:36 CET 2007
-
-// Copyright (c) 2005, 2006 Marty Haught, Thomas Fuchs 
-//
-// script.aculo.us is freely distributable under the terms of an MIT-style license.
-// For details, see the script.aculo.us web site: http://script.aculo.us/
-
-if(!Control) var Control = {};
-Control.Slider = Class.create();
-
-// options:
-//  axis: 'vertical', or 'horizontal' (default)
-//
-// callbacks:
-//  onChange(value)
-//  onSlide(value)
-Control.Slider.prototype = {
-  initialize: function(handle, track, options) {
-    var slider = this;
-    
-    if(handle instanceof Array) {
-      this.handles = handle.collect( function(e) { return $(e) });
-    } else {
-      this.handles = [$(handle)];
-    }
-    
-    this.track   = $(track);
-    this.options = options || {};
-
-    this.axis      = this.options.axis || 'horizontal';
-    this.increment = this.options.increment || 1;
-    this.step      = parseInt(this.options.step || '1');
-    this.range     = this.options.range || $R(0,1);
-    
-    this.value     = 0; // assure backwards compat
-    this.values    = this.handles.map( function() { return 0 });
-    this.spans     = this.options.spans ? this.options.spans.map(function(s){ return $(s) }) : false;
-    this.options.startSpan = $(this.options.startSpan || null);
-    this.options.endSpan   = $(this.options.endSpan || null);
-
-    this.restricted = this.options.restricted || false;
-
-    this.maximum   = this.options.maximum || this.range.end;
-    this.minimum   = this.options.minimum || this.range.start;
-
-    // Will be used to align the handle onto the track, if necessary
-    this.alignX = parseInt(this.options.alignX || '0');
-    this.alignY = parseInt(this.options.alignY || '0');
-    
-    this.trackLength = this.maximumOffset() - this.minimumOffset();
-
-    this.handleLength = this.isVertical() ? 
-      (this.handles[0].offsetHeight != 0 ? 
-        this.handles[0].offsetHeight : this.handles[0].style.height.replace(/px$/,"")) : 
-      (this.handles[0].offsetWidth != 0 ? this.handles[0].offsetWidth : 
-        this.handles[0].style.width.replace(/px$/,""));
-
-    this.active   = false;
-    this.dragging = false;
-    this.disabled = false;
-
-    if(this.options.disabled) this.setDisabled();
-
-    // Allowed values array
-    this.allowedValues = this.options.values ? this.options.values.sortBy(Prototype.K) : false;
-    if(this.allowedValues) {
-      this.minimum = this.allowedValues.min();
-      this.maximum = this.allowedValues.max();
-    }
-
-    this.eventMouseDown = this.startDrag.bindAsEventListener(this);
-    this.eventMouseUp   = this.endDrag.bindAsEventListener(this);
-    this.eventMouseMove = this.update.bindAsEventListener(this);
-
-    // Initialize handles in reverse (make sure first handle is active)
-    this.handles.each( function(h,i) {
-      i = slider.handles.length-1-i;
-      slider.setValue(parseFloat(
-        (slider.options.sliderValue instanceof Array ? 
-          slider.options.sliderValue[i] : slider.options.sliderValue) || 
-         slider.range.start), i);
-      Element.makePositioned(h); // fix IE
-      Event.observe(h, "mousedown", slider.eventMouseDown);
-    });
-    
-    Event.observe(this.track, "mousedown", this.eventMouseDown);
-    Event.observe(document, "mouseup", this.eventMouseUp);
-    Event.observe(document, "mousemove", this.eventMouseMove);
-    
-    this.initialized = true;
-  },
-  dispose: function() {
-    var slider = this;    
-    Event.stopObserving(this.track, "mousedown", this.eventMouseDown);
-    Event.stopObserving(document, "mouseup", this.eventMouseUp);
-    Event.stopObserving(document, "mousemove", this.eventMouseMove);
-    this.handles.each( function(h) {
-      Event.stopObserving(h, "mousedown", slider.eventMouseDown);
-    });
-  },
-  setDisabled: function(){
-    this.disabled = true;
-  },
-  setEnabled: function(){
-    this.disabled = false;
-  },  
-  getNearestValue: function(value){
-    if(this.allowedValues){
-      if(value >= this.allowedValues.max()) return(this.allowedValues.max());
-      if(value <= this.allowedValues.min()) return(this.allowedValues.min());
-      
-      var offset = Math.abs(this.allowedValues[0] - value);
-      var newValue = this.allowedValues[0];
-      this.allowedValues.each( function(v) {
-        var currentOffset = Math.abs(v - value);
-        if(currentOffset <= offset){
-          newValue = v;
-          offset = currentOffset;
-        } 
-      });
-      return newValue;
-    }
-    if(value > this.range.end) return this.range.end;
-    if(value < this.range.start) return this.range.start;
-    return value;
-  },
-  setValue: function(sliderValue, handleIdx){
-    if(!this.active) {
-      this.activeHandleIdx = handleIdx || 0;
-      this.activeHandle    = this.handles[this.activeHandleIdx];
-      this.updateStyles();
-    }
-    handleIdx = handleIdx || this.activeHandleIdx || 0;
-    if(this.initialized && this.restricted) {
-      if((handleIdx>0) && (sliderValue<this.values[handleIdx-1]))
-        sliderValue = this.values[handleIdx-1];
-      if((handleIdx < (this.handles.length-1)) && (sliderValue>this.values[handleIdx+1]))
-        sliderValue = this.values[handleIdx+1];
-    }
-    sliderValue = this.getNearestValue(sliderValue);
-    this.values[handleIdx] = sliderValue;
-    this.value = this.values[0]; // assure backwards compat
-    
-    this.handles[handleIdx].style[this.isVertical() ? 'top' : 'left'] = 
-      this.translateToPx(sliderValue);
-    
-    this.drawSpans();
-    if(!this.dragging || !this.event) this.updateFinished();
-  },
-  setValueBy: function(delta, handleIdx) {
-    this.setValue(this.values[handleIdx || this.activeHandleIdx || 0] + delta, 
-      handleIdx || this.activeHandleIdx || 0);
-  },
-  translateToPx: function(value) {
-    return Math.round(
-      ((this.trackLength-this.handleLength)/(this.range.end-this.range.start)) * 
-      (value - this.range.start)) + "px";
-  },
-  translateToValue: function(offset) {
-    return ((offset/(this.trackLength-this.handleLength) * 
-      (this.range.end-this.range.start)) + this.range.start);
-  },
-  getRange: function(range) {
-    var v = this.values.sortBy(Prototype.K); 
-    range = range || 0;
-    return $R(v[range],v[range+1]);
-  },
-  minimumOffset: function(){
-    return(this.isVertical() ? this.alignY : this.alignX);
-  },
-  maximumOffset: function(){
-    return(this.isVertical() ? 
-      (this.track.offsetHeight != 0 ? this.track.offsetHeight :
-        this.track.style.height.replace(/px$/,"")) - this.alignY : 
-      (this.track.offsetWidth != 0 ? this.track.offsetWidth : 
-        this.track.style.width.replace(/px$/,"")) - this.alignY);
-  },  
-  isVertical:  function(){
-    return (this.axis == 'vertical');
-  },
-  drawSpans: function() {
-    var slider = this;
-    if(this.spans)
-      $R(0, this.spans.length-1).each(function(r) { slider.setSpan(slider.spans[r], slider.getRange(r)) });
-    if(this.options.startSpan)
-      this.setSpan(this.options.startSpan,
-        $R(0, this.values.length>1 ? this.getRange(0).min() : this.value ));
-    if(this.options.endSpan)
-      this.setSpan(this.options.endSpan, 
-        $R(this.values.length>1 ? this.getRange(this.spans.length-1).max() : this.value, this.maximum));
-  },
-  setSpan: function(span, range) {
-    if(this.isVertical()) {
-      span.style.top = this.translateToPx(range.start);
-      span.style.height = this.translateToPx(range.end - range.start + this.range.start);
-    } else {
-      span.style.left = this.translateToPx(range.start);
-      span.style.width = this.translateToPx(range.end - range.start + this.range.start);
-    }
-  },
-  updateStyles: function() {
-    this.handles.each( function(h){ Element.removeClassName(h, 'selected') });
-    Element.addClassName(this.activeHandle, 'selected');
-  },
-  startDrag: function(event) {
-    if(Event.isLeftClick(event)) {
-      if(!this.disabled){
-        this.active = true;
-        
-        var handle = Event.element(event);
-        var pointer  = [Event.pointerX(event), Event.pointerY(event)];
-        var track = handle;
-        if(track==this.track) {
-          var offsets  = Position.cumulativeOffset(this.track); 
-          this.event = event;
-          this.setValue(this.translateToValue( 
-           (this.isVertical() ? pointer[1]-offsets[1] : pointer[0]-offsets[0])-(this.handleLength/2)
-          ));
-          var offsets  = Position.cumulativeOffset(this.activeHandle);
-          this.offsetX = (pointer[0] - offsets[0]);
-          this.offsetY = (pointer[1] - offsets[1]);
-        } else {
-          // find the handle (prevents issues with Safari)
-          while((this.handles.indexOf(handle) == -1) && handle.parentNode) 
-            handle = handle.parentNode;
-            
-          if(this.handles.indexOf(handle)!=-1) {
-            this.activeHandle    = handle;
-            this.activeHandleIdx = this.handles.indexOf(this.activeHandle);
-            this.updateStyles();
-            
-            var offsets  = Position.cumulativeOffset(this.activeHandle);
-            this.offsetX = (pointer[0] - offsets[0]);
-            this.offsetY = (pointer[1] - offsets[1]);
-          }
-        }
-      }
-      Event.stop(event);
-    }
-  },
-  update: function(event) {
-   if(this.active) {
-      if(!this.dragging) this.dragging = true;
-      this.draw(event);
-      // fix AppleWebKit rendering
-      if(navigator.appVersion.indexOf('AppleWebKit')>0) window.scrollBy(0,0);
-      Event.stop(event);
-   }
-  },
-  draw: function(event) {
-    var pointer = [Event.pointerX(event), Event.pointerY(event)];
-    var offsets = Position.cumulativeOffset(this.track);
-    pointer[0] -= this.offsetX + offsets[0];
-    pointer[1] -= this.offsetY + offsets[1];
-    this.event = event;
-    this.setValue(this.translateToValue( this.isVertical() ? pointer[1] : pointer[0] ));
-    if(this.initialized && this.options.onSlide)
-      this.options.onSlide(this.values.length>1 ? this.values : this.value, this);
-  },
-  endDrag: function(event) {
-    if(this.active && this.dragging) {
-      this.finishDrag(event, true);
-      Event.stop(event);
-    }
-    this.active = false;
-    this.dragging = false;
-  },  
-  finishDrag: function(event, success) {
-    this.active = false;
-    this.dragging = false;
-    this.updateFinished();
-  },
-  updateFinished: function() {
-    if(this.initialized && this.options.onChange) 
-      this.options.onChange(this.values.length>1 ? this.values : this.value, this);
-    this.event = null;
-  }
-}
\ No newline at end of file
diff --git a/apps/maarch_entreprise/tools/tafelTree/js/sound.js b/apps/maarch_entreprise/tools/tafelTree/js/sound.js
deleted file mode 100755
index 8b137891791fe96927ad78e64b0aad7bded08bdc..0000000000000000000000000000000000000000
--- a/apps/maarch_entreprise/tools/tafelTree/js/sound.js
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/apps/maarch_entreprise/tools/tafelTree/js/unittest.js b/apps/maarch_entreprise/tools/tafelTree/js/unittest.js
deleted file mode 100755
index a4478855ec2045c0a403da1b6994555986962fff..0000000000000000000000000000000000000000
--- a/apps/maarch_entreprise/tools/tafelTree/js/unittest.js
+++ /dev/null
@@ -1,564 +0,0 @@
-// script.aculo.us unittest.js v1.7.0, Fri Jan 19 19:16:36 CET 2007
-
-// Copyright (c) 2005, 2006 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
-//           (c) 2005, 2006 Jon Tirsen (http://www.tirsen.com)
-//           (c) 2005, 2006 Michael Schuerig (http://www.schuerig.de/michael/)
-//
-// script.aculo.us is freely distributable under the terms of an MIT-style license.
-// For details, see the script.aculo.us web site: http://script.aculo.us/
-
-// experimental, Firefox-only
-Event.simulateMouse = function(element, eventName) {
-  var options = Object.extend({
-    pointerX: 0,
-    pointerY: 0,
-    buttons:  0,
-    ctrlKey:  false,
-    altKey:   false,
-    shiftKey: false,
-    metaKey:  false
-  }, arguments[2] || {});
-  var oEvent = document.createEvent("MouseEvents");
-  oEvent.initMouseEvent(eventName, true, true, document.defaultView, 
-    options.buttons, options.pointerX, options.pointerY, options.pointerX, options.pointerY, 
-    options.ctrlKey, options.altKey, options.shiftKey, options.metaKey, 0, $(element));
-  
-  if(this.mark) Element.remove(this.mark);
-  this.mark = document.createElement('div');
-  this.mark.appendChild(document.createTextNode(" "));
-  document.body.appendChild(this.mark);
-  this.mark.style.position = 'absolute';
-  this.mark.style.top = options.pointerY + "px";
-  this.mark.style.left = options.pointerX + "px";
-  this.mark.style.width = "5px";
-  this.mark.style.height = "5px;";
-  this.mark.style.borderTop = "1px solid red;"
-  this.mark.style.borderLeft = "1px solid red;"
-  
-  if(this.step)
-    alert('['+new Date().getTime().toString()+'] '+eventName+'/'+Test.Unit.inspect(options));
-  
-  $(element).dispatchEvent(oEvent);
-};
-
-// Note: Due to a fix in Firefox 1.0.5/6 that probably fixed "too much", this doesn't work in 1.0.6 or DP2.
-// You need to downgrade to 1.0.4 for now to get this working
-// See https://bugzilla.mozilla.org/show_bug.cgi?id=289940 for the fix that fixed too much
-Event.simulateKey = function(element, eventName) {
-  var options = Object.extend({
-    ctrlKey: false,
-    altKey: false,
-    shiftKey: false,
-    metaKey: false,
-    keyCode: 0,
-    charCode: 0
-  }, arguments[2] || {});
-
-  var oEvent = document.createEvent("KeyEvents");
-  oEvent.initKeyEvent(eventName, true, true, window, 
-    options.ctrlKey, options.altKey, options.shiftKey, options.metaKey,
-    options.keyCode, options.charCode );
-  $(element).dispatchEvent(oEvent);
-};
-
-Event.simulateKeys = function(element, command) {
-  for(var i=0; i<command.length; i++) {
-    Event.simulateKey(element,'keypress',{charCode:command.charCodeAt(i)});
-  }
-};
-
-var Test = {}
-Test.Unit = {};
-
-// security exception workaround
-Test.Unit.inspect = Object.inspect;
-
-Test.Unit.Logger = Class.create();
-Test.Unit.Logger.prototype = {
-  initialize: function(log) {
-    this.log = $(log);
-    if (this.log) {
-      this._createLogTable();
-    }
-  },
-  start: function(testName) {
-    if (!this.log) return;
-    this.testName = testName;
-    this.lastLogLine = document.createElement('tr');
-    this.statusCell = document.createElement('td');
-    this.nameCell = document.createElement('td');
-    this.nameCell.className = "nameCell";
-    this.nameCell.appendChild(document.createTextNode(testName));
-    this.messageCell = document.createElement('td');
-    this.lastLogLine.appendChild(this.statusCell);
-    this.lastLogLine.appendChild(this.nameCell);
-    this.lastLogLine.appendChild(this.messageCell);
-    this.loglines.appendChild(this.lastLogLine);
-  },
-  finish: function(status, summary) {
-    if (!this.log) return;
-    this.lastLogLine.className = status;
-    this.statusCell.innerHTML = status;
-    this.messageCell.innerHTML = this._toHTML(summary);
-    this.addLinksToResults();
-  },
-  message: function(message) {
-    if (!this.log) return;
-    this.messageCell.innerHTML = this._toHTML(message);
-  },
-  summary: function(summary) {
-    if (!this.log) return;
-    this.logsummary.innerHTML = this._toHTML(summary);
-  },
-  _createLogTable: function() {
-    this.log.innerHTML =
-    '<div id="logsummary"></div>' +
-    '<table id="logtable">' +
-    '<thead><tr><th>Status</th><th>Test</th><th>Message</th></tr></thead>' +
-    '<tbody id="loglines"></tbody>' +
-    '</table>';
-    this.logsummary = $('logsummary')
-    this.loglines = $('loglines');
-  },
-  _toHTML: function(txt) {
-    return txt.escapeHTML().replace(/\n/g,"<br/>");
-  },
-  addLinksToResults: function(){ 
-    $$("tr.failed .nameCell").each( function(td){ // todo: limit to children of this.log
-      td.title = "Run only this test"
-      Event.observe(td, 'click', function(){ window.location.search = "?tests=" + td.innerHTML;});
-    });
-    $$("tr.passed .nameCell").each( function(td){ // todo: limit to children of this.log
-      td.title = "Run all tests"
-      Event.observe(td, 'click', function(){ window.location.search = "";});
-    });
-  }
-}
-
-Test.Unit.Runner = Class.create();
-Test.Unit.Runner.prototype = {
-  initialize: function(testcases) {
-    this.options = Object.extend({
-      testLog: 'testlog'
-    }, arguments[1] || {});
-    this.options.resultsURL = this.parseResultsURLQueryParameter();
-    this.options.tests      = this.parseTestsQueryParameter();
-    if (this.options.testLog) {
-      this.options.testLog = $(this.options.testLog) || null;
-    }
-    if(this.options.tests) {
-      this.tests = [];
-      for(var i = 0; i < this.options.tests.length; i++) {
-        if(/^test/.test(this.options.tests[i])) {
-          this.tests.push(new Test.Unit.Testcase(this.options.tests[i], testcases[this.options.tests[i]], testcases["setup"], testcases["teardown"]));
-        }
-      }
-    } else {
-      if (this.options.test) {
-        this.tests = [new Test.Unit.Testcase(this.options.test, testcases[this.options.test], testcases["setup"], testcases["teardown"])];
-      } else {
-        this.tests = [];
-        for(var testcase in testcases) {
-          if(/^test/.test(testcase)) {
-            this.tests.push(
-               new Test.Unit.Testcase(
-                 this.options.context ? ' -> ' + this.options.titles[testcase] : testcase, 
-                 testcases[testcase], testcases["setup"], testcases["teardown"]
-               ));
-          }
-        }
-      }
-    }
-    this.currentTest = 0;
-    this.logger = new Test.Unit.Logger(this.options.testLog);
-    setTimeout(this.runTests.bind(this), 1000);
-  },
-  parseResultsURLQueryParameter: function() {
-    return window.location.search.parseQuery()["resultsURL"];
-  },
-  parseTestsQueryParameter: function(){
-    if (window.location.search.parseQuery()["tests"]){
-        return window.location.search.parseQuery()["tests"].split(',');
-    };
-  },
-  // Returns:
-  //  "ERROR" if there was an error,
-  //  "FAILURE" if there was a failure, or
-  //  "SUCCESS" if there was neither
-  getResult: function() {
-    var hasFailure = false;
-    for(var i=0;i<this.tests.length;i++) {
-      if (this.tests[i].errors > 0) {
-        return "ERROR";
-      }
-      if (this.tests[i].failures > 0) {
-        hasFailure = true;
-      }
-    }
-    if (hasFailure) {
-      return "FAILURE";
-    } else {
-      return "SUCCESS";
-    }
-  },
-  postResults: function() {
-    if (this.options.resultsURL) {
-      new Ajax.Request(this.options.resultsURL, 
-        { method: 'get', parameters: 'result=' + this.getResult(), asynchronous: false });
-    }
-  },
-  runTests: function() {
-    var test = this.tests[this.currentTest];
-    if (!test) {
-      // finished!
-      this.postResults();
-      this.logger.summary(this.summary());
-      return;
-    }
-    if(!test.isWaiting) {
-      this.logger.start(test.name);
-    }
-    test.run();
-    if(test.isWaiting) {
-      this.logger.message("Waiting for " + test.timeToWait + "ms");
-      setTimeout(this.runTests.bind(this), test.timeToWait || 1000);
-    } else {
-      this.logger.finish(test.status(), test.summary());
-      this.currentTest++;
-      // tail recursive, hopefully the browser will skip the stackframe
-      this.runTests();
-    }
-  },
-  summary: function() {
-    var assertions = 0;
-    var failures = 0;
-    var errors = 0;
-    var messages = [];
-    for(var i=0;i<this.tests.length;i++) {
-      assertions +=   this.tests[i].assertions;
-      failures   +=   this.tests[i].failures;
-      errors     +=   this.tests[i].errors;
-    }
-    return (
-      (this.options.context ? this.options.context + ': ': '') + 
-      this.tests.length + " tests, " + 
-      assertions + " assertions, " + 
-      failures   + " failures, " +
-      errors     + " errors");
-  }
-}
-
-Test.Unit.Assertions = Class.create();
-Test.Unit.Assertions.prototype = {
-  initialize: function() {
-    this.assertions = 0;
-    this.failures   = 0;
-    this.errors     = 0;
-    this.messages   = [];
-  },
-  summary: function() {
-    return (
-      this.assertions + " assertions, " + 
-      this.failures   + " failures, " +
-      this.errors     + " errors" + "\n" +
-      this.messages.join("\n"));
-  },
-  pass: function() {
-    this.assertions++;
-  },
-  fail: function(message) {
-    this.failures++;
-    this.messages.push("Failure: " + message);
-  },
-  info: function(message) {
-    this.messages.push("Info: " + message);
-  },
-  error: function(error) {
-    this.errors++;
-    this.messages.push(error.name + ": "+ error.message + "(" + Test.Unit.inspect(error) +")");
-  },
-  status: function() {
-    if (this.failures > 0) return 'failed';
-    if (this.errors > 0) return 'error';
-    return 'passed';
-  },
-  assert: function(expression) {
-    var message = arguments[1] || 'assert: got "' + Test.Unit.inspect(expression) + '"';
-    try { expression ? this.pass() : 
-      this.fail(message); }
-    catch(e) { this.error(e); }
-  },
-  assertEqual: function(expected, actual) {
-    var message = arguments[2] || "assertEqual";
-    try { (expected == actual) ? this.pass() :
-      this.fail(message + ': expected "' + Test.Unit.inspect(expected) + 
-        '", actual "' + Test.Unit.inspect(actual) + '"'); }
-    catch(e) { this.error(e); }
-  },
-  assertInspect: function(expected, actual) {
-    var message = arguments[2] || "assertInspect";
-    try { (expected == actual.inspect()) ? this.pass() :
-      this.fail(message + ': expected "' + Test.Unit.inspect(expected) + 
-        '", actual "' + Test.Unit.inspect(actual) + '"'); }
-    catch(e) { this.error(e); }
-  },
-  assertEnumEqual: function(expected, actual) {
-    var message = arguments[2] || "assertEnumEqual";
-    try { $A(expected).length == $A(actual).length && 
-      expected.zip(actual).all(function(pair) { return pair[0] == pair[1] }) ?
-        this.pass() : this.fail(message + ': expected ' + Test.Unit.inspect(expected) + 
-          ', actual ' + Test.Unit.inspect(actual)); }
-    catch(e) { this.error(e); }
-  },
-  assertNotEqual: function(expected, actual) {
-    var message = arguments[2] || "assertNotEqual";
-    try { (expected != actual) ? this.pass() : 
-      this.fail(message + ': got "' + Test.Unit.inspect(actual) + '"'); }
-    catch(e) { this.error(e); }
-  },
-  assertIdentical: function(expected, actual) { 
-    var message = arguments[2] || "assertIdentical"; 
-    try { (expected === actual) ? this.pass() : 
-      this.fail(message + ': expected "' + Test.Unit.inspect(expected) +  
-        '", actual "' + Test.Unit.inspect(actual) + '"'); } 
-    catch(e) { this.error(e); } 
-  },
-  assertNotIdentical: function(expected, actual) { 
-    var message = arguments[2] || "assertNotIdentical"; 
-    try { !(expected === actual) ? this.pass() : 
-      this.fail(message + ': expected "' + Test.Unit.inspect(expected) +  
-        '", actual "' + Test.Unit.inspect(actual) + '"'); } 
-    catch(e) { this.error(e); } 
-  },
-  assertNull: function(obj) {
-    var message = arguments[1] || 'assertNull'
-    try { (obj==null) ? this.pass() : 
-      this.fail(message + ': got "' + Test.Unit.inspect(obj) + '"'); }
-    catch(e) { this.error(e); }
-  },
-  assertMatch: function(expected, actual) {
-    var message = arguments[2] || 'assertMatch';
-    var regex = new RegExp(expected);
-    try { (regex.exec(actual)) ? this.pass() :
-      this.fail(message + ' : regex: "' +  Test.Unit.inspect(expected) + ' did not match: ' + Test.Unit.inspect(actual) + '"'); }
-    catch(e) { this.error(e); }
-  },
-  assertHidden: function(element) {
-    var message = arguments[1] || 'assertHidden';
-    this.assertEqual("none", element.style.display, message);
-  },
-  assertNotNull: function(object) {
-    var message = arguments[1] || 'assertNotNull';
-    this.assert(object != null, message);
-  },
-  assertType: function(expected, actual) {
-    var message = arguments[2] || 'assertType';
-    try { 
-      (actual.constructor == expected) ? this.pass() : 
-      this.fail(message + ': expected "' + Test.Unit.inspect(expected) +  
-        '", actual "' + (actual.constructor) + '"'); }
-    catch(e) { this.error(e); }
-  },
-  assertNotOfType: function(expected, actual) {
-    var message = arguments[2] || 'assertNotOfType';
-    try { 
-      (actual.constructor != expected) ? this.pass() : 
-      this.fail(message + ': expected "' + Test.Unit.inspect(expected) +  
-        '", actual "' + (actual.constructor) + '"'); }
-    catch(e) { this.error(e); }
-  },
-  assertInstanceOf: function(expected, actual) {
-    var message = arguments[2] || 'assertInstanceOf';
-    try { 
-      (actual instanceof expected) ? this.pass() : 
-      this.fail(message + ": object was not an instance of the expected type"); }
-    catch(e) { this.error(e); } 
-  },
-  assertNotInstanceOf: function(expected, actual) {
-    var message = arguments[2] || 'assertNotInstanceOf';
-    try { 
-      !(actual instanceof expected) ? this.pass() : 
-      this.fail(message + ": object was an instance of the not expected type"); }
-    catch(e) { this.error(e); } 
-  },
-  assertRespondsTo: function(method, obj) {
-    var message = arguments[2] || 'assertRespondsTo';
-    try {
-      (obj[method] && typeof obj[method] == 'function') ? this.pass() : 
-      this.fail(message + ": object doesn't respond to [" + method + "]"); }
-    catch(e) { this.error(e); }
-  },
-  assertReturnsTrue: function(method, obj) {
-    var message = arguments[2] || 'assertReturnsTrue';
-    try {
-      var m = obj[method];
-      if(!m) m = obj['is'+method.charAt(0).toUpperCase()+method.slice(1)];
-      m() ? this.pass() : 
-      this.fail(message + ": method returned false"); }
-    catch(e) { this.error(e); }
-  },
-  assertReturnsFalse: function(method, obj) {
-    var message = arguments[2] || 'assertReturnsFalse';
-    try {
-      var m = obj[method];
-      if(!m) m = obj['is'+method.charAt(0).toUpperCase()+method.slice(1)];
-      !m() ? this.pass() : 
-      this.fail(message + ": method returned true"); }
-    catch(e) { this.error(e); }
-  },
-  assertRaise: function(exceptionName, method) {
-    var message = arguments[2] || 'assertRaise';
-    try { 
-      method();
-      this.fail(message + ": exception expected but none was raised"); }
-    catch(e) {
-      ((exceptionName == null) || (e.name==exceptionName)) ? this.pass() : this.error(e); 
-    }
-  },
-  assertElementsMatch: function() {
-    var expressions = $A(arguments), elements = $A(expressions.shift());
-    if (elements.length != expressions.length) {
-      this.fail('assertElementsMatch: size mismatch: ' + elements.length + ' elements, ' + expressions.length + ' expressions');
-      return false;
-    }
-    elements.zip(expressions).all(function(pair, index) {
-      var element = $(pair.first()), expression = pair.last();
-      if (element.match(expression)) return true;
-      this.fail('assertElementsMatch: (in index ' + index + ') expected ' + expression.inspect() + ' but got ' + element.inspect());
-    }.bind(this)) && this.pass();
-  },
-  assertElementMatches: function(element, expression) {
-    this.assertElementsMatch([element], expression);
-  },
-  benchmark: function(operation, iterations) {
-    var startAt = new Date();
-    (iterations || 1).times(operation);
-    var timeTaken = ((new Date())-startAt);
-    this.info((arguments[2] || 'Operation') + ' finished ' + 
-       iterations + ' iterations in ' + (timeTaken/1000)+'s' );
-    return timeTaken;
-  },
-  _isVisible: function(element) {
-    element = $(element);
-    if(!element.parentNode) return true;
-    this.assertNotNull(element);
-    if(element.style && Element.getStyle(element, 'display') == 'none')
-      return false;
-    
-    return this._isVisible(element.parentNode);
-  },
-  assertNotVisible: function(element) {
-    this.assert(!this._isVisible(element), Test.Unit.inspect(element) + " was not hidden and didn't have a hidden parent either. " + ("" || arguments[1]));
-  },
-  assertVisible: function(element) {
-    this.assert(this._isVisible(element), Test.Unit.inspect(element) + " was not visible. " + ("" || arguments[1]));
-  },
-  benchmark: function(operation, iterations) {
-    var startAt = new Date();
-    (iterations || 1).times(operation);
-    var timeTaken = ((new Date())-startAt);
-    this.info((arguments[2] || 'Operation') + ' finished ' + 
-       iterations + ' iterations in ' + (timeTaken/1000)+'s' );
-    return timeTaken;
-  }
-}
-
-Test.Unit.Testcase = Class.create();
-Object.extend(Object.extend(Test.Unit.Testcase.prototype, Test.Unit.Assertions.prototype), {
-  initialize: function(name, test, setup, teardown) {
-    Test.Unit.Assertions.prototype.initialize.bind(this)();
-    this.name           = name;
-    
-    if(typeof test == 'string') {
-      test = test.gsub(/(\.should[^\(]+\()/,'#{0}this,');
-      test = test.gsub(/(\.should[^\(]+)\(this,\)/,'#{1}(this)');
-      this.test = function() {
-        eval('with(this){'+test+'}');
-      }
-    } else {
-      this.test = test || function() {};
-    }
-    
-    this.setup          = setup || function() {};
-    this.teardown       = teardown || function() {};
-    this.isWaiting      = false;
-    this.timeToWait     = 1000;
-  },
-  wait: function(time, nextPart) {
-    this.isWaiting = true;
-    this.test = nextPart;
-    this.timeToWait = time;
-  },
-  run: function() {
-    try {
-      try {
-        if (!this.isWaiting) this.setup.bind(this)();
-        this.isWaiting = false;
-        this.test.bind(this)();
-      } finally {
-        if(!this.isWaiting) {
-          this.teardown.bind(this)();
-        }
-      }
-    }
-    catch(e) { this.error(e); }
-  }
-});
-
-// *EXPERIMENTAL* BDD-style testing to please non-technical folk
-// This draws many ideas from RSpec http://rspec.rubyforge.org/
-
-Test.setupBDDExtensionMethods = function(){
-  var METHODMAP = {
-    shouldEqual:     'assertEqual',
-    shouldNotEqual:  'assertNotEqual',
-    shouldEqualEnum: 'assertEnumEqual',
-    shouldBeA:       'assertType',
-    shouldNotBeA:    'assertNotOfType',
-    shouldBeAn:      'assertType',
-    shouldNotBeAn:   'assertNotOfType',
-    shouldBeNull:    'assertNull',
-    shouldNotBeNull: 'assertNotNull',
-    
-    shouldBe:        'assertReturnsTrue',
-    shouldNotBe:     'assertReturnsFalse',
-    shouldRespondTo: 'assertRespondsTo'
-  };
-  Test.BDDMethods = {};
-  for(m in METHODMAP) {
-    Test.BDDMethods[m] = eval(
-      'function(){'+
-      'var args = $A(arguments);'+
-      'var scope = args.shift();'+
-      'scope.'+METHODMAP[m]+'.apply(scope,(args || []).concat([this])); }');
-  }
-  [Array.prototype, String.prototype, Number.prototype].each(
-    function(p){ Object.extend(p, Test.BDDMethods) }
-  );
-}
-
-Test.context = function(name, spec, log){
-  Test.setupBDDExtensionMethods();
-  
-  var compiledSpec = {};
-  var titles = {};
-  for(specName in spec) {
-    switch(specName){
-      case "setup":
-      case "teardown":
-        compiledSpec[specName] = spec[specName];
-        break;
-      default:
-        var testName = 'test'+specName.gsub(/\s+/,'-').camelize();
-        var body = spec[specName].toString().split('\n').slice(1);
-        if(/^\{/.test(body[0])) body = body.slice(1);
-        body.pop();
-        body = body.map(function(statement){ 
-          return statement.strip()
-        });
-        compiledSpec[testName] = body.join('\n');
-        titles[testName] = specName;
-    }
-  }
-  new Test.Unit.Runner(compiledSpec, { titles: titles, testLog: log || 'testlog', context: name });
-};
\ No newline at end of file
diff --git a/apps/maarch_entreprise/tools/tafelTree/open.html b/apps/maarch_entreprise/tools/tafelTree/open.html
deleted file mode 100755
index d986c6d07a798837700b2dc73c128d7e048f18be..0000000000000000000000000000000000000000
--- a/apps/maarch_entreprise/tools/tafelTree/open.html
+++ /dev/null
@@ -1,94 +0,0 @@
-<html>
-<head>
-	<title>OpenOfficeGeneration Documentation</title>
-	<link rel="stylesheet" type="text/css" href="css/tree.css" />
-	<style>
-	body {
-	background-color: #FFFFFF;
-	}
-	.mover {
-	background-color: #FF9999;
-	color: #FFEEEE;
-	}
-	
-	.special {
-	color: #CC0000;
-	}
-	
-	.tafelTree h3, .tafelTree p, .tafelTree ol {
-	margin: 0;
-	padding: 0;
-	}
-	
-	.tafelTree p {
-	padding-bottom: 1em;
-	}
-	
-	.tafelTree h3 {
-	color: #009900;
-	}
-	</style>
-	<script type="text/javascript" src="js/prototype.js"></script>
-	<script type="text/javascript" src="js/scriptaculous.js"></script>
-	<script type="text/javascript" src="Tree.js"></script>
-</head>
-<body>
-
-
-			<script type="text/javascript">
-			function funcOpen (branch, response) {
-				// Ici tu peux traiter le retour et retourner true si
-				// tu veux insérer les enfants, false si tu veux pas
-				return true;
-			}
-			var tree = null;
-			function TafelTreeInit () {
-				var struct = [
-				{
-				'id':'root1',
-				'txt':'Element racine',
-				'items':[
-					{
-					'id':'child1',
-					'txt':'Un enfant',
-					'canhavechildren' : true
-					},
-					{
-					'id':'child2',
-					'txt':'Un enfant 2'
-					},
-					{
-					'id':'child3',
-					'txt':'Un enfant 3',
-					'canhavechildren' : true
-					},
-					{
-					'id':'child4',
-					'txt':'Un enfant 4',
-					'canhavechildren' : true
-					}
-				]
-				}
-				];
-				tree = new TafelTree('test', struct, {
-					'generate' : true,
-					'imgBase' : 'imgs/',
-					'defaultImg' : 'page.gif',
-					'defaultImgOpen' : 'folderopen.gif',
-					'defaultImgClose' : 'folder.gif',
-					'onOpenPopulate' : [funcOpen, 'sampleOpen1.php']
-				});
-			}
-
-			function effet () {
-				var branch = tree.getBranchById('child1');
-				branch.refreshChildren();
-			}
-			</script>
-			<div id="test"></div>
-			<p><a href="#" onclick="effet()">Effet</a></p>
-
-
-	
-</body>
-</html>
diff --git a/apps/maarch_entreprise/tools/tafelTree/sampleEdit1.php b/apps/maarch_entreprise/tools/tafelTree/sampleEdit1.php
deleted file mode 100755
index dc205635f9073c1591dfe1b9f86cc85f4c34d58e..0000000000000000000000000000000000000000
--- a/apps/maarch_entreprise/tools/tafelTree/sampleEdit1.php
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php 
-
-if (isset($_POST['branch_id'])) {
-	functions::xecho($_POST['new_value']);
-}
-
-?>
\ No newline at end of file
diff --git a/apps/maarch_entreprise/tools/tafelTree/sampleOpen1.php b/apps/maarch_entreprise/tools/tafelTree/sampleOpen1.php
deleted file mode 100755
index af3dc867db4bfc37c164fde4dce0dc1dd695f29c..0000000000000000000000000000000000000000
--- a/apps/maarch_entreprise/tools/tafelTree/sampleOpen1.php
+++ /dev/null
@@ -1,38 +0,0 @@
-<?php 
-
-if (isset($_POST['branch_id'])) {
-	switch ($_POST['branch_id']) {
-		case 'child1' :
-			// Création du tableau de branches enfant pour child1
-			echo "[";
-			echo "{id:'server1', txt:'Du serveur 1'},";
-			echo "{id:'server2', txt:'Du serveur 2'}";
-			echo ",{id:'server2d', txt:'Du serveur 2d'}";
-			echo "]";
-			break;
-		case 'child3' :
-			// Création du tableau de branches enfant pour child3
-			echo "[";
-			echo "{id:'server3', txt:'Du serveur 3'}";
-			echo "]";
-			break;
-		case 'child4' :
-			// Création du tableau de branches enfant pour child4
-			echo "[";
-			echo "{id:'server4', txt:'Du serveur 4'},";
-			echo "{id:'server5', txt:'Du serveur 5', canhavechildren:true},";
-			echo "{id:'server6', txt:'Du serveur 6'}";
-			echo "]";
-			break;
-		case 'server5' :
-			// Création du tableau de branches enfant pour server5
-			echo "[";
-			echo "{id:'server7', txt:'Du serveur 7'}";
-			echo "]";
-			break;
-		default :
-			// Ne fait rien
-	}
-}
-
-?>
\ No newline at end of file
diff --git a/apps/maarch_entreprise/tools/tafelTree/server/php4/JSON.php b/apps/maarch_entreprise/tools/tafelTree/server/php4/JSON.php
deleted file mode 100755
index 2b1acb77f5960054b6f767d96d85b24147a8d52d..0000000000000000000000000000000000000000
--- a/apps/maarch_entreprise/tools/tafelTree/server/php4/JSON.php
+++ /dev/null
@@ -1,804 +0,0 @@
-<?php 
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
-
-/**
- * Converts to and from JSON format.
- *
- * JSON (JavaScript Object Notation) is a lightweight data-interchange
- * format. It is easy for humans to read and write. It is easy for machines
- * to parse and generate. It is based on a subset of the JavaScript
- * Programming Language, Standard ECMA-262 3rd Edition - December 1999.
- * This feature can also be found in  Python. JSON is a text format that is
- * completely language independent but uses conventions that are familiar
- * to programmers of the C-family of languages, including C, C++, C#, Java,
- * JavaScript, Perl, TCL, and many others. These properties make JSON an
- * ideal data-interchange language.
- *
- * This package provides a simple encoder and decoder for JSON notation. It
- * is intended for use with client-side Javascript applications that make
- * use of HTTPRequest to perform server communication functions - data can
- * be encoded into JSON notation for use in a client-side javascript, or
- * decoded from incoming Javascript requests. JSON format is native to
- * Javascript, and can be directly eval()'ed with no further parsing
- * overhead
- *
- * All strings should be in ASCII or UTF-8 format!
- *
- * LICENSE: Redistribution and use in source and binary forms, with or
- * without modification, are permitted provided that the following
- * conditions are met: Redistributions of source code must retain the
- * above copyright notice, this list of conditions and the following
- * disclaimer. Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
- * NO EVENT SHALL CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
- * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
- * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
- * DAMAGE.
- *
- * @category
- * @package     Services_JSON
- * @author      Michal Migurski <mike-json@teczno.com>
- * @author      Matt Knapp <mdknapp[at]gmail[dot]com>
- * @author      Brett Stimmerman <brettstimmerman[at]gmail[dot]com>
- * @copyright   2005 Michal Migurski
- * @version     CVS: $Id: JSON.php,v 1.1 2006/11/13 16:47:48 rekam Exp $
- * @license     http://www.opensource.org/licenses/bsd-license.php
- * @link        http://pear.php.net/pepr/pepr-proposal-show.php?id=198
- */
-
-/**
- * Marker constant for Services_JSON::decode(), used to flag stack state
- */
-define('SERVICES_JSON_SLICE',   1);
-
-/**
- * Marker constant for Services_JSON::decode(), used to flag stack state
- */
-define('SERVICES_JSON_IN_STR',  2);
-
-/**
- * Marker constant for Services_JSON::decode(), used to flag stack state
- */
-define('SERVICES_JSON_IN_ARR',  3);
-
-/**
- * Marker constant for Services_JSON::decode(), used to flag stack state
- */
-define('SERVICES_JSON_IN_OBJ',  4);
-
-/**
- * Marker constant for Services_JSON::decode(), used to flag stack state
- */
-define('SERVICES_JSON_IN_CMT', 5);
-
-/**
- * Behavior switch for Services_JSON::decode()
- */
-define('SERVICES_JSON_LOOSE_TYPE', 16);
-
-/**
- * Behavior switch for Services_JSON::decode()
- */
-define('SERVICES_JSON_SUPPRESS_ERRORS', 32);
-
-/**
- * Converts to and from JSON format.
- *
- * Brief example of use:
- *
- * <code>
- * // create a new instance of Services_JSON
- * $json = new Services_JSON();
- *
- * // convert a complexe value to JSON notation, and send it to the browser
- * $value = array('foo', 'bar', array(1, 2, 'baz'), array(3, array(4)));
- * $output = $json->encode($value);
- *
- * print($output);
- * // prints: ["foo","bar",[1,2,"baz"],[3,[4]]]
- *
- * // accept incoming POST data, assumed to be in JSON notation
- * $input = file_get_contents('php://input', 1000000);
- * $value = $json->decode($input);
- * </code>
- */
-class Services_JSON
-{
-   /**
-    * constructs a new JSON instance
-    *
-    * @param    int     $use    object behavior flags; combine with boolean-OR
-    *
-    *                           possible values:
-    *                           - SERVICES_JSON_LOOSE_TYPE:  loose typing.
-    *                                   "{...}" syntax creates associative arrays
-    *                                   instead of objects in decode().
-    *                           - SERVICES_JSON_SUPPRESS_ERRORS:  error suppression.
-    *                                   Values which can't be encoded (e.g. resources)
-    *                                   appear as NULL instead of throwing errors.
-    *                                   By default, a deeply-nested resource will
-    *                                   bubble up with an error, so all return values
-    *                                   from encode() should be checked with isError()
-    */
-    function Services_JSON($use = 0)
-    {
-        $this->use = $use;
-    }
-
-   /**
-    * convert a string from one UTF-16 char to one UTF-8 char
-    *
-    * Normally should be handled by mb_convert_encoding, but
-    * provides a slower PHP-only method for installations
-    * that lack the multibye string extension.
-    *
-    * @param    string  $utf16  UTF-16 character
-    * @return   string  UTF-8 character
-    * @access   private
-    */
-    function utf162utf8($utf16)
-    {
-        // oh please oh please oh please oh please oh please
-        if(function_exists('mb_convert_encoding')) {
-            return mb_convert_encoding($utf16, 'UTF-8', 'UTF-16');
-        }
-
-        $bytes = (ord($utf16{0}) << 8) | ord($utf16{1});
-
-        switch(true) {
-            case ((0x7F & $bytes) == $bytes):
-                // this case should never be reached, because we are in ASCII range
-                // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
-                return chr(0x7F & $bytes);
-
-            case (0x07FF & $bytes) == $bytes:
-                // return a 2-byte UTF-8 character
-                // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
-                return chr(0xC0 | (($bytes >> 6) & 0x1F))
-                     . chr(0x80 | ($bytes & 0x3F));
-
-            case (0xFFFF & $bytes) == $bytes:
-                // return a 3-byte UTF-8 character
-                // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
-                return chr(0xE0 | (($bytes >> 12) & 0x0F))
-                     . chr(0x80 | (($bytes >> 6) & 0x3F))
-                     . chr(0x80 | ($bytes & 0x3F));
-        }
-
-        // ignoring UTF-32 for now, sorry
-        return '';
-    }
-
-   /**
-    * convert a string from one UTF-8 char to one UTF-16 char
-    *
-    * Normally should be handled by mb_convert_encoding, but
-    * provides a slower PHP-only method for installations
-    * that lack the multibye string extension.
-    *
-    * @param    string  $utf8   UTF-8 character
-    * @return   string  UTF-16 character
-    * @access   private
-    */
-    function utf82utf16($utf8)
-    {
-        // oh please oh please oh please oh please oh please
-        if(function_exists('mb_convert_encoding')) {
-            return mb_convert_encoding($utf8, 'UTF-16', 'UTF-8');
-        }
-
-        switch(strlen($utf8)) {
-            case 1:
-                // this case should never be reached, because we are in ASCII range
-                // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
-                return $utf8;
-
-            case 2:
-                // return a UTF-16 character from a 2-byte UTF-8 char
-                // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
-                return chr(0x07 & (ord($utf8{0}) >> 2))
-                     . chr((0xC0 & (ord($utf8{0}) << 6))
-                         | (0x3F & ord($utf8{1})));
-
-            case 3:
-                // return a UTF-16 character from a 3-byte UTF-8 char
-                // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
-                return chr((0xF0 & (ord($utf8{0}) << 4))
-                         | (0x0F & (ord($utf8{1}) >> 2)))
-                     . chr((0xC0 & (ord($utf8{1}) << 6))
-                         | (0x7F & ord($utf8{2})));
-        }
-
-        // ignoring UTF-32 for now, sorry
-        return '';
-    }
-
-   /**
-    * encodes an arbitrary variable into JSON format
-    *
-    * @param    mixed   $var    any number, boolean, string, array, or object to be encoded.
-    *                           see argument 1 to Services_JSON() above for array-parsing behavior.
-    *                           if var is a strng, note that encode() always expects it
-    *                           to be in ASCII or UTF-8 format!
-    *
-    * @return   mixed   JSON string representation of input var or an error if a problem occurs
-    * @access   public
-    */
-    function encode($var)
-    {
-        switch (gettype($var)) {
-            case 'boolean':
-                return $var ? 'true' : 'false';
-
-            case 'NULL':
-                return 'null';
-
-            case 'integer':
-                return (int) $var;
-
-            case 'double':
-            case 'float':
-                return (float) $var;
-
-            case 'string':
-                // STRINGS ARE EXPECTED TO BE IN ASCII OR UTF-8 FORMAT
-                $ascii = '';
-                $strlen_var = strlen($var);
-
-               /*
-                * Iterate over every character in the string,
-                * escaping with a slash or encoding to UTF-8 where necessary
-                */
-                for ($c = 0; $c < $strlen_var; ++$c) {
-
-                    $ord_var_c = ord($var{$c});
-
-                    switch (true) {
-                        case $ord_var_c == 0x08:
-                            $ascii .= '\b';
-                            break;
-                        case $ord_var_c == 0x09:
-                            $ascii .= '\t';
-                            break;
-                        case $ord_var_c == 0x0A:
-                            $ascii .= '\n';
-                            break;
-                        case $ord_var_c == 0x0C:
-                            $ascii .= '\f';
-                            break;
-                        case $ord_var_c == 0x0D:
-                            $ascii .= '\r';
-                            break;
-
-                        case $ord_var_c == 0x22:
-                        case $ord_var_c == 0x2F:
-                        case $ord_var_c == 0x5C:
-                            // double quote, slash, slosh
-                            $ascii .= '\\'.$var{$c};
-                            break;
-
-                        case (($ord_var_c >= 0x20) && ($ord_var_c <= 0x7F)):
-                            // characters U-00000000 - U-0000007F (same as ASCII)
-                            $ascii .= $var{$c};
-                            break;
-
-                        case (($ord_var_c & 0xE0) == 0xC0):
-                            // characters U-00000080 - U-000007FF, mask 110XXXXX
-                            // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
-                            $char = pack('C*', $ord_var_c, ord($var{$c + 1}));
-                            $c += 1;
-                            $utf16 = $this->utf82utf16($char);
-                            $ascii .= sprintf('\u%04s', bin2hex($utf16));
-                            break;
-
-                        case (($ord_var_c & 0xF0) == 0xE0):
-                            // characters U-00000800 - U-0000FFFF, mask 1110XXXX
-                            // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
-                            $char = pack('C*', $ord_var_c,
-                                         ord($var{$c + 1}),
-                                         ord($var{$c + 2}));
-                            $c += 2;
-                            $utf16 = $this->utf82utf16($char);
-                            $ascii .= sprintf('\u%04s', bin2hex($utf16));
-                            break;
-
-                        case (($ord_var_c & 0xF8) == 0xF0):
-                            // characters U-00010000 - U-001FFFFF, mask 11110XXX
-                            // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
-                            $char = pack('C*', $ord_var_c,
-                                         ord($var{$c + 1}),
-                                         ord($var{$c + 2}),
-                                         ord($var{$c + 3}));
-                            $c += 3;
-                            $utf16 = $this->utf82utf16($char);
-                            $ascii .= sprintf('\u%04s', bin2hex($utf16));
-                            break;
-
-                        case (($ord_var_c & 0xFC) == 0xF8):
-                            // characters U-00200000 - U-03FFFFFF, mask 111110XX
-                            // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
-                            $char = pack('C*', $ord_var_c,
-                                         ord($var{$c + 1}),
-                                         ord($var{$c + 2}),
-                                         ord($var{$c + 3}),
-                                         ord($var{$c + 4}));
-                            $c += 4;
-                            $utf16 = $this->utf82utf16($char);
-                            $ascii .= sprintf('\u%04s', bin2hex($utf16));
-                            break;
-
-                        case (($ord_var_c & 0xFE) == 0xFC):
-                            // characters U-04000000 - U-7FFFFFFF, mask 1111110X
-                            // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
-                            $char = pack('C*', $ord_var_c,
-                                         ord($var{$c + 1}),
-                                         ord($var{$c + 2}),
-                                         ord($var{$c + 3}),
-                                         ord($var{$c + 4}),
-                                         ord($var{$c + 5}));
-                            $c += 5;
-                            $utf16 = $this->utf82utf16($char);
-                            $ascii .= sprintf('\u%04s', bin2hex($utf16));
-                            break;
-                    }
-                }
-               	return '"'.$ascii.'"';
-            case 'array':
-               /*
-                * As per JSON spec if any array key is not an integer
-                * we must treat the the whole array as an object. We
-                * also try to catch a sparsely populated associative
-                * array with numeric keys here because some JS engines
-                * will create an array with empty indexes up to
-                * max_index which can cause memory issues and because
-                * the keys, which may be relevant, will be remapped
-                * otherwise.
-                *
-                * As per the ECMA and JSON specification an object may
-                * have any string as a property. Unfortunately due to
-                * a hole in the ECMA specification if the key is a
-                * ECMA reserved word or starts with a digit the
-                * parameter is only accessible using ECMAScript's
-                * bracket notation.
-                */
-
-                // treat as a JSON object
-                if (is_array($var) && count($var) && (array_keys($var) !== range(0, sizeof($var) - 1))) {
-                    $properties = array_map(array($this, 'name_value'),
-                                            array_keys($var),
-                                            array_values($var));
-
-                    foreach($properties as $property) {
-                        if(Services_JSON::isError($property)) {
-                            return $property;
-                        }
-                    }
-
-                    return '{' . join(',', $properties) . '}';
-                }
-
-                // treat it like a regular array
-                $elements = array_map(array($this, 'encode'), $var);
-
-                foreach($elements as $element) {
-                    if(Services_JSON::isError($element)) {
-                        return $element;
-                    }
-                }
-
-                return '[' . join(',', $elements) . ']';
-
-            case 'object':
-                $vars = get_object_vars($var);
-
-                $properties = array_map(array($this, 'name_value'),
-                                        array_keys($vars),
-                                        array_values($vars));
-
-                foreach($properties as $property) {
-                    if(Services_JSON::isError($property)) {
-                        return $property;
-                    }
-                }
-
-                return '{' . join(',', $properties) . '}';
-
-            default:
-                return ($this->use & SERVICES_JSON_SUPPRESS_ERRORS)
-                    ? 'null'
-                    : new Services_JSON_Error(gettype($var)." can not be encoded as JSON string");
-        }
-    }
-
-   /**
-    * array-walking function for use in generating JSON-formatted name-value pairs
-    *
-    * @param    string  $name   name of key to use
-    * @param    mixed   $value  reference to an array element to be encoded
-    *
-    * @return   string  JSON-formatted name-value pair, like '"name":value'
-    * @access   private
-    */
-    function name_value($name, $value)
-    {
-        $encoded_value = $this->encode($value);
-
-        if(Services_JSON::isError($encoded_value)) {
-            return $encoded_value;
-        }
-
-        return $this->encode(strval($name)) . ':' . $encoded_value;
-    }
-
-   /**
-    * reduce a string by removing leading and trailing comments and whitespace
-    *
-    * @param    $str    string      string value to strip of comments and whitespace
-    *
-    * @return   string  string value stripped of comments and whitespace
-    * @access   private
-    */
-    function reduce_string($str)
-    {
-        $str = preg_replace(array(
-
-                // eliminate single line comments in '// ...' form
-                '#^\s*//(.+)$#m',
-
-                // eliminate multi-line comments in '/* ... */' form, at start of string
-                '#^\s*/\*(.+)\*/#Us',
-
-                // eliminate multi-line comments in '/* ... */' form, at end of string
-                '#/\*(.+)\*/\s*$#Us'
-
-            ), '', $str);
-
-        // eliminate extraneous space
-        return trim($str);
-    }
-
-   /**
-    * decodes a JSON string into appropriate variable
-    *
-    * @param    string  $str    JSON-formatted string
-    *
-    * @return   mixed   number, boolean, string, array, or object
-    *                   corresponding to given JSON input string.
-    *                   See argument 1 to Services_JSON() above for object-output behavior.
-    *                   Note that decode() always returns strings
-    *                   in ASCII or UTF-8 format!
-    * @access   public
-    */
-    function decode($str)
-    {
-        $str = $this->reduce_string($str);
-
-        switch (strtolower($str)) {
-            case 'true':
-                return true;
-
-            case 'false':
-                return false;
-
-            case 'null':
-                return null;
-
-            default:
-                $m = array();
-
-                if (is_numeric($str)) {
-                    // Lookie-loo, it's a number
-
-                    // This would work on its own, but I'm trying to be
-                    // good about returning integers where appropriate:
-                    // return (float)$str;
-
-                    // Return float or int, as appropriate
-                    return ((float)$str == (integer)$str)
-                        ? (integer)$str
-                        : (float)$str;
-
-                } elseif (preg_match('/^("|\').*(\1)$/s', $str, $m) && $m[1] == $m[2]) {
-                    // STRINGS RETURNED IN UTF-8 FORMAT
-                    $delim = substr($str, 0, 1);
-                    $chrs = substr($str, 1, -1);
-                    $utf8 = '';
-                    $strlen_chrs = strlen($chrs);
-
-                    for ($c = 0; $c < $strlen_chrs; ++$c) {
-
-                        $substr_chrs_c_2 = substr($chrs, $c, 2);
-                        $ord_chrs_c = ord($chrs{$c});
-
-                        switch (true) {
-                            case $substr_chrs_c_2 == '\b':
-                                $utf8 .= chr(0x08);
-                                ++$c;
-                                break;
-                            case $substr_chrs_c_2 == '\t':
-                                $utf8 .= chr(0x09);
-                                ++$c;
-                                break;
-                            case $substr_chrs_c_2 == '\n':
-                                $utf8 .= chr(0x0A);
-                                ++$c;
-                                break;
-                            case $substr_chrs_c_2 == '\f':
-                                $utf8 .= chr(0x0C);
-                                ++$c;
-                                break;
-                            case $substr_chrs_c_2 == '\r':
-                                $utf8 .= chr(0x0D);
-                                ++$c;
-                                break;
-
-                            case $substr_chrs_c_2 == '\\"':
-                            case $substr_chrs_c_2 == '\\\'':
-                            case $substr_chrs_c_2 == '\\\\':
-                            case $substr_chrs_c_2 == '\\/':
-                                if (($delim == '"' && $substr_chrs_c_2 != '\\\'') ||
-                                   ($delim == "'" && $substr_chrs_c_2 != '\\"')) {
-                                    $utf8 .= $chrs{++$c};
-                                }
-                                break;
-
-                            case preg_match('/\\\u[0-9A-F]{4}/i', substr($chrs, $c, 6)):
-                                // single, escaped unicode character
-                                $utf16 = chr(hexdec(substr($chrs, ($c + 2), 2)))
-                                       . chr(hexdec(substr($chrs, ($c + 4), 2)));
-                                $utf8 .= $this->utf162utf8($utf16);
-                                $c += 5;
-                                break;
-
-                            case ($ord_chrs_c >= 0x20) && ($ord_chrs_c <= 0x7F):
-                                $utf8 .= $chrs{$c};
-                                break;
-
-                            case ($ord_chrs_c & 0xE0) == 0xC0:
-                                // characters U-00000080 - U-000007FF, mask 110XXXXX
-                                //see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
-                                $utf8 .= substr($chrs, $c, 2);
-                                ++$c;
-                                break;
-
-                            case ($ord_chrs_c & 0xF0) == 0xE0:
-                                // characters U-00000800 - U-0000FFFF, mask 1110XXXX
-                                // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
-                                $utf8 .= substr($chrs, $c, 3);
-                                $c += 2;
-                                break;
-
-                            case ($ord_chrs_c & 0xF8) == 0xF0:
-                                // characters U-00010000 - U-001FFFFF, mask 11110XXX
-                                // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
-                                $utf8 .= substr($chrs, $c, 4);
-                                $c += 3;
-                                break;
-
-                            case ($ord_chrs_c & 0xFC) == 0xF8:
-                                // characters U-00200000 - U-03FFFFFF, mask 111110XX
-                                // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
-                                $utf8 .= substr($chrs, $c, 5);
-                                $c += 4;
-                                break;
-
-                            case ($ord_chrs_c & 0xFE) == 0xFC:
-                                // characters U-04000000 - U-7FFFFFFF, mask 1111110X
-                                // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
-                                $utf8 .= substr($chrs, $c, 6);
-                                $c += 5;
-                                break;
-
-                        }
-
-                    }
-
-                    return $utf8;
-
-                } elseif (preg_match('/^\[.*\]$/s', $str) || preg_match('/^\{.*\}$/s', $str)) {
-                    // array, or object notation
-
-                    if ($str{0} == '[') {
-                        $stk = array(SERVICES_JSON_IN_ARR);
-                        $arr = array();
-                    } else {
-                        if ($this->use & SERVICES_JSON_LOOSE_TYPE) {
-                            $stk = array(SERVICES_JSON_IN_OBJ);
-                            $obj = array();
-                        } else {
-                            $stk = array(SERVICES_JSON_IN_OBJ);
-                            $obj = new stdClass();
-                        }
-                    }
-
-                    array_push($stk, array('what'  => SERVICES_JSON_SLICE,
-                                           'where' => 0,
-                                           'delim' => false));
-
-                    $chrs = substr($str, 1, -1);
-                    $chrs = $this->reduce_string($chrs);
-
-                    if ($chrs == '') {
-                        if (reset($stk) == SERVICES_JSON_IN_ARR) {
-                            return $arr;
-
-                        } else {
-                            return $obj;
-
-                        }
-                    }
-
-                    //print("\nparsing {$chrs}\n");
-
-                    $strlen_chrs = strlen($chrs);
-
-                    for ($c = 0; $c <= $strlen_chrs; ++$c) {
-
-                        $top = end($stk);
-                        $substr_chrs_c_2 = substr($chrs, $c, 2);
-
-                        if (($c == $strlen_chrs) || (($chrs{$c} == ',') && ($top['what'] == SERVICES_JSON_SLICE))) {
-                            // found a comma that is not inside a string, array, etc.,
-                            // OR we've reached the end of the character list
-                            $slice = substr($chrs, $top['where'], ($c - $top['where']));
-                            array_push($stk, array('what' => SERVICES_JSON_SLICE, 'where' => ($c + 1), 'delim' => false));
-                            //print("Found split at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n");
-
-                            if (reset($stk) == SERVICES_JSON_IN_ARR) {
-                                // we are in an array, so just push an element onto the stack
-                                array_push($arr, $this->decode($slice));
-
-                            } elseif (reset($stk) == SERVICES_JSON_IN_OBJ) {
-                                // we are in an object, so figure
-                                // out the property name and set an
-                                // element in an associative array,
-                                // for now
-                                $parts = array();
-                                
-                                if (preg_match('/^\s*(["\'].*[^\\\]["\'])\s*:\s*(\S.*),?$/Uis', $slice, $parts)) {
-                                    // "name":value pair
-                                    $key = $this->decode($parts[1]);
-                                    $val = $this->decode($parts[2]);
-
-                                    if ($this->use & SERVICES_JSON_LOOSE_TYPE) {
-                                        $obj[$key] = $val;
-                                    } else {
-                                        $obj->{$key} = $val;
-                                    }
-                                } elseif (preg_match('/^\s*(\w+)\s*:\s*(\S.*),?$/Uis', $slice, $parts)) {
-                                    // name:value pair, where name is unquoted
-                                    $key = $parts[1];
-                                    $val = $this->decode($parts[2]);
-
-                                    if ($this->use & SERVICES_JSON_LOOSE_TYPE) {
-                                        $obj[$key] = $val;
-                                    } else {
-                                        $obj->{$key} = $val;
-                                    }
-                                }
-
-                            }
-
-                        } elseif ((($chrs{$c} == '"') || ($chrs{$c} == "'")) && ($top['what'] != SERVICES_JSON_IN_STR)) {
-                            // found a quote, and we are not inside a string
-                            array_push($stk, array('what' => SERVICES_JSON_IN_STR, 'where' => $c, 'delim' => $chrs{$c}));
-                            //print("Found start of string at {$c}\n");
-
-                        } elseif (($chrs{$c} == $top['delim']) &&
-                                 ($top['what'] == SERVICES_JSON_IN_STR) &&
-                                 ((strlen(substr($chrs, 0, $c)) - strlen(rtrim(substr($chrs, 0, $c), '\\'))) % 2 != 1)) {
-                            // found a quote, we're in a string, and it's not escaped
-                            // we know that it's not escaped becase there is _not_ an
-                            // odd number of backslashes at the end of the string so far
-                            array_pop($stk);
-                            //print("Found end of string at {$c}: ".substr($chrs, $top['where'], (1 + 1 + $c - $top['where']))."\n");
-
-                        } elseif (($chrs{$c} == '[') &&
-                                 in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) {
-                            // found a left-bracket, and we are in an array, object, or slice
-                            array_push($stk, array('what' => SERVICES_JSON_IN_ARR, 'where' => $c, 'delim' => false));
-                            //print("Found start of array at {$c}\n");
-
-                        } elseif (($chrs{$c} == ']') && ($top['what'] == SERVICES_JSON_IN_ARR)) {
-                            // found a right-bracket, and we're in an array
-                            array_pop($stk);
-                            //print("Found end of array at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n");
-
-                        } elseif (($chrs{$c} == '{') &&
-                                 in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) {
-                            // found a left-brace, and we are in an array, object, or slice
-                            array_push($stk, array('what' => SERVICES_JSON_IN_OBJ, 'where' => $c, 'delim' => false));
-                            //print("Found start of object at {$c}\n");
-
-                        } elseif (($chrs{$c} == '}') && ($top['what'] == SERVICES_JSON_IN_OBJ)) {
-                            // found a right-brace, and we're in an object
-                            array_pop($stk);
-                            //print("Found end of object at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n");
-
-                        } elseif (($substr_chrs_c_2 == '/*') &&
-                                 in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) {
-                            // found a comment start, and we are in an array, object, or slice
-                            array_push($stk, array('what' => SERVICES_JSON_IN_CMT, 'where' => $c, 'delim' => false));
-                            $c++;
-                            //print("Found start of comment at {$c}\n");
-
-                        } elseif (($substr_chrs_c_2 == '*/') && ($top['what'] == SERVICES_JSON_IN_CMT)) {
-                            // found a comment end, and we're in one now
-                            array_pop($stk);
-                            $c++;
-
-                            for ($i = $top['where']; $i <= $c; ++$i)
-                                $chrs = substr_replace($chrs, ' ', $i, 1);
-
-                            //print("Found end of comment at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n");
-
-                        }
-
-                    }
-
-                    if (reset($stk) == SERVICES_JSON_IN_ARR) {
-                        return $arr;
-
-                    } elseif (reset($stk) == SERVICES_JSON_IN_OBJ) {
-                        return $obj;
-
-                    }
-
-                }
-        }
-    }
-
-    /**
-     * @todo Ultimately, this should just call PEAR::isError()
-     */
-    function isError($data, $code = null)
-    {
-        if (class_exists('pear')) {
-            return PEAR::isError($data, $code);
-        } elseif (is_object($data) && (get_class($data) == 'services_json_error' ||
-                                 is_subclass_of($data, 'services_json_error'))) {
-            return true;
-        }
-
-        return false;
-    }
-}
-
-if (class_exists('PEAR_Error')) {
-
-    class Services_JSON_Error extends PEAR_Error
-    {
-        function Services_JSON_Error($message = 'unknown error', $code = null,
-                                     $mode = null, $options = null, $userinfo = null)
-        {
-            parent::PEAR_Error($message, $code, $mode, $options, $userinfo);
-        }
-    }
-
-} else {
-
-    /**
-     * @todo Ultimately, this class shall be descended from PEAR_Error
-     */
-    class Services_JSON_Error
-    {
-        function Services_JSON_Error($message = 'unknown error', $code = null,
-                                     $mode = null, $options = null, $userinfo = null)
-        {
-
-        }
-    }
-
-}
-    
-?>
diff --git a/apps/maarch_entreprise/tools/tafelTree/server/php4/LICENSE b/apps/maarch_entreprise/tools/tafelTree/server/php4/LICENSE
deleted file mode 100755
index e59acee720bde1b3b0a3504bec415c5c34ff1ab0..0000000000000000000000000000000000000000
--- a/apps/maarch_entreprise/tools/tafelTree/server/php4/LICENSE
+++ /dev/null
@@ -1,24 +0,0 @@
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
-Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-
-Redistributions in binary form must reproduce the above copyright
-notice, this list of conditions and the following disclaimer in the
-documentation and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
-NO EVENT SHALL CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-http://pear.php.net/pepr/pepr-proposal-show.php?id=198
-http://mike.teczno.com/JSON/doc/
\ No newline at end of file
diff --git a/apps/maarch_entreprise/tools/tafelTree/server/php4/TafelTree.class.php b/apps/maarch_entreprise/tools/tafelTree/server/php4/TafelTree.class.php
deleted file mode 100755
index f1fa128650fd6859d73248925cb359ea7ddcdd8a..0000000000000000000000000000000000000000
--- a/apps/maarch_entreprise/tools/tafelTree/server/php4/TafelTree.class.php
+++ /dev/null
@@ -1,225 +0,0 @@
-<?php 
-
-include_once ('JSON.php');
-include_once ('TafelTreeBranch.class.php');
-
-/**
- * 
- *
- * @author 	FTafel
- */
-class TafelTree {
-	
-	
-	/**
-	 *------------------------------------------------------------------------------
-	 *							Propri�t�s
-	 *------------------------------------------------------------------------------
-	 */
-	
-	/**
-	 * @access 	protected
-	 * @var 	string				$id					L'id de l'arbre
-	 */
-	var $id;
-	
-	/**
-	 * @access 	protected
-	 * @var 	string				$id					L'id de l'arbre
-	 */
-	var $width;
-	
-	/**
-	 * @access 	protected
-	 * @var 	string				$id					L'id de l'arbre
-	 */
-	var $height;
-	
-	/**
-	 * @access 	protected
-	 * @var 	string				$id					L'id de l'arbre
-	 */
-	var $pathImgs;
-	
-	/**
-	 * @access 	protected
-	 * @var 	array				$options			Les options de load de l'arbre
-	 */
-	var $options;
-	
-	
-	/**
-	 *------------------------------------------------------------------------------
-	 *							Constructeur
-	 *------------------------------------------------------------------------------
-	 */
-	
-	/**
-	 * Constructeur
-	 *
-	 * @access	public
-	 * @param	string				id					L'id de l'�l�ment HTML conteneur
-	 * @param	string				imgBase				Le path vers les images
-	 * @param	integer				width				La largeur de l'arbre
-	 * @param	integer				height				La hauteur de l'arbre
-	 * @param	array				options				Les options de l'arbre
-	 */
-	function TafelTree ($id, $imgs = 'imgs/', $width = '100%', $height = 'auto', $options = array()){
-		$this->id = $id;
-		$this->pathImgs = $imgs;
-		$this->width = $width;
-		$this->height = $height;
-		$this->options = array();
-		foreach ($options as $property => $value) {
-			$this->options[$property] = $value;
-		}
-	}
-	
-	/**
-	 * Load les infos depuis une string JSON
-	 *
-	 * @access	public
-	 * @param 	string			$json					La string JSON
-	 * @return 	TafelTree								Le TafelTree cr��
-	 */
-	function &loadJSON ($json, $id, $imgs = 'imgs/', $width = '100%', $height = 'auto', $options = array()) {
-		//$tree =& new TafelTree($id, $imgs, $width, $height, $options);
-		$tree = new TafelTree($id, $imgs, $width, $height, $options);
-		$service = new Services_JSON();
-		$tree->items =& TafelTree::loadServiceJSON($service->decode($json));
-		return $tree;
-	}
-	
-	/**
-	 * Load les infos depuis un objet Service_JSON
-	 *
-	 * @access	public
-	 * @param 	Service_JSON	$service				L'objet Service_JSON
-	 * @return 	array									Les TafelTreeBranch cr��es
-	 */
-	function &loadServiceJSON ($service) {
-		$branches = array();
-		foreach ($service as $branch) {
-			$branches[] =& TafelTreeBranch::loadServiceJSON($branch);
-		}
-		return $branches;
-	}
-	
-	
-	
-	/**
-	 *------------------------------------------------------------------------------
-	 *							Fonctions getters et setters
-	 *------------------------------------------------------------------------------
-	 */
-	
-	function getId() {
-		return $this->id;
-	}
-	function getPathImgs() {
-		return $this->pathImgs;
-	}
-	function getWidth() {
-		return $this->width;
-	}
-	function getHeight() {
-		return $this->height;
-	}
-	
-	
-	/**
-	 *------------------------------------------------------------------------------
-	 *							Fonctions publiques
-	 *------------------------------------------------------------------------------
-	 */
-	
-	/**
-	 * Ajoute une branche comme enfant
-	 *
-	 * @access 	public
-	 * @param 	TafelTreeBranch		$branch				La branche � ajouter
-	 * @return 	void
-	 */
-	function &add ($branch) {
-		if (!isset($this->items)) {
-			$this->items = array();
-		}
-		$this->items[] =& $branch;
-	}
-	
-	/**
-	 * Ajoute une sous-branche � l'arbre
-	 *
-	 * @access 	public
-	 * @param 	string			$id						L'id de la sous-branche
-	 * @param 	string			$txt					Le texte de la sous-branche
-	 * @param 	array			$options				Les informations compl�mentaires
-	 * @return 	TafelTreeBranch							La sous-branche
-	 */
-	function &addBranch ($id, $txt, $options = array()) {
-		//$branch =& new TafelTreeBranch ();
-		$branch = new TafelTreeBranch ();
-		$branch->setId($id);
-		$branch->setText($txt);
-		foreach ($options as $property => $value) {
-			if ($property != 'items') {
-				$branch->setParam($property, $value);
-			}
-		}
-		if (isset($options['items'])) {
-			foreach ($options['items'] as $opt) {
-				$branch->addBranch(null, null, $opt);
-			}
-		}
-		if (!isset($this->items)) {
-			$this->items = array();
-		}
-		$this->items[] =& $branch;
-		return $branch;
-	}
-	
-	/**
-	 * Affiche la m�thode d'initialisation de l'arbre
-	 *
-	 * @access 	public
-	 * @param 	integer			$debug					Mettre 1 ou 2 pour avoir un affichage plus lisible
-	 * @return 	string									La string de la m�thode JS d'initialisation
-	 */
-	function display ($debug = 0) {
-		if ($debug == 1) {
-			$d = '<br />';
-		} elseif ($debug == 2) {
-			$d = "\n";
-		} else {
-			$d = '';
-		}
-		if (count($this->options) > 0) {
-			$s = new Services_JSON();
-			$options = ','.$s->encode($this->options);
-		}
-		$str = "var tree_".$this->id." = null;".$d;
-		$str .= "function TafelTreeInit() {".$d;
-		$str .= "tree_".$this->id." = new TafelTree (".$d;
-		$str .= "'".$this->getId()."', ".$d;
-		$str .= $this->getJSON().", ".$d;
-		$str .= "'".$this->getPathImgs()."', ".$d;
-		$str .= "'".$this->getWidth()."', ".$d;
-		$str .= "'".$this->getHeight()."'".$options;
-		$str .= ");".$d;
-		$str .= "};".$d;
-		return $str;
-	}
-	
-	/**
-	 * Affiche la structure JSON de l'arbre
-	 *
-	 * @access 	public
-	 * @return 	string									La structure JSON de l'arbre
-	 */
-	function getJSON () {
-		$service = new Services_JSON();
-		return $service->encode($this->items);
-	}
-}
-
-?>
\ No newline at end of file
diff --git a/apps/maarch_entreprise/tools/tafelTree/server/php4/TafelTreeBranch.class.php b/apps/maarch_entreprise/tools/tafelTree/server/php4/TafelTreeBranch.class.php
deleted file mode 100755
index c59a45f356748c948dcbb3dda54d23b8840db2d3..0000000000000000000000000000000000000000
--- a/apps/maarch_entreprise/tools/tafelTree/server/php4/TafelTreeBranch.class.php
+++ /dev/null
@@ -1,183 +0,0 @@
-<?php 
-
-/**
- * 
- *
- * @author 	FTafel
- */
-class TafelTreeBranch {
-	
-	
-	/**
-	 *------------------------------------------------------------------------------
-	 *							Propri�t�s
-	 *------------------------------------------------------------------------------
-	 */
-	
-	/**
-	 * @access 	protected
-	 * @var 	string			$id						L'id de la branche
-	 */
-	var $id;
-	
-	/**
-	 * @access 	protected
-	 * @var 	string			$txt					Le texte de la branche
-	 */
-	var $txt;
-	
-	
-	/**
-	 *------------------------------------------------------------------------------
-	 *							Constructeur
-	 *------------------------------------------------------------------------------
-	 */
-	
-	/**
-	 * Constructeur
-	 *
-	 * @access	public
-	 */
-	function TafelTreeBranch (){
-	}
-	
-	/**
-	 * Load les infos depuis une string JSON
-	 *
-	 * @access	public
-	 * @param 	string			$json					La string JSON
-	 * @return 	array									Les TafelTreeBranch cr��es
-	 */
-	function &loadJSON ($json) {
-		$service = new Services_JSON();
-		$obj = $service->decode($json);
-		$branches = array();
-		foreach ($obj as $s) {
-			$branches[] =& TafelTreeBranch::loadServiceJSON($s);
-		}
-		return $branches;
-	}
-	
-	/**
-	 * Load les infos depuis un objet Service_JSON
-	 *
-	 * @access	public
-	 * @param 	Service_JSON	$service				L'objet Service_JSON
-	 * @return 	array									Les TafelTreeBranch cr��es
-	 */
-	function &loadServiceJSON ($service) {
-		//$branch =& new TafelTreeBranch();
-		$branch = new TafelTreeBranch();
-		// On check toutes les propri�t�s de branche
-		foreach ($service as $property => $value) {
-			if ($property != 'items') {
-				$branch->setParam($property, $value);
-			}
-		}
-		// On check les enfants
-		if (isset($service) && isset($service->items)) {
-			$branch->items = array();
-			foreach ($service->items as $b) {
-				$branch->items[] =& TafelTreeBranch::loadServiceJSON($b);
-			}
-		}
-		return $branch;
-	}
-	
-	
-	
-	/**
-	 *------------------------------------------------------------------------------
-	 *							Fonctions getters et setters
-	 *------------------------------------------------------------------------------
-	 */
-	
-	function getId () {return $this->id;}
-	function setId ($id) {$this->id = $id;}
-	
-	function getText () {return $this->txt;}
-	function setText ($txt) {$this->txt = $txt;}
-	
-	function getParam ($param) {
-		if (isset($this->{$param})) {
-			return $this->{$param};
-		}
-	}
-	
-	function setParam ($param, $value) {
-		if ($param == 'id') {
-			$this->setId($value);
-		} elseif ($param == 'txt') {
-			$this->setText($value);
-		} else {
-			$this->{$param} = $value;
-		}
-	}
-	
-	
-	/**
-	 *------------------------------------------------------------------------------
-	 *							Fonctions publiques
-	 *------------------------------------------------------------------------------
-	 */
-	
-	/**
-	 * Ajoute une branche comme enfant
-	 *
-	 * @access 	public
-	 * @param 	TafelTreeBranch		$branch				La branche � ajouter
-	 * @return 	void
-	 */
-	function &add ($branch) {
-		if (!isset($this->items)) {
-			$this->items = array();
-		}
-		$this->items[] =& $branch;
-	}
-	
-	/**
-	 * Ajoute une sous-branche � la branche courante
-	 *
-	 * @access 	public
-	 * @param 	string			$id						L'id de la sous-branche
-	 * @param 	string			$txt					Le texte de la sous-branche
-	 * @param 	array			$options				Les informations compl�mentaires
-	 * @return 	TafelTreeBranch							La sous-branche
-	 */
-	function &addBranch ($id, $txt, $options = array()) {
-		//$branch =& new TafelTreeBranch ();
-		$branch = new TafelTreeBranch ();
-		$branch->setId($id);
-		$branch->setText($txt);
-		foreach ($options as $property => $value) {
-			if ($property != 'items') {
-				$branch->setParam($property, $value);
-			}
-		}
-		if (isset($options['items'])) {
-			foreach ($options['items'] as $opt) {
-				$branch->addBranch(null, null, $opt);
-			}
-		}
-		if (!isset($this->items)) {
-			$this->items = array();
-		}
-		$this->items[] =& $branch;
-		return $branch;
-	}
-	
-	/**
-	 * Retourne la string JSON qui correspond � la structure de la branche et sous-branches
-	 *
-	 * @access 	public
-	 * @return 	string									La string JSON de la branche
-	 */
-	function getJSON () {
-		$service = new Services_JSON();
-		return $service->encode($this);
-	}
-	
-	
-}
-
-?>
\ No newline at end of file
diff --git a/apps/maarch_entreprise/tools/tafelTree/server/php4_sample.php b/apps/maarch_entreprise/tools/tafelTree/server/php4_sample.php
deleted file mode 100755
index 7e1b5618d27bef7c56a6ea2c2b3dd5aa3b3d4ccc..0000000000000000000000000000000000000000
--- a/apps/maarch_entreprise/tools/tafelTree/server/php4_sample.php
+++ /dev/null
@@ -1,94 +0,0 @@
-<?php 
-
-include_once ('php4/TafelTree.class.php');
-
-
-///
- // CASE 1 : load structure from a JSON string
- //
- ///
-
-// Check the JSON string
-$json = "[{id:'r1',txt:'root',items:[{id:'b1',txt:'branch 1',myPos:{x:1,y:9}},{id:'b2',txt:'branch 2'}]}]";
-
-// Load the JSON into an object (or array of objects)
-$branches =& TafelTreeBranch::loadJSON($json);
-
-// Manipulate the object (or array of objects)
-$first = $branches[0];
-echo '<h3>CASE 1 : load structure from a JSON string</h3>';
-echo 'First JSON branch : '.$first->getText().' ('.$first->getId().')';
-echo '<ul>';
-foreach ($first->items as $next) {
-	echo '<li>Next JSON branch : '.$next->getText().' ('.$next->getId().')</li>';
-}
-echo '</ul>';
-
-
-
-
-
-
-///
- // CASE 2 : create a loader TafelTree from an object
- //
- ///
-
-// Create the tree (same options as javascript). In this sample, the file
-// drop.php doesn't exist. It's just to show how to manage ajax declarations
-//$tree =& new TafelTree('divTree', '../imgs/', null, null, array(
-$tree = new TafelTree('divTree', '../imgs/', null, null, array(
-	'generate' => true,
-	'onMouseOver'=>'myMouseover',
-	'onMouseOut'=>'myMouseout',
-	'defaultImg'=>'page.gif',
-	'lineStyle'=>'full',
-	'onDropAjax'=>array('funcDrop', 'drop.php')
-));
-
-// Add a root branch
-$b1 =& $tree->addBranch('r1', 'root');
-
-// Add two branches into the root
-$b1->addBranch('b1', 'branch 1', array('onclick'=>'testclick','thing' => 1));
-$b1->addBranch('b2', 'branch 2');
-
-?>
-<html>
-<head>
-	<title>PHP4 sample</title>
-	<link rel="stylesheet" href="../css/tree.css" type="text/css" />
-	<script src="../js/prototype.js" type="text/javascript"></script>
-	<script src="../js/scriptaculous.js" type="text/javascript"></script>
-	<script src="../Tree.js" type="text/javascript"></script>
-	<script type="text/javascript">
-	function myMouseover (branch) {
-		branch.txt.style.color = 'red';
-	}
-	function myMouseout (branch) {
-		branch.txt.style.color = 'black';
-	}
-	function funcDrop (move, here, response, finished) {
-		return false;
-	}
-	function testclick(branch) {
-		
-	}
-<?php 
-// Display the function which is called at load
-// You can print only the JSON structure with
-// the function $tree->getJSON();
-echo $tree->display();
-?>
-	</script>
-</head>
-<body>
-
-<h3>CASE 2 : create a loader TafelTree from an object</h3>
-<div id="divTree"></div>
-
-<h3>CASE 3 : get only the JSON from an object</h3>
-<?php  echo $tree->getJSON(); ?>
-
-</body>
-</html>
diff --git a/apps/maarch_entreprise/tools/tafelTree/server/php5/JSON.php b/apps/maarch_entreprise/tools/tafelTree/server/php5/JSON.php
deleted file mode 100755
index b63f608e65e9cc3d84ac93e3ee731e34030cb48c..0000000000000000000000000000000000000000
--- a/apps/maarch_entreprise/tools/tafelTree/server/php5/JSON.php
+++ /dev/null
@@ -1,804 +0,0 @@
-<?php 
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
-
-/**
- * Converts to and from JSON format.
- *
- * JSON (JavaScript Object Notation) is a lightweight data-interchange
- * format. It is easy for humans to read and write. It is easy for machines
- * to parse and generate. It is based on a subset of the JavaScript
- * Programming Language, Standard ECMA-262 3rd Edition - December 1999.
- * This feature can also be found in  Python. JSON is a text format that is
- * completely language independent but uses conventions that are familiar
- * to programmers of the C-family of languages, including C, C++, C#, Java,
- * JavaScript, Perl, TCL, and many others. These properties make JSON an
- * ideal data-interchange language.
- *
- * This package provides a simple encoder and decoder for JSON notation. It
- * is intended for use with client-side Javascript applications that make
- * use of HTTPRequest to perform server communication functions - data can
- * be encoded into JSON notation for use in a client-side javascript, or
- * decoded from incoming Javascript requests. JSON format is native to
- * Javascript, and can be directly eval()'ed with no further parsing
- * overhead
- *
- * All strings should be in ASCII or UTF-8 format!
- *
- * LICENSE: Redistribution and use in source and binary forms, with or
- * without modification, are permitted provided that the following
- * conditions are met: Redistributions of source code must retain the
- * above copyright notice, this list of conditions and the following
- * disclaimer. Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
- * NO EVENT SHALL CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
- * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
- * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
- * DAMAGE.
- *
- * @category
- * @package     Services_JSON
- * @author      Michal Migurski <mike-json@teczno.com>
- * @author      Matt Knapp <mdknapp[at]gmail[dot]com>
- * @author      Brett Stimmerman <brettstimmerman[at]gmail[dot]com>
- * @copyright   2005 Michal Migurski
- * @version     CVS: $Id: JSON.php,v 1.1 2006/11/13 16:47:49 rekam Exp $
- * @license     http://www.opensource.org/licenses/bsd-license.php
- * @link        http://pear.php.net/pepr/pepr-proposal-show.php?id=198
- */
-
-/**
- * Marker constant for Services_JSON::decode(), used to flag stack state
- */
-define('SERVICES_JSON_SLICE',   1);
-
-/**
- * Marker constant for Services_JSON::decode(), used to flag stack state
- */
-define('SERVICES_JSON_IN_STR',  2);
-
-/**
- * Marker constant for Services_JSON::decode(), used to flag stack state
- */
-define('SERVICES_JSON_IN_ARR',  3);
-
-/**
- * Marker constant for Services_JSON::decode(), used to flag stack state
- */
-define('SERVICES_JSON_IN_OBJ',  4);
-
-/**
- * Marker constant for Services_JSON::decode(), used to flag stack state
- */
-define('SERVICES_JSON_IN_CMT', 5);
-
-/**
- * Behavior switch for Services_JSON::decode()
- */
-define('SERVICES_JSON_LOOSE_TYPE', 16);
-
-/**
- * Behavior switch for Services_JSON::decode()
- */
-define('SERVICES_JSON_SUPPRESS_ERRORS', 32);
-
-/**
- * Converts to and from JSON format.
- *
- * Brief example of use:
- *
- * <code>
- * // create a new instance of Services_JSON
- * $json = new Services_JSON();
- *
- * // convert a complexe value to JSON notation, and send it to the browser
- * $value = array('foo', 'bar', array(1, 2, 'baz'), array(3, array(4)));
- * $output = $json->encode($value);
- *
- * print($output);
- * // prints: ["foo","bar",[1,2,"baz"],[3,[4]]]
- *
- * // accept incoming POST data, assumed to be in JSON notation
- * $input = file_get_contents('php://input', 1000000);
- * $value = $json->decode($input);
- * </code>
- */
-class Services_JSON
-{
-   /**
-    * constructs a new JSON instance
-    *
-    * @param    int     $use    object behavior flags; combine with boolean-OR
-    *
-    *                           possible values:
-    *                           - SERVICES_JSON_LOOSE_TYPE:  loose typing.
-    *                                   "{...}" syntax creates associative arrays
-    *                                   instead of objects in decode().
-    *                           - SERVICES_JSON_SUPPRESS_ERRORS:  error suppression.
-    *                                   Values which can't be encoded (e.g. resources)
-    *                                   appear as NULL instead of throwing errors.
-    *                                   By default, a deeply-nested resource will
-    *                                   bubble up with an error, so all return values
-    *                                   from encode() should be checked with isError()
-    */
-    function Services_JSON($use = 0)
-    {
-        $this->use = $use;
-    }
-
-   /**
-    * convert a string from one UTF-16 char to one UTF-8 char
-    *
-    * Normally should be handled by mb_convert_encoding, but
-    * provides a slower PHP-only method for installations
-    * that lack the multibye string extension.
-    *
-    * @param    string  $utf16  UTF-16 character
-    * @return   string  UTF-8 character
-    * @access   private
-    */
-    function utf162utf8($utf16)
-    {
-        // oh please oh please oh please oh please oh please
-        if(function_exists('mb_convert_encoding')) {
-            return mb_convert_encoding($utf16, 'UTF-8', 'UTF-16');
-        }
-
-        $bytes = (ord($utf16{0}) << 8) | ord($utf16{1});
-
-        switch(true) {
-            case ((0x7F & $bytes) == $bytes):
-                // this case should never be reached, because we are in ASCII range
-                // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
-                return chr(0x7F & $bytes);
-
-            case (0x07FF & $bytes) == $bytes:
-                // return a 2-byte UTF-8 character
-                // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
-                return chr(0xC0 | (($bytes >> 6) & 0x1F))
-                     . chr(0x80 | ($bytes & 0x3F));
-
-            case (0xFFFF & $bytes) == $bytes:
-                // return a 3-byte UTF-8 character
-                // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
-                return chr(0xE0 | (($bytes >> 12) & 0x0F))
-                     . chr(0x80 | (($bytes >> 6) & 0x3F))
-                     . chr(0x80 | ($bytes & 0x3F));
-        }
-
-        // ignoring UTF-32 for now, sorry
-        return '';
-    }
-
-   /**
-    * convert a string from one UTF-8 char to one UTF-16 char
-    *
-    * Normally should be handled by mb_convert_encoding, but
-    * provides a slower PHP-only method for installations
-    * that lack the multibye string extension.
-    *
-    * @param    string  $utf8   UTF-8 character
-    * @return   string  UTF-16 character
-    * @access   private
-    */
-    function utf82utf16($utf8)
-    {
-        // oh please oh please oh please oh please oh please
-        if(function_exists('mb_convert_encoding')) {
-            return mb_convert_encoding($utf8, 'UTF-16', 'UTF-8');
-        }
-
-        switch(strlen($utf8)) {
-            case 1:
-                // this case should never be reached, because we are in ASCII range
-                // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
-                return $utf8;
-
-            case 2:
-                // return a UTF-16 character from a 2-byte UTF-8 char
-                // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
-                return chr(0x07 & (ord($utf8{0}) >> 2))
-                     . chr((0xC0 & (ord($utf8{0}) << 6))
-                         | (0x3F & ord($utf8{1})));
-
-            case 3:
-                // return a UTF-16 character from a 3-byte UTF-8 char
-                // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
-                return chr((0xF0 & (ord($utf8{0}) << 4))
-                         | (0x0F & (ord($utf8{1}) >> 2)))
-                     . chr((0xC0 & (ord($utf8{1}) << 6))
-                         | (0x7F & ord($utf8{2})));
-        }
-
-        // ignoring UTF-32 for now, sorry
-        return '';
-    }
-
-   /**
-    * encodes an arbitrary variable into JSON format
-    *
-    * @param    mixed   $var    any number, boolean, string, array, or object to be encoded.
-    *                           see argument 1 to Services_JSON() above for array-parsing behavior.
-    *                           if var is a strng, note that encode() always expects it
-    *                           to be in ASCII or UTF-8 format!
-    *
-    * @return   mixed   JSON string representation of input var or an error if a problem occurs
-    * @access   public
-    */
-    function encode($var)
-    {
-        switch (gettype($var)) {
-            case 'boolean':
-                return $var ? 'true' : 'false';
-
-            case 'NULL':
-                return 'null';
-
-            case 'integer':
-                return (int) $var;
-
-            case 'double':
-            case 'float':
-                return (float) $var;
-
-            case 'string':
-                // STRINGS ARE EXPECTED TO BE IN ASCII OR UTF-8 FORMAT
-                $ascii = '';
-                $strlen_var = strlen($var);
-
-               /*
-                * Iterate over every character in the string,
-                * escaping with a slash or encoding to UTF-8 where necessary
-                */
-                for ($c = 0; $c < $strlen_var; ++$c) {
-
-                    $ord_var_c = ord($var{$c});
-
-                    switch (true) {
-                        case $ord_var_c == 0x08:
-                            $ascii .= '\b';
-                            break;
-                        case $ord_var_c == 0x09:
-                            $ascii .= '\t';
-                            break;
-                        case $ord_var_c == 0x0A:
-                            $ascii .= '\n';
-                            break;
-                        case $ord_var_c == 0x0C:
-                            $ascii .= '\f';
-                            break;
-                        case $ord_var_c == 0x0D:
-                            $ascii .= '\r';
-                            break;
-
-                        case $ord_var_c == 0x22:
-                        case $ord_var_c == 0x2F:
-                        case $ord_var_c == 0x5C:
-                            // double quote, slash, slosh
-                            $ascii .= '\\'.$var{$c};
-                            break;
-
-                        case (($ord_var_c >= 0x20) && ($ord_var_c <= 0x7F)):
-                            // characters U-00000000 - U-0000007F (same as ASCII)
-                            $ascii .= $var{$c};
-                            break;
-
-                        case (($ord_var_c & 0xE0) == 0xC0):
-                            // characters U-00000080 - U-000007FF, mask 110XXXXX
-                            // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
-                            $char = pack('C*', $ord_var_c, ord($var{$c + 1}));
-                            $c += 1;
-                            $utf16 = $this->utf82utf16($char);
-                            $ascii .= sprintf('\u%04s', bin2hex($utf16));
-                            break;
-
-                        case (($ord_var_c & 0xF0) == 0xE0):
-                            // characters U-00000800 - U-0000FFFF, mask 1110XXXX
-                            // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
-                            $char = pack('C*', $ord_var_c,
-                                         ord($var{$c + 1}),
-                                         ord($var{$c + 2}));
-                            $c += 2;
-                            $utf16 = $this->utf82utf16($char);
-                            $ascii .= sprintf('\u%04s', bin2hex($utf16));
-                            break;
-
-                        case (($ord_var_c & 0xF8) == 0xF0):
-                            // characters U-00010000 - U-001FFFFF, mask 11110XXX
-                            // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
-                            $char = pack('C*', $ord_var_c,
-                                         ord($var{$c + 1}),
-                                         ord($var{$c + 2}),
-                                         ord($var{$c + 3}));
-                            $c += 3;
-                            $utf16 = $this->utf82utf16($char);
-                            $ascii .= sprintf('\u%04s', bin2hex($utf16));
-                            break;
-
-                        case (($ord_var_c & 0xFC) == 0xF8):
-                            // characters U-00200000 - U-03FFFFFF, mask 111110XX
-                            // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
-                            $char = pack('C*', $ord_var_c,
-                                         ord($var{$c + 1}),
-                                         ord($var{$c + 2}),
-                                         ord($var{$c + 3}),
-                                         ord($var{$c + 4}));
-                            $c += 4;
-                            $utf16 = $this->utf82utf16($char);
-                            $ascii .= sprintf('\u%04s', bin2hex($utf16));
-                            break;
-
-                        case (($ord_var_c & 0xFE) == 0xFC):
-                            // characters U-04000000 - U-7FFFFFFF, mask 1111110X
-                            // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
-                            $char = pack('C*', $ord_var_c,
-                                         ord($var{$c + 1}),
-                                         ord($var{$c + 2}),
-                                         ord($var{$c + 3}),
-                                         ord($var{$c + 4}),
-                                         ord($var{$c + 5}));
-                            $c += 5;
-                            $utf16 = $this->utf82utf16($char);
-                            $ascii .= sprintf('\u%04s', bin2hex($utf16));
-                            break;
-                    }
-                }
-               	return '"'.$ascii.'"';
-            case 'array':
-               /*
-                * As per JSON spec if any array key is not an integer
-                * we must treat the the whole array as an object. We
-                * also try to catch a sparsely populated associative
-                * array with numeric keys here because some JS engines
-                * will create an array with empty indexes up to
-                * max_index which can cause memory issues and because
-                * the keys, which may be relevant, will be remapped
-                * otherwise.
-                *
-                * As per the ECMA and JSON specification an object may
-                * have any string as a property. Unfortunately due to
-                * a hole in the ECMA specification if the key is a
-                * ECMA reserved word or starts with a digit the
-                * parameter is only accessible using ECMAScript's
-                * bracket notation.
-                */
-
-                // treat as a JSON object
-                if (is_array($var) && count($var) && (array_keys($var) !== range(0, sizeof($var) - 1))) {
-                    $properties = array_map(array($this, 'name_value'),
-                                            array_keys($var),
-                                            array_values($var));
-
-                    foreach($properties as $property) {
-                        if(Services_JSON::isError($property)) {
-                            return $property;
-                        }
-                    }
-
-                    return '{' . join(',', $properties) . '}';
-                }
-
-                // treat it like a regular array
-                $elements = array_map(array($this, 'encode'), $var);
-
-                foreach($elements as $element) {
-                    if(Services_JSON::isError($element)) {
-                        return $element;
-                    }
-                }
-
-                return '[' . join(',', $elements) . ']';
-
-            case 'object':
-                $vars = get_object_vars($var);
-
-                $properties = array_map(array($this, 'name_value'),
-                                        array_keys($vars),
-                                        array_values($vars));
-
-                foreach($properties as $property) {
-                    if(Services_JSON::isError($property)) {
-                        return $property;
-                    }
-                }
-
-                return '{' . join(',', $properties) . '}';
-
-            default:
-                return ($this->use & SERVICES_JSON_SUPPRESS_ERRORS)
-                    ? 'null'
-                    : new Services_JSON_Error(gettype($var)." can not be encoded as JSON string");
-        }
-    }
-
-   /**
-    * array-walking function for use in generating JSON-formatted name-value pairs
-    *
-    * @param    string  $name   name of key to use
-    * @param    mixed   $value  reference to an array element to be encoded
-    *
-    * @return   string  JSON-formatted name-value pair, like '"name":value'
-    * @access   private
-    */
-    function name_value($name, $value)
-    {
-        $encoded_value = $this->encode($value);
-
-        if(Services_JSON::isError($encoded_value)) {
-            return $encoded_value;
-        }
-
-        return $this->encode(strval($name)) . ':' . $encoded_value;
-    }
-
-   /**
-    * reduce a string by removing leading and trailing comments and whitespace
-    *
-    * @param    $str    string      string value to strip of comments and whitespace
-    *
-    * @return   string  string value stripped of comments and whitespace
-    * @access   private
-    */
-    function reduce_string($str)
-    {
-        $str = preg_replace(array(
-
-                // eliminate single line comments in '// ...' form
-                '#^\s*//(.+)$#m',
-
-                // eliminate multi-line comments in '/* ... */' form, at start of string
-                '#^\s*/\*(.+)\*/#Us',
-
-                // eliminate multi-line comments in '/* ... */' form, at end of string
-                '#/\*(.+)\*/\s*$#Us'
-
-            ), '', $str);
-
-        // eliminate extraneous space
-        return trim($str);
-    }
-
-   /**
-    * decodes a JSON string into appropriate variable
-    *
-    * @param    string  $str    JSON-formatted string
-    *
-    * @return   mixed   number, boolean, string, array, or object
-    *                   corresponding to given JSON input string.
-    *                   See argument 1 to Services_JSON() above for object-output behavior.
-    *                   Note that decode() always returns strings
-    *                   in ASCII or UTF-8 format!
-    * @access   public
-    */
-    function decode($str)
-    {
-        $str = $this->reduce_string($str);
-
-        switch (strtolower($str)) {
-            case 'true':
-                return true;
-
-            case 'false':
-                return false;
-
-            case 'null':
-                return null;
-
-            default:
-                $m = array();
-
-                if (is_numeric($str)) {
-                    // Lookie-loo, it's a number
-
-                    // This would work on its own, but I'm trying to be
-                    // good about returning integers where appropriate:
-                    // return (float)$str;
-
-                    // Return float or int, as appropriate
-                    return ((float)$str == (integer)$str)
-                        ? (integer)$str
-                        : (float)$str;
-
-                } elseif (preg_match('/^("|\').*(\1)$/s', $str, $m) && $m[1] == $m[2]) {
-                    // STRINGS RETURNED IN UTF-8 FORMAT
-                    $delim = substr($str, 0, 1);
-                    $chrs = substr($str, 1, -1);
-                    $utf8 = '';
-                    $strlen_chrs = strlen($chrs);
-
-                    for ($c = 0; $c < $strlen_chrs; ++$c) {
-
-                        $substr_chrs_c_2 = substr($chrs, $c, 2);
-                        $ord_chrs_c = ord($chrs{$c});
-
-                        switch (true) {
-                            case $substr_chrs_c_2 == '\b':
-                                $utf8 .= chr(0x08);
-                                ++$c;
-                                break;
-                            case $substr_chrs_c_2 == '\t':
-                                $utf8 .= chr(0x09);
-                                ++$c;
-                                break;
-                            case $substr_chrs_c_2 == '\n':
-                                $utf8 .= chr(0x0A);
-                                ++$c;
-                                break;
-                            case $substr_chrs_c_2 == '\f':
-                                $utf8 .= chr(0x0C);
-                                ++$c;
-                                break;
-                            case $substr_chrs_c_2 == '\r':
-                                $utf8 .= chr(0x0D);
-                                ++$c;
-                                break;
-
-                            case $substr_chrs_c_2 == '\\"':
-                            case $substr_chrs_c_2 == '\\\'':
-                            case $substr_chrs_c_2 == '\\\\':
-                            case $substr_chrs_c_2 == '\\/':
-                                if (($delim == '"' && $substr_chrs_c_2 != '\\\'') ||
-                                   ($delim == "'" && $substr_chrs_c_2 != '\\"')) {
-                                    $utf8 .= $chrs{++$c};
-                                }
-                                break;
-
-                            case preg_match('/\\\u[0-9A-F]{4}/i', substr($chrs, $c, 6)):
-                                // single, escaped unicode character
-                                $utf16 = chr(hexdec(substr($chrs, ($c + 2), 2)))
-                                       . chr(hexdec(substr($chrs, ($c + 4), 2)));
-                                $utf8 .= $this->utf162utf8($utf16);
-                                $c += 5;
-                                break;
-
-                            case ($ord_chrs_c >= 0x20) && ($ord_chrs_c <= 0x7F):
-                                $utf8 .= $chrs{$c};
-                                break;
-
-                            case ($ord_chrs_c & 0xE0) == 0xC0:
-                                // characters U-00000080 - U-000007FF, mask 110XXXXX
-                                //see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
-                                $utf8 .= substr($chrs, $c, 2);
-                                ++$c;
-                                break;
-
-                            case ($ord_chrs_c & 0xF0) == 0xE0:
-                                // characters U-00000800 - U-0000FFFF, mask 1110XXXX
-                                // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
-                                $utf8 .= substr($chrs, $c, 3);
-                                $c += 2;
-                                break;
-
-                            case ($ord_chrs_c & 0xF8) == 0xF0:
-                                // characters U-00010000 - U-001FFFFF, mask 11110XXX
-                                // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
-                                $utf8 .= substr($chrs, $c, 4);
-                                $c += 3;
-                                break;
-
-                            case ($ord_chrs_c & 0xFC) == 0xF8:
-                                // characters U-00200000 - U-03FFFFFF, mask 111110XX
-                                // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
-                                $utf8 .= substr($chrs, $c, 5);
-                                $c += 4;
-                                break;
-
-                            case ($ord_chrs_c & 0xFE) == 0xFC:
-                                // characters U-04000000 - U-7FFFFFFF, mask 1111110X
-                                // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
-                                $utf8 .= substr($chrs, $c, 6);
-                                $c += 5;
-                                break;
-
-                        }
-
-                    }
-
-                    return $utf8;
-
-                } elseif (preg_match('/^\[.*\]$/s', $str) || preg_match('/^\{.*\}$/s', $str)) {
-                    // array, or object notation
-
-                    if ($str{0} == '[') {
-                        $stk = array(SERVICES_JSON_IN_ARR);
-                        $arr = array();
-                    } else {
-                        if ($this->use & SERVICES_JSON_LOOSE_TYPE) {
-                            $stk = array(SERVICES_JSON_IN_OBJ);
-                            $obj = array();
-                        } else {
-                            $stk = array(SERVICES_JSON_IN_OBJ);
-                            $obj = new stdClass();
-                        }
-                    }
-
-                    array_push($stk, array('what'  => SERVICES_JSON_SLICE,
-                                           'where' => 0,
-                                           'delim' => false));
-
-                    $chrs = substr($str, 1, -1);
-                    $chrs = $this->reduce_string($chrs);
-
-                    if ($chrs == '') {
-                        if (reset($stk) == SERVICES_JSON_IN_ARR) {
-                            return $arr;
-
-                        } else {
-                            return $obj;
-
-                        }
-                    }
-
-                    //print("\nparsing {$chrs}\n");
-
-                    $strlen_chrs = strlen($chrs);
-
-                    for ($c = 0; $c <= $strlen_chrs; ++$c) {
-
-                        $top = end($stk);
-                        $substr_chrs_c_2 = substr($chrs, $c, 2);
-
-                        if (($c == $strlen_chrs) || (($chrs{$c} == ',') && ($top['what'] == SERVICES_JSON_SLICE))) {
-                            // found a comma that is not inside a string, array, etc.,
-                            // OR we've reached the end of the character list
-                            $slice = substr($chrs, $top['where'], ($c - $top['where']));
-                            array_push($stk, array('what' => SERVICES_JSON_SLICE, 'where' => ($c + 1), 'delim' => false));
-                            //print("Found split at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n");
-
-                            if (reset($stk) == SERVICES_JSON_IN_ARR) {
-                                // we are in an array, so just push an element onto the stack
-                                array_push($arr, $this->decode($slice));
-
-                            } elseif (reset($stk) == SERVICES_JSON_IN_OBJ) {
-                                // we are in an object, so figure
-                                // out the property name and set an
-                                // element in an associative array,
-                                // for now
-                                $parts = array();
-                                
-                                if (preg_match('/^\s*(["\'].*[^\\\]["\'])\s*:\s*(\S.*),?$/Uis', $slice, $parts)) {
-                                    // "name":value pair
-                                    $key = $this->decode($parts[1]);
-                                    $val = $this->decode($parts[2]);
-
-                                    if ($this->use & SERVICES_JSON_LOOSE_TYPE) {
-                                        $obj[$key] = $val;
-                                    } else {
-                                        $obj->{$key} = $val;
-                                    }
-                                } elseif (preg_match('/^\s*(\w+)\s*:\s*(\S.*),?$/Uis', $slice, $parts)) {
-                                    // name:value pair, where name is unquoted
-                                    $key = $parts[1];
-                                    $val = $this->decode($parts[2]);
-
-                                    if ($this->use & SERVICES_JSON_LOOSE_TYPE) {
-                                        $obj[$key] = $val;
-                                    } else {
-                                        $obj->{$key} = $val;
-                                    }
-                                }
-
-                            }
-
-                        } elseif ((($chrs{$c} == '"') || ($chrs{$c} == "'")) && ($top['what'] != SERVICES_JSON_IN_STR)) {
-                            // found a quote, and we are not inside a string
-                            array_push($stk, array('what' => SERVICES_JSON_IN_STR, 'where' => $c, 'delim' => $chrs{$c}));
-                            //print("Found start of string at {$c}\n");
-
-                        } elseif (($chrs{$c} == $top['delim']) &&
-                                 ($top['what'] == SERVICES_JSON_IN_STR) &&
-                                 ((strlen(substr($chrs, 0, $c)) - strlen(rtrim(substr($chrs, 0, $c), '\\'))) % 2 != 1)) {
-                            // found a quote, we're in a string, and it's not escaped
-                            // we know that it's not escaped becase there is _not_ an
-                            // odd number of backslashes at the end of the string so far
-                            array_pop($stk);
-                            //print("Found end of string at {$c}: ".substr($chrs, $top['where'], (1 + 1 + $c - $top['where']))."\n");
-
-                        } elseif (($chrs{$c} == '[') &&
-                                 in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) {
-                            // found a left-bracket, and we are in an array, object, or slice
-                            array_push($stk, array('what' => SERVICES_JSON_IN_ARR, 'where' => $c, 'delim' => false));
-                            //print("Found start of array at {$c}\n");
-
-                        } elseif (($chrs{$c} == ']') && ($top['what'] == SERVICES_JSON_IN_ARR)) {
-                            // found a right-bracket, and we're in an array
-                            array_pop($stk);
-                            //print("Found end of array at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n");
-
-                        } elseif (($chrs{$c} == '{') &&
-                                 in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) {
-                            // found a left-brace, and we are in an array, object, or slice
-                            array_push($stk, array('what' => SERVICES_JSON_IN_OBJ, 'where' => $c, 'delim' => false));
-                            //print("Found start of object at {$c}\n");
-
-                        } elseif (($chrs{$c} == '}') && ($top['what'] == SERVICES_JSON_IN_OBJ)) {
-                            // found a right-brace, and we're in an object
-                            array_pop($stk);
-                            //print("Found end of object at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n");
-
-                        } elseif (($substr_chrs_c_2 == '/*') &&
-                                 in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) {
-                            // found a comment start, and we are in an array, object, or slice
-                            array_push($stk, array('what' => SERVICES_JSON_IN_CMT, 'where' => $c, 'delim' => false));
-                            $c++;
-                            //print("Found start of comment at {$c}\n");
-
-                        } elseif (($substr_chrs_c_2 == '*/') && ($top['what'] == SERVICES_JSON_IN_CMT)) {
-                            // found a comment end, and we're in one now
-                            array_pop($stk);
-                            $c++;
-
-                            for ($i = $top['where']; $i <= $c; ++$i)
-                                $chrs = substr_replace($chrs, ' ', $i, 1);
-
-                            //print("Found end of comment at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n");
-
-                        }
-
-                    }
-
-                    if (reset($stk) == SERVICES_JSON_IN_ARR) {
-                        return $arr;
-
-                    } elseif (reset($stk) == SERVICES_JSON_IN_OBJ) {
-                        return $obj;
-
-                    }
-
-                }
-        }
-    }
-
-    /**
-     * @todo Ultimately, this should just call PEAR::isError()
-     */
-    function isError($data, $code = null)
-    {
-        if (class_exists('pear')) {
-            return PEAR::isError($data, $code);
-        } elseif (is_object($data) && (get_class($data) == 'services_json_error' ||
-                                 is_subclass_of($data, 'services_json_error'))) {
-            return true;
-        }
-
-        return false;
-    }
-}
-
-if (class_exists('PEAR_Error')) {
-
-    class Services_JSON_Error extends PEAR_Error
-    {
-        function Services_JSON_Error($message = 'unknown error', $code = null,
-                                     $mode = null, $options = null, $userinfo = null)
-        {
-            parent::PEAR_Error($message, $code, $mode, $options, $userinfo);
-        }
-    }
-
-} else {
-
-    /**
-     * @todo Ultimately, this class shall be descended from PEAR_Error
-     */
-    class Services_JSON_Error
-    {
-        function Services_JSON_Error($message = 'unknown error', $code = null,
-                                     $mode = null, $options = null, $userinfo = null)
-        {
-
-        }
-    }
-
-}
-    
-?>
diff --git a/apps/maarch_entreprise/tools/tafelTree/server/php5/LICENSE b/apps/maarch_entreprise/tools/tafelTree/server/php5/LICENSE
deleted file mode 100755
index e59acee720bde1b3b0a3504bec415c5c34ff1ab0..0000000000000000000000000000000000000000
--- a/apps/maarch_entreprise/tools/tafelTree/server/php5/LICENSE
+++ /dev/null
@@ -1,24 +0,0 @@
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
-Redistributions of source code must retain the above copyright notice,
-this list of conditions and the following disclaimer.
-
-Redistributions in binary form must reproduce the above copyright
-notice, this list of conditions and the following disclaimer in the
-documentation and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
-NO EVENT SHALL CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
-USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-http://pear.php.net/pepr/pepr-proposal-show.php?id=198
-http://mike.teczno.com/JSON/doc/
\ No newline at end of file
diff --git a/apps/maarch_entreprise/tools/tafelTree/server/php5/TafelTree.class.php b/apps/maarch_entreprise/tools/tafelTree/server/php5/TafelTree.class.php
deleted file mode 100755
index a010a886261f2a136ba24888a866e4d263eadb6d..0000000000000000000000000000000000000000
--- a/apps/maarch_entreprise/tools/tafelTree/server/php5/TafelTree.class.php
+++ /dev/null
@@ -1,223 +0,0 @@
-<?php 
-
-include_once ('JSON.php');
-include_once ('TafelTreeBranch.class.php');
-
-/**
- * 
- *
- * @author 	FTafel
- */
-class TafelTree {
-	
-	
-	/**
-	 *------------------------------------------------------------------------------
-	 *							Propriétés
-	 *------------------------------------------------------------------------------
-	 */
-	
-	/**
-	 * @access 	protected
-	 * @var 	string				$id					L'id de l'arbre
-	 */
-	protected  $id;
-	
-	/**
-	 * @access 	protected
-	 * @var 	string				$id					L'id de l'arbre
-	 */
-	protected $width;
-	
-	/**
-	 * @access 	protected
-	 * @var 	string				$id					L'id de l'arbre
-	 */
-	protected $height;
-	
-	/**
-	 * @access 	protected
-	 * @var 	string				$id					L'id de l'arbre
-	 */
-	protected $pathImgs;
-	
-	/**
-	 * @access 	protected
-	 * @var 	array				$options			Les options de load de l'arbre
-	 */
-	protected $options;
-	
-	
-	/**
-	 *------------------------------------------------------------------------------
-	 *							Constructeur
-	 *------------------------------------------------------------------------------
-	 */
-	
-	/**
-	 * Constructeur
-	 *
-	 * @access	public
-	 * @param	string				id					L'id de l'élément HTML conteneur
-	 * @param	string				imgBase				Le path vers les images
-	 * @param	integer				width				La largeur de l'arbre
-	 * @param	integer				height				La hauteur de l'arbre
-	 * @param	array				options				Les options de l'arbre
-	 */
-	public function __construct($id, $imgs = 'imgs/', $width = '100%', $height = 'auto', $options = array()){
-		$this->id = $id;
-		$this->pathImgs = $imgs;
-		$this->width = $width;
-		$this->height = $height;
-		$this->options = array();
-		foreach ($options as $property => $value) {
-			$this->options[$property] = $value;
-		}
-	}
-	
-	/**
-	 * Load les infos depuis une string JSON
-	 *
-	 * @access	public
-	 * @param 	string			$json					La string JSON
-	 * @return 	TafelTree								Le TafelTree créé
-	 */
-	public function loadJSON ($json, $id, $imgs = 'imgs/', $width = '100%', $height = 'auto', $options = array()) {
-		$tree = new TafelTree($id, $imgs, $width, $height, $options);
-		$service = new Services_JSON();
-		$tree->items = TafelTree::loadServiceJSON($service->decode($json));
-		return $tree;
-	}
-	
-	/**
-	 * Load les infos depuis un objet Service_JSON
-	 *
-	 * @access	public
-	 * @param 	Service_JSON	$service				L'objet Service_JSON
-	 * @return 	array									Les TafelTreeBranch créées
-	 */
-	public function loadServiceJSON ($service) {
-		$branches = array();
-		foreach ($service as $branch) {
-			$branches[] = TafelTreeBranch::loadServiceJSON($branch);
-		}
-		return $branches;
-	}
-	
-	
-	
-	/**
-	 *------------------------------------------------------------------------------
-	 *							Fonctions getters et setters
-	 *------------------------------------------------------------------------------
-	 */
-	
-	public function getId() {
-		return $this->id;
-	}
-	public function getPathImgs() {
-		return $this->pathImgs;
-	}
-	public function getWidth() {
-		return $this->width;
-	}
-	public function getHeight() {
-		return $this->height;
-	}
-	
-	
-	/**
-	 *------------------------------------------------------------------------------
-	 *							Fonctions publiques
-	 *------------------------------------------------------------------------------
-	 */
-	
-	/**
-	 * Ajoute une branche comme enfant
-	 *
-	 * @access 	public
-	 * @param 	TafelTreeBranch		$branch				La branche à ajouter
-	 * @return 	void
-	 */
-	public function add (TafelTreeBranch $branch) {
-		if (!isset($this->items)) {
-			$this->items = array();
-		}
-		$this->items[] = $branch;
-	}
-	
-	/**
-	 * Ajoute une sous-branche à l'arbre
-	 *
-	 * @access 	public
-	 * @param 	string			$id						L'id de la sous-branche
-	 * @param 	string			$txt					Le texte de la sous-branche
-	 * @param 	array			$options				Les informations complémentaires
-	 * @return 	TafelTreeBranch							La sous-branche
-	 */
-	public function addBranch ($id, $txt, $options = array()) {
-		$branch = new TafelTreeBranch ();
-		$branch->setId($id);
-		$branch->setText($txt);
-		foreach ($options as $property => $value) {
-			if ($property != 'items') {
-				$branch->setParam($property, $value);
-			}
-		}
-		if (isset($options['items'])) {
-			foreach ($options['items'] as $opt) {
-				$branch->addBranch(null, null, $opt);
-			}
-		}
-		if (!isset($this->items)) {
-			$this->items = array();
-		}
-		$this->items[] = $branch;
-		return $branch;
-	}
-	
-	/**
-	 * Affiche la méthode d'initialisation de l'arbre
-	 *
-	 * @access 	public
-	 * @param 	integer			$debug					Mettre 1 ou 2 pour avoir un affichage plus lisible
-	 * @return 	string									La string de la méthode JS d'initialisation
-	 */
-	public function display ($debug = 0) {
-		if ($debug == 1) {
-			$d = '<br />';
-		} elseif ($debug == 2) {
-			$d = "\n";
-		} else {
-			$d = '';
-		}
-		if (count($this->options) > 0) {
-			$s = new Services_JSON();
-			$options = ','.$s->encode($this->options);
-		}
-		$str = "var tree_".$this->id." = null;".$d;
-		$str .= "function TafelTreeInit() {".$d;
-		$str .= "tree_".$this->id." = new TafelTree (".$d;
-		$str .= "'".$this->getId()."', ".$d;
-		$str .= $this->getJSON().", ".$d;
-		$str .= "'".$this->getPathImgs()."', ".$d;
-		$str .= "'".$this->getWidth()."', ".$d;
-		$str .= "'".$this->getHeight()."'".$options;
-		$str .= ");".$d;
-		$str .= "};".$d;
-		return $str;
-	}
-	
-	/**
-	 * Affiche la structure JSON de l'arbre
-	 *
-	 * @access 	public
-	 * @return 	string									La structure JSON de l'arbre
-	 */
-	public function getJSON () {
-		$service = new Services_JSON();
-		return $service->encode($this->items);
-	}
-}
-
-?>
\ No newline at end of file
diff --git a/apps/maarch_entreprise/tools/tafelTree/server/php5/TafelTreeBranch.class.php b/apps/maarch_entreprise/tools/tafelTree/server/php5/TafelTreeBranch.class.php
deleted file mode 100755
index 8d4d98238d6517bbc3f47fff0a46bce165de388a..0000000000000000000000000000000000000000
--- a/apps/maarch_entreprise/tools/tafelTree/server/php5/TafelTreeBranch.class.php
+++ /dev/null
@@ -1,195 +0,0 @@
-<?php 
-
-/**
- * 
- *
- * @author 	FTafel
- */
-class TafelTreeBranch {
-	
-	
-	/**
-	 *------------------------------------------------------------------------------
-	 *							Propriétés
-	 *------------------------------------------------------------------------------
-	 */
-	
-	/**
-	 * @access 	public
-	 * @var 	string			$id						L'id de la branche
-	 */
-	public $id;
-	
-	/**
-	 * @access 	public
-	 * @var 	string			$txt					Le texte de la branche
-	 */
-	public $txt;
-	
-	
-	/**
-	 *------------------------------------------------------------------------------
-	 *							Constructeur
-	 *------------------------------------------------------------------------------
-	 */
-	
-	/**
-	 * Constructeur
-	 *
-	 * @access	public
-	 */
-	public function __construct(){
-	}
-	
-	/**
-	 * Load les infos depuis une string JSON
-	 *
-	 * @access	public
-	 * @param 	string			$json					La string JSON
-	 * @return 	array									Les TafelTreeBranch créées
-	 */
-	public function loadJSON ($json) {
-		$service = new Services_JSON();
-		$obj = $service->decode($json);
-		$branches = array();
-		foreach ($obj as $s) {
-			$branches[] = TafelTreeBranch::loadServiceJSON($s);
-		}
-		return $branches;
-	}
-	
-	/**
-	 * Load les infos depuis un objet Service_JSON
-	 *
-	 * @access	public
-	 * @param 	Service_JSON	$service				L'objet Service_JSON
-	 * @return 	array									Les TafelTreeBranch créées
-	 */
-	public function loadServiceJSON ($service) {
-		$branch = new TafelTreeBranch();
-		// On check toutes les propriétés de branche
-		foreach ($service as $property => $value) {
-			if ($property != 'items') {
-				$branch->setParam($property, $value);
-			}
-		}
-		// On check les enfants
-		if (isset($service) && isset($service->items)) {
-			$branch->items = array();
-			foreach ($service->items as $b) {
-				$branch->items[] = TafelTreeBranch::loadServiceJSON($b);
-			}
-		}
-		return $branch;
-	}
-	
-	
-	
-	/**
-	 *------------------------------------------------------------------------------
-	 *							Fonctions getters et setters
-	 *------------------------------------------------------------------------------
-	 */
-	
-	public function getId () {return $this->id;}
-	public function setId ($id) {$this->id = $id;}
-	
-	public function getText () {return $this->txt;}
-	public function setText ($txt) {$this->txt = $txt;}
-	
-	/**
-	 * Retourne la valeur d'une propriété, si elle existe
-	 *
-	 * @access 	public
-	 * @param 	string			$param					La propriété à chercher
-	 * @return 	string									La valeur de la propriété
-	 */
-	public function getParam ($param) {
-		if (isset($this->{$param})) {
-			return $this->{$param};
-		}
-	}
-	
-	/**
-	 * Set un paramètre pour la branche
-	 *
-	 * @access 	public
-	 * @param 	string			$param					Le nom de la propriété
-	 * @param 	string			$value					La valeur de la propriété
-	 */
-	public function setParam ($param, $value) {
-		if ($param == 'id') {
-			$this->setId($value);
-		} elseif ($param == 'txt') {
-			$this->setText($value);
-		} else {
-			$this->{$param} = $value;
-		}
-	}
-	
-	
-	/**
-	 *------------------------------------------------------------------------------
-	 *							Fonctions publiques
-	 *------------------------------------------------------------------------------
-	 */
-	
-	/**
-	 * Ajoute une branche comme enfant
-	 *
-	 * @access 	public
-	 * @param 	TafelTreeBranch		$branch				La branche à ajouter
-	 * @return 	void
-	 */
-	public function add (TafelTreeBranch $branch) {
-		if (!isset($this->items)) {
-			$this->items = array();
-		}
-		$this->items[] = $branch;
-	}
-	
-	/**
-	 * Ajoute une sous-branche à la branche courante
-	 *
-	 * @access 	public
-	 * @param 	string			$id						L'id de la sous-branche
-	 * @param 	string			$txt					Le texte de la sous-branche
-	 * @param 	array			$options				Les informations complémentaires
-	 * @return 	TafelTreeBranch							La sous-branche
-	 */
-	public function addBranch ($id, $txt, $options = array()) {
-		$branch = new TafelTreeBranch ();
-		$branch->setId($id);
-		$branch->setText($txt);
-		foreach ($options as $property => $value) {
-			if ($property != 'items') {
-				$branch->setParam($property, $value);
-			}
-		}
-		if (isset($options['items'])) {
-			foreach ($options['items'] as $opt) {
-				$branch->addBranch(null, null, $opt);
-			}
-		}
-		if (!isset($this->items)) {
-			$this->items = array();
-		}
-		$this->items[] = $branch;
-		return $branch;
-	}
-	
-	/**
-	 * Retourne la string JSON qui correspond à la structure de la branche et sous-branches
-	 *
-	 * @access 	public
-	 * @return 	string									La string JSON de la branche
-	 */
-	public function getJSON () {
-		$service = new Services_JSON();
-		return $service->encode($this);
-	}
-	
-	
-}
-
-?>
\ No newline at end of file
diff --git a/apps/maarch_entreprise/tools/tafelTree/server/php5_sample.php b/apps/maarch_entreprise/tools/tafelTree/server/php5_sample.php
deleted file mode 100755
index e589cf499846a95bbbc7a5a58e01791c82c87114..0000000000000000000000000000000000000000
--- a/apps/maarch_entreprise/tools/tafelTree/server/php5_sample.php
+++ /dev/null
@@ -1,93 +0,0 @@
-<?php 
-
-include_once ('php4/TafelTree.class.php');
-
-
-///
- // CASE 1 : load structure from a JSON string
- //
- ///
-
-// Check the JSON string
-$json = "[{id:'r1',txt:'root',items:[{id:'b1',txt:'branch 1',myPos:{x:1,y:9}},{id:'b2',txt:'branch 2'}]}]";
-
-// Load the JSON into an object (or array of objects)
-$branches = TafelTreeBranch::loadJSON($json);
-
-// Manipulate the object (or array of objects)
-$first = $branches[0];
-echo '<h3>CASE 1 : load structure from a JSON string</h3>';
-echo 'First JSON branch : '.$first->getText().' ('.$first->getId().')';
-echo '<ul>';
-foreach ($first->items as $next) {
-	echo '<li>Next JSON branch : '.$next->getText().' ('.$next->getId().')</li>';
-}
-echo '</ul>';
-
-
-
-
-
-
-///
- // CASE 2 : create a loader TafelTree from an object
- //
- ///
-
-// Create the tree (same options as javascript). In this sample, the file
-// drop.php doesn't exist. It's just to show how to manage ajax declarations
-$tree = new TafelTree('divTree', '../imgs/', null, null, array(
-	'generate' => true,
-	'onMouseOver'=>'myMouseover',
-	'onMouseOut'=>'myMouseout',
-	'defaultImg'=>'page.gif',
-	'lineStyle'=>'full',
-	'onDropAjax'=>array('funcDrop', 'drop.php')
-));
-
-// Add a root branch
-$b1 = $tree->addBranch('r1', 'root');
-
-// Add two branches into the root
-$b1->addBranch('b1', 'branch 1', array('onclick'=>'testclick','thing' => 1));
-$b1->addBranch('b2', 'branch 2');
-
-?>
-<html>
-<head>
-	<title>PHP4 sample</title>
-	<link rel="stylesheet" href="../css/tree.css" type="text/css" />
-	<script src="../js/prototype.js" type="text/javascript"></script>
-	<script src="../js/scriptaculous.js" type="text/javascript"></script>
-	<script src="../Tree.js" type="text/javascript"></script>
-	<script type="text/javascript">
-	function myMouseover (branch) {
-		branch.txt.style.color = 'red';
-	}
-	function myMouseout (branch) {
-		branch.txt.style.color = 'black';
-	}
-	function funcDrop (move, here, response, finished) {
-		return false;
-	}
-	function testclick(branch) {
-		
-	}
-<?php 
-// Display the function which is called at load
-// You can print only the JSON structure with
-// the function $tree->getJSON();
-echo $tree->display();
-?>
-	</script>
-</head>
-<body>
-
-<h3>CASE 2 : create a loader TafelTree from an object</h3>
-<div id="divTree"></div>
-
-<h3>CASE 3 : get only the JSON from an object</h3>
-<?php  echo $tree->getJSON(); ?>
-
-</body>
-</html>
diff --git a/apps/maarch_entreprise/tools/tafelTree/tests.php b/apps/maarch_entreprise/tools/tafelTree/tests.php
deleted file mode 100755
index 7b9dc84f7edc1fc4376b8ce6953c053429bc3dfb..0000000000000000000000000000000000000000
--- a/apps/maarch_entreprise/tools/tafelTree/tests.php
+++ /dev/null
@@ -1,72 +0,0 @@
-<html>
-<head>
-	<title>OpenOfficeGeneration Documentation</title>
-	<link rel="stylesheet" type="text/css" href="css/tree.css" />
-	<script type="text/javascript" src="js/prototype.js"></script>
-	<script type="text/javascript" src="js/scriptaculous.js"></script>
-	<script type="text/javascript" src="Tree.js"></script>
-</head>
-<body>
-
-			<script type="text/javascript">
-			function dstart (branch) {
-				var tree = branch.getTree();
-				tree.debug('start');
-			}
-			
-			function dend (branch) {
-				var tree = branch.getTree();
-				tree.debug('end');
-			}
-			function ondrop (b1, b2) {
-				return true;
-			}
-			var tree = null;
-			function TafelTreeInit () {
-				var struct = [
-				{
-				'id':'root1',
-				'checkbox':false,
-				'txt':'Element racine',
-				'items':[
-					{
-					'id':'child1',
-					'txt':'Un enfant'
-					},
-					{
-					'id':'child2',
-					'txt':'Un enfant 2',
-					'select' : true
-					},
-					{
-					'id':'child3',
-					'txt':'Un enfant 3'
-					},
-					{
-					'id':'child4',
-					'txt':'Un enfant 4'
-					}
-				]
-				}
-				];
-				tree = new TafelTree('test', struct, {
-					'generate' : true,
-					'imgBase' : 'imgs/',
-					'onDragStartEffect' : dstart,
-					'onDragEndEffect' : dend,
-					'onDrop' : ondrop,
-					'checkboxes':true
-				});
-			}
-			
-			function blu (branch) {
-				alert(branch.txt.className);
-			}
-			</script>
-			<div id="test"></div>
-			<p><a href="#" onclick="blu()">Effet</a></p>
-
-
-	
-</body>
-</html>
diff --git a/apps/maarch_entreprise/tools/tafelTree/unit/CVS/Entries b/apps/maarch_entreprise/tools/tafelTree/unit/CVS/Entries
deleted file mode 100755
index 36aabe2d03f60846b349c85d0c1ac88eb2d4c841..0000000000000000000000000000000000000000
--- a/apps/maarch_entreprise/tools/tafelTree/unit/CVS/Entries
+++ /dev/null
@@ -1,3 +0,0 @@
-/index.html/1.1/Fri Oct 20 09:21:16 2006//
-/test.css/1.1/Fri Oct 20 09:21:16 2006//
-D
diff --git a/apps/maarch_entreprise/tools/tafelTree/unit/CVS/Entries.Extra b/apps/maarch_entreprise/tools/tafelTree/unit/CVS/Entries.Extra
deleted file mode 100755
index fe86b140f0888a0430729463becf58ca62a94b49..0000000000000000000000000000000000000000
--- a/apps/maarch_entreprise/tools/tafelTree/unit/CVS/Entries.Extra
+++ /dev/null
@@ -1,2 +0,0 @@
-/index.html////*///
-/test.css////*///
diff --git a/apps/maarch_entreprise/tools/tafelTree/unit/CVS/Entries.Extra.Old b/apps/maarch_entreprise/tools/tafelTree/unit/CVS/Entries.Extra.Old
deleted file mode 100755
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/apps/maarch_entreprise/tools/tafelTree/unit/CVS/Entries.Old b/apps/maarch_entreprise/tools/tafelTree/unit/CVS/Entries.Old
deleted file mode 100755
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/apps/maarch_entreprise/tools/tafelTree/unit/CVS/Repository b/apps/maarch_entreprise/tools/tafelTree/unit/CVS/Repository
deleted file mode 100755
index 1c7fc12123719cebc172ca43c1bd0f2761a5afbc..0000000000000000000000000000000000000000
--- a/apps/maarch_entreprise/tools/tafelTree/unit/CVS/Repository
+++ /dev/null
@@ -1 +0,0 @@
-tafelTree/unit
diff --git a/apps/maarch_entreprise/tools/tafelTree/unit/CVS/Root b/apps/maarch_entreprise/tools/tafelTree/unit/CVS/Root
deleted file mode 100755
index 41b1b6a61c44ae12580a2a411a038f2bf45455f7..0000000000000000000000000000000000000000
--- a/apps/maarch_entreprise/tools/tafelTree/unit/CVS/Root
+++ /dev/null
@@ -1 +0,0 @@
-:ext:rekam@tafeltree.cvs.sourceforge.net:/cvsroot/tafeltree
diff --git a/apps/maarch_entreprise/tools/tafelTree/unit/index.html b/apps/maarch_entreprise/tools/tafelTree/unit/index.html
deleted file mode 100755
index 645a6d33504ac358da50ac0dd4607fc20df32299..0000000000000000000000000000000000000000
--- a/apps/maarch_entreprise/tools/tafelTree/unit/index.html
+++ /dev/null
@@ -1,172 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-	<title>Page title</title>
-	<script src="../js/prototype.js" type="text/javascript"></script>
-	<script src="../js/scriptaculous.js" type="text/javascript"></script>
-	<script src="../js/util.js" type="text/javascript"></script>
-	<script src="../js/unittest.js" type="text/javascript"></script>
-	<!-- other JavaScript includes -->
-	<script src="../Tree.js" type="text/javascript"></script>
-	<link rel="stylesheet" href="test.css" type="text/css" />
-	<link rel="stylesheet" href="../css/tree.css" type="text/css" />
-</head>
-<body>
-
-<!-- Log output -->
-<div id="testlog"> </div>
-
-<h3>Tree 1</h3>
-<div id="tree1"></div>
-<h3>Tree 2</h3>
-<div id="tree2"></div>
-<h3>Tree 3</h3>
-<div id="tree3"></div>
-
-
-<!-- Tests follow -->
-<script type="text/javascript">
-// <![CDATA[
-	var tree1 = null;
-	var tree2 = null;
-	var tree3 = null;
-	function dd (drag, drop) { return true; };
-	function open (branch, response) { return true; };
-	
-	new Test.Unit.Runner({
-    
-	setup: function() { with(this) {
-		var struct1 = [
-			{
-			'id':'root1',
-			'txt':'Root 1',
-			'img':'base.gif',
-			'items': [
-				{'id':'child','txt':'Child 1','img':'page.gif','imgopen':'folderopen.gif','imgclose':'folder.gif'}
-			]
-		}
-		];
-		if (!tree1) {
-			tree1 = new TafelTree('tree1', struct1, '../imgs/');
-			tree1.enableCheckboxesThreeState(true);
-			tree1.setOnDrop(dd);
-			tree1.setOnOpenPopulate(open, 'open.php');
-			tree1.enableCookies(false);
-    		tree1.generate();
-		}
-		var struct2 = [
-			{
-			'id':'root1_t2',
-			'txt':'Root 2',
-			'img':'base.gif',
-			'items': [
-				{'id':'child_t2','txt':'Child 2','img':'page.gif','imgopen':'folderopen.gif','imgclose':'folder.gif'},
-				{'id':'child2_t2','txt':'Child','img':'page.gif','imgopen':'folderopen.gif','imgclose':'folder.gif'
-				}
-			]
-		}
-		];
-		if (!tree2) {
-			tree2 = new TafelTree('tree2', struct2, '../imgs/');
-			tree2.setOnDrop(dd);
-			tree2.enableCookies(false);
-    		tree2.generate();
-		}
-		var struct3 = [
-			{
-			'id':'root1_t3',
-			'txt':'Root 3',
-			'img':'base.gif',
-			'items': [
-				{'id':'child_t3','txt':'Child 3','img':'page.gif','imgopen':'folderopen.gif','imgclose':'folder.gif'}
-			]
-		}
-		];
-		if (!tree3) {
-			tree3 = new TafelTree('tree3', struct3, '../imgs/');
-			tree3.setOnDrop(dd);
-			tree3.enableCookies(false);
-    		tree3.generate();
-		}
-    }},
-    
-    teardown: function() { with(this) {
-    }},
-    
-    testGetBranchById: function() { with(this) {
-    	var r = tree1.getBranchById('root1');
-    	assertEqual('root1', r.getId());
-    }},
-    
-    testInsertBranch: function() { with(this) {
-    	var item1 = {'id':'child_last','txt':'child_last','img':'page.gif'};
-    	var item2 = {'id':'child_first','txt':'child_first','img':'page.gif'};
-    	var item3 = {'id':'child_before','txt':'child_before','img':'page.gif'};
-    	var item4 = {'id':'child_after','txt':'child_after','img':'page.gif'};
-    	tree1.insertBranch('child', item1, false, false);
-    	tree1.insertBranch('child', item2, false, true);
-    	tree1.insertBranch('child', item3, true, true);
-    	tree1.insertBranch('child', item4, true, false);
-    	var b1 = tree1.getBranchById('child_last');
-    	var b2 = tree1.getBranchById('child_first');
-    	var b3 = tree1.getBranchById('child_before');
-    	var b4 = tree1.getBranchById('child_after');
-    	assertEqual(item1.id, b1.getId());
-    	assertEqual(item2.id, b2.getId());
-    	assertEqual(item3.id, b3.getId());
-    	assertEqual(item4.id, b4.getId());
-    }},
-    
-    testBindUniDirectional: function() { with(this) {
-    	tree1.bindAsUnidirectional(tree2);
-    	assertEqual(true, tree1.isBindedWith(tree2));
-    	assertEqual('', tree2.isBindedWith(tree1));
-    }},
-    
-    testBindBiDirectional: function() { with(this) {
-    	tree3.bind(tree2);
-    	assertEqual(true, tree3.isBindedWith(tree2));
-    	assertEqual(true, tree2.isBindedWith(tree3));
-    	assertEqual(true, tree1.isBindedWith(tree2));
-    }},
-    
-    testCountBranches: function() { with(this) {
-    	assertEqual(6, tree1.countBranches());
-    }},
-    
-    testGetOpenedBranches: function() { with(this) {
-    	var b = tree1.getOpenedBranches();
-    	assertEqual(2, b.length);
-    	assertEqual('root1', b[0].getId());
-    	assertEqual('child', b[1].getId());
-    }},
-    
-    testGetCheckedBranches: function() { with(this) {
-    	var b = tree1.getCheckedBranches();
-    	assertEqual(0, b.length);
-    }},
-    
-    testBranchOperations: function() { with(this) {
-    	var b = tree1.getBranchById('child');
-    	b.check(1);
-    	b.openIt(false);
-    	assertEqual(1, b.struct.check);
-    	assertEqual(true, b.isChecked());
-    	assertEqual('', b.struct.open);
-    	assertEqual('', b.isOpened());
-    }},
-    
-    testBranchMoves: function() { with(this) {
-    	var b1 = tree3.getBranchById('child_t3');
-    	b1.move('child');
-    	assertEqual('', tree1.getBranchById('child_t3'));
-    	var b2 = tree2.getBranchById('child_t2');
-    	b2.move('child_t3');
-    	assertNotEqual('', tree3.getBranchById('child_t2'));
-    }}    
-	}, "testlog");
-// ]]>
-</script>
-
-</body>
-</html>
diff --git a/apps/maarch_entreprise/tools/tafelTree/unit/test.css b/apps/maarch_entreprise/tools/tafelTree/unit/test.css
deleted file mode 100755
index 8ba4fede528f94ef0a7c5a3be7dd70025f47b54c..0000000000000000000000000000000000000000
--- a/apps/maarch_entreprise/tools/tafelTree/unit/test.css
+++ /dev/null
@@ -1,40 +0,0 @@
-body, div, p, h1, h2, h3, ul, ol, span, a, table, td, form, img, li {
-  font-family: sans-serif;
-}
-
-body {
-  font-size:0.8em;
-}
-
-#log {
-  padding-bottom: 1em;
-  border-bottom: 2px solid #000;
-  margin-bottom: 2em;
-}
-
-#logsummary {
-  margin-bottom: 1em;
-  padding: 1ex;
-  border: 1px solid #000;
-  font-weight: bold;
-}
-
-#logtable {
-  width:100%;
-  border-collapse: collapse;
-  border: 1px dotted #666;
-}
-
-#logtable td, #logtable th {
-  text-align: left;
-  padding: 3px 8px;
-  border: 1px dotted #666;
-}
-
-#logtable .passed {
-  background-color: #cfc;
-}
-
-#logtable .failed, #logtable .error {
-  background-color: #fcc;
-}
\ No newline at end of file
diff --git a/apps/maarch_entreprise/unsetAttachmentContact.php b/apps/maarch_entreprise/unsetAttachmentContact.php
deleted file mode 100755
index 373b00046b8fa1c63045a051eaf3f6d1429d4dc8..0000000000000000000000000000000000000000
--- a/apps/maarch_entreprise/unsetAttachmentContact.php
+++ /dev/null
@@ -1,37 +0,0 @@
-<?php
-
-/*
-*   Copyright 2008-2015 Maarch
-*
-*   This file is part of Maarch Framework.
-*
-*   Maarch Framework is free software: you can redistribute it and/or modify
-*   it under the terms of the GNU General Public License as published by
-*   the Free Software Foundation, either version 3 of the License, or
-*   (at your option) any later version.
-*
-*   Maarch Framework is distributed in the hope that it will be useful,
-*   but WITHOUT ANY WARRANTY; without even the implied warranty of
-*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-*   GNU General Public License for more details.
-*
-*   You should have received a copy of the GNU General Public License
-*   along with Maarch Framework.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-/*
-* @brief  unset session
-*
-*
-* @file
-* @author <dev@maarch.org>
-* @date $date$
-* @version $Revision$
-* @ingroup apps
-*/
-
-require_once('core/class/class_request.php');
-$core_tools = new core_tools();
-$core_tools->test_user();
-
-unset($_SESSION['AttachmentContact']);
\ No newline at end of file
diff --git a/apps/maarch_entreprise/xml/IVS/requests_definitions.xml b/apps/maarch_entreprise/xml/IVS/requests_definitions.xml
index 6bc9aa266e4e9f09d74395a98da4ba5200052ba2..ccae02640bbbf04eee92af1523f93293fdcb6804 100755
--- a/apps/maarch_entreprise/xml/IVS/requests_definitions.xml
+++ b/apps/maarch_entreprise/xml/IVS/requests_definitions.xml
@@ -95,44 +95,6 @@
       <parameter name="page" value="documents_list_mlb_search_adv"/>
       <parameter name="display" value="true"/>
     </requestDefinition>
-    <requestDefinition method="GET" path="/apps/maarch_entreprise/index.php" validationRule="document_history" >
-      <parameter name="dir" value="indexing_searching"/>
-      <parameter name="page" value="document_history"/>
-      <parameter name="display" value="true"/>
-      <parameter name="coll_id"/>
-      <parameter name="id"/>
-      <parameter name="load"/>
-      <parameter name="size"/>
-    </requestDefinition>
-
-    <requestDefinition method="POST" path="/apps/maarch_entreprise/index.php" validationRule="document_history" >
-      <parameter name="dir" value="indexing_searching"/>
-      <parameter name="page" value="document_history"/>
-      <parameter name="display" value="true"/>
-      <parameter name="coll_id"/>
-      <parameter name="id"/>
-      <parameter name="size"/>
-    </requestDefinition>
-
-    <requestDefinition method="GET" path="/apps/maarch_entreprise/index.php" validationRule="document_history" >
-      <parameter name="dir" value="indexing_searching"/>
-      <parameter name="page" value="document_workflow_history"/>
-      <parameter name="display" value="true"/>
-      <parameter name="coll_id"/>
-      <parameter name="id"/>
-      <parameter name="load"/>
-      <parameter name="size"/>
-    </requestDefinition>
-
-    <requestDefinition method="POST" path="/apps/maarch_entreprise/index.php" validationRule="document_history" >
-      <parameter name="dir" value="indexing_searching"/>
-      <parameter name="page" value="document_workflow_history"/>
-      <parameter name="display" value="true"/>
-      <parameter name="coll_id"/>
-      <parameter name="id"/>
-      <parameter name="size"/>
-    </requestDefinition>
-
     <requestDefinition method="POST" path="/apps/maarch_entreprise/index.php" validationRule="multiLink" >
       <parameter name="dir" value="indexing_searching"/>
       <parameter name="page" value="multiLink"/>
diff --git a/apps/maarch_entreprise/xml/IVS/validation_rules.xml b/apps/maarch_entreprise/xml/IVS/validation_rules.xml
index 690143a50fb4b1a51a8f2164d58c687f80caf354..d4894d97f69ad008f714d1075289c1aedc61e66c 100755
--- a/apps/maarch_entreprise/xml/IVS/validation_rules.xml
+++ b/apps/maarch_entreprise/xml/IVS/validation_rules.xml
@@ -327,19 +327,6 @@
       <parameter name="action_form" type="identifier" />
       <parameter name="exclude" type="integer" />
     </validationRule>
-    
-    <validationRule name="document_history" extends="standardForm" mode="error">  
-      <parameter name="coll_id" type="collection_list" />
-      <parameter name="id" type="integer" />
-      <parameter name="load" type="boolean" />
-      <parameter name="dir" type="identifier" />
-      <parameter name="size" type="identifier" />
-      <parameter name="url" type="string" />
-      <parameter name="filter" type="identifier" />
-      <parameter name="history_date_start" type="date" />
-      <parameter name="value" type="string" />
-
-    </validationRule>
 
     <validationRule name="little_details" extends="standardForm" mode="error">  
       <parameter name="value" type="integer" />
diff --git a/apps/maarch_entreprise/xml/htmlColors.xml b/apps/maarch_entreprise/xml/htmlColors.xml
deleted file mode 100755
index 4c63ecff6ce65d902aa33cf336e5ba4727f1984d..0000000000000000000000000000000000000000
--- a/apps/maarch_entreprise/xml/htmlColors.xml
+++ /dev/null
@@ -1,59 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<root>
-    <color>
-        <id>beige_style</id>
-        <label>_BEIGE</label>
-    </color>
-    <color>
-        <id>blue_style</id>
-        <label>_BLUE</label>
-    </color>
-    <color>
-        <id>blue_style_big</id>
-        <label>_BLUE_BOLD</label>
-    </color>
-    <color>
-        <id>grey_style</id>
-        <label>_GREY</label>
-    </color>
-    <color>
-        <id>yellow_style</id>
-        <label>_YELLOW</label>
-    </color>   
-    <color>
-        <id>brown_style</id>
-        <label>_BROWN</label>
-    </color>
-    <color>
-        <id>black_style</id>
-        <label>_BLACK</label>
-    </color> 
-    <color>
-        <id>black_style_big</id>
-        <label>_BLACK_BOLD</label>
-    </color>    
-    <color>
-        <id>orange_style</id>
-        <label>_ORANGE</label>
-    </color>
-    <color>
-        <id>orange_style_big</id>
-        <label>_ORANGE_BOLD</label>
-    </color>
-    <color>
-        <id>pink_style</id>
-        <label>_PINK</label>
-    </color>
-    <color>
-        <id>red_style</id>
-        <label>_RED</label>
-    </color> 
-    <color>
-        <id>green_style</id>
-        <label>_GREEN</label>
-    </color>   
-    <color>
-        <id>violet_style</id>
-        <label>_PURPLE</label>
-    </color>
-</root>
\ No newline at end of file
diff --git a/core/class/LinkController.php b/core/class/LinkController.php
deleted file mode 100755
index acc1f6a16a63020b24ae3a717f84f78f3f8769ba..0000000000000000000000000000000000000000
--- a/core/class/LinkController.php
+++ /dev/null
@@ -1,290 +0,0 @@
-<?php
-/**
-* Copyright Maarch since 2008 under licence GPLv3.
-* See LICENCE.txt file at the root folder for more details.
-* This file is part of Maarch software.
-
-*
-* @brief  LinkController
-*
-* @author  dev <dev@maarch.org>
-* @ingroup core
-*/
-
-//Loads the require class
-require_once 'core/class/class_history.php';
-include 'apps'.DIRECTORY_SEPARATOR.$_SESSION['config']['app_id'].DIRECTORY_SEPARATOR.'definition_mail_categories.php';
-
-class LinkController
-{
-    private $previousId = ' ';
-    private $level = 0;
-
-    public function formatMap($arrayToFormat, $sens)
-    {
-        $db = new Database();
-        $core = new core_tools();
-        $core->test_user();
-
-        $return = '';
-
-        ++$this->level;
-
-        foreach ($arrayToFormat as $key => $value) {
-            //GET RES INFOS
-            $infos = [];
-            $stmt = $db->query('SELECT dest_user, status FROM res_letterbox WHERE res_id = ?', array($key));
-            $otherInfos = $stmt->fetchObject();
-            $chronoNumber = $this->getAltIdentifier($key);
-
-            if (!empty($infos['exp_contact_id']['show_value'])) {
-                $contact = $infos['exp_contact_id']['show_value'];
-            } elseif (!empty($infos['dest_contact_id']['show_value'])) {
-                $contact = $infos['dest_contact_id']['show_value'];
-            } elseif (!empty($infos['exp_user_id']['show_value'])) {
-                $contact = $infos['exp_user_id']['show_value'];
-            } elseif (!empty($infos['dest_user_id']['show_value'])) {
-                $contact = $infos['dest_user_id']['show_value'];
-            } elseif ($infos['category_id']['value'] != 'attachment') {
-                $contact = _MULTI_CONTACT;
-            }
-
-            $infos['subject'] = preg_replace("/\r\n|\r|\n/", '<br/>', $infos['subject']);
-            if (!empty($infos['subject']['show_value'])) {
-                $subjectShowValue = $infos['subject']['show_value'];
-            }
-
-            $return .= '<div id="ged_'.$key.$sens.'" class="linkDiv">';
-            $return .= '<table style="width:100%;text-align:left;font-size:15px;cursor:pointer;" title="'._ACCESS_TO_DETAILS.'">';
-            $return .= '<tr>';
-            $status = $this->getStatus($otherInfos->status);
-            $img_class = substr($status['img_filename'], 0, 2);
-            $return .= '<td style="width:14%;text-align:center;" title="'.$status['label_status'].'" onclick="window.top.location.href=\'index.php?page=details&dir=indexing_searching&id='.$key.'\'">';
-            $return .= '<i class="'.$img_class.' '.$status['img_filename'].' '.$img_class.'-2x" ></i> ';
-            $return .= '</td>';
-            $return .= '<td colspan="2" onclick="window.top.location.href=\'index.php?page=details&dir=indexing_searching&id='.$key.'\'">';
-            $return .= '<b>'.$subjectShowValue.'</b>';
-            $return .= '</td>';
-            $return .= '<td colspan="2" onclick="window.top.location.href=\'index.php?page=details&dir=indexing_searching&id='.$key.'\'">';
-            $return .= '</td>';
-            $return .= '<td colspan="3" style="font-size:12px;" align="right" title="'._CONTACT.'" onclick="window.top.location.href=\'index.php?page=details&dir=indexing_searching&id='.$key.'\'">';
-            $return .= '<i class="fa fa-user fa-2x" style="font-size:10px;"></i> ';
-            $return .= $contact;
-            $return .= '</td>';
-            $return .= '</tr>';
-            $return .= '<tr>';
-            $return .= '<td style="width:14%;text-align:center;" onclick="window.top.location.href=\'index.php?page=details&dir=indexing_searching&id='.$key.'\'">';
-            $return .= (_ID_TO_DISPLAY == 'res_id' ? $key : $chronoNumber);
-            $return .= '</td>';
-            $return .= '<td style="font-size:12px;width:16%;" onclick="window.top.location.href=\'index.php?page=details&dir=indexing_searching&id='.$key.'\'">';
-            $return .= $infos['category_id']['show_value'];
-            $return .= '</td>';
-            $return .= '<td style="font-size:12px;width:14%" title="'._DOC_DATE.'" onclick="window.top.location.href=\'index.php?page=details&dir=indexing_searching&id='.$key.'\'">';
-            $return .= '<i class="fa fa-calendar-alt fa-2x" style="font-size:10px;"></i> ';
-            $date = explode('-', substr($infos['doc_date']['show_value'], 0, 10));
-            $return .= $date[2].' '.$date[1].' '.$date[0];
-            $return .= '</td>';
-            $return .= '<td style="font-size:12px;width:14%" title="'._DEST_USER.'" onclick="window.top.location.href=\'index.php?page=details&dir=indexing_searching&id='.$key.'\'">';
-            $return .= '<i class="fa fa-share-alt fa-2x" style="font-size:10px;"></i> ';
-            $return .= $otherInfos->dest_user;
-            $return .= '</td>';
-            $return .= '<td style="font-size:12px;width:24%" title="'._DEPARTMENT_DEST.'" onclick="window.top.location.href=\'index.php?page=details&dir=indexing_searching&id='.$key.'\'">';
-            $return .= '<i class="fa fa-sitemap fa-2x" style="font-size:10px;"></i> ';
-            $return .= $infos['destination']['show_value'];
-            $return .= '</td>';
-            if ($core->is_module_loaded('visa')) {
-                require_once 'modules'.DIRECTORY_SEPARATOR.'visa'.DIRECTORY_SEPARATOR
-                            .'class'.DIRECTORY_SEPARATOR
-                            .'class_modules_tools.php';
-                $return .= '<td style="font-size:12px;width:16%" title="'._VISA_USERS.'">';
-
-                $visa = new visa();
-
-                $users_visa_list = $visa->getUsersCurrentVis($key);
-                if (!empty($users_visa_list)) {
-                    $users_visa_list = implode(', ', $users_visa_list);
-                    $return .= '<i class="fa fa-list-ol fa-2x" style="font-size:10px;"></i> ';
-                    $return .= $users_visa_list;
-                }
-                $return .= '</td>';
-            }
-
-            if ($core->test_service('add_links', 'apps', false) && $this->level <= 1) {
-                if ($sens == 'asc') {
-                    $delParent = $key;
-                    $delChild = $_SESSION['doc_id'];
-                } else {
-                    $delParent = $_SESSION['doc_id'];
-                    $delChild = $key;
-                }
-                $return .= '<td align="right">';
-                $return .= '<div align="center" class="iconDoc"><a href="index.php?display=true&dir=indexing_searching&page=view_resource_controler&id='.$key.'" target="_blank" title="'._VIEW_DOC.'"><i class="fa fa-download fa-2x" title="'._VIEW_DOC.'"></i><span><img src="../../rest/resources/'.$key.'/thumbnail"></span></a></div>';
-                $return .= '</td>';
-                $return .= '<td align="right">';
-                $return .= '<span onclick="';
-                $return .= 'if(confirm(\'Voulez-vous supprimer la liaison ?\')){';
-                $return .= 'addLinks(';
-                $return .= '\''.$_SESSION['config']['businessappurl'].'index.php?page=add_links&display=true\', ';
-                $return .= '\''.$delChild.'\' ,';
-                $return .= '\''.$delParent.'\' ,';
-                $return .= '\'del\',';
-
-                $return .= '\'res_view_letterbox\'';
-
-                $return .= ');}';
-                $return .= '">';
-                $return .= '<i class="fa fa-unlink fa-2x" title="'._DEL_LINK.'" style="cursor:pointer;"></i>';
-                $return .= '</span>';
-                $return .= '</td>';
-            }
-            $return .= '</tr>';
-            $return .= '</table>';
-            if (is_array($value)) {
-                $return .= $this->formatMap($value, $sens);
-            }
-            $return .= '</div>';
-        }
-
-        --$this->level;
-
-        return $return;
-    }
-
-    public function getMap($parentId, $collection, $sens)
-    {
-        if (!empty($parentId) && !empty($collection)) {
-            if ($sens == 'asc') {
-                $links = $this->getLinksAsc($parentId, $collection);
-            } else {
-                $links = $this->getLinksDesc($parentId, $collection);
-            }
-            $linksArray = explode('||', $links);
-
-            for ($i = 0; $i < count($linksArray); ++$i) {
-                if ($linksArray[$i] != '') {
-                    if (!preg_match('/'.' '.$linksArray[$i].' '.'/', $this->previousId)) {
-                        $this->previousId .= $parentId.' ';
-                        $return[$linksArray[$i]] = $this->getMap($linksArray[$i], $collection, $sens);
-                    }
-                } else {
-                    $return = 'last';
-                }
-            }
-        }
-
-        return $return;
-    }
-
-    private function getLinksDesc($parentId, $collection)
-    {
-        $db = new Database();
-
-        $query = 'SELECT res_child FROM res_linked, res_letterbox WHERE coll_id=? AND res_parent=? and res_letterbox.res_id = res_child and status != \'DEL\'';
-        $stmt = $db->query($query, array($collection, $parentId));
-        if ($stmt) {
-            $i = 0;
-            $links = '';
-            while ($row = $stmt->fetchObject()) {
-                $links .= $row->res_child.'||';
-                ++$i;
-            }
-            if ($i > 0) {
-                $return = substr($links, 0, -2);
-            }
-        } else {
-            $return = 'Problème lors de la requête : '.$query;
-        }
-
-        return $return;
-    }
-
-    private function getLinksAsc($parentId, $collection)
-    {
-        $db = new Database();
-
-        $query = 'SELECT res_parent FROM res_linked, res_letterbox WHERE coll_id=? AND res_child=? and res_letterbox.res_id = res_parent and status != \'DEL\'';
-        $stmt = $db->query($query, array($collection, $parentId));
-        if ($stmt) {
-            $i = 0;
-            $links = '';
-            while ($row = $stmt->fetchObject()) {
-                $links .= $row->res_parent.'||';
-                ++$i;
-            }
-            if ($i > 0) {
-                $return = substr($links, 0, -2);
-            }
-        } else {
-            $return = 'Problème lors de la requête : '.$query;
-        }
-
-        return $return;
-    }
-
-    public function getStatus($status)
-    {
-        $db = new Database();
-
-        $query = 'SELECT label_status, img_filename FROM status WHERE id = ?';
-        $stmt = $db->query($query, array($status));
-        if ($stmt) {
-            $i = 0;
-            while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
-                $return = $row;
-                ++$i;
-            }
-        }
-
-        return $return;
-    }
-
-    public function nbDirectLink($id, $collection, $sens)
-    {
-        $db = new Database();
-
-        $i = 0;
-        if ($sens == 'desc' || $sens == 'all') {
-            $query = 'SELECT res_child FROM res_linked, res_letterbox WHERE coll_id=? AND res_parent=? AND res_letterbox.res_id = res_child AND status != \'DEL\'';
-            $stmt = $db->query($query, array($collection, $id));
-            if ($stmt) {
-                while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
-                    ++$i;
-                }
-            }
-        }
-        if ($sens == 'asc' || $sens == 'all') {
-            $query = 'SELECT res_parent FROM res_linked, res_letterbox WHERE coll_id=? AND res_child=? AND res_letterbox.res_id = res_parent AND status != \'DEL\'';
-            $stmt = $db->query($query, array($collection, $id));
-            if ($stmt) {
-                while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
-                    ++$i;
-                }
-            }
-        }
-
-        return $i;
-    }
-
-    public function getAltIdentifier($resId)
-    {
-        $db = new Database();
-
-        $altIdentifierRequest = 'SELECT alt_identifier FROM res_letterbox where res_id = ?';
-        $stmt = $db->query($altIdentifierRequest, array($resId));
-        while ($altIdentifierResult = $stmt->fetchObject()) {
-            $altIdentifier = $altIdentifierResult->alt_identifier;
-        }
-
-        return $altIdentifier;
-    }
-
-    public function getAltIdentifierConcatened($array)
-    {
-        $_SESSION['chronoNumber'] = '';
-        for ($j = 0; $j < count($array); ++$j) {
-            $_SESSION['chronoNumber'] .= $this->getAltIdentifier($array[$j]).', ';
-        }
-
-        return substr($_SESSION['chronoNumber'], 0, -2);
-    }
-}
diff --git a/modules/basket/class/class_modules_tools_Abstract.php b/modules/basket/class/class_modules_tools_Abstract.php
index 11ba1f5163104711f34d2aa2bb0b5564e297b695..657bb6aded77fbab01e0ed3b64529feaf4075a05 100755
--- a/modules/basket/class/class_modules_tools_Abstract.php
+++ b/modules/basket/class/class_modules_tools_Abstract.php
@@ -263,34 +263,6 @@ abstract class basket_Abstract extends Database
         }
     }
 
-    public function translates_actions_to_json($actions = array())
-    {
-        $jsonActions = '{';
-
-        if (count($actions) > 0) {
-            for ($i = 0; $i < count($actions); $i ++) {
-                $jsonActions .= "'"  . $actions[$i]['ID'] . "' : { 'where' : '"
-                . addslashes($actions[$i]['WHERE']) . "',";
-                $jsonActions .= "'id_status' : '" . $actions[$i]['ID_STATUS']
-                . "', 'confirm' : '" ;
-                if (isset($actions[$i]['CONFIRM'])) {
-                    $jsonActions .= $actions[$i]['CONFIRM'];
-                } else {
-                    $jsonActions .= 'false';
-                }
-                $jsonActions .= "', ";
-                $jsonActions .= "'id_action_page' : '"
-                . $actions[$i]['ACTION_PAGE'] . "'}, ";
-            }
-            $jsonActions = preg_replace('/, $/', '}', $jsonActions);
-        }
-
-        if ($jsonActions == '{') {
-            $jsonActions = '{}';
-        }
-        return $jsonActions;
-    }
-
     /**
      * Returns in an array all the data of a basket for a user
      *(checks if the basket is a redirected one and then if already a virtual one)
diff --git a/modules/notifications/css/template.css b/modules/notifications/css/template.css
index ecb3f7585cd9117d667d0472fd5f2359a8af2cdb..aa0bca7cad92c37472ccc8e627a0290cb5213ca2 100755
--- a/modules/notifications/css/template.css
+++ b/modules/notifications/css/template.css
@@ -4,13 +4,7 @@
 html {
     height: 100%;
 }
-.border_on
-{
-    border-style:solid;
-    border-color:#003399;
-    border-width:thin;
-    margin-top: 10px;
-}
+
 body {
     color: #666;
     /*background: white url(static.php?filename=bg_body.gif) top center repeat-y;*/
diff --git a/modules/tags/css/template.css b/modules/tags/css/template.css
index ecb3f7585cd9117d667d0472fd5f2359a8af2cdb..aa0bca7cad92c37472ccc8e627a0290cb5213ca2 100755
--- a/modules/tags/css/template.css
+++ b/modules/tags/css/template.css
@@ -4,13 +4,7 @@
 html {
     height: 100%;
 }
-.border_on
-{
-    border-style:solid;
-    border-color:#003399;
-    border-width:thin;
-    margin-top: 10px;
-}
+
 body {
     color: #666;
     /*background: white url(static.php?filename=bg_body.gif) top center repeat-y;*/
diff --git a/modules/visa/lang/en.php b/modules/visa/lang/en.php
index aa86c6a2aefb671d3c74d99e4eb1d4559b78ceac..baac6cf3358778f4448a2a3aa4c401369783e681 100755
--- a/modules/visa/lang/en.php
+++ b/modules/visa/lang/en.php
@@ -37,9 +37,6 @@ if (!defined('_NO_VISA')) {
 if (!defined('_NO_RESPONSE_PROJECT_VISA')) {
     define('_NO_RESPONSE_PROJECT_VISA', 'Please, integrate at least one attachment to signature book');
 }
-if (!defined('_MAIL_HAS_NO_RESPONSE_PROJECT')) {
-    define('_MAIL_HAS_NO_RESPONSE_PROJECT', 'These mails have no attachments in signatory book');
-}
 if (!defined('_NO_CONVERTED_PDF_VISA')) {
     define('_NO_CONVERTED_PDF_VISA', 'Please edit your attachment(s)');
 }
diff --git a/modules/visa/lang/fr.php b/modules/visa/lang/fr.php
index 2589e0c49546837d2cb6033fc66b4302475f20dc..0d6cab89f501c729d54034bd122824304803f9e4 100755
--- a/modules/visa/lang/fr.php
+++ b/modules/visa/lang/fr.php
@@ -37,9 +37,6 @@ if (!defined('_NO_VISA')) {
 if (!defined('_NO_RESPONSE_PROJECT_VISA')) {
     define('_NO_RESPONSE_PROJECT_VISA', 'Veuillez intégrer au moins une pièce jointe au parapheur.');
 }
-if (!defined('_MAIL_HAS_NO_RESPONSE_PROJECT')) {
-    define('_MAIL_HAS_NO_RESPONSE_PROJECT', 'Ces courriers n\'ont pas de pièce jointe intégrée au parapheur');
-}
 if (!defined('_NO_CONVERTED_PDF_VISA')) {
     define('_NO_CONVERTED_PDF_VISA', 'Veuillez éditer votre/vos pièce(s) jointe(s)');
 }
diff --git a/modules/visa/lang/nl.php b/modules/visa/lang/nl.php
index ce0cbfdf75cb6047a85ce68e15392ab34be6a5f1..5474d5dd5fcc1eace20b8798f980dc90aad0e3e4 100755
--- a/modules/visa/lang/nl.php
+++ b/modules/visa/lang/nl.php
@@ -37,9 +37,6 @@ if (!defined('_NO_VISA')) {
 if (!defined('_NO_RESPONSE_PROJECT_VISA')) {
     define('_NO_RESPONSE_PROJECT_VISA', 'Gelieve minstens één bijlage in de parafeerder te integreren.');
 }
-if (!defined('_MAIL_HAS_NO_RESPONSE_PROJECT')) {
-    define('_MAIL_HAS_NO_RESPONSE_PROJECT', 'Deze brieven hebben geen bijlage die in de handtekening is geïntegreerd.');
-}
 if (!defined('_NO_CONVERTED_PDF_VISA')) {
     define('_NO_CONVERTED_PDF_VISA', 'Bewerk uw bijlage(n)');
 }