Index: extensions/AdminTools/include/MultiView.class.php
===================================================================
--- extensions/AdminTools/include/MultiView.class.php	(revision 25791)
+++ extensions/AdminTools/include/MultiView.class.php	(revision 25817)
@@ -212,3 +212,61 @@
     }
   }
+  
+  /**
+   * Register custom API methods
+   */
+  public static function register_ws($arr)
+  {
+    $service = &$arr[0];
+    
+    $service->addMethod(
+      'multiView.getData',
+      array('MultiView', 'ws_get_data'),
+      array(),
+      'AdminTools private method.',
+      null,
+      array('admin_only' => true, 'hidden' => true)
+      );
+  }
+  
+  /**
+   * API method
+   * Return full list of users, themes and languages
+   */
+  public static function ws_get_data($params)
+  {
+    global $conf;
+    
+    // get users
+    $query = '
+SELECT
+  '.$conf['user_fields']['id'].' AS id,
+  '.$conf['user_fields']['username'].' AS username
+FROM '.USERS_TABLE.'
+  ORDER BY CONVERT('.$conf['user_fields']['username'].', CHAR)
+;';
+    $out['users'] = array_from_query($query);
+
+    // get themes
+    include_once(PHPWG_ROOT_PATH.'admin/include/themes.class.php');
+    $themes = new themes();
+    foreach (array_keys($themes->db_themes_by_id) as $theme)
+    {
+      if (!empty($theme))
+      {
+        $out['themes'][] = $theme;
+      }
+    }
+
+    // get languages
+    foreach (get_languages() as $code => $name)
+    {
+      $out['languages'][] = array(
+        'id' => $code,
+        'name' => $name,
+        );
+    }
+    
+    return $out;
+  }
 }
Index: extensions/AdminTools/include/events.inc.php
===================================================================
--- extensions/AdminTools/include/events.inc.php	(revision 25791)
+++ extensions/AdminTools/include/events.inc.php	(revision 25817)
@@ -81,5 +81,5 @@
       );
 
-    // gets tags
+    // gets tags (full available list is loaded in ajax)
     $query = '
 SELECT id, name
@@ -89,10 +89,4 @@
 ;';
     $tag_selection = get_taglist($query);
-
-    $query = '
-SELECT id, name
-  FROM '.TAGS_TABLE.'
-;';
-    $tags = get_taglist($query, false);
 
     $tpl_vars['QUICK_EDIT'] = array(
@@ -105,5 +99,4 @@
       'date_creation_time' => substr($picture['current']['date_creation'], 11, 5),
       'tag_selection' =>      $tag_selection,
-      'tags' =>               $tags,
       );
   }
@@ -146,32 +139,4 @@
       $tpl_vars['QUICK_EDIT']['img'] = DerivativeImage::get_one(IMG_SQUARE, $image_infos)->get_url();
     }
-  }
-
-
-  // get users
-  $query = '
-SELECT
-  '.$conf['user_fields']['id'].' AS id,
-  '.$conf['user_fields']['username'].' AS username
-FROM '.USERS_TABLE.'
-  ORDER BY CONVERT('.$conf['user_fields']['username'].', CHAR)
-;';
-  $tpl_vars['USERS'] = simple_hash_from_query($query, 'id', 'username');
-
-  // get themes
-  include_once(PHPWG_ROOT_PATH.'admin/include/themes.class.php');
-  $themes = new themes();
-  foreach (array_keys($themes->db_themes_by_id) as $theme)
-  {
-    if (!empty($theme))
-    {
-      $tpl_vars['THEMES'][$theme] = $theme;
-    }
-  }
-
-  // get languages
-  foreach (get_languages() as $code => $name)
-  {
-    $tpl_vars['LANGS'][$code] = $name;
   }
 
Index: extensions/AdminTools/main.inc.php
===================================================================
--- extensions/AdminTools/main.inc.php	(revision 25791)
+++ extensions/AdminTools/main.inc.php	(revision 25817)
@@ -35,4 +35,6 @@
 add_event_handler('init', array(&$MultiView, 'init'));
 
+add_event_handler('ws_add_methods', array('MultiView', 'register_ws'));
+
 
 // +-----------------------------------------------------------------------+
Index: extensions/AdminTools/template/public_controller.js
===================================================================
--- extensions/AdminTools/template/public_controller.js	(revision 25817)
+++ extensions/AdminTools/template/public_controller.js	(revision 25817)
@@ -0,0 +1,301 @@
+var AdminTools = function($) {
+  var __this = this;
+
+  this.urlWS;
+  this.multiView;
+
+  var $ato = $('#ato_header'),
+      $ato_closed = $('#ato_header_closed'),
+      ato_height = 28;
+
+  // move to whole page down or up
+  function moveBody(dir, anim) {
+    var operator = dir=='show' ? '+=' : '-=';
+
+    if (anim) {
+      $('body').animate({'margin-top': operator+ato_height});
+
+      if ($('#the_page, [data-role="page"]').css('position')=='absolute') {
+        $('#the_page, [data-role="page"]').animate({'top': operator+ato_height});
+      }
+    }
+    else {
+      $('body').css({'margin-top': operator+ato_height});
+
+      if ($('#the_page, [data-role="page"]').css('position')=='absolute') {
+        $('#the_page, [data-role="page"]').css({'top': operator+ato_height});
+      }
+    }
+  }
+
+  // fill multiview selects
+  // data came from AJAX request or sessionStorage
+  function populateMultiView($target) {
+    if ($target.data('init')) return;
+
+    var render = function(data) {
+      var html = '';
+      $.each(data.users, function(i, user) {
+        html+= '<option value="'+ user.id +'">'+ user.username +'</option>';
+      });
+      $target.find('select[data-type="view_as"]').html(html)
+        .val(__this.multiView.view_as);
+
+      html = '';
+      $.each(data.themes, function(i, theme) {
+        html+= '<option value="'+ theme +'">'+ theme +'</option>';
+      });
+      $target.find('select[data-type="theme"]').html(html)
+        .val(__this.multiView.theme);
+
+      html = '';
+      $.each(data.languages, function(i, language) {
+        html+= '<option value="'+ language.id +'">'+ language.name +'</option>';
+      });
+      $target.find('select[data-type="lang"]').html(html)
+        .val(__this.multiView.lang);
+
+      $target.data('init', true);
+    };
+
+    if ('sessionStorage' in window && window.sessionStorage.multiView != undefined) {
+      render(JSON.parse(window.sessionStorage.multiView));
+    }
+    else {
+      $.ajax({
+        method: 'POST',
+        url: __this.urlWS + 'multiView.getData',
+        dataType: 'json',
+        success: function(data) {
+          render(data.result);
+          if ('sessionStorage' in window) {
+            window.sessionStorage.multiView = JSON.stringify(data.result);
+          }
+        },
+        error: function(xhr, text, error) {
+          alert(text + ' ' + error);
+        }
+      });
+    }
+  }
+
+  // move close button to smartpocket toolbar
+  this.initMobile = function() {
+    var $headerbar = $('div[data-role="header"] .title');
+    if ($headerbar.length == 1) {
+      $ato_closed.addClass('smartpocket');
+      $ato_closed.find('a').attr({
+        'data-iconpos':'notext',
+        'data-role':'button'
+      });
+      $headerbar.prepend($ato_closed);
+    }
+  };
+
+  // attach jquery handlers
+  this.init = function() {
+    $('body').prepend($ato); // ensure the bar is at the begining
+
+    if ('localStorage' in window) {
+      if (window.localStorage.ato_panel_open == null) {
+        window.localStorage.ato_panel_open = "true";
+      }
+
+      if (window.localStorage.ato_panel_open == "true") {
+        $ato.show();
+        moveBody('show', false);
+      }
+      else {
+        $ato_closed.show();
+      }
+    }
+    else {
+      $ato.show();
+      moveBody('show', false);
+    }
+
+    /* <!-- sub menus --> */
+    $ato.find('.parent').on({
+      'click': function() {
+        if ($(this).hasClass('multiview')) {
+          populateMultiView($(this).find('ul'));
+        }
+        $(this).find('ul').toggle();
+      },
+      'mouseleave': function(e) {
+        if (e.target.tagName.toLowerCase() != "select") {
+          $(this).find('ul').hide();
+        }
+      }
+    });
+    $ato.find('.parent>a').on('click', function(e) {
+      e.preventDefault();
+    });
+    $ato.find('.parent ul').on('mouseleave', function(e) {
+      if (e.target.tagName.toLowerCase() != "select") {
+        $(this).hide();
+      }
+    });
+
+    /* <!-- select boxes --> */
+    $ato.find('.switcher').on({
+      'change': function() {
+        window.location.href = '{$ato.U_SELF}ato_'+ $(this).data('type') +'='+ $(this).val();
+      },
+      'click': function(e) {
+        e.stopPropagation();
+      }
+    });
+
+    /* <!-- toggle toolbar --> */
+    $ato.find('.close-panel').on('click', function(e) {
+      $ato.slideUp();
+      $ato_closed.slideDown();
+      moveBody('hide', true);
+
+      if ('localStorage' in window) window.localStorage.ato_panel_open = "false";
+      e.preventDefault();
+    });
+
+    $ato_closed.on('click', function(e) {
+      $ato.slideDown();
+      $ato_closed.slideUp();
+      moveBody('show', true);
+
+      if ('localStorage' in window) window.localStorage.ato_panel_open = "true";
+      e.preventDefault();
+    });
+  };
+
+  // init "set as representative" button
+  this.initRepresentative = function(image_id, category_id) {
+    $ato.find('.set-representative').on('click', function(e) {
+      if (!$(this).parent().hasClass('disabled')) {
+        $(this).parent().addClass('disabled')
+
+        $.ajax({
+          method: 'POST',
+          url: __this.urlWS + 'pwg.categories.setRepresentative',
+          dataType: 'json',
+          data: {
+            image_id: image_id,
+            category_id: category_id
+          },
+          success: function() {
+            alert('ok');
+          },
+          error: function(xhr, text, error) {
+            alert(text + ' ' + error);
+          }
+        });
+      }
+
+      e.preventDefault();
+    });
+  };
+
+  // init "add to caddie" button
+  this.initCaddie = function(image_id) {
+    $ato.find('.add-caddie').on('click', function(e) {
+      if (!$(this).parent().hasClass('disabled')) {
+        $(this).parent().addClass('disabled')
+
+        $.ajax({
+          method: 'POST',
+          url: __this.urlWS + 'pwg.caddie.add',
+          dataType: 'json',
+          data: {
+            image_id: image_id
+          },
+          success: function() {
+            alert('ok');
+          },
+          error: function(xhr, text, error) {
+            alert(text + ' ' + error);
+          }
+        });
+      }
+
+      e.preventDefault();
+    });
+  };
+
+  // init "quick edit" popup
+  this.initQuickEdit = function(with_date, tokeninput_lang) {
+    var $ato_edit = $('#ato_quick_edit');
+
+    // try to find background color matching text color
+    // there is a 1s delay to wait for jQuery Mobile initialization
+    setTimeout(function() {
+      var bg_color = 'white';
+      var selectors = ['#the_page #content', '[data-role="page"]', 'body'];
+
+      for (var i=0; i<selectors.length; i++) {
+        var color = $(selectors[i]).css('background-color');
+        if (color && color!='transparent') {
+          bg_color = color;
+          break;
+        }
+      }
+
+      $ato_edit.css('background-color', bg_color);
+    }, 1000);
+
+    $ato_edit.find('.close-edit').on('click', function(e) {
+      $.colorbox.close()
+      e.preventDefault();
+    });
+
+    if (with_date) {
+      $ato_edit.find('.datepicker').datepicker({
+        dateFormat: 'yy-mm-dd'
+      });
+    }
+
+    $(".edit-quick").colorbox({
+      inline: true,
+      transition: 'none',
+      width: 500,
+      top: 50,
+      title: $ato_edit.attr('title'),
+
+      onOpen: function() {
+        // fetch tags list on first open
+        if ($(this).data('tags-init')) return;
+
+        $.ajax({
+          method: 'POST',
+          url: __this.urlWS + 'pwg.tags.getList',
+          dataType: 'json',
+          success: function(data) {
+            var tags = [];
+            // convert to custom format
+            for (var i=0, l=data.result.tags.length; i<l; i++) {
+              tags.push({
+                id: '~~'+ data.result.tags[i].id +'~~',
+                name: data.result.tags[i].name
+              });
+            }
+
+            $ato_edit.find('.tags').tokenInput(
+              tags,
+              $.extend({
+                animateDropdown: false,
+                preventDuplicates: true,
+                allowFreeTagging: true
+              }, tokeninput_lang)
+            );
+
+            $.colorbox.resize();
+            $(this).data('tags-init', true);
+          },
+          error: function(xhr, text, error) {
+            alert(text + ' ' + error);
+          }
+        });
+      }
+    });
+  };
+
+  return this;
+}(jQuery);
Index: extensions/AdminTools/template/public_controller.tpl
===================================================================
--- extensions/AdminTools/template/public_controller.tpl	(revision 25791)
+++ extensions/AdminTools/template/public_controller.tpl	(revision 25817)
@@ -9,21 +9,53 @@
   {combine_css id='colorbox' path='themes/default/js/plugins/colorbox/style2/colorbox.css'}
 
-  {*<!-- tokeninput -->*}
-  {combine_script id='jquery.tokeninput' load='footer' require='jquery' path='themes/default/js/plugins/jquery.tokeninput.js'}
-  {combine_css path='themes/default/js/plugins/jquery.tokeninput.css'}
+  {if isset($ato.IS_PICTURE)}
+    {*<!-- tokeninput -->*}
+    {combine_script id='jquery.tokeninput' load='footer' require='jquery' path='themes/default/js/plugins/jquery.tokeninput.js'}
+    {combine_css path='themes/default/js/plugins/jquery.tokeninput.css'}
 
-  {*<!-- datepicker -->*}
-  {combine_script id='jquery.ui.datepicker' load='footer' path='themes/default/js/ui/jquery.ui.datepicker.js'}
+    {*<!-- datepicker -->*}
+    {combine_script id='jquery.ui.datepicker' load='footer' path='themes/default/js/ui/jquery.ui.datepicker.js'}
 
-  {assign var=datepicker_language value='themes/default/js/ui/i18n/jquery.ui.datepicker-'|cat:$lang_info.code|cat:'.js'}
-  {if 'PHPWG_ROOT_PATH'|constant|cat:$datepicker_language|file_exists}
-  {combine_script id='jquery.ui.datepicker-'|cat:$lang_info.code load='footer' path=$datepicker_language}
+    {assign var=datepicker_language value='themes/default/js/ui/i18n/jquery.ui.datepicker-'|cat:$lang_info.code|cat:'.js'}
+    {if 'PHPWG_ROOT_PATH'|constant|cat:$datepicker_language|file_exists}
+    {combine_script id='jquery.ui.datepicker-'|cat:$lang_info.code load='footer' path=$datepicker_language}
+    {/if}
+
+    {combine_css path='themes/default/js/ui/theme/jquery.ui.core.css'}
+    {combine_css path='themes/default/js/ui/theme/jquery.ui.theme.css'}
+    {combine_css path='themes/default/js/ui/theme/jquery.ui.datepicker.css'}
   {/if}
+{/if}
 
-  {combine_css path='themes/default/js/ui/theme/jquery.ui.core.css'}
-  {combine_css path='themes/default/js/ui/theme/jquery.ui.theme.css'}
-  {combine_css path='themes/default/js/ui/theme/jquery.ui.datepicker.css'}
+{combine_script id='admintools.controller' load='footer' require='jquery' path=$ADMINTOOLS_PATH|cat:'template/public_controller.js'}
+{/strip}
+
+{footer_script require='admintools.controller'}
+AdminTools.urlWS = '{$ROOT_URL}ws.php?format=json&method=';
+AdminTools.multiView = {
+  'view_as': "{$ato.MULTIVIEW.view_as}",
+  'theme': "{$ato.MULTIVIEW.theme}",
+  'lang': "{$ato.MULTIVIEW.lang}"
+};
+
+AdminTools.init();
+{if $themeconf.mobile}
+  AdminTools.initMobile();
 {/if}
-{/strip}
+{if isset($ato.U_SET_REPRESENTATIVE)}
+  AdminTools.initRepresentative({$current.id}, {$ato.CATEGORY_ID});
+{/if}
+{if isset($ato.U_CADDIE) and isset($ato.IS_PICTURE)}
+  AdminTools.initCaddie({$current.id});
+{/if}
+{if isset($ato.QUICK_EDIT)}
+  AdminTools.initQuickEdit({intval(isset($ato.IS_PICTURE))}, {
+    hintText: '{'Type in a search term'|@translate}',
+    noResultsText: '{'No results'|@translate}',
+    searchingText: '{'Searching...'|@translate}',
+    newText: ' ({'new'|@translate})'
+  });
+{/if}
+{/footer_script}
 
 <div id="ato_header_closed"><a href="#" class="icon-tools"></a></div>
@@ -63,20 +95,14 @@
   {/if}
 
-    <li class="parent right"><a class="icon-cog-alt" href="#">{'Tools'|translate}</a>
+    <li class="parent right multiview"><a class="icon-cog-alt" href="#">{'Tools'|translate}</a>
       <ul>
         <li><label>{'View as'|translate}</label>
-          <select class="switcher" data-type="view_as">
-            {html_options options=$ato.USERS selected=$ato.MULTIVIEW.view_as}
-          </select>
+          <select class="switcher" data-type="view_as"></select>
         </li>
         <li><label>{'Theme'|translate}</label>
-          <select class="switcher" data-type="theme">
-            {html_options options=$ato.THEMES selected=$ato.MULTIVIEW.theme}
-          </select>
+          <select class="switcher" data-type="theme"></select>
         </li>
         <li><label>{'Language'|translate}</label>
-          <select class="switcher" data-type="lang">
-            {html_options options=$ato.LANGS selected=$ato.MULTIVIEW.lang}
-          </select>
+          <select class="switcher" data-type="lang"></select>
         </li>
         <li><a class="icon-ato-check{if !$ato.MULTIVIEW.show_queries}-empty{/if}" href="{$ato.U_SELF}ato_show_queries={(int)!$ato.MULTIVIEW.show_queries}">{'Show SQL queries'|translate}</a></li>
@@ -99,5 +125,5 @@
 {if isset($ato.QUICK_EDIT)}
 <div style="display:none;">
-  <div id="ato_quick_edit">
+  <div id="ato_quick_edit" title="{'Quick edit'|translate}">
     <form method="post" action="{$ato.U_SELF}">
       <fieldset class="left">
@@ -141,215 +167,2 @@
 </div>
 {/if}
-
-{footer_script require='jquery'}
-(function($){
-  function moveBody(dir, anim) {
-    var operator = dir=='show' ? '+=' : '-=';
-    
-    if (anim) {
-      $('body').animate({ldelim}'margin-top': operator+ato_height});
-      
-      if ($('#the_page, [data-role="page"]').css('position')=='absolute') {
-        $('#the_page, [data-role="page"]').animate({ldelim}'top': operator+ato_height});
-      }
-    }
-    else {
-      $('body').css({ldelim}'margin-top': operator+ato_height});
-      
-      if ($('#the_page, [data-role="page"]').css('position')=='absolute') {
-        $('#the_page, [data-role="page"]').css({ldelim}'top': operator+ato_height});
-      }
-    }
-  }
-  
-  var $ato = $('#ato_header'),
-      $ato_closed = $('#ato_header_closed'),
-      ato_height = 28,
-      urlWS = '{$ROOT_URL}ws.php?format=json&method=';
-
-  $('body').prepend($ato); // ensure the bar is at the begining
-  
-  {if $themeconf.mobile}
-    var $headerbar = $('div[data-role="header"] .title');
-    if ($headerbar.length == 1) {
-      $ato_closed.addClass('smartpocket');
-      $ato_closed.find('a').attr({
-        'data-iconpos':'notext',
-        'data-role':'button'
-      });
-      $headerbar.prepend($ato_closed);    
-    }
-  {/if}
-
-  if (window.localStorage.ato_panel_open == null) {
-    window.localStorage.ato_panel_open = "true";
-  }
-
-  if (window.localStorage.ato_panel_open == "true") {
-    $ato.show();
-    moveBody('show', false);
-  }
-  else {
-    $ato_closed.show();
-  }
-
-{*<!-- sub menus -->*}
-  $ato.find('.parent').on({
-    'click': function(){
-      $(this).find('ul').toggle();
-    },
-    'mouseleave': function(e) {
-      if (e.target.tagName.toLowerCase() != "select") {
-        $(this).find('ul').hide();
-      }
-    }
-  });
-  $ato.find('.parent>a').on('click', function(e) {
-    e.preventDefault();
-  });
-  $ato.find('.parent ul').on('mouseleave', function(e) {
-    if (e.target.tagName.toLowerCase() != "select") {
-      $(this).hide();
-    }
-  });
-
-{*<!-- select boxes -->*}
-  $ato.find('.switcher').on({
-    'change': function() {
-      window.location.href = '{$ato.U_SELF}ato_'+ $(this).data('type') +'='+ $(this).val();
-    },
-    'click': function(e) {
-      e.stopPropagation();
-    }
-  });
-
-{*<!-- toggle toolbar -->*}
-  $ato.find('.close-panel').on('click', function(e) {
-    $ato.slideUp();
-    $ato_closed.slideDown();
-    moveBody('hide', true);
-
-    window.localStorage.ato_panel_open = "false";
-    e.preventDefault();
-  });
-
-  $ato_closed.on('click', function(e) {
-    $ato.slideDown();
-    $ato_closed.slideUp();
-    moveBody('show', true);
-
-    window.localStorage.ato_panel_open = "true";
-    e.preventDefault();
-  });
-
-{*<!-- set representative -->*}
-{if isset($ato.U_SET_REPRESENTATIVE)}
-  $ato.find('.set-representative').on('click', function(e) {
-
-    if (!$(this).parent().hasClass('disabled')) {
-      $(this).parent().addClass('disabled')
-
-      $.ajax({
-        method: 'POST',
-        url: urlWS + 'pwg.categories.setRepresentative',
-        dataType: 'json',
-        data: {
-          image_id: {$current.id},
-          category_id: {$ato.CATEGORY_ID}
-        },
-        success: function() {
-          alert('ok');
-        },
-        fail: function(num, text) {
-          alert(num + ' ' + text);
-        }
-      });
-    }
-
-    e.preventDefault();
-  });
-{/if}
-
-{*<!-- add to caddie -->*}
-{if isset($ato.U_CADDIE) and isset($ato.IS_PICTURE)}
-  $ato.find('.add-caddie').on('click', function(e) {
-
-    if (!$(this).parent().hasClass('disabled')) {
-      $(this).parent().addClass('disabled')
-
-      $.ajax({
-        method: 'POST',
-        url: urlWS + 'pwg.caddie.add',
-        dataType: 'json',
-        data: {
-          image_id: {$current.id}
-        },
-        success: function() {
-          alert('ok');
-        },
-        fail: function(num, text) {
-          alert(num + ' ' + text);
-        }
-      });
-    }
-
-    e.preventDefault();
-  });
-{/if}
-
-{* <!-- quick edit -->*}
-{if isset($ato.QUICK_EDIT)}
-  var $ato_edit = $('#ato_quick_edit');
-  
-  
-  setTimeout(function() {
-    var bg_color = 'white';
-    var selectors = ['#the_page #content', '[data-role="page"]', 'body'];
-    
-    for (var i=0; i<selectors.length; i++) {
-      var color = $(selectors[i]).css('background-color');
-      console.log(selectors[i], color);
-      if (color && color!='transparent') {
-        bg_color = color;
-        break;
-      }
-    }
-
-    $ato_edit.css('background-color', bg_color);
-  }, 1000);
-
-  $ato_edit.find('.close-edit').on('click', function(e) {
-    $.colorbox.close()
-    e.preventDefault();
-  });
-
-{if isset($ato.IS_PICTURE)}
-  $ato_edit.find('.datepicker').datepicker({
-    dateFormat: 'yy-mm-dd'
-  });
-
-  $ato_edit.find('.tags').tokenInput(
-    [{foreach from=$ato.QUICK_EDIT.tags item=tag name=tags}{ldelim}"name":"{$tag.name|escape:javascript}","id":"{$tag.id}"{rdelim}{if !$smarty.foreach.tags.last},{/if}{/foreach}],
-    {
-      hintText: '{'Type in a search term'|@translate}',
-      noResultsText: '{'No results'|@translate}',
-      searchingText: '{'Searching...'|@translate}',
-      newText: ' ({'new'|@translate})',
-      animateDropdown: false,
-      preventDuplicates: true,
-      allowFreeTagging: true
-    }
-  );
-{/if}
-
-  $(".edit-quick").colorbox({
-    inline: true,
-    transition: 'none',
-    title: '{'Quick edit'|translate|escape:javascript}',
-    width: 500,
-    top: 50
-  });
-{/if}
-
-}(jQuery));
-{/footer_script}
