/*
 * Plasma Color Picker - Library for Color Picking for fields in Plasma.
 * Copyright (C) 1995-2007 IonicWeb, LLC.  All rights reserved.
 *
 * This library is only available for use as part of the Plasma 2007
 * Web Application Server by IonicWeb, LLC.  Any other use is currently
 * prohibited.  For more information and license options for this
 * work, please send requests to info@ionicweb.com. 
 *
 * The Plasma license is found at http://ionicweb.com/plasma/license
 */
     var perline = 8;
     //var perline = 9;
     var divSet = false;
     var curId;
     var cur_cbID;
     var callback_on = false;
     //var colorLevels = Array("0", "3", "6", "9", "C", "F");
     var colorLevels = Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F");
     var colorArray = Array();
     var cp_ie = false;
     var nocolor = "none";
     if (document.all) { cp_ie = true; nocolor = ""; }
     
    function getObj(id) {
        //if (cp_ie) 
        //    { return document.all[id]; } 
        //else 
        //    { return document.getElementById(id); }
        return document.getElementById(id);
     }

     function addColor(r, g, b) {
     	var red = colorLevels[r];
     	var green = colorLevels[g];
     	var blue = colorLevels[b];
     	addColorValue(red, green, blue);
     }
     
     function addColorValue(r, g, b) {
     	colorArray[colorArray.length] = "#" + r + r + g + g + b + b;
     }
     function addColorValueLong(r, g, b) {
     	colorArray[colorArray.length] = "#" + r + g + b;
     }

     function setColor(color) {
        
     	var link = getObj(curId);
     	var field = getObj(curId + "field");
     	var picker = getObj("colorpicker");
        field.value = color;
        link.value = color;
     	if (color == "") {
            field.style.background = nocolor;
            field.style.color = nocolor;
            color = nocolor;
     	} else {
            field.style.background = color;
            field.style.color = color;
        }
     	picker.style.display = "none";
        eval(getObj(curId + "field").title);

        if ( callback_on ) {
            callback_on = false;
            setColorCallback(curId,cur_cbID);
        }

     }

     function setDiv() {     
     
     	if (!document.createElement) { return; }
        var elemDiv = document.createElement("div");
        if (typeof(elemDiv.innerHTML) != "string") { return; }
        genColors();
        elemDiv.id = "colorpicker";
        elemDiv.style.position = "absolute";
        elemDiv.style.display = "none";
        
        elemDiv.style.zIndex = 99;
        
        elemDiv.style.border = "#000000 1px solid";
        elemDiv.style.background = "#FFFFFF";
        elemDiv.innerHTML = "<span style=\"font-family:Verdana; font-size:11px;\">Pick a color: " 
          	+ "(<a href=\"javascript:setColor(\'\');\">No color</a>)<br>" 
        	+ getColorTable() 
        	+ "</span>";

        document.body.appendChild(elemDiv);
        divSet = true;
     }

     function pickColorPlaced(callback,x,y,id,cb_id) {
        
     	if (!divSet) { setDiv(); }
     	var picker = getObj("colorpicker");
        if (id == curId && picker.style.display == "block") {
            picker.style.display = "none";
            return;
        }
     	curId = id;
        
        if ( cb_id != null )
            cur_cbID = cb_id;

        callback_on = callback;

     	var thelink = getObj(id);
     	picker.style.top = getAbsoluteOffsetTop(thelink) + y;
     	picker.style.left = getAbsoluteOffsetLeft(thelink) + x;     
	picker.style.display = "block";

     }

     function pickColor(id) {
        
     	if (!divSet) { setDiv(); }
     	var picker = getObj("colorpicker");     	
        if (id == curId && picker.style.display == "block") {
            picker.style.display = "none";
            return;
        }
     	curId = id;
     	var thelink = getObj(id);
     	picker.style.top = getAbsoluteOffsetTop(thelink) + 20;
     	picker.style.left = getAbsoluteOffsetLeft(thelink);     
	picker.style.display = "block";
     }

     function genColors() 
     {
        addColorValue("0","0","0");
        addColorValue("1","1","1");
        addColorValue("2","2","2");
        addColorValue("3","3","3");
        addColorValue("4","4","4");
        addColorValue("5","5","5");
        addColorValue("6","6","6");
        addColorValue("7","7","7");
        addColorValue("8","8","8");
        addColorValue("9","9","9");                
        addColorValue("A","A","A");
        addColorValue("B","B","B");
        addColorValue("C","C","C");
        addColorValue("D","D","D");
        addColorValue("E","E","E");
        addColorValue("F","F","F");                                
        
        addColorValueLong("61","00","00");
        addColorValueLong("b0","06","04");
        addColorValueLong("dd","00","00");
        addColorValueLong("f2","08","84");
        addColorValueLong("ff","99","cc");
        addColorValueLong("ff","d9","eb");
        addColorValueLong("73","40","1f");
        addColorValueLong("bf","53","0a");
        addColorValueLong("f5","62","00");
        addColorValueLong("ff","99","00");
        addColorValueLong("ff","cc","00");
        addColorValueLong("ff","eb","96");
        addColorValueLong("52","46","31");
        addColorValueLong("96","77","3f");
        addColorValueLong("db","c1","7f");
        addColorValueLong("e0","d6","00");
        addColorValueLong("fc","f4","1e");
        addColorValueLong("ff","ff","99");
        addColorValueLong("00","45","0c");
        addColorValueLong("05","66","37");
        addColorValueLong("4f","87","6c");
        addColorValueLong("1f","b7","14");
        addColorValueLong("89","e3","40");
        addColorValueLong("cc","ff","cc");
        addColorValueLong("0e","59","56");
        addColorValueLong("17","94","90");
        addColorValueLong("1e","c4","ab");
        addColorValueLong("26","b6","d1");
        addColorValueLong("82","e4","f5");
        addColorValueLong("cc","ff","ff");
        addColorValueLong("00","00","6b");
        addColorValueLong("00","39","b2");
        addColorValueLong("0a","51","e5");
        addColorValueLong("07","86","ff");
        addColorValueLong("80","c0","ff");
        addColorValueLong("c7","e3","ff");
        addColorValueLong("4c","07","59");
        addColorValueLong("a8","00","ab");
        addColorValueLong("cc","51","e0");
        addColorValueLong("78","25","c7");
        addColorValueLong("ab","54","ff");
        addColorValueLong("d4","a8","ff");
        addColorValueLong("00","00","00");
        addColorValueLong("33","33","33");
        addColorValueLong("66","66","66");
        addColorValueLong("99","99","99");
        addColorValueLong("cc","cc","cc");
        addColorValueLong("ff","ff","ff");
       	
        return colorArray;
     }

     /*
     function genColors() {
        addColorValue("0","0","0");
        addColorValue("3","3","3");
        addColorValue("6","6","6");
        addColorValue("8","8","8");
        addColorValue("9","9","9");                
        addColorValue("A","A","A");
        addColorValue("C","C","C");
        addColorValue("E","E","E");
        addColorValue("F","F","F");                                
			
        for (a = 1; a < colorLevels.length; a++)
			addColor(0,0,a);
        for (a = 1; a < colorLevels.length - 1; a++)
			addColor(a,a,5);

        for (a = 1; a < colorLevels.length; a++)
			addColor(0,a,0);
        for (a = 1; a < colorLevels.length - 1; a++)
			addColor(a,5,a);
			
        for (a = 1; a < colorLevels.length; a++)
			addColor(a,0,0);
        for (a = 1; a < colorLevels.length - 1; a++)
			addColor(5,a,a);
			
			
        for (a = 1; a < colorLevels.length; a++)
			addColor(a,a,0);
        for (a = 1; a < colorLevels.length - 1; a++)
			addColor(5,5,a);
			
        for (a = 1; a < colorLevels.length; a++)
			addColor(0,a,a);
        for (a = 1; a < colorLevels.length - 1; a++)
			addColor(a,5,5);

        for (a = 1; a < colorLevels.length; a++)
			addColor(a,0,a);			
        for (a = 1; a < colorLevels.length - 1; a++)
			addColor(5,a,5);
			
       	return colorArray;
     }
     */

     function getColorTable() {
         var colors = colorArray;
      	 var tableCode = "";
         tableCode += "<table border=\"0\" cellspacing=\"1\" cellpadding=\"1\">";
         for (i = 0; i < colors.length; i++) {
            
              if (i % perline == 0) { tableCode += "<tr>"; }
              tableCode += "<td height=\"15\" width=\"15\" bgcolor=\"#000000\"><span style=\"cursor:pointer; outline: 1px solid #000000; color: " 
              	  + colors[i] + "; background-color: " + colors[i] + ";font-size: 10px; width:15px;\" title=\"" 
              	  + colors[i] + "\" onClick=\"setColor(\'" + colors[i] + "\');\">&nbsp;&nbsp;&nbsp;&nbsp;</span></td>";
              if (i % perline == perline - 1) { tableCode += "</tr>"; }
         }
         if (i % perline != 0) { tableCode += "</tr>"; }
         tableCode += "</table>";
         
      	 return tableCode;
     }

     function relateColor(id, color) {
     	var link = getObj(id);
     	if (color == "") {
            link.style.background = nocolor;
            link.style.color = nocolor;
            color = nocolor;
     	} else {
            link.style.background = color;
            link.style.color = color;
        }
        eval(getObj(id + "field").title);
     }
     function getAbsoluteOffsetTop(obj) {
     	var top = obj.offsetTop;
     	var parent = obj.offsetParent;
     	while (parent != document.body) {
            top += parent.offsetTop;
            parent = parent.offsetParent;
     	}
     	return top;
     }
     
     function getAbsoluteOffsetLeft(obj) {
     	var left = obj.offsetLeft;
     	var parent = obj.offsetParent;
     	while (parent != document.body) {
            left += parent.offsetLeft;
            parent = parent.offsetParent;
     	}
     	return left;
     }
