rem: evt.key = evt.charCode > 0 ? String.fromCharCode(evt.charCode) : evt.keyCode; 
add: evt.key = evt.charCode >= evt.KEY_SPACE ? String.fromCharCode(evt.charCode) : evt.keyCode; 
context: 	this.fixEvent = function(/*Event*/evt, /*DOMNode*/sender){		// summary:		//		normalizes properties on the event object including event		//		bubbling methods, keystroke normalization, and x/y positions		// evt: the native event object		// sender: the node to treat as "currentTarget"		if(!evt){			if(window["event"]){				evt = window.event;			}		}				if((evt["type"])&&(evt["type"].indexOf("key") == 0)){ // key events			evt.keys = this.revKeys;			// FIXME: how can we eliminate this iteration?			for(var key in this.keys){				evt[key] = this.keys[key];			}			if(evt["type"] == "keydown" && dojo.render.html.ie){				switch(evt.keyCode){					case evt.KEY_SHIFT:					case evt.KEY_CTRL:					case evt.KEY_ALT:					case evt.KEY_CAPS_LOCK:					case evt.KEY_LEFT_WINDOW:					case evt.KEY_RIGHT_WINDOW:					case evt.KEY_SELECT:					case evt.KEY_NUM_LOCK:					case evt.KEY_SCROLL_LOCK:					// I'll get these in keypress after the OS munges them based on numlock					case evt.KEY_NUMPAD_0:					case evt.KEY_NUMPAD_1:					case evt.KEY_NUMPAD_2:					case evt.KEY_NUMPAD_3:					case evt.KEY_NUMPAD_4:					case evt.KEY_NUMPAD_5:					case evt.KEY_NUMPAD_6:					case evt.KEY_NUMPAD_7:					case evt.KEY_NUMPAD_8:					case evt.KEY_NUMPAD_9:					case evt.KEY_NUMPAD_PERIOD:						break; // just ignore the keys that can morph					case evt.KEY_NUMPAD_MULTIPLY:					case evt.KEY_NUMPAD_PLUS:					case evt.KEY_NUMPAD_ENTER:					case evt.KEY_NUMPAD_MINUS:					case evt.KEY_NUMPAD_DIVIDE:						break; // I could handle these but just pick them up in keypress					case evt.KEY_PAUSE:					case evt.KEY_TAB:					case evt.KEY_BACKSPACE:					case evt.KEY_ENTER:					case evt.KEY_ESCAPE:					case evt.KEY_PAGE_UP:					case evt.KEY_PAGE_DOWN:					case evt.KEY_END:					case evt.KEY_HOME:					case evt.KEY_LEFT_ARROW:					case evt.KEY_UP_ARROW:					case evt.KEY_RIGHT_ARROW:					case evt.KEY_DOWN_ARROW:					case evt.KEY_INSERT:					case evt.KEY_DELETE:					case evt.KEY_F1:					case evt.KEY_F2:					case evt.KEY_F3:					case evt.KEY_F4:					case evt.KEY_F5:					case evt.KEY_F6:					case evt.KEY_F7:					case evt.KEY_F8:					case evt.KEY_F9:					case evt.KEY_F10:					case evt.KEY_F11:					case evt.KEY_F12:					case evt.KEY_F12:					case evt.KEY_F13:					case evt.KEY_F14:					case evt.KEY_F15:					case evt.KEY_CLEAR:					case evt.KEY_HELP:						evt.key = evt.keyCode;						break;					default:						if(evt.ctrlKey || evt.altKey){							var unifiedCharCode = evt.keyCode;							// if lower case but keycode is uppercase, convert it							if(unifiedCharCode >= 65 && unifiedCharCode <= 90 && evt.shiftKey == false){								unifiedCharCode += 32;							}							if(unifiedCharCode >= 1 && unifiedCharCode <= 26 && evt.ctrlKey){								unifiedCharCode += 96; // 001-032 = ctrl+[a-z]							}							evt.key = String.fromCharCode(unifiedCharCode);						}				}			} else if(evt["type"] == "keypress"){				if(dojo.render.html.opera){					if(evt.which == 0){						evt.key = evt.keyCode;					}else if(evt.which > 0){						switch(evt.which){							case evt.KEY_SHIFT:							case evt.KEY_CTRL:							case evt.KEY_ALT:							case evt.KEY_CAPS_LOCK:							case evt.KEY_NUM_LOCK:							case evt.KEY_SCROLL_LOCK:								break;							case evt.KEY_PAUSE:							case evt.KEY_TAB:							case evt.KEY_BACKSPACE:							case evt.KEY_ENTER:							case evt.KEY_ESCAPE:								evt.key = evt.which;								break;							default:								var unifiedCharCode = evt.which;								if((evt.ctrlKey || evt.altKey || evt.metaKey) && (evt.which >= 65 && evt.which <= 90 && evt.shiftKey == false)){									unifiedCharCode += 32;								}								evt.key = String.fromCharCode(unifiedCharCode);						}					}				}else if(dojo.render.html.ie){ // catch some IE keys that are hard to get in keyDown					// key combinations were handled in onKeyDown					if(!evt.ctrlKey && !evt.altKey && evt.keyCode >= evt.KEY_SPACE){						evt.key = String.fromCharCode(evt.keyCode);					}				}else if(dojo.render.html.safari){					switch(evt.keyCode){						case 63232: evt.key = evt.KEY_UP_ARROW; break;						case 63233: evt.key = evt.KEY_DOWN_ARROW; break;						case 63234: evt.key = evt.KEY_LEFT_ARROW; break;						case 63235: evt.key = evt.KEY_RIGHT_ARROW; break;						default: 							evt.key = evt.charCode > 0 ? String.fromCharCode(evt.charCode) : evt.keyCode;					}				}else{					evt.key = evt.charCode > 0 ? String.fromCharCode(evt.charCode) : evt.keyCode;				}			}		}		if(dojo.render.html.ie){			if(!evt.target){ evt.target = evt.srcElement; }			if(!evt.currentTarget){ evt.currentTarget = (sender ? sender : evt.srcElement); }			if(!evt.layerX){ evt.layerX = evt.offsetX; }			if(!evt.layerY){ evt.layerY = evt.offsetY; }			// FIXME: scroll position query is duped from dojo.html to avoid dependency on that entire module			// DONOT replace the following to use dojo.body(), in IE, document.documentElement should be used			// here rather than document.body			var doc = (evt.srcElement && evt.srcElement.ownerDocument) ? evt.srcElement.ownerDocument : document;			var docBody = ((dojo.render.html.ie55)||(doc["compatMode"] == "BackCompat")) ? doc.body : doc.documentElement;			if(!evt.pageX){ evt.pageX = evt.clientX + (docBody.scrollLeft || 0) }			if(!evt.pageY){ evt.pageY = evt.clientY + (docBody.scrollTop || 0) }			// mouseover			if(evt.type == "mouseover"){ evt.relatedTarget = evt.fromElement; }			// mouseout			if(evt.type == "mouseout"){ evt.relatedTarget = evt.toElement; }			this.currentEvent = evt;			evt.callListener = this.callListener;			evt.stopPropagation = this._stopPropagation;			evt.preventDefault = this._preventDefault;		}		return evt; // Event	}
meta: 4707	/local1/tlutelli/issta_data/temp/all_js/javascript/2006_temp/2006/4707/50c3492c4c3c825dbd3401e134a19ed46799c456/dojo.js.uncompressed.js/buggy/www/resources/dojo-ajax/dojo.js.uncompressed.js