var lastPickedColor = '#FFFFFF'
function createElement(parent, tagname) {
	var elem = document.createElement(tagname);
	if (parent) {
		parent.appendChild(elem);
	}
	return elem;
}
//
function fillColorPalette(){
	var cpContainer = ge('colorPicker')
	var cpTable = createElement(cpContainer, "table")
	
	cpTable.cellSpacing = '0';
	cpTable.cellPadding = '0';
	cpTable.bgcolor = '#FFFFFF';
	var cpTableBody = createElement(cpTable, "tbody");
	
	cpTable.style.border = "1px solid #fff"
	for (b = 0; b < 6; b++){
		var cpRow = createElement(cpTableBody, "tr")
		var cell = createElement(cpRow, "td")
		var clink = createElement(cell, "a")
		clink.style.display = "block"
		clink.style.backgroundColor = rgbOf(b, b, b)
		clink.style.height = "8px"
		clink.style.width = "8px"
		clink.style.fontSize = "1px"
		clink.style.lineHeight = "1px"
		//clink.onmouseover = function() { palette.updateColor(this.style.backgroundColor) }
		clink.onclick = function(){colorClicked(this.style.backgroundColor)}
		for (r = 0; r < 3; r++) {
			for (g = 0; g < 6; g++) {	
					var cell = createElement(cpRow, "td")
					var clink = createElement(cell, "a")
					clink.style.display = "block"
					clink.style.backgroundColor = rgbOf(r, g, b)
					clink.style.height = "8px"
					clink.style.width = "8px"
					clink.style.fontSize = "1px"
					clink.style.lineHeight = "1px"
					//clink.onmouseover = function() { palette.updateColor(this.style.backgroundColor) }
					clink.onclick = function(){colorClicked(this.style.backgroundColor)}
			}
		}
	}
	for (b = 0; b < 6; b++){
		var cpRow = createElement(cpTableBody, "tr")
		var cell = createElement(cpRow, "td")
		var clink = createElement(cell, "a")
		clink.style.display = "block"
		switch (b){
			case 0:
			clink.style.backgroundColor = rgbOf(5, 0, 0)
			break;
			case 1:
			clink.style.backgroundColor = rgbOf(0, 5, 0)
			break;
			case 2:
			clink.style.backgroundColor = rgbOf(0, 0, 5)
			break;
			case 3:
			clink.style.backgroundColor = rgbOf(5, 5, 0)
			break;
			case 4:
			clink.style.backgroundColor = rgbOf(0, 5, 5)
			break;
			case 5:
			clink.style.backgroundColor = rgbOf(5, 0, 5)
			break;
		}
		
		clink.style.height = "8px"
		clink.style.width = "8px"
		clink.style.fontSize = "1px"
		clink.style.lineHeight = "1px"
		//clink.onmouseover = function() { palette.updateColor(this.style.backgroundColor) }
		clink.onclick = function(){colorClicked(this.style.backgroundColor)}

		for (r = 3; r < 6; r++) {
			for (g = 0; g < 6; g++) {	
					var cell = createElement(cpRow, "td")
					var clink = createElement(cell, "a")
					clink.style.display = "block"
					clink.style.backgroundColor = rgbOf(r, g, b)
					clink.style.height = "8px"
					clink.style.width = "8px"
					clink.style.fontSize = "1px"
					clink.style.lineHeight = "1px"
					//clink.onmouseover = function() { palette.updateColor(this.style.backgroundColor) }
					clink.onclick = function(){colorClicked(this.style.backgroundColor)}
			}
		}
	}
}
function colorClicked(rgb){
	if (rgb.substr(0,3) == "rgb") {
		var rgbvalues = rgb.substr(4, (rgb.length - 5)).split(',')
		longIntColor =  (0x10000 * Number(rgbvalues[0])) + (0x100 * Number(rgbvalues[1])) + Number(rgbvalues[2])
		var RGB = new Array(256);
		var k = 0;
		var hex = new Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F");
		for (i = 0; i < 16; i++) {
				for (j = 0; j < 16; j++) {
						RGB[k] = hex[i] + hex[j];
						k++;
				}
		}
		rr = RGB[Number(rgbvalues[0])]
        gg = RGB[Number(rgbvalues[1])]
        bb = RGB[Number(rgbvalues[2])]
		lastPickedColor = "#" + rr + gg + bb; 
		lastColorPicker.style.backgroundColor = lastPickedColor
		//ge('myFlash').bgcolor = '#FF00FF';
		//window.document.movie.bgcolor = '#FF00FF';
		palleteHide()
	}
}
function rgbToHex(rgb){
	if (rgb.substr(0,3) == "rgb") {
		var rgbvalues = rgb.substr(4, (rgb.length - 5)).split(',')
		longIntColor =  (0x10000 * Number(rgbvalues[0])) + (0x100 * Number(rgbvalues[1])) + Number(rgbvalues[2])
		var RGB = new Array(256);
		var k = 0;
		var hex = new Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F");
		for (i = 0; i < 16; i++) {
				for (j = 0; j < 16; j++) {
						RGB[k] = hex[i] + hex[j];
						k++;
				}
		}
		rr = RGB[Number(rgbvalues[0])]
        gg = RGB[Number(rgbvalues[1])]
        bb = RGB[Number(rgbvalues[2])]
		hexColor = "#" + rr + gg + bb; 
		return(hexColor)
	}
	
}
function rgbOf(r, g, b) {
	return "rgb(" + (51 * r) +  "," + (51 * g) + "," + (51 * b) + ")"
}

var showPalette = function(obj, XOffset, YOffset) {
	lastColorPicker = obj
	palettePos = GetElementPosition(obj)
	document.getElementById('colorPicker').style.left = (palettePos.left + XOffset) + "px"
	document.getElementById('colorPicker').style.top = (palettePos.top + YOffset) + "px"
	document.getElementById('colorPicker').style.zIndex = "10000"
	document.getElementById('colorPicker').style.display = "block"
	palleteShow()
	hidePalette = false
	document.onclick = function() { palleteHide() }
	return false;
}
 function palleteHide(){
	 if (hidePalette){
	 document.getElementById('colorPicker').style.display = "none"
	 }else{
		 hidePalette = true
	 }
 }
 function palleteShow(){
	 document.getElementById('colorPicker').style.display = "block"
 }

function GetElementPosition(target) {
  if (typeof(target) == "string") {
      target = getObject(target);
  }
  if(target.offsetParent) {
    for(var posX = 0, posY = 0; target.offsetParent; target = target.offsetParent ) {
      posX += target.offsetLeft;
      posY += target.offsetTop;
    }
    return { left:posX, top:posY };
  } 
  else {
    return { left:target.x, top:target.y };
  }
}