function TextAreaYoucodeAll()
{
	$$('.textareayoucode').each(function(el)
	{
		TextAreaYoucode(el);
	})
}

function getYoucodeTextareaFromButton(button)
{
	var ib = $(button);
	var master = button.getParent().getParent();
	var textarea = master.getElements('textarea')[0];
	return textarea;
}

function youcode_text(button, tag)
{
	var textarea = getYoucodeTextareaFromButton(button);
	
	if (document.selection)
	{
		textarea.focus();
		sel = document.selection.createRange();
		sel.text = '['+tag+']'+sel.text+'[/'+tag+']';
	}
	else if (textarea.selectionStart !== undefined)
	{
		var tem= textarea.value;
		var sPos = textarea.selectionStart;
		var ePos = textarea.selectionEnd;
		textarea.value = tem.substring(0, sPos)+ '['+tag+']' + tem.substring(sPos, ePos) + '[/' + tag + ']' + tem.substring(ePos);
	}
}

function select_get(textarea)
{
	if (document.selection)
	{
		textarea.focus();
		sel = document.selection.createRange();
		return sel.text;
	}
	else if (textarea.selectionStart !== undefined)
	{
		var tem= textarea.value;
		var sPos = textarea.selectionStart;
		var ePos = textarea.selectionEnd;
		return tem.substring(sPos, ePos);
	}
}

function select_set(textarea, select)
{
	if (document.selection)
	{
		textarea.focus();
		sel = document.selection.createRange();
		sel.text = select;
	}
	else if (textarea.selectionStart !== undefined)
	{
		var tem= textarea.value;
		var sPos = textarea.selectionStart;
		var ePos = textarea.selectionEnd;
		textarea.value = tem.substring(0, sPos) + select + tem.substring(ePos);
	}
}

function youcode_url(button)
{
	var textarea = getYoucodeTextareaFromButton(button);
	
	var select = select_get(textarea);
	
	var url = prompt('Url:');
	if(url == null)
		return;
		
	if(select == "")
		select = prompt("Describing text:", url);
	if(select == null)
		return;
		
	if(select == "")
		select = url;
		
	select = '[url='+url+']'+select+'[/url]';
	
	select_set(textarea, select);
}

function youcode_mail(button)
{
	var textarea = getYoucodeTextareaFromButton(button);
	
	var select = select_get(textarea);
	
	var url = prompt('mail adress:');
	if(url == null)
		return;
		
	if(select == "")
		select = prompt("Describing text:", url);
	if(select == null)
		return;
		
	if(select == "")
		select = url;
	select = '[mail='+url+']'+select+'[/mail]';
	
	select_set(textarea, select);
}

function youcode_img(button)
{
	var textarea = getYoucodeTextareaFromButton(button);
	
	var select = select_get(textarea);
	
	if(select == "")
		select = prompt("Image link:");
	if(select == null)
		return;
		
	select = '[img]'+select+'[/img]';
	
	select_set(textarea, select);
}

function youcode_youtube(button)
{
	var textarea = getYoucodeTextareaFromButton(button);
	
	var select = prompt("Youtube:");
	if(select == null)
		return;
	select = '[youtube]'+select+'[/youtube]';
	
	select_set(textarea, select);
}

function youcode_dailymotion(button)
{
	var textarea = getYoucodeTextareaFromButton(button);
	
	var select = prompt("Dailymotion:");
	if(select == null)
		return;
	select = '[dailymotion]'+select+'[/dailymotion]';
	
	select_set(textarea, select);
}

function youcode_list(button)
{
	var textarea = getYoucodeTextareaFromButton(button);
	
	var select = "[list]";
	var last = "";
	do
	{
		last = prompt("List element (leave blank to stop");
		if(last != null && last != "")
			select = select + "\n[*]" + last;
	} while(last != null && last != "")
	select = select + "\n[/list]";
	
	select_set(textarea, select);
}

function youcode_text_select(button, tag)
{
	if($(button).get('value') == -1)
		return;
		
	var textarea = getYoucodeTextareaFromButton(button);
	var select = $(button).value;
	
	if (document.selection)
	{
		textarea.focus();
		sel = document.selection.createRange();
		sel.text = '['+tag+'='+select+']'+sel.text+'[/'+tag+']';
	}
	else if (textarea.selectionStart !== undefined)
	{
		var tem= textarea.value;
		var sPos = textarea.selectionStart;
		var ePos = textarea.selectionEnd;
		textarea.value = tem.substring(0, sPos)+ '['+tag+'='+select+']' + tem.substring(sPos, ePos) + '[/' + tag + ']' + tem.substring(ePos);
	}
	
	$(button).set('value', -1);
}

function TextAreaYoucode(textarea)
{
	var alignements = 
	[
		'left',
		'center',
		'right'
	];
	
	var sizes = 
	[
		'6px',
		'8px',
		'10px',
		'12px',
		'14px',
		'18px',
		'22px',
		'25px',
		'30px'
	];
	
	var colors = 
	[
		['red', '#FF0000'],
		['green', '#00FF00'],
		['blue', '#0000FF']
	];
	
	var fonts = 
	[
		'Arial',
		'Verdana',
		'Sans-serif'
	];
	
	var outerdiv = new Element('div.youcode_textarea_master').wraps(textarea);
	var innerdiv = new Element('div.youcode_textarea_buttons').inject(outerdiv, 'top');
	
	/* NORMAL */
	
	new Element('a', 
	{
		href: '#',
		onclick: 'youcode_text(this, "b")',
		html: 'b',
		style: 'font-weight:bold'
	}).inject(innerdiv);
	
	new Element('a', 
	{
		href: '#',
		onclick: 'youcode_text(this, "i")',
		html: 'i',
		style: 'font-style:italic'
	}).inject(innerdiv);
	
	new Element('a', 
	{
		href: '#',
		onclick: 'youcode_text(this, "u")',
		html: 'u',
		style: 'text-decoration:underline'
	}).inject(innerdiv);
	
	new Element('a', 
	{
		href: '#',
		onclick: 'youcode_text(this, "s")',
		html: 's',
		style: 'text-decoration:line-through'
	}).inject(innerdiv);
	
	new Element('a', 
	{
		href: '#',
		onclick: 'youcode_text(this, "sup")',
		html: 'sup',
	}).inject(innerdiv);
	
	new Element('a', 
	{
		href: '#',
		onclick: 'youcode_text(this, "sub")',
		html: 'sub',
	}).inject(innerdiv);
	
	new Element('a', 
	{
		href: '#',
		onclick: 'youcode_text(this, "code")',
		html: 'Code',
	}).inject(innerdiv);
	
	/* SPECIAL */
	
	new Element('a', 
	{
		href: '#',
		onclick: 'youcode_url(this)',
		html: 'url'
	}).inject(innerdiv);
	
	new Element('a', 
	{
		href: '#',
		onclick: 'youcode_mail(this)',
		html: 'mail'
	}).inject(innerdiv);
	
	new Element('a', 
	{
		href: '#',
		onclick: 'youcode_img(this)',
		html: 'img'
	}).inject(innerdiv);
	
	new Element('a', 
	{
		href: '#',
		onclick: 'youcode_youtube(this)',
		html: 'Youtube'
	}).inject(innerdiv);
	
	new Element('a', 
	{
		href: '#',
		onclick: 'youcode_dailymotion(this)',
		html: 'Dailymotion'
	}).inject(innerdiv);
	
	new Element('a', 
	{
		href: '#',
		onclick: 'youcode_list(this)',
		html: 'List'
	}).inject(innerdiv);
	
	new Element('br').inject(innerdiv);
	
	/*align*/
	var alignselect = new Element('select',
	{
		onchange: 'youcode_text_select(this, "align")'
	}).inject(innerdiv);
	
	new Element('option',
	{
		html: 'align',
		value: -1
	}).inject(alignselect);
		
	for(var i = 0; i < alignements.length; i++)
	{
		new Element('option',
		{
			html: alignements[i],
			value: alignements[i]
		}).inject(alignselect);
	}
	
	/*size*/
	var sizeselect = new Element('select',
	{
		onchange: 'youcode_text_select(this, "size")'
	}).inject(innerdiv);
	
	new Element('option',
	{
		html: 'size',
		value: -1
	}).inject(sizeselect);
		
	for(var i = 0; i < sizes.length; i++)
	{
		new Element('option',
		{
			html: sizes[i],
			value: sizes[i]
		}).inject(sizeselect);
	}
	
	/*font*/
	var fontselect = new Element('select',
	{
		onchange: 'youcode_text_select(this, "font")'
	}).inject(innerdiv);
	
	new Element('option',
	{
		html: 'font',
		value: -1
	}).inject(fontselect);
		
	for(var i = 0; i < fonts.length; i++)
	{
		new Element('option',
		{
			html: fonts[i],
			value: fonts[i]
		}).inject(fontselect);
	}
	
	/*color*/
	var colorselect = new Element('select',
	{
		onchange: 'youcode_text_select(this, "color")'
	}).inject(innerdiv);
	
	new Element('option',
	{
		html: 'color',
		value: -1
	}).inject(colorselect);
		
	for(var i = 0; i < colors.length; i++)
	{
		new Element('option',
		{
			html: colors[i][0],
			style: 'color: ' + colors[i][1],
			value: colors[i][1]
		}).inject(colorselect);
	}
}
