// array which holds the currently opened tags
var tags = new Array();

// currently selected text
var text = "";

// text which is to be added to the post
var AddTxt = "";

// form object that has to be used
var mesg_board = "";

function validatePost(tform, subjectVal, minLength, maxLength)
{
	return validatemessage(tform.message.value, tform.title.value, minLength, maxLength, tform);
}

function editInit()
{
	editor_init();
}

// function to initialize the editor
function editor_init()
{
	if (editor_loaded)
	{
		// editor is already loaded, don't try to load it again, as that would be bad m'kay.
		return;
	}

	if (!is_ie4 && !is_ns4)
	{
		// make all toolbar elements unselectable
		set_unselectable(fetch_object("controlbar"));

		// init buttons
		divs = fetch_object("controlbar").getElementsByTagName("div");
		for (var i  = 0; i < divs.length; i++)
		{
			elm = divs[i];
			switch (elm.className)
			{
				case "imagebutton":
				{
					elm.onmouseover = elm.onmouseout = elm.onmouseup = elm.onmousedown = button_eventhandler;
				}
				break;
			}
		}
	}

	mesg_board = document.forms.adpost;
}

// function to handle incoming events from buttons (part 1)
function button_eventhandler(e, elm)
{
	e = do_an_e(e);

	switch (e.type)
	{
		case "mousedown":
		{
			format_control(elm ? elm : this, "button", "down");
		}
		break;

		case "mouseover":
		case "mouseup":
		{
			format_control(elm ? elm : this, "button", "hover");
		}
		break;

		default:
		{
			format_control(elm ? elm : this, "button", "normal");
		}
	}
}


function getActiveText()
{
	setfocus();
	if (!is_ie || (is_ie && !document.selection))
	{
		return false;
	}

	var sel = document.selection;
	var rng = sel.createRange();
	rng.colapse;
	if (rng != null && (sel.type == "Text" || sel.type == "None"))
	{
		text = rng.text;
	}
	if (mesg_board.message.createTextRange)
	{
		mesg_board.message.caretPos = rng.duplicate();
	}

	return true;
}

function AddText(NewCode)
{
	if (mesg_board.message.createTextRange && mesg_board.message.caretPos)
	{
		var caretPos = mesg_board.message.caretPos;
		caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? NewCode + ' ' : NewCode;
	}
	else
	{
		mesg_board.message.value += NewCode;
	}
	setfocus();
	getActiveText();
	AddTxt = "";
}

function setfocus()
{
	mesg_board.message.focus();
}

function formatting_code(formatting_code, prompttext)
{
	// lets call this when they try and use formatting_code rather than on change
	getActiveText();

	if (text)
	{ // its IE to the rescue
		if (text.substring(0, formatting_code.length + 2 ) == "<" + formatting_code + ">" && text.substring(text.length - formatting_code.length - 3, text.length) == "</" + formatting_code + ">")
		{
			AddTxt = text.substring(formatting_code.length + 2, text.length - formatting_code.length - 3);
		}
		else
		{
			AddTxt = "<" + formatting_code + ">" + text + "</" + formatting_code + ">";
		}
		AddText(AddTxt);
	}
	else if (mesg_board.message.selectionEnd && (mesg_board.message.selectionEnd - mesg_board.message.selectionStart > 0))
	{ // its mozilla and we'll need to re-write entire text
		var start_selection = mesg_board.message.selectionStart;
		var end_selection = mesg_board.message.selectionEnd;
		if (end_selection <= 2)
		{
			end_selection = mesg_board.message.textLength;
		}

		// fetch everything from start of text area to selection start
		var start = (mesg_board.message.value).substring(0, start_selection);
		// fetch everything from start of selection to end of selection
		var middle = (mesg_board.message.value).substring(start_selection, end_selection);
		// fetch everything from end of selection to end of text area
		var end = (mesg_board.message.value).substring(end_selection, mesg_board.message.textLength);

		if (middle.substring(0, formatting_code.length + 2 ) == "<" + formatting_code + ">" && middle.substring(middle.length - formatting_code.length - 3, middle.length) == "</" + formatting_code + ">")
		{
			middle = middle.substring(formatting_code.length + 2, middle.length - formatting_code.length - 3);
		}
		else
		{
			middle = "<" + formatting_code + ">" + middle + "</" + formatting_code + ">";
		}

		mesg_board.message.value = start + middle + end;
	}
	else
	{
		inserttext = prompt(help_phrase["IMAGE_URL"] + "\n<" + formatting_code + ">xxx</" + formatting_code + ">", prompttext);
		if ((inserttext != null) && (inserttext != ""))
		{
			AddTxt = "<" + formatting_code + ">" + inserttext + "</" + formatting_code + ">";
		}
		AddText(AddTxt);
	}

	setfocus();
	return false;
}


function closetag()
{
	getActiveText();
	setfocus();
}

function closeall()
{
	getActiveText();
	setfocus();
}

function fontformat(thevalue, thetype)
{
	getActiveText();

   	if (text)
	{ // its IE to the rescue
		AddTxt = "<FONT " + thetype + "=" + thevalue + ">" + text + "</FONT>";
		AddText(AddTxt);
	}
	else if (mesg_board.message.selectionEnd && (mesg_board.message.selectionEnd - mesg_board.message.selectionStart > 0))
	{ // its mozilla and we'll need to re-write entire text

		var start_selection = mesg_board.message.selectionStart;
		var end_selection = mesg_board.message.selectionEnd;
		if (end_selection <= 2)
		{
			end_selection = mesg_board.message.textLength;
		}

		// fetch everything from start of text area to selection start
		var start = (mesg_board.message.value).substring(0, start_selection);
		// fetch everything from start of selection to end of selection
		var middle = (mesg_board.message.value).substring(start_selection, end_selection);
		// fetch everything from end of selection to end of text area
		var end = (mesg_board.message.value).substring(end_selection, mesg_board.message.textLength);

		middle = "<FONT " + thetype + "=" + thevalue + ">" + middle + "</FONT>";

		mesg_board.message.value = start + middle + end;
	}
	else
	{
		inserttext = prompt(help_phrase["FORMAT_TEXT"] + "\n<FONT " + thetype + "=" + thevalue + ">xxx</FONT>");
		if ((inserttext != null) && (inserttext != ""))
		{
			AddTxt = "<FONT " + thetype +  "=" + thevalue + ">" + inserttext + "</FONT>";
			AddText(AddTxt);
		}
	}

	mesg_board.sizeselect.selectedIndex = 0;
	mesg_board.fontselect.selectedIndex = 0;
	mesg_board.colorselect.selectedIndex = 0;
	setfocus();
	return false;
}