/************************************************************************
Blocks Module
=============
You hate having to lookup [Data Values][dv] when you use ScriptCraft's Drone() functions. So do I.
So I created this blocks object which is a helper object for use in construction.

Examples
--------

    box( blocks.oak ); // creates a single oak wood block
    box( blocks.sand, 3, 2, 1 ); // creates a block of sand 3 wide x 2 high x 1 long
    box( blocks.wool.green, 2 ); // creates a block of green wool 2 blocks wide

Color aliased properties that were a direct descendant of the blocks object are no longer used to avoid confusion with carpet and stained clay blocks. In addition, there's a convenience array `blocks.rainbow` which is an array of the 7 colors of the rainbow (or closest approximations).

***/
var blocks = {
    air: 0,
    stone: 1,
    grass: 2,
    dirt: 3,
    cobblestone: 4,
    oak: 5,
    spruce: '5:1',
    birch: '5:2',
    jungle: '5:3',
    sapling: {
        oak: 6,
        spruce: '6:1',
        birch: '62:2',
        jungle: '6:3'
    },
    bedrock: 7,
    water: 8,
    water_still: 9,
    lava: 10,
    lava_still: 11,
    sand: 12,
    gravel: 13,
    gold_ore: 14,
    iron_ore: 15,
    coal_ore: 16,
    wood: 17,
    leaves: 18,
    sponge: 19,
    glass: 20,
    lapis_lazuli_ore: 21,
    lapis_lazuli_block: 22,
    dispenser: 23,
    sandstone: 24,
    note: 25,
    bed: 26,
    powered_rail: 27,
    detector_rail: 28,
    sticky_piston: 29,
    cobweb: 30,
    grass_tall: 31,
    dead_bush: 32,
    piston: 33,
    piston_extn: 34,
    wool: {
      white: 35 // All other colors added below
    },
    dandelion: 37,
    flower_yellow: 37,
    rose: 38,
    flower_red: 38,
    mushroom_brown: 39,
    mushroom_red: 40,
    gold: 41,
    iron: 42,
    tnt: 46,
    bookshelf: 47,
    moss_stone: 48,
    obsidian: 49,
    torch: 50,
    fire: 51,
    monster_spawner: 52,
    stairs: {
        oak: 53,
        cobblestone: 67,
        brick: 108,
        stone: 109,
        nether: 114,
        sandstone: 128,
        spruce: 134,
        birch: 135,
        jungle: 136,
        quartz: 156
    },
    chest: 54,
    redstone_wire: 55,
    diamond_ore: 56,
    diamond: 57,
    crafting_table: 58,
    wheat_seeds: 59,
    farmland: 60,
    furnace: 61,
    furnace_burning: 62,
    sign_post: 63,
    door_wood: 64,
    ladder: 65,
    rail: 66,
    sign: 68,
    lever: 69,
    pressure_plate_stone: 70,
    door_iron: 71,
    pressure_plate_wood: 72,
    redstone_ore: 73,
    redstone_ore_glowing: 74,
    torch_redstone: 75,
    torch_redstone_active: 76,
    stone_button: 77,
    ice: 79,
    snow: 80,
    cactus: 81,
    clay: 82,
    sugar_cane: 83,
    jukebox: 84,
    fence: 85,
    pumpkin: 86,
    netherrack: 87,
    soulsand: 88,
    glowstone: 89,
    netherportal: 90,
    jackolantern: 91,
    cake: 92,
    redstone_repeater: 93,
    redeston_repeater_active: 94,
    chest_locked: 95,
    trapdoor: 96,
    monster_egg: 97,
    brick: {
        stone: 98,
        mossy: '98:1',
        cracked: '98:2',
        chiseled: '98:3',
        red: 45
    },
    mushroom_brown_huge: 99,
    mushroom_red_huge: 100,
    iron_bars: 101,
    glass_pane: 102,
    melon: 103,
    pumpkin_stem: 104,
    melon_stem: 105,
    vines: 106,
    fence_gate: 107,
    mycelium: 110,
    lily_pad: 111,
    nether: 112,
    nether_fence: 113,
    netherwart: 115,
    table_enchantment: 116,
    brewing_stand: 117,
    cauldron: 118,
    endportal: 119,
    endportal_frame: 120,
    endstone: 121,
    dragon_egg: 122,
    redstone_lamp: 123,
    redstone_lamp_active: 124,
    slab: {
        snow: 78,
        stone: 44,
        sandstone: '44:1',
        wooden: '44:2',
        cobblestone: '44:3',
        brick: '44:4',
        stonebrick: '44:5',
        netherbrick:'44:6',
        quartz: '44:7',
        oak: 126,
        spruce: '126:1',
        birch: '126:2',
        jungle: '126:3',
        upper: {
            stone: '44:8',
            sandstone: '44:9',
            wooden: '44:10',
            cobblestone: '44:11',
            brick: '44:12',
            stonebrick: '44:13',
            netherbrick:'44:14',
            quartz: '44:15',
            oak: '126:8',
            spruce: '126:9',
            birch: '126:10',
            jungle: '126:11',
        }
    },
    cocoa: 127,
    emerald_ore: 129,
    enderchest: 130,
    tripwire_hook: 131,
    tripwire: 132,
    emerald: 133,
    command: 137,
    beacon: 138,
    cobblestone_wall: 139,
    flowerpot: 140,
    carrots: 141,
    potatoes: 142,
    button_wood: 143,
    mobhead: 144,
    anvil: 145,
    chest_trapped: 146,
    pressure_plate_weighted_light: 147,
    pressure_plate_weighted_heavy: 148,
    redstone_comparator: 149,
    redstone_comparator_active: 150,
    daylight_sensor: 151,
    redstone: 152,
    netherquartzore: 153,
    hopper: 154,
    quartz: 155,
    rail_activator: 157,
    dropper: 158,
    stained_clay: {
      white: 159 // All other colors added below
    },
    hay: 170,
    carpet: {
      white: 171 // All other colors added below
    },
    hardened_clay: 172,
    coal_block: 173
};

(function() {
  // Add all available colors to colorized block collections

  var colors = {
    orange: ':1',
    magenta: ':2',
    lightblue: ':3',
    yellow: ':4',
    lime: ':5',
    pink: ':6',
    gray: ':7',
    lightgray: ':8',
    cyan: ':9',
    purple: ':10',
    blue: ':11',
    brown: ':12',
    green: ':13',
    red: ':14',
    black: ':15'
  };
  var colorized_blocks = ["wool", "stained_clay", "carpet"];

  for (var i = 0, len = colorized_blocks.length; i < len; i++) {
    var block = colorized_blocks[i],
        data_value = blocks[block].white;

    for (var color in colors) {
      blocks[block][color] = data_value + colors[color];
    }
  };

  /*
    rainbow colors - a convenience
    Color aliased properties that were a direct descendant of the blocks
    object are no longer used to avoid confusion with carpet and stained
    clay blocks.
  */
  blocks.rainbow = [blocks.wool.red,
                    blocks.wool.orange,
                    blocks.wool.yellow,
                    blocks.wool.lime,
                    blocks.wool.lightblue,
                    blocks.wool.blue,
                    blocks.wool.purple];
})();
