jQuery.fn.truncate=function(len){this.val(this.val().substring(0,len));return false};jQuery.fn.maxLength=function(len){var maxLengthKeyPress=new Array();var maxLengthChange=new Array();var appleKeyOn=false;var useAttr=arguments.length>1?arguments[1]:false;var handleKeyUp=function(e){if(e.keyCode==224||e.keyCode==91){appleKeyOn=false}};var handleKeyDown=function(e){if(e.keyCode==224||e.keyCode==91){appleKeyOn=true}};var handleKeyPress=function(e){if(appleKeyOn||(e.charCode==0&&e.keyCode!=13)||e.ctrlKey){return}var textarea=$(this);len=useAttr?parseInt(textarea.attr("maxlength")):len;var val=textarea.val();var selected=Math.abs(textarea.attr("selectionStart")-textarea.attr("selectionEnd"));selected=isNaN(selected)?0:selected;if(val.length==len&&selected<1){return false}else{if(val.length>len&&selected<(val.length-len)){return textarea.truncate(len)}}};var handleChange=function(e){var textarea=$(this);len=useAttr?parseInt(textarea.attr("maxlength")):len;textarea.truncate(len)};var removeKeyPress=maxLengthKeyPress[this.selector];var removeChange=maxLengthChange[this.selector];this.die("keypress",removeKeyPress);this.die("change",removeChange);if(len==0&&!useAttr){return}this.live("keypress",handleKeyPress);this.live("change",handleChange);this.live("keydown",handleKeyDown);this.live("keyup",handleKeyUp);maxLengthKeyPress[this.selector]=handleKeyPress;maxLengthChange[this.selector]=handleChange;this.keypress()};$(function(){$("textarea[maxlength]").maxLength(null,true)});