﻿function AblMenuPanel(elem,options){this.$container=(elem instanceof jQuery)?elem:$(elem);this.container=this.$container.get(0);this.params={showSpeed:500,hideSpeed:1500,restoreSpeed:500,openDelay:200,closeDelay:1000};$.extend(this.params,options);this.setProps();this.setEvents()}AblMenuPanel.prototype.setProps=function(){if(!this.container.pp){this.container.pp={isVisible:this.$container.is(":visible"),isAnimating:0,pendingAction:0,isLocked:false,timer:null}}};AblMenuPanel.prototype.dispose=function(){this.$container.unbind();this.clearTimer();this.container.pp=null};AblMenuPanel.prototype.clearTimer=function(){if(this.container.pp.timer){clearTimeout(this.container.pp.timer);this.container.pp.timer=null}};AblMenuPanel.prototype.setEvents=function(){var _self=this;this.$container.mouseover(function(){_self.show(true)}).mouseout(function(evt){_self.hide()})};AblMenuPanel.prototype.stopAnimation=function(){this.$container.stop(true,true)};AblMenuPanel.prototype.show=function(noDelay){var _self=this;this.clearTimer();var delay=(noDelay)?5:_self.params.openDelay;this.container.pp.timer=setTimeout(function(){if((_self.container.pp.isVisible)&&(_self.container.pp.isAnimating!=2)){return}var speed=(noDelay)?_self.params.restoreSpeed:_self.params.showSpeed;if(_self.container.pp.isAnimating===2){_self.stopAnimation();speed=_self.params.restoreSpeed}_self.container.pp.isAnimating=1;_self.$container.fadeIn(speed,function(){_self.container.pp.isAnimating=0;_self.container.pp.isVisible=true;if(_self.container.pp.pendingAction===2){_self.hide(true)}})},delay)};AblMenuPanel.prototype.hide=function(noDelay){var _self=this;this.clearTimer();if(this.container.pp.isLocked){return}var delay=(noDelay)?5:_self.params.closeDelay;this.container.pp.timer=setTimeout(function(){if((!_self.container.pp.isVisible)&&(_self.container.pp.isAnimating!=1)){return}var speed=(noDelay)?_self.params.restoreSpeed:_self.params.hideSpeed;if(_self.container.pp.isAnimating===1){_self.stopAnimation();speed=_self.params.restoreSpeed}_self.container.pp.isAnimating=2;_self.$container.fadeOut(speed,function(){_self.container.pp.isAnimating=0;_self.container.pp.isVisible=false;if(_self.container.pp.pendingAction===1){_self.show(true)}})},delay)};AblMenuPanel.prototype.lock=function(lock){this.container.pp.isLocked=lock};AblMenuPanel.prototype.toggleLock=function(){this.container.pp.isLocked=!this.container.pp.isLocked};