function switchMe( stuff1, stuff2, size ) {
    var me = $( stuff1 );
    var you = $( stuff2 );
    if ( Element.visible( me ).valueOf() ) {
        try {
            new Effect.GoOut( me, you, size );
        } catch ( e ) {
            Element.hide( me );
        }
    } else {
        try {
            new Effect.GoIn( me, you, size );
        } catch ( e ) {
            Element.show( me );
        }
    }
}

Effect.GoOut = function(element, main, size) {
  element = $(element);
  main = $(main);
  var oldStyle = {
    top: Element.getStyle(element, 'top'),
    left: Element.getStyle(element, 'left') };
  return new Effect.Parallel(
     [ new Effect.Move(element, {x: -size, y: 0, sync: true }),
       new Effect.Move(main, {x: -size, y: 0, sync: true }) ],
     Object.extend(
       { duration: 0.5,
         beforeSetup: function(effect) { with(Element) {
          makePositioned(effect.effects[0].element); }},
         afterFinishInternal: function(effect) {
           var w = main.offsetWidth + size;
           main.style.width = w + 'px';
           with(Element) {
               [hide, undoPositioned].call(effect.effects[0].element);
               setStyle(effect.effects[0].element, oldStyle); }
           }
       }, arguments[1] || {}), { queue: 'end'});
}
Effect.GoIn = function(element, main, size) {
  element = $(element);
  main = $(main);
  var oldStyle = {
    top: Element.getStyle(element, 'top'),
    left: Element.getStyle(element, 'left') };
  return new Effect.Parallel(
     [ new Effect.Move(element, {x: size, y: 0, sync: true }),
       new Effect.Move(main, {x: size, y: 0, sync: true }) ],
     Object.extend(
       { duration: 0.5,
         beforeSetup: function(effect) {
            var w = main.offsetWidth - size;
            main.style.width = w + 'px';
            var el = effect.effects[0].element;
            el.style.left= '-' + size + 'px';
            Element.makePositioned(el);
            Element.show(el);
        },
         afterFinishInternal: function(effect) {
            with(Element) {
               [show, undoPositioned].call(effect.effects[0].element);
               setStyle(effect.effects[0].element, oldStyle);
            }
           }
       }, arguments[1] || {}), { queue: 'end'});
}
