var retrieve_ingredients_http = false;
var retrieve_instructions_http = false;
var retrieve_greensteel_http = false;
var retrieve_effects_http = false;
var retrieve_bonus_effects_http = false;
var retrieve_bonus_effects2_http = false;
var bonus3EffectArray
var bonus2EffectArray
var effectsArray

function resetForm() {
    var form = document.forms["craftForm"];
    form.elements["greenSteel"].selectedIndex = 0;
    form.elements["tier2BonusEffect"].selectedIndex = 0;
    form.elements["tier3BonusEffect"].selectedIndex = 0;
    form.elements["tier1Effect"].selectedIndex = 0;
    form.elements["tier2Effect"].selectedIndex = 0;
    form.elements["tier3_1Effect"].selectedIndex = 0;
    form.elements["tier3_2Effect"].selectedIndex = 0;

    updateGreensteelList();
    updateEffectLists(1);
    updateBonusEffects();
    doUpdate();
}

function updateMissingEffects() {
    var form = document.forms["craftForm"];
    var tier1, tier2, tier3_1, tier3_2;
    var bonus1, bonus2;
    var base;
    var tmpMissing = "";

    base = form.elements["greenSteel"].options[form.elements["greenSteel"].selectedIndex].text;
    tier1 = form.elements["tier1Effect"].options[form.elements["tier1Effect"].selectedIndex].text;
    tier2 = form.elements["tier2Effect"].options[form.elements["tier2Effect"].selectedIndex].text;
    tier3_1 = form.elements["tier3_1Effect"].options[form.elements["tier3_1Effect"].selectedIndex].text;
    tier3_2 = form.elements["tier3_2Effect"].options[form.elements["tier3_2Effect"].selectedIndex].text;
    bonus1 = form.elements["tier2BonusEffect"].options[form.elements["tier2BonusEffect"].selectedIndex].text;
    bonus2 = form.elements["tier3BonusEffect"].options[form.elements["tier3BonusEffect"].selectedIndex].text;

    tmpMissing += base == "Undecided" ? "You must select a Greensteel Item, " : "";
    tmpMissing += tier1 == "Undecided" ? "You must select a Tier 1 Effect, " : "";
    tmpMissing += tier2 == "Undecided" ? "You must select a Tier 2 Effect, " : "";
    tmpMissing += tier3_1 == "Undecided" ? "You must select a Tier 3 Effect, " : "";
    tmpMissing += tier3_2 == "Undecided" ? "You must select a Tier 3 Second Shard, " : "";
    try {
        tmpMissing = tmpMissing.substr(0, tmpMissing.length - 2);
    }
    catch (e) { }
    infoSpot = document.getElementById("missingOptions");
    infoSpot.innerHTML = tmpMissing;
}

function doUpdate() {
    var form = document.forms["craftForm"];
    updateIngredients();
    updateInstructions();
    updateMissingEffects();
    displayEffect(2);
    displayEffect(3);
}

function updateEffectLists(which) {
    var form = document.forms["craftForm"];
    var base = 0;
    var tier1 = 0;
    var tier2 = 0;
    var tier3 = 0;
    var tier3 = 4;
    var bonus1 = 0;
    var bonus2 = 0;
    var url, request;

    retrieve_effects_http = false;
    retrieve_effects_http = xml_http_request_object();

    base = form.elements["greenSteel"].options[form.elements["greenSteel"].selectedIndex].value;
    bonus1 = form.elements["tier2BonusEffect"].options[form.elements["tier2BonusEffect"].selectedIndex].value;
    bonus2 = form.elements["tier3BonusEffect"].options[form.elements["tier3BonusEffect"].selectedIndex].value;
    tier1 = form.elements["tier1Effect"].options[form.elements["tier1Effect"].selectedIndex].value;
    tier2 = form.elements["tier2Effect"].options[form.elements["tier2Effect"].selectedIndex].value;
    tier3 = form.elements["tier3_1Effect"].options[form.elements["tier3_1Effect"].selectedIndex].value;
    tier4 = form.elements["tier3_2Effect"].options[form.elements["tier3_2Effect"].selectedIndex].value;

    url = "./load_effects.php";
    request = "base=" + base;
    request += "&tier1=" + tier1;
    request += "&tier2=" + tier2;
    request += "&tier3=" + tier3;
    request += "&tier4=" + tier4;
    request += "&bonus1=" + bonus1;
    request += "&bonus2=" + bonus2;

    retrieve_effects_http.onreadystatechange = processUpdateEffectLists;
    retrieve_effects_http.open('POST', url, true);
    retrieve_effects_http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    retrieve_effects_http.send(request);
}

function processUpdateEffectLists() {
    if (retrieve_effects_http.readyState == 4) {
        if (retrieve_effects_http.status == 200) {
            var tmpSpan = "";
            var ingDiv = document.getElementById("effect_list1");
            var returnXML = retrieve_effects_http.responseXML.documentElement;
            var i = 0;
            var form = document.forms["craftForm"];
            var tier1, tier2, tier3_1, tier3_2;
            var bonus1, bonus2;
            tier1 = form.elements["tier1Effect"].options[form.elements["tier1Effect"].selectedIndex].text;
            tier2 = form.elements["tier2Effect"].options[form.elements["tier2Effect"].selectedIndex].text;
            tier3_1 = form.elements["tier3_1Effect"].options[form.elements["tier3_1Effect"].selectedIndex].text;
            tier3_2 = form.elements["tier3_2Effect"].options[form.elements["tier3_2Effect"].selectedIndex].text;
            bonus1 = form.elements["tier2BonusEffect"].options[form.elements["tier2BonusEffect"].selectedIndex].text;
            bonus2 = form.elements["tier3BonusEffect"].options[form.elements["tier3BonusEffect"].selectedIndex].text;

            var effects = returnXML.getElementsByTagName("effect");

            tmpSpan = "<select name=\"tier1Effect\" onchange=\"javascript:updateGreensteelList();updateBonusEffects();updateEffectLists(1);doUpdate();\" style=\"width:450px;\"><option value=\"0\">Undecided</option>";
            for (i = 0; i < effects.length && effects[i].attributes.getNamedItem("tier").value == 1; i++) {
                tmpSpan += "<option value=\"" + effects[i].attributes.getNamedItem("id").value + "\">" + effects[i].attributes.getNamedItem("description").value + "</option>";
            }

            tmpSpan += "</select>";
            ingDiv.innerHTML = tmpSpan;

            ingDiv = document.getElementById("effect_list2");

            tmpSpan = "<select name=\"tier2Effect\" onchange=\"javascript:updateGreensteelList();updateBonusEffects();updateEffectLists(1);doUpdate();\" style=\"width:450px;\"><option value=\"0\">Undecided</option>";
            for (; i < effects.length && effects[i].attributes.getNamedItem("tier").value == 2; i++) {
                tmpSpan += "<option value=\"" + effects[i].attributes.getNamedItem("id").value + "\">" + effects[i].attributes.getNamedItem("description").value + "</option>";
            }

            tmpSpan += "</select>";
            ingDiv.innerHTML = tmpSpan;

            ingDiv = document.getElementById("effect_list3_1");

            tmpSpan = "<select name=\"tier3_1Effect\" onchange=\"javascript:updateGreensteelList();updateBonusEffects();updateEffectLists(1);doUpdate();\" style=\"width:450px;\"><option value=\"0\">Undecided</option>";
            for (; i < effects.length && effects[i].attributes.getNamedItem("tier").value == 3; i++) {
                tmpSpan += "<option value=\"" + effects[i].attributes.getNamedItem("id").value + "\">" + effects[i].attributes.getNamedItem("description").value + "</option>";
            }

            tmpSpan += "</select>";
            ingDiv.innerHTML = tmpSpan;

            ingDiv = document.getElementById("effect_list3_2");

            if ((i + 1) < effects.length) {
                tmpSpan = "<select name=\"tier3_2Effect\" onchange=\"javascript:updateGreensteelList();updateBonusEffects();updateEffectLists(1);doUpdate();\" style=\"width:450px;\"><option value=\"0\">Undecided</option>";
                for (; i < effects.length && effects[i].attributes.getNamedItem("tier").value == 4; i++) {
                    tmpSpan += "<option value=\"" + effects[i].attributes.getNamedItem("id").value + "\">" + effects[i].attributes.getNamedItem("description").value + "</option>";
                }
            }
            else {
                tmpSpan = "<select name=\"tier3_2Effect\" onchange=\"javascript:updateGreensteelList();updateBonusEffects();updateEffectLists(1);doUpdate();\" style=\"width:450px;\" disabled=\"disabled\"><option value=\"0\">None</option>";
            }


            tmpSpan += "</select>";
            ingDiv.innerHTML = tmpSpan;

            for (i = 0; i < form.elements["tier1Effect"].length; i++) {
                if (form.elements["tier1Effect"].options[i].text == tier1) {
                    form.elements["tier1Effect"].selectedIndex = i;
                    i = 999;
                }
            }

            for (i = 0; i < form.elements["tier2Effect"].length; i++) {
                if (form.elements["tier2Effect"].options[i].text == tier2) {
                    form.elements["tier2Effect"].selectedIndex = i;
                    i = 999;
                }
            }

            for (i = 0; i < form.elements["tier3_1Effect"].length; i++) {
                if (form.elements["tier3_1Effect"].options[i].text == tier3_1) {
                    form.elements["tier3_1Effect"].selectedIndex = i;
                    i = 999;
                }
            }

            for (i = 0; i < form.elements["tier3_2Effect"].length; i++) {
                if (form.elements["tier3_2Effect"].options[i].text == tier3_2) {
                    form.elements["tier3_2Effect"].selectedIndex = i;
                    i = 999;
                }
            }

            for (i = 0; i < form.elements["tier2BonusEffect"].length; i++) {
                if (form.elements["tier2BonusEffect"].options[i].text == bonus1) {
                    form.elements["tier2BonusEffect"].selectedIndex = i;
                    i = 999;
                }
            }

            for (i = 0; i < form.elements["tier3BonusEffect"].length; i++) {
                if (form.elements["tier3BonusEffect"].options[i].text == bonus2) {
                    form.elements["tier3BonusEffect"].selectedIndex = i;
                    i = 999;
                }
            }
        }
        retrieve_effects_http = false;

        if (tier3_1 != "Undecided" && bonus2 != "Undecided") {
            if (form.elements["tier3_2Effect"].length == 2) {
                form.elements["tier3_2Effect"].selectedIndex = 1;
                doUpdate();
            }
        }

        updateMissingEffects();
        doUpdate();
    }
}
function updateTier2Bonus() {
    var form = document.forms["craftForm"];
    var bonus = 0;
    bonus = form.elements["tier3BonusEffect"].options[form.elements["tier3BonusEffect"].selectedIndex].value;

    if (bonus == 0) {
        updateBonusEffects();
        return;
    }

    retrieve_bonus_effects2_http = false;
    retrieve_bonus_effects2_http = xml_http_request_object();

    url = "./load_tier2_bonus_effects.php";
    request = "bonus=" + bonus;

    retrieve_bonus_effects2_http.onreadystatechange = processUpdateTier2BonusEffects;
    retrieve_bonus_effects2_http.open('POST', url, true);
    retrieve_bonus_effects2_http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    retrieve_bonus_effects2_http.send(request);
}

function processUpdateTier2BonusEffects() {
    if (retrieve_bonus_effects2_http.readyState == 4) {
        if (retrieve_bonus_effects2_http.status == 200) {
            var tmpSpan = "";
            var ingDiv = document.getElementById("bonus_effect_list2");
            var returnXML = retrieve_bonus_effects2_http.responseXML.documentElement;

            var effects = returnXML.getElementsByTagName("effect")

            var tmpHeader = "<select name=\"tier2BonusEffect\" onchange=\"javascript:updateEffectLists(2);doUpdate();displayEffect(2);\" style=\"width:450px;\"><option value=\"0\">Undecided</option>";
            var tmpFill = "";

            bonus2EffectArray = new Array();
            for (i = 0; i < effects.length && effects[i].attributes.getNamedItem("tier").value == 2; i++) {
                tmpFill += "<option value=\"" + effects[i].attributes.getNamedItem("id").value + "\">" + effects[i].attributes.getNamedItem("name").value + "</option>";
                bonus2EffectArray[effects[i].attributes.getNamedItem("id").value] = effects[i].attributes.getNamedItem("description").value;
            }

            if (i == 1) {
                tmpHeader = "<select name=\"tier2BonusEffect\" onchange=\"javascript:updateEffectLists(2);doUpdate();displayEffect(2);\" style=\"width:450px;\">";
            }

            tmpSpan = tmpHeader + tmpFill + "</select>";
            ingDiv.innerHTML = tmpSpan;

            updateEffectLists(1);
            updateGreensteelList();
            displayEffect(2);
            //updateBonusEffects();    
        }
        retrieve_bonus_effects2_http = false;
    }
}

function displayEffect(which) {
    var form = document.forms["craftForm"];
    var infoSpot
    var bonus;

    if (which == 2) {
        bonus = form.elements["tier2BonusEffect"].options[form.elements["tier2BonusEffect"].selectedIndex].value;
        infoSpot = document.getElementById("tier2BonusDesc");
        if (bonus != 0)
            infoSpot.innerHTML = bonus2EffectArray[bonus];
        else
            infoSpot.innerHTML = "";
    }
    else if (which == 3) {
        bonus = form.elements["tier3BonusEffect"].options[form.elements["tier3BonusEffect"].selectedIndex].value;
        infoSpot = document.getElementById("tier3BonusDesc");
        if (bonus != 0)
            infoSpot.innerHTML = bonus3EffectArray[bonus];
        else
            infoSpot.innerHTML = "";
    }


}

function updateBonusEffects() {
    var form = document.forms["craftForm"];
    var base;
    var tier1, tier2, tier3;
    var url, request;

    retrieve_bonus_effects_http = false;
    retrieve_bonus_effects_http = xml_http_request_object();

    base = form.elements["greenSteel"].options[form.elements["greenSteel"].selectedIndex].value;
    tier1 = form.elements["tier1Effect"].options[form.elements["tier1Effect"].selectedIndex].value;
    tier2 = form.elements["tier2Effect"].options[form.elements["tier2Effect"].selectedIndex].value;
    tier3 = form.elements["tier3_1Effect"].options[form.elements["tier3_1Effect"].selectedIndex].value;

    url = "./load_bonus_effects.php";
    request = "tier1=" + tier1;
    request += "&tier2=" + tier2;
    request += "&tier3=" + tier3;
    request += "&base=" + base;

    retrieve_bonus_effects_http.onreadystatechange = processUpdateBonusEffects;
    retrieve_bonus_effects_http.open('POST', url, true);
    retrieve_bonus_effects_http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    retrieve_bonus_effects_http.send(request);
}

function processUpdateBonusEffects() {
    if (retrieve_bonus_effects_http.readyState == 4) {
        if (retrieve_bonus_effects_http.status == 200) {
            var tmpSpan = "";
            var ingDiv = document.getElementById("bonus_effect_list2");
            var returnXML = retrieve_bonus_effects_http.responseXML.documentElement;
            var i = 0;
            var j = 0;
            var form = document.forms["craftForm"];
            var bonus1 = form.elements["tier2BonusEffect"].options[form.elements["tier2BonusEffect"].selectedIndex].text;
            var bonus2 = form.elements["tier3BonusEffect"].options[form.elements["tier3BonusEffect"].selectedIndex].text;

            var effects = returnXML.getElementsByTagName("effect");

            var tmpHeader = "<select name=\"tier2BonusEffect\" onchange=\"javascript:updateEffectLists(2);doUpdate();displayEffect(2);\" style=\"width:450px;\"><option value=\"0\">Undecided</option>";
            var tmpFill = "";

            bonus2EffectArray = new Array();
            bonus3EffectArray = new Array();

            for (i = 0; i < effects.length && effects[i].attributes.getNamedItem("tier").value == 2; i++) {
                tmpFill += "<option value=\"" + effects[i].attributes.getNamedItem("id").value + "\">" + effects[i].attributes.getNamedItem("name").value + "</option>";
                bonus2EffectArray[effects[i].attributes.getNamedItem("id").value] = effects[i].attributes.getNamedItem("description").value;
            }

            if (i == 1) {
                tmpHeader = "<select name=\"tier2BonusEffect\" onchange=\"javascript:updateEffectLists(2);doUpdate();displayEffect(2);\" style=\"width:450px;\">";
            }

            tmpSpan = tmpHeader + tmpFill + "</select>";
            ingDiv.innerHTML = tmpSpan;

            ingDiv = document.getElementById("bonus_effect_list3");

            tmpHeader = "<select name=\"tier3BonusEffect\" onchange=\"javascript:updateGreensteelList();updateEffectLists(3);updateTier2Bonus();doUpdate();displayEffect(3);\" style=\"width:450px;\"><option value=\"0\">Undecided</option>";
            tmpFill = "";
            for (j = 0; i < effects.length && effects[i].attributes.getNamedItem("tier").value == 3; i++, j++) {
                tmpFill += "<option value=\"" + effects[i].attributes.getNamedItem("id").value + "\">" + effects[i].attributes.getNamedItem("name").value + "</option>";
                bonus3EffectArray[effects[i].attributes.getNamedItem("id").value] = effects[i].attributes.getNamedItem("description").value;
            }

            //if (j == 1)
            //{
            //    tmpHeader = "<select name=\"tier3BonusEffect\" onchange=\"javascript:updateEffectLists(3);doUpdate();displayEffect(3);\" style=\"width:450px;\">";
            //}
            tmpSpan = tmpHeader + tmpFill + "</select>";
            ingDiv.innerHTML = tmpSpan;


            for (i = 0; i < form.elements["tier2BonusEffect"].length; i++) {
                if (form.elements["tier2BonusEffect"].options[i].text == bonus1) {
                    form.elements["tier2BonusEffect"].selectedIndex = i;
                    i = 999;
                }
            }

            for (i = 0; i < form.elements["tier3BonusEffect"].length; i++) {
                if (form.elements["tier3BonusEffect"].options[i].text == bonus2) {
                    form.elements["tier3BonusEffect"].selectedIndex = i;
                    i = 999;
                }
            }

        }
        retrieve_bonus_effects_http = false;
    }
}


function updateGreensteelList() {
    var form = document.forms["craftForm"];
    var tier1, tier2, tier3;
    var bonus;
    var url, request;

    retrieve_greensteel_http = false;
    retrieve_greensteel_http = xml_http_request_object();

    tier1 = form.elements["tier1Effect"].options[form.elements["tier1Effect"].selectedIndex].value;
    tier2 = form.elements["tier2Effect"].options[form.elements["tier2Effect"].selectedIndex].value;
    tier3 = form.elements["tier3_1Effect"].options[form.elements["tier3_1Effect"].selectedIndex].value;
    bonus = form.elements["tier3BonusEffect"].options[form.elements["tier3BonusEffect"].selectedIndex].value; ;

    url = "./load_greensteel.php";
    request = "tier1=" + tier1;
    request += "&tier2=" + tier2;
    request += "&tier3=" + tier3;
    request += "&bonus=" + bonus;

    retrieve_greensteel_http.onreadystatechange = processUpdateGreensteelList;
    retrieve_greensteel_http.open('POST', url, true);
    retrieve_greensteel_http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    retrieve_greensteel_http.send(request);
}

function processUpdateGreensteelList() {
    if (retrieve_greensteel_http.readyState == 4) {
        if (retrieve_greensteel_http.status == 200) {
            var tmpSpan = "";
            var ingDiv = document.getElementById("greensteel_list");
            var returnXML = retrieve_greensteel_http.responseXML.documentElement;
            var form = document.forms["craftForm"];
            var base;
            base = form.elements["greenSteel"].options[form.elements["greenSteel"].selectedIndex].text;

            var greensteels = returnXML.getElementsByTagName("item")

            tmpSpan = "<select id=\"greenSteel\" name=\"greenSteel\" onchange=\"javascript:updateEffectLists(1);updateBonusEffects();doUpdate();\" style=\"width:350px;\"><option value=\"0\">Undecided</option>";
            for (var i = 0; i < greensteels.length; i++) {
                tmpSpan += "<option value=\"" + greensteels[i].attributes.getNamedItem("id").value + "\">" + greensteels[i].attributes.getNamedItem("name").value + "</option>";
            }

            tmpSpan += "</select>";
            ingDiv.innerHTML = tmpSpan;

            for (i = 0; i < form.elements["greenSteel"].length; i++) {
                if (form.elements["greenSteel"].options[i].text == base) {
                    form.elements["greenSteel"].selectedIndex = i;
                    i = 999;
                }
            }
            tier1 = form.elements["tier1Effect"].options[form.elements["tier1Effect"].selectedIndex].value;
            tier2 = form.elements["tier2Effect"].options[form.elements["tier2Effect"].selectedIndex].value;
            tier3 = form.elements["tier3_1Effect"].options[form.elements["tier3_1Effect"].selectedIndex].value;
            if (form.elements["greenSteel"].selectedIndex == 0 && (tier1 != 0 || tier2 != 0 || tier3 != 0))
                form.elements["greenSteel"].selectedIndex = 1;

            updateEffectLists(1);
        }
        retrieve_greensteel_http = false;
    }
}

function updateInstructions() {
    var form = document.forms["craftForm"];
    var base, tier1, tier2, tier3, tier4, altComponents;
    var url, request;
    var tier3Value, tier4Value;

    retrieve_instructions_http = false;
    retrieve_instructions_http = xml_http_request_object();

    tier3Value = tier4Value = "";

    base = form.elements["greenSteel"].options[form.elements["greenSteel"].selectedIndex].value;
    tier1 = form.elements["tier1Effect"].options[form.elements["tier1Effect"].selectedIndex].value;
    tier2 = form.elements["tier2Effect"].options[form.elements["tier2Effect"].selectedIndex].value;
    tier3 = form.elements["tier3_1Effect"].options[form.elements["tier3_1Effect"].selectedIndex].value;
    tier4 = form.elements["tier3_2Effect"].options[form.elements["tier3_2Effect"].selectedIndex].value;

    if (form.elements["altComponent"].checked)
        altComponents = 1;
    else
        altComponents = 0;

    if (base == 0 && tier1 == 0 && tier2 == 0 && tier3 == 0) {
        var ingDiv = document.getElementById("instructionList");
        ingDiv.innerHTML = "";
        return;
    }
    /*
    try {
    tier3Value = form.elements["tier3_1Effect"].options[form.elements["tier3_1Effect"].selectedIndex].text;
    tier4Value = form.elements["tier3_2Effect"].options[form.elements["tier3_2Effect"].selectedIndex].text;

        tier4Value = tier4Value.indexOf("Water/") > 0 ? 6 :
    tier4Value.indexOf("Fire/") > 0 ? 5 :
    tier4Value.indexOf("Earth/") > 0 ? 4 :
    tier4Value.indexOf("Air/") > 0 ? 3 :
    tier4Value.indexOf("Positive/") > 0 ? 2 : 1;

        tier3Value = tier3Value.indexOf("Water/") > 0 ? 6 :
    tier3Value.indexOf("Fire/") > 0 ? 5 :
    tier3Value.indexOf("Earth/") > 0 ? 4 :
    tier3Value.indexOf("Air/") > 0 ? 3 :
    tier3Value.indexOf("Positive/") > 0 ? 2 : 1;

        if (tier3Value > tier4Value)
    tier4 = 0;
    else
    tier3 = 0;
    }
    catch (e) { }
    */
    url = "./load_instructions.php";
    request = "base=" + base;
    request += "&tier1=" + tier1;
    request += "&tier2=" + tier2;
    request += "&tier3=" + tier3;
    request += "&tier4=" + tier4;
    request += "&altC=" + altComponents;

    retrieve_instructions_http.onreadystatechange = processUpdateInstructions;
    retrieve_instructions_http.open('POST', url, true);
    retrieve_instructions_http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    retrieve_instructions_http.send(request);
}

function processUpdateInstructions() {
    if (retrieve_instructions_http.readyState == 4) {
        if (retrieve_instructions_http.status == 200) {
            var components = new Array();
            var ingredients = new Array();
            var tmpSpan = "";
            var ingCounter = 0;
            var comCounter = 0;
            var curComponent = "";
            var lastComponent = "";
            var curItem = "";
            var lastItem = "";
            var curTier = "";
            var lastTier = "-1";
            var doubleShard = false;
            var tier3Value = 0;
            var tier4Value = 0;
            var bonus = "";
            var doubleImbuedEffect;
            var form = document.forms["craftForm"];
            var tier3Effect, tier4Effect;

            tier3Effect = tier3Value = form.elements["tier3_1Effect"].options[form.elements["tier3_1Effect"].selectedIndex].text;
            tier4Effect = tier4Value = form.elements["tier3_2Effect"].options[form.elements["tier3_2Effect"].selectedIndex].text;
            bonus = form.elements["tier3BonusEffect"].options[form.elements["tier3BonusEffect"].selectedIndex].text;

            tier4Value = tier4Value.indexOf("Water/") > 0 ? 6 :
                 tier4Value.indexOf("Fire/") > 0 ? 5 :
                 tier4Value.indexOf("Earth/") > 0 ? 4 :
                 tier4Value.indexOf("Air/") > 0 ? 3 :
                 tier4Value.indexOf("Positive/") > 0 ? 2 : 1;

            tier3Value = tier3Value.indexOf("Water/") > 0 ? 6 :
                 tier3Value.indexOf("Fire/") > 0 ? 5 :
                 tier3Value.indexOf("Earth/") > 0 ? 4 :
                 tier3Value.indexOf("Air/") > 0 ? 3 :
                 tier3Value.indexOf("Positive/") > 0 ? 2 : 1;


            doubleImbuedEffect = " " + bonus.substr(0, bonus.indexOf("-"));

            if (tier3Value > tier4Value)
                doubleImbuedEffect += "/ " + form.elements["tier3_1Effect"].options[form.elements["tier3_1Effect"].selectedIndex].text.substr(0, form.elements["tier3_1Effect"].options[form.elements["tier3_1Effect"].selectedIndex].text.indexOf("-") - 2);
            else
                doubleImbuedEffect += "/ " + form.elements["tier3_2Effect"].options[form.elements["tier3_2Effect"].selectedIndex].text.substr(0, form.elements["tier3_2Effect"].options[form.elements["tier3_2Effect"].selectedIndex].text.indexOf("-") - 2);

            var form = document.forms["craftForm"];
            var base = form.elements["greenSteel"].options[form.elements["greenSteel"].selectedIndex].text;

            var ingDiv = document.getElementById("instructionList");
            var returnXML = retrieve_instructions_http.responseXML.documentElement;

            var instructions = returnXML.getElementsByTagName("instruction");

            //tmpSpan = "<div><div style='font-weight:bold;padding-bottom:8px;'>Here's what you do: </div>";
            tmpSpan = "<div>";

            for (var i = 0; i < instructions.length; i++) {
                curComponent = instructions[i].attributes.getNamedItem("component").value;
                curItem = instructions[i].attributes.getNamedItem("item").value;

                if (curComponent != lastComponent) {
                    if (lastComponent != "") {
                        if (ingCounter > 2) {
                            tmpSpan += "<div style='padding-bottom:8px;'>";
                            if (lastTier == "-1") {
                                if (curTier == 0)
                                    tmpSpan += "<div style='padding-left:0px;background-color:#FFFF99;font-weight:bold;padding-bottom:8px;padding-top:8px;'>At the Altar of Fecundity in Meridia</div>";
                                else if (curTier == 1)
                                    tmpSpan += "<div style='padding-left:0px;background-color:#FFFF99;font-weight:bold;padding-bottom:8px;padding-top:8px;'>At the Altar of Invasion in Phase 1 of the Shroud</div>";
                                else if (curTier == 2)
                                    tmpSpan += "<div style='padding-left:0px;background-color:#FFFF99;font-weight:bold;padding-bottom:8px;padding-top:8px;'>At the Altar of Subjugation in Phase 3 of the Shroud</div>";
                                else if (curTier == 3)
                                    tmpSpan += "<div style='padding-left:0px;background-color:#FFFF99;font-weight:bold;padding-bottom:8px;padding-top:8px;'>At the Altar of Devastation in Phase 5 of the Shroud</div>";

                                lastTier = curTier;
                            }
                            tmpSpan += "<div style='padding-left:12px;'>Make 1 <span style='color:Blue;font-weight:bold;'>" + lastComponent + "</span> by combining</div>";
                            tmpSpan += "<div style='font-weight:bold;padding-left:24px;'>";
                            for (var j = 0; j < ingredients.length; j++) {
                                if (j == 0)
                                    tmpSpan += ingredients[j];
                                else if ((j + 1) == ingredients.length)
                                    tmpSpan += ", and " + ingredients[j];
                                else if ((j) < ingredients.length)
                                    tmpSpan += ", " + ingredients[j];
                            }
                            tmpSpan += "</div>";
                            tmpSpan += "</div>";
                            tmpSpan += "</div>";
                            tmpSpan += "</div>";
                        }

                        ingredients = new Array();
                        ingCounter = 0;
                        components[comCounter++] = lastComponent;
                    }

                    lastComponent = curComponent;
                }

                if (curItem != lastItem) {
                    if (lastItem != "") {
                        tmpSpan += "<div style='padding-bottom:8px;background-color:LightGreen;'>";
                        tmpSpan += "<div style='padding-left:12px;'>Make 1 <span style='color:Blue;font-weight:bold;'>" + lastItem + "</span> by combining<div>";
                        tmpSpan += "<div style='font-weight:bold;padding-left:24px;'>";
                        for (var j = 0; j < components.length; j++) {
                            if (j == 0)
                                tmpSpan += components[j];
                            else if ((j) < components.length)
                                tmpSpan += ", " + components[j];
                        }
                        tmpSpan += "</div>";
                        tmpSpan += "</div>";
                        tmpSpan += "</div>";
                        tmpSpan += "</div>";

                        if (curTier > 0) {
                            if (curTier != 3 || instructions[i].attributes.getNamedItem("tier").value != "3") {
                                if (curTier == 3 && doubleShard) {
                                    tmpSpan += "<div style='padding-bottom:8px;background-color:#FFCCFF;'>";
                                    tmpSpan += "<div style='padding-left:12px;'>Make 1 Double Imbued Shard of Supreme Power <span style='color:Blue;font-weight:bold;'>(" + doubleImbuedEffect + ")</span> by combining<div>";
                                    tmpSpan += "<div style='font-weight:bold;padding-left:24px;'>";
                                    tmpSpan += "Large Energy Cell, 1 " + tier3Effect + " Imbued Shard of Supreme Power, and 1 " + tier4Effect + " Imbued Shard of Supreme Power ";
                                    tmpSpan += "</div>";
                                    tmpSpan += "</div>";
                                    tmpSpan += "</div>";
                                    tmpSpan += "</div>";
                                }

                                tmpSpan += "<div style='padding-bottom:8px;background-color:LightBlue;'>";
                                tmpSpan += "<div style='padding-left:12px;'>Upgrade your <span style='color:Blue;font-weight:bold;'>" + base + "</span> by combining<div>";
                                tmpSpan += "<div style='font-weight:bold;padding-left:24px;'>";

                                if (curTier == 1) {
                                    tmpSpan += base;
                                    tmpSpan += ", Low Energy Cell, and Imbued Shard of Power ";
                                }
                                if (curTier == 2) {
                                    tmpSpan += "Tier 1 upgraded " + base;
                                    tmpSpan += ", Medium Energy Cell, and Imbued Shard of Great Power ";
                                }
                                if (curTier == 3 && !doubleShard) {
                                    tmpSpan += "Tier 2 upgraded " + base;
                                    tmpSpan += ", Large Energy Cell, and Imbued Shard of Supreme Power ";
                                }
                                if (curTier == 3 && doubleShard) {
                                    tmpSpan += "Tier 2 upgraded " + base;
                                    tmpSpan += ", Large Energy Cell, and Double Imbued Shard of Supreme Power (" + doubleImbuedEffect + ")";
                                }
                                tmpSpan += "</div>";
                                tmpSpan += "</div>";
                                tmpSpan += "</div>";
                                tmpSpan += "</div>";
                            }
                            else {
                                doubleShard = true;
                            }
                        }
                        components = new Array();
                        comCounter = 0;
                    }

                    lastTier = "-1";
                    lastItem = curItem;
                }

                curTier = instructions[i].attributes.getNamedItem("tier").value;
                ingredients[ingCounter++] = instructions[i].attributes.getNamedItem("ingredient").value;
            }
            tmpSpan += "</div>";
            ingDiv.innerHTML = tmpSpan;
        }
        retrieve_instructions_http = false;
    }
}

function exportIngredients() {
    var form = document.forms["exporter"];
    var ingDiv = document.getElementById("ingredientList");
    form.action = "./exporter.php";
    form.target = "_blank";
    form.elements["data"].value = ingDiv.innerHTML;
    form.submit();
}

function exportInstructions() {
    var form = document.forms["exporter"];
    var ingDiv = document.getElementById("instructionList");
    form.action = "./exporter.php";
    form.target = "_blank";
    form.elements["data"].value = ingDiv.innerHTML;
    form.submit();
}


function updateIngredients() {
    var form = document.forms["craftForm"];
    var base, tier1, tier2, tier3, tier4, altComponents;
    var url, request;

    retrieve_ingredients_http = false;
    retrieve_ingredients_http = xml_http_request_object();

    base = form.elements["greenSteel"].options[form.elements["greenSteel"].selectedIndex].value;
    tier1 = form.elements["tier1Effect"].options[form.elements["tier1Effect"].selectedIndex].value;
    tier2 = form.elements["tier2Effect"].options[form.elements["tier2Effect"].selectedIndex].value;
    tier3 = form.elements["tier3_1Effect"].options[form.elements["tier3_1Effect"].selectedIndex].value;
    tier4 = form.elements["tier3_2Effect"].options[form.elements["tier3_2Effect"].selectedIndex].value;
    if (form.elements["altComponent"].checked)
        altComponents = 1;
    else
        altComponents = 0;

    if (base == 0 && tier1 == 0 && tier2 == 0 && tier3 == 0 && tier4 == 0) {
        var ingDiv = document.getElementById("ingredientList");
        ingDiv.innerHTML = "";
        return;
    }

    url = "./load_ingredients.php";
    request = "base=" + base;
    request += "&tier1=" + tier1;
    request += "&tier2=" + tier2;
    request += "&tier3=" + tier3;
    request += "&tier4=" + tier4;
    request += "&altC=" + altComponents;

    retrieve_ingredients_http.onreadystatechange = processUpdateIngredients;
    retrieve_ingredients_http.open('POST', url, true);
    retrieve_ingredients_http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    retrieve_ingredients_http.send(request);
}

function processUpdateIngredients() {
    if (retrieve_ingredients_http.readyState == 4) {
        if (retrieve_ingredients_http.status == 200) {
            var tmpSpan = "";
            var ingDiv = document.getElementById("ingredientList");
            var returnXML = retrieve_ingredients_http.responseXML.documentElement;
            var curTier = 0;
            var lastTier = -1;
            var tier3, tier4;
            var form = document.forms["craftForm"];


            tier3 = form.elements["tier3_1Effect"].options[form.elements["tier3_1Effect"].selectedIndex].value;
            tier4 = form.elements["tier3_2Effect"].options[form.elements["tier3_2Effect"].selectedIndex].value;


            var ingredients = returnXML.getElementsByTagName("ingredient")

            //tmpSpan = "<div style='font-weight:bold;padding-bottom:8px;'>You'll need: </div>";
            tmpSpan = "<div>";
            for (var i = 0; i < ingredients.length; i++) {
                curTier = ingredients[i].attributes.getNamedItem("tier").value
                if (lastTier != curTier)
                    lastTier = -1;
                if (lastTier == -1) {
                    if (curTier == 0)
                        tmpSpan += "<div style='padding-left:0px;background-color:#FFFF99;font-weight:bold;padding-bottom:8px;padding-top:8px;'>From the Vale Explorer Area and Vale Quests Collect </div>";
                    else if (curTier == 1)
                        tmpSpan += "<div style='padding-left:0px;background-color:#FFFF99;font-weight:bold;padding-bottom:8px;padding-top:8px;'>From Phase 1 of the Shroud Collect</div>";
                    else if (curTier == 2)
                        tmpSpan += "<div style='padding-left:0px;background-color:#FFFF99;font-weight:bold;padding-bottom:8px;padding-top:8px;'>From Phase 2 and 3 of the Shroud Collect</div>";
                    else if (curTier == 3)
                        tmpSpan += "<div style='padding-left:0px;background-color:#FFFF99;font-weight:bold;padding-bottom:8px;padding-top:8px;'>From Phase 4 and 5 of the Shroud Collect</div>";

                    lastTier = curTier;
                }

                if (ingredients[i].attributes.getNamedItem("name").value == "Shavarath Low Energy Cell" ||
                    ingredients[i].attributes.getNamedItem("name").value == "Shavarath Medium Energy Cell") {
                    tmpSpan += "<div style='padding-left:12px;'>" + (parseInt(ingredients[i].attributes.getNamedItem("count").value) + 1) + "&nbsp;&nbsp;&nbsp;&nbsp;" + ingredients[i].attributes.getNamedItem("name").value + "</div>";
                }
                else if (ingredients[i].attributes.getNamedItem("name").value == "Shavarath High Energy Cell") {
                    if (tier3 > 0 && tier4 > 0) {
                        tmpSpan += "<div style='padding-left:12px;'>" + (parseInt(ingredients[i].attributes.getNamedItem("count").value) + 2) + "&nbsp;&nbsp;&nbsp;&nbsp;" + ingredients[i].attributes.getNamedItem("name").value + "</div>";
                    }
                    else {
                        tmpSpan += "<div style='padding-left:12px;'>" + (parseInt(ingredients[i].attributes.getNamedItem("count").value) + 1) + "&nbsp;&nbsp;&nbsp;&nbsp;" + ingredients[i].attributes.getNamedItem("name").value + "</div>";
                    }
                }
                else {
                    tmpSpan += "<div style='padding-left:12px;'>" + ingredients[i].attributes.getNamedItem("count").value + "&nbsp;&nbsp;&nbsp;&nbsp;" + ingredients[i].attributes.getNamedItem("name").value + "</div>";
                }
            }

            tmpSpan += "</div>";
            ingDiv.innerHTML = tmpSpan;
        }
        retrieve_ingredients_http = false;
    }
}

function xml_http_request_object() {
    var req = false;

    if (window.XMLHttpRequest)
        req = new XMLHttpRequest();
    else if (window.ActiveXObject) {
        try {
            req = new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch (e) {
            try {
                req = new ActiveXObject("Microsoft.XMLHTTP");
            }
            catch (E) {
                req = false;
            }
        }
    }
    return req;
}