// Global Variables
var i = 0;
var col_settings = new Array(3);
for (i=0; i<col_settings.length; i++) {
 col_settings[i] = new Array(39);
 col_settings[i][0] = 2; // fontSize keyword selectedIndex (integer)
 col_settings[i][1] = '10'; // fontSize value (string)
 col_settings[i][2] = 6; // fontSize unit selectedIndex (integer)
 col_settings[i][3] = 1; // fontFamily selectedIndex (integer)
 col_settings[i][4] = '#000000'; // color (string)
 col_settings[i][5] = '#FFFFFF'; // backgroundColor (string)
 col_settings[i][6] = 4; // textAlign (integer)
 col_settings[i][7] = false; // lineHeight enabled
 col_settings[i][8] = '1.3'; // lineHeight value (string)
 col_settings[i][9] = 2; // lineHeight unit selectedIndex (integer)
 col_settings[i][10] = false; // fontWeight enabled
 col_settings[i][11] = 1; // fontWeight selectedIndex (integer)
 col_settings[i][12] = false; // fontStyle enabled
 col_settings[i][13] = 1; // fontStyle selectedIndex (integer)
 col_settings[i][14] = false; // fontVariant enabled
 col_settings[i][15] = 1; // fontVariant selectedIndex (integer)
 col_settings[i][16] = false; // textDecoration enabled
 col_settings[i][17] = 1; // textDecoration selectedIndex (integer)
 col_settings[i][18] = false; // textIndent enabled
 col_settings[i][19] = '1.8'; // textIndent value (string)
 col_settings[i][20] = 2; // textIndent unit selectedIndex (integer)
 col_settings[i][21] = false; // textTransform enabled
 col_settings[i][22] = 1; // textTransform selectedIndex (integer)
 col_settings[i][23] = false; // letterSpacing enabled
 col_settings[i][24] = '1'; // letterSpacing value (string)
 col_settings[i][25] = 0; // letterSpacing unit selectedIndex (integer)
 col_settings[i][26] = false; // wordSpacing enabled
 col_settings[i][27] = '1'; // wordSpacing value (string)
 col_settings[i][28] = 0; // wordSpacing unit selectedIndex (integer)
 col_settings[i][29] = false; // fontStretch enabled
 col_settings[i][30] = 0; // fontStretch selectedIndex (integer)
 col_settings[i][31] = false; // fontSizeAdjust enabled
 col_settings[i][32] = '0.58'; // fontSizeAdjust value (string)
 col_settings[i][33] = false; // whiteSpace enabled
 col_settings[i][34] = 2; // whiteSpace selectedIndex (integer)
 col_settings[i][35] = false; // unicodeBidi enabled
 col_settings[i][36] = 2; // unicodeBidi selectedIndex (integer)
 col_settings[i][37] = false; // direction enabled
 col_settings[i][38] = 1; // direction selectedIndex (integer)
}

/*
// Column 1
col_settings[0][0] = 3; // fontSize keyword selectedIndex (integer)
col_settings[0][4] = '#015517'; // color (string)
col_settings[0][5] = '#D9FFDA'; // backgroundColor (string)
col_settings[0][7] = true; // lineHeight enabled

// Column 2
col_settings[1][0] = 3; // fontSize keyword selectedIndex (integer)
col_settings[1][3] = 8; // fontFamily selectedIndex (integer)
col_settings[1][4] = '#FF012F'; // color (string)
col_settings[1][5] = '#FFF3F8'; // backgroundColor (string)
col_settings[1][7] = true; // lineHeight enabled

// Column 3
col_settings[2][3] = 4; // fontFamily selectedIndex (integer)
col_settings[2][4] = '#FF791F'; // color (string)
col_settings[2][5] = '#FFF4E6'; // backgroundColor (string)
*/

function save_settings(index) {
 col_settings[index][0] = document.forms[0].font_size_dropdown.selectedIndex; // fontSize keyword selectedIndex (integer)
 col_settings[index][1] = document.forms[0].font_size_textbox.value; // fontSize value (string)
 col_settings[index][2] = document.forms[0].font_size_unit.selectedIndex; // fontSize unit selectedIndex (integer)
 col_settings[index][3] = document.forms[0].font_family_dropdown.selectedIndex; // fontFamily selectedIndex (integer)
 col_settings[index][4] = document.forms[0].color_textbox.value; // color (string)
 col_settings[index][5] = document.forms[0].bg_color_textbox.value; // backgroundColor (string)
 col_settings[index][6] = document.forms[0].text_align_value.value; // textAlign (integer)
 col_settings[index][7] = document.forms[0].enable_line_height.checked; // lineHeight enabled
 col_settings[index][8] = document.forms[0].line_height_textbox.value; // lineHeight value (string)
 col_settings[index][9] = document.forms[0].line_height_unit.selectedIndex; // lineHeight unit selectedIndex (integer)
 col_settings[index][10] = document.forms[0].enable_font_weight.checked; // fontWeight enabled
 col_settings[index][11] = document.forms[0].font_weight_dropdown.selectedIndex; // fontWeight selectedIndex (integer)
 col_settings[index][12] = document.forms[0].enable_font_style.checked; // fontStyle enabled
 col_settings[index][13] = document.forms[0].font_style_dropdown.selectedIndex; // fontStyle selectedIndex (integer)
 col_settings[index][14] = document.forms[0].enable_font_variant.checked; // fontVariant enabled
 col_settings[index][15] = document.forms[0].font_variant_dropdown.selectedIndex; // fontVariant selectedIndex (integer)
 col_settings[index][16] = document.forms[0].enable_text_decoration.checked; // textDecoration enabled
 col_settings[index][17] = document.forms[0].text_decoration_dropdown.selectedIndex; // textDecoration selectedIndex (integer)
 col_settings[index][18] = document.forms[0].enable_text_indent.checked; // textIndent enabled
 col_settings[index][19] = document.forms[0].text_indent_textbox.value; // textIndent value (string)
 col_settings[index][20] = document.forms[0].text_indent_unit.selectedIndex; // textIndent unit selectedIndex (integer)
 col_settings[index][21] = document.forms[0].enable_text_transform.checked; // textTransform enabled
 col_settings[index][22] = document.forms[0].text_transform_dropdown.selectedIndex; // textTransform selectedIndex (integer)
 col_settings[index][23] = document.forms[0].enable_letter_spacing.checked; // letterSpacing enabled
 col_settings[index][24] = document.forms[0].letter_spacing_textbox.value; // letterSpacing value (string)
 col_settings[index][25] = document.forms[0].letter_spacing_unit.selectedIndex; // letterSpacing unit selectedIndex (integer)
 col_settings[index][26] = document.forms[0].enable_word_spacing.checked; // wordSpacing enabled
 col_settings[index][27] = document.forms[0].word_spacing_textbox.value; // wordSpacing value (string)
 col_settings[index][28] = document.forms[0].word_spacing_unit.selectedIndex; // wordSpacing unit selectedIndex (integer)
 col_settings[index][29] = document.forms[0].enable_font_stretch.checked; // fontStretch enabled
 col_settings[index][30] = document.forms[0].font_stretch_dropdown.selectedIndex; // fontStretch selectedIndex (integer)
 col_settings[index][31] = document.forms[0].enable_font_size_adjust.checked; // fontSizeAdjust enabled
 col_settings[index][32] = document.forms[0].font_size_adjust_textbox.value; // fontSizeAdjust value (string)
 col_settings[index][33] = document.forms[0].enable_white_space.checked; // whiteSpace enabled
 col_settings[index][34] = document.forms[0].white_space_dropdown.selectedIndex; // whiteSpace selectedIndex (integer)
 col_settings[index][35] = document.forms[0].enable_unicode_bidi.checked; // unicodeBidi enabled
 col_settings[index][36] = document.forms[0].unicode_bidi_dropdown.selectedIndex; // unicodeBidi selectedIndex (integer)
 col_settings[index][37] = document.forms[0].enable_direction.checked; // direction enabled
 col_settings[index][38] = document.forms[0].direction_dropdown.selectedIndex; // direction selectedIndex (integer)
}

function load_settings(index) {
 document.forms[0].font_size_dropdown.selectedIndex = col_settings[index][0]; // fontSize keyword selectedIndex (integer)
 document.forms[0].font_size_textbox.value = col_settings[index][1]; // fontSize value (string)
 document.forms[0].font_size_unit.selectedIndex = col_settings[index][2]; // fontSize unit selectedIndex (integer)
 document.forms[0].font_family_dropdown.selectedIndex = col_settings[index][3]; // fontFamily selectedIndex (integer)
 document.forms[0].color_textbox.value = col_settings[index][4]; // color (string)
 document.forms[0].bg_color_textbox.value = col_settings[index][5]; // backgroundColor (string)
 document.forms[0].text_align_value.value = col_settings[index][6]; // textAlign (integer)
 document.forms[0].enable_line_height.checked = col_settings[index][7]; // lineHeight enabled
 document.forms[0].line_height_textbox.value = col_settings[index][8]; // lineHeight value (string)
 document.forms[0].line_height_unit.selectedIndex = col_settings[index][9]; // lineHeight unit selectedIndex (integer)
 document.forms[0].enable_font_weight.checked = col_settings[index][10]; // fontWeight enabled
 document.forms[0].font_weight_dropdown.selectedIndex = col_settings[index][11]; // fontWeight selectedIndex (integer)
 document.forms[0].enable_font_style.checked = col_settings[index][12]; // fontStyle enabled
 document.forms[0].font_style_dropdown.selectedIndex = col_settings[index][13]; // fontStyle selectedIndex (integer)
 document.forms[0].enable_font_variant.checked = col_settings[index][14]; // fontVariant enabled
 document.forms[0].font_variant_dropdown.selectedIndex = col_settings[index][15]; // fontVariant selectedIndex (integer)
 document.forms[0].enable_text_decoration.checked = col_settings[index][16]; // textDecoration enabled
 document.forms[0].text_decoration_dropdown.selectedIndex = col_settings[index][17]; // textDecoration selectedIndex (integer)
 document.forms[0].enable_text_indent.checked = col_settings[index][18]; // textIndent enabled
 document.forms[0].text_indent_textbox.value = col_settings[index][19]; // textIndent value (string)
 document.forms[0].text_indent_unit.selectedIndex = col_settings[index][20]; // textIndent unit selectedIndex (integer)
 document.forms[0].enable_text_transform.checked = col_settings[index][21]; // textTransform enabled
 document.forms[0].text_transform_dropdown.selectedIndex = col_settings[index][22]; // textTransform selectedIndex (integer)
 document.forms[0].enable_letter_spacing.checked = col_settings[index][23]; // letterSpacing enabled
 document.forms[0].letter_spacing_textbox.value = col_settings[index][24]; // letterSpacing value (string)
 document.forms[0].letter_spacing_unit.selectedIndex = col_settings[index][25]; // letterSpacing unit selectedIndex (integer)
 document.forms[0].enable_word_spacing.checked = col_settings[index][26]; // wordSpacing enabled
 document.forms[0].word_spacing_textbox.value = col_settings[index][27]; // wordSpacing value (string)
 document.forms[0].word_spacing_unit.selectedIndex = col_settings[index][28]; // wordSpacing unit selectedIndex (integer)
 document.forms[0].enable_font_stretch.checked = col_settings[index][29]; // fontStretch enabled
 document.forms[0].font_stretch_dropdown.selectedIndex = col_settings[index][30]; // fontStretch selectedIndex (integer)
 document.forms[0].enable_font_size_adjust.checked = col_settings[index][31]; // fontSizeAdjust enabled
 document.forms[0].font_size_adjust_textbox.value = col_settings[index][32]; // fontSizeAdjust value (string)
 document.forms[0].enable_white_space.checked = col_settings[index][33]; // whiteSpace enabled
 document.forms[0].white_space_dropdown.selectedIndex = col_settings[index][34]; // whiteSpace selectedIndex (integer)
 document.forms[0].enable_unicode_bidi.checked = col_settings[index][35]; // unicodeBidi enabled
 document.forms[0].unicode_bidi_dropdown.selectedIndex = col_settings[index][36]; // unicodeBidi selectedIndex (integer)
 document.forms[0].enable_direction.checked = col_settings[index][37]; // direction enabled
 document.forms[0].direction_dropdown.selectedIndex = col_settings[index][38]; // direction selectedIndex (integer)


 // Enable Disable Controls
 if (document.forms[0].font_size_dropdown.value == 'other') {
  document.forms[0].font_size_textbox.disabled = false;
  document.forms[0].font_size_unit.disabled = false;
 }
 else {
  document.forms[0].font_size_textbox.disabled = true;
  document.forms[0].font_size_unit.disabled = true;
 }
 document.forms[0].line_height_textbox.disabled = !document.forms[0].enable_line_height.checked;
 document.forms[0].line_height_unit.disabled = !document.forms[0].enable_line_height.checked;
 document.forms[0].font_weight_dropdown.disabled = !document.forms[0].enable_font_weight.checked;
 document.forms[0].font_style_dropdown.disabled = !document.forms[0].enable_font_style.checked;
 document.forms[0].font_variant_dropdown.disabled = !document.forms[0].enable_font_variant.checked;
 document.forms[0].text_decoration_dropdown.disabled = !document.forms[0].enable_text_decoration.checked;
 document.forms[0].text_indent_textbox.disabled = !document.forms[0].enable_text_indent.checked;
 document.forms[0].text_indent_unit.disabled = !document.forms[0].enable_text_indent.checked;
 document.forms[0].text_transform_dropdown.disabled = !document.forms[0].enable_text_transform.checked;
 document.forms[0].letter_spacing_textbox.disabled = !document.forms[0].enable_letter_spacing.checked;
 document.forms[0].letter_spacing_unit.disabled = !document.forms[0].enable_letter_spacing.checked;
 document.forms[0].word_spacing_textbox.disabled = !document.forms[0].enable_word_spacing.checked;
 document.forms[0].word_spacing_unit.disabled = !document.forms[0].enable_word_spacing.checked;
 document.forms[0].font_stretch_dropdown.disabled = !document.forms[0].enable_font_stretch.checked;
 document.forms[0].font_size_adjust_textbox.disabled = !document.forms[0].enable_font_size_adjust.checked;
 document.forms[0].white_space_dropdown.disabled = !document.forms[0].enable_white_space.checked;
 document.forms[0].unicode_bidi_dropdown.disabled = !document.forms[0].enable_unicode_bidi.checked;
 document.forms[0].direction_dropdown.disabled = !document.forms[0].enable_direction.checked;


 switch(document.forms[0].text_align_value.value) { // load approriate text align images
  case '1':
   document.images['align_left_icon'].src = './img/align_left_icon_selected.gif';
   document.images['align_center_icon'].src = './img/align_center_icon_normal.gif';
   document.images['align_right_icon'].src = './img/align_right_icon_normal.gif';
   document.images['align_justify_icon'].src = './img/align_justify_icon_normal.gif';
   break;
  case '2':
   document.images['align_left_icon'].src = './img/align_left_icon_normal.gif';
   document.images['align_center_icon'].src = './img/align_center_icon_selected.gif';
   document.images['align_right_icon'].src = './img/align_right_icon_normal.gif';
   document.images['align_justify_icon'].src = './img/align_justify_icon_normal.gif';
   break;
  case '3':
   document.images['align_left_icon'].src = './img/align_left_icon_normal.gif';
   document.images['align_center_icon'].src = './img/align_center_icon_normal.gif';
   document.images['align_right_icon'].src = './img/align_right_icon_selected.gif';
   document.images['align_justify_icon'].src = './img/align_justify_icon_normal.gif';
   break;
  case '4':
   document.images['align_left_icon'].src = './img/align_left_icon_normal.gif';
   document.images['align_center_icon'].src = './img/align_center_icon_normal.gif';
   document.images['align_right_icon'].src = './img/align_right_icon_normal.gif';
   document.images['align_justify_icon'].src = './img/align_justify_icon_selected.gif';
   break;
  default:
   document.images['align_left_icon'].src = './img/align_left_icon_normal.gif';
   document.images['align_center_icon'].src = './img/align_center_icon_normal.gif';
   document.images['align_right_icon'].src = './img/align_right_icon_normal.gif';
   document.images['align_justify_icon'].src = './img/align_justify_icon_normal.gif';
 }

}

var char_map_div_obj;
var hide_char_map_link_obj;
var html_entity_code_snippet_text_box_obj;
var char_map_table_obj;
var text_col_1_obj;
var text_col_2_obj;
var text_col_3_obj;
var text_col_1_p_obj;
var text_col_2_p_obj;
var text_col_3_p_obj;
var header_col_obj = new Array(3);
var edit_text_link_obj = new Array(3);
var get_css_link_obj = new Array(3);
var edit_text_box_obj;
var get_css_text_box_obj;
var element_to_update;
var new_value = 0;
var keycode;
var key_is_valid = true;
var red, green, blue;
var color_picker_box_obj;
var color_picker_icon_obj;
var bg_color_picker_icon_obj;
var mouse_is_down = new Array(3);
mouse_is_down[0] = mouse_is_down[1] = mouse_is_down[2] = false;
var original_x = new Array(3);
var original_y = new Array(3);
var down_x = new Array(3);
var down_y = new Array(3);
original_x[0] = original_x[1] = original_x[2] = original_y[0] = original_y[1] = original_y[2] = down_x[0] = down_x[1] = down_x[2] = down_y[0] = down_y[1] = down_y[2] = 0;
var textbox_is_selected = false;
var hex_is_chosen = false;
var h_s_or_v = false;
var cancel_colors = new Array(2);
var event_already_caught = true;
var cols_icon_obj = new Array(6);
var self_selected = false;
var mouse_downed_once = false;

/* *********************************************************************************************************** */
/* Utility Functions                                                                                           */
/* *********************************************************************************************************** */

function HexIsValid(hex) {
 if (hex.length != 7) { return false; }
 if (hex.substr(0,1) != "#") { return false; }
 for (i=1; i<6; i++) { if (IsValidHexChar(hex.substr(i,1)) == false) { return false; } }
 return true;
}

function IsValidHexChar(c) {
 if (c.length != 1) { return false; }
 else {
  switch(c) {
   case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':
   case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
   case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
    return true;
   default:
    return false;
  }
 }
}

function IncreaseHexValue(hex) {
 red = hex.substr(1,2);
 green = hex.substr(3,2);
 blue = hex.substr(5,2);
 if (red != "FF") { red = IncreaseOneHexChar(red); }
 else if (green != "FF") { green = IncreaseOneHexChar(green); }
 else if (blue != "FF") { blue = IncreaseOneHexChar(blue); }
 else { return hex; }
 hex = "#" + red + green + blue;
 return hex;
}

function DecreaseHexValue(hex) {
 red = hex.substr(1,2);
 green = hex.substr(3,2);
 blue = hex.substr(5,2);
 if (blue != "00") { blue = DecreaseOneHexChar(blue); }
 else if (green != "00") { green = DecreaseOneHexChar(green); }
 else if (red != "00") { red = DecreaseOneHexChar(red); }
 else { return hex; }
 hex = "#" + red + green + blue;
 return hex;
}

function IncreaseOneHexChar(c) {
 switch (c.toUpperCase()) {
  case "00": return "01"; case "01": return "02"; case "02": return "03"; case "03": return "04"; case "04": return "05"; case "05": return "06"; case "06": return "07"; case "07": return "08"; case "08": return "09"; case "09": return "0A"; case "0A": return "0B"; case "0B": return "0C"; case "0C": return "0D"; case "0D": return "0E"; case "0E": return "0F"; case "0F": return "10"; case "10": return "11"; case "11": return "12"; case "12": return "13"; case "13": return "14"; case "14": return "15"; case "15": return "16"; case "16": return "17"; case "17": return "18"; case "18": return "19"; case "19": return "1A"; case "1A": return "1B"; case "1B": return "1C"; case "1C": return "1D"; case "1D": return "1E"; case "1E": return "1F"; case "1F": return "20"; case "20": return "21"; case "21": return "22"; case "22": return "23"; case "23": return "24"; case "24": return "25"; case "25": return "26"; case "26": return "27"; case "27": return "28"; case "28": return "29"; case "29": return "2A"; case "2A": return "2B"; case "2B": return "2C"; case "2C": return "2D"; case "2D": return "2E"; case "2E": return "2F"; case "2F": return "30"; case "30": return "31"; case "31": return "32"; case "32": return "33"; case "33": return "34"; case "34": return "35"; case "35": return "36"; case "36": return "37"; case "37": return "38"; case "38": return "39"; case "39": return "3A"; case "3A": return "3B"; case "3B": return "3C"; case "3C": return "3D"; case "3D": return "3E"; case "3E": return "3F"; case "3F": return "40"; case "40": return "41"; case "41": return "42"; case "42": return "43"; case "43": return "44"; case "44": return "45"; case "45": return "46"; case "46": return "47"; case "47": return "48"; case "48": return "49"; case "49": return "4A"; case "4A": return "4B"; case "4B": return "4C"; case "4C": return "4D"; case "4D": return "4E"; case "4E": return "4F"; case "4F": return "50"; case "50": return "51"; case "51": return "52"; case "52": return "53"; case "53": return "54"; case "54": return "55"; case "55": return "56"; case "56": return "57"; case "57": return "58"; case "58": return "59"; case "59": return "5A"; case "5A": return "5B"; case "5B": return "5C"; case "5C": return "5D"; case "5D": return "5E"; case "5E": return "5F"; case "5F": return "60"; case "60": return "61"; case "61": return "62"; case "62": return "63"; case "63": return "64"; case "64": return "65"; case "65": return "66"; case "66": return "67"; case "67": return "68"; case "68": return "69"; case "69": return "6A"; case "6A": return "6B"; case "6B": return "6C"; case "6C": return "6D"; case "6D": return "6E"; case "6E": return "6F"; case "6F": return "70"; case "70": return "71"; case "71": return "72"; case "72": return "73"; case "73": return "74"; case "74": return "75"; case "75": return "76"; case "76": return "77"; case "77": return "78"; case "78": return "79"; case "79": return "7A"; case "7A": return "7B"; case "7B": return "7C"; case "7C": return "7D"; case "7D": return "7E"; case "7E": return "7F";
  case "7F": return "80"; case "80": return "81"; case "81": return "82"; case "82": return "83"; case "83": return "84"; case "84": return "85"; case "85": return "86"; case "86": return "87"; case "87": return "88"; case "88": return "89"; case "89": return "8A"; case "8A": return "8B"; case "8B": return "8C"; case "8C": return "8D"; case "8D": return "8E"; case "8E": return "8F"; case "8F": return "90"; case "90": return "91"; case "91": return "92"; case "92": return "93"; case "93": return "94"; case "94": return "95"; case "95": return "96"; case "96": return "97"; case "97": return "98"; case "98": return "99"; case "99": return "9A"; case "9A": return "9B"; case "9B": return "9C"; case "9C": return "9D"; case "9D": return "9E"; case "9E": return "9F"; case "9F": return "A0"; case "A0": return "A1"; case "A1": return "A2"; case "A2": return "A3"; case "A3": return "A4"; case "A4": return "A5"; case "A5": return "A6"; case "A6": return "A7"; case "A7": return "A8"; case "A8": return "A9"; case "A9": return "AA"; case "AA": return "AB"; case "AB": return "AC"; case "AC": return "AD"; case "AD": return "AE"; case "AE": return "AF"; case "AF": return "B0"; case "B0": return "B1"; case "B1": return "B2"; case "B2": return "B3"; case "B3": return "B4"; case "B4": return "B5"; case "B5": return "B6"; case "B6": return "B7"; case "B7": return "B8"; case "B8": return "B9"; case "B9": return "BA"; case "BA": return "BB"; case "BB": return "BC"; case "BC": return "BD"; case "BD": return "BE"; case "BE": return "BF"; case "BF": return "C0"; case "C0": return "C1"; case "C1": return "C2"; case "C2": return "C3"; case "C3": return "C4"; case "C4": return "C5"; case "C5": return "C6"; case "C6": return "C7"; case "C7": return "C8"; case "C8": return "C9"; case "C9": return "CA"; case "CA": return "CB"; case "CB": return "CC"; case "CC": return "CD"; case "CD": return "CE"; case "CE": return "CF"; case "CF": return "D0"; case "D0": return "D1"; case "D1": return "D2"; case "D2": return "D3"; case "D3": return "D4"; case "D4": return "D5"; case "D5": return "D6"; case "D6": return "D7"; case "D7": return "D8"; case "D8": return "D9"; case "D9": return "DA"; case "DA": return "DB"; case "DB": return "DC"; case "DC": return "DD"; case "DD": return "DE"; case "DE": return "DF"; case "DF": return "E0"; case "E0": return "E1"; case "E1": return "E2"; case "E2": return "E3"; case "E3": return "E4"; case "E4": return "E5"; case "E5": return "E6"; case "E6": return "E7"; case "E7": return "E8"; case "E8": return "E9"; case "E9": return "EA"; case "EA": return "EB"; case "EB": return "EC"; case "EC": return "ED"; case "ED": return "EE"; case "EE": return "EF"; case "EF": return "F0"; case "F0": return "F1"; case "F1": return "F2"; case "F2": return "F3"; case "F3": return "F4"; case "F4": return "F5"; case "F5": return "F6"; case "F6": return "F7"; case "F7": return "F8"; case "F8": return "F9"; case "F9": return "FA"; case "FA": return "FB"; case "FB": return "FC"; case "FC": return "FD"; case "FD": return "FE";
  case "FE": return "FF"; case "FF": return "FF"; default: return c.toUpperCase();
 }
}

function DecreaseOneHexChar(c) {
 switch (c.toUpperCase()) {
  case "00": return "00"; case "01": return "00"; case "02": return "01"; case "03": return "02"; case "04": return "03"; case "05": return "04"; case "06": return "05"; case "07": return "06"; case "08": return "07"; case "09": return "08"; case "0A": return "09"; case "0B": return "0A"; case "0C": return "0B"; case "0D": return "0C"; case "0E": return "0D"; case "0F": return "0E"; case "10": return "0F"; case "11": return "10"; case "12": return "11"; case "13": return "12"; case "14": return "13"; case "15": return "14"; case "16": return "15"; case "17": return "16"; case "18": return "17"; case "19": return "18"; case "1A": return "19"; case "1B": return "1A"; case "1C": return "1B"; case "1D": return "1C"; case "1E": return "1D"; case "1F": return "1E"; case "20": return "1F"; case "21": return "20"; case "22": return "21"; case "23": return "22"; case "24": return "23"; case "25": return "24"; case "26": return "25"; case "27": return "26"; case "28": return "27"; case "29": return "28"; case "2A": return "29"; case "2B": return "2A"; case "2C": return "2B"; case "2D": return "2C"; case "2E": return "2D"; case "2F": return "2E"; case "30": return "2F"; case "31": return "30"; case "32": return "31"; case "33": return "32"; case "34": return "33"; case "35": return "34"; case "36": return "35"; case "37": return "36"; case "38": return "37"; case "39": return "38"; case "3A": return "39"; case "3B": return "3A"; case "3C": return "3B"; case "3D": return "3C"; case "3E": return "3D"; case "3F": return "3E"; case "40": return "3F"; case "41": return "40"; case "42": return "41"; case "43": return "42"; case "44": return "43"; case "45": return "44"; case "46": return "45"; case "47": return "46"; case "48": return "47"; case "49": return "48"; case "4A": return "49"; case "4B": return "4A"; case "4C": return "4B"; case "4D": return "4C"; case "4E": return "4D"; case "4F": return "4E"; case "50": return "4F"; case "51": return "50"; case "52": return "51"; case "53": return "52"; case "54": return "53"; case "55": return "54"; case "56": return "55"; case "57": return "56"; case "58": return "57"; case "59": return "58"; case "5A": return "59"; case "5B": return "5A"; case "5C": return "5B"; case "5D": return "5C"; case "5E": return "5D"; case "5F": return "5E"; case "60": return "5F"; case "61": return "60"; case "62": return "61"; case "63": return "62"; case "64": return "63"; case "65": return "64"; case "66": return "65"; case "67": return "66"; case "68": return "67"; case "69": return "68"; case "6A": return "69"; case "6B": return "6A"; case "6C": return "6B"; case "6D": return "6C"; case "6E": return "6D"; case "6F": return "6E"; case "70": return "6F"; case "71": return "70"; case "72": return "71"; case "73": return "72"; case "74": return "73"; case "75": return "74"; case "76": return "75"; case "77": return "76"; case "78": return "77"; case "79": return "78"; case "7A": return "79"; case "7B": return "7A"; case "7C": return "7B"; case "7D": return "7C"; case "7E": return "7D";
  case "7F": return "7E"; case "80": return "7F"; case "81": return "80"; case "82": return "81"; case "83": return "82"; case "84": return "83"; case "85": return "84"; case "86": return "85"; case "87": return "86"; case "88": return "87"; case "89": return "88"; case "8A": return "89"; case "8B": return "8A"; case "8C": return "8B"; case "8D": return "8C"; case "8E": return "8D"; case "8F": return "8E"; case "90": return "8F"; case "91": return "90"; case "92": return "91"; case "93": return "92"; case "94": return "93"; case "95": return "94"; case "96": return "95"; case "97": return "96"; case "98": return "97"; case "99": return "98"; case "9A": return "99"; case "9B": return "9A"; case "9C": return "9B"; case "9D": return "9C"; case "9E": return "9D"; case "9F": return "9E"; case "A0": return "9F"; case "A1": return "A0"; case "A2": return "A1"; case "A3": return "A2"; case "A4": return "A3"; case "A5": return "A4"; case "A6": return "A5"; case "A7": return "A6"; case "A8": return "A7"; case "A9": return "A8"; case "AA": return "A9"; case "AB": return "AA"; case "AC": return "AB"; case "AD": return "AC"; case "AE": return "AD"; case "AF": return "AE"; case "B0": return "AF"; case "B1": return "B0"; case "B2": return "B1"; case "B3": return "B2"; case "B4": return "B3"; case "B5": return "B4"; case "B6": return "B5"; case "B7": return "B6"; case "B8": return "B7"; case "B9": return "B8"; case "BA": return "B9"; case "BB": return "BA"; case "BC": return "BB"; case "BD": return "BC"; case "BE": return "BD"; case "BF": return "BE"; case "C0": return "BF"; case "C1": return "C0"; case "C2": return "C1"; case "C3": return "C2"; case "C4": return "C3"; case "C5": return "C4"; case "C6": return "C5"; case "C7": return "C6"; case "C8": return "C7"; case "C9": return "C8"; case "CA": return "C9"; case "CB": return "CA"; case "CC": return "CB"; case "CD": return "CC"; case "CE": return "CD"; case "CF": return "CE"; case "D0": return "CF"; case "D1": return "D0"; case "D2": return "D1"; case "D3": return "D2"; case "D4": return "D3"; case "D5": return "D4"; case "D6": return "D5"; case "D7": return "D6"; case "D8": return "D7"; case "D9": return "D8"; case "DA": return "D9"; case "DB": return "DA"; case "DC": return "DB"; case "DD": return "DC"; case "DE": return "DD"; case "DF": return "DE"; case "E0": return "DF"; case "E1": return "E0"; case "E2": return "E1"; case "E3": return "E2"; case "E4": return "E3"; case "E5": return "E4"; case "E6": return "E5"; case "E7": return "E6"; case "E8": return "E7"; case "E9": return "E8"; case "EA": return "E9"; case "EB": return "EA"; case "EC": return "EB"; case "ED": return "EC"; case "EE": return "ED"; case "EF": return "EE"; case "F0": return "EF"; case "F1": return "F0"; case "F2": return "F1"; case "F3": return "F2"; case "F4": return "F3"; case "F5": return "F4"; case "F6": return "F5"; case "F7": return "F6"; case "F8": return "F7"; case "F9": return "F8"; case "FA": return "F9"; case "FB": return "FA"; case "FC": return "FB"; case "FD": return "FC";
  case "FE": return "FD"; case "FF": return "FE"; default: return c.toUpperCase();
 }
}

function make_all_text_cols_invisible() {
 text_col_1_obj.style.display = 'none';
 text_col_2_obj.style.display = 'none';
 text_col_3_obj.style.display = 'none';
 text_col_1_obj.style.width = '0px';
 text_col_2_obj.style.width = '0px';
 text_col_3_obj.style.width = '0px';

 header_col_obj[0].style.display = 'none';
 header_col_obj[1].style.display = 'none';
 header_col_obj[2].style.display = 'none';
 header_col_obj[0].style.width = '0px';
 header_col_obj[1].style.width = '0px';
 header_col_obj[2].style.width = '0px';
}

function get_element_to_update() {
 if (document.forms[0].column_properties[0].checked) { element_to_update = text_col_1_p_obj; }
 else if (document.forms[0].column_properties[1].checked) { element_to_update = text_col_2_p_obj; }
 else { element_to_update = text_col_3_p_obj; }
}

function make_css_edit_box_text() {

}

/* *********************************************************************************************************** */


/* *********************************************************************************************************** */
/* OnClick Events                                                                                              */
/* *********************************************************************************************************** */
function col1_clicked() {
 document.forms[0].number_of_columns_to_view[0].checked = true;
 if ((document.forms[0].column_properties[2].checked) || (document.forms[0].column_properties[1].checked)) {
  document.forms[0].column_properties[0].checked = true;
  save_settings(1);
  load_settings(0);
 }
 document.forms[0].column_properties[0].disabled = false;
 document.forms[0].column_properties[1].disabled = true;
 document.forms[0].column_properties[2].disabled = true;
 document.images['edit_col1'].src = './img/1_col_col_1.gif';
 document.images['edit_col2'].src = './img/2_columns_disabled.gif';
 document.images['edit_col3'].src = './img/3_columns_disabled.gif';
 make_all_text_cols_invisible();

 header_col_obj[0].style.width = '98%';
 header_col_obj[0].style.display = 'inline-block';

 text_col_1_obj.style.width = '98%';
 text_col_1_obj.style.display = 'inline-block';

 if (!window.external) { // for all browsers except IE (IE doesn't understand 'table-cell')
  text_col_1_obj.style.display = 'table-cell';
  header_col_obj[0].style.display = 'table-cell';
 }

 if (text_col_1_obj.style.display == 'table-cell' ) { text_col_1_obj.style.width = '100%'; header_col_obj[0].style.width = '100%'; }
}

function col2_clicked() {
 document.forms[0].number_of_columns_to_view[1].checked = true;
 if (document.forms[0].column_properties[2].checked) {
  document.forms[0].column_properties[1].checked = true;
  save_settings(2);
  load_settings(1);
 }
 document.forms[0].column_properties[0].disabled = false;
 document.forms[0].column_properties[1].disabled = false;
 document.forms[0].column_properties[2].disabled = true;
 document.images['edit_col1'].src = './img/2_cols_col_1.gif';
 document.images['edit_col2'].src = './img/2_cols_col_2.gif';
 document.images['edit_col3'].src = './img/3_columns_disabled.gif';
 make_all_text_cols_invisible();

 header_col_obj[0].style.width = '48%';
 header_col_obj[1].style.width = '48%';
 header_col_obj[0].style.display = 'inline-block';
 header_col_obj[1].style.display = 'inline-block';

 text_col_1_obj.style.width = '48%';
 text_col_2_obj.style.width = '48%';
 text_col_1_obj.style.display = 'inline-block';
 text_col_2_obj.style.display = 'inline-block';

 if (!window.external) { // for all browsers except IE (IE doesn't understand 'table-cell')
  text_col_1_obj.style.display = 'table-cell';
  text_col_2_obj.style.display = 'table-cell';
  header_col_obj[0].style.display = 'table-cell';
  header_col_obj[1].style.display = 'table-cell';
 }

 if (text_col_1_obj.style.display == 'table-cell' ) {
  text_col_1_obj.style.width = '50%';
  text_col_2_obj.style.width = '50%';
  header_col_obj[0].style.width = '50%';
  header_col_obj[1].style.width = '50%';
 }

}

function col3_clicked() {
 document.forms[0].number_of_columns_to_view[2].checked = true;
 document.forms[0].column_properties[0].disabled = false;
 document.forms[0].column_properties[1].disabled = false;
 document.forms[0].column_properties[2].disabled = false;
 document.images['edit_col1'].src = './img/3_cols_col_1.gif';
 document.images['edit_col2'].src = './img/3_cols_col_2.gif';
 document.images['edit_col3'].src = './img/3_cols_col_3.gif';
 make_all_text_cols_invisible();

 header_col_obj[0].style.width = '31%';
 header_col_obj[1].style.width = '31%';
 header_col_obj[2].style.width = '31%';
 header_col_obj[0].style.display = 'inline-block';
 header_col_obj[1].style.display = 'inline-block';
 header_col_obj[2].style.display = 'inline-block';

 text_col_1_obj.style.width = '31%';
 text_col_2_obj.style.width = '31%';
 text_col_3_obj.style.width = '31%';
 text_col_1_obj.style.display = 'inline-block';
 text_col_2_obj.style.display = 'inline-block';
 text_col_3_obj.style.display = 'inline-block';

 if (!window.external) { // for all browsers except IE (IE doesn't understand 'table-cell')
  text_col_1_obj.style.display = 'table-cell'; 
  text_col_2_obj.style.display = 'table-cell';
  text_col_3_obj.style.display = 'table-cell';
  header_col_obj[0].style.display = 'table-cell';
  header_col_obj[1].style.display = 'table-cell';
  header_col_obj[2].style.display = 'table-cell';
 }

 if (text_col_1_obj.style.display == 'table-cell' ) {
  text_col_1_obj.style.width = '33%';
  text_col_2_obj.style.width = '33%';
  text_col_3_obj.style.width = '33%';
  header_col_obj[0].style.width = '33%';
  header_col_obj[1].style.width = '33%';
  header_col_obj[2].style.width = '33%';
 }

}

function cp_ok_button_onclick() {
 color_picker_box_obj.style.display = 'none';
 hide_show_char_map_dropdowns(true);
}

function cp_cancel_button_onclick() {
 color_picker_box_obj.style.display = 'none';
 hide_show_char_map_dropdowns(true);
 document.forms[0].color_textbox.value = cancel_colors[0];
 document.forms[0].bg_color_textbox.value = cancel_colors[1];
 color_has_changed();
 bg_color_has_changed();
}

function assign_value_to_cp(c) {
 if (c == 0) { document.forms[0].cp_hex_input.value = document.forms[0].color_textbox.value; }
 else if (c == 1) { document.forms[0].cp_hex_input.value = document.forms[0].bg_color_textbox.value; }
 update_rgb_and_hsv_textboxes();
}

function text_color_bg_color_radio_button_onclick() {
 hex_is_chosen = false;
 if (this.id == 'text_color_radio') { assign_value_to_cp(0); }
 else if (this.id == 'bg_color_radio') { assign_value_to_cp(1); }
}

function auto_calculate_inverse_onclick() {
 if (this.checked) {
  if (document.forms[0].update_which_color[0].checked) { document.forms[0].update_which_color[1].disabled = true; }
  else if (document.forms[0].update_which_color[1].checked) { document.forms[0].update_which_color[0].disabled = true; }
 }
 else {
  document.forms[0].update_which_color[1].disabled = false;
  document.forms[0].update_which_color[0].disabled = false;
 }
}

function color_picker_icon_onclick() {
 hex_is_chosen = false;
 cancel_colors[0] = document.forms[0].color_textbox.value;
 cancel_colors[1] = document.forms[0].bg_color_textbox.value;
 assign_value_to_cp(0);
 color_picker_box_obj.style.display = 'block';
 hide_show_char_map_dropdowns(false);
 document.forms[0].update_which_color[0].checked = true;
 textbox_is_selected = false;
}

function bg_color_picker_icon_onclick() {
 hex_is_chosen = false;
 cancel_colors[0] = document.forms[0].color_textbox.value;
 cancel_colors[1] = document.forms[0].bg_color_textbox.value;
 assign_value_to_cp(1);
 color_picker_box_obj.style.display = 'block';
 hide_show_char_map_dropdowns(false);
 document.forms[0].update_which_color[1].checked = true;
 textbox_is_selected = false;
}

/* *********************************************************************************************************** */


/* *********************************************************************************************************** */
/* OnKeyPress Events                                                                                           */
/* *********************************************************************************************************** */
function hex_textbox_keypress(e) {
 event_already_caught = true;
 if (!e) { e = window.event; }
 if (HexIsValid(e.srcElement.value) == true) {
  var keycode = get_key_code(e);
  switch(keycode) {
   case 38: // up arrow (increase hex value)
    e.srcElement.value = IncreaseHexValue(e.srcElement.value);
    break;
   case 40: // down arrow (decrease hex value)
    e.srcElement.value = DecreaseHexValue(e.srcElement.value);
    break;
  }
  if (e.srcElement.id == 'cp_hex_input') { update_rgb_and_hsv_textboxes(); cp_hex_textbox_has_changed(); }
 }
 if (e.srcElement.id == 'color_textbox') { color_has_changed(); }
 else if (e.srcElement.id == 'bg_color_textbox') { bg_color_has_changed(); }
}

function hex_textbox_keydown(e) {
 if (!e) { e = window.event; }
 if (event_already_caught == false) { hex_textbox_keypress(e); }
 event_already_caught = false;
}

/* *********************************************************************************************************** */


/* *********************************************************************************************************** */
/* OnKeyUp Events                                                                                              */
/* *********************************************************************************************************** */
function hsv_onkeyup() {
 if (this.id == 'h_input') { if (this.value > 359) { this.value = '359'; } }
 else { if (this.value > 100) { this.value = '100'; } }
 rgb_arr = HSVtoRGB(document.forms[0].h_input.value, document.forms[0].s_input.value, document.forms[0].v_input.value);
 document.forms[0].r_input.value = rgb_arr[0];
 document.forms[0].g_input.value = rgb_arr[1];
 document.forms[0].b_input.value = rgb_arr[2];
 document.forms[0].cp_hex_input.value = makeHexFromRGB(rgb_arr[0], rgb_arr[1], rgb_arr[2]);
 cp_hex_textbox_has_changed();
}

function rgb_onkeyup() {
 if (this.value > 255) { this.value = '255'; }
 hsv_arr = RGBtoHSV(document.forms[0].r_input.value, document.forms[0].g_input.value, document.forms[0].b_input.value);
 document.forms[0].h_input.value = hsv_arr[0];
 document.forms[0].s_input.value = hsv_arr[1];
 document.forms[0].v_input.value = hsv_arr[2];
 rgb_arr[0] = document.forms[0].r_input.value;
 rgb_arr[1] = document.forms[0].g_input.value;
 rgb_arr[2] = document.forms[0].b_input.value;
 document.forms[0].cp_hex_input.value = makeHexFromRGB(rgb_arr[0], rgb_arr[1], rgb_arr[2]);
 cp_hex_textbox_has_changed();
}

function cp_hex_textbox_onkeyup() {
 if (HexIsValid(this.value) == true) { update_rgb_and_hsv_textboxes(); cp_hex_textbox_has_changed(); }
}

function font_size_textbox_onkeyup() {
 if (key_is_valid) {
  if (trimstr(this.value) != '') {
   if (this.value.length > 0) {
    if (this.value.substring(this.value.length-1) != '.') {
     element_to_update.style.fontSize = this.value + document.forms[0].font_size_unit.value;
    }
   } else { element_to_update.style.fontSize = '0' + document.forms[0].font_size_unit.value; }
  }
  make_css_edit_box_text();
 }
}

function text_indent_textbox_onkeyup() {
 if (key_is_valid) {
  if (trimstr(this.value) != '') {
   if (this.value.length > 0) {
    if (this.value.substring(this.value.length-1) != '.') {
     element_to_update.style.textIndent = this.value + document.forms[0].text_indent_unit.value;
    }
   } else { element_to_update.style.textIndent = '0' + document.forms[0].text_indent_unit.value; }
  }
  make_css_edit_box_text();
 }
}

function letter_spacing_textbox_onkeyup() {
 if (key_is_valid) {
  if (trimstr(this.value) != '') {
   if (this.value.length > 0) {
    if (this.value.substring(this.value.length-1) != '.') {
     element_to_update.style.letterSpacing = this.value + document.forms[0].letter_spacing_unit.value;
    }
   } else { element_to_update.style.letterSpacing = '0' + document.forms[0].letter_spacing_unit.value; }
  }
  make_css_edit_box_text();
 }
}

function word_spacing_textbox_onkeyup() {
 if (key_is_valid) {
  if (trimstr(this.value) != '') {
   if (this.value.length > 0) {
    if (this.value.substring(this.value.length-1) != '.') {
     element_to_update.style.wordSpacing = this.value + document.forms[0].word_spacing_unit.value;
    }
   } else { element_to_update.style.wordSpacing = '0' + document.forms[0].word_spacing_unit.value; }
  }
  make_css_edit_box_text();
 }
}

function line_height_textbox_onkeyup() {
 if (key_is_valid) {
  if (trimstr(this.value) != '') {
   if (this.value.length > 0) {
    if (this.value.substring(this.value.length-1) != '.') {
     element_to_update.style.lineHeight = this.value + document.forms[0].line_height_unit.value;
    }
   } else { element_to_update.style.lineHeight = '0' + document.forms[0].line_height_unit.value; }
  }
  make_css_edit_box_text();
 }
}

function color_textbox_onkeyup() {
 color_has_changed();
}

function bg_color_textbox_onkeyup() {
 bg_color_has_changed();
}
/* *********************************************************************************************************** */


/* *********************************************************************************************************** */
/* OnChange Events                                                                                             */
/* *********************************************************************************************************** */
function font_size_dropdown_onchange() {
 get_element_to_update();
 if (this.value == 'other') {
  document.forms[0].font_size_textbox.disabled = false;
  document.forms[0].font_size_unit.disabled = false;
  element_to_update.style.fontSize = document.forms[0].font_size_textbox.value + document.forms[0].font_size_unit.value;
 }
 else {
  document.forms[0].font_size_textbox.disabled = true;
  document.forms[0].font_size_unit.disabled = true;
  element_to_update.style.fontSize = this.value;
 }
 make_css_edit_box_text();
}

function font_size_unit_onchange() {
 get_element_to_update();
 element_to_update.style.fontSize = document.forms[0].font_size_textbox.value + document.forms[0].font_size_unit.value;
 make_css_edit_box_text();
}

function font_family_onchange() {
 get_element_to_update();
 element_to_update.style.fontFamily = document.forms[0].font_family_dropdown.value;
 make_css_edit_box_text();
}

function font_stretch_dropdown_onchange() {
 get_element_to_update();
 element_to_update.style.fontStretch = document.forms[0].font_stretch_dropdown.value;
 make_css_edit_box_text();
}

function font_style_dropdown_onchange() {
 get_element_to_update();
 element_to_update.style.fontStyle = document.forms[0].font_style_dropdown.value;
 make_css_edit_box_text();
}

function font_variant_dropdown_onchange() {
 get_element_to_update();
 element_to_update.style.fontVariant = document.forms[0].font_variant_dropdown.value;
 make_css_edit_box_text();
}

function font_weight_dropdown_onchange() {
 get_element_to_update();
 element_to_update.style.fontWeight = document.forms[0].font_weight_dropdown.value;
 make_css_edit_box_text();
}

function text_decoration_dropdown_onchange() {
 get_element_to_update();
 element_to_update.style.textDecoration = document.forms[0].text_decoration_dropdown.value;
 make_css_edit_box_text();
}

function text_indent_unit_onchange() {
 get_element_to_update();
 element_to_update.style.textIndent = document.forms[0].text_indent_textbox.value + document.forms[0].text_indent_unit.value;
 make_css_edit_box_text();
}

function text_transform_dropdown_onchange() {
 get_element_to_update();
 element_to_update.style.textTransform = document.forms[0].text_transform_dropdown.value;
 make_css_edit_box_text();
}

function white_space_dropdown_onchange() {
 get_element_to_update();
 element_to_update.style.whiteSpace = document.forms[0].white_space_dropdown.value;
 element_to_update.obj.innerHTML = element_to_update.obj.innerHTML + '';
 make_css_edit_box_text();
}

function letter_spacing_unit_onchange() {
 get_element_to_update();
 element_to_update.style.letterSpacing = document.forms[0].letter_spacing_textbox.value + document.forms[0].letter_spacing_unit.value;
 make_css_edit_box_text();
}

function word_spacing_unit_onchange() {
 get_element_to_update();
 element_to_update.style.wordSpacing = document.forms[0].word_spacing_textbox.value + document.forms[0].word_spacing_unit.value;
 make_css_edit_box_text();
}

function line_height_unit_onchange() {
 get_element_to_update();
 element_to_update.style.lineHeight = document.forms[0].line_height_textbox.value + document.forms[0].line_height_unit.value;
 make_css_edit_box_text();
}

function color_has_changed() {
 get_element_to_update();
 element_to_update.style.color = document.forms[0].color_textbox.value;
 if (document.forms[0].update_which_color[0].checked) {
  if (document.forms[0].auto_calculate_inverse.checked) {
   if (HexIsValid(document.forms[0].color_textbox.value) == true) { // auto calculate inverse
    document.forms[0].bg_color_textbox.value = invertHex(document.forms[0].color_textbox.value);
    bg_color_has_changed();
   }
  }
 }
 make_css_edit_box_text();
}

function bg_color_has_changed() {
 get_element_to_update();
 element_to_update.style.backgroundColor = document.forms[0].bg_color_textbox.value;
 if (document.forms[0].update_which_color[1].checked) {
  if (document.forms[0].auto_calculate_inverse.checked) {
   if (HexIsValid(document.forms[0].bg_color_textbox.value) == true) { // auto calculate inverse
    document.forms[0].color_textbox.value = invertHex(document.forms[0].bg_color_textbox.value);
    color_has_changed();
   }
  }
 }
 if (document.forms[0].column_properties[0].checked) { text_col_1_obj.style.backgroundColor = document.forms[0].bg_color_textbox.value; }
 else if (document.forms[0].column_properties[1].checked) { text_col_2_obj.style.backgroundColor = document.forms[0].bg_color_textbox.value; }
 else if (document.forms[0].column_properties[2].checked) { text_col_3_obj.style.backgroundColor = document.forms[0].bg_color_textbox.value; }
 make_css_edit_box_text();
}

function color_picker_color_dropdown_onchange() {
 document.forms[0].cp_hex_input.value = this.value;
 update_rgb_and_hsv_textboxes();
 cp_hex_textbox_has_changed();
}

function color_picker_dropdown_onclick() {
 hex_is_chosen = true;
}

function update_rgb_and_hsv_textboxes() {
 if (HexIsValid(document.forms[0].cp_hex_input.value) == true) {
  rgb_arr[0] = hex_to_decimal(document.forms[0].cp_hex_input.value.substring(1,3));
  rgb_arr[1] = hex_to_decimal(document.forms[0].cp_hex_input.value.substring(3,5));
  rgb_arr[2] = hex_to_decimal(document.forms[0].cp_hex_input.value.substring(5,7));
  document.forms[0].r_input.value = rgb_arr[0];
  document.forms[0].g_input.value = rgb_arr[1];
  document.forms[0].b_input.value = rgb_arr[2];
  hsv_arr = RGBtoHSV(rgb_arr[0], rgb_arr[1], rgb_arr[2]);
  document.forms[0].h_input.value = hsv_arr[0];
  document.forms[0].s_input.value = hsv_arr[1];
  document.forms[0].v_input.value = hsv_arr[2];
 }
}

function cp_hex_textbox_has_changed() {
 if (HexIsValid(document.forms[0].cp_hex_input.value) == true) {
  if (document.forms[0].update_which_color[0].checked) {
   document.forms[0].color_textbox.value = document.forms[0].cp_hex_input.value;
   color_has_changed();
  }
  else if (document.forms[0].update_which_color[1].checked) {
   document.forms[0].bg_color_textbox.value = document.forms[0].cp_hex_input.value;
   bg_color_has_changed();
  }
 }
}

function direction_dropdown_onchange() {
 get_element_to_update();
 element_to_update.style.direction = document.forms[0].direction_dropdown.value;
 make_css_edit_box_text();
}

function unicode_bidi_dropdown_onchange() {
 get_element_to_update();
 element_to_update.style.unicodeBidi = document.forms[0].unicode_bidi_dropdown.value;
 make_css_edit_box_text();
}

function text_align_dropdown_onchange() {
 get_element_to_update();
 element_to_update.style.textAlign = document.forms[0].text_align_dropdown.value;
 make_css_edit_box_text();
}

function update_text_align() {
 get_element_to_update();
 switch (document.forms[0].text_align_value.value) {
  case '1':  element_to_update.style.textAlign = 'left'; break;
  case '2':  element_to_update.style.textAlign = 'center'; break;
  case '3':  element_to_update.style.textAlign = 'right'; break;
  case '4':  element_to_update.style.textAlign = 'justify'; break;
  default: element_to_update.style.textAlign = 'left';
 }
 make_css_edit_box_text();
}

function align_left_icon_onmouseover() { self_selected = false; document.images['align_left_icon'].src = (document.forms[0].text_align_value.value == 1) ? './img/align_left_icon_hot2.gif' : './img/align_left_icon_hot.gif'; }
function align_center_icon_onmouseover() { self_selected = false; document.images['align_center_icon'].src = (document.forms[0].text_align_value.value == 2) ? './img/align_center_icon_hot2.gif' : './img/align_center_icon_hot.gif'; }
function align_right_icon_onmouseover() { self_selected = false; document.images['align_right_icon'].src = (document.forms[0].text_align_value.value == 3) ? './img/align_right_icon_hot2.gif' : './img/align_right_icon_hot.gif'; }
function align_justify_icon_onmouseover() { self_selected = false; document.images['align_justify_icon'].src = (document.forms[0].text_align_value.value == 4) ? './img/align_justify_icon_hot2.gif' : './img/align_justify_icon_hot.gif'; }

function align_left_icon_onmouseout() { document.images['align_left_icon'].src = (document.forms[0].text_align_value.value == 1) ? './img/align_left_icon_selected.gif' : './img/align_left_icon_normal.gif'; }
function align_center_icon_onmouseout() { document.images['align_center_icon'].src = (document.forms[0].text_align_value.value == 2) ? './img/align_center_icon_selected.gif' : './img/align_center_icon_normal.gif'; }
function align_right_icon_onmouseout() { document.images['align_right_icon'].src = (document.forms[0].text_align_value.value == 3) ? './img/align_right_icon_selected.gif' : './img/align_right_icon_normal.gif'; }
function align_justify_icon_onmouseout() { document.images['align_justify_icon'].src = (document.forms[0].text_align_value.value == 4) ? './img/align_justify_icon_selected.gif' : './img/align_justify_icon_normal.gif'; }

function align_left_icon_onmousedown() { document.images['align_left_icon'].src = './img/align_left_icon_hot2.gif'; if (document.forms[0].text_align_value.value == 1) { self_selected = true; } }
function align_center_icon_onmousedown() { document.images['align_center_icon'].src = './img/align_center_icon_hot2.gif'; if (document.forms[0].text_align_value.value == 2) { self_selected = true; } }
function align_right_icon_onmousedown() { document.images['align_right_icon'].src = './img/align_right_icon_hot2.gif'; if (document.forms[0].text_align_value.value == 3) { self_selected = true; } }
function align_justify_icon_onmousedown() { document.images['align_justify_icon'].src = './img/align_justify_icon_hot2.gif'; if (document.forms[0].text_align_value.value == 4) { self_selected = true; } }

function align_left_icon_onclick() { document.images['align_center_icon'].src = './img/align_center_icon_normal.gif'; document.images['align_right_icon'].src = './img/align_right_icon_normal.gif'; document.images['align_justify_icon'].src = './img/align_justify_icon_normal.gif'; if (self_selected == false) { document.forms[0].text_align_value.value = 1; document.images['align_left_icon'].src = './img/align_left_icon_hot2.gif'; } else { document.forms[0].text_align_value.value = 0; document.images['align_left_icon'].src = './img/align_left_icon_hot.gif'; } update_text_align(); }
function align_center_icon_onclick() { document.images['align_left_icon'].src = './img/align_left_icon_normal.gif'; document.images['align_right_icon'].src = './img/align_right_icon_normal.gif'; document.images['align_justify_icon'].src = './img/align_justify_icon_normal.gif'; if (self_selected == false) { document.forms[0].text_align_value.value = 2; document.images['align_center_icon'].src = './img/align_center_icon_hot2.gif'; } else { document.forms[0].text_align_value.value = 0; document.images['align_center_icon'].src = './img/align_center_icon_hot.gif'; } update_text_align(); }
function align_right_icon_onclick() { document.images['align_left_icon'].src = './img/align_left_icon_normal.gif'; document.images['align_center_icon'].src = './img/align_center_icon_normal.gif'; document.images['align_justify_icon'].src = './img/align_justify_icon_normal.gif'; if (self_selected == false) { document.forms[0].text_align_value.value = 3; document.images['align_right_icon'].src = './img/align_right_icon_hot2.gif'; } else { document.forms[0].text_align_value.value = 0; document.images['align_right_icon'].src = './img/align_right_icon_hot.gif'; } update_text_align(); }
function align_justify_icon_onclick() { document.images['align_left_icon'].src = './img/align_left_icon_normal.gif'; document.images['align_center_icon'].src = './img/align_center_icon_normal.gif'; document.images['align_right_icon'].src = './img/align_right_icon_normal.gif'; if (self_selected == false) { document.forms[0].text_align_value.value = 4; document.images['align_justify_icon'].src = './img/align_justify_icon_hot2.gif'; } else { document.forms[0].text_align_value.value = 0; document.images['align_justify_icon'].src = './img/align_justify_icon_hot.gif'; } update_text_align(); }

function line_height_dropdown_onchange() {
 get_element_to_update();
 if (this.value == 'other') {
  document.forms[0].line_height_textbox.disabled = false;
  document.forms[0].line_height_unit.disabled = false;
  element_to_update.style.lineHeight = document.forms[0].line_height_textbox.value + document.forms[0].line_height_unit.value;
 }
 else {
  document.forms[0].line_height_textbox.disabled = true;
  document.forms[0].line_height_unit.disabled = true;
  element_to_update.style.lineHeight = document.forms[0].line_height_dropdown.value;
 }
 make_css_edit_box_text();
}

function enable_disable_line_height_onclick() {
 get_element_to_update();
 document.forms[0].line_height_textbox.disabled = !this.checked;
 document.forms[0].line_height_unit.disabled = !this.checked;
 if (this.checked) {
  element_to_update.style.lineHeight = document.forms[0].line_height_textbox.value + document.forms[0].line_height_unit.value;
  document.forms[0].line_height_textbox.focus();
  //if (document.forms[0].line_height_textbox.setSelectionRange) { document.forms[0].line_height_textbox.setSelectionRange(document.forms[0].line_height_textbox.value.length,document.forms[0].line_height_textbox.value.length+1); }
  //else if (document.forms[0].line_height_textbox.createTextRange) { var oRange = document.forms[0].line_height_textbox.createTextRange(); oRange.moveStart("character", document.forms[0].line_height_textbox.value.length); oRange.moveEnd("character", document.forms[0].line_height_textbox.value.length+1); }
 }
 else {
  element_to_update.style.lineHeight = 'normal';
 }
 make_css_edit_box_text();
 if (this.checked) { document.forms[0].line_height_textbox.focus(); }
}

function enable_disable_font_weight_onclick() {
 get_element_to_update();
 document.forms[0].font_weight_dropdown.disabled = !this.checked;
 if (this.checked) {
  element_to_update.style.fontWeight = document.forms[0].font_weight_dropdown.value;
  document.forms[0].font_weight_dropdown.focus();
 }
 else {
  element_to_update.style.fontWeight = 'normal';
 }
 make_css_edit_box_text();
 if (this.checked) { document.forms[0].font_weight_dropdown.focus(); }
}

function enable_disable_font_style_onclick() {
 get_element_to_update();
 document.forms[0].font_style_dropdown.disabled = !this.checked;
 if (this.checked) {
  element_to_update.style.fontStyle = document.forms[0].font_style_dropdown.value;
  document.forms[0].font_style_dropdown.focus();
 }
 else {
  element_to_update.style.fontStyle = 'normal';
 }
 make_css_edit_box_text();
 if (this.checked) { document.forms[0].font_style_dropdown.focus(); }
}

function enable_disable_font_variant_onclick() {
 get_element_to_update();
 document.forms[0].font_variant_dropdown.disabled = !this.checked;
 if (this.checked) {
  element_to_update.style.fontVariant = document.forms[0].font_variant_dropdown.value;
  document.forms[0].font_variant_dropdown.focus();
 }
 else {
  element_to_update.style.fontVariant = 'normal';
 }
 make_css_edit_box_text();
 if (this.checked) { document.forms[0].font_variant_dropdown.focus(); }
}

function enable_disable_text_decoration_onclick() {
 get_element_to_update();
 document.forms[0].text_decoration_dropdown.disabled = !this.checked;
 if (this.checked) {
  element_to_update.style.textDecoration = document.forms[0].text_decoration_dropdown.value;
  document.forms[0].text_decoration_dropdown.focus();
 }
 else {
  element_to_update.style.textDecoration = 'none';
 }
 make_css_edit_box_text();
 if (this.checked) { document.forms[0].text_decoration_dropdown.focus(); }
}

function enable_disable_text_indent_onclick() {
 get_element_to_update();
 document.forms[0].text_indent_textbox.disabled = !this.checked;
 document.forms[0].text_indent_unit.disabled = !this.checked;
 if (this.checked) {
  element_to_update.style.textIndent = document.forms[0].text_indent_textbox.value + document.forms[0].text_indent_unit.value;
  document.forms[0].text_indent_textbox.focus();
 }
 else {
  element_to_update.style.textIndent = 0;
 }
 make_css_edit_box_text();
 if (this.checked) { document.forms[0].text_indent_textbox.focus(); }
}

function enable_disable_text_transform_onclick() {
 get_element_to_update();
 document.forms[0].text_transform_dropdown.disabled = !this.checked;
 if (this.checked) {
  element_to_update.style.textTransform = document.forms[0].text_transform_dropdown.value;
  document.forms[0].text_transform_dropdown.focus();
 }
 else {
  element_to_update.style.textTransform = 'none';
 }
 make_css_edit_box_text();
 if (this.checked) { document.forms[0].text_transform_dropdown.focus(); }
}

function enable_disable_letter_spacing_onclick() {
 get_element_to_update();
 document.forms[0].letter_spacing_textbox.disabled = !this.checked;
 document.forms[0].letter_spacing_unit.disabled = !this.checked;
 if (this.checked) {
  element_to_update.style.letterSpacing = document.forms[0].letter_spacing_textbox.value + document.forms[0].letter_spacing_unit.value;
  document.forms[0].letter_spacing_textbox.focus();
 }
 else {
  element_to_update.style.letterSpacing = 'normal';
 }
 make_css_edit_box_text();
 if (this.checked) { document.forms[0].letter_spacing_textbox.focus(); }
}

function enable_disable_word_spacing_onclick() {
 get_element_to_update();
 document.forms[0].word_spacing_textbox.disabled = !this.checked;
 document.forms[0].word_spacing_unit.disabled = !this.checked;
 if (this.checked) {
  element_to_update.style.wordSpacing = document.forms[0].word_spacing_textbox.value + document.forms[0].word_spacing_unit.value;
  document.forms[0].word_spacing_textbox.focus();
 }
 else {
  element_to_update.style.wordSpacing = 'normal';
 }
 make_css_edit_box_text();
 if (this.checked) { document.forms[0].word_spacing_textbox.focus(); }
}

function enable_disable_font_stretch_onclick() {
 get_element_to_update();
 document.forms[0].font_stretch_dropdown.disabled = !this.checked;
 if (this.checked) {
  element_to_update.style.fontStretch = document.forms[0].font_stretch_dropdown.value;
  document.forms[0].font_stretch_dropdown.focus();
 }
 else {
  element_to_update.style.fontStretch = 'normal';
 }
 make_css_edit_box_text();
 if (this.checked) { document.forms[0].font_stretch_dropdown.focus(); }
}

function enable_disable_font_size_adjust_onclick() {
 get_element_to_update();
 document.forms[0].font_size_adjust_textbox.disabled = !this.checked;
 if (this.checked) {
  element_to_update.style.fontSizeAdjust = document.forms[0].font_size_adjust_textbox.value;
  document.forms[0].font_size_adjust_textbox.focus();
 }
 else {
  element_to_update.style.fontSizeAdjust = 'none';
 }
 make_css_edit_box_text();
 if (this.checked) { document.forms[0].font_size_adjust_textbox.focus(); }
}

function enable_disable_white_space_onclick() {
 get_element_to_update();
 document.forms[0].white_space_dropdown.disabled = !this.checked;
 if (this.checked) {
  element_to_update.style.whiteSpace = document.forms[0].white_space_dropdown.value;
  document.forms[0].white_space_dropdown.focus();
 }
 else {
  element_to_update.style.whiteSpace = 'normal';
 }
 make_css_edit_box_text();
 if (this.checked) { document.forms[0].white_space_dropdown.focus(); }
 element_to_update.obj.innerHTML = element_to_update.obj.innerHTML + '';
}

function enable_disable_unicode_bidi_onclick() {
 get_element_to_update();
 document.forms[0].unicode_bidi_dropdown.disabled = !this.checked;
 if (this.checked) {
  element_to_update.style.unicodeBidi = document.forms[0].unicode_bidi_dropdown.value;
  document.forms[0].unicode_bidi_dropdown.focus();
 }
 else {
  element_to_update.style.unicodeBidi = 'normal';
 }
 make_css_edit_box_text();
 if (this.checked) { document.forms[0].unicode_bidi_dropdown.focus(); }
}

function enable_disable_direction_onclick() {
 get_element_to_update();
 document.forms[0].direction_dropdown.disabled = !this.checked;
 if (this.checked) {
  element_to_update.style.direction = document.forms[0].direction_dropdown.value;
  document.forms[0].direction_dropdown.focus();
 }
 else {
  element_to_update.style.direction = 'ltr';
 }
 make_css_edit_box_text();
 if (this.checked) { document.forms[0].direction_dropdown.focus(); }
}

function edit_col_onmousedown() {
 if (mouse_downed_once == false) {
  if (document.forms[0].column_properties[0].checked) { save_settings(0); }
  else if (document.forms[0].column_properties[1].checked) { save_settings(1); }
  else if (document.forms[0].column_properties[2].checked) { save_settings(2); }
  mouse_downed_once = true;
 }
}

function edit_text() {
 // show edit text window
 edit_text_box_obj.style.display = 'block';
 textbox_is_selected = false;
 // un-check all check boxes
 document.forms[0].update_col_1.checked = false;
 document.forms[0].update_col_2.checked = false;
 document.forms[0].update_col_3.checked = false;
 // check the approriate checkbox
 if (this.id == 'edit_text_col1') { document.forms[0].update_col_1.checked = true; document.forms[0].edit_text_textbox.value = text_col_1_p_obj.obj.innerHTML; }
 else if (this.id == 'edit_text_col2') { document.forms[0].update_col_2.checked = true; document.forms[0].edit_text_textbox.value = text_col_2_p_obj.obj.innerHTML; }
 else if (this.id == 'edit_text_col3') { document.forms[0].update_col_3.checked = true; document.forms[0].edit_text_textbox.value = text_col_3_p_obj.obj.innerHTML; }
 // select the textbox
 document.forms[0].edit_text_textbox.focus();
 document.forms[0].edit_text_textbox.select();
}

function focus_and_select() {
 this.select();
}

function make_css_code() {
 if (this.name == 'html_element_type_selector') {
  document.forms[0].html_element_class_selector.value = document.forms[0].html_element_id_selector.value = this.value;
 }

 // figure out the correct column
 var col = 0
 var col2 = 0;
 var css_parts = new Array(3);
 var html_parts = new Array(3);
 html_parts[0] = '';
 html_parts[1] = text_col_1_p_obj.obj.innerHTML;
 html_parts[2] = '';
 css_parts[0] = '';
 css_parts[1] = '';
 css_parts[2] = '}';

 if (document.forms[0].get_css_code_which_column[2].checked) { col = 2; html_parts[1] = text_col_3_p_obj.obj.innerHTML; }
 else if (document.forms[0].get_css_code_which_column[1].checked) { col = 1; html_parts[1] = text_col_2_p_obj.obj.innerHTML; }

 if (document.forms[0].column_properties[2].checked) { col2 = 2; }
 else if (document.forms[0].column_properties[1].checked) { col2 = 1; }

 if (col == col2) { save_settings(col); }

 // make beginning
 if (document.forms[0].selector_type[0].checked) { css_parts[0] = document.forms[0].html_element_type_selector.value; html_parts[0] = '<' + document.forms[0].html_element_type_selector.value + '>'; html_parts[2] = '</' + document.forms[0].html_element_type_selector.value + '>'; }
 else if (document.forms[0].selector_type[1].checked) { css_parts[0] = document.forms[0].html_element_class_selector.value + '.' + document.forms[0].class_name_text_box.value; html_parts[0] = '<' + document.forms[0].html_element_class_selector.value + ' class="' + document.forms[0].class_name_text_box.value + '">'; html_parts[2] = '</' + document.forms[0].html_element_class_selector.value + '>'; }
 else if (document.forms[0].selector_type[2].checked) { css_parts[0] = document.forms[0].html_element_id_selector.value + '#' + document.forms[0].id_name_text_box.value; html_parts[0] = '<' + document.forms[0].html_element_id_selector.value + ' id="' + document.forms[0].id_name_text_box.value + '">'; html_parts[2] = '</' + document.forms[0].html_element_id_selector.value + '>'; }
 css_parts[0] = css_parts[0] + ' {' + '\n';

 // make middle
  // write font-size
  if (col_settings[col][0] < (document.forms[0].font_size_dropdown.options.length - 1)) { css_parts[1] = css_parts[1] + ' font-size: ' + document.forms[0].font_size_dropdown.options[col_settings[col][0]].value + ';' + '\n'; }
  else { css_parts[1] = css_parts[1] + ' font-size: ' + col_settings[col][1] + document.forms[0].font_size_unit.options[col_settings[col][2]].value + ';' + '\n'; }

  // write font-family
  css_parts[1] = css_parts[1] + ' font-family: ' + document.forms[0].font_family_dropdown.options[col_settings[col][3]].value + ';' + '\n';

  // write color
  css_parts[1] = css_parts[1] + ' color: ' + col_settings[col][4] + ';' + '\n';

  // write background-color
  css_parts[1] = css_parts[1] + ' background-color: ' + col_settings[col][5] + ';' + '\n';

  // write text-align
  if (col_settings[col][6] == 1) { css_parts[1] = css_parts[1] + ' text-align: left;' + '\n'; }
  else if (col_settings[col][6] == 2) { css_parts[1] = css_parts[1] + ' text-align: center;' + '\n'; }
  else if (col_settings[col][6] == 3) { css_parts[1] = css_parts[1] + ' text-align: right;' + '\n'; }
  else if (col_settings[col][6] == 4) { css_parts[1] = css_parts[1] + ' text-align: justify;' + '\n'; }

  // write line-height
  if (col_settings[col][7] == true) {
   css_parts[1] = css_parts[1] + ' line-height: ' + col_settings[col][8] + document.forms[0].line_height_unit.options[col_settings[col][9]].value + ';' + '\n';
  }

  // write font-weight
  if (col_settings[col][10] == true) {
   css_parts[1] = css_parts[1] + ' font-weight: ' + document.forms[0].font_weight_dropdown.options[col_settings[col][11]].value + ';' + '\n';
  }

  // write font-style
  if (col_settings[col][12] == true) {
   css_parts[1] = css_parts[1] + ' font-style: ' + document.forms[0].font_style_dropdown.options[col_settings[col][13]].value + ';' + '\n';
  }

  // write font-variant
  if (col_settings[col][14] == true) {
   css_parts[1] = css_parts[1] + ' font-variant: ' + document.forms[0].font_variant_dropdown.options[col_settings[col][15]].value + ';' + '\n';
  }

  // write text-decoration
  if (col_settings[col][16] == true) {
   css_parts[1] = css_parts[1] + ' text-decoration: ' + document.forms[0].text_decoration_dropdown.options[col_settings[col][17]].value + ';' + '\n';
  }

  // write text-indent
  if (col_settings[col][18] == true) {
   css_parts[1] = css_parts[1] + ' text-indent: ' + col_settings[col][19] + document.forms[0].text_indent_unit.options[col_settings[col][20]].value + ';' + '\n';
  }

  // write text-transform
  if (col_settings[col][21] == true) {
   css_parts[1] = css_parts[1] + ' text-transform: ' + document.forms[0].text_transform_dropdown.options[col_settings[col][22]].value + ';' + '\n';
  }

  // write letter-spacing
  if (col_settings[col][23] == true) {
   css_parts[1] = css_parts[1] + ' letter-spacing: ' + col_settings[col][24] + document.forms[0].letter_spacing_unit.options[col_settings[col][25]].value + ';' + '\n';
  }

  // write word-spacing
  if (col_settings[col][26] == true) {
   css_parts[1] = css_parts[1] + ' word-spacing: ' + col_settings[col][27] + document.forms[0].word_spacing_unit.options[col_settings[col][28]].value + ';' + '\n';
  }

  // write font-stretch
  if (col_settings[col][29] == true) {
   css_parts[1] = css_parts[1] + ' font-stretch: ' + document.forms[0].font_stretch_dropdown.options[col_settings[col][30]].value + ';' + '\n';
  }

  // write font-size-adjust
  if (col_settings[col][31] == true) {
   css_parts[1] = css_parts[1] + ' font-size-adjust: ' + col_settings[col][32] + ';' + '\n';
  }

  // write white-space
  if (col_settings[col][33] == true) {
   css_parts[1] = css_parts[1] + ' white-space: ' + document.forms[0].white_space_dropdown.options[col_settings[col][34]].value + ';' + '\n';
  }

  // write unicode-bidi
  if (col_settings[col][35] == true) {
   css_parts[1] = css_parts[1] + ' unicode-bidi: ' + document.forms[0].unicode_bidi_dropdown.options[col_settings[col][36]].value + ';' + '\n';
  }

  // write direction
  if (col_settings[col][37] == true) {
   css_parts[1] = css_parts[1] + ' direction: ' + document.forms[0].direction_dropdown.options[col_settings[col][38]].value + ';' + '\n';
  }

 document.forms[0].get_css_code_textarea.value = css_parts[0] + css_parts[1] + css_parts[2];
 document.forms[0].get_html_code_textarea.value = html_parts[0] + html_parts[1] + html_parts[2];
}

function char_map_font_family_dropdown_onchange() {
 char_map_table_obj.style.fontFamily = document.forms[0].char_map_font_family_dropdown.value;
}

function char_map_font_size_dropdown_onchange() {
 char_map_table_obj.style.fontSize = document.forms[0].char_map_font_size_dropdown.value;
}

function uhe(num) {
 document.forms[0].html_entity_textbox.value = '&#' + num + ';';
 document.forms[0].html_entity_code_snippet_textarea.value = '<span style="font-family: ' + document.forms[0].char_map_font_family_dropdown.value + '; font-size: ' + document.forms[0].char_map_font_size_dropdown.value + ';">' + '&#' + num + ';' + '</span>';
}

function show_get_html_entity_code_snippet() {
 html_entity_code_snippet_text_box_obj.style.display = 'block';
 document.forms[0].html_entity_code_snippet_textarea.focus();
 document.forms[0].html_entity_code_snippet_textarea.select();
}

function hide_get_html_entity_code_snippet() {
 html_entity_code_snippet_text_box_obj.style.display = 'none';
}

function get_css_onclick() {
 hide_show_char_map_dropdowns(false);
 // show css code window
 get_css_text_box_obj.style.display = 'block';
 textbox_is_selected = false;
 // un-check all radio buttons
 document.forms[0].get_css_code_which_column[0].checked = false;
 document.forms[0].get_css_code_which_column[1].checked = false;
 document.forms[0].get_css_code_which_column[2].checked = false;
 // check the approriate radio button
 if (this.id == 'get_css_col1') { document.forms[0].get_css_code_which_column[0].checked = true; make_css_code(); }
 else if (this.id == 'get_css_col2') { document.forms[0].get_css_code_which_column[1].checked = true; make_css_code(); }
 else if (this.id == 'get_css_col3') { document.forms[0].get_css_code_which_column[2].checked = true; make_css_code(); }
 // focus the textbox
 document.forms[0].get_css_code_textarea.focus();
}

function get_css_ok_onclick() {
 hide_show_char_map_dropdowns(true);
 get_css_text_box_obj.style.display = 'none';
}

function hide_show_char_map() {
 if (hide_char_map_link_obj.obj.innerHTML == 'Show') {
  char_map_div_obj.style.display = 'block';
  hide_char_map_link_obj.obj.innerHTML = 'Hide';
 }
 else {
  char_map_div_obj.style.display = 'none';
  hide_char_map_link_obj.obj.innerHTML = 'Show';
 }
}

function hide_show_char_map_dropdowns(show) {
 if (window.external) {
  if (show == true) {
   document.forms[0].char_map_font_family_dropdown.style.visibility = 'visible';
   document.forms[0].char_map_font_size_dropdown.style.visibility = 'visible';
  }
  else {
   document.forms[0].char_map_font_family_dropdown.style.visibility = 'hidden';
   document.forms[0].char_map_font_size_dropdown.style.visibility = 'hidden';
  }
 }
}

function edit_text_cancel_onclick() {
 edit_text_box_obj.style.display = 'none';
}

function edit_text_ok_onclick() {
 if (document.forms[0].update_col_1.checked) { // update column 1 text
  text_col_1_p_obj.obj.innerHTML = document.forms[0].edit_text_textbox.value;
 }
 if (document.forms[0].update_col_2.checked) { // update column 2 text
  text_col_2_p_obj.obj.innerHTML = document.forms[0].edit_text_textbox.value;
 }
 if (document.forms[0].update_col_3.checked) { // update column 3 text
  text_col_3_p_obj.obj.innerHTML = document.forms[0].edit_text_textbox.value;
 }
 edit_text_box_obj.style.display = 'none';
}

function edit_col_onclick() {
 if (mouse_downed_once == true) {
  if (document.forms[0].column_properties[0].checked) { load_settings(0); }
  else if (document.forms[0].column_properties[1].checked) { load_settings(1); }
  else if (document.forms[0].column_properties[2].checked) { load_settings(2); }
 }
 mouse_downed_once = false;
}

/* *********************************************************************************************************** */

window.onload = makeObjects;

function makeObjects() {

 char_map_div_obj = new getObj('char_map_div');

 hide_char_map_link_obj = new getObj('hide_char_map_link');

 html_entity_code_snippet_text_box_obj = new getObj('html_entity_code_snippet_text_box');

 char_map_table_obj = new getObj('char_map_table');

 text_col_1_obj = new getObj('text_col_1');
 text_col_2_obj = new getObj('text_col_2');
 text_col_3_obj = new getObj('text_col_3');

 text_col_1_p_obj = new getObj('text_col_1_p');
 text_col_2_p_obj = new getObj('text_col_2_p');
 text_col_3_p_obj = new getObj('text_col_3_p');

 header_col_obj[0] = new getObj('header_column1');
 header_col_obj[1] = new getObj('header_column2');
 header_col_obj[2] = new getObj('header_column3');

 edit_text_link_obj[0] = new getObj('edit_text_col1');
 edit_text_link_obj[1] = new getObj('edit_text_col2');
 edit_text_link_obj[2] = new getObj('edit_text_col3');

 get_css_link_obj[0] = new getObj('get_css_col1');
 get_css_link_obj[1] = new getObj('get_css_col2');
 get_css_link_obj[2] = new getObj('get_css_col3');

 color_picker_box_obj = new getObj('color_picker_box');
 edit_text_box_obj = new getObj('edit_text_box');
 get_css_text_box_obj = new getObj('get_css_text_box');

 edit_text_box_obj.style.width = parseInt(screen.width * 0.62) + 'px';
 get_css_text_box_obj.style.width = parseInt(screen.width * 0.62) + 'px';

 edit_text_link_obj[0].obj.onclick = edit_text_link_obj[1].obj.onclick = edit_text_link_obj[2].obj.onclick = edit_text;
 get_css_link_obj[0].obj.onclick = get_css_link_obj[1].obj.onclick = get_css_link_obj[2].obj.onclick = get_css_onclick;

 document.forms[0].html_element_type_selector.onkeyup = document.forms[0].html_element_class_selector.onkeyup = document.forms[0].class_name_text_box.onkeyup = document.forms[0].html_element_id_selector.onkeyup = document.forms[0].id_name_text_box.onkeyup = document.forms[0].selector_type[0].onclick = document.forms[0].selector_type[1].onclick = document.forms[0].selector_type[2].onclick = document.forms[0].get_css_code_which_column[0].onclick = document.forms[0].get_css_code_which_column[1].onclick = document.forms[0].get_css_code_which_column[2].onclick = make_css_code;

 //document.forms[0].get_css_code_textarea.onfocus = document.forms[0].get_html_code_textarea.onfocus = document.forms[0].get_css_code_textarea.onclick = document.forms[0].get_html_code_textarea.onclick = focus_and_select;
 
 document.forms[0].cancel_button_edit_text.onclick = edit_text_cancel_onclick;
 document.forms[0].ok_button_edit_text.onclick = edit_text_ok_onclick;

 document.forms[0].ok_button_get_css.onclick = get_css_ok_onclick;

 document.forms[0].char_map_font_family_dropdown.onchange = char_map_font_family_dropdown_onchange;
 document.forms[0].char_map_font_size_dropdown.onchange = char_map_font_size_dropdown_onchange;

 document.forms[0].ok_button_get_html_entity_code_snippet.onclick = hide_get_html_entity_code_snippet;

 // Register Event Handlers
 for (i=0; i<document.forms[0].elements.length; i++) {
  if (document.forms[0].elements[i].type == 'text') {
   if (document.forms[0].elements[i].className == 'two_decimal_places_textbox') {
    // IE doesn't support the UP and DOWN arrow keys as a "key press", only as a "key down"
    document.forms[0].elements[i].onkeypress = two_decimal_places_textbox_keypress;
    document.forms[0].elements[i].onkeydown = two_decimal_places_textbox_keydown;
   }
   else if (document.forms[0].elements[i].className == 'hex_textbox') {
    document.forms[0].elements[i].onkeypress = hex_textbox_keypress;
    document.forms[0].elements[i].onkeydown = hex_textbox_keydown;
   }
  }
 }

 cols_icon_obj[0] = new getObj('view_1_col_icon');
 cols_icon_obj[1] = new getObj('view_2_cols_icon');
 cols_icon_obj[2] = new getObj('view_3_cols_icon');

 cols_icon_obj[3] = new getObj('edit_col_1_icon');
 cols_icon_obj[4] = new getObj('edit_col_2_icon');
 cols_icon_obj[5] = new getObj('edit_col_3_icon');

 document.forms[0].number_of_columns_to_view[0].onclick = cols_icon_obj[0].obj.onclick = col1_clicked;
 document.forms[0].number_of_columns_to_view[1].onclick = cols_icon_obj[1].obj.onclick = col2_clicked;
 document.forms[0].number_of_columns_to_view[2].onclick = cols_icon_obj[2].obj.onclick = col3_clicked;

 document.forms[0].column_properties[0].onmousedown = edit_col_onmousedown;
 document.forms[0].column_properties[1].onmousedown = edit_col_onmousedown;
 document.forms[0].column_properties[2].onmousedown = edit_col_onmousedown;

 cols_icon_obj[3].obj.onmousedown = (function () { if (document.forms[0].column_properties[0].disabled == false) { edit_col_onmousedown(); document.forms[0].column_properties[0].checked = true; }});
 cols_icon_obj[4].obj.onmousedown = (function () { if (document.forms[0].column_properties[1].disabled == false) { edit_col_onmousedown(); document.forms[0].column_properties[1].checked = true; }});
 cols_icon_obj[5].obj.onmousedown = (function () { if (document.forms[0].column_properties[2].disabled == false) { edit_col_onmousedown(); document.forms[0].column_properties[2].checked = true; }});

 document.forms[0].column_properties[0].onclick = edit_col_onclick;
 document.forms[0].column_properties[1].onclick = edit_col_onclick;
 document.forms[0].column_properties[2].onclick = edit_col_onclick;

 cols_icon_obj[3].obj.onclick = (function () { if (document.forms[0].column_properties[0].disabled == false) { edit_col_onclick(); }});
 cols_icon_obj[4].obj.onclick = (function () { if (document.forms[0].column_properties[1].disabled == false) { edit_col_onclick(); }});
 cols_icon_obj[5].obj.onclick = (function () { if (document.forms[0].column_properties[2].disabled == false) { edit_col_onclick(); }});

 document.forms[0].color_textbox.onkeyup = color_textbox_onkeyup;
 document.forms[0].bg_color_textbox.onkeyup = bg_color_textbox_onkeyup;
 document.forms[0].line_height_textbox.onkeyup = line_height_textbox_onkeyup;
 document.forms[0].word_spacing_textbox.onkeyup = word_spacing_textbox_onkeyup;
 document.forms[0].letter_spacing_textbox.onkeyup = letter_spacing_textbox_onkeyup;
 document.forms[0].text_indent_textbox.onkeyup = text_indent_textbox_onkeyup;
 document.forms[0].font_size_textbox.onkeyup = font_size_textbox_onkeyup;
 document.forms[0].font_size_dropdown.onchange = font_size_dropdown_onchange;
 document.forms[0].text_indent_unit.onchange = text_indent_unit_onchange;
 document.forms[0].font_size_unit.onchange = font_size_unit_onchange;
 document.forms[0].font_family_dropdown.onchange = font_family_onchange;
 document.forms[0].font_style_dropdown.onchange = font_style_dropdown_onchange;
 document.forms[0].font_variant_dropdown.onchange = font_variant_dropdown_onchange;
 document.forms[0].font_weight_dropdown.onchange = font_weight_dropdown_onchange;
 document.forms[0].text_decoration_dropdown.onchange = text_decoration_dropdown_onchange;
 document.forms[0].text_transform_dropdown.onchange = text_transform_dropdown_onchange;
 document.forms[0].letter_spacing_unit.onchange = letter_spacing_unit_onchange;
 document.forms[0].word_spacing_unit.onchange = word_spacing_unit_onchange;
 document.forms[0].line_height_unit.onchange = line_height_unit_onchange;
 document.forms[0].font_stretch_dropdown.onchange = font_stretch_dropdown_onchange;
 document.forms[0].white_space_dropdown.onchange = white_space_dropdown_onchange;
 document.forms[0].unicode_bidi_dropdown.onchange = unicode_bidi_dropdown_onchange;
 document.forms[0].direction_dropdown.onchange = direction_dropdown_onchange;
 document.forms[0].common_colors_dropdown.onchange = document.forms[0].websafe_colors_dropdown.onchange = document.forms[0].named_colors_dropdown.onchange = color_picker_color_dropdown_onchange;
 document.forms[0].common_colors_dropdown.onclick = document.forms[0].websafe_colors_dropdown.onclick = document.forms[0].named_colors_dropdown.onclick = color_picker_dropdown_onclick;

 //document.forms[0].text_align_dropdown.onchange = text_align_dropdown_onchange;

 document.images['align_left_icon'].onmouseover = align_left_icon_onmouseover;
 document.images['align_center_icon'].onmouseover = align_center_icon_onmouseover;
 document.images['align_right_icon'].onmouseover = align_right_icon_onmouseover;
 document.images['align_justify_icon'].onmouseover = align_justify_icon_onmouseover;

 document.images['align_left_icon'].onmouseout = align_left_icon_onmouseout;
 document.images['align_center_icon'].onmouseout = align_center_icon_onmouseout;
 document.images['align_right_icon'].onmouseout = align_right_icon_onmouseout;
 document.images['align_justify_icon'].onmouseout = align_justify_icon_onmouseout;

 document.images['align_left_icon'].onmousedown = align_left_icon_onmousedown;
 document.images['align_center_icon'].onmousedown = align_center_icon_onmousedown;
 document.images['align_right_icon'].onmousedown = align_right_icon_onmousedown;
 document.images['align_justify_icon'].onmousedown = align_justify_icon_onmousedown;

 document.images['align_left_icon'].onclick = align_left_icon_onclick;
 document.images['align_center_icon'].onclick = align_center_icon_onclick;
 document.images['align_right_icon'].onclick = align_right_icon_onclick;
 document.images['align_justify_icon'].onclick = align_justify_icon_onclick;

 document.forms[0].enable_line_height.onclick = enable_disable_line_height_onclick;
 document.forms[0].enable_font_weight.onclick = enable_disable_font_weight_onclick;
 document.forms[0].enable_font_style.onclick = enable_disable_font_style_onclick;
 document.forms[0].enable_font_variant.onclick = enable_disable_font_variant_onclick;
 document.forms[0].enable_text_decoration.onclick = enable_disable_text_decoration_onclick;
 document.forms[0].enable_text_indent.onclick = enable_disable_text_indent_onclick;
 document.forms[0].enable_text_transform.onclick = enable_disable_text_transform_onclick;
 document.forms[0].enable_letter_spacing.onclick = enable_disable_letter_spacing_onclick;
 document.forms[0].enable_word_spacing.onclick = enable_disable_word_spacing_onclick;
 document.forms[0].enable_font_stretch.onclick = enable_disable_font_stretch_onclick;
 document.forms[0].enable_font_size_adjust.onclick = enable_disable_font_size_adjust_onclick;
 document.forms[0].enable_white_space.onclick = enable_disable_white_space_onclick;
 document.forms[0].enable_unicode_bidi.onclick = enable_disable_unicode_bidi_onclick;
 document.forms[0].enable_direction.onclick = enable_disable_direction_onclick;

 color_picker_box_obj.style.left = ((screen.availWidth / 2) - 100) + 'px';
 edit_text_box_obj.style.left = ((screen.availWidth / 2) - 240) + 'px';
 get_css_text_box_obj.style.left = ((screen.availWidth / 2) - 240) + 'px';

 color_picker_box_obj.style.top = '90px';
 edit_text_box_obj.style.top = '105px';
 get_css_text_box_obj.style.top = '90px'; 

 color_picker_box_obj.obj.onmouseover = edit_text_box_obj.obj.onmouseover = get_css_text_box_obj.obj.onmouseover = abs_box_onmouseover;
 color_picker_box_obj.obj.onmousedown = edit_text_box_obj.obj.onmousedown = get_css_text_box_obj.obj.onmousedown = abs_box_onmousedown;

 document.onmousemove = document_onmousemove;
 document.onmouseup = document_onmouseup;
 document.onclick = document_onclick;
 document.ondblclick = document_ondblclick;

 document.forms[0].edit_text_textbox.onfocus = document.forms[0].html_element_type_selector.onfocus = document.forms[0].html_element_class_selector.onfocus = document.forms[0].class_name_text_box.onfocus = document.forms[0].html_element_id_selector.onfocus = document.forms[0].id_name_text_box.onfocus = document.forms[0].get_css_code_textarea.onfocus = document.forms[0].get_html_code_textarea.onfocus = document.forms[0].h_input.onfocus = document.forms[0].s_input.onfocus = document.forms[0].v_input.onfocus = document.forms[0].r_input.onfocus = document.forms[0].g_input.onfocus = document.forms[0].b_input.onfocus = document.forms[0].cp_hex_input.onfocus = document.forms[0].websafe_colors_dropdown.onfocus = document.forms[0].common_colors_dropdown.onfocus = document.forms[0].named_colors_dropdown.onfocus = abs_textbox_onfocus;
 document.forms[0].edit_text_textbox.onblur = document.forms[0].html_element_type_selector.onblur = document.forms[0].html_element_class_selector.onblur = document.forms[0].class_name_text_box.onblur = document.forms[0].html_element_id_selector.onblur = document.forms[0].id_name_text_box.onblur = document.forms[0].get_css_code_textarea.onblur = document.forms[0].get_html_code_textarea.onblur = document.forms[0].h_input.onblur = document.forms[0].s_input.onblur = document.forms[0].v_input.onblur = document.forms[0].r_input.onblur = document.forms[0].g_input.onblur = document.forms[0].b_input.onblur = document.forms[0].cp_hex_input.onblur = document.forms[0].websafe_colors_dropdown.onblur = document.forms[0].common_colors_dropdown.onblur = document.forms[0].named_colors_dropdown.onblur = abs_textbox_onblur;
 document.forms[0].h_input.onkeyup = document.forms[0].s_input.onkeyup = document.forms[0].v_input.onkeyup = hsv_onkeyup;
 document.forms[0].r_input.onkeyup = document.forms[0].g_input.onkeyup = document.forms[0].b_input.onkeyup = rgb_onkeyup;
 document.forms[0].cp_hex_input.onkeyup = cp_hex_textbox_onkeyup;
 document.forms[0].cp_ok_button.onclick = cp_ok_button_onclick;
 document.forms[0].cp_cancel_button.onclick = cp_cancel_button_onclick;
 document.forms[0].update_which_color[0].onclick = document.forms[0].update_which_color[1].onclick = text_color_bg_color_radio_button_onclick;
 document.forms[0].auto_calculate_inverse.onclick = auto_calculate_inverse_onclick;

 color_picker_icon_obj = new getObj('color_picker_icon');
 bg_color_picker_icon_obj = new getObj('bg_color_picker_icon');
 color_picker_icon_obj.obj.onclick = color_picker_icon_onclick;
 bg_color_picker_icon_obj.obj.onclick = bg_color_picker_icon_onclick;

}

function abs_textbox_onfocus() { textbox_is_selected = true; }
function abs_textbox_onblur() { textbox_is_selected = false; }

function document_onmousemove(e) {
 if (mouse_is_down[0] == true) { // color picker box
  if (!e) { e = window.event; }
  color_picker_box_obj.style.left = (original_x[0] - down_x[0]) + e.clientX + 'px';
  color_picker_box_obj.style.top = (original_y[0] - down_y[0]) + e.clientY + 'px';
 }
 else if (mouse_is_down[1] == true) { // edit text box
  if (!e) { e = window.event; }
  edit_text_box_obj.style.left = (original_x[1] - down_x[1]) + e.clientX + 'px';
  edit_text_box_obj.style.top = (original_y[1] - down_y[1]) + e.clientY + 'px';
 }
 else if (mouse_is_down[2] == true) { // get css code box
  if (!e) { e = window.event; }
  get_css_text_box_obj.style.left = (original_x[2] - down_x[2]) + e.clientX + 'px';
  get_css_text_box_obj.style.top = (original_y[2] - down_y[2]) + e.clientY + 'px';
 }
}

function document_onmouseup(e) { mouse_is_down[0] = mouse_is_down[1] = mouse_is_down[2] = false; }
function document_onclick(e) { mouse_is_down[0] = mouse_is_down[1] = mouse_is_down[2] = false; }
function document_ondblclick(e) { mouse_is_down[0] = mouse_is_down[1] = mouse_is_down[2] = false; }

function abs_box_onmousedown(e) {
 if (!e) { e = window.event; }
 if (this.id == 'color_picker_box') { // color picker box
  if (textbox_is_selected == false) { mouse_is_down[0] = true; }
  else { mouse_is_down[0] = false; }
  original_x[0] = parseInt(this.style.left.replace('px',''));
  original_y[0] = parseInt(this.style.top.replace('px',''));
  down_x[0] = e.clientX;
  down_y[0] = e.clientY;
 }
 else if (this.id == 'edit_text_box') { // edit text box
  if (textbox_is_selected == false) { mouse_is_down[1] = true; }
  else { mouse_is_down[1] = false; }
  original_x[1] = parseInt(this.style.left.replace('px',''));
  original_y[1] = parseInt(this.style.top.replace('px',''));
  down_x[1] = e.clientX;
  down_y[1] = e.clientY;
 }
 else if (this.id == 'get_css_text_box') { // get css box
  if (textbox_is_selected == false) { mouse_is_down[2] = true; }
  else { mouse_is_down[2] = false; }
  original_x[2] = parseInt(this.style.left.replace('px',''));
  original_y[2] = parseInt(this.style.top.replace('px',''));
  down_x[2] = e.clientX;
  down_y[2] = e.clientY;
 }
}

function abs_box_onmouseover() {
 this.style.cursor = 'move';
}

/* *********************************************************************************************************** */
// COLOR PICKER STUFF
/* *********************************************************************************************************** */

var table_width = 225;
var table_height = 125;
var black_white_row_height = 4;
var starting_saturation = 5;
var ending_value = 15;
var saturation_iteration = 1; // affects top half
var value_iteration = 1; // affects bottom half
var x,y,h,s,v,r,g,b;
var colors_block_height = table_height - black_white_row_height;
var hex_string = "#000000";
var colors_block_height_y = 0;
var hsv_arr = new Array(3), rgb_arr = new Array(3);
x = y = h = s = v = r = g = b = 0;

function click_x_y(e) { hex_is_chosen = !hex_is_chosen; }

function get_x_y(e) {
 if (hex_is_chosen == false) {
  if (!e) { e = window.event; }
  if (e.offsetX) { x = e.offsetX; y = e.offsetY; }
  else if (e.pageX) { x = (e.pageX - e.target.offsetLeft); y = (e.pageY - e.target.offsetTop); }
  else { x = 0; y = 0; }

  if (x < 0) { x = 0; }
  if (y < 0) { y = 0; }
  if (x > (table_width + 25)) { x = 0; }
  if (x > table_width) { x = table_width; }
  if (y > table_height) { y = table_height; }

  // Get HSV

  // for default case
  // Find Saturation and Value
  switch (y) {
   case black_white_row_height: // first row
    s = starting_saturation;
    v = 100;
    break;
   case (table_height - 1): // last row
    s = 100;
    v = ending_value;
    break;
   default:
    // 1.) Find Saturation
    if ((y - 1 - black_white_row_height) >= (colors_block_height * 0.5)) { s = 100; } // bottom half
    else { // top half
     colors_block_height_y = Math.round(((y - 1 - black_white_row_height) / (colors_block_height * 0.5)) * 100) - starting_saturation;
     if (colors_block_height_y <= 0) { colors_block_height_y = 0; }
     s = starting_saturation + (saturation_iteration * colors_block_height_y);
     //s = Math.round(((y - black_white_row_height)  / (colors_block_height/3)) * 100,0);
    }

    // 2.) Find Value
    if ((y - 1 - black_white_row_height) <= (colors_block_height * 0.5)) { v = 100; } // top half
    else { // bottom half
     colors_block_height_y = Math.round(((y - 1 - black_white_row_height - (colors_block_height * 0.5)) / (colors_block_height * 0.5)) * 100) - ending_value;
     if (colors_block_height_y <= 0) { colors_block_height_y = 0; }
     v = 100 - (value_iteration * colors_block_height_y);
     //v = Math.round(100 - (((y - black_white_row_height)  / colors_block_height) * 100));
    }
  } // end switch

  if (y < black_white_row_height) {
   switch (x) {
    case 0: r = g = b = 0; break;
    case (table_width - 1): r = g = b = 255; break;
    default: r = g = b = Math.round((x / table_width) * 255);
   }
   if (r < 0) { r = 0; } if (r > 255) { r = 255; }
   if (g < 0) { g = 0; } if (g > 255) { g = 255; }
   if (b < 0) { b = 0; } if (b > 255) { b = 255; }
   hsv_arr = RGBtoHSV(r,g,b);
   document.forms[0].r_input.value = r;
   document.forms[0].g_input.value = g;
   document.forms[0].b_input.value = b;
   document.forms[0].h_input.value = hsv_arr[0];
   document.forms[0].s_input.value = hsv_arr[1];
   document.forms[0].v_input.value = hsv_arr[2];
   hex_string = makeHexFromRGB(r,g,b);
  }
  else {
   // 3.) find H
   switch (x) {
    case 0: h = 0; break;
    case (table_width - 1): h = 359; break;
    default: h = Math.round((x / table_width) * 359);
   }
   if (h < 0) { h = 0; } else if (h > 359) { h = 359; }
   if (s < 0) { s = 0; } else if (s > 100) { s = 100; }
   if (v < 0) { v = 0; } else if (v > 100) { v = 100; }
   rgb_arr = HSVtoRGB(h,s,v);
   document.forms[0].r_input.value = rgb_arr[0];
   document.forms[0].g_input.value = rgb_arr[1];
   document.forms[0].b_input.value = rgb_arr[2];
   document.forms[0].h_input.value = h;
   document.forms[0].s_input.value = s;
   document.forms[0].v_input.value = v;
   hex_string = makeHexFromHSV(h,s,v);
  }
  document.forms[0].cp_hex_input.value = hex_string;
  cp_hex_textbox_has_changed();
 }
}

function RGBtoHSV(red, green, blue) {
 if (typeof red == 'undefined') { red = 0; }
 if (typeof green == 'undefined') { green = 0; }
 if (typeof blue == 'undefined') { blue = 0; }
 if (isNaN(red)) { red = 0; }
 if (isNaN(green)) { green = 0; }
 if (isNaN(blue)) { blue = 0; }
 if (red == '') { red = 0; }
 if (green == '') { green = 0; }
 if (blue == '') { blue = 0; }
 if (red > 255) { red = 255; }
 if (green > 255) { green = 255; }
 if (blue > 255) { blue = 255; }
 if (red < 0) { red = 0; }
 if (green < 0) { green = 0; }
 if (blue < 0) { blue = 0; }
 var r,g,b,h,s,v,delta,min,max,arr;
 arr = new Array(3);
 if ((red == 0) && (green == 0) && (blue == 0)) { arr[0] = 0; arr[1] = 0; arr[2] = 0; return arr; }
 if ((red == 255) && (green == 255) && (blue == 255)) { arr[0] = 0; arr[1] = 0; arr[2] = 100; return arr; }
 r = red / 255;
 g = green / 255;
 b = blue / 255;
 min = Math.min(Math.min(r, g),b);
 max = Math.max(Math.max(r, g),b);
 switch (max) {
  case 0: h = s = v = 0; break;
  case min: h = s = 0; v = max; break;
  default:
delta = max - min;
if ( r == max ) { h = 0 + ( g - b ) / delta; }
else if ( g == max ) { h = 2 + ( b - r ) / delta; }
else { h = 4 + ( r - g ) / delta; }
h = h * 60;
if (h < 0) { h = h + 360; }
s = delta / max;
v = max;
s = s * 100;
v = v * 100;
 }
 arr[0] = Math.round(h);
 arr[1] = Math.round(s);
 arr[2] = Math.round(v);
 return arr;
}

function HSVtoRGB(hue,saturation,value) {
 if (typeof hue == 'undefined') { hue = 0; }
 if (typeof saturation == 'undefined') { saturation = 0; }
 if (typeof value == 'undefined') { value = 0; }
 if (isNaN(hue)) { hue = 0; }
 if (isNaN(saturation)) { saturation = 0; }
 if (isNaN(value)) { value = 0; }
 if (hue == '') { hue = 0; }
 if (saturation == '') { saturation = 0; }
 if (value == '') { value = 0; }
 if (hue > 360) { hue = 360; }
 if (saturation > 100) { saturation = 100; }
 if (value > 100) { value = 100; }
 if (hue < 0) { hue = 0; }
 if (saturation < 0) { saturation = 0; }
 if (value < 0) { value = 0; }
 var r,g,b,h,s,v,hi,f,p,q,t,arr;
 arr = new Array(3);
 if (saturation == 0) { r = g = b = value; }
 else {
  h = hue / 60.0;
  s = saturation / 100;
  v = value / 100;
  hi = Math.floor(h);
  f = h - hi;
  p = (v * (1.0 - s));
  q = (v * (1.0 - (f * s)));
  t = (v * (1.0 - ((1.0 - f) * s)));
  switch (hi) {
case 0: r = v; g = t; b = p; break;
case 1: r = q; g = v; b = p; break;
case 2: r = p; g = v; b = t; break;
case 3: r = p; g = q; b = v; break;
case 4: r = t; g = p; b = v; break;
default: r = v; g = p; b = q; break;
  }
  r = r * 255 + 0.5;
  g = g * 255 + 0.5;
  b = b * 255 + 0.5;
  if (r > 255) { r = 255; }
  if (g > 255) { g = 255; }
  if (b > 255) { b = 255; }
 }
 arr[0] = Math.round(r);
 arr[1] = Math.round(g);
 arr[2] = Math.round(b);
 return arr;
}

function makeHexFromRGB(r,g,b) {
 return "#" + decimal_to_hex(r) + decimal_to_hex(g) + decimal_to_hex(b);
}

function makeHexFromHSV(h,s,v) {
 var rgb_arr = HSVtoRGB(h,s,v);
 return makeHexFromRGB(rgb_arr[0], rgb_arr[1], rgb_arr[2]);
}

function makeRGBFromHex(hex) {
 var rgb_arr1 = new Array(3);
 if (HexIsValid(hex) == true) {
  rgb_arr1[0] = hex_to_decimal(hex.substring(1,3));
  rgb_arr1[1] = hex_to_decimal(hex.substring(3,5));
  rgb_arr1[2] = hex_to_decimal(hex.substring(5,7));
 }
 else { rgb_arr1[0] = rgb_arr1[1] = rgb_arr1[2] = 0; }
 return rgb_arr1;
}

function invertHex(hex) {
 var rgb_arr1 = new Array(3);
 var rgb_arr2 = new Array(3);
 rgb_arr1[0] = hex_to_decimal(hex.substring(1,3));
 rgb_arr1[1] = hex_to_decimal(hex.substring(3,5));
 rgb_arr1[2] = hex_to_decimal(hex.substring(5,7));
 rgb_arr2[0] = 255 - rgb_arr1[0];
 rgb_arr2[1] = 255 - rgb_arr1[1];
 rgb_arr2[2] = 255 - rgb_arr1[2];
 return makeHexFromRGB(rgb_arr2[0], rgb_arr2[1], rgb_arr2[2]);
}

function decimal_to_hex(d) {
 if (typeof d == 'undefined') { d = 0; }
 else if (isNaN(d)) { d = 0; }
 else if (d == '') { d = 0; }
 d = parseInt(d);
 if (d < 0) { d = 0; }
 var a1 = Math.floor(d/16);
 var a2 = d % 16;
 switch (a1) {
  case 10: a1 = 'A'; break;
  case 11: a1 = 'B'; break;
  case 12: a1 = 'C'; break;
  case 13: a1 = 'D'; break;
  case 14: a1 = 'E'; break;
  case 15: a1 = 'F'; break;
 }
 switch (a2) {
  case 10: a2 = 'A'; break;
  case 11: a2 = 'B'; break;
  case 12: a2 = 'C'; break;
  case 13: a2 = 'D'; break;
  case 14: a2 = 'E'; break;
  case 15: a2 = 'F'; break;
 }
 return a1.toString() + a2.toString();
}

function hex_to_decimal(h) {
 return parseInt(h,16);
}

/* ****************************************************************************************************************** */
