/**
 * Fusion Menu
 *
 * @package		Joomla
 * @subpackage	Fusion Menu
 * @copyright Copyright (C) 2009 RocketTheme. All rights reserved.
 * @license http://www.gnu.org/copyleft/gpl.html GNU/GPL, see RT-LICENSE.php
 * @author RocketTheme, LLC
 *
 */

var Fusion=new Class(
	{
	version:"1.9.2",options:
		{
		centered:false,tweakInitial:
			{
			x:0,y:0
		}
		,tweakSubsequent:
			{
			x:0,y:0
		}
		,pill:true,direction:
			{
			x:'right',y:'down'
		}
		,effect:'slide and fade',orientation:'horizontal',hideDelay:50000,menuFx:
			{
			duration:500,transition:Fx.Transitions.Quad.easeOut
		}
		,pillFx:
			{
			duration:400,transition:Fx.Transitions.Back.easeOut
		}
	}
	,initialize:function(e,f)
		{
		this.element=$$(e)[0];
		this.id=$$('.fusion')[0];
		if(this.id)this.id=this.id.id;
		this.setOptions(f);
		var g=this.element.getElements('.item'),opts=this.options;
		this.rtl=$(document.body).getStyle('direction')=='rtl';
		if(this.rtl)
			{
			this.options.direction.x='left';
			this.options.tweakInitial.x*=-1;
			this.options.tweakSubsequent.x*=-1
		}
		if(this.options.pill)
			{
			var h=new Element('div',
				{
				'class':'fusion-pill-l'
			}
			).inject(this.element,'after').setStyle('display','none'),self=this;
			new Element('div',
				{
				'class':'fusion-pill-r'
			}
			).inject(h);
			this.pillsRoots=this.element.getElements('.root');
			var j=this.element.getElement('.active');
			this.pillsMargins=h.getStyle('margin-left').toInt()+h.getStyle('margin-right').toInt();
			if(!j)
				{
				this.options.pill=false
			}
			else
				{
				h.setStyle('display','block');
				this.pillsDefaults=
					{
					'left':j.offsetLeft,'width':j.offsetWidth-this.pillsMargins
				};
				this.pillFx=new Fx.Styles(h,
					{
					duration:opts.pillFx.duration,transition:opts.pillFx.transition,wait:false
				}
				).set(this.pillsDefaults);
				var k=this.pillsRoots.filter(function(a)
					{
					return!a.hasClass('parent')
				}
				);
				$$(k).addEvents(
					{
					'mouseenter':function()
						{
						self.ghostRequest=true;
						self.pillFx.start(
							{
							'left':this.offsetLeft,'width':this.offsetWidth-self.pillsMargins
						}
						)
					}
					,'mouseleave':function()
						{
						self.ghostRequest=false;
						self.pillFx.start(self.pillsDefaults)
					}
				}
				)
			}
		};
		this.parentLinks=
			{
		};
		this.parentSubMenus=
			{
		};
		this.childMenu=
			{
		};
		this.menuType=
			{
		};
		this.subMenus=[];
		this.hideAllMenusTimeout=null;
		this.subMenuZindex=1;
		g.each(function(a,i)
			{
			a.getID();
			this.parentLinks[a.id]=a.getParent().getParents('li',this.element).getElement('.item');
			this.childMenu[a.id]=a.getNextTag('fusion-submenu-wrapper','class')||a.getNextTag('ul')||a.getNextTag('ol');
			if(this.childMenu[a.id])a.fusionSize=this.childMenu[a.id].getCoordinates();
			if(this.childMenu[a.id]&&window.ie)
				{
				var b=this.childMenu[a.id].getElement('ul');
				if(b)
					{
					var c=b.getStyle('padding-bottom').toInt()||0;
					a.fusionSize.height+=c
				}
			}
			var d='subseq';
			if($(a.getParentTag('fusion-submenu-wrapper','class')||a.getParentTag('ul')||a.getParentTag('ol'))===this.element)d='init';
			this.menuType[a.id]=d
		}
		,this);
		this.jsContainer=new Element('div',
			{
			'id':this.id,'class':'fusion-js-container menutop'
		}
		).inject(document.body);
		var l=this.element.getElements('.fusion-submenu-wrapper');
		if(!l.length)l=this.element.getElements('ul');
		l.each(function(a,b)
			{
			var c=new Element('div',
				{
				'class':'fusion-js-subs'
			}
			).inject(this.jsContainer).adopt(a)
		}
		,this);
		this.jsContainer.getElements('.item').setProperty('tabindex','-1');
		g.each(function(b,i)
			{
			if(!this.childMenu[b.id])
				{
				return
			}
			this.childMenu[b.id]=this.childMenu[b.id].getParentTag('div');
			this.subMenus.include(this.childMenu[b.id]);
			var c=[];
			this.parentLinks[b.id].each(function(a,i)
				{
				c.push(this.childMenu[a.id])
			}
			,this);
			this.parentSubMenus[b.id]=c;
			var d=new FusionSubMenu(this.options,this,b)
		}
		,this)
	}
}
);
Fusion.implement(new Options);
var FusionSubMenu=new Class(
	{
	options:
		{
		onSubMenuInit_begin:(function(a)
			{
		}
		),onSubMenuInit_complete:(function(a)
			{
		}
		),onMatchWidth_begin:(function(a)
			{
		}
		),onMatchWidth_complete:(function(a)
			{
		}
		),onHideSubMenu_begin:(function(a)
			{
		}
		),onHideSubMenu_complete:(function(a)
			{
		}
		),onHideOtherSubMenus_begin:(function(a)
			{
		}
		),onHideOtherSubMenus_complete:(function(a)
			{
		}
		),onHideAllSubMenus_begin:(function(a)
			{
		}
		),onHideAllSubMenus_complete:(function(a)
			{
		}
		),onPositionSubMenu_begin:(function(a)
			{
		}
		),onPositionSubMenu_complete:(function(a)
			{
		}
		),onShowSubMenu_begin:(function(a)
			{
		}
		),onShowSubMenu_complete:(function(a)
			{
		}
		)
	}
	,root:null,btn:null,hidden:true,myEffect:null,initialize:function(c,d,f)
		{
		this.setOptions(c);
		this.root=d;
		this.btn=$(f);
		this.childMenu=$(d.childMenu[f.id]);
		this.subMenuType=d.menuType[f.id];
		this.parentSubMenus=$$(d.parentSubMenus[f.id]);
		this.parentLinks=$$(d.parentLinks[f.id]);
		this.parentSubMenu=$(this.parentSubMenus[0]);
		this.otherSubMenus=
			{
		};
		this.fxMorph=
			{
		};
		this.rtl=d.rtl;
		this.options.tweakInitial=this.root.options.tweakInitial;
		this.options.tweakSubsequent=this.root.options.tweakSubsequent;
		this.options.centered=this.root.options.centered;
		this.childMenu.fusionStatus='closed';
		this.options.onSubMenuInit_begin(this);
		this.childMenu.addEvent('hide',this.hideSubMenu.bind(this));
		this.childMenu.addEvent('show',this.showSubMenu.bind(this));
		var g=this.childMenu;
		if(this.options.effect)
			{
			this.myEffect=new Fx.Styles(this.childMenu.getFirst(),
				{
				duration:this.options.menuFx.duration,transition:this.options.menuFx.transition,wait:false,onStart:function()
					{
					if(window.ie)this.element.setStyle('display','block')
				}
				,onComplete:function()
					{
					if(g.fusionStatus=='closed')
						{
						if(!window.ie)
							{
							g.setStyle('display','none')
						}
						else
							{
							this.element.setStyle('display','none')
						}
					}
				}
			}
			)
		}
		if(this.options.effect=='slide'||this.options.effect=='slide and fade')
			{
			if(this.subMenuType=='init'&&this.options.orientation=='horizontal')this.myEffect.set(
				{
				'margin-top':'0'
			}
			);
			else
				{
				if(!this.rtl)this.myEffect.set(
					{
					'margin-left':'0'
				}
				);
				else this.myEffect.set(
					{
					'margin-right':'0'
				}
				)
			}
		}
		else if(this.options.effect=='fade'||this.options.effect=='slide and fade')this.myEffect.set(
			{
			'opacity':0
		}
		);
		if(this.options.effect!='fade'&&this.options.effect!='slide and fade')this.myEffect.set(
			{
			'opacity':this.options.opacity
		}
		);
		var h=$(this.childMenu).getElements('.item').filter(function(a,b)
			{
			return!d.childMenu[a.id]
		}
		);
		h.each(function(a,b)
			{
			$(a).getParent().addClass('f-submenu-item');
			a.getParent().addEvents(
				{
				'mouseenter':function(e)
					{
					this.childMenu.fireEvent('show');
					this.cancellHideAllSubMenus();
					this.hideOtherSubMenus()
				}
				.bind(this),'focus':function(e)
					{
					this.childMenu.fireEvent('show');
					this.cancellHideAllSubMenus();
					this.hideOtherSubMenus()
				}
				.bind(this),'mouseleave':function(e)
					{
					this.cancellHideAllSubMenus();
					this.hideAllSubMenus()
				}
				.bind(this),'blur':function(e)
					{
					this.cancellHideAllSubMenus();
					this.hideAllSubMenus()
				}
				.bind(this)
			}
			)
		}
		,this);
		this.btn.removeClass('fusion-submenu-item');
		if(this.subMenuType=='init')this.btn.getParent().addClass('f-main-parent');
		else this.btn.getParent().addClass('f-parent-item');
		this.btn.getParent().addEvents(
			{
			'mouseenter':function(e)
				{
				this.cancellHideAllSubMenus();
				this.hideOtherSubMenus();
				this.showSubMenu();
				if(this.subMenuType=='init'&&this.options.mmbClassName&&this.options.mmbFocusedClassName)
					{
					if(!this.fxMorph[this.btn.id])this.fxMorph[this.btn.id]=
						{
					};
					if(!this.fxMorph[this.btn.id]['btnMorph'])this.fxMorph[this.btn.id]['btnMorph']=new Fx.Styles(this.btn,
						{
						'duration':this.options.menuFx.duration,transition:this.options.menuFx.transition,wait:false
					}
					);
					this.fxMorph[this.btn.id]['btnMorph'].start(this.options.mmbFocusedClassName)
				}
			}
			.bind(this),'focus':function(e)
				{
				this.cancellHideAllSubMenus();
				this.hideOtherSubMenus();
				this.showSubMenu();
				if(this.subMenuType=='init'&&this.options.mmbClassName&&this.options.mmbFocusedClassName)
					{
					if(!this.fxMorph[this.btn.id])this.fxMorph[this.btn.id]=
						{
					};
					if(!this.fxMorph[this.btn.id]['btnMorph'])this.fxMorph[this.btn.id]['btnMorph']=new Fx.Styles(this.btn,
						{
						'duration':this.options.menuFx.duration,transition:this.options.menuFx.transition,wait:false
					}
					);
					this.fxMorph[this.btn.id]['btnMorph'].start(this.options.mmbFocusedClassName)
				}
			}
			.bind(this),'mouseleave':function(e)
				{
				this.cancellHideAllSubMenus();
				this.hideAllSubMenus()
			}
			.bind(this),'blur':function(e)
				{
				this.cancellHideAllSubMenus();
				this.hideAllSubMenus()
			}
			.bind(this)
		}
		);
		this.options.onSubMenuInit_complete(this)
	}
	,matchWidth:function()
		{
		if(this.widthMatched||this.subMenuType==='subseq')
			{
			return
		}
		this.options.onMatchWidth_begin(this);
		var f=this.btn.getCoordinates().width;
		this.childMenu.getElements('.item').each(function(a,b)
			{
			var c=parseFloat(this.childMenu.getFirst().getStyle('border-left-width'))+parseFloat(this.childMenu.getFirst().getStyle('border-right-width'));
			var d=parseFloat(a.getStyle('padding-left'))+parseFloat(a.getStyle('padding-right'));
			var e=c+d;
			if(f>a.getCoordinates().width)
				{
				a.setStyle('width',f-e);
				a.setStyle('margin-right',-c)
			}
		}
		.bind(this));
		this.width=this.btn.fusionSize.width;
		this.widthMatched=true;
		this.options.onMatchWidth_complete(this)
	}
	,hideSubMenu:function()
		{
		if(this.childMenu.fusionStatus==='closed')
			{
			return
		}
		this.options.onHideSubMenu_begin(this);
		if(this.subMenuType=='init')
			{
			if(this.options.mmbClassName&&this.options.mmbFocusedClassName)
				{
				if(!this.fxMorph[this.btn.id])this.fxMorph[this.btn.id]=
					{
				};
				if(!this.fxMorph[this.btn.id]['btnMorph'])this.fxMorph[this.btn.id]['btnMorph']=new Fx.Styles(this.btn,
					{
					'duration':this.options.menuFx.duration,transition:this.options.menuFx.transition,wait:false
				}
				);
				this.fxMorph[this.btn.id]['btnMorph'].start(this.options.mmbClassName).chain(function()
					{
					this.btn.getParent().removeClass('f-mainparent-itemfocus');
					this.btn.getParent().addClass('f-mainparent-item')
				}
				.bind(this))
			}
			else
				{
				this.btn.getParent().removeClass('f-mainparent-itemfocus');
				this.btn.getParent().addClass('f-mainparent-item')
			}
		}
		else
			{
			this.btn.getParent().removeClass('f-menuparent-itemfocus');
			this.btn.getParent().addClass('f-menuparent-item')
		}
		this.childMenu.setStyle('z-index',1);
		if(this.options.effect&&this.options.effect.toLowerCase()==='slide')
			{
			if(this.subMenuType=='init'&&this.options.orientation=='horizontal'&&this.options.direction.y=='down')
				{
				this.myEffect.start(
					{
					'margin-top':-this.height
				}
				).chain(function()
					{
					if(this.childMenu.fusionStatus=='closed')
						{
						if(!window.ie)
							{
							this.myEffect.set(
								{
								'display':'none'
							}
							)
						}
						else
							{
							this.myEffect.element.setStyle('display','none')
						}
					}
				}
				.bind(this))
			}
			else if(this.subMenuType=='init'&&this.options.orientation=='horizontal'&&this.options.direction.y=='up')
				{
				this.myEffect.start(
					{
					'margin-top':this.height
				}
				).chain(function()
					{
					if(this.childMenu.fusionStatus=='closed')
						{
						if(!window.ie)
							{
							this.myEffect.set(
								{
								'display':'none'
							}
							)
						}
						else
							{
							this.myEffect.element.setStyle('display','none')
						}
					}
				}
				.bind(this))
			}
			else if(this.options.direction.x=='right')
				{
				if(!this.rtl)tmp=
					{
					'margin-left':-this.width
				};
				else tmp=
					{
					'margin-right':this.width
				};
				this.myEffect.start(tmp).chain(function()
					{
					if(this.childMenu.fusionStatus=='closed')
						{
						if(!window.ie)
							{
							this.myEffect.set(
								{
								'display':'none'
							}
							)
						}
						else
							{
							this.myEffect.element.setStyle('display','none')
						}
					}
				}
				.bind(this))
			}
			else if(this.options.direction.x=='left')
				{
				if(!this.rtl)tmp=
					{
					'margin-left':this.width
				};
				else tmp=
					{
					'margin-right':-this.width
				};
				this.myEffect.start(tmp).chain(function()
					{
					if(this.childMenu.fusionStatus=='closed')
						{
						if(!window.ie)
							{
							this.myEffect.set(
								{
								'display':'none'
							}
							)
						}
						else
							{
							this.myEffect.element.setStyle('display','none')
						}
					}
				}
				.bind(this))
			}
		}
		else if(this.options.effect=='fade')
			{
			this.myEffect.start(
				{
				'opacity':0
			}
			).chain(function()
				{
				if(this.childMenu.fusionStatus=='closed')
					{
					if(!window.ie)
						{
						this.myEffect.set(
							{
							'display':'none'
						}
						)
					}
					else
						{
						this.myEffect.element.setStyle('display','none')
					}
				}
			}
			.bind(this))
		}
		else if(this.options.effect=='slide and fade')
			{
			if(this.subMenuType=='init'&&this.options.orientation=='horizontal'&&this.options.direction.y=='down')
				{
				this.myEffect.start(
					{
					'margin-top':-this.height,opacity:0
				}
				).chain(function()
					{
					if(this.childMenu.fusionStatus=='closed')
						{
						if(!window.ie)
							{
							this.myEffect.set(
								{
								'display':'none'
							}
							)
						}
						else
							{
							this.myEffect.element.setStyle('display','none')
						}
					}
				}
				.bind(this))
			}
			else if(this.subMenuType=='init'&&this.options.orientation=='horizontal'&&this.options.direction.y=='up')
				{
				this.myEffect.start(
					{
					'margin-top':this.height,opacity:0
				}
				).chain(function()
					{
					if(this.childMenu.fusionStatus=='closed')
						{
						if(!window.ie)
							{
							this.myEffect.set(
								{
								'display':'none'
							}
							)
						}
						else
							{
							this.myEffect.element.setStyle('display','none')
						}
					}
				}
				.bind(this))
			}
			else if(this.options.direction.x=='right')
				{
				if(!this.rtl)tmp=
					{
					'margin-left':-this.width,'opacity':0
				};
				else tmp=
					{
					'margin-right':this.width,'opacity':0
				};
				this.myEffect.start(tmp).chain(function()
					{
					if(this.childMenu.fusionStatus=='closed')
						{
						if(!window.ie)
							{
							this.myEffect.set(
								{
								'display':'none'
							}
							)
						}
						else
							{
							this.myEffect.element.setStyle('display','none')
						}
					}
				}
				.bind(this))
			}
			else if(this.options.direction.x=='left')
				{
				if(!this.rtl)tmp=
					{
					'margin-left':this.width,'opacity':0
				};
				else tmp=
					{
					'margin-right':-this.width,'opacity':0
				};
				this.myEffect.start(tmp).chain(function()
					{
					if(this.childMenu.fusionStatus=='closed')
						{
						if(!window.ie)
							{
							this.myEffect.set(
								{
								'display':'none'
							}
							)
						}
						else
							{
							this.myEffect.element.setStyle('display','none')
						}
					}
				}
				.bind(this))
			}
		}
		else
			{
			if(!window.ie)
				{
				this.myEffect.set(
					{
					'display':'none'
				}
				)
			}
			else
				{
				this.myEffect.element.setStyle('display','none')
			}
		}
		this.childMenu.fusionStatus='closed';
		this.options.onHideSubMenu_complete(this)
	}
	,hideOtherSubMenus:function()
		{
		this.options.onHideOtherSubMenus_begin(this);
		if(!this.otherSubMenus[this.btn.id])
			{
			this.otherSubMenus[this.btn.id]=$$(this.root.subMenus.filter(function(a)
				{
				return!this.root.parentSubMenus[this.btn.id].contains(a)&&a!=this.childMenu
			}
			.bind(this)))
		}
		this.parentSubMenus.fireEvent('show');
		this.otherSubMenus[this.btn.id].fireEvent('hide');
		this.options.onHideOtherSubMenus_complete(this)
	}
	,hideAllSubMenus:function()
		{
		this.options.onHideAllSubMenus_begin(this);
		$clear(this.root.hideAllMenusTimeout);
		this.root.hideAllMenusTimeout=(function()
			{
			$clear(this.hideAllMenusTimeout);
			this.myEffect.stop();
			if(this.root.options.pill&&!this.root.ghostRequest)this.root.pillFx.start(this.root.pillsDefaults);
			$$(this.root.subMenus).fireEvent('hide')
		}
		).bind(this).delay(this.options.hideDelay);
		this.options.onHideAllSubMenus_complete(this)
	}
	,cancellHideAllSubMenus:function()
		{
		$clear(this.root.hideAllMenusTimeout)
	}
	,showSubMenu:function(a)
		{
		if(this.root.options.pill&&this.subMenuType=='init')
			{
			this.root.ghostRequest=false;
			this.root.pillFx.start(
				{
				'left':this.btn.getParent().offsetLeft,'width':this.btn.getParent().offsetWidth-this.root.pillsMargins
			}
			)
		};
		if(this.childMenu.fusionStatus==='open')
			{
			return
		}
		this.options.onShowSubMenu_begin(this);
		if(this.subMenuType=='init')
			{
			this.btn.getParent().removeClass('f-mainparent-item');
			this.btn.getParent().addClass('f-mainparent-itemfocus')
		}
		else
			{
			this.btn.getParent().removeClass('f-menuparent-item');
			this.btn.getParent().addClass('f-menuparent-itemfocus')
		}
		this.root.subMenuZindex++;
		this.childMenu.setStyles(
			{
			'display':'block','visibility':'hidden','z-index':this.root.subMenuZindex
		}
		);
		if(!this.width||!this.height)
			{
			this.width=this.btn.fusionSize.width;
			this.height=this.btn.fusionSize.height;
			this.childMenu.getFirst().setStyle('height',this.height,'border');
			if(this.options.effect=='slide'||this.options.effect=='slide and fade')
				{
				if(this.subMenuType=='init'&&this.options.orientation=='horizontal')
					{
					this.childMenu.getFirst().setStyle('margin-top','0');
					if(this.options.direction.y=='down')
						{
						this.myEffect.set(
							{
							'margin-top':-this.height
						}
						)
					}
					else if(this.options.direction.y=='up')
						{
						this.myEffect.set(
							{
							'margin-top':this.height
						}
						)
					}
				}
				else
					{
					if(this.options.direction.x=='left')
						{
						if(!this.rtl)tmp=
							{
							'margin-left':this.width
						};
						else tmp=
							{
							'margin-right':-this.width
						};
						this.myEffect.set(tmp)
					}
					else
						{
						if(!this.rtl)tmp=
							{
							'margin-left':-this.width
						};
						else tmp=
							{
							'margin-right':this.width
						};
						this.myEffect.set(tmp)
					}
				}
			}
		}
		this.matchWidth();
		this.positionSubMenu();
		if(this.options.effect=='slide')
			{
			this.childMenu.setStyles(
				{
				'display':'block','visibility':'visible'
			}
			);
			if(this.subMenuType==='init'&&this.options.orientation==='horizontal')
				{
				if(a)this.myEffect.set(
					{
					'margin-top':0
				}
				).chain(function()
					{
					this.showSubMenuComplete()
				}
				.bind(this));
				else this.myEffect.start(
					{
					'margin-top':0
				}
				).chain(function()
					{
					this.showSubMenuComplete()
				}
				.bind(this))
			}
			else
				{
				if(!this.rtl)tmp=
					{
					'margin-left':0
				};
				else tmp=
					{
					'margin-right':0
				};
				if(a)this.myEffect.set(tmp).chain(function()
					{
					this.showSubMenuComplete()
				}
				.bind(this));
				else this.myEffect.start(tmp).chain(function()
					{
					this.showSubMenuComplete()
				}
				.bind(this))
			}
		}
		else if(this.options.effect=='fade')
			{
			if(a)this.myEffect.set(
				{
				'opacity':this.options.opacity
			}
			).chain(function()
				{
				this.showSubMenuComplete()
			}
			.bind(this));
			else this.myEffect.start(
				{
				'opacity':this.options.opacity
			}
			).chain(function()
				{
				this.showSubMenuComplete()
			}
			.bind(this))
		}
		else if(this.options.effect=='slide and fade')
			{
			this.childMenu.setStyles(
				{
				'display':'block','visibility':'visible'
			}
			);
			this.childMenu.getFirst().setStyles(
				{
				'left':0
			}
			);
			if(this.subMenuType=='init'&&this.options.orientation=='horizontal')
				{
				if(a)this.myEffect.set(
					{
					'margin-top':0,'opacity':this.options.opacity
				}
				).chain(function()
					{
					this.showSubMenuComplete()
				}
				.bind(this));
				else this.myEffect.start(
					{
					'margin-top':0,'opacity':this.options.opacity
				}
				).chain(function()
					{
					this.showSubMenuComplete()
				}
				.bind(this))
			}
			else
				{
				if(!this.rtl)tmp=
					{
					'margin-left':0,'opacity':this.options.opacity
				};
				else tmp=
					{
					'margin-right':0,'opacity':this.options.opacity
				};
				if(a)
					{
					if(this.options.direction.x=='right')
						{
						this.myEffect.set(tmp).chain(function()
							{
							this.showSubMenuComplete()
						}
						.bind(this))
					}
					else if(this.options.direction.x=='left')
						{
						this.myEffect.set(tmp).chain(function()
							{
							this.showSubMenuComplete()
						}
						.bind(this))
					}
				}
				else
					{
					if(this.options.direction.x=='right')
						{
						this.myEffect.set(
							{
							'margin-left':-this.width,'opacity':this.options.opacity
						}
						);
						this.myEffect.start(tmp).chain(function()
							{
							this.showSubMenuComplete()
						}
						.bind(this))
					}
					else if(this.options.direction.x=='left')
						{
						this.myEffect.set(
							{
							'margin-left':this.width,'opacity':this.options.opacity
						}
						);
						this.myEffect.start(tmp).chain(function()
							{
							this.showSubMenuComplete()
						}
						.bind(this))
					}
				}
			}
		}
		else
			{
			this.childMenu.setStyles(
				{
				'display':'block','visibility':'visible'
			}
			);
			this.showSubMenuComplete(this)
		}
		this.childMenu.fusionStatus='open'
	}
	,showSubMenuComplete:function()
		{
		this.options.onShowSubMenu_complete(this)
	}
	,positionSubMenu:function()
		{
		this.options.onPositionSubMenu_begin(this);
		this.childMenu.setStyle('width',this.width);
		this.childMenu.getFirst().setStyle('width',this.width);
		if(this.subMenuType=='subseq')
			{
			this.options.direction.x='right';
			this.options.direction.xInverse='left';
			this.options.direction.y='down';
			this.options.direction.yInverse='up';
			if(this.rtl)
				{
				this.options.direction.x='left';
				this.options.direction.xInverse='right'
			}
		}
		var a;
		var b;
		if(this.subMenuType=='init')
			{
			if(this.options.direction.y=='up')
				{
				if(this.options.orientation=='vertical')a=this.btn.getCoordinates().bottom-this.height+this.options.tweakInitial.y;
				else a=this.btn.getCoordinates().top-this.height+this.options.tweakInitial.y;
				this.childMenu.style.top=a+'px'
			}
			else if(this.options.orientation=='horizontal')this.childMenu.style.top=this.btn.getCoordinates().bottom+this.options.tweakInitial.y+'px';
			else if(this.options.orientation=='vertical')
				{
				a=this.btn.getPosition().y+this.options.tweakInitial.y;
				if((a+this.childMenu.getSize().y)>=$(document.body).getSize().scrollSize.y)
					{
					b=(a+this.childMenu.getSize().y)-$(document.body).getSize().scrollSize.y;
					a=a-b-20
				}
				this.childMenu.style.top=a+'px'
			}
			if(this.options.orientation=='horizontal')
				{
				var c=this.btn.getPosition().x+this.options.tweakInitial.x;
				if(this.rtl)
					{
					c=this.btn.getPosition().x+this.btn.getSize().size.x-this.childMenu.getSize().size.x
				}
				if(this.options.centered)
					{
					var d=this.btn.getSize().size.x;
					var e=this.childMenu.getSize().size.x;
					var f=Math.max(d,e),min=Math.min(d,e);
					size=(f-min)/2;
					if(!this.rtl)c-=size;
					else c+=size
				}
				this.childMenu.style.left=c+'px'
			}
			else if(this.options.direction.x=='left')
				{
				this.childMenu.style.left=this.btn.getPosition().x-this.childMenu.getCoordinates().width+this.options.tweakInitial.x+'px'
			}
			else if(this.options.direction.x=='right')
				{
				this.childMenu.style.left=this.btn.getCoordinates().right+this.options.tweakInitial.x+'px'
			}
		}
		else if(this.subMenuType=='subseq')
			{
			if(this.options.direction.y==='down')
				{
				if((this.btn.getCoordinates().top+this.options.tweakSubsequent.y+this.childMenu.getSize().y)>=$(document.body).getSize().scrollSize.y)
					{
					b=(this.btn.getCoordinates().top+this.options.tweakSubsequent.y+this.childMenu.getSize().y)-$(document.body).getSize().scrollSize.y;
					this.childMenu.style.top=(this.btn.getCoordinates().top+this.options.tweakSubsequent.y)-b-20+'px'
				}
				else
					{
					this.childMenu.style.top=this.btn.getCoordinates().top+this.options.tweakSubsequent.y+'px'
				}
			}
			else if(this.options.direction.y==='up')
				{
				if((this.btn.getCoordinates().bottom-this.height+this.options.tweakSubsequent.y)<1)
					{
					this.options.direction.y='down';
					this.options.direction.yInverse='up';
					this.childMenu.style.top=this.btn.getCoordinates().top+this.options.tweakSubsequent.y+'px'
				}
				else
					{
					this.childMenu.style.top=this.btn.getCoordinates().bottom-this.height+this.options.tweakSubsequent.y+'px'
				}
			}
			if(this.options.direction.x=='left')
				{
				this.childMenu.style.left=this.btn.getCoordinates().left-this.childMenu.getCoordinates().width+this.options.tweakSubsequent.x+'px';
				if(this.childMenu.getPosition().x<0)
					{
					this.options.direction.x='right';
					this.options.direction.xInverse='left';
					this.childMenu.style.left=this.btn.getPosition().x+this.btn.getCoordinates().width+this.options.tweakSubsequent.x+'px';
					if(this.options.effect==='slide'||this.options.effect==='slide and fade')
						{
						if(!this.rtl)tmp=
							{
							'margin-left':-this.width,'opacity':this.options.opacity
						};
						else tmp=
							{
							'margin-right':this.width,'opacity':this.options.opacity
						};
						this.myEffect.set(tmp)
					}
				}
			}
			else if(this.options.direction.x=='right')
				{
				this.childMenu.style.left=this.btn.getCoordinates().right+this.options.tweakSubsequent.x+'px';
				var g=this.childMenu.getCoordinates().right;
				var h=$(document.body).getSize().size.x+$(window).getSize().scroll.x;
				if(g>h)
					{
					this.options.direction.x='left';
					this.options.direction.xInverse='right';
					this.childMenu.style.left=this.btn.getCoordinates().left-this.childMenu.getCoordinates().width-this.options.tweakSubsequent.x+'px';
					if(this.options.effect=='slide'||this.options.effect=='slide and fade')
						{
						if(!this.rtl)tmp=
							{
							'margin-left':this.width,'opacity':this.options.opacity
						};
						else tmp=
							{
							'margin-right':-this.width,'opacity':this.options.opacity
						};
						this.myEffect.set(tmp)
					}
				}
			}
		}
		this.options.onPositionSubMenu_complete(this)
	}
}
);
FusionSubMenu.implement(new Options);
Element.extend(
	{
	getID:function()
		{
		if(!this.id)
			{
			var a=this.getTag()+"-"+$time()+$random(0,1000);
			this.id=a
		};
		return this.id
	}
	,getParents:function(a,b)
		{
		var c=[];
		var d=this.getParent();
		while(d&&d!==($(b)||document))
			{
			if(d.getTag().test(a))c.push(d);
			d=d.getParent()
		}
		return $$(c)
	}
	,getNextTag:function(a)
		{
		var b=this;
		while(b=b.getNext())
			{
			if(b.hasClass(a)||b.getTag()==a)return b
		}
		return false
	}
	,getParentTag:function(a,b)
		{
		if(!b)b='tag';
		var c=this.getParent();
		while(c&&c!=document.body)
			{
			if(c.className.test(a)&&b=='class')return c;
			if(c.getTag()==a&&b=='tag')return c;
			c=c.getParent()
		}
		return false
	}
}
);

