/*2009-07-22*/
/*global bbtags, form_id, help_line, text_name, $, document, navigator, opener, window, prompt, addEvent, getContents */
var theSelection, clientPC, clientVer, is_ie, is_win, baseHeight;

/*Startup variables*/
theSelection = false;

/*	Check for Browser & Platform for PC & IE specific bits
	More details from: http://www.mozilla.org/docs/web-developer/sniffer/browser_type.html*/
clientPC = navigator.userAgent.toLowerCase(); /*Get client info*/
clientVer = parseInt(navigator.appVersion, 10); /*Get browser version*/

is_ie = ((clientPC.indexOf('msie') !== -1) && (clientPC.indexOf('opera') === -1));
is_win = ((clientPC.indexOf('win') !== -1) || (clientPC.indexOf('16bit') !== -1));

baseHeight = '';


/**
* Shows the help messages in the helpline window
*/
function helpline(help)
{
	if (document.forms[form_id].helpbox !== undefined)
	{
		document.forms[form_id].helpbox.value = help_line[help];
	}
}


/**
* Fix a bug involving the TextRange object. From
* http://www.frostjedi.com/terra/scripts/demo/caretBug.html
*/
function initInsertions()
{
	var doc;

	if (document.forms[form_id])
	{
		doc = document;
	}
	else if (window.opener !== null)
	{
		doc = opener.document;
	}

	if (doc !== undefined)
	{
		var textarea = doc.forms[form_id].elements[text_name];
		if (is_ie && typeof(baseHeight) !== 'number')
		{
			textarea.focus();
			baseHeight = doc.selection.createRange().duplicate().boundingHeight;
			document.body.focus();
		}
	}
}





/**
* Caret Position object
*/
function CaretPosition()
{
	var start = null;
	var end = null;
}


/**
* Get the caret position in an textarea
*/
function getCaretPosition(txtarea)
{
	var caretPos = new CaretPosition();

	/*simple Gecko/Opera way*/
	if (txtarea.selectionStart || txtarea.selectionStart === 0)
	{
		caretPos.start = txtarea.selectionStart;
		caretPos.end = txtarea.selectionEnd;
	}
	/*dirty and slow IE way*/
	else if (document.selection)
	{
		/*get current selection*/
		var range = document.selection.createRange();

		/*a new selection of the whole textarea*/
		var range_all = document.body.createTextRange();
		range_all.moveToElementText(txtarea);

		/*calculate selection start point by moving beginning of range_all to beginning of range*/
		var sel_start;
		for (sel_start = 0; range_all.compareEndPoints('StartToStart', range) < 0; sel_start++)
		{
			range_all.moveStart('character', 1);
		}

		txtarea.sel_start = sel_start;

		/*we ignore the end value for IE, this is already dirty enough and we don't need it*/
		caretPos.start = txtarea.sel_start;
		caretPos.end = txtarea.sel_start;
	}

	return caretPos;
}


/**
* From http://www.massless.org/mozedit/
*/
function mozWrap(txtarea, open, close)
{
	var selLength = txtarea.textLength;
	var selStart = txtarea.selectionStart;
	var selEnd = txtarea.selectionEnd;
	var scrollTop = txtarea.scrollTop;

	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 + open + s2 + close + s3;
	txtarea.selectionStart = selEnd + open.length + close.length;
	txtarea.selectionEnd = txtarea.selectionStart;
	txtarea.focus();
	txtarea.scrollTop = scrollTop;

	return;
}


/**
* Insert at Caret position. Code from
* http://www.faqts.com/knowledge_base/view.phtml/aid/1052/fid/130
*/
function storeCaret(textEl)
{
	if (textEl.createTextRange)
	{
		textEl.caretPos = document.selection.createRange().duplicate();
	}
}


/**
* Insert text at position
*/
function insert_text(text, spaces, popup)
{
	var textarea;

	if (!popup)
	{
		textarea = document.forms[form_id].elements[text_name];
	}
	else
	{
		textarea = opener.document.forms[form_id].elements[text_name];
	}
	if (spaces)
	{
		text = ' ' + text + ' ';
	}

	if (!isNaN(textarea.selectionStart))
	{
		var sel_start = textarea.selectionStart;
		var sel_end = textarea.selectionEnd;

		mozWrap(textarea, text, '');
		textarea.selectionStart = sel_start + text.length;
		textarea.selectionEnd = sel_end + text.length;
	}

	else if (textarea.createTextRange && textarea.caretPos)
	{
		if (baseHeight !== textarea.caretPos.boundingHeight)
		{
			textarea.focus();
			storeCaret(textarea);
		}
		var caret_pos = textarea.caretPos;
		caret_pos.text = caret_pos.text.charAt(caret_pos.text.length - 1) === ' ' ? caret_pos.text + text + ' ' : caret_pos.text + text;

	}
	else
	{
		textarea.value = textarea.value + text;
	}
	if (!popup)
	{
		textarea.focus();
	}
}



/**
* Apply bbcodes
*/
function bbfontstyle(bbopen, bbclose)
{
	theSelection = false;

	var textarea = document.forms[form_id].elements[text_name];

	textarea.focus();

	if ((clientVer >= 4) && is_ie && is_win)
	{
		/*Get text selection*/
		theSelection = document.selection.createRange().text;

		if (theSelection)
		{
			/*Add tags around selection*/
			document.selection.createRange().text = bbopen + theSelection + bbclose;
			document.forms[form_id].elements[text_name].focus();
			theSelection = '';
			return;
		}
	}
	else if (document.forms[form_id].elements[text_name].selectionEnd && (document.forms[form_id].elements[text_name].selectionEnd - document.forms[form_id].elements[text_name].selectionStart > 0))
	{
		mozWrap(document.forms[form_id].elements[text_name], bbopen, bbclose);
		document.forms[form_id].elements[text_name].focus();
		theSelection = '';
		return;
	}

	/*The new position for the cursor after adding the bbcode*/
	var caret_pos = getCaretPosition(textarea).start;
	var new_pos = caret_pos + bbopen.length;

	/*Open tag*/
	insert_text(bbopen + bbclose);

	/*	Center the cursor when we don't have a selection
		Gecko and proper browsers*/
	if (!isNaN(textarea.selectionStart))
	{
		textarea.selectionStart = new_pos;
		textarea.selectionEnd = new_pos;
	}
	/*IE*/
	else if (document.selection)
	{
		var range = textarea.createTextRange();
		range.move("character", new_pos);
		range.select();
		storeCaret(textarea);
	}

	textarea.focus();
	return;
}




function listItem(x)
{
	var liCount = (x.selectedIndex === 5 ? prompt("How many items would you like in this list?", '3') : '1');

	for (var i = 0; i < liCount; i++)
	{
		if (x.selectedIndex > 0)
		{
			bbfontstyle((x.value === '*' ? "\n" : '') + '[' + x.value + ']', (x.value === '*' ? '' : '[/list]'));
		}
	}

	x.selectedIndex = 0;
}

function doodLink(thisDood, isPopup)
{
	addEvent(thisDood, 'click', function ()
	{
		insert_text(thisDood.alt, true, isPopup);
	}, false);
}


/**
* bbstyle
*/
function bbstyle(bbnumber)
{
	if (bbnumber !== -1)
	{
		bbfontstyle(bbtags[bbnumber], bbtags[bbnumber + 1]);
	}
	else
	{
		insert_text('[*]');
		document.forms[form_id].elements[text_name].focus();
	}
}


/**
* Add inline attachment at position
*/
function attach_inline(index, filename)
{
	insert_text('[attachment=' + index + ']' + filename + '[/attachment]');
	document.forms[form_id].elements[text_name].focus();
}


/**
* Add quote text to message
*/
function addquote(post_id, username)
{
	var message_name = 'message_' + post_id;
	var theSelection;
	var divarea = false;

	if (document.all)
	{
		divarea = document.all[message_name];
	}
	else
	{
		divarea = document.getElementById(message_name);
	}

	/*Get text selection - not only the post content :(*/
	if (window.getSelection)
	{
		theSelection = window.getSelection().toString();
	}
	else if (document.getSelection)
	{
		theSelection = document.getSelection();
	}
	else if (document.selection)
	{
		theSelection = document.selection.createRange().text;
	}

	if (theSelection === '' || typeof theSelection === 'undefined' || theSelection === null)
	{
		if (getContents(divarea))
		{
			theSelection = getContents(divarea);
			theSelection = theSelection.replace(/&lt\;/ig, '<');
			theSelection = theSelection.replace(/&gt\;/ig, '>');
		}
		else if (document.all)
		{
			theSelection = divarea.innerText;
		}
		else if (divarea.textContent)
		{
			theSelection = divarea.textContent;
		}
		else if (divarea.firstChild.nodeValue)
		{
			theSelection = divarea.firstChild.nodeValue;
		}
	}

	if (theSelection)
	{
		insert_text('[quote="' + username + ' wrote"] ' + theSelection + ' [/quote] ');
	}

	return;
}


//For Safari and IE
function checkIt(thisRadio)
{
	var postIcons = thisRadio.form.icon;

	if (navigator.userAgent.indexOf('Safari') > -1)
	{
		for (var j = 0; j < postIcons.length; j++)
		{
			postIcons[j].parentNode.className = '';
		}

		thisRadio.className = 'selectedicon';
	}
}


function addIconEvent(thisIcon)
{
	addEvent(thisIcon, 'click', function ()
	{
		checkIt(thisIcon);
	}, false);
}

function addIconEvents()
{
	var inputs = document.getElementsByTagName('input');

	for (var k = 0; k < inputs.length; k++)
	{
		if (inputs[k].className === 'icons')
		{
			addIconEvent(inputs[k]);
		}
	}
}

addIconEvents();

initInsertions();

if(typeof($('attachinline')) !== undefined && typeof($('attachinline')) !== null) 
{
	addEvent($('attachinline'), 'click', function ()
	{
		attach_form = document.forms[form_id].elements.attachments;
		attach_inline(attach_form.value, attach_form.options[attach_form.selectedIndex].text);
	}, false);

	addEvent($('attachinline'), 'mouseover', function ()
	{
		helpline('a');
	}, false);

	addEvent($('attachinline'), 'mouseout', function ()
	{
		helpline('tip');
	}, false);
}
