// Javascript for the PM Quick Reply MOD by Rondom <rondom@arcor.de> http://www.rondom.gu2.info
// Based on Editor Mod by Smartor <smartor_xp@hotmail.com> http://smartor.is-root.com
// and Advanced Quick Reply by Rusty Dragon <dev@RustyDragon.com>
// Don't remove these comments!

// set text area field name in calling file eg:
//var tafld="article_text";

// Helpline messages
b_help = "Bold text: [b]text[/b]  (alt+b)";
i_help = "Italic text: [i]text[/i]  (alt+i)";
u_help = "Underline text: [u]text[/u]  (alt+u)";
q_help = "Quote text: [quote]text[/quote]  (alt+q)";
c_help = "Code display: [code]code[/code]  (alt+c)";
l_help = "List: [list]text[/list] (alt+l)";
o_help = "Ordered list: [olist=]text[/list]  (alt+o)";
p_help = "Insert image: [img]http://image_url[/img]  (alt+p)";
w_help = "Insert URL: [url]http://url[/url] or [url=http://url]URL text[/url]  (alt+w)";
a_help = "Close all open bbCode tags";
s_help = "Font color: [color=red]text[/color]  Tip: you can also use color=#FF0000";
f_help = "Font size: [size=x-small]small text[/size]";
//Hide_help = "Hide code: [hide]code[/hide] or [hide=click text]code[/hide] (alt+d)";

function helpline(help) {
	document.getElementById('helpbox').value = eval(help + "_help");
}

var clientPC = navigator.userAgent.toLowerCase();
var clientVer = parseInt(navigator.appVersion);

var is_ie = ((clientPC.indexOf("msie") != -1) && (clientPC.indexOf("opera") == -1));
var is_clip_able = ((clientPC.indexOf("msie") != -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_win   = ((clientPC.indexOf("win")!=-1) || (clientPC.indexOf("16bit") != -1));
var is_mac    = (clientPC.indexOf("mac")!=-1);
var bb_open = new Array(3);

if (window.Event){
  document.captureEvents(Event.KEYDOWN);
  document.captureEvents(Event.KEYUP);
}
document.onkeydown = myKeyDown;
document.onkeyup = myKeyUp;

var ctrl_pressed = false;
var shift_pressed = false;

function getTextarea()  {
 	 var textarea;
 	 var areas = document.getElementsByTagName("textarea");
		for (var i=0; i<areas.length; i++)  {
			// orig if (areas[i].name.match(tafld))  {
			if (areas[i].name==tafld)  {
				textarea = areas[i];
				//alert('tafld='+tafld+'\narees-i-name='+areas[i].name);
				break;
			}
		}

	return textarea;
}

function getTextareaSelection()  {
  var sel;
	if (is_ie)  {
    var range = document.selection.createRange();
		sel = range.text; // Get text selection
	} else {
		sel = window.getSelection(); // Get text selection
		if (sel == "") {
			var textarea = getTextarea();
			sel = textarea.value.substr(textarea.selectionStart,textarea.selectionEnd-textarea.selectionStart);
		}
	
	}

	return sel;
}

function quoteSelection() {
	var textarea = getTextarea();
	var theSelection = getTextareaSelection();
	if (theSelection == '')  {
		if (bb_open[2])  {
			bb_open[2] = false;
			PostWrite('[/quote]');
		} else {
			bb_open[2] = true;
			PostWrite('[quote]');
		}
	} else {
		// Add tags around selection
		PostWrite( '[quote]' + theSelection + '[/quote]');
	}
	return;
}

function setClicked(id)  {
	if (id == 'b') var bbcid=0;
	if (id == 'i') var bbcid=1;
	if (id == 'quote') var bbcid=2;
  if (id == 'center') var bbcid=3;
  if (id == 'code') var bbcid=4;
  if (id=='list') var bbcid=5;
  if (id=='olist=') var bbcid=6;
  if (id=='color') var bbcid=7;
  if (id=='size') var bbcid=8;
  if (id=='u') var bbcid=9;  
  
  if (bb_open[bbcid])
    document.getElementById(id).className = 'bbcode_btn_down';
  else
    document.getElementById(id).className = 'bbcode_btn';

}
function emoticon(text) {
        
		if (document.getElementById(tafld))
		 {
			var txtarea = document.getElementById(tafld);
		 } else {
			// Found this 	if (document.getElementById('tafld')) on line 126 & 127 shouldn't be in quotes 08/14/06
			if (document.getElementById(tafld))
				var txtarea=document.getElementById(tafld).value;
			else
				var txtarea=document.theform.page_content;
			
		 }	
        text = ' ' + text + ' ';
        if (txtarea.createTextRange && txtarea.caretPos) {
                var caretPos = txtarea.caretPos;
                caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? caretPos.text + text + ' ' : caretPos.text + text;
                txtarea.focus();
        } else {
                txtarea.value  += text;
                txtarea.focus();
        }
}

function oldemoticon(text) {
	text = ' ' + text + ' ';
	PostWrite(text);
}

function bbfontstyle(bbopen, bbclose) {
	var textarea = getTextarea();
	var theSelection = getTextareaSelection();
	if (!theSelection) {
		textarea.value += bbopen + bbclose;
		textarea.focus();
		return;
	}
	PostWrite(bbopen + theSelection + bbclose);
	textarea.focus();
	return;
}

function storeCaret(textEl) {
	if (is_ie)  {
		if (!textEl) textEl = getTextarea();
		if (textEl.createTextRange) 
			textEl.caretPos = document.selection.createRange().duplicate();
	}
}

function PostWrite(text) {
	var textarea = getTextarea();
	if (is_ie) {
		if (textarea.caretPos)  {
			var caretPos = textarea.caretPos;
			caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ?	text + ' ' : text;
			caretPos.collapse(false);
			textarea.focus(caretPos);
		} else insertAtCursor(textarea,text);
		return;
	} else if (textarea.setSelectionRange) {
		   var len = textarea.selectionStart;
		   textarea.value = textarea.value.substr( 0,len) + textarea.value.substr(textarea.selectionEnd,textarea.value.length);
		   textarea.value = textarea.value.substr( 0, len ) + text + textarea.value.substr( len );
       textarea.selectionStart = len + text.length;
       textarea.selectionEnd = len + text.length;
//		   textarea.setSelectionRange(len,len+text.length);
	} else insertAtCursor(textarea.text);
//	textarea.focus()
}

function BBC(bbcname,value) {
	var spectoken = new Array();
	var textarea = getTextarea();
	var theSelection = getTextareaSelection();
	if (theSelection != '') {
		if (bbcname.indexOf('=') > -1 )
		{
			spectoken=bbcname.split('=');
			PostWrite("[" + bbcname +value +"]"  + theSelection + "[/" + spectoken[0] + "]");
		} else {
			PostWrite("[" + bbcname + "]" + theSelection + "[/" + bbcname + "]");
		}
		return;
	}
	if (bbcname == 'b') var bbcid=0;
	if (bbcname == 'i') var bbcid=1;
	if (bbcname == 'center') var bbcid=3;
	if (bbcname=='code') var bbcid=4;
	if (bbcname=='list') var bbcid=5;
	if (bbcname=='olist=') var bbcid=6;
	if (bbcname.substr(0,4)=='color') var bbcid=7;
	if (bbcname.substr(0,4)=='size ') var bbcid=8;
	if (bbcname == 'u') var bbcid=9;	

			if (!bb_open[bbcid]) {

				ToAdd = "[" + bbcname + "]";
				bb_open[bbcid] = 1;
			} else {

				ToAdd = "[/" + bbcname + "]";
				bb_open[bbcid] = 0;
			}
	PostWrite(ToAdd);
}


function BBCurl() {
	var textarea = getTextarea();
	var enterTITLE = getTextareaSelection();
	var FoundErrors = '';
	var enterURL   = prompt("Please enter the URL to link to", "http://");
	if (!enterURL || enterURL == 'http://')    {
		FoundErrors += "Please enter a URL to link to";
	}
	if (FoundErrors)  {
		alert(FoundErrors);
		return;
	}
	if (enterTITLE != '')
		var ToAdd = "[url="+enterURL+"]"+enterTITLE+"[/url]";
	else var ToAdd = "[url]"+enterURL+"[/url]";
	PostWrite(ToAdd);
	textarea.focus();
}

function BBCimg() {
	var textarea = getTextarea();
	var FoundErrors = '';
	var theSelection = getTextareaSelection();
	if (theSelection == '')
		var enterURL   = prompt("Please enter the image to include","http://");
	else var enterURL = theSelection;
	if (!enterURL || enterURL == 'http://') {
		FoundErrors += "Please enter the address of the image to include";
	}
	if (FoundErrors) {
		alert(FoundErrors);
		return;
	}
	var ToAdd = "[img]"+enterURL+"[/img]";
	PostWrite(ToAdd);
	textarea.focus();
}

function checkForm() {
	var textarea = getTextarea();
	formErrors = false;
	if (textarea.value.length < 2) {
		formErrors = 'You must enter a message when posting.';
	}
	if (formErrors) {
		alert(formErrors);
		return false;
	} else {
		return true;
	}
}

function insertAtCursor(myField, myValue) {
  //IE support
  if (document.selection) {
    myField.focus();
    sel = document.selection.createRange();
    sel.text = myValue;
  }
  //MOZILLA/NETSCAPE support
  else if (myField.selectionStart || myField.selectionStart == '0') {
    var startPos = myField.selectionStart;
    var endPos = myField.selectionEnd;
    myField.value = myField.value.substring(0, startPos)
    + myValue
    + myField.value.substring(endPos, myField.value.length);
    myField.selectionStart = startPos + myValue.length;
    myField.selectionEnd = endPos + myValue.length;
  } else {
    myField.value += myValue;
  }
}

function myKeyDown(e){
  if (window.Event){
    mykey = e.which;
  }
  else{
    mykey = event.keyCode
  }
  switch (mykey)  {
    case 17: // ctrl
      ctrl_pressed = true;
      break;
    case 16: // shift
      shift_pressed = true;
      break;
    case 66: // B
      if (ctrl_pressed && shift_pressed)  {
        BBC('b','');
        setClicked('b');
        ctrl_pressed = false;
        shift_pressed = false;
        break;
      }
      break;
    case 81: // Q
      if (ctrl_pressed && shift_pressed)  {
        quoteSelection();
        setClicked('quote');
        ctrl_pressed = false;
        shift_pressed = false;
        break;
      }
      break;
    case 73: // I
      if (ctrl_pressed && shift_pressed)  {
        BBC('i','');
        setClicked('i');
        ctrl_pressed = false;
        shift_pressed = false;
        break;
      }
      break;
    case 76: // L
      if (ctrl_pressed && shift_pressed)  {
        BBCurl();
        ctrl_pressed = false;
        shift_pressed = false;
        break;
      }
      break;
    default:
    break;
  }
}

function myKeyUp(e){
  if (window.Event){
    mykey = e.which;
  }
  else{
    mykey = event.keyCode
  }
  if (mykey == 17)  {
    ctrl_pressed = false;
  } else if (mykey == 16)  {
    shift_pressed = false;
  }
}

function GetParentForm(e) {	// used for bbcode_symbols_dropdown()
	var targ;
	if (!e) var e = window.event;
	if (e.target) targ = e.target; 
	else if (e.srcElement) targ = e.srcElement;
	if (targ.nodeType == 3) { // Safari bug work-around
		targ = targ.parentNode;
	}
	targ = targ.parentNode;
    while (targ.tagName != "FORM") {
		targ = targ.parentNode;
	}
	return targ;
}

function symbol(e) {
	var ThisForm = GetParentForm(e);
	var myindex = ThisForm.dropdown.selectedIndex;
	var symbol = ThisForm.dropdown.options['myindex'].value;
	InsertText(e, symbol);
}

// insert text at current caret position..
// [will replace current selection]

function InsertText(e, text) {

	// grab the textarea element from the current form..
	textarea = GetParentFormTextarea(e);
	StoredUndo = textarea.value;

	// IE...
	if (typeof(textarea.caretPos) != "undefined") { 
		var caretPos = textarea.caretPos;
		caretPos.text = text;
		caretPos.select();
		textarea.focus();

	// Mozish...
	} else if (typeof(textarea.selectionStart) != "undefined") { 
		var begin = textarea.value.substr(0, textarea.selectionStart);
		var end = textarea.value.substr(textarea.selectionEnd);
		var scrollPos = textarea.scrollTop;
		textarea.value = begin + text + end;
		textarea.scrollTop = scrollPos;
		textarea.setSelectionRange(begin.length + text.length, begin.length + text.length );
		textarea.focus();

	// whateva..
	} else {
		textarea.value += text;
		textarea.focus(textarea.value.length - 1);
	}
}
