Effect.SlideIn = function(element) {
  element = $(element).cleanWhitespace();
  // SlideDown need to have the content of the element wrapped in a container element with fixed height!
  var oldInnerRight = element.down().getStyle('right');
  var elementDimensions = element.getDimensions();
  return new Effect.Scale(element, 100, Object.extend({ 
    scaleContent: false, 
    scaleY: 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({left: ''});
      effect.element.makeClipping().setStyle({width: '0px'}).show(); 
    },
    afterUpdateInternal: function(effect) {
      effect.element.down().setStyle({right:
        (effect.dims[0] - effect.element.clientWidth) + 'px' }); 
    },
    afterFinishInternal: function(effect) {
      effect.element.undoClipping().undoPositioned();
      effect.element.down().undoPositioned().setStyle({right: oldInnerRight}); }
    }, arguments[1] || { })
  );
};

// Effect.SlideOut = function(element) {
//   element = $(element).cleanWhitespace();
//   var oldInnerRight = element.down().getStyle('right');
//   var elementDimensions = element.getDimensions();
//   return new Effect.Scale(element, window.opera ? 0 : 1,
//    Object.extend({ scaleContent: false, 
//     scaleY: false, 
//     scaleMode: 'box',
//     scaleFrom: 100,
//     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({left: ''});
//       effect.element.makeClipping().show();
//     },  
//     afterUpdateInternal: function(effect) {
//       effect.element.down().setStyle({right:
//         (effect.dims[1] - effect.element.clientWidth) + 'px' });
//     },
//     afterFinishInternal: function(effect) {
//       effect.element.hide().undoClipping().undoPositioned();
//       effect.element.down().undoPositioned().setStyle({right: oldInnerRight});
//     }
//    }, arguments[1] || { })
//   );
// };







// Effect.SlideIn = function(element) {
//   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) {
//       undoClipping(effect.element); 
//       undoPositioned(effect.element.firstChild);
//       undoPositioned(effect.element);
//       setStyle(effect.element.firstChild, {right: oldInnerRight}); }}
//     }, arguments[1] || {})
//   );
// }

Effect.SlideOut = function(element) {
  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); 
        undoPositioned(effect.element.firstChild);
        undoPositioned(effect.element);
        setStyle(effect.element.firstChild, {right: oldInnerRight}); }}
   }, arguments[1] || {})
  );
}