MI.editor = {

	e_attributes: Array(
	Array("Boldify Text", "icons/bb_bold.gif", "[b]", "[/b]"),
	Array("Italicize Text", "icons/bb_italic.gif", "[i]", "[/i]"),
	Array("Underline Text", "icons/bb_underline.gif", "[u]", "[/u]"),
	Array("Strike Through Text", "icons/bb_strike.gif", "[s]", "[/s]"),
	false,
	Array("Add Code", "icons/bb_code.gif", "[code]", "[/code]"),
	Array("Add Image", "icons/bb_image.gif", "image"),
	Array("Add Link", "icons/bb_link.gif", "link"),
	//false,
	//Array("Add Bullet List", "icons/bb_li_bullet.gif", "list", "bullet"),
	//Array("Add Numbered List", "icons/bb_li_number.gif", "list", "number"),
	false,
	Array("Big Grin", "icons/emo_big_grin.gif", "[xD]"),
	Array("Grin", "icons/emo_grin.gif", "[:D]"),
	Array("Wink", "icons/emo_wink.gif", "[;)]"),
	Array("Happy", "icons/emo_happy.gif", "[:)]"),
	Array("Sad", "icons/emo_sad.gif", "[:(]"),
	Array("Tongue", "icons/emo_tongue.gif", "[:P]"),
	Array("Surprised", "icons/emo_surprised.gif", "[:O]")
	),
	
	e_custom: Array(
	"image", 
	"link",
	"list"
	),
	
	e_buttons: "<label>\n%\n</label>",
	
	e_validate: function()
	{
		if (!document.getElementById) MI.editor = false;
	},
	
	e_textarea: new String(),
	
	e_input_text: new String(),
	
	e_text: function()
	{
		return document.getElementById(MI.editor.e_textarea);	
	},
	
	e_load: function(textarea)
	{
		MI.editor.e_validate();
		
		MI.editor.e_textarea = textarea;
		
		var buttons = new String();
		
		for (i = 0; i < MI.editor.e_attributes.length; i += 1)
		{
			if (typeof(MI.editor.e_attributes[i]) == "object")
			{
				var tags = (MI.editor.e_attributes[i][3] == null) ? "'" + MI.editor.e_attributes[i][2] + "'" : "'" + MI.editor.e_attributes[i][2] + "', '" + MI.editor.e_attributes[i][3] + "'";
					
				buttons += '<input title="' + MI.editor.e_attributes[i][0] + '" type="button" '
				+ 'style="background-image:url(\'' + MI.editor.e_attributes[i][1] + '\');" '
				+ 'onclick="MI.editor.e_tag(' + tags + '); return false;" />\n';
			}
			else
			{
				buttons += '</label>\n<label>\n';	
			}
		}
		
		MI.editor.e_buttons = MI.editor.e_buttons.replace(/%/, buttons);
	},
	
	e_tag: function(start, end)
	{
		if (!start && !end) return false;
		
		for (i = 0; i < MI.editor.e_custom.length; i += 1)
		{
			if (start == MI.editor.e_custom[i])
			{
				MI.editor.e_tag_c(start);
				return false;
			}
		}
		
		if (!end)
			MI.editor.e_tag_s(start);
		else
			MI.editor.e_tag_w(start, end);
	},
	
	e_tag_c: function(start, end)
	{
		switch (start)
		{
			case "image":
			
				var ask = confirm("Do you wish to add an image?");
				if (!ask) return false;
				
				var builtImage = "[img";
				
				var url = prompt("Enter the url of the image", "");
				if (url == "" || url == null) return false;
				builtImage += " src='" + url + "'";
				
				//var alt = prompt("Enter the alternative text of the image (optional)", "");
				//if (alt != "" && alt != null) builtImage += " alt='" + alt + "'";
				
				builtImage += "/]";
				
				return MI.editor.e_tag(builtImage);
				
			break;
			
			case "link":
			
				var ask = confirm("Do you wish to add a link?");
				if (!ask) return false;
				
				var href = prompt("Enter link url", "http://");
				if (href == "http://" || href == null) return false;
				
				var value = prompt("Enter link value (optional)", "");
				return MI.editor.e_tag((value != null && value != "") ? "[url href='" + href + "']" + value + "[/url]" : "[url]" + href + "[/url]");
				
			break;
			
			case "list":
			
				var type = (end == "number") ? "number" : "bullet";				
				var ask = confirm("Do you wish to add a \"" + type + "ed\" list?");
				
				var listItems = new Array();
				var builtList;
				
				while (ask)
				{
					var ask = prompt("Add list item", ""); 
					if (ask != null && ask != "") listItems.push(ask);
				}
				
				if (listItems.length == 0) return false;
								
				builtList = "[list type='" + type + "']\n";
				
				for (i = 0; i < listItems.length; i += 1)
				{
					builtList += "[*]" + listItems[i] + "[/*]\n";	
				}
				
				builtList += "[/list]";				
				MI.editor.e_tag(builtList);
			
			break;
		}
	},
	
	e_tag_s: function(start)
	{
		var textarea = MI.editor.e_text();

		textarea.focus();
		
		if (textarea.setSelectionRange)
		{		
			var cursorPos = textarea.selectionStart;
			
			var s1 = textarea.value.substr(0, cursorPos);
			var s2 = textarea.value.substr(cursorPos);
			
			cursorPos += start.length;
			
			return textarea.value = s1 + start + s2, textarea.selectionStart = cursorPos, textarea.selectionEnd = cursorPos;
		}
		
		if (textarea.isTextEdit)
		{
			var text = document.selection.createRange().text;
			return document.selection.createRange().text = start + text;
		}
		
		return textarea.value += start;
	},
	
	e_tag_w: function(start, end)
	{
		var textarea = MI.editor.e_text();
		
		textarea.focus();
		
		if (textarea.setSelectionRange)
		{
			var cursorStart = textarea.selectionStart;
			var cursorEnd = textarea.selectionEnd;

			var s1 = textarea.value.substr(0, cursorStart);
			var s2 = textarea.value.substr(cursorStart, (cursorEnd - cursorStart));
			var s3 = textarea.value.substr(cursorEnd);
			
			cursorStart += start.length + s2.length + end.length;
			
			return textarea.value = s1 + start + s2 + end + s3, textarea.selectionStart = cursorStart, textarea.selectionEnd = cursorStart;
		}
		
		if (textarea.isTextEdit)
		{
			var text = document.selection.createRange().text;
			return document.selection.createRange().text = start + text + end;
		}
		
		return textarea.value += start + end;
	},
	
	e_effects: function(form)
	{
		var input = form.getElementsByTagName("input");
		var textarea = MI.editor.e_text();
		
		for (i = 0; i < input.length; i += 1)
		{
			input[i].disabled = "disabled";
			
			if (input[i].type == "submit")
			{
				input[i].style.cssText = "background-color:#fff;";
				MI.editor.e_input_text = input[i].value;
				input[i].value = "Please Wait...";
			}
		}
		
		textarea.disabled = "disabled";
		
		setTimeout(function()
		{
			textarea.disabled = "";
			form.submit();
			textarea.disabled = "disabled";
			
			setTimeout(function()
			{
				for (i = 0; i < input.length; i += 1)
				{
					input[i].disabled = "";
					
					if (input[i].type == "submit")
					{
						input[i].style.cssText = "";
						input[i].value = MI.editor.e_input_text;
					}
				}
				
				textarea.disabled = "";
			}
			, 1500);
		}
		, 1500);
				
		return false;
	},
	
	e_write: function()
	{
		document.write(MI.editor.e_buttons)
	}
	
};