/**
 * TextareaTab: Allow tabs in textarea elements <http://code.seebz.net/p/textareatab/>
 *
 * Copyright (c) 2010 Sébastien Corne, <http://seebz.net>
 * TextareaTab is distributed under the MIT licence.
 */
(function(){var TextareaTab={version:"1.0",className:"tab",init:function(){var TextareaTab=this;this.addEvent(window,"load",function(){var elements=document.getElementsByTagName("textarea");for(var i=0,elem;elem=elements[i];i++){var className=new RegExp("\\b"+TextareaTab.className+"\\b","i");if(className.test(elem.className)){TextareaTab.addEvent(elem,"keydown",TextareaTab.keydownFunction);}}});return this;},addEvent:function(obj,eventName,func){if(obj.addEventListener){obj.addEventListener(eventName,func,false);}else if(obj.attachEvent){obj.attachEvent("on"+eventName,func);}},keydownFunction:function(e){if(!e)e=event;if(e.keyCode==9){if(e.preventDefault)e.preventDefault();e.returnValue=false;if(navigator.userAgent.match(/MSIE/i)){var range=document.selection.createRange();range.moveEnd("character",1);var rangeValue=range.text;if(rangeValue.charCodeAt(rangeValue.length-2)!=10){var moveEnd=false;range.moveEnd("character",-1);rangeValue=range.text;}else{var moveEnd=true;}var newRangeValue="\t"+rangeValue.replace(/\r$/,"\n").replace(/\r\n/g,"\n\t");newRangeValue=newRangeValue.replace(/^\t\n\t/,"\n\t").replace(/\n\t$/,"\n");if(moveEnd){newRangeValue=newRangeValue.replace(/\n\t([\S]?)$/,"\n$1");}range.text=newRangeValue;if(rangeValue.length!=0){range.moveStart("character",-newRangeValue.length);if(moveEnd){range.moveEnd("character",-1);}}range.select();}else if(typeof(this.selectionStart)!="undefined"){var selStart=this.selectionStart;var selEnd=this.selectionEnd;var selValue=this.value.substring(selStart,selEnd);var newSelValue="\t"+selValue.replace(/\n/g,"\n\t");newSelValue=newSelValue.replace(/^\t\n\t/,"\n\t").replace(/\n\t$/,"\n");this.value=this.value.substring(0,selStart)+newSelValue+this.value.substring(selEnd,this.value.length);if(selValue.length==0){this.selectionStart=this.selectionEnd=selStart+1;}else{this.selectionStart=selStart;this.selectionEnd=selEnd+newSelValue.length-selValue.length;}}else{return true;}return false;}}}.init();})();
