Index: /extensions/GrumPluginClasses/classes/GPCCategorySelector.class.inc.php
===================================================================
--- /extensions/GrumPluginClasses/classes/GPCCategorySelector.class.inc.php	(revision 7175)
+++ /extensions/GrumPluginClasses/classes/GPCCategorySelector.class.inc.php	(revision 7175)
@@ -0,0 +1,434 @@
+<?php
+/**
+ * -----------------------------------------------------------------------------
+ * class name     : GPCCategorySelector
+ * class version  : 1.0.0
+ * plugin version : 3.3.0
+ * date           : 2010-10-09
+ * -----------------------------------------------------------------------------
+ * author: grum at piwigo.org
+ * << May the Little SpaceFrog be with you >>
+ * -----------------------------------------------------------------------------
+ *
+ * :: HISTORY
+ *
+| release | date       |
+| 1.0.0   | 2010/04/18 | * create class
+|         |            |
+|         |            |
+|         |            |
+|         |            |
+|         |            |
+|         |            |
+|         |            |
+|         |            |
+ *
+ *
+ * -----------------------------------------------------------------------------
+ *
+ *  this class provides methods to easily insert a hierarchical categories
+ *  selector in the HTML pages
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * Const
+ *  - GPCCategorySelector::FILTER_ALL
+ *  - GPCCategorySelector::FILTER_ACCESSIBLE
+ *  - GPCCategorySelector::FILTER_PUBLIC
+ *  there is no filter 'private only' or 'not accessible only' because these
+ *  kind of categories are probably sub categories of 'public' categories
+ *
+ *
+ * Methods
+ *  - public __construct($options)
+ *  - public __destruct()
+ *  - public setFilter($filter)
+ *  - public getFilter()
+ *  - public setGalleryRoot($galleryRoot)
+ *  - public getGalleryRoot()
+ *  - public getCategoryList()
+ *
+ *
+ * -----------------------------------------------------------------------------
+ *
+ */
+
+
+class GPCCategorySelector
+{
+  const FILTER_ALL            = 'all';         // no filter, all categories are listed
+  const FILTER_ACCESSIBLE     = 'accessible'; // only accessible categories are listed (public + private with some access right)
+  const FILTER_PUBLIC         = 'public';     // only public categories are listed
+
+  const USER_MODE_ADMIN       = 'admin';      // returns result without user acces right applied (admin can see everything...)
+  const USER_MODE_PUBLIC      = 'public';     // returns result with user acces right applied
+
+
+  private $options=array(
+    'filter'      => self::FILTER_ACCESSIBLE,
+    'galleryRoot' => true,
+    'tree'        => false,
+    'userMode'    => self::USER_MODE_PUBLIC,
+  );
+
+
+  /**
+   * constructor for the object
+   *
+   * all options are facultative
+   *
+   * @param Array $options : an array with the options
+   *               String 'filter'      : can take one the defined FILTER values
+   *               Bool   'galleryRoot' : if set to true, the category list
+   *                                      contain at root, an item with id = 0
+   *                                      and named 'all the gallery'
+   *               Bool   'tree'        : if set to true, the category list
+   *                                      is returned as a tree, otherwise result
+   *                                      is returned as a flat array
+   *               String 'userMode'    : 'admin' returns result without user
+   *                                      right access applied ; 'public' returns
+   *                                      result with user right acces applied
+   */
+  public function __construct($options=array())
+  {
+    if(isset($options['filter'])) $this->setFilter($options['filter']);
+    if(isset($options['galleryRoot'])) $this->setGalleryRoot($options['galleryRoot']);
+    if(isset($options['tree'])) $this->setTree($options['tree']);
+    if(isset($options['userMode'])) $this->setUserMode($options['userMode']);
+  }
+
+  /**
+   * destructor dor the object
+   */
+  public function __destruct()
+  {
+    unset($this->options);
+  }
+
+  /**
+   * set the filter value to apply on the categories
+   *
+   * @param String $filer : the filter value
+   * @return String : the filter value
+   */
+  public function setFilter($filter)
+  {
+    if($filter==self::FILTER_ALL or
+       $filter==self::FILTER_ACCESSIBLE or
+       $filter==self::FILTER_PUBLIC) $this->options['filter']=$filter;
+
+    if($this->options['userMode']==self::USER_MODE_PUBLIC and
+       !($this->options['filter']==self::FILTER_ACCESSIBLE or $this->options['filter']==self::FILTER_PUBLIC)) $this->options['filter']==self::FILTER_ACCESSIBLE;
+
+    return($this->options['filter']);
+  }
+
+  /**
+   * get the filter value affected on the categories
+   *
+   * @return String : the filter
+   */
+  public function getFilter()
+  {
+    return($this->options['filter']);
+  }
+
+
+  /**
+   * set to true to add a root item named 'all the gallery'
+   * id for this item will be equal to 0
+   *
+   * @param Bool $galleryRoot :
+   * @return Bool :
+   */
+  public function setGalleryRoot($galleryRoot)
+  {
+    if(is_bool($galleryRoot)) $this->options['galleryRoot']=$galleryRoot;
+    return($this->options['galleryRoot']);
+  }
+
+
+  /**
+   * get if a root item named 'all the gallery' is present or not
+   *
+   * @return Bool :
+   */
+  public function getGalleryRoot()
+  {
+    return($this->options['galleryRoot']);
+  }
+
+
+  /**
+   * get if the result have to be returned as a tree or as a flat array
+   *
+   * @return Bool :
+   */
+  public function getTree()
+  {
+    return($this->options['tree']);
+  }
+
+
+  /**
+   * set if the result have to be returned as a tree or as a flat array
+   *
+   * @param Bool $tree :
+   * @return Bool :
+   */
+  public function setTree($tree)
+  {
+    if(is_bool($tree)) $this->options['tree']=$tree;
+    return($this->options['tree']);
+  }
+
+
+
+
+  /**
+   * returns the user mode currently applied
+   *
+   * @return String :
+   */
+  public function getUserMode()
+  {
+    return($this->options['userMode']);
+  }
+
+
+  /**
+   * set the user mode to apply
+   *
+   * @param String $userMode :
+   * @return String :
+   */
+  public function setUserMode($userMode)
+  {
+    if($userMode==self::USER_MODE_ADMIN || $userMode==self::USER_MODE_PUBLIC) $this->options['userMode']=$userMode;
+
+    if($this->options['userMode']==self::USER_MODE_PUBLIC and
+       !($this->options['filter']==self::FILTER_ACCESSIBLE or $this->options['filter']==self::FILTER_PUBLIC)) $this->options['filter']==self::FILTER_ACCESSIBLE;
+    return($this->options['userMode']);
+  }
+
+
+
+  /**
+   * build an ordered category list
+   * returns an array, each item is an array like :
+   *  'id'     => the category Id
+   *  'name'   => the category name
+   *  'level'  => the category level
+   *  'status' => the category status (0='private', 1='public')
+   *  'childs' => the category have childs ? (true or false in flat mode, childs
+   *                in tree mode)
+   *
+   * @return Array : the list
+   */
+  public function getCategoryList()
+  {
+    global $user;
+
+    $returned=array();
+
+    if($this->options['galleryRoot'])
+    {
+      $startLevel=1;
+    }
+    else
+    {
+      $startLevel=0;
+    }
+
+    $sql="SELECT DISTINCT pct.id, pct.name, pct.global_rank AS rank, pct.status
+          FROM (".CATEGORIES_TABLE." pct ";
+
+    if($this->options['userMode']==self::USER_MODE_PUBLIC)
+    {
+      $sql.=" JOIN ".USER_CACHE_CATEGORIES_TABLE." pucc
+                ON (pucc.cat_id = pct.id) AND pucc.user_id='".$user['id']."') ";
+    }
+    else
+    {
+      $sql.=") ";
+    }
+
+    switch($this->options['filter'])
+    {
+      case self::FILTER_PUBLIC :
+        $sql.=" WHERE pct.status = 'public' ";
+        break;
+      case self::FILTER_ACCESSIBLE :
+        $sql.=" JOIN (
+                  SELECT DISTINCT pgat.cat_id AS catId FROM ".GROUP_ACCESS_TABLE." pgat
+                  UNION DISTINCT
+                  SELECT DISTINCT puat.cat_id AS catId FROM ".USER_ACCESS_TABLE." puat
+                     ) pat
+                ON (pat.catId = pct.id AND pct.status = 'private') OR (pct.status = 'public') ";
+        break;
+    }
+    $sql.="ORDER BY global_rank;";
+
+    $result=pwg_query($sql);
+    if($result)
+    {
+      while($row=pwg_db_fetch_assoc($result))
+      {
+        $row['level']=$startLevel+substr_count($row['rank'], '.');
+
+        /* rank is in formated without leading zero, giving bad order
+         *  1
+         *  1.10
+         *  1.11
+         *  1.2
+         *  1.3
+         *  ....
+         *
+         *  this loop cp,vert all sub rank in four 0 format, allowing to order
+         *  categories easily
+         *  0001
+         *  0001.0010
+         *  0001.0011
+         *  0001.0002
+         *  0001.0003
+         */
+        $row['rank']=explode('.', $row['rank']);
+        foreach($row['rank'] as $key=>$rank)
+        {
+          $row['rank'][$key]=str_pad($rank, 4, '0', STR_PAD_LEFT);
+        }
+        $row['rank']=implode('.', $row['rank']);
+
+        $returned[]=$row;
+      }
+    }
+
+    if($this->options['galleryRoot'])
+    {
+      $returned[]=array(
+        'id'     => 0,
+        'name'   => l10n('All the gallery'),
+        'rank'   => '0000',
+        'level'  => 0,
+        'status' => 'public',
+        'childs'  => null
+      );
+    }
+
+    usort($returned, array(&$this, 'compareCat'));
+
+    if($this->options['tree'])
+    {
+      $index=0;
+      $returned=$this->buildSubLevel($returned, $index);
+    }
+    else
+    {
+      //check if cats have childs & remove rank (enlight the response)
+      $prevLevel=-1;
+      for($i=count($returned)-1;$i>=0;$i--)
+      {
+        unset($returned[$i]['rank']);
+        if($returned[$i]['status']=='private')
+        {
+          $returned[$i]['status']='0';
+        }
+        else
+        {
+          $returned[$i]['status']='1';
+        }
+
+        if($returned[$i]['level']>=$prevLevel)
+        {
+          $returned[$i]['childs']=false;
+        }
+        else
+        {
+          $returned[$i]['childs']=true;
+        }
+        $prevLevel=$returned[$i]['level'];
+      }
+    }
+
+    return($returned);
+  }
+
+  /**
+   * used for sort comparison
+   * defined as public, but don't use it directly
+   *
+   * this function compare two categorie with their rank value
+   */
+  public function compareCat($catA, $catB)
+  {
+    if($catA['rank'] == $catB['rank'])
+    {
+      return(0);
+    }
+    return( ($catA['rank'] < $catB['rank'])?-1:1 );
+  }
+
+
+  /**
+   * used to convert a flat array in a leveled array
+   */
+  private function buildSubLevel(&$list, &$currentIndex)
+  {
+    $returned=array();
+
+    $localIndex=$currentIndex;
+    $list[$localIndex]['childs']=array();
+    // reduce size of returned data
+    unset($list[$currentIndex]['rank']);
+    if($list[$currentIndex]['status']=='private')
+    {
+      $list[$currentIndex]['status']='0';
+    }
+    else
+    {
+      $list[$currentIndex]['status']='1';
+    }
+    $currentIndex++;
+
+
+    while($currentIndex<count($list))
+    {
+      if($list[$currentIndex]['level']>$list[$localIndex]['level'])
+      {
+        $list[$localIndex]['childs']=$this->buildSubLevel($list, $currentIndex);
+      }
+      else if($list[$currentIndex]['level']==$list[$localIndex]['level'])
+      {
+        $returned[]=$list[$localIndex];
+
+        $localIndex=$currentIndex;
+        $list[$currentIndex]['childs']=array();
+
+        // reduce size of returned data
+        unset($list[$currentIndex]['rank']);
+        if($list[$currentIndex]['status']=='private')
+        {
+          $list[$currentIndex]['status']='0';
+        }
+        else
+        {
+          $list[$currentIndex]['status']='1';
+        }
+
+        $currentIndex++;
+      }
+      else
+      {
+        $returned[]=$list[$localIndex];
+        return($returned);
+      }
+    }
+    $returned[]=$list[$localIndex];
+
+    return($returned);
+  }
+
+}
+/*
+
+*/
Index: /extensions/GrumPluginClasses/classes/GPCCore.class.inc.php
===================================================================
--- /extensions/GrumPluginClasses/classes/GPCCore.class.inc.php	(revision 7174)
+++ /extensions/GrumPluginClasses/classes/GPCCore.class.inc.php	(revision 7175)
@@ -3,6 +3,6 @@
 /* -----------------------------------------------------------------------------
   class name     : GPCCore
-  class version  : 1.2.0
-  plugin version : 3.2.0
+  class version  : 1.3.0
+  plugin version : 3.3.0
   date           : 2010-07-28
   ------------------------------------------------------------------------------
@@ -20,5 +20,5 @@
 | 1.2.0   | 2010/07/28 | * add the loadConfigFromFile function
 |         |            |
-|         |            |
+| 1.3.0   | 2010/10/13 | * add the addHeaderCSS, addHeaderJS functions
 |         |            |
 |         |            |
@@ -35,4 +35,6 @@
     - static function unregister
     - static function BBtoHTML
+    - static function addHeaderCSS
+    - static function addHeaderJS
    ---------------------------------------------------------------------- */
 
@@ -42,4 +44,8 @@
 {
   static public $pluginName = "GPCCore";
+  static protected $headerItems = array(
+    'css' => array(),
+    'js'  => array()
+  );
 
   /* ---------------------------------------------------------------------------
@@ -305,5 +311,51 @@
   }
 
+  /**
+   * used to add a css file in the header
+   *
+   * @param String $id : a unique id for the file
+   * @param String $file : the css file
+   */
+  static public function addHeaderCSS($id, $file)
+  {
+    if(!array_key_exists($file, self::$headerItems['css']))
+    {
+      self::$headerItems['css'][$id]=$file;
+    }
+  }
+  static public function addHeaderJS($id, $file)
+  {
+    global $template;
+
+    if(!array_key_exists($id,  $template->known_scripts) and !array_key_exists($file, self::$headerItems['js']))
+    {
+     $template->known_scripts[$id]=$url;
+     self::$headerItems['js'][$id]=$file;
+    }
+  }
+
+  /**
+   * declared as public to be accessible by the event manager, but this funcion
+   * is not aimed to be used directly
+   */
+  static public function applyHeaderItems()
+  {
+    global $template;
+
+    foreach(self::$headerItems['css'] as $file)
+    {
+      $template->block_html_head(null, '<link rel="stylesheet" type="text/css" href="'.$file.'"/>', $template->smarty, $false);
+    }
+
+    foreach(self::$headerItems['js'] as $file)
+    {
+      $template->block_html_head(null, '<script type="text/javascript" src="'.$file.'"></script>', $template->smarty, $false);
+    }
+  }
+
 } //class
 
+add_event_handler('loc_end_page_header', array('GPCCore', 'applyHeaderItems'));
+
+
 ?>
Index: /extensions/GrumPluginClasses/classes/GPCRequestBuilder.class.inc.php
===================================================================
--- /extensions/GrumPluginClasses/classes/GPCRequestBuilder.class.inc.php	(revision 7174)
+++ /extensions/GrumPluginClasses/classes/GPCRequestBuilder.class.inc.php	(revision 7175)
@@ -466,5 +466,5 @@
     $template->append('head_elements', '<script type="text/javascript" src="plugins/'.$baseName.'external/interface/interface.js"></script>');
     $template->append('head_elements', '<script type="text/javascript" src="plugins/'.$baseName.'external/inestedsortable.pack.js"></script>');
-    $template->append('head_elements', '<script type="text/javascript" src="plugins/'.$baseName.'criteriaBuilder.js"></script>');
+    $template->append('head_elements', '<script type="text/javascript" src="plugins/'.$baseName.'criteriaBuilder.packed.js"></script>');
     $template->append('head_elements',
 "<script type=\"text/javascript\">
Index: /extensions/GrumPluginClasses/css/categorySelector_clear.css
===================================================================
--- /extensions/GrumPluginClasses/css/categorySelector_clear.css	(revision 7175)
+++ /extensions/GrumPluginClasses/css/categorySelector_clear.css	(revision 7175)
@@ -0,0 +1,76 @@
+/* for categorySelector plugin */
+.ui-category-selector {
+  cursor:default;
+  padding:2px;
+}
+
+.ui-category-selector-status {
+  margin:3px;
+  padding-left:3px;
+  float:right;
+  font-size:8px;
+}
+
+.ui-category-selector-list {
+  margin-top:-1px;
+  cursor:default;
+  font-size:14px;
+  font-family:sans-serif;
+}
+
+.ui-category-selector-item {
+  min-height:15px;
+}
+
+li.ui-category-selector-item div {
+  margin:2px;
+}
+
+.ui-category-selector-expandable-item,
+.ui-category-selector-collapsable-item {
+  background: none no-repeat scroll 0px 0px;
+}
+
+.ui-category-selector-check {
+  position:absolute;
+  left:0px;
+  width:15px;
+  height:15px;
+  background: none no-repeat scroll 0px 0px;
+}
+
+/* clear css */
+
+.ui-category-selector-arrow {
+  color:#005E89;
+}
+
+.ui-category-selector,
+.ui-category-selector-list {
+  background-color:#DDDDDD;
+  border:1px solid #999999;
+  color:#666666;
+}
+
+li.ui-category-selector-item:hover {
+  background-color:#999999;
+}
+
+.ui-category-selector-selected-item {
+  background-color:#AAAAAA;
+}
+
+.ui-category-selector-expandable-item {
+  background-image:url(./../icons/expand_clear.png);
+}
+
+.ui-category-selector-collapsable-item {
+  background-image:url(./../icons/collapse_clear.png);
+}
+
+li.ui-category-selector-item div.ui-category-selector-check {
+  background-image:url(./../icons/check_notchecked_clear.png);
+}
+li.ui-category-selector-selected-item div.ui-category-selector-check {
+  background-image:url(./../icons/check_checked_clear.png);
+}
Index: /extensions/GrumPluginClasses/css/categorySelector_roma.css
===================================================================
--- /extensions/GrumPluginClasses/css/categorySelector_roma.css	(revision 7175)
+++ /extensions/GrumPluginClasses/css/categorySelector_roma.css	(revision 7175)
@@ -0,0 +1,76 @@
+/* for categorySelector plugin */
+.ui-category-selector {
+  cursor:default;
+  padding:2px;
+}
+
+.ui-category-selector-status {
+  margin:3px;
+  padding-left:3px;
+  float:right;
+  font-size:8px;
+}
+
+.ui-category-selector-list {
+  margin-top:-1px;
+  cursor:default;
+  font-size:14px;
+  font-family:sans-serif;
+}
+
+.ui-category-selector-item {
+  min-height:15px;
+}
+
+li.ui-category-selector-item div {
+  margin:2px;
+}
+
+.ui-category-selector-expandable-item,
+.ui-category-selector-collapsable-item {
+  background: none no-repeat scroll 0px 0px;
+}
+
+.ui-category-selector-check {
+  position:absolute;
+  left:0px;
+  width:15px;
+  height:15px;
+  background: none no-repeat scroll 0px 0px;
+}
+
+/* roma css */
+
+.ui-category-selector-arrow {
+  color:#FF3363;
+}
+
+.ui-category-selector,
+.ui-category-selector-list {
+  background-color:#444444;
+  border:1px solid #666666;
+  color:#999999;
+}
+
+li.ui-category-selector-item:hover {
+  background-color:#666666;
+}
+
+.ui-category-selector-selected-item {
+  background-color:#777777;
+}
+
+.ui-category-selector-expandable-item {
+  background-image:url(./../icons/expand_roma.png);
+}
+
+.ui-category-selector-collapsable-item {
+  background-image:url(./../icons/collapse_roma.png);
+}
+
+li.ui-category-selector-item div.ui-category-selector-check {
+  background-image:url(./../icons/check_notchecked_roma.png);
+}
+li.ui-category-selector-selected-item div.ui-category-selector-check {
+  background-image:url(./../icons/check_checked_roma.png);
+}
Index: /extensions/GrumPluginClasses/css/gpc.css
===================================================================
--- /extensions/GrumPluginClasses/css/gpc.css	(revision 7174)
+++ /extensions/GrumPluginClasses/css/gpc.css	(revision 7175)
@@ -90,46 +90,2 @@
 }
 
-
-.ui-icon-selector {
-  background:none no-repeat scroll 2px 2px;
-  padding:2px;
-}
-.ui-icon-selector-icon {
-  background: none no-repeat scroll 2px 2px;
-  padding:2px;
-  float:left;
-}
-
-
-div.roma div.ui-icon-selector {
-  background-color:#444444;
-  border:1px solid #666666;
-}
-div.roma div.ui-icon-selector-list {
-  background-color:#444444;
-  border:1px solid #666666;
-  margin-top:-1px;
-}
-div.roma div.ui-icon-selector-list li.ui-icon-selector-icon:hover {
-  background-color:#666666;
-}
-div.roma div.ui-icon-selector-list li.ui-icon-selector-selected-icon {
-  background-color:#777777;
-}
-
-
-div.clear div.ui-icon-selector {
-  background-color:#CCCCCC;
-   border:1px solid #777777;
-}
-div.clear div.ui-icon-selector-list {
-  background-color:#CCCCCC;
-  border:1px solid #777777;
-  margin-top:-1px;
-}
-div.clear div.ui-icon-selector-list li.ui-icon-selector-icon:hover {
-  background-color:#777777;
-}
-div.clear div.ui-icon-selector-list li.ui-icon-selector-selected-icon {
-  background-color:#888888;
-}
Index: /extensions/GrumPluginClasses/css/iconSelector_clear.css
===================================================================
--- /extensions/GrumPluginClasses/css/iconSelector_clear.css	(revision 7175)
+++ /extensions/GrumPluginClasses/css/iconSelector_clear.css	(revision 7175)
@@ -0,0 +1,27 @@
+/* for iconSelector plugin */
+.ui-icon-selector {
+  background:none no-repeat scroll 2px 2px;
+  padding:2px;
+}
+.ui-icon-selector-icon {
+  background: none no-repeat scroll 2px 2px;
+  padding:2px;
+  float:left;
+}
+
+/* clear css */
+.ui-icon-selector {
+  background-color:#DDDDDD;
+  border:1px solid #999999;
+}
+.ui-icon-selector-list {
+  background-color:#DDDDDD;
+  border:1px solid #999999;
+  margin-top:-1px;
+}
+.ui-icon-selector-list li.ui-icon-selector-icon:hover {
+  background-color:#999999;
+}
+.ui-icon-selector-list li.ui-icon-selector-selected-icon {
+  background-color:#AAAAAA;
+}
Index: /extensions/GrumPluginClasses/css/iconSelector_roma.css
===================================================================
--- /extensions/GrumPluginClasses/css/iconSelector_roma.css	(revision 7175)
+++ /extensions/GrumPluginClasses/css/iconSelector_roma.css	(revision 7175)
@@ -0,0 +1,27 @@
+/* for iconSelector plugin */
+.ui-icon-selector {
+  background:none no-repeat scroll 2px 2px;
+  padding:2px;
+}
+.ui-icon-selector-icon {
+  background: none no-repeat scroll 2px 2px;
+  padding:2px;
+  float:left;
+}
+
+/* roma css */
+.ui-icon-selector {
+  background-color:#444444;
+  border:1px solid #666666;
+}
+.ui-icon-selector-list {
+  background-color:#444444;
+  border:1px solid #666666;
+  margin-top:-1px;
+}
+.ui-icon-selector-list li.ui-icon-selector-icon:hover {
+  background-color:#666666;
+}
+.ui-icon-selector-list li.ui-icon-selector-selected-icon {
+  background-color:#777777;
+}
Index: /extensions/GrumPluginClasses/gpc_ajax.php
===================================================================
--- /extensions/GrumPluginClasses/gpc_ajax.php	(revision 7174)
+++ /extensions/GrumPluginClasses/gpc_ajax.php	(revision 7175)
@@ -16,4 +16,9 @@
  *
  * manage all the ajax requests
+ *
+ * known functions :
+ *  - admin.rbuilder.fillCaddie
+ *  - admin.categorySelector.getList
+ *
  * -----------------------------------------------------------------------------
  */
@@ -68,5 +73,7 @@
       // check if asked function is valid
       if(!(
-           $_REQUEST['ajaxfct']=='admin.rbuilder.fillCaddie'
+           $_REQUEST['ajaxfct']=='admin.rbuilder.fillCaddie' or
+           $_REQUEST['ajaxfct']=='admin.categorySelector.getList' or
+           $_REQUEST['ajaxfct']=='public.categorySelector.getList'
           )
         ) $_REQUEST['ajaxfct']='';
@@ -77,5 +84,5 @@
       {
         /*
-         * check admin.makeStats.getList values
+         * check admin.rbuilder.fillCaddie values
          */
         if($_REQUEST['ajaxfct']=="admin.rbuilder.fillCaddie")
@@ -88,6 +95,34 @@
           if(!isset($_REQUEST['requestNumber'])) $_REQUEST['ajaxfct']="";
         }
+
+        /*
+         * check admin.categorySelector.getList values
+         */
+        if($_REQUEST['ajaxfct']=="admin.categorySelector.getList" or
+           $_REQUEST['ajaxfct']=="public.categorySelector.getList")
+        {
+          if(!isset($_REQUEST['filter'])) $_REQUEST['filter']="accessible";
+
+          if(!($_REQUEST['filter']=="public" or
+               $_REQUEST['filter']=="accessible" or
+               $_REQUEST['filter']=="all")
+            ) $_REQUEST['filter']="accessible";
+
+          if(!isset($_REQUEST['galleryRoot'])) $_REQUEST['galleryRoot']="y";
+
+          if(!($_REQUEST['galleryRoot']=="y" or
+               $_REQUEST['galleryRoot']=="n")
+            ) $_REQUEST['galleryRoot']="y";
+
+          if(!isset($_REQUEST['tree'])) $_REQUEST['tree']="n";
+
+          if(!($_REQUEST['tree']=="y" or
+               $_REQUEST['tree']=="n")
+            ) $_REQUEST['tree']="n";
+        }
+
+
       }
-    }
+    } //checkRequest()
 
 
@@ -102,4 +137,10 @@
         case 'admin.rbuilder.fillCaddie':
           $result=$this->ajax_gpc_admin_rbuilderFillCaddie($_REQUEST['fillMode'], $_REQUEST['requestNumber']);
+          break;
+        case 'admin.categorySelector.getList':
+          $result=$this->ajax_gpc_admin_CategorySelectorGetList($_REQUEST['filter'], $_REQUEST['galleryRoot'], $_REQUEST['tree']);
+          break;
+        case 'public.categorySelector.getList':
+          $result=$this->ajax_gpc_public_CategorySelectorGetList($_REQUEST['filter'], $_REQUEST['galleryRoot'], $_REQUEST['tree']);
           break;
       }
@@ -141,4 +182,84 @@
     }
 
+
+
+    /**
+     * return the list of all categories
+     *
+     * @param String $filter : 'public' or 'accessible' or 'all'
+     * @param String $galleryRoot : 'y' if the gallery root is in the list
+     * @param String $tree : 'y' to obtain a recursive array, 'n' to obtain a flat array
+     * @return String : json string
+     */
+    private function ajax_gpc_admin_CategorySelectorGetList($filter, $galleryRoot, $tree)
+    {
+      global $user;
+
+      include_once(PHPWG_PLUGINS_PATH.'GrumPluginClasses/classes/GPCCategorySelector.class.inc.php');
+
+      $categorySelector=new GPCCategorySelector(
+        array(
+          'filter' => $filter,
+          'galleryRoot' => ($galleryRoot=='y')?true:false,
+          'tree' => ($tree=='y')?true:false,
+          'userMode' => 'admin'
+        )
+      );
+
+      $returned=array(
+        'userId' => $user['id'],
+        'nbCategories' => 0,
+        'categories' => $categorySelector->getCategoryList(),
+        'status' => array(
+          0=>l10n('Private'),
+          1=>l10n('Public')
+        )
+      );
+      $returned['nbCategories']=count($returned['categories']);
+
+      return(json_encode($returned));
+    } //ajax_gpc_admin_CategorySelectorGetList
+
+
+    /**
+     * return the list of all categories
+     *
+     * @param String $filter : 'public' or 'accessible' or 'all'
+     * @param String $galleryRoot : 'y' if the gallery root is in the list
+     * @param String $tree : 'y' to obtain a recursive array, 'n' to obtain a flat array
+     * @param String $userMode : 'public' or 'admin'
+     * @return String : json string
+     */
+    private function ajax_gpc_public_CategorySelectorGetList($filter, $galleryRoot, $tree)
+    {
+      global $user;
+
+      include_once(PHPWG_PLUGINS_PATH.'GrumPluginClasses/classes/GPCCategorySelector.class.inc.php');
+
+      $categorySelector=new GPCCategorySelector(
+        array(
+          'filter' => $filter,
+          'galleryRoot' => ($galleryRoot=='y')?true:false,
+          'tree' => ($tree=='y')?true:false,
+          'userMode' => 'public'
+        )
+      );
+
+      $returned=array(
+        'userId' => $user['id'],
+        'nbCategories' => 0,
+        'categories' => $categorySelector->getCategoryList(),
+        'status' => array(
+          0=>l10n('Private'),
+          1=>l10n('Public')
+        )
+      );
+      $returned['nbCategories']=count($returned['categories']);
+
+      return(json_encode($returned));
+    } //ajax_gpc_public_CategorySelectorGetList
+
+
+
   } //class
 
Index: /extensions/GrumPluginClasses/js/criteriaBuilder.js
===================================================================
--- /extensions/GrumPluginClasses/js/criteriaBuilder.js	(revision 7174)
+++ /extensions/GrumPluginClasses/js/criteriaBuilder.js	(revision 7175)
@@ -69,35 +69,32 @@
 {
   var itemsId = {
-    group:'iCbGroup',
-    item:'iCbItem',
-    container:container,
-  }
-
-  var counters = {
-    group:0,
-    item:0,
-  }
-
-  var options = {
-      textAND:'AND',
-      textOR:'OR',
-      textHint:'',
-      classGroup:'',
-      classItem:'',
-      classOperator:'',
-      classHelper:'helper',
-      opacity:0.8,
-      onEdit:null,
-      onDelete:null,
-      onRequestSuccess:null,
-      onRequestError:null,
-      onGetPageSuccess:null,
-      onGetPageError:null,
-      imgEditUrl:'',
-      imgDeleteUrl:'',
-      ajaxUrl:'',
-    };
-
-  var extraData = new Array();
+          group:'iCbGroup',
+          item:'iCbItem',
+          container:container,
+        },
+      counters = {
+          group:0,
+          item:0,
+        },
+      options = {
+          textAND:'AND',
+          textOR:'OR',
+          textHint:'',
+          classGroup:'',
+          classItem:'',
+          classOperator:'',
+          classHelper:'helper',
+          opacity:0.8,
+          onEdit:null,
+          onDelete:null,
+          onRequestSuccess:null,
+          onRequestError:null,
+          onGetPageSuccess:null,
+          onGetPageError:null,
+          imgEditUrl:'',
+          imgDeleteUrl:'',
+          ajaxUrl:'',
+        },
+      extraData = new Array();
 
   if(arguments.length==2)
@@ -213,5 +210,5 @@
         break;
     }
-  }
+  };
 
   /**
@@ -243,5 +240,5 @@
 
     applyNested();
-  }
+  };
 
   /**
@@ -253,5 +250,5 @@
   {
     $('#'+groupId).remove();
-  }
+  };
 
   /**
@@ -292,5 +289,5 @@
 
     extraData[counters.item]=data;
-  }
+  };
 
   /**
@@ -309,5 +306,5 @@
       manage();
     }
-  }
+  };
 
   /**
@@ -327,5 +324,5 @@
       extraData[eval(re.exec(itemId)[0])]=data;
     }
-  }
+  };
 
   /**
@@ -339,5 +336,5 @@
     counters.group=0;
     extraData=new Array();
-  }
+  };
 
   /**
@@ -370,5 +367,5 @@
     }
     return(returned);
-  }
+  };
 
 
@@ -410,5 +407,5 @@
 
     return(serialized);
-  }
+  };
 
 
@@ -423,5 +420,5 @@
 
     return(extraData[extraDataNumber]);
-  }
+  };
 
 
@@ -433,5 +430,5 @@
   {
     options = jQuery.extend(options, optionsToSet);
-  }
+  };
 
   /**
@@ -465,5 +462,5 @@
       }
     }
-  }
+  };
 
   /**
@@ -505,5 +502,5 @@
       }
     );
-  }
+  };
 
   /**
@@ -531,5 +528,5 @@
       }
     );
-  }
+  };
 
   /**
@@ -554,5 +551,5 @@
       $('#'+groupId+'OpOR').css('display', 'none');
     }
-  }
+  };
 
   /**
@@ -580,5 +577,5 @@
      );
 
-  }
+  };
 
   /**
@@ -606,5 +603,5 @@
      );
 
-  }
+  };
 
   applyNested();
Index: /extensions/GrumPluginClasses/js/criteriaBuilder.packed.js
===================================================================
--- /extensions/GrumPluginClasses/js/criteriaBuilder.packed.js	(revision 7175)
+++ /extensions/GrumPluginClasses/js/criteriaBuilder.packed.js	(revision 7175)
@@ -0,0 +1,2 @@
+/* file: criteriaBuilder.packed.js - v1.0.0 | packed on 2010/10/13 with http://joliclic.free.fr/php/javascript-packer/ */
+eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('7 25(k){e a={d:\'2g\',g:\'2h\',k:k,},c={d:0,g:0,},5={1x:\'2b\',1w:\'1K\',2f:\'\',1z:\'\',1A:\'\',1j:\'\',26:\'2i\',1o:0.8,M:f,Q:f,14:f,11:f,X:f,T:f,16:\'\',W:\'\',1l:\'\',},r=1M 1g();6(b.n==2){6(C b[1]==\'1e\'){5=w.29(5,b[1])}}o.2e=7(1v){2v(1v){u\'2q\':6(b.n==3){6(C b[1]==\'V\'){1u(b[1],b[2])}}v;u\'2p\':6(b.n==2){6(C b[1]==\'V\'){1H(b[1])}}v;u\'2l\':6(b.n==4){6(C b[1]==\'V\'&&C b[2]==\'V\'){1C(b[1],b[2],b[3])}}v;u\'2d\':z(Y());v;u\'1a\':6(b.n==2){z(1a(b[1]))}p{z(f)}v;u\'2o\':1F();v;u\'2n\':23();v;u\'Z\':6(b.n==4){Z(b[1],b[2],b[3])}v;u\'1f\':6(b.n==2){z(1f(b[1]))}v}};e 1h=7(m){c.d++;e j="<D l=\'"+a.d+c.d+"\' E=\'1d 18 L "+5.1z+"\'>";j+="<1y></1y></D>";$(\'#\'+m).2t(j);j="<q E=\'17\'>";j+="<q l=\'"+a.d+c.d+"K\' E=\'"+5.1j+"\' 1n=\'s:G;\'>"+5.1x+"</q>";j+="<q l=\'"+a.d+c.d+"H\' E=\'"+5.1j+"\' 1n=\'s:G;\'>"+5.1w+"</q>";j+="</q>";$("#"+a.d+c.d).2j(j);$(\'#\'+a.d+c.d+\'K\').R(\'S\',a.d+c.d,1k);$(\'#\'+a.d+c.d+\'H\').R(\'S\',a.d+c.d,1k);1s()};e 1O=7(h){$(\'#\'+h).1D()};e 1u=7(1J,t){c.g++;e j="<D l=\'"+a.g+c.g+"\' E=\'P 18 "+5.1A+"\'>";j+="<q E=\'2m\' 1n=\'2y:2K;\'>";6(5.16!=\'\'&&5.M!=f&&w.I(5.M))j+="<1N l=\'1L"+c.g+"\' 1B=\'"+5.16+"\'/>";6(5.W!=\'\'&&5.Q!=f&&w.I(5.Q))j+="<1N l=\'1I"+c.g+"\' 1B=\'"+5.W+"\'/>";j+="</q><q E=\'17\'>"+1J+"</q></D>";$(\'#\'+a.k).2J(j);1h(a.g+c.g);6(5.16!=\'\'&&5.M!=f){$(\'#1L\'+c.g).R(\'S\',a.g+c.g,5.M)}6(5.W!=\'\'&&5.Q!=f){$(\'#1I\'+c.g).R(\'S\',a.g+c.g,5.Q)}r[c.g]=t};e 1H=7(m){6($(\'#\'+m).n!=0){$(\'#\'+m).1D();x=/[0-9]*$/;r[1E(x.U(m)[0])]=f;1q()}};e 1C=7(m,j,t){6($(\'#\'+m).n!=0){$(\'#\'+m+\' .17\').1G(j);x=/[0-9]*$/;r[1E(x.U(m)[0])]=t}};e 1F=7(){$(\'#\'+a.k).27();$(\'#\'+a.k).1G("");c.g=0;c.d=0;r=1M 1g()};e 19=7(10,F){O=\'\';6(C F==\'1e\'){1t(e J 2E F){6(C F[J]==\'1e\'){O+=19(10+\'[\'+J+\']\',F[J])}p{O+=\'&\'+10+\'[\'+J+\']=\'+F[J]}}}p{O+=\'&\'+10+\'=\'+F}z(O)};e Y=7(){B=w.2L.2z(a.k)[\'2G\'];2H=1g();1t(i=0;i<r.n;i++){6(r[i]!=f){B+=19(\'r[\'+i+\']\',r[i])}}$(\'#\'+a.k+\' .1d\').28(7(){x=/[0-9]*$/;B+=\'&2Q[\'+x.U(o.l)[0]+\']=\';6($(o).N(\'1i\')){B+=\'1K\'}p{B+=\'2b\'}});z(B)};e 1a=7(m){x=/[0-9]*$/;2a=x.U(m)[0];z(r[2a])};e 1f=7(2c){5=w.29(5,2c)};e 1b=7(h,1c){6($(\'#\'+h).N(\'L\')){6(1c){$(\'#\'+h+\'K\').A(\'s\',\'13\')}p{$(\'#\'+h+\'K\').A(\'s\',\'G\')}}p{6(1c){$(\'#\'+h+\'H\').A(\'s\',\'13\')}p{$(\'#\'+h+\'H\').A(\'s\',\'G\')}}};e 1q=7(){$(\'#\'+a.k+\' D\').28(7(){6($(o).N(\'1d\')){6($(\'#\'+o.l+\' D.P\').n==0){1O(o.l)}p 6($(\'#\'+o.l+\' D.P\').n==1){1b(o.l,1S)}p{1b(o.l,12)}}p 6($(o).N(\'P\')){6($(o).2D().2d(0).l==a.k){1h(o.l)}}})};e 1s=7(){$(\'#\'+a.k).27();$(\'#\'+a.k).2F({2C:\'18\',2B:\'P\',1o:5.1o,2x:5.26,2A:/.*/i,2N:12,2O:\'.17\',2P:1S,2M:15,2I:7(B){1q()},})};1k=7(1Q){h=1Q.t;6($(\'#\'+h).N(\'L\')){$(\'#\'+h).1R(\'L\').1W(\'1i\');$(\'#\'+h+\'K\').A(\'s\',\'G\');$(\'#\'+h+\'H\').A(\'s\',\'13\')}p{$(\'#\'+h).1R(\'1i\').1W(\'L\');$(\'#\'+h+\'K\').A(\'s\',\'13\');$(\'#\'+h+\'H\').A(\'s\',\'G\')}};e 23=7(){1m=24(\'22=\'+a.k+\'&\'+Y());$.21({20:"1Z",1Y:5.1l+\'2w\',1X:12,t:1m,1V:7(y){6(5.14!=f&&w.I(5.14))5.14(y)},1U:7(y){6(5.11!=f&&w.I(5.11))5.11(y)},})};e Z=7(1p,1P,1T){1m=24(\'22=\'+a.k+\'&\'+Y());$.21({20:"1Z",1Y:5.1l+\'Z\',1X:12,t:{2k:1P,1p:1p,2u:1T},1V:7(y){6(5.X!=f&&w.I(5.X))5.X(y)},1U:7(y){6(5.T!=f&&w.I(5.T))5.T(y)},})};1s()};25.2r=7(1r,t){z({1r:1r,2s:t,})}',62,177,'|||||options|if|function|||itemsId|arguments|counters|group|var|null|item|groupId||content|container|id|itemId|length|this|else|div|extraData|display|data|case|break|jQuery|re|msg|return|css|serialized|typeof|li|class|value|none|OpOR|isFunction|key|OpAND|cbOpAND|onEdit|hasClass|returned|cbItem|onDelete|bind|click|onGetPageError|exec|string|imgDeleteUrl|onGetPageSuccess|getItems|getPage|prefix|onRequestError|true|block|onRequestSuccess||imgEditUrl|cbSortHandle|cbSortable|serializeData|getExtraData|displayOperator|visible|cbGroup|object|setOptions|Array|addGroup|cbOpOR|classOperator|onSwitchOperator|ajaxUrl|datas|style|opacity|requestNumber|manage|owner|applyNested|for|addItem|fct|textOR|textAND|ul|classGroup|classItem|src|editItem|remove|eval|clearItems|html|deleteItem|iImgDelete|itemContent|OR|iImgEdit|new|img|removeGroup|pageNumber|event|removeClass|false|numberPerPage|error|success|addClass|async|url|POST|type|ajax|requestName|sendRequest|encodeURI|criteriaBuilder|classHelper|NestedSortableDestroy|each|extend|extraDataNumber|AND|optionsToSet|get|doAction|textHint|iCbGroup|iCbItem|helper|prepend|page|edit|cbItemButtons|send|clear|delete|add|makeExtendedData|param|wrap|numPerPage|switch|execute|helperclass|float|serialize|serializeRegExp|noNestingClass|accept|parent|in|NestedSortable|hash|tmp|onChange|append|right|iNestedSortable|nestingPxSpace|autoScroll|handle|ghosting|operator'.split('|'),0,{}))
Index: /extensions/GrumPluginClasses/js/pagesNavigator.js
===================================================================
--- /extensions/GrumPluginClasses/js/pagesNavigator.js	(revision 7174)
+++ /extensions/GrumPluginClasses/js/pagesNavigator.js	(revision 7175)
@@ -56,39 +56,37 @@
 {
   var itemsId = {
-    first:'iNavFirst',
-    last:'iNavLast',
-    previous:'iNavPrevious',
-    next:'iNavNext',
-    pageNumber:'iNavPage',
-    morePrevious:'iNavPrevMore',
-    moreNext:'iNavNextMore',
-    container:container,
-  };
-
-  var pages = {
-    num:0,
-    current:1,
-  }
-
-  var options = {
-    numberItem:0,
-    itemPerPage:25,
-    defaultPage:0,
-    displayNumPage:7,
-    displayFirst:true,
-    displayLast:true,
-    displayPrevious:true,
-    displayNext:true,
-    hideMode:'1,<', // "1": hide nav if only 1 page to display, "<": hide nav First, Previous, Next & Last if num of page < displayNumPage
-    textFirst:'&lt;&lt;',
-    textLast:'&gt;&gt;',
-    textPrevious:'&lt;',
-    textNext:'&gt;',
-    textMore:'...',
-    onPageChange:null,
-    classActive:'',
-    classInactive:'',
-    classDisabled:'',
-  };
+          first:'iNavFirst',
+          last:'iNavLast',
+          previous:'iNavPrevious',
+          next:'iNavNext',
+          pageNumber:'iNavPage',
+          morePrevious:'iNavPrevMore',
+          moreNext:'iNavNextMore',
+          container:container,
+        },
+      pages = {
+          num:0,
+          current:1,
+        },
+      options = {
+        numberItem:0,
+        itemPerPage:25,
+        defaultPage:0,
+        displayNumPage:7,
+        displayFirst:true,
+        displayLast:true,
+        displayPrevious:true,
+        displayNext:true,
+        hideMode:'1,<', // "1": hide nav if only 1 page to display, "<": hide nav First, Previous, Next & Last if num of page < displayNumPage
+        textFirst:'&lt;&lt;',
+        textLast:'&gt;&gt;',
+        textPrevious:'&lt;',
+        textNext:'&gt;',
+        textMore:'...',
+        onPageChange:null,
+        classActive:'',
+        classInactive:'',
+        classDisabled:'',
+      };
 
 
@@ -110,5 +108,5 @@
         break;
     }
-  }
+  };
 
   /**
@@ -122,5 +120,5 @@
   {
     return(Math.ceil(numItems/numPerPage));
-  }
+  };
 
   /**
@@ -143,5 +141,5 @@
       build();
     }
-  }
+  };
 
   /**
@@ -195,5 +193,5 @@
 
     $('#'+itemsId.container).css('visibility', 'visible');
-  }
+  };
 
 
@@ -206,5 +204,6 @@
       prev=pages.current-1;
     }
-    next=options.displayNumPage-1-prev
+    next=options.displayNumPage-1-prev;
+
     if(pages.current+next>=pages.num)
     {
@@ -283,5 +282,5 @@
     );
 
-  }
+  };
 
 
@@ -325,5 +324,5 @@
     displayNav();
     if(options.onPageChange!=null && jQuery.isFunction(options.onPageChange)) options.onPageChange(pages.current);
-  }
+  };
 
   if(arguments.length==2)
Index: /extensions/GrumPluginClasses/js/pagesNavigator.packed.js
===================================================================
--- /extensions/GrumPluginClasses/js/pagesNavigator.packed.js	(revision 7175)
+++ /extensions/GrumPluginClasses/js/pagesNavigator.packed.js	(revision 7175)
@@ -0,0 +1,2 @@
+/* file: pagesNavigator.js - v1.0.0 | packed on 2010/10/13 with http://joliclic.free.fr/php/javascript-packer/ */
+eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('q 1L(n){s 5={C:\'1P\',F:\'1N\',D:\'1u\',f:\'1A\',16:\'1y\',y:\'1Q\',v:\'1z\',n:n,},4={e:0,b:1,},3={N:0,K:17,M:0,u:7,1f:L,1p:L,1g:L,1a:L,V:\'1,<\',1e:\'&T;&T;\',1q:\'&13;&13;\',15:\'&T;\',1k:\'&13;\',Z:\'...\',J:I,X:\'\',z:\'\',B:\'\',};c.1C=q(1b){1x(1b){1s\'G\':a(H.1m==2){G(H[1])}1t}};s 19=q(1c,18){U(1h.1j(1c/18))};s G=q(11){a(1v 11==\'1D\'){3=1l.1S(3,11);a(3.N<=0)3.N=0;a(3.K<=0)3.K=17;a(3.u<=2)3.u=8;4.e=19(3.N,3.K);a(3.M>0&&3.M<=4.e)4.b=3.M;1d()}};s 1d=q(){o=/1/;a((o.Q(3.V)==I)==14&&4.e==1){$(\'#\'+5.n).1r(\'\');U(\'\')}s j="<Y 6=\'"+n+"1G\'>";l=" 1F-m:r;1H:1I; ";o=/</;a((o.Q(3.V)==I)==14&&4.e<=3.u){x=\'g:r;\'}h{x=\'\'}w="W=\'A "+3.z+"\'";a(3.1f)j+="<d m=\'"+l+x+"\' 6=\'"+5.C+"\' "+w+">"+3.1e+"</d>";a(3.1g)j+="<d m=\'"+l+x+"\' 6=\'"+5.D+"\' "+w+">"+3.15+"</d>";j+="<d m=\'"+l+"g:r;\' 6=\'"+5.y+"\' W=\'O "+3.B+"\'>"+3.Z+"</d>";1R(i=1;i<=4.e;i++){j+="<d m=\'"+l+"g:r;\' 6=\'"+5.16+i+"\' "+w+">"+i+"</d>"}j+="<d m=\'"+l+";g:r;\' 6=\'"+5.v+"\' W=\'O "+3.B+"\'>"+3.Z+"</d>";a(3.1a)j+="<d m=\'"+l+x+"\' 6=\'"+5.f+"\' "+w+">"+3.1k+"</d>";a(3.1p)j+="<d m=\'"+l+x+"\' 6=\'"+5.F+"\' "+w+">"+3.1q+"</d>";j+="</Y>";$(\'#\'+5.n).p(\'1n\',\'1E\').1r(j);$(\'.A\').1J(\'1O\',1o);10();$(\'#\'+5.n).p(\'1n\',\'1K\')};s 10=q(){k=1h.1j((3.u-1)/2);a(4.b-k<=0){k=4.b-1}f=3.u-1-k;a(4.b+f>=4.e){k+=(4.b+f-4.e);f=4.e-4.b}k=4.b-k;f=4.b+f;a(k>1){$(\'#\'+5.y).p(\'g\',\'12\')}h{$(\'#\'+5.y).p(\'g\',\'r\')}a(f<4.e){$(\'#\'+5.v).p(\'g\',\'12\')}h{$(\'#\'+5.v).p(\'g\',\'r\')}$(\'#\'+5.n+\' Y d\').1M(q(){6=-1;a(!(c.6==5.C||c.6==5.D||c.6==5.f||c.6==5.F||c.6==5.y||c.6==5.v)){o=/[0-9]*$/i;6=o.Q(c.6)[0];a(6>=k&&6<=f){$(c).p(\'g\',\'12\')}h{$(c).p(\'g\',\'r\')}a(6==4.b){$(c).R(\'1i \'+3.X).P(\'A \'+3.z)}h{$(c).R(\'A \'+3.z).P(\'1i \'+3.X)}}a(((c.6==5.C||c.6==5.D)&&4.b==1)||((c.6==5.F||c.6==5.f)&&4.b==4.e)||(c.6==5.y||c.6==5.v)){$(c).R(\'O \'+3.B).P(\'A \'+3.z)}h{$(c).R(\'A \'+3.z).P(\'O \'+3.B)}})};s 1o=q(t){a(t.E.6==5.C){4.b=1}h a(t.E.6==5.D){4.b--}h a(t.E.6==5.f){4.b++}h a(t.E.6==5.F){4.b=4.e}h{o=/[0-9]*$/i;S=o.Q(t.E.6)[0];a(S==4.b)U(14);4.b=1w(S)}a(4.b<=0)4.b=1;a(4.b>=4.e)4.b=4.e;10();a(3.J!=I&&1l.1B(3.J))3.J(4.b)};a(H.1m==2){G(H[1])}}',62,117,'|||options|pages|itemsId|id||||if|current|this|li|num|next|display|else||content|prev|styleLI|style|container|re|css|function|none|var|event|displayNumPage|moreNext|pnClass|hideFPNL|morePrevious|classInactive|cPnInactive|classDisabled|first|previous|target|last|setOptions|arguments|null|onPageChange|itemPerPage|true|defaultPage|numberItem|cPnDisabled|removeClass|exec|addClass|page|lt|return|hideMode|class|classActive|ul|textMore|displayNav|optionsToSet|block|gt|false|textPrevious|pageNumber|25|numPerPage|calcNumPages|displayNext|fct|numItems|build|textFirst|displayFirst|displayPrevious|Math|cPnActive|ceil|textNext|jQuery|length|visibility|onChangePage|displayLast|textLast|html|case|break|iNavPrevious|typeof|eval|switch|iNavPage|iNavNextMore|iNavNext|isFunction|doAction|object|hidden|list|PageNavigator|float|left|bind|visible|pagesNavigator|each|iNavLast|click|iNavFirst|iNavPrevMore|for|extend'.split('|'),0,{}))
Index: /extensions/GrumPluginClasses/js/simpleTip.js
===================================================================
--- /extensions/GrumPluginClasses/js/simpleTip.js	(revision 7174)
+++ /extensions/GrumPluginClasses/js/simpleTip.js	(revision 7175)
@@ -81,9 +81,9 @@
 function simpleTip()
 {
-  var items = new Array();
-  var itemIndexInc = 0;
-  var options={
-    name:'',
-  }
+  var items = new Array(),
+      itemIndexInc = 0,
+      options={
+          name:'',
+        };
 
   if(arguments.length>=1)
@@ -134,5 +134,5 @@
         break;
     }
-  }
+  };
 
   var add = function (item, options)
@@ -169,5 +169,5 @@
     }
 
-  }
+  };
 
 
@@ -191,5 +191,5 @@
       items.splice(index,1);
     }
-  }
+  };
 
 
@@ -216,5 +216,5 @@
     }
     itemIndexInc=0;
-  }
+  };
 
 
@@ -228,5 +228,5 @@
     }
     return(-1);
-  }
+  };
 
   /**
@@ -255,5 +255,5 @@
           display: 'block',
         }
-      )
+      );
 
     switch(items[itemIndex].options.targetPos)
@@ -415,15 +415,15 @@
       .addClass(items[itemIndex].options.classes);
 
-  }
+  };
 
   var show = function ()
   {
     $('#iSimpleTip'+options.name).css('display', 'block');
-  }
+  };
 
   var hide = function ()
   {
     $('#iSimpleTip'+options.name).css('display', 'none');
-  }
+  };
 
 
@@ -435,5 +435,5 @@
       $('body').append(text);
     }
-  }
+  };
 
 
Index: /extensions/GrumPluginClasses/js/simpleTip.packed.js
===================================================================
--- /extensions/GrumPluginClasses/js/simpleTip.packed.js	(revision 7175)
+++ /extensions/GrumPluginClasses/js/simpleTip.packed.js	(revision 7175)
@@ -0,0 +1,2 @@
+/* file: simpleTip.js - v1.0.0 | packed on 2010/10/13 with http://joliclic.free.fr/php/javascript-packer/ */
+eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('e 1l(b,9,5){q.b=b;q.T=b.N;q.9=9;q.5=1M.1J({1h:\'D-c\',1m:\'f-c\',1z:1I,L:0,C:0,1t:\'\',1u:\'./1X/1U/1O/\',1q:12,1r:12,},5)}e O(){t 6=1x 1W(),R=0,5={d:\'\',};o(h.B>=1){5.d=h[0]}q.1T=e(1E){1f(1E){7\'S\':o(h.B==2){S(h[1],{})}1s{S(h[1],h[2])}8;7\'18\':o(h.B==2){18(h[1])}8;7\'1a\':1a();8;7\'M\':M();8;7\'Y\':Y();8;7\'U\':o(h.B==4){U(h[1],h[2],h[3])}8}};t S=e(b,5){9=1e(b);o(9==-1&b.N!=\'\'){W=1x 1l(b,R,5);$(b).Q({N:\'\',O:W.9,}).1g(\'1b\',{9:W.9},e(19){U($(q).1y().g,$(q).1y().f,$(q).1k(),$(q).1n(),19.1P.9);Y()}).1g(\'1d\',e(19){M()});6.1V(W);R++}};t 18=e(b){9=1e(b);o(9!=-1){$(b).Q({N:6[9].T,O:\'\'}).P(\'1b\').P(\'1d\');6[9].b=17;6.1L(9,1)}};t 1a=e(){M();1N(6.B>0){o(6[0].b!=17){$(6[0].b).Q({N:6[0].T,O:\'\'}).P(\'1b\').P(\'1d\');6[0].b=17}6.2b()}R=0};t 1e=e(b){1w=$(b).Q(\'O\');1Y(i=0;i<6.B;i++){o(6[i].9==1w)1v(i)}1v(-1)};t U=e(k,p,s,r,9){a=9;m=0;n=0;$(\'#1j\'+5.d).2g(6[a].T);$(\'#l\'+5.d).J({g:\'-1i\',f:\'-1i\',v:\'V\',});1f(6[a].5.1h){7\'f-g\':x=k;y=p;8;7\'f-c\':x=k+s/2;y=p;8;7\'f-E\':x=k+s;y=p;8;7\'c-g\':x=k;y=p+r/2;8;7\'c-c\':x=k+s/2;y=p+r/2;8;7\'c-E\':x=k+s;y=p+r/2;8;7\'D-g\':x=k;y=p+r;8;7\'D-c\':x=k+s/2;y=p+r;8;7\'D-E\':x=k+s;y=p+r;8}A=$(\'#l\').2d();u=$(\'#l\').29();F=$(\'#l\').1k();H=$(\'#l\').1n();G=(A-F)/2;I=(u-H)/2;j=\'\';1f(6[a].5.1m){7\'f-g\':x+=6[a].5.L;y+=6[a].5.C;m=-G;n=-10-I;j=\'14\';8;7\'f-c\':x-=A/2;y+=6[a].5.C;m=(F-10)/2;n=-10-I;j=\'14\';8;7\'f-E\':x-=A+6[a].5.L;y+=6[a].5.C;m=F-10+G;n=-10-I;j=\'14\';8;7\'c-g\':y-=u/2;m=-10-G;n=(H-10)/2;j=\'g\';8;7\'c-c\':x-=A/2;y-=u/2;8;7\'c-E\':x-=A+6[a].5.L;y-=u/2;m=F+G;n=(H-10)/2;j=\'E\';8;7\'D-g\':y-=u+6[a].5.C;m=-G;n=H+I;j=\'1c\';8;7\'D-c\':x-=A/2;y-=u+6[a].5.C;m=(F-10)/2;n=H+I;j=\'1c\';8;7\'D-E\':x-=A+6[a].5.L;y-=u+6[a].5.C;m=F-10+G;n=H+I;j=\'1c\';8}o(6[a].5.1z&j!=\'\'){$(\'#13\'+5.d).J({v:\'V\',1p:\'25("\'+6[a].5.1u+\'/26\'+j+\'.23") 1Z-20 2a 0 0 2f\',2e:m+\'K\',2c:n+\'K\',s:6[a].5.1q+\'K\',r:6[a].5.1r+\'K\',})}1s{$(\'#13\'+5.d).J(\'v\',\'X\')}$(\'#l\'+5.d).J({g:x+\'K\',f:y+\'K\',v:\'X\',}).21().1R(6[a].5.1t)};t Y=e(){$(\'#l\'+5.d).J(\'v\',\'V\')};t M=e(){$(\'#l\'+5.d).J(\'v\',\'X\')};t 1A=e(){o($(\'#l\'+5.d).B==0){1G="<w Z=\'l"+5.d+"\' 11=\'z-9:22;v:X;15:16;g:1B;f:1B;\'><w Z=\'1S"+5.d+"\' 11=\'15:16;s:1o%;r:1o%;1p:#1K;1C:0.4;24:27(1C:28);v:V;z-9:-1;1D-g:1F;1D-f:1F;\'></w><w Z=\'13"+5.d+"\' 11=\'15:16;\'></w><w Z=\'1j"+5.d+"\'></w></w>";$(\'1Q\').1H(1G)}};1A()}',62,141,'|||||options|items|case|break|index|itemIndex|item|middle|name|function|top|left|arguments||arrowModel|posX|iSimpleTip|arrowX|arrowY|if|posY|this|height|width|var|stHeight|display|div||||stWidth|length|offsetY|bottom|right|stWidthI|bwX|stHeightI|bwY|css|px|offsetX|hide|title|simpleTip|unbind|attr|itemIndexInc|add|content|prepare|block|tip|none|show|id||style||iSimpleTipArrow|up|position|absolute|null|remove|event|clear|mouseover|down|mouseout|getIndex|switch|bind|targetPos|1500px|iSimpleTipContent|innerWidth|tipItem|tipPos|innerHeight|100|background|arrowWidth|arrowHeight|else|classes|arrowImgDir|return|searched|new|offset|drawArrow|init|0px|opacity|margin|fct|2px|text|append|false|extend|000000|splice|jQuery|while|icons|data|body|addClass|iSimpleTipShadow|doAction|GrumPluginClasses|push|Array|plugins|for|no|repeat|removeClass|15000|png|filter|url|arrow_|alpha|40|outerHeight|scroll|shift|marginTop|outerWidth|marginLeft|transparent|html'.split('|'),0,{}))
Index: /extensions/GrumPluginClasses/js/ui.categorySelector.help.txt
===================================================================
--- /extensions/GrumPluginClasses/js/ui.categorySelector.help.txt	(revision 7175)
+++ /extensions/GrumPluginClasses/js/ui.categorySelector.help.txt	(revision 7175)
@@ -0,0 +1,19 @@
+.categorySelector('expand', param) usage
+   param = ':all'       Expand all the categories
+ param = ':all=x'     Expand all the categories with level=x ; other are not
+                       changed
+ param = ':all<x'     Expand all the categories with level<=x ; other are not
+                       changed
+ param = ':all>x'     Expand all the categories with level>=x ; other are not
+                       changed
+ param = ':all+x'     Expand all the categories with level<=x ; other are
+                       collapsed
+ param = 'zzz'        Expand the categories with catId=zzz ; other are not
+                       changed
+ param = 'zzz+'       Expand the categories with catId=zzz ; parent categories
+                       are expanded too, all other are collapsed
+ param = 'zzz<'       Expand the categories with catId=zzz ; parent categories
+                       are expanded too, all other are not changed
+ param = 'zzz>'       Expand the categories with catId=zzz ; childs categories
+                       are expanded too, all other are not changed
+
Index: /extensions/GrumPluginClasses/js/ui.categorySelector.js
===================================================================
--- /extensions/GrumPluginClasses/js/ui.categorySelector.js	(revision 7175)
+++ /extensions/GrumPluginClasses/js/ui.categorySelector.js	(revision 7175)
@@ -0,0 +1,1487 @@
+/**
+ * -----------------------------------------------------------------------------
+ * file: ui.categorySelector.js
+ * file version: 1.0.0
+ * date: 2010-10-10
+ *
+ * A jQuery plugin provided by the piwigo's plugin "GrumPluginClasses"
+ *
+ * -----------------------------------------------------------------------------
+ * Author     : Grum
+ *   email    : grum@piwigo.com
+ *   website  : http://photos.grum.fr
+ *   PWG user : http://forum.phpwebgallery.net/profile.php?id=3706
+ *
+ *   << May the Little SpaceFrog be with you ! >>
+ * -----------------------------------------------------------------------------
+ *
+ * see ui.categorySelector.help.txt for help about this plugin
+ *
+ * :: HISTORY ::
+ *
+ * | release | date       |
+ * | 1.0.0   | 2010/10/10 | first release
+ * |         |            |
+ * |         |            |
+ * |         |            |
+ * |         |            |
+ * |         |            |
+ * |         |            |
+ *
+ */
+
+
+
+(
+  function($)
+  {
+    /*
+     * plugin 'public' functions
+     */
+    var publicMethods =
+    {
+      init : function (opt)
+        {
+          return this.each(function()
+            {
+              // default values for the plugin
+              var $this=$(this),
+                  data = $this.data('options'),
+                  objects = $this.data('objects'),
+                  properties = $this.data('properties'),
+                  options =
+                    {
+                      autoLoad:true,
+                      galleryRoot:true,
+                      displayStatus:true,
+                      //displayNbPhotos:true,
+                      listMaxWidth:0,
+                      listMaxHeight:0,
+                      levelIndent:16,
+                      iconWidthEC:15,
+                      iconWidthCheck:18,
+                      serverUrl:'plugins/GrumPluginClasses/gpc_ajax.php',
+                      filter:'accessible',
+                      popup:null,
+                      change:null,
+                      load:null,
+                      multiple:false,
+                      userMode:'public'
+                    };
+
+              // if options given, merge it
+              // if(opt) $.extend(options, opt); ==> options are set by setters
+
+              $this.data('options', options);
+
+
+              if(!properties)
+              {
+                $this.data('properties',
+                  {
+                    index:-1,
+                    initialized:false,
+                    selectorVisible:false,
+                    categories:[],
+                    labelStatus:['', ''],
+                  }
+                );
+                properties=$this.data('properties');
+              }
+
+              if(!objects)
+              {
+                objects =
+                  {
+                    container:$('<div/>',
+                        {
+                          'class':'ui-category-selector',
+                          css:{
+                            width:'100%'
+                          }
+                        }
+                    ).bind('click.categorySelector',
+                        function ()
+                        {
+                          privateMethods.displaySelector($this, !$this.data('properties').selectorVisible);
+                        }
+                      ),
+                    containerName:$('<div/>',
+                      {
+                        html: '&nbsp;',
+                        'class':'ui-category-selector-name',
+                      }
+                    ),
+                    containerStatus:$('<div/>',
+                      {
+                        'class':'ui-category-selector-status',
+                        css: {
+                          float:'right',
+                          display:(options.displayStatus)?'block':'none'
+                        }
+                      }
+                    ),
+                    containerArrow:$('<div/>',
+                      {
+                        html: '&dArr;',
+                        'class':'ui-category-selector-arrow',
+                        css: {
+                          'float':'right',
+                          cursor:'pointer'
+                        }
+                      }
+                    ),
+
+                    listContainer:$('<div/>',
+                        {
+                          html: "",
+                          'class':'ui-category-selector-list',
+                          css: {
+                            overflow:"auto",
+                            display:'none',
+                            position:'absolute'
+                          }
+                        }
+                    ).bind('mouseleave.categorySelector',
+                        function ()
+                        {
+                          privateMethods.displaySelector($this, false);
+                        }
+                      ),
+                    list:$('<ul/>',
+                      {
+                        css: {
+                          listStyle:'none',
+                          padding:'0px',
+                          margin:'0px'
+                        }
+                      }
+                    )
+                  };
+
+                $this
+                  .html('')
+                  .append(objects.container.append(objects.containerArrow).append(objects.containerStatus).append(objects.containerName))
+                  .append(objects.listContainer.append(objects.list));
+
+                $this.data('objects', objects);
+              }
+
+              privateMethods.setOptions($this, opt);
+            }
+          );
+        }, // init
+      destroy : function ()
+        {
+          return this.each(
+            function()
+            {
+              // default values for the plugin
+              var $this=$(this),
+                  objects = $this.data('objects');
+              objects.container.unbind().remove();
+              objects.list.children().unbind();
+              objects.listContainer.remove();
+              $this
+                .unbind('.categorySelector')
+                .css(
+                  {
+                    width:'',
+                    height:''
+                  }
+                );
+            }
+          );
+        }, // destroy
+
+      options: function (value)
+        {
+          return this.each(function()
+            {
+              privateMethods.setOptions($(this), value);
+            }
+          );
+        }, // autoLoad
+
+      autoLoad: function (value)
+        {
+          if(value!=null)
+          {
+            return this.each(function()
+              {
+                privateMethods.setAutoLoad($(this), value);
+              }
+            );
+          }
+          else
+          {
+            var options = this.data('options');
+
+            if(options)
+            {
+              return(options.autoLoad);
+            }
+            else
+            {
+              return(true);
+            }
+          }
+        }, // autoLoad
+
+      galleryRoot: function (value)
+        {
+          if(value!=null)
+          {
+            return this.each(function()
+              {
+                privateMethods.setGalleryRoot($(this), value);
+              }
+            );
+          }
+          else
+          {
+            var options = this.data('options');
+
+            if(options)
+            {
+              return(options.galleryRoot);
+            }
+            else
+            {
+              return(true);
+            }
+          }
+        }, // autoLoad
+
+
+      listMaxWidth: function (value)
+        {
+          if(value)
+          {
+            return this.each(function()
+              {
+                privateMethods.setListMaxWidth($(this), value);
+              }
+            );
+          }
+          else
+          {
+            var options = this.data('options');
+
+            if(options)
+            {
+              return(options.listMaxWidth);
+            }
+            else
+            {
+              return(0);
+            }
+          }
+        }, // listMaxWidth
+
+      listMaxHeight: function (value)
+        {
+          if(value)
+          {
+            return this.each(function()
+              {
+                privateMethods.setListMaxHeight($(this), value);
+              }
+            );
+          }
+          else
+          {
+            var options = this.data('options');
+
+            if(options)
+            {
+              return(options.listMaxHeight);
+            }
+            else
+            {
+              return(0);
+            }
+          }
+        }, // listMaxHeight
+
+      displayStatus: function (value)
+        {
+          if(value!=null)
+          {
+            return this.each(function()
+              {
+                privateMethods.setDisplayStatus($(this), value);
+              }
+            );
+          }
+          else
+          {
+            var options = this.data('options');
+
+            if(options)
+            {
+              return(options.displayStatus);
+            }
+            else
+            {
+              return(true);
+            }
+          }
+        }, // displayStatus
+
+      levelIndent: function (value)
+        {
+          if(value)
+          {
+            return this.each(function()
+              {
+                privateMethods.setLevelIndent($(this), value);
+              }
+            );
+          }
+          else
+          {
+            var options = this.data('options');
+
+            if(options)
+            {
+              return(options.levelIndent);
+            }
+            else
+            {
+              return(0);
+            }
+          }
+        }, // levelIndent
+
+      serverUrl: function (value)
+        {
+          if(value)
+          {
+            return this.each(function()
+              {
+                privateMethods.setServerUrl($(this), value);
+              }
+            );
+          }
+          else
+          {
+            var options = this.data('options');
+
+            if(options)
+            {
+              return(options.serverUrl);
+            }
+            else
+            {
+              return('');
+            }
+          }
+        }, // serverUrl
+
+      filter: function (value)
+        {
+          if(value)
+          {
+            return this.each(function()
+              {
+                privateMethods.setFilter($(this), value);
+              }
+            );
+          }
+          else
+          {
+            var options = this.data('options');
+
+            if(options)
+            {
+              return(options.filter);
+            }
+            else
+            {
+              return('');
+            }
+          }
+        }, // filter
+
+      collapse: function (value)
+        {
+          return this.each(function()
+            {
+              if(!value) value=':all';
+              privateMethods.setExpandCollapse($(this), value, 'C');
+            }
+          );
+        }, // collapse
+
+      expand: function (value)
+        {
+          return this.each(function()
+            {
+              if(!value) value=':all';
+              privateMethods.setExpandCollapse($(this), value, 'E');
+            }
+          );
+        }, // expand
+
+      iconWidthEC: function (value)
+        {
+          if(value)
+          {
+            return this.each(function()
+              {
+                privateMethods.setIconWidthEC($(this), value);
+              }
+            );
+          }
+          else
+          {
+            var options = this.data('options');
+
+            if(options)
+            {
+              return(options.iconWidthEC);
+            }
+            else
+            {
+              return(0);
+            }
+          }
+        }, // iconWidthEC
+
+      iconWidthCheck: function (value)
+        {
+          if(value)
+          {
+            return this.each(function()
+              {
+                privateMethods.setIconWidthCheck($(this), value);
+              }
+            );
+          }
+          else
+          {
+            var options = this.data('options');
+
+            if(options)
+            {
+              return(options.iconWidthCheck);
+            }
+            else
+            {
+              return(0);
+            }
+          }
+        }, // iconWidthCheck
+
+      userMode: function (value)
+        {
+          if(value)
+          {
+            return this.each(function()
+              {
+                privateMethods.setUserMode($(this), value);
+              }
+            );
+          }
+          else
+          {
+            var options = this.data('options');
+
+            if(options)
+            {
+              return(options.userMode);
+            }
+            else
+            {
+              return(0);
+            }
+          }
+        }, // userMode
+
+      value: function (value)
+        {
+          if(value)
+          {
+            // set selected value
+            return this.each(function()
+              {
+                privateMethods.setValue($(this), value);
+              }
+            );
+          }
+          else
+          {
+            // return the selected value
+            var properties=this.data('properties'),
+                options = this.data('options');
+
+            if(properties && properties.index!=null && !options.multiple && properties.index>-1 && properties.index<properties.categories.length)
+            {
+              return(properties.categories[properties.index].id);
+            }
+            else if(properties && properties.index!=null && options.multiple)
+            {
+              var returned=[];
+              for(var i=0;i<properties.index.length;i++)
+              {
+                if(properties.index[i]>-1 && properties.index[i]<properties.categories.length)
+                  returned.push(properties.categories[properties.index[i]].id);
+              }
+              return(returned);
+            }
+            else
+            {
+              return(null);
+            }
+          }
+        }, // value
+      load: function (value)
+        {
+          /*
+           * two functionnalities :
+           *  - if value is set, use it to set the load event function
+           *  - if no value, loads data from server
+           */
+          if(value && $.isFunction(value))
+          {
+            // set selected value
+            return this.each(function()
+              {
+                privateMethods.setEventLoad($(this), value);
+              }
+            );
+          }
+          else
+          {
+            // loads data from server
+            privateMethods.load(this);
+          }
+        },
+
+      popup: function (value)
+        {
+          if(value && $.isFunction(value))
+          {
+            // set selected value
+            return this.each(function()
+              {
+                privateMethods.setEventPopup($(this), value);
+              }
+            );
+          }
+          else
+          {
+            // return the selected value
+            var options=this.data('options');
+
+            if(options)
+            {
+              return(options.popup);
+            }
+            else
+            {
+              return(null);
+            }
+          }
+        }, // popup
+      change: function (value)
+        {
+          if(value && $.isFunction(value))
+          {
+            // set selected value
+            return this.each(function()
+              {
+                privateMethods.setEventChange($(this), value);
+              }
+            );
+          }
+          else
+          {
+            // return the selected value
+            var options=this.data('options');
+
+            if(options)
+            {
+              return(options.change);
+            }
+            else
+            {
+              return(null);
+            }
+          }
+        }, // popup
+      numberOfCategories: function ()
+        {
+          var properties=this.data('properties');
+
+          if(properties)
+          {
+            return(properties.categories.length);
+          }
+          else
+          {
+            return(null);
+          }
+        }, // numberOfCategories
+      properties: function (value)
+        {
+          var properties=this.data('properties');
+
+          if(properties && value==':first' && properties.categories.length>0)
+          {
+            return(properties.categories[0]);
+          }
+          else if(properties && properties.index!=null && (value==':selected' || value==null) && properties.categories.length>0)
+          {
+            if(!option.multiple && properties.index>-1 && properties.index<properties.categories.length)
+            {
+              return(properties.categories[properties.index]);
+            }
+            else if(option.multiple)
+            {
+              var returned=[];
+              for(var i=0;i<properties.index.length;i++)
+              {
+                if(properties.index[i]>-1 && properties.index<properties.categories.length)
+                  returned.push(properties.categories[properties.index[i]]);
+              }
+              return(returned);
+            }
+            return(null);
+          }
+          else if(properties && value>-1)
+          {
+            var index=privateMethods.findIndexByValue(this, value);
+            if(index>-1)
+            {
+              return(properties.categories[index]);
+            }
+            return(null);
+          }
+          else
+          {
+            return(null);
+          }
+        }, // numberOfCategories
+    }; // methods
+
+
+    /*
+     * plugin 'private' methods
+     */
+    var privateMethods =
+    {
+      setOptions : function (object, value)
+        {
+          var properties=object.data('properties'),
+              options=object.data('options');
+
+          if(!$.isPlainObject(value)) return(false);
+
+          properties.initialized=false;
+
+          privateMethods.setAutoLoad(object, (value.autoLoad!=null)?value.autoLoad:options.autoLoad);
+          privateMethods.setGalleryRoot(object, (value.galleryRoot!=null)?value.galleryRoot:options.galleryRoot);
+          privateMethods.setDisplayStatus(object, (value.displayStatus!=null)?value.displayStatus:options.displayStatus);
+          privateMethods.setListMaxWidth(object, (value.listMaxWidth!=null)?value.listMaxWidth:options.listMaxWidth);
+          privateMethods.setListMaxHeight(object, (value.listMaxHeight!=null)?value.listMaxHeight:options.listMaxHeight);
+          privateMethods.setLevelIndent(object, (value.levelIndent!=null)?value.levelIndent:options.levelIndent);
+          privateMethods.setIconWidthEC(object, (value.iconWidthEC!=null)?value.iconWidthEC:options.iconWidthEC);
+          privateMethods.setIconWidthCheck(object, (value.iconWidthCheck!=null)?value.iconWidthCheck:options.iconWidthCheck);
+          privateMethods.setServerUrl(object, (value.serverUrl!=null)?value.serverUrl:options.serverUrl);
+          privateMethods.setFilter(object, (value.filter!=null)?value.filter:options.filter);
+          privateMethods.setUserMode(object, (value.userMode!=null)?value.userMode:options.userMode);
+          privateMethods.setEventPopup(object, (value.popup!=null)?value.popup:options.popup);
+          privateMethods.setEventChange(object, (value.change!=null)?value.change:options.change);
+          privateMethods.setEventLoad(object, (value.load!=null)?value.load:options.load);
+          privateMethods.setMultiple(object, (value.multiple!=null)?value.multiple:options.multiple); // can be set only at the initialization
+
+          if(options.autoLoad) privateMethods.load(object);
+
+          properties.initialized=true;
+        },
+
+      setAutoLoad : function (object, value)
+        {
+          var options=object.data('options'),
+              properties=object.data('properties');
+          if((!properties.initialized || options.autoLoad!=value) && (value==true || value==false))
+          {
+            options.autoLoad=value;
+          }
+          return(options.autoLoad);
+        },
+
+      setGalleryRoot : function (object, value)
+        {
+          var options=object.data('options'),
+              properties=object.data('properties');
+          if((!properties.initialized || options.galleryRoot!=value) && (value==true || value==false))
+          {
+            options.galleryRoot=value;
+            if(options.autoLoad && properties.initialized) privateMethods.load(object);
+          }
+          return(options.galleryRoot);
+        },
+
+      setListMaxWidth : function (object, value)
+        {
+          var options=object.data('options'),
+              properties=object.data('properties'),
+              objects=object.data('objects');
+          if((!properties.initialized || options.listMaxWidth!=value) && value>=0)
+          {
+            options.listMaxWidth=value;
+            if(options.listMaxWidth>0)
+            {
+              objects.listContainer.css('max-width', options.listMaxWidth+'px');
+            }
+            else
+            {
+              objects.listContainer.css('max-width', '');
+            }
+          }
+          return(options.listMaxWidth);
+        },
+
+      setListMaxHeight : function (object, value)
+        {
+          var options=object.data('options'),
+              properties=object.data('properties'),
+              objects=object.data('objects');
+          if((!properties.initialized || options.listMaxHeight!=value) && value>=0)
+          {
+            options.listMaxHeight=value;
+            if(options.listMaxHeight>0)
+            {
+              objects.listContainer.css('max-height', options.listMaxHeight+'px');
+            }
+            else
+            {
+              objects.listContainer.css('max-height', '');
+            }
+          }
+          return(options.listMaxHeight);
+        },
+
+      setDisplayStatus : function (object, value)
+        {
+          var options=object.data('options'),
+              properties=object.data('properties'),
+              objects=object.data('objects');
+          if((!properties.initialized || options.displayStatus!=value) && (value==true || value==false))
+          {
+            options.displayStatus=value;
+            if(options.displayStatus)
+            {
+              object.find('.ui-category-selector-status').show();
+            }
+            else
+            {
+              object.find('.ui-category-selector-status').hide();
+            }
+          }
+          return(options.displayStatus);
+        },
+
+      setLevelIndent : function (object, value)
+        {
+          var options=object.data('options'),
+              properties=object.data('properties'),
+              objects=object.data('objects');
+          if((!properties.initialized || options.levelIndent!=value) && value>=0)
+          {
+            options.levelIndent=value;
+            objects.list.find('.ui-category-selector-item').each(
+              function ()
+              {
+                $(this).css('padding-left', (options.iconWidthEC+options.iconWidthCheck+$(this).attr('level')*options.levelIndent)+'px');
+              }
+            );
+          }
+          return(options.levelIndent);
+        },
+
+      setServerUrl : function (object, value)
+        {
+          var options=object.data('options'),
+              properties=object.data('properties');
+          if(!properties.initialized || options.serverUrl!=value)
+          {
+            options.serverUrl=value;
+            if(options.autoLoad && properties.initialized) privateMethods.load(object);
+          }
+          return(options.serverUrl);
+        },
+
+
+      setFilter : function (object, value)
+        {
+          var options=object.data('options'),
+              properties=object.data('properties');
+          if((!properties.initialized || options.filter!=value) && (value=='none' || value=='accessible' || value=='public'))
+          {
+            options.filter=value;
+            if(options.autoLoad && properties.initialized) privateMethods.load(object);
+          }
+          return(options.filter);
+        },
+
+      setIconWidthEC : function (object, value)
+        {
+          var options=object.data('options'),
+              properties=object.data('properties'),
+              objects=object.data('objects');
+          if((!properties.initialized || options.iconWidthEC!=value) && value>=0)
+          {
+            options.iconWidthEC=value;
+            objects.list.find('.ui-category-selector-item').each(
+              function ()
+              {
+                $(this).css('padding-left', (options.iconWidthEC+options.iconWidthCheck+$(this).attr('level')*options.levelIndent)+'px');
+              }
+            );
+          }
+          return(options.filter);
+        },
+
+      setIconWidthCheck : function (object, value)
+        {
+          var options=object.data('options'),
+              properties=object.data('properties'),
+              objects=object.data('objects');
+          if((!properties.initialized || options.iconWidthCheck!=value) && (value>=0 && options.multiple || !options.multiple && value==0))
+          {
+            options.iconWidthCheck=value;
+            objects.list.find('.ui-category-selector-item').each(
+              function ()
+              {
+                $(this).css('padding-left', (options.iconWidthEC+options.iconWidthCheck+$(this).attr('level')*options.levelIndent)+'px');
+              }
+            );
+          }
+          return(options.filter);
+        },
+
+      setMultiple : function (object, value)
+        {
+          var options=object.data('options'),
+              properties=object.data('properties'),
+              objects=object.data('objects');
+          if((!properties.initialized || options.multiple!=value) && (value==true || value==false))
+          {
+            if(!value)
+            {
+              privateMethods.setIconWidthCheck(object, 0);
+              properties.index=-1;
+            }
+            else
+            {
+              properties.index=[];
+              objects.listContainer.addClass('ui-category-selector-multiple');
+            }
+            options.multiple=value;
+          }
+          return(options.filter);
+        }, //setMultiple
+
+      setUserMode : function (object, value)
+        {
+          var options=object.data('options'),
+              properties=object.data('properties'),
+              objects=object.data('objects');
+          if((!properties.initialized || options.userMode!=value) && (value=='admin' || value=='public'))
+          {
+            options.userMode=value;
+            if(options.autoLoad && properties.initialized) privateMethods.load(object);
+          }
+          return(options.filter);
+        }, //setUserMode
+
+      /**
+       * usage : see notes on the header file
+       *
+       * @param jQuery object : the jQuery object
+       * @param String value : the filter
+       * @param String mode : 'C' for collapse, 'E' for expand
+       */
+      setExpandCollapse : function (object, value, mode)
+        {
+          var objects=object.data('objects');
+
+          /*
+           *  target[1] = ':all' or catId
+           * target[2] = '=' or '<' or '>' or '+'
+           * target[3] = level
+           */
+          re=/^(?:(:all)(?:(=|<|>|\+)(\d+))?)|(?:(\d+)(<|>|\+))?$/i;
+          target=re.exec(value);
+
+          if(target!=null)
+          {
+            switch(mode)
+            {
+              case 'C':
+                applyExpandCollapse=privateMethods.applyCollapse;
+                break;
+              case 'E':
+                applyExpandCollapse=privateMethods.applyExpand;
+                break;
+            }
+
+
+            if(target[1]==':all')
+            {
+              objects.list.find('.ui-category-selector-expandable-item, .ui-category-selector-collapsable-item').each(applyExpandCollapse);
+            }
+            else if(target[4]!=null)
+            {
+              switch(target[5])
+              {
+                case '+':
+                  objects.list.find('.ui-category-selector-expandable-item, .ui-category-selector-collapsable-item').each(privateMethods.applyCollapse);
+                  objects.list.find(':has([catId='+target[4]+'])').prev().each(privateMethods.applyExpand);
+                  objects.list.find('[catId='+target[4]+']').each(applyExpandCollapse);
+                  break;
+                case '>':
+                  objects.list.find('[catId='+target[4]+'] + ul').find('.ui-category-selector-expandable-item, .ui-category-selector-collapsable-item').each(applyExpandCollapse);
+                  objects.list.find('[catId='+target[4]+']').each(applyExpandCollapse);
+                  break;
+                case '<':
+                  objects.list.find(':has([catId='+target[4]+'])').prev().each(applyExpandCollapse);
+                  objects.list.find('[catId='+target[4]+']').each(applyExpandCollapse);
+                  break;
+                default:
+                  objects.list.find('[catId='+target[4]+']').each(applyExpandCollapse);
+                  break;
+              }
+            }
+
+          }
+        }, //setExpandCollapse
+
+      applyExpand : function (index, domElt)
+        {
+          privateMethods.applyExpandCollapse(index, domElt, 'E');
+        }, //applyExpand
+      applyCollapse : function (index, domElt)
+        {
+          privateMethods.applyExpandCollapse(index, domElt, 'C');
+        }, //applyCollapse
+
+      /**
+       * used by the setExpandCollapse function
+       * not aimed to be used directly
+       */
+      applyExpandCollapse : function (index, domElt, mode)
+              {
+                action='';
+                var $domElt=$(domElt);
+
+                if(target.length>2 && target[2]!=null && target[3]!=null)
+                {
+                  switch(target[2])
+                  {
+                    case '=':
+                      if($domElt.attr('level')==target[3]) action=mode;
+                      break;
+                    case '>':
+                      if($domElt.attr('level')>=target[3]) action=mode;
+                      break;
+                    case '<':
+                      if($domElt.attr('level')<=target[3]) action=mode;
+                      break;
+                    case '+':
+                      if((mode=='E' && $domElt.attr('level')<=target[3]) ||
+                         (mode=='C' && $domElt.attr('level')>=target[3]))
+                      {
+                        action=mode;
+                      }
+                      else
+                      {
+                        action=(mode=='C')?'E':'C';
+                      }
+                      break;
+                  }
+                }
+                else action=mode;
+
+                switch(action)
+                {
+                  case 'C':
+                    $domElt
+                      .removeClass('ui-category-selector-expandable-item ui-category-selector-collapsable-item')
+                      .addClass('ui-category-selector-expandable-item')
+                      .next().hide();
+                    break;
+                  case 'E':
+                    $domElt
+                      .removeClass('ui-category-selector-expandable-item ui-category-selector-collapsable-item')
+                      .addClass('ui-category-selector-collapsable-item')
+                      .next().show();
+                    break;
+                }
+
+              }, //applyExpandCollapse
+
+      setValue : function (object, value, trigger)
+        {
+          var options=object.data('options'),
+              properties=object.data('properties'),
+              objects=object.data('objects'),
+              index=-1;
+
+          re=/^(:invert|:all|:none)(?:(=|<|>)(\d+))$/i;
+          target=re.exec(value);
+          if(target!=null) value=target[1];
+
+          switch(value)
+          {
+            case ':first':
+              if(properties.categories.length>0) index=0;
+              break;
+            case ':last':
+              index=properties.categories.length-1;
+              break;
+            case ':invert':
+              if(!options.multiple) return(false);
+
+              objects.list.find('.ui-category-selector-item').each(
+                function ()
+                {
+                  var $this=$(this),
+                      apply=true;
+
+                  if(target!=null)
+                  {
+                    switch(target[2])
+                    {
+                      case '=':
+                        apply=($this.attr('level')==target[3]);
+                        break;
+                      case '>':
+                        apply=($this.attr('level')>=target[3]);
+                        break;
+                      case '<':
+                        apply=($this.attr('level')<=target[3]);
+                        break;
+                    }
+                  }
+
+                  if(apply)
+                  {
+                    if($this.hasClass('ui-category-selector-selected-item'))
+                    {
+                      $this.removeClass('ui-category-selector-selected-item');
+                    }
+                    else
+                    {
+                      $this.addClass('ui-category-selector-selected-item');
+                    }
+                  }
+                }
+              );
+              privateMethods.setValue(object, [], false);
+              return(false);
+              break;
+            case ':none':
+              if(!options.multiple) return(false);
+              objects.list.find('.ui-category-selector-selected-item').each(
+                function ()
+                {
+                  var $this=$(this),
+                      apply=true;
+
+                  if(target!=null)
+                  {
+                    switch(target[2])
+                    {
+                      case '=':
+                        apply=($this.attr('level')==target[3]);
+                        break;
+                      case '>':
+                        apply=($this.attr('level')>=target[3]);
+                        break;
+                      case '<':
+                        apply=($this.attr('level')<=target[3]);
+                        break;
+                    }
+                  }
+
+                  if(apply) $this.removeClass('ui-category-selector-selected-item');
+                }
+              );
+              privateMethods.setValue(object, [], false);
+              return(false);
+              break;
+            case ':all':
+              if(!options.multiple) return(false);
+              objects.list.find('.ui-category-selector-item').each(
+                function ()
+                {
+                  var $this=$(this),
+                      apply=true;
+
+                  if(target!=null)
+                  {
+                    switch(target[2])
+                    {
+                      case '=':
+                        apply=($this.attr('level')==target[3]);
+                        break;
+                      case '>':
+                        apply=($this.attr('level')>=target[3]);
+                        break;
+                      case '<':
+                        apply=($this.attr('level')<=target[3]);
+                        break;
+                    }
+                  }
+
+                  if(apply) $this.addClass('ui-category-selector-selected-item');
+                }
+              );
+              privateMethods.setValue(object, [], false);
+              return(false);
+              break;
+            default:
+              if($.isArray(value) && options.multiple)
+              {
+                index=[];
+                for(var i=0;i<value.length;i++)
+                {
+                  tmp=privateMethods.findIndexByValue(object, value[i]);
+                  if(tmp>-1) index.push(tmp);
+                }
+              }
+              else
+              {
+                index=privateMethods.findIndexByValue(object, value);
+              }
+
+              break;
+          }
+
+          if(!options.multiple && (!properties.initialized || properties.index!=index) && index>-1)
+          {
+            objects.list.find('.ui-category-selector-selected-item').removeClass('ui-category-selector-selected-item');
+            objects.list.find('[catId="'+value+'"]').addClass('ui-category-selector-selected-item');
+            properties.index=index;
+            objects.containerName.html(properties.categories[properties.index].name);
+            objects.containerStatus.html(properties.labelStatus[properties.categories[properties.index].status]);
+            if(trigger && options.change) object.trigger('categorySelectorChange', [properties.categories[properties.index].id]);
+            if(properties.index>-1) return(properties.categories[properties.index].id);
+          }
+          else if(options.multiple)
+          {
+            if(!$.isArray(index))
+            {
+              if(index<0 || index==null) return(-1);
+              index=[index];
+            }
+            tmp=[];
+            for(var i=0;i<index.length;i++)
+            {
+              var item=objects.list.find('[catId="'+properties.categories[index[i]].id+'"]');
+
+              if(item.hasClass('ui-category-selector-selected-item'))
+              {
+                item.removeClass('ui-category-selector-selected-item');
+
+                tmpIndex=$.inArray(index[i] ,properties.index);
+                if(tmpIndex>-1) properties.index.splice(tmpIndex, 1);
+              }
+              else
+              {
+                item.addClass('ui-category-selector-selected-item');
+                properties.index.push(index[i]);
+              }
+              tmp.push(properties.categories[index[i]].id);
+            }
+            containerHtml='';
+            objects.list.find('.ui-category-selector-selected-item div.ui-category-selector-name').each(
+              function ()
+              {
+                containerHtml+=((containerHtml=='')?'':'&nbsp;; ')+$(this).html();
+              }
+            );
+            if(containerHtml=='') containerHtml="&nbsp;";
+            objects.containerName.html(containerHtml);
+            if(trigger && options.change) object.trigger('categorySelectorChange', [tmp]);
+            return(tmp);
+          }
+          return(null);
+        },
+
+      displaySelector : function (object, value)
+        {
+          var options=object.data('options'),
+              properties=object.data('properties'),
+              objects=object.data('objects');
+          if(properties.selectorVisible!=value)
+          {
+            properties.selectorVisible=value;
+
+            if(properties.selectorVisible && properties.categories.length>0)
+            {
+              var index=0;
+              objects.listContainer
+                .css(
+                  {
+                    display:'block',
+                    'min-width':objects.listContainer.parent().css('width')
+                  }
+                );
+              if($.isArray(properties.index))
+              {
+                if (properties.index.length>0) index=properties.index[0];
+              }
+              else if(properties.index>-1)
+              {
+                index=properties.index;
+              }
+              objects.listContainer.scrollTop(objects.listContainer.scrollTop()+objects.list.find('[catId="'+properties.categories[index].id+'"]').position().top);
+            }
+            else
+            {
+              objects.listContainer.css('display', 'none');
+            }
+            if(options.popup) object.trigger('categorySelectorPopup', [properties.selectorVisible]);
+          }
+          return(properties.selectorVisible);
+        },
+
+      load : function (object)
+        {
+          // load datas from server through an asynchronous ajax call
+          var options=object.data('options'),
+              properties=object.data('properties'),
+              objects=object.data('objects');
+
+          $.ajax(
+            {
+              type: "POST",
+              url: options.serverUrl,
+              async: true,
+              data:
+                {
+                  ajaxfct:options.userMode+'.categorySelector.getList',
+                  filter:options.filter,
+                  galleryRoot:options.galleryRoot?'y':'n',
+                  tree:'y'
+                },
+              success: function(msg)
+                {
+                  list=$.parseJSON(msg);
+
+                  properties.labelStatus=list.status;
+                  privateMethods.listClear(object);
+                  privateMethods.listAddItems(object, list.categories, objects.list);
+
+                  properties.initialized=false;
+                  privateMethods.setValue(object, ':first');
+                  properties.initialized=true;
+
+                  if(options.load) object.trigger('categorySelectorLoad');
+                },
+              error: function(msg)
+                {
+                  objects.listContainer.html('Error ! '+msg);
+                },
+            }
+         );
+        },
+
+      listClear : function (object)
+        {
+          // clear the categorie list
+          var objects=object.data('objects'),
+              options=object.data('options'),
+              properties=object.data('properties');
+
+          objects.list.children().unbind();
+          objects.list.html('');
+          if(options.multiple)
+          {
+            properties.index=[];
+          }
+          else
+          {
+            properties.index=-1;
+          }
+          properties.categories=[];
+        },
+      listAddItems : function (object, listItems, parent)
+        {
+          // add the items to the categorie list
+          var options=object.data('options'),
+              properties=object.data('properties'),
+              objects=object.data('objects');
+
+          var previousLevel=-1;
+          for(var i=0;i<listItems.length;i++)
+          {
+            properties.categories.push(
+              {
+                id:listItems[i].id,
+                level:listItems[i].level,
+                name:listItems[i].name,
+                status:listItems[i].status,
+                childs:listItems[i].childs.length
+              }
+            );
+
+            if(options.displayStatus)
+            {
+              status="<div class='ui-category-selector-status'>"+properties.labelStatus[listItems[i].status]+"</div>";
+            }
+            else
+            {
+              status="";
+            }
+
+            var spaceWidth = (options.iconWidthEC+options.iconWidthCheck+listItems[i].level*options.levelIndent),
+                li=$('<li/>',
+                      {
+                        'class':'ui-category-selector-item',
+                        html:"<div>"+status+"<div class='ui-category-selector-name'>"+listItems[i].name+"</div></div>",
+                        catId:listItems[i].id,
+                        level:listItems[i].level,
+                        css:{
+                          'padding-left':spaceWidth+'px'
+                        }
+                      }
+                    ).bind('click.categorySelector',
+                        {object:object, expandArea: spaceWidth, nbchilds:listItems[i].childs.length },
+                        function (event)
+                        {
+                          if(!event.layerX && event.offsetX)
+                          {
+                            // trick for IE..
+                            event.layerX=event.offsetX;
+                            event.layerY=event.offsetY;
+                          }
+
+                          if(event.layerX<event.data.expandArea && event.data.nbchilds>0 )
+                          {
+                            if($(this).hasClass('ui-category-selector-expandable-item'))
+                            {
+                              $(this)
+                                .removeClass('ui-category-selector-expandable-item')
+                                .addClass('ui-category-selector-collapsable-item')
+                                .next().show();
+                            }
+                            else
+                            {
+                              $(this)
+                                .removeClass('ui-category-selector-collapsable-item')
+                                .addClass('ui-category-selector-expandable-item')
+                                .next().hide();
+                            }
+                          }
+                          else
+                          {
+                            privateMethods.setValue(event.data.object, $(this).attr('catId'), true);
+                            if(options.multiple)
+                            {
+                            }
+                            else
+                            {
+                              privateMethods.displaySelector(event.data.object, false);
+                            }
+                          }
+                        }
+                      );
+            if(listItems[i].childs.length>0)
+            {
+              li.addClass('ui-category-selector-collapsable-item').css('background-position', (options.iconWidthCheck+options.levelIndent*listItems[i].level)+'px 0px');
+            }
+
+            if(options.multiple)
+            {
+              li.prepend('<div class="ui-category-selector-check"></div>');
+            }
+
+            parent.append(li);
+
+            if(listItems[i].childs.length>0)
+            {
+              var ul=$('<ul/>',
+                        {
+                          'class':'ui-category-selector-group',
+                          css: {
+                            listStyle:'none',
+                            padding:'0px',
+                            margin:'0px',
+                            'font-size':(100-listItems[i].level*2)+'%'
+                          }
+                        }
+                      );
+              li.after(ul);
+              privateMethods.listAddItems(object, listItems[i].childs, ul);
+            }
+
+          }
+        },
+
+      findIndexByValue : function (object, value)
+        {
+          /*
+           * search a categorie inside the categories list and return the index
+           * in the array
+           */
+          var properties=object.data('properties');
+          for(var i=0;i<properties.categories.length;i++)
+          {
+            if(properties.categories[i].id==value) return(i);
+          }
+          return(-1);
+        },
+      setEventPopup : function (object, value)
+        {
+          var options=object.data('options');
+          options.popup=value;
+          object.unbind('categorySelectorPopup');
+          if(value) object.bind('categorySelectorPopup', options.popup);
+          return(options.popup);
+        },
+      setEventChange : function (object, value)
+        {
+          var options=object.data('options');
+          options.change=value;
+          object.unbind('categorySelectorChange');
+          if(value) object.bind('categorySelectorChange', options.change);
+          return(options.change);
+        },
+      setEventLoad : function (object, value)
+        {
+          var options=object.data('options');
+          options.load=value;
+          object.unbind('categorySelectorLoad');
+          if(value) object.bind('categorySelectorLoad', options.load);
+          return(options.load);
+        }
+    };
+
+
+    $.fn.categorySelector = function(method)
+    {
+      if(publicMethods[method])
+      {
+        return publicMethods[method].apply( this, Array.prototype.slice.call( arguments, 1 ));
+      }
+      else if(typeof method === 'object' || ! method)
+      {
+        return publicMethods.init.apply(this, arguments);
+      }
+      else
+      {
+        $.error( 'Method ' +  method + ' does not exist on jQuery.categorySelector' );
+      }
+    } // $.fn.categorySelector
+
+  }
+)(jQuery);
+
+
Index: /extensions/GrumPluginClasses/js/ui.categorySelector.packed.js
===================================================================
--- /extensions/GrumPluginClasses/js/ui.categorySelector.packed.js	(revision 7175)
+++ /extensions/GrumPluginClasses/js/ui.categorySelector.packed.js	(revision 7175)
@@ -0,0 +1,2 @@
+/* file: ui.categorySelector.js - v1.0.0 | packed on 2010/10/13 with http://joliclic.free.fr/php/javascript-packer/ */
+eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('(g($){k 1N={2R:g(2K){c b.t(g(){k $b=$(b),e=$b.e(\'6\'),f=$b.e(\'f\'),8=$b.e(\'8\'),6={O:K,19:K,Y:K,12:0,11:0,R:16,10:15,U:18,1c:\'3n/3F/3w.3E\',N:\'2V\',1d:q,13:q,M:q,F:G,1h:\'2p\'};$b.e(\'6\',6);a(!8){$b.e(\'8\',{h:-1,D:G,1m:G,v:[],1I:[\'\',\'\'],});8=$b.e(\'8\')}a(!f){f={2a:$(\'<S/>\',{\'1e\':\'p-o-m\',H:{1w:\'2L%\'}}).1G(\'2W.1q\',g(){j.1O($b,!$b.e(\'8\').1m)}),1T:$(\'<S/>\',{17:\'&26;\',\'1e\':\'p-o-m-1t\',}),2q:$(\'<S/>\',{\'1e\':\'p-o-m-Z\',H:{2D:\'2z\',1L:(6.Y)?\'2w\':\'1k\'}}),2M:$(\'<S/>\',{17:\'&3C;\',\'1e\':\'p-o-m-3u\',H:{\'2D\':\'2z\',3f:\'37\'}}),T:$(\'<S/>\',{17:"",\'1e\':\'p-o-m-u\',H:{31:"2X",1L:\'1k\',2k:\'2Y\'}}).1G(\'30.1q\',g(){j.1O($b,G)}),u:$(\'<1v/>\',{H:{2O:\'1k\',1F:\'1H\',2N:\'1H\'}})};$b.17(\'\').1u(f.2a.1u(f.2M).1u(f.2q).1u(f.1T)).1u(f.T.1u(f.u));$b.e(\'f\',f)}j.2b($b,2K)})},36:g(){c b.t(g(){k $b=$(b),f=$b.e(\'f\');f.2a.1p().2G();f.u.2U().1p();f.T.2G();$b.1p(\'.1q\').H({1w:\'\',21:\'\'})})},6:g(7){c b.t(g(){j.2b($(b),7)})},O:g(7){a(7!=q){c b.t(g(){j.24($(b),7)})}l{k 6=b.e(\'6\');a(6){c(6.O)}l{c(K)}}},19:g(7){a(7!=q){c b.t(g(){j.1Y($(b),7)})}l{k 6=b.e(\'6\');a(6){c(6.19)}l{c(K)}}},12:g(7){a(7){c b.t(g(){j.22($(b),7)})}l{k 6=b.e(\'6\');a(6){c(6.12)}l{c(0)}}},11:g(7){a(7){c b.t(g(){j.20($(b),7)})}l{k 6=b.e(\'6\');a(6){c(6.11)}l{c(0)}}},Y:g(7){a(7!=q){c b.t(g(){j.1Z($(b),7)})}l{k 6=b.e(\'6\');a(6){c(6.Y)}l{c(K)}}},R:g(7){a(7){c b.t(g(){j.23($(b),7)})}l{k 6=b.e(\'6\');a(6){c(6.R)}l{c(0)}}},1c:g(7){a(7){c b.t(g(){j.27($(b),7)})}l{k 6=b.e(\'6\');a(6){c(6.1c)}l{c(\'\')}}},N:g(7){a(7){c b.t(g(){j.1W($(b),7)})}l{k 6=b.e(\'6\');a(6){c(6.N)}l{c(\'\')}}},35:g(7){c b.t(g(){a(!7)7=\':1E\';j.28($(b),7,\'C\')})},34:g(7){c b.t(g(){a(!7)7=\':1E\';j.28($(b),7,\'E\')})},10:g(7){a(7){c b.t(g(){j.1X($(b),7)})}l{k 6=b.e(\'6\');a(6){c(6.10)}l{c(0)}}},U:g(7){a(7){c b.t(g(){j.1M($(b),7)})}l{k 6=b.e(\'6\');a(6){c(6.U)}l{c(0)}}},1h:g(7){a(7){c b.t(g(){j.2u($(b),7)})}l{k 6=b.e(\'6\');a(6){c(6.1h)}l{c(0)}}},7:g(7){a(7){c b.t(g(){j.1n($(b),7)})}l{k 8=b.e(\'8\'),6=b.e(\'6\');a(8&&8.h!=q&&!6.F&&8.h>-1&&8.h<8.v.B){c(8.v[8.h].14)}l a(8&&8.h!=q&&6.F){k 1x=[];1A(k i=0;i<8.h.B;i++){a(8.h[i]>-1&&8.h[i]<8.v.B)1x.1y(8.v[8.h[i]].14)}c(1x)}l{c(q)}}},M:g(7){a(7&&$.2r(7)){c b.t(g(){j.2c($(b),7)})}l{j.M(b)}},1d:g(7){a(7&&$.2r(7)){c b.t(g(){j.2g($(b),7)})}l{k 6=b.e(\'6\');a(6){c(6.1d)}l{c(q)}}},13:g(7){a(7&&$.2r(7)){c b.t(g(){j.29($(b),7)})}l{k 6=b.e(\'6\');a(6){c(6.13)}l{c(q)}}},38:g(){k 8=b.e(\'8\');a(8){c(8.v.B)}l{c(q)}},8:g(7){k 8=b.e(\'8\');a(8&&7==\':25\'&&8.v.B>0){c(8.v[0])}l a(8&&8.h!=q&&(7==\':Q\'||7==q)&&8.v.B>0){a(!2E.F&&8.h>-1&&8.h<8.v.B){c(8.v[8.h])}l a(2E.F){k 1x=[];1A(k i=0;i<8.h.B;i++){a(8.h[i]>-1&&8.h<8.v.B)1x.1y(8.v[8.h[i]])}c(1x)}c(q)}l a(8&&7>-1){k h=j.1R(b,7);a(h>-1){c(8.v[h])}c(q)}l{c(q)}},};k j={2b:g(9,7){k 8=9.e(\'8\'),6=9.e(\'6\');a(!$.2Z(7))c(G);8.D=G;j.24(9,(7.O!=q)?7.O:6.O);j.1Y(9,(7.19!=q)?7.19:6.19);j.1Z(9,(7.Y!=q)?7.Y:6.Y);j.22(9,(7.12!=q)?7.12:6.12);j.20(9,(7.11!=q)?7.11:6.11);j.23(9,(7.R!=q)?7.R:6.R);j.1X(9,(7.10!=q)?7.10:6.10);j.1M(9,(7.U!=q)?7.U:6.U);j.27(9,(7.1c!=q)?7.1c:6.1c);j.1W(9,(7.N!=q)?7.N:6.N);j.2u(9,(7.1h!=q)?7.1h:6.1h);j.2g(9,(7.1d!=q)?7.1d:6.1d);j.29(9,(7.13!=q)?7.13:6.13);j.2c(9,(7.M!=q)?7.M:6.M);j.2v(9,(7.F!=q)?7.F:6.F);a(6.O)j.M(9);8.D=K},24:g(9,7){k 6=9.e(\'6\'),8=9.e(\'8\');a((!8.D||6.O!=7)&&(7==K||7==G)){6.O=7}c(6.O)},1Y:g(9,7){k 6=9.e(\'6\'),8=9.e(\'8\');a((!8.D||6.19!=7)&&(7==K||7==G)){6.19=7;a(6.O&&8.D)j.M(9)}c(6.19)},22:g(9,7){k 6=9.e(\'6\'),8=9.e(\'8\'),f=9.e(\'f\');a((!8.D||6.12!=7)&&7>=0){6.12=7;a(6.12>0){f.T.H(\'1P-1w\',6.12+\'1o\')}l{f.T.H(\'1P-1w\',\'\')}}c(6.12)},20:g(9,7){k 6=9.e(\'6\'),8=9.e(\'8\'),f=9.e(\'f\');a((!8.D||6.11!=7)&&7>=0){6.11=7;a(6.11>0){f.T.H(\'1P-21\',6.11+\'1o\')}l{f.T.H(\'1P-21\',\'\')}}c(6.11)},1Z:g(9,7){k 6=9.e(\'6\'),8=9.e(\'8\'),f=9.e(\'f\');a((!8.D||6.Y!=7)&&(7==K||7==G)){6.Y=7;a(6.Y){9.A(\'.p-o-m-Z\').2n()}l{9.A(\'.p-o-m-Z\').2j()}}c(6.Y)},23:g(9,7){k 6=9.e(\'6\'),8=9.e(\'8\'),f=9.e(\'f\');a((!8.D||6.R!=7)&&7>=0){6.R=7;f.u.A(\'.p-o-m-r\').t(g(){$(b).H(\'1F-1Q\',(6.10+6.U+$(b).J(\'z\')*6.R)+\'1o\')})}c(6.R)},27:g(9,7){k 6=9.e(\'6\'),8=9.e(\'8\');a(!8.D||6.1c!=7){6.1c=7;a(6.O&&8.D)j.M(9)}c(6.1c)},1W:g(9,7){k 6=9.e(\'6\'),8=9.e(\'8\');a((!8.D||6.N!=7)&&(7==\'1k\'||7==\'2V\'||7==\'2p\')){6.N=7;a(6.O&&8.D)j.M(9)}c(6.N)},1X:g(9,7){k 6=9.e(\'6\'),8=9.e(\'8\'),f=9.e(\'f\');a((!8.D||6.10!=7)&&7>=0){6.10=7;f.u.A(\'.p-o-m-r\').t(g(){$(b).H(\'1F-1Q\',(6.10+6.U+$(b).J(\'z\')*6.R)+\'1o\')})}c(6.N)},1M:g(9,7){k 6=9.e(\'6\'),8=9.e(\'8\'),f=9.e(\'f\');a((!8.D||6.U!=7)&&(7>=0&&6.F||!6.F&&7==0)){6.U=7;f.u.A(\'.p-o-m-r\').t(g(){$(b).H(\'1F-1Q\',(6.10+6.U+$(b).J(\'z\')*6.R)+\'1o\')})}c(6.N)},2v:g(9,7){k 6=9.e(\'6\'),8=9.e(\'8\'),f=9.e(\'f\');a((!8.D||6.F!=7)&&(7==K||7==G)){a(!7){j.1M(9,0);8.h=-1}l{8.h=[];f.T.1b(\'p-o-m-F\')}6.F=7}c(6.N)},2u:g(9,7){k 6=9.e(\'6\'),8=9.e(\'8\'),f=9.e(\'f\');a((!8.D||6.1h!=7)&&(7==\'32\'||7==\'2p\')){6.1h=7;a(6.O&&8.D)j.M(9)}c(6.N)},28:g(9,7,1a){k f=9.e(\'f\');1J=/^(?:(:1E)(?:(=|<|>|\\+)(\\d+))?)|(?:(\\d+)(<|>|\\+))?$/i;s=1J.2x(7);a(s!=q){1i(1a){x\'C\':X=j.2i;w;x\'E\':X=j.2e;w}a(s[1]==\':1E\'){f.u.A(\'.p-o-m-1f-r, .p-o-m-1g-r\').t(X)}l a(s[4]!=q){1i(s[5]){x\'+\':f.u.A(\'.p-o-m-1f-r, .p-o-m-1g-r\').t(j.2i);f.u.A(\':2B([W=\'+s[4]+\'])\').2C().t(j.2e);f.u.A(\'[W=\'+s[4]+\']\').t(X);w;x\'>\':f.u.A(\'[W=\'+s[4]+\'] + 1v\').A(\'.p-o-m-1f-r, .p-o-m-1g-r\').t(X);f.u.A(\'[W=\'+s[4]+\']\').t(X);w;x\'<\':f.u.A(\':2B([W=\'+s[4]+\'])\').2C().t(X);f.u.A(\'[W=\'+s[4]+\']\').t(X);w;2y:f.u.A(\'[W=\'+s[4]+\']\').t(X);w}}}},2e:g(h,P){j.X(h,P,\'E\')},2i:g(h,P){j.X(h,P,\'C\')},X:g(h,P,1a){1l=\'\';k $P=$(P);a(s.B>2&&s[2]!=q&&s[3]!=q){1i(s[2]){x\'=\':a($P.J(\'z\')==s[3])1l=1a;w;x\'>\':a($P.J(\'z\')>=s[3])1l=1a;w;x\'<\':a($P.J(\'z\')<=s[3])1l=1a;w;x\'+\':a((1a==\'E\'&&$P.J(\'z\')<=s[3])||(1a==\'C\'&&$P.J(\'z\')>=s[3])){1l=1a}l{1l=(1a==\'C\')?\'E\':\'C\'}w}}l 1l=1a;1i(1l){x\'C\':$P.1j(\'p-o-m-1f-r p-o-m-1g-r\').1b(\'p-o-m-1f-r\').1S().2j();w;x\'E\':$P.1j(\'p-o-m-1f-r p-o-m-1g-r\').1b(\'p-o-m-1g-r\').1S().2n();w}},1n:g(9,7,1r){k 6=9.e(\'6\'),8=9.e(\'8\'),f=9.e(\'f\'),h=-1;1J=/^(:2A|:1E|:1k)(?:(=|<|>)(\\d+))$/i;s=1J.2x(7);a(s!=q)7=s[1];1i(7){x\':25\':a(8.v.B>0)h=0;w;x\':3B\':h=8.v.B-1;w;x\':2A\':a(!6.F)c(G);f.u.A(\'.p-o-m-r\').t(g(){k $b=$(b),L=K;a(s!=q){1i(s[2]){x\'=\':L=($b.J(\'z\')==s[3]);w;x\'>\':L=($b.J(\'z\')>=s[3]);w;x\'<\':L=($b.J(\'z\')<=s[3]);w}}a(L){a($b.2s(\'p-o-m-Q-r\')){$b.1j(\'p-o-m-Q-r\')}l{$b.1b(\'p-o-m-Q-r\')}}});j.1n(9,[],G);c(G);w;x\':1k\':a(!6.F)c(G);f.u.A(\'.p-o-m-Q-r\').t(g(){k $b=$(b),L=K;a(s!=q){1i(s[2]){x\'=\':L=($b.J(\'z\')==s[3]);w;x\'>\':L=($b.J(\'z\')>=s[3]);w;x\'<\':L=($b.J(\'z\')<=s[3]);w}}a(L)$b.1j(\'p-o-m-Q-r\')});j.1n(9,[],G);c(G);w;x\':1E\':a(!6.F)c(G);f.u.A(\'.p-o-m-r\').t(g(){k $b=$(b),L=K;a(s!=q){1i(s[2]){x\'=\':L=($b.J(\'z\')==s[3]);w;x\'>\':L=($b.J(\'z\')>=s[3]);w;x\'<\':L=($b.J(\'z\')<=s[3]);w}}a(L)$b.1b(\'p-o-m-Q-r\')});j.1n(9,[],G);c(G);w;2y:a($.1V(7)&&6.F){h=[];1A(k i=0;i<7.B;i++){1s=j.1R(9,7[i]);a(1s>-1)h.1y(1s)}}l{h=j.1R(9,7)}w}a(!6.F&&(!8.D||8.h!=h)&&h>-1){f.u.A(\'.p-o-m-Q-r\').1j(\'p-o-m-Q-r\');f.u.A(\'[W="\'+7+\'"]\').1b(\'p-o-m-Q-r\');8.h=h;f.1T.17(8.v[8.h].1t);f.2q.17(8.1I[8.v[8.h].Z]);a(1r&&6.13)9.1r(\'1U\',[8.v[8.h].14]);a(8.h>-1)c(8.v[8.h].14)}l a(6.F){a(!$.1V(h)){a(h<0||h==q)c(-1);h=[h]}1s=[];1A(k i=0;i<h.B;i++){k r=f.u.A(\'[W="\'+8.v[h[i]].14+\'"]\');a(r.2s(\'p-o-m-Q-r\')){r.1j(\'p-o-m-Q-r\');2l=$.3y(h[i],8.h);a(2l>-1)8.h.3z(2l,1)}l{r.1b(\'p-o-m-Q-r\');8.h.1y(h[i])}1s.1y(8.v[h[i]].14)}1z=\'\';f.u.A(\'.p-o-m-Q-r S.p-o-m-1t\').t(g(){1z+=((1z==\'\')?\'\':\'&26;; \')+$(b).17()});a(1z==\'\')1z="&26;";f.1T.17(1z);a(1r&&6.13)9.1r(\'1U\',[1s]);c(1s)}c(q)},1O:g(9,7){k 6=9.e(\'6\'),8=9.e(\'8\'),f=9.e(\'f\');a(8.1m!=7){8.1m=7;a(8.1m&&8.v.B>0){k h=0;f.T.H({1L:\'2w\',\'3O-1w\':f.T.2d().H(\'1w\')});a($.1V(8.h)){a(8.h.B>0)h=8.h[0]}l a(8.h>-1){h=8.h}f.T.2I(f.T.2I()+f.u.A(\'[W="\'+8.v[h].14+\'"]\').2k().3N)}l{f.T.H(\'1L\',\'1k\')}a(6.1d)9.1r(\'2h\',[8.1m])}c(8.1m)},M:g(9){k 6=9.e(\'6\'),8=9.e(\'8\'),f=9.e(\'f\');$.3P({3M:"3L",3H:6.1c,3I:K,e:{3J:6.1h+\'.1q.39\',N:6.N,19:6.19?\'y\':\'n\',3v:\'y\'},3h:g(1K){u=$.3i(1K);8.1I=u.Z;j.2S(9);j.2f(9,u.v,f.u);8.D=G;j.1n(9,\':25\');8.D=K;a(6.M)9.1r(\'2m\')},2F:g(1K){f.T.17(\'3e ! \'+1K)},})},2S:g(9){k f=9.e(\'f\'),6=9.e(\'6\'),8=9.e(\'8\');f.u.2U().1p();f.u.17(\'\');a(6.F){8.h=[]}l{8.h=-1}8.v=[]},2f:g(9,I,2d){k 6=9.e(\'6\'),8=9.e(\'8\'),f=9.e(\'f\');k 3c=-1;1A(k i=0;i<I.B;i++){8.v.1y({14:I[i].14,z:I[i].z,1t:I[i].1t,Z:I[i].Z,1D:I[i].1D.B});a(6.Y){Z="<S 1e=\'p-o-m-Z\'>"+8.1I[I[i].Z]+"</S>"}l{Z=""}k 2o=(6.10+6.U+I[i].z*6.R),1C=$(\'<1C/>\',{\'1e\':\'p-o-m-r\',17:"<S>"+Z+"<S 1e=\'p-o-m-1t\'>"+I[i].1t+"</S></S>",W:I[i].14,z:I[i].z,H:{\'1F-1Q\':2o+\'1o\'}}).1G(\'2W.1q\',{9:9,2Q:2o,2H:I[i].1D.B},g(V){a(!V.2t&&V.2P){V.2t=V.2P;V.3d=V.3j}a(V.2t<V.e.2Q&&V.e.2H>0){a($(b).2s(\'p-o-m-1f-r\')){$(b).1j(\'p-o-m-1f-r\').1b(\'p-o-m-1g-r\').1S().2n()}l{$(b).1j(\'p-o-m-1g-r\').1b(\'p-o-m-1f-r\').1S().2j()}}l{j.1n(V.e.9,$(b).J(\'W\'),K);a(6.F){}l{j.1O(V.e.9,G)}}});a(I[i].1D.B>0){1C.1b(\'p-o-m-1g-r\').H(\'3r-2k\',(6.U+6.R*I[i].z)+\'1o 1H\')}a(6.F){1C.3s(\'<S 1e="p-o-m-3t"></S>\')}2d.1u(1C);a(I[i].1D.B>0){k 1v=$(\'<1v/>\',{\'1e\':\'p-o-m-3p\',H:{2O:\'1k\',1F:\'1H\',2N:\'1H\',\'3l-3m\':(2L-I[i].z*2)+\'%\'}});1C.3o(1v);j.2f(9,I[i].1D,1v)}}},1R:g(9,7){k 8=9.e(\'8\');1A(k i=0;i<8.v.B;i++){a(8.v[i].14==7)c(i)}c(-1)},2g:g(9,7){k 6=9.e(\'6\');6.1d=7;9.1p(\'2h\');a(7)9.1G(\'2h\',6.1d);c(6.1d)},29:g(9,7){k 6=9.e(\'6\');6.13=7;9.1p(\'1U\');a(7)9.1G(\'1U\',6.13);c(6.13)},2c:g(9,7){k 6=9.e(\'6\');6.M=7;9.1p(\'2m\');a(7)9.1G(\'2m\',6.M);c(6.M)}};$.3A.1q=g(1B){a(1N[1B]){c 1N[1B].L(b,33.3g.3D.3x(2J,1))}l a(3k 1B===\'9\'||!1B){c 1N.2R.L(b,2J)}l{$.2F(\'3q \'+1B+\' 3b 3a 3K 3G 2T.1q\')}}})(2T);',62,238,'||||||options|value|properties|object|if|this|return||data|objects|function|index||privateMethods|var|else|selector||category|ui|null|item|target|each|list|categories|break|case||level|find|length||initialized||multiple|false|css|listItems|attr|true|apply|load|filter|autoLoad|domElt|selected|levelIndent|div|listContainer|iconWidthCheck|event|catId|applyExpandCollapse|displayStatus|status|iconWidthEC|listMaxHeight|listMaxWidth|change|id|||html||galleryRoot|mode|addClass|serverUrl|popup|class|expandable|collapsable|userMode|switch|removeClass|none|action|selectorVisible|setValue|px|unbind|categorySelector|trigger|tmp|name|append|ul|width|returned|push|containerHtml|for|method|li|childs|all|padding|bind|0px|labelStatus|re|msg|display|setIconWidthCheck|publicMethods|displaySelector|max|left|findIndexByValue|next|containerName|categorySelectorChange|isArray|setFilter|setIconWidthEC|setGalleryRoot|setDisplayStatus|setListMaxHeight|height|setListMaxWidth|setLevelIndent|setAutoLoad|first|nbsp|setServerUrl|setExpandCollapse|setEventChange|container|setOptions|setEventLoad|parent|applyExpand|listAddItems|setEventPopup|categorySelectorPopup|applyCollapse|hide|position|tmpIndex|categorySelectorLoad|show|spaceWidth|public|containerStatus|isFunction|hasClass|layerX|setUserMode|setMultiple|block|exec|default|right|invert|has|prev|float|option|error|remove|nbchilds|scrollTop|arguments|opt|100|containerArrow|margin|listStyle|offsetX|expandArea|init|listClear|jQuery|children|accessible|click|auto|absolute|isPlainObject|mouseleave|overflow|admin|Array|expand|collapse|destroy|pointer|numberOfCategories|getList|not|does|previousLevel|layerY|Error|cursor|prototype|success|parseJSON|offsetY|typeof|font|size|plugins|after|group|Method|background|prepend|check|arrow|tree|gpc_ajax|call|inArray|splice|fn|last|dArr|slice|php|GrumPluginClasses|on|url|async|ajaxfct|exist|POST|type|top|min|ajax'.split('|'),0,{}))
Index: /extensions/GrumPluginClasses/js/ui.iconSelector.js
===================================================================
--- /extensions/GrumPluginClasses/js/ui.iconSelector.js	(revision 7174)
+++ /extensions/GrumPluginClasses/js/ui.iconSelector.js	(revision 7175)
@@ -128,9 +128,5 @@
               if(opt) $.extend(options, opt);
 
-              if(!data)
-              {
-                $this.data('options', options);
-                options.initialized=false;
-              }
+              $this.data('options', options);
 
               if(!properties)
@@ -239,9 +235,7 @@
           {
             // set images list values
-            this.each(function()
-              {
-                var $this=$(this);
-                privateMethods.setImages($this, list);
-                return($this);
+            return this.each(function()
+              {
+                privateMethods.setImages($(this), list);
               }
             );
@@ -250,9 +244,9 @@
           {
             // return images list values
-            var data = this.data('options');
-
-            if(data)
-            {
-              return(data.images);
+            var options = this.data('options');
+
+            if(options)
+            {
+              return(options.images);
             }
             else
@@ -267,9 +261,7 @@
           {
             // set numCols values
-            this.each(function()
-              {
-                var $this=$(this);
-                privateMethods.setCols($this, value);
-                return($this);
+            return this.each(function()
+              {
+                privateMethods.setCols($(this), value);
               }
             );
@@ -278,9 +270,9 @@
           {
             // return images list values
-            var data = this.data('options');
-
-            if(data)
-            {
-              return(data.numCols);
+            var options = this.data('options');
+
+            if(options)
+            {
+              return(options.numCols);
             }
             else
@@ -295,9 +287,7 @@
           {
             // set numRows values
-            this.each(function()
-              {
-                var $this=$(this);
-                privateMethods.setRows($this, value);
-                return($this);
+            return this.each(function()
+              {
+                privateMethods.setRows($(this), value);
               }
             );
@@ -306,9 +296,9 @@
           {
             // return images list values
-            var data = this.data('options');
-
-            if(data)
-            {
-              return(data.numRows);
+            var options = this.data('options');
+
+            if(options)
+            {
+              return(options.numRows);
             }
             else
@@ -323,9 +313,7 @@
           {
             // set cell width values
-            this.each(function()
-              {
-                var $this=$(this);
-                privateMethods.setCellWidth($this, value);
-                return($this);
+            return this.each(function()
+              {
+                privateMethods.setCellWidth($(this), value);
               }
             );
@@ -334,9 +322,9 @@
           {
             // return images list values
-            var data = this.data('options');
-
-            if(data)
-            {
-              return(data.cellWidth);
+            var options = this.data('options');
+
+            if(options)
+            {
+              return(options.cellWidth);
             }
             else
@@ -351,9 +339,7 @@
           {
             // set cell width values
-            this.each(function()
-              {
-                var $this=$(this);
-                privateMethods.setCellHeight($this, value);
-                return($this);
+            return this.each(function()
+              {
+                privateMethods.setCellHeight($(this), value);
               }
             );
@@ -362,9 +348,9 @@
           {
             // return images list values
-            var data = this.data('options');
-
-            if(data)
-            {
-              return(data.cellHeight);
+            var options = this.data('options');
+
+            if(options)
+            {
+              return(options.cellHeight);
             }
             else
@@ -379,9 +365,7 @@
           {
             // set selected value
-            this.each(function()
-              {
-                var $this=$(this);
-                privateMethods.setValue($this, value);
-                return($this);
+            return this.each(function()
+              {
+                privateMethods.setValue($(this), value);
               }
             );
@@ -390,10 +374,10 @@
           {
             // return the selected value
-            var data=this.data('options'),
+            var options=this.data('options'),
                 properties=this.data('properties');
 
-            if(data && properties && properties.index>-1)
-            {
-              return(data.images[properties.index]);
+            if(options && properties && properties.index>-1 && properties.index<options.images.length)
+            {
+              return(options.images[properties.index]);
             }
             else
@@ -408,9 +392,7 @@
           {
             // set selected value
-            this.each(function()
-              {
-                var $this=$(this);
-                privateMethods.setEventPopup($this, value);
-                return($this);
+            return this.each(function()
+              {
+                privateMethods.setEventPopup($(this), value);
               }
             );
@@ -419,9 +401,9 @@
           {
             // return the selected value
-            var data=this.data('options');
-
-            if(data)
-            {
-              return(data.popup);
+            var options=this.data('options');
+
+            if(options)
+            {
+              return(options.popup);
             }
             else
@@ -436,9 +418,7 @@
           {
             // set selected value
-            this.each(function()
-              {
-                var $this=$(this);
-                privateMethods.setEventChange($this, value);
-                return($this);
+            return this.each(function()
+              {
+                privateMethods.setEventChange($(this), value);
               }
             );
@@ -447,9 +427,9 @@
           {
             // return the selected value
-            var data=this.data('options');
-
-            if(data)
-            {
-              return(data.change);
+            var options=this.data('options');
+
+            if(options)
+            {
+              return(options.change);
             }
             else
@@ -458,7 +438,7 @@
             }
           }
-        }, // popup
-
-    } // methods
+        } // popup
+
+    }; // methods
 
 
@@ -470,9 +450,9 @@
       updateListArea : function (object)
         {
-          var data=object.data('options'),
+          var options=object.data('options'),
               objects=object.data('objects'),
               icon=objects.list.children().first(),
-              width=icon.outerWidth()*data.numCols,
-              height=icon.outerHeight()*data.numRows;
+              width=icon.outerWidth()*options.numCols,
+              height=icon.outerHeight()*options.numRows;
 
           objects.listContainer.css(
@@ -492,12 +472,12 @@
       setImages : function (object, value)
         {
-          var data=object.data('options'),
+          var options=object.data('options'),
               objects=object.data('objects'),
               properties=object.data('properties');
-          data.images=value;
+          options.images=value;
 
           objects.list.children().unbind();
           objects.list.html('');
-          for(var i=0;i<data.images.length;i++)
+          for(var i=0;i<options.images.length;i++)
           {
             liClass=' ui-icon-selector-icon ';
@@ -507,5 +487,5 @@
             }
             objects.list.append(
-              $('<li indexValue="'+i+'" class="'+liClass+'" style="display:inline-block;width:'+data.cellWidth+'px;height:'+data.cellHeight+'px;background-image:url('+data.images[i]+');"></li>')
+              $('<li indexValue="'+i+'" class="'+liClass+'" style="display:inline-block;width:'+options.cellWidth+'px;height:'+options.cellHeight+'px;background-image:url('+options.images[i]+');"></li>')
                 .bind('click',
                   {object:object},
@@ -519,53 +499,53 @@
           }
 
-          return(data.images);
+          return(options.images);
         },
       setNumCols : function (object, value)
         {
-          var data=object.data('options'),
+          var options=object.data('options'),
               properties=object.data('properties');
-          if((!properties.initialized || data.numCols!=value) && value>0)
-          {
-            data.numCols=value;
-          }
-          return(data.numCols);
+          if((!properties.initialized || options.numCols!=value) && value>0)
+          {
+            options.numCols=value;
+          }
+          return(options.numCols);
         },
       setNumRows : function (object, value)
         {
-          var data=object.data('options'),
+          var options=object.data('options'),
               properties=object.data('properties');
-          if((!properties.initialized || data.numRows!=value) && value>0)
-          {
-            data.numRows=value;
-          }
-          return(data.numRows);
+          if((!properties.initialized || options.numRows!=value) && value>0)
+          {
+            options.numRows=value;
+          }
+          return(options.numRows);
         },
       setCellWidth : function (object, value)
         {
-          var data=object.data('options'),
+          var options=object.data('options'),
               properties=object.data('properties'),
               objects=object.data('objects');
-          if((!properties.initialized || data.cellWidth!=value) && value>=0)
-          {
-            data.cellWidth=value;
+          if((!properties.initialized || options.cellWidth!=value) && value>=0)
+          {
+            options.cellWidth=value;
             objects.container.css('width', value+'px');
           }
-          return(data.cellWidth);
+          return(options.cellWidth);
         },
       setCellHeight : function (object, value)
         {
-          var data=object.data('options'),
+          var options=object.data('options'),
               properties=object.data('properties'),
               objects=object.data('objects');
-          if((!properties.initialized || data.cellHeight!=value) && value>=0)
-          {
-            data.cellHeight=value;
+          if((!properties.initialized || options.cellHeight!=value) && value>=0)
+          {
+            options.cellHeight=value;
             objects.container.css('height', value+'px');
           }
-          return(data.cellHeight);
+          return(options.cellHeight);
         },
       setValue : function (object, value)
         {
-          var data=object.data('options'),
+          var options=object.data('options'),
               properties=object.data('properties'),
               index=-1;
@@ -574,11 +554,11 @@
           {
             case ':first':
-              if(data.images.length>0) index=0;
+              if(options.images.length>0) index=0;
               break;
             case ':last':
-              index=data.images.length-1;
+              index=options.images.length-1;
               break;
             default:
-              index=$.inArray(value, data.images);
+              index=$.inArray(value, options.images);
               break;
           }
@@ -588,24 +568,24 @@
             privateMethods.setValueByIndex(object, index, false);
           }
-          return(data.images[properties.index]);
+          return(options.images[properties.index]);
         },
       setValueByIndex : function (object, value, trigger)
         {
-          var data=object.data('options'),
+          var options=object.data('options'),
               properties=object.data('properties'),
               objects=object.data('objects');
-          if((!properties.initialized || properties.index!=value) && value>-1 && value<data.images.length)
+          if((!properties.initialized || properties.index!=value) && value>-1 && value<options.images.length)
           {
             objects.list.children('.ui-icon-selector-selected-icon').removeClass('ui-icon-selector-selected-icon');
             objects.list.children('[indexValue="'+value+'"]').addClass('ui-icon-selector-selected-icon');
             properties.index=value;
-            objects.container.css('background-image', 'url('+data.images[properties.index]+')');
-            if(trigger && data.change) object.trigger('iconSelectorChange', [properties.index]);
-          }
-          return(data.images[properties.index]);
+            objects.container.css('background-image', 'url('+options.images[properties.index]+')');
+            if(trigger && options.change) object.trigger('iconSelectorChange', [properties.index]);
+          }
+          return(options.images[properties.index]);
         },
       displaySelector : function (object, value)
         {
-          var data=object.data('options'),
+          var options=object.data('options'),
               properties=object.data('properties'),
               objects=object.data('objects');
@@ -625,5 +605,5 @@
               objects.listContainer.css('display', 'none');
             }
-            if(data.popup) object.trigger('iconSelectorPopup', [properties.selectorVisible]);
+            if(options.popup) object.trigger('iconSelectorPopup', [properties.selectorVisible]);
           }
           return(properties.selectorVisible);
@@ -631,19 +611,19 @@
       setEventPopup : function (object, value)
         {
-          var data=object.data('options');
-          data.popup=value;
+          var options=object.data('options');
+          options.popup=value;
           object.unbind('iconSelectorPopup');
-          if(value) object.bind('iconSelectorPopup', data.popup);
-          return(data.popup);
+          if(value) object.bind('iconSelectorPopup', options.popup);
+          return(options.popup);
         },
       setEventChange : function (object, value)
         {
-          var data=object.data('options');
-          data.change=value;
+          var options=object.data('options');
+          options.change=value;
           object.unbind('iconSelectorChange');
-          if(value) object.bind('iconSelectorChange', data.change);
-          return(data.change);
+          if(value) object.bind('iconSelectorChange', options.change);
+          return(options.change);
         }
-    }
+    };
 
 
Index: /extensions/GrumPluginClasses/js/ui.iconSelector.packed.js
===================================================================
--- /extensions/GrumPluginClasses/js/ui.iconSelector.packed.js	(revision 7175)
+++ /extensions/GrumPluginClasses/js/ui.iconSelector.packed.js	(revision 7175)
@@ -0,0 +1,2 @@
+/* file: ui.iconSelector.js - v1.0.0 | packed on 2010/10/13 with http://joliclic.free.fr/php/javascript-packer/ */
+eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('(c($){d L={1q:c(10){a 4.n(c(){d $4=$(4),7=$4.7(\'2\'),9=$4.7(\'9\'),5=$4.7(\'5\'),2={g:[],u:1,v:8,q:1a,r:1a,t:J,p:J};b(10)$.1F(2,10);$4.7(\'2\',2);b(!5){$4.7(\'5\',{f:-1,s:I,w:I});5=$4.7(\'5\')}b(!9){9={C:$(\'<1k/>\',{\'Y\':\' A-j-z \',}).H(\'1e.G\',c(){e.M($4,!$4.7(\'5\').w)}),o:$(\'<1k/>\',{W:"",\'Y\':\' A-j-z-k \',m:{1E:"1H",l:\'O\',y:\'O\',R:\'15\',1c:\'1D\'}}).H(\'1v.G\',c(){e.M($4,I)}),k:$(\'<1I/>\',{m:{1C:\'15\',1G:\'O\',1L:\'O\'}})};$4.W(\'\').N(9.C).N(9.o.N(9.k));$4.7(\'9\',9)}e.X($4,2.g);e.11($4,2.q);e.12($4,2.r);e.1j($4,2.u);e.19($4,2.v);e.17($4,2.t);e.18($4,2.p);b(2.g.B>0)e.S($4,2.g[0]);5.s=1i})},1A:c(){a 4.n(c(){d $4=$(4),9=$4.7(\'9\');9.C.E().1l();9.k.D().E();9.o.1l();$4.E(\'.G\').m({l:\'\',y:\'\',1J:\'\'})})},g:c(k){b(k){a 4.n(c(){e.X($(4),k)})}h{d 2=4.7(\'2\');b(2){a(2.g)}h{a([])}}},u:c(3){b(3){a 4.n(c(){e.1K($(4),3)})}h{d 2=4.7(\'2\');b(2){a(2.u)}h{a(0)}}},v:c(3){b(3){a 4.n(c(){e.1B($(4),3)})}h{d 2=4.7(\'2\');b(2){a(2.v)}h{a(0)}}},q:c(3){b(3){a 4.n(c(){e.11($(4),3)})}h{d 2=4.7(\'2\');b(2){a(2.q)}h{a(0)}}},r:c(3){b(3){a 4.n(c(){e.12($(4),3)})}h{d 2=4.7(\'2\');b(2){a(2.r)}h{a(0)}}},3:c(3){b(3){a 4.n(c(){e.S($(4),3)})}h{d 2=4.7(\'2\'),5=4.7(\'5\');b(2&&5&&5.f>-1&&5.f<2.g.B){a(2.g[5.f])}h{a(\'\')}}},t:c(3){b(3&&$.1s(3)){a 4.n(c(){e.17($(4),3)})}h{d 2=4.7(\'2\');b(2){a(2.t)}h{a(J)}}},p:c(3){b(3&&$.1s(3)){a 4.n(c(){e.18($(4),3)})}h{d 2=4.7(\'2\');b(2){a(2.p)}h{a(J)}}}};d e={1f:c(6){d 2=6.7(\'2\'),9=6.7(\'9\'),j=9.k.D().1h(),l=j.1z()*2.u,y=j.1w()*2.v;9.o.m({l:l+\'x\',y:y+\'x\'});14=l-9.o.1x(0).1y;b(14>0){9.o.m(\'l\',(l+14)+\'x\')}},X:c(6,3){d 2=6.7(\'2\'),9=6.7(\'9\'),5=6.7(\'5\');2.g=3;9.k.D().E();9.k.W(\'\');1Y(d i=0;i<2.g.B;i++){Z=\' A-j-z-j \';b(i==5.f){Z+=\' A-j-z-K-j \'}9.k.N($(\'<1g Q="\'+i+\'" Y="\'+Z+\'" 28="R:24-1d;l:\'+2.q+\'x;y:\'+2.r+\'x;1t-1p:1n(\'+2.g[i]+\');"></1g>\').H(\'1e\',{6:6},c(V){e.13(V.7.6,$(4).22(\'Q\'),1i);e.M(V.7.6,I)}))}a(2.g)},1j:c(6,3){d 2=6.7(\'2\'),5=6.7(\'5\');b((!5.s||2.u!=3)&&3>0){2.u=3}a(2.u)},19:c(6,3){d 2=6.7(\'2\'),5=6.7(\'5\');b((!5.s||2.v!=3)&&3>0){2.v=3}a(2.v)},11:c(6,3){d 2=6.7(\'2\'),5=6.7(\'5\'),9=6.7(\'9\');b((!5.s||2.q!=3)&&3>=0){2.q=3;9.C.m(\'l\',3+\'x\')}a(2.q)},12:c(6,3){d 2=6.7(\'2\'),5=6.7(\'5\'),9=6.7(\'9\');b((!5.s||2.r!=3)&&3>=0){2.r=3;9.C.m(\'y\',3+\'x\')}a(2.r)},S:c(6,3){d 2=6.7(\'2\'),5=6.7(\'5\'),f=-1;21(3){1u\':1h\':b(2.g.B>0)f=0;T;1u\':23\':f=2.g.B-1;T;27:f=$.26(3,2.g);T}b((!5.s||5.f!=f)&&f>-1){e.13(6,f,I)}a(2.g[5.f])},13:c(6,3,P){d 2=6.7(\'2\'),5=6.7(\'5\'),9=6.7(\'9\');b((!5.s||5.f!=3)&&3>-1&&3<2.g.B){9.k.D(\'.A-j-z-K-j\').25(\'A-j-z-K-j\');9.k.D(\'[Q="\'+3+\'"]\').1M(\'A-j-z-K-j\');5.f=3;9.C.m(\'1t-1p\',\'1n(\'+2.g[5.f]+\')\');b(P&&2.p)6.P(\'16\',[5.f])}a(2.g[5.f])},M:c(6,3){d 2=6.7(\'2\'),5=6.7(\'5\'),9=6.7(\'9\');b(5.w!=3){5.w=3;b(5.w){9.o.m(\'R\',\'1d\').1b(9.o.1b()+9.k.D(\'[Q="\'+5.f+\'"]\').1c().20);e.1f(6)}h{9.o.m(\'R\',\'15\')}b(2.t)6.P(\'U\',[5.w])}a(5.w)},17:c(6,3){d 2=6.7(\'2\');2.t=3;6.E(\'U\');b(3)6.H(\'U\',2.t);a(2.t)},18:c(6,3){d 2=6.7(\'2\');2.p=3;6.E(\'16\');b(3)6.H(\'16\',2.p);a(2.p)}};$.1Z.G=c(F){b(L[F]){a L[F].1o(4,1R.1Q.1P.1N(1m,1))}h b(1O F===\'6\'||!F){a L.1q.1o(4,1m)}h{$.1S(\'1T \'+F+\' 1X 1W 1V 1U 1r.G\')}}})(1r);',62,133,'||options|value|this|properties|object|data||objects|return|if|function|var|privateMethods|index|images|else||icon|list|width|css|each|listContainer|change|cellWidth|cellHeight|initialized|popup|numCols|numRows|selectorVisible|px|height|selector|ui|length|container|children|unbind|method|iconSelector|bind|false|null|selected|publicMethods|displaySelector|append|0px|trigger|indexValue|display|setValue|break|iconSelectorPopup|event|html|setImages|class|liClass|opt|setCellWidth|setCellHeight|setValueByIndex|delta|none|iconSelectorChange|setEventPopup|setEventChange|setNumRows|32|scrollTop|position|block|click|updateListArea|li|first|true|setNumCols|div|remove|arguments|url|apply|image|init|jQuery|isFunction|background|case|mouseleave|outerHeight|get|clientWidth|outerWidth|destroy|setRows|listStyle|absolute|overflow|extend|padding|auto|ul|backgroundImage|setCols|margin|addClass|call|typeof|slice|prototype|Array|error|Method|on|exist|not|does|for|fn|top|switch|attr|last|inline|removeClass|inArray|default|style'.split('|'),0,{}))
Index: /extensions/GrumPluginClasses/language/fr_FR/plugin.lang.php
===================================================================
--- /extensions/GrumPluginClasses/language/fr_FR/plugin.lang.php	(revision 7174)
+++ /extensions/GrumPluginClasses/language/fr_FR/plugin.lang.php	(revision 7175)
@@ -10,3 +10,9 @@
 $lang['Infos'] = 'Informations';
 $lang['Some plugins are dependent on Grum Plugin Classes: before uninstall, you must first uninstall the plugins dependent'] = 'Certains plugins sont dépendants de Grum Plugin Classes : avant le désinstaller, il faut au préalable désinstaller les plugins dépendants';
+
+// gpc > 3.3.0
+$lang['Public'] = 'Publique';
+$lang['Private'] = 'Privée';
+$lang['All the gallery'] = 'Toute la galerie';
+
 ?>
Index: /extensions/GrumPluginClasses/main.inc.php
===================================================================
--- /extensions/GrumPluginClasses/main.inc.php	(revision 7174)
+++ /extensions/GrumPluginClasses/main.inc.php	(revision 7175)
@@ -1,10 +1,10 @@
 <?php
 /*
-Plugin Name: Grum Plugins Classes.3
-Version: 3.2.1
-Description: Collection de classes partagées entre mes plugins (existants, ou à venir) / Partaged classes between my plugins (actuals or futures)
-Plugin URI: http://piwigo.org/ext/extension_view.php?eid=199
+Plugin Name: GMaps
+Version: 0.2.0
+Description: Display and manage (google) maps
+Plugin URI: http://phpwebgallery.net/ext/extension_view.php?eid=
 Author: grum@piwigo.org
-Author URI: http://photos.grum.fr/
+Author URI: http://photos.grum.fr
 */
 
@@ -12,6 +12,7 @@
 --------------------------------------------------------------------------------
   Author     : Grum
-    email    : grum@piwigo.org
+    email    : grum@piwigo.com
     website  : http://photos.grum.fr
+    PWG user : http://forum.phpwebgallery.net/profile.php?id=3706
 
     << May the Little SpaceFrog be with you ! >>
@@ -21,51 +22,14 @@
 
 | release | date       |
-| 2.0.0   | 2008/07/20 | * convert classes for piwigo 2.0
+| 0.1.0   | 2010-08-22 | * first lines of code
+|         |            |   . release not published
 |         |            |
-| 2.0.1   | 2008/12/28 | * convert classe tables.class.inc to php5
+| 0.2.0   | 2010-09-30 | * first official release
 |         |            |
-| 2.0.2   | 2009/04/26 | * add setOptions/getOptions for GPCPagesNavigation class
-|         |            | * add option to set first/prev/next/last textes
 |         |            |
-| 2.0.3   | 2009/07/24 | * modify common_plugin class config loader (r2.0.1)
 |         |            |
-| 2.0.4   | 2009/11/29 | * modify users class
 |         |            |
-| 3.0.0   | 2010/03/28 | * Uses piwigo pwg_db_* functions instead of mysql_* functions
-|         |            | * update classes & functions names
-|         |            | * include the JpegMetaData class
 |         |            |
-| 3.0.1   | 2010/04/11 | * little bug on the template (call of an undefined var)
-|         |            | * Add new languages
-|         |            |   . es_ES
-|         |            |   . hu_HU
-|         |            |   . it_IT
 |         |            |
-| 3.1.0   | 2010/04/24 | * add the GPCTabSheet class
-|         |            | * add the GPCRequestBuilder class
-|         |            | * add the pageNavigator.js
-|         |            | * update the GPCCore class
-|         |            | * Add new languages
-|         |            |   . nl_NL
-|         |            |   . de_DE
-|         |            |
-| 3.1.1   | 2010/05/18 | * fix bug in the install process (CommonPlugin not
-|         |            |   included)
-|         |            |
-| 3.2.0   | 2010/09/12 | * Enhance GPCTabSheet functionnalities
-|         |            |   - possibility to choose tab classes
-|         |            | * Add the simpleTip.js
-|         |            | * Enhance GPCRequestBuilder functionnalities
-|         |            |   - now abble to manage complex request with multi-record
-|         |            |   - result can be stored in the caddie
-|         |            |
-| 3.2.1   | 2010/10/09 | * Enhance GPCTabSheet functionnalities
-|         |            |   - add 'id' attribute for tabs (<li> items)
-|         |            |
-|         |            | * Fix JS & CSS bug with IE8
-|         |            |
-| 3.2.2   | 2010/mm/dd | *
-|         |            |
-|         |            | ===== Don't forget to update the plugin version ! =====
 |         |            |
 |         |            |
@@ -82,61 +46,48 @@
 :: TO DO
 
-:: WHAT ? WHY ?
-This plugin doesn't do anything itself. It just provide classes for others plugins.
+--------------------------------------------------------------------------------
 
-Classes version for this package
-    CommonPlugin.class.php
-    GPCAjax.class.php
-    GPCCss.class.php
-    GPCPagesNavigation.class.php
-    GPCPublicIntegration.class.php
-    GPCTables.class.php -v1.5
-    GPCTranslate.class.inc.php + google_translate.js
-    GPCUsersGroups.class.inc.php
-    GPCTabSheet.class.inc.php
+:: NFO
+  GMaps_root : common classe for admin and public classes
+  GMaps_AIM  : classe to manage plugin integration into plugin menu
+  GMaps_AIP  : classe to manage plugin admin pages
+  GMaps_PIP  : classe to manage plugin public pages
 
-    genericjs.class.inc.php  + genericjs.js
-
-See each file to know more about them
 --------------------------------------------------------------------------------
 */
 
+// pour faciliter le debug :o)
+ //ini_set('error_reporting', E_ALL);
+ //ini_set('display_errors', true);
+
 if(!defined('PHPWG_ROOT_PATH')) die('Hacking attempt!');
 
-define('GPC_DIR' , basename(dirname(__FILE__)));
-define('GPC_PATH' , PHPWG_PLUGINS_PATH . GPC_DIR . '/');
 
-include_once('gpc_version.inc.php'); // => Don't forget to update this file !!
-include_once(GPC_PATH.'classes/GPCCore.class.inc.php');
+define('GMAPS_DIR' , basename(dirname(__FILE__)));
+define('GMAPS_PATH' , PHPWG_PLUGINS_PATH . GMAPS_DIR . '/');
+
+include_once(PHPWG_PLUGINS_PATH.'GrumPluginClasses/classes/CommonPlugin.class.inc.php');
+include_once('gmaps_version.inc.php'); // => Don't forget to update this file !!
 
 global $prefixeTable;
 
-
-
-$config=Array();
-GPCCore::loadConfig('gpc', $config);
-
-if(!isset($config['installed'])) $config['installed']='03.01.00';
-if($config['installed']!=GPC_VERSION2)
+if(defined('IN_ADMIN'))
 {
-  /* the plugin was updated without being deactivated
-   * deactivate + activate the plugin to process the database upgrade
-   */
-  include(GPC_PATH."gpc_install.class.inc.php");
-  $gpc=new GPC_Install($prefixeTable, __FILE__);
-  $gpc->deactivate();
-  $gpc->activate();
+  //GMaps admin interface loaded and active only if in admin page
+  include_once("gmaps_aim.class.inc.php");
+  $obj=new GMaps_AIM($prefixeTable, __FILE__);
+  $obj->initEvents();
+}
+else
+{
+  if(CommonPlugin::checkGPCRelease(GMAPS_GPC_NEEDED))
+  {
+    //GMaps public interface loaded and active only if in public page
+    include_once("gmaps_pip.class.inc.php");
+    $obj=new GMaps_PIP($prefixeTable, __FILE__);
+  }
 }
 
-
-if(defined('IN_ADMIN'))
-{
-  //GPC admin interface is loaded and active only if in admin page
-  include_once("gpc_aim.class.inc.php");
-
-  $obj = new GPC_AIM($prefixeTable, __FILE__);
-  $obj->initEvents();
-  set_plugin_data($plugin['id'], $obj);
-}
+set_plugin_data($plugin['id'], $obj);
 
 ?>
Index: /extensions/GrumPluginClasses/templates/GPCRequestBuilder_search.tpl
===================================================================
--- /extensions/GrumPluginClasses/templates/GPCRequestBuilder_search.tpl	(revision 7174)
+++ /extensions/GrumPluginClasses/templates/GPCRequestBuilder_search.tpl	(revision 7175)
@@ -3,5 +3,5 @@
 {known_script id="jquery.tipTip" src=$ROOT_URL|@cat:"themes/default/js/plugins/jquery.tipTip.minified.js"}
 
-{known_script id="gpc.pagesNavigator" src=$ROOT_URL|@cat:"plugins/GrumPluginClasses/js/pagesNavigator.js"}
+{known_script id="gpc.pagesNavigator" src=$ROOT_URL|@cat:"plugins/GrumPluginClasses/js/pagesNavigator.packed.js"}
 
 
