
/* Merged Plone Javascript file
 * This file is dynamically assembled from separate parts.
 * Some of these parts have 3rd party licenses or copyright information attached
 * Such information is valid for that section,
 * not for the entire composite file
 * originating files are separated by - filename.js -
 */

/* - ++resource++effects.js - */
// script.aculo.us effects.js v1.7.0, Fri Jan 19 19:16:36 CET 2007

// Copyright (c) 2005, 2006 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
// Contributors:
//  Justin Palmer (http://encytemedia.com/)
//  Mark Pilgrim (http://diveintomark.org/)
//  Martin Bialasinki
// 
// script.aculo.us is freely distributable under the terms of an MIT-style license.
// For details, see the script.aculo.us web site: http://script.aculo.us/ 

// converts rgb() and #xxx to #xxxxxx format,  
// returns self (or first argument) if not convertable  
String.prototype.parseColor = function() {  
  var color = '#';
  if(this.slice(0,4) == 'rgb(') {  
    var cols = this.slice(4,this.length-1).split(',');  
    var i=0; do { color += parseInt(cols[i]).toColorPart() } while (++i<3);  
  } else {  
    if(this.slice(0,1) == '#') {  
      if(this.length==4) for(var i=1;i<4;i++) color += (this.charAt(i) + this.charAt(i)).toLowerCase();  
      if(this.length==7) color = this.toLowerCase();  
    }  
  }  
  return(color.length==7 ? color : (arguments[0] || this));  
}

/*--------------------------------------------------------------------------*/

Element.collectTextNodes = function(element) {  
  return $A($(element).childNodes).collect( function(node) {
    return (node.nodeType==3 ? node.nodeValue : 
      (node.hasChildNodes() ? Element.collectTextNodes(node) : ''));
  }).flatten().join('');
}

Element.collectTextNodesIgnoreClass = function(element, className) {  
  return $A($(element).childNodes).collect( function(node) {
    return (node.nodeType==3 ? node.nodeValue : 
      ((node.hasChildNodes() && !Element.hasClassName(node,className)) ? 
        Element.collectTextNodesIgnoreClass(node, className) : ''));
  }).flatten().join('');
}

Element.setContentZoom = function(element, percent) {
  element = $(element);  
  element.setStyle({fontSize: (percent/100) + 'em'});   
  if(navigator.appVersion.indexOf('AppleWebKit')>0) window.scrollBy(0,0);
  return element;
}

Element.getOpacity = function(element){
  return $(element).getStyle('opacity');
}

Element.setOpacity = function(element, value){
  return $(element).setStyle({opacity:value});
}

Element.getInlineOpacity = function(element){
  return $(element).style.opacity || '';
}

Element.forceRerendering = function(element) {
  try {
    element = $(element);
    var n = document.createTextNode(' ');
    element.appendChild(n);
    element.removeChild(n);
  } catch(e) { }
};

/*--------------------------------------------------------------------------*/

Array.prototype.call = function() {
  var args = arguments;
  this.each(function(f){ f.apply(this, args) });
}

/*--------------------------------------------------------------------------*/

var Effect = {
  _elementDoesNotExistError: {
    name: 'ElementDoesNotExistError',
    message: 'The specified DOM element does not exist, but is required for this effect to operate'
  },
  tagifyText: function(element) {
    if(typeof Builder == 'undefined')
      throw("Effect.tagifyText requires including script.aculo.us' builder.js library");
      
    var tagifyStyle = 'position:relative';
    if(/MSIE/.test(navigator.userAgent) && !window.opera) tagifyStyle += ';zoom:1';
    
    element = $(element);
    $A(element.childNodes).each( function(child) {
      if(child.nodeType==3) {
        child.nodeValue.toArray().each( function(character) {
          element.insertBefore(
            Builder.node('span',{style: tagifyStyle},
              character == ' ' ? String.fromCharCode(160) : character), 
              child);
        });
        Element.remove(child);
      }
    });
  },
  multiple: function(element, effect) {
    var elements;
    if(((typeof element == 'object') || 
        (typeof element == 'function')) && 
       (element.length))
      elements = element;
    else
      elements = $(element).childNodes;
      
    var options = Object.extend({
      speed: 0.1,
      delay: 0.0
    }, arguments[2] || {});
    var masterDelay = options.delay;

    $A(elements).each( function(element, index) {
      new effect(element, Object.extend(options, { delay: index * options.speed + masterDelay }));
    });
  },
  PAIRS: {
    'slide':  ['SlideDown','SlideUp'],
    'blind':  ['BlindDown','BlindUp'],
    'appear': ['Appear','Fade']
  },
  toggle: function(element, effect) {
    element = $(element);
    effect = (effect || 'appear').toLowerCase();
    var options = Object.extend({
      queue: { position:'end', scope:(element.id || 'global'), limit: 1 }
    }, arguments[2] || {});
    Effect[element.visible() ? 
      Effect.PAIRS[effect][1] : Effect.PAIRS[effect][0]](element, options);
  }
};

var Effect2 = Effect; // deprecated

/* ------------- transitions ------------- */

Effect.Transitions = {
  linear: Prototype.K,
  sinoidal: function(pos) {
    return (-Math.cos(pos*Math.PI)/2) + 0.5;
  },
  reverse: function(pos) {
    return 1-pos;
  },
  flicker: function(pos) {
    return ((-Math.cos(pos*Math.PI)/4) + 0.75) + Math.random()/4;
  },
  wobble: function(pos) {
    return (-Math.cos(pos*Math.PI*(9*pos))/2) + 0.5;
  },
  pulse: function(pos, pulses) { 
    pulses = pulses || 5; 
    return (
      Math.round((pos % (1/pulses)) * pulses) == 0 ? 
            ((pos * pulses * 2) - Math.floor(pos * pulses * 2)) : 
        1 - ((pos * pulses * 2) - Math.floor(pos * pulses * 2))
      );
  },
  none: function(pos) {
    return 0;
  },
  full: function(pos) {
    return 1;
  }
};

/* ------------- core effects ------------- */

Effect.ScopedQueue = Class.create();
Object.extend(Object.extend(Effect.ScopedQueue.prototype, Enumerable), {
  initialize: function() {
    this.effects  = [];
    this.interval = null;
  },
  _each: function(iterator) {
    this.effects._each(iterator);
  },
  add: function(effect) {
    var timestamp = new Date().getTime();
    
    var position = (typeof effect.options.queue == 'string') ? 
      effect.options.queue : effect.options.queue.position;
    
    switch(position) {
      case 'front':
        // move unstarted effects after this effect  
        this.effects.findAll(function(e){ return e.state=='idle' }).each( function(e) {
            e.startOn  += effect.finishOn;
            e.finishOn += effect.finishOn;
          });
        break;
      case 'with-last':
        timestamp = this.effects.pluck('startOn').max() || timestamp;
        break;
      case 'end':
        // start effect after last queued effect has finished
        timestamp = this.effects.pluck('finishOn').max() || timestamp;
        break;
    }
    
    effect.startOn  += timestamp;
    effect.finishOn += timestamp;

    if(!effect.options.queue.limit || (this.effects.length < effect.options.queue.limit))
      this.effects.push(effect);
    
    if(!this.interval) 
      this.interval = setInterval(this.loop.bind(this), 15);
  },
  remove: function(effect) {
    this.effects = this.effects.reject(function(e) { return e==effect });
    if(this.effects.length == 0) {
      clearInterval(this.interval);
      this.interval = null;
    }
  },
  loop: function() {
    var timePos = new Date().getTime();
    for(var i=0, len=this.effects.length;i<len;i++) 
      if(this.effects[i]) this.effects[i].loop(timePos);
  }
});

Effect.Queues = {
  instances: $H(),
  get: function(queueName) {
    if(typeof queueName != 'string') return queueName;
    
    if(!this.instances[queueName])
      this.instances[queueName] = new Effect.ScopedQueue();
      
    return this.instances[queueName];
  }
}
Effect.Queue = Effect.Queues.get('global');

Effect.DefaultOptions = {
  transition: Effect.Transitions.sinoidal,
  duration:   1.0,   // seconds
  fps:        60.0,  // max. 60fps due to Effect.Queue implementation
  sync:       false, // true for combining
  from:       0.0,
  to:         1.0,
  delay:      0.0,
  queue:      'parallel'
}

Effect.Base = function() {};
Effect.Base.prototype = {
  position: null,
  start: function(options) {
    this.options      = Object.extend(Object.extend({},Effect.DefaultOptions), options || {});
    this.currentFrame = 0;
    this.state        = 'idle';
    this.startOn      = this.options.delay*1000;
    this.finishOn     = this.startOn + (this.options.duration*1000);
    this.event('beforeStart');
    if(!this.options.sync)
      Effect.Queues.get(typeof this.options.queue == 'string' ? 
        'global' : this.options.queue.scope).add(this);
  },
  loop: function(timePos) {
    if(timePos >= this.startOn) {
      if(timePos >= this.finishOn) {
        this.render(1.0);
        this.cancel();
        this.event('beforeFinish');
        if(this.finish) this.finish(); 
        this.event('afterFinish');
        return;  
      }
      var pos   = (timePos - this.startOn) / (this.finishOn - this.startOn);
      var frame = Math.round(pos * this.options.fps * this.options.duration);
      if(frame > this.currentFrame) {
        this.render(pos);
        this.currentFrame = frame;
      }
    }
  },
  render: function(pos) {
    if(this.state == 'idle') {
      this.state = 'running';
      this.event('beforeSetup');
      if(this.setup) this.setup();
      this.event('afterSetup');
    }
    if(this.state == 'running') {
      if(this.options.transition) pos = this.options.transition(pos);
      pos *= (this.options.to-this.options.from);
      pos += this.options.from;
      this.position = pos;
      this.event('beforeUpdate');
      if(this.update) this.update(pos);
      this.event('afterUpdate');
    }
  },
  cancel: function() {
    if(!this.options.sync)
      Effect.Queues.get(typeof this.options.queue == 'string' ? 
        'global' : this.options.queue.scope).remove(this);
    this.state = 'finished';
  },
  event: function(eventName) {
    if(this.options[eventName + 'Internal']) this.options[eventName + 'Internal'](this);
    if(this.options[eventName]) this.options[eventName](this);
  },
  inspect: function() {
    var data = $H();
    for(property in this)
      if(typeof this[property] != 'function') data[property] = this[property];
    return '#<Effect:' + data.inspect() + ',options:' + $H(this.options).inspect() + '>';
  }
}

Effect.Parallel = Class.create();
Object.extend(Object.extend(Effect.Parallel.prototype, Effect.Base.prototype), {
  initialize: function(effects) {
    this.effects = effects || [];
    this.start(arguments[1]);
  },
  update: function(position) {
    this.effects.invoke('render', position);
  },
  finish: function(position) {
    this.effects.each( function(effect) {
      effect.render(1.0);
      effect.cancel();
      effect.event('beforeFinish');
      if(effect.finish) effect.finish(position);
      effect.event('afterFinish');
    });
  }
});

Effect.Event = Class.create();
Object.extend(Object.extend(Effect.Event.prototype, Effect.Base.prototype), {
  initialize: function() {
    var options = Object.extend({
      duration: 0
    }, arguments[0] || {});
    this.start(options);
  },
  update: Prototype.emptyFunction
});

Effect.Opacity = Class.create();
Object.extend(Object.extend(Effect.Opacity.prototype, Effect.Base.prototype), {
  initialize: function(element) {
    this.element = $(element);
    if(!this.element) throw(Effect._elementDoesNotExistError);
    // make this work on IE on elements without 'layout'
    if(/MSIE/.test(navigator.userAgent) && !window.opera && (!this.element.currentStyle.hasLayout))
      this.element.setStyle({zoom: 1});
    var options = Object.extend({
      from: this.element.getOpacity() || 0.0,
      to:   1.0
    }, arguments[1] || {});
    this.start(options);
  },
  update: function(position) {
    this.element.setOpacity(position);
  }
});

Effect.Move = Class.create();
Object.extend(Object.extend(Effect.Move.prototype, Effect.Base.prototype), {
  initialize: function(element) {
    this.element = $(element);
    if(!this.element) throw(Effect._elementDoesNotExistError);
    var options = Object.extend({
      x:    0,
      y:    0,
      mode: 'relative'
    }, arguments[1] || {});
    this.start(options);
  },
  setup: function() {
    // Bug in Opera: Opera returns the "real" position of a static element or
    // relative element that does not have top/left explicitly set.
    // ==> Always set top and left for position relative elements in your stylesheets 
    // (to 0 if you do not need them) 
    this.element.makePositioned();
    this.originalLeft = parseFloat(this.element.getStyle('left') || '0');
    this.originalTop  = parseFloat(this.element.getStyle('top')  || '0');
    if(this.options.mode == 'absolute') {
      // absolute movement, so we need to calc deltaX and deltaY
      this.options.x = this.options.x - this.originalLeft;
      this.options.y = this.options.y - this.originalTop;
    }
  },
  update: function(position) {
    this.element.setStyle({
      left: Math.round(this.options.x  * position + this.originalLeft) + 'px',
      top:  Math.round(this.options.y  * position + this.originalTop)  + 'px'
    });
  }
});

// for backwards compatibility
Effect.MoveBy = function(element, toTop, toLeft) {
  return new Effect.Move(element, 
    Object.extend({ x: toLeft, y: toTop }, arguments[3] || {}));
};

Effect.Scale = Class.create();
Object.extend(Object.extend(Effect.Scale.prototype, Effect.Base.prototype), {
  initialize: function(element, percent) {
    this.element = $(element);
    if(!this.element) throw(Effect._elementDoesNotExistError);
    var options = Object.extend({
      scaleX: true,
      scaleY: true,
      scaleContent: true,
      scaleFromCenter: false,
      scaleMode: 'box',        // 'box' or 'contents' or {} with provided values
      scaleFrom: 100.0,
      scaleTo:   percent
    }, arguments[2] || {});
    this.start(options);
  },
  setup: function() {
    this.restoreAfterFinish = this.options.restoreAfterFinish || false;
    this.elementPositioning = this.element.getStyle('position');
    
    this.originalStyle = {};
    ['top','left','width','height','fontSize'].each( function(k) {
      this.originalStyle[k] = this.element.style[k];
    }.bind(this));
      
    this.originalTop  = this.element.offsetTop;
    this.originalLeft = this.element.offsetLeft;
    
    var fontSize = this.element.getStyle('font-size') || '100%';
    ['em','px','%','pt'].each( function(fontSizeType) {
      if(fontSize.indexOf(fontSizeType)>0) {
        this.fontSize     = parseFloat(fontSize);
        this.fontSizeType = fontSizeType;
      }
    }.bind(this));
    
    this.factor = (this.options.scaleTo - this.options.scaleFrom)/100;
    
    this.dims = null;
    if(this.options.scaleMode=='box')
      this.dims = [this.element.offsetHeight, this.element.offsetWidth];
    if(/^content/.test(this.options.scaleMode))
      this.dims = [this.element.scrollHeight, this.element.scrollWidth];
    if(!this.dims)
      this.dims = [this.options.scaleMode.originalHeight,
                   this.options.scaleMode.originalWidth];
  },
  update: function(position) {
    var currentScale = (this.options.scaleFrom/100.0) + (this.factor * position);
    if(this.options.scaleContent && this.fontSize)
      this.element.setStyle({fontSize: this.fontSize * currentScale + this.fontSizeType });
    this.setDimensions(this.dims[0] * currentScale, this.dims[1] * currentScale);
  },
  finish: function(position) {
    if(this.restoreAfterFinish) this.element.setStyle(this.originalStyle);
  },
  setDimensions: function(height, width) {
    var d = {};
    if(this.options.scaleX) d.width = Math.round(width) + 'px';
    if(this.options.scaleY) d.height = Math.round(height) + 'px';
    if(this.options.scaleFromCenter) {
      var topd  = (height - this.dims[0])/2;
      var leftd = (width  - this.dims[1])/2;
      if(this.elementPositioning == 'absolute') {
        if(this.options.scaleY) d.top = this.originalTop-topd + 'px';
        if(this.options.scaleX) d.left = this.originalLeft-leftd + 'px';
      } else {
        if(this.options.scaleY) d.top = -topd + 'px';
        if(this.options.scaleX) d.left = -leftd + 'px';
      }
    }
    this.element.setStyle(d);
  }
});

Effect.Highlight = Class.create();
Object.extend(Object.extend(Effect.Highlight.prototype, Effect.Base.prototype), {
  initialize: function(element) {
    this.element = $(element);
    if(!this.element) throw(Effect._elementDoesNotExistError);
    var options = Object.extend({ startcolor: '#ffff99' }, arguments[1] || {});
    this.start(options);
  },
  setup: function() {
    // Prevent executing on elements not in the layout flow
    if(this.element.getStyle('display')=='none') { this.cancel(); return; }
    // Disable background image during the effect
    this.oldStyle = {};
    if (!this.options.keepBackgroundImage) {
      this.oldStyle.backgroundImage = this.element.getStyle('background-image');
      this.element.setStyle({backgroundImage: 'none'});
    }
    if(!this.options.endcolor)
      this.options.endcolor = this.element.getStyle('background-color').parseColor('#ffffff');
    if(!this.options.restorecolor)
      this.options.restorecolor = this.element.getStyle('background-color');
    // init color calculations
    this._base  = $R(0,2).map(function(i){ return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16) }.bind(this));
    this._delta = $R(0,2).map(function(i){ return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i] }.bind(this));
  },
  update: function(position) {
    this.element.setStyle({backgroundColor: $R(0,2).inject('#',function(m,v,i){
      return m+(Math.round(this._base[i]+(this._delta[i]*position)).toColorPart()); }.bind(this)) });
  },
  finish: function() {
    this.element.setStyle(Object.extend(this.oldStyle, {
      backgroundColor: this.options.restorecolor
    }));
  }
});

Effect.ScrollTo = Class.create();
Object.extend(Object.extend(Effect.ScrollTo.prototype, Effect.Base.prototype), {
  initialize: function(element) {
    this.element = $(element);
    this.start(arguments[1] || {});
  },
  setup: function() {
    Position.prepare();
    var offsets = Position.cumulativeOffset(this.element);
    if(this.options.offset) offsets[1] += this.options.offset;
    var max = window.innerHeight ? 
      window.height - window.innerHeight :
      document.body.scrollHeight - 
        (document.documentElement.clientHeight ? 
          document.documentElement.clientHeight : document.body.clientHeight);
    this.scrollStart = Position.deltaY;
    this.delta = (offsets[1] > max ? max : offsets[1]) - this.scrollStart;
  },
  update: function(position) {
    Position.prepare();
    window.scrollTo(Position.deltaX, 
      this.scrollStart + (position*this.delta));
  }
});

/* ------------- combination effects ------------- */

Effect.Fade = function(element) {
  element = $(element);
  var oldOpacity = element.getInlineOpacity();
  var options = Object.extend({
  from: element.getOpacity() || 1.0,
  to:   0.0,
  afterFinishInternal: function(effect) { 
    if(effect.options.to!=0) return;
    effect.element.hide().setStyle({opacity: oldOpacity}); 
  }}, arguments[1] || {});
  return new Effect.Opacity(element,options);
}

Effect.Appear = function(element) {
  element = $(element);
  var options = Object.extend({
  from: (element.getStyle('display') == 'none' ? 0.0 : element.getOpacity() || 0.0),
  to:   1.0,
  // force Safari to render floated elements properly
  afterFinishInternal: function(effect) {
    effect.element.forceRerendering();
  },
  beforeSetup: function(effect) {
    effect.element.setOpacity(effect.options.from).show(); 
  }}, arguments[1] || {});
  return new Effect.Opacity(element,options);
}

Effect.Puff = function(element) {
  element = $(element);
  var oldStyle = { 
    opacity: element.getInlineOpacity(), 
    position: element.getStyle('position'),
    top:  element.style.top,
    left: element.style.left,
    width: element.style.width,
    height: element.style.height
  };
  return new Effect.Parallel(
   [ new Effect.Scale(element, 200, 
      { sync: true, scaleFromCenter: true, scaleContent: true, restoreAfterFinish: true }), 
     new Effect.Opacity(element, { sync: true, to: 0.0 } ) ], 
     Object.extend({ duration: 1.0, 
      beforeSetupInternal: function(effect) {
        Position.absolutize(effect.effects[0].element)
      },
      afterFinishInternal: function(effect) {
         effect.effects[0].element.hide().setStyle(oldStyle); }
     }, arguments[1] || {})
   );
}

Effect.BlindUp = function(element) {
  element = $(element);
  element.makeClipping();
  return new Effect.Scale(element, 0,
    Object.extend({ scaleContent: false, 
      scaleX: false, 
      restoreAfterFinish: true,
      afterFinishInternal: function(effect) {
        effect.element.hide().undoClipping();
      } 
    }, arguments[1] || {})
  );
}

Effect.BlindDown = function(element) {
  element = $(element);
  var elementDimensions = element.getDimensions();
  return new Effect.Scale(element, 100, Object.extend({ 
    scaleContent: false, 
    scaleX: false,
    scaleFrom: 0,
    scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
    restoreAfterFinish: true,
    afterSetup: function(effect) {
      effect.element.makeClipping().setStyle({height: '0px'}).show(); 
    },  
    afterFinishInternal: function(effect) {
      effect.element.undoClipping();
    }
  }, arguments[1] || {}));
}

Effect.SwitchOff = function(element) {
  element = $(element);
  var oldOpacity = element.getInlineOpacity();
  return new Effect.Appear(element, Object.extend({
    duration: 0.4,
    from: 0,
    transition: Effect.Transitions.flicker,
    afterFinishInternal: function(effect) {
      new Effect.Scale(effect.element, 1, { 
        duration: 0.3, scaleFromCenter: true,
        scaleX: false, scaleContent: false, restoreAfterFinish: true,
        beforeSetup: function(effect) { 
          effect.element.makePositioned().makeClipping();
        },
        afterFinishInternal: function(effect) {
          effect.element.hide().undoClipping().undoPositioned().setStyle({opacity: oldOpacity});
        }
      })
    }
  }, arguments[1] || {}));
}

Effect.DropOut = function(element) {
  element = $(element);
  var oldStyle = {
    top: element.getStyle('top'),
    left: element.getStyle('left'),
    opacity: element.getInlineOpacity() };
  return new Effect.Parallel(
    [ new Effect.Move(element, {x: 0, y: 100, sync: true }), 
      new Effect.Opacity(element, { sync: true, to: 0.0 }) ],
    Object.extend(
      { duration: 0.5,
        beforeSetup: function(effect) {
          effect.effects[0].element.makePositioned(); 
        },
        afterFinishInternal: function(effect) {
          effect.effects[0].element.hide().undoPositioned().setStyle(oldStyle);
        } 
      }, arguments[1] || {}));
}

Effect.Shake = function(element) {
  element = $(element);
  var oldStyle = {
    top: element.getStyle('top'),
    left: element.getStyle('left') };
    return new Effect.Move(element, 
      { x:  20, y: 0, duration: 0.05, afterFinishInternal: function(effect) {
    new Effect.Move(effect.element,
      { x: -40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {
    new Effect.Move(effect.element,
      { x:  40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {
    new Effect.Move(effect.element,
      { x: -40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {
    new Effect.Move(effect.element,
      { x:  40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {
    new Effect.Move(effect.element,
      { x: -20, y: 0, duration: 0.05, afterFinishInternal: function(effect) {
        effect.element.undoPositioned().setStyle(oldStyle);
  }}) }}) }}) }}) }}) }});
}

Effect.SlideDown = function(element) {
  element = $(element).cleanWhitespace();
  // SlideDown need to have the content of the element wrapped in a container element with fixed height!
  var oldInnerBottom = element.down().getStyle('bottom');
  var elementDimensions = element.getDimensions();
  return new Effect.Scale(element, 100, Object.extend({ 
    scaleContent: false, 
    scaleX: false, 
    scaleFrom: window.opera ? 0 : 1,
    scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
    restoreAfterFinish: true,
    afterSetup: function(effect) {
      effect.element.makePositioned();
      effect.element.down().makePositioned();
      if(window.opera) effect.element.setStyle({top: ''});
      effect.element.makeClipping().setStyle({height: '0px'}).show(); 
    },
    afterUpdateInternal: function(effect) {
      effect.element.down().setStyle({bottom:
        (effect.dims[0] - effect.element.clientHeight) + 'px' }); 
    },
    afterFinishInternal: function(effect) {
      effect.element.undoClipping().undoPositioned();
      effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom}); }
    }, arguments[1] || {})
  );
}

Effect.SlideUp = function(element) {
  element = $(element).cleanWhitespace();
  var oldInnerBottom = element.down().getStyle('bottom');
  return new Effect.Scale(element, window.opera ? 0 : 1,
   Object.extend({ scaleContent: false, 
    scaleX: false, 
    scaleMode: 'box',
    scaleFrom: 100,
    restoreAfterFinish: true,
    beforeStartInternal: function(effect) {
      effect.element.makePositioned();
      effect.element.down().makePositioned();
      if(window.opera) effect.element.setStyle({top: ''});
      effect.element.makeClipping().show();
    },  
    afterUpdateInternal: function(effect) {
      effect.element.down().setStyle({bottom:
        (effect.dims[0] - effect.element.clientHeight) + 'px' });
    },
    afterFinishInternal: function(effect) {
      effect.element.hide().undoClipping().undoPositioned().setStyle({bottom: oldInnerBottom});
      effect.element.down().undoPositioned();
    }
   }, arguments[1] || {})
  );
}

// Bug in opera makes the TD containing this element expand for a instance after finish 
Effect.Squish = function(element) {
  return new Effect.Scale(element, window.opera ? 1 : 0, { 
    restoreAfterFinish: true,
    beforeSetup: function(effect) {
      effect.element.makeClipping(); 
    },  
    afterFinishInternal: function(effect) {
      effect.element.hide().undoClipping(); 
    }
  });
}

Effect.Grow = function(element) {
  element = $(element);
  var options = Object.extend({
    direction: 'center',
    moveTransition: Effect.Transitions.sinoidal,
    scaleTransition: Effect.Transitions.sinoidal,
    opacityTransition: Effect.Transitions.full
  }, arguments[1] || {});
  var oldStyle = {
    top: element.style.top,
    left: element.style.left,
    height: element.style.height,
    width: element.style.width,
    opacity: element.getInlineOpacity() };

  var dims = element.getDimensions();    
  var initialMoveX, initialMoveY;
  var moveX, moveY;
  
  switch (options.direction) {
    case 'top-left':
      initialMoveX = initialMoveY = moveX = moveY = 0; 
      break;
    case 'top-right':
      initialMoveX = dims.width;
      initialMoveY = moveY = 0;
      moveX = -dims.width;
      break;
    case 'bottom-left':
      initialMoveX = moveX = 0;
      initialMoveY = dims.height;
      moveY = -dims.height;
      break;
    case 'bottom-right':
      initialMoveX = dims.width;
      initialMoveY = dims.height;
      moveX = -dims.width;
      moveY = -dims.height;
      break;
    case 'center':
      initialMoveX = dims.width / 2;
      initialMoveY = dims.height / 2;
      moveX = -dims.width / 2;
      moveY = -dims.height / 2;
      break;
  }
  
  return new Effect.Move(element, {
    x: initialMoveX,
    y: initialMoveY,
    duration: 0.01, 
    beforeSetup: function(effect) {
      effect.element.hide().makeClipping().makePositioned();
    },
    afterFinishInternal: function(effect) {
      new Effect.Parallel(
        [ new Effect.Opacity(effect.element, { sync: true, to: 1.0, from: 0.0, transition: options.opacityTransition }),
          new Effect.Move(effect.element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition }),
          new Effect.Scale(effect.element, 100, {
            scaleMode: { originalHeight: dims.height, originalWidth: dims.width }, 
            sync: true, scaleFrom: window.opera ? 1 : 0, transition: options.scaleTransition, restoreAfterFinish: true})
        ], Object.extend({
             beforeSetup: function(effect) {
               effect.effects[0].element.setStyle({height: '0px'}).show(); 
             },
             afterFinishInternal: function(effect) {
               effect.effects[0].element.undoClipping().undoPositioned().setStyle(oldStyle); 
             }
           }, options)
      )
    }
  });
}

Effect.Shrink = function(element) {
  element = $(element);
  var options = Object.extend({
    direction: 'center',
    moveTransition: Effect.Transitions.sinoidal,
    scaleTransition: Effect.Transitions.sinoidal,
    opacityTransition: Effect.Transitions.none
  }, arguments[1] || {});
  var oldStyle = {
    top: element.style.top,
    left: element.style.left,
    height: element.style.height,
    width: element.style.width,
    opacity: element.getInlineOpacity() };

  var dims = element.getDimensions();
  var moveX, moveY;
  
  switch (options.direction) {
    case 'top-left':
      moveX = moveY = 0;
      break;
    case 'top-right':
      moveX = dims.width;
      moveY = 0;
      break;
    case 'bottom-left':
      moveX = 0;
      moveY = dims.height;
      break;
    case 'bottom-right':
      moveX = dims.width;
      moveY = dims.height;
      break;
    case 'center':  
      moveX = dims.width / 2;
      moveY = dims.height / 2;
      break;
  }
  
  return new Effect.Parallel(
    [ new Effect.Opacity(element, { sync: true, to: 0.0, from: 1.0, transition: options.opacityTransition }),
      new Effect.Scale(element, window.opera ? 1 : 0, { sync: true, transition: options.scaleTransition, restoreAfterFinish: true}),
      new Effect.Move(element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition })
    ], Object.extend({            
         beforeStartInternal: function(effect) {
           effect.effects[0].element.makePositioned().makeClipping(); 
         },
         afterFinishInternal: function(effect) {
           effect.effects[0].element.hide().undoClipping().undoPositioned().setStyle(oldStyle); }
       }, options)
  );
}

Effect.Pulsate = function(element) {
  element = $(element);
  var options    = arguments[1] || {};
  var oldOpacity = element.getInlineOpacity();
  var transition = options.transition || Effect.Transitions.sinoidal;
  var reverser   = function(pos){ return transition(1-Effect.Transitions.pulse(pos, options.pulses)) };
  reverser.bind(transition);
  return new Effect.Opacity(element, 
    Object.extend(Object.extend({  duration: 2.0, from: 0,
      afterFinishInternal: function(effect) { effect.element.setStyle({opacity: oldOpacity}); }
    }, options), {transition: reverser}));
}

Effect.Fold = function(element) {
  element = $(element);
  var oldStyle = {
    top: element.style.top,
    left: element.style.left,
    width: element.style.width,
    height: element.style.height };
  element.makeClipping();
  return new Effect.Scale(element, 5, Object.extend({   
    scaleContent: false,
    scaleX: false,
    afterFinishInternal: function(effect) {
    new Effect.Scale(element, 1, { 
      scaleContent: false, 
      scaleY: false,
      afterFinishInternal: function(effect) {
        effect.element.hide().undoClipping().setStyle(oldStyle);
      } });
  }}, arguments[1] || {}));
};

Effect.Morph = Class.create();
Object.extend(Object.extend(Effect.Morph.prototype, Effect.Base.prototype), {
  initialize: function(element) {
    this.element = $(element);
    if(!this.element) throw(Effect._elementDoesNotExistError);
    var options = Object.extend({
      style: {}
    }, arguments[1] || {});
    if (typeof options.style == 'string') {
      if(options.style.indexOf(':') == -1) {
        var cssText = '', selector = '.' + options.style;
        $A(document.styleSheets).reverse().each(function(styleSheet) {
          if (styleSheet.cssRules) cssRules = styleSheet.cssRules;
          else if (styleSheet.rules) cssRules = styleSheet.rules;
          $A(cssRules).reverse().each(function(rule) {
            if (selector == rule.selectorText) {
              cssText = rule.style.cssText;
              throw $break;
            }
          });
          if (cssText) throw $break;
        });
        this.style = cssText.parseStyle();
        options.afterFinishInternal = function(effect){
          effect.element.addClassName(effect.options.style);
          effect.transforms.each(function(transform) {
            if(transform.style != 'opacity')
              effect.element.style[transform.style.camelize()] = '';
          });
        }
      } else this.style = options.style.parseStyle();
    } else this.style = $H(options.style)
    this.start(options);
  },
  setup: function(){
    function parseColor(color){
      if(!color || ['rgba(0, 0, 0, 0)','transparent'].include(color)) color = '#ffffff';
      color = color.parseColor();
      return $R(0,2).map(function(i){
        return parseInt( color.slice(i*2+1,i*2+3), 16 ) 
      });
    }
    this.transforms = this.style.map(function(pair){
      var property = pair[0].underscore().dasherize(), value = pair[1], unit = null;

      if(value.parseColor('#zzzzzz') != '#zzzzzz') {
        value = value.parseColor();
        unit  = 'color';
      } else if(property == 'opacity') {
        value = parseFloat(value);
        if(/MSIE/.test(navigator.userAgent) && !window.opera && (!this.element.currentStyle.hasLayout))
          this.element.setStyle({zoom: 1});
      } else if(Element.CSS_LENGTH.test(value)) 
        var components = value.match(/^([\+\-]?[0-9\.]+)(.*)$/),
          value = parseFloat(components[1]), unit = (components.length == 3) ? components[2] : null;

      var originalValue = this.element.getStyle(property);
      return $H({ 
        style: property, 
        originalValue: unit=='color' ? parseColor(originalValue) : parseFloat(originalValue || 0), 
        targetValue: unit=='color' ? parseColor(value) : value,
        unit: unit
      });
    }.bind(this)).reject(function(transform){
      return (
        (transform.originalValue == transform.targetValue) ||
        (
          transform.unit != 'color' &&
          (isNaN(transform.originalValue) || isNaN(transform.targetValue))
        )
      )
    });
  },
  update: function(position) {
    var style = $H(), value = null;
    this.transforms.each(function(transform){
      value = transform.unit=='color' ?
        $R(0,2).inject('#',function(m,v,i){
          return m+(Math.round(transform.originalValue[i]+
            (transform.targetValue[i] - transform.originalValue[i])*position)).toColorPart() }) : 
        transform.originalValue + Math.round(
          ((transform.targetValue - transform.originalValue) * position) * 1000)/1000 + transform.unit;
      style[transform.style] = value;
    });
    this.element.setStyle(style);
  }
});

Effect.Transform = Class.create();
Object.extend(Effect.Transform.prototype, {
  initialize: function(tracks){
    this.tracks  = [];
    this.options = arguments[1] || {};
    this.addTracks(tracks);
  },
  addTracks: function(tracks){
    tracks.each(function(track){
      var data = $H(track).values().first();
      this.tracks.push($H({
        ids:     $H(track).keys().first(),
        effect:  Effect.Morph,
        options: { style: data }
      }));
    }.bind(this));
    return this;
  },
  play: function(){
    return new Effect.Parallel(
      this.tracks.map(function(track){
        var elements = [$(track.ids) || $$(track.ids)].flatten();
        return elements.map(function(e){ return new track.effect(e, Object.extend({ sync:true }, track.options)) });
      }).flatten(),
      this.options
    );
  }
});

Element.CSS_PROPERTIES = $w(
  'backgroundColor backgroundPosition borderBottomColor borderBottomStyle ' + 
  'borderBottomWidth borderLeftColor borderLeftStyle borderLeftWidth ' +
  'borderRightColor borderRightStyle borderRightWidth borderSpacing ' +
  'borderTopColor borderTopStyle borderTopWidth bottom clip color ' +
  'fontSize fontWeight height left letterSpacing lineHeight ' +
  'marginBottom marginLeft marginRight marginTop markerOffset maxHeight '+
  'maxWidth minHeight minWidth opacity outlineColor outlineOffset ' +
  'outlineWidth paddingBottom paddingLeft paddingRight paddingTop ' +
  'right textIndent top width wordSpacing zIndex');
  
Element.CSS_LENGTH = /^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/;

String.prototype.parseStyle = function(){
  var element = Element.extend(document.createElement('div'));
  element.innerHTML = '<div style="' + this + '"></div>';
  var style = element.down().style, styleRules = $H();
  
  Element.CSS_PROPERTIES.each(function(property){
    if(style[property]) styleRules[property] = style[property]; 
  });
  if(/MSIE/.test(navigator.userAgent) && !window.opera && this.indexOf('opacity') > -1) {
    styleRules.opacity = this.match(/opacity:\s*((?:0|1)?(?:\.\d*)?)/)[1];
  }
  return styleRules;
};

Element.morph = function(element, style) {
  new Effect.Morph(element, Object.extend({ style: style }, arguments[2] || {}));
  return element;
};

['setOpacity','getOpacity','getInlineOpacity','forceRerendering','setContentZoom',
 'collectTextNodes','collectTextNodesIgnoreClass','morph'].each( 
  function(f) { Element.Methods[f] = Element[f]; }
);

Element.Methods.visualEffect = function(element, effect, options) {
  s = effect.gsub(/_/, '-').camelize();
  effect_class = s.charAt(0).toUpperCase() + s.substring(1);
  new Effect[effect_class](element, options);
  return $(element);
};

Element.addMethods();

/* - ++resource++kukit.js - */
if(typeof(kukit)=='undefined'){var kukit={}}
kukit.E='Unknown message (kss optimized for production mode)';try{kukit.HAVE_SAFARI=navigator.vendor&&navigator.vendor.indexOf('Apple')!=-1;kukit.HAVE_IE=eval("_SARISSA_IS_IE")} catch(e){}
kukit.hasFirebug=false;kukit.log=function(str){};kukit.logError=kukit.log;kukit.logDebug=kukit.log;kukit.logFatal=kukit.log;kukit.logWarning=kukit.log;kukit.ut={};kukit.ut.FifoQueue=function(){this.reset()};kukit.ut.FifoQueue.prototype.reset=function(){this.elements=new Array()};kukit.ut.FifoQueue.prototype.push=function(obj){this.elements.push(obj)};kukit.ut.FifoQueue.prototype.pop=function(){return this.elements.shift()};kukit.ut.FifoQueue.prototype.empty=function(){return!this.elements.length};kukit.ut.FifoQueue.prototype.size=function(){return this.elements.length};kukit.ut.FifoQueue.prototype.front=function(){return this.elements[0]};kukit.ut.SortedQueue=function(comparefunc){if(comparefunc){this.comparefunc=comparefunc}
this.reset()};kukit.ut.SortedQueue.prototype.comparefunc=function(a,b){if(a<b){return-1} else if(a>b){return+1} else{return 0}};kukit.ut.SortedQueue.prototype.reset=function(){this.elements=new Array()};kukit.ut.SortedQueue.prototype.push=function(obj){var i=0;while(i<this.elements.length&&this.comparefunc(this.elements[i],obj)==-1){i++}
this.elements.splice(i,0,obj)};kukit.ut.SortedQueue.prototype.pop=function(){return this.elements.shift()};kukit.ut.SortedQueue.prototype.popn=function(n){return this.elements.splice(0,n)};kukit.ut.SortedQueue.prototype.empty=function(){return!this.elements.length};kukit.ut.SortedQueue.prototype.size=function(){return this.elements.length};kukit.ut.SortedQueue.prototype.get=function(n){return this.elements[n]};kukit.ut.SortedQueue.prototype.front=function(){return this.elements[0]};kukit.ut.evalBool=function(value,errname){if(value=='true'||value=='True'||value=='1'){value=true} else if(value=='false'||value=='False'||value=='0'||value==''){value=false}
return value};kukit.ut.evalInt=function(value,errname){value=parseInt(value);return value};kukit.ut.evalList=function(value,errname){value=value.replace(/^ +/,'');value=value.replace(/ +$/,'');value=value.split(/ *, */);return value};kukit.ut.TimerCounter=function(delay,func,restart){this.delay=delay;this.func=func;if(typeof(restart)=='undefined'){restart=false}
this.restart=restart;this.timer=null};kukit.ut.TimerCounter.prototype.start=function(){if(this.timer){throw kukit.E}
var self=this;var func=function(){self.timeout()};this.timer=setTimeout(func,this.delay)};kukit.ut.TimerCounter.prototype.timeout=function(){this.func();if(this.restart){this.timer=null;this.start()}};kukit.ut.TimerCounter.prototype.clear=function(){if(this.timer){window.clearTimeout(this.timer);this.timer=null}
this.restart=false};kukit.ut.Scheduler=function(func){this.func=func;this.timer=null;this.nextWake=null};kukit.ut.Scheduler.prototype.setNextWake=function(ts){if(this.nextWake){this.clear()}
if(!ts){return}
var now=(new Date()).valueOf();if(ts>now){this.nextWake=ts;var self=this;var func=function(){self.timeout()};this.timer=setTimeout(func,ts-now)} else{this.func()}};kukit.ut.Scheduler.prototype.setNextWakeAtLeast=function(ts){if(!ts||!this.nextWake||ts<this.nextWake){this.setNextWake(ts)} else{var now=(new Date()).valueOf()}};kukit.ut.Scheduler.prototype.timeout=function(){this.timer=null;this.nextWake=null;this.func()};kukit.ut.Scheduler.prototype.clear=function(){if(this.nextWake){window.clearTimeout(this.timer);this.timer=null;this.nextWake=null}};kukit.ut.SerializeScheduler=function(){this.items=[];this.lock=false};kukit.ut.SerializeScheduler.prototype.addPre=function(func,remark){this.items.push({func:func,remark:remark});this.execute()};kukit.ut.SerializeScheduler.prototype.addPost=function(func,remark){this.items.unshift({func:func,remark:remark});this.execute()};kukit.ut.SerializeScheduler.prototype.execute=function(){if(!this.lock){this.lock=true;while(true){var item=this.items.pop();if(!item){break}
try{item.func()} catch(e){this.lock=false;throw e}}
this.lock=false}};kukit.ut.registerEventListener=function(elem,event,func){if(elem.addEventListener){elem.addEventListener(event,func,false);return true} else if(elem.attachEvent){var result=elem.attachEvent("on"+event,func);return result}
return false};kukit.ut.DictCollector=function(){this.result={}};kukit.ut.DictCollector.prototype.add=function(key,value){this.result[key]=value};kukit.ut.TupleCollector=function(){this.result=[]};kukit.ut.TupleCollector.prototype.add=function(key,value){this.result.push([key,value])};kukit.err={};kukit.err.exceptionFactory=function(name){var exc=function(arg1,arg2,arg3,arg4,arg5){var kw=this.__init__(name,arg1,arg2,arg3,arg4,arg5);var err=new Error(kw.message);for(var key in kw){err[key]=kw[key]}
if(typeof err.number=='number'){err.toString=function(){return this.name+': '+this.message}}
return err};exc.prototype.__init__=function(name,message){var kw={};kw.name=name;kw.message=message;return kw};return exc};kukit.err.rd={};kukit.err.tk={};kukit.op={};kukit.op.Oper=function(dict){this.node=null;this.parms={};this.eventrule=null;this.binderinstance=null;this.orignode=null;this.action=null;this.browserevent=null;this.unrestrictedUpdate(dict)};kukit.op.Oper.prototype.clone=function(dict,restricted){var newoper=new kukit.op.Oper(this);newoper.unrestrictedUpdate(dict,restricted);return newoper};kukit.op.Oper.prototype.update=function(dict){this.unrestrictedUpdate(dict,true)};kukit.op.Oper.prototype.unrestrictedUpdate=function(dict,restricted){if(typeof(dict)=='undefined'){return}
for(var key in dict){var value=dict[key];if(typeof(value)!='function'){this[key]=value}}};kukit.op.Oper.prototype.logDebug=function(){};kukit.op.Oper.prototype.executeClientAction=function(name){var nodes=null;for(key in this.aparms){switch(key){case 'kssSelector':{nodes=this.aparms[key]} break;default:{throw kukit.E} break}}
var executeActions=kukit.actionsGlobalRegistry.get(name);if(nodes!=null){for(var i=0;i<nodes.length;i++){this.node=nodes[i];executeActions(this)}} else{executeActions(this)}};kukit.op.Oper.prototype.executeDefaultAction=function(name,optional){var namespace=this.binderinstance.__event_namespace__;var methodname=kukit.eventsGlobalRegistry.get(namespace,name).defaultactionmethodname;var success=false;if(!methodname){} else{if(typeof(this.defaultparms)!='undefined'){this.parms=this.defaultparms} else{this.parms={}}
this.binderinstance._EventBinder_callmethod(namespace,name,this,methodname);success=true}
return success};kukit.op.Oper.prototype.executeServerAction=function(name){var sa=new kukit.sa.ServerAction(name,this)};kukit.op.Oper.prototype.getEventName=function(){return this.eventrule.kss_selector.name};kukit.op.Oper.prototype.getEventNamespace=function(){return this.eventrule.kss_selector.namespace};kukit.op.Oper.prototype.hasExecuteActions=function(){if(this.eventrule){if(this.eventrule.actions.hasActions())
return true
var methodname=kukit.eventsGlobalRegistry.get(this.getEventNamespace(),this.getEventName()).defaultactionmethodname;return(typeof methodname!='undefined')} else
return false};kukit.op.Oper.prototype.makeExecuteActionsHook=function(filter){if(!this.hasExecuteActions()){return function(){}}
var eventname=this.getEventName();var self=this;var func_to_bind=function(dict){var newoper=self.clone(dict,true);if(filter&&!filter(newoper)) return false;newoper.binderinstance._EventBinder_triggerevent(eventname,newoper);return true};return func_to_bind};kukit.op.Oper.prototype.completeParms=function(mandatory,defaults,errname,allow_excess){var newparms={};for(var i=0;i<mandatory.length;i++){var next=mandatory[i];newparms[next]=this.parms[next]}
for(var key in defaults){var val=this.parms[key];if(typeof(val)=='undefined'){newparms[key]=defaults[key]} else{newparms[key]=val}}
for(var key in this.parms){if(typeof(newparms[key])=='undefined'){newparms[key]=this.parms[key]}}
this.parms=newparms};kukit.op.Oper.prototype.evalBool=function(key,errname){var value=this.parms[key];this.parms[key]=kukit.ut.evalBool(value,kukit.E)};kukit.op.Oper.prototype.evalInt=function(key,errname){var value=this.parms[key];this.parms[key]=kukit.ut.evalInt(value,kukit.E)};kukit.op.Oper.prototype.evalList=function(key,errname){var value=this.parms[key];this.parms[key]=kukit.ut.evalList(value,kukit.E)};kukit.Engine=function(){this.baseUrl=this.calculateBase();this.documentRules=new kukit.rd.MethodTable();this._ruleProcessorClasses={};this._ruleProcessorClasses['kss']=kukit.kssp.KssRuleProcessor;this._ruleProcessors=new Array();this.rules=new Array();this.bindScheduler=new kukit.ut.SerializeScheduler();this.statevars={};this.requestManager=new kukit.rm.RequestManager();this.binderInfoRegistry=new kukit.er.BinderInfoRegistry();this.loadScheduler=new kukit.rd.LoadActions();this.initializedOnDOMLoad=false;this.setupEventsQueue=[];this.setupEventsInProgress=false};kukit.Engine.prototype.calculateBase=function(){var base='';try{var _dummy=document;_dummy=window} catch(e){return base}
var nodes=document.getElementsByTagName("link");if(nodes.length>0){for(var i=0;i<nodes.length;i++){var link=nodes[i];if(link.rel=='kss-base-url'){return link.href}}}
nodes=document.getElementsByTagName("base");if(nodes.length==0){var base=window.location.href;var pieces=base.split('/');pieces.pop();base=pieces.join('/')} else{base=nodes[0].href;var baselen=base.length;if(baselen>0&&base.substring(baselen-1)=='/'){base=base.substring(0,baselen-1)}}
return base};kukit.Engine.prototype.getRuleSheetLinks=function(){var nodes=document.getElementsByTagName("link");var results=[];for(var i=0;i<nodes.length;i++){if(kukit.isKineticStylesheet(nodes[i])){var res_type=null;if((nodes[i].type=='text/css')||(nodes[i].type=='text/kss')){res_type='kss'}
results[results.length]=new kukit.RuleSheetLink(nodes[i].href,res_type)}}
return results};kukit.isKineticStylesheet=function(node){var rel=node.rel;if(rel=="kinetic-stylesheet"){return true}
if(rel=="kukit"||rel=="k-stylesheet"){return true}
return false};kukit.Engine.prototype.setupEvents=function(in_nodes){if(this.setupEventsInProgress){this.setupEventsQueue=this.setupEventsQueue.concat(in_nodes)} else{this.doSetupEvents(in_nodes)}};kukit.Engine.prototype.beginSetupEventsCollection=function(){this.setupEventsInProgress=true};kukit.Engine.prototype.finishSetupEventsCollection=function(){this.setupEventsInProgress=false;var setupEventsQueue=this.setupEventsQueue;this.setupEventsQueue=[];this.doSetupEvents(setupEventsQueue)};kukit.Engine.prototype.doSetupEvents=function(in_nodes){var self=this;var deferred_setup_events=function(){self._setupEvents(in_nodes)};var found=false;if(!in_nodes){found=true} else{for(var i=0;i<in_nodes.length;i++){var node=in_nodes[i];if(node.nodeType==1){if(!found){found=true}}}}
if(found){this.bindScheduler.addPre(deferred_setup_events,kukit.E)}};kukit.Engine.prototype._setupEvents=function(in_nodes){var phase;if(typeof(in_nodes)=='undefined'){phase=1} else{phase=2}
this.binderInfoRegistry.startBindingPhase();var rules=this.rules;var ruletable=new kukit.rd.RuleTable(this.loadScheduler);for(var y=0;y<rules.length;y++){rules[y].mergeForSelectedNodes(ruletable,phase,in_nodes)}
if(phase==1){this.documentRules.bindall(phase)}
ruletable.bindall(phase);this.binderInfoRegistry.processBindingEvents()};kukit.Engine.prototype.initializeRules=function(){if(window.kukitRulesInitializing||window.kukitRulesInitialized){return}
kukit.engine=this;window.kukitRulesInitializing=true;var rulelinks=this.getRuleSheetLinks();for(var i=0;i<rulelinks.length;i++){var rulelink=rulelinks[i];var ruleProcessorClass=this._ruleProcessorClasses[rulelink.res_type];if(ruleProcessorClass){var ruleprocessor=new ruleProcessorClass(rulelink.href);ruleprocessor.load();ruleprocessor.parse();this._ruleProcessors[this._ruleProcessors.length]=ruleprocessor}}
this.setupEvents();window.kukitRulesInitializing=false;window.kukitRulesInitialized=true};kukit.initializeRules=function(){kukit.bootstrap()};kukit.RuleSheetLink=function(href,res_type){this.href=href;this.res_type=res_type};kukit.bootstrap=function(){var engine=new kukit.Engine();engine.initializeRules()};kukit.bootstrapFromDOMLoad=function(){var engine=new kukit.Engine();engine.initializedOnDOMLoad=true;engine.initializeRules()};if(typeof(window)!='undefined'){kukit.ut.registerEventListener(window,"load",kukit.bootstrap)}
kukit.tk={};kukit.tk._TokenBase=function(){};kukit.tk._TokenBase.prototype.emitError=function(txt){throw kukit.E};kukit.tk._TokenBase.prototype.setSrcStatus=function(eofOk){if(!this.finished&&this.src.text.length==this.src.pos){if(eofOk){this.finished=true} else{this.emitError(kukit.E)}}};kukit.tk._ParserBase=function(){};kukit.tk._ParserBase.prototype=new kukit.tk._TokenBase;kukit.tk._ParserBase.prototype.emitAndReturn=function(token){this.finished=true;return token};kukit.tk._ParserBase.prototype.nextStep=function(table){var src=this.src;var best_pos=src.text.length;var best_symbol=null;for(var symbol in table){var pos=src.text.indexOf(symbol,src.pos);if(pos!=-1&&pos<best_pos){best_pos=pos;best_symbol=symbol}}
if(best_pos>src.pos){this.result.push(new kukit.tk.Fraction(src,best_pos));src.pos=best_pos}
if(best_symbol){var tokens=eval(table[best_symbol]);if(typeof(tokens)!='undefined'){if(typeof(tokens.length)=='undefined'){tokens=[tokens]}
for(var i=0;i<tokens.length;i++){this.result.push(tokens[i])}}}};kukit.tk._ParserBase.prototype.process=function(){this.txt='';for(var i=0;i<this.result.length;i++){this.txt+=this.result[i].txt}};kukit.tk._ParserBase.prototype.expectToken=function(cursor,token){var i=cursor.next;if(token){var symbol=token.prototype.symbol;if(i>=this.result.length){this.emitError(kukit.E)} else if(this.result[i].symbol!=symbol){this.emitError(kukit.E)}} else{if(i>=this.result.length){this.emitError(kukit.E)}}
cursor.token=this.result[i];cursor.next+=1};kukit.tk._ParserBase.prototype.ifToken=function(cursor,token1,token2,token3,token4){var i=cursor.next;return(!(i>=this.result.length||this.result[i].symbol!=token1.prototype.symbol&&(!token2||this.result[i].symbol!=token2.prototype.symbol&&(!token3||this.result[i].symbol!=token3.prototype.symbol&&(!token4||this.result[i].symbol!=token4.prototype.symbol)))))};kukit.tk._ParserBase.prototype.digestTxt=function(cursor,token1,token2,token3,token4){this.digestExactTxt(cursor,token1,token2,token3,token4);cursor.txt=this.dewhitespaceAndTrim(cursor.txt)};kukit.tk._ParserBase.prototype.digestExactTxt=function(cursor,token1,token2,token3,token4){var result='';while(this.ifToken(cursor,token1,token2,token3,token4)){result+=this.result[cursor.next].txt;cursor.next++}
cursor.txt=result};kukit.tk._ParserBase.prototype.dewhitespace=function(txt){if(txt!=' '){txt=txt.replace(/[\r\n\t ]+/g,' ')}
return txt};kukit.tk._ParserBase.prototype.dewhitespaceAndTrim=function(txt){txt=this.dewhitespace(txt);if(txt&&txt.charAt(0)==' '){txt=txt.substr(1)}
txt=txt.replace(/ $/,'');return txt};kukit.tk.Fraction=function(src,endpos){this.txt=src.text.substring(src.pos,endpos);this.startpos=src.pos;this.endpos=src.pos;this.finished=true};kukit.tk.Fraction.prototype.symbol='fraction';kukit.tk.mkToken=function(symbol,txt){f=function(src){this.src=src;this.startpos=src.pos;if(src.text.substr(src.pos,txt.length)!=txt){this.emitError(kukit.E)} else{src.pos+=txt.length;this.finished=true}
this.endpos=src.pos};f.prototype=new kukit.tk._TokenBase;f.prototype.symbol=symbol;f.prototype.txt=txt;return f};kukit.tk.mkParser=function(symbol,table){f=function(src,tokenClass,eofOk){this.src=src;this.startpos=src.pos;this.finished=false;this.result=[];if(tokenClass){this.result.push(new tokenClass(this.src))}
this.setSrcStatus(eofOk);while(!this.finished){this.nextStep(table);this.setSrcStatus(eofOk)}
this.endpos=src.pos;this.process()};f.prototype=new kukit.tk._ParserBase;f.prototype.symbol=symbol;return f};kukit.tk.Cursor=function(txt){this.text=txt;this.pos=0};kukit.tk.Cursor.prototype.makeMarker=function(pos){var cursor=new kukit.tk.Cursor();cursor.text=this.text;cursor.pos=pos;cursor.calcRowCol();return cursor};kukit.tk.Cursor.prototype.getRowCol=function(pos){if(typeof(pos)=='undefined'){pos=this.pos}
var index=0;var row=1;var next=0;while(true){next=this.text.indexOf('\n',index);if(next==-1||next>=pos){break}
index=next+1;row+=1}
var col=pos-index+1;return{'row':row,'col':col}};kukit.tk.Cursor.prototype.calcRowCol=function(pos){var rowcol=this.getRowCol();this.row=rowcol.row;this.col=rowcol.col};kukit.pr={};kukit.pr.ParamProviderRegistry=function(){this.content={}};kukit.pr.ParamProviderRegistry.prototype.register=function(name,func){if(typeof(func)=='undefined'){throw 'func argument is mandatory when registering a parameter provider (ParamProviderRegistry.register).'}
this.content[name]=func};kukit.pr.ParamProviderRegistry.prototype.exists=function(name){var entry=this.content[name];return(typeof(entry)!='undefined')};kukit.pr.ParamProviderRegistry.prototype.get=function(name){var func=this.content[name];if(!func){if(name==''){return kukit.pr.IdentityPP} else{throw kukit.E}}
return func};kukit.pprovidersGlobalRegistry=new kukit.pr.ParamProviderRegistry();kukit.pr.IdentityPP=function(){};kukit.pr.IdentityPP.prototype={eval: function(args,node){return args[0]}};kukit.pprovidersGlobalRegistry.register('',kukit.pr.IdentityPP);kukit.pr.FormVarPP=function(){};kukit.pr.FormVarPP.prototype={eval: function(args,node){return kukit.fo.getFormVar(new kukit.fo.NamedFormLocator(args[0]),args[1])}};kukit.pprovidersGlobalRegistry.register('formVar',kukit.pr.FormVarPP);kukit.pr.CurrentFormVarPP=function(){};kukit.pr.CurrentFormVarPP.prototype={eval: function(args,node){if(args.length==1){return kukit.fo.getFormVar(new kukit.fo.CurrentFormLocator(node),args[0])} else{return kukit.fo.getValueOfFormElement(node)}}};kukit.pprovidersGlobalRegistry.register('currentFormVar',kukit.pr.CurrentFormVarPP);kukit.pr.CurrentFormVarFromKssAttrPP=function(){};kukit.pr.CurrentFormVarFromKssAttrPP.prototype={eval: function(args,node){var argname=args[0];var recurseParents=false;if(args.length==2){kukit.ut.evalBool(args[1],kukit.E);recurseParents=args[1]}
var formvarname=kukit.dom.getRecursiveAttribute(node,argname,recurseParents,kukit.dom.getKssAttribute,kukit.dom.kssAttrNamespace);return kukit.fo.getFormVar(new kukit.fo.CurrentFormLocator(node),formvarname)}};kukit.pprovidersGlobalRegistry.register('currentFormVarFromKssAttr',kukit.pr.CurrentFormVarFromKssAttrPP);kukit.pr.FormPP=function(){};kukit.pr.FormPP.prototype={eval: function(args,node){return kukit.fo.getAllFormVars(new kukit.fo.NamedFormLocator(args[0]),new kukit.ut.DictCollector())}};kukit.pprovidersGlobalRegistry.register('form',kukit.pr.FormPP);kukit.pr.CurrentFormPP=function(){};kukit.pr.CurrentFormPP.prototype={eval: function(args,node){return kukit.fo.getAllFormVars(new kukit.fo.CurrentFormLocator(node),new kukit.ut.DictCollector())}};kukit.pprovidersGlobalRegistry.register('currentForm',kukit.pr.CurrentFormPP);kukit.pr.NodeAttrPP=function(){};kukit.pr.NodeAttrPP.prototype={eval: function(args,node){var argname=args[0];var recurseParents=false;if(args.length==2){recurseParents=args[1];kukit.ut.evalBool(recurseParents,kukit.E)}
return kukit.dom.getRecursiveAttribute(node,argname,recurseParents,kukit.dom.getAttribute)}};kukit.pprovidersGlobalRegistry.register('nodeAttr',kukit.pr.NodeAttrPP);kukit.pr.KssAttrPP=function(){};kukit.pr.KssAttrPP.prototype={eval: function(args,node){var argname=args[0];var recurseParents=false;if(args.length==2){recurseParents=args[1];kukit.ut.evalBool(recurseParents,kukit.E)}
return kukit.dom.getRecursiveAttribute(node,argname,recurseParents,kukit.dom.getKssAttribute,kukit.dom.kssAttrNamespace)}};kukit.pprovidersGlobalRegistry.register('kssAttr',kukit.pr.KssAttrPP);kukit.pr.NodeContentPP=function(){};kukit.pr.NodeContentPP.prototype={eval: function(args,node){var recursive=false;if(args.length==1){recursive=args[0]}
return kukit.dom.textContent(node,recursive)}};kukit.pprovidersGlobalRegistry.register('nodeContent',kukit.pr.NodeContentPP);kukit.pr.StateVarPP=function(){};kukit.pr.StateVarPP.prototype={eval: function(args,node){var key=args[0];var value=kukit.engine.statevars[key];if(typeof(value)=='undefined'){throw kukit.E}
return value}};kukit.pprovidersGlobalRegistry.register('stateVar',kukit.pr.StateVarPP);kukit.pr.PassPP=function(){};kukit.pr.PassPP.prototype={eval: function(args,node,defaultparms){var key=args[0];var value=defaultparms[key];if(typeof(value)=='undefined'){throw kukit.E}
return value}};kukit.pprovidersGlobalRegistry.register('pass',kukit.pr.PassPP);kukit.pr.KssWidPP=function(){};kukit.pr.KssWidPP.prototype={eval: function(args,node){var argname=args[0];return kukit.dom.getRecursiveAttribute(node,argname,true,kukit.dom.getKssAttribute,kukit.dom.kssWidNamespace)}};kukit.pprovidersGlobalRegistry.register('kssWid',kukit.pr.KssWidPP);kukit.pr.KssUwidPP=function(){};kukit.pr.KssUwidPP.prototype={eval: function(args,node){return 'wid'+args[0]+'-'+kukit.pr.KssWidPP.eval(args,node)}};kukit.pprovidersGlobalRegistry.register('kssUwid',kukit.pr.KssUwidPP);kukit.rd={};kukit.rd.makeId=function(namespace,name){if(namespace==null){namespace=''}
return '@'+namespace+'@'+name};kukit.rd.makeMergeId=function(id,namespace,name){if(namespace==null){namespace=''}
return id+'@'+namespace+'@'+name};kukit.rd.KssSelector=function(isEvent,css,name,namespace,id,ppid){this.isEventSelector=isEvent;this.isMethodSelector=!isEvent;if(!name){throw 'KssSelector must have name'}
this.css=css;this.name=name;this.namespace=namespace;this.classname=null;this.id=id;this.ppid=ppid};kukit.rd.KssSelector.prototype.setIdAndClass=function(){this.classname=kukit.eventsGlobalRegistry.get(this.namespace,this.name).classname};kukit.rd.KssSelector.prototype.evalId=function(){if(this.ppid==null){if(this.id==null&&this.ppid==null){this.id=kukit.rd.makeId(this.namespace,this.classname)}
this.mergeid=kukit.rd.makeMergeId(this.id,this.namespace,this.name)}};kukit.rd.KssSelector.prototype.getId=function(node){if(this.id){return this.id} else{var id=this.ppid.pprovider.eval(this.ppid.args,node,{});if(!id){throw kukit.E}
return id}};kukit.rd.KssSelector.prototype.getMergeId=function(node){if(this.mergeid){return this.mergeid} else{var id=this.getId(node);this.mergeid=kukit.rd.makeMergeId(id,this.namespace,this.name)}};kukit.rd.KssTextValue=function(txt){this.txt=txt};kukit.rd.KssTextValue.prototype.isMethod=false;kukit.rd.KssTextValue.prototype.check=function(registry){this.pprovider=new(registry.get(''))()};kukit.rd.KssTextValue.prototype.evaluate=function(parms,key,node,defaultparms){parms[key]=this.pprovider.eval([this.txt],node,defaultparms)};kukit.rd.KssMethodValue=function(methodname,args){this.methodname=methodname;this.args=args};kukit.rd.KssMethodValue.prototype.isMethod=true;kukit.rd.KssMethodValue.prototype.check=function(registry){var f=registry.get(this.methodname);this.pprovider=new f()};kukit.rd.KssMethodValue.prototype.evaluate=function(parms,key,node,defaultparms){parms[key]=this.pprovider.eval(this.args,node,defaultparms)};kukit.rd.KssPseudoValue=function(methodname,arg){this.methodname=methodname;this.arg=arg};kukit.rd.KssPseudoValue.prototype.isMethod=true;kukit.rd.KssPseudoValue.prototype.check=function(){};kukit.rd.EventRuleNr=0;kukit.rd.EventRule=function(kss_selector,parms,actions){if(typeof(parms)=='undefined'){this.kss_selector=kss_selector} else{this.nr=kukit.rd.EventRuleNr;this.mergednr=null;kukit.rd.EventRuleNr=this.nr+1;this.kss_selector=kss_selector;this.parms=parms;this.actions=actions}};kukit.rd.EventRule.prototype.getNr=function(){if(this.mergednr){return this.mergednr} else{return this.nr}};kukit.rd.EventRule.prototype.mergeForSelectedNodes=function(ruletable,phase,in_nodes){if(this.kss_selector.isEventSelector){var nodes=kukit.dom.cssQuery(this.kss_selector.css,in_nodes);var counter=0;for(var y=0;y<nodes.length;y++){var node=nodes[y];if(typeof(node._kukitmark)=='undefined'){ruletable.add(node,this);counter+=1}}} else if(typeof(in_nodes)=='undefined'){kukit.engine.documentRules.add(this)}};kukit.rd.EventRule.prototype.getBinderInfo=function(node){var id=this.kss_selector.getId(node);return kukit.engine.binderInfoRegistry.getOrCreateBinderInfo(id,this.kss_selector.classname,this.kss_selector.namespace)};kukit.rd.EventRule.prototype.bind=function(node){var oper=new kukit.op.Oper();var binderinfo=this.getBinderInfo(node);oper.node=node;oper.eventrule=this;oper.binderinstance=binderinfo.binderinstance;oper.parms=this.parms;binderinfo.bindOper(oper)};kukit.rd.EventRule.prototype.isMerged=function(){return(this.mergednr!=null)};kukit.rd.EventRule.prototype.cloneForMerge=function(){var merged=new kukit.rd.EventRule(this.kss_selector);merged.actions=new kukit.rd.ActionSet();merged.parms={};merged.mergednr='X';merged.merge(this);merged.mergednr=this.getNr();return merged};kukit.rd.EventRule.prototype.merge=function(other){this.mergednr=this.mergednr+','+other.getNr();for(var key in other.parms){this.parms[key]=other.parms[key]}
this.actions.merge(other.actions)};kukit.rd.EventRule.prototype.mergeIntoDict=function(dict,key){var mergedrule=dict[key];if(typeof(mergedrule)=='undefined'){dict[key]=this} else{if(!mergedrule.isMerged()){mergedrule=mergedrule.cloneForMerge();dict[key]=mergedrule}
mergedrule.merge(this)}};kukit.rd.ActionSet=function(){this.content={}};kukit.rd.ActionSet.prototype.hasActions=function(){for(var name in this.content){return true}
return false};kukit.rd.ActionSet.prototype.merge=function(other){for(var key in other.content){var action=this.content[key];var action2=other.content[key];if(typeof(action)=='undefined'){if(action2.type!='X'){action=new kukit.rd.Action();this.content[key]=action} else{throw kukit.E}}
if(action2.type!='X'){action.merge(action2)} else{this.deleteAction(key)}}};kukit.rd.ActionSet.prototype.execute=function(oper){for(var key in this.content){var action=this.content[key];if(action.type!='E'){action.execute(oper)}}
if(typeof(this.content['default'])=='undefined'){var name=oper.eventrule.kss_selector.name;oper=oper.clone({'parms':{}});oper.executeDefaultAction(name,true)}};kukit.rd.ActionSet.prototype.getOrCreateAction=function(name){var action=this.content[name];if(typeof(action)=='undefined'){action=new kukit.rd.Action();action.setName(name);this.content[name]=action}
return action};kukit.rd.ActionSet.prototype.getActionOrNull=function(name){var action=this.content[name];if(typeof(action)=='undefined'){action=null}
return action};kukit.rd.ActionSet.prototype.deleteAction=function(name){var action=this.content[name];delete this.content[name]};kukit.rd.ActionSet.prototype.getDefaultAction=function(){return this.getActionOrNull('default')};kukit.rd.ActionSet.prototype.getErrorActionFor=function(action){return this.getActionOrNull(action.error)};kukit.rd.Action=function(){this.name=null;this.error=null;this.parms={};this.type=null};kukit.rd.Action.prototype.setName=function(name){this.name=name;if(name=='default'){this.setType('D')}};kukit.rd.Action.prototype.setType=function(type){this.type=type};kukit.rd.Action.prototype.setError=function(error){this.error=error};kukit.rd.Action.prototype.merge=function(other){if(other.name!=null){this.setName(other.name)}
if(other.type!=null){this.setType(other.type)}
if(other.error!=null){this.setError(other.error)}
for(var key in other.parms){this.parms[key]=other.parms[key]}};kukit.rd.Action.prototype.makeActionOper=function(oper){var parms={};var aparms={};if(typeof(oper.defaultparms)=='undefined'){oper.defaultparms={}}
for(var key in this.parms){var kssvalue=this.parms[key];if(key.match(/^kss/)){kssvalue.evaluate(aparms,key,oper.node,oper.defaultparms)} else{kssvalue.evaluate(parms,key,oper.node,oper.defaultparms)}}
var aoper=oper.clone({'parms':parms,'aparms':aparms,'action':this});return aoper};kukit.rd.Action.prototype.execute=function(oper){oper=this.makeActionOper(oper);switch(this.type){case 'D':{var name=oper.eventrule.kss_selector.name;oper.executeDefaultAction(name)} break;case 'S':{oper.executeServerAction(this.name)} break;case 'C':{oper.executeClientAction(this.name)} break;case 'E':{oper.executeClientAction(this.name)} break}};kukit.rd.LoadActions=function(){this.items=[]};kukit.rd.LoadActions.prototype.empty=function(){return(this.size()==0)};kukit.rd.LoadActions.prototype.size=function(){return this.items.length};kukit.rd.LoadActions.prototype.push=function(f){if(this.items.length>=100){throw('Infinite recursion, stack full')}
this.items.push(f)};kukit.rd.LoadActions.prototype.execute=function(){var f=this.items.shift();if(f){f();return true} else{return false}};kukit.rd.LoadActions.prototype.executeAll=function(){var i=0;while(true){var success=this.execute();if(!success){break}
i++}
return i};kukit.rd.RuleTable=function(loadScheduler){this.loadScheduler=loadScheduler;this.nodes={}};kukit.rd.RuleTable.prototype.add=function(node,eventrule){var nodehash=kukit.rd.hashnode(node);var nodeval=this.nodes[nodehash];if(typeof(nodeval)=='undefined'){nodeval={'node':node,'val':{}};this.nodes[nodehash]=nodeval}
eventrule.mergeIntoDict(nodeval.val,eventrule.kss_selector.getMergeId(node))};kukit.rd.RuleTable.prototype.bindall=function(phase){var counter=0;for(var nodehash in this.nodes){var nodeval=this.nodes[nodehash];nodeval.node._kukitmark=phase;for(var id in nodeval.val){var eventrule=nodeval.val[id];eventrule.bind(nodeval.node)}
counter+=1}
var loadactions=this.loadScheduler;if(!loadactions.empty()){var nr=loadactions.executeAll()}};kukit.rd.uid=0;kukit.rd.hashnode=function(node){if(node==null){return '<<DOCUMENT>>'}
var id=node.uniqueID;if(typeof(id)=='undefined'){id=kukit.rd.uid;node.uniqueID=id;kukit.rd.uid++}
return id};kukit.rd.MethodTable=function(){this.content={};this.content['document']={};this.content['behaviour']={}};kukit.rd.MethodTable.prototype.add=function(eventrule){var category=eventrule.kss_selector.css;var dict=this.content[category];eventrule.mergeIntoDict(dict,eventrule.kss_selector.getMergeId())};kukit.rd.MethodTable.prototype.getMergedRule=function(category,name,binderinstance){var dict=this.content[category];var namespace=binderinstance.__event_namespace__;var id=binderinstance.__binder_id__;var mergeid=kukit.rd.makeMergeId(id,namespace,name);var mergedrule=dict[mergeid];if(typeof(mergedrule)=='undefined'){mergedrule=null}
return mergedrule};kukit.rd.MethodTable.prototype.bindall=function(){var documentrules=this.content['document'];var counter=0;for(var mergeid in documentrules){documentrules[mergeid].bind(null);counter+=1}};kukit.kssp={};kukit.kssp.commentbegin=kukit.tk.mkToken('commentbegin',"\/\*");kukit.kssp.commentend=kukit.tk.mkToken('commentend',"\*\/");kukit.kssp.openbrace=kukit.tk.mkToken('openbrace',"{");kukit.kssp.closebrace=kukit.tk.mkToken('closebrace',"}");kukit.kssp.openbracket=kukit.tk.mkToken('openbracket',"[");kukit.kssp.closebracket=kukit.tk.mkToken('closebracket',"]");kukit.kssp.openparent=kukit.tk.mkToken('openparent',"(");kukit.kssp.closeparent=kukit.tk.mkToken('closeparent',")");kukit.kssp.semicolon=kukit.tk.mkToken('semicolon',";");kukit.kssp.colon=kukit.tk.mkToken('colon',":");kukit.kssp.quote=kukit.tk.mkToken('quote',"'");kukit.kssp.dquote=kukit.tk.mkToken('dquote','"');kukit.kssp.backslash=kukit.tk.mkToken('backslash','\x5c');kukit.kssp.comma=kukit.tk.mkToken('comma',",");kukit.kssp.equals=kukit.tk.mkToken('equals',"=");kukit.kssp.Document=kukit.tk.mkParser('document',{"\/\*":'new kukit.kssp.Comment(this.src, kukit.kssp.commentbegin)',"{":'new kukit.kssp.Block(this.src, kukit.kssp.openbrace)'});kukit.kssp.Document.prototype.process=function(){this.eventRules=[];var cursor={'next':0};while(cursor.next<this.result.length){this.digestTxt(cursor,kukit.tk.Fraction,kukit.kssp.Comment);var key=cursor.txt;if(!key){break}
this.expectToken(cursor,kukit.kssp.Block);this.addBlock(key,cursor.token)}
this.result=[];this.txt=''};kukit.kssp.Document.prototype.addBlock=function(key,block){var src=new kukit.tk.Cursor(key+' ');var parser=new kukit.kssp.KssSelector(src,null,true);if(block.evt_name!=null){if(block.evt_name!=parser.kssSelector.name||block.evt_namespace!=parser.kssSelector.namespace){block.emitError(kukit.E)}}
var eventRule=new kukit.rd.EventRule(parser.kssSelector,block.evt_parms,block.actions);this.eventRules.push(eventRule)};kukit.kssp.Comment=kukit.tk.mkParser('comment',{"\*\/":'this.emitAndReturn(new kukit.kssp.commentend(this.src))'});kukit.kssp.Comment.prototype.process=function(){this.result=[];this.txt=' '};kukit.kssp.Block=kukit.tk.mkParser('block',{";":'new kukit.kssp.semicolon(this.src)',":":'[new kukit.kssp.colon(this.src), new kukit.kssp.PropValue(this.src)]',"}":'this.emitAndReturn(new kukit.kssp.closebrace(this.src))'});kukit.kssp.Block.prototype.process=function(){this.evt_parms={};this.evt_name=null;this.evt_namespace=null;this.actions=new kukit.rd.ActionSet();var cursor={'next':1};while(cursor.next<this.result.length-1){this.digestTxt(cursor,kukit.tk.Fraction,kukit.kssp.Comment);var key=cursor.txt;if(!key){break}
this.expectToken(cursor,kukit.kssp.colon);this.expectToken(cursor,kukit.kssp.PropValue);this.addDeclaration(key,cursor.token.value);if(cursor.next==this.result.length-1) break;this.expectToken(cursor,kukit.kssp.semicolon)}
this.result=[];this.txt=''};kukit.kssp.Block.prototype.addDeclaration=function(key,value){var ppRegistries={'':kukit.pprovidersGlobalRegistry,'kssSelector':kukit.sr.pproviderSelRegistry,'kssSubmitForm':kukit.fo.pproviderFormRegistry};var splitkey=key.split('-');var name=splitkey[0];if(name=='evt'){var enamespace;var ename;var ekey;if(splitkey.length==3){ename=splitkey[1];ekey=splitkey[2]} else{enamespace=splitkey[1];ename=splitkey[2];ekey=splitkey[3]}
if(this.evt_name==null){this.evt_name=ename;this.evt_namespace=enamespace}
this.evt_parms[ekey]=value.txt} else if(name=='action'){var atab={'server':'S','client':'C','cancel':'X'};var actionType=atab[splitkey[1]];var action=this.actions.getOrCreateAction(value.txt);if(actionType!='X'||action.type==null){action.setType(actionType)} else{this.actions.deleteAction(value.txt)}} else{var aname;var akey;if(splitkey.length==2){aname=splitkey[0];akey=splitkey[1]} else{aname=splitkey[0]+'-'+splitkey[1];akey=splitkey[2]}
var action=this.actions.getOrCreateAction(aname);switch(akey){case 'error':{action.setError(value.txt);var err_action=this.actions.getOrCreateAction(value.txt);err_action.setType('E')} break;default:{action.parms[akey]=value;var registry=ppRegistries[akey];if(typeof(registry)=='undefined'){registry=ppRegistries['']}
try{value.check(registry)} catch(e){throw kukit.E}} break}}};kukit.kssp.PropValue=kukit.tk.mkParser('propvalue',{";":'this.emitAndReturn()',"}":'this.emitAndReturn()',")":'this.emitAndReturn()',",":'this.emitAndReturn()',"'": 'new kukit.kssp.String(this.src,kukit.kssp.quote)','"':'new kukit.kssp.String2(this.src, kukit.kssp.dquote)',"\/\*":'new kukit.kssp.Comment(this.src, kukit.kssp.commentbegin)',"(":'new kukit.kssp.MethodArgs(this.src, kukit.kssp.openparent)'});kukit.kssp.PropValue.prototype.process=function(){var cursor={'next':0};this.digestTxt(cursor,kukit.tk.Fraction,kukit.kssp.Comment);this.txt='';var txt=cursor.txt;if(this.ifToken(cursor,kukit.kssp.String)){if(txt){this.emitError(kukit.E)}
this.expectToken(cursor,kukit.kssp.String);this.produceTxt(cursor.token.txt)} else if(this.ifToken(cursor,kukit.kssp.MethodArgs)){if(!txt||txt.indexOf(' ')!=-1){this.emitError(kukit.E)}
this.expectToken(cursor,kukit.kssp.MethodArgs);this.value=new this.valueClass(txt,cursor.token.args)} else{if(!this.multiword_allowed&&txt.indexOf(' ')!=-1){this.emitError(kukit.E)}
this.produceTxt(txt)}
if(cursor.next<this.result.length){this.digestTxt(cursor,kukit.tk.Fraction,kukit.kssp.Comment);if(cursor.next<this.result.length||cursor.txt){this.emitError(kukit.E)}}
this.result=[]};kukit.kssp.PropValue.prototype.multiword_allowed=true;kukit.kssp.PropValue.prototype.valueClass=kukit.rd.KssMethodValue;kukit.kssp.PropValue.prototype.produceTxt=function(txt){this.value=new kukit.rd.KssTextValue(txt)};kukit.kssp.PropValueInMethod=kukit.tk.mkParser('propvalue',{";":'this.emitAndReturn()',"}":'this.emitAndReturn()',")":'this.emitAndReturn()',"]":'this.emitAndReturn()',",":'this.emitAndReturn()',"'": 'new kukit.kssp.String(this.src,kukit.kssp.quote)','"':'new kukit.kssp.String2(this.src, kukit.kssp.dquote)',"\/\*":'new kukit.kssp.Comment(this.src, kukit.kssp.commentbegin)'});kukit.kssp.PropValueInMethod.prototype.multiword_allowed=false;kukit.kssp.PropValueInMethod.prototype.process=kukit.kssp.PropValue.prototype.process;kukit.kssp.PropValueInMethod.prototype.produceTxt=function(txt){this.txt=txt};kukit.kssp.PropValueInPseudo=kukit.tk.mkParser('propvalue',{"{":'this.emitAndReturn()'," ":'this.emitAndReturn()',"\t":'this.emitAndReturn()',"\n":'this.emitAndReturn()',"\r":'this.emitAndReturn()',"\/\*":'this.emitAndReturn()',":":'this.emitAndReturn()',"(":'[new kukit.kssp.openparent(this.src), new kukit.kssp.PropValue(this.src)]',")":'this.emitAndReturn(new kukit.kssp.closeparent(this.src))'});kukit.kssp.PropValueInPseudo.prototype.multiword_allowed=false;kukit.kssp.PropValueInPseudo.prototype.process=function(){var cursor={'next':0};this.digestTxt(cursor,kukit.tk.Fraction,kukit.kssp.Comment);this.txt='';var txt=cursor.txt;if(this.ifToken(cursor,kukit.kssp.String)){if(txt){this.emitError(kukit.E)}
this.expectToken(cursor,kukit.kssp.String);this.produceTxt(cursor.token.txt)} else if(this.ifToken(cursor,kukit.kssp.openparent)){this.expectToken(cursor,kukit.kssp.openparent);this.expectToken(cursor,kukit.kssp.PropValue);this.value=new kukit.rd.KssPseudoValue(txt,cursor.token.value);this.digestTxt(cursor,kukit.tk.Fraction,kukit.kssp.Comment);if(cursor.txt){this.emitError(kukit.E)}
this.expectToken(cursor,kukit.kssp.closeparent)} else{if(!this.multiword_allowed&&txt.indexOf(' ')!=-1){this.emitError(kukit.E)}
this.produceTxt(txt)}
if(cursor.next<this.result.length){this.digestTxt(cursor,kukit.tk.Fraction,kukit.kssp.Comment);if(cursor.next<this.result.length||cursor.txt){this.emitError(kukit.E)}}
this.result=[]};kukit.kssp.PropValueInPseudo.prototype.produceTxt=function(txt){this.value=new kukit.rd.KssPseudoValue(txt,[])};kukit.kssp.String=kukit.tk.mkParser('string',{"'": 'this.emitAndReturn(new kukit.kssp.quote(this.src))','\x5c':'new kukit.kssp.Backslashed(this.src, kukit.kssp.backslash)'});kukit.kssp.String.prototype.process=function(){this.txt='';for(var i=1;i<this.result.length-1;i++){this.txt+=this.result[i].txt}};kukit.kssp.String2=kukit.tk.mkParser('string',{'"':'this.emitAndReturn(new kukit.kssp.dquote(this.src))','\x5c':'new kukit.kssp.Backslashed(this.src, kukit.kssp.backslash)'});kukit.kssp.String2.prototype.process=kukit.kssp.String.prototype.process;kukit.kssp.Backslashed=kukit.tk.mkParser('backslashed',{});kukit.kssp.Backslashed.prototype.nextStep=function(table){var src=this.src;var length=src.text.length;if(length<src.pos+1){this.emitError(kukit.E)} else{this.result.push(new kukit.tk.Fraction(src,src.pos+1));this.src.pos+=1;this.finished=true}};kukit.kssp.Backslashed.prototype.process=function(){this.txt=this.result[1].txt};kukit.kssp.MethodArgs=kukit.tk.mkParser('methodargs',{"'": 'new kukit.kssp.String(this.src,kukit.kssp.quote)','"':'new kukit.kssp.String2(this.src, kukit.kssp.dquote)',",":'new kukit.kssp.comma(this.src)',")":'this.emitAndReturn(new kukit.kssp.closeparent(this.src))',"\/\*":'new kukit.kssp.Comment(this.src, kukit.kssp.commentbegin)'});kukit.kssp.MethodArgs.prototype.process=function(){this.args=[];var cursor={'next':1};while(cursor.next<this.result.length-1){this.digestTxt(cursor,kukit.tk.Fraction,kukit.kssp.Comment);var value=cursor.txt;if(!value){if(cursor.next==this.result.length-1) break;this.expectToken(cursor,kukit.kssp.String);value=cursor.token.txt} else{if(value.indexOf(' ')!=-1){this.emitError(kukit.E)}}
this.args.push(value);if(cursor.next==this.result.length-1) break;this.expectToken(cursor,kukit.kssp.comma)}
this.result=[];this.txt=''};kukit.kssp.KssSelector=kukit.tk.mkParser('kssselector',{":":'[new kukit.kssp.colon(this.src), new kukit.kssp.PropValueInPseudo(this.src)]',"{":'this.emitAndReturn()',"\/\*":'new kukit.kssp.Comment(this.src, kukit.kssp.commentbegin)'});kukit.kssp.KssSelector.prototype.process=function(){var name;var namespace=null;var id=null;var tokenindex=this.result.length-1;var cycle=true;while(cycle&&tokenindex>=0){var token=this.result[tokenindex];switch(token.symbol){case kukit.tk.Fraction.prototype.symbol:{if(token.txt.match(/^[\r\n\t ]*$/)!=null){tokenindex-=1} else{this.emitError(kukit.E)}} break;case kukit.kssp.Comment.prototype.symbol:{tokenindex-=1} break;default:{cycle=false} break}}
tokenindex-=2
if(tokenindex<0||this.result[tokenindex+2].symbol!=kukit.kssp.PropValueInPseudo.prototype.symbol||this.result[tokenindex+1].symbol!=kukit.kssp.colon.prototype.symbol||this.result[tokenindex].symbol!=kukit.tk.Fraction.prototype.symbol){this.emitError(kukit.E)}
var lasttoken=this.result[tokenindex];var commatoken=this.result[tokenindex+1];var pseudotoken=this.result[tokenindex+2];var txt=lasttoken.txt;if(txt.match(/[\r\n\t ]$/)!=null){this.emitError(kukit.E)}
if(!pseudotoken.value.methodname){this.emitError(kukit.E)}
css=this.src.text.substring(this.startpos,commatoken.startpos);var singleword=css.replace(/[\r\n\t ]/g,' ');if(singleword&&singleword.charAt(0)==' '){singleword=singleword.substring(1)}
var isEvent=(singleword!='document'&&singleword!='behaviour');if(!isEvent){css=singleword}
var id=null;var ppid=null;if(pseudotoken.value.arg.isMethod){ppid=pseudotoken.value.arg;ppid.check(kukit.pprovidersGlobalRegistry)} else{id=pseudotoken.value.arg.txt}
var name=pseudotoken.value.methodname;var splitname=name.split('-');var namespace=null;if(splitname.length>2){this.emitError(kukit.E)} else if(splitname.length==2){name=splitname[1];namespace=splitname[0]}
this.kssSelector=new kukit.rd.KssSelector(isEvent,css,name,namespace,id,ppid);this.txt='';this.result=[]};kukit.kssp.KssRuleProcessor=function(href){this.href=href;this.loaded=false};kukit.kssp.KssRuleProcessor.prototype.load=function(){var domDoc=new XMLHttpRequest();domDoc.open("GET",this.href,false);domDoc.send(null);this.txt=domDoc.responseText;this.loaded=true};kukit.kssp.KssRuleProcessor.prototype.parse=function(){var src=new kukit.tk.Cursor(this.txt);var parser=new kukit.kssp.Document(src,null,true);for(var i=0;i<parser.eventRules.length;i++){var rule=parser.eventRules[i];rule.kss_selector.setIdAndClass();rule.kss_selector.evalId();kukit.engine.rules.push(rule)}};kukit.er={};kukit.er.eventClassCounter=0;kukit.er.EventRegistry=function(){this.content={};this.classes={};this.eventsets=[]};kukit.er.EventRegistry.prototype.registerBinder=function(classname,func){if(typeof(func)=='undefined'){throw kukit.E}
if(this.classes[classname]){return}
kukit.er.decorateEventBinderClass(func);this.classes[classname]=func};kukit.er.EventRegistry.prototype.existsBinder=function(classname){var func=this.classes[classname];return(typeof(func)!='undefined')};kukit.er.EventRegistry.prototype.getBinder=function(classname){var func=this.classes[classname];if(!func){throw kukit.E}
return func};kukit.er.EventRegistry.prototype._register=function(namespace,eventname,klass,bindmethodname,defaultactionmethodname,itername){if(typeof(defaultactionmethodname)=='undefined'){throw kukit.E}
var classname=klass.prototype.__classname__;if(typeof(classname)=='undefined'){classname=''+kukit.er.eventClassCounter;kukit.er.eventClassCounter+=1;this.registerBinder(classname,klass);klass.prototype.__classname__=classname}
if(!eventname){throw kukit.E}
var key=this._getKey(namespace,eventname);var entry=this.content[key];if(typeof(entry)!='undefined'){if(key[0]=='-'){key=key.substring(1)}
throw kukit.E}
if(bindmethodname&&!klass.prototype[bindmethodname]){throw kukit.E}
if(defaultactionmethodname&&!klass.prototype[defaultactionmethodname]){throw kukit.E}
if(!kukit.er.getBindIterator(itername)){throw kukit.E}
this.content[key]={'classname':classname,'bindmethodname':bindmethodname,'defaultactionmethodname':defaultactionmethodname,'itername':itername}};kukit.er.EventRegistry.prototype._registerEventSet=function(namespace,names,itername,bindmethodname){this.eventsets.push({'namespace':namespace,'names':names,'itername':itername,'bindmethodname':bindmethodname})};kukit.er.EventRegistry.prototype.register=function(namespace,eventname,klass,bindmethodname,defaultactionmethodname){this._register(namespace,eventname,klass,bindmethodname,defaultactionmethodname,'each_legacy');this._registerEventSet(namespace,[eventname],'each_legacy',bindmethodname)};kukit.er.EventRegistry.prototype.registerForAllEvents=function(namespace,eventnames,klass,bindmethodname,defaultactionmethodname,itername){if(typeof(eventnames)=='string'){eventnames=[eventnames]}
for(var i=0;i<eventnames.length;i++){var eventname=eventnames[i];this._register(namespace,eventname,klass,bindmethodname,defaultactionmethodname,itername)}
this._registerEventSet(namespace,eventnames,itername,bindmethodname)};kukit.er.EventRegistry.prototype._getKey=function(namespace,eventname){if(namespace==null){namespace=''} else if(namespace.split('-')>1){throw kukit.E}
return namespace+'-'+eventname};kukit.er.EventRegistry.prototype.exists=function(namespace,eventname){var key=this._getKey(namespace,eventname);var entry=this.content[key];return(typeof(entry)!='undefined')};kukit.er.EventRegistry.prototype.get=function(namespace,eventname){var key=this._getKey(namespace,eventname);var entry=this.content[key];if(typeof(entry)=='undefined'){if(key.substr(0,1)=='-'){throw kukit.E} else{throw kukit.E}}
return entry};kukit.eventsGlobalRegistry=new kukit.er.EventRegistry();kukit.er.eventRegistry={};kukit.er.eventRegistry.register=function(namespace,eventname,klass,bindmethodname,defaultactionmethodname){kukit.logWarning('Deprecated kukit.er.eventRegistry.register, use kukit.eventsGlobalRegistry.register instead! ('+namespace+'-'+eventname+')');kukit.eventsGlobalRegistry.register(namespace,eventname,klass,bindmethodname,defaultactionmethodname)};kukit.er.EventBinder__continue_event__=function(name,node,defaultparms){var oper=new kukit.op.Oper();oper.node=node;if(node){var info=kukit.engine.binderInfoRegistry.getBinderInfoById(this.__binder_id__);var newoper=info.bound.getBoundOperForNode(name,node);if(newoper){oper=newoper}} else{oper.eventrule=kukit.engine.documentRules.getMergedRule('document',name,this)}
var behav_eventrule=kukit.engine.documentRules.getMergedRule('behaviour',name,this);if(behav_eventrule){if(!oper.eventrule){oper.eventrule=behav_eventrule} else{}}
if(typeof(defaultparms)!='undefined'){oper.defaultparms=defaultparms} else{oper.defaultparms={}}
this._EventBinder_triggerevent(name,oper)};kukit.er.EventBinder__continue_event_allnodes__=function(name,defaultparms){var executed=0;var oper=new kukit.op.Oper();var info=kukit.engine.binderInfoRegistry.getBinderInfoById(this.__binder_id__);var opers=info.bound.getBoundOpers(name);for(var i=0;i<opers.length;i++){var oper=opers[i];var newoper=oper.clone();if(typeof(defaultparms)!='undefined'){newoper.defaultparms=defaultparms} else{newoper.defaultparms={}}
this._EventBinder_triggerevent(name,newoper);executed+=1}};kukit.er.EventBinder_makeFuncToBind=function(name,node){var executor=new kukit.er.LateBinder(this,name,node);return function(){executor.executeActions()}};kukit.er.LateBinder=function(binderinstance,name,node){this.binderinstance=binderinstance;this.name=name;this.node=node;this.bound=null};kukit.er.LateBinder.prototype.executeActions=function(){if(!this.bound){if(kukit.hasFirebug){kukit.log(this.node)}
var info=kukit.engine.binderInfoRegistry.getBinderInfoById(this.binderinstance.__binder_id__);var oper=info.bound.getBoundOperForNode(this.name,this.node);if(oper){oper.parms={};this.bound=function(){this.binderinstance._EventBinder_triggerevent(this.name,oper)}} else{this.bound=function(){}}}
this.bound()};kukit.er.EventBinder_triggerevent=function(name,oper){oper.binderinstance=this;if(oper.eventrule){oper.eventrule.actions.execute(oper)} else{var namespace=this.__event_namespace__;var success=oper.executeDefaultAction(name,true);if(!success){throw kukit.E}}};kukit.er.EventBinder_callmethod=function(namespace,name,oper,methodname){var method=this[methodname];if(!method){throw kukit.E}
oper.binderinstance=this;method.call(this,name,oper)};kukit.er.decorateEventBinderClass=function(cls){cls.prototype.__continue_event__=kukit.er.EventBinder__continue_event__;cls.prototype.__continue_event_allnodes__=kukit.er.EventBinder__continue_event_allnodes__;cls.prototype._EventBinder_triggerevent=kukit.er.EventBinder_triggerevent;cls.prototype._EventBinder_callmethod=kukit.er.EventBinder_callmethod;cls.prototype.__make_func_to_bind__=kukit.er.EventBinder_makeFuncToBind};kukit.er.BinderInfoRegistry=function(){this.info={}};kukit.er.BinderInfoRegistry.prototype.getOrCreateBinderInfo=function(id,classname,namespace){var binderinfo=this.info[id];if(typeof(binderinfo)=='undefined'){binderinstance=new(kukit.eventsGlobalRegistry.getBinder(classname))();binderinfo=this.info[id]=new kukit.er.BinderInfo(binderinstance);binderinstance.__binder_id__=id;binderinstance.__binder_classname__=classname;binderinstance.__event_namespace__=namespace} else if(binderinfo.getBinderInstance().__binder_classname__!=classname){throw kukit.E}
return binderinfo};kukit.er.BinderInfoRegistry.prototype.getBinderInfoById=function(id){var binderinfo=this.info[id];if(typeof(binderinfo)=='undefined'){throw kukit.E}
return binderinfo};kukit.er.BinderInfoRegistry.prototype.getSingletonBinderInfoByName=function(namespace,name){var classname=kukit.eventsGlobalRegistry.get(namespace,name).classname;var id=kukit.rd.makeId(namespace,classname);var binderinfo=this.info[id];if(typeof(binderinfo)=='undefined'){throw kukit.E}
return binderinfo};kukit.er.BinderInfoRegistry.prototype.startBindingPhase=function(){for(var id in this.info){var binderinfo=this.info[id];binderinfo.startBindingPhase()}};kukit.er.BinderInfoRegistry.prototype.processBindingEvents=function(){for(var id in this.info){var binderinfo=this.info[id];binderinfo.processBindingEvents()}};kukit.er.BinderInfo=function(binderinstance){this.binderinstance=binderinstance;this.bound=new kukit.er.OperRegistry();this.startBindingPhase()};kukit.er.BinderInfo.prototype.getBinderInstance=function(){return this.binderinstance};kukit.er.BinderInfo.prototype.startBindingPhase=function(){this.binding=new kukit.er.OperRegistry()};kukit.er.BinderInfo.prototype.bindOper=function(oper){this.bound.checkOperBindable(oper);this.binding.bindOper(oper)};kukit.er.BinderInfo.prototype.processBindingEvents=function(){this.binding.processBindingEvents(this.binderinstance);this.binding.propagateTo(this.bound);this.binding=null};kukit.er.OperRegistry=function(){this.infopername={};this.infopernode={}};kukit.er.OperRegistry.prototype.propagateTo=function(newreg){for(var key in this.infopername){var rules_per_name=this.infopername[key];for(var name in rules_per_name){var oper=rules_per_name[name];newreg.bindOper(oper)}}};kukit.er.OperRegistry.prototype.checkOperBindable=function(oper,name,nodehash){var info=this.infopername;if(typeof(nodehash)=='undefined'){name=oper.eventrule.kss_selector.name;nodehash=kukit.rd.hashnode(oper.node)}
var rules_per_name=info[name];if(typeof(rules_per_name)=='undefined'){rules_per_name=info[name]={}} else if(typeof(rules_per_name[nodehash])!='undefined'){throw kukit.E}
return rules_per_name};kukit.er.OperRegistry.prototype.bindOper=function(oper){var name=oper.eventrule.kss_selector.name;var nodehash=kukit.rd.hashnode(oper.node);var rules_per_name=this.checkOperBindable(oper,name,nodehash);rules_per_name[nodehash]=oper;var rules_per_node=this.infopernode[nodehash];if(typeof(rules_per_node)=='undefined'){rules_per_node=this.infopernode[nodehash]={}}
rules_per_node[name]=oper};kukit.er.OperRegistry.prototype.processBindingEvents=function(binderinstance){var eventRegistry=kukit.eventsGlobalRegistry;for(var i=0;i<eventRegistry.eventsets.length;i++){var eventset=eventRegistry.eventsets[i];if(eventset.bindmethodname){if(binderinstance.__event_namespace__==eventset.namespace){var iterator=kukit.er.getBindIterator(eventset.itername);iterator.call(this,eventset,binderinstance)}}}};kukit.er.OperRegistry.prototype.getBoundOperForNode=function(name,node){var rules_per_name=this.infopername[name];if(typeof(rules_per_name)=='undefined'){return null}
var nodehash=kukit.rd.hashnode(node);var oper=rules_per_name[nodehash];if(typeof(oper)=='undefined'){return null}
return oper};kukit.er.OperRegistry.prototype.getBoundOpers=function(name){var opers=[];var rules_per_name=this.infopername[name];if(typeof(rules_per_name)!='undefined'){for(var nodehash in rules_per_name){opers.push(rules_per_name[nodehash])}}
return opers};kukit.er.getBindIterator=function(itername){return kukit.er.OperRegistry.prototype['iter_'+itername]};kukit.er.OperRegistry.prototype.call_bind_method=function(eventset,binderinstance,p1,p2,p3,p4,p5,p6){var method=binderinstance[eventset.bindmethodname];method.call(binderinstance,p1,p2,p3,p4,p5,p6)};kukit.er.OperRegistry.prototype.iter_each_legacy=function(eventset,binderinstance){for(var i=0;i<eventset.names.length;i++){var rules_per_name=this.infopername[eventset.names[i]];if(typeof(rules_per_name)!='undefined'){for(var nodehash in rules_per_name){var oper=rules_per_name[nodehash];var eventname=oper.getEventName();var func_to_bind=oper.makeExecuteActionsHook();this.call_bind_method(eventset,binderinstance,eventname,func_to_bind,oper)}}}};kukit.er.OperRegistry.prototype.iter_each=function(eventset,binderinstance){for(var i=0;i<eventset.names.length;i++){var rules_per_name=this.infopername[eventset.names[i]];if(typeof(rules_per_name)!='undefined'){for(var nodehash in rules_per_name){var oper=rules_per_name[nodehash];this.call_bind_method(eventset,binderinstance,oper)}}}};kukit.er.OperRegistry.prototype.iter_opers=function(eventset,binderinstance){var opers=[];for(var i=0;i<eventset.names.length;i++){var rules_per_name=this.infopername[eventset.names[i]];if(typeof(rules_per_name)!='undefined'){for(var nodehash in rules_per_name){opers.push(rules_per_name[nodehash])}}}
this.call_bind_method(eventset,binderinstance,opers)};kukit.er.OperRegistry.prototype.iter_node=function(eventset,binderinstance){for(var nodehash in this.infopernode){var rules_per_node=this.infopernode[nodehash];var filtered_rules={};var foundoper=false;for(var i=0;i<eventset.names.length;i++){var name=eventset.names[i];var oper=rules_per_node[name];if(typeof(oper)!='undefined'){filtered_rules[name]=oper;foundoper=oper}}
if(foundoper){this.call_bind_method(eventset,binderinstance,filtered_rules,foundoper.node)}}};kukit.er.OperRegistry.prototype.iter_allnodes=function(eventset,binderinstance){var items=[];var has_result=false;for(var nodehash in this.infopernode){var rules_per_node=this.infopernode[nodehash];var filtered_rules={};var foundoper=false;for(var i=0;i<eventset.names.length;i++){var name=eventset.names[i];var oper=rules_per_node[name];if(typeof(oper)!='undefined'){filtered_rules[name]=oper;foundoper=oper}}
if(foundoper){items.push({node:foundoper.node,opers_by_eventname:filtered_rules});has_result=true}}
if(has_result){this.call_bind_method(eventset,binderinstance,items)}};kukit.ar={};kukit.ar.ActionRegistry=function(){this.content={}};kukit.ar.ActionRegistry.prototype.register=function(name,func){if(this.content[name]){return}
this.content[name]=func};kukit.ar.ActionRegistry.prototype.exists=function(name){var entry=this.content[name];return(typeof(entry)!='undefined')};kukit.ar.ActionRegistry.prototype.get=function(name){var func=this.content[name];if(!func){throw kukit.E}
return func};kukit.actionsGlobalRegistry=new kukit.ar.ActionRegistry();kukit.ar.actionRegistry={};kukit.ar.actionRegistry.register=function(name,func){kukit.actionsGlobalRegistry.register(name,func)};kukit.dom={};kukit.dom.getPreviousSiblingTag=function(node){var toNode=node.previousSibling;while((toNode!=null)&&(toNode.nodeType!=1)){toNode=toNode.previousSibling}
return toNode};kukit.dom.getNextSiblingTag=function(node){var toNode=node.nextSibling;while((toNode!=null)&&(toNode.nodeType!=1)){toNode=toNode.nextSibling}
return toNode};kukit.dom.insertBefore=function(nodes,parentNode,toNode){for(var i=0;i<nodes.length;i++){parentNode.insertBefore(nodes[i],toNode)}};kukit.dom.appendChildren=function(nodes,toNode){for(var i=0;i<nodes.length;i++){toNode.appendChild(nodes[i])}};kukit.dom.clearChildNodes=function(node){Sarissa.clearChildNodes(node)};kukit.dom.parseHTMLNodes=function(txt){var node=document.createElement('div');node.innerHTML=txt;var resultNodes=[];for(var i=0;i<node.childNodes.length;i++){resultNodes.push(node.childNodes.item(i))}
return resultNodes};kukit.dom.cssQuery=function(selector,in_nodes){if(typeof(in_nodes)!='undefined'&&in_nodes==null){throw kukit.E}
return kukit.dom._cssQuery(selector,in_nodes)};kukit.dom._cssQuery=function(selector,in_nodes){var USE_BASE2=(typeof(base2)!='undefined');if(USE_BASE2){kukit.dom._cssQuery=kukit.dom._cssQuery_base2} else{kukit.dom._cssQuery=kukit.dom._cssQuery_orig}
return kukit.dom._cssQuery(selector,in_nodes)};kukit.dom._cssQuery_base2=function(selector,in_nodes){var results=base2.DOM.Document.matchAll(document,selector);var nodes=[];for(var i=0;i<results.length;i++){nodes.push(results.item(i))}
return nodes};kukit.dom._cssQuery_orig=function(selector,in_nodes){var results=cssQuery(selector);return results};kukit.dom.focus=function(node){tagName=node.tagName.toLowerCase();if((tagName=='input')||(tagName=='select')||(tagName=='textarea')){node.focus()}};kukit.dom.textContent=function(node,recursive){var value=kukit.dom._textContent(node,recursive);value=value.replace(/\r\n/g,' ');value=value.replace(/[\r\n]/g,' ');return value};kukit.dom._textContent=function(node,recursive){if(typeof(recursive)=='undefined'){recursive=false}
var value='';var childnodes=node.childNodes;for(var i=0;i<childnodes.length;i++){var child=childnodes[i];if(child.nodeType==3){value+=child.nodeValue} else if(recursive&&child.nodeType==1){value+=kukit.dom.textContent(child,true)}}
return value};kukit.dom.getAttribute=function(node,attrname){if(attrname.toLowerCase()=='style'){throw 'Style attribute is not allowed with getAttribute'}
var value=node.getAttribute(attrname);if(!value){if(attrname.toLowerCase()=='class'){value=node.className} else if(attrname.toLowerCase()=='for'){value=node.htmlFor}}
return value};kukit.dom.setAttribute=function(node,attrname,value){if(attrname.toLowerCase()=='style'){throw 'Style attribute is not allowed with setAttribute'}
else if(attrname.toLowerCase()=='class'){node.className=value} else if(attrname.toLowerCase()=='for'){node.htmlFor=value;node.setAttribute(attrname,value)} else if(attrname.toLowerCase()=='checked'){value=!(value==''||value=='false'||value=='False');node.checked=value} else{node.setAttribute(attrname,value)}};kukit.dom.kssAttrNamespace='kssattr';kukit.dom.kssWidNamespace='ksswid';kukit.dom.getKssClassAttribute=function(node,attrname,attrnamespace){if(!attrnamespace){attrnamespace=kukit.dom.kssAttrNamespace}
var klass=kukit.dom.getAttribute(node,'class');var result=null;if(klass){var splitclass=klass.split(/ +/);for(var i=0;i<splitclass.length;i++){var elem=splitclass[i];var splitelem=elem.split('-',3);if(splitelem.length==3&&splitelem[0]==attrnamespace&&splitelem[1]==attrname){var index=splitelem[0].length+splitelem[1].length+2;result=elem.substr(index)}}}
return result};kukit.dom.getKssAttribute=function(node,attrname,attrnamespace){if(!attrnamespace){attrnamespace=kukit.dom.kssAttrNamespace}
var result=kukit.dom.getAttribute(node,attrnamespace+':'+attrname);if(!result){result=kukit.dom.getKssClassAttribute(node,attrname,attrnamespace)}
return result};kukit.dom.setKssAttribute=function(node,attrname,value,attrnamespace){if(!attrnamespace){attrnamespace=kukit.dom.kssAttrNamespace}
kukit.dom.setAttribute(node,attrnamespace+':'+attrname,value)};kukit.dom.getRecursiveAttribute=function(node,attrname,recurseParents,getter,arg1,arg2,arg3){var value=getter(node,attrname,arg1,arg2,arg3);if(recurseParents){var element=node;while(!value){element=element.parentNode;if(!element||!element.getAttribute){break}
value=getter(element,attrname)}}
if(typeof(value)=='undefined'){value=null}
return value};kukit.dom.EmbeddedContentLoadedScheduler=function(framename,func,autodetect){this.framename=framename;this.func=func;this.autodetect=autodetect;var self=this;var f=function(){self.check()};this.counter=new kukit.ut.TimerCounter(250,f,true);this.counter.start()};kukit.dom.getIframeDocument=function(framename){var iframe=document.getElementById(framename);var doc=iframe.contentWindow||iframe.contentDocument;if(doc.document){doc=doc.document}
return doc};kukit.dom.EmbeddedContentLoadedScheduler.prototype.check=function(){var doc=kukit.dom.getIframeDocument(this.framename);if(doc['_'+'embeddedContentLoadedInitDone']){this.counter.restart=false}
if(typeof doc['_'+'kssReadyForLoadEvent']!='undefined'){this.counter.restart=false}
if(this.autodetect&&this.counter.restart){if(doc.location.href=='about:blank'){return}
if(/KHTML|WebKit/i.test(navigator.userAgent)){if(/loaded|complete/.test(doc.readyState)){this.counter.restart=false}} else if(typeof doc.getElementsByTagName!='undefined'&&(doc.getElementsByTagName('body')[0]!=null||doc.body!=null)){this.counter.restart=false}}
if(!this.counter.restart){doc['_'+'embeddedContentLoadedInitDone']=true;this.func()}};kukit.dom.getNsTags=function(dom,tagName){if(dom.getElementsByTagNameNS){tags=dom.getElementsByTagNameNS('http://www.kukit.org/commands/1.0',tagName)} else{tags=dom.getElementsByTagName('kukit:'+tagName)}
return tags};kukit.cr={};kukit.cr.CommandRegistry=function(){this.commands={}};kukit.cr.CommandRegistry.prototype.registerFromAction=function(srcname,factory,name){if(typeof(name)=='undefined'){name=srcname}
var f=kukit.actionsGlobalRegistry.get(srcname);factory(name,f)};kukit.cr.CommandRegistry.prototype.register=function(name,klass){if(this.commands[name]){return}
this.commands[name]=klass};kukit.cr.CommandRegistry.prototype.get=function(name){var klass=this.commands[name];return klass};kukit.commandsGlobalRegistry=new kukit.cr.CommandRegistry();kukit.cr.commandRegistry={};kukit.cr.commandRegistry.registerFromAction=function(srcname,factory,name){kukit.commandsGlobalRegistry.registerFromAction(srcname,factory,name)};kukit.cr.makeCommand=function(selector,name,type,parms,transport){var commandClass=kukit.commandsGlobalRegistry.get(name);var command=new commandClass();command.selector=selector;command.name=name;command.selectorType=type;command.parms=parms;command.transport=transport;return command};kukit.cr._Command_execute=function(oper){var newoper=oper.clone({'parms':this.parms,'orignode':oper.node,'node':null});this.executeOnScope(newoper)};kukit.cr._Command_execute_selector=function(oper){var selfunc=kukit.selectorTypesGlobalRegistry.get(this.selectorType);var nodes=selfunc(this.selector,oper.orignode,{});for(var i=0;i<nodes.length;i++){oper.node=nodes[i];this.executeOnSingleNode(oper)}};kukit.cr.makeSelectorCommand=function(name,executeOnSingleNode){var commandClass=function(){};commandClass.prototype={execute:kukit.cr._Command_execute,executeOnScope:kukit.cr._Command_execute_selector,executeOnSingleNode:executeOnSingleNode};kukit.commandsGlobalRegistry.register(name,commandClass)};kukit.cr.makeGlobalCommand=function(name,executeOnce){var commandClass=function(){};commandClass.prototype={execute:kukit.cr._Command_execute,executeOnScope:executeOnce,executeOnSingleNode:executeOnce};kukit.commandsGlobalRegistry.register(name,commandClass)};kukit.sa={};kukit.sa.ServerAction=function(name,oper){this.url=oper.aparms.kssUrl;if(typeof(this.url)=='undefined'){this.url=name}
this.url=this.calculateAbsoluteURL(this.url);this.oper=oper;this.notifyServer()};kukit.sa.ServerAction.prototype.calculateAbsoluteURL=function(url){if(url.match(RegExp('/^https?:\/\//'))){return url} else{var result=kukit.engine.baseUrl+'/'+url;return result}};kukit.sa.ServerAction.prototype.notifyServer=function(){var self=this;var sendHook=function(queueItem){self.oper.queueItem=queueItem;self.reallyNotifyServer()};var timeoutHook=function(queueItem){self.oper.queueItem=queueItem;self.processError('timeout')};kukit.engine.requestManager.notifyServer(sendHook,this.url,timeoutHook)};kukit.sa.ServerAction.prototype.reallyNotifyServer=function(){var domDoc=new XMLHttpRequest();var self=this;var notifyServer_done=function(){self.notifyServer_done(domDoc)};var query=new kukit.fo.FormQuery();for(var key in this.oper.parms){query.appendElem(key,this.oper.parms[key])}
var formsubmit=this.oper.aparms.kssSubmitForm;if(formsubmit){for(var i=0;i<formsubmit.length;i++){var item=formsubmit[i];query.appendElem(item[0],item[1])}}
var encoded=query.encode();var ts=new Date().getTime();var tsurl=this.url+"?kukitTimeStamp="+ts;domDoc.open("POST",tsurl,true);domDoc.onreadystatechange=notifyServer_done;domDoc.setRequestHeader("Content-Type","application/x-www-form-urlencoded");domDoc.send(encoded)};kukit.sa.ServerAction.prototype.notifyServer_done=function(domDoc){if(domDoc.readyState==4){var success=this.oper.queueItem.receivedResult();if(success){this.processResult(domDoc)}}};kukit.sa.ServerAction.prototype.processResult=function(domDoc){var dom;var commandstags=[];if(domDoc.responseXML){dom=domDoc.responseXML;commandstags=kukit.dom.getNsTags(dom,'commands');if(commandstags.length!=1){dom=null}}
if(dom==null){var payload=domDoc.getResponseHeader('X-KSSCOMMANDS');if(payload){try{dom=(new DOMParser()).parseFromString(payload,"text/xml")} catch(e){throw kukit.E}
commandstags=kukit.dom.getNsTags(dom,'commands');if(commandstags.length!=1){dom=null}} else{dom=domDoc.responseXML}}
if(dom==null){if(typeof(kukit)!='undefined')
throw kukit.E}
var commands=kukit.dom.getNsTags(dom,'command');if(commands.length==0){return}
var command_processor=new kukit.cp.CommandProcessor();command_processor.parseCommands(commands,domDoc);command_processor.executeCommands(this.oper)};kukit.sa.ServerAction.prototype.processError=function(errorcommand){var error_action=null;if(this.oper.eventrule){var error_action=this.oper.eventrule.actions.getErrorActionFor(this.oper.action)}
if(error_action){error_action.execute(this.oper)} else{}};kukit.rm={};kukit.rm._rid=0;kukit.rm.RequestItem=function(sendHook,url,timeoutHook,timeout,now){if(typeof(now)=='undefined'){now=(new Date()).valueOf()}
this.sent=now;this.expire=now+timeout;this.handled=false;this.sendHook=sendHook;this.url=url;this.timeoutHook=timeoutHook;this.rid=kukit.rm._rid;kukit.rm._rid++;if(kukit.rm._rid>=10000000000){kukit.rm._rid=0}};kukit.rm.RequestItem.prototype.callTimeoutHook=function(){if(this.timeoutHook){this.timeoutHook(this)}};kukit.rm.RequestItem.prototype.setReceivedCallback=function(func){this._receivedCallback=func};kukit.rm.RequestItem.prototype.receivedResult=function(now){var result=this._receivedCallback(this,now);this._receivedCallback=null;return result};kukit.rm.TimerQueue=function(callback){this.callback=callback;this.queue=new kukit.ut.SortedQueue(this._sentSort);this.nr=0};kukit.rm.TimerQueue.prototype._sentSort=function(a,b){if(a.expire<b.expire) return-1;else if(a.expire>b.expire) return+1;else return 0};kukit.rm.TimerQueue.prototype.push=function(item){this.queue.push(item);this.nr+=1};kukit.rm.TimerQueue.prototype.pop=function(item){if(typeof(item)=='undefined'||item.handled){return false} else{item.handled=true;this.nr-=1;return true}};kukit.rm.TimerQueue.prototype.handleExpiration=function(now){if(typeof(now)=='undefined'){now=(new Date()).valueOf()}
var to;for(to=0;to<this.queue.size();to++){var item=this.queue.get(to);if(!item.handled){if(item.expire>now){break} else{item.handled=true;this.nr-=1;this.callback(item)}}}
this.queue.popn(to);var front=this.queue.front();var next_expire=null;if(front){next_expire=front.expire}
return next_expire};kukit.rm.RequestManager=function(name,maxNr,schedulerClass){this.waitingQueue=new kukit.ut.FifoQueue();this.sentNr=0;var self=this;var timeoutItem=function(item){self.timeoutItem(item)};this.timerQueue=new kukit.rm.TimerQueue(timeoutItem);if(typeof(name)=='undefined'){name=null}
this.name=name;var namestr='';if(name!=null){namestr='['+name+'] '}
this.namestr=namestr;if(typeof(maxNr)!='undefined'&&maxNr!=null){this.maxNr=maxNr}
var checkTimeout=function(){self.checkTimeout()};if(typeof(schedulerClass)=='undefined'){schedulerClass=kukit.ut.Scheduler}
this.timeoutScheduler=new schedulerClass(checkTimeout);this.spinnerEvents={'off':[],'on':[]};this.spinnerState=false};kukit.rm.RequestManager.prototype.sendingTimeout=40000;kukit.rm.RequestManager.prototype.maxNr=4;kukit.rm.RequestManager.prototype.setSpinnerState=function(newState){if(this.spinnerState!=newState){this.spinnerState=newState;var events=this.spinnerEvents[newState?'on':'off'];for(var i=0;i<events.length;i++){events[i]()}}};kukit.rm.RequestManager.prototype.pushWaitingRequest=function(item,now){this.waitingQueue.push(item);this.checkTimeout(now)};kukit.rm.RequestManager.prototype.popWaitingRequest=function(){var q=this.waitingQueue;while(!q.empty()&&q.front().handled){q.pop()}
if(!q.empty()){return q.pop()} else{return null}};kukit.rm.RequestManager.prototype.pushSentRequest=function(item,now){this.sentNr+=1;this.setSpinnerState(true);this.checkTimeout(now);var self=this;var func=function(item,now){return self.receiveItem(item,now)};item.setReceivedCallback(func);item.sendHook(item)};kukit.rm.RequestManager.prototype.checkTimeout=function(now){var nextWake=this.timerQueue.handleExpiration(now);if(nextWake){nextWake+=50} else{this.setSpinnerState(false)}
this.timeoutScheduler.setNextWakeAtLeast(nextWake)};kukit.rm.RequestManager.prototype.popSentRequest=function(item){var success=this.timerQueue.pop(item);this.sentNr-=1;return success};kukit.rm.RequestManager.prototype.isSentRequestQueueFull=function(){return(this.sentNr>=this.maxNr)};kukit.rm.RequestManager.prototype.receivedResult=function(item,now){var success=this.popSentRequest(item);var waiting=this.popWaitingRequest();if(waiting!=null){this.pushSentRequest(waiting,now)} else{this.setSpinnerState(false)}
return success};kukit.rm.RequestManager.prototype.receiveItem=function(item,now){var success=this.receivedResult(item,now);return success};kukit.rm.RequestManager.prototype.timeoutItem=function(item){item.callTimeoutHook()};kukit.rm.RequestManager.prototype.notifyServer=function(sendHook,url,timeoutHook,timeout,now){if(typeof(timeout)=='undefined'){timeout=this.sendingTimeout}
var item=new kukit.rm.RequestItem(sendHook,url,timeoutHook,timeout,now);this.timerQueue.push(item);if(!this.isSentRequestQueueFull()){this.pushSentRequest(item,now)} else{this.pushWaitingRequest(item,now)}};kukit.rm.RequestManager.prototype.registerSpinnerEvent=function(func,state){this.spinnerEvents[state?'on':'off'].push(func)};kukit.cp={};kukit.cp.CommandProcessor=function(){this.commands=new Array()};kukit.cp.CommandProcessor.prototype.parseCommands=function(commands,transport){for(var y=0;y<commands.length;y++){var command=commands[y];this.parseCommand(command,transport);var lastcommand=this.commands[this.commands.length-1];if(lastcommand.name=='error'){throw kukit.E}}};kukit.cp.CommandProcessor.prototype.parseCommand=function(command,transport){var selector="";var params={};var name="";selector=command.getAttribute("selector");name=command.getAttribute("name");type=command.getAttribute("selectorType");if(name==null)
name="";var childNodes=command.childNodes;for(var n=0;n<childNodes.length;n++){var childNode=childNodes[n];if(childNode.nodeType!=1)
continue;if(childNode.localName){if(childNode.localName.toLowerCase()!="param"&&childNode.nodeName.toLowerCase()!="kukit:param"){throw 'Bad payload, expected param'}} else{if(childNode.nodeName.toLowerCase()!="kukit:param"){throw 'Bad payload, expected kukit:param'}}
data=childNode.getAttribute('name');if(data!=null){var childCount=childNode.childNodes.length;var result;if(childCount==0){result=''} else{result=childNode.firstChild.nodeValue}
params[data]=result} else{throw 'Bad payload, expected attribute "name"'}}
var command=new kukit.cr.makeCommand(selector,name,type,params,transport);this.addCommand(command)};kukit.cp.CommandProcessor.prototype.addCommand=function(command){this.commands[this.commands.length]=command};kukit.cp.CommandProcessor.prototype.executeCommands=function(oper){kukit.engine.beginSetupEventsCollection();if(typeof(oper)=='undefined'||oper==null){oper=new kukit.op.Oper()}
var commands=this.commands;for(var y=0;y<commands.length;y++){var command=commands[y];command.execute(oper)}
kukit.engine.finishSetupEventsCollection()};kukit.sr={};kukit.sr.pproviderSelRegistry=new kukit.pr.ParamProviderRegistry();kukit.sr.AnyPP=function(){};kukit.sr.AnyPP.prototype={eval: function(args,node,defaultparms){var f=kukit.selectorTypesGlobalRegistry.get(this.selector_type);return f(args[0],node,defaultparms,node)}};kukit.sr.pproviderSelRegistry.register('',kukit.sr.AnyPP);kukit.sr.makeAnyPP=function(selector_type){var pp=function(){};pp.prototype.eval=kukit.sr.AnyPP.prototype.eval;pp.prototype.selector_type=selector_type;return pp};kukit.sr.PassnodePP=function(){};kukit.sr.PassnodePP.prototype={eval: function(args,node,defaultparms){var value=defaultparms[args[0]];if(typeof(value)=='undefined'){throw kukit.E}
nodes=[value];return nodes}};kukit.sr.pproviderSelRegistry.register('passnode',kukit.sr.PassnodePP);kukit.sr.SelectorTypeRegistry=function(){this.mapping={}};kukit.sr.SelectorTypeRegistry.prototype.defaultSelectorType='css';kukit.sr.SelectorTypeRegistry.prototype.register=function(name,func){if(typeof(func)=='undefined'){throw 'Func is mandatory.'}
this.mapping[name]=func;var pp=kukit.sr.makeAnyPP(name);kukit.sr.pproviderSelRegistry.register(name,pp)};kukit.sr.SelectorTypeRegistry.prototype.get=function(name){if(!name){name=this.defaultSelectorType}
var result=this.mapping[name];return result};kukit.selectorTypesGlobalRegistry=new kukit.sr.SelectorTypeRegistry();kukit.selectorTypesGlobalRegistry.register('htmlid', function(expr,node){var nodes=[];var node=document.getElementById(expr);if(node){nodes.push(node)}
return nodes});kukit.selectorTypesGlobalRegistry.register('css', function(expr,node){var nodes=kukit.dom.cssQuery(expr);return nodes});kukit.selectorTypesGlobalRegistry.register('samenode', function(expr,node){nodes=[node];return nodes});kukit.selectorTypesGlobalRegistry.register('parentnode', function(expr,node){var expressions=expr.split('%');
function parentnodes(node){var nodes=[];var parentnode=node;while(parentnode.parentNode){nodes.push(parentnode);parentnode=parentnode.parentNode}
return nodes}
function filternode(allowed,node){for(var i=0;i<allowed.length;i++){if(allowed[i]==node){return node}}}
function filternodes(allowed,nodes){var results=[];for(var i=0;i<nodes.length;i++){var node=filternode(allowed,nodes[i]);if(node!=null){results.push(node)}}
return results}
var selectednodes=kukit.dom.cssQuery(expressions[0]);var parentchain=parentnodes(node.parentNode);parentchain=filternodes(parentchain,selectednodes);if(expressions.length==1){return parentchain}
var surroundingnodes=kukit.dom.cssQuery(expressions[1]);var results=[];for(var i=0;i<surroundingnodes.length;i++){var node=surroundingnodes[i];if(filternodes(parentchain,parentnodes(node))!=null){results.push(node)}}
return results});kukit.fo={};kukit.fo.dictprefix='';kukit.fo.dictseparator='.';kukit.fo.dictpostfix=':record';kukit.fo.FormQueryElem=function(name,value){this.name=name;this.value=value};kukit.fo.FormQueryElem.prototype.encode=function(){return this.name+"="+encodeURIComponent(this.value)};kukit.fo.FormQuery=function(){this.l=[]};kukit.fo.FormQuery.prototype.appendElem=function(name,value){if(typeof(value)=='object'){for(var key in value){var qkey=kukit.fo.dictprefix+name+kukit.fo.dictseparator+key+kukit.fo.dictpostfix;var elem=new kukit.fo.FormQueryElem(qkey,value[key]);this.l.push(elem)}} else{var elem=new kukit.fo.FormQueryElem(name,value);this.l.push(elem)}};kukit.fo.FormQuery.prototype.encode=function(){var poster=[];for(var i=0;i<this.l.length;i++){poster[poster.length]=this.l[i].encode()}
return poster.join("&")};kukit.fo.FormQuery.prototype.toDict=function(){var d={};for(var i=0;i<this.l.length;i++){var elem=this.l[i];d[elem.name]=elem.value}
return d};kukit.fo.findContainer=function(node,func){while(node!=null){if(func(node)){return node}
node=node.parentNode}
return null};kukit.fo.CurrentFormLocator=function(target){this.target=target};kukit.fo.CurrentFormLocator.prototype.queryForm=function(){return kukit.fo.findContainer(this.target, function(node){if(!node.nodeName){return false}
if(node.nodeName.toLowerCase()=="form"){return true} else{return false}})};kukit.fo.CurrentFormLocator.prototype.getForm=function(){var form=this.queryForm();if(!form){return null}
return form};kukit.fo.NamedFormLocator=function(formname){this.formname=formname};kukit.fo.NamedFormLocator.prototype.queryForm=function(){return document.forms[this.formname]};kukit.fo.NamedFormLocator.prototype.getForm=kukit.fo.CurrentFormLocator.prototype.getForm;kukit.fo.getValueOfFormElement=function(element){kukit.fo.fieldUpdateRegistry.doUpdate(element);if(element.selectedIndex!=undefined){if(!element.multiple){if(element.selectedIndex<0){value=""} else{var option=element.options[element.selectedIndex];value=option.value;if(value=="")
value=option.text}}
else{var value=[];for(i=0;i<element.options.length;i++){var option=element.options[i];if(option.selected){value.push(option.value)}}
return value}} else if(typeof element.length!='undefined'&&typeof element.item!='undefined'&&element.item(0).type=="radio"){var radioList=element;value=null;for(var i=0;i<radioList.length;i++){var radio=radioList.item(i);if(radio.checked){value=radio.value}}} else if(element.type=="radio"||element.type=="checkbox"){if(element.checked){value=element.value} else{value=null}} else if((element.tagName.toLowerCase()=='textarea')||(element.tagName.toLowerCase()=='input'&&element.type!='submit'&&element.type!='reset')){value=element.value} else{value=null}
return value};kukit.fo.getFormVar=function(locator,name){var form=locator.getForm();if(!form)
return null;var value=null;var element=form[name];if(element){var value=kukit.fo.getValueOfFormElement(element)}
return value};kukit.fo.getAllFormVars=function(locator,collector){var form=locator.getForm();if(!form)
return collector.result;var elements=form.elements;for(var y=0;y<elements.length;y++){var element=elements[y];var value=kukit.fo.getValueOfFormElement(element);if(value!=null){collector.add(element.name,value)}}
return collector.result};kukit.fo.FieldUpdateRegistry=function(){this.editors={}};kukit.fo.FieldUpdateRegistry.prototype.register=function(node,editor){var hash=kukit.rd.hashnode(node);if(typeof(this.editors[hash])!='undefined'){throw kukit.E}
this.editors[hash]=editor;editor.doInit()};kukit.fo.FieldUpdateRegistry.prototype.doUpdate=function(node){var hash=kukit.rd.hashnode(node);var editor=this.editors[hash];if(typeof(editor)!='undefined'){editor.doUpdate(node)}};kukit.fo.fieldUpdateRegistry=new kukit.fo.FieldUpdateRegistry();kukit.fo.pproviderFormRegistry=new kukit.pr.ParamProviderRegistry();kukit.fo.FormPP=function(){};kukit.fo.FormPP.prototype={eval: function(args,node){return kukit.fo.getAllFormVars(new kukit.fo.NamedFormLocator(args[0]),new kukit.ut.TupleCollector())}};kukit.fo.pproviderFormRegistry.register('form',kukit.fo.FormPP);kukit.fo.CurrentFormPP=function(){};kukit.fo.CurrentFormPP.prototype={eval: function(args,node){return kukit.fo.getAllFormVars(new kukit.fo.CurrentFormLocator(node),new kukit.ut.TupleCollector())}};kukit.fo.pproviderFormRegistry.register('currentForm',kukit.fo.CurrentFormPP);kukit.fo.pproviderFormRegistry.register('',kukit.fo.FormPP);kukit.fo.getCurrentForm=function(target){return new kukit.fo.CurrentFormLocator(target).getForm()};kukit.fo.getFormVarFromCurrentForm=function(target,name){return kukit.fo.getFormVar(new kukit.fo.CurrentFormLocator(target),name)};kukit.fo.getFormVarFromNamedForm=function(formname,name){return kukit.fo.getFormVar(new kukit.fo.NamedFormLocator(formname),name)};kukit.fo.getAllFormVarsFromCurrentForm=function(target){return kukit.fo.getAllFormVars(new kukit.fo.CurrentFormLocator(target),new kukit.ut.DictCollector())};kukit.fo.getAllFormVarsFromNamedForm=function(formname){return kukit.fo.getAllFormVars(new kukit.fo.NamedFormLocator(formname),new kukit.ut.DictCollector())};kukit.pl={};kukit.pl.getTargetForBrowserEvent=function(e){if(!e) var e=window.event;var target=null;if(e.target){target=e.target} else if(e.srcElement){target=e.srcElement}
return target};kukit.pl.registerBrowserEvent=function(oper,filter,eventname){var func_to_bind=oper.makeExecuteActionsHook(filter);if(!eventname)
eventname=oper.getEventName();var func=function(e){var target=kukit.pl.getTargetForBrowserEvent(e);if(oper.parms.allowbubbling||target==oper.node){var exc;var success;try{success=func_to_bind({'browserevent':e})} catch(exc1){exc=exc1}
if(success||exc){if(oper.parms.preventdefault){if(e.preventDefault)
e.preventDefault();try{e.returnValue=false} catch(exc2){}}
if(oper.parms.preventbubbling){if(!e) var e=window.event;e.cancelBubble=true;if(e.stopPropagation) e.stopPropagation()}}
if(exc!=null){throw exc}}};kukit.ut.registerEventListener(oper.node,eventname,func)};kukit.pl.NativeEventBinder=function(){};kukit.pl.NativeEventBinder.prototype.__bind__node=function(name,func_to_bind,oper){this.__bind__(name,func_to_bind,oper)};kukit.pl.NativeEventBinder.prototype.__bind__nodeorwindow=function(name,func_to_bind,oper){if(oper.node==null){oper.node=window}
this.__bind__(name,func_to_bind,oper)};kukit.pl.NativeEventBinder.prototype.__bind__window=function(name,func_to_bind,oper){oper.node=window;this.__bind__(name,func_to_bind,oper)};kukit.pl.NativeEventBinder.prototype.__bind__nodeordocument=function(name,func_to_bind,oper){if(oper.node==null){oper.node=document}
this.__bind__(name,func_to_bind,oper)};kukit.pl.NativeEventBinder.prototype.__bind__=function(name,func_to_bind,oper){oper.completeParms([],{'preventdefault':'','allowbubbling':'','preventbubbling':''});oper.evalBool('preventdefault');oper.evalBool('allowbubbling');oper.evalBool('preventbubbling');if(oper.parms.preventdefault){if(name!='click'){throw 'In native events only the click event can have preventdefault.'}}
kukit.pl.registerBrowserEvent(oper);if(oper.parms.preventdefault&&kukit.HAVE_SAFARI&&(oper.parms.allowbubbling||name=='click'&&oper.node.tagName.toLowerCase()=='a')){oper.node.onclick=function cancelClickSafari(){return false}}};kukit.pl.NativeEventBinder.prototype.__bind_key__=function(name,func_to_bind,oper){oper.completeParms([],{'preventdefault':true,'allowbubbling':'','preventbubbling':'','keycodes':''});oper.evalList('keycodes');oper.evalBool('preventdefault');oper.evalBool('allowbubbling');oper.evalBool('preventbubbling');var selected_keycodes_only=false;if(oper.parms.keycodes.length>0){var keycodes={};for(var i=0;i<oper.parms.keycodes.length;i++){var keyCode=oper.parms.keycodes[i];keycodes[keyCode]=true}
selected_keycodes_only=true}
var filter=function(oper){var keyCode=oper.browserevent.keyCode;if(keyCode==0){keyCode=oper.browserevent.charCode} else{if(keyCode>=65&&keyCode<=90&&oper.browserevent.shiftKey==false){keyCode=keyCode+32}}
if(keyCode){keyCode=keyCode.toString()} else{kukit.logWarning(keyCode);keyCode='0'}
kukit.log(keyCode);oper.defaultParameters={keycode:keyCode};if(selected_keycodes_only){if(keyCode=='0'){return false} else{return keycodes[keyCode]}} else{return true}};kukit.pl.registerBrowserEvent(oper,filter)};kukit.eventsGlobalRegistry.register(null,'blur',kukit.pl.NativeEventBinder,'__bind__nodeorwindow',null);kukit.eventsGlobalRegistry.register(null,'focus',kukit.pl.NativeEventBinder,'__bind__nodeorwindow',null);kukit.eventsGlobalRegistry.register(null,'resize',kukit.pl.NativeEventBinder,'__bind__nodeorwindow',null);kukit.eventsGlobalRegistry.register(null,'click',kukit.pl.NativeEventBinder,'__bind__nodeordocument',null);kukit.eventsGlobalRegistry.register(null,'dblclick',kukit.pl.NativeEventBinder,'__bind__node',null);kukit.eventsGlobalRegistry.register(null,'mousedown',kukit.pl.NativeEventBinder,'__bind__nodeordocument',null);kukit.eventsGlobalRegistry.register(null,'mouseup',kukit.pl.NativeEventBinder,'__bind__nodeordocument',null);kukit.eventsGlobalRegistry.register(null,'mousemove',kukit.pl.NativeEventBinder,'__bind__nodeordocument',null);kukit.eventsGlobalRegistry.register(null,'mouseover',kukit.pl.NativeEventBinder,'__bind__node',null);kukit.eventsGlobalRegistry.register(null,'mouseout',kukit.pl.NativeEventBinder,'__bind__node',null);kukit.eventsGlobalRegistry.register(null,'change',kukit.pl.NativeEventBinder,'__bind__node',null);kukit.eventsGlobalRegistry.register(null,'reset',kukit.pl.NativeEventBinder,'__bind__node',null);kukit.eventsGlobalRegistry.register(null,'select',kukit.pl.NativeEventBinder,'__bind__node',null);kukit.eventsGlobalRegistry.register(null,'submit',kukit.pl.NativeEventBinder,'__bind__node',null);kukit.eventsGlobalRegistry.register(null,'keydown',kukit.pl.NativeEventBinder,'__bind_key__',null);kukit.eventsGlobalRegistry.register(null,'keypress',kukit.pl.NativeEventBinder,'__bind_key__',null);kukit.eventsGlobalRegistry.register(null,'keyup',kukit.pl.NativeEventBinder,'__bind_key__',null);kukit.pl.TimeoutEventBinder=function(){this.counters={}};kukit.pl.TimeoutEventBinder.prototype.__bind__=function(name,func_to_bind,oper){oper.completeParms(['delay'],{'repeat':'true'});oper.evalBool('repeat');var key=oper.eventrule.getNr();if(!(oper.parms.repeat&&this.counters[key])){var f=function(){if(oper.node!=null&&!oper.node.parentNode){this.clear()} else{func_to_bind()}};var counter=new kukit.ut.TimerCounter(oper.parms.delay,f,oper.parms.repeat);this.counters[key]=counter;counter.start()}};kukit.eventsGlobalRegistry.register(null,'timeout',kukit.pl.TimeoutEventBinder,'__bind__',null);kukit.pl.LoadEventBinder=function(){};kukit.pl.LoadEventBinder.prototype.process_parms=function(oper,iload){if(!oper){return}
if(iload){oper.completeParms(['autodetect'],{'initial':'true','insert':'true'});oper.evalBool('autodetect')} else{oper.completeParms([],{'initial':'true','insert':'true'})}
oper.evalBool('initial');oper.evalBool('insert');var phase=oper.node._kukitmark;if(phase==1&&!oper.parms.initial){return}
if(phase==2&&!oper.parms.insert){return}
return oper};kukit.pl.LoadEventBinder.prototype.__bind__=function(opers_by_eventname){var loadoper=opers_by_eventname.load;var iloadoper=opers_by_eventname.iload;loadoper=this.process_parms(loadoper);iloadoper=this.process_parms(iloadoper,true);var anyoper=loadoper||iloadoper;if(!anyoper){return}
if(anyoper.node!=null&&anyoper.node.tagName.toLowerCase()=='iframe'){if(loadoper&&!iloadoper){iloadoper=loadoper;loadoper=null;iloadoper.parms.autodetect=false}} else{if(iloadoper){throw kukit.E}}
if(loadoper){var func_to_bind=loadoper.makeExecuteActionsHook();var remark='';kukit.engine.bindScheduler.addPost(func_to_bind,remark)}
if(iloadoper){var phase=iloadoper.node._kukitmark;if(phase==2||(phase==1&&kukit.engine.initializedOnDOMLoad)){var g=function(){var f=function(){var func_to_bind=iloadoper.makeExecuteActionsHook();kukit.engine.bindScheduler.addPost(func_to_bind,kukit.E)};new kukit.dom.EmbeddedContentLoadedScheduler(iloadoper.node.id,f,iloadoper.parms.autodetect)};kukit.engine.bindScheduler.addPost(g,kukit.E)} else{var func_to_bind=iloadoper.makeExecuteActionsHook();kukit.engine.bindScheduler.addPost(func_to_bind,kukit.E)}}};kukit.eventsGlobalRegistry.registerForAllEvents(null,['load','iload'],kukit.pl.LoadEventBinder,'__bind__',null,'node');kukit.pl.SpinnerEventBinder=function(){this.state=false;var self=this;var timeoutSetState=function(spinnerevent){self.timeoutSetState(spinnerevent)};this.scheduler=new kukit.ut.Scheduler(timeoutSetState)};kukit.pl.SpinnerEventBinder.prototype.__bind__=function(name,func_to_bind,oper){oper.completeParms([],{'laziness':0});oper.evalInt('laziness');var state_to_bind=(name=='spinneron');var self=this;var func=function(){self.setState(func_to_bind,state_to_bind,oper.parms.laziness)};kukit.engine.requestManager.registerSpinnerEvent(func,state_to_bind)};kukit.pl.SpinnerEventBinder.prototype.setState=function(func_to_bind,state,laziness){this.func_to_bind=func_to_bind;this.state=state;var now=(new Date()).valueOf();var wakeUp=now+laziness;this.scheduler.setNextWakeAtLeast(wakeUp)};kukit.pl.SpinnerEventBinder.prototype.timeoutSetState=function(){this.func_to_bind()};kukit.eventsGlobalRegistry.register(null,'spinneron',kukit.pl.SpinnerEventBinder,'__bind__',null);kukit.eventsGlobalRegistry.register(null,'spinneroff',kukit.pl.SpinnerEventBinder,'__bind__',null);kukit.actionsGlobalRegistry.register("error", function(oper){throw 'The builtin error action should never execute.'});kukit.commandsGlobalRegistry.registerFromAction('error',kukit.cr.makeGlobalCommand);kukit.actionsGlobalRegistry.register("logDebug", function(oper){});kukit.commandsGlobalRegistry.registerFromAction('logDebug',kukit.cr.makeGlobalCommand);kukit.actionsGlobalRegistry.register("log", function(oper){});kukit.commandsGlobalRegistry.registerFromAction('log',kukit.cr.makeGlobalCommand);kukit.actionsGlobalRegistry.register("alert", function(oper){});kukit.commandsGlobalRegistry.registerFromAction('alert',kukit.cr.makeGlobalCommand);kukit.actionsGlobalRegistry.register('replaceInnerHTML', function(oper){oper.completeParms(['html'],{'withKssSetup':true});oper.evalBool('withKssSetup');var node=oper.node;node.innerHTML=oper.parms.html;var insertedNodes=[];for(var i=0;i<node.childNodes.length;i++){insertedNodes.push(node.childNodes[i])}
if(oper.parms.withKssSetup){kukit.engine.setupEvents(insertedNodes)}});kukit.commandsGlobalRegistry.registerFromAction('replaceInnerHTML',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register('replaceHTML', function(oper){oper.completeParms(['html'],{'withKssSetup':true});oper.evalBool('withKssSetup');var node=oper.node;var elements=kukit.dom.parseHTMLNodes(oper.parms.html);var length=elements.length;if(length>0){var parentNode=node.parentNode;var insertedNodes=[];var next=elements[length-1];parentNode.replaceChild(next,node);insertedNodes.push(next);for(var i=length-2;i>=0;i--){var inserted=parentNode.insertBefore(elements[i],next);insertedNodes.push(inserted);next=inserted}
if(oper.parms.withKssSetup){kukit.engine.setupEvents(insertedNodes)}}});kukit.commandsGlobalRegistry.registerFromAction('replaceHTML',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register('setAttribute', function(oper){oper.completeParms(['name','value'],{});if(oper.parms.name.toLowerCase()=='style'){throw kukit.E}
kukit.dom.setAttribute(oper.node,oper.parms.name,oper.parms.value)});kukit.commandsGlobalRegistry.registerFromAction('setAttribute',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register('setKssAttribute', function(oper){oper.completeParms(['name','value'],{});kukit.dom.setKssAttribute(oper.node,oper.parms.name,oper.parms.value)});kukit.commandsGlobalRegistry.registerFromAction('setKssAttribute',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register('setStyle', function(oper){oper.completeParms(['name','value'],{});oper.node.style[oper.parms.name]=oper.parms.value});kukit.commandsGlobalRegistry.registerFromAction('setStyle',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register('addClass', function(oper){oper.completeParms(['value'],{});addClassName(oper.node,oper.parms.value)});kukit.commandsGlobalRegistry.registerFromAction('addClass',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register('removeClass', function(oper){oper.completeParms(['value'],{});removeClassName(oper.node,oper.parms.value)});kukit.commandsGlobalRegistry.registerFromAction('removeClass',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register('insertHTMLAfter', function(oper){oper.completeParms(['html'],{'withKssSetup':true});oper.evalBool('withKssSetup');var content=kukit.dom.parseHTMLNodes(oper.parms.html);var parentNode=oper.node.parentNode;var toNode=kukit.dom.getNextSiblingTag(oper.node);if(toNode==null){kukit.dom.appendChildren(content,parentNode)} else{kukit.dom.insertBefore(content,parentNode,toNode)}
if(oper.parms.withKssSetup){kukit.engine.setupEvents(content)}});kukit.commandsGlobalRegistry.registerFromAction('insertHTMLAfter',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register('insertHTMLBefore', function(oper){oper.completeParms(['html'],{'withKssSetup':true});oper.evalBool('withKssSetup');var content=kukit.dom.parseHTMLNodes(oper.parms.html);var toNode=oper.node;var parentNode=toNode.parentNode;kukit.dom.insertBefore(content,parentNode,toNode);if(oper.parms.withKssSetup){kukit.engine.setupEvents(content)}});kukit.commandsGlobalRegistry.registerFromAction('insertHTMLBefore',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register('insertHTMLAsLastChild', function(oper){oper.completeParms(['html'],{'withKssSetup':true});oper.evalBool('withKssSetup');var content=kukit.dom.parseHTMLNodes(oper.parms.html);kukit.dom.appendChildren(content,oper.node);if(oper.parms.withKssSetup){kukit.engine.setupEvents(content)}});kukit.commandsGlobalRegistry.registerFromAction('insertHTMLAsLastChild',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register('insertHTMLAsFirstChild', function(oper){oper.completeParms(['html'],{'withKssSetup':true});oper.evalBool('withKssSetup');var content=kukit.dom.parseHTMLNodes(oper.parms.html);var parentNode=oper.node;var toNode=parentNode.firstChild;if(toNode==null){kukit.dom.appendChildren(content,parentNode)} else{kukit.dom.insertBefore(content,parentNode,toNode)}
if(oper.parms.withKssSetup){kukit.engine.setupEvents(content)}});kukit.commandsGlobalRegistry.registerFromAction('insertHTMLAsFirstChild',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register('deleteNodeAfter', function(oper){var parentNode=oper.node.parentNode;var toNode=kukit.dom.getNextSiblingTag(oper.node);if(toNode!=null){parentNode.removeChild(toNode)}});kukit.commandsGlobalRegistry.registerFromAction('deleteNodeAfter',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register('deleteNodeBefore', function(oper){var parentNode=oper.node.parentNode;var toNode=kukit.dom.getPreviousSiblingTag(oper.node);parentNode.removeChild(toNode)});kukit.commandsGlobalRegistry.registerFromAction('deleteNodeBefore',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register('deleteNode', function(oper){var parentNode=oper.node.parentNode;parentNode.removeChild(oper.node)});kukit.commandsGlobalRegistry.registerFromAction('deleteNode',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register('clearChildNodes', function(oper){oper.completeParms([],{'none':false});kukit.dom.clearChildNodes(oper.node)});kukit.commandsGlobalRegistry.registerFromAction('clearChildNodes',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register('focus', function(oper){oper.completeParms([],{'none':false});kukit.dom.focus(oper.node)});kukit.commandsGlobalRegistry.registerFromAction('focus',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register('moveNodeAfter', function(oper){var node=oper.node;var parentNode=node.parentNode;parentNode.removeChild(node);var toNode=document.getElementById(oper.parms.html_id);var nextNode=kukit.dom.getNextSiblingTag(toNode);if(nextNode==null){toNode.parentNode.appendChild(node)} else{parentNode.insertBefore(node,nextNode)}});kukit.commandsGlobalRegistry.registerFromAction('moveNodeAfter',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register('moveNodeBefore', function(oper){var node=oper.node;var toNode=document.getElementById(oper.parms.html_id);var parentNode=toNode.parentNode;parentNode.insertBefore(node,toNode)});kukit.commandsGlobalRegistry.registerFromAction('moveNodeBefore',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register('moveNodeAsLastChild', function(oper){var node=oper.node;var parentNode=document.getElementById(oper.parms.html_id);parentNode.appendChild(node)});kukit.commandsGlobalRegistry.registerFromAction('moveNodeAsLastChild',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register('copyChildNodesFrom', function(oper){var fromNode=document.getElementById(oper.parms.html_id);Sarissa.copyChildNodes(fromNode,oper.node)});kukit.commandsGlobalRegistry.registerFromAction('copyChildNodesFrom',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register('copyChildNodesTo', function(oper){toNode=document.getElementById(oper.parms.html_id);Sarissa.copyChildNodes(oper.node,toNode)});kukit.commandsGlobalRegistry.registerFromAction('copyChildNodesTo',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register('setStateVar', function(oper){kukit.engine.statevars[oper.parms.varname]=oper.parms.value});kukit.commandsGlobalRegistry.registerFromAction('setStateVar',kukit.cr.makeGlobalCommand);kukit.actionsGlobalRegistry.register('continueEvent', function(oper){oper.completeParms(['name'],{'allnodes':'false'},'',true);oper.evalBool('allnodes','continueEvent');var parms=oper.parms;var binderinstance=oper.binderinstance;var allnodes=parms.allnodes;var actionparms={};for(var key in parms){if(key!='name'&&key!='allnodes'){actionparms[key]=parms[key]}}
if(parms.allnodes){binderinstance.__continue_event_allnodes__(parms.name,actionparms)} else{binderinstance.__continue_event__(parms.name,oper.orignode,actionparms)}});kukit.commandsGlobalRegistry.registerFromAction('continueEvent',kukit.cr.makeGlobalCommand);kukit.actionsGlobalRegistry.register('executeCommand', function(oper){oper.completeParms(['name','selector'],{'selectorType':null},'',true);var parms=oper.parms;var actionparms={};for(var key in parms){if(key!='name'&&key!='selector'&&key!='selectorType'){actionparms[key]=parms[key]}}
var command=new kukit.cr.makeCommand(parms.selector,parms.name,parms.selectorType,actionparms);command.execute(oper)});kukit.actionsGlobalRegistry.register("toggleClass", function(oper){kukit.actionsGlobalRegistry.BBB_classParms(oper);var node=oper.node;var classname=oper.parms.value;var nodeclass=kukit.dom.getAttribute(node,'class');var foundclassatindex=-1;var parts=nodeclass.split(' ');for(var i=0;i<parts.length;i++){if(parts[i]==classname){foundclassatindex=i}}
if(foundclassatindex==-1){parts.push(classname)} else{parts.splice(foundclassatindex,1)}
kukit.dom.setAttribute(node,'class',parts.join(' '))});kukit.commandsGlobalRegistry.registerFromAction('toggleClass',kukit.cr.makeSelectorCommand);kukit.commandsGlobalRegistry.registerFromAction('replaceInnerHTML',kukit.cr.makeSelectorCommand,'setHtmlAsChild');kukit.commandsGlobalRegistry.registerFromAction('replaceHTML',kukit.cr.makeSelectorCommand,'replaceNode');kukit.commandsGlobalRegistry.registerFromAction('insertHTMLAfter',kukit.cr.makeSelectorCommand,'addAfter');kukit.commandsGlobalRegistry.registerFromAction('deleteNodeAfter',kukit.cr.makeSelectorCommand,'removeNextSibling');kukit.commandsGlobalRegistry.registerFromAction('deleteNodeBefore',kukit.cr.makeSelectorCommand,'removePreviousSibling');kukit.commandsGlobalRegistry.registerFromAction('deleteNode',kukit.cr.makeSelectorCommand,'removeNode');kukit.commandsGlobalRegistry.registerFromAction('clearChildNodes',kukit.cr.makeSelectorCommand,'clearChildren');kukit.commandsGlobalRegistry.registerFromAction('copyChildNodesFrom',kukit.cr.makeSelectorCommand,'copyChildrenFrom');kukit.commandsGlobalRegistry.registerFromAction('copyChildNodesTo',kukit.cr.makeSelectorCommand,'copyChildrenTo');kukit.commandsGlobalRegistry.registerFromAction('setStateVar',kukit.cr.makeGlobalCommand,'setStatevar');kukit.actionsGlobalRegistry.register('addClassName', function(oper){kukit.actionsGlobalRegistry.BBB_classParms(oper);kukit.actionsGlobalRegistry.get('addClass')(oper)});kukit.commandsGlobalRegistry.registerFromAction('addClassName',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register('removeClassName', function(oper){kukit.actionsGlobalRegistry.BBB_classParms(oper);kukit.actionsGlobalRegistry.get('removeClass')(oper)});kukit.commandsGlobalRegistry.registerFromAction('removeClassName',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.BBB_classParms=function(oper){var old;var has_old;if(typeof(oper.parms.classname)!='undefined'){old=oper.parms.classname;has_old=true}
if(typeof(oper.parms.name)!='undefined'){old=oper.parms.name;has_old=true}
if(has_old){if(typeof(oper.parms.value)=='undefined'){oper.parms={value:old}} else{oper.parms={}}}};kukit.ar.actionRegistry.register("ajaxCorePopupShow", function(oper){oper.completeParms(['popup_id','node_id','container_uid'],{},'ajaxCorePopupShow action');var popup_id=oper.parms.popup_id;var node_id=oper.parms.node_id;var container_uid=oper.parms.container_uid;corePopupShow(popup_id,node_id,container_uid)});kukit.cr.commandRegistry.registerFromAction('ajaxCorePopupShow',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register("set_height", function(oper){setHeights()});kukit.commandsGlobalRegistry.registerFromAction('set_height',kukit.cr.makeSelectorCommand);try{var dummy=Effect.transitions;kukit.HASEFFECTS=1} catch(e){kukit.HASEFFECTS=0}
if(kukit.HASEFFECTS){kukit.ar.actionRegistry.register("effect", function(oper){oper.completeParms([],{'type':'fade'},'scriptaculous effect');var node=oper.node;if(oper.parms.type=='fade'){new Effect.Fade(node)} else if(oper.parms.type=='appear'){new Effect.Appear(node)} else if(oper.parms.type=='puff'){new Effect.Puff(node)} else if(oper.parms.type=='blinddown'){new Effect.BlindDown(node)} else if(oper.parms.type=='blindup'){new Effect.BlindUp(node)}});kukit.cr.commandRegistry.registerFromAction('effect',kukit.cr.makeSelectorCommand);this.$=function $(){var results=[],element;for(var i=0;i<arguments.length;i++){element=arguments[i];if(typeof element=='string')
element=document.getElementById(element);results.push(Element.extend(element))}
return results.length<2?results[0]:results}}
kukit.ar.actionRegistry.register("scrolldown", function(oper){var message_area=document.getElementById('message-area-scroll');message_area.scrollTop=message_area.scrollHeight});kukit.cr.commandRegistry.registerFromAction('scrolldown',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register("showMessengerAlert", function(oper){jQuery("#alert_layer").show()});kukit.commandsGlobalRegistry.registerFromAction('showMessengerAlert',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register("hideMessengerAlert", function(oper){jQuery("#alert_layer").hide()});kukit.commandsGlobalRegistry.registerFromAction('hideMessengerAlert',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register("messenger_popup", function(oper){messenger_popup(oper.parms.url)});kukit.commandsGlobalRegistry.registerFromAction('messenger_popup',kukit.cr.makeSelectorCommand);kukit.ar.actionRegistry.register("bindActionMenus", function(oper){initializeMenus();kukit.logDebug('Plone menus initialized')});kukit.log('actions for Plone legacy js registered (bind menus)');kukit.actionsGlobalRegistry.register("jump", function(oper){window.scroll(0,10)});kukit.commandsGlobalRegistry.registerFromAction('jump',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register("messenger_scrolldown", function(oper){var message_area=document.getElementById('message-area');message_area.scrollTop=message_area.scrollHeight});kukit.commandsGlobalRegistry.registerFromAction('messenger_scrolldown',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register("wait", function(oper){document.body.style.cursor='wait'});kukit.commandsGlobalRegistry.registerFromAction('wait',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register("clear", function(oper){document.body.style.cursor='default'});kukit.commandsGlobalRegistry.registerFromAction('clear',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register("gb_close", function(oper){parent.parent.GB_hide()});kukit.commandsGlobalRegistry.registerFromAction('gb_close',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register("gb_page_center", function(oper){var title='';if(oper.parms.title!=undefined){title=oper.parms.title}
parent.parent.GB_showCenter(title,oper.parms.url,parseInt(oper.parms.height),parseInt(oper.parms.width))});kukit.commandsGlobalRegistry.registerFromAction('gb_page_center',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register("email_popup", function(oper){if(navigator.appName=="Microsoft Internet Explorer"){return popitup(oper.parms.url,800,800)}
else{return centerPopUp(oper.parms.url,'popup',800,800)}});kukit.commandsGlobalRegistry.registerFromAction('email_popup',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register("popup", function(oper){return centerPopUp(oper.parms.url,'popup',oper.parms.height,oper.parms.width)});kukit.commandsGlobalRegistry.registerFromAction('popup',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register("init_alpha_dropdown", function(oper){cssdropdown.startchrome("alpha_menu")});kukit.commandsGlobalRegistry.registerFromAction('init_alpha_dropdown',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register("add_contact_from_search_popup", function(oper){var node=top.window.document.getElementById('username');node.value=oper.parms.username;if(oper.parms.node_names!=null){node_names=oper.parms.node_names.split(' ')
for(var i=0;i<node_names.length;i++){var el_id=oper.parms.username+'-'+node_names[i]
var gb_node=document.getElementById(el_id);if(gb_node!=null){var node=top.window.document.getElementById(node_names[i]);if(node!=null){node.value=gb_node.value}}}}
parent.parent.GB_hide()});kukit.commandsGlobalRegistry.registerFromAction('add_contact_from_search_popup',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register("add_email_from_search_popup", function(oper){var node=top.window.document.getElementById(oper.parms.input_id);var old_value=node.value;if(old_value){node.value=old_value+'; '+oper.parms.input_value}
else{node.value=oper.parms.input_value}
parent.parent.GB_hide()});kukit.commandsGlobalRegistry.registerFromAction('add_email_from_search_popup',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register("resetSelectField", function(oper){var node=document.getElementById(oper.parms.fid);node.selectedIndex=0});kukit.commandsGlobalRegistry.registerFromAction('resetSelectField',kukit.cr.makeSelectorCommand);kukit.actionsGlobalRegistry.register("openWindow", function(oper){return openWindow(oper.parms.url,oper.parms.title)});kukit.commandsGlobalRegistry.registerFromAction('openWindow',kukit.cr.makeSelectorCommand);if(typeof(addDOMLoadEvent)!='undefined'){var f=function(){kukit.bootstrapFromDOMLoad()};addDOMLoadEvent(f);kukit.log('Installed DOMLoad event for PloneAzax.')} else{kukit.logWarning('addDOMLoadEvent is not found in PloneAzax, skipping DOMLoad activation (add event-registration.js to ResourceRegistries?)')}
kukit.ar.actionRegistry.register("plone-initKupu", function(oper){oper.completeParms([],{'avoidPhaseOneInit':''},'plone-initKupu action');oper.evalBool('avoidPhaseOneInit','plone-initKupu action');if(oper.node.tagName.toLowerCase()!='iframe'){throw 'The plone-initKupu action can only execute on the iframe node as a target.'}
var divnode=oper.node.parentNode.parentNode.parentNode;var id=divnode.id;window.kupu=initPloneKupu(id);var prefix='#'+id+' ';var textarea=getFromSelector(prefix+'textarea.kupu-editor-textarea');kukit.fo.fieldUpdateRegistry.register(textarea,{editor:window.kupu,node:textarea,doInit: function(){},doUpdate: function(){this.editor.saveDataToField(this.node.form,this.node);this.editor._initialized=true}});if(oper.parms.avoidPhaseOneInit&&oper.node._kukitmark==1)
return;window.kupuui=window.kupu.getTool('ui');window.drawertool=window.kupu.getTool('drawertool');window.kupu.initialize();var form=textarea.form;var elements=form.elements;var fmtname=textarea.name+'_text_format';var hiddencnt=0;for(var y=0;y<elements.length;y++){var element=elements[y];if(element.tagName.toLowerCase()=='input'&&element.name==fmtname){if(hiddencnt>0){element.parentNode.removeChild(element)}
hiddencnt+=1}}});kukit.cr.commandRegistry.registerFromAction('plone-initKupu',kukit.cr.makeSelectorCommand);kukit.ar.actionRegistry.register("plone-followLink", function(oper){oper.completeParms([],{},'plone-followLink action');var url=oper.node.href;if(url.substr(0,7)=="http://"){window.location.replace(url)} else if(url.substr(0,13)=="javascript://"){eval(url.substr(13))}});kukit.cr.commandRegistry.registerFromAction('plone-followLink',kukit.cr.makeSelectorCommand);kukit.ar.actionRegistry.register("plone-submitCurrentForm", function(oper){oper.completeParms([],{},'plone-submitCurrentForm action');var form=new kukit.fo.CurrentFormLocator(oper.node).getForm();form.submit()});kukit.cr.commandRegistry.registerFromAction('plone-submitCurrentForm',kukit.cr.makeSelectorCommand);kukit.ar.actionRegistry.register("initializeCollapsible", function(oper){activateCollapsibles()});kukit.log('actions for Plone legacy js registered (initialize collapsible)');
