// :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
// SETTING BBCODE -->
// :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

//
// INITIALIZE VARS...
var mySelection = false;

//
// THIS ARRAY WE FILL UP ALONG THE WAY...
bbCode = new Array();


//
// SET UP ARRAY TO HOLD ALL THE bbCode TAGS...
bbTags = new Array(
			 '[b]','[/b]',
			 '[i]','[/i]',
			 '[u]','[/u]',
			 '[sup]','[/sup]',
			 '[sub]','[/sub]',
			 '[quote]','[/quote]',
			 '\n[list]\n[*]','\n[/list]\n',
			 '\n[*]','\n[*]',
			 '[left]','[/left]',
			 '[center]','[/center]',
			 '[right]','[/right]',
			 '[url=xxx]','[url=xxx]',
			 '[img=xxx]','[img=xxx]'
			 );

// :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
//	MISC FUNCTIONS THAT REPLACES PROPERTIES AND ARRAY-FUNCTIONS
//	THAT ARE NOT IMPLEMENTED IN LATER BROWSER VERSIONS...
// :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
//
// REPLACES THE array.length property...
function getarraysize(thearray) {

	for (i = 0; i < thearray.length; i++) {

		if ((thearray[i] == "undefined") || (thearray[i] == "") || (thearray[i] == null))
			return i;

	} // END FOR...

	return thearray.length;

} // END FUNCTION getarraysize()...

//
// REPLACES THE array.push(value)
function arraypush(thearray,value) {

	thearray[ getarraysize(thearray) ] = value;

} // END FUNCTION arraypush()...

//
// REPLACES THE array.pop(value)
function arraypop(thearray) {

	thearraysize = getarraysize(thearray);
	retval = thearray[thearraysize - 1];
	delete thearray[thearraysize - 1];
	return retval;

} // END FUNCTION arraypop()...
// :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

// :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
// DISPLAY INFOBOX MESSAGES -->
// :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
function infoBox(info) {

	//
	// SET UP MESSAGE VARS...
	btn_0_info 	= "[b]Din tekst[/b]";
	btn_2_info 	= "[i]Din tekst[/i]";
	btn_4_info 	= "[u]Din tekst[/u]";
	btn_6_info 	= "[sup]Din tekst[/sup]";
	btn_8_info 	= "[sub]Din tekst[/sub]";
	btn_10_info	= "[quote]Dit citat[/quote]";
	btn_12_info	= "Indsæt ny liste. [*] skal inkluderes i [list][/list]";
	btn_14_info	= "Indsæt ny [*] for nyt liste element";
	btn_16_info = "[left]Din tekst[/left]";
	btn_18_info	= "[center]Din tekst[/center]";
	btn_20_info = "[right]Din tekst[/right]";
	btn_22_info = "[url=http://web_adresse]";
	btn_24_info = "[img=http://web_adresse_til_dit_billede.jpg]";

	document.getElementById('infoBox').innerHTML = eval(info + "_info");

} // END FUNCTION infoBox()

// END DISPLAY INFOBOX MESSAGES <--
// :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

// :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
// FUNCTION		validateForm()
// DESC			Validates our form for missing or incorrect input
// RETURNS		FALSE 	--	Alert message w/ error
//				TRUE	--	Calls setBBcode() w/ param = -1 => Closing any missing end-tags
// :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
function validateForm() {

	formErrors = false;

	//
	// CHECK IF A TITLE IS SUBMITTED...
	if(document.editor.content.value.length < 1) {

		formErrors = "Der er ikke skrevet noget indhold";
		document.editor.content.focus();

	} // END IF...

	//
	// ALERT USER ANY ERRORS...
	if(formErrors) {

			alert(formErrors);
			return false;

	} // END IF...

	//
	// ... OTHERWISE RETURN TRUE AND CALL FUNCTION TO CLOSE MISSING END-TAGS...
	else {

		setBBcode(-1);
		return true;

	} // END ELSE...

} // END FUNCTION validateForm()...
// :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::


// :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
// FUNCTION 	setBBcode()
// PARAMS		arrayNumber -- Refers to a specific tag in our bbTags array...
// DESC.		Sets bbCode in our textArea (in numerous ways ;)
//				Also autocompletes missing tags when we submit form...
// RETURNS		textArea with bbcode, according to given arrayNumber...
// :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
function setBBcode(arrayNumber) {

	//
	// DEFINE OUR TEXTAREA...
	var textArea = document.editor.postContent;
	textArea.focus();

	doNotInsert = false;
	mySelection = false;
	bbLast = 0;

	//
	// CLOSE ALL OPEN TAGS [ We get arrayNumber = -1 from validateForm() ...]
	if(arrayNumber == -1) {

		while(bbCode[0]) {

			//
			// REMOVE LAST ENTRY FROM bbCode array AND RETURN THAT ELEMENT...
			butnumber = arraypop(bbCode) - 1;

			//
			// WE DON'T WANT TO SET AN END TAG FOR SINGLE TAGS ( [*], [img] )
			if((butnumber != 20) && (butnumber != 34)) {

				//
				// ATTACH THE NEXT ELEMENT (butnumber+1) FROM OUR array of bbTags TO OUR TEXTAREA...
				textArea.value += bbTags[butnumber + 1];

			} // END IF...

		} // END WHILE...

		textArea.focus();
		return;

	} // END IF...

	//
	// IE SUPPORT...
	if(document.selection)	{

		//
		// DEFINE OUR TEXT SELECTION...
		mySelection = document.selection.createRange().text;
		if(mySelection) {

			//
			// SET TAGS FROM bbTags-array AROUND OUR SELECTED TEXT...
			document.selection.createRange().text = bbTags[arrayNumber] + mySelection + bbTags[arrayNumber+1];
			textArea.focus();

			//
			// KILL OUR SELECTION...
			mySelection = '';
			return;

		} // END IF...

	} // END IF (IE SUPPORT)...

	//
	// FIREFOX SUPPORT...
	else if (textArea.selectionEnd && (textArea.selectionEnd - textArea.selectionStart > 0)) {

		//
		// CALL FUNCTION TO SET TAGS FROM bbTags-array AROUND OUR SELECTION...
		firefoxWrap(textArea, bbTags[arrayNumber], bbTags[arrayNumber+1]);
		return;

	} // END ELSE IF...

	//
	// FINDING THE LAST OCCURANCE OF AN OPEN-TAG AS THE ONE JUST CLICKED...
	for(i=0; i<bbCode.length; i++) {

		//
		// IF WE CLOSE THE TAG...
		if(bbCode[i] == arrayNumber+1) {

			bbLast = i;
			doNotInsert = true;

		} // END IF...

	} // END FOR...

	//
	// CLOSE ALL OPEN TAGS UP TO THE ONE JUST CLICKED...
	if(doNotInsert) {

		while(bbCode[bbLast]) {

			//
			// REMOVE LAST ENTRY FROM bbCode array AND RETURN THAT ELEMENT...
			butnumber = arraypop(bbCode) - 1;

			//
			// ATTACH THE NEXT ELEMENT (butnumber+1) FROM OUR array of bbTags TO OUR TEXTAREA...
			textArea.value += bbTags[butnumber + 1];

		} // END WHILE...

		textArea.focus();
		return;

	} // END IF...

	//
	// ... OTHERWISE OPEN THE TAG...
	else {

		textArea.value += bbTags[arrayNumber];

		//
		// ADD arrayNumber+1 TO bbCode array...
		arraypush(bbCode,arrayNumber+1);
		textArea.focus();
		return;

	} // END ELSE...

	storeCaret(textArea);

} // END FUNCTION setBBcode()...
// :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

// :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
// FUNCTION 	firefoxWrap()
// PARAMS		textArea -- Textarea we're working on...
//				open -- Opening-tag, arrayposition in bbTags[] array...
//				close -- Closing-tag, arrayposition in bbTags[] array...
// DESC.		Sets tags around selected text in our textArea by splitting our textArea content into
//				three substrings, and then 're-assign' the substrings to textArea w/ tags (open, close)
//				(FIREFOX ONLY!)
// RETURNS		New value of our textArea w/ Opening- and Closing-tags around selected text...
// :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
function firefoxWrap(textArea, open, close) {

	//
	// DEFINE start, end AND length OF OUR SELECTION...
	var mySelectionLength = textArea.textLength;
	var mySelectionStart = textArea.selectionStart;
	var mySelectionEnd = textArea.selectionEnd;
	if(mySelectionEnd == 1 || mySelectionEnd == 2) {

		mySelectionEnd = mySelectionLength;

	} // END IF...

	//
	// SPLIT OUR TEXTAREA CONTENT INTO 3 SUBSTRINGS...
	var string1 = (textArea.value).substring(0,mySelectionStart);
	var string2 = (textArea.value).substring(mySelectionStart, mySelectionEnd)
	var string3 = (textArea.value).substring(mySelectionEnd, mySelectionLength);

	//
	// ASSIGN 'NEW' VALUE TO OUR TEXT AREA WITH TAGS AROUND SELECTED TEXT...
	textArea.value = string1 + open + string2 + close + string3;
	return;

} // END FUNCTION firefoxWrap()...

// :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

// :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
// FUNCTION		storeCaret()
// PARAMS		textArea -- TextArea we're working on...
// DESC			Store and insert at the caret(cursor) position in our textArea...
//				(http://www.faqts.com/knowledge_base/view.phtml/aid/1052/fid/130)
//				textArea is calling this function onselect...
// :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
function storeCaret(textArea) {

	if (textArea.createTextRange) {

		textArea.caretPos = document.selection.createRange().duplicate();

	} // END IF...

} // END FUNCTION storeCaret()...
// :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

// END SETTING BBCODE <--
// :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

// :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
// MISC. HELP AND INSPIRATION SITES...
//	::	http://www.massless.org/mozedit/
//	::	http://www.faqts.com/
//	::	http://www.phpbb.com/
//	::	http://groups.google.com/ ;)
// :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
// Author Sune Lundby [sl]

