var ActionTeaserFader = new Class({
	initialize: function(elementId, moveToClass, smallId, actionId, actionCheckerId, delayTime) {
		this.elementId = elementId;
		this.moveToClass = moveToClass;
		this.actionIdElement = $(actionId);
		this.smallIdElement = $(smallId);
		
		if ($defined($(actionCheckerId))) {
			Fx.Morph = Fx.Styles.extend({
				start: function(className) {
					var to = {};
					$each(document.styleSheets, function(style) {
						var rules = style.rules || style.cssRules;
						$each(rules, function(rule) {
							if (!rule.selectorText.test('\.' + className + '$')) return;
							Fx.CSS.Styles.each(function(style) {
								if (!rule.style || !rule.style[style]) return;
								var ruleStyle = rule.style[style];
								to[style] = (style.test(/color/i) && ruleStyle.test(/^rgb/)) ? ruleStyle.rgbToHex() : ruleStyle;
							});
						});
					});
					return this.parent(to);
				}
			});
			Fx.CSS.Styles = ["backgroundColor", "backgroundPosition", "color", "width", "height", "left", "top", "bottom", "right", "fontSize", "letterSpacing", "lineHeight", "textIndent", "opacity"];
			Fx.CSS.Styles.extend(Element.Styles.padding);
			Fx.CSS.Styles.extend(Element.Styles.margin);		 
			Element.Styles.border.each(function(border) {
				['Width', 'Color'].each(function(property){
					Fx.CSS.Styles.push(border + property);
				});
			});		
			
			this.morphTeaser.delay(delayTime, this);
		}
	},
	
	morphTeaser: function() {
		this.actionIdElement.setStyle('visibility', 'visible');
		this.smallIdElement.setStyle('visibility', 'visible');
		var morphElement = new Fx.Morph(this.elementId, {wait: false});
		morphElement.start(this.moveToClass).chain(this.hideTeaser.bind(this));
	},
	
	hideTeaser: function() {
		$(this.elementId).effect('opacity', {duration: 1000, transition: Fx.Transitions.Expo.easeIn}).start(1, 0);
	}
});