// PLUGIN_INFO//{{{
var PLUGIN_INFO =
    {NAME}
    browser act scenario semi-automatic.
    hogelog
    0.0.6
    2.0a2
    http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk/scenario-actor.js
    ||
// hatena sample
javascript <||
action: {and: [
    {sleep: 5000},
    {follow: '//a[@rel="prev"]'},
]}
||<
is syntax-sugar of
>||
action: [{and: [
    {sleep: [5000]},
    {follow: ['//a[@rel="prev"]']},
]}]
||<
and action expressions are quoted by {begin: ...}.
== TODO ==
- write more examples.
- add more functions.
- fix bugs.
- a lot.
     ]]>
;
//}}}
(function() {
const debugMode = true;
const VariablesName = 'ScenarioActorVariables';
const VariablesLabelID = 'ScenarioActorVariablesLabelID';
let SCENARIO_DIR = liberator.globalVariables.scenarioDir || 'scenario';
var libly = liberator.plugins.libly;
var $U = libly.$U;
var logger = $U.getLogger('scenario-actor');
function ScenarioActor () { //{{{
    let variables = storage.newMap('scenarioactor', true);
    function ScenarioContext(event) { //{{{
        let triggeredEvent = event;
        let win = (event.target.contentDocument||event.target).defaultView;
        let self = {
            glet: function (name, value) {
                if((typeof name)!='string') throw [name, value];
                variables.set(name, self.eval(value));
                return value;
            },
            gvar: function (name) {
                if((typeof name)!='string') throw [name, value];
                return variables.get(name);
            },
            begin: function () {
                let lastValue;
                for(let i=0,len=arguments.length;i