function getOccurances(needle,haystack)
{
	var whereiam=haystack.indexOf(needle);
	var number=0;
	var lenofneedle=needle.length - 1;
	if(whereiam!=-1)
	{
		while(whereiam!=-1)
		{
			number++;
			whereiam=haystack.indexOf(needle,whereiam+lenofneedle);
		}
	}
	return number;
} //getOccurrances

function setSelectionRange(input, selectionStart, selectionEnd)
{
	if (input.setSelectionRange)
	{
		input.focus();
		input.setSelectionRange(selectionStart, selectionEnd);
	}
	else if (input.createTextRange)
	{
		var range = input.createTextRange();
		range.collapse(true);
		range.moveEnd('character', selectionEnd);
		range.moveStart('character', selectionStart);
		range.select();
	}
}

function setCaretToEnd (input)
{
	setSelectionRange(input, input.value.length, input.value.length);
}
function setCaretToBegin (input)
{
	setSelectionRange(input, 0, 0);
}
function setCaretToPos (input, pos)
{
	setSelectionRange(input, pos, pos);
}
function selectString (input, string)
{
	var match = new RegExp(string, "i").exec(input.value);
	if (match)
	{
		setSelectionRange (input, match.index, match.index + match[0].length);
	}
}
function replaceSelection (input, replaceString)
{
	if (input.setSelectionRange)
	{
		var selectionStart = input.selectionStart;
		var selectionEnd = input.selectionEnd;
		input.value = input.value.substring(0, selectionStart) + replaceString + input.value.substring(selectionEnd);
		if (selectionStart != selectionEnd) // has there been a selection
			setSelectionRange(input, selectionStart, selectionStart + replaceString.length);
		else // set caret
			setCaretToPos(input, selectionStart + replaceString.length);
	}
	else if (document.selection)
	{
		var range = document.selection.createRange();
		if (range.parentElement() == input)
		{
			var isCollapsed = range.text == '';
			range.text = replaceString;
			if (!isCollapsed)
			{ // there has been a selection
				//it appears range.select() should select the newly 
				//inserted text but that fails with IE
				range.moveStart('character', -replaceString.length);
				range.select();
			}
		}
	}
}

function insertaroundselect(elem_id,insa,insb)
{
	el=document.getElementById(elem_id);
	if(el.style.display=="none")
	{
    return false;
  }
	el.title=el.scrollTop;
	if(insb)
	{ //there is a second thing to insert
		var numbera=getOccurances(insa,el.value);
		var numberb=getOccurances(insb,el.value);
		var toinsert=insa;
		if(numbera>numberb) toinsert=insb;

		//Browser has setSelectionRange
		if (el.setSelectionRange)
		{
			var begin=el.selectionStart;
			var end=el.selectionEnd;
			if(begin==end)
			{ // cursor not selection
				if(begin==el.value.length)
				{
					el.value+=toinsert; //if at end, just insert correct next piece
					setCaretToEnd(el);
				}
				else
				{
					el.value=el.value.substring(0,begin) + toinsert + el.value.substring(begin,el.value.length);
					setCaretToPos(el, begin + toinsert.length);
				}
			}
			else 
			{
				el.value= el.value.substring(0,begin) + insa + el.value.substring(begin,end) + insb + el.value.substring(end,el.value.length);
				setCaretToPos(el, end + insa.length + insb.length);
			}
		}

		//Browser has createRange
		else if (document.selection && document.selection.createRange)
		{
			el.focus();
			var range = document.selection.createRange();
			if(range.text.length<1)
			{
				range.text= toinsert;		
			}
			else
			{
				range.text = insa + range.text + insb;
				setCaretToEnd(el);
			}
		}

		//Browser Sucks (safari) :(
		else el.value+= toinsert;
	} //there is a second thing to insert.

	else
	{ //there is only one item to insert
		if(el.setSelectionRange)
		{
			var begin=el.selectionStart;
			el.value=el.value.substring(0,el.selectionStart) + insa + el.value.substring(el.selectionStart,el.value.length);
			setCaretToPos(el, begin + insa.length);
		}
		else if(document.selection && document.selection.createRange)
		{
			el.focus();
			var range=document.selection.createRange();
			range.text = insa + range.text;
		}
		else
		{
			el.value+=insa;
		}
	} //there is only one item to insert
	el.scrollTop=el.title;
}

function getlastOpenedTag(elem_id,insa,insb)
{
	el=document.getElementById(elem_id);
	var numbera=getOccurances(insa,el.value);
	var numberb=getOccurances(insb,el.value);
	if(numbera>numberb)
	{
		var position=el.value.indexOf(insa);
		var last=0;
		var lenofinsa=insa.length - 1;
		if(position!=-1)
		{
			while(position!=-1)
			{
				last=position;
				position=el.value.indexOf(insa,position+lenofinsa);
			}
			return last;
		}
	}
	return -1;
}

function closealltags(elem_id)
{
	el=document.getElementById(elem_id);
	var tags = new Array();
	tags[tags.length] = {tag:"[/b]", last:getlastOpenedTag(elem_id,'[b]','[/b]')};
	tags[tags.length] = {tag:"[/i]", last:getlastOpenedTag(elem_id,'[i]','[/i]')};
	tags[tags.length] = {tag:"[/u]", last:getlastOpenedTag(elem_id,'[u]','[/u]')};
	tags.sort(sortUnclosedTags);
	for(var i=0; i<tags.length;i++)
	{
		if(tags[i].last != -1)
		{
			el.value+=tags[i].tag;
		}
	}
}

function sortUnclosedTags(a, b)
{
	return b.last - a.last;
}

function openUrlBox(elem_id,call_button)
{
  el=document.getElementById(elem_id);
	if(el.style.display=="none")
	{
    return false;
  }
  var cursorpos=0;
  var end=0;
  var selection="";
  if (el.setSelectionRange)
	{
    cursorpos=el.selectionStart;
    end=el.selectionEnd;
    selection=el.value.substring(cursorpos,end);
	}
	else if(document.selection && document.selection.createRange)
	{
		el.focus();
		var range	= document.selection.createRange();
		selection = range.text;
		var c	 = "\001";
		var dul	= range.duplicate();
		dul.moveToElementText(el);
		range.text = c;
		cursorpos = (dul.text.indexOf(c));
		range.moveStart('character',-1);
	    range.text = selection;
		if (cursorpos==-1)
		{
			cursorpos=el.value.length;
		}
		else
		{
			for(i=0;i<cursorpos;i++)
			{
				if(el.value.charAt(i)=="\n")
				{
					cursorpos--;
				}
			}
		}
		end=cursorpos + selection.length;
	}
	document.getElementById("link_button").scroll=el.scrollTop;
	document.getElementById("link_button").target=elem_id;
	document.getElementById("link_button").cursor=cursorpos;
	document.getElementById("link_button").cursorend=end;
	document.getElementById("link_text").value=selection;
	document.getElementById("link_url").value="http://";
	show_hide_div("url_box",call_button.id,"bottom","left");
}

function insertURL()
{
  var el=document.getElementById(document.getElementById("link_button").target);
  var cursor=document.getElementById("link_button").cursor;
  var scroll=document.getElementById("link_button").scroll;
  var text=document.getElementById("link_text").value;
  var cursorend=document.getElementById("link_button").cursorend;
  var url=document.getElementById("link_url").value;
  show_hide_div("url_box");
  setSelectionRange(el,cursor,cursorend);
  replaceSelection(el,"[url=" + url + "]" + text + "[/url]");
  setCaretToPos(el, cursor+url.length+text.length+12);
/* 
	else
	{
			el.value+=" [url=" + url + "]" + text + "[/url] ";
	}*/
	el.scrollTop=scroll;
	
	
}
