var IguanDropDownMenu=new Class({_fx:[],_current_element:{},_current_fx:{},options:{parent_name:'div[name=breadcrumbs_parent]',action_elements:'a[name=drop_link]',drop_elements:'div[name=drop_menu]',styles:{visibility:'hidden'},delay:0,popup_content:''},_dropElements:[],getActionElements:function(){return(this.getParent())?this.getParent().getElements(this.options.action_elements):[]},getDropElements:function(){return(this.getParent())?this.getParent().getElements(this.options.drop_elements):[]},getDropElement:function(el){return(el.getParent())?el.getParent().getElement(this.options.drop_elements):null},getParent:function(){return $E(this.options.parent_name)},setActive:function(el){el.getParent().addClass('active')},removeActive:function(el){el.getParent().removeClass('active')},show:function(el,fx){this.setActive(el);fx.setOptions({duration:0}).start({'opacity':1});this.fastHideOpenedElements(el)},fastHideOpenedElements:function(el){this.getOpenedElements(el).each(function(elem){this.fastHide(elem)}.bind(this))},hide:function(el){if(!el.lock){this.fastHide(el)}},fastHide:function(el){this.removeActive(el);this.getFx(el).setOptions({duration:0}).start({'opacity':0})},getFx:function(el){if(this._current_element!=el||!this._current_fx){for(var i=0;i<this._dropElements.length;i++){if(el==this._dropElements[i]){fx=this._fx[i];this._current_element=el;this._current_fx=fx;break}}}return this._current_fx},getOpenedElements:function(el){var els=[];this.getDropElements().each(function(elem){if(elem!=el){els.push(elem)}});return els},run:function(){this.getDropElements().each(function(el){this._parent=this.getParent();el.setStyles(this.options.styles);el.lock=false;this._dropElements.push(el);var fx=new Fx.Styles(el,{duration:0,wait:false});this._fx.push(fx);el.addEvents({mouseenter:function(){el.lock=true}.bind(this),mouseleave:function(){el.lock=false;this.hide.delay(500,this,[el])}.bind(this),show:function(){el.lock=true;this.show(el,fx)}.bind(this),hide:function(){el.lock=false;this.hide.delay(500,this,[el])}.bind(this)})}.bind(this));this.getActionElements().each(function(el){var dropElement=this.getDropElement(el);if(dropElement){el.addEvents({mouseenter:function(){el.lock=false;this.fireEventDelay=function(el){if(!el.lock){dropElement.fireEvent('show')}};this.fireEventDelay.delay(this.options.delay,this,[el])}.bind(this),mouseleave:function(){el.lock=true;dropElement.fireEvent('hide')}})}}.bind(this))}});IguanDropDownMenu.implement(new Options);var IguanTopDropDownMenu=IguanDropDownMenu.extend({run:function(){var popupElement=$E(this.options.popups);if(popupElement){popupElement.setHTML(this.options.popup_content)}this.parent()},getDropElement:function(el){var dropElement=index=null;var child=el.getParent().getParent().getChildren();var popups=this.getParent().getElement(this.options.popups).getChildren();for(var i=0;i<child.length;i++){if(child[i].getElement(this.options.action_elements)==el){index=i;break}};if(popups[index]&&popups[index].getElement(this.options.drop_elements)){dropElement=popups[index].getElement(this.options.drop_elements)}return dropElement},getActionElement:function(dropEl){var actionElement=index=null;var childActionElements=this.getParent().getElement(this.options.action_zone).getElements(this.options.action_elements);var childDropElements=this.getParent().getElement(this.options.popups).getChildren();for(var i=0;i<childDropElements.length;i++){if(childDropElements[i].getElement(this.options.drop_elements)==dropEl){index=i;break}}if(childActionElements[index]){actionElement=childActionElements[index]}return actionElement},highlightActiveElement:function(activeElement){activeElement.getParent().addClass('hover')},deselectActiveElement:function(activeElement){activeElement.getParent().removeClass('hover')},hide:function(el){this.parent(el);if(!el.lock){var actionElem=this.getActionElement(el);this.deselectActiveElement(actionElem)}},show:function(el,fx){var actionElem=this.getActionElement(el);this.highlightActiveElement(actionElem);this.setActive(el);this.fastHideOpenedElements(el);if(this.getParent()){this.getParent().fireEvent('showed')}},fastHide:function(el){this.removeActive(el)}});