(function(i){i.fn.tabby=function(n){var q=i.extend({},i.fn.tabby.defaults,n),l=i.fn.tabby.pressed;return this.each(function(){$this=i(this);var b=i.meta?i.extend({},q,$this.data()):q;$this.bind("keydown",function(a){var o=i.fn.tabby.catch_kc(a);if(16==o)l.shft=true;if(17==o){l.ctrl=true;setTimeout("$.fn.tabby.pressed.ctrl = false;",1E3)}if(18==o){l.alt=true;setTimeout("$.fn.tabby.pressed.alt = false;",1E3)}if(9==o&&!l.ctrl&&!l.alt){l.last=o;setTimeout("$.fn.tabby.pressed.last = null;",0);a=i(a.target).get(0);
var h=l.shft;o=a.scrollTop;if(a.setSelectionRange){var c=a.selectionStart,j=a.selectionEnd;if(c==j)if(h)if("\t"==a.value.substring(c-b.tabString.length,c)){a.value=a.value.substring(0,c-b.tabString.length)+a.value.substring(c);a.focus();a.setSelectionRange(c-b.tabString.length,c-b.tabString.length)}else{if("\t"==a.value.substring(c,c+b.tabString.length)){a.value=a.value.substring(0,c)+a.value.substring(c+b.tabString.length);a.focus();a.setSelectionRange(c,c)}}else{a.value=a.value.substring(0,c)+b.tabString+
a.value.substring(c);a.focus();a.setSelectionRange(c+b.tabString.length,c+b.tabString.length)}else{var e=a.value.split("\n"),f=[],g=0,k=0;for(var d in e){k=g+e[d].length;f.push({start:g,end:k,selected:g<=c&&k>c||k>=j&&g<j||g>c&&k<j});g=k+1}e=0;for(d in f)if(f[d].selected){g=f[d].start+e;if(h&&b.tabString==a.value.substring(g,g+b.tabString.length)){a.value=a.value.substring(0,g)+a.value.substring(g+b.tabString.length);e-=b.tabString.length}else if(!h){a.value=a.value.substring(0,g)+b.tabString+a.value.substring(g);
e+=b.tabString.length}}a.focus();a.setSelectionRange(c+(e>0?b.tabString.length:e<0?-b.tabString.length:0),j+e)}}else if(document.selection){d=document.selection.createRange();if(a==d.parentElement())if(""==d.text){if(h){h=d.getBookmark();d.moveStart("character",-b.tabString.length);if(b.tabString==d.text)d.text="";else{d.moveToBookmark(h);d.moveEnd("character",b.tabString.length);if(b.tabString==d.text)d.text=""}d.collapse(true)}else{d.text=b.tabString;d.collapse(false)}d.select()}else{j=d.text;c=
j.length;f=j.split("\r\n");j=document.body.createTextRange();j.moveToElementText(a);j.setEndPoint("EndToStart",d);g=j.text;e=g.split("\r\n");g=g.length;k=document.body.createTextRange();k.moveToElementText(a);k.setEndPoint("StartToEnd",d);k=k.text;var p=document.body.createTextRange();p.moveToElementText(a);p.setEndPoint("StartToEnd",j);var m=p.text;p=i(a).html();i("#r3").text(g+" + "+c+" + "+k.length+" = "+p.length);if(g+m.length<p.length){e.push("");g+=2;if(h&&b.tabString==f[0].substring(0,b.tabString.length))f[0]=
f[0].substring(b.tabString.length);else h||(f[0]=b.tabString+f[0])}else if(h&&b.tabString==e[e.length-1].substring(0,b.tabString.length))e[e.length-1]=e[e.length-1].substring(b.tabString.length);else h||(e[e.length-1]=b.tabString+e[e.length-1]);for(m=1;m<f.length;m++)if(h&&b.tabString==f[m].substring(0,b.tabString.length))f[m]=f[m].substring(b.tabString.length);else h||(f[m]=b.tabString+f[m]);if(1==e.length&&0==g)if(h&&b.tabString==f[0].substring(0,b.tabString.length))f[0]=f[0].substring(b.tabString.length);
else h||(f[0]=b.tabString+f[0]);g+c+k.length<p.length&&f.push("");j.text=e.join("\r\n");d.text=f.join("\r\n");h=document.body.createTextRange();h.moveToElementText(a);0<g?h.setEndPoint("StartToEnd",j):h.setEndPoint("StartToStart",j);h.setEndPoint("EndToEnd",d);h.select()}}a.scrollTop=o;return false}}).bind("keyup",function(a){if(16==i.fn.tabby.catch_kc(a))l.shft=false}).bind("blur",function(a){9==l.last&&i(a.target).one("focus",function(){l.last=null}).get(0).focus()})})};i.fn.tabby.catch_kc=function(n){return n.keyCode?
n.keyCode:n.charCode?n.charCode:n.which};i.fn.tabby.pressed={shft:false,ctrl:false,alt:false,last:null};i.fn.tabby.defaults={tabString:String.fromCharCode(9)}})(jQuery);
