var doclibsOpened = Array();
var currentTextarea;

var rml_buttons = Array('bold', 'italic', 'underline', 'strike','hline',
						/*'sup', 'sub','hline',*/
						'align_left', 'align_center', 'align_right','hline',
						'list_bullet', 'list_num','hline',
						/*'color_bg', */'color_fg','hline',
						'link', 'image','hline',
						'table', 'hr','hline',
						'maximize', 'documentlibrary', 'smileys');

function setCurrentTextarea(window)
{
	currentTextarea = doclibsOpened[window];
};

function getToolbar( showDocumentLibrary )
{
	var x = createDOMNode('div', {"class": "rmltoolbar"}, []);

	var image;
	for(var i = 0; i < rml_buttons.length;i++)
	{
		if(rml_buttons[i] == 'documentlibrary' && !showDocumentLibrary)
			continue;

		if(rml_buttons[i] == 'maximize' && events.indexOf(stretchTextareas) > -1)
			continue;

		if(rml_buttons[i] == 'smileys')
		{
			var smileys = (new DOMQuery('div#smileys')).get(0);
			if(!smileys)
				continue;

			var smileysClone = smileys.cloneNode(true);
			var smileysContainer = getSiblingNode(smileys, 'up', 'dd');
			var smileysContainerLabel = getSiblingNode(smileysContainer, 'previous', 'dt');

			smileysContainerLabel.parentNode.removeChild(smileysContainerLabel);
			smileysContainer.parentNode.removeChild(smileysContainer);

			x.appendChild(smileysClone);
		}

		image = document.createElement('img');

		if(rml_buttons[i] != 'hline')
			addEvent(image, 'click', handleRMLToolbarClick);
		else
			jscss('add',image,'hline','');

		image.id = 'rmltoolbar_'+rml_buttons[i];
		image.src = board_template_url+'img/icons/toolbar/'+rml_buttons[i]+'.gif';
		x.appendChild(image);
	}

	return x;
};

function handleRMLToolbarClick()
{
	if(this.parentNode && this.parentNode.nextSibling && this.parentNode.nextSibling.tagName == 'TEXTAREA')
	{
		currentTextarea = this.parentNode.nextSibling;
	}

	var listtype, my_link, my_title, sel, rows, type, out;

	switch(this.id)
	{
		case 'rmltoolbar_bold':
			wrapSelection('[b]','[/b]');
			return;
			break;
		case 'rmltoolbar_italic':
			wrapSelection('[i]','[/i]');
			return;
			break;
		case 'rmltoolbar_underline':
			wrapSelection('[u]','[/u]');
			return;
			break;
		case 'rmltoolbar_strike':
			wrapSelection('[s]','[/s]');
			return;
			break;
		case 'rmltoolbar_sup':
			wrapSelection('[sup]','[/sup]');
			return;
			break;
		case 'rmltoolbar_sub':
			wrapSelection('[sub]','[/sub]');
			return;
			break;
		case 'rmltoolbar_align_left':
			wrapSelection('[left]','[/left]');
			return;
			break;
		case 'rmltoolbar_align_center':
			wrapSelection('[center]','[/center]');
			return;
			break;
		case 'rmltoolbar_align_right':
			wrapSelection('[right]','[/right]');
			return;
			break;
		case 'rmltoolbar_list_bullet':
			listtype = '*';
		case 'rmltoolbar_list_num':
			if(typeof listtype == 'undefined')
				listtype = '1';
			var type = '*';
			var sel = getCurrentSelection();
			var rows = sel.split('\n');
			var out = '[list='+listtype+']';
			for(var i = 0, row;(row=rows[i]);i++)
			{
				if(row != '')
					out += '\n\t[li]'+row+'[/li]';
			}

			if(i==0)
			{
				out += '\n\t[li]'+row+'[/li]';
			}

			out += '\n[/list]';
			setSelection(out);
			return;
			break;
		case 'rmltoolbar_color_fg':
			attachColorSelector(this, function(hexColor) { wrapSelection("[fgcolor=" + hexColor + "]", "[/fgcolor]"); } );
			break;
		case 'rmltoolbar_color_bg':
			attachColorSelector(this, function(hexColor) { wrapSelection("[bgcolor=" + hexColor + "]", "[/bgcolor]"); } );
			break;
		case 'rmltoolbar_table':
			sel = getCurrentSelection();
			rows = sel.split('\n');
			out = '[table]';
			var j;
			for(var i = 0, row;(row=rows[i]);i++)
			{
				out += '\n[tr]';
				var cells = row.split('\t');
				for(j=0, cell;(cell=cells[j]);j++)
				{
					out += '\n\t[td]'+cell+'[/td]';
				}
				out += '\n[/tr]';
			}
			out += '\n[/table]';

			setSelection(out);
			return;
			break;
		case 'rmltoolbar_image':
			if(getCurrentSelection() != '')
			{
				wrapSelection('[img]', '[/img]');
				return;
			}
			my_link = prompt(getText('j_toolbar', 'enter_img_url'),"http://");

			if (my_link != null && my_link !='http://')
			{
				lft="[img]" + my_link;
				rgt="[/img]";
				wrapSelection(lft, rgt);
			}
			return;
			break;
		case 'rmltoolbar_link':
			my_link = prompt("Enter URL:","http://");
			if (my_link == null)
				return;

			var selection = getCurrentSelection();
			my_title = prompt(getText('j_toolbar', 'enter_title'),"");

			if ( selection == '' )
			{
				if(my_title != '' )
					lft="[url=" + my_link + "]"+my_title;
				else
					lft="[url=" + my_link + "]"+my_link;
			}
			else
			{
				if(my_title != '' )
					lft="[url=" + my_link + ","+my_title+"]";
				else
					lft="[url=" + my_link + "]";
			}

			rgt="[/url]";
			wrapSelection(lft, rgt);
			return;
			break;
		case 'rmltoolbar_documentlibrary':
			var ref = window.open(board_script_url+'/list_documents_small','DocumentLibrary','width=785,height=650,resizable=yes,scrollbars=yes');
			doclibsOpened[ref] = this.parentNode.nextSibling;
			break;
		case 'rmltoolbar_smileys':
			toggleSmileys();
			addEvent(get_rmltextarea(), 'focus', hideSmileys);
			addEvent(get_rmltextarea(), 'blur', hideSmileys);
			break;
		case 'rmltoolbar_maximize':
			var txtarea = get_rmltextarea();
			if(jscss('check',txtarea,'extra-large',''))
			{
				jscss('remove',txtarea,'extra-large','');
				jscss('remove',txtarea,'large','');
			}
			else if( jscss('check',txtarea,'large') )
			{
				jscss('add',txtarea,'extra-large','');
			}
			else
			{
				jscss('add',txtarea,'large','');
			}
			break;
		case 'rmltoolbar_hr':
			setSelection('[hr]');
			break;
	}
};

function toggleSmileys()
{
	jscss('toggle', new DOMQuery('div#smileys').get(0), 'show');
};
function hideSmileys()
{
	jscss('remove', new DOMQuery('div#smileys').get(0), 'show');
};

function get_rmltextarea()
{
	if(typeof currentTextarea == 'undefined')
		currentTextarea = new DOMQuery('textarea#rml_textarea').get(0);
	return currentTextarea;
};

function getContentFromOriginal()
{
	get_rmltextarea().value=window.opener.get_rmltextarea().value;
};

function setContentToOriginal()
{
	window.opener.get_rmltextarea().value=get_rmltextarea().value;window.close();
};

function rescaleTextarea(txtarea)
{
	if (typeof document.all != 'undefined')
	{
		txtarea.style.height=(document.body.clientHeight-80)+'px';
		txtarea.style.width=(document.body.clientWidth-15)+'px';
	}
	else
	{
		txtarea.style.height=(window.innerHeight-80)+'px';
		txtarea.style.width=(window.innerWidth-15)+'px';
	}
};

function wrapSelection(lft, rgt)
{
	var txtarea = get_rmltextarea();

	if (typeof txtarea.selectionStart == 'undefined')
	{
		IEWrap(txtarea, lft, rgt);
	}
	else if (document.getElementById)
	{
		mozWrap(txtarea, lft, rgt);
	}
};

function mozWrap(txtarea, lft, rgt)
{
	var selLength = txtarea.textLength;
	var selStart = txtarea.selectionStart;
	var selEnd = txtarea.selectionEnd;
	if (selEnd==1 || selEnd==2)
	{
		selEnd = selLength;
	}
	var s1 = txtarea.value.substring(0,selStart);
	var s2 = txtarea.value.substring(selStart, selEnd);
	var s3 = txtarea.value.substring(selEnd, selLength);
	txtarea.value = s1 + lft + s2 + rgt + s3;
};

function IEWrap(txtarea, lft, rgt)
{
	strSelection = document.selection.createRange().text;
	if (strSelection != "")
	{
		document.selection.createRange().text = lft + strSelection + rgt;
	}
	else
	{
		txtarea.value += lft + rgt;
	}
};

function getCurrentSelection()
{
	if (typeof document.selection != 'undefined' && document.selection.createRange)
	{
		return IEGet();
	}
	else if (document.getElementById)
	{
		var txtarea = get_rmltextarea();
		return mozGet(txtarea);
	}
	return '';
};

function mozGet(txtarea)
{
	var selLength = txtarea.textLength;
	var selStart = txtarea.selectionStart;
	var selEnd = txtarea.selectionEnd;
	if (selEnd==1 || selEnd==2)
		selEnd=selLength;
	return (txtarea.value).substring(selStart, selEnd);
};

function IEGet()
{
	return document.selection.createRange().text;
};

function setSelection(str)
{
	var txtarea = get_rmltextarea();
	if (typeof document.all != 'undefined')
	{
		IESet(txtarea, str);
	}
	else if (document.getElementById)
	{
		mozSet(txtarea, str);
	}
};

function mozSet(txtarea, str)
{
	var selLength = txtarea.textLength;
	var selStart = txtarea.selectionStart;
	var selEnd = txtarea.selectionEnd;
	if (selEnd==1 || selEnd==2)
		selEnd=selLength;
	var s1 = txtarea.value.substring(0,selStart);
	var s2 = txtarea.value.substring(selStart, selEnd);
	var s3 = txtarea.value.substring(selEnd, selLength);
	txtarea.value = s1 + str + s3;
};

function IESet(txtarea, str)
{
	strSelection = document.selection.createRange().text;

	if (strSelection!="")
	{
		document.selection.createRange().text = str;
	}
	else
	{
		txtarea.value += str;
	}
};

function storeCursor()
{
	this.cursorPos = document.selection.createRange().duplicate();
};

function putStr( text )
{
	var target = get_rmltextarea();

	if ( target )
	{
		if (typeof document.all != 'undefined' && target.cursorPos)
		{
			var cursorPos = target.cursorPos;
			cursorPos.text = cursorPos.text.charAt(cursorPos.text.length - 1) == ' ' ? text + ' ' : text;
		}
		else
		{
			try
			{
				wrapSelection('', text);
			}
			catch(e)
			{
				target.value += text;
			}
		}

		target.focus();
	}
};
