/*********************************************************************
	
	=== Event ===
	
	* Action [ Action.js ]
	
	* updated 2001/05/28
	
	mail : peace@skipup.com
	home : http://www.skipup.com/~peace/
	
*********************************************************************/



// public class Action
function Action(){
	
	var A = Action ;
	
	var C = Client ;
	var E = C.NN ? Event : null ;
	
	/****************************** SET_STATIC_MEMBER - BEGIN ******************************/
	
	// public static final int
	A.MOUSEDOWN = C.NN ? E.MOUSEDOWN :         1 ;
	A.MOUSEUP   = C.NN ? E.MOUSEUP   :         2 ;
	A.MOUSEOVER = C.NN ? E.MOUSEOVER :         4 ;
	A.MOUSEOUT  = C.NN ? E.MOUSEOUT  :         8 ;
	A.MOUSEMOVE = C.NN ? E.MOUSEMOVE :        16 ;
	
	A.CLICK     = C.NN ? E.CLICK     :        64 ;
	A.DBLCLICK  = C.NN ? E.DBLCLICK  :       128 ;
	A.KEYDOWN   = C.NN ? E.KEYDOWN   :       256 ;
	A.KEYUP     = C.NN ? E.KEYUP     :       512 ;
	A.KEYPRESS  = C.NN ? E.KEYPRESS  :      1024 ;
	A.DRAGDROP  = C.NN ? E.DRAGDROP  :      2048 ;
	A.FOCUS     = C.NN ? E.FOCUS     :      4096 ;
	A.BLUR      = C.NN ? E.BLUR      :      8192 ;
	A.SELECT    = C.NN ? E.SELECT    :     16384 ;
	A.CHANGE    = C.NN ? E.CHANGE    :     32768 ;
	A.RESET     = C.NN ? E.RESET     :     65536 ;
	A.SUBMIT    = C.NN ? E.SUBMIT    :    131072 ;
	A.SCROLL    = C.NN ? E.SCROLL    :    262144 ;
	A.LOAD      = C.NN ? E.LOAD      :    524288 ;
	A.UNLOAD    = C.NN ? E.UNLOAD    :   1048576 ;
	
	A.ABORT     = C.NN ? E.ABORT     :   4194304 ;
	A.ERROR     = C.NN ? E.ERROR     :   8388608 ;
	
	A.MOVE      = C.NN ? E.MOVE      :  33554432 ;
	A.RESIZE    = C.NN ? E.RESIZE    :  67108864 ;
	
	A.FORWARD   = C.NN ? E.FORWARD   : 134217728 ;
	A.BACK      = C.NN ? E.BACK      : 536870912 ;
	
	// public static boolean
	A.isPrimary   = function( e ){ return C.IE ? ( event.button == 1 ) : ( e.which == 1 ) ; };
	A.isSecondary = function( e ){ return C.IE ? ( event.button == 2 ) : ( e.which == 3 ) ; };
	
	// public static void
	A.estEventListener = A.$l = function( t , e , l ){
		if( C.NN ) ( l ) ? t.captureEvents( e ) : t.releaseEvents( e ) ;
		if( ( e & A.MOUSEDOWN ) ) t.onmousedown = eval( l );
		if( ( e & A.MOUSEUP   ) ) t.onmouseup   = eval( l );
		if( ( e & A.MOUSEOVER ) ) t.onmouseover = eval( l );
		if( ( e & A.MOUSEOUT  ) ) t.onmouseout  = eval( l );
		if( ( e & A.MOUSEMOVE ) ) t.onmousemove = eval( l );
		if( ( e & A.CLICK     ) ) t.onclick     = eval( l );
		if( ( e & A.DBLCLICK  ) ) t.ondblclick  = eval( l );
		if( ( e & A.LOAD      ) ) t.onload      = eval( l );
		if( ( e & A.SCROLL    ) ) t.onscroll    = eval( l );
		if( ( e & A.RESIZE    ) ) t.onresize    = eval( l );
	};
	
	// public string
	A.toString = function(){ return "Action" ; };
	
	/****************************** SET_STATIC_MEMBER - E N D ******************************/
	
} new Action();

function setEventMember__Client__(){
	
	var C = Client ;
	
	/****************************** SET_STATIC_MEMBER - BEGIN ******************************/
	
	// public void
	C.setEventListener = function( e , l ){ Action.$l( document , e , l ); };
	
	// public void
	C.clearEventListener = function( e ){ Action.$l( document , e , null ); };
	
	// public Dimension
	C.getEventAbsolutePosition = function( e ){
		if( C.IE ){
			var p = new Dimension( event.clientX , event.clientY );
			p.add( C.getScroll() );
			p.sub( 2 );
			return p ;
		}else{
			return new Dimension( parseInt( e.pageX ) , parseInt( e.pageY ) );
		}
	};
	
	// public Dimension
	C.getEventRelativePosition = function( e ){
		if( C.IE ) e = event ;
		var p = !C.NN ? new Dimension( parseInt( e.clientX ) , parseInt( e.clientY ) ) : new Dimension( e.pageX , e.pageY ) ;
		if( !C.MZ ) p.sub( ( C.IE ? 2 : C.getScroll() ) );
		return p ;
	};
	
	/****************************** SET_STATIC_MEMBER - E N D ******************************/
	
} setEventMember__Client__();



function setEventMember__Element__(){
	
	var EP = Element.prototype ;
	
	var C = Client ;
	
	/****************************** SET_METHOD - BEGIN ******************************/
	
	// public Dimension
	EP.getEventAbsolutePosition = function( e ){
		if( C.IE ){
			var p = new Dimension( event.clientX , event.clientY );
			p.add( C.getScroll() );
			p.sub( 2 );
			return p ;
		}else{
			return new Dimension( parseInt( e.pageX ) , parseInt( e.pageY ) );
		}
	};
	
	// public Dimension
	EP.getEventRelativePosition = function( e ){
		if( C.IE ) e = event ;
		var p = !C.NN ? new Dimension( parseInt( e.clientX ) , parseInt( e.clientY ) ) : new Dimension( e.pageX , e.pageY ) ;
		if( !C.MZ ) p.sub( ( C.IE ? 2 : C.getScroll() ) );
		return p ;
	};
	
	// public Dimension
	EP.getEventElementPosition = function( e ){ return C.IE ? new Dimension( event.offsetX , event.offsetY ) : new Dimension( parseInt( e.layerX ) , parseInt( e.layerY ) ) ; };
	
	// public void
	EP.setEventListener = function( e , l ){ Action.$l( this.layer , e , l ); };
	
	// public void
	EP.clearEventListener = function( e ){ Action.$l( this.layer , e , null ); };
	
	// public void
	EP.setDrag = function(){
		
		var A = Action ;
		
		function $_d_(e){ if( A.isPrimary(e) ){
			if( Client.IE ) document.oncontextmenu = function(){ return false ; };
			b = true ;
			p = t.getEventElementPosition(e);
			A.$l( document , A.MOUSEMOVE , $_m_ );
			A.$l( t.layer , A.MOUSEUP , $_u_ );
		}}
		
		function $_u_(e){ if( Action.isPrimary(e) ){
			if( Client.IE ) document.oncontextmenu = null ;
			b = false ;
			A.$l( t.layer , A.MOUSEUP   , null );
			A.$l( document , A.MOUSEMOVE , null );
		}}
		
		function $_m_(e){ if( b ){
			var q = Client.getEventAbsolutePosition(e);
			q.sub( p );
			t.setPosition( q );
		}}
		
		var b = false ;
		var p ;
		var t = this ;
		
		switch( arguments.length ){
			case 0 : default : A.$l( this.layer , A.MOUSEDOWN , $_d_ ); break ;
			case 1 : { // boolean
				if( arguments[0] ){
					A.$l( this.layer , A.MOUSEDOWN , $_d_ );
				}else{
					A.$l( this.layer , A.MOUSEDOWN , null );
				}
				break ;
			}
		}
	};
	
	/****************************** SET_METHOD - E N D ******************************/
	
} setEventMember__Element__();


