var server = "http://eshop.auralight.se/besparingskalkyl/";
var productList = new Array();
var prodNum = 0;

var lang = "";
var multiProducts = false;

var calculatorOutputWrapper = "";
var productNameId = "";
var productIdId = "";
var productInputId = "";
var productPrice = "";

var energySavingsOutput = "";
var replacementSavingsOutput = "";
var totalSavingsOutput = "";
var co2SavingsOutput = "";
var co2SavingsTotalOutput = "";

var numberDivider = " ";

///			---

function fetchProduct(inProduct) {
    $.ajax({
        type: "GET",
        url: server + "Export/DataSingle.aspx?p=" + encodeURI(inProduct.id) + "&l=" + lang,
        dataType: "xml",
        success: function (xml) {
            $(xml).find("item").each(function () {
                var product = new Object();
                product.name = $(this).find("ProductName").eq(0).text();
                product.power = $(this).find("Power").eq(0).text();
                product.addsavings = $(this).find("AddSavings").eq(0).text();
                product.lifetime3h = $(this).find("Lifetime3h").eq(0).text();
                product.lifetime12h = $(this).find("Lifetime12h").eq(0).text();
                product.price = $(this).find("Price").eq(0).text();
                //product.price = inProduct.price;
                product.replacementcost = $(this).find("ReplacementCost").eq(0).text();
                product.replacementtime = $(this).find("ReplacementTime").eq(0).text();
                product.energyprice = $(this).find("EnergyPrice").eq(0).text();
                product.co2 = $(this).find("Co2").eq(0).text();
                product.priceratio = $(this).find("PriceRatio").eq(0).text();
                product.lifetime = $(this).find("Lifetime").eq(0).text();
                product.stdname = $(this).find("StdName").eq(0).text();
                product.stdlifetime3h = $(this).find("StdLifetime3h").eq(0).text();
                product.stdlifetime12h = $(this).find("StdLifetime12h").eq(0).text();
                product.stdpower = $(this).find("StdPower").eq(0).text();
                product.stdaddsavings = $(this).find("StdAddSavings").eq(0).text();
                product.stdprice = $(this).find("StdPrice").eq(0).text();

                product.number = inProduct.number;
                product.inputField = inProduct.inputField;
                productList.push(product);

                printProductTotal();

            })
            prodNum--;
            if (prodNum == 0) {
                if (productList.length > 0) {
                    $("#" + calculatorOutputWrapper).show();
                }
            }
        },
        error: function (req, status, err) {
            //alert(status);
        }
    });
}

///			---

function calculateEnergySavings(product, units) {
    var stdpow = parseFloat(product.stdpower);
    var power = parseFloat(product.power);
    var lifetime = parseFloat(product.lifetime12h);
    var eckwh = parseFloat(product.energyprice);
    var nolamps = parseFloat(units);
    var addsavings = parseFloat(product.addsavings);
    return (((stdpow * lifetime * eckwh / 1000 * nolamps) - (power * lifetime * eckwh / 1000 * nolamps)) + (addsavings * lifetime * eckwh / 1000 * nolamps));
}

function calculateReplacementSavings(product, units) {
    var lifetime = parseFloat(product.lifetime12h);
    var nolamps = parseFloat(units);
    var pppstd = parseFloat(product.stdprice);
    var lifetimestd = parseFloat(product.stdlifetime12h);
    var ppp = parseFloat(product.price);
    var rep_price = parseFloat(product.replacementcost) / 60 * parseFloat(product.replacementtime);
    return ((((pppstd * nolamps) + (rep_price * nolamps)) * (lifetime / lifetimestd)) - ((ppp * nolamps) + (rep_price * nolamps)));
}

function calculateCo2Savings(product, units) {
    var stdpow = parseFloat(product.stdpower);
    var power = parseFloat(product.power);
    var nolamps = parseFloat(units);
    var burnTime = 12;
    var co2kwh = parseFloat(product.co2);
    var addsavings = parseFloat(product.addsavings);
    return ((stdpow * (burnTime) * 365 * (co2kwh) / 1000 * nolamps) - ((power - addsavings) * (burnTime) * 365 * (co2kwh) / 1000 * nolamps));
}

function calculateCo2TotalSavings(product, units) {
    var stdpow = parseFloat(product.stdpower);
    var power = parseFloat(product.power);
    var lifetime = parseFloat(product.lifetime12h);
    var nolamps = parseFloat(units);
    var addsavings = parseFloat(product.addsavings);
    var lifetimestd = parseFloat(product.stdlifetime12h);
    var co2kwh = parseFloat(product.co2);
    var co2EmTrans = 0.22;
    return (((stdpow * lifetime * (co2kwh) / 1000 * nolamps) + (nolamps * co2EmTrans * (lifetime / lifetimestd))) - (((power - addsavings) * lifetime * (co2kwh) / 1000 * nolamps) + (nolamps * co2EmTrans)));
}

function printProductTotal() {
    var product;
    var units = 0;
    var energySavings = 0;
    var replacementSavings = 0;
    var totalSavings = 0;
    var co2Savings = 0;
    var co2TotalSavings = 0;

    for (i = 0; i < productList.length; i++) {
        product = productList[i];
        if ($("#" + product.inputField).val() != "")
            units = $("#" + product.inputField).val();
        else
            units = $("#" + product.inputField).html();
        if (isNaN(parseFloat(units)) == true) {
            units = 0;
        }
        energySavings += calculateEnergySavings(product, units);
        replacementSavings += calculateReplacementSavings(product, units);
        totalSavings += energySavings + replacementSavings;
        co2Savings += calculateCo2Savings(product, units);
        co2TotalSavings += calculateCo2TotalSavings(product, units);
    }

    if($("#" + energySavingsOutput).length)
        $("#" + energySavingsOutput).html(formatNumber(Math.round(energySavings)));

    if ($("#" + replacementSavingsOutput).length)
        $("#" + replacementSavingsOutput).html(formatNumber(Math.round(replacementSavings)));

    if ($("#" + totalSavingsOutput).length)
        $("#" + totalSavingsOutput).html(formatNumber(Math.round(totalSavings)));

    if ($("#" + co2SavingsOutput).length)
        $("#" + co2SavingsOutput).html(formatNumber(Math.round(co2Savings)));

    if ($("#" + co2SavingsTotalOutput).length)
        $("#" + co2SavingsTotalOutput).html(formatNumber(Math.round(co2TotalSavings)));
}

///			---

function recalculate() {
    var product;
    var productFound = false;
    for (i = 0; i < productList.length; i++) {
        if ($(this).attr("id") == productList[i].inputField) {
            product = productList[i];
            productFound = true;
        }
    }
    if (productFound == true) {
        printProductTotal();
    }
}

///			---

function formatNumber(value) {
    value = value + '';
    for (var i = 0; i < Math.floor((value.length - (1 + i)) / 3); i++)
        value = value.substring(0, value.length - (4 * i + 3)) + numberDivider + value.substring(value.length - (4 * i + 3));

    return value;
}

///			---

$(document).ready(function () {

    if (calculatorOutputWrapper.length) {
        $("#" + calculatorOutputWrapper).hide();
        prodNum = 0;
        if (multiProducts == true) {
            $("#" + productTable + ':first tr.cart-item-row').each(function (i) {
                prodNum++;
                var product = new Object();
                product.number = prodNum;
                $(this).find("." + prodNameClass).each(function (i) {
                    product.name = $(this).html();
                });
                $(this).find("." + prodIdClass).each(function (i) {
                    product.id = $(this).html().replace(/^\s+|\s+$/g, '');

                });
                $(this).find("." + prodInputClass).each(function (i) {
                    product.inputField = $(this).attr("id");
                });
                $(this).find("." + productPrice).each(function (i) {
                    product.price = parseInt($(this).html(), 10);
                });
                fetchProduct(product);
            });
        } else {
            prodNum++;
            var product = new Object();
            product.number = 1;
            product.name = $("#" + productNameId).html();
            product.id = $("#" + productIdId).html().replace(/^\s+|\s+$/g, '');;
            product.inputField = $("#" + productInputId).attr("id");
            product.price = parseInt($("#" + productPrice).html(), 10);

            $("#" + productInputId).keyup(recalculate);
            fetchProduct(product);
        }
    }
});
