///////////////////////////////////////////////////////////////////////////////
// tk_odye_include.nss
//
// Created by: The Krit
// Date: 10/11/07
///////////////////////////////////////////////////////////////////////////////


///////////////////////////////////////////////////////////////////////////////
// Constants
///////////////////////////////////////////////////////////////////////////////


// The local variable that stores the current dye index on the dye.
const string DYE_INDEX = "DYE_INDEX";

// The local variable that stores the activated dye item.
const string DYE_ITEM = "TK_ODYE_ActivatedItem";

// The local variable that tracks which dye is being selected in the conversation.
const string DYE_SELECTION  = "TK_ODYE_Selection_Index";


///////////////////////////////////////////////////////////////////////////////
// Prototypes
///////////////////////////////////////////////////////////////////////////////


// Returns the name of the color(s) associated with index nColor.
string GetColorNames(int nColor);

// Renames oDye to reflect the selection of color nColor.
void SetDyeName(object oDye, int nColor);


///////////////////////////////////////////////////////////////////////////////
// Functions
///////////////////////////////////////////////////////////////////////////////


//----------------------------------------------------------
// SetDyeName
//
// Renames oDye to reflect the selection of color nColor.
//
void SetDyeName(object oDye, int nColor)
{
    SetName(oDye, GetName(oDye, TRUE) + " " + IntToString(nColor) +
            " (" + GetColorNames(nColor) + ")");
}


//----------------------------------------------------------
// GetColorNames
//
// Returns the name of the color(s) associated with index nColor.
//
string GetColorNames(int nColor)
{
    // This is a basic lookup function.
    // Nested switches for efficiency (and for ease of reading -- the outer
    // switch corresponds to the rows in the GUI).
    switch ( nColor / 16 )
    {
        case  0:
            switch ( nColor % 16 )
            {
                case  0: return "light tan / light grey";
                case  1: return "tan / grey";
                case  2: return "light brown / deep grey";
                case  3: return "brown / dark grey";
                case  4: return "pale auburn / light iron";
                case  5: return "light auburn / iron";
                case  6: return "auburn / deep iron";
                case  7: return "dark auburn / dark iron";
                case  8: return "light khaki / light gold";
                case  9: return "khaki / gold";
                case 10: return "deep khaki / deep gold";
                case 11: return "dark khaki / dark gold";
                case 12: return "light ruddy grey / light brass";
                case 13: return "ruddy grey / brass";
                case 14: return "deep ruddy grey / deep brass";
                case 15: return "dark ruddy grey / dark brass";
            }
            break;

        case  1:
            switch ( nColor % 16 )
            {
                case  0: return "light olive / light copper";
                case  1: return "olive / copper";
                case  2: return "deep olive / deep copper";
                case  3: return "dark olive / dark copper";
                case  4: return "light grey / light bronze";
                case  5: return "grey / bronze";
                case  6: return "deep grey / deep bronze";
                case  7: return "dark grey / dark bronze";
                case  8: return "light ultramarine / red";
                case  9: return "ultramarine / dark red";
                case 10: return "light bright blue / rose";
                case 11: return "bright blue / dark rose";
                case 12: return "aquamarine / purple";
                case 13: return "dark aquamarine / deep purple";
                case 14: return "light green / light purple";
                case 15: return "green / dark purple";
            }
            break;

        case  2:
            switch ( nColor % 16 )
            {
                case  0: return "yellow / bright blue";
                case  1: return "dark yellow / dark bright blue";
                case  2: return "light orange / indigo";
                case  3: return "orange / dark indigo";
                case  4: return "light red / cyan";
                case  5: return "red / deep cyan";
                case  6: return "light rose / light cyan";
                case  7: return "rose / dark cyan";
                case  8: return "light purple / green";
                case  9: return "purple / jade";
                case 10: return "light violet / light jade";
                case 11: return "violet / deep jade";
                case 12: return "white charcoal / olive";
                case 13: return "charcoal / dark olive";
                case 14: return "metallic ultramarine / grey-green";
                case 15: return "metallic bright blue / dark grey-green";
            }
            break;

        case  3:
            switch ( nColor % 16 )
            {
                case  0: return "metallic aquamarine / rainbow";
                case  1: return "metallic green / dark rainbow";
                case  2: return "metallic dark yellow / rust";
                case  3: return "metallic orange / aged rust";
                case  4: return "metallic red / dark rust";
                case  5: return "metallic rose / aged dark rust";
                case  6: return "metallic purple / aged iron";
                case  7: return "metallic violet / aged deep iron";
                case  8: return "metallic light grey";
                case  9: return "metallic dark grey";
                case 10: return "light gold";
                case 11: return "metallic light brown [light bronze]";
                case 12: return "'high-contrast' grey [iron]";
                case 13: return "mirrored";
                case 14: return "pure white";
                case 15: return "pure black";
            }
            break;

        case  4:
            switch ( nColor % 16 )
            {
                case  0: return "'high-contrast' crimson";
                case  1: return "'high-contrast' brown [deep bronze]";
                case  2: return "'high-contrast' dark yellow";
                case  3: return "'high-contrast' khaki";
                case  4: return "'high-contrast' green";
                case  5: return "'high-contrast' dark grey-green";
                case  6: return "'high-contrast' violet";
                case  7: return "'high-contrast' deep cool grey";
                case  8: return "'high-contrast' purple";
                case  9: return "'high-contrast' purple-grey";
                case 10: return "'high-contrast' tan [bronze]";
                case 11: return "'high-contrast' warm grey";
                case 12: return "'high-contrast' deep jade";
                case 13: return "'high-contrast' jade-grey";
                case 14: return "'high-contrast' blue";
                case 15: return "'high-contrast' slate grey";
            }
            break;

        case  5:
            switch ( nColor % 16 )
            {
                case  0: return "'high-contrast' olive drab";
                case  1: return "'high-contrast' verdant grey";
                case  2: return "'high-contrast' ultramarine";
                case  3: return "'high-contrast' cool grey";
                case  4: return "'high-contrast' tan-grey";
                case  5: return "'high-contrast' brown-grey";
                case  6: return "'high-contrast' ruddy grey";
                case  7: return "dull fading to pink";
                case  8: return "light scarlet";
                case  9: return "scarlet";
                case 10: return "deep scarlet";
                case 11: return "dark scarlet";
                case 12: return "light goldenrod";
                case 13: return "goldenrod";
                case 14: return "deep goldenrod";
                case 15: return "dark goldenrod";
            }
            break;

        case  6:
            switch ( nColor % 16 )
            {
                case  0: return "light crimson";
                case  1: return "crimson";
                case  2: return "deep crimson";
                case  3: return "dark crimson";
                case  4: return "light persimmon";
                case  5: return "persimmon";
                case  6: return "deep persimmon";
                case  7: return "dark persimmon";
                case  8: return "light dull green";
                case  9: return "dull green";
                case 10: return "deep dull green";
                case 11: return "dark dull green";
                case 12: return "light olive drab";
                case 13: return "olive drab";
                case 14: return "deep olive drab";
                case 15: return "dark olive drab";
            }
            break;

        case  7:
            switch ( nColor % 16 )
            {
                case  0: return "light verdant grey";
                case  1: return "verdant grey";
                case  2: return "deep verdant grey";
                case  3: return "dark verdant grey";
                case  4: return "light dull auburn";
                case  5: return "dull auburn";
                case  6: return "deep dull auburn";
                case  7: return "dark dull auburn";
                case  8: return "light dull khaki";
                case  9: return "dull khaki";
                case 10: return "deep dull khaki";
                case 11: return "dark dull khaki";
                case 12: return "light warm grey";
                case 13: return "warm grey";
                case 14: return "deep warm grey";
                case 15: return "dark warm grey";
            }
            break;

        case  8:
            switch ( nColor % 16 )
            {
                case  0: return "light dull tan";
                case  1: return "dull tan";
                case  2: return "light dull brown";
                case  3: return "dull brown";
                case  4: return "light cool grey";
                case  5: return "cool grey";
                case  6: return "deep cool grey";
                case  7: return "dark cool grey";
                case  8: return "light blue";
                case  9: return "blue";
                case 10: return "deep blue";
                case 11: return "dark blue";
                case 12: return "light turquoise";
                case 13: return "turquoise";
                case 14: return "deep turquoise";
                case 15: return "dark turquoise";
            }
            break;

        case  9:
            switch ( nColor % 16 )
            {
                case  0: return "light lavender";
                case  1: return "lavender";
                case  2: return "deep lavender";
                case  3: return "dark lavender";
                case  4: return "powder blue";
                case  5: return "dark powder blue";
                case  6: return "light aquamarine";
                case  7: return "deep aquamarine";
                case  8: return "light emerald";
                case  9: return "emerald";
                case 10: return "light pear";
                case 11: return "pear";
                case 12: return "light dull orange";
                case 13: return "dull orange";
                case 14: return "chestnut";
                case 15: return "deep chestnut";
            }
            break;

        case 10:
            switch ( nColor % 16 )
            {
                case  0: return "light red-violet";
                case  1: return "red-violet";
                case  2: return "light chestnut";
                case  3: return "orchid";
                case  4: return "light blue-grey";
                case  5: return "blue-grey";
                case  6: return "white";
                case  7: return "black";
                case  8: return "light grey-green";
                case  9: return "dark jade";
                case 10: return "dark violet";
                case 11: return "deep cooler grey";
                case 12: return "dark olive-green";
                case 13: return "dark ruddy brown";
                case 14: return "dull brown";
                case 15: return "speckled gold";
            }
    }//switch (nColor/16)

    // Unknown index.
    return "unknown";
}