
function BBTextArea(taid, toolbarid) {
	this.ta=document.getElementById(taid);
	this.toolbar=document.getElementById(toolbarid);
	
	this.ta.parent=this;

	this.toolbar.parent=this;
	this.toolbar.onclick=this.onToolbarClick;
	
	this.startTags=new Array();
	
	
	bbo=this.ta;
	while(bbo && bbo.nodeName!="FORM" && bbo.parentNode)
		bbo=bbo.parentNode;
	
	if(bbo)
	{
		bbo.onsubmit=this.closeAllTags;
		this.form=bbo;
		this.form.parent=this;
	}
		
	
		
}

BBTextArea.prototype.onToolbarClick = function(ev) {
	var target=null;
	if (ev) 
		target=ev.target; 
	else 
		target=window.event.srcElement;
	
	if(!target)
		return;
	
	var id=target.id;
	
	var index=id.lastIndexOf(":")+1;
	var type=id.substring(index);
	
	var startTag;
	var endTag;
	
	//alert(type);
	
	switch(type)
	{
		case "bold":
		{
			startTag="[B]";
			endTag="[/B]";
			break;
		}
		case "underline":
		{
			startTag="[U]";
			endTag="[/U]";
			break;
		}
		case "italic":
		{
			startTag="[I]";
			endTag="[/I]";
			break;
		}
		case "quote":
		{
			startTag="[QUOTE]";
			endTag="[/QUOTE]";
			break;
		}
		case "list":
		{
			startTag="[LIST]";
			endTag="[/LIST]";
			break;
		}
		case "img":
		{
			startTag="[IMG]";
			endTag="[/IMG]";
			break;
		}
		case "url":
		{
			startTag="[URL]";
			endTag="[/URL]";
			break;
		}
		
		//specific
		case "closeall":
		{
			this.parent.closeAllTags();
			return;
			break;
		}
		
		//emotions
		case "smile":
		{
			startTag=" :) ";
			break;
		}
		case "sad":
		{
			startTag=" :( ";
			break;
		}
		case "shocked":
		{
			startTag=" :o ";
			break;
		}
		case "biggrin":
		{
			startTag=" :D ";
			break;
		}
		case "wink":
		{
			startTag=" ;) ";
			break;
		}
		case "tongue":
		{
			startTag=" :p ";
			break;
		}
		case "cry":
		{
			startTag=" :cry: ";
			break;
		}
		case "uhh":
		{
			startTag=" :uhh: ";
			break;
		}
		
		default:
			return
		break;
	}
	
	
	
	
	this.parent.ta.focus();
	if(document.all)
	{
		var range=document.selection.createRange();
		if(range.text!=""  || endTag==null)
			range.text=startTag + range.text + (endTag !=null ? endTag : ""); 
		else
		{
			if(!this.parent.findStartTag(startTag))
			{
				this.parent.ta.value=this.parent.ta.value+startTag;
				this.parent.addStartTag(startTag);
				this.parent.markButton(target,true);
			}
			else
			{
				this.parent.ta.value=this.parent.ta.value+endTag;
				this.parent.removeStartTag(startTag);
				this.parent.markButton(target,false);
			}
		}
			
	}
	else
	{		
		var start=this.parent.ta.selectionStart;
		var end=this.parent.ta.selectionEnd;
		var value=this.parent.ta.value;
		
		var selection=value.substring(start, end);
		
		if(selection!="" || endTag==null)
			value=value.substring(0,start) + startTag + selection + (endTag !=null ? endTag : "") + value.substring(end)
		else
		{
			//alert(this.parent.findStartTag(startTag));
			if(!this.parent.findStartTag(startTag))
			{
				value=value+startTag;
				this.parent.addStartTag(startTag);
				this.parent.markButton(target,true);
			}
			else
			{
				value=value+endTag;
				this.parent.removeStartTag(startTag);
				this.parent.markButton(target,false);
			}
		}
			
		
		this.parent.ta.value=value;
	}
}

BBTextArea.prototype.findStartTag = function(tagName)
{
	for(var i=0; i<this.startTags.length; i++)
		if(this.startTags[i]==tagName)
			return true;
	
	return false;
}

BBTextArea.prototype.addStartTag = function(tagName)
{
	this.startTags[this.startTags.length]=tagName;
	
}

BBTextArea.prototype.removeStartTag = function(tagName)
{
	for(var i=0; i<this.startTags.length; i++)
		if(this.startTags[i]==tagName)
			this.startTags[i]=null;
}

BBTextArea.prototype.closeAllTags = function()
{
	var current=this;
	//alert(current.nodeName + ": " + current.parent);
	if(current.nodeName=="FORM" && current.parent)
	{
		current=current.parent;
	}
	var value="";
	for(var i=current.startTags.length-1; i>=0; i--)
	{
		var tagName=current.startTags[i];
		if(tagName!=null)
		{
			value+=tagName.replace("[", "[/");
			current.startTags[i]=null;
		}
	}
	
	current.ta.value+=value;
	
	
	var children;
	if(current.toolbar.children)
		children=current.toolbar.children;
	else
		children=current.toolbar.childNodes;
	
	for(var i=0; i<children.length; i++)
	{
		var child=children[i];
		//alert(child.value);
		if(child.nodeName && child.tagName=="INPUT" && child.value.substring(child.value.length-1)=="*")
			child.value=child.value.substring(0,child.value.length-1);
			
	}
	
	return value;
}

BBTextArea.prototype.markButton = function(button, mark)
{
	if(mark)
	{
		if(button.value.substring(button.value.length)!="*")
			button.value+="*";
			
	}
	else
	{
		if(button.value.substring(button.value.length-1)=="*")
			button.value=button.value.substring(0,button.value.length-1);
	}
}