(function(a){a.fn.textbox=function(e){var g={maxLength:-1,onInput:null,_pasteHandler:function(n){var m=this;window.setTimeout(function(){h.call(m,n)},0)},_cutHandler:function(n){var m=this;window.setTimeout(function(){h.call(m,n)},0)},_keyupHandler:function(m){if(b.maxLength<0){if(a.isFunction(b.onInput)){b.onInput.call(this,m,{maxLength:b.maxLength,leftLength:-1})}}else{h.call(this,m)}},_blurHandler:function(m){k(this)}};var b=a.extend(g,e);function j(o){var p=0;if(o.selectionStart||o.selectionStart=="0"){p=o.selectionStart}else{if(document.selection){o.focus();var m=document.selection.createRange();var n=m.duplicate();n.moveToElementText(o);while(m.compareEndPoints("StartToStart",n)>0){m.moveStart("character",-1);p++}}}return p}function l(n,o){n.focus();if(n.selectionStart||n.selectionStart=="0"){n.selectionStart=o;n.selectionEnd=o}else{if(document.selection){var m=n.createTextRange();m.moveStart("character",o);m.collapse(true);m.select()}}}function d(n,m){if(b.maxLength>0){return n.replace(/\r/g,"").length-(m?m.replace(/\r/g,"").length:0)>b.maxLength}else{return false}}function k(m){if(b.maxLength>0){var n=m.value.replace(/\r/g,"");if(d(n)){m.value=n.substr(0,b.maxLength)}}}function h(n){var p=this.value.replace(/\r/g,"");if(d(p)){var o=this.scrollTop;var m=j(this)-(p.length-b.maxLength);this.value=p.substr(0,m)+p.substr(j(this));l(this,m);this.scrollTop=o}if(a.isFunction(b.onInput)){b.onInput.call(this,n,{maxLength:b.maxLength,leftLength:b.maxLength-this.value.replace(/\r/g,"").length})}}function c(m){var n="";if(m.selectionStart||m.selectionStart=="0"){n=m.value.substring(m.selectionStart,m.selectionEnd)}else{n=document.selection.createRange().text}return n.replace(/\r/g,"")}function i(m,n){a(m).unbind("paste",n._pasteHandler).unbind("cut",n._cutHandler).unbind("keyup",n._keyupHandler).unbind("blur",n._blurHandler)}function f(m,n){var o=a(m);if(n.maxLength<0){o.bind("keyup",n._keyupHandler)}else{o.bind("paste",n._pasteHandler).bind("cut",n._cutHandler).bind("keyup",n._keyupHandler).bind("blur",n._blurHandler);k(m)}}this.maxLength=function(m){if(m){b.maxLength=m;return this.filter("textarea").each(function(){i(this,a(this).data("textbox-opts"));a(this).data("textbox-opts",b);f(this,b)}).end()}else{return b.maxLength}};this.input=function(m){if(a.isFunction(m)){b.onInput=m;return this.filter("textarea").each(function(){a(this).data("textbox-opts",b)}).end()}return this};this.fixLength=function(){return this.filter("textarea").each(function(){k(this)}).end()};this.insertText=function(m){m=m.replace(/\r/g,"");return this.filter("textarea").each(function(){if(!d(this.value+m,c(this))){if(this.selectionStart||this.selectionStart=="0"){var o=this.selectionStart;var p=this.selectionEnd;var r=this.scrollTop;this.value=this.value.substring(0,o)+m+this.value.substring(p,this.value.length);this.focus();var q=o+m.length;this.selectionStart=q;this.selectionEnd=q;this.scrollTop=r}else{if(document.selection){this.focus();var n=document.selection.createRange();n.text=m;n.collapse(true);n.select()}}if(a.isFunction(b.onInput)){b.onInput.call(this,{type:"insert"},{maxLength:b.maxLength,leftLength:b.maxLength-this.value.replace(/\r/g,"").length})}}}).end()};return this.filter("textarea").each(function(){var m=a(this);if(e){if(typeof m.data("textbox-opts")=="undefined"){m.data("textbox-opts",b);f(this,b)}else{i(this,m.data("textbox-opts"));m.data("textbox-opts",b);f(this,b)}}else{if(typeof m.data("textbox-opts")!="undefined"){b=m.data("textbox-opts")}}}).end()}})(jQuery);
