// JavaScript Document

<!--
// bbCode control by
// subBlue design
// www.subBlue.com

// Startup variables
var imageTag = false;
var 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
var clientPC = navigator.userAgent.toLowerCase(); // Get client info
var clientVer = parseInt(navigator.appVersion); // Get browser version

var is_ie = ((clientPC.indexOf("msie") != -1) && (clientPC.indexOf("opera") == -1));
var is_nav = ((clientPC.indexOf('mozilla')!=-1) && (clientPC.indexOf('spoofer')==-1)
                && (clientPC.indexOf('compatible') == -1) && (clientPC.indexOf('opera')==-1)
                && (clientPC.indexOf('webtv')==-1) && (clientPC.indexOf('hotjava')==-1));
var is_moz = 0;

var is_win = ((clientPC.indexOf("win")!=-1) || (clientPC.indexOf("16bit") != -1));
var is_mac = (clientPC.indexOf("mac")!=-1);


// Helpline messages
b_help = "Bold text: [b]text[/b] ";
i_help = "Italic text: [i]text[/i]  ";
u_help = "Underline text: [u]text[/u]  ";
w_help = "Insert URL: [url]http://url[/url] or [url=http://url]URL text[/url]  ";
H1_help = "Headline 1: [H1]text[/H1]  ";
H2_help = "Headline 2: [H2]text[/H2]  ";
H3_help = "Headline 3: [H3]text[/H3]  ";


// Define the bbCode tags
bbcode = new Array();
bbtags = new Array('[b]','[/b]','[i]','[/i]','[u]','[/u]','[H1]','[/H1]','[H2]','[/H2]','[H3]','[/H3]','[list=]','[/list]','[img]','[/img]','[url]','[/url]');
imageTag = false;

// Shows the help messages in the helpline window
function helpline(help) {
	document.getElementById('editor_help').innerHTML = eval(help + "_help");
}

function bbstyle2(bbnumber,txtarea) {

	txtarea.focus();
	donotinsert = false;
	theSelection = false;
	bblast = 0;

	if (bbnumber == -1) { // Close all open tags & default button names
		while (bbcode[0]) {
			butnumber = arraypop(bbcode) - 1;
			txtarea.value += bbtags[butnumber + 1];
			buttext = eval(frm+'.addbbcode' + butnumber + '.value');
			eval(frm+'.addbbcode' + butnumber + '.value ="' + buttext.substr(0,(buttext.length - 1)) + '"');
		}
		imageTag = false; // All tags are closed including image tags :D
		txtarea.focus();
		return;
	}

	if ((clientVer >= 4) && is_ie && is_win)
	{
		theSelection = document.selection.createRange().text; // Get text selection
		if (theSelection) {
			// Add tags around selection
			document.selection.createRange().text = bbtags[bbnumber] + theSelection + bbtags[bbnumber+1];
			txtarea.focus();
			theSelection = '';
			return;
		}
	}
	else if (txtarea.selectionEnd && (txtarea.selectionEnd - txtarea.selectionStart > 0))
	{
		mozWrap(txtarea, bbtags[bbnumber], bbtags[bbnumber+1]);
		return;
	}

	// Find last occurance of an open tag the same as the one just clicked
	for (i = 0; i < bbcode.length; i++) {
		if (bbcode[i] == bbnumber+1) {
			bblast = i;
			donotinsert = true;
		}
	}

	if (donotinsert) {		// Close all open tags up to the one just clicked & default button names
		while (bbcode[bblast]) {
				butnumber = arraypop(bbcode) - 1;
				txtarea.value += bbtags[butnumber + 1];
				buttext = eval(frm+'.addbbcode' + butnumber + '.value');
				eval(frm+'addbbcode' + butnumber + '.value ="' + buttext.substr(0,(buttext.length - 1)) + '"');
				imageTag = false;
			}
			txtarea.focus();
			return;
	} else { // Open tags

		if (imageTag && (bbnumber != 14)) {		// Close image tag before adding another
			txtarea.value += bbtags[15];
			lastValue = arraypop(bbcode) - 1;	// Remove the close image tag from the list
			document.frmCom.addbbcode14.value = "Img";	// Return button back to normal state
			imageTag = false;
		}

		// Open tag
		txtarea.value += bbtags[bbnumber];
		if ((bbnumber == 14) && (imageTag == false)) imageTag = 1; // Check to stop additional tags after an unclosed image tag
		arraypush(bbcode,bbnumber+1);
		eval(frm+'.addbbcode'+bbnumber+'.value += "*"');
		txtarea.focus();
		return;
	}
	storeCaret(txtarea);
}

function makeURL(txtarea){
	txtarea.focus();
	donotinsert = false;
	theSelection = false;
	if ((clientVer >= 4) && is_ie && is_win)
	{
		theSelection = document.selection.createRange().text; // Get text selection
		if (theSelection) {
			// Add tags around selection
			document.selection.createRange().text = bbtags[bbnumber] + theSelection + bbtags[bbnumber+1];
			txtarea.focus();
			theSelection = '';
			return;
		}
	}
	else if (txtarea.selectionEnd && (txtarea.selectionEnd - txtarea.selectionStart > 0))
	{
		mozWrap(txtarea, bbtags[bbnumber], bbtags[bbnumber+1]);
		return;
	}
	frm = document.frmURL;
	document.getElementById('dURL').style.display='none'	;
	txt = '[url='+ frm.uprot.value+frm.ulink.value+']'+frm.utitle.value+'[/url]';
	txtarea.value +=txt;
	txtarea.focus();

	}
	function showURLBOX(obj){
		
		setLyr(obj,'dURL',0,-100);
		document.getElementById('dURL').style.display='block';
		
	}
	function setLyr(obj,lyr,ax,ay)
	{
		var newX = findPosX(obj);
		var newY = findPosY(obj);
		var x = new getObj(lyr);
		newY=newY + ay;
		newX=newX + ax;
		x.style.top = newY + 'px';
		x.style.left = newX + 'px';
	}
		function findPosX(obj)
	{
		var curleft = 0;
		if (obj.offsetParent)
		{
			while (obj.offsetParent)
			{
				curleft += obj.offsetLeft
				obj = obj.offsetParent;
			}
		}
		else if (obj.x)
			curleft += obj.x;
		return curleft;
	}
		function getObj(name)
	{
	 if (document.getElementById)
	 {
		   this.obj = document.getElementById(name);
		   this.style = document.getElementById(name).style;
	 }
	 else if (document.all)
	 {
		   this.obj = document.all[name];
		   this.style = document.all[name].style;
	 }
	 else if (document.layers)
	 {
		   if (document.layers[name])
		   {
			this.obj = document.layers[name];
			this.style = document.layers[name];
		   }
		   else
		   {
			this.obj = document.layers.testP.layers[name];
			this.style = document.layers.testP.layers[name];
		   }
	 }
	}
	
	function findPosY(obj)
	{
		var curtop = 0;
		var printstring = '';
		if (obj.offsetParent)
		{
			while (obj.offsetParent)
			{
				printstring += ' element ' + obj.tagName + ' has ' + obj.offsetTop;
				curtop += obj.offsetTop
				obj = obj.offsetParent;
			}
		}
		else if (obj.y)
			curtop += obj.y;
		//window.status = printstring;
		return curtop;
	}