Effect.Mutate = function(from, into){
	from = $(from);
	from.absolutize();
	from.makeClipping();
	from.insert({before: $(into) || into});
	
	into = from.previous();
	
	var style = 'width: ' + into.getWidth() + 'px; height: ' + into.getHeight() + 'px;';
	
	into.setStyle({ width: from.getWidth() + 'px', height: from.getHeight() + 'px' });
	into.makeClipping();
	into.setOpacity(0.0);
	into.show();
	
	return new Effect.Parallel([
		new Effect.Morph(from, {sync: true, style: style + 'opacity: 0.0;'}),
		new Effect.Morph(into, {sync: true, style: style + 'opacity: 1.0;'})
	], Object.extend({
		afterFinishInternal: function(e){
			into.undoClipping();
			into.style.width = null;
			into.style.height = null;
			into = null;
			
			if (e.options.replace){
				from.remove();
				from = null;
				return;
			}
			
			from.relativize();
			from.undoClipping();
			from.hide();
		}
	}, arguments[2] || {}));
};

Effect.FadeBlind = function(element){
	return new Effect.Parallel([Effect.BlindUp(element, {sync: true}), Effect.Fade(element, {sync: true})], arguments[1] || {});
};
Effect.AppearBlind = function(element){
	return new Effect.Parallel([Effect.BlindDown(element, {sync: true}), Effect.Appear(element, {sync: true})], arguments[1] || {});
};

// enable Effect.toggle(element, 'fading_blind');
Effect.PAIRS['fading_blind'] = ['AppearBlind', 'FadeBlind'];

Element.addMethods({
	fadeBlind: function(element, options){
		element = $(element);
		Effect.FadeBlind(element, options);
		return element;
	},
	appearBlind: function(element, options){
		element = $(element);
		Effect.AppearBlind(element, options);
		return element;
	},
	mutateTo: function(element, into, options){
		element = $(element)
		Effect.Mutate(element, into, options)
		return element;
	},
	removeWithEffect: function(element, effect, options){
		element = $(element);
		options = options || {};
		
		options.afterFinish = 'afterFinish' in options ? 
			options.afterFinish.wrap(function(callback, e){ callback(e); element.remove(); }) : 
			function(){ element.remove(); };
		
		effect = effect.camelize();
		effect = effect.charAt(0).toUpperCase() + effect.substring(1);
		effect = Effect[effect];
		
		if (effect.prototype.initialize){
			new effect(element, options);
		} else {
			effect(element, options);
		}
		
		return element;
	}
});

@@ -52,50 +52,8 @@
 m);%0A
-%09from.absolutize();%0A%09from.makeClipping();%0A
 %09fro
@@ -89,16 +89,16 @@
 into%7D);%0A
+
 %09%0A%09into 
@@ -208,155 +208,8 @@
 ;';%0A
-%09%0A%09into.setStyle(%7B width: from.getWidth() + 'px', height: from.getHeight() + 'px' %7D);%0A%09into.makeClipping();%0A%09into.setOpacity(0.0);%0A%09into.show();%0A%09%0A
 %09ret
@@ -397,16 +397,257 @@
 xtend(%7B%0A
+%09%09beforeStartInternal: function()%7B%0A%09%09%09from.absolutize();%0A%09%09%09from.makeClipping();%0A%09%09%09%0A%09%09%09into.setStyle(%7B width: from.getWidth() + 'px', height: from.getHeight() + 'px' %7D);%0A%09%09%09into.makeClipping();%0A%09%09%09into.setOpacity(0.0);%0A%09%09%09into.show();%0A%09%09%7D,%0A
 %09%09afterF
@@ -795,17 +795,16 @@
 ions.rep
-l
 ace)%7B%0A%09%09
@@ -983,33 +983,32 @@
 nction(element)%7B
-%0D
 %0A%09return new Eff
@@ -1117,21 +1117,19 @@
  %7C%7C %7B%7D);
-%0D
 %0A%7D;
-%0D
 %0AEffect.
@@ -1160,17 +1160,16 @@
 lement)%7B
-%0D
 %0A%09return
@@ -1294,15 +1294,12 @@
 %7B%7D);
-%0D
 %0A%7D;
-%0D%0A%0D
+%0A
 %0A// 
@@ -1344,17 +1344,16 @@
 blind');
-%0D
 %0AEffect.
@@ -1409,11 +1409,9 @@
 d'%5D;
-%0D%0A%0D
+%0A
 %0AEle
@@ -1427,17 +1427,16 @@
 ethods(%7B
-%0D
 %0A%09fadeBl
@@ -1459,33 +1459,32 @@
 ement, options)%7B
-%0D
 %0A%09%09element = $(e
@@ -1483,33 +1483,32 @@
 nt = $(element);
-%0D
 %0A%09%09Effect.FadeBl
@@ -1521,33 +1521,32 @@
 ement, options);
-%0D
 %0A%09%09return elemen
@@ -1551,14 +1551,12 @@
 ent;
-%0D
 %0A%09%7D,
-%0D
 %0A%09ap
@@ -1593,17 +1593,16 @@
 ptions)%7B
-%0D
 %0A%09%09eleme
@@ -1617,17 +1617,16 @@
 lement);
-%0D
 %0A%09%09Effec
@@ -1657,17 +1657,16 @@
 ptions);
-%0D
 %0A%09%09retur
@@ -1675,17 +1675,16 @@
 element;
-%0D
 %0A%09%7D,%0A%09mu
@@ -2361,11 +2361,10 @@
 nt;%0A
+
 %09%7D
-%0D
 %0A%7D);

move initial morphing to beforeStartInternal callback