var M_szTextId;
var M_nItem;
var M_nOption;
var closeFlag = 0;
var G_defaultCellColor = new Array('#FF0000','#FFFF00','#66FF00','#FFBB66','#66FFFF');
var G_defaultTextColor = '#000000';

var objHLTextField;
var objHLButton;
var objHLPreview;

var M_szHLTextFieldId;
var M_szHLButtonId;
var M_szHLPreviewId;

//--------------------------------------------------------------
function createColorPalette(){
   var index = 0;
   var colors = new Array('00','66','BB','FF');
   var colorCells = new Array();
   var tableText = '<div id="colorPicker" onmousedown="closeFlag=0;" onmouseup="closeFlag=1;" style="display:none;z-index:10000"><table bgcolor="#FFFFFF" class="TableDecoration" cellspacing=1 cellpadding=0>';
   for(i=0;i<4;i++){
	   for(j=0;j<4;j++){
		   for(k=0;k<4;k++){
			   colorCells[index] = colors[i] + colors[j] + colors[k];
			   index ++;
		   }
	   }
   }
   index = 0;
   for (i=0;i<8;i++){
         tableText += '<tr>';
         for(j=0;j<8; j++) {
            tableText += '<td onClick="setColor(this)" bgColor=#'+ colorCells[index] + ' style="width:16px;height:16px;">&nbsp;&nbsp;&nbsp;&nbsp;</td>';
            index ++;
         }    
         tableText += '</tr>';
   }
   tableText += '</table></div>';
   return tableText;
}

//----------------------------------------------------------
function getAbsLeft(obj) { return (obj.x) ? obj.x : getAbsPos(obj,"Left"); }
function getAbsTop(obj) { return (obj.y) ? obj.y : getAbsPos(obj,"Top"); }
function getAbsPos(obj,which) {
   iPos = 0;
   while (obj != null) {
      iPos += obj["offset" + which];
      obj = obj.offsetParent;
   }
   return iPos;
}

//----------------------------------------------------------
function displayColorPicker(i_nItem, i_nOption) {
   var clDivContents;
   var objColorPicker = document.getElementById("colorPicker");
   var objTextField;
   
   if (i_nOption == EH_CELLCOLOR) {
      M_szHLTextFieldId = "ehCellColor" + i_nItem;
      M_szHLButtonId = "ehCellColorButton" + i_nItem;
   }
   else {  // assume EH_TEXTCOLOR
      M_szHLTextFieldId = "ehTextColor" + i_nItem;
      M_szHLButtonId = "ehTextColorButton" + i_nItem;
   }
   M_szHLPreviewId = "ehPreview" + i_nItem;

   if (closeFlag==0 || M_nItem != i_nItem || M_nOption != i_nOption){
      M_nItem = i_nItem;
      M_nOption = i_nOption;
      objTextField = document.getElementById(M_szHLTextFieldId);
      objColorPicker.style.display="block";
      objColorPicker.style.position="absolute";
      objColorPicker.style.cursor="default";
      if (G_nBrowser == IE) {
         clDivContents = document.getElementById("DivContents");
         objColorPicker.style.left = getAbsLeft(objTextField) - GetOffSet(clDivContents, OFFSET_LEFT);
         objColorPicker.style.top = getAbsTop(objTextField) + objTextField.offsetHeight 
            - GetOffSet(clDivContents, OFFSET_TOP);
      }
      else {
         objColorPicker.style.left = getAbsLeft(objTextField);
         objColorPicker.style.top = getAbsTop(objTextField) + objTextField.offsetHeight;
      }
      document.getElementById(M_szHLButtonId).focus();
      closeFlag = 1;
   }
   else {
      objColorPicker.style.display="none";
      closeFlag = 0;
      if (objTextField != null) objTextField.focus();
   }
}

//------------------------------------------------------------
function mergeRGB(rgbStr)
{
   //rgbStr is always somthing like "RGB(225,23,255)"
   var RGB;
   var rgbColor;
   var colorStr = rgbStr.substring(4,rgbStr.length - 1);
   RGB = colorStr.split(",");
   rgbColor = (RGB[0] << 16) | (RGB[1] << 8) | RGB[2];
   return rgbColor;
}

function hex(rgbColor)
{
   var h="0123456789ABCDEF";
   var hexStr = "";
   var hexColor = "";
   var leadingZero = "";
   var remainder, i;
   
   for ( ; rgbColor != 0; rgbColor>>= 4) {remainder = rgbColor % 16; hexStr += h.charAt(remainder);}
   for (i=5 ; i>= 0; i--) hexColor += hexStr.charAt(i);
   for (i = 0; i < 6-hexColor.length;i++) leadingZero += "0";
   if (hexColor.length <6) hexColor = leadingZero + hexColor;
   return hexColor;
}

//------------------------------------------------------------
function setColor(obj)
{
   var objPreview = document.getElementById(M_szHLPreviewId);
	var objColorText = document.getElementById(M_szHLTextFieldId);
	
	if (objColorText != null) objColorText.style.backgroundColor = obj.bgColor;
	if (document.getElementById("ehMeasure") != null && M_astrExceptionHLSetting) {
	   // set the excepting highlighting array
	   M_astrExceptionHLSetting[document.getElementById("ehMeasure").selectedIndex][M_nOption][M_nItem] = obj.bgColor;
	}
	SetRange(M_nItem);
	closeColorPicker();
	if (M_nOption == EH_CELLCOLOR) {
	   objPreview.style.backgroundColor = obj.bgColor;
	}
	else {
	   objPreview.style.color = obj.bgColor;
	}
	switch(G_nBrowser) {
		case IE:
			objPreview.value = objPreview.style.backgroundColor.toUpperCase() + "; " + objPreview.style.color.toUpperCase();
		break;
		default:
			objPreview.value = '#' + hex(mergeRGB(objPreview.style.backgroundColor.toUpperCase().toString())) + "; #" + hex(mergeRGB(objPreview.style.color.toUpperCase().toString()));
   }
   if (objColorText != null) objColorText.focus();
}
//-----------------------------------------------------------
function closeColorPicker()
{
   var objColorPicker = document.getElementById("colorPicker");
   if (objColorPicker != null) {
      objColorPicker.style.display="none";
   }
   closeFlag = 0;
}

//-----------------------------------------------------------
function removeColorPicker(objId)
{
   var objColorPicker = document.getElementById("colorPicker");
   var obj = document.getElementById(objId);
   
   if (objColorPicker != null) {
      if (closeFlag) {
         objColorPicker.style.display="none";
         if (obj != null) {
            if (G_nBrowser == NETSCAPE && G_dNetscapeVersion < 7.2) setTimeout("document.aspnetForm.ehGo.focus();",100);
            else obj.focus();
         }
      }
   }
   closeFlag = 0;
}

