﻿	var preventedKeys = new Array('116');
	var preventedAltCombinedKeys = new Array();
	var preventedCtrlCombinedKeys = new Array('r');
	var preventedShiftCombinedKeys = new Array();

	document.onkeydown = function(e){eventKeyHandler(e)}
	document.onkeypress = function(e){eventCombinedKeyHandler(e)}

	function eventKeyHandler(e){
		var keycode,tagname

		if(e != null){
			keycode = e.which;
			tagname = e.target.tagName.toUpperCase();
		}else{ 
			keycode = window.event.keyCode; 
			tagname = window.event.srcElement.tagName.toUpperCase();
		}

		for(i=0;i<preventedKeys.length;i++){
			if(preventedKeys[i] == keycode){
				alert(getKeyName(keycode)+'キーは使えません。');
				eventCanceler(e);
				return false;
			}
		}
		
		if(e == null){
			eventCombinedKeyHandler(e);
		}
		return true;
	}

	function eventCombinedKeyHandler(e){
		var isCtrl,isAlt,isShift
		var keycode,tagname

		if(e != null){
			keycode = e.which;
			tagname = e.target.tagName.toUpperCase();
			isCtrl = typeof e.modifiers == 'undefined' ? e.ctrlKey : e.modifiers & Event.CONTROL_MASK; 
			isAlt = typeof e.modifiers == 'undefined' ? e.shiftKey : e.modifiers & Event.ALT_MASK; 
			isShift = typeof e.modifiers == 'undefined' ? e.shiftKey : e.modifiers & Event.SHIFT_MASK; 
		}else{ 
			keycode = window.event.keyCode; 
			tagname = window.event.srcElement.tagName.toUpperCase();
			isCtrl = event.ctrlKey;
			isAlt = event.altKey;
			isShift = event.shiftKey; 
		}

		if(isCtrl){
			for(i=0;i<preventedCtrlCombinedKeys.length;i++){
				if(preventedCtrlCombinedKeys[i].toUpperCase() == String.fromCharCode(keycode).toUpperCase()){
					alert('CTRL+'+String.fromCharCode(keycode).toUpperCase()+'キーは使えません。');
					eventCanceler(e);
					return false;
				}
			}
		}else if(isAlt){
			for(i=0;i<preventedAltCombinedKeys.length;i++){
				if(preventedAltCombinedKeys[i].toUpperCase() == String.fromCharCode(keycode).toUpperCase()){
					alert('ALT+'+String.fromCharCode(keycode).toUpperCase()+'キーは使えません。');
					eventCanceler(e);
					return false;
				}
			}
		}else if(isShift){
			for(i=0;i<preventedShiftCombinedKeys.length;i++){
				if(preventedShiftCombinedKeys[i].toUpperCase() == String.fromCharCode(keycode).toUpperCase()){
					alert('SHIFT+'+String.fromCharCode(keycode).toUpperCase()+'キーは使えません。');
					eventCanceler(e);
					return false;
				}
			}
		}
	
		return true;
	}
	
	function getKeyName(keyCode){
		switch(keyCode){
			case 116:
				return 'F5';
		}
	}
	
	function eventCanceler(e) {
		if (e != null) {
			e.preventDefault(); 
			e.stopPropagation(); 
		} else {
			event.returnValue = false; 
			event.cancelBubble = true; 
			event.keyCode = 0;
		}
		return true;
	}