var RightClick = {
        objectId: "",
        
        init: function(objId) {
                this.objectId = objId;
                
                if(window.addEventListener){
                         window.addEventListener("mousedown", this.onGeckoMouseDown, true);
                         window.addEventListener("mouseup", this.onGeckoMouseUp, true);
						 /** DOMMouseScroll is for mozilla. */
						 window.addEventListener('DOMMouseScroll', this.wheel, false);
						 window.addEventListener('mousewheel', this.wheel, false);
                         
                } else {
                        document.onmousedown = this.onIEMouseDown;
                        document.oncontextmenu = this.trapContextMenu;
                        document.onmouseup = this.onIEMouseUp;
						/** IE/Opera. */
						document.onmousewheel = RightClick.wheel;
                }
        },
        
        deinit: function() {
                if(window.RemoveEventListener){
                        window.RemoveEventListener("mousedown",this.onGeckoMouseDown,true);
                        window.addEventListener("mouseup", null, true);
                        window.RemoveEventListener("mouseup", this.onGeckoMouseUp, true);
                } else {                                                        
                        document.onmouseup = null;
                        document.oncontextmenu = null;
                        document.onmousedown = null;
						/** IE/Opera. */
						document.onmousewheel = null;
                }
                
                this.objectId = null;
        },
        
        call: function(type, button) {
				//alert("button:"+button);
                document.getElementById(this.objectId).rightMouseButtonTrap(type, button);
        },
        
        /**
         * Event Listeners for Gecko style capture.
         * 
         * Support for non-IE browsers
         */
        onGeckoMouseDown: function (e) {
                if (e.button != 0) {
                        RightClick.killEvents(e);
                        if(e.target.id == RightClick.objectId) {
                                RightClick.call("mousedown", (e.button==1?"middle":"right"));
                        }
                }
        },
        
        onGeckoMouseUp: function (e) {
                if (e.button != 0) {
                        RightClick.killEvents(e);
                        if(e.target.id == RightClick.objectId) {
                                RightClick.call("mouseup", (e.button==1?"middle":"right"));
                        }
                }
        },

        killEvents: function(eventObject) {
                if(eventObject) {
                        if (eventObject.stopPropagation) eventObject.stopPropagation();
                        if (eventObject.preventDefault) eventObject.preventDefault();
                        if (eventObject.preventCapture) eventObject.preventCapture();
                        if (eventObject.preventBubble) eventObject.preventBubble();
                }
        },
        
        /**
         * Event Listeners for IE style capture
         * 
         * Support for IE browsers
         */
        onIEMouseDown: function() {
                var ev = window.event;
                //alert("sunt aici ! hurey! ev.button:"+ev.button);
                if (ev.button > 1) {
                        if(ev.srcElement.id == RightClick.objectId) {
								//alert("ev.button:"+ev.button);
                                RightClick.call("mousedown", (ev.button==4?"middle":"right"));
                                document.setCapture();
                        }
                }
        },
        
        trapContextMenu: function() {
                var ev = window.event;
                if(ev.srcElement.id == RightClick.objectId) return false;
        },
        
        onIEMouseUp: function() {
                var ev = window.event;
                document.releaseCapture();
                if (ev.button > 1) {
                        if(ev.srcElement.id == RightClick.objectId) {
                                RightClick.call("mouseup", (ev.button==4?"middle":"right"));
                        }
                }
        },	
		wheel: function(event){
			var delta = 0;
			if (!event) /* For IE. */{
					event = window.event;			
					}
			if (event.wheelDelta) { /* IE/Opera. */		
					delta = event.wheelDelta/120;
					/** In Opera 9, delta differs in sign as compared to IE.
					 */
					if (window.opera)
							delta = -delta;
			} else if (event.detail) { /** Mozilla case. */
					/** In Mozilla, sign of delta is different than in IE.
					 * Also, delta is multiple of 3.
					 */					 		
					delta = -event.detail/3;
			}
			/** If delta is nonzero, handle it.
			 * Basically, delta is now positive if wheel was scrolled up,
			 * and negative, if wheel was scrolled down.
			 */
			 
			//alert("Delta moves:"+delta);
			if (delta){			
					RightClick.triggerMouseWheel(delta);
					}
			/** Prevent default actions caused by mouse wheel.
			 * That might be ugly, but we handle scrolls somehow
			 * anyway, so don't bother here..
			 */
				if (event.preventDefault)
						event.preventDefault();
				event.returnValue = false;
		},
		triggerMouseWheel: function(delta) {
				//alert("Delta moves:"+delta);
				document.getElementById(this.objectId).mouseWheel(delta);
			},

}

