function Part(name, ac, speed, handling, cost) {
    this.name     = name;
    this.ac       = ac;
    this.speed    = speed;
    this.handling = handling;
    this.cost     = cost;
}
var cart   = new Part("No cart",   0, 0, 0, 0);
var motor  = new Part("no motor",  0, 0, 0, 0);
var wheels = new Part("no wheels", 0, 0, 0, 0);
var shell  = new Part("no shell",  0, 0, 0, 0);

function calculate() {
    if(cart.name == "no cart" && motor.name == "no motor" && wheels.name == "no wheels" && shell.name == "no shell") {
        alert("Please select at least one part.");
        return;
    }
    if(document.getElementById("log").value) {document.getElementById("log").value += "\n"; }

    var newAc       = cart.ac + motor.ac + wheels.ac + shell.ac;
    var newSpeed    = cart.speed + motor.speed + wheels.speed + shell.speed;
    var newHandling = cart.handling + motor.handling + wheels.handling + shell.handling;
    var newCost     = cart.cost + motor.cost + wheels.cost + shell.cost;

    document.getElementById("cost").innerHTML  = newCost;
    document.getElementById("stats").innerHTML = newAc + " : " + newSpeed + " : " + newHandling;
    document.getElementById("log").value += (document.getElementById("stats").innerHTML + " = " + cart.name + ", " + motor.name + ", " + wheels.name + ", " + shell.name + " (" + newCost + " tokens)");
}
function resetCart() {
    cart   = new Part("no cart",   0, 0, 0, 0);
    motor  = new Part("no motor",  0, 0, 0, 0);
    wheels = new Part("no wheels", 0, 0, 0, 0);
    shell  = new Part("no shell",  0, 0, 0, 0);
    document.getElementById("cart").value = "no cart";
    document.getElementById("motor").value = "no motor";
    document.getElementById("wheels").value = "no wheels";
    document.getElementById("shell").value = "no shell";
    document.getElementById("cartstats").innerHTML   = "0 : 0 : 0";
    document.getElementById("motorstats").innerHTML  = "0 : 0 : 0";
    document.getElementById("wheelsstats").innerHTML = "0 : 0 : 0";
    document.getElementById("shellstats").innerHTML  = "0 : 0 : 0";
    document.getElementById("stats").innerHTML       = "0 : 0 : 0";
    document.getElementById("cost").innerHTML        = "0";
}

function changeCart() {
    var cartName = document.getElementById("cart").value;

    switch(cartName) {
        case "no cart"        : cart = new Part("No cart",         0,   0,  0,       0); break;
        case "Rusted Cart"    : cart = new Part("Rusted Cart",     2,  10,  2,     100); break;
        case "Basic Cart"     : cart = new Part("Basic Cart",      2,  12,  2,     250); break;
        case "T Cart"         : cart = new Part("T Cart",          3,  12,  2,     350); break;
        case "Walmart Cart"   : cart = new Part("Walmart Cart",    3,  12,  3,     500); break;
        case "Racing Cart"    : cart = new Part("Racing Cart",     4,  15,  4,    1000); break;
        case "Cart R-1000"    : cart = new Part("Cart R-1000",     5,  15,  5,    2000); break;
        case "Cart R-2000"    : cart = new Part("Cart R-2000",     3,  18,  7,    2750); break;
        case "Cart R-3000"    : cart = new Part("Cart R-3000",     8,  18,  3,    3500); break;
        case "Cart R-3001"    : cart = new Part("Cart R-3001",     3,  18,  8,    3500); break;
        case "Cart T-1000"    : cart = new Part("Cart T-1000",     6,  21,  6,    5000); break;
        case "Cart T-2000"    : cart = new Part("Cart T-2000",     9,  21,  4,    7500); break;
        case "Cart T-2001"    : cart = new Part("Cart T-2001",     4,  21,  9,    7500); break;
        case "Cart T-3000"    : cart = new Part("Cart T-3000",     7,  24,  7,   10000); break;
        case "Cart S-1000"    : cart = new Part("Cart S-1000",     7,  30,  7,   15000); break;
        case "Cart S-2000"    : cart = new Part("Cart S-2000",     8,  30,  8,   20000); break;
        case "Cart S-3000"    : cart = new Part("Cart S-3000",    12,  33,  5,   35000); break;
        case "Cart S-3001"    : cart = new Part("Cart S-3001",     5,  33, 12,   35000); break;
        case "Cart U-1000"    : cart = new Part("Cart U-1000",     9,  36,  9,   50000); break;
        case "Cart U-1001"    : cart = new Part("Cart U-1001",    13,  30,  7,   50000); break;
        case "Cart U-1002"    : cart = new Part("Cart U-1002",     7,  30, 13,   50000); break;
        case "Cart U-2000"    : cart = new Part("Cart U-2000",     9,  42,  9,   70000); break;
        case "Cart U-2001"    : cart = new Part("Cart U-2001",    14,  36,  6,   70000); break;
        case "Cart U-2002"    : cart = new Part("Cart U-2002",     6,  36, 14,   70000); break;
        case "Cart U-3000"    : cart = new Part("Cart U-3000",    10,  42, 10,  100000); break;
        case "Cart U-3001"    : cart = new Part("Cart U-3001",     6,  42, 14,  100000); break;
        case "Cart U-3002"    : cart = new Part("Cart U-3002",    14,  42,  6,  100000); break;
        case "Cart X-666"     : cart = new Part("Cart X-666",      6,  66,  6,  166666); break;
        case "Remedy-10"      : cart = new Part("Remedy-10",       9,  66,  9,  250000); break;
        case "Remedy-25a"     : cart = new Part("Remedy-25a",     12,  72,  8,  350000); break;
        case "Remedy-25b"     : cart = new Part("Remedy-25b",      8,  72, 12,  350000); break;
        case "Remedy-50a"     : cart = new Part("Remedy-50a",     11,  84, 11,  500000); break;
        case "Remedy-50b (1)" : cart = new Part("Remedy-50b (1)", 15,  78, 10,  500000); break;
        case "Remedy-50b (2)" : cart = new Part("Remedy-50b (2)", 10,  78, 15,  500000); break;
        case "Royality-2000"  : cart = new Part("Royality-2000",  14,  90, 14,  750000); break;
        case "Royality-2000a" : cart = new Part("Royality-2000a", 18,  99, 14, 1000000); break;
        case "Royality-2000b" : cart = new Part("Royality-2000b", 14,  99, 18, 1000000); break;
        case "Platinum"       : cart = new Part("Platinum",       18, 105, 18, 1500000); break;
        default               : return;
    }
    
    document.getElementById("cartstats").innerHTML = cart.ac + " : " + cart.speed + " : " + cart.handling;
}

function changeMotor() {
    var motorName = document.getElementById("motor").value;

    switch(motorName) {
        case "no motor"     : motor = new Part("no motor",      0,  0,  0,       0); break;
        case "Rusted Motor" : motor = new Part("Rusted Motor",  1,  0,  0,      50); break;
        case "Used Motor"   : motor = new Part("Used Motor",    2,  0,  0,     100); break;
        case "Motor C-10"   : motor = new Part("Motor C-10",    3,  0, -1,     200); break;
        case "Motor C-20"   : motor = new Part("Motor C-20",    4,  0, -1,     500); break;
        case "Motor C-35"   : motor = new Part("Motor C-35",    4,  0,  0,    1000); break;
        case "Motor C-50"   : motor = new Part("Motor C-50",    5,  0,  0,    2500); break;
        case "Motor D-25"   : motor = new Part("Motor D-25",    5,  3,  0,    5000); break;
        case "Motor D-50"   : motor = new Part("Motor D-50",    6,  3,  0,    7500); break;
        case "Motor D-75"   : motor = new Part("Motor D-75",    7,  3,  0,   10000); break;
        case "Motor E-10"   : motor = new Part("Motor E-10",    9,  3, -1,   15000); break;
        case "Motor E-25"   : motor = new Part("Motor E-25",    9,  3, -1,   20000); break;
        case "Motor E-40"   : motor = new Part("Motor E-40",    9,  6,  0,   25000); break;
        case "Motor E-50"   : motor = new Part("Motor E-50",   10,  6,  0,   35000); break;
        case "Motor E-75"   : motor = new Part("Motor E-75",   12,  6, -1,   50000); break;
        case "Motor F-10"   : motor = new Part("Motor F-10",   12,  6,  0,   65000); break;
        case "Motor F-25"   : motor = new Part("Motor F-25",   14,  3,  0,   80000); break;
        case "Motor F-50"   : motor = new Part("Motor F-50",   16,  0,  0,  100000); break;
        case "Motor X-666"  : motor = new Part("Motor X-666",  26, -6, -6,  166666); break;
        case "Motor G-10"   : motor = new Part("Motor G-10",   20,  0, -1,  200000); break;
        case "Motor G-20"   : motor = new Part("Motor G-20",   22,  0,  0,  250000); break;
        case "Motor G-50"   : motor = new Part("Motor G-50",   25,  0, -1,  300000); break;
        case "Motor GT-20"  : motor = new Part("Motor GT-20",  26,  0,  0,  400000); break;
        case "Motor GT-20a" : motor = new Part("Motor GT-20a", 28, -3, -1,  400000); break;
        case "Motor GT-20h" : motor = new Part("Motor GT-20h", 25, -3,  2,  400000); break;
        case "Motor GT-20s" : motor = new Part("Motor GT-20s", 25,  6, -1,  400000); break;
        case "Motor GT-50"  : motor = new Part("Motor GT-50",  28,  0,  0,  500000); break;
        case "Motor GT-50a" : motor = new Part("Motor GT-50a", 30, -3, -1,  500000); break;
        case "Motor GT-50h" : motor = new Part("Motor GT-50h", 27, -3,  2,  500000); break;
        case "Motor GT-50s" : motor = new Part("Motor GT-50s", 27,  6, -1,  500000); break;
        case "Motor XT-10"  : motor = new Part("Motor XT-10",  30,  0,  0,  650000); break;
        case "Motor XT-10a" : motor = new Part("Motor XT-10a", 32, -3, -1,  650000); break;
        case "Motor XT-10h" : motor = new Part("Motor XT-10h", 29, -3,  2,  650000); break;
        case "Motor XT-10s" : motor = new Part("Motor XT-10s", 29,  6, -1,  650000); break;
        case "Motor XT-20"  : motor = new Part("Motor XT-20",  32,  0,  0,  800000); break;
        case "Motor XT-20a" : motor = new Part("Motor XT-20a", 34, -3, -1,  800000); break;
        case "Motor XT-20h" : motor = new Part("Motor XT-20h", 31, -3,  2,  800000); break;
        case "Motor XT-20s" : motor = new Part("Motor XT-20s", 31,  6, -1,  800000); break;
        case "Motor XT-50"  : motor = new Part("Motor XT-50",  34,  0,  0, 1000000); break;
        case "Motor XT-50a" : motor = new Part("Motor XT-50a", 36, -3, -1, 1000000); break;
        case "Motor XT-50h" : motor = new Part("Motor XT-50h", 33, -3,  2, 1000000); break;
        case "Motor XT-50s" : motor = new Part("Motor XT-50s", 33,  6, -1, 1000000); break;

        //Old parts; some were renamed, others removed
        case "_Motor GT-20a" : motor = new Part("Motor GT-20a (old)", 28, -3, -1, 400000); break;
        case "_Motor GT-20b" : motor = new Part("Motor GT-20b (old)", 26,  0,  0, 400000); break;
        case "_Motor GT-50a" : motor = new Part("Motor GT-50a (old)", 28,  0,  0, 500000); break;
        case "_Motor GT-50b" : motor = new Part("Motor GT-50b (old)", 28,  6,  0, 500000); break;
        case "_Motor XT-10a" : motor = new Part("Motor XT-10a (old)", 26,  6,  2, 650000); break;
        case "_Motor XT-10b" : motor = new Part("Motor XT-10b (old)", 30,  6, -2, 650000); break;
        default              : return;
    }

    document.getElementById("motorstats").innerHTML = motor.ac + " : " + motor.speed + " : " + motor.handling;
}

function changeWheels() {
    var wheelsName = document.getElementById("wheels").value;

    switch(wheelsName) {
        case "no wheels"     : wheels = new Part("no wheels",      0,  0,  0,       0); break;
        case "Rusted Wheels" : wheels = new Part("Rusted Wheels",  0,  0,  1,      50); break;
        case "Used Wheels"   : wheels = new Part("Used Wheels",    0,  0,  2,     100); break;
        case "Wheels C-10"   : wheels = new Part("Wheels C-10",    0, -3,  3,     200); break;
        case "Wheels C-20"   : wheels = new Part("Wheels C-20",    0, -3,  4,     500); break;
        case "Wheels C-35"   : wheels = new Part("Wheels C-35",    0,  0,  4,    1000); break;
        case "Wheels C-50"   : wheels = new Part("Wheels C-50",    0,  0,  5,    2500); break;
        case "Wheels D-25"   : wheels = new Part("Wheels D-25",    1,  0,  5,    5000); break;
        case "Wheels D-50"   : wheels = new Part("Wheels D-50",    1,  0,  6,    7500); break;
        case "Wheels D-75"   : wheels = new Part("Wheels D-75",    1,  0,  7,   10000); break;
        case "Wheels E-10"   : wheels = new Part("Wheels E-10",    1, -3,  9,   15000); break;
        case "Wheels E-25"   : wheels = new Part("Wheels E-25",    1,  0,  9,   20000); break;
        case "Wheels E-40"   : wheels = new Part("Wheels E-40",    2,  0,  9,   25000); break;
        case "Wheels E-50"   : wheels = new Part("Wheels E-50",    2,  0, 10,   35000); break;
        case "Wheels E-75"   : wheels = new Part("Wheels E-75",    2, -3, 12,   50000); break;
        case "Wheels F-10"   : wheels = new Part("Wheels F-10",    2,  0, 12,   65000); break;
        case "Wheels F-25"   : wheels = new Part("Wheels F-25",    1,  0, 14,   80000); break;
        case "Wheels F-50"   : wheels = new Part("Wheels F-50",    0,  0, 16,  100000); break;
        case "Wheels X-666"  : wheels = new Part("Wheels X-666",  -6, -6, 26,  166666); break;
        case "Wheels G-10"   : wheels = new Part("Wheels G-10",    0, -3, 20,  200000); break;
        case "Wheels G-20"   : wheels = new Part("Wheels G-20",    0,  0, 22,  250000); break;
        case "Wheels G-50"   : wheels = new Part("Wheels G-50",    0, -3, 25,  300000); break;
        case "Wheels GT-20"  : wheels = new Part("Wheels GT-20",   0,  0, 26,  400000); break;
        case "Wheels GT-20a" : wheels = new Part("Wheels GT-20a",  2, -3, 25,  400000); break;
        case "Wheels GT-20h" : wheels = new Part("Wheels GT-20h", -1, -3, 28,  400000); break;
        case "Wheels GT-20s" : wheels = new Part("Wheels GT-20s", -1,  6, 25,  400000); break;
        case "Wheels GT-50"  : wheels = new Part("Wheels GT-50",   0,  0, 28,  500000); break;
        case "Wheels GT-50a" : wheels = new Part("Wheels GT-50a",  2, -3, 27,  500000); break;
        case "Wheels GT-50h" : wheels = new Part("Wheels GT-50h", -1, -3, 30,  500000); break;
        case "Wheels GT-50s" : wheels = new Part("Wheels GT-50s", -1, -3, 27,  500000); break;
        case "Wheels XT-10"  : wheels = new Part("Wheels XT-10",   0,  0, 30,  650000); break;
        case "Wheels XT-10a" : wheels = new Part("Wheels XT-10a",  2, -3, 29,  650000); break;
        case "Wheels XT-10h" : wheels = new Part("Wheels XT-10h", -1, -3, 32,  650000); break;
        case "Wheels XT-10s" : wheels = new Part("Wheels XT-10s", -1,  6, 29,  650000); break;
        case "Wheels XT-20"  : wheels = new Part("Wheels XT-20",   0,  0, 32,  800000); break;
        case "Wheels XT-20a" : wheels = new Part("Wheels XT-20a",  2, -3, 31,  800000); break;
        case "Wheels XT-20h" : wheels = new Part("Wheels XT-20h", -1, -3, 34,  800000); break;
        case "Wheels XT-20s" : wheels = new Part("Wheels XT-20s", -1,  6, 31,  800000); break;
        case "Wheels XT-50"  : wheels = new Part("Wheels XT-50",   0,  0, 34, 1000000); break;
        case "Wheels XT-50a" : wheels = new Part("Wheels XT-50a",  2, -3, 33, 1000000); break;
        case "Wheels XT-50h" : wheels = new Part("Wheels XT-50h", -1, -3, 36, 1000000); break;
        case "Wheels XT-50s" : wheels = new Part("Wheels XT-50s", -1,  6, 33, 1000000); break;

        //Old parts; some were renamed, others removed
        case "_Wheels GT-20a" : wheels = new Part("Wheels GT-20a (old)", -1, -3, 28, 400000); break;
        case "_Wheels GT-20b" : wheels = new Part("Wheels GT-20b (old)",  0,  0, 26, 400000); break;
        case "_Wheels GT-50a" : wheels = new Part("Wheels GT-50a (old)",  0,  0, 28, 500000); break;
        case "_Wheels GT-50b" : wheels = new Part("Wheels GT-50b (old)",  2,  0, 26, 500000); break;
        case "_Wheels XT-10a" : wheels = new Part("Wheels XT-10a (old)",  2,  6, 26, 650000); break;
        case "_Wheels XT-10b" : wheels = new Part("Wheels XT-10b (old)",  2, -6, 30, 650000); break;

        default              : return;
    }

    document.getElementById("wheelsstats").innerHTML = wheels.ac + " : " + wheels.speed + " : " + wheels.handling;
}

function changeShell() {
    var shellName = document.getElementById("shell").value;

    switch(shellName) {
        case "no shell"     : shell = new Part("no shell",      0,   0,  0,       0); break;
        case "Rusted Shell" : shell = new Part("Rusted Shell",  0,   3,  0,      50); break;
        case "Used Shell"   : shell = new Part("Used Shell",    0,   6,  0,     100); break;
        case "Shell C-10"   : shell = new Part("Shell C-10",   -1,   9,  0,     200); break;
        case "Shell C-20"   : shell = new Part("Shell C-20",   -1,  12,  0,     500); break;
        case "Shell C-35"   : shell = new Part("Shell C-35",    0,  12,  0,    1000); break;
        case "Shell C-50"   : shell = new Part("Shell C-50",    0,  15,  0,    2500); break;
        case "Shell D-25"   : shell = new Part("Shell D-25",    0,  15,  1,    5000); break;
        case "Shell D-50"   : shell = new Part("Shell D-50",    0,  18,  1,    7500); break;
        case "Shell D-75"   : shell = new Part("Shell D-75",    0,  21,  1,   10000); break;
        case "Shell E-10"   : shell = new Part("Shell E-10",   -1,  27,  1,   15000); break;
        case "Shell E-25"   : shell = new Part("Shell E-25",    0,  27,  1,   20000); break;
        case "Shell E-40"   : shell = new Part("Shell E-40",    0,  27,  2,   25000); break;
        case "Shell E-50"   : shell = new Part("Shell E-50",    0,  30,  2,   35000); break;
        case "Shell E-75"   : shell = new Part("Shell E-75",   -1,  36,  2,   50000); break;
        case "Shell F-10"   : shell = new Part("Shell F-10",    0,  36,  2,   65000); break;
        case "Shell F-25"   : shell = new Part("Shell F-25",    0,  42,  1,   80000); break;
        case "Shell F-50"   : shell = new Part("Shell F-50",    0,  48,  0,  100000); break;
        case "Shell X-666"  : shell = new Part("Shell X-666",  -6,  86, -6,  166666); break;
        case "Shell G-10"   : shell = new Part("Shell G-10",   -1,  60,  0,  200000); break;
        case "Shell G-20"   : shell = new Part("Shell G-20",    0,  66,  0,  250000); break;
        case "Shell G-50"   : shell = new Part("Shell G-50",   -1,  75,  0,  300000); break;
        case "Shell GT-20"  : shell = new Part("Shell GT-20",   0,  78,  0,  400000); break;
        case "Shell GT-20a" : shell = new Part("Shell GT-20a",  2,  75, -1,  400000); break;
        case "Shell GT-20h" : shell = new Part("Shell GT-20h", -1,  75,  2,  400000); break;
        case "Shell GT-20s" : shell = new Part("Shell GT-20s", -1,  84, -1,  400000); break;
        case "Shell GT-50"  : shell = new Part("Shell GT-50",   0,  84,  0,  500000); break;
        case "Shell GT-50a" : shell = new Part("Shell GT-50a",  2,  81, -1,  500000); break;
        case "Shell GT-50h" : shell = new Part("Shell GT-50h", -1,  81,  2,  500000); break;
        case "Shell GT-50s" : shell = new Part("Shell GT-50s", -1,  90, -1,  500000); break;
        case "Shell XT-10"  : shell = new Part("Shell XT-10",   0,  90,  0,  650000); break;
        case "Shell XT-10a" : shell = new Part("Shell XT-10a",  2,  87, -1,  650000); break;
        case "Shell XT-10h" : shell = new Part("Shell XT-10h", -1,  87,  2,  650000); break;
        case "Shell XT-10s" : shell = new Part("Shell XT-10s", -1,  96, -1,  650000); break;
        case "Shell XT-20"  : shell = new Part("Shell XT-20",   0,  96,  0,  800000); break;
        case "Shell XT-20a" : shell = new Part("Shell XT-20a",  2,  93, -1,  800000); break;
        case "Shell XT-20h" : shell = new Part("Shell XT-20h", -1,  93,  2,  800000); break;
        case "Shell XT-20s" : shell = new Part("Shell XT-20s", -1, 102, -1,  800000); break;
        case "Shell XT-50"  : shell = new Part("Shell XT-50",   0, 102,  0, 1000000); break;
        case "Shell XT-50a" : shell = new Part("Shell XT-50a",  2,  99, -1, 1000000); break;
        case "Shell XT-50h" : shell = new Part("Shell XT-50h", -1,  99,  2, 1000000); break;
        case "Shell XT-50s" : shell = new Part("Shell XT-50s", -1, 108, -1, 1000000); break;

        //Old parts; some were renamed, others removed
        case "_Shell GT-20a" : shell = new Part("Shell GT-20a (old)", -1, 84, -1, 400000); break;
        case "_Shell GT-20b" : shell = new Part("Shell GT-20b (old)",  0, 78,  0, 400000); break;
        case "_Shell GT-50a" : shell = new Part("Shell GT-50a (old)",  0, 84,  0, 500000); break;
        case "_Shell GT-50b" : shell = new Part("Shell GT-50b (old)",  1, 78,  1, 500000); break;
        case "_Shell XT-10a" : shell = new Part("Shell XT-10a (old)",  2, 78,  2, 650000); break;
        case "_Shell XT-10b" : shell = new Part("Shell XT-10b (old)",  2, 90, -2, 650000); break;

        default             : return;
    }

    document.getElementById("shellstats").innerHTML = shell.ac + " : " + shell.speed + " : " + shell.handling;
}