/* * Rokmoomenu - mootools menu widget * * mootools dependencies: *	- mootools 1.11 *	- Moo, Utility, Common, Array, String, Function, Element,  *	  Dom, Fx.Base, Fx.CSS, Fx.Styles * * Copyright (c) 2007 Olmo Maldonado * * v2.0 - Added ability to have crossfading classes underneath menu links *      - MouseOver and MouseLeave for the crossfading bg have standalone duration and transitions *        giving the ability to an enormous amount of different combinations. *  * History * v1.2 - Adapted for IE6 by Djamil Legato (c) 2008 * v1.1 - Flash Issues - Adapted for IE6 by Djamil Legato */var Rokmoomenu = new Class({	version: '2.0', 	options: {		bgiframe: true,		hoverClass: 'sfHover',		delay: 500,		animate: {			props: ['opacity', 'height'],			opts: Class.empty		},		bg: {			enabled: true,			overEffect: {				duration: 700,				transition: Fx.Transitions.Quad.easeOut			},			outEffect: {				duration: 500,				transition: Fx.Transitions.Sine.easeIn			}		}	},		initialize: function(el, options) {		this.setOptions(options);		if (window.ie6) this.options.delay = 50;		this.element = $(el);				if (this.options.bg.enabled) {			this.element.getChildren().each(function(li) {				if (!li.hasClass('active')) {					li.getFirst().setStyle('position', 'relative');					var size = li.getCoordinates();					var margins = {						'x': li.getStyle('margin-left').toInt() + li.getStyle('margin-right').toInt(),						'y': li.getStyle('margin-top').toInt() + li.getStyle('margin-bottom').toInt()					};				    var div = new Element('div', {						'class': 'animated-bg',						'styles': {							'position': 'absolute', 							'left': 0, 							'top': 0,							'opacity': 0,							'width': size.width - margins.x,							'height': size.height - margins.y						}					}).inject(li);					var self = this;					var fx = new Fx.Style(div, 'opacity', {duration: this.options.bg.duration, transition: this.options.bg.transition, wait: false}).set(0);					li.addEvents({						'mouseenter': function() {							fx.options.duration = self.options.bg.overEffect.duration;							fx.options.transition = self.options.bg.overEffect.transition;							fx.start(1);						},						'mouseleave': function() {							fx.options.duration = self.options.bg.outEffect.duration;							fx.options.transition = self.options.bg.outEffect.transition;							fx.start(0);						}					});				}			}, this);		};		this.element.getElements('li').each(function(el) {			el.addEvents({				'mouseover': this.over.bind(this, el),				'mouseout': this.out.bind(this, el)			});		}, this);	},		over: function(el) {		$clear(el.sfTimer);		if(!el.hasClass(this.options.hoverClass)) {			if (window.ie6) {				var classes = el.getProperty('class').split(" ");				var option = this.options.hoverClass;				classes = classes.filter(function(y) { return !y.test("-" + option); });				classes.each(function(cls) { if (el.hasClass(cls)) el.addClass(cls + "-" + option); }, this);				var hackish = classes.join("-") + "-" + option;				if (!el.hasClass(hackish)) el.addClass(hackish);			}						el.addClass(this.options.hoverClass);						var ul = el.getElement('ul');			if(ul) {				if(this.options.bgiframe) ul.bgiframe({opacity: false});				ul.animate(this.options.animate);			}						el.getSiblings().each(function(ele) {				ele.removeClass(this.options.hoverClass);			}, this);		}	},		out: function(el) {			var option = this.options.hoverClass;			el.sfTimer = (function(){				if (window.ie6) {					var classes = el.getProperty('class').split(" ");					classes = classes.filter(function(y) { return y.test("-" + option); });					classes.each(function(cls) { if (el.hasClass(cls)) el.removeClass(cls); }, this);					var hackish = classes.join("-") + "-" + option;					if (!el.hasClass(hackish)) el.removeClass(hackish);				}				el.removeClass(option);				var iframe = el.getElement('iframe');				if(iframe) iframe.remove();			}).delay(this.options.delay, this);		}});Rokmoomenu.implement(new Options);Element.extend({	animate: function(obj) {		if(!this.Fx) {			this.Fx = this.effects(obj.opts);			this.now = this.getStyles.apply(this, obj.props);			this.FxEmpty = {};			for(var i in this.now) this.FxEmpty[i] = 0;		}				if(obj.props.contains('height') || obj.props.contains('width')) {			this.setStyle('overflow', 'hidden');			this.getParents('ul').each(function(el) {              				el.setStyle('overflow', 'visible');			});		}				this.Fx.set(this.FxEmpty).start(this.now);	},		getParents: function(expr) {		var matched = [];		var cur = this.getParent();		while (cur && cur !== document) {			if(cur.getTag().test(expr)) matched.push(cur);			cur = cur.getParent();		}		return matched;	},		getSiblings: function(){		var children = this.getParent().getChildren();		children.splice(children.indexOf(this), 1);		return children;	}});
