var effect=
{
	textarea:
	{
		active:function(ev)
		{
			var code = (ev.keyCode ? ev.keyCode : ev.charCode);
		
			if(code != 9)
			return;
			
			ev.preventDefault();
			ev.stopPropagation();
			
			var selSt = this.selectionStart;
			var selSp = this.selectionEnd;
			var shift = ev.shiftKey;
			var value = this.value;
			var stt = 0
			var stp = 0;
			var x	= value.substring(selSt,selSp);
				
			if(shift)
			{
				this.value = value.substring(0,selSt).replace(/((?:.*\r?\n)*)([^\r\n]+$)/gi,function(a,b,c)
				{
					x = c+x;
					return b;
				});
				
				if(x.substring(0,1)=="\t")
				stt++;
				
				this.value += x.replace(/(\r?\n|^)(\t+)/gi,function(a,b,c)
				{
					stp++;
					return b+c.substring(1);
				})+value.substring(selSp);
					
				this.selectionStart	= selSt-stt;
				this.selectionEnd	= selSp-stp;
				
				return;
			}
			
			if(selSt == selSp)
			{
				this.value = this.value.substring(0,selSt)+"\t"+this.value.substring(selSt);
				this.selectionStart	= selSt+1;
				this.selectionEnd	= selSp+1;
				
				return;
			}
			
			x = value.substring(selSt,selSp);
			
			this.value = value.substring(0,selSt).replace(/((?:.*\r?\n)*)([^\r\n]+$)/gi,function(a,b,c)
			{
				x = c+x;
				return b;
			});
			
			this.value += x.replace(/(\r?\n|^)/gi,function(a,b)
			{
				stp++;
				return b+"\t";
			})+value.substring(selSp);
				
			this.selectionStart	= selSt+1;
			this.selectionEnd	= selSp+stp;
		}
	},
	
	close:
	{
		init:function(obj)
		{
			var item = new effect.close.listener(obj);
			
			return item;
		},
		
		listener:function(obj)
		{
			this.obj=obj;
			this.changed=false;
			
			var inp = obj.getElementsByTagName('input');
			var txt = obj.getElementsByTagName('textarea');
			
			this.change = function()
			{
				console.log(this.tagName);
				self.changed=true;
			}
			
			for(var i=0;i<inp.length;i++)
			{
				this.change.attach('change',inp[i]);
			}
			
			for(var i=0;i<txt.length;i++)
			{
				this.change.attach('change',txt[i]);
			}
		}
		
	}
}
