﻿
function InitializeCalculators() {
    $(document).ready(function (e) {
        $(".select-inside-area, .select-inside-surface, .select-outside-area, .new-repaint, .garage").selectBox();

        var prodFinderGo = function (e) {
            ShowProductFinderInputs();
        }
        $("#btnStartProductFinder").live("click", prodFinderGo);

        var findProductInside = function (e) {
            var area = $("#select-inside-area").val();
            var surface = $("#select-inside-surface").val();
            ShowProductFinderResults("inside", area, surface);
        }
        $("#prodfinder-inputs-inside .translucent-find-product").live("click", findProductInside);

        var findProductOutside = function (e) {
            var area = $("#select-outside-area").val();
            ShowProductFinderResults("outside", "", area);
        }
        $("#prodfinder-inputs-outside .translucent-find-product").live("click", findProductOutside);

        var clearProductInside = function (e) {
            ProductFinderClear("inside");
        }
        $("#prodfinder-inputs-inside .translucent-clear").live("click", clearProductInside);

        var clearProductOutside = function (e) {
            ProductFinderClear("outside");
        }
        $("#prodfinder-inputs-outside .translucent-clear").live("click", clearProductOutside);

        var paintCalcGo = function (e) {
            ShowPaintCalculatorInputs();
        }
        $("#btnPaintCalcGo").live("click", paintCalcGo);

        var paintCalcInsideResults = function (e) {
            ShowPaintCalculatorInsideResults();
        }
        $("#btnPaintCalculateInside").live("click", paintCalcInsideResults);

        var paintCalcOutsideResults = function (e) {
            ShowPaintCalculatorOutsideResults();
        }
        $("#btnPaintCalculateOutside").live("click", paintCalcOutsideResults);

        var resetPaintCalc = function (e) {
            ResetPaintCalculator();
        }
        $("#paintcalc-inputs-inside .translucent-clear").live("click", resetPaintCalc);
        $("#paintcalc-inputs-outside .translucent-clear").live("click", resetPaintCalc);

        BreakPaintCalcLabels();
    });
}

function ShowProductFinderInputs() {
    var selected = $("#prodfinder-top input[name=productfinder]:checked");
    var target = "";

    if (selected.size() > 0) {
        if (selected.val() == "inside") {
            target = $("#prodfinder-inputs-inside");
        } else {
            target = $("#prodfinder-inputs-outside");
        }

        var nowShowing = $("#prodfinder-inputs-inside:visible, #prodfinder-inputs-outside:visible");


        if (nowShowing.attr("id") != target.attr("id")) {
            //only make a change if the already open panel is not the same as the one to be opened.
            if (nowShowing.size() > 0) {
                //if a panel is already showing, hide it first.
                //need to do this, else the outside panel bounces.
                $("#prodfinder-inputs-inside, #prodfinder-inputs-outside, #prodfinder-results").slideUp("fast",
                function () {
                    $(target).slideDown("fast", function () { FixDropdownPositions(target); });
                });
            } else {
                $(target).slideDown("fast", function () { FixDropdownPositions(target); });
            }
        }

    } else {
        //indicate that a radio needs to be selected.
        BounceElement("#prodfinder-top label");
    }

}

function BounceElement(elementID) {
    $(elementID).effect("bounce", { direction: "up", distance: 6 })
}

function ShowProductFinderResults(insideOutside, area, surface) {
    //check that we have values to work with.
    var foundError = false;

    if (insideOutside == "outside") {
        if (area == "0") {
            BounceElement("a.select-outside-area");

            if ($("#select-outside-area:visible").size() > 0) {
                BounceElement("#select-outside-area");
            }

            foundError = true;
        }
    } else {
        if (area == "0") {
            BounceElement("a.select-inside-area");

            if ($("#select-inside-area:visible").size() > 0) {
                BounceElement("#select-inside-area");
            }

            foundError = true;
        }

        if (surface == "0") {
            BounceElement("a.select-inside-surface");

            if ($("#select-inside-surface:visible").size() > 0) {
                BounceElement("#select-inside-surface");
            }

            foundError = true;
        }
    }

    if (foundError) return;

    $.get("/ProductFinder/FindProduct.ashx?where=" + insideOutside + "&which=" + area + "&what=" + surface, function (data) {
        //do stuff in here to get XML for product info.
        $("#prodfinder-results div.calc-results").html(data);
    });

    //probably make these conditional on success.
    $("#prodfinder-results").slideDown("fast");
    $("#prodfinder-inputs-" + insideOutside + " .translucent-find-product").hide();
    $("#prodfinder-inputs-" + insideOutside + " .translucent-clear").show();

    ReselectProduct(insideOutside);
}

function ReselectProduct(insideOutside) {
    var onChange = function () {
        $("#prodfinder-inputs-" + insideOutside + " .translucent-find-product").show();
        $("#prodfinder-inputs-" + insideOutside + " .translucent-clear").hide();
    }

    $("#prodfinder-inputs-" + insideOutside + " .selectBox").bind("focus", onChange);
}

function ProductFinderClear() {
    $("#prodfinder-results").slideUp("slow", function () {
        $("#prodfinder-inputs-inside").slideUp("slow", function () {
            $("#prodfinder-inputs-outside").slideUp("slow", function () {
                $("#prodfinder-inputs-inside .translucent-find-product, #prodfinder-inputs-outside .translucent-find-product").show();
                $("#prodfinder-inputs-inside .translucent-clear, #prodfinder-inputs-outside .translucent-clear").hide();

                $("#select-inside-area, #select-outside-area, #select-inside-surface").selectBox("value", "0");

                $("#prodfinder-top input[type=radio]").attr("checked", false);

                $("#prodfinder-inputs-outside .selectBox, #prodfinder-inputs-inside .selectBox").unbind("focus", "onChange");

            });
        });
    });
}

function ShowPaintCalculatorInputs() {
    var selected = $("#paintcalc-top input[name=paintcalculator]:checked");

    if (selected.size() > 0) {
        $("#paintcalc-top").addClass("square");

        var target;

        if (selected.val() == "inside") {
            target = $("#paintcalc-inputs-inside");
        } else {
            target = $("#paintcalc-inputs-outside");
        }

        var nowShowing = $("#paintcalc-inputs-inside:visible, #paintcalc-inputs-outside:visible");

        if (nowShowing.attr("id") != target.attr("id")) {
            $("#paintcalc-inputs-inside:visible, #paintcalc-inputs-outside:visible, #paintcalc-results").slideUp("fast",
            function () {
                $(target).slideDown("slow", function () { FixDropdownPositions(target); });
            });
        } else {
            $(target).slideDown("slow", function () { FixDropdownPositions(target); });
        }

    } else {
        //indicate that a radio needs to be selected
        BounceElement("#paintcalc-top label")
    }
}

///Fixes the position of fancy dropdowns in IE7. Must be called after animations have been completed.
function FixDropdownPositions(target) {
    if ($(target).find("a.selectBox-dropdown").css("top") == "auto") {
        $(target).find("a.selectBox-dropdown").css("top", "0");
    } else {
        $(target).find("a.selectBox-dropdown").css("top", "auto");
    }
}

function HideDropdowns(target) {
    $(target).find("a.selectBox-dropdown").css("visibility", "hidden");
}

function ShowDropdowns(target) {
    $(target).find("a.selectBox-dropdown").css("visibility", "");
}

function ShowPaintCalculatorInsideResults() {

    var foundError = false;

    $("#paintcalc-inputs-inside input[type=text]").each(function (e) {
        if ($(this).val() == "" || isNaN($(this).val())) {
            foundError = true;
            BounceElement($(this));
        }
    });

    if (foundError) return;

    //do the inside calculation.

    var roomLength = parseFloat($("#txtRoomLength").val());
    var roomWidth = parseFloat($("#txtRoomWidth").val());
    var roomHeight = parseFloat($("#txtRoomHeight").val());
    var doors = parseInt($("#txtDoorsInside").val());
    var windows = parseInt($("#txtWindowsInside").val());
    var repaint = $("#new-repaint-inside").val();

    var repaintFactor = (repaint === "repaint") ? 0 : 1;

    var doorwinTrim = (((((2 * (roomWidth * roomHeight)) + (2 * (roomLength * roomHeight))) - (doors * InsideDoorArea + windows * InsideWindowArea)) / 16) * (2 + repaintFactor) * 0.1);
    var litresRequired = (((((2 * (roomWidth * roomHeight)) + (2 * (roomLength * roomHeight))) - (doors * InsideDoorArea + windows * InsideWindowArea)) / 16) * (2 + repaintFactor) + doorwinTrim);

    ShowPaintCalculatorResults(Math.ceil(Math.max(0, litresRequired)), "#paintcalc-inputs-inside");
}

function ShowPaintCalculatorOutsideResults() {

    var foundError = false;

    $("#paintcalc-inputs-outside input[type=text]").each(function (e) {
        if ($(this).val() == "" || isNaN($(this).val())) {
            foundError = true;
            BounceElement($(this));
        }
    });

    if (foundError) return;

    //do the outside calculation.
    var squareMeterage = parseFloat($("#txtSquareMeterage").val());
    var doors = parseFloat($("#txtDoorsOutside").val());
    var windows = parseFloat($("#txtWindowsOutside").val());
    var garage = parseFloat($("#garage-outside").val());
    var repaint = $("#new-repaint-outside").val();

    var garageM2 = 0;
    if (garage === 1) garageM2 = Garage1Car - OutsideDoorArea - OutsideWindowArea - GarageArea;
    if (garage === 2) garageM2 = Garage2Car - OutsideDoorArea - OutsideWindowArea - GarageArea;

    var repaintFactor = (repaint === "repaint") ? 0 : 1;

    var totalArea = (((Math.sqrt(squareMeterage) * 2.8) * 4)) - ((doors * OutsideDoorArea) + (windows * OutsideWindowArea));
    var totalAreaWithRepaint = (((garageM2 * (2 + repaintFactor)) + (totalArea * (2 + repaintFactor))) / 16) * 0.1;

    var totalLitres = (((garageM2 * (2 + repaintFactor)) + (totalArea * (2 + repaintFactor))) / 16) + totalAreaWithRepaint;

    var litresRequired = Math.ceil(Math.max(0, totalLitres))

    ShowPaintCalculatorResults(Math.ceil(litresRequired), "#paintcalc-inputs-outside");
}

function ShowPaintCalculatorResults(totalPaint, paintCalcElement) {
    $("#paintcalc-results .estimatevalue").text(totalPaint);
    $("#paintcalc-results").slideDown("slow");
    $(paintCalcElement + " .translucent-calculate").hide();
    $(paintCalcElement + " .translucent-clear").show();

    ReselectPaintValues(paintCalcElement);
}

function ReselectPaintValues(paintCalcElement) {

    var onChange = function () {
        $(paintCalcElement + " .translucent-calculate").show();
        $(paintCalcElement + " .translucent-clear").hide();
    }
    $("#paintcalc-inputs-inside input[type='text'], #paintcalc-inputs-inside .selectBox, #paintcalc-inputs-outside input[type='text'], #paintcalc-inputs-outside .selectBox").bind("focus", onChange);
}

//resets fields and layout for the paint calculator
function ResetPaintCalculator() {
    //reset panels
    $("#paintcalc-results").slideUp("slow", function () {
        $("#paintcalc-inputs-inside").slideUp("slow", function () {
            $("#paintcalc-inputs-outside").slideUp("slow", function () {
                $("#paintcalc-top").removeClass("square");
                //reset radios
                $("#paintcalc-top input[type=radio]").attr("checked", false);
                //reset inside controls
                $("#paintcalc-inputs-inside input[type=text]").val("");
                $("#new-repaint-inside").selectBox("value", "repaint");
                $("#paintcalc-inputs-inside .translucent-calculate").show();
                $("#paintcalc-inputs-inside .translucent-clear").hide();

                //reset outside controls
                $("#paintcalc-inputs-outside input[type=text]").val("");
                $("#garage-outside").selectBox("value", "0");
                $("#new-repaint-outside").selectBox("value", "repaint");
                $("#paintcalc-inputs-outside .translucent-calculate").show();
                $("#paintcalc-inputs-outside .translucent-clear").hide();

                $("#paintcalc-inputs-inside input[type='text'], #paintcalc-inputs-inside .selectBox, #paintcalc-inputs-outside input[type='text'], #paintcalc-inputs-outside .selectBox").unbind("focus", "onChange");
            });
        });
    });
}

function BreakPaintCalcLabels() {
    var originalLabels = new Array("Number of Doors", "Number of Windows", "New or Repaint?", "Are you also painting a garage?", "Square Meterage");
    var updatedLabels = new Array("Number of<br />Doors", "Number of<br />Windows", "New or<br />Repaint?", "Are you also<br />painting a garage?", "Square<br />Meterage");

    $("#paintcalc-inputs-outside label, #paintcalc-inputs-inside label").each(function () {
        for (labelIndex = 0; labelIndex < originalLabels.length; labelIndex++) {
            if ($(this).html().indexOf(originalLabels[labelIndex]) > -1) {
                $(this).html(updatedLabels[labelIndex]);
            }
        }
    });
}



