// Copyright (c) 2005 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
// Contributors: Justin Palmer, Mark Pilgrim, Martin Bialasinki
 
// 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(element, {fontSize: (percent/100) + 'em'});   
  if(navigator.appVersion.indexOf('AppleWebKit')>0) window.scrollBy(0,0);
}

Element.getOpacity = function(element){  
  var opacity;
  if (opacity = Element.getStyle(element, 'opacity'))  
    return parseFloat(opacity);  
  if (opacity = (Element.getStyle(element, 'filter') || '').match(/alpha\(opacity=(.*)\)/))  
    if(opacity[1]) return parseFloat(opacity[1]) / 100;  
  return 1.0;  
}

Element.setOpacity = function(element, value){  
  element= $(element);  
  if (value == 1){
    Element.setStyle(element, { opacity: 
      (/Gecko/.test(navigator.userAgent) && !/Konqueror|Safari|KHTML/.test(navigator.userAgent)) ? 
      0.999999 : null });
    if(/MSIE/.test(navigator.userAgent))  
      Element.setStyle(element, {filter: Element.getStyle(element,'filter').replace(/alpha\([^\)]*\)/gi,'')});  
  } else {  
    if(value < 0.00001) value = 0;  
    Element.setStyle(element, {opacity: value});
    if(/MSIE/.test(navigator.userAgent))  
     Element.setStyle(element, 
       { filter: Element.getStyle(element,'filter').replace(/alpha\([^\)]*\)/gi,'') +
                 'alpha(opacity='+value*100+')' });  
  }
}  
 
Element.getInlineOpacity = function(element){  
  return $(element).style.opacity || '';
}  

Element.childrenWithClassName = function(element, className, findFirst) {
  var classNameRegExp = new RegExp("(^|\\s)" + className + "(\\s|$)");
  var results = $A($(element).getElementsByTagName('*'))[findFirst ? 'detect' : 'select']( function(c) { 
    return (c.className && c.className.match(classNameRegExp));
  });
  if(!results) results = [];
  return results;
}

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 = {
  tagifyText: function(element) {
    var tagifyStyle = 'position:relative';
    if(/MSIE/.test(navigator.userAgent)) 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 = {}

Effect.Transitions.linear = Prototype.K;

Effect.Transitions.sinoidal = function(pos) {
  return (-Math.cos(pos*Math.PI)/2) + 0.5;
}
Effect.Transitions.reverse  = function(pos) {
  return 1-pos;
}
Effect.Transitions.flicker = function(pos) {
  return ((-Math.cos(pos*Math.PI)/4) + 0.75) + Math.random()/4;
}
Effect.Transitions.wobble = function(pos) {
  return (-Math.cos(pos*Math.PI*(9*pos))/2) + 0.5;
}
Effect.Transitions.pulse = function(pos) {
  return (Math.floor(pos*10) % 2 == 0 ? 
    (pos*10-Math.floor(pos*10)) : 1-(pos*10-Math.floor(pos*10)));
}
Effect.Transitions.none = function(pos) {
  return 0;
}
Effect.Transitions.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 '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), 40);
  },
  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();
    this.effects.invoke('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:        25.0,  // max. 25fps 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() {
    return '#<Effect:' + $H(this).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.Opacity = Class.create();
Object.extend(Object.extend(Effect.Opacity.prototype, Effect.Base.prototype), {
  initialize: function(element) {
    this.element = $(element);
    // make this work on IE on elements without 'layout'
    if(/MSIE/.test(navigator.userAgent) && (!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);
    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<: fuAvn(elment, 
    O,i       le('top'ale = Class.create();
Object.extend(Object.extend(Effeeptions.sync)
      Effect.Queues.get(tyni 
    O,i       le('top'ale = Class.create();
Objectss.cr    ensetSte impl;
Objectss.cM:    0bosit  .options.0bosial" 'class.csial" {}make  ct.vid  /     s;
Objectss.cr   : ret: this.elemtss.cTnt.gep'ale =y:    0,
      mod), limit: 1 }
    }, arguments[1] || {});
    this.start(options);
 > this.syoueAosition);ginalLeft;
    s.syoueAosition);glime imp;ass.create();
Objed them)lts;
 this.originalTop  = pa:  Math.s.elementlement.getStyle('lection(el
}
ment[arseF,arseFl,'widthl,'he    l,' 
  Ele']on(position) {
k) {
    if(thistyle('lection[k];
 this.originastion[k]his.optiinterval = eName] = new Eff.getStyle('left') || this.originaoff  t= this.opt.element.makePositio this.originaoff  t= this.optiject.exten 
  Ele;
 this.originalTop  = pa 
 -sEle'oat(thret%'}
ment[aeml,'osit'%l,'ot']on(position) {
 
  Eleon(c
    if(this. 
  Ele);   
   
  Eleon(c>0    if(frame > thi 
  Ele;;;;;|| '0');
    
  Elerame) {
         
  Eleon(crds 
  Eleon(c       this.curreinterval = eName] =is.opt.elemfact  
  + 'px',
    tss.cTn this.opt,
    tss.cr   )yle(Name] =is.opt.elemdims.interval);
 .getStyle('top')tss.cM:  ==0bosi.element.curredims.in[ this.originaoff  tHe    ,o this.originaoff  tWidth]al);
 .ge/^class.cs withotStyle('top')tss.cM:  ).element.curredims.in[ this.originandexOfHe    ,o this.originandexOfWidth]al);
 .ge!curredims.element.curredims.in[ thise('top')tss.cM:  ment.makeHe    ,me) {
               thise('top')tss.cM:  ment.makeWidth]al);y - this.originalTop;
    }
  },
  upent, r.userAents[3]otStyle('top')tss.cr   /ret: )this.finifact  * if(effect.finish.getStyle('top')tss.cClass.c/MSI      
  Ele.element.currentStyle.hasLayout) 
  Eleme> thi 
  Ele;*, r.userAents[+       
  Eleon(crt: 1 }
    }, etDitylem'}s(curredimsr.le*, r.userAents,.curredimsde: *, r.userAentsffects.invoke('render', position);
  },
  fi  
> this.syoueAosition);).currentStyle.hasLayout(thistyle('lection || {});
    tDitylem'}sder', posithe    ,owidth },
  upent,d(el
}
ment.getStyle('top')tss.cX) d.width this.startOn)width }* posi}
ment.getStyle('top')tss.cY) d.he     this.startOn)he     }* posi}
ment.getStyle('top')tss.cr    enset    if(fram  },opdturn;he     - curredimsr.l)/2/ (this.finisrseFd(el)width  - curredimsr1l)/2/ (this.f(e) { ret;
Objed them)lts;0');
    if(this.optiont.getStyle('top')tss.cY) d.tly =f.getStyle('left'-opdt* posi}
mentment.getStyle('top')tss.cX) d.lositio thisent.makePosi-rseFd(* posi}
mentme/alpha\(is.optiont.getStyle('top')tss.cY) d.tly =f-opdt* posi}
mentment.getStyle('top')tss.cX) d.lositio-rseFd(* posi}
mentme/is.options.t.currentStyle.hasLayoutdthis.element.setOpacityH   l     th || {}));
};

Effect.Scale = Class.create();
ObjH   l    extend(Object.extend(Effect.Move.prototype, Effect.Base.prototype), {
  initialize: function(element) {
    this.element = $(element);
 totype}  
  0#ffff99' 0,
      mode: 'relative'
    }, arguments[1] || {});
    this.start(options);
  },Prfinis executlts;);
    // msheein  // work o flow
ment.getStyl.originalTop  = padispwor')==0s*10  
      tect.rends.event('}s);
  },Disr firx'
gartOn image Efflts; // effectis.opt.elemeldction(el
mentmex'
gartOnImagens = Object.extendp  = pax'
gartOn-image  };ons.t.currentStyle.hasLayout{x'
gartOnImagens0s*10 (function(e)
  cancel: fun);}  
.element.currecel: fun);}  
;
 this.originalTop  = pax'
gartOn-}  
') convertabl(0#ffffff0);
    this.event('befors.syoue}  
.element.currecel: funs.syoue}  
;
 this.originalTop  = pax'
gartOn-}  
'){
    thie, E }  
 bsoluls.optsons.t.curre_ba.5;
}$R(0,2 = tpis.effectsi this.effe;  
    tStyle('top')ttype}  
3);  
i*2+1,i*2+3),16)reinterval = eName] =curre_, so 
}$R(0,2 = tpis.effectsi this.effe;  
    tStyle('top'));}  
3);  
i*2+1,i*2+3),16)-curre_ba.5[i]reinterval = eName]y - this.originalTop;
    }
  },
  update: function(positionx'
gartOnC  
  $R(0,2 =in  thi'#',nalTop;
m,v,i)
mentmeis.effem+(ginalLeft) + 'px_ba.5[i]+(curre_, so [i]*    }
  ; do { color +=ndseinterval = ens.speed + mase('render', posit },
  update: function(positio $(element);
.elemeldction,l
mentmex'
gartOnC  
  currecel: funs.syoue}  
tion + tthis.element.setOpacitySdexOfTn 3] || {}));
};

Effect.Scale = Class.create();
ObjecexOfTnextend(Object.extend(Effect.Move.prototype, Effect.Base.prototype), {
  initialize: function(element) {
    s.effects = effects ||  'relative');
    this.start(options);
 ed them)fece;   (effect || 'apff  tnt =ed them)fcumuset toOff  tetStyl.origint.finish.getStyle('top')pff  t)apff  tn||  -this.options.frpff  tffect || 'ama andrsion.iinnerHe    f this.optirsion.ihe     - rsion.iinnerHe    f        bment = $(bodyandexOfHe     - 
mentment(ment = $(ment = $t).style.litylHe    f this.opti   bment = $(ment = $t).style.litylHe    f:bment = $(bodya.litylHe     {
    s.effedexOfn*100t =ed them)f, so w{
    s.eff, so 
}(pff  tn||  >ama a?ama a:apff  tn|| )- this.stdexOfn*100Name]y - this.originalTop;
    }
  },
  uped them)fece;   (effect |rsion.indexOfTo(ed them)f, so X,);
    
    edexOfn*100t+ 
    }
 *s.eff, so tthis.element.setction(pos) {
  retync:s.optn 1;
}

/* ------------- core effUp'];
}

Element.forceReren: function(element) {
  | 'apld);
    }).originalTo });  
  }
( {
  | 'ap(Effeeptions.sync)
      Efptionsject.extend({
      fro1e for combinit: this.position);al']) thbind(this), 40);
  'string') limit || (this.to!=0 if(typeffect |effect.f    ((noid (effect |effect.f    ((nn(position
    Elempld);
   }    if(}0,
      mode: 'relative'on(element, toTop,({
       le('tents[1] || options).insn','Bl;
}

Element.forceReren: function(element) {
  | 'ap(Effeeptions.sync)
      Efptions(.originalTop  = padispwor');0')s*10 a?at:  nsject.extend({
      frot: )for combini1e for c)  + 'ce gator.// aunctio floa'fron    // mectperlyhis.position);al']) thbind(this), 40);
  fect |effect.f    ((n  return results(tive');
  = 'running'bind(this), 40);
  fect |effect.f    ((nn(position)limit || (this.= (this.optieffect.f    ((nnhow(    if(}0,
      mode: 'relative'on(element, toTop,({
       le('tents[1] || options).insPuff;
}

Element.forceReren: function(element) {
  | 'apldction(el
    Eleme.originalTo });  
  }
( ,};
Effect..originalTop  = pa:  Math.s.};ons.on(element, toTop,ect.exte
    [     this.instaerAgent))  200,);
    {o Effecate()ctss.cr    ensetState()ctss.cClass.create() s.syoueAosition);reate(+ t,);
    ent, toTop,({
       le('t{o Effecate()combit:  } ) ],);
     $(element);
 tEffect.Traition
mentmex 'running'al']) thbind(this), 40);
  fect |optieffect.f1;
}[0].f    ((nn(position;
Effect.);
    if}   .node('spaposition);al']) thbind(this), 40);
  fect ||optieffect.f1;
}[0].f    ((noid (effect ||optieffect.f1;
}[0].f    ((nn(positiopldction)('}s);
  0,
      mode: 'relats);
 || options).ins],
   ;
}

Element.forceReren: function(element) {
  ou do not neClipplts(tive'on(element, toTop,staerAgent))   this.el $(element);
 toss.cClass.cree implefect ||o.Queues.e implefect ||os.syoueAosition);reate(node('spaposition);al']) thbind(this), 40);
  fect ||opteffect.f    ((noid (effect ||opteffect.f    ((ntOnoClipplts(tive'
  0=7) colo,
      mode: 'relats); || options).ins],
 lide;
}

Element.forceReren: function(element) {
  | 'alement)Ditylem'}s }).originalToDitylem'}s(tive'on(element, toTop,staerAgent))  100,) $(element);
 t7) coloss.cClass.cree implefect |.Queues.e implfect |.Queur   : 0lfect |.QueuM:    {ent.makeHe    :alement)Ditylem'}s.he    ,oent.makeWidth:alement)Ditylem'}s.width.node('ss.syoueAosition);reate(node('shis.setup(bind(this), 40);
  fect ||oeffect.f    ((nt neClipplts(tive'ct |effect.f    ((nn(positionhe    :a'0px'}tive'ct |effect.f    ((nnhow(    if(olo, ode('shis.sion);al']) thbind(this), 40);
  fect ||oeffect.f    ((ntOnoClipplts(tive'
ions.y 
      mode: 'relat || options).insSons.qOff;
}

Element.forceReren: function(element) {
  | 'apld);
    }).originalTo });  
  }
( {
  on(element, toTop,n','Blment, index) {
      ne fect |Effect.Tra0.4node('sf   : 0lfect |

Effect.DefaultOptions = {
 n 1-pos,ode('shis.sion);al']) thbind(this), 40);
  fect ||oent, toTop,staerAgffect.f    (( 1,  'stringct |Effect.Tra0.3)ctss.cr    ensetState()stringct |.Queues.e impleoss.cClass.cree imples.syoueAosition);reate(node('spa  = 'running'bind(this), 40);
  this.opti   beffect.f    ((nt need them) 
    thisct ||oeffect.f    ((nt neClipplts(tive'ct |  .node('span'position);al']) thbind(this), 40);
  fect ||optiteffect.f    ((noid (effect ||optpteffect.f    ((ntOnoClipplts(tive'
  ptpteffect.f    ((ntOnoed them) 
    thisct ||oeffect.f    ((nn(position
    Elempld);
   }  ve'ct |  .ve'
  0)ve'
ions.y 
      mode: 'relat || options).insDctpOut;
}

Element.forceReren: function(element) {
  | 'apldction(elfect |
s.or.originalTop  = parseFlnode('s this..originalLeft = parseFlonode('s    Eleme.originalTo });  
  }
( };ons.on(element, toTop,ect.exte
     [     this.in toLeft) {
  {x: 0l
  100,) Effecate(+ t,);
     ent, toTop,({
       le('t{o Effecate()combit:  }) ],his.el $(element);
;
    {oEffect.Tra0.5node('spa  = 'running'bind(this), 40);
    thisct ||oeffect.f1;
}[0].f    ((nt need them) 
   ve'ct |  .node('span'position);al']) thbind(this), 40);
  fect ||optiteffect.f1;
}[0].f    ((noid (effect ||optiteffect.f1;
}[0].f    ((ntOnoed them) 
    thisct ||oeffect.f1;
}[0].f    ((nn(positiopldction)(ve'ct |  .afterFinis 
      mode: 'relat || options).insSh.ele
}

Element.forceReren: function(element) {
  | 'apldction(elfect |
s.or.originalTop  = parseFlnode('s this..originalLeft = parseFlo};ons.t.on(element, toTop, toLeft) {
  return {optio20l
  0lEffect.Tra0.05,'position);al']) thbind(this), 40);
  fect |ent, toTop, toLefffect.f    (( return {opti-40l
  0lEffect.Tra0.1, 'position);al']) thbind(this), 40);
  fect |ent, toTop, toLefffect.f    (( return {opti 40l
  0lEffect.Tra0.1, 'position);al']) thbind(this), 40);
  fect |ent, toTop, toLefffect.f    (( return {opti-40l
  0lEffect.Tra0.1, 'position);al']) thbind(this), 40);
  fect |ent, toTop, toLefffect.f    (( return {opti 40l
  0lEffect.Tra0.1, 'position);al']) thbind(this), 40);
  fect |ent, toTop, toLefffect.f    (( return {opti-20l
  0lEffect.Tra0.05,'position);al']) thbind(this), 40);
  fect | ||oeffect.f    ((ntOnoed them) 
    thisct |effect.f    ((nn(positiopldction)(ve'}}) }}) }}) }}) }}) }})|| options).insS,
  PAI;
}

Element.forceReren: function(element) {
  ou do nos.efnWhitesp.get {
  // S,
  PAI;    // a relathe class.c c)
 tatic elemwrent)dein a clasa;  ratic elemwke  fix)dehe    !
  | 'apldInnerBott('');(element). formendCh)alTop  = paxott('' {
  | 'alement)Ditylem'}s }).originalToDitylem'}s(tive'on(element, toTop,staerAgent))  100,) $(element);
 t7) coloss.cClass.cree implefect |.Queues.e implefect |.Queur   : rsion.iotion(?   ns1lfect |.QueuM:    {ent.makeHe    :alement)Ditylem'}s.he    ,oent.makeWidth:alement)Ditylem'}s.width.node('ss.syoueAosition);reate(node('shis.setup(bind(this), 40);
  fect ||oeffect.f    ((nt need them) 
    thiscteffect.f    ((n formendChnt need them) 
    thisctif(rsion.iotion)oeffect.f    ((nn(position
s.or''}tive'ct |effect.f    ((nt neClipplts(tive'ct |effect.f    ((nn(positionhe    :a'0px'}tive'ct |effect.f    ((nnhow(   }node('shis.se(pos)al']) thbind(this), 40);
  fect ||oeffect.f    ((n formendChnn(positionxott('        breefffect.dimsr.le-oeffect.f    ((n.litylHe     (* posi }    if(olo,ode('shis.sion);al']) thbind(this), 40);
  fect ||oeffect.f    ((ntOnoClipplts(ti return // IE rsll crashi  se
  is tOnoed them) x form  thisctif( = 'position:relative';
    if(/ fect | ||oeffect.f    ((ntOnoed them) 
    thisct |effect.f    ((n formendChntOnoed them) 
    thisct}lpha fect | ||oeffect.f    ((n formendChntOnoed them) 
    thisct|oeffect.f    ((ntOnoed them) 
    thisct}fect ||oeffect.f    ((n formendChnn(positionxott(' apldInnerBott('})('}s);
 o,
      mode: 'relats); || opt odns).insS,
   ;
}

Element.forceReren: function(element) {
  ou do nos.efnWhitesp.get {
  | 'apldInnerBott('');(element). formendCh)alTop  = paxott('' {
  on(element, toTop,staerAgent))  rsion.iotion(?   ns1lfect  $(element);
 toss.cClass.cree implefect |.Queues.e implefect |.QueuM:    0bositfect |.Queur   : 100,ode('ss.syoueAosition);reate(node('suration*100al']) thbind(this), 40);
  fect ||oeffect.f    ((nt need them) 
    thiscteffect.f    ((n formendChnt need them) 
    thisctif(rsion.iotion)oeffect.f    ((nn(position
s.or''}tive'ct |effect.f    ((nt neClipplts(tive'ct |effect.f    ((nnhow(   }n ode('shis.se(pos)al']) thbind(this), 40);
  fect ||oeffect.f    ((n formendChnn(positionxott('        breefffect.dimsr.le-oeffect.f    ((n.litylHe     (* posi }   o,ode('shis.sion);al']) thbind(this), 40);
  fect ||oeffect.f    ((noid (effect ||oeffect.f    ((ntOnoClipplts(tive'
  effect.f    ((n formendChntOnoed them) 
    thiscteffect.f    ((ntOnoed them) 
    thiscteffect.f    ((nn(positionxott(' apldInnerBott('})('}s);
o,
      mode: 'relats); || optio },
  setotion(t ne   // TD clasa; lts; / mov functiexpment+ 'pa  }
}); 'end':e('ren odns).insSqu);gin}

Element.forceRerenon(element, toTop,staerAgent))  rsion.iotion(? 1   0l  this{es.syoueAosition);reate(node('spa= 'running'bind(this), 40);
    thisct |effect.f    ((nt neClipplts(effect.f    ((   }n ode('spaposition);al']) thbind(this), 40);
  fect ||opteffect.f    ((noid (effect.f    ((     thisct|oeffect.f    ((ntOnoClipplts(effect.f    ((   }ve'})|| options).insGrow;
}

Element.forceReren: function(element) {
  | 'ap(Effeeptions.sync)
      Ef  direcffect.)censetitfect |absoT
Effect.DefaultOptions = {
  transition: emtss.cT
Effect.DefaultOptions = {
  transition: em    EleT
Effect.DefaultOptions = {
 eturons.y 
      mode: 'relat{
  | 'apldction(elfect |
s.or.originalement
s.node('s this..originalement thinode('she    :alement)alementhe    ,me) {width:alement)alementwidthnode('s    Eleme.originalTo });  
  }
( };on
  | 'adims.in.originalToDitylem'}s(tie('s
  | 'ae, Effe toLX,ae, Effe toLY{
  | 'amtoLX,amtoLY{
  
  ions.q ments[1].direcffec
  fect |     }
s.-rseF
        be, Effe toLX.ine, Effe toLY.inmtoLX.inmtoLY.in0    thisct').max() ||      }
s.-     
        be, Effe toLX.indimstwidth;       be, Effe toLY.inmtoLY.in0        bmtoLX.in-dimstwidth;       b').max() ||      }xott('-rseF
        be, Effe toLX.inmtoLX.in0;       be, Effe toLY.indimsthe            bmtoLY.in-dimsthe            b').max() ||      }xott('-     
        be, Effe toLX.indimstwidth;       be, Effe toLY.indimsthe            bmtoLX.in-dimstwidth;       bmtoLY.in-dimsthe            b').max() ||      }censeti        be, Effe toLX.indimstwidth / 2;       be, Effe toLY.indimsthe     / 2;       bmtoLX.in-dimstwidth / 2;       bmtoLY.in-dimsthe     / 2;       b').max() |}
  
  on(element, toTop, toLeft) {
   fect |x:ae, Effe toLX,fect |y:ae, Effe toLY,fect |Effect.Tra0.01l  this= 'running'bind(this), 40);
    thiscteffect.f    ((noid (effect ||oeffect.f    ((nt neClipplts(tive'ct |effect.f    ((nt need them) 
    thiso,ode('shis.sion);al']) thbind(this), 40);
  fect ||oent, toTop,ect.exte
         [ ent, toTop,({
     ffect.f    (( {o Effecate()combiitionf   : 0tion

Effect.Detions.frp   EleT
Effect.+ t,
          |ent, toTop, toLefffect.f    (( {optimtoLX,aytimtoLY,o Effecate()co
Effect.Detions.frabsoT
Effect.+ t,
          |ent, toTop,staerAgffect.f    (( 100,) fect ||optit |.QueuM:    { ent.makeHe    :adimsthe    ,oent.makeWidth:adimstwidth }g.fromCharCode(1 Effecate()ctss.cr   : rsion.iotion(? 1   0lo
Effect.Detions.frtss.cT
Effect.les.syoueAosition);reate(})fromCharCo]dex) {
      ne fect ||||||||||= 'running'bind(this), 40);
    thisct ||oct |effect.f1;
}[0].f    ((nn(positionhe    :a'0px'}tive'ct | ||oct |effect.f1;
}[0].f    ((nnhow(    if(ollllllllll.node('span',{styposition);al']) thbind(this), 40);
  fect ||optitct |effect.f1;
}[0].f    ((ntOnoClipplts(tive'
  ptptct |effect.f1;
}[0].f    ((ntOnoed them) 
    thisct ||oct |effect.f1;
}[0].f    ((nn(positiopldction)(' if(ollllllllll. if(ollllllll}Effect.PAI if(olll)ve'
ions.y || options).insShrink;
}

Element.forceReren: function(element) {
  | 'ap(Effeeptions.sync)
      Ef  direcffect.)censetitfect |absoT
Effect.DefaultOptions = {
  transition: emtss.cT
Effect.DefaultOptions = {
  transition: em    EleT
Effect.DefaultOptions = {
 s*10ons.y 
      mode: 'relat{
  | 'apldction(elfect |
s.or.originalement
s.node('s this..originalement thinode('she    :alement)alementhe    ,me) {width:alement)alementwidthnode('s    Eleme.originalTo });  
  }
( };on
  | 'adims.in.originalToDitylem'}s(t{
  | 'amtoLX,amtoLY{
  
  ions.q ments[1].direcffec
  fect |     }
s.-rseF
        bmtoLX.inmtoLY.in0   thisct').max() ||      }
s.-     
        bmtoLX.indimstwidth;       bmtoLY.in0   thisct').max() ||      }xott('-rseF
        bmtoLX.in0;       bmtoLY.indimsthe            b').max() ||      }xott('-     
        bmtoLX.indimstwidth;       bmtoLY.indimsthe            b').max() ||      }censeti  ode('spamtoLX.indimstwidth / 2;       bmtoLY.indimsthe     / 2;       b').max() |}
  
  on(element, toTop,ect.exte
     [     this.in({
       le('t{o Effecate()combit: onf   : 1tion

Effect.Detions.frp   EleT
Effect.+ t,
       ent, toTop,staerAgent))  rsion.iotion(? 1   0l{o Effecate()co
Effect.Detions.frtss.cT
Effect.les.syoueAosition);reate(}),
       ent, toTop, toLeft) {
   optimtoLX,aytimtoLY,o Effecate()co
Effect.Detions.frabsoT
Effect.+ t
     ]dex) {
      ne (ollllllllll if(olllllluration*100al']) thbind(this), 40);
  fect ||ooooooeffect.f1;
}[0].f    ((nt need them) 
  fect ||ooooooeffect.f1;
}[0].f    ((nt neClipplts(ti .node('span',position);al']) thbind(this), 40);
  fect ||optiteffect.f1;
}[0].f    ((noid (effect ||optit|effect.f1;
}[0].f    ((ntOnoClipplts(tive'
  ptpteffect.f1;
}[0].f    ((ntOnoed them) 
    thisct ||oeffect.f1;
}[0].f    ((nn(positiopldction)('. if(ollll}Effect.PAI if( || options).insPulscope).}

Element.forceReren: function(element) {
  | 'ap(Effeep ;
}
      mode: 'rela{
  | 'apld);
    }).originalTo });  
  }
( {
  | 'ao
Effect. 2] || {});o
Effect. 'refaultOptions = {
  transit{
  | 'a) + 0.5r ;
}
Effect.Tranthis.effe.transition1-faultOptions = {
 ) + 0.Tran };ons.on+ 0.5rintervaing') {
 {
  on(element, toTop,({
       le('t if(olons) {
    this.options      |Effect.Tra3tionf   : 0node('spaposition);al']) thbind(this), 40);
  |effect.f    ((nn(position
    Elempld);
   }   }s);
 o,fect.PAI   o
Effect.Deon+ 0.5rat || options).insFplde
}

Element.forceReren: function(element) {
  | 'apldction(elfect |
s.or.originalement
s.node('s this..originalement thinode('swidth:alement)alementwidthnode('she    :alement)alementhe    };ons.E    ((nt neClipplts(eement) {
  on(element, toTop,staerAgent))  5dex) {
      ne (olon: emtss.cClass.cree implon: emtss.ces.e implfect |position);al']) thbind(this), 40);
  fect |ent, toTop,staerAgent))  1,  'stringctoss.cClass.cree implefect ||o.QueuYSte impl;
Objecposition);al']) thbind(this), 40);
  fect ||opteffect.f    ((noid (effect ||opteffect.f    ((ntOnoClipplts(ti   thisct|oeffect.f    ((nn(positiopldction)(ve'ct |}ns.speed s 
      mode: 'relat || o;on
['n(position','g(position','g(p });  
  }
l,' return resultsl,'atten().join('itfec'className)) ? 
l,'className)) ? 
        Elel,'copacity || '';
}  ']on(posipeed args = arg  'E    ((nMethods[f];
E    (([f]  }s)nt.setO    ((nMethodss[2]ual toToprds compatibility
Efeffect,fect.PAI  fecttion(effec.gsub(/_/, '-').c  ect.(effect(effec_c
Elemens. ' ?At(0; doUppect = (e +ns.subt(type(1effectent, toTop[(effec_c
Elect][1] : Effect.PAIRS[efacity = function(|| o;on
O    ((naddMethods(nt.setOpacityPha
  e
}

Element.forceReren: function(element) {
  ent, toTop,],
 lidet][1] : Ef
      mode: 'relat{
  ent, toTop,n','Blment, inde
      mod), lim
      mode: 'relat{
}.setOpacityPha
Out;
}

Element.forceReren: function(element) {
  ent, toTop,Up']t][1] : Ef
      mode: 'relat{
  ent, toTop,],
   ment, inde
      mod), lim
      mode: 'relat{
}.setOpacityPha
;
}

Element.forceReren: function(element) {
    
lement)alementdispwor;0')s*10 )fect |ent, toTop,Pha
  t][1] : Ef
      mode: 'relade
      mod), lim
      mode: 'relat{
)
   |ent, toTop,Pha
Outt][1] : Ef
      mode: 'relade
      mod), lim
      mode: 'relat{
}.s
