Index: /extensions/see_photos_by_user/admin.php
===================================================================
--- /extensions/see_photos_by_user/admin.php	(revision 30402)
+++ /extensions/see_photos_by_user/admin.php	(revision 30403)
@@ -1,6 +1,8 @@
 <?php
-if (!defined('PHPWG_ROOT_PATH')) die('Hacking attempt!');
+
+if (!defined('PHPWG_ROOT_PATH'))
+    die('Hacking attempt!');
 global $template, $conf, $user;
-include_once(PHPWG_ROOT_PATH .'admin/include/tabsheet.class.php');
+include_once(PHPWG_ROOT_PATH . 'admin/include/tabsheet.class.php');
 load_language('plugin.lang', SPBA_PATH);
 $my_base_url = get_admin_plugin_menu_link(__FILE__);
@@ -14,78 +16,83 @@
 
 $template->assign(
-  array(
-    'SPBU1' => $conf['see_photos_by_user_nbphotos'],
-	'SPBU2' => $conf['see_photos_by_user_limit'],
-	'SPBU3' => $conf['see_photos_by_user_order'],
-	'SPBU4' => $conf['see_photos_by_user_show'],
-    )
-  );
-  
+        array(
+            'SPBU1' => $conf['see_photos_by_user_nbphotos'],
+            'SPBU2' => $conf['see_photos_by_user_limit'],
+            'SPBU3' => $conf['see_photos_by_user_order'],
+            'SPBU4' => $conf['see_photos_by_user_show'],
+            'SPBU5' => $conf['see_photos_by_user_color'],
+            'SPBA_PATH2'=> get_root_url() . SPBA_PATH,
+        )
+);
+
 $SPBU3T = array(
     l10n('users in alphabetical order'),
     l10n('users by reverse alphabetical order'),
     l10n('by increasing number of photos'),
-	l10n('by decreasing number of photos'),
-  );
-  
+    l10n('by decreasing number of photos'),
+);
+
 $SPBU3 = array(
     'username ASC',
     'username DESC',
     'PBU ASC',
-	'PBU DSC',
-  );
+    'PBU DESC',
+);
 
 $template->assign('spbu', $SPBU3);
-$template->assign('spbuT', $SPBU3T); 
+$template->assign('spbuT', $SPBU3T);
 
 $SPBU3T2 = array(
-    l10n('link Specials menu')." - ".l10n('select users box'),
-    l10n('bloc menu users')." - ".l10n('select users box'),
-    l10n('link Specials menu')." - ".l10n('select users box')." - ".l10n('bloc menu users'),
-	l10n('bloc menu users'),
-	l10n('select users box'),
-	l10n('nothing'),
-  );
-  
+    l10n('link Specials menu') . " - " . l10n('select users box'),
+    l10n('bloc menu users') . " - " . l10n('select users box'),
+    l10n('link Specials menu') . " - " . l10n('select users box') . " - " . l10n('bloc menu users'),
+    l10n('bloc menu users'),
+    l10n('select users box'),
+    l10n('nothing'),
+);
+
 $SPBU32 = array(
     '1',
     '2',
     '3',
-	'4',
-	'5',
-	'6',
-  );
+    '4',
+    '5',
+    '6',
+);
 
 $template->assign('spbu2', $SPBU32);
-$template->assign('spbuT2', $SPBU3T2); 
+$template->assign('spbuT2', $SPBU3T2);
 
-if (isset($_POST['submitspbu']))
-{
-if (is_numeric($_POST['insspbu1'])) 
-{conf_update_param('see_photos_by_user_nbphotos', $_POST['insspbu1']);}
-else
-{array_push( $page['errors'], l10n('Maximal number users is incorrect !'));}
-if (is_numeric($_POST['insspbu2'])) 
-conf_update_param('see_photos_by_user_limit', $_POST['insspbu2']);
-else
-{array_push( $page['errors'], l10n('Minimal number photos for show users is incorrect !'));}
-conf_update_param('see_photos_by_user_order', $_POST['insspbu3']);
-conf_update_param('see_photos_by_user_show', $_POST['insspbu4']);
+if (isset($_POST['submitspbu'])) {
+    if (is_numeric($_POST['insspbu1'])) {
+        conf_update_param('see_photos_by_user_nbphotos', $_POST['insspbu1']);
+    } else {
+        array_push($page['errors'], l10n('Maximal number users is incorrect !'));
+    }
+    if (is_numeric($_POST['insspbu2']))
+        conf_update_param('see_photos_by_user_limit', $_POST['insspbu2']);
+    else {
+        array_push($page['errors'], l10n('Minimal number photos for show users is incorrect !'));
+    }
+    conf_update_param('see_photos_by_user_order', $_POST['insspbu3']);
+    conf_update_param('see_photos_by_user_show', $_POST['insspbu4']);
+    conf_update_param('see_photos_by_user_color', $_POST['insspbu5']);
 
-if (!$page['errors'])
-{array_push( $page['infos'], l10n('Update Complete') );}
-  
-$template->assign(
-    array(
-      'SPBU1' => stripslashes($_POST['insspbu1']),
-	  'SPBU2' => stripslashes($_POST['insspbu2']),
-	  'SPBU3' => stripslashes($_POST['insspbu3']),
-	  'SPBU4' => stripslashes($_POST['insspbu4']),
-      )
+    if (!$page['errors']) {
+        array_push($page['infos'], l10n('Update Complete'));
+    }
+
+    $template->assign(
+            array(
+                'SPBU1' => stripslashes($_POST['insspbu1']),
+                'SPBU2' => stripslashes($_POST['insspbu2']),
+                'SPBU3' => stripslashes($_POST['insspbu3']),
+                'SPBU4' => stripslashes($_POST['insspbu4']),
+                'SPBU5' => stripslashes($_POST['insspbu5']),
+            )
     );
-
 }
 
-$template->set_filenames(array('plugin_admin_content' => dirname(__FILE__) . '/admin.tpl')); 
+$template->set_filenames(array('plugin_admin_content' => dirname(__FILE__) . '/admin.tpl'));
 $template->assign_var_from_handle('ADMIN_CONTENT', 'plugin_admin_content');
 ?>
Index: /extensions/see_photos_by_user/admin.tpl
===================================================================
--- /extensions/see_photos_by_user/admin.tpl	(revision 30402)
+++ /extensions/see_photos_by_user/admin.tpl	(revision 30403)
@@ -1,25 +1,40 @@
+{combine_script id="farbtastic" load='footer' require="jquery" path=$SPBA_PATH2|@cat:"js/farbtastic/farbtastic.js"}
+{combine_css path=$SPBA_PATH2|@cat:"js/farbtastic/farbtastic.css"}
+{footer_script}
+// init colorpicker
+jQuery('#colorpicker').farbtastic('#hexval');
+{/footer_script}
+
 <div class="titrePage">
-  <h2>{'See photos by user'|@translate}</h2>
+    <h2>{'See photos by user'|@translate}</h2>
 </div>
 
 <form method="post">
- <p>
-  <strong>{'Minimal number photos for show users'|@translate}</strong> 
-  <input type="text" name="insspbu1" value="{$SPBU1}" size="10" maxlength="10">
- </p>
- <p>
-  <strong>{'Maximal number users'|@translate}</strong> 
-  <input type="text" name="insspbu2" value="{$SPBU2}" size="10" maxlength="10">
- </p>
- <p>
-  <strong>{'Users order'|@translate}</strong> 
-  {html_options name="insspbu3" values=$spbu output=$spbuT selected="{$SPBU3}"}
- </p>
- <p>
-  <strong>{'Show'|@translate}</strong> 
-  {html_options name="insspbu4" values=$spbu2 output=$spbuT2 selected="{$SPBU4}"}
- </p>
-  <p>
-    <input class="submit" type="submit" name="submitspbu" value="{'Submit'|@translate}">
-  </p>
+    <p>
+        <strong>{'Minimal number photos for show users'|@translate}</strong> 
+        <input type="text" name="insspbu1" value="{$SPBU1}" size="10" maxlength="10">
+    </p>
+    <p>
+        <strong>{'Maximal number users'|@translate}</strong> 
+        <input type="text" name="insspbu2" value="{$SPBU2}" size="10" maxlength="10">
+    </p>
+    <p>
+        <strong>{'Users order'|@translate}</strong> 
+        {html_options name="insspbu3" values=$spbu output=$spbuT selected="{$SPBU3}"}
+    </p>
+    <p>
+        <strong>{'Show'|@translate}</strong> 
+        {html_options name="insspbu4" values=$spbu2 output=$spbuT2 selected="{$SPBU4}"}
+    </p>
+    <p>
+        <span id="colorpicker"></span>
+        <input type="text" id="hexval" readonly title='{'You must use colorpicker'|@translate}' name="insspbu5" value="{$SPBU5}" size="7" maxlength="7">
+    </p>
+    
+    <p>
+        <input class="submit" type="submit" name="submitspbu" value="{'Submit'|@translate}">
+    </p>
 </form>
+    
+
+
Index: /extensions/see_photos_by_user/include/function.see.inc.php
===================================================================
--- /extensions/see_photos_by_user/include/function.see.inc.php	(revision 30403)
+++ /extensions/see_photos_by_user/include/function.see.inc.php	(revision 30403)
@@ -0,0 +1,42 @@
+<?php 
+
+function see_username($id_user){
+$query = '
+    SELECT id, username
+    FROM ' . USERS_TABLE . '
+    WHERE id = \'' . $id_user . '\'
+    ;';
+        $result = pwg_query($query);
+        $row = pwg_db_fetch_assoc($result);
+        $username = str_replace(' ','_',$row['username']);
+
+return $username;
+}
+
+function see_userlist_nb_photo(){
+    global $conf;
+            $query = '
+SELECT UT.id, UT.username, COUNT(DISTINCT(IT.id)) AS PBU
+ FROM ' . USERS_TABLE . ' as UT
+ INNER JOIN ' . IMAGES_TABLE . ' AS IT ON IT.added_by = UT.id
+ INNER JOIN ' . IMAGE_CATEGORY_TABLE . ' AS ic ON IT.id = ic.image_id
+  ' . get_sql_condition_FandF
+                        (
+                        array
+                    (
+                    'forbidden_categories' => 'category_id',
+                    'visible_categories' => 'category_id',
+                    'visible_images' => 'id'
+                        ), 'WHERE'
+                ) . '
+ GROUP BY IT.added_by
+ HAVING PBU >' . $conf['see_photos_by_user_nbphotos'] . '
+ ORDER BY ' . $conf['see_photos_by_user_order'] . '
+ LIMIT ' . $conf['see_photos_by_user_limit'] . ';';
+
+        $result = pwg_query($query);
+
+    return $result;
+}
+
+?>
Index: /extensions/see_photos_by_user/js/farbtastic/LICENSE.txt
===================================================================
--- /extensions/see_photos_by_user/js/farbtastic/LICENSE.txt	(revision 30403)
+++ /extensions/see_photos_by_user/js/farbtastic/LICENSE.txt	(revision 30403)
@@ -0,0 +1,341 @@
+
+        GNU GENERAL PUBLIC LICENSE
+           Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+          Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+        GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+          NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+         END OF TERMS AND CONDITIONS
+
+      How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
Index: /extensions/see_photos_by_user/js/farbtastic/farbtastic.css
===================================================================
--- /extensions/see_photos_by_user/js/farbtastic/farbtastic.css	(revision 30403)
+++ /extensions/see_photos_by_user/js/farbtastic/farbtastic.css	(revision 30403)
@@ -0,0 +1,33 @@
+.farbtastic {
+  position: relative;
+}
+.farbtastic * {
+  position: absolute;
+  cursor: crosshair;
+}
+.farbtastic, .farbtastic .wheel {
+  width: 195px;
+  height: 195px;
+}
+.farbtastic .color, .farbtastic .overlay {
+  top: 47px;
+  left: 47px;
+  width: 101px;
+  height: 101px;
+}
+.farbtastic .wheel {
+  background: url(wheel.png) no-repeat;
+  width: 195px;
+  height: 195px;
+}
+.farbtastic .overlay {
+  background: url(mask.png) no-repeat;
+}
+.farbtastic .marker {
+  width: 17px;
+  height: 17px;
+  margin: -8px 0 0 -8px;
+  overflow: hidden; 
+  background: url(marker.png) no-repeat;
+}
+
Index: /extensions/see_photos_by_user/js/farbtastic/farbtastic.js
===================================================================
--- /extensions/see_photos_by_user/js/farbtastic/farbtastic.js	(revision 30403)
+++ /extensions/see_photos_by_user/js/farbtastic/farbtastic.js	(revision 30403)
@@ -0,0 +1,329 @@
+// $Id: farbtastic.js,v 1.2 2007/01/08 22:53:01 unconed Exp $
+// Farbtastic 1.2
+
+jQuery.fn.farbtastic = function (callback) {
+  $.farbtastic(this, callback);
+  return this;
+};
+
+jQuery.farbtastic = function (container, callback) {
+  var container = $(container).get(0);
+  return container.farbtastic || (container.farbtastic = new jQuery._farbtastic(container, callback));
+}
+
+jQuery._farbtastic = function (container, callback) {
+  // Store farbtastic object
+  var fb = this;
+
+  // Insert markup
+  $(container).html('<div class="farbtastic"><div class="color"></div><div class="wheel"></div><div class="overlay"></div><div class="h-marker marker"></div><div class="sl-marker marker"></div></div>');
+  var e = $('.farbtastic', container);
+  fb.wheel = $('.wheel', container).get(0);
+  // Dimensions
+  fb.radius = 84;
+  fb.square = 100;
+  fb.width = 194;
+
+  // Fix background PNGs in IE6
+  if (navigator.appVersion.match(/MSIE [0-6]\./)) {
+    $('*', e).each(function () {
+      if (this.currentStyle.backgroundImage != 'none') {
+        var image = this.currentStyle.backgroundImage;
+        image = this.currentStyle.backgroundImage.substring(5, image.length - 2);
+        $(this).css({
+          'backgroundImage': 'none',
+          'filter': "progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=crop, src='" + image + "')"
+        });
+      }
+    });
+  }
+
+  /**
+   * Link to the given element(s) or callback.
+   */
+  fb.linkTo = function (callback) {
+    // Unbind previous nodes
+    if (typeof fb.callback == 'object') {
+      $(fb.callback).unbind('keyup', fb.updateValue);
+    }
+
+    // Reset color
+    fb.color = null;
+
+    // Bind callback or elements
+    if (typeof callback == 'function') {
+      fb.callback = callback;
+    }
+    else if (typeof callback == 'object' || typeof callback == 'string') {
+      fb.callback = $(callback);
+      fb.callback.bind('keyup', fb.updateValue);
+      if (fb.callback.get(0).value) {
+        fb.setColor(fb.callback.get(0).value);
+      }
+    }
+    return this;
+  }
+  fb.updateValue = function (event) {
+    if (this.value && this.value != fb.color) {
+      fb.setColor(this.value);
+    }
+  }
+
+  /**
+   * Change color with HTML syntax #123456
+   */
+  fb.setColor = function (color) {
+    var unpack = fb.unpack(color);
+    if (fb.color != color && unpack) {
+      fb.color = color;
+      fb.rgb = unpack;
+      fb.hsl = fb.RGBToHSL(fb.rgb);
+      fb.updateDisplay();
+    }
+    return this;
+  }
+
+  /**
+   * Change color with HSL triplet [0..1, 0..1, 0..1]
+   */
+  fb.setHSL = function (hsl) {
+    fb.hsl = hsl;
+    fb.rgb = fb.HSLToRGB(hsl);
+    fb.color = fb.pack(fb.rgb);
+    fb.updateDisplay();
+    return this;
+  }
+
+  /////////////////////////////////////////////////////
+
+  /**
+   * Retrieve the coordinates of the given event relative to the center
+   * of the widget.
+   */
+  fb.widgetCoords = function (event) {
+    var x, y;
+    var el = event.target || event.srcElement;
+    var reference = fb.wheel;
+
+    if (typeof event.offsetX != 'undefined') {
+      // Use offset coordinates and find common offsetParent
+      var pos = { x: event.offsetX, y: event.offsetY };
+
+      // Send the coordinates upwards through the offsetParent chain.
+      var e = el;
+      while (e) {
+        e.mouseX = pos.x;
+        e.mouseY = pos.y;
+        pos.x += e.offsetLeft;
+        pos.y += e.offsetTop;
+        e = e.offsetParent;
+      }
+
+      // Look for the coordinates starting from the wheel widget.
+      var e = reference;
+      var offset = { x: 0, y: 0 }
+      while (e) {
+        if (typeof e.mouseX != 'undefined') {
+          x = e.mouseX - offset.x;
+          y = e.mouseY - offset.y;
+          break;
+        }
+        offset.x += e.offsetLeft;
+        offset.y += e.offsetTop;
+        e = e.offsetParent;
+      }
+
+      // Reset stored coordinates
+      e = el;
+      while (e) {
+        e.mouseX = undefined;
+        e.mouseY = undefined;
+        e = e.offsetParent;
+      }
+    }
+    else {
+      // Use absolute coordinates
+      var pos = fb.absolutePosition(reference);
+      x = (event.pageX || 0*(event.clientX + $('html').get(0).scrollLeft)) - pos.x;
+      y = (event.pageY || 0*(event.clientY + $('html').get(0).scrollTop)) - pos.y;
+    }
+    // Subtract distance to middle
+    return { x: x - fb.width / 2, y: y - fb.width / 2 };
+  }
+
+  /**
+   * Mousedown handler
+   */
+  fb.mousedown = function (event) {
+    // Capture mouse
+    if (!document.dragging) {
+      $(document).bind('mousemove', fb.mousemove).bind('mouseup', fb.mouseup);
+      document.dragging = true;
+    }
+
+    // Check which area is being dragged
+    var pos = fb.widgetCoords(event);
+    fb.circleDrag = Math.max(Math.abs(pos.x), Math.abs(pos.y)) * 2 > fb.square;
+
+    // Process
+    fb.mousemove(event);
+    return false;
+  }
+
+  /**
+   * Mousemove handler
+   */
+  fb.mousemove = function (event) {
+    // Get coordinates relative to color picker center
+    var pos = fb.widgetCoords(event);
+
+    // Set new HSL parameters
+    if (fb.circleDrag) {
+      var hue = Math.atan2(pos.x, -pos.y) / 6.28;
+      if (hue < 0) hue += 1;
+      fb.setHSL([hue, fb.hsl[1], fb.hsl[2]]);
+    }
+    else {
+      var sat = Math.max(0, Math.min(1, -(pos.x / fb.square) + .5));
+      var lum = Math.max(0, Math.min(1, -(pos.y / fb.square) + .5));
+      fb.setHSL([fb.hsl[0], sat, lum]);
+    }
+    return false;
+  }
+
+  /**
+   * Mouseup handler
+   */
+  fb.mouseup = function () {
+    // Uncapture mouse
+    $(document).unbind('mousemove', fb.mousemove);
+    $(document).unbind('mouseup', fb.mouseup);
+    document.dragging = false;
+  }
+
+  /**
+   * Update the markers and styles
+   */
+  fb.updateDisplay = function () {
+    // Markers
+    var angle = fb.hsl[0] * 6.28;
+    $('.h-marker', e).css({
+      left: Math.round(Math.sin(angle) * fb.radius + fb.width / 2) + 'px',
+      top: Math.round(-Math.cos(angle) * fb.radius + fb.width / 2) + 'px'
+    });
+
+    $('.sl-marker', e).css({
+      left: Math.round(fb.square * (.5 - fb.hsl[1]) + fb.width / 2) + 'px',
+      top: Math.round(fb.square * (.5 - fb.hsl[2]) + fb.width / 2) + 'px'
+    });
+
+    // Saturation/Luminance gradient
+    $('.color', e).css('backgroundColor', fb.pack(fb.HSLToRGB([fb.hsl[0], 1, 0.5])));
+
+    // Linked elements or callback
+    if (typeof fb.callback == 'object') {
+      // Set background/foreground color
+      $(fb.callback).css({
+        backgroundColor: fb.color,
+        color: fb.hsl[2] > 0.5 ? '#000' : '#fff'
+      });
+
+      // Change linked value
+      $(fb.callback).each(function() {
+        if (this.value && this.value != fb.color) {
+          this.value = fb.color;
+        }
+      });
+    }
+    else if (typeof fb.callback == 'function') {
+      fb.callback.call(fb, fb.color);
+    }
+  }
+
+  /**
+   * Get absolute position of element
+   */
+  fb.absolutePosition = function (el) {
+    var r = { x: el.offsetLeft, y: el.offsetTop };
+    // Resolve relative to offsetParent
+    if (el.offsetParent) {
+      var tmp = fb.absolutePosition(el.offsetParent);
+      r.x += tmp.x;
+      r.y += tmp.y;
+    }
+    return r;
+  };
+
+  /* Various color utility functions */
+  fb.pack = function (rgb) {
+    var r = Math.round(rgb[0] * 255);
+    var g = Math.round(rgb[1] * 255);
+    var b = Math.round(rgb[2] * 255);
+    return '#' + (r < 16 ? '0' : '') + r.toString(16) +
+           (g < 16 ? '0' : '') + g.toString(16) +
+           (b < 16 ? '0' : '') + b.toString(16);
+  }
+
+  fb.unpack = function (color) {
+    if (color.length == 7) {
+      return [parseInt('0x' + color.substring(1, 3)) / 255,
+        parseInt('0x' + color.substring(3, 5)) / 255,
+        parseInt('0x' + color.substring(5, 7)) / 255];
+    }
+    else if (color.length == 4) {
+      return [parseInt('0x' + color.substring(1, 2)) / 15,
+        parseInt('0x' + color.substring(2, 3)) / 15,
+        parseInt('0x' + color.substring(3, 4)) / 15];
+    }
+  }
+
+  fb.HSLToRGB = function (hsl) {
+    var m1, m2, r, g, b;
+    var h = hsl[0], s = hsl[1], l = hsl[2];
+    m2 = (l <= 0.5) ? l * (s + 1) : l + s - l*s;
+    m1 = l * 2 - m2;
+    return [this.hueToRGB(m1, m2, h+0.33333),
+        this.hueToRGB(m1, m2, h),
+        this.hueToRGB(m1, m2, h-0.33333)];
+  }
+
+  fb.hueToRGB = function (m1, m2, h) {
+    h = (h < 0) ? h + 1 : ((h > 1) ? h - 1 : h);
+    if (h * 6 < 1) return m1 + (m2 - m1) * h * 6;
+    if (h * 2 < 1) return m2;
+    if (h * 3 < 2) return m1 + (m2 - m1) * (0.66666 - h) * 6;
+    return m1;
+  }
+
+  fb.RGBToHSL = function (rgb) {
+    var min, max, delta, h, s, l;
+    var r = rgb[0], g = rgb[1], b = rgb[2];
+    min = Math.min(r, Math.min(g, b));
+    max = Math.max(r, Math.max(g, b));
+    delta = max - min;
+    l = (min + max) / 2;
+    s = 0;
+    if (l > 0 && l < 1) {
+      s = delta / (l < 0.5 ? (2 * l) : (2 - 2 * l));
+    }
+    h = 0;
+    if (delta > 0) {
+      if (max == r && max != g) h += (g - b) / delta;
+      if (max == g && max != b) h += (2 + (b - r) / delta);
+      if (max == b && max != r) h += (4 + (r - g) / delta);
+      h /= 6;
+    }
+    return [h, s, l];
+  }
+
+  // Install mousedown handler (the others are set on the document on-demand)
+  $('*', e).mousedown(fb.mousedown);
+
+    // Init color
+  fb.setColor('#000000');
+
+  // Set linked elements/callback
+  if (callback) {
+    fb.linkTo(callback);
+  }
+}
Index: /extensions/see_photos_by_user/js/farbtastic/index.php
===================================================================
--- /extensions/see_photos_by_user/js/farbtastic/index.php	(revision 30403)
+++ /extensions/see_photos_by_user/js/farbtastic/index.php	(revision 30403)
@@ -0,0 +1,7 @@
+<?php
+$url = '../';
+header( 'Request-URI: '.$url );
+header( 'Content-Location: '.$url );
+header( 'Location: '.$url );
+exit();
+?>
Index: /extensions/see_photos_by_user/js/jquery.tagcanvas.min.js
===================================================================
--- /extensions/see_photos_by_user/js/jquery.tagcanvas.min.js	(revision 30403)
+++ /extensions/see_photos_by_user/js/jquery.tagcanvas.min.js	(revision 30403)
@@ -0,0 +1,21 @@
+/**
+ * Copyright (C) 2010-2014 Graham Breach
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+/**
+ * jQuery.tagcanvas 2.5.1
+ * For more information, please contact <graham@goat1000.com>
+ */
+(function(ak){var K,I,J=Math.abs,ad=Math.sin,v=Math.cos,q=Math.max,ay=Math.min,al=Math.ceil,C=Math.sqrt,an=Math.pow,f={},h={},k={0:"0,",1:"17,",2:"34,",3:"51,",4:"68,",5:"85,",6:"102,",7:"119,",8:"136,",9:"153,",a:"170,",A:"170,",b:"187,",B:"187,",c:"204,",C:"204,",d:"221,",D:"221,",e:"238,",E:"238,",f:"255,",F:"255,"},w,b,O,aA,F,aB,B=document,n,a={};for(K=0;K<256;++K){I=K.toString(16);if(K<16){I="0"+I}h[I]=h[I.toUpperCase()]=K.toString()+","}function ae(i){return typeof i!="undefined"}function G(i){return typeof i=="object"&&i!=null}function ap(i,j,aC){return isNaN(i)?aC:ay(aC,q(j,i))}function av(){return false}function E(){return new Date().valueOf()}function z(aC,aF){var j=[],aD=aC.length,aE;for(aE=0;aE<aD;++aE){j.push(aC[aE])}j.sort(aF);return j}function aj(j){var aD=j.length-1,aC,aE;while(aD){aE=~~(Math.random()*aD);aC=j[aD];j[aD]=j[aE];j[aE]=aC;--aD}}function aa(i,aC,j){this.x=i;this.y=aC;this.z=j}F=aa.prototype;F.length=function(){return C(this.x*this.x+this.y*this.y+this.z*this.z)};F.dot=function(i){return this.x*i.x+this.y*i.y+this.z*i.z};F.cross=function(j){var i=this.y*j.z-this.z*j.y,aD=this.z*j.x-this.x*j.z,aC=this.x*j.y-this.y*j.x;return new aa(i,aD,aC)};F.angle=function(j){var i=this.dot(j),aC;if(i==0){return Math.PI/2}aC=i/(this.length()*j.length());if(aC>=1){return 0}if(aC<=-1){return Math.PI}return Math.acos(aC)};F.unit=function(){var i=this.length();return new aa(this.x/i,this.y/i,this.z/i)};function af(aC,j){j=j*Math.PI/180;aC=aC*Math.PI/180;var i=ad(aC)*v(j),aE=-ad(j),aD=-v(aC)*v(j);return new aa(i,aE,aD)}function P(i){this[1]={1:i[0],2:i[1],3:i[2]};this[2]={1:i[3],2:i[4],3:i[5]};this[3]={1:i[6],2:i[7],3:i[8]}}aA=P.prototype;P.Identity=function(){return new P([1,0,0,0,1,0,0,0,1])};P.Rotation=function(aD,i){var j=ad(aD),aC=v(aD),aE=1-aC;return new P([aC+an(i.x,2)*aE,i.x*i.y*aE-i.z*j,i.x*i.z*aE+i.y*j,i.y*i.x*aE+i.z*j,aC+an(i.y,2)*aE,i.y*i.z*aE-i.x*j,i.z*i.x*aE-i.y*j,i.z*i.y*aE+i.x*j,aC+an(i.z,2)*aE])};aA.mul=function(aC){var aD=[],aG,aF,aE=(aC.xform?1:0);for(aG=1;aG<=3;++aG){for(aF=1;aF<=3;++aF){if(aE){aD.push(this[aG][1]*aC[1][aF]+this[aG][2]*aC[2][aF]+this[aG][3]*aC[3][aF])}else{aD.push(this[aG][aF]*aC)}}}return new P(aD)};aA.xform=function(aC){var j={},i=aC.x,aE=aC.y,aD=aC.z;j.x=i*this[1][1]+aE*this[2][1]+aD*this[3][1];j.y=i*this[1][2]+aE*this[2][2]+aD*this[3][2];j.z=i*this[1][3]+aE*this[2][3]+aD*this[3][3];return j};function o(aD,aF,aK,aH){var aG,aJ,j,aI,aL=[],aE=Math.PI*(3-C(5)),aC=2/aD;for(aG=0;aG<aD;++aG){aJ=aG*aC-1+(aC/2);j=C(1-aJ*aJ);aI=aG*aE;aL.push([v(aI)*j*aF,aJ*aK,ad(aI)*j*aH])}return aL}function U(aE,aC,aH,aN,aL){var aM,aO=[],aF=Math.PI*(3-C(5)),aD=2/aE,aK,aJ,aI,aG;for(aK=0;aK<aE;++aK){aJ=aK*aD-1+(aD/2);aM=aK*aF;aI=v(aM);aG=ad(aM);aO.push(aC?[aJ*aH,aI*aN,aG*aL]:[aI*aH,aJ*aN,aG*aL])}return aO}function L(aC,aD,aG,aM,aK,aI){var aL,aN=[],aE=Math.PI*2/aD,aJ,aH,aF;for(aJ=0;aJ<aD;++aJ){aL=aJ*aE;aH=v(aL);aF=ad(aL);aN.push(aC?[aI*aG,aH*aM,aF*aK]:[aH*aG,aI*aM,aF*aK])}return aN}function ai(aD,i,j,aC){return U(aD,0,i,j,aC)}function ao(aD,i,j,aC){return U(aD,1,i,j,aC)}function c(aE,i,j,aC,aD){aD=isNaN(aD)?0:aD*1;return L(0,aE,i,j,aC,aD)}function l(aE,i,j,aC,aD){aD=isNaN(aD)?0:aD*1;return L(1,aE,i,j,aC,aD)}function S(aF,i){var aE=aF,aD,aC,j=(i*1).toPrecision(3)+")";if(aF[0]==="#"){if(!f[aF]){if(aF.length===4){f[aF]="rgba("+k[aF[1]]+k[aF[2]]+k[aF[3]]}else{f[aF]="rgba("+h[aF.substr(1,2)]+h[aF.substr(3,2)]+h[aF.substr(5,2)]}}aE=f[aF]+j}else{if(aF.substr(0,4)==="rgb("||aF.substr(0,4)==="hsl("){aE=(aF.replace("(","a(").replace(")",","+j))}else{if(aF.substr(0,5)==="rgba("||aF.substr(0,5)==="hsla("){aD=aF.lastIndexOf(",")+1,aC=aF.indexOf(")");i*=parseFloat(aF.substring(aD,aC));aE=aF.substr(0,aD)+i.toPrecision(3)+")"}}}return aE}function N(i,j){if(window.G_vmlCanvasManager){return null}var aC=B.createElement("canvas");aC.width=i;aC.height=j;return aC}function ah(){var j=N(3,3),aD,aC;if(!j){return false}aD=j.getContext("2d");aD.strokeStyle="#000";aD.shadowColor="#fff";aD.shadowBlur=3;aD.globalAlpha=0;aD.strokeRect(2,2,2,2);aD.globalAlpha=1;aC=aD.getImageData(2,2,1,1);j=null;return(aC.data[0]>0)}function ag(aG,j,aF,aE){var aD=aG.createLinearGradient(0,0,j,0),aC;for(aC in aE){aD.addColorStop(1-aC,aE[aC])}aG.fillStyle=aD;aG.fillRect(0,aF,j,1)}function g(aE,aC,j){var aD=1024,aI=1,aH=aE.weightGradient,aG,aK,aF,aJ;if(aE.gCanvas){aK=aE.gCanvas.getContext("2d");aI=aE.gCanvas.height}else{if(G(aH[0])){aI=aH.length}else{aH=[aH]}aE.gCanvas=aG=N(aD,aI);if(!aG){return null}aK=aG.getContext("2d");for(aF=0;aF<aI;++aF){ag(aK,aD,aF,aH[aF])}}j=q(ay(j||0,aI-1),0);aJ=aK.getImageData(~~((aD-1)*aC),j,1,1).data;return"rgba("+aJ[0]+","+aJ[1]+","+aJ[2]+","+(aJ[3]/255)+")"}function V(aL,aE,j,aN,aF,aK,aG,aD,aJ,aM){var aI=aF+(aG||0)+(aD.length&&aD[0]<0?J(aD[0]):0),aC=aF+(aG||0)+(aD.length&&aD[1]<0?J(aD[1]):0),aH,aO;aL.font=aE;aL.textBaseline="top";aL.fillStyle=j;aK&&(aL.shadowColor=aK);aG&&(aL.shadowBlur=aG);aD.length&&(aL.shadowOffsetX=aD[0],aL.shadowOffsetY=aD[1]);for(aH=0;aH<aN.length;++aH){aO=aM?(aJ-aM[aH])/2:0;aL.fillText(aN[aH],aI+aO,aC);aC+=parseInt(aE)}}function am(aG,i,aF,j,aD,aE,aC){if(aE){aG.beginPath();aG.moveTo(i,aF+aD-aE);aG.arcTo(i,aF,i+aE,aF,aE);aG.arcTo(i+j,aF,i+j,aF+aE,aE);aG.arcTo(i+j,aF+aD,i+j-aE,aF+aD,aE);aG.arcTo(i,aF+aD,i,aF+aD-aE,aE);aG.closePath();aG[aC?"stroke":"fill"]()}else{aG[aC?"strokeRect":"fillRect"](i,aF,j,aD)}}function t(aG,aO,aI,aT,aJ,aQ,aH,aR,aP,aN,i,aL,aF,aM,aV){var aD=aI+J(i[0])+2*(aN+aL)+aR,aK=aT+J(i[1])+2*(aN+aL)+aR,aE,aW,aU,aS,aC,j;aE=N(aD,aK);if(!aE){return null}aU=aC=aR/2;aS=aD-aR;j=aK-aR;aL+=aU;aW=aE.getContext("2d");if(aQ){aW.fillStyle=aQ;am(aW,aU,aC,aS,j,aF)}if(aR){aW.strokeStyle=aH;aW.lineWidth=aR;am(aW,aU,aC,aS,j,aF,true)}V(aW,aO,aJ,aG,aL,aP,aN,i,aM,aV);return aE}function u(aD,j,aE){var aC=N(j,aE),aF;if(!aC){return null}aF=aC.getContext("2d");aF.drawImage(aD,(j-aD.width)/2,(aE-aD.height)/2);return aC}function ar(aD,j,aE){var aC=N(j,aE),aF;if(!aC){return null}aF=aC.getContext("2d");aF.drawImage(aD,0,0,j,aE);return aC}function ax(aO,aJ,aP,aT,aK,aI,aH,aM,aF,aG){var aD=aJ+((2*aM)+aI)*aT,aL=aP+((2*aM)+aI)*aT,aE=N(aD,aL),aS,aR,aC,aQ,j,aU,aN;if(!aE){return null}aI*=aT;aF*=aT;aR=aC=aI/2;aQ=aD-aI;j=aL-aI;aM=(aM*aT)+aR;aS=aE.getContext("2d");if(aK){aS.fillStyle=aK;am(aS,aR,aC,aQ,j,aF)}if(aI){aS.strokeStyle=aH;aS.lineWidth=aI;am(aS,aR,aC,aQ,j,aF,true)}if(aG){aU=N(aD,aL);aN=aU.getContext("2d");aN.drawImage(aO,aM,aM,aJ,aP);aN.globalCompositeOperation="source-in";aN.fillStyle=aH;aN.fillRect(0,0,aD,aL);aN.globalCompositeOperation="destination-over";aN.drawImage(aE,0,0);aN.globalCompositeOperation="source-over";aS.drawImage(aU,0,0)}else{aS.drawImage(aO,aM,aM,aO.width,aO.height)}return{image:aE,width:aD/aT,height:aL/aT}}function X(aI,aO,aK,aE,aM,aN,aD){var aP=J(aD[0]),aJ=J(aD[1]),aF=aO+(aP>aN?aP+aN:aN*2)*aE,j=aK+(aJ>aN?aJ+aN:aN*2)*aE,aH=aE*((aN||0)+(aD[0]<0?aP:0)),aC=aE*((aN||0)+(aD[1]<0?aJ:0)),aG,aL;aG=N(aF,j);if(!aG){return null}aL=aG.getContext("2d");aM&&(aL.shadowColor=aM);aN&&(aL.shadowBlur=aN*aE);aD&&(aL.shadowOffsetX=aD[0]*aE,aL.shadowOffsetY=aD[1]*aE);aL.drawImage(aI,aH,aC,aO,aK);return{image:aG,width:aF/aE,height:j/aE}}function r(aO,aG,aM){var aN=parseInt(aO.toString().length*aM),aF=parseInt(aM*2*aO.length),aD=N(aN,aF),aJ,j,aE,aI,aL,aK,aC,aH;if(!aD){return null}aJ=aD.getContext("2d");aJ.fillStyle="#000";aJ.fillRect(0,0,aN,aF);V(aJ,aM+"px "+aG,"#fff",aO,0,0,0,[]);j=aJ.getImageData(0,0,aN,aF);aE=j.width;aI=j.height;aH={min:{x:aE,y:aI},max:{x:-1,y:-1}};for(aK=0;aK<aI;++aK){for(aL=0;aL<aE;++aL){aC=(aK*aE+aL)*4;if(j.data[aC+1]>0){if(aL<aH.min.x){aH.min.x=aL}if(aL>aH.max.x){aH.max.x=aL}if(aK<aH.min.y){aH.min.y=aK}if(aK>aH.max.y){aH.max.y=aK}}}}if(aE!=aN){aH.min.x*=(aN/aE);aH.max.x*=(aN/aE)}if(aI!=aF){aH.min.y*=(aN/aI);aH.max.y*=(aN/aI)}aD=null;return aH}function m(i){return"'"+i.replace(/(\'|\")/g,"").replace(/\s*,\s*/g,"', '")+"'"}function Z(i,j,aC){aC=aC||B;if(aC.addEventListener){aC.addEventListener(i,j,false)}else{aC.attachEvent("on"+i,j)}}function aq(aG,aC,aK,aF){var aL=aF.imageScale,aI,aD,aH,j,aE,aJ;if(!aC.complete){return Z("load",function(){aq(aG,aC,aK,aF)},aC)}if(!aG.complete){return Z("load",function(){aq(aG,aC,aK,aF)},aG)}aC.width=aC.width;aC.height=aC.height;if(aL){aG.width=aC.width*aL;aG.height=aC.height*aL}aK.w=aG.width;aK.h=aG.height;if(aF.txtOpt){aD=aG;aI=aF.zoomMax*aF.txtScale;aE=aK.w*aI;aJ=aK.h*aI;if(aE<aC.naturalWidth||aJ<aC.naturalHeight){aD=ar(aG,aE,aJ);if(aD){aK.image=aD}}else{aE=aK.w;aJ=aK.h;aI=1}if(aF.shadow){aD=X(aK.image,aE,aJ,aI,aF.shadow,aF.shadowBlur,aF.shadowOffset);if(aD){aK.image=aD.image;aK.w=aD.width;aK.h=aD.height}}if(aF.bgColour||aF.bgOutlineThickness){aH=aF.bgColour=="tag"?W(aK.a,"background-color"):aF.bgColour;j=aF.bgOutline=="tag"?W(aK.a,"color"):(aF.bgOutline||aF.textColour);aE=aK.image.width;aJ=aK.image.height;if(aF.outlineMethod=="colour"){aD=ax(aK.image,aE,aJ,aI,aH,aF.bgOutlineThickness,aF.outlineColour,aF.padding,aF.bgRadius,1);if(aD){aK.oimage=aD.image}}aD=ax(aK.image,aE,aJ,aI,aH,aF.bgOutlineThickness,j,aF.padding,aF.bgRadius);if(aD){aK.image=aD.image;aK.w=aD.width;aK.h=aD.height}}if(aF.outlineMethod=="size"){if(aF.outlineIncrease>0){aK.w+=2*aF.outlineIncrease;aK.h+=2*aF.outlineIncrease;aE=aI*aK.w;aJ=aI*aK.h;aD=ar(aK.image,aE,aJ);aK.oimage=aD;aK.image=u(aK.image,aK.oimage.width,aK.oimage.height)}else{aE=aI*(aK.w+(2*aF.outlineIncrease));aJ=aI*(aK.h+(2*aF.outlineIncrease));aD=ar(aK.image,aE,aJ);aK.oimage=u(aD,aK.image.width,aK.image.height)}}}}function W(aD,aC){var j=B.defaultView,i=aC.replace(/\-([a-z])/g,function(aE){return aE.charAt(1).toUpperCase()});return(j&&j.getComputedStyle&&j.getComputedStyle(aD,null).getPropertyValue(aC))||(aD.currentStyle&&aD.currentStyle[i])}function s(j,aD,aC){var i=1,aE;if(aD){i=1*(j.getAttribute(aD)||aC)}else{if(aE=W(j,"font-size")){i=(aE.indexOf("px")>-1&&aE.replace("px","")*1)||(aE.indexOf("pt")>-1&&aE.replace("pt","")*1.25)||aE*3.3}}return i}function e(i){return i.target&&ae(i.target.id)?i.target.id:i.srcElement.parentNode.id}function Q(aE,aF){var aD,aC,i=parseInt(W(aF,"width"))/aF.width,j=parseInt(W(aF,"height"))/aF.height;if(ae(aE.offsetX)){aD={x:aE.offsetX,y:aE.offsetY}}else{aC=Y(aF.id);if(ae(aE.changedTouches)){aE=aE.changedTouches[0]}if(aE.pageX){aD={x:aE.pageX-aC.x,y:aE.pageY-aC.y}}}if(aD&&i&&j){aD.x/=i;aD.y/=j}return aD}function A(aC){var j=aC.target||aC.fromElement.parentNode,i=x.tc[j.id];if(i){i.mx=i.my=-1;i.UnFreeze();i.EndDrag()}}function ab(aG){var aD,aC=x,j,aF,aE=e(aG);for(aD in aC.tc){j=aC.tc[aD];if(j.tttimer){clearTimeout(j.tttimer);j.tttimer=null}}if(aE&&aC.tc[aE]){j=aC.tc[aE];if(aF=Q(aG,j.canvas)){j.mx=aF.x;j.my=aF.y;j.Drag(aG,aF)}j.drawn=0}}function y(aD){var j=x,i=B.addEventListener?0:1,aC=e(aD);if(aC&&aD.button==i&&j.tc[aC]){j.tc[aC].BeginDrag(aD)}}function az(aE){var aC=x,j=B.addEventListener?0:1,aD=e(aE),i;if(aD&&aE.button==j&&aC.tc[aD]){i=aC.tc[aD];ab(aE);if(!i.EndDrag()&&!i.touched){i.Clicked(aE)}}}function R(aC){var i=x,j=e(aC);if(j&&aC.changedTouches&&i.tc[j]){i.tc[j].touched=1;i.tc[j].BeginDrag(aC)}}function p(aC){var i=x,j=e(aC);if(j&&aC.changedTouches&&i.tc[j]){au(aC);if(!i.tc[j].EndDrag()){i.tc[j].Draw();i.tc[j].Clicked(aC)}}}function au(aG){var aD,aC=x,j,aF,aE=e(aG);for(aD in aC.tc){j=aC.tc[aD];if(j.tttimer){clearTimeout(j.tttimer);j.tttimer=null}}if(aE&&aC.tc[aE]&&aG.changedTouches){j=aC.tc[aE];if(aF=Q(aG,j.canvas)){j.mx=aF.x;j.my=aF.y;j.Drag(aG,aF)}j.drawn=0}}function ac(aC){var i=x,j=e(aC);if(j&&i.tc[j]){aC.cancelBubble=true;aC.returnValue=false;aC.preventDefault&&aC.preventDefault();i.tc[j].Wheel((aC.wheelDelta||aC.detail)>0)}}function M(){D(E())}function D(aD){var j=x.tc,aC;x.NextFrame(x.interval);aD=aD||E();for(aC in j){j[aC].Draw(aD)}}function Y(aC){var aF=B.getElementById(aC),i=aF.getBoundingClientRect(),aI=B.documentElement,aG=B.body,aH=window,aD=aH.pageXOffset||aI.scrollLeft,aJ=aH.pageYOffset||aI.scrollTop,aE=aI.clientLeft||aG.clientLeft,j=aI.clientTop||aG.clientTop;return{x:i.left+aD-aE,y:i.top+aJ-j}}function T(j,aD,aE,aC){var i=j.radius*j.z1/(j.z1+j.z2+aD.z);return{x:aD.x*i*aE,y:aD.y*i*aC,z:aD.z,w:(j.z1-aD.z)/j.z2}}function aw(i){this.e=i;this.br=0;this.line=[];this.text=[];this.original=i.innerText||i.textContent}aB=aw.prototype;aB.Lines=function(aE){var aD=aE?1:0,aF,j,aC;aE=aE||this.e;aF=aE.childNodes;j=aF.length;for(aC=0;aC<j;++aC){if(aF[aC].nodeName=="BR"){this.text.push(this.line.join(" "));this.br=1}else{if(aF[aC].nodeType==3){if(this.br){this.line=[aF[aC].nodeValue];this.br=0}else{this.line.push(aF[aC].nodeValue)}}else{this.Lines(aF[aC])}}}aD||this.br||this.text.push(this.line.join(" "));return this.text};aB.SplitWidth=function(aC,aJ,aG,aF){var aE,aD,aI,aH=[];aJ.font=aF+"px "+aG;for(aE=0;aE<this.text.length;++aE){aI=this.text[aE].split(/\s+/);this.line=[aI[0]];for(aD=1;aD<aI.length;++aD){if(aJ.measureText(this.line.join(" ")+" "+aI[aD]).width>aC){aH.push(this.line.join(" "));this.line=[aI[aD]]}else{this.line.push(aI[aD])}}aH.push(this.line.join(" "))}return this.text=aH};function H(i,j){this.ts=E();this.tc=i;this.tag=j;this.x=this.y=this.w=this.h=this.sc=1;this.z=0;this.Draw=i.pulsateTo<1&&i.outlineMethod!="colour"?this.DrawPulsate:this.DrawSimple;this.radius=i.outlineRadius|0;this.SetMethod(i.outlineMethod)}w=H.prototype;w.SetMethod=function(aC){var j={block:["PreDraw","DrawBlock"],colour:["PreDraw","DrawColour"],outline:["PostDraw","DrawOutline"],classic:["LastDraw","DrawOutline"],size:["PreDraw","DrawColour"],none:["LastDraw"]},i=j[aC]||j.outline;if(aC=="none"){this.Draw=function(){return 1}}else{this.drawFunc=this[i[1]]}this[i[0]]=this.Draw};w.Update=function(aI,aH,aJ,aE,aF,aG,aD,i){var j=this.tc.outlineOffset,aC=2*j;this.x=aF*aI+aD-j;this.y=aF*aH+i-j;this.w=aF*aJ+aC;this.h=aF*aE+aC;this.sc=aF;this.z=aG};w.DrawOutline=function(aF,i,aE,j,aC,aD){aF.strokeStyle=aD;am(aF,i,aE,j,aC,this.radius,true)};w.DrawColour=function(aD,aG,aE,aH,aC,i,aI,j,aF){if(aI.oimage){aI.alpha=1;aI.Draw(aD,j,aF,aI.oimage);return 1}return this[aI.image?"DrawColourImage":"DrawColourText"](aD,aG,aE,aH,aC,i,aI,j,aF)};w.DrawColourText=function(aE,aH,aF,aI,aC,i,aJ,j,aG){var aD=aJ.colour;aJ.colour=i;aJ.alpha=1;aJ.Draw(aE,j,aG);aJ.colour=aD;return 1};w.DrawColourImage=function(aH,aK,aI,aL,aG,i,aO,j,aJ){var aM=aH.canvas,aE=~~q(aK,0),aD=~~q(aI,0),aF=ay(aM.width-aE,aL)+0.5|0,aN=ay(aM.height-aD,aG)+0.5|0,aC;if(n){n.width=aF,n.height=aN}else{n=N(aF,aN)}if(!n){return this.SetMethod("outline")}aC=n.getContext("2d");aC.drawImage(aM,aE,aD,aF,aN,0,0,aF,aN);aH.clearRect(aE,aD,aF,aN);aO.alpha=1;aO.Draw(aH,j,aJ);aH.setTransform(1,0,0,1,0,0);aH.save();aH.beginPath();aH.rect(aE,aD,aF,aN);aH.clip();aH.globalCompositeOperation="source-in";aH.fillStyle=i;aH.fillRect(aE,aD,aF,aN);aH.restore();aH.globalCompositeOperation="destination-over";aH.drawImage(n,0,0,aF,aN,aE,aD,aF,aN);aH.globalCompositeOperation="source-over";return 1};w.DrawBlock=function(aF,i,aE,j,aC,aD){aF.fillStyle=aD;am(aF,i,aE,j,aC,this.radius)};w.DrawSimple=function(aE,i,j,aD){var aC=this.tc;aE.setTransform(1,0,0,1,0,0);aE.strokeStyle=aC.outlineColour;aE.lineWidth=aC.outlineThickness;aE.shadowBlur=aE.shadowOffsetX=aE.shadowOffsetY=0;aE.globalAlpha=1;return this.drawFunc(aE,this.x,this.y,this.w,this.h,aC.outlineColour,i,j,aD)};w.DrawPulsate=function(aF,i,j,aD){var aE=E()-this.ts,aC=this.tc;aF.setTransform(1,0,0,1,0,0);aF.strokeStyle=aC.outlineColour;aF.lineWidth=aC.outlineThickness;aF.shadowBlur=aF.shadowOffsetX=aF.shadowOffsetY=0;aF.globalAlpha=aC.pulsateTo+((1-aC.pulsateTo)*(0.5+(v(2*Math.PI*aE/(1000*aC.pulsateTime))/2)));return this.drawFunc(aF,this.x,this.y,this.w,this.h,aC.outlineColour,i,j,aD)};w.Active=function(aC,i,j){return(i>=this.x&&j>=this.y&&i<=this.x+this.w&&j<=this.y+this.h)};w.PreDraw=w.PostDraw=w.LastDraw=av;function d(aD,aO,aK,aN,aL,aE,aC,aG,aM,aF,aJ,j,aI,i){var aH=aD.ctxt;this.tc=aD;this.image=aO.src?aO:null;this.text=aO.src?[]:aO;this.text_original=i;this.line_widths=[];this.title=aK.title||null;this.a=aK;this.position=new aa(aN[0],aN[1],aN[2]);this.x=this.y=this.z=0;this.w=aL;this.h=aE;this.colour=aC||aD.textColour;this.bgColour=aG||aD.bgColour;this.bgRadius=aM|0;this.bgOutline=aF||this.colour;this.bgOutlineThickness=aJ|0;this.textFont=j||aD.textFont;this.padding=aI|0;this.sc=this.alpha=1;this.weighted=!aD.weight;this.outline=new H(aD,this);if(!this.image){this.textHeight=aD.textHeight;this.Measure(aH,aD)}this.SetShadowColour=aD.shadowAlpha?this.SetShadowColourAlpha:this.SetShadowColourFixed;this.SetDraw(aD)}b=d.prototype;b.EqualTo=function(aC){var j=aC.getElementsByTagName("img");if(this.a.href!=aC.href){return 0}if(j.length){return this.image.src==j[0].src}return(aC.innerText||aC.textContent)==this.text_original};b.SetDraw=function(i){this.Draw=this.image?(i.ie>7?this.DrawImageIE:this.DrawImage):this.DrawText;i.noSelect&&(this.CheckActive=av)};b.MeasureText=function(aF){var aD,aC=this.text.length,j=0,aE;for(aD=0;aD<aC;++aD){this.line_widths[aD]=aE=aF.measureText(this.text[aD]).width;j=q(j,aE)}return j};b.Measure=function(aH,j){var aF=r(this.text,this.textFont,this.textHeight),aD,aE,aG,aC,i;this.h=aF?aF.max.y+aF.min.y:this.textHeight;aH.font=this.font=this.textHeight+"px "+this.textFont;this.w=this.MeasureText(aH);if(j.txtOpt){aD=j.txtScale;aE=aD*this.textHeight;aG=aE+"px "+this.textFont;aC=[aD*j.shadowOffset[0],aD*j.shadowOffset[1]];aH.font=aG;i=this.MeasureText(aH);this.image=t(this.text,aG,i+aD,(aD*this.h)+aD,this.colour,this.bgColour,this.bgOutline,aD*this.bgOutlineThickness,j.shadow,aD*j.shadowBlur,aC,aD*this.padding,aD*this.bgRadius,i,this.line_widths);if(j.outlineMethod=="colour"){this.oimage=t(this.text,aG,i+aD,(aD*this.h)+aD,j.outlineColour,this.bgColour,j.outlineColour,aD*this.bgOutlineThickness,j.shadow,aD*j.shadowBlur,aC,aD*this.padding,aD*this.bgRadius,i,this.line_widths)}else{if(j.outlineMethod=="size"){aF=r(this.text,this.textFont,this.textHeight+j.outlineIncrease);aE=aF.max.y+aF.min.y;aG=(aD*(this.textHeight+j.outlineIncrease))+"px "+this.textFont;aH.font=aG;i=this.MeasureText(aH);this.oimage=t(this.text,aG,i+aD,(aD*aE)+aD,this.colour,this.bgColour,this.bgOutline,aD*this.bgOutlineThickness,j.shadow,aD*j.shadowBlur,aC,aD*this.padding,aD*this.bgRadius,i,this.line_widths);if(j.outlineIncrease>0){this.image=u(this.image,this.oimage.width,this.oimage.height)}else{this.oimage=u(this.oimage,this.image.width,this.image.height)}}}if(this.image){this.w=this.image.width/aD;this.h=this.image.height/aD}this.SetDraw(j);j.txtOpt=!!this.image}};b.SetFont=function(j,aD,aC,i){this.textFont=j;this.colour=aD;this.bgColour=aC;this.bgOutline=i;this.Measure(this.tc.ctxt,this.tc)};b.SetWeight=function(aC){var j=this.tc,aE=j.weightMode.split(/[, ]/),i,aD,aF=aC.length;if(!this.text.length){return}this.weighted=true;for(aD=0;aD<aF;++aD){i=aE[aD]||"size";if("both"==i){this.Weight(aC[aD],j.ctxt,j,"size",j.min_weight[aD],j.max_weight[aD],aD);this.Weight(aC[aD],j.ctxt,j,"colour",j.min_weight[aD],j.max_weight[aD],aD)}else{this.Weight(aC[aD],j.ctxt,j,i,j.min_weight[aD],j.max_weight[aD],aD)}}this.Measure(j.ctxt,j)};b.Weight=function(aC,aH,aD,j,aG,aE,aF){aC=isNaN(aC)?1:aC;var i=(aC-aG)/(aE-aG);if("colour"==j){this.colour=g(aD,i,aF)}else{if("bgcolour"==j){this.bgColour=g(aD,i,aF)}else{if("bgoutline"==j){this.bgOutline=g(aD,i,aF)}else{if("size"==j){if(aD.weightSizeMin>0&&aD.weightSizeMax>aD.weightSizeMin){this.textHeight=aD.weightSize*(aD.weightSizeMin+(aD.weightSizeMax-aD.weightSizeMin)*i)}else{this.textHeight=q(1,aC*aD.weightSize)}}}}}};b.SetShadowColourFixed=function(aC,j,i){aC.shadowColor=j};b.SetShadowColourAlpha=function(aC,j,i){aC.shadowColor=S(j,i)};b.DrawText=function(aE,aH,aD){var aI=this.tc,aG=this.x,aF=this.y,aJ=this.sc,j,aC;aE.globalAlpha=this.alpha;aE.fillStyle=this.colour;aI.shadow&&this.SetShadowColour(aE,aI.shadow,this.alpha);aE.font=this.font;aG+=aH/aJ;aF+=(aD/aJ)-(this.h/2);for(j=0;j<this.text.length;++j){aC=aG-(this.line_widths[j]/2);aE.setTransform(aJ,0,0,aJ,aJ*aC,aJ*aF);aE.fillText(this.text[j],0,0);aF+=this.textHeight}};b.DrawImage=function(aE,aL,aD,aG){var aI=this.x,aF=this.y,aM=this.sc,j=aG||this.image,aJ=this.w,aC=this.h,aH=this.alpha,aK=this.shadow;aE.globalAlpha=aH;aK&&this.SetShadowColour(aE,aK,aH);aI+=(aL/aM)-(aJ/2);aF+=(aD/aM)-(aC/2);aE.setTransform(aM,0,0,aM,aM*aI,aM*aF);aE.drawImage(j,0,0,aJ,aC)};b.DrawImageIE=function(aE,aI,aD){var j=this.image,aJ=this.sc,aH=j.width=this.w*aJ,aC=j.height=this.h*aJ,aG=(this.x*aJ)+aI-(aH/2),aF=(this.y*aJ)+aD-(aC/2);aE.setTransform(1,0,0,1,0,0);aE.globalAlpha=this.alpha;aE.drawImage(j,aG,aF)};b.Calc=function(i,aC){var j,aF=this.tc,aE=aF.minBrightness,aD=aF.maxBrightness,aG=aF.max_radius;j=i.xform(this.position);this.xformed=j;j=T(aF,j,aF.stretchX,aF.stretchY);this.x=j.x;this.y=j.y;this.z=j.z;this.sc=j.w;this.alpha=aC*ap(aE+(aD-aE)*(aG-this.z)/(2*aG),0,1)};b.UpdateActive=function(aH,aC,aF){var aE=this.outline,j=this.w,aD=this.h,i=this.x-j/2,aG=this.y-aD/2;aE.Update(i,aG,j,aD,this.sc,this.z,aC,aF);return aE};b.CheckActive=function(aE,i,aD){var j=this.tc,aC=this.UpdateActive(aE,i,aD);return aC.Active(aE,j.mx,j.my)?aC:null};b.Clicked=function(aF){var j=this.a,aC=j.target,aD=j.href,i;if(aC!=""&&aC!="_self"){if(self.frames[aC]){self.frames[aC].document.location=aD}else{try{if(top.frames[aC]){top.frames[aC].document.location=aD;return}}catch(aE){}window.open(aD,aC)}return}if(B.createEvent){i=B.createEvent("MouseEvents");i.initMouseEvent("click",1,1,window,0,0,0,0,0,0,0,0,0,0,null);if(!j.dispatchEvent(i)){return}}else{if(j.fireEvent){if(!j.fireEvent("onclick")){return}}}B.location=aD};function x(aI,j,aD){var aC,aF,aH=B.getElementById(aI),aE=["id","class","innerHTML"],aG;if(!aH){throw 0}if(ae(window.G_vmlCanvasManager)){aH=window.G_vmlCanvasManager.initElement(aH);this.ie=parseFloat(navigator.appVersion.split("MSIE")[1])}if(aH&&(!aH.getContext||!aH.getContext("2d").fillText)){aF=B.createElement("DIV");for(aC=0;aC<aE.length;++aC){aF[aE[aC]]=aH[aE[aC]]}aH.parentNode.insertBefore(aF,aH);aH.parentNode.removeChild(aH);throw 0}for(aC in x.options){this[aC]=aD&&ae(aD[aC])?aD[aC]:(ae(x[aC])?x[aC]:x.options[aC])}this.canvas=aH;this.ctxt=aH.getContext("2d");this.z1=250/this.depth;this.z2=this.z1/this.zoom;this.radius=ay(aH.height,aH.width)*0.0075;this.max_weight=[];this.min_weight=[];this.textFont=this.textFont&&m(this.textFont);this.textHeight*=1;this.pulsateTo=ap(this.pulsateTo,0,1);this.minBrightness=ap(this.minBrightness,0,1);this.maxBrightness=ap(this.maxBrightness,this.minBrightness,1);this.ctxt.textBaseline="top";this.lx=(this.lock+"").indexOf("x")+1;this.ly=(this.lock+"").indexOf("y")+1;this.frozen=this.dx=this.dy=this.fixedAnim=this.touched=0;this.fixedAlpha=1;this.source=j||aI;this.transform=P.Identity();this.startTime=this.time=E();this.Animate=this.dragControl?this.AnimateDrag:this.AnimatePosition;this.animTiming=(typeof x[this.animTiming]=="function"?x[this.animTiming]:x.Smooth);if(this.shadowBlur||this.shadowOffset[0]||this.shadowOffset[1]){this.ctxt.shadowColor=this.shadow;this.shadow=this.ctxt.shadowColor;this.shadowAlpha=ah()}else{delete this.shadow}this.Load();if(j&&this.hideTags){(function(i){if(x.loaded){i.HideTags()}else{Z("load",function(){i.HideTags()},window)}})(this)}this.yaw=this.initial?this.initial[0]*this.maxSpeed:0;this.pitch=this.initial?this.initial[1]*this.maxSpeed:0;if(this.tooltip){if(this.tooltip=="native"){this.Tooltip=this.TooltipNative}else{this.Tooltip=this.TooltipDiv;if(!this.ttdiv){this.ttdiv=B.createElement("div");this.ttdiv.className=this.tooltipClass;this.ttdiv.style.position="absolute";this.ttdiv.style.zIndex=aH.style.zIndex+1;Z("mouseover",function(i){i.target.style.display="none"},this.ttdiv);B.body.appendChild(this.ttdiv)}}}else{this.Tooltip=this.TooltipNone}if(!this.noMouse&&!a[aI]){Z("mousemove",ab,aH);Z("mouseout",A,aH);Z("mouseup",az,aH);Z("touchstart",R,aH);Z("touchend",p,aH);Z("touchcancel",p,aH);Z("touchmove",au,aH);if(this.dragControl){Z("mousedown",y,aH);Z("selectstart",av,aH)}if(this.wheelZoom){Z("mousewheel",ac,aH);Z("DOMMouseScroll",ac,aH)}a[aI]=1}if(!x.started){aG=window.requestAnimationFrame=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame;x.NextFrame=aG?x.NextFrameRAF:x.NextFrameTimeout;x.interval=this.interval;x.NextFrame(this.interval);x.started=1}}O=x.prototype;O.SourceElements=function(){if(B.querySelectorAll){return B.querySelectorAll("#"+this.source)}return[B.getElementById(this.source)]};O.HideTags=function(){var aC=this.SourceElements(),j;for(j=0;j<aC.length;++j){aC[j].style.display="none"}};O.GetTags=function(){var aG=this.SourceElements(),aF,aC=[],aE,aD;for(aE=0;aE<aG.length;++aE){aF=aG[aE].getElementsByTagName("a");for(aD=0;aD<aF.length;++aD){aC.push(aF[aD])}}return aC};O.CreateTag=function(aF,j){var aI=aF.getElementsByTagName("img"),aE,aJ,aH,aC,aG,aD;j=j||[0,0,0];if(aI.length){aE=new Image;aE.src=aI[0].src;aJ=new d(this,aE,aF,j,0,0);aq(aE,aI[0],aJ,this);return aJ}aH=new aw(aF);aJ=aH.Lines();aC=this.textFont||m(W(aF,"font-family"));if(this.splitWidth){aJ=aH.SplitWidth(this.splitWidth,this.ctxt,aC,this.textHeight)}aG=this.bgColour=="tag"?W(aF,"background-color"):this.bgColour;aD=this.bgOutline=="tag"?W(aF,"color"):this.bgOutline;return new d(this,aJ,aF,j,2,this.textHeight+2,this.textColour||W(aF,"color"),aG,this.bgRadius,aD,this.bgOutlineThickness,aC,this.padding,aH.original)};O.UpdateTag=function(aC,i){var aF=this.textColour||W(i,"color"),j=this.textFont||m(W(i,"font-family")),aE=this.bgColour=="tag"?W(i,"background-color"):this.bgColour,aD=this.bgOutline=="tag"?W(i,"color"):this.bgOutline;aC.a=i;aC.title=i.title;if(aC.colour!=aF||aC.textFont!=j||aC.bgColour!=aE||aC.bgOutline!=aD){aC.SetFont(j,aF,aE,aD)}};O.Weight=function(aI){var aE=aI.length,aG,aC,aJ,aF=[],j,aD=this.weightFrom?this.weightFrom.split(/[, ]/):[null],aH=aD.length;for(aC=0;aC<aE;++aC){aF[aC]=[];for(aJ=0;aJ<aH;++aJ){aG=s(aI[aC].a,aD[aJ],this.textHeight);if(!this.max_weight[aJ]||aG>this.max_weight[aJ]){this.max_weight[aJ]=aG}if(!this.min_weight[aJ]||aG<this.min_weight[aJ]){this.min_weight[aJ]=aG}aF[aC][aJ]=aG}}for(aJ=0;aJ<aH;++aJ){if(this.max_weight[aJ]>this.min_weight[aJ]){j=1}}if(j){for(aC=0;aC<aE;++aC){aI[aC].SetWeight(aF[aC])}}};O.Load=function(){var aL=this.GetTags(),aH=[],aK,aG,aD,aC,j,aE,aJ,aF=[],aI={sphere:o,vcylinder:ai,hcylinder:ao,vring:c,hring:l};if(aL.length){aF.length=aL.length;for(aJ=0;aJ<aL.length;++aJ){aF[aJ]=aJ}this.shuffleTags&&aj(aF);aD=100*this.radiusX;aC=100*this.radiusY;j=100*this.radiusZ;this.max_radius=q(aD,q(aC,j));if(this.shapeArgs){this.shapeArgs[0]=aL.length}else{aG=this.shape.toString().split(/[(),]/);aK=aG.shift();this.shape=aI[aK]||aI.sphere;this.shapeArgs=[aL.length,aD,aC,j].concat(aG)}aE=this.shape.apply(this,this.shapeArgs);this.listLength=aL.length;for(aJ=0;aJ<aL.length;++aJ){aH.push(this.CreateTag(aL[aF[aJ]],aE[aJ]))}this.weight&&this.Weight(aH,true)}this.taglist=aH};O.Update=function(){var aL=this.GetTags(),aK=[],aF=this.taglist,aM,aJ=[],aH=[],aD,aI,aC,aG,aE;if(!this.shapeArgs){return this.Load()}if(aL.length){aC=this.listLength=aL.length;aI=aF.length;for(aG=0;aG<aI;++aG){aK.push(aF[aG]);aH.push(aG)}for(aG=0;aG<aC;++aG){for(aE=0,aM=0;aE<aI;++aE){if(aF[aE].EqualTo(aL[aG])){this.UpdateTag(aK[aE],aL[aG]);aM=aH[aE]=-1}}if(!aM){aJ.push(aG)}}for(aG=0,aE=0;aG<aI;++aG){if(aH[aE]==-1){aH.splice(aE,1)}else{++aE}}if(aH.length){aj(aH);while(aH.length&&aJ.length){aG=aH.shift();aE=aJ.shift();aK[aG]=this.CreateTag(aL[aE])}aH.sort(function(j,i){return j-i});while(aH.length){aK.splice(aH.pop(),1)}}aE=aK.length/(aJ.length+1);aG=0;while(aJ.length){aK.splice(al(++aG*aE),0,this.CreateTag(aL[aJ.shift()]))}this.shapeArgs[0]=aC=aK.length;aD=this.shape.apply(this,this.shapeArgs);for(aG=0;aG<aC;++aG){aK[aG].position=new aa(aD[aG][0],aD[aG][1],aD[aG][2])}this.weight&&this.Weight(aK)}this.taglist=aK};O.SetShadow=function(i){i.shadowBlur=this.shadowBlur;i.shadowOffsetX=this.shadowOffset[0];i.shadowOffsetY=this.shadowOffset[1]};O.Draw=function(aM){if(this.paused){return}var aG=this.canvas,aE=aG.width,aL=aG.height,aO=0,aD=(aM-this.time)*x.interval/1000,aK=aE/2+this.offsetX,aJ=aL/2+this.offsetY,aS=this.ctxt,aI,aT,aQ,aC=-1,aF=this.taglist,aP=aF.length,j=this.frontSelect,aN=(this.centreFunc==av),aH;this.time=aM;if(this.frozen&&this.drawn){return this.Animate(aE,aL,aD)}aH=this.AnimateFixed();aS.setTransform(1,0,0,1,0,0);for(aQ=0;aQ<aP;++aQ){aF[aQ].Calc(this.transform,this.fixedAlpha)}aF=z(aF,function(aU,i){return i.z-aU.z});if(aH&&this.fixedAnim.active){aI=this.fixedAnim.tag.UpdateActive(aS,aK,aJ)}else{this.active=null;for(aQ=0;aQ<aP;++aQ){aT=this.mx>=0&&this.my>=0&&this.taglist[aQ].CheckActive(aS,aK,aJ);if(aT&&aT.sc>aO&&(!j||aT.z<=0)){aI=aT;aC=aQ;aI.tag=this.taglist[aQ];aO=aT.sc}}this.active=aI}this.txtOpt||(this.shadow&&this.SetShadow(aS));aS.clearRect(0,0,aE,aL);for(aQ=0;aQ<aP;++aQ){if(!aN&&aF[aQ].z<=0){try{this.centreFunc(aS,aE,aL,aK,aJ)}catch(aR){alert(aR);this.centreFunc=av}aN=true}if(!(aI&&aI.tag==aF[aQ]&&aI.PreDraw(aS,aF[aQ],aK,aJ))){aF[aQ].Draw(aS,aK,aJ)}aI&&aI.tag==aF[aQ]&&aI.PostDraw(aS)}if(this.freezeActive&&aI){this.Freeze()}else{this.UnFreeze();this.drawn=(aP==this.listLength)}if(this.fixedCallback){this.fixedCallback(this,this.fixedCallbackTag);this.fixedCallback=null}aH||this.Animate(aE,aL,aD);aI&&aI.LastDraw(aS);aG.style.cursor=aI?this.activeCursor:"";this.Tooltip(aI,this.taglist[aC])};O.TooltipNone=function(){};O.TooltipNative=function(j,i){this.canvas.title=j&&i&&i.title?i.title:""};O.TooltipDiv=function(aE,j){var i=this,aD=i.ttdiv.style,aF=i.canvas.id,aC="none";if(aE&&j&&j.title){if(j.title!=i.ttdiv.innerHTML){aD.display=aC}i.ttdiv.innerHTML=j.title;j.title=i.ttdiv.innerHTML;if(aD.display==aC&&!i.tttimer){i.tttimer=setTimeout(function(){var aG=Y(aF);aD.display="block";aD.left=aG.x+i.mx+"px";aD.top=aG.y+i.my+24+"px";i.tttimer=null},i.tooltipDelay)}}else{aD.display=aC}};O.Transform=function(aF,i,aH){if(i||aH){var j=ad(i),aG=v(i),aI=ad(aH),aE=v(aH),aC=new P([aE,0,aI,0,1,0,-aI,0,aE]),aD=new P([1,0,0,0,aG,-j,0,j,aG]);aF.transform=aF.transform.mul(aC.mul(aD))}};O.AnimateFixed=function(){var aC,j,aE,i,aD;if(this.fadeIn){j=E()-this.startTime;if(j>=this.fadeIn){this.fadeIn=0;this.fixedAlpha=1}else{this.fixedAlpha=j/this.fadeIn}}if(this.fixedAnim){if(!this.fixedAnim.transform){this.fixedAnim.transform=this.transform}aC=this.fixedAnim,j=E()-aC.t0,aE=aC.angle,i,aD=this.animTiming(aC.t,j);this.transform=aC.transform;if(j>=aC.t){this.fixedCallbackTag=aC.tag;this.fixedCallback=aC.cb;this.fixedAnim=this.yaw=this.pitch=0}else{aE*=aD}i=P.Rotation(aE,aC.axis);this.transform=this.transform.mul(i);return(this.fixedAnim!=0)}return false};O.AnimatePosition=function(aC,aF,aD){var j=this,i=j.mx,aH=j.my,aE,aG;if(!j.frozen&&i>=0&&aH>=0&&i<aC&&aH<aF){aE=j.maxSpeed,aG=j.reverse?-1:1;j.lx||(j.yaw=((i*2*aE/aC)-aE)*aG*aD);j.ly||(j.pitch=((aH*2*aE/aF)-aE)*-aG*aD);j.initial=null}else{if(!j.initial){if(j.frozen&&!j.freezeDecel){j.yaw=j.pitch=0}else{j.Decel(j)}}}this.Transform(j,j.pitch,j.yaw)};O.AnimateDrag=function(j,aE,aD){var i=this,aC=100*aD*i.maxSpeed/i.max_radius/i.zoom;if(i.dx||i.dy){i.lx||(i.yaw=i.dx*aC/i.stretchX);i.ly||(i.pitch=i.dy*-aC/i.stretchY);i.dx=i.dy=0;i.initial=null}else{if(!i.initial){i.Decel(i)}}this.Transform(i,i.pitch,i.yaw)};O.Freeze=function(){if(!this.frozen){this.preFreeze=[this.yaw,this.pitch];this.frozen=1;this.drawn=0}};O.UnFreeze=function(){if(this.frozen){this.yaw=this.preFreeze[0];this.pitch=this.preFreeze[1];this.frozen=0}};O.Decel=function(i){var aC=i.minSpeed,aD=J(i.yaw),j=J(i.pitch);if(!i.lx&&aD>aC){i.yaw=aD>i.z0?i.yaw*i.decel:0}if(!i.ly&&j>aC){i.pitch=j>i.z0?i.pitch*i.decel:0}};O.Zoom=function(i){this.z2=this.z1*(1/i);this.drawn=0};O.Clicked=function(aC){var i=this.active;try{if(i&&i.tag){if(this.clickToFront===false||this.clickToFront===null){i.tag.Clicked(aC)}else{this.TagToFront(i.tag,this.clickToFront,function(){i.tag.Clicked(aC)},true)}}}catch(j){}};O.Wheel=function(j){var aC=this.zoom+this.zoomStep*(j?1:-1);this.zoom=ay(this.zoomMax,q(this.zoomMin,aC));this.Zoom(this.zoom)};O.BeginDrag=function(i){this.down=Q(i,this.canvas);i.cancelBubble=true;i.returnValue=false;i.preventDefault&&i.preventDefault()};O.Drag=function(aE,aD){if(this.dragControl&&this.down){var aC=this.dragThreshold*this.dragThreshold,j=aD.x-this.down.x,i=aD.y-this.down.y;if(this.dragging||j*j+i*i>aC){this.dx=j;this.dy=i;this.dragging=1;this.down=aD}}};O.EndDrag=function(){var i=this.dragging;this.dragging=this.down=null;return i};O.Pause=function(){this.paused=true};O.Resume=function(){this.paused=false};O.SetSpeed=function(j){this.initial=j;this.yaw=j[0]*this.maxSpeed;this.pitch=j[1]*this.maxSpeed};O.FindTag=function(aC){if(!ae(aC)){return null}ae(aC.index)&&(aC=aC.index);if(!G(aC)){return this.taglist[aC]}var aD,aE,j;if(ae(aC.id)){aD="id",aE=aC.id}else{if(ae(aC.text)){aD="innerText",aE=aC.text}}for(j=0;j<this.taglist.length;++j){if(this.taglist[j].a[aD]==aE){return this.taglist[j]}}};O.RotateTag=function(aK,aD,aJ,i,aH,aC){var aI=aK.xformed,aF=new aa(aI.x,aI.y,aI.z),aE=af(aJ,aD),j=aF.angle(aE),aG=aF.cross(aE).unit();if(j==0){this.fixedCallbackTag=aK;this.fixedCallback=aH}else{this.fixedAnim={angle:-j,axis:aG,t:i,t0:E(),cb:aH,tag:aK,active:aC}}};O.TagToFront=function(i,aC,aD,j){this.RotateTag(i,0,0,aC,aD,j)};x.Start=function(aC,i,j){x.tc[aC]=new x(aC,i,j)};function at(i,j){x.tc[j]&&x.tc[j][i]()}x.Linear=function(i,j){return j/i};x.Smooth=function(i,j){return 0.5-v(j*Math.PI/i)/2};x.Pause=function(i){at("Pause",i)};x.Resume=function(i){at("Resume",i)};x.Reload=function(i){at("Load",i)};x.Update=function(i){at("Update",i)};x.SetSpeed=function(j,i){if(G(i)&&x.tc[j]&&!isNaN(i[0])&&!isNaN(i[1])){x.tc[j].SetSpeed(i);return true}return false};x.TagToFront=function(j,i){if(!G(i)){return false}i.lat=i.lng=0;return x.RotateTag(j,i)};x.RotateTag=function(aC,i){if(G(i)&&x.tc[aC]){if(isNaN(i.time)){i.time=500}var j=x.tc[aC].FindTag(i);if(j){x.tc[aC].RotateTag(j,i.lat,i.lng,i.time,i.callback,i.active);return true}}return false};x.Delete=function(i){delete a[i];delete x.tc[i]};x.NextFrameRAF=function(){requestAnimationFrame(D)};x.NextFrameTimeout=function(i){setTimeout(M,i)};x.tc={};x.options={z1:20000,z2:20000,z0:0.0002,freezeActive:false,freezeDecel:false,activeCursor:"pointer",pulsateTo:1,pulsateTime:3,reverse:false,depth:0.5,maxSpeed:0.05,minSpeed:0,decel:0.95,interval:20,minBrightness:0.1,maxBrightness:1,outlineColour:"#ffff99",outlineThickness:2,outlineOffset:5,outlineMethod:"outline",outlineRadius:0,textColour:"#ff99ff",textHeight:15,textFont:"Helvetica, Arial, sans-serif",shadow:"#000",shadowBlur:0,shadowOffset:[0,0],initial:null,hideTags:true,zoom:1,weight:false,weightMode:"size",weightFrom:null,weightSize:1,weightSizeMin:null,weightSizeMax:null,weightGradient:{0:"#f00",0.33:"#ff0",0.66:"#0f0",1:"#00f"},txtOpt:true,txtScale:2,frontSelect:false,wheelZoom:true,zoomMin:0.3,zoomMax:3,zoomStep:0.05,shape:"sphere",lock:null,tooltip:null,tooltipDelay:300,tooltipClass:"tctooltip",radiusX:1,radiusY:1,radiusZ:1,stretchX:1,stretchY:1,offsetX:0,offsetY:0,shuffleTags:false,noSelect:false,noMouse:false,imageScale:1,paused:false,dragControl:false,dragThreshold:4,centreFunc:av,splitWidth:0,animTiming:"Smooth",clickToFront:false,fadeIn:0,padding:0,bgColour:null,bgRadius:0,bgOutline:null,bgOutlineThickness:0,outlineIncrease:4};for(K in x.options){x[K]=x.options[K]}window.TagCanvas=x;jQuery.fn.tagcanvas=function(j,i){var aC={pause:function(){ak(this).each(function(){at("Pause",ak(this)[0].id)})},resume:function(){ak(this).each(function(){at("Resume",ak(this)[0].id)})},reload:function(){ak(this).each(function(){at("Load",ak(this)[0].id)})},update:function(){ak(this).each(function(){at("Update",ak(this)[0].id)})},tagtofront:function(){ak(this).each(function(){x.TagToFront(ak(this)[0].id,i)})},rotatetag:function(){ak(this).each(function(){x.RotateTag(ak(this)[0].id,i)})},"delete":function(){ak(this).each(function(){x.Delete(ak(this)[0].id)})},setspeed:function(){ak(this).each(function(){x.SetSpeed(ak(this)[0].id,i)})}};if(typeof j=="string"&&aC[j]){aC[j].apply(this);return this}else{x.jquery=1;ak(this).each(function(){x.Start(ak(this)[0].id,i,j)});return x.started}};Z("load",function(){x.loaded=1},window)})(jQuery);
Index: /extensions/see_photos_by_user/js/see.js
===================================================================
--- /extensions/see_photos_by_user/js/see.js	(revision 30403)
+++ /extensions/see_photos_by_user/js/see.js	(revision 30403)
@@ -0,0 +1,39 @@
+$(function(){
+ 
+var textcolor;
+var outline;
+$('.seepbu').each(function(){
+    
+    /*var weight = $(this).data('weight');
+    if(weight>5){$(this).parent().addClass('color1').css('color:red !important')
+    textcolor = '#ffffff';
+    outline ='#ffffff';
+    }else{
+    textcolor = 'red';
+    outline ='#ffffff';
+    }*/
+    
+    var color = $(this).data('color');
+    console.log(color);
+    textcolor = color;
+    outline =color;
+    
+});
+ 
+if( ! $('#myCanvas').tagcanvas({
+    textColour: textcolor,
+    outlineColour: outline,
+    outlineThickness : 1,
+    textHeight: 16,
+    maxSpeed : 0.05,
+    depth : 0.75
+    //dragControl:true,
+    //shape: "sphere"
+  })) {
+    // TagCanvas failed to load
+    $('#myCanvasContainer').hide();
+  }
+});
+
+
+
Index: /extensions/see_photos_by_user/language/en_UK/plugin.lang.php
===================================================================
--- /extensions/see_photos_by_user/language/en_UK/plugin.lang.php	(revision 30402)
+++ /extensions/see_photos_by_user/language/en_UK/plugin.lang.php	(revision 30403)
@@ -18,3 +18,4 @@
 $lang['Show'] = 'Show';
 $lang['Photos by user'] = 'Photos by user';
+$lang['You must use colorpicker'] = 'You must use colorpicker';
 ?>
Index: /extensions/see_photos_by_user/language/fr_FR/plugin.lang.php
===================================================================
--- /extensions/see_photos_by_user/language/fr_FR/plugin.lang.php	(revision 30402)
+++ /extensions/see_photos_by_user/language/fr_FR/plugin.lang.php	(revision 30403)
@@ -18,3 +18,4 @@
 $lang['Show'] = 'Montrer';
 $lang['Photos by user'] = 'Photos par utilisateur';
+$lang['You must use colorpicker'] = 'Vous devez utiliser le colorpicker';
 ?>
Index: /extensions/see_photos_by_user/main.inc.php
===================================================================
--- /extensions/see_photos_by_user/main.inc.php	(revision 30402)
+++ /extensions/see_photos_by_user/main.inc.php	(revision 30403)
@@ -1,171 +1,147 @@
 <?php
+
 /*
-Plugin Name: See photos by user
-Version: auto
-Description: See photos by user
-Plugin URI: http://piwigo.org/ext/extension_view.php?eid=723
-Author: ddtddt
-Author URI: 
-*/
+  Plugin Name: See photos by user
+  Version: auto
+  Description: See photos by user
+  Plugin URI: http://piwigo.org/ext/extension_view.php?eid=723
+  Author: ddtddt
+  Author URI:
+ */
 
-if (!defined('PHPWG_ROOT_PATH')) die('Hacking attempt!');
+if (!defined('PHPWG_ROOT_PATH'))
+    die('Hacking attempt!');
 
-define('SPBA_DIR' , basename(dirname(__FILE__)));
-define('SPBA_PATH' , PHPWG_PLUGINS_PATH . SPBA_DIR . '/');
+define('SPBA_DIR', basename(dirname(__FILE__)));
+define('SPBA_PATH', PHPWG_PLUGINS_PATH . SPBA_DIR . '/');
 load_language('plugin.lang', SPBA_PATH);
+
+include_once(SPBA_PATH . 'include/function.see.inc.php');
 
 global $conf;
 $showSPBU = $conf['see_photos_by_user_show'];
 
-if (in_array($showSPBU, array(1,3)))
-{
-add_event_handler('blockmanager_apply' , 'add_link_SPBA');
+/*init plugin - filter http*/
+add_event_handler('loc_end_section_init', 'section_init_SPBA');
+
+function section_init_SPBA() {
+    /*init plugin lang*/
+    load_language('plugin.lang', SPBA_PATH);
+    load_language('lang', PHPWG_ROOT_PATH . 'local/', array('no_fallback' => true, 'local' => true));
+    
+    global $tokens, $conf, $template;
+  if(strpbrk('user-', $_SERVER['REQUEST_URI'])!=false){
+    $testa = explode('user-', $_SERVER['REQUEST_URI']);
+    if(!empty($testa[1])){
+        $testd = explode('-', $testa[1]);
+            if(is_numeric($testd[0])){
+                $username= see_username($testd[0]);
+                $result=see_userlist_nb_photo();
+                $userok = array();
+                while ($row = pwg_db_fetch_assoc($result)) {
+                    $userok[] = $row['id'];
+                }
+                if (in_array($testd[0], $userok)) {
+                    $me = 'user-' . $testd[0].'-'.$username;
+                    $page['section_title'] = '<a href="' . get_absolute_root_url() . '">' . l10n('Home') . '</a>' . $conf['level_separator'] . '<a href="' . get_absolute_root_url() . 'index.php?/user-">' . l10n('Users').'</a>'. $conf['level_separator'] . '<a href="' . get_absolute_root_url() . 'index.php?/' . $me . '">'.$row['username'] . '</a>';
+                } else {
+                    $me = 'user-';
+                    $page['section_title'] = '<a href="' . get_absolute_root_url() . '">' . l10n('Home') . '</a>' . $conf['level_separator'] . '<a href="' . get_absolute_root_url() . 'index.php?/user-">' . l10n('Users').'</a>';
+                }
+            }else{
+                $me = 'user-';
+            }
+    }else{
+        $me = 'user-';
+    }
+    if(isset($me)){
+        if (in_array($me, $tokens))
+            include(SPBA_PATH . 'pagespba.php');
+    }
+  }
+  
+  //$template->assign('SPBA2', 'toto');
+  $template->set_filename('SPBA', realpath(SPBA_PATH . 'pagespba.tpl'));
+  $template->assign_var_from_handle('CONTENT', 'SPBA'); //2.6
+  
 }
-function add_link_SPBA($menu_ref_arr)
- {
-  global $conf, $user;
-  $menu = & $menu_ref_arr[0];
-  if (($block = $menu->get_block('mbSpecials')) != null)
-   {
-   load_language('plugin.lang', SPBA_PATH);
-   $position = (isset($conf['SPBA_position']) and is_numeric($conf['SPBA_position'])) ? $conf['SPBA_position'] : count($block->data)+1;
-   array_splice
-	 ($block->data, $position-1, 0, array
-	  ('user-' =>
-      array
-			 (
-			 'URL' => make_index_url(array('section' => 'user-')),
-			 'TITLE' => l10n('See photos by user'),
-			 'NAME' => l10n('See photos by user')
-       )
-    )
-   );
-   }
- }
-
-add_event_handler('loc_end_section_init', 'section_init_SPBA');
-function section_init_SPBA()
-{
- global $tokens, $conf;
-$testa = explode('user-', $_SERVER['REQUEST_URI']); 
-if (!empty ($testa[1]))
-{
-$testd= explode('/', $testa[1]);
-$query = '
-SELECT UT.id, UT.username, COUNT(DISTINCT(IT.id)) AS PBU, IT.id
- FROM ' . USERS_TABLE . ' as UT
- INNER JOIN '.IMAGES_TABLE.' AS IT ON IT.added_by = UT.id
- INNER JOIN '.IMAGE_CATEGORY_TABLE.' AS ic ON IT.id = ic.image_id
-  '.get_sql_condition_FandF
-  (
-    array
-      (
-        'forbidden_categories' => 'category_id',
-        'visible_categories' => 'category_id',
-        'visible_images' => 'id'
-      ),
-    'WHERE'
-  ).'
- GROUP BY IT.added_by
- HAVING PBU >'.$conf['see_photos_by_user_nbphotos'].'
- ORDER BY '.$conf['see_photos_by_user_order'].'
- LIMIT '.$conf['see_photos_by_user_limit'].';';
-
-$result = pwg_query($query);
-$userok = array();
-while ($row = pwg_db_fetch_assoc($result))
- {
-  $userok[] = $row['username'];
+/*Schow link in menu*/
+if (in_array($showSPBU, array(1, 3))) {
+    add_event_handler('blockmanager_apply', 'add_link_SPBA');
 }
 
-if (in_array($testd[0], $userok))
-{
-$me = 'user-'.$testd[0];
-}
-else
-{
- $redirect_url = get_root_url().'index.php?/categories';
- redirect($redirect_url);
-}
-}
-else
-{$me = 'user-';}
-
-if (in_array($me, $tokens))
- include(SPBA_PATH . 'pagespba.php');
+function add_link_SPBA($menu_ref_arr) {
+    global $conf, $user;
+    $menu = & $menu_ref_arr[0];
+    if (($block = $menu->get_block('mbSpecials')) != null) {
+        load_language('plugin.lang', SPBA_PATH);
+        $position = (isset($conf['SPBA_position']) and is_numeric($conf['SPBA_position'])) ? $conf['SPBA_position'] : count($block->data) + 1;
+        array_splice
+                ($block->data, $position - 1, 0, array
+            ('user-' =>
+            array
+                (
+                'URL' => make_index_url(array('section' => 'user-')),
+                'TITLE' => l10n('See photos by user'),
+                'NAME' => l10n('See photos by user')
+            )
+                )
+        );
+    }
 }
 
-if (in_array($showSPBU, array(2,3,4)))
-{
-add_event_handler('blockmanager_register_blocks', 'register_users_menubar_blocks');
-add_event_handler('blockmanager_apply', 'users_apply');
-}
-function register_users_menubar_blocks( $menu_ref_arr )
-{
-  $menu = & $menu_ref_arr[0];
-  if ($menu->get_id() != 'menubar')
-    return;
-  $menu->register_block( new RegisteredBlock( 'mbUsers','Users',('See photos by user')));
+
+/*schow users menu*/
+if (in_array($showSPBU, array(2, 3, 4))) {
+    add_event_handler('blockmanager_register_blocks', 'register_users_menubar_blocks');
+    add_event_handler('blockmanager_apply', 'users_apply');
 }
 
-function users_apply($menu_ref_arr)
-{
-global $template, $conf, $user;
-$menu = & $menu_ref_arr[0];
-load_language('plugin.lang', SPBA_PATH);
-load_language('lang', PHPWG_ROOT_PATH.'local/', array('no_fallback'=>true, 'local'=>true));
-
-$userslistemenu1 = pwg_query('
-SELECT UT.id, UT.username, COUNT(DISTINCT(IT.id)) AS PBU, IT.id
- FROM ' . USERS_TABLE . ' as UT
- INNER JOIN '.IMAGES_TABLE.' AS IT ON IT.added_by = UT.id
- INNER JOIN '.IMAGE_CATEGORY_TABLE.' AS ic ON IT.id = ic.image_id
-  '.get_sql_condition_FandF
-  (
-    array
-      (
-        'forbidden_categories' => 'category_id',
-        'visible_categories' => 'category_id',
-        'visible_images' => 'id'
-      ),
-    'WHERE'
-  ).'
- GROUP BY IT.added_by
- HAVING PBU >'.$conf['see_photos_by_user_nbphotos'].'
- ORDER BY '.$conf['see_photos_by_user_order'].'
- LIMIT '.$conf['see_photos_by_user_limit'].';');
-
-if (pwg_db_num_rows($userslistemenu1)) {	
- while ($userslistemenu = pwg_db_fetch_assoc($userslistemenu1))
-	{
-    $items = array(
-      'USERSSPBYL' => $userslistemenu['username'],
-	  'USERSSPBYLC' => $userslistemenu['PBU'],
-		);
-		
-	$template->append('userslistemenu1', $items);
-  	}
-}
-$linkusersliste = get_root_url().'index.php?/user-';
-$template->assign('USERSSPBY', $linkusersliste);
-   
- if (($block = $menu->get_block( 'mbUsers' )) != null) {
- $template->set_template_dir(SPBA_PATH);
- $block->template = 'menubar_users.tpl';}
+function register_users_menubar_blocks($menu_ref_arr) {
+    $menu = & $menu_ref_arr[0];
+    if ($menu->get_id() != 'menubar')
+        return;
+    $menu->register_block(new RegisteredBlock('mbUsers', 'Users', ('See photos by user')));
 }
 
+function users_apply($menu_ref_arr) {
+    global $template, $conf, $user;
+    $menu = & $menu_ref_arr[0];
+
+    $userslistemenu1 = see_userlist_nb_photo();
+
+    if (pwg_db_num_rows($userslistemenu1)) {
+        while ($userslistemenu = pwg_db_fetch_assoc($userslistemenu1)) {
+            $items = array(
+                'USERSSPBYLID' => $userslistemenu['id'],
+                'USERSSPBYL' => $userslistemenu['username'],
+                'USERSSPBYLC' => $userslistemenu['PBU'],
+            );
+
+            $template->append('userslistemenu1', $items);
+        }
+    }
+    $linkusersliste = get_root_url() . 'index.php?/user-';
+    $template->assign('USERSSPBY', $linkusersliste);
+
+    if (($block = $menu->get_block('mbUsers')) != null) {
+        $template->set_template_dir(SPBA_PATH);
+        $block->template = 'menubar_users.tpl';
+    }
+}
+
+/*Add admin menu*/
 add_event_handler('get_admin_plugin_menu_links', 'SPBA_admin_menu');
-function SPBA_admin_menu($menu)
-{
-load_language('plugin.lang', SPBA_PATH);
-  array_push(
-    $menu,
-    array(
-      'NAME' => l10n('Photos by user'),
-      'URL' => get_admin_plugin_menu_link(SPBA_PATH . 'admin.php')
-      )
+
+function SPBA_admin_menu($menu) {
+    load_language('plugin.lang', SPBA_PATH);
+    array_push(
+            $menu, array(
+        'NAME' => l10n('Photos by user'),
+        'URL' => get_admin_plugin_menu_link(SPBA_PATH . 'admin.php')
+            )
     );
-  
-  return $menu;
+
+    return $menu;
 }
 
Index: /extensions/see_photos_by_user/maintain.inc.php
===================================================================
--- /extensions/see_photos_by_user/maintain.inc.php	(revision 30402)
+++ /extensions/see_photos_by_user/maintain.inc.php	(revision 30403)
@@ -1,41 +1,37 @@
 <?php
 
-if (!defined('PHPWG_ROOT_PATH')) die('Hacking attempt!');
+if (!defined('PHPWG_ROOT_PATH'))
+    die('Hacking attempt!');
 
-function plugin_activate()
-{
+function plugin_activate() {
 
-global $conf;
+    global $conf;
 
-if (!isset($conf['see_photos_by_user_nbphotos']))
- {
- conf_update_param('see_photos_by_user_nbphotos', '0');
- }
-if (!isset($conf['see_photos_by_user_limit']))
- {
- conf_update_param('see_photos_by_user_limit', '1000');
- }
-if (!isset($conf['see_photos_by_user_order']))
- {
- conf_update_param('see_photos_by_user_order', 'username ASC');
- }
-if (!isset($conf['see_photos_by_user_show']))
- {
- conf_update_param('see_photos_by_user_show', '1');
- }
+    if (!isset($conf['see_photos_by_user_nbphotos'])) {
+        conf_update_param('see_photos_by_user_nbphotos', '0');
+    }
+    if (!isset($conf['see_photos_by_user_limit'])) {
+        conf_update_param('see_photos_by_user_limit', '1000');
+    }
+    if (!isset($conf['see_photos_by_user_order'])) {
+        conf_update_param('see_photos_by_user_order', 'username ASC');
+    }
+    if (!isset($conf['see_photos_by_user_show'])) {
+        conf_update_param('see_photos_by_user_show', '1');
+    }
+    if (!isset($conf['see_photos_by_user_color'])) {
+        conf_update_param('see_photos_by_user_color', '#ffffff');
+    }
 }
 
-function plugin_install()
-{	
+function plugin_install() {
 }
 
-function plugin_uninstall()
-{	
-conf_delete_param('see_photos_by_user_nbphotos');
-conf_delete_param('see_photos_by_user_limit');
-conf_delete_param('see_photos_by_user_order');
-conf_delete_param('see_photos_by_user_show');
+function plugin_uninstall() {
+    conf_delete_param('see_photos_by_user_nbphotos');
+    conf_delete_param('see_photos_by_user_limit');
+    conf_delete_param('see_photos_by_user_order');
+    conf_delete_param('see_photos_by_user_show');
+    conf_delete_param('see_photos_by_user_color');
 }
-
-
 ?>
Index: /extensions/see_photos_by_user/menubar_users.tpl
===================================================================
--- /extensions/see_photos_by_user/menubar_users.tpl	(revision 30402)
+++ /extensions/see_photos_by_user/menubar_users.tpl	(revision 30403)
@@ -1,8 +1,8 @@
-<dt>{'Users'|@translate}</dt>
+<dt><a href = "{$USERSSPBY}">{'Users'|@translate}</a></dt>
 <dd>
  <ul>
   {foreach from=$userslistemenu1 item=userslistemenu}
   <li>
-  <a href = "{$USERSSPBY}{$userslistemenu.USERSSPBYL}">{$userslistemenu.USERSSPBYL} <span class="menuInfoCat">[{$userslistemenu.USERSSPBYLC}]</span></a><br>
+  <a href = "{$USERSSPBY}{$userslistemenu.USERSSPBYLID}-{$userslistemenu.USERSSPBYL}">{$userslistemenu.USERSSPBYL} <span class="menuInfoCat">[{$userslistemenu.USERSSPBYLC}]</span></a><br>
   </li>
   {/foreach}
Index: /extensions/see_photos_by_user/pagespba.php
===================================================================
--- /extensions/see_photos_by_user/pagespba.php	(revision 30402)
+++ /extensions/see_photos_by_user/pagespba.php	(revision 30403)
@@ -1,123 +1,152 @@
 <?php
-load_language('plugin.lang', SPBA_PATH);
-
 global $page, $conf, $user, $template;
 
-$testa = explode('user-', $_SERVER['REQUEST_URI']); 
-if (!empty ($testa[1]))
-{
-$testd= explode('/', $testa[1]);
-$me = 'user-'.$testd[0];
-$page['section'] = $me;
-$page['section_title'] =  '<a href="'.get_absolute_root_url().'">'.l10n('Home').'</a>'.$conf['level_separator']. '<a href="'.get_absolute_root_url().'index.php?/'.$me.'">'.l10n('Users').'-'.$testd[0].'</a>';
+ /*test URL*/
 
-$query = '
-SELECT id, username
- FROM ' . USERS_TABLE . '
- WHERE username = \''.$testd[0].'\'
-;';
-$result = pwg_query($query);
-$row = pwg_db_fetch_assoc($result);
-$coutantuser = $row['id'];
-  $template->assign(
-    'gestionB',
-    array(
-      'USERUSBU' => $testd[0],
-      ));
+$testa = explode('user-', $_SERVER['REQUEST_URI']);
+if(!empty($testa[1])){
+    $testd = explode('-', $testa[1]);
+    if(is_numeric($testd[0])){
+        
+        $username= see_username($testd[0]);
+        
+        
+        $me = 'user-' . $testd[0].'-'.$username;
+        
+        $page['section'] = $me;
+        $page['section_title'] = '<a href="' . get_absolute_root_url() . '">' . l10n('Home') . '</a>' . $conf['level_separator'] . '<a href="' . get_absolute_root_url() . 'index.php?/user-">' . l10n('Users').'</a>'. $conf['level_separator'] . '<a href="' . get_absolute_root_url() . 'index.php?/' . $me . '">'.$username. '</a>';
 
-$query = '
-SELECT DISTINCT(id)
- FROM '.IMAGES_TABLE.'
- INNER JOIN '.IMAGE_CATEGORY_TABLE.' AS ic ON id = ic.image_id
- '.get_sql_condition_FandF
-  (
-    array
-      (
-        'forbidden_categories' => 'category_id',
-        'visible_categories' => 'category_id',
-        'visible_images' => 'id'
-      ),
-    'WHERE'
-  ).'
- AND added_by = \''.$row['id'].'\'
- '.$conf['order_by'].'
-;';
-$page = array_merge
-(
- $page,
- array
- (
-'title' => '<a href="'.duplicate_index_url(array('start'=>0)).'">'.$me.'</a>',
-'items' => array_from_query($query, 'id'),
- )
-);
-}
-else
-{
-$me = 'user-';
-$page['section'] = $me;
-$page['section_title'] =  '<a href="'.get_absolute_root_url().'">'.l10n('Home').'</a>'.$conf['level_separator']. '<a href="'.get_absolute_root_url().'index.php?/'.$me.'">'.l10n('Users').'</a>';
+        $template->assign(
+          'gestionB', array(
+          'USERUSBU' => $username,
+        ));
+
+        $query = '
+        SELECT DISTINCT(id)
+         FROM ' . IMAGES_TABLE . '
+        INNER JOIN ' . IMAGE_CATEGORY_TABLE . ' AS ic ON id = ic.image_id
+        ' . get_sql_condition_FandF
+                        (
+                        array
+                    (
+                    'forbidden_categories' => 'category_id',
+                    'visible_categories' => 'category_id',
+                    'visible_images' => 'id'
+                        ), 'WHERE'
+                ) . '
+        AND added_by = \'' . $testd[0] . '\'
+        ' . $conf['order_by'] . '
+        ;';
+        $page = array_merge
+                (
+                $page, array
+            (
+            'title' => '<a href="' . duplicate_index_url(array('start' => 0)) . '">' . $me . '</a>',
+            'items' => array_from_query($query, 'id'),
+                )
+        );
+    }else{
+        show_users_cloud();
+    }
+}else{
+    show_users_cloud();
 }
 $showSPBU = $conf['see_photos_by_user_show'];
+/*fin gestion URL*/
 
-if (in_array($showSPBU, array(1,2,3,5)))
-{
+function show_users_cloud(){
+    /*users cloud*/
+// template vars
+    global $page, $conf, $user, $template;
+    
+     $me = 'user-';
+    $page['section'] = $me;
+    $page['section_title'] = '<a href="' . get_absolute_root_url() . '">' . l10n('Home') . '</a>' . $conf['level_separator'] . '<a href="' . get_absolute_root_url() . 'index.php?/' . $me . '">' . l10n('Users') . '</a>';        
+    
+$template->assign(
+   'gestionC', array(
+    'SPBA_PATH'=> get_root_url() . SPBA_PATH,
+  ));
+
+ $userslistecloud1 = pwg_query('
+SELECT UT.id, UT.username, COUNT(DISTINCT(IT.id)) AS PBU
+ FROM ' . USERS_TABLE . ' as UT
+ INNER JOIN ' . IMAGES_TABLE . ' AS IT ON IT.added_by = UT.id
+ INNER JOIN ' . IMAGE_CATEGORY_TABLE . ' AS ic ON IT.id = ic.image_id
+  ' . get_sql_condition_FandF
+                    (
+                    array
+                (
+                'forbidden_categories' => 'category_id',
+                'visible_categories' => 'category_id',
+                'visible_images' => 'id'
+                    ), 'WHERE'
+            ) . '
+ GROUP BY IT.added_by
+ HAVING PBU >' . $conf['see_photos_by_user_nbphotos'] . '
+ ORDER BY ' . $conf['see_photos_by_user_order'] . '
+ LIMIT ' . $conf['see_photos_by_user_limit'] . ';');
+
+    if (pwg_db_num_rows($userslistecloud1)) {
+        while ($userslistecloud = pwg_db_fetch_assoc($userslistecloud1)) {
+            $items = array(
+                'USERSSPBYLID' => $userslistecloud['id'],
+                'USERSSPBYL' => $userslistecloud['username'],
+                'USERSSPBYLC' => $userslistecloud['PBU'],
+                'USERSSPBYCOLOR' => $conf['see_photos_by_user_color'],
+            );
+
+            $template->append('userslistecloud1', $items);
+        }
+    }
+    $linkusersliste = get_root_url() . 'index.php?/user-';
+    $template->assign('USERSSPBY', $linkusersliste);
+
+}
+
+
+/*select box*/
+if (in_array($showSPBU, array(1, 2, 3, 5))) {
 //read auteur list
-$groups = array();
+    $groups = array();
+    $result = see_userlist_nb_photo();
 
-$query = '
-SELECT UT.id, UT.username, COUNT(DISTINCT(IT.id)) AS PBU, IT.id
- FROM ' . USERS_TABLE . ' as UT
- INNER JOIN '.IMAGES_TABLE.' AS IT ON IT.added_by = UT.id
- INNER JOIN '.IMAGE_CATEGORY_TABLE.' AS ic ON IT.id = ic.image_id
-  '.get_sql_condition_FandF
-  (
-    array
-      (
-        'forbidden_categories' => 'category_id',
-        'visible_categories' => 'category_id',
-        'visible_images' => 'id'
-      ),
-    'WHERE'
-  ).'
- GROUP BY IT.added_by
- HAVING PBU >'.$conf['see_photos_by_user_nbphotos'].'
- ORDER BY '.$conf['see_photos_by_user_order'].'
- LIMIT '.$conf['see_photos_by_user_limit'].';';
+    while ($row = pwg_db_fetch_assoc($result)) {
+        $groups[$row['id']] = $row['username'] . ' (' . $row['PBU'] . ')';
+    }
+    $selected = 0;
+    if (empty($testd[0])) {
+        $options['b'] = l10n('select user');
+    } else {
+        $options['b'] = l10n('select other user');
+    }
+    $options['a'] = '----------------------';
 
-$result = pwg_query($query);
+    foreach ($groups as $metalist => $metalist2) {
+        $options[$metalist] = $metalist2;
+    }
+    $template->assign(
+            'gestionA', array(
+        'OPTIONS' => $options,
+        'SELECTED' => $selected
+    ));
 
-while ($row = pwg_db_fetch_assoc($result))
- {
-  $groups[$row['username']] = $row['username'].' ('.$row['PBU'].')';
-}
-  $selected = 0;
-  if (empty ($testd[0]))
-	{$options[] = l10n('select user');}
- else
-  {$options[] = l10n('select other user');}
-	$options['a'] = '----------------------';
-
-  foreach ($groups as $metalist => $metalist2)
-	{
-   $options[$metalist] = $metalist2;
-	}
-  $template->assign(
-    'gestionA',
-    array(
-      'OPTIONS' => $options,
-      'SELECTED' => $selected
-      ));
-	
-if (isset($_POST['submitchoixauteur']))
- {
- $redirect_url = get_root_url().'index.php?/user-'.($_POST['metalist']);
- redirect($redirect_url);
- }
-
-$template->assign('SPBA2', 'toto');
-$template->set_filename('SPBA', realpath(SPBA_PATH.'pagespba.tpl'));
-$template->assign_var_from_handle('CONTENT', 'SPBA'); //2.6
-//$template->assign_var_from_handle('PLUGIN_INDEX_CONTENT_BEGIN', 'SPBA'); //2.5
+    if (isset($_POST['submitchoixauteur'])) {
+        $redirect_url = get_root_url() . 'index.php?/user-';
+        if(is_numeric($_POST['metalist'])){
+         $query = '
+    SELECT id, username
+    FROM ' . USERS_TABLE . '
+    WHERE id = \'' . $_POST['metalist'] . '\'
+    ;';
+        $result = pwg_query($query);
+        $row = pwg_db_fetch_assoc($result);
+        $username = $row['username'];
+        
+        $redirect_url .=($_POST['metalist']).'-'.$username;
+             }
+        redirect($redirect_url);
+    }
+    
 }
 ?>
Index: /extensions/see_photos_by_user/pagespba.tpl
===================================================================
--- /extensions/see_photos_by_user/pagespba.tpl	(revision 30402)
+++ /extensions/see_photos_by_user/pagespba.tpl	(revision 30403)
@@ -1,8 +1,27 @@
 {if isset ($gestionA)}
- <form method="post" >
-  {html_options name="metalist" options=$gestionA.OPTIONS selected=$gestionA.SELECTED}<input class="submit" name="submitchoixauteur" type="submit" value="{'submit'|@translate}"/>
- </form>
+    <form method="post" >
+        {html_options name="metalist" options=$gestionA.OPTIONS selected=$gestionA.SELECTED}<input class="submit" name="submitchoixauteur" type="submit" value="{'submit'|@translate}"/>
+    </form>
 {/if}
+
 {if isset ($gestionB)}
-<h1>{'User'|@translate} {$gestionB.USERUSBU}</h1>
+    <h1>{'User'|@translate} {$gestionB.USERUSBU}</h1>
 {/if}
+
+{if isset ($gestionC)}
+    {combine_script id='jquery.tagcanvas' require="jquery" load='footer' path=$gestionC.SPBA_PATH|@cat:"js/jquery.tagcanvas.min.js"}
+    {combine_script id='jquery.see' load='footer' path=$gestionC.SPBA_PATH|@cat:"js/see.js"}
+    <h1>{'select user'|@translate}</h1>
+<div id="myCanvasContainer">
+     
+ <canvas width="600" height="300" id="myCanvas">
+   <ul>
+    {foreach from=$userslistecloud1 item=userslistecloud}
+        <li>
+            <a href = "{$USERSSPBY}{$userslistecloud.USERSSPBYLID}-{$userslistecloud.USERSSPBYL}">{$userslistecloud.USERSSPBYL} <span data-color="{$userslistecloud.USERSSPBYCOLOR}" data-weight="{$userslistecloud.USERSSPBYLC}" class="menuInfoCat seepbu">[{$userslistecloud.USERSSPBYLC}]</span></a><br>
+        </li>
+     {/foreach}
+  </ul>
+ </canvas>
+</div>
+{/if}
