// added by jgc from treasure chest 
// insert after Effect.Transform or before Element.CSS_PROPERTIES
// version 1.0, June 2007

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

Effect.SlideLeft = function(element) {
  element = $(element).cleanWhitespace(element);
  var oldInnerRight = Element.getStyle(element.firstChild, 'right');
  return new Effect.Scale(element, 0, 
   Object.extend({ scaleContent: false, 
    scaleY: false, 
    scaleMode: 'box',
    scaleFrom: 100,
    restoreAfterFinish: true,
    beforeStartInternal: function(effect) { with(Element) {
      makePositioned(effect.element);
      makePositioned(effect.element.firstChild);
      if(window.opera) setStyle(effect.element, {top: ''});
      makeClipping(effect.element);
      show(element); }},  
    afterUpdateInternal: function(effect) { with(Element) {
      setStyle(effect.element.firstChild, {right:
        (effect.dims[0] - effect.element.clientWidth) + 'px' }); }},
    afterFinishInternal: function(effect) { with(Element) {
        // [hide, undoClipping].call(effect.element); 
        effect.element.hide().undoClipping();
        // undoPositioned(effect.element.firstChild);
        effect.element.firstChild.undoPositioned();
        // undoPositioned(effect.element);
        effect.element.undoPositioned();
        setStyle(effect.element.firstChild, {right: oldInnerRight}); }}
   }, arguments[1] || {})
  );
};

Effect.SlideRightOrLeft = function(element) {
  element = $(element);
  if(Element.visible(element)) new Effect.SlideLeft(element);
  else new Effect.SlideRight(element);
};

// end jgc

