class com.oop.ScrollingMenuFrame extends MovieClip { private var hotSpot_mc:MovieClip; // used to detect mouse events private var holder_mc:MovieClip; // holder for the flat-list SelectionSystem private var hotSpotMask:MovieClip; // bluh .. also used i guess private var initY:Number; private var initX:Number; private var initHolderX:Number; private var initHolderY:Number; var intRate:Number = 10; // scroller speed public function ScrollingMenuFrame() { doInit(); } /* public function doLoad(_dataArray:Array):Void { holder_mc.attachMovie("KeywordSelectionSystem", "keywordTiles", 1000); holder_mc["keywordTiles"].doInit(_dataArray, "KeywordButton"); } */ public function enableMenu():Void { initMenuScroll(); initMouseWatch(); setHotSpot(true); } public function disableMenu():Void { killMouseWatch(); killMenuScroll(); setHotSpot(false); } private function doInit():Void { initY = _x; initX = _y; initHolderX = holder_mc._x; initHolderY = holder_mc._y; initMenuScroll(); holder_mc.onMouseDown = function() { if (this.hitTest(_root._xmouse, _root._ymouse, true)) { // _parent.disableMenu(); } } } private function setHotSpot(_isMenuEnabled:Boolean):Void { if (_isMenuEnabled) { hotSpot_mc.onRollOver = undefined; } else { hotSpot_mc.onRollOver = function() { this._parent.enableMenu(); } } } private function initMouseWatch():Void { this.onMouseMove = function() { if (!this.hitTest(_root._xmouse, _root._ymouse, true)) { disableMenu(); } } } private function killMouseWatch():Void { this.onMouseMove = undefined; } private function initMenuScroll():Void { this.onEnterFrame = function() { if ((holder_mc._height >= hotSpotMask._height) || (holder_mc._width >= hotSpotMask._width)) { doMenuScroll(); } } } private function killMenuScroll():Void { this.onEnterFrame = undefined; } private function doMenuScroll():Void { var intTop:Number = initHolderY; var intLeft:Number = initHolderX; var intBottom:Number = intTop + hotSpotMask._height; var intRight:Number = intLeft + hotSpotMask._width; var intZero:Number = (intBottom + intTop) / 2; var intZeroW:Number = (intRight + intLeft) / 2; var intMousePos:Number = _ymouse - intZero; var intMousePosW:Number = _xmouse - intZeroW; var intMaxUp:Number = intTop - intZero; var intMaxLeft:Number = intLeft - intZeroW; var intMaxDown:Number = intBottom - intZero; var intMaxRight:Number = intRight - intZeroW; var _isHit:Boolean = this.hitTest(_root._xmouse, _root._ymouse, true); if (_isHit) { if (holder_mc._height > hotSpotMask._height ) { // top & bottom bounds check if (intMousePos > 0) { // below intZero? scroll up holder_mc._y = Math.max(holder_mc._y - intRate * Math.pow((intMousePos/intMaxDown),2), intBottom - holder_mc._height) ; } else if (intMousePos < 0) { // above intZero? scroll down holder_mc._y = Math.min(holder_mc._y + intRate * Math.pow((intMousePos/intMaxUp),2), intTop ); } // left & right bounds check /* if (intMousePosW > 0) { // right of intZero? scroll left holder_mc._x = Math.max(holder_mc._x - intRate * Math.pow((intMousePosW/intMaxRight),2), intRight - holder_mc._width); } else if (intMousePosW < 0) { // left of intZero? scroll right holder_mc._x = Math.min(holder_mc._x + intRate * Math.pow((intMousePosW/intMaxLeft),2), intLeft); } */ } } } }