<!--
// bbCode control by subBlue design -- www.subBlue.com
// and modified by KDearing after Tarty hooked it into WebBBS.. 
// Startup variables
var imageTag = false;
var theSelection = false;

var intImageNum = 28;
var strImageUrl;	// to be used for the selection..
var intListNum = 8;

// Check for Browser & Platform for PC & IE specific bits
// Details at 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)
				&& (clientPC.indexOf('firefox') == -1));

var is_win = ((clientPC.indexOf("win")!=-1) || (clientPC.indexOf("16bit")!=-1)); // Get platform
var is_mac = (clientPC.indexOf("mac")!=-1);
var is_firefox = (clientPC.indexOf('firefox') != -1);
var is_opera = (clientPC.indexOf('opera') != -1);

//alert ('browser agent string: ' + navigator.userAgent + "\nis opera: " + is_opera);

// Define the bbCode tags
bbcode = new Array();
imageTag = false;

// Shows the help messages in the helpline window
// ################################################################
// ################################################################
// ################################################################
function helpline(help) {
	document.message.helpbox.value = eval(help + "_help");
}

// Replacement for arrayname.length property
// ################################################################
// ################################################################
// ################################################################
function getarraysize(thearray) {
  for (i = 0; i < thearray.length; i++) {
	if ((thearray[i] == "undefined") || (thearray[i] == "") || (thearray[i] == null))
		return i;
  }
  return thearray.length;
}

// Replacement for arrayname.push(value) not implemented in IE until IE5.5
// Appends element to the array
// ################################################################
// ################################################################
// ################################################################
function arraypush(thearray,value) {
	thearray[ getarraysize(thearray) ] = value;
}

// Replacement for arrayname.pop() not implemented in IE until IE5.5
// Removes and returns the last element of an array
// ################################################################
// ################################################################
// ################################################################
function arraypop(thearray) {
	thearraysize = getarraysize(thearray);
	retval = thearray[thearraysize - 1];
	delete thearray[thearraysize - 1];
	return retval;
}

// ################################################################
// ################################################################
// ################################################################
function checkForm() {
	bbstyle(-1);
	//formObj.preview.disabled = true;
	//formObj.submit.disabled = true;
	return true;
}

// ################################################################
// ################################################################
// ################################################################
function emoticon(text) {
	text = ' ' + text + ' ';
	if (document.message.body.createTextRange && document.message.body.caretPos) {
		// Insert at Caret position code from 
		// http://www.faqts.com/knowledge_base/view.phtml/aid/1052/fid/130
		var caretPos = document.message.body.caretPos;
		caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? text + ' ' : text;
		document.message.body.focus();
	}  else {
		SmileyStuff(document.message.body, text);
		document.message.body.focus();
	}
}

// ################################################################
// ################################################################
// ################################################################
function SmileyStuff (objEl, strSCode) {
	if (objEl.setSelectionRange){		// for Mozilla...
		var intSelStart = objEl.selectionStart;
		var intSelEnd = objEl.selectionEnd;
		var selectedText = objEl.value.substring(0, objEl.selectionStart) + strSCode;
		selectedText += objEl.value.substring(objEl.selectionStart, objEl.selectionEnd);
		selectedText += objEl.value.substring(objEl.selectionEnd, objEl.value.length);
		objEl.value = selectedText;
	} else if (is_opera){
		if (TimeToCloseTags(bbnumber)){
			objEl.value += strSCode;
		} else {
			strTagTwo = "";
			objEl.value += strSCode;
		}
	} else {		// This bit for IE:
		if ((clientVer >= 4) && is_ie && is_win){
			var selectedText = document.selection.createRange().text;
			if (selectedText != ""){
				var newText = strSCode + selectedText;
				document.selection.createRange().text = newText;
			} else {
				// Are we opening it or closing it?
				selectedText = objEl.createTextRange().text;
				var newText = strSCodeselectedText;
				objEl.createTextRange().text = newText;
//				alert ('new text: ' + newText);
				
			}
		}
	}
	objEl.focus();
}

// ################################################################
// ################################################################
// ################################################################
function bbfontstyle(bbopen, bbclose) {
  if ((clientVer >= 4) && is_ie && is_win) {
	theSelection = document.selection.createRange().text;
	if (!theSelection) {
		document.message.body.value += bbopen + bbclose;
		document.message.body.focus();
		return;
	}
	document.selection.createRange().text = bbopen + theSelection + bbclose;
	document.message.body.focus();
	return;
  } else {
	document.message.body.value += bbopen + bbclose;
	document.message.body.focus();
	return;
  }
  storeCaret(document.message.body);
}


// ################################################################
// ################################################################
// ################################################################
function bbstyle(bbnumber) {
	donotinsert = false;
	theSelection = false;
	bblast = 0;
	// Are we closing ALL open tags we find?
	if (bbnumber == -1) {
		// Close all open tags & set buttons text to default button 
		CloseAllTags(bbnumber);
		document.message.body.focus();
		return;
  	}

	SelectionStuff(document.message.body, bbnumber);
	document.message.body.focus();
	storeCaret(document.message.body);
	return;
}

// ################################################################
// ################################################################
// ################################################################
function SelectionStuff (objEl, bbnumber) {
	var strTag, strTagTwo;
	strTag = bbtags[bbnumber];
	strTagTwo = bbtags[bbnumber+1];
	if (objEl.setSelectionRange){		// for Mozilla...
		var intSelStart = objEl.selectionStart;
		var intSelEnd = objEl.selectionEnd;
		
		if (bbnumber == intImageNum){
			strTag += strImageUrl;
		} else if ((intSelStart <= intSelEnd) && (intSelEnd - intSelStart < 2)){
			if (TimeToCloseTags(bbnumber)){
				strTag = "";
				// Handle some other stuff:
				CloseATag(bbnumber);
			} else {
				strTagTwo = "";
				// Handle some other stuff:
				OpenATag(bbnumber);
			}
		}
		var selectedText = objEl.value.substring(0, objEl.selectionStart) + strTag;
		selectedText += objEl.value.substring(objEl.selectionStart, objEl.selectionEnd) + strTagTwo;
		selectedText += objEl.value.substring(objEl.selectionEnd, objEl.value.length);
		objEl.value = selectedText;
	} else if (is_opera){
		if (TimeToCloseTags(bbnumber)){
			strTag = "";
			CloseATag(bbnumber);
			objEl.value += strTagTwo;
		} else {
			strTagTwo = "";
			// Handle some other stuff:
			OpenATag(bbnumber);
			objEl.value += strTag;
		}
	} else {		// This bit for IE:
		if ((clientVer >= 4) && is_ie && is_win){
//alert ('ie');
			var selectedText = document.selection.createRange().text;
			if (selectedText != ""){
				var newText = strTag + selectedText + strTagTwo;
				document.selection.createRange().text = newText;
			} else {
				//objEl.
				//objEl.value = BODY.createControlRange()
				// Are we opening it or closing it?
				selectedText = objEl.createTextRange().text;
//alert ('Selected Text: ' + selectedText);
				var newText = strTag + selectedText + strTagTwo;
				objEl.createTextRange().text = newText;
//				alert ('new text: ' + newText);
				
			}
		}
	}
	objEl.focus();
}


// This function tells us if it's time to close a tag or not
// ################################################################
// ################################################################
// ################################################################
function TimeToCloseTags(bbnumber) {
var i, blnShouldClose;
	blnShouldClose = false;
		// This bit for list items.. 
	if (bbnumber == intListNum){ return false; }

	for (i = 0; i < bbcode.length; i++) {
		if (bbcode[i] == bbnumber+1) {
			bblast = i;
			blnShouldClose = true;
		}
	}
	return blnShouldClose;
}


// ################################################################
// ################################################################
// ################################################################
function CloseATag(bbnumber){
var butnumber, buttext;
	while (bbcode[bblast]) {
		butnumber = arraypop(bbcode) - 1;
		buttext = eval('document.message.addbbcode' + butnumber + '.value');
		eval('document.message.addbbcode' + butnumber + '.value ="' + buttext.substr(0,(buttext.length - 1)) + '"');
		imageTag = false;
	}
	return;
}


// ################################################################
// ################################################################
// ################################################################
function OpenATag(bbnumber) {
	if (imageTag && (bbnumber != intImageNum)) {
		// Close image tag before adding another
		lastValue = arraypop(bbcode) - 1;	// Remove the close image tag from the list
		eval ('document.message.addbbcode' + intImageNum + '.value = "Img"');	// Return button back to normal state
		imageTag = false;
	}

	// Open tag
	if ((bbnumber == intImageNum) && (imageTag == false)){
		imageTag = 1; // Check to stop additional tags after an unclosed image tag
	}
	if (bbnumber != intListNum){
		arraypush(bbcode,bbnumber+1);
		eval('document.message.addbbcode'+bbnumber+'.value += "*"');
	}
	return;
}


// ################################################################
// ################################################################
// ################################################################
function CloseAllTags() {
	// Close all open tags & set buttons text to default button 
	while (bbcode[0]) {
		butnumber = arraypop(bbcode) - 1;
		document.message.body.value += bbtags[butnumber + 1];
		buttext = eval('document.message.addbbcode' + butnumber + '.value');	// gets button text..
			// next line removes the * from the button text
		eval('document.message.addbbcode' + butnumber + '.value ="' + buttext.substr(0,(buttext.length - 1)) + '"');
	}
	imageTag = false; // All tags are closed including image tags :D
	document.message.body.focus();
	return;
}

// Store Caret position code from 
// http://www.faqts.com/knowledge_base/view.phtml/aid/1052/fid/130
// I actually don't think I'm using this at all anymore.. I'll have to 
// test.. 
// ################################################################
// ################################################################
// ################################################################
function storeCaret(textEl) {
if (textEl.createTextRange) 
	textEl.caretPos = document.selection.createRange().duplicate();
} 
// ################################################################
// ################################################################
// ################################################################
function IBCimage() {
  theSelection = false;
  if ((clientVer >= 4) && is_ie && is_win)
	theSelection = document.selection.createRange().text; // Get text selection
  if (theSelection) {
	var isURL = (theSelection.substring(0,7) == "http://");
  }

  var FoundErrors = '';
  if (isURL) { 
	var code = "[img]" + theSelection + "[/img]"; 
  } else { 
	var code = prompt("\nEnter the image URL (eg, http://www.yoursite.com/pic.gif)", "http://");
	if (!code) {
		return;
	} else {
		var isURL = (code.substring(0,7) == "http://"); 
		if (!isURL) {
			FoundErrors += "\nEntered value is not a URL.\nURL begins with \"http://\"";
		}
	}
        if (FoundErrors) {
          alert(FoundErrors);
          return;
        }
  }

	//strImageUrl = code;
	var code = "[img]" + code + "[/img]";	

//	SelectionStuff(document.message.body, intImageNum);
//	document.message.body.focus();
//	storeCaret(document.message.body);
//	return;
//alert ("oops - not supposed to get here!\nIs your browser Opera? " + is_opera);
  if ((clientVer >= 4) && is_ie && is_win) {
	theSelection = document.selection.createRange().text;
	if (!theSelection) {
		document.message.body.value += code;
		document.message.body.focus();
		return;
	}
	document.selection.createRange().text = "[img]" + theSelection + "[/img]";
	document.message.body.focus();
	return;
  } else {
	document.message.body.value += code;
	document.message.body.focus();
	return;
  }
  storeCaret(document.message.body);
} 

// ################################################################
// ################################################################
// ################################################################
function IBCram() {
  theSelection = false;
  if ((clientVer >= 4) && is_ie && is_win)
	theSelection = document.selection.createRange().text; // Get text selection
  if (theSelection) {
	var isURL = (theSelection.substring(0,7) == "http://");
  }

  var FoundErrors = '';
  if (isURL) { 
	var code = "[audio]" + theSelection + "[/audio]"; 
  } else { 
	var code = prompt("\nEnter the audio URL (eg, http://www.yoursite.com/audio.ram)", "http://");
	if (!code) {
		return;
	} else {
		var isURL = (code.substring(0,7) == "http://"); 
		if (!isURL) {
			FoundErrors += "\nEntered value is not a URL.\nURL begins with \"http://\"";
		}
	}
        if (FoundErrors) {
          alert(FoundErrors);
          return;
        }
        var code = "[audio]" + code + "[/audio]";
  }

  if ((clientVer >= 4) && is_ie && is_win) {
	theSelection = document.selection.createRange().text;
	if (!theSelection) {
		document.message.body.value += code;
		document.message.body.focus();
		return;
	}
	document.selection.createRange().text = "[audio]" + theSelection + "[/audio]";
	document.message.body.focus();
	return;
  } else {
	document.message.body.value += code;
	document.message.body.focus();
	return;
  }
  storeCaret(document.message.body);
} 

// ################################################################
// ################################################################
// ################################################################
function ibItem(e) { // this worked in opera.. (well, it puts the tag at the end of the textarea.)
  code = bbtags[e] 
  if ((clientVer >= 4) && is_ie && is_win) {
	theSelection = document.selection.createRange().text;
	if (!theSelection) {
		document.message.body.value += code;
		document.message.body.focus();
		return;
	}
	document.selection.createRange().text = code + theSelection;
	document.message.body.focus();
	return;
  } else {
	if (is_firefox){
		SelectionStuff(document.message.body, e);
		document.message.body.focus();
		return;
	}
	document.message.body.value += code;
	document.message.body.focus();
	return;
  }
  storeCaret(document.message.body);
}

// ################################################################
// ################################################################
// ################################################################
function IBCLink() {
  theSelection = false;
  if ((clientVer >= 4) && is_ie && is_win){
	theSelection = document.selection.createRange().text; // Get text selection
  }
  if (theSelection) {
	var isURL = (theSelection.substring(0,7) == "http://");
  }

  var FoundErrors = '';
  if (isURL) { 
  	var code = theSelection;
//	var code = "[a]" + theSelection + "[/a]"; 
  } else { 
	var code = prompt("\nEnter the link URL (eg, http://www.yoursite.com)", "http://");
	if (!code) {
		return;
	} else {
		if ((code.substring(0,7) == "http://") || (code.substring(0,8) == "https") || (code.substring(0,6) == "ftp://") ){
			isURL = 1;		
		} else {
			isURL = 0;
		}
		if (!isURL) {
			FoundErrors += "\nEntered value is not a URL.\nURL begins with \"http://\", \"https://\", or \"ftp://\"";
		}
	}
	
	var txt = prompt("\nEnter the link text (if different than URL)", "");
	if (!txt){
		txt = code;
	}
	
	if (FoundErrors) {
		alert(FoundErrors);
		return;
	}
  }

	//strImageUrl = code;
	var code = "[a]" + code + "[at]" + txt + "[/a]";	

//	SelectionStuff(document.message.body, intImageNum);
//	document.message.body.focus();
//	storeCaret(document.message.body);
//	return;
//alert ("oops - not supposed to get here!\nIs your browser Opera? " + is_opera);
  if ((clientVer >= 4) && is_ie && is_win) {
	theSelection = document.selection.createRange().text;
	if (!theSelection) {
		document.message.body.value += code;
		document.message.body.focus();
		return;
	}
//alert ('theSelection: ' + theSelection);
	document.selection.createRange().text = "[a]" + theSelection + "[/a]";
//alert ('theSelection now: ' + "[a]" + theSelection + "[/a]");
	document.message.body.focus();
	return;
  } else {
	document.message.body.value += code;
	document.message.body.focus();
	return;
  }
  storeCaret(document.message.body);
} 


//-->