(function($) {
    $.openCalculatorDialog = function(name) {
        $.globalVars.dialogs.$loading.dialog("open");
        switch (name) {
            case 'Solar':

                $.globalVars.dialogs.$calculator.dialog("option", "width", 500);
                $.globalVars.dialogs.$calculator.dialog("option", "height", 'auto');
                $.get("/Calculator/Calculator_Solar", null, function(html) {
                    $.globalVars.dialogs.$calculator.html(html);
                    $.globalVars.dialogs.$calculator.find('a[rel=close]').click(function() {
                        $.globalVars.dialogs.$calculator.dialog("close");
                        return false;
                    });
                    var $inputs = $.globalVars.dialogs.$calculator.find(':text');
                    var $selects = $.globalVars.dialogs.$calculator.find('select');
                    $.globalVars.dialogs.$calculator.find('a[rel=calculate]').click(function() {
                        _gaq.push(['_trackEvent', 'Outils', 'Calculer', 'Solar']);
                        var valid = true;
                        $(this).parent().next().hide();
                        $inputs.removeClass("error");
                        var location = parseFloat($selects.eq(0).val());
                        var locationuser = parseFloat($inputs.eq(0).val());
                        if (isNaN(locationuser)) {
                            valid = false;
                            $inputs.eq(0).addClass("error");
                        }
                        var elecConsom = parseFloat($inputs.eq(1).val());
                        if (isNaN(elecConsom)) {
                            valid = false;
                            $inputs.eq(1).addClass("error");
                        }
                        var pannel = parseFloat($selects.eq(1).val());
                        var cost = parseFloat($inputs.eq(2).val());
                        if (isNaN(cost)) {
                            valid = false;
                            $inputs.eq(2).addClass("error");
                        }
                        var elecPrice = parseFloat($inputs.eq(3).val());
                        if (isNaN(elecPrice)) {
                            valid = false;
                            $inputs.eq(3).addClass("error");
                        }

                        if (valid) {
                            if (locationuser > 0) {
                                location = locationuser;
                            }

                            var firstResult = location * pannel * 365 / 12;
                            if (firstResult > elecConsom) {
                                firstResult = elecConsom;
                            }

                            var result = cost / (elecPrice * firstResult);

                            var requiredWatts = (elecConsom * 12 / 365) / location * 1000 * 1.3;
                            var requiredPannels = Math.ceil(requiredWatts / pannel);
                            var resultingPower = requiredPannels * pannel;

                            var $tables = $.globalVars.dialogs.$calculator.find('table');
                            $tables.eq(1).find('tr:last').find('td:last').html(resultingPower.toFixed(0)).end()
                            .prev().find('td:last').html(requiredPannels.toFixed(0)).end()
                            .prev().find('td:last').html(requiredWatts.toFixed(2));

                            if (isNaN(result)) {
                                result = 0;
                            }
                            $(this).parent().next().show().find('span').html(result.toFixed(0));
                        }

                        return false;
                    });
                    $.globalVars.dialogs.$calculator.dialog("open");
                    $.globalVars.dialogs.$loading.dialog("close");
                }, "html");

                break;
            case 'Wind':

                $.globalVars.dialogs.$calculator.dialog("option", "width", 500);
                $.globalVars.dialogs.$calculator.dialog("option", "height", 'auto');
                $.get("/Calculator/Calculator_Wind", null, function(html) {
                    $.globalVars.dialogs.$calculator.html(html);
                    $.globalVars.dialogs.$calculator.find('a[rel=close]').click(function() {
                        $.globalVars.dialogs.$calculator.dialog("close");
                        return false;
                    });
                    var $inputs = $.globalVars.dialogs.$calculator.find(':text');
                    var $selects = $.globalVars.dialogs.$calculator.find('select');
                    $.globalVars.dialogs.$calculator.find('a[rel=calculate]').click(function() {
                        var valid = true;
                        $(this).parent().next().hide();
                        $inputs.removeClass("error");
                        var devicePower = parseFloat($selects.eq(0).val());
                        var costOfDevice = parseFloat($inputs.eq(0).val());
                        if (isNaN(costOfDevice)) {
                            valid = false;
                            $inputs.eq(0).addClass("error");
                        }
                        var electPrice = parseFloat($inputs.eq(1).val());
                        if (isNaN(electPrice)) {
                            valid = false;
                            $inputs.eq(1).addClass("error");
                        }

                        if (valid) {
                            var result = Math.ceil((costOfDevice * 1000) / (devicePower * 3 * electPrice));
                            if (isNaN(result)) {
                                result = 0;
                            }
                            $(this).parent().next().show().find('span').html(result.toFixed(0));
                        }

                        return false;
                    });
                    $.globalVars.dialogs.$calculator.dialog("open");
                    $.globalVars.dialogs.$loading.dialog("close");
                }, "html");

                break;
            case 'Electrical':

                var calculateTotals = function() {
                    var yearTotal = 0;
                    var powerTotal = 0;
                    $.globalVars.dialogs.$calculator.find('table tr:not(.tit_calc)').each(function() {
                        var $tr = $(this);
                        yearTotal += parseFloat($tr.find('td:last').data("total"));
                        var qty = parseFloat($tr.find(':text:first').val());
                        if (qty > 0) {
                            powerTotal += parseFloat($tr.find(':text:eq(1)').val());
                        }
                    });
                    var monthTotal = yearTotal / 12;

                    var elecCost = parseFloat($.globalVars.dialogs.$calculator.find('input[name=electricity_cost]').val());
                    var $powerTR = $.globalVars.dialogs.$calculator.find('table tr:last');
                    var $wattsTR = $powerTR.prev();
                    var $totalTR = $wattsTR.prev();
                    if (isNaN(monthTotal) || isNaN(yearTotal) || isNaN(powerTotal) || isNaN(elecCost)) {
                        var errHtml = '<span class="error">---</span>';
                        $totalTR.find('td:last').html(errHtml).prev().html(errHtml);
                        $wattsTR.find('td:last').html(errHtml);
                        $powerTR.find('td:last').html(errHtml);
                    }
                    else {
                        $totalTR.find('td:last').html(yearTotal.toFixed(2) + "$").prev().html(monthTotal.toFixed(2) + "$");
                        var wattsTotal = ((yearTotal / 365) / elecCost);
                        $wattsTR.find('td:last').html(wattsTotal.toFixed(2));
                        $powerTR.find('td:last').html(powerTotal);
                    }
                };
                var calculateWatts = function($tr) {
                    var $qty = $tr.find(':text:first');
                    var $watts = $tr.find(':text:eq(1)');
                    var rate = $qty.attr("aria-rate");
                    var qty = $qty.val();
                    var watts = $watts.val();
                    var elecCost = parseFloat($.globalVars.dialogs.$calculator.find('input[name=electricity_cost]').val());
                    var value = 0;
                    switch (rate) {
                        case "minutes":
                            value = (qty / 60) * (watts / 1000) * 365 * elecCost;
                            break;
                        case "months":
                            value = (qty / 12) * (watts / 1000) * 8760 * elecCost;
                            break;
                        case "hours":
                        default:
                            value = qty * (watts / 1000) * 365 * elecCost;
                            break;
                    }

                    if (isNaN(value) || isNaN(watts) || isNaN(qty)) {
                        var errHtml = '<span class="error">---</span>';
                        $tr.find('td:last').html(errHtml).prev().html(errHtml);
                        $tr.find(':text').val('0');
                    }
                    else {
                        var resultYear = value.toFixed(2);
                        var resultMonth = (resultYear / 12).toFixed(2);
                        $tr.find('td:last').html(resultYear + "$").data("total", resultYear).prev().html(resultMonth + "$");
                    }
                };
                $.globalVars.dialogs.$calculator.dialog("option", "width", 736);
                $.globalVars.dialogs.$calculator.dialog("option", "height", 650);
                $.get("/Calculator/Calculator_Electrical", null, function(html) {
                    $.globalVars.dialogs.$calculator.html(html);
                    $.globalVars.dialogs.$calculator.find('a[rel=close]').click(function() {
                        $.globalVars.dialogs.$calculator.dialog("close");
                        return false;
                    });
                    $.globalVars.dialogs.$calculator.find('a[rel=restart]').click(function() {
                        _gaq.push(['_trackEvent', 'Outils', 'Recommancer', 'Electrical']);
                        $.globalVars.dialogs.$calculator.find('form')[0].reset();
                        $.globalVars.dialogs.$calculator.find('input[name=electricity_cost]').val('0');
                        var html = "0.00$";
                        $.globalVars.dialogs.$calculator.find('table tr:not(.tit_calc)').each(function() {
                            $(this).find('td:last').html(html).prev().html(html);
                        });
                        $.globalVars.dialogs.$calculator.find('table tr:last').find('td:last').html('0').end()
                        .prev().find('td:last').html('0').end()
                        .prev().find('td:last').html(html).prev().html(html);
                        return false;
                    });
                    $.globalVars.dialogs.$calculator.find('input[name=electricity_cost]').change(function() {
                        $.globalVars.dialogs.$calculator.find('table tr:not(.tit_calc)').each(function() {
                            calculateWatts($(this));
                        });
                        calculateTotals();
                    });
                    $.globalVars.dialogs.$calculator.find('table :text').change(function(event) {
                        var $target = $(event.target);
                        var $elm = $target.closest(':text');
                        if ($elm.length) {
                            calculateWatts($elm.closest('tr'));
                            calculateTotals();
                        }
                    });


                    $.globalVars.dialogs.$calculator.dialog("open");
                    $.globalVars.dialogs.$loading.dialog("close");
                }, "html");

                break;
            case 'CO2':

                $.globalVars.dialogs.$calculator.dialog("option", "width", 500);
                $.globalVars.dialogs.$calculator.dialog("option", "height", 'auto');
                $.get("/Calculator/Calculator_CO2", null, function(html) {
                    $.globalVars.dialogs.$calculator.html(html);
                    $.globalVars.dialogs.$calculator.find('a[rel=close]').click(function() {
                        $.globalVars.dialogs.$calculator.dialog("close");
                        return false;
                    });
                    var $inputs = $.globalVars.dialogs.$calculator.find(':text');
                    $.globalVars.dialogs.$calculator.find('a[rel=calculate]').click(function() {
                        _gaq.push(['_trackEvent', 'Outils', 'Calculer', 'CO2']);
                        var elect = parseFloat($inputs.eq(0).val()) * 0.1825;
                        var natural = parseFloat($inputs.eq(1).val()) * 0.001877;
                        var oil = parseFloat($inputs.eq(2).val()) * 0.0012;
                        var car = parseFloat($inputs.eq(3).val()) * 0.12168;
                        var $msgDiv = $(this).parent().next();
                        $msgDiv.find('> span').hide();
                        if (isNaN(elect) || isNaN(natural) || isNaN(oil) || isNaN(car)) {
                            $msgDiv.find('span:last').show();
                        }
                        else {
                            var result = car + oil + natural + elect;
                            $msgDiv.find('span:first').show().find('span').html(result.toFixed(2));
                        }
                        return false;
                    });
                    $.globalVars.dialogs.$calculator.dialog("open");
                    $.globalVars.dialogs.$loading.dialog("close");
                }, "html");
            default:
                break;
        }
    };
})(jQuery);

$(document).ready(function() {
    $.globalVars.dialogs.$calculator = $('#dialog_calculator').dialog({
        autoOpen: false,
        modal: true,
        sticky: false
    });
});
