var EVENT_RESIZE = 0;
var EVENT_MOUSE_MOVE = 1;
var EVENT_MOUSE_DOWN = 2;
var EVENT_MOUSE_UP = 3;
var EVENT_KEY_DOWN = 4;
var EVENT_KEY_UP = 5;
var EVENT_MOUSE_WHEEL = 6;

var hookTypes = new Array();
hookTypes[ EVENT_RESIZE ] = new String( "Resize" );
hookTypes[ EVENT_MOUSE_MOVE ] = new String( "MouseMove" );
hookTypes[ EVENT_MOUSE_DOWN ] = new String( "MouseDown" );
hookTypes[ EVENT_MOUSE_UP ] = new String( "MouseUp" );
hookTypes[ EVENT_KEY_DOWN ] = new String( "KeyDown" );
hookTypes[ EVENT_KEY_UP ] = new String( "KeyUp" );
hookTypes[ EVENT_MOUSE_WHEEL ] = new String( "MouseWheel" );

function niceHook() {
	this.mouseX = -255;
	this.mouseY = -255;
	this.leftMouse = false;
	this.middleMouse = false;
	this.rightMouse = false;
	
	this.hookEvent = niceHookEvent;
}

function niceHookEvent( hookTypeNr, funcName ) {
	hookType = hookTypes[ hookTypeNr ];
	eval( "obj" + hookType + " = this;" );
	eval( "this.on" + hookType + " = new String( funcName );" );
	if( document.layers ) {
		eval( "window.captureEvents( Event." + hookType.toUpperCase() + " );" );
		eval( "window.on" + hookType.toLowerCase() + " = doOn" + hookType + ";" );
	} else
		eval( "document.on" + hookType.toLowerCase() + " = doOn" + hookType + ";" );
}


function doOnResize( Events ) {
	if( objResize.func.length )
		eval( "" + objResize.func );
	return true;
}

function doOnMouseMove( Events ) {
	if( document.layers ) {
		objMouseMove.mouseX = Events.pageX;
		objMouseMove.mouseY = Events.pageY;
	} else if( document.all ) {
		objMouseMove.mouseX = event.x + document.body.scrollLeft;
		objMouseMove.mouseY = event.y + document.body.scrollTop;
	}
	if( objMouseMove.onMouseMove.length )
		eval( "" + objMouseMove.onMouseMove );
}

function doOnMouseDown( Events ) {
	if( document.layers ) {
		if( Events.which == 1 ) objMouseDown.leftMouse = true;
		if( Events.which == 2 ) objMouseDown.middleMouse = true;
		if( Events.which == 3 ) objMouseDown.rightMouse = true;
	} else {
		if( event.button == 1 ) objMouseDown.leftMouse = true;
		if( event.button == 4 ) objMouseDown.middleMouse = true;
		if( event.button == 2 ) objMouseDown.rightMouse = true;
	}
	if( objMouseDown.onMouseDown.length ) eval( "" + objMouseDown.onMouseDown );
	return true;
}

function doOnMouseUp( Events ) {
	if( document.layers ) {
		if( Events.which == 1 ) objMouseUp.leftMouse = false;
		if( Events.which == 2 ) objMouseUp.middleMouse = false;
		if( Events.which == 3 ) objMouseUp.rightMouse = false;
	} else if( document.all ) {
		if( ( event.button == 1 ) || ( event.button == 0 ) ) objMouseUp.leftMouse = false;
		if( event.button == 4 ) objMouseUp.middleMouse = false;
		if( event.button == 2 ) objMouseUp.rightMouse = false;
	}
	if( objMouseUp.onMouseUp.length ) eval( "" + objMouseUp.onMouseUp );
	return true;
}

function doOnKeyDown( Events ) {
	objKeyDown.keyCode = ( document.layers ) ? Events.which : event.keyCode;
	objKeyDown.keyChar = ( document.layers ) ? String.fromCharCode( Events.which ) : String.fromCharCode( event.keyCode );
	if( objKeyDown.onKeyDown.length ) eval( "" + objKeyDown.onKeyDown );
	return false;
}

function doOnMouseWheel( Events ) {
        if( event.wheelDelta >= 120 ) {
			objMouseWheel.scrolledUp = true;
			objMouseWheel.scrolledDown = false;
		} else if( event.wheelDelta <= -120 ) {
			objMouseWheel.scrolledUp = false;
			objMouseWheel.scrolledDown = true;
		}
	if( objMouseWheel.onMouseWheel.length ) eval( "" + objMouseWheel.onMouseWheel );
	return false; 
}