/* Minification failed. Returning unminified contents.
(34,48-49): run-time warning JS1100: Expected ',': =
(133,70-71): run-time warning JS1100: Expected ',': =
(191,71-72): run-time warning JS1100: Expected ',': =
 */
Number.prototype.formatMoney = function (decPlaces, thouSeparator, decSeparator) {
    var n = this,
        sign = n < 0 ? "-" : "",
        i = parseInt(n = Math.abs(+n || 0).toFixed(decPlaces)) + "",
        j = (j = i.length) > 3 ? j % 3 : 0;

    decPlaces = isNaN(decPlaces = Math.abs(decPlaces)) ? 2 : decPlaces;
    decSeparator = decSeparator === undefined ? "." : decSeparator;
    thouSeparator = thouSeparator === undefined ? "," : thouSeparator;

    var formattedValue = sign + (j ? i.substr(0, j) + thouSeparator : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + thouSeparator) + (decPlaces ? decSeparator + Math.abs(n - i).toFixed(decPlaces).slice(2) : "");

    if (this % 1 === 0) {
        formattedValue = formattedValue.substr(0, formattedValue.length - decPlaces - 1);
    }
    return formattedValue;
};

$("input[data-type='currency']").on({
    keyup: function () {
        formatCurrency($(this));
    },
    blur: function () {
        var noDecimal = $(this).attr("data-no-decimal") !== null ? true : false;
        formatCurrency($(this), "blur", noDecimal);
    }
});

function formatNumber(n) {
    // format number 1000000 to 1,234,567
    return n.replace(/\D/g, "").replace(/\B(?=(\d{3})+(?!\d))/g, ",")
}

function formatCurrency(input, blur, noDecimal = null) {
    // validates decimal side
    // and puts cursor back in right position.

    // get input value
    var input_val = input.val();

    // don't validate empty input
    if (input_val === "") { return; }

    // original length
    var original_len = input_val.length;

    // initial caret position 
    var caret_pos = input.prop("selectionStart");

    // check for decimal
    if (input_val.indexOf(".") >= 0) {

        // get position of first decimal
        // this prevents multiple decimals from
        // being entered
        var decimal_pos = input_val.indexOf(".");

        // split number by decimal point
        var left_side = input_val.substring(0, decimal_pos);
        var right_side = input_val.substring(decimal_pos);

        // add commas to left side of number
        left_side = formatNumber(left_side);

        // validate right side
        right_side = formatNumber(right_side);

        // On blur make sure 2 numbers after decimal
        if (blur === "blur") {
            right_side += "00";
        }

        // Limit decimal to only 2 digits
        right_side = right_side.substring(0, 2);

        // join number by .
        input_val = left_side + "." + right_side;

    } else {
        // no decimal entered
        // add commas to number
        // remove all non-digits
        input_val = formatNumber(input_val);

        // final formatting
        if (blur === "blur" && noDecimal !== true) {
            input_val += ".00";
        }
    }

    // send updated string to input
    input.val(input_val);

    // put caret back in the right position
    var updated_len = input_val.length;
    caret_pos = updated_len - original_len + caret_pos;
    input[0].setSelectionRange(caret_pos, caret_pos);
}
;
////////currency converter
var CurrencyConverter = function() {};

CurrencyConverter.prototype.containerSelector = '.currency-selector';
CurrencyConverter.prototype.container = $('.currency-selector');
CurrencyConverter.prototype.currentCurrency = '';
CurrencyConverter.prototype.conversionRates = [];
CurrencyConverter.prototype.localCurrency = localCurrency;

CurrencyConverter.prototype.supportedCurrencies = supportedCurrencies && supportedCurrencies.length ? supportedCurrencies : [];
CurrencyConverter.prototype.foreignCurrencies = supportedCurrencies.filter(function (curr) { return curr != localCurrency});

CurrencyConverter.prototype.init = function () {
    var _this = this;
    var selectedCurrency = '';
    if (sessionStorage.selectedCurrency) {
        selectedCurrency = sessionStorage.selectedCurrency;
    }

    //console.log('selectedCurrency: ' + selectedCurrency);
    this.setCurrency(selectedCurrency);
    this.setCurrencyOptions();

    // register events once we have the rates
    $.when.apply(null, this.initConversionValues()).always(function () {
        _this.registerEvents();
        _this.convertTotal(_this.currentCurrency);
        _this.convertDetails(_this.currentCurrency);
        _this.convertABDetails(_this.currentCurrency);
    });

};

CurrencyConverter.prototype.setCurrency = function(currency, _target = null) {
    currency = currency || localCurrency;// supportedCurrencies[0];
    var defaultOptionContainer = _target !== null ? _target.closest(this.containerSelector).find('.selected-value') : this.container.find('.selected-value');
    defaultOptionContainer.empty();
    defaultOptionContainer.append("<i class='currency-flag currency-flag-" + currency.toLowerCase() + "'></i> <b>" + currency + "</b>");
    // put it in local storage
    sessionStorage.setItem('selectedCurrency', currency);
    this.currentCurrency = currency;

};

CurrencyConverter.prototype.setCurrencyOptions = function() {
  var optionsContainer = $('.currency-selector .options');
  optionsContainer.empty();
  this.supportedCurrencies.forEach(function(element) {
    optionsContainer.append("<li data-currency='" + element + "'><i class='currency-flag currency-flag-" + element.toLowerCase() +"'></i> <b>" + element + "</b></li>")
  });
};

CurrencyConverter.prototype.toggleSelector = function (_target) {
    _target.closest(this.containerSelector).toggleClass('opened');
};

CurrencyConverter.prototype.initConversionValues = function () {
    var _this = this;
    var apiKey = eRegulations ? eRegulations.CURRENCY_API_KEY : '';
    var options = '&compact=ultra&apiKey=' + apiKey;
    // ugly thing
    if (!apiKey) {
        $('.currency-selector').hide();
    }

    // have a map of every currencies combinations by using cartesian product.
    var currenciesCombos = this.supportedCurrencies.map(function (x) {
        return _this.supportedCurrencies.map(function (y) { return { 'from': x, 'to': y }; });
    }).reduce(function (a, b) { return a.concat(b); }, []);

    // remove identities
    currenciesCombos = currenciesCombos.filter(function (currObj) { return currObj.from !== currObj.to; });

    return currenciesCombos.map(function (currObject) {
        var query = currObject.from + '_' + currObject.to;
        var url = 'https://api.currconv.com/api/v6/convert?q=' + query + options;
        return $.ajax({
            url: url,
            method: 'GET',
            success: function (res) {
                _this.conversionRates.push({
                    'from': currObject.from,
                    'to': currObject.to,
                    'value': res[query]
                });
            }
        });
    });

};

CurrencyConverter.prototype.convertTotal = function(convertTo, _abcEl = null) {
    var localTotal = 0;
    var foreignTotals = [];
    var totLocEl = _abcEl !== null ? _abcEl.closest(this.containerSelector).parent().find('.summary-cost-sum .total-local') : $('.summary-cost-sum .total-local.cost').length ? $('.summary-cost-sum .total-local.cost') : $('.summary-cost-sum .total-local');

    if (totLocEl.length) {
        var localValue = totLocEl.attr('data-value');
        if (isNaN(localValue))
            localValue = localValue.split(',').join('');
        localTotal = parseFloat(localValue);
    }
    if ($('.summary-cost-sum .total-foreign').length && _abcEl == null) {
      $('.summary-cost-sum .total-foreign').each(function () {
        var foreignValue = $(this).attr('data-value');
        if(isNaN(foreignValue))
          foreignValue = foreignValue.split(',').join('');
        foreignTotals.push({Unit: $(this).data('currency'), Value: parseFloat(foreignValue)});
      });
    }

    var fromLocalConversionRate = 1;
    var fromForeignConversionRate = 1;
    var conversionTotal = 0;
    var _this = this;

    if ((convertTo == this.localCurrency && foreignTotals.length == 0) || (foreignTotals.map(function (t) { return t.Unit; }).includes(convertTo) && localTotal == 0)) {
        var converted = "";
        if (localTotal) {
            converted += this.localCurrency + " " + localTotal.formatMoney(2, ',', '.');
        }
        if (foreignTotals.length > 0) {
            converted += converted ? " + " : "";
            foreignTotals.forEach(function (total, index, array) {
                converted += total.Unit + ' ' + total.Value.formatMoney(2, ',', '.');
                if (index < array.length - 1) {
                    converted += " + ";
                }
            });
        }
        if (_abcEl == null)
            $('.summary-cost-sum .totalConverted').html(converted);
        else
            totLocEl.html(converted);
        if (converted == "")
            $('span.total-nb-costs').hide();
        else
            $('span.total-nb-costs').show();

        $('span.total-sum').hide();
    } else {
        fromLocalConversionRate = this.conversionRates.filter(function (rate) { return rate.from == _this.localCurrency && rate.to == convertTo });
        fromLocalConversionRate = fromLocalConversionRate[0] ? parseFloat(fromLocalConversionRate[0].value) : 1;
        conversionTotal = localTotal * fromLocalConversionRate;

        var that = this;
        conversionTotal += foreignTotals.reduce(function (total, item) {
            fromForeignConversionRate = that.conversionRates.filter(function (rate) { return rate.from == item.Unit && rate.to == convertTo });
            fromForeignConversionRate = fromForeignConversionRate[0] ? parseFloat(fromForeignConversionRate[0].value) : 1;
            return total + item.Value * fromForeignConversionRate;
        }, 0.0);

        var conversionTotalString = conversionTotal.formatMoney(2, ',', '.');


        if (_abcEl == null) {
            $('.summary-cost-sum .totalConverted').html(this.currentCurrency + " " + conversionTotalString);
        } else {
            totLocEl.html(this.currentCurrency + " " + conversionTotalString);
        }

        if (conversionTotal == 0)
            $('span.total-nb-costs').hide();
        else
            $('span.total-nb-costs').show();

        if (!$('span.total-sum').attr('data-ignore')) {
            $('span.total-sum').show();
        }
    }

    /*if (eRegulations.isRTL) {
        changeNumerals();
    }*/
};

CurrencyConverter.prototype.convertDetails = function (convertTo) {

  var self = this;
  var convertTotal = 0;
  var convertDetail = 0;
  var fromLocalConversionRate = 1;
  var fromForeignConversionRate = 1;
  
  var localTotal = 0;
  var foreignTotals = [];

  if($('.summary-cost-sum .total-local').length) {
    var localValue = $('.summary-cost-sum .total-local').attr('data-value');
    if(isNaN(localValue))
    localValue = localValue.split(',').join('');
    localTotal = parseFloat(localValue);
  }
  if ($('.summary-cost-sum .total-foreign').length) {
    $('.summary-cost-sum .total-foreign').each(function () {
    var foreignValue = $(this).attr('data-value');
    if(isNaN(foreignValue))
        foreignValue = foreignValue.split(',').join('');
    foreignTotals.push({Unit: $(this).data('currency'), Value: parseFloat(foreignValue)});
    });
  }

  if((convertTo == this.localCurrency && foreignTotals.length == 0) || (foreignTotals.map(function (t) { return t.Unit; }).includes(convertTo) && localTotal == 0)) {
    $('.costCalculatedConverted').addClass('hidden');
    $('.costCalculatedConverted .costDetail').remove();
  } else {
    $('.costCalculatedVal').each(function() {
      var convertFrom = $(this).siblings('.costCalculatedUnit').html();
      var convertFromValue = parseFloat($(this).attr('data-value').split(',').join('')) || 0;

      if (convertFrom == self.localCurrency) {
        fromLocalConversionRate = self.conversionRates.filter(function (rate) { return rate.from == self.localCurrency && rate.to == convertTo });
        fromLocalConversionRate = fromLocalConversionRate[0] ? parseFloat(fromLocalConversionRate[0].value) : 1;
        convertTotal = fromLocalConversionRate * convertFromValue;
      } else {
        fromForeignConversionRate = self.conversionRates.filter(function (rate) { return rate.from == convertFrom && rate.to == convertTo });
        fromForeignConversionRate = fromForeignConversionRate[0] ? parseFloat(fromForeignConversionRate[0].value) : 1;
        convertTotal = fromForeignConversionRate * convertFromValue;
      }
      
      var costConvertedEl = $(this).siblings('.costCalculatedConverted');
      costConvertedEl.find('.costCalculatedConvertedUnit').html(convertTo);
      convertTotal = convertTotal.formatMoney(2, ',', '.');
      costConvertedEl.find('.costCalculatedConvertedValue').html(convertTotal);
      costConvertedEl.removeClass('hidden');

            if ($(this).parents('.costDetails').find('.costDetail').length) {
                costConvertedEl.find('.costDetail').remove();
                costConvertedEl.find('.separator').show();
                $(this).parents('.costDetails').find('.costDetail').clone().appendTo(costConvertedEl);
                costConvertedEl.find('.costDetail .costCalculatedUnit').html(convertTo);

                if (parseFloat(costConvertedEl.find('.costDetail .numeral').attr('data-value'))) {
                    convertFromValue = parseFloat(costConvertedEl.find('.costDetail .numeral').attr('data-value').split(',').join('')) || 0;
                    if (convertFrom == self.localCurrency) {
                        convertDetail = fromLocalConversionRate * convertFromValue;
                    } else {
                        convertDetail = fromForeignConversionRate * convertFromValue;
                    }
                    convertDetail = convertDetail.formatMoney(2, ',', '.');
                    costConvertedEl.find('.costDetail .numeral').html(convertDetail);
                }
            }
        });
    }

    /*if (eRegulations.isRTL) {
        changeNumerals();
    }*/

}

// for external use
var conversionRate = 0;

CurrencyConverter.prototype.convertABDetails = function (convertTo) {

        var self = this;
        // get currency from convert
        var convertFromCurrency = self.localCurrency;
        // fix to dolar $ converts
        convertFromCurrency = convertFromCurrency === '$' ? 'USD' : convertFromCurrency;
        // conversion rate
        var fromLocalConversionRate = self.conversionRates.filter(function (rate) { return rate.from == convertFromCurrency && rate.to == convertTo });
        fromLocalConversionRate = fromLocalConversionRate[0] ? parseFloat(fromLocalConversionRate[0].value) : 1;
        conversionRate = fromLocalConversionRate;
        // for details
        $('.toconver').each(function () {
            var currentValue = $(this).attr('data-value');
            if (currentValue && currentValue != 'n/a') {
                var convertFromValue = currentValue.toString().includes(',') ? parseFloat(currentValue.split(',').join('')) : parseFloat(currentValue);
                if (convertFromCurrency == convertTo) {
                    $(this).html(convertFromValue.formatMoney(2, ',', '.'));
                } else {
                    var convertTotal = fromLocalConversionRate * convertFromValue;
                    $(this).html(convertTotal.formatMoney(2, ',', '.'));
                }
            }
        });
        // for totals
        // set currency
        $('.adb_currency').html(convertTo);
        // set totals
        var totalEl = $("#adminBurdenTotal");
        var totalElfor1 = $("#adminBurdenTotalfor1");
        var elCurrentValue = totalEl.data("base");
        if (elCurrentValue && elCurrentValue != 'n/a') {
            var numberOfUsers = parseFloat($("#numberOfUsers").val().replace(/[^0-9.-]+/g, ""));
            var base = parseFloat(elCurrentValue.toString().replace(/[^0-9.-]+/g, ""));
            var total = base * (isNaN(numberOfUsers) || numberOfUsers == 0 ? 1 : numberOfUsers);
            if (convertFromCurrency == convertTo) {
                totalEl.html(total.formatMoney(2, ',', '.'));
                totalEl.attr('data-value', base.formatMoney(2, ',', '.'));
                totalEl.attr('data-total', base.formatMoney(2, ',', '.'));
                totalElfor1.html(base.formatMoney(2, ',', '.'));
            } else {
                var totalConvert = fromLocalConversionRate * total;
                totalEl.html(totalConvert.formatMoney(2, ',', '.'));
                var baseConvert = fromLocalConversionRate * base;
                totalEl.attr('data-value', baseConvert.formatMoney(2, ',', '.'));
                totalEl.attr('data-total', baseConvert.formatMoney(2, ',', '.'));
                totalElfor1.html(baseConvert.formatMoney(2, ',', '.'));
            }

            
    }

    // for resize abc calcs
    self.abcWatch();

    /*if (eRegulations.isRTL) {
        changeNumerals();
    }*/
}

$("#numberOfUsers").blur(function () {
    currencyConverter.abcWatch();
}).keypress(function (event) {
    var keycode = (event.keyCode ? event.keyCode : event.which);
    if (keycode == 13) {
        currencyConverter.abcWatch();
    }
});

CurrencyConverter.prototype.abcWatch = function() {

    var betweenMargin = 5;
    var elementsContainer_width = $('#abcTitle').width();
    var elementA_width = $('#title-left').width();
    var elementB_width = $('#title-right').width();

    var isColliding = ((elementA_width + elementB_width) + betweenMargin) >= elementsContainer_width;
    if (isColliding) {
        $('#abcTitle').addClass('colliding');
    } else {
        $('#abcTitle').removeClass('colliding');
    }

    //console.log(elementsContainer_width + '/' + elementA_width + '/' + elementB_width);
}

CurrencyConverter.prototype.registerEvents = function() {
    var _this = this;
    this.container.find('.toggle').on('click', function(e) {
        _this.toggleSelector($(this));
    });
    this.container.find('.options li').on('click', function (e) {
        var _thisEl = $(this);
        var _elemABC = _thisEl.closest(_this.containerSelector).hasClass('abc-currency') ? _thisEl.closest(_this.containerSelector) : null;
        var selectedCurrency = _thisEl.data('currency');
        _this.setCurrency(selectedCurrency/*, _thisEl*/); // fix for all combos
        _this.convertTotal(selectedCurrency/*, _elemABC*/); // fix
        _this.convertDetails(selectedCurrency);
        _this.convertABDetails(selectedCurrency);
        _this.toggleSelector(_thisEl);
    });
}

var currencyConverter = new CurrencyConverter();
$(currencyConverter.init());

// stop event bubbling when clicking in currency
$('.currency-selector').on("click", function (e) {
    e.stopPropagation();
});
;
//new cost laoyut
Number.prototype.formatMoney = function (decPlaces, thouSeparator, decSeparator) {
    var n = this,
        sign = n < 0 ? "-" : "",
        i = parseInt(n = Math.abs(+n || 0).toFixed(decPlaces)) + "",
        j = (j = i.length) > 3 ? j % 3 : 0;

    decPlaces = isNaN(decPlaces = Math.abs(decPlaces)) ? 4 : decPlaces;
    decSeparator = decSeparator === undefined ? "." : decSeparator;
    thouSeparator = thouSeparator === undefined ? "," : thouSeparator;

    return sign + (j ? i.substr(0, j) + thouSeparator : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + thouSeparator) + (decPlaces ? decSeparator + Math.abs(n - i).toFixed(decPlaces).slice(2) : "");
};

// no - open all
//var first = $('.row-step.selected').parent()
//first.collapse('show')
//first.prev().addClass("opened");
$("#listSteps").children(".block-step-container").collapse('show');
//$("#listSteps").children(".row-block").first().addClass("opened");
$("#listSteps").children(".row-block").addClass("opened");

//new fiche layout
//if step is empty add "under construction" message
//console.log($("#stepDetailContent").find(".stepContent").length)
if ($("#stepDetailContent").find(".stepContent").length === 0) {
    $("#changeFiche").hide();
    $("#stepDetailContent").prepend("<div class='clearfix'></div><div class='box flow' style='margin-top:10px; font-size:14px;'>" + msgStepInDocumentationProcess + "</div>");
}

$("[rel=tooltip]").tooltip();
//cost popover
$("a[data-toggle='popover']")
    .popover({ html: true })
    .click(function (e) {
        e.preventDefault();
    });
//init tooltip
$("[data-toggle='tooltip']").tooltip({ container: "#ficheStep" });

var contactSection;
var additionalSection;
var recourseSection;
var resultsSection;
var requirementsSection;
var costSection;
var lawsSection;

var tabGeneral;
var tabDocuments;

$("#changeFiche").on("click", function (e) {
    e.preventDefault();
    if ($(this).data("mode") === 1) {
        switchToStructuredView();
        $(this).data("mode", 0);

    }
    else {
        switchToFlowView();
        $(this).data("mode", 1);
    }

});

if (AbcActivated)
    calculateTotalAndSave(false);

$("#numberOfUsers").blur(function () {
    calculateTotalAndSave(true);
}).keypress(function (event) {
    var keycode = (event.keyCode ? event.keyCode : event.which);
    if (keycode == 13) {
        event.preventDefault();
        calculateTotalAndSave(true);
    }
});

function calculateTotal() {
    var numberOfUsers = parseFloat($("#numberOfUsers").val().replace(/[^0-9.-]+/g, ""));
    var totalElfor1 = $("#adminBurdenTotalfor1");
    var totalEl = $("#adminBurdenTotal");
    var total = parseFloat(totalEl.attr("data-total").replace(/[^0-9.-]+/g, ""));
    var newTotal = total * (isNaN(numberOfUsers) || numberOfUsers === 0.0 ? 1.0 : numberOfUsers);
    totalEl.html(newTotal.formatMoney(2, ',', '.'));
    totalElfor1.html(total.formatMoney(2, ',', '.'));
}

function calculateTotalAndSave(save) {
    var numberOfUsers = calculateTotal();
    if (save) {
        $.post("/api/Procedure/" + StepId + "/SaveNumberOfUsers", '{"NumberOfUsers":' + numberOfUsers + '}', function (data) {
            console.log(data);
        }).fail(
            function (jqXHR, textStatus, err) {
                $("#errorsPane").html("<span class='error'>" + err + "</span>").show();
            });
    }
}

function switchToStructuredView() {

    //st cookie
    Cookies.set("FicheView", "structured", { path: '/' });

    // $("#changeFiche").html(btnFicheViewComplete);
    $("#changeFiche").attr('data-original-title', btnFicheViewComplete);
    $("#changeFiche").toggleClass('isActive');
    //hide optional step text

    //second
    if (!tabDocuments) {
        $("#paneResults").append($("#section-results").html());


        $("#paneRequirements").append($("#section-requirements").html());


        $("#paneLaws").append($("#section-laws").html());

    } else {
        tabDocuments.prependTo($("#stepDetailContent"));
        tabDocuments = null;
    }
    //first tab list

    if (!tabGeneral) {
        $("#paneContact").append($("#section-contacts").html());


        $("#paneAdditionalInfo").append($("#section-additional").html());


        $("#paneRecourse").append($("#section-recourse").html());


    }
    else {
        tabGeneral.prependTo($("#stepDetailContent"));
        tabGeneral = null;
    }
    contactSection = $("#section-contacts").detach();
    resultsSection = $("#section-results").detach();
    requirementsSection = $("#section-requirements").detach();
    lawsSection = $("#section-laws").detach();
    additionalSection = $("#section-additional").detach();
    recourseSection = $("#section-recourse").detach();

    //cost data content
    $(".costDetailsStructured").attr("data-content", $("#section-costs").html());

    costSection = $("#section-costs").detach();

    //timeframeSection = $("#section-timeframe").detach();
    //$(".newFiche").show();
    $("#ficheStep").addClass("structured");
}

function switchToFlowView() {
    //st cookie
    Cookies.set("FicheView", "flow", { path: '/' });

    // $("#changeFiche").html(btnFicheViewStructured);
    $("#changeFiche").attr('data-original-title', btnFicheViewStructured);
    $("#changeFiche").toggleClass('isActive');

    //first tab list
    if (!lawsSection) {
        lawsSection = $("#section-laws").append($("#paneLaws").html());
    }
    lawsSection.appendTo($("#stepDetailContent"));

    if (!additionalSection) {
        additionalSection = $("#section-additional").append($("#paneAdditionalInfo").html());
    }
    additionalSection.appendTo($("#stepDetailContent"));

    if (!costSection) {
        costSection = $("#section-costs").append($(".costDetailsStructured").attr("data-content"));
    }
    costSection.prependTo($("#stepDetailContent"));

    if (!requirementsSection) {
        requirementsSection = $("#section-requirements").append($("#paneRequirements").html());
    }
    requirementsSection.prependTo($("#stepDetailContent"));

    if (!resultsSection) {
        resultsSection = $("#section-results").append($("#paneResults").html());
    }
    resultsSection.prependTo($("#stepDetailContent"));

    if (!contactSection) {
        contactSection = $("#section-contacts").append($("#paneContact").html());
    }
    contactSection.prependTo($("#stepDetailContent"));

    $("<div class='clearfix'></div>").prependTo($("#stepDetailContent"));

    if (!recourseSection) {
        recourseSection = $("#section-recourse").append($("#paneRecourse").html());
    }
    recourseSection.appendTo($("#stepDetailContent"));

    tabGeneral = $("#generalInfoTab").detach();
    tabDocuments = $("#documentsTab").detach();

    $("#ficheStep").removeClass("structured");
}

// TODO close cost details when clicking outside the div
$(document).on("click", function (e) {
    var container = $(".costostable").closest(".popover");

    if (e.target.className !== "costDet" && container.has(e.target).length === 0) {
        $("a.costDetailsPop").popover("hide");
        // $('#element').popover('toggle');

    }
    var timeframeContainer = $(".timeframePopOver").closest(".popover");
    if (e.target.className !== "timeFrameDet" && timeframeContainer.has(e.target).length === 0) {
        $("a.timeFrameDetails").popover("hide");
    }
});

function calculateTotalStepCosts(currency) {
    var totalStepCostSep = [];
    $(".costCalculatedVal").each(function (i, el) {
        var aggregateOperator = $(el).closest(".costValue").data('aggregate-operator');
        if (aggregateOperator != 'or') {
            var unit = $(el).closest(".costValue").find(".costCalculatedUnit").text();
            if (unit.length > 3) {
                unit = unit.substr(unit.length - 3);
            }
            var val = $(el).attr("data-value").replace(/\,/g, '');
            totalStepCostSep.push({ Unit: unit, Value: parseFloat($.trim(val)) });
        }
    });

    var totalStepCostGrouped = [];
    totalStepCostSep.reduce(function (result, value) {
        if (result[value.Unit])
            result[value.Unit].Value += value.Value;
        else {
            result[value.Unit] = { Unit: value.Unit, Value: value.Value };
            totalStepCostGrouped.push(result[value.Unit]);
        }
        return result;
    }, {});

    var totalStepCost = totalStepCostGrouped.map(function (cost) {
        return { Unit: cost.Unit, Value: cost.Value, StringValue: cost.Value.formatMoney(2, ',', '.') };
    });

    if ($(".summary-cost-sum").length > 0) {
        totalStepCost.forEach(function (cost, index) {
            var prefix = index > 0 ? '&nbsp;+&nbsp;' : '';
            if (cost.Unit == localCurrency) {
                if (cost.Value > 0 && $('.summary-cost-sum .total-local').length == 0) {
                    var elContLocal = $(".summary-cost-sum .total-sum").find("strong");
                    elContLocal.append(prefix + localCurrency + '&nbsp;<span class="total-local numeral" data-value=""></span>');
                }
                $(".summary-cost-sum").find(".total-local").text(cost.StringValue);
                $(".summary-cost-sum").find(".total-local").attr("data-value", cost.Value);
            } else {
                if (cost.Value > 0 && $('.summary-cost-sum .total-foreign-' + cost.Unit.toLowerCase()).length == 0) {
                    var elContForeign = $(".summary-cost-sum .total-sum").find("strong");
                    elContForeign.append(prefix + cost.Unit + '&nbsp;<span class="total-foreign total-foreign-' + cost.Unit.toLowerCase() + ' numeral" data-value="" data-currency="' + cost.Unit + '"></span>');
                }
                $(".summary-cost-sum").find(".total-foreign-" + cost.Unit.toLowerCase()).text(cost.StringValue);
                $(".summary-cost-sum").find(".total-foreign-" + cost.Unit.toLowerCase()).attr("data-value", cost.Value);
            }
        });
        
        currencyConverter.convertTotal(currencyConverter.currentCurrency);
        currencyConverter.convertDetails(currencyConverter.currentCurrency);
    }
}

/// calculate s
var $costHypotesis = $('.costHypotesis');
$costHypotesis.on('click', '.editValue', function (e) {
    e.preventDefault();
    var hypoTd = $(this).closest("td"),
        currentCostEl = hypoTd.find(".editableValue");
    //change to edit mode
    var selectedCost = {};

    selectedCost.initialAverageValue = parseFloat(currentCostEl.attr("data-initialavgvalue").replace(/[^0-9.-]+/g, ""));
    selectedCost.costOperator = currentCostEl.attr("data-costOperator");
    selectedCost.costValue = currentCostEl.attr("data-costValue");
    selectedCost.editableFieldId = currentCostEl.attr("data-costId");
    selectedCost.param = currentCostEl.closest("td").find(".hypoLabel").text();

    if (selectedCost.initialAverageValue % 1 !== 0) {
        selectedCost.initialAverageValue = selectedCost.initialAverageValue.formatMoney(2, ',', '.');
    }
    var template = $("#averageCostEditTmpl").html();

    var templatedHtml = _.template(template);
    hypoTd.html(templatedHtml(selectedCost));
    if(eRegulations.isRTL) {
        var currentCostInput = hypoTd.find("input.editableValue");
        var translatedValueString = "";
        var test = currentCostInput.val();
        var currentValueString = currentCostInput.val().toString();
        translatedValueString = currentValueString.replace(/\d/g, function (v) {
            if (numeralMap[v]) {
                return String.fromCharCode(numeralMap[v].charCodeAt(0));
            }
        });
        currentCostInput.val(translatedValueString);
      }
    $("input.editableValue", hypoTd).focus();
    $("input.editableValue", hypoTd).focus();
    formatCurrency($("input.editableValue"));
    $("input.editableValue").on({
        keyup: function () {
            formatCurrency($(this));
        },
        blur: function () {
            formatCurrency($(this), "blur");
        }
    });
    return false;

});


$costHypotesis.on('click', '.calculateCost', function (e) {

    //console.log('calculateCost');
    e.preventDefault();
    var hypoTd = $(this).closest("td");
    var costId = $(this).attr("data-costId");
    var costUnit = $(this).closest(".cost").find(".costCalculatedUnit").first().text();
    var costInput = $(this).closest("td").find(".editableValue[data-costId='" + costId + "']");
    var costInputValue = costInput.val().replace(/[^0-9.-]+/g, "");
    var currentValue = parseFloat(costInput.val().replace(/[^0-9.-]+/g, ""));
    var costInputValueArabic = "";

    if(eRegulations.isRTL) {
        var costInputValueString = costInputValue.toString();

        for (var i = 0; i < costInputValueString.length; i++) {
            if (costInputValueString.charAt(i) == ".") {
                costInputValueArabic += ".";
            }
            for (var key in numeralMap) {
                if(costInputValueString.charAt(i) == numeralMap[key]) {
                costInputValueArabic += key;
                }

            }
      }
    } else {
      costInputValueArabic = costInputValue;
    }
    costInput.attr("data-value", costInputValueArabic);

    if (validateInput(costInputValueArabic)) {
        costInput.removeClass("error");

        var costValue = parseFloat(costInput.attr("data-costValue").replace(/[^0-9.-]+/g, "")),
            costOperator = costInput.attr("data-costOperator");
        var newCalculatedValue = 0;
        if (costOperator === "multiply") {
            newCalculatedValue = costValue * costInputValueArabic;
        }
        else {
            if (costOperator === "percentage") {
                newCalculatedValue = costValue * costInputValueArabic / 100;
            }
        }

        var newCalculatedValueString = newCalculatedValue.formatMoney(2, ',', '.');


        $(".costCalculatedVal[data-costId='" + costId + "']").html(newCalculatedValueString);
        $(".costCalculatedVal[data-costId='" + costId + "']").attr("data-value", newCalculatedValueString);

        var selectedCost = {};

        selectedCost.initialAverageValue = parseFloat(costInputValueArabic).formatMoney(2, ',', '.');
        selectedCost.costOperator = costOperator;
        selectedCost.costValue = parseFloat(costValue).toFixed(2);
        selectedCost.editableFieldId = costId;
        selectedCost.param = costInput.closest("td").find(".hypoLabel").text();

        //calculate total step cost
        //console.log('costUnit: ' + costUnit);
        calculateTotalStepCosts(costUnit);
        var template = $("#averageCostReadOnlyTmpl").html();
        var templatedHtml = _.template(template);
        hypoTd.html(templatedHtml(selectedCost));
        // turn input into arabic numerals
        if(eRegulations.isRTL) {
          changeNumerals()
        }
    } else {
        //red
        costInput.addClass("error");
    }

});

$costHypotesis.on('click', '.cancelCalculation', function (e) {
    e.preventDefault();
    var hypoTd = $(this).closest("td"),
        currentCostEl = hypoTd.find(".editableValue");
    //change to edit mode
    var selectedCost = {};

    selectedCost.initialAverageValue = parseFloat(currentCostEl.attr("data-initialavgvalue").replace(/[^0-9.-]+/g, "")).formatMoney(2, ',', '.');
    selectedCost.costOperator = currentCostEl.attr("data-costOperator");
    selectedCost.costValue = parseFloat(currentCostEl.attr("data-costValue").replace(/[^0-9.-]+/g, "")).toFixed(2);
    selectedCost.param = currentCostEl.closest("td").find(".hypoLabel").text();
    selectedCost.editableFieldId = currentCostEl.attr("data-costId");

    var template = $("#averageCostReadOnlyTmpl").html();

    var templatedHtml = _.template(template);
    hypoTd.html(templatedHtml(selectedCost));
    // turn input into arabic numerals
    if (eRegulations.isRTL) {
        changeNumerals()
    }
    return false;

});

$(".closeCostDetails").on("click", function () {
    $("a.costDetailsPop").popover("hide");
    return false;

});

$(".closeTimeframeDetails").on("click", function () {
    $("a.timeFrameDetails").popover("hide");
    return false;

});

function validateInput(val) {
    var trimmedVal = $.trim(val);
    return isNaN(trimmedVal / 1) !== true;
}

$("input.editableValue").on("keydown", function (e) {
    //esc
    if ((e.charCode || e.keyCode) === 13) {
        var currentRow = $(this).closest("tr");
        var buttonToClick = $(".calculateCost", currentRow);
        buttonToClick.trigger("click");
        return false;
    }
    //enter
    else if ((e.charCode || e.keyCode) === 27) {
        var currentRow = $(this).closest("tr");
        var buttonToClick = $(".cancelCalculation", currentRow);
        buttonToClick.trigger("click");
        return false;
    }
});

function openStepFeedback(that, language, mode, mid, rid, stepid) {
    var contextUrl = curUrl;
    if (mode > 0) {
        contextUrl = contextUrl.replace('index.aspx', 'page1.aspx');
        contextUrl = contextUrl + '?lang=' + language;
        contextUrl = contextUrl + '&showObjectives=' + DisplayObjectTree;
        contextUrl = contextUrl + '&id=' + rid;
        contextUrl = contextUrl + '&sectionid=' + mid;
        contextUrl = contextUrl + '&stepid=' + stepid;
        contextUrl = contextUrl + '&type=' + mode + '&sendFromStep=true';
    }
    hs.htmlExpand(that, {
        src: contextUrl,
        objectLoadTime: 'before',
        objectType: 'iframe',
        //wrapperClassName: 'feedbackHighSlideWrapper',
        dimmingOpacity: 0.75,
        width: 800,
        height: 550,
        align: 'center',
        dragByHeading: false
    });
    return false;
}

function printPage(that) {
    hs.htmlExpand(that, {
        width: 550,
        height: 250,
        top: 10,
        dimmingOpacity: 0.75,
        contentId: 'hgContent'
    });
    return false;
}

function switchReqsInit() {
  $(".switchers .reqSwitcher").each(function() {
    var elId = $(this).attr('id');
    var switchType = parseInt(elId.match(/\d+$/)[0], 10);
    switchReqs(switchType);
  });
}

function switchReqs(type) {
    if (!($('#reqSwitcher' + type).hasClass('reqSwitcherOn'))) {
        $('#reqSwitcher' + type).addClass('reqSwitcherOn');
        $('.grp' + type).show();
    } else {
        var canTurnOff = true;
        if (type === '11' && !($('#reqSwitcher12').hasClass('reqSwitcherOn'))) {
            canTurnOff = false
        }
        if (type === '12' && !($('#reqSwitcher11').hasClass('reqSwitcherOn'))) {
            canTurnOff = false
        }
        if (canTurnOff) {
            $('.grp' + type).hide();
            $('#reqSwitcher' + type).removeClass('reqSwitcherOn');
        }
    }
    if (!($('#reqSwitcher11').hasClass('reqSwitcherOn'))) {
        $('.grp11').hide();
    }
    if (!($('#reqSwitcher12').hasClass('reqSwitcherOn'))) {
        $('.grp12').hide();
    }
    return false;
}

switchReqsInit();
switchReqs(DefaultRequirementsOption);

//switch contacts
function switchContact(type, source) {
    //hide all
    $('.regional-' + source).hide();
    $('.contact-switcher-' + type).toggleClass('reqSwitcherOn');
    //show the ones with switcher on
    $('.contactSwitcher.reqSwitcherOn').each(function (switcher) {
        var regionSelector = $(this).attr('id').replace('contact-switcher-', '');
        $('.region-' + regionSelector).show();
    });
    return false;
}

//init contacts
$('.contactSwitcher.contact').removeClass('reqSwitcherOn');
$('.regional-contact').hide();
$('.regional-rec-contact').hide();
//change status links
$("#linkChangeStatus").on("click", function () {

    $("#changeStatus").show();
});
$("#linkcancelChangeStatus").on("click", function () {
    $("#changeStatus").hide();
});

//stepList section
window.initTickets = function () {
    var section = $("#stepListReviews").data("section");
    var apiTicketUrl = "/api/ticket/";
    $.getJSON(apiTicketUrl + stepListPageId + "/" + section + "/" + (MenuId || null) + "/" + ProcedureId + "/0",
        function (data) {
            var reviews = new TicketList();
            if (data !== null) {
                reviews.add(data);
            }
            var listView = new TicketListView({ collection: reviews, el: "#stepListReviews" });
        })
        .fail(
            function (jqXHR, textStatus, err) {
                $("#errorsPane").html("<span class='error'>" + err + "</span>").show();
            });
    //step sections
    $("div.stepDet").each(function (i, div) {
        var divId = $(div).attr("id");
        var divSection = $(div).data("section");

        $.getJSON(apiTicketUrl + pageId + "/" + divSection + "/" + (MenuId || null) + "/" + ProcedureId + "/" + StepId,
            function (data) {
                var reviews = new TicketList();
                if (data !== null) {
                    reviews.add(data);
                }
                var listView = new TicketListView({ collection: reviews, el: "#" + divId });
            })
            .fail(
                function (jqXHR, textStatus, err) {
                    $("#errorsPane").html("<span class='error'>" + err + "</span>").show();
                });
    });

};;
