var textarea;
var content;
var fieldpub;
document.write("<link href=\"css/bbEditor.css\" rel=\"stylesheet\" type=\"text/css\">");

//Colour Picker v1.0
//Provides functionality for a dropdown palette of colours.
//Copyright (C) 2006 Neil Fraser
//http://neil.fraser.name/software/colourpicker/

//This program is free software; you can redistribute it and/or
//modify it under the terms of the GNU General Public License
//as published by the Free Software Foundation.

//This program is distributed in the hope that it will be useful,
//but WITHOUT ANY WARRANTY; without even the implied warranty of
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//GNU General Public License (www.gnu.org) for more details.


//Include at the top of your page:
//<SCRIPT LANGUAGE='JavaScript1.3' SRC='cp.js'></SCRIPT>
//Call with:
//<INPUT NAME="mycolour" ID="mycolour" VALUE="ff00ff">
//<SCRIPT LANGUAGE='JavaScript1.3'><!--
//cp_init("mycolour")
////--></SCRIPT>

var cp_grid = [
               ["ffffff", "ffcccc", "ffcc99", "ffff99", "ffffcc", "99ff99", "99ffff", "ccffff", "ccccff", "ffccff"],
               ["cccccc", "ff6666", "ff9966", "ffff66", "ffff33", "66ff99", "33ffff", "66ffff", "9999ff", "ff99ff"],
               ["c0c0c0", "ff0000", "ff9900", "ffcc66", "ffff00", "33ff33", "66cccc", "33ccff", "6666cc", "cc66cc"],
               ["999999", "cc0000", "ff6600", "ffcc33", "ffcc00", "33cc00", "00cccc", "3366ff", "6633ff", "cc33cc"],
               ["666666", "990000", "cc6600", "cc9933", "999900", "009900", "339999", "3333ff", "6600cc", "993399"],
               ["333333", "660000", "993300", "996633", "666600", "006600", "336666", "000099", "333399", "663366"],
               ["000000", "330000", "663300", "663333", "333300", "003300", "003333", "000066", "330099", "330033"]];

var cp_dom = null;
var cp_caller = null;
var cp_defaultcolour = '666666';
var cp_closePID = null;

function cp_init(id,field) {
fieldpub = field;
	// Hide the form element, and replace it with a colour box.
	var obj = document.getElementById(id);
	if (!obj) {
		alert("Colour picker can't find '"+id+"'");
		return;
	}
	if (!cp_hex2rgb(obj.value)) {
		alert("Colour picker can't parse colour code in '"+id+"'");
		return;
	}
	// IE 6 chokes on this:
	//   obj.type = "hidden";
	// So we'll do it the hard way:
	var newobj = document.createElement("input");
	newobj.type = "hidden"
		newobj.value = obj.value;
	newobj.name = obj.name;
	if (obj.onchange) newobj.onchange = obj.onchange;
	obj.parentNode.insertBefore(newobj, obj);
	obj.parentNode.removeChild(obj);
	newobj.id = id;
	obj = newobj;

	// <IMG style="background-color: #ff0000; border: outset 3px #888;" SRC="1x1.gif" HEIGHT=20 WIDTH=30>
	var box = document.createElement("img");
	box.style.backgroundColor = "#"+obj.value;
	box.style.border = "solid 1px #DDD";
	box.src = "img/toolbar/1x1.gif";
	box.height = 27;
	box.width = 27;
	box.label = id;
	box.onclick = new Function("cp_open(this)");
	box.onmouseover = cp_cancelclose;
	box.onmouseout = cp_closesoon;
	obj.parentNode.insertBefore(box, obj);
}

function cp_open(caller) {
	// Create a table of colours.
	if (cp_dom) {
		cp_close();
		return;
	}
	cp_caller = caller;
//	alert(document.getElementById(caller.label));
	cp_defaultcolour = document.getElementById(caller.label).value;
	var posX = 0;
	var posY = caller.offsetHeight;
	while (caller) {
		posX += caller.offsetLeft;
		posY += caller.offsetTop;
		caller = caller.offsetParent;
	}
	cp_dom = document.createElement("div");
	var table = document.createElement("table");
	table.setAttribute("border", "1");
	table.style.backgroundColor = "#DDDDDD";
	table.onmouseover = cp_cancelclose;
	table.onmouseout = cp_closesoon;
	var tbody = document.createElement("tbody"); // IE 6 needs this.
	var row, cell;
	for (var y=0; y<cp_grid.length; y++) {
		row = document.createElement("tr");
		tbody.appendChild(row);
		for (var x=0; x<cp_grid[y].length; x++) {
			cell = document.createElement("td");
			row.appendChild(cell);
			cell.style.backgroundColor = "#"+cp_grid[y][x];
			cell.label = cp_grid[y][x];
			cell.style.border = "solid 1px #"+cell.label;
			cell.onmouseover = cp_onmouseover;
			cell.onmouseout = cp_onmouseout;
			cell.onclick = cp_onclick;
			cell.innerHTML = "<img src='img/toolbar/1x1.gif' height='16' width='16'>";
			if (cp_defaultcolour.toLowerCase() == cp_grid[y][x].toLowerCase()) {
				cell.onmouseover();
				cell.onmouseout();
			}
		}
	}
	table.appendChild(tbody);
	cp_dom.appendChild(table);

	cp_dom.style.position = "absolute";
	cp_dom.style.left = "0px";
	cp_dom.style.top = "0px";
	cp_dom.style.visibility = "hidden";
	document.body.appendChild(cp_dom);
	// Don't widen the screen.
	if (posX + cp_dom.offsetWidth > document.body.offsetWidth)
		posX = document.body.offsetWidth - cp_dom.offsetWidth;
	cp_dom.style.left = posX+"px";
	cp_dom.style.top = posY+"px";
	cp_dom.style.visibility = "visible";
}

function cp_close() {
	// Close the table now.
	cp_cancelclose();
	if (cp_dom)
		document.body.removeChild(cp_dom)
		cp_dom = null;
	cp_caller = null;
}

function cp_closesoon() {
	// Close the table a split-second from now.
	cp_closePID = window.setTimeout("cp_close()", 250);
}

function cp_cancelclose() {
	// Don't close the colour table after all.
	if (cp_closePID)
		window.clearTimeout(cp_closePID);
}

function cp_onclick() {
	// Clicked on a colour.  Close the table, set the colour, fire an onchange event.
	cp_caller.style.backgroundColor = "#"+this.label;
	doAddTags('[color=#'+this.label+']','[/color]',window.fieldpub)
	var input = document.getElementById(cp_caller.label)
	input.value = this.label;
	cp_close();
	if (input.onchange)
		input.onchange();
}

function cp_onmouseover() {
	// Place a black border on the cell if the contents are light, a white border if the contents are dark.
	this.style.borderStyle = "dotted";
	var rgb = cp_hex2rgb(this.label);
	if (rgb[0]+rgb[1]+rgb[2] > 255*3/2)
		this.style.borderColor = "black";
	else
		this.style.borderColor = "white";
}

function cp_onmouseout() {
	// Remove the border.
	if (this.label == cp_defaultcolour)
		this.style.borderStyle = "outset";
	else
		this.style.border = "solid 1px #"+this.label;
}

function cp_hex2rgb(hexcode) {
	// Parse '0088ff' and return the [r, g, b] ints.
	var m = hexcode.match(/^([a-f0-9][a-f0-9])([a-f0-9][a-f0-9])([a-f0-9][a-f0-9])$/);
	if (m) {
		var r = parseInt(m[1], 16);
		var g = parseInt(m[2], 16);
		var b = parseInt(m[3], 16);
		return [r, g, b];
	} else {
		return null;
	}
}


//toolbar

function edToolbar(obj) {
	document.write("<div class=\"toolbar\">");
	document.write("<img class=\"button\" src=\"img/toolbar/bold.gif\" name=\"btnBold\" title=\"Bold\" onClick=\"doAddTags('[b]','[/b]','" + obj + "')\">");
	document.write("<img class=\"button\" src=\"img/toolbar/italic.gif\" name=\"btnItalic\" title=\"Italic\" onClick=\"doAddTags('[i]','[/i]','" + obj + "')\">");
	document.write("<img class=\"button\" src=\"img/toolbar/underline.gif\" name=\"btnUnderline\" title=\"Underline\" onClick=\"doAddTags('[u]','[/u]','" + obj + "')\">");
	document.write("<img class=\"button\" src=\"img/toolbar/link.gif\" name=\"btnLink\" title=\"Insert URL Link\" onClick=\"doURL('" + obj + "')\">");
	//document.write("<img class=\"button\" src=\"img/toolbar/picture.gif\" name=\"btnPicture\" title=\"Insert Image\" onClick=\"doImage('" + obj + "')\">");
	document.write("<img class=\"button\" src=\"img/toolbar/ordered.gif\" name=\"btnList\" title=\"Ordered List\" onClick=\"doList('[ol]','[/ol]','" + obj + "')\">");
	document.write("<img class=\"button\" src=\"img/toolbar/unordered.gif\" name=\"btnList\" title=\"Unordered List\" onClick=\"doList('[ul]','[/ul]','" + obj + "')\">");
	document.write("<img class=\"button\" src=\"img/toolbar/quote.gif\" name=\"btnQuote\" title=\"Quote\" onClick=\"doAddTags('[quote]','[/quote]','" + obj + "')\">"); 
	document.write("<img class=\"button\" src=\"img/toolbar/code.gif\" name=\"btnCode\" title=\"Code\" onClick=\"doAddTags('[code]','[/code]','" + obj + "')\">");
	document.write("<form><input name=\"mycolour\" id=\"mycolour\" value=\"666666\"></form>");
	document.write("</div>");
	//document.write("<textarea id=\""+ obj +"\" name = \"" + obj + "\" cols=\"" + width + "\" rows=\"" + height + "\"></textarea>");
}
function doSmileys (obj, tag1) {

//	IE support
	textarea = document.getElementById(obj);
	// Code for IE
	if (document.selection) 
	{
		textarea.focus();
		var sel = document.selection.createRange();
		//alert(sel.text);
		sel.text = sel.text + tag1;
	}
	else 
	{  // Code for Mozilla Firefox
		var len = textarea.value.length;
		var start = textarea.selectionStart;
		var end = textarea.selectionEnd;


		var scrollTop = textarea.scrollTop;
		var scrollLeft = textarea.scrollLeft;


		var sel = textarea.value.substring(start, end);
		//alert(sel);
		var rep = sel + tag1;
		textarea.value =  textarea.value.substring(0,start) + rep + textarea.value.substring(end,len);

		textarea.scrollTop = scrollTop;
		textarea.scrollLeft = scrollLeft;


	}
}

function doImage(obj)
{
	textarea = document.getElementById(obj);
	var url = prompt('Enter the Image URL:','http://');
	var scrollTop = textarea.scrollTop;
	var scrollLeft = textarea.scrollLeft;

	if (url != '' && url != null) {

		if (document.selection) 
		{
			textarea.focus();
			var sel = document.selection.createRange();
			sel.text = '[img]' + url + '[/img]';
		}
		else 
		{
			var len = textarea.value.length;
			var start = textarea.selectionStart;
			var end = textarea.selectionEnd;

			var sel = textarea.value.substring(start, end);
			//alert(sel);
			var rep = '[img]' + url + '[/img]';
			textarea.value =  textarea.value.substring(0,start) + rep + textarea.value.substring(end,len);


			textarea.scrollTop = scrollTop;
			textarea.scrollLeft = scrollLeft;
		}
	}

}

function doURL(obj)
{
	textarea = document.getElementById(obj);
	var url = prompt('Enter the URL:','http://');
	var scrollTop = textarea.scrollTop;
	var scrollLeft = textarea.scrollLeft;

	if (url != '' && url != null) {

		if (document.selection) 
		{
			textarea.focus();
			var sel = document.selection.createRange();

			if(sel.text==""){
				sel.text = '[url=' + url + ']'  + url + '[/url]';
			} else {
				sel.text = '[url=' + url + ']' + sel.text + '[/url]';
			}			

			//alert(sel.text);

		}
		else 
		{
			var len = textarea.value.length;
			var start = textarea.selectionStart;
			var end = textarea.selectionEnd;

			var sel = textarea.value.substring(start, end);

			if(sel==""){
				var rep = '[url=' + url + ']' + url + '[/url]';
			} else
			{
				var rep = '[url=' + url + ']' + sel + '[/url]';
			}
			//alert(sel);

			textarea.value =  textarea.value.substring(0,start) + rep + textarea.value.substring(end,len);


			textarea.scrollTop = scrollTop;
			textarea.scrollLeft = scrollLeft;
		}
	}
}

function doAddTags(tag1,tag2,obj)
{
	textarea = document.getElementById(obj);
	// Code for IE
	if (document.selection) 
	{
		textarea.focus();
		var sel = document.selection.createRange();
		//alert(sel.text);
		sel.text = tag1 + sel.text + tag2;
	}
	else 
	{  // Code for Mozilla Firefox
		var len = textarea.value.length;
		var start = textarea.selectionStart;
		var end = textarea.selectionEnd;


		var scrollTop = textarea.scrollTop;
		var scrollLeft = textarea.scrollLeft;


		var sel = textarea.value.substring(start, end);
		//alert(sel);
		var rep = tag1 + sel + tag2;
		textarea.value =  textarea.value.substring(0,start) + rep + textarea.value.substring(end,len);

		textarea.scrollTop = scrollTop;
		textarea.scrollLeft = scrollLeft;


	}
}

function doList(tag1,tag2,obj){
	textarea = document.getElementById(obj);
//	Code for IE
	if (document.selection) 
	{
		textarea.focus();
		var sel = document.selection.createRange();
		var list = sel.text.split('\n');

		for(i=0;i<list.length;i++) 
		{
			list[i] = '[*]' + list[i] + '[/*]';
		}
		//alert(list.join("\n"));
		sel.text = tag1 + '\n' + list.join("\n") + '\n' + tag2;
	} else
		// Code for Firefox
	{

		var len = textarea.value.length;
		var start = textarea.selectionStart;
		var end = textarea.selectionEnd;
		var i;

		var scrollTop = textarea.scrollTop;
		var scrollLeft = textarea.scrollLeft;


		var sel = textarea.value.substring(start, end);
		//alert(sel);

		var list = sel.split('\n');

		for(i=0;i<list.length;i++) 
		{
			list[i] = '[*]' + list[i] + '[/*]';
		}
		//alert(list.join("<br>"));


		var rep = tag1 + '\n' + list.join("\n") + '\n' +tag2;
		textarea.value =  textarea.value.substring(0,start) + rep + textarea.value.substring(end,len);

		textarea.scrollTop = scrollTop;
		textarea.scrollLeft = scrollLeft;
	}
}

