/* JesseGraupmann. MOUSE IDLE CLASS ---------------------------------------------------------- onIdle = function( _mouseIdle:Object ) .isIdle | Boolean .idleStart | start getTimer() .idleEnd | end getTimer() .idleTime | time before callback check onIdleStart() onIdleEnd() lockCheck() | ignore onMouseMove unlockCheck() | check onMouseMove dispatchAllEvents() | if true; onIdleStart, onIdleEnd, onIdle will all be dispatched if false; only onIdle will all be dispatched _________________________________________________________ // include at the _root _global.setTimeout = setTimeout; _global.clearTimeout = clearTimeout; */ //http://www.flashguru.co.uk/flash-8-settimeout/ //setTimeOut functions - need to use _global['setTimeout'] because undocumented and not in intrinsic class //http://www.macromedia.com/devnet/flash/articles/creating_events.html import mx.events.EventDispatcher class MouseIdle extends Object { // set level of broadcast | if true; start,end,onidle will all be dispatched var dispatchAllEvents:Boolean = true; var _locked:Boolean = false; // movement var isIdle:Boolean = true; // time var idleStart:Number = getTimer(); var idleEnd:Number = getTimer(); // var idleTime:Number = getTimer(); var idleTimer:Number = new Number(); function dispatchEvent() {}; function addEventListener() {}; function removeEventListener() {}; function MouseIdle( $idleTime:Number ) { // make this able to broadcast mx.events.EventDispatcher.initialize(this); // listen to mouse movements Mouse.addListener( this ); // define event listeners init( $idleTime ); } // ____________________________________ // function lockCheck () { stopIdle(); // clear current check _locked = true; // lock from future checks Mouse.removeListener( this ); // stop listening to mouse } function unlockCheck () { _locked = false; // allow checks Mouse.addListener( this ); // listen to mouse } // ____________________________________ // function checkIdle ( scope , idleStart ) { // dispatch event if( scope.isIdle && idleStart < getTimer() ) scope['dispatchEvent']({ target:scope, type:'onIdle' , idleTime:scope.idleTime, idleStart:scope.idleStart }); } function startIdleCheck () { _global['clearTimeout']( idleTimer ); // kill current idle timer // reset timers isIdle = true; // set idle true idleStart = getTimer(); // set idle start time idleEnd = new Number(); // reset idle stop time if( idleTime != undefined ) { // if it doesn't know how long to set the delay, DONT idleTimer = _global['setTimeout']( this.checkIdle , idleTime , this, idleStart ); // dispatch event if(dispatchAllEvents) dispatchEvent({ target:this, type:'onIdleStart' , idleTime:idleTime, idleStart:idleStart}); } } function stopIdle () { _global['clearTimeout']( idleTimer ); // kill current idle timer isIdle = false; // set idle false idleEnd = getTimer(); // set idle stop time // dispatch event if(dispatchAllEvents) dispatchEvent({ target:this, type:'onIdleEnd' , idleObj:this}); } function resetIdleCheck () { stopIdle(); // stop all current checks startIdleCheck();// start new timer to check } // ____________________________________ // function init ( time:Number ) { // set length of callbacks idleTime = time; // listen to onMouse Move this['onMouseMove'] = function() { // restart Idle Counter resetIdleCheck(); } } }