// ==================================
// BBCode Script for Recipe Book CMS
//
// This Software is Copyrighted
// And cannot be distributed.
// ==================================

tags = new Array();

// ==================================
// Get Browser Information
// ==================================
var clientPC = navigator.userAgent.toLowerCase();
var clientVer = parseInt(navigator.appVersion);

// ==================================
// Get Browser Type
// ==================================

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);

// ==================================
// Helper Functions
// ==================================

function opentag(thearray,value) 
{
	thearraysize = thearray.length;
	thearray[thearraysize] = value;
}

function closetag(tagarray,value) 
{
	for (i=0; i < tagarray.length; i++)
	{
		if (tagarray[i] == value)
		{
			delete tagarray[i];
			return;
		}
	}
}

// ==================================
// Start BBCode
// ==================================

function bbcode(themessagearea,tagarray,bbcode,param,advoption) 
{
	themessagearea.focus();
	storeCaret(themessagearea,advoption);

	if ((clientVer >= 4) && is_ie && is_win) 
	{
		if (advoption == "smiley")
		{
			theSelection = null;
		}
		else if (advoption == "color")
		{
			theSelection = opener.document.selection.createRange().text;
		}
		else
		{
			theSelection = document.selection.createRange().text;
		}
		
		if (!theSelection) 
		{
			addbbcode(themessagearea,tagarray,bbcode,param,1,advoption);
			return;
		}
		else
		{
			if (param != '')
			{
				opentag = "["+bbcode+"="+param+"]";
			}
			else
			{
				opentag = "["+bbcode+"]";
			}
	
			 if (advoption == "color")
			{
				opener.document.selection.createRange().text = opentag + theSelection + "[/"+bbcode+"]";
			}
			else
			{
				document.selection.createRange().text = opentag + theSelection + "[/"+bbcode+"]";
			}

			return;
		}
	}
	else if (themessagearea.selectionEnd && (themessagearea.selectionEnd - themessagearea.selectionStart > 0) && advoption != "smiley")
	{
		if (param != '')
		{
			opentag = "["+bbcode+"="+param+"]";
		}
		else
		{
			opentag = "["+bbcode+"]";
		}

		mozWrap(themessagearea, opentag, "[/"+bbcode+"]");
		return;
	}
	else
	{
		addbbcode(themessagearea,tagarray,bbcode,param,0,advoption);
		return;
	}
}

// ==================================
// Start addbbcode
// ==================================
function addbbcode(themessagearea,tagarray,bbcode,param,doCaret,advoption)
{
	if (advoption != "smiley" && advoption != "color")
	{
		if (tags[tagarray] == "undefined" || tags[tagarray] == "" || tags[tagarray] == null)
		{
			tags[tagarray] = new Array()
		}

		donotinsert = false;

		for (i=0; i < tags[tagarray].length; i++)
		{
			if (tags[tagarray][i] == bbcode)
			{
				donotinsert = true;
			}
		}
	}

	if (advoption == "smiley")
	{
		newtext = "[" + bbcode + "]";
	}
	else if (advoption == "color")
	{
		newtext = "["+bbcode+"="+param+"]"+"[/"+bbcode+"]";
	}
	else if (donotinsert == false)
              	{
		if (param != '')
		{
			newtext = "["+bbcode+"="+param+"]";
		}
		else
		{
			newtext = "["+bbcode+"]";
		}

		opentag(tags[tagarray],bbcode);
	}
	else
	{
		newtext = "[/"+bbcode+"]";
		closetag(tags[tagarray],bbcode);
	}

	if (doCaret == 1)
	{
		if (themessagearea.createTextRange && themessagearea.caretPos) 
		{
			var caretPos = themessagearea.caretPos;
			caretPos.text += newtext;
		}
		else 
		{
			themessagearea.value += newtext;
		}
	}
	else
	{
		themessagearea.value += newtext;
	}

	return;
}

// ==================================
// Misc Functions
// ==================================

function mozWrap(themessagearea, open, close)
{
	var selLength = themessagearea.textLength;
	var selStart = themessagearea.selectionStart;
	var selEnd = themessagearea.selectionEnd;
	
	if (selEnd == 1 || selEnd == 2)
	{
		selEnd = selLength;
	}

	var s1 = (themessagearea.value).substring(0,selStart);
	var s2 = (themessagearea.value).substring(selStart, selEnd)
	var s3 = (themessagearea.value).substring(selEnd, selLength);
	themessagearea.value = s1 + open + s2 + close + s3;
	return;
}

function storeCaret(textEl,advoption) 
{
	if (advoption == "smiley" || advoption == "color")
	{
		if (textEl.createTextRange) textEl.caretPos = opener.document.selection.createRange().duplicate();
	}
	else
	{
		if (textEl.createTextRange) textEl.caretPos = document.selection.createRange().duplicate();
	}
}

// ==================================
// That's it, Folks!
// ==================================
