Index: extensions/GrumPluginClasses/js/criteriaBuilder.js
===================================================================
--- extensions/GrumPluginClasses/js/criteriaBuilder.js	(revision 7349)
+++ 	(revision )
@@ -1,629 +1,0 @@
-/**
- * -----------------------------------------------------------------------------
- * file: criteriaBuilder.js
- * file version: 1.1.0
- * date: 2010-10-21
- *
- * JS file 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 ! >>
- * -----------------------------------------------------------------------------
- *
- * -----------------------------------------------------------------------------
- * This plugin use the Nested Sortable Plugin / version 1.0.1
- *    Copyright (c) 2007 Bernardo de Padua dos Santos
- *    Dual licensed under the MIT (MIT-LICENSE.txt)
- *    and GPL (GPL-LICENSE.txt) licenses.
- *
- *    http://code.google.com/p/nestedsortables/
- * -----------------------------------------------------------------------------
- *
- * an object dedicaded for Piwigo, giving easy user methods to make complex
- * requests
- *
- * constructor : myCB = new criteriaBuilder(containerId [, options]);
- *
- *  - containerId : the Id of the DOM element where the criteria will be added
- *  - options : an object with this properties :
- *       . textAND       : String, with default value = 'AND'
- *                         displayed text to indicates the type of operator AND
- *       . textOR        : String, with default value = 'OR',
- *                         displayed text to indicates the type of operator OR
- *       . textHint      : String, with default value = '',
- *       . classGroup    : String, with default value = '',
- *       . classItem     : String, with default value = '',
- *       . classOperator : String, with default value = '',
- *       . classHelper   : String, with default value = 'helper',
- *       . opacity       : String, with default value = 0.8,
- *       . onEdit        : handler on a function to manage click on the 'Edit'
- *                         button ; event.data contain the item Id
- *       . onDelete      : handler on a function to manage click on the 'Delete'
- *                         button ; event.data contain the item Id
- *       . imgEditUrl    : String, with default value = '',
- *       . imgDeleteUrl  : String, with default value = '',
- *
- *
- *
- * :: HISTORY ::
- *
- * | release | date       |
- * | 1.0.0   | 2010/04/27 | * start to coding
- * |         |            |
- * | 1.1.0   | 2010/10/21 | * change ajax methods
- * |         |            |
- * |         |            | * fix bug : if there is no criteria, don't send
- * |         |            |   request
- * |         |            |
- * |         |            |
- * |         |            |
- * |         |            |
- * |         |            |
- *
- */
-
-
-
-function criteriaBuilder(container)
-{
-  var itemsId = {
-          group:'iCbGroup',
-          item:'iCbItem',
-          container:container,
-        },
-      counters = {
-          group:0,
-          item:0,
-        },
-      options = {
-          textAND:'AND',
-          textOR:'OR',
-          textNoCriteria:'There is no criteria ! At least, one criteria is required to do search...',
-          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)
-  {
-    if(typeof arguments[1]=='object')
-    {
-      options = jQuery.extend(options, arguments[1]);
-    }
-  }
-
-  /**
-   *
-   *
-   */
-  this.doAction = function (fct)
-  {
-    switch(fct)
-    {
-      case 'add':
-        /* function 'add' : adding an item
-         * the second parameter is the item content
-         * the third parameter is extra data associated with item
-         */
-        if(arguments.length==3)
-        {
-          if(typeof arguments[1]=='string')
-          {
-            addItem(arguments[1], arguments[2]);
-          }
-        }
-        break;
-      case 'delete':
-        /* function 'delete' : remove an item
-         * the second parameter is the item ID
-         */
-        if(arguments.length==2)
-        {
-          if(typeof arguments[1]=='string')
-          {
-            deleteItem(arguments[1]);
-          }
-        }
-        break;
-
-      case 'edit':
-        /* function 'edit' : edit an item content
-         * the second parameter is the item ID
-         * the third parameter is the new content
-         * the fourth parameter is the new extra data associated with item
-         */
-        if(arguments.length==4)
-        {
-          if(typeof arguments[1]=='string' && typeof arguments[2]=='string' )
-          {
-            editItem(arguments[1], arguments[2], arguments[3]);
-          }
-        }
-        break;
-
-      case 'get':
-        /* function 'get' : returns extra data associated with item, ready to be
-         * used
-         */
-        return(getItems());
-        break;
-
-      case 'getExtraData':
-        /* function 'getExtraData' : returns extra data associated with item in
-         * native format
-         */
-        if(arguments.length==2)
-        {
-          return(getExtraData(arguments[1]));
-        }
-        else
-        {
-          return(null);
-        }
-        break;
-
-      case 'clear':
-        /* function 'clear' : clear all criteria
-         */
-        clearItems();
-        break;
-
-      case 'send':
-        /* function 'send' : send request to the server
-         */
-        sendRequest();
-        break;
-
-      case 'getPage':
-        /* function 'send' : send request to the server
-         * the second parameter is the request number
-         * the third parameter is the page number
-         * the fourth parameter is the number of ityem per page
-         */
-        if(arguments.length==4)
-        {
-          getPage(arguments[1], arguments[2], arguments[3]);
-        }
-        break;
-
-      case 'setOptions':
-        /* function 'setOptions' : allows to set options after the object was
-         * created
-         */
-        if(arguments.length==2)
-        {
-          return(setOptions(arguments[1]));
-        }
-        break;
-    }
-  };
-
-  /**
-   * wrap an item in a new group
-   *
-   * !it's considered that the current item parent is the criteria builder area!
-   *
-   * @param String item : ID of the item to be wrapped
-   */
-  var addGroup = function (itemId)
-  {
-    counters.group++;
-
-    var content="<li id='"+itemsId.group+counters.group+"' class='cbGroup cbSortable cbOpAND "+options.classGroup+"'>";
-    content+="<ul></ul></li>";
-
-    $('#'+itemId).wrap(content);
-
-    content="<div class='cbSortHandle'>";
-    content+="<div id='"+itemsId.group+counters.group+"OpAND' class='"+options.classOperator+"' style='display:none;'>"+options.textAND+"</div>";
-
-    content+="<div id='"+itemsId.group+counters.group+"OpOR' class='"+options.classOperator+"' style='display:none;'>"+options.textOR+"</div>";
-    content+="</div>";
-
-    $("#"+itemsId.group+counters.group).prepend(content);
-
-    $('#'+itemsId.group+counters.group+'OpAND').bind('click', itemsId.group+counters.group, onSwitchOperator);
-    $('#'+itemsId.group+counters.group+'OpOR').bind('click', itemsId.group+counters.group, onSwitchOperator);
-
-    applyNested();
-  };
-
-  /**
-   * remove a group
-   *
-   * @param String groupId : ID of the group
-   */
-  var removeGroup = function (groupId)
-  {
-    $('#'+groupId).remove();
-  };
-
-  /**
-   * add a new item in the criteria builder area
-   *
-   * @param String content : content of the new item
-   */
-  var addItem = function (itemContent, data)
-  {
-    counters.item++;
-
-    var content="<li id='"+itemsId.item+counters.item+"' class='cbItem cbSortable "+options.classItem+"'>";
-    content+="<div class='cbItemButtons' style='float:right;'>";
-
-    if(options.imgEditUrl!='' &&
-       options.onEdit!=null &&
-       jQuery.isFunction(options.onEdit)) content+="<img id='iImgEdit"+counters.item+"' src='"+options.imgEditUrl+"'/>";
-
-    if(options.imgDeleteUrl!='' &&
-       options.onDelete!=null &&
-       jQuery.isFunction(options.onDelete)) content+="<img id='iImgDelete"+counters.item+"' src='"+options.imgDeleteUrl+"'/>";
-
-    content+="</div><div class='cbSortHandle'>"+itemContent+"</div></li>";
-
-    $('#'+itemsId.container).append(content);
-
-    addGroup(itemsId.item+counters.item);
-
-    if(options.imgEditUrl!='' && options.onEdit!=null)
-    {
-      $('#iImgEdit'+counters.item).bind('click', itemsId.item+counters.item, options.onEdit);
-    }
-
-    if(options.imgDeleteUrl!='' && options.onDelete!=null)
-    {
-      $('#iImgDelete'+counters.item).bind('click', itemsId.item+counters.item, options.onDelete);
-    }
-
-    extraData[counters.item]=data;
-  };
-
-  /**
-   * remove an item from the criteria builder area and do a check to determine
-   * if parent group have to be removed
-   *
-   * @param String itemId : ID of the item to remove
-   */
-  var deleteItem = function (itemId)
-  {
-    if($('#'+itemId).length!=0)
-    {
-      $('#'+itemId).remove();
-      re=/[0-9]*$/;
-      extraData[eval(re.exec(itemId)[0])]=null;
-      manage();
-    }
-  };
-
-  /**
-   * modify the content of an item
-   *
-   * if set, trigger the 'onEdit' function after the item was modified
-   *
-   * @param String itemId : ID of the item to modify
-   * @param String content : the new content to be applied
-   */
-  var editItem = function (itemId, content, data)
-  {
-    if($('#'+itemId).length!=0)
-    {
-      $('#'+itemId+' .cbSortHandle').html(content);
-      re=/[0-9]*$/;
-      extraData[eval(re.exec(itemId)[0])]=data;
-    }
-  };
-
-  /**
-   * clear all the criteria
-   */
-  var clearItems = function()
-  {
-    $('#'+itemsId.container).NestedSortableDestroy();
-    $('#'+itemsId.container).html("");
-    counters.item=0;
-    counters.group=0;
-    extraData=new Array();
-  };
-
-  /**
-   * used by the getItems to serialize extraData objects
-   *
-   * @param String prefix : the prefix name for variable in the serialized string
-   * @param value : the value of the variable
-   * @return String : the serialized object
-   */
-  var serializeData=function(prefix, value)
-  {
-    returned='';
-    if(typeof value =='object')
-    {
-      for(var key in value )
-      {
-        if(typeof value[key] =='object')
-        {
-          returned+=serializeData(prefix+'['+key+']', value[key]);
-        }
-        else
-        {
-          returned+='&'+prefix+'['+key+']='+value[key];
-        }
-      }
-    }
-    else
-    {
-      returned+='&'+prefix+'='+value;
-    }
-    return(returned);
-  };
-
-
-  /**
-   *
-   * @return String : items in a string ready to use in an url
-   */
-  var getItems = function()
-  {
-    //group & items tree
-    serialized=jQuery.iNestedSortable.serialize(itemsId.container)['hash'];
-
-    //items extraData
-    tmp=Array();
-    for(i=0;i<extraData.length;i++)
-    {
-      if(extraData[i]!=null)
-      {
-        serialized+=serializeData('extraData['+i+']', extraData[i]);
-      }
-    }
-
-    //group Operators
-    $('#'+itemsId.container+' .cbGroup').each(
-      function ()
-      {
-        re=/[0-9]*$/;
-        serialized+='&operator['+re.exec(this.id)[0]+']=';
-        if($(this).hasClass('cbOpOR'))
-        {
-          serialized+='OR';
-        }
-        else
-        {
-          serialized+='AND';
-        }
-      }
-    );
-
-    return(serialized);
-  };
-
-
-  /**
-   *
-   * @return : return extradata (in native format) associated with item
-   */
-  var getExtraData = function(itemId)
-  {
-    re=/[0-9]*$/;
-    extraDataNumber=re.exec(itemId)[0];
-
-    return(extraData[extraDataNumber]);
-  };
-
-
-  /**
-   *
-   * @param Object options : set the given option
-   */
-  var setOptions = function(optionsToSet)
-  {
-    options = jQuery.extend(options, optionsToSet);
-  };
-
-  /**
-   * display/hide operator title for a group
-   *
-   * @param String groupId : ID of the group
-   * @param Boolean visible : set true to display the title, false to hide it
-   */
-  var displayOperator = function (groupId, visible)
-  {
-    if($('#'+groupId).hasClass('cbOpAND'))
-    {
-      if(visible)
-      {
-        $('#'+groupId+'OpAND').css('display', 'block');
-      }
-      else
-      {
-        $('#'+groupId+'OpAND').css('display', 'none');
-      }
-    }
-    else
-    {
-      if(visible)
-      {
-        $('#'+groupId+'OpOR').css('display', 'block');
-      }
-      else
-      {
-        $('#'+groupId+'OpOR').css('display', 'none');
-      }
-    }
-  };
-
-  /**
-   * manage the criteria builder groups&items
-   *
-   * check validity for a group : an empty group is removed
-   * check validity for an item : for an item directly attached to the criteria
-   *                              builder area is wrapped in a new group
-   */
-  var manage = function ()
-  {
-    $('#'+itemsId.container+' li').each(
-      function()
-      {
-        if($(this).hasClass('cbGroup'))
-        {
-          if($('#'+this.id+' li.cbItem').length==0)
-          {
-            // a group without item is removed
-            removeGroup(this.id);
-          }
-          else if($('#'+this.id+' li.cbItem').length==1)
-          {
-            displayOperator(this.id, false);
-          }
-          else
-          {
-            displayOperator(this.id, true);
-          }
-        }
-        else if($(this).hasClass('cbItem'))
-        {
-          if($(this).parent().get(0).id==itemsId.container)
-          {
-            // an item without group as parent is wrapped in a new group
-            addGroup(this.id);
-          }
-        }
-      }
-    );
-  };
-
-  /**
-   * this function make the groups&items ready to be sorted & grouped
-   */
-  var applyNested = function ()
-  {
-   // $.data($('#'+itemsId.container)[0], 'id', this);
-    $('#'+itemsId.container).NestedSortableDestroy();
-    $('#'+itemsId.container).NestedSortable(
-      {
-        accept: 'cbSortable',
-        noNestingClass: 'cbItem',
-        opacity: options.opacity,
-        helperclass: options.classHelper,
-        serializeRegExp:/.*/i,
-        autoScroll: true,
-        handle: '.cbSortHandle',
-        ghosting:false,
-        nestingPxSpace:15,
-
-        onChange: function(serialized) {
-          manage();
-        },
-      }
-    );
-  };
-
-  /**
-   * switch the operator for a group
-   *
-   * event.data = ID of the group
-   */
-  onSwitchOperator = function (event)
-  {
-    groupId=event.data;
-
-    if($('#'+groupId).hasClass('cbOpAND'))
-    {
-      $('#'+groupId).removeClass('cbOpAND').addClass('cbOpOR');
-      $('#'+groupId+'OpAND').css('display', 'none');
-      $('#'+groupId+'OpOR').css('display', 'block');
-    }
-    else
-    {
-      $('#'+groupId).removeClass('cbOpOR').addClass('cbOpAND');
-      $('#'+groupId+'OpAND').css('display', 'block');
-      $('#'+groupId+'OpOR').css('display', 'none');
-    }
-  };
-
-  /**
-   * send the request to the server
-   *
-   */
-  var sendRequest = function()
-  {
-    if(extraData.length==0)
-    {
-      alert(options.textNoCriteria);
-      return(false);
-    }
-
-    datas=encodeURI('ajaxfct=public.rbuilder.searchExecute&requestName='+itemsId.container+'&'+getItems());
-    $.ajax(
-      {
-        type: "POST",
-        url: options.ajaxUrl,
-        async: true,
-        data: datas,
-        success: function(msg)
-          {
-            if(options.onRequestSuccess!=null && jQuery.isFunction(options.onRequestSuccess)) options.onRequestSuccess(msg);
-          },
-        error: function(msg)
-          {
-            if(options.onRequestError!=null && jQuery.isFunction(options.onRequestError)) options.onRequestError(msg);
-          },
-       }
-     );
-
-  };
-
-  /**
-   * get a result page from the server
-   *
-   */
-  var getPage = function(requestNumber, pageNumber, numberPerPage)
-  {
-    $.ajax(
-      {
-        type: "POST",
-        url: options.ajaxUrl,
-        async: true,
-        data: {ajaxfct:'public.rbuilder.searchGetPage', page:pageNumber, requestNumber:requestNumber, numPerPage:numberPerPage},
-        success: function(msg)
-          {
-            if(options.onGetPageSuccess!=null && jQuery.isFunction(options.onGetPageSuccess)) options.onGetPageSuccess(msg);
-          },
-        error: function(msg)
-          {
-            if(options.onGetPageError!=null && jQuery.isFunction(options.onGetPageError)) options.onGetPageError(msg);
-          },
-       }
-     );
-
-  };
-
-  applyNested();
-};
-
-
-criteriaBuilder.makeExtendedData = function(owner, data)
-{
-  return(
-    {
-      owner:owner,
-      param:data,
-    }
-  );
-}
Index: extensions/GrumPluginClasses/js/criteriaBuilder.packed.js
===================================================================
--- extensions/GrumPluginClasses/js/criteriaBuilder.packed.js	(revision 7349)
+++ 	(revision )
@@ -1,2 +1,0 @@
-/* file: criteriaBuilder.packed.js - v1.1.0 | packed on 2010/10/21 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 1N(l){e b={d:\'2y\',f:\'2z\',l:l,},c={d:0,f:0,},5={1K:\'2e\',1L:\'2f\',2d:\'2x 1P 2w 1O ! 2u 2v, 2A 1O 1P 2H 2F 2E 2C...\',2t:\'\',1M:\'\',1S:\'\',1c:\'\',2g:\'2I\',17:0.8,Q:g,O:g,W:g,X:g,U:g,T:g,S:\'\',10:\'\',1l:\'\',},p=1E 19();6(a.m==2){6(E a[1]==\'1a\'){5=t.23(5,a[1])}}n.2o=7(1Q){2k(1Q){v\'2p\':6(a.m==3){6(E a[1]==\'13\'){1R(a[1],a[2])}}w;v\'2r\':6(a.m==2){6(E a[1]==\'13\'){1x(a[1])}}w;v\'2n\':6(a.m==4){6(E a[1]==\'13\'&&E a[2]==\'13\'){1y(a[1],a[2],a[3])}}w;v\'27\':u(1r());w;v\'1e\':6(a.m==2){u(1e(a[1]))}q{u(g)}w;v\'2m\':1u();w;v\'2s\':2a();w;v\'1q\':6(a.m==4){1q(a[1],a[2],a[3])}w;v\'1g\':6(a.m==2){u(1g(a[1]))}w}};e 18=7(o){c.d++;e j="<B k=\'"+b.d+c.d+"\' F=\'1i 16 L "+5.1M+"\'>";j+="<1J></1J></B>";$(\'#\'+o).2X(j);j="<r F=\'Y\'>";j+="<r k=\'"+b.d+c.d+"K\' F=\'"+5.1c+"\' 1b=\'s:H;\'>"+5.1K+"</r>";j+="<r k=\'"+b.d+c.d+"J\' F=\'"+5.1c+"\' 1b=\'s:H;\'>"+5.1L+"</r>";j+="</r>";$("#"+b.d+c.d).30(j);$(\'#\'+b.d+c.d+\'K\').V(\'14\',b.d+c.d,1p);$(\'#\'+b.d+c.d+\'J\').V(\'14\',b.d+c.d,1p);1k()};e 29=7(h){$(\'#\'+h).1v()};e 1R=7(1T,x){c.f++;e j="<B k=\'"+b.f+c.f+"\' F=\'P 16 "+5.1S+"\'>";j+="<r F=\'33\' 1b=\'37:36;\'>";6(5.S!=\'\'&&5.Q!=g&&t.I(5.Q))j+="<1Z k=\'1V"+c.f+"\' 1X=\'"+5.S+"\'/>";6(5.10!=\'\'&&5.O!=g&&t.I(5.O))j+="<1Z k=\'1G"+c.f+"\' 1X=\'"+5.10+"\'/>";j+="</r><r F=\'Y\'>"+1T+"</r></B>";$(\'#\'+b.l).2Y(j);18(b.f+c.f);6(5.S!=\'\'&&5.Q!=g){$(\'#1V\'+c.f).V(\'14\',b.f+c.f,5.Q)}6(5.10!=\'\'&&5.O!=g){$(\'#1G\'+c.f).V(\'14\',b.f+c.f,5.O)}p[c.f]=x};e 1x=7(o){6($(\'#\'+o).m!=0){$(\'#\'+o).1v();A=/[0-9]*$/;p[1t(A.12(o)[0])]=g;1m()}};e 1y=7(o,j,x){6($(\'#\'+o).m!=0){$(\'#\'+o+\' .Y\').1H(j);A=/[0-9]*$/;p[1t(A.12(o)[0])]=x}};e 1u=7(){$(\'#\'+b.l).2c();$(\'#\'+b.l).1H("");c.f=0;c.d=0;p=1E 19()};e 1d=7(Z,D){N=\'\';6(E D==\'1a\'){2h(e G 2R D){6(E D[G]==\'1a\'){N+=1d(Z+\'[\'+G+\']\',D[G])}q{N+=\'&\'+Z+\'[\'+G+\']=\'+D[G]}}}q{N+=\'&\'+Z+\'=\'+D}u(N)};e 1r=7(){C=t.34.2T(b.l)[\'2S\'];2U=19();2h(i=0;i<p.m;i++){6(p[i]!=g){C+=1d(\'p[\'+i+\']\',p[i])}}$(\'#\'+b.l+\' .1i\').2b(7(){A=/[0-9]*$/;C+=\'&2W[\'+A.12(n.k)[0]+\']=\';6($(n).M(\'1j\')){C+=\'2f\'}q{C+=\'2e\'}});u(C)};e 1e=7(o){A=/[0-9]*$/;25=A.12(o)[0];u(p[25])};e 1g=7(22){5=t.23(5,22)};e 1h=7(h,1f){6($(\'#\'+h).M(\'L\')){6(1f){$(\'#\'+h+\'K\').z(\'s\',\'R\')}q{$(\'#\'+h+\'K\').z(\'s\',\'H\')}}q{6(1f){$(\'#\'+h+\'J\').z(\'s\',\'R\')}q{$(\'#\'+h+\'J\').z(\'s\',\'H\')}}};e 1m=7(){$(\'#\'+b.l+\' B\').2b(7(){6($(n).M(\'1i\')){6($(\'#\'+n.k+\' B.P\').m==0){29(n.k)}q 6($(\'#\'+n.k+\' B.P\').m==1){1h(n.k,1n)}q{1h(n.k,11)}}q 6($(n).M(\'P\')){6($(n).35().27(0).k==b.l){18(n.k)}}})};e 1k=7(){$(\'#\'+b.l).2c();$(\'#\'+b.l).2Z({2J:\'16\',31:\'P\',17:5.17,2D:5.2g,2j:/.*/i,2l:11,2G:\'.Y\',2K:1n,2B:15,32:7(C){1m()},})};1p=7(24){h=24.x;6($(\'#\'+h).M(\'L\')){$(\'#\'+h).26(\'L\').28(\'1j\');$(\'#\'+h+\'K\').z(\'s\',\'H\');$(\'#\'+h+\'J\').z(\'s\',\'R\')}q{$(\'#\'+h).26(\'1j\').28(\'L\');$(\'#\'+h+\'K\').z(\'s\',\'R\');$(\'#\'+h+\'J\').z(\'s\',\'H\')}};e 2a=7(){6(p.m==0){2M(5.2d);u(1n)}1U=2L(\'1F=21.1w.2Q&2V=\'+b.l+\'&\'+1r());$.1C({1B:"1A",1D:5.1l,1z:11,x:1U,1W:7(y){6(5.W!=g&&t.I(5.W))5.W(y)},1Y:7(y){6(5.X!=g&&t.I(5.X))5.X(y)},})};e 1q=7(1o,20,1I){$.1C({1B:"1A",1D:5.1l,1z:11,x:{1F:\'21.1w.2N\',2P:20,1o:1o,2O:1I},1W:7(y){6(5.U!=g&&t.I(5.U))5.U(y)},1Y:7(y){6(5.T!=g&&t.I(5.T))5.T(y)},})};1k()};1N.2i=7(1s,x){u({1s:1s,2q:x,})}',62,194,'|||||options|if|function|||arguments|itemsId|counters|group|var|item|null|groupId||content|id|container|length|this|itemId|extraData|else|div|display|jQuery|return|case|break|data|msg|css|re|li|serialized|value|typeof|class|key|none|isFunction|OpOR|OpAND|cbOpAND|hasClass|returned|onDelete|cbItem|onEdit|block|imgEditUrl|onGetPageError|onGetPageSuccess|bind|onRequestSuccess|onRequestError|cbSortHandle|prefix|imgDeleteUrl|true|exec|string|click||cbSortable|opacity|addGroup|Array|object|style|classOperator|serializeData|getExtraData|visible|setOptions|displayOperator|cbGroup|cbOpOR|applyNested|ajaxUrl|manage|false|requestNumber|onSwitchOperator|getPage|getItems|owner|eval|clearItems|remove|rbuilder|deleteItem|editItem|async|POST|type|ajax|url|new|ajaxfct|iImgDelete|html|numberPerPage|ul|textAND|textOR|classGroup|criteriaBuilder|criteria|is|fct|addItem|classItem|itemContent|datas|iImgEdit|success|src|error|img|pageNumber|public|optionsToSet|extend|event|extraDataNumber|removeClass|get|addClass|removeGroup|sendRequest|each|NestedSortableDestroy|textNoCriteria|AND|OR|classHelper|for|makeExtendedData|serializeRegExp|switch|autoScroll|clear|edit|doAction|add|param|delete|send|textHint|At|least|no|There|iCbGroup|iCbItem|one|nestingPxSpace|search|helperclass|do|to|handle|required|helper|accept|ghosting|encodeURI|alert|searchGetPage|numPerPage|page|searchExecute|in|hash|serialize|tmp|requestName|operator|wrap|append|NestedSortable|prepend|noNestingClass|onChange|cbItemButtons|iNestedSortable|parent|right|float'.split('|'),0,{}))
Index: extensions/GrumPluginClasses/js/rbCriteriaBuilder.js
===================================================================
--- extensions/GrumPluginClasses/js/rbCriteriaBuilder.js	(revision 7370)
+++ extensions/GrumPluginClasses/js/rbCriteriaBuilder.js	(revision 7370)
@@ -0,0 +1,642 @@
+/**
+ * -----------------------------------------------------------------------------
+ * file: criteriaBuilder.js
+ * file version: 1.1.0
+ * date: 2010-10-21
+ *
+ * JS file 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 ! >>
+ * -----------------------------------------------------------------------------
+ *
+ * -----------------------------------------------------------------------------
+ * This plugin use the Nested Sortable Plugin / version 1.0.1
+ *    Copyright (c) 2007 Bernardo de Padua dos Santos
+ *    Dual licensed under the MIT (MIT-LICENSE.txt)
+ *    and GPL (GPL-LICENSE.txt) licenses.
+ *
+ *    http://code.google.com/p/nestedsortables/
+ * -----------------------------------------------------------------------------
+ *
+ * an object dedicaded for Piwigo, giving easy user methods to make complex
+ * requests
+ *
+ * constructor : myCB = new criteriaBuilder(containerId [, options]);
+ *
+ *  - containerId : the Id of the DOM element where the criteria will be added
+ *  - options : an object with this properties :
+ *       . textAND       : String, with default value = 'AND'
+ *                         displayed text to indicates the type of operator AND
+ *       . textOR        : String, with default value = 'OR',
+ *                         displayed text to indicates the type of operator OR
+ *       . textHint      : String, with default value = '',
+ *       . classGroup    : String, with default value = '',
+ *       . classItem     : String, with default value = '',
+ *       . classOperator : String, with default value = '',
+ *       . classHelper   : String, with default value = 'helper',
+ *       . opacity       : String, with default value = 0.8,
+ *       . onEdit        : handler on a function to manage click on the 'Edit'
+ *                         button ; event.data contain the item Id
+ *       . onDelete      : handler on a function to manage click on the 'Delete'
+ *                         button ; event.data contain the item Id
+ *
+ *
+ * :: HISTORY ::
+ *
+ * | release | date       |
+ * | 1.0.0   | 2010/04/27 | * start to coding
+ * |         |            |
+ * | 1.1.0   | 2010/10/21 | * change ajax methods
+ * |         |            |
+ * |         |            | * fix bug : if there is no criteria, don't send
+ * |         |            |   request
+ * |         |            |
+ * |         |            |
+ * |         |            |
+ * |         |            |
+ * |         |            |
+ *
+ */
+
+
+
+function criteriaBuilder(container)
+{
+  var itemsId = {
+          group:'iCbGroup',
+          item:'iCbItem',
+          container:container,
+        },
+      counters = {
+          group:0,
+          item:0,
+        },
+      options = {
+          textAND:'AND',
+          textOR:'OR',
+          textNoCriteria:'There is no criteria ! At least, one criteria is required to do search...',
+          textHint:'',
+          textSomethingWrong:'An error has occured on the server-side',
+          textCaddieUpdated:'Caddie was updated',
+          classGroup:'',
+          classItem:'',
+          classOperator:'',
+          classHelper:'helper',
+          opacity:0.8,
+          onEdit:null,
+          onDelete:null,
+          onRequestSuccess:null,
+          onRequestError:null,
+          onGetPageSuccess:null,
+          onGetPageError:null,
+          helpEditUrl:'',
+          helpDeleteUrl:'',
+          helpMove:'',
+          helpSwitchCondition:'',
+          ajaxUrl:'',
+        },
+      extraData = new Array();
+
+  if(arguments.length==2)
+  {
+    if(typeof arguments[1]=='object')
+    {
+      options = jQuery.extend(options, arguments[1]);
+    }
+  }
+
+  /**
+   *
+   *
+   */
+  this.doAction = function (fct)
+  {
+    switch(fct)
+    {
+      case 'add':
+        /* function 'add' : adding an item
+         * the second parameter is the item content
+         * the third parameter is extra data associated with item
+         */
+        if(arguments.length==3)
+        {
+          if(typeof arguments[1]=='string')
+          {
+            addItem(arguments[1], arguments[2]);
+          }
+        }
+        break;
+      case 'delete':
+        /* function 'delete' : remove an item
+         * the second parameter is the item ID
+         */
+        if(arguments.length==2)
+        {
+          if(typeof arguments[1]=='string')
+          {
+            deleteItem(arguments[1]);
+          }
+        }
+        break;
+
+      case 'edit':
+        /* function 'edit' : edit an item content
+         * the second parameter is the item ID
+         * the third parameter is the new content
+         * the fourth parameter is the new extra data associated with item
+         */
+        if(arguments.length==4)
+        {
+          if(typeof arguments[1]=='string' && typeof arguments[2]=='string' )
+          {
+            editItem(arguments[1], arguments[2], arguments[3]);
+          }
+        }
+        break;
+
+      case 'get':
+        /* function 'get' : returns extra data associated with item, ready to be
+         * used
+         */
+        return(getItems());
+        break;
+
+      case 'getExtraData':
+        /* function 'getExtraData' : returns extra data associated with item in
+         * native format
+         */
+        if(arguments.length==2)
+        {
+          return(getExtraData(arguments[1]));
+        }
+        else
+        {
+          return(null);
+        }
+        break;
+
+      case 'clear':
+        /* function 'clear' : clear all criteria
+         */
+        clearItems();
+        break;
+
+      case 'send':
+        /* function 'send' : send request to the server
+         */
+        sendRequest();
+        break;
+
+      case 'getPage':
+        /* function 'send' : send request to the server
+         * the second parameter is the request number
+         * the third parameter is the page number
+         * the fourth parameter is the number of ityem per page
+         */
+        if(arguments.length==4)
+        {
+          getPage(arguments[1], arguments[2], arguments[3]);
+        }
+        break;
+
+      case 'setOptions':
+        /* function 'setOptions' : allows to set options after the object was
+         * created
+         */
+        if(arguments.length==2)
+        {
+          return(setOptions(arguments[1]));
+        }
+        break;
+    }
+  };
+
+  /**
+   * wrap an item in a new group
+   *
+   * !it's considered that the current item parent is the criteria builder area!
+   *
+   * @param String item : ID of the item to be wrapped
+   */
+  var addGroup = function (itemId)
+  {
+    counters.group++;
+
+    var content="<li id='"+itemsId.group+counters.group+"' class='cbGroup cbSortable cbOpAND "+options.classGroup+" cbItemUnique'>";
+    content+="<ul></ul></li>";
+
+    $('#'+itemId).wrap(content);
+
+    content="<div class='cbSortHandle' style='display:none;'>";
+
+    content+="<div class='cbItemButtons' style='float:left;'>";
+    content+="<div class='iconMove' id='iImgMoveItem"+counters.item+"' title=\""+options.helpMove+"\"></div>";
+    content+="<div class='iconSwitchCondition' id='iImgSwitchCItem"+counters.item+"' title=\""+options.helpSwitchCondition+"\"></div>";
+    content+="</div>";
+
+    content+="<div id='"+itemsId.group+counters.group+"OpAND' class='"+options.classOperator+"' style='display:none;'>"+options.textAND+"</div>";
+
+    content+="<div id='"+itemsId.group+counters.group+"OpOR' class='"+options.classOperator+"' style='display:none;'>"+options.textOR+"</div>";
+    content+="</div>";
+
+    $("#"+itemsId.group+counters.group).prepend(content);
+
+    $('#'+itemsId.group+counters.group+'OpOR, #'+itemsId.group+counters.group+'OpAND, #'+itemsId.group+counters.group+' div.iconSwitchCondition ').bind('click', itemsId.group+counters.group, onSwitchOperator);
+
+    applyNested();
+  };
+
+  /**
+   * remove a group
+   *
+   * @param String groupId : ID of the group
+   */
+  var removeGroup = function (groupId)
+  {
+    $('#'+groupId).remove();
+  };
+
+  /**
+   * add a new item in the criteria builder area
+   *
+   * @param String content : content of the new item
+   */
+  var addItem = function (itemContent, data)
+  {
+    counters.item++;
+
+    var content="<li id='"+itemsId.item+counters.item+"' class='cbItem cbSortable "+options.classItem+"'>";
+
+    content+="<div class='cbItemButtons' style='float:right;'>";
+
+    if(options.onEdit!=null &&
+       jQuery.isFunction(options.onEdit)) content+="<div class='iconEdit' id='iImgEdit"+counters.item+"' title=\""+options.helpEdit+"\"></div>";
+
+    if(options.onDelete!=null &&
+       jQuery.isFunction(options.onDelete)) content+="<div class='iconDelete' id='iImgDelete"+counters.item+"' title=\""+options.helpDelete+"\"></div>";
+
+    content+="</div><div class='cbSortHandle'>";
+    content+="<div class='cbItemButtons' style='float:left;'> <div class='iconMove' id='iImgMoveItem"+counters.item+"' title=\""+options.helpMove+"\"></div></div>";
+    content+="<div class='itemContent'>"+itemContent+"</div></div></li>";
+
+    $('#'+itemsId.container).append(content);
+
+    addGroup(itemsId.item+counters.item);
+
+    if(options.onEdit!=null) $('#iImgEdit'+counters.item).bind('click', itemsId.item+counters.item, options.onEdit);
+
+    if(options.onDelete!=null) $('#iImgDelete'+counters.item).bind('click', itemsId.item+counters.item, options.onDelete);
+
+
+    extraData[counters.item]=data;
+  };
+
+  /**
+   * remove an item from the criteria builder area and do a check to determine
+   * if parent group have to be removed
+   *
+   * @param String itemId : ID of the item to remove
+   */
+  var deleteItem = function (itemId)
+  {
+    if($('#'+itemId).length!=0)
+    {
+      $('#'+itemId).remove();
+      re=/[0-9]*$/;
+      extraData[eval(re.exec(itemId)[0])]=null;
+      manage();
+    }
+  };
+
+  /**
+   * modify the content of an item
+   *
+   * if set, trigger the 'onEdit' function after the item was modified
+   *
+   * @param String itemId : ID of the item to modify
+   * @param String content : the new content to be applied
+   */
+  var editItem = function (itemId, content, data)
+  {
+    if($('#'+itemId).length!=0)
+    {
+      $('#'+itemId+' .itemContent').html(content);
+      re=/[0-9]*$/;
+      extraData[eval(re.exec(itemId)[0])]=data;
+    }
+  };
+
+  /**
+   * clear all the criteria
+   */
+  var clearItems = function()
+  {
+    $('#'+itemsId.container).NestedSortableDestroy();
+    $('#'+itemsId.container).html("");
+    counters.item=0;
+    counters.group=0;
+    extraData=new Array();
+  };
+
+  /**
+   * used by the getItems to serialize extraData objects
+   *
+   * @param String prefix : the prefix name for variable in the serialized string
+   * @param value : the value of the variable
+   * @return String : the serialized object
+   */
+  var serializeData=function(prefix, value)
+  {
+    returned='';
+    if(typeof value =='object')
+    {
+      for(var key in value )
+      {
+        if(typeof value[key] =='object')
+        {
+          returned+=serializeData(prefix+'['+key+']', value[key]);
+        }
+        else
+        {
+          returned+='&'+prefix+'['+key+']='+value[key];
+        }
+      }
+    }
+    else
+    {
+      returned+='&'+prefix+'='+value;
+    }
+    return(returned);
+  };
+
+
+  /**
+   *
+   * @return String : items in a string ready to use in an url
+   */
+  var getItems = function()
+  {
+    //group & items tree
+    serialized=jQuery.iNestedSortable.serialize(itemsId.container)['hash'];
+
+    //items extraData
+    tmp=Array();
+    for(i=0;i<extraData.length;i++)
+    {
+      if(extraData[i]!=null)
+      {
+        serialized+=serializeData('extraData['+i+']', extraData[i]);
+      }
+    }
+
+    //group Operators
+    $('#'+itemsId.container+' .cbGroup').each(
+      function ()
+      {
+        re=/[0-9]*$/;
+        serialized+='&operator['+re.exec(this.id)[0]+']=';
+        if($(this).hasClass('cbOpOR'))
+        {
+          serialized+='OR';
+        }
+        else
+        {
+          serialized+='AND';
+        }
+      }
+    );
+
+    return(serialized);
+  };
+
+
+  /**
+   *
+   * @return : return extradata (in native format) associated with item
+   */
+  var getExtraData = function(itemId)
+  {
+    re=/[0-9]*$/;
+    extraDataNumber=re.exec(itemId)[0];
+
+    return(extraData[extraDataNumber]);
+  };
+
+
+  /**
+   *
+   * @param Object options : set the given option
+   */
+  var setOptions = function(optionsToSet)
+  {
+    options = jQuery.extend(options, optionsToSet);
+  };
+
+  /**
+   * display/hide operator title for a group
+   *
+   * @param String groupId : ID of the group
+   * @param Boolean visible : set true to display the title, false to hide it
+   */
+  var displayOperator = function (groupId, visible)
+  {
+    if($('#'+groupId).hasClass('cbOpAND'))
+    {
+      if(visible)
+      {
+        $('#'+groupId+'OpAND').css('display', 'block');
+      }
+      else
+      {
+        $('#'+groupId+'OpAND').css('display', 'none');
+      }
+    }
+    else
+    {
+      if(visible)
+      {
+        $('#'+groupId+'OpOR').css('display', 'block');
+      }
+      else
+      {
+        $('#'+groupId+'OpOR').css('display', 'none');
+      }
+    }
+    if(visible)
+    {
+      $('#'+groupId).children('div.cbSortHandle').css('display', 'block');
+    }
+    else
+    {
+      $('#'+groupId).children('div.cbSortHandle').css('display', 'none');
+    }
+  };
+
+  /**
+   * manage the criteria builder groups&items
+   *
+   * check validity for a group : an empty group is removed
+   * check validity for an item : for an item directly attached to the criteria
+   *                              builder area is wrapped in a new group
+   */
+  var manage = function ()
+  {
+    $('#'+itemsId.container+' li').each(
+      function()
+      {
+        if($(this).hasClass('cbGroup'))
+        {
+          if($('#'+this.id+' li.cbItem').length==0)
+          {
+            // a group without item is removed
+            removeGroup(this.id);
+          }
+          else if($('#'+this.id+' li.cbItem').length==1)
+          {
+            $('#'+this.id).addClass('cbItemUnique').removeClass('cbItemMultiple');
+            displayOperator(this.id, false);
+          }
+          else
+          {
+            $('#'+this.id).removeClass('cbItemUnique').addClass('cbItemMultiple');
+            displayOperator(this.id, true);
+          }
+        }
+        else if($(this).hasClass('cbItem'))
+        {
+          if($(this).parent().get(0).id==itemsId.container)
+          {
+            // an item without group as parent is wrapped in a new group
+            addGroup(this.id);
+          }
+        }
+      }
+    );
+  };
+
+  /**
+   * this function make the groups&items ready to be sorted & grouped
+   */
+  var applyNested = function ()
+  {
+   // $.data($('#'+itemsId.container)[0], 'id', this);
+    $('#'+itemsId.container).NestedSortableDestroy();
+    $('#'+itemsId.container).NestedSortable(
+      {
+        accept: 'cbSortable',
+        noNestingClass: 'cbItem',
+        opacity: options.opacity,
+        helperclass: options.classHelper,
+        serializeRegExp:/.*/i,
+        autoScroll: true,
+        handle: '.cbSortHandle',
+        ghosting:false,
+        nestingPxSpace:15,
+        currentNestingClass:'cbItemOverGroup',
+
+        onChange: function(serialized) {
+          manage();
+        },
+      }
+    );
+  };
+
+  /**
+   * switch the operator for a group
+   *
+   * event.data = ID of the group
+   */
+  onSwitchOperator = function (event)
+  {
+    groupId=event.data;
+
+    if($('#'+groupId).hasClass('cbOpAND'))
+    {
+      $('#'+groupId).removeClass('cbOpAND').addClass('cbOpOR');
+      $('#'+groupId+'OpAND').css('display', 'none');
+      $('#'+groupId+'OpOR').css('display', 'block');
+    }
+    else
+    {
+      $('#'+groupId).removeClass('cbOpOR').addClass('cbOpAND');
+      $('#'+groupId+'OpAND').css('display', 'block');
+      $('#'+groupId+'OpOR').css('display', 'none');
+    }
+  };
+
+  /**
+   * send the request to the server
+   *
+   */
+  var sendRequest = function()
+  {
+    if(extraData.length==0)
+    {
+      alert(options.textNoCriteria);
+      return(false);
+    }
+
+    datas=encodeURI('ajaxfct=public.rbuilder.searchExecute&requestName='+itemsId.container+'&'+getItems());
+    $.ajax(
+      {
+        type: "POST",
+        url: options.ajaxUrl,
+        async: true,
+        data: datas,
+        success: function(msg)
+          {
+            if(options.onRequestSuccess!=null && jQuery.isFunction(options.onRequestSuccess)) options.onRequestSuccess(msg);
+          },
+        error: function(msg)
+          {
+            if(options.onRequestError!=null && jQuery.isFunction(options.onRequestError)) options.onRequestError(msg);
+          },
+       }
+     );
+
+  };
+
+  /**
+   * get a result page from the server
+   *
+   */
+  var getPage = function(requestNumber, pageNumber, numberPerPage)
+  {
+    $.ajax(
+      {
+        type: "POST",
+        url: options.ajaxUrl,
+        async: true,
+        data: {ajaxfct:'public.rbuilder.searchGetPage', page:pageNumber, requestNumber:requestNumber, numPerPage:numberPerPage},
+        success: function(msg)
+          {
+            if(options.onGetPageSuccess!=null && jQuery.isFunction(options.onGetPageSuccess)) options.onGetPageSuccess(msg);
+          },
+        error: function(msg)
+          {
+            if(options.onGetPageError!=null && jQuery.isFunction(options.onGetPageError)) options.onGetPageError(msg);
+          },
+       }
+     );
+
+  };
+
+  applyNested();
+};
+
+
+criteriaBuilder.makeExtendedData = function(owner, data)
+{
+  return(
+    {
+      owner:owner,
+      param:data,
+    }
+  );
+}
Index: extensions/GrumPluginClasses/js/rbCriteriaBuilder.packed.js
===================================================================
--- extensions/GrumPluginClasses/js/rbCriteriaBuilder.packed.js	(revision 7370)
+++ extensions/GrumPluginClasses/js/rbCriteriaBuilder.packed.js	(revision 7370)
@@ -0,0 +1,2 @@
+/* file: rbCriteriaBuilder.packed.js - v1.1.0 | packed on 2010/10/21 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}('a 26(o){h d={f:\'2H\',g:\'2G\',o:o,},b={f:0,g:0,},5={23:\'1E\',1W:\'1D\',27:\'2I 1X 2J 1Y ! 2K 2F, 2E 1Y 1X 2z 2y 2A 2B...\',2D:\'\',2C:\'2L 1l 2M 2V 2U 2W 2X-2Y\',2x:\'2S 2O 2N\',25:\'\',21:\'\',1y:\'\',2c:\'2P\',1p:0.8,Q:l,T:l,16:l,13:l,17:l,14:l,2Q:\'\',2R:\'\',1a:\'\',24:\'\',1d:\'\',},t=1T 1n();6(c.q==2){6(D c[1]==\'1b\'){5=v.2j(5,c[1])}}n.2Z=a(2p){2w(2p){x\'2s\':6(c.q==3){6(D c[1]==\'V\'){22(c[1],c[2])}}y;x\'2q\':6(c.q==2){6(D c[1]==\'V\'){1J(c[1])}}y;x\'2r\':6(c.q==4){6(D c[1]==\'V\'&&D c[2]==\'V\'){1O(c[1],c[2],c[3])}}y;x\'2n\':z(1v());y;x\'1g\':6(c.q==2){z(1g(c[1]))}r{z(l)}y;x\'2u\':1A();y;x\'2t\':1L();y;x\'18\':6(c.q==4){18(c[1],c[2],c[3])}y;x\'1h\':6(c.q==2){z(1h(c[1]))}y}};h 19=a(s){b.f++;h e="<F j=\'"+d.f+b.f+"\' m=\'1k 1c N "+5.25+" 1e\'>";e+="<28></28></F>";$(\'#\'+s).3o(e);e="<7 m=\'S\' I=\'p:B;\'>";e+="<7 m=\'1m\' I=\'1f:1U;\'>";e+="<7 m=\'1S\' j=\'1P"+b.g+"\' U=\\""+5.1a+"\\"></7>";e+="<7 m=\'20\' j=\'3n"+b.g+"\' U=\\""+5.24+"\\"></7>";e+="</7>";e+="<7 j=\'"+d.f+b.f+"H\' m=\'"+5.1y+"\' I=\'p:B;\'>"+5.23+"</7>";e+="<7 j=\'"+d.f+b.f+"K\' m=\'"+5.1y+"\' I=\'p:B;\'>"+5.1W+"</7>";e+="</7>";$("#"+d.f+b.f).3m(e);$(\'#\'+d.f+b.f+\'K, #\'+d.f+b.f+\'H, #\'+d.f+b.f+\' 7.20 \').1u(\'1q\',d.f+b.f,29);1i()};h 2f=a(k){$(\'#\'+k).1R()};h 22=a(10,w){b.g++;h e="<F j=\'"+d.g+b.g+"\' m=\'R 1c "+5.21+"\'>";e+="<7 m=\'1m\' I=\'1f:3j;\'>";6(5.Q!=l&&v.L(5.Q))e+="<7 m=\'3k\' j=\'2e"+b.g+"\' U=\\""+5.3l+"\\"></7>";6(5.T!=l&&v.L(5.T))e+="<7 m=\'3r\' j=\'1G"+b.g+"\' U=\\""+5.3y+"\\"></7>";e+="</7><7 m=\'S\'>";e+="<7 m=\'1m\' I=\'1f:1U;\'> <7 m=\'1S\' j=\'1P"+b.g+"\' U=\\""+5.1a+"\\"></7></7>";e+="<7 m=\'10\'>"+10+"</7></7></F>";$(\'#\'+d.o).3w(e);19(d.g+b.g);6(5.Q!=l)$(\'#2e\'+b.g).1u(\'1q\',d.g+b.g,5.Q);6(5.T!=l)$(\'#1G\'+b.g).1u(\'1q\',d.g+b.g,5.T);t[b.g]=w};h 1J=a(s){6($(\'#\'+s).q!=0){$(\'#\'+s).1R();C=/[0-9]*$/;t[1M(C.11(s)[0])]=l;1w()}};h 1O=a(s,e,w){6($(\'#\'+s).q!=0){$(\'#\'+s+\' .10\').1z(e);C=/[0-9]*$/;t[1M(C.11(s)[0])]=w}};h 1A=a(){$(\'#\'+d.o).2o();$(\'#\'+d.o).1z("");b.g=0;b.f=0;t=1T 1n()};h 1j=a(Z,G){O=\'\';6(D G==\'1b\'){1C(h J 3v G){6(D G[J]==\'1b\'){O+=1j(Z+\'[\'+J+\']\',G[J])}r{O+=\'&\'+Z+\'[\'+J+\']=\'+G[J]}}}r{O+=\'&\'+Z+\'=\'+G}z(O)};h 1v=a(){E=v.3t.3i(d.o)[\'3h\'];36=1n();1C(i=0;i<t.q;i++){6(t[i]!=l){E+=1j(\'t[\'+i+\']\',t[i])}}$(\'#\'+d.o+\' .1k\').1V(a(){C=/[0-9]*$/;E+=\'&37[\'+C.11(n.j)[0]+\']=\';6($(n).P(\'1s\')){E+=\'1D\'}r{E+=\'1E\'}});z(E)};h 1g=a(s){C=/[0-9]*$/;2i=C.11(s)[0];z(t[2i])};h 1h=a(2k){5=v.2j(5,2k)};h 1o=a(k,W){6($(\'#\'+k).P(\'N\')){6(W){$(\'#\'+k+\'H\').u(\'p\',\'M\')}r{$(\'#\'+k+\'H\').u(\'p\',\'B\')}}r{6(W){$(\'#\'+k+\'K\').u(\'p\',\'M\')}r{$(\'#\'+k+\'K\').u(\'p\',\'B\')}}6(W){$(\'#\'+k).2g(\'7.S\').u(\'p\',\'M\')}r{$(\'#\'+k).2g(\'7.S\').u(\'p\',\'B\')}};h 1w=a(){$(\'#\'+d.o+\' F\').1V(a(){6($(n).P(\'1k\')){6($(\'#\'+n.j+\' F.R\').q==0){2f(n.j)}r 6($(\'#\'+n.j+\' F.R\').q==1){$(\'#\'+n.j).Y(\'1e\').X(\'2m\');1o(n.j,1t)}r{$(\'#\'+n.j).X(\'1e\').Y(\'2m\');1o(n.j,12)}}r 6($(n).P(\'R\')){6($(n).31().2n(0).j==d.o){19(n.j)}}})};h 1i=a(){$(\'#\'+d.o).2o();$(\'#\'+d.o).32({33:\'1c\',38:\'R\',1p:5.1p,39:5.2c,3f:/.*/i,3e:12,3d:\'.S\',3a:1t,3b:15,3q:\'3c\',3g:a(E){1w()},})};29=a(2a){k=2a.w;6($(\'#\'+k).P(\'N\')){$(\'#\'+k).X(\'N\').Y(\'1s\');$(\'#\'+k+\'H\').u(\'p\',\'B\');$(\'#\'+k+\'K\').u(\'p\',\'M\')}r{$(\'#\'+k).X(\'1s\').Y(\'N\');$(\'#\'+k+\'H\').u(\'p\',\'M\');$(\'#\'+k+\'K\').u(\'p\',\'B\')}};h 1L=a(){6(t.q==0){3p(5.27);z(1t)}1Z=3s(\'1N=1Q.1B.35&34=\'+d.o+\'&\'+1v());$.2l({2d:"2h",2b:5.1d,1F:12,w:1Z,1I:a(A){6(5.16!=l&&v.L(5.16))5.16(A)},1l:a(A){6(5.13!=l&&v.L(5.13))5.13(A)},})};h 18=a(1x,1H,1K){$.2l({2d:"2h",2b:5.1d,1F:12,w:{1N:\'1Q.1B.3u\',3x:1H,1x:1x,30:1K},1I:a(A){6(5.17!=l&&v.L(5.17))5.17(A)},1l:a(A){6(5.14!=l&&v.L(5.14))5.14(A)},})};1i()};26.2T=a(1r,w){z({1r:1r,2v:w,})}',62,221,'|||||options|if|div|||function|counters|arguments|itemsId|content|group|item|var||id|groupId|null|class|this|container|display|length|else|itemId|extraData|css|jQuery|data|case|break|return|msg|none|re|typeof|serialized|li|value|OpAND|style|key|OpOR|isFunction|block|cbOpAND|returned|hasClass|onEdit|cbItem|cbSortHandle|onDelete|title|string|visible|removeClass|addClass|prefix|itemContent|exec|true|onRequestError|onGetPageError||onRequestSuccess|onGetPageSuccess|getPage|addGroup|helpMove|object|cbSortable|ajaxUrl|cbItemUnique|float|getExtraData|setOptions|applyNested|serializeData|cbGroup|error|cbItemButtons|Array|displayOperator|opacity|click|owner|cbOpOR|false|bind|getItems|manage|requestNumber|classOperator|html|clearItems|rbuilder|for|OR|AND|async|iImgDelete|pageNumber|success|deleteItem|numberPerPage|sendRequest|eval|ajaxfct|editItem|iImgMoveItem|public|remove|iconMove|new|left|each|textOR|is|criteria|datas|iconSwitchCondition|classItem|addItem|textAND|helpSwitchCondition|classGroup|criteriaBuilder|textNoCriteria|ul|onSwitchOperator|event|url|classHelper|type|iImgEdit|removeGroup|children|POST|extraDataNumber|extend|optionsToSet|ajax|cbItemMultiple|get|NestedSortableDestroy|fct|delete|edit|add|send|clear|param|switch|textCaddieUpdated|to|required|do|search|textSomethingWrong|textHint|one|least|iCbItem|iCbGroup|There|no|At|An|has|updated|was|helper|helpEditUrl|helpDeleteUrl|Caddie|makeExtendedData|on|occured|the|server|side|doAction|numPerPage|parent|NestedSortable|accept|requestName|searchExecute|tmp|operator|noNestingClass|helperclass|ghosting|nestingPxSpace|cbItemOverGroup|handle|autoScroll|serializeRegExp|onChange|hash|serialize|right|iconEdit|helpEdit|prepend|iImgSwitchCItem|wrap|alert|currentNestingClass|iconDelete|encodeURI|iNestedSortable|searchGetPage|in|append|page|helpDelete'.split('|'),0,{}))
Index: extensions/GrumPluginClasses/js/rbSearch.js
===================================================================
--- extensions/GrumPluginClasses/js/rbSearch.js	(revision 7370)
+++ extensions/GrumPluginClasses/js/rbSearch.js	(revision 7370)
@@ -0,0 +1,302 @@
+/**
+ * -----------------------------------------------------------------------------
+ * file: criteriaBuilderSearch.js
+ * file version: 1.0.0
+ * date: 2010-10-23
+ *
+ * JS file 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 ! >>
+ * -----------------------------------------------------------------------------
+ *
+ * used to manage the requestBuilder search interface
+ *
+ * :: HISTORY ::
+ *
+ * | release | date       |
+ * | 1.0.0   | 2010/04/27 | * start to coding
+ * |         |            |
+ * | 1.1.0   | 2010/10/21 | * change ajax methods
+ * |         |            |
+ * |         |            | * fix bug : if there is no criteria, don't send
+ * |         |            |   request
+ * |         |            |
+ * |         |            |
+ * |         |            |
+ * |         |            |
+ * |         |            |
+ *
+ */
+
+  var cb=null;
+
+  var interfaceManager = function(optionsToSet)
+  {
+    var pn=null,
+        requestNumber=0,
+        options =
+          {
+            requestCriterionsVisible:'',
+            requestCriterionsHidden:'',
+            requestResult:'',
+            requestResultContent:'',
+            requestResultNfo:'',
+            requestResultPagesNavigator:'',
+            requestResultRequestNumber:0,
+            onPageChange:null,
+            numberPerPage:30,
+          };
+
+    /**
+     *
+     */
+    this.doAction = function(fct)
+    {
+      switch(fct)
+      {
+        case 'queryResult':
+          /* function 'queryResult' : when query is executed, prepare the interface
+           */
+          if(arguments.length==3)
+          {
+            displayQueryResult(arguments[1], arguments[2]);
+          }
+          break;
+        case 'queryPage':
+          /* function 'queryPage' : display returned page
+           */
+          if(arguments.length==3)
+          {
+            displayQueryPage(arguments[1], arguments[2]);
+          }
+          break;
+        case 'show':
+          /* function 'show' : show/hide the query/result
+           */
+          if(arguments.length==2)
+          {
+            show(arguments[1]);
+          }
+          break;
+        case 'setOptions':
+          /* function 'setOptions' : allows to set options after the object was
+           *                         created
+           */
+          if(arguments.length==2)
+          {
+            setOptions(arguments[1]);
+          }
+          break;
+        case 'fillCaddie':
+          /* function 'fillCaddie' : allows to fill the caddie with the search result
+           *
+           */
+          if(arguments.length==2)
+          {
+            fillCaddie(arguments[1], this.getRequestNumber());
+          }
+          break;
+      }
+    };
+
+    /**
+     * returns the current request number
+     */
+    this.getRequestNumber = function ()
+    {
+      return(requestNumber);
+    };
+
+    /**
+     * returns the number of items per page
+     */
+    this.getNumberPerPage = function ()
+    {
+      return(options.numberPerPage);
+    };
+
+    /**
+     * this function show/hide the different panels
+     *  'buildQuery'  : hide the result panel and display the panel to build query
+     *  'resultQuery' : hide the panel to build query and display the result panel
+     */
+    var show = function(mode)
+    {
+      switch(mode)
+      {
+        case 'buildQuery':
+          $('.'+options.requestCriterionsVisible).css('display', 'block');
+          $('.'+options.requestCriterionsHidden).css('display', 'none');
+          $('.'+options.requestResult).css('display', 'none');
+          break;
+        case 'resultQuery':
+          $('#iResultQueryContent').html("<br><img class='waitingResult' src='./plugins/GrumPluginClasses/icons/processing.gif'>");
+          $('.'+options.requestCriterionsVisible).css('display', 'none');
+          $('.'+options.requestCriterionsHidden).css('display', 'block');
+          $('.'+options.requestResult).css('display', 'block');
+          break;
+      }
+    },
+
+    /**
+     * this function display the number of items found and prepare the page
+     * navigator
+     *
+     * @param String nfo : 2 information separated with a semi-colon ';'
+     *                      requestNumber;numberOfItems
+     */
+    displayQueryResult = function (isSuccess, nfo)
+    {
+      if(isSuccess)
+      {
+        nfo=nfo.split(';');
+
+        requestNumber=nfo[0];
+        $('#iResultQueryNfo').html(nfo[1]);
+        pn.doAction('setOptions', { numberItem:nfo[1], defaultPage:1 } );
+        show('resultQuery');
+      }
+      else
+      {
+        //$('#'+options.requestResultContent).html("");
+        show('buildQuery');
+        alert(requestBuilderOptions.textSomethingWrong);
+      }
+    },
+
+
+    /**
+     * this function display the number of items found and prepare the page
+     * navigator
+     *
+     * @param String nfo : 2 information separated with a semi-colon ';'
+     *                      requestNumber;numberOfItems
+     */
+    displayQueryPage = function (isSuccess, nfo)
+    {
+      if(isSuccess)
+      {
+        $('#iResultQueryContent').html(nfo);
+      }
+      else
+      {
+        alert(requestBuilderOptions.textSomethingWrong);
+      }
+    },
+
+
+    /**
+     *
+     * @param Object optionsToSet : set the given options
+     */
+    setOptions = function(optionsToSet)
+    {
+      if(typeof optionsToSet=='object')
+      {
+        options = jQuery.extend(options, optionsToSet);
+      }
+    },
+
+    /**
+     * initialize the object
+     */
+    init = function (optionsToSet)
+    {
+      setOptions(optionsToSet);
+
+      pn = new pagesNavigator(options.requestResultPagesNavigator,
+        {
+          itemPerPage:options.numberPerPage,
+          displayNumPage:9,
+          classActive:'pnActive',
+          classInactive:'pnInactive',
+          onPageChange: function (page)
+            {
+              if(options.onPageChange!=null && jQuery.isFunction(options.onPageChange))
+              {
+                options.onPageChange(requestNumber, page, options.numberPerPage);
+              }
+            },
+        }
+      );
+
+      requestNumber=options.requestResultRequestNumber;
+    },
+
+    /**
+     * fill the caddie with the search results
+     * @param String mode : 'add' or 'fill'
+     */
+    fillCaddie = function (mode, requestNumber)
+    {
+      $('#iMenuCaddieImg').css('display', 'inline-block');
+      $('#iMenuCaddieItems ul').css('display', 'none');
+
+      $.ajax(
+        {
+          type: "POST",
+          url: "plugins/GrumPluginClasses/gpc_ajax.php",
+          async: true,
+          data: { ajaxfct:"admin.rbuilder.fillCaddie", fillMode:mode, requestNumber:requestNumber },
+          success:
+            function(msg)
+            {
+              $('#iMenuCaddieImg').css('display', 'none');
+              $('#iMenuCaddieItems ul').css('display', 'block');
+              alert(requestBuilderOptions.textCaddieUpdated);
+            },
+          error:
+            function(msg)
+            {
+              $('#iMenuCaddieImg').css('display', 'none');
+              $('#iMenuCaddieItems ul').css('display', 'block');
+              alert(requestBuilderOptions.textSomethingWrong);
+            },
+        }
+      );
+    };
+
+    init(optionsToSet);
+  };
+
+
+  function init()
+  {
+    im = new interfaceManager(
+      {
+        requestCriterionsVisible:'cRequestCriterions',
+        requestCriterionsHidden:'cModifyRequest',
+        requestResult:'cResultQuery',
+        requestResultContent:'iResultQueryContent',
+        requestResultNfo:'iResultQueryNfo',
+        requestResultPagesNavigator:'iPagesNavigator',
+      }
+    );
+
+    requestBuilderOptions.classGroup='gcBorderInput gcTextInput';
+    requestBuilderOptions.classItem='gcBgInput gcTextInput';
+    requestBuilderOptions.classOperator='cbOperator cbOperatorBg gcLinkHover';
+    requestBuilderOptions.onRequestSuccess = function (msg) { im.doAction('queryResult', true, msg); cb.doAction('getPage', im.getRequestNumber(), 1, im.getNumberPerPage()); };
+    requestBuilderOptions.onRequestError = function (msg) { im.doAction('queryResult', false, msg); };
+    requestBuilderOptions.onGetPageSuccess = function (msg) { im.doAction('queryPage', true, msg); };
+    requestBuilderOptions.onGetPageError = function (msg) { im.doAction('queryPage', false, msg); };
+
+    cb = new criteriaBuilder('iListSelectedCriterions', requestBuilderOptions);
+
+    im.doAction('setOptions',
+      {
+        onPageChange:
+          function (requestNumber, page, numberPerPage)
+          {
+            $('#iResultQueryContent').html("<br><img class='waitingResult' src='./plugins/GrumPluginClasses/icons/processing.gif'>");
+            cb.doAction('getPage', requestNumber, page, numberPerPage);
+          }
+      }
+    );
+  }
Index: extensions/GrumPluginClasses/js/rbSearch.packed.js
===================================================================
--- extensions/GrumPluginClasses/js/rbSearch.packed.js	(revision 7370)
+++ extensions/GrumPluginClasses/js/rbSearch.packed.js	(revision 7370)
@@ -0,0 +1,2 @@
+/* file: rbSearch.packed.js - v1.0.0 | packed on 2010/10/23 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 B=C;E 1e=4(h){E G=C,b=0,5={u:\'\',v:\'\',D:\'\',1d:\'\',17:\'\',H:\'\',U:0,m:C,o:1m,};w.d=4(1b){1f(1b){j\'O\':e(8.q==3){1h(8[1],8[2])}i;j\'S\':e(8.q==3){11(8[1],8[2])}i;j\'p\':e(8.q==2){p(8[1])}i;j\'l\':e(8.q==2){l(8[1])}i;j\'s\':e(8.q==2){s(8[1],w.P())}i}};w.P=4(){1c(b)};w.12=4(){1c(5.o)};E p=4(r){1f(r){j\'13\':$(\'.\'+5.u).7(\'a\',\'n\');$(\'.\'+5.v).7(\'a\',\'k\');$(\'.\'+5.D).7(\'a\',\'k\');i;j\'T\':$(\'#x\').y("<14><10 Z=\'1g\' 1i=\'./Q/R/19/1a.15\'>");$(\'.\'+5.u).7(\'a\',\'k\');$(\'.\'+5.v).7(\'a\',\'n\');$(\'.\'+5.D).7(\'a\',\'n\');i}},1h=4(z,f){e(z){f=f.1s(\';\');b=f[0];$(\'#16\').y(f[1]);G.d(\'l\',{1r:f[1],1t:1});p(\'T\')}Y{p(\'13\');t(6.K)}},11=4(z,f){e(z){$(\'#x\').y(f)}Y{t(6.K)}},l=4(h){e(1q h==\'1u\'){5=W.1v(5,h)}},F=4(h){l(h);G=N 1w(5.H,{1y:5.o,1n:9,1k:\'1j\',1l:\'1p\',m:4(A){e(5.m!=C&&W.1F(5.m)){5.m(b,A,5.o)}},});b=5.U},s=4(r,b){$(\'#I\').7(\'a\',\'1W-n\');$(\'#L J\').7(\'a\',\'k\');$.1z({1V:"1U",1R:"Q/R/1S.1T",1Z:M,21:{25:"24.22.s",20:r,b:b},1Y:4(c){$(\'#I\').7(\'a\',\'k\');$(\'#L J\').7(\'a\',\'n\');t(6.1P)},1Q:4(c){$(\'#I\').7(\'a\',\'k\');$(\'#L J\').7(\'a\',\'n\');t(6.K)},})};F(h)};4 F(){g=N 1e({u:\'1C\',v:\'1I\',D:\'1O\',1d:\'x\',17:\'16\',H:\'1M\',});6.1L=\'1J 18\';6.1K=\'1X 18\';6.1N=\'1H 1B 1A\';6.1D=4(c){g.d(\'O\',M,c);B.d(\'X\',g.P(),1,g.12())};6.1E=4(c){g.d(\'O\',V,c)};6.1G=4(c){g.d(\'S\',M,c)};6.23=4(c){g.d(\'S\',V,c)};B=N 1o(\'1x\',6);g.d(\'l\',{m:4(b,A,o){$(\'#x\').y("<14><10 Z=\'1g\' 1i=\'./Q/R/19/1a.15\'>");B.d(\'X\',b,A,o)}})}',62,130,'||||function|options|requestBuilderOptions|css|arguments||display|requestNumber|msg|doAction|if|nfo|im|optionsToSet|break|case|none|setOptions|onPageChange|block|numberPerPage|show|length|mode|fillCaddie|alert|requestCriterionsVisible|requestCriterionsHidden|this|iResultQueryContent|html|isSuccess|page|cb|null|requestResult|var|init|pn|requestResultPagesNavigator|iMenuCaddieImg|ul|textSomethingWrong|iMenuCaddieItems|true|new|queryResult|getRequestNumber|plugins|GrumPluginClasses|queryPage|resultQuery|requestResultRequestNumber|false|jQuery|getPage|else|class|img|displayQueryPage|getNumberPerPage|buildQuery|br|gif|iResultQueryNfo|requestResultNfo|gcTextInput|icons|processing|fct|return|requestResultContent|interfaceManager|switch|waitingResult|displayQueryResult|src|pnActive|classActive|classInactive|30|displayNumPage|criteriaBuilder|pnInactive|typeof|numberItem|split|defaultPage|object|extend|pagesNavigator|iListSelectedCriterions|itemPerPage|ajax|gcLinkHover|cbOperatorBg|cRequestCriterions|onRequestSuccess|onRequestError|isFunction|onGetPageSuccess|cbOperator|cModifyRequest|gcBorderInput|classItem|classGroup|iPagesNavigator|classOperator|cResultQuery|textCaddieUpdated|error|url|gpc_ajax|php|POST|type|inline|gcBgInput|success|async|fillMode|data|rbuilder|onGetPageError|admin|ajaxfct'.split('|'),0,{}))
Index: extensions/GrumPluginClasses/js/ui.tagSelector.js
===================================================================
--- extensions/GrumPluginClasses/js/ui.tagSelector.js	(revision 7349)
+++ extensions/GrumPluginClasses/js/ui.tagSelector.js	(revision 7370)
@@ -943,4 +943,6 @@
             properties.tags=[];
             objects.selectedTagList.children('.ui-tag-selector-selected-tag').remove();
+            privateMethods.cacheClear(object);
+            objects.input.val('');
           }
           else
@@ -1034,4 +1036,12 @@
 
           privateMethods.clearTimerHandle(object);
+
+          if(objects.input.val()=='')
+          {
+            privateMethods.cacheClear(object);
+            privateMethods.displaySelector(object, true);
+            return(false);
+          }
+
 
           $.ajax(
@@ -1172,5 +1182,5 @@
           {
             properties.tags.splice(index,1);
-            item=objects.selectedTagList.children('[value='+id+']').remove();
+            objects.selectedTagList.children('[value='+id+']').remove();
 
             if(options.remove) object.trigger('tagSelectorRemove', id);
Index: extensions/GrumPluginClasses/js/ui.tagSelector.packed.js
===================================================================
--- extensions/GrumPluginClasses/js/ui.tagSelector.packed.js	(revision 7349)
+++ extensions/GrumPluginClasses/js/ui.tagSelector.packed.js	(revision 7370)
@@ -1,2 +1,2 @@
-/* file: ui.tagSelector.js - v1.0.0 | packed on 2010/10/20 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}('(b($){e 1j={2c:b(2i){c 8.k(b(){e $8=$(8),a=$8.a(\'4\'),f=$8.a(\'f\'),9=$8.a(\'9\'),4={t:C,I:\'2y/2u/2t.2v\',M:2w,D:0,E:0,R:0,z:\'2m 2o 1s 1l...\',B:\'%s A 2p\',K:\'N 2q %s A\',F:\'20\',v:\'1Z\',J:5,H:j,l:j,q:j,p:j};$8.a(\'4\',4);d(!9){$8.a(\'9\',{o:V,13:V,1i:0,A:[],11:[],1b:j,});9=$8.a(\'9\')}d(!f){f={1q:$(\'<1p/>\',{\'Y\':\'U-u-S-w\',m:{15:\'2x%\'}}).y(\'21.L\',b(){f.w.28()}),17:$(\'<26/>\',{r:\'\',\'Y\':\'U-u-S-1L-u-12\',}),w:$(\'<w>\',{1s:"1l",6:\'\'}).y(\'2z.L\',b(){g.24($8)}).y(\'28.L\',b(){g.2e($8)}).y(\'2H.L\',b(){g.23($8)}),P:$(\'<1p/>\',{r:"",\'Y\':\'U-u-S-12\',m:{N:\'19\',2L:\'2F\',2C:2D,}}).y(\'2B.L\',b(){g.1a($8,V)}),Q:$(\'<26/>\',{m:{2n:\'19\',2r:\'2l\',2J:\'2l\',2M:"2G",}}),14:$(\'<1p/>\',{r:\'\',\'Y\':\'U-u-S-1l\'})};$8.r(\'\').W(f.1q.W(f.17.W($(\'<Z/>\').W(f.w)))).W(f.P.W(f.Q).W(f.14));$8.a(\'f\',f)}g.1t($8,2i)})},2A:b(){c 8.k(b(){e $8=$(8),f=$8.a(\'f\');f.17.1k().G();f.w.G().l();f.1q.G().l();f.P.G().l();f.Q.l();$8.G(\'.2s\').m({15:\'\',1y:\'\'})})},4:b(6){8.k(b(){e $8=$(8);g.1t($8,6);c($8)})},t:b(6){d(6){8.k(b(){e $8=$(8);g.1r($8,6);c($8)})}h{e 4=8.a(\'4\');d(4){c(4.t)}h{c(C)}}},J:b(6){d(6){8.k(b(){e $8=$(8);g.1x($8,6);c($8)})}h{e 4=8.a(\'4\');d(4){c(4.J)}h{c(C)}}},R:b(6){d(6){8.k(b(){e $8=$(8);g.1f($8,6);c($8)})}h{e 4=8.a(\'4\');d(4){c(4.R)}h{c(0)}}},D:b(6){d(6){8.k(b(){e $8=$(8);g.1P($8,6);c($8)})}h{e 4=8.a(\'4\');d(4){c(4.D)}h{c(0)}}},E:b(6){d(6){8.k(b(){e $8=$(8);g.1v($8,6);c($8)})}h{e 4=8.a(\'4\');d(4){c(4.E)}h{c(0)}}},M:b(6){d(6){8.k(b(){e $8=$(8);g.1V($8,6);c($8)})}h{e 4=8.a(\'4\');d(4){c(4.M)}h{c(0)}}},I:b(6){d(6){8.k(b(){e $8=$(8);g.1T($8,6);c($8)})}h{e 4=8.a(\'4\');d(4){c(4.I)}h{c(\'\')}}},z:b(6){d(6){8.k(b(){e $8=$(8);g.1S($8,6);c($8)})}h{e 4=8.a(\'4\');d(4){c(4.z)}h{c(\'\')}}},B:b(6){d(6){8.k(b(){e $8=$(8);g.1I($8,6);c($8)})}h{e 4=8.a(\'4\');d(4){c(4.B)}h{c(\'\')}}},K:b(6){d(6){8.k(b(){e $8=$(8);g.1K($8,6);c($8)})}h{e 4=8.a(\'4\');d(4){c(4.K)}h{c(\'\')}}},v:b(6){d(6){8.k(b(){e $8=$(8);g.1J($8,6);c($8)})}h{e 4=8.a(\'4\');d(4){c(4.v)}h{c(C)}}},F:b(6){d(6){8.k(b(){e $8=$(8);g.1A($8,6);c($8)})}h{e 4=8.a(\'4\');d(4){c(4.F)}h{c(C)}}},6:b(6){d(6){c 8.k(b(){g.1H($(8),6)})}h{e 9=8.a(\'9\');c(9.A)}},p:b(6){d(6&&$.1d(6)){8.k(b(){e $8=$(8);g.1E($8,6);c($8)})}h{g.p(8)}},q:b(6){d(6&&$.1d(6)){8.k(b(){e $8=$(8);g.1R($8,6);c($8)})}h{e 4=8.a(\'4\');d(4){c(4.q)}h{c(j)}}},H:b(6){d(6&&$.1d(6)){8.k(b(){e $8=$(8);g.1D($8,6);c($8)})}h{e 4=8.a(\'4\');d(4){c(4.H)}h{c(j)}}},l:b(6){d(6&&$.1d(6)){8.k(b(){e $8=$(8);g.1B($8,6);c($8)})}h{e 4=8.a(\'4\');d(4){c(4.l)}h{c(j)}}},2K:b(){e 9=8.a(\'9\');d(9){c(9.A.X)}h{c(j)}}};e g={1t:b(7,6){e 9=7.a(\'9\'),4=7.a(\'4\');d(!$.2I(6))c(V);9.o=V;g.1r(7,(6.t!=j)?6.t:4.t);g.1x(7,(6.J!=j)?6.J:4.J);g.1H(7,(6.6!=j)?6.6:[]);g.1f(7,(6.R!=j)?6.R:4.R);g.1S(7,(6.z!=j)?6.z:4.z);g.1I(7,(6.B!=j)?6.B:4.B);g.1K(7,(6.K!=j)?6.K:4.K);g.1P(7,(6.D!=j)?6.D:4.D);g.1v(7,(6.E!=j)?6.E:4.E);g.1V(7,(6.M!=j)?6.M:4.M);g.1T(7,(6.I!=j)?6.I:4.I);g.1A(7,(6.F!=j)?6.F:4.F);g.1J(7,(6.v!=j)?6.v:4.v);g.1R(7,(6.q!=j)?6.q:4.q);g.1D(7,(6.H!=j)?6.H:4.H);g.1B(7,(6.l!=j)?6.l:4.l);g.1E(7,(6.p!=j)?6.p:4.p);d(4.1Y)g.p(7);9.o=C},1r:b(7,6){e 4=7.a(\'4\'),9=7.a(\'9\');d((!9.o||4.t!=6)&&(6==C||6==V)){4.t=6}c(4.t)},1x:b(7,6){e 4=7.a(\'4\'),f=7.a(\'f\'),9=7.a(\'9\');d((!9.o||4.J!=6)&&6>0){4.J=6;f.w.1O(\'2E\',4.J)}c(4.J)},1f:b(7,6){e 4=7.a(\'4\'),9=7.a(\'9\');d((!9.o||4.1f!=6)&&6>=0){4.R=6}c(4.R)},1S:b(7,6){e 4=7.a(\'4\'),9=7.a(\'9\');d(!9.o||4.z!=6){4.z=6}c(4.z)},1I:b(7,6){e 4=7.a(\'4\'),9=7.a(\'9\');d(!9.o||4.B!=6){4.B=6}c(4.B)},1K:b(7,6){e 4=7.a(\'4\'),9=7.a(\'9\');d(!9.o||4.K!=6){4.K=6}c(4.K)},1P:b(7,6){e 4=7.a(\'4\'),9=7.a(\'9\'),f=7.a(\'f\');d((!9.o||4.D!=6)&&6>=0){4.D=6;d(4.D>0){f.P.m(\'1n-15\',4.D+\'1X\')}h{f.P.m(\'1n-15\',\'\')}}c(4.D)},1v:b(7,6){e 4=7.a(\'4\'),9=7.a(\'9\'),f=7.a(\'f\');d((!9.o||4.E!=6)&&6>=0){4.E=6;d(4.E>0){f.Q.m(\'1n-1y\',4.E+\'1X\')}h{f.Q.m(\'1n-1y\',\'\')}}c(4.E)},1V:b(7,6){e 4=7.a(\'4\'),9=7.a(\'9\');d((!9.o||4.M!=6)&&6>0){4.M=6}c(4.M)},1T:b(7,6){e 4=7.a(\'4\'),9=7.a(\'9\');d(!9.o||4.I!=6){4.I=6;d(4.1Y&&9.o)g.p(7)}c(4.I)},1A:b(7,6){e 4=7.a(\'4\'),9=7.a(\'9\');d((!9.o||4.F!=6)&&(6==\'35\'||6==\'20\')){4.F=6}c(4.F)},1J:b(7,6){e 4=7.a(\'4\'),9=7.a(\'9\');d((!9.o||4.v!=6)&&(6==\'3d\'||6==\'1Z\')){4.v=6}c(4.v)},1H:b(7,6){e 4=7.a(\'4\'),9=7.a(\'9\'),f=7.a(\'f\');d(6==\'3e\'){9.A=[];f.17.1k(\'.U-u-S-1L-u\').l()}h{d(!$.3f(6)){6=[6]}1W(e i=0;i<6.X;i++){d(6[i].n!=j&&6[i].O!=j){d(g.1e(7,6[i].n)==-1)g.1w(7,6[i].n,6[i].O)}h{g.1e(7,6[i])}}}c(j)},1a:b(7,6){e 4=7.a(\'4\'),9=7.a(\'9\'),f=7.a(\'f\'),q=V;d(9.13!=6)q=C;9.13=6;d(9.13){d(9.11.X>0){f.Q.m(\'N\',\'18\');d(9.11.X<9.1i){f.14.r(4.B.1F(\'%s\',9.1i)+\', \'+4.K.1F(\'%s\',9.11.X)).m(\'N\',\'18\')}h{f.14.r(4.B.1F(\'%s\',9.11.X)).m(\'N\',\'18\')}}h d(4.z!=\'\'){f.Q.m(\'N\',\'19\');f.14.r(4.z).m(\'N\',\'18\')}h{f.14.r(\'\').m(\'N\',\'19\')}f.P.m({N:\'18\',\'3c-15\':f.P.1N().m(\'15\')})}h{f.P.m(\'N\',\'19\')}d(4.q&&q)7.1h(\'1M\',[9.13]);c(9.13)},p:b(7){e 4=7.a(\'4\'),9=7.a(\'9\'),f=7.a(\'f\');g.1G(7);$.3b({1s:"37",38:4.I,a:{39:4.F+\'.L.3a\',v:4.v,3h:4.R,t:4.t,3g:f.w.1c()},3l:C,3n:b(1g){12=$.3m(1g);9.1i=12.3i;g.2h(7);g.2g(7,12.A);d(4.p)7.1h(\'22\');g.1a(7,C)},29:b(1g){f.P.r(\'3j ! \'+1g)},})},2h:b(7){e f=7.a(\'f\'),4=7.a(\'4\'),9=7.a(\'9\');f.Q.1k().G().l();9.11=[]},2g:b(7,10){e 4=7.a(\'4\'),9=7.a(\'9\'),f=7.a(\'f\');1W(e i=0;i<10.X;i++){9.11.2d({n:10[i].n,O:10[i].O,});d(4.t){e 1u=2f 2k(\'(.*)(\'+f.w.1c()+\')(.*)\',\'i\')}h{e 1u=2f 2k(\'(.*)(\'+f.w.1c()+\')(.*)\')}T=1u.3k(10[i].O);d(T!=j){T=T[1]+\'<1Q Y="U-u-S-2N">\'+T[2]+\'</1Q>\'+T[3]}h{T=10[i].O}e Z=$(\'<Z/>\',{r:T,6:10[i].n,\'Y\':\'U-u-S-12-25\'}).y(\'36.L\',{7:7},b(1m){g.1w(1m.a.7,$(8).1O(\'6\'),$(8).1l())});f.Q.W(Z)}},1w:b(7,n,O){e 4=7.a(\'4\'),9=7.a(\'9\'),f=7.a(\'f\');d(g.1U(7,n)==-1){9.A.2d({n:n,O:O});e Z=$(\'<Z/>\',{6:n,r:O,\'Y\':\'U-u-S-1L-u\'}).2T($(\'<1Q/>\',{r:\'x\'}).y(\'21.L\',{7:7},b(1m){g.1e(1m.a.7,$(8).1N().1O(\'6\'))}));f.w.1c(\'\').1N().2U(Z);d(4.H)7.1h(\'1C\',n)}},1e:b(7,n){e 4=7.a(\'4\'),9=7.a(\'9\'),f=7.a(\'f\');e 1o=g.1U(7,n);d(1o>-1){9.A.2V(1o,1);25=f.17.1k(\'[6=\'+n+\']\').l();d(4.l)7.1h(\'1z\',n)}c(1o)},1U:b(7,6){e 9=7.a(\'9\');1W(e i=0;i<9.A.X;i++){d(9.A[i].n==6)c(i)}c(-1)},2e:b(7){g.1a(7,C)},24:b(7){g.1a(7,V)},1R:b(7,6){e 4=7.a(\'4\');4.q=6;7.G(\'1M\');d(6)7.y(\'1M\',4.q);c(4.q)},1D:b(7,6){e 4=7.a(\'4\');4.H=6;7.G(\'1C\');d(6)7.y(\'1C\',4.H);c(4.H)},1B:b(7,6){e 4=7.a(\'4\');4.l=6;7.G(\'1z\');d(6)7.y(\'1z\',4.l);c(4.l)},1E:b(7,6){e 4=7.a(\'4\');4.p=6;7.G(\'2S\');d(6)7.y(\'22\',4.p);c(4.p)},1G:b(7){e 9=7.a(\'9\');d(9.1b!=j){27.2R(9.1b);9.1b=j}},23:b(7){e 9=7.a(\'9\'),4=7.a(\'4\');g.1G(7);9.1b=27.2O(b(){g.p(7)},4.M)},};$.2P.L=b(16){d(1j[16]){c 1j[16].2b(8,2Q.2W.2X.33(2a,1))}h d(34 16===\'7\'||!16){c 1j.2c.2b(8,2a)}h{$.29(\'32 \'+16+\' 31 2Y 2Z 30 2j.L\')}}})(2j);',62,210,'||||options||value|object|this|properties|data|function|return|if|var|objects|privateMethods|else||null|each|remove|css|id|initialized|load|popup|html||ignoreCase|tag|filter|input||bind|textStart|tags|textFound|true|listMaxWidth|listMaxHeight|mode|unbind|add|serverUrl|inputNumCar|textDisplay|tagSelector|serverCallDelay|display|name|selectorList|tagList|maximumTagLoaded|selector|tmpResult|ui|false|append|length|class|li|listItems|cache|list|selectorVisible|textArea|width|method|selectedTagList|block|none|displaySelector|timerHandle|val|isFunction|removeTag|setMaximumTagLoaded|msg|trigger|totalTags|publicMethods|children|text|event|max|index|div|container|setIgnoreCase|type|setOptions|re|setListMaxHeight|addTag|setInputNumCar|height|tagSelectorRemove|setMode|setEventRemove|tagSelectorAdd|setEventAdd|setEventLoad|replace|clearTimerHandle|setValue|setTextFound|setFilter|setTextDisplay|selected|tagSelectorPopup|parent|attr|setListMaxWidth|span|setEventPopup|setTextStart|setServerUrl|findTagById|setServerCallDelay|for|px|autoLoad|affected|public|click|tagSelectorLoad|setTimerHandle|lostFocus|item|ul|window|focus|error|arguments|apply|init|push|getFocus|new|cacheAddItems|cacheClear|opt|jQuery|RegExp|0px|Start|listStyle|to|found|only|padding|categorySelector|gpc_ajax|GrumPluginClasses|php|250|100|plugins|focusout|destroy|mouseleave|zIndex|9999|size|absolute|auto|keypress|isPlainObject|margin|numberOfTags|position|overflow|highlight|setInterval|fn|Array|clearInterval|categorySelectorLoad|prepend|before|splice|prototype|slice|not|exist|on|does|Method|call|typeof|admin|mousedown|POST|url|ajaxfct|get|ajax|min|all|clear|isArray|letters|maxTags|totalNbTags|Error|exec|async|parseJSON|success'.split('|'),0,{}))
+/* file: ui.tagSelector.js - v1.0.0 | packed on 2010/10/23 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}('(b($){e 1f={2c:b(2j){c 8.k(b(){e $8=$(8),a=$8.a(\'4\'),f=$8.a(\'f\'),9=$8.a(\'9\'),4={u:v,L:\'2o/2l/2u.2w\',I:2s,B:0,A:0,P:0,C:\'2q 2p 1q 1j...\',w:\'%s D 2m\',K:\'N 2n %s D\',F:\'20\',E:\'21\',G:5,M:j,l:j,q:j,p:j};$8.a(\'4\',4);d(!9){$8.a(\'9\',{o:Q,12:Q,1l:0,D:[],Y:[],1a:j,});9=$8.a(\'9\')}d(!f){f={1L:$(\'<1A/>\',{\'10\':\'W-y-V-r\',m:{15:\'2t%\'}}).z(\'22.H\',b(){f.r.28()}),1c:$(\'<26/>\',{t:\'\',\'10\':\'W-y-V-1V-y-13\',}),r:$(\'<r>\',{1q:"1j",6:\'\'}).z(\'2L.H\',b(){g.2e($8)}).z(\'28.H\',b(){g.25($8)}).z(\'2x.H\',b(){g.23($8)}),S:$(\'<1A/>\',{t:"",\'10\':\'W-y-V-13\',m:{N:\'19\',2G:\'2J\',2E:2z,}}).z(\'2y.H\',b(){g.18($8,Q)}),R:$(\'<26/>\',{m:{2B:\'19\',2D:\'2k\',2H:\'2k\',2A:"2F",}}),17:$(\'<1A/>\',{t:\'\',\'10\':\'W-y-V-1j\'})};$8.t(\'\').U(f.1L.U(f.1c.U($(\'<11/>\').U(f.r)))).U(f.S.U(f.R).U(f.17));$8.a(\'f\',f)}g.1C($8,2j)})},2r:b(){c 8.k(b(){e $8=$(8),f=$8.a(\'f\');f.1c.1p().J();f.r.J().l();f.1L.J().l();f.S.J().l();f.R.l();$8.J(\'.2K\').m({15:\'\',1F:\'\'})})},4:b(6){8.k(b(){e $8=$(8);g.1C($8,6);c($8)})},u:b(6){d(6){8.k(b(){e $8=$(8);g.1D($8,6);c($8)})}h{e 4=8.a(\'4\');d(4){c(4.u)}h{c(v)}}},G:b(6){d(6){8.k(b(){e $8=$(8);g.1t($8,6);c($8)})}h{e 4=8.a(\'4\');d(4){c(4.G)}h{c(v)}}},P:b(6){d(6){8.k(b(){e $8=$(8);g.1e($8,6);c($8)})}h{e 4=8.a(\'4\');d(4){c(4.P)}h{c(0)}}},B:b(6){d(6){8.k(b(){e $8=$(8);g.1s($8,6);c($8)})}h{e 4=8.a(\'4\');d(4){c(4.B)}h{c(0)}}},A:b(6){d(6){8.k(b(){e $8=$(8);g.1y($8,6);c($8)})}h{e 4=8.a(\'4\');d(4){c(4.A)}h{c(0)}}},I:b(6){d(6){8.k(b(){e $8=$(8);g.1H($8,6);c($8)})}h{e 4=8.a(\'4\');d(4){c(4.I)}h{c(0)}}},L:b(6){d(6){8.k(b(){e $8=$(8);g.1E($8,6);c($8)})}h{e 4=8.a(\'4\');d(4){c(4.L)}h{c(\'\')}}},C:b(6){d(6){8.k(b(){e $8=$(8);g.1u($8,6);c($8)})}h{e 4=8.a(\'4\');d(4){c(4.C)}h{c(\'\')}}},w:b(6){d(6){8.k(b(){e $8=$(8);g.1v($8,6);c($8)})}h{e 4=8.a(\'4\');d(4){c(4.w)}h{c(\'\')}}},K:b(6){d(6){8.k(b(){e $8=$(8);g.1x($8,6);c($8)})}h{e 4=8.a(\'4\');d(4){c(4.K)}h{c(\'\')}}},E:b(6){d(6){8.k(b(){e $8=$(8);g.1w($8,6);c($8)})}h{e 4=8.a(\'4\');d(4){c(4.E)}h{c(v)}}},F:b(6){d(6){8.k(b(){e $8=$(8);g.1z($8,6);c($8)})}h{e 4=8.a(\'4\');d(4){c(4.F)}h{c(v)}}},6:b(6){d(6){c 8.k(b(){g.1O($(8),6)})}h{e 9=8.a(\'9\');c(9.D)}},p:b(6){d(6&&$.1k(6)){8.k(b(){e $8=$(8);g.1S($8,6);c($8)})}h{g.p(8)}},q:b(6){d(6&&$.1k(6)){8.k(b(){e $8=$(8);g.1K($8,6);c($8)})}h{e 4=8.a(\'4\');d(4){c(4.q)}h{c(j)}}},M:b(6){d(6&&$.1k(6)){8.k(b(){e $8=$(8);g.1Q($8,6);c($8)})}h{e 4=8.a(\'4\');d(4){c(4.M)}h{c(j)}}},l:b(6){d(6&&$.1k(6)){8.k(b(){e $8=$(8);g.1W($8,6);c($8)})}h{e 4=8.a(\'4\');d(4){c(4.l)}h{c(j)}}},2v:b(){e 9=8.a(\'9\');d(9){c(9.D.T)}h{c(j)}}};e g={1C:b(7,6){e 9=7.a(\'9\'),4=7.a(\'4\');d(!$.2I(6))c(Q);9.o=Q;g.1D(7,(6.u!=j)?6.u:4.u);g.1t(7,(6.G!=j)?6.G:4.G);g.1O(7,(6.6!=j)?6.6:[]);g.1e(7,(6.P!=j)?6.P:4.P);g.1u(7,(6.C!=j)?6.C:4.C);g.1v(7,(6.w!=j)?6.w:4.w);g.1x(7,(6.K!=j)?6.K:4.K);g.1s(7,(6.B!=j)?6.B:4.B);g.1y(7,(6.A!=j)?6.A:4.A);g.1H(7,(6.I!=j)?6.I:4.I);g.1E(7,(6.L!=j)?6.L:4.L);g.1z(7,(6.F!=j)?6.F:4.F);g.1w(7,(6.E!=j)?6.E:4.E);g.1K(7,(6.q!=j)?6.q:4.q);g.1Q(7,(6.M!=j)?6.M:4.M);g.1W(7,(6.l!=j)?6.l:4.l);g.1S(7,(6.p!=j)?6.p:4.p);d(4.1Z)g.p(7);9.o=v},1D:b(7,6){e 4=7.a(\'4\'),9=7.a(\'9\');d((!9.o||4.u!=6)&&(6==v||6==Q)){4.u=6}c(4.u)},1t:b(7,6){e 4=7.a(\'4\'),f=7.a(\'f\'),9=7.a(\'9\');d((!9.o||4.G!=6)&&6>0){4.G=6;f.r.1I(\'2C\',4.G)}c(4.G)},1e:b(7,6){e 4=7.a(\'4\'),9=7.a(\'9\');d((!9.o||4.1e!=6)&&6>=0){4.P=6}c(4.P)},1u:b(7,6){e 4=7.a(\'4\'),9=7.a(\'9\');d(!9.o||4.C!=6){4.C=6}c(4.C)},1v:b(7,6){e 4=7.a(\'4\'),9=7.a(\'9\');d(!9.o||4.w!=6){4.w=6}c(4.w)},1x:b(7,6){e 4=7.a(\'4\'),9=7.a(\'9\');d(!9.o||4.K!=6){4.K=6}c(4.K)},1s:b(7,6){e 4=7.a(\'4\'),9=7.a(\'9\'),f=7.a(\'f\');d((!9.o||4.B!=6)&&6>=0){4.B=6;d(4.B>0){f.S.m(\'1h-15\',4.B+\'1Y\')}h{f.S.m(\'1h-15\',\'\')}}c(4.B)},1y:b(7,6){e 4=7.a(\'4\'),9=7.a(\'9\'),f=7.a(\'f\');d((!9.o||4.A!=6)&&6>=0){4.A=6;d(4.A>0){f.R.m(\'1h-1F\',4.A+\'1Y\')}h{f.R.m(\'1h-1F\',\'\')}}c(4.A)},1H:b(7,6){e 4=7.a(\'4\'),9=7.a(\'9\');d((!9.o||4.I!=6)&&6>0){4.I=6}c(4.I)},1E:b(7,6){e 4=7.a(\'4\'),9=7.a(\'9\');d(!9.o||4.L!=6){4.L=6;d(4.1Z&&9.o)g.p(7)}c(4.L)},1z:b(7,6){e 4=7.a(\'4\'),9=7.a(\'9\');d((!9.o||4.F!=6)&&(6==\'2S\'||6==\'20\')){4.F=6}c(4.F)},1w:b(7,6){e 4=7.a(\'4\'),9=7.a(\'9\');d((!9.o||4.E!=6)&&(6==\'3d\'||6==\'21\')){4.E=6}c(4.E)},1O:b(7,6){e 4=7.a(\'4\'),9=7.a(\'9\'),f=7.a(\'f\');d(6==\'3e\'){9.D=[];f.1c.1p(\'.W-y-V-1V-y\').l();g.1i(7);f.r.14(\'\')}h{d(!$.3f(6)){6=[6]}1M(e i=0;i<6.T;i++){d(6[i].n!=j&&6[i].O!=j){d(g.1d(7,6[i].n)==-1)g.1T(7,6[i].n,6[i].O)}h{g.1d(7,6[i])}}}c(j)},18:b(7,6){e 4=7.a(\'4\'),9=7.a(\'9\'),f=7.a(\'f\'),q=Q;d(9.12!=6)q=v;9.12=6;d(9.12){d(9.Y.T>0){f.R.m(\'N\',\'1b\');d(9.Y.T<9.1l){f.17.t(4.w.1P(\'%s\',9.1l)+\', \'+4.K.1P(\'%s\',9.Y.T)).m(\'N\',\'1b\')}h{f.17.t(4.w.1P(\'%s\',9.Y.T)).m(\'N\',\'1b\')}}h d(4.C!=\'\'){f.R.m(\'N\',\'19\');f.17.t(4.C).m(\'N\',\'1b\')}h{f.17.t(\'\').m(\'N\',\'19\')}f.S.m({N:\'1b\',\'3c-15\':f.S.1G().m(\'15\')})}h{f.S.m(\'N\',\'19\')}d(4.q&&q)7.1o(\'1J\',[9.12]);c(9.12)},p:b(7){e 4=7.a(\'4\'),9=7.a(\'9\'),f=7.a(\'f\');g.1r(7);d(f.r.14()==\'\'){g.1i(7);g.18(7,v);c(Q)}$.3b({1q:"37",38:4.L,a:{39:4.F+\'.H.3a\',E:4.E,3h:4.P,u:4.u,3g:f.r.14()},3l:v,3n:b(1m){13=$.3m(1m);9.1l=13.3i;g.1i(7);g.2i(7,13.D);d(4.p)7.1o(\'24\');g.18(7,v)},29:b(1m){f.S.t(\'3j ! \'+1m)},})},1i:b(7){e f=7.a(\'f\'),4=7.a(\'4\'),9=7.a(\'9\');f.R.1p().J().l();9.Y=[]},2i:b(7,Z){e 4=7.a(\'4\'),9=7.a(\'9\'),f=7.a(\'f\');1M(e i=0;i<Z.T;i++){9.Y.2d({n:Z[i].n,O:Z[i].O,});d(4.u){e 1B=2h 2g(\'(.*)(\'+f.r.14()+\')(.*)\',\'i\')}h{e 1B=2h 2g(\'(.*)(\'+f.r.14()+\')(.*)\')}X=1B.3k(Z[i].O);d(X!=j){X=X[1]+\'<1X 10="W-y-V-2M">\'+X[2]+\'</1X>\'+X[3]}h{X=Z[i].O}e 11=$(\'<11/>\',{t:X,6:Z[i].n,\'10\':\'W-y-V-13-35\'}).z(\'36.H\',{7:7},b(1g){g.1T(1g.a.7,$(8).1I(\'6\'),$(8).1j())});f.R.U(11)}},1T:b(7,n,O){e 4=7.a(\'4\'),9=7.a(\'9\'),f=7.a(\'f\');d(g.1N(7,n)==-1){9.D.2d({n:n,O:O});e 11=$(\'<11/>\',{6:n,t:O,\'10\':\'W-y-V-1V-y\'}).2T($(\'<1X/>\',{t:\'x\'}).z(\'22.H\',{7:7},b(1g){g.1d(1g.a.7,$(8).1G().1I(\'6\'))}));f.r.14(\'\').1G().2U(11);d(4.M)7.1o(\'1U\',n)}},1d:b(7,n){e 4=7.a(\'4\'),9=7.a(\'9\'),f=7.a(\'f\');e 1n=g.1N(7,n);d(1n>-1){9.D.2R(1n,1);f.1c.1p(\'[6=\'+n+\']\').l();d(4.l)7.1o(\'1R\',n)}c(1n)},1N:b(7,6){e 9=7.a(\'9\');1M(e i=0;i<9.D.T;i++){d(9.D[i].n==6)c(i)}c(-1)},25:b(7){g.18(7,v)},2e:b(7){g.18(7,Q)},1K:b(7,6){e 4=7.a(\'4\');4.q=6;7.J(\'1J\');d(6)7.z(\'1J\',4.q);c(4.q)},1Q:b(7,6){e 4=7.a(\'4\');4.M=6;7.J(\'1U\');d(6)7.z(\'1U\',4.M);c(4.M)},1W:b(7,6){e 4=7.a(\'4\');4.l=6;7.J(\'1R\');d(6)7.z(\'1R\',4.l);c(4.l)},1S:b(7,6){e 4=7.a(\'4\');4.p=6;7.J(\'2Q\');d(6)7.z(\'24\',4.p);c(4.p)},1r:b(7){e 9=7.a(\'9\');d(9.1a!=j){27.2N(9.1a);9.1a=j}},23:b(7){e 9=7.a(\'9\'),4=7.a(\'4\');g.1r(7);9.1a=27.2O(b(){g.p(7)},4.I)},};$.2P.H=b(16){d(1f[16]){c 1f[16].2b(8,2V.2W.32.33(2a,1))}h d(34 16===\'7\'||!16){c 1f.2c.2b(8,2a)}h{$.29(\'31 \'+16+\' 30 2X 2Y 2Z 2f.H\')}}})(2f);',62,210,'||||options||value|object|this|properties|data|function|return|if|var|objects|privateMethods|else||null|each|remove|css|id|initialized|load|popup|input||html|ignoreCase|true|textFound||tag|bind|listMaxHeight|listMaxWidth|textStart|tags|filter|mode|inputNumCar|tagSelector|serverCallDelay|unbind|textDisplay|serverUrl|add|display|name|maximumTagLoaded|false|tagList|selectorList|length|append|selector|ui|tmpResult|cache|listItems|class|li|selectorVisible|list|val|width|method|textArea|displaySelector|none|timerHandle|block|selectedTagList|removeTag|setMaximumTagLoaded|publicMethods|event|max|cacheClear|text|isFunction|totalTags|msg|index|trigger|children|type|clearTimerHandle|setListMaxWidth|setInputNumCar|setTextStart|setTextFound|setFilter|setTextDisplay|setListMaxHeight|setMode|div|re|setOptions|setIgnoreCase|setServerUrl|height|parent|setServerCallDelay|attr|tagSelectorPopup|setEventPopup|container|for|findTagById|setValue|replace|setEventAdd|tagSelectorRemove|setEventLoad|addTag|tagSelectorAdd|selected|setEventRemove|span|px|autoLoad|public|affected|click|setTimerHandle|tagSelectorLoad|getFocus|ul|window|focus|error|arguments|apply|init|push|lostFocus|jQuery|RegExp|new|cacheAddItems|opt|0px|GrumPluginClasses|found|only|plugins|to|Start|destroy|250|100|gpc_ajax|numberOfTags|php|keypress|mouseleave|9999|overflow|listStyle|size|padding|zIndex|auto|position|margin|isPlainObject|absolute|categorySelector|focusout|highlight|clearInterval|setInterval|fn|categorySelectorLoad|splice|admin|prepend|before|Array|prototype|not|exist|on|does|Method|slice|call|typeof|item|mousedown|POST|url|ajaxfct|get|ajax|min|all|clear|isArray|letters|maxTags|totalNbTags|Error|exec|async|parseJSON|success'.split('|'),0,{}))
