/*
 * Charge des boutons pour gras, italique, lien et smileys autour de tous les textarea avec une
 * classe smartEditor
 */
function smartEditor() {
	var div = Builder.node('div', {className: 'smartEditor'});
	Element.extend(div);

	var a = Builder.node('a', {href: '#', className: 'smartEditor'},
		[Builder.node('img', {src: '/img/pictos_smarteditor/smileys_ferme.png',
                        alt: 'Ajouter un smiley'})]);

	Element.extend(a);
	a.observe('click', function (event) {toggleSmileys(a); Event.stop(event);});

	var smileys = Builder.node('div', {className: 'smartEditorSmileys'});
	Element.extend(smileys);
	smileys.hide();

	var bold = Builder.node('a', {href: '#'},
		[Builder.node('img',
			{src: '/img/pictos_smarteditor/gras.png', alt: 'Gras'})]);
	Element.extend(bold);
	bold.observe('click', function (event) {TAinsert(bold, '__', '__'); Event.stop(event);});
	div.appendChild(bold);

	var italic = Builder.node('a', {href: '#'},
		[Builder.node('img',
			{src: '/img/pictos_smarteditor/italic.png', alt: 'Italique'})]);
	Element.extend(italic);
	italic.observe('click', function (event) {TAinsert(italic, '\'\'', '\'\''); Event.stop(event);});
	div.appendChild(italic);

	var link = Builder.node('a', {href: '#'}, [Builder.node('img',
		{src: '/img/pictos_smarteditor/lien.png', alt: 'Lien'})]);
	Element.extend(link);
	link.observe('click', function (event) {
		Event.stop(event);
		var iLink = prompt('Saisissez l\'url complète pour le lien', 'http://');
		if(!(iLink && iLink.length && iLink != 'http://')) {
			return;
		}
		var iText = prompt('Saisissez le titre de la page web', 'Mon lien');
		if(iText && iText.length) {
			TAinsert(link, '[['+iText+'|'+iLink	+']]', '');
		}
	});
	div.appendChild(link);

	var img = Builder.node('a', {href: '#'}, [Builder.node('img',
		{src: '/img/pictos_smarteditor/image.png', alt: 'Image'})]);
	Element.extend(img);
	img.observe('click', function (event) {
		Event.stop(event);
		var iLink = prompt('Saisissez l\'url complète de l\'image', 'http://');
		if(!(iLink && iLink.length && iLink != 'http://')) {
			return;
		}
		var iAlt = prompt('Saisissez le titre de l\'image', 'Mon image');
		if(iAlt && iAlt.length) {
			var iPos = prompt('Positionnez l\'image à droite ou à gauche ? vide pour rien, g pour gauche et d pour droite','');
			if(iPos && (iPos == 'd' || iPos == 'g')) {
				iPos = '|'+iPos;
			} else {
				iPos = '';
			}
			TAinsert(img, '((' + iLink + '|' + iAlt + iPos + '))', '');
		}
	});
	div.appendChild(img);

	$$('textarea.smartEditor').each(function (editor) {
		editor.up().insertBefore(a, editor.next());
		editor.up().insertBefore(smileys, a.next());
		editor.up().insertBefore(div, editor);
	});
}


function toggleSmileys(link) {
	var smileys = link.next();
	if(smileys.empty()) {
		smileys.setAttribute('id', 'smileys');
		new Ajax.Updater(
			{success : 'smileys'},
			'/smileys/liste',
			{onComplete: addBehaviourSmileys});
 	} else {
		if(smileys.visible()) {
			link.down().setAttribute('src', '/img/pictos_smarteditor/smileys_ferme.png')
			Effect.BlindUp(smileys, {queue: 'end'});
		} else {
			link.down().setAttribute('src', '/img/pictos_smarteditor/smileys_ouvert.png')
			Effect.BlindDown(smileys, {queue: 'end'});
		}
	}
}

/**
 * Ajoute le onclick à toutes les images ayant #smileys img
 */
function addBehaviourSmileys() {
	$$('#smileys img').each(function (img) {
		img.observe('click', function() {
			TAinsert(img, img.readAttribute('alt'), '')
		})
	});
	var smileys = $('smileys');
	smileys.setAttribute('id', '');
	toggleSmileys(smileys.previous());
}

/**
 * Insertion dans les textarea d'id CommentaireTexte
 */
function TAinsert(object, text1, text2)
{
	function countInstances(ta, open, closed)
	{
		var opening = ta.value.split(open);
		var closing = ta.value.split(closed);
		return opening.length + closing.length - 2;
	}

	Element.extend(object);
	var ta = object.up('form').down('textarea.smartEditor');

	if (document.selection)
	{
		ta.focus();
		var sel = document.selection.createRange();
		var str = sel.text;
	/*	var ran = sel.duplicate();
		var hack;*/

		if (text2 != "")
		{
			if (str == "")
			{
				var instances = countInstances(ta, text1, text2);
				if (instances % 2 != 0)
				{
					str = sel.text + text2;
				}
				else
				{
					str = sel.text + text1;
				}
			}
			else
			{
				str = text1 + sel.text + text2;
			}
		}
		else
		{
			str = sel.text + text1;
		}
		sel.text = str;
	/*	hack = ta.value.replace(/\r/g, '');
		ran.moveStart("character", 0);
		ran.moveEnd("character",   str.length - hack.length);
		ran.select();
		ta.focus();*/
	}
	else if (ta.selectionStart | ta.selectionStart == 0)
	{
		if (ta.selectionEnd > ta.value.length) { ta.selectionEnd = ta.value.length; }

		var firstPos = ta.selectionStart;
		var secondPos = ta.selectionEnd+text1.length;

		ta.value=ta.value.slice(0,firstPos)+text1+ta.value.slice(firstPos);
		ta.value=ta.value.slice(0,secondPos)+text2+ta.value.slice(secondPos);

		ta.selectionStart = firstPos+text1.length;
		ta.selectionEnd = secondPos;
		ta.focus();
	}
	else
	{ // Opera
		var sel = ta; // document.post.message;

		var instances = countInstances(ta,text1,text2);
		if (instances%2 != 0 && text2 != ""){ sel.value = sel.value + text2; }
		else{ sel.value = sel.value + text1; }
	}
	return false;
}

Event.observe(window, 'load', smartEditor);
