
function onContextMenuHandler(event){

	var menuDisabled = true;
	
	/** 2008-12-11 g.g. 
	** abilito il menu contestuale 
	** per effettuare le operazioni di copia e incolla
	*/
	var selectedText = clickDocument.selection;
	var selectedTag = clickDocument.activeElement.tagName;


	if (selectedText.type == 'Text') {
		
		var newRange = selectedText.createRange();
		
		/*  abilito se seleziono del testo         */
		if(newRange.text.trim().length > 0){			
			menuDisabled = false;
		}
			
		/*  disabilito se ho selezionato un link   */
		if(selectedTag == "A"){		
			menuDisabled = true;
		}
	}
	
	/* abilito se ho selezionato un input
	 *	o una text area   					
	*/ 
	// 2009-07-01 avillani 
	// bug fix del clic destro su finestre dojo.
	if(selectedTag == "INPUT" && !isButtonElement(clickDocument.activeElement)){		
		menuDisabled = false;		
	}
	if(selectedTag == "TEXTAREA"){
		menuDisabled = false;
	}	
	
		
	if(menuDisabled)
		return isCtrlKey(event) && isShiftKey(event);
	
	
}

var clickDocument;

function disableContextMenu(document){
	clickDocument = document;
	document.oncontextmenu=onContextMenuHandler;
}


function getKeyCode(event){
  var evt = getEvent(event);
  if (evt==null){
     return null;
  }
  var keyCode = null;
  if (evt.keyCode!=null){
     //IE
     keyCode = evt.keyCode;
  }else{
     //Firefox
     keyCode = evt.which;
  }
  return keyCode;
}

function isKeyCode(event,code){
  var keyCode = getKeyCode(event);
  if (keyCode==null){
  	return false;
  }
  return keyCode == code;
}

function isTabKey(event){
  var evt = getEvent(event);
  if (evt==null){
     return false;
  }
  var keyCode = getKeyCode(evt);
  if (keyCode==null){
     return false;
  }
  return keyCode==9;
}

function isCtrlKey(event){
  var evt = getEvent(event);
  if (evt==null){
     return false;
  }
  if (evt.modifiers!=null){
     //Netscape
     key = evt.modifiers & Event.CONTROL_MASK;
     return key == Event.CONTROL_MASK;
  }else{
     //IE, Firefox
     key = evt.ctrlKey||evt.ctrlLeft||evt.ctrlRight||evt.keyCode==17;
     return key; 
  }
}

function isAltKey(event){
  var evt = getEvent(event);
  if (evt==null){
     return false;
  }
  if (evt.modifiers!=null){
     //Netscape
     key = evt.modifiers & Event.ALT_MASK;
     return key == Event.ALT_MASK;
  }else{
     //IE, Firefox
     key = evt.altKey||evt.altLeft||evt.altRight||evt.keyCode==18;
     return key;
  }
}

function isShiftKey(event){
  var evt = getEvent(event)
  if (evt==null){
     return false;
  }
  if (evt.modifiers!=null){
     //Netscape
     key = evt.modifiers & Event.SHIFT_MASK;
     return key == Event.SHIFT_MASK;
  }else{
     //IE, Firefox
     key = evt.shiftKey||evt.shiftLeft||evt.shiftRight||evt.keyCode==16;
     return key;
  }
}

function isShiftTabKey(event){
  return isShiftKey(event) && isTabKey(event);
}


function isHomeKey(event){
  return isKeyCode(event,36);
}
function isEndKey(event){
  return isKeyCode(event,35);
}
function isEnterKey(event){
  return isKeyCode(event,13);
}
function isBackKey(event){
  return isKeyCode(event,8);
}
function isEscKey(event){
  return isKeyCode(event,27);
}
function isPageLeftKey(event){
  return isKeyCode(event,166);
}
function isPageRightKey(event){
  return isKeyCode(event,166);
}

function isArrowLeftKey(event){
  return isKeyCode(event,37);
}
function isArrowRightKey(event){
  return isKeyCode(event,39);
}
function isArrowUpKey(event){
  return isKeyCode(event,38);
}
function isArrowDownKey(event){
  return isKeyCode(event,40);
}

function isF4Key(event){
  return isKeyCode(event,115);
}
function isF5Key(event){
  return isKeyCode(event,116);
}
function isF6Key(event){
  return isKeyCode(event,117);
}
function isF11Key(event){
  return isKeyCode(event,122);
}

function isCtrlArrowLeftKey(event){
  return isCtrlKey(event) && isArrowLeftKey(event);
}
function isCtrlArrowRightKey(event){
  return isCtrlKey(event) && isArrowRightKey(event);
}
function isCtrlArrowUpKey(event){
  return isCtrlKey(event) && isArrowUpKey(event);
}
function isCtrlArrowDownKey(event){
  return isCtrlKey(event) && isArrowDownKey(event);
}

function isCtrlDKey(event){
  return isCtrlKey(event) && isKeyCode(event,68);
}
function isCtrlHKey(event){
  return isCtrlKey(event) && isKeyCode(event,72);
}
function isCtrlIKey(event){
  return isCtrlKey(event) && isKeyCode(event,73);
}
function isCtrlJKey(event){
  return isCtrlKey(event) && isKeyCode(event,74);
}
function isCtrlLKey(event){
  return isCtrlKey(event) && isKeyCode(event,76);
}
function isCtrlMKey(event){
  return isCtrlKey(event) && isKeyCode(event,77);
}
function isCtrlNKey(event){
  return isCtrlKey(event) && isKeyCode(event,78);
}
function isCtrlOKey(event){
  return isCtrlKey(event) && isKeyCode(event,79);
}
function isCtrlRKey(event){
  return isCtrlKey(event) && isKeyCode(event,82);
}
function isCtrlTKey(event){
  return isCtrlKey(event) && isKeyCode(event,84);
}
function isCtrlWKey(event){
  return isCtrlKey(event) && isKeyCode(event,87);
}

var isAltF4KeyDown = false;
function isAltF4Key(event){
  return isAltKey(event) && isF4Key(event);
}
function isCtrlF4Key(event){
  return isCtrlKey(event) && isF4Key(event);
}

function cancelUnsafeHotkeyOnKeyDownEvent(event){
  
  var evt = getEvent(event);
  if (evt==null){
     return;
  }
  var keyCode = null;
  if (evt.keyCode!=null){
     //IE
     keyCode = evt.keyCode;
  }else{
     //Firefox
     keyCode = evt.which;
  }

  var isCtrl = null;
  var isAlt = null;
  var isShift = null;
  if (evt.modifiers!=null){
     //Netscape
     var key = (evt.modifiers & Event.CONTROL_MASK);
     isCtrl = (key == Event.CONTROL_MASK);
     key = (evt.modifiers & Event.ALT_MASK);
     isAlt = (key == Event.ALT_MASK);
     isShift = (key == Event.SHIFT_MASK);
  }else{
     //IE, Firefox
     isCtrl = evt.ctrlKey||evt.ctrlLeft||evt.ctrlRight||evt.keyCode==17;
     isAlt = evt.altKey||evt.altLeft||evt.altRight||evt.keyCode==18;
     isShift = evt.shiftKey||evt.shiftLeft||evt.shiftRight||evt.keyCode==16;
  }
  var cancelHotKeyEvent = false;

  if (isCtrl){
      //CTRL D, CTRL H, CTRL I, CTRL J, CTRL L, CTRL M, CTRL N,
      //CTRL O, CTRL R, CTRL T, CTRL W, CTRL F4, CTRL F5, CTRL F11
      //CTRL ARROW RIGHT, CTRL ARROW LEFT, CTRL ARROW UP, CTRL ARROW DOWN
      //CTRL Page Left, CTRL Page Right
  	  if (keyCode==68 || keyCode==72 || keyCode==73 || keyCode==74 || keyCode==76 || keyCode==77 || keyCode==78
  	    || keyCode==79 || keyCode==82 || keyCode==84 || keyCode==87 || keyCode==115 || keyCode==116 || keyCode==122
  	    || keyCode==37 || keyCode==39 || keyCode==38 || keyCode==40
	    || keyCode==166 || keyCode==167){
  	  	cancelHotKeyEvent = true;
	  }
  }else{
	    if (isAlt){
	        //ALT F4
			if (keyCode==115){
				isAltF4KeyDown=true;
	  		  	cancelHotKeyEvent=true;
			}else{
			    
			    //ATTENZIONE
			    //ALT ENTER non intercettabile
			    
			    //ALT ENTER, ALT HOME, ALT END
			    //ALT ARROW RIGHT, ALT ARROW LEFT, ALT ARROW UP, ALT ARROW DOWN
				if (keyCode==13 || keyCode==35 || keyCode==36
					|| keyCode==37 || keyCode==38 || keyCode==39 || keyCode==40){			
		  		  	cancelHotKeyEvent=true;
		          	//evt.cancelBubble=true;
		  		}
			}    
	  	}else{
	  	   //BACKSPACE
	       if (keyCode==8){
	       		var element = evt.srcElement;
		        var tagName = element.tagName.toUpperCase();
		        var tagType = null;
		        if (element.type){
		          tagType = element.type.toUpperCase();
		        }
		        if ((tagName == 'INPUT' && tagType!=null && tagType == 'TEXT')
		        	||(tagName == 'INPUT' && tagType!=null && tagType == 'PASSWORD')
		        	|| tagName == 'TEXTAREA'){
		        }else{ 
			  	  	cancelHotKeyEvent = true;
			  	}
		    } else{
			  //F4, F5, F6, F11, ESC, Page Left, Page Right
		  	  if (keyCode==115 || keyCode==116 || keyCode==117 || keyCode==122 || keyCode==27 || keyCode==166 || keyCode==167){
		  	  	cancelHotKeyEvent = true;
		      }
		   }
		}
  }
  
  if (cancelHotKeyEvent){
  	evt.returnValue=false;
 	evt.keyCode=0;
  }
}


/*
	Permette di disabilitare la pressione dei tasti ctrl-<key> dove key è
	una delle chiavi passate alla struttura relativa al parametro disabledKeys.
	Nel caso in cui si trattasse del CTRL-N, ad esempio, basterà passare come
	disabledKeys il valore {n:0}. Le chiavi vengono trattate in modo case insensitive
*/
/*
function stopCtrl(evt, disabledKeys){
	// In questa struttura inseriamo l'insieme di caratteri 
	// che si vogliono disabilitare con la pressione del 
	// tasto CTRL. Nel nostro caso inseriamo la N
	var disabled = disabledKeys;
	// Verifichiamo la pressione o meno del tasto CTRL
	var ctrlMod = (window.event)? window.event.ctrlKey : evt.ctrlKey;
	// Identifichiamo poi quale stato e' stato premuto
	var key = (window.event)? window.event.keyCode : evt.which;
	// Ne otteniamo il corrispondente codice
	key = String.fromCharCode(key).toLowerCase();
	// Per verificare se non permetterlo verifichiamo se e' nella precedente struttura
	var isAllowed = (ctrlMod && (key in disabled))? false : true;
	// Ritorniamo il valore relativo alla disabilitazione
	return isAllowed;
}
*/


/*
function stopCtrlN(evt){
	// Deleghiamo alla funzione stopCtrl passando la struttura
	// relativa al tasto N
	var disabledKeys = {n:0};
	// Deleghiamo
	return stopCtrl(evt,disabledKeys);
}
*/



