﻿
function addSeparatorsNF(nStr, inD, outD, sep) {
    nStr += '';
    var dpos = nStr.indexOf(inD);
    var nStrEnd = '';
    if (dpos != -1) {
        nStrEnd = outD + nStr.substring(dpos + 1, nStr.length);
        nStr = nStr.substring(0, dpos);
    }
    var rgx = /(\d+)(\d{3})/;
    while (rgx.test(nStr)) {
        nStr = nStr.replace(rgx, '$1' + sep + '$2');
    }
    return nStr + nStrEnd;
}

/* MAIN ENTRY POINT */
jQuery(document).ready(function() {
    Init();
});

/* METHODS */

function Init() {
    InitSlider();
}

function CenterSlider() {
    var min = GetSliderMin();
    var max = GetSliderMax();
    var center = min + Math.round((max - min) / 2);
    SetSliderValue(center);
    SetAmount(center);
}

var slideStart = new Date().getTime();
function InitSlider() {
    jQuery("#slider").slider({
        change: function(event, ui) {
            SetAmount(ui.value);
            CalculatePremium();
            UpdateSliderStep(this);
            SetMaxIndemnificationAmount(GetSliderValue());
        },
        slide: function(event, ui) {
            SetAmount(ui.value);
            UpdateSliderStep(this);
            SetMaxIndemnificationAmount(GetSliderValue());

            if (slideStart <= new Date().getTime() - 100) {
                CalculatePremium();
                slideStart = new Date().getTime();
            }
        },
        start: function(event, ui) {
            // UpdateSliderStep(this);
        },
        step: 100
    });

    UpdateBoundaries(true);
}

function SetMaxIndemnificationAmount(value) {
    value = value * 12;
    value = addSeparatorsNF(value, null, null, ' ');
    jQuery(".maxIndemnificationAmount").html(value);
    jQuery(".maxIndemnificationInterval").html(jQuery(".SingleAsSpanDropDown").next("span").html());
}

function UpdateSliderStep(slider) {
    var sliderValue = GetSliderValue();
    var step = CalculateStep(sliderValue);
    jQuery(slider).slider("option", "step", step);
}

function CalculateStep(sliderValue) {
    var sliderStep = GetSliderStep();
    sliderValue += sliderStep;
    if (sliderValue > 0 && sliderValue <= 2500)
        return 100;
    else if (sliderValue > 2500 && sliderValue <= 5000)
        return 500;
    else if (sliderValue > 5000)
        return 1000;
}

function CalculatePremium() {

    var value = jQuery("table.tariffDimensions input[type!=hidden]:first").val(value);
    if (value == SetValueToSliderRange(value)) {
        jQuery.ajax({
            type: "POST",
            dataType: "json",
            data: "{'dimensionList':'" + GetDimensionData() + "', 'packageId':'" + GetPackageId_() + "', 'partnername' :'" + GetPartnerName_() + "'}",
            contentType: "application/json; charset=utf-8",
            url: "/Services/PremiumCalcService.asmx/CalculateInsuranceInfo",
            success: function(msg) {
                
                jQuery(".lblValError").hide();
                jQuery(".cost").html(msg.d);
            },
            error: function(XMLHttpRequest, textStatus, errorThrown) {
                
            }
        });
    }
    else {
        jQuery(".lblValError").show();
        jQuery(".highLightValue").html("-");
    }
}

function UpdateBoundaries(init) {

    jQuery.ajax({
        type: "POST",
        dataType: "json",
        data: "{'dimensionList':'" + GetDimensionData() + "', 'packageId':'" + GetPackageId_() + "', 'partnername' :'" + GetPartnerName_() + "'}",
        contentType: "application/json; charset=utf-8",
        url: "/Services/PremiumCalcService.asmx/GetBoundaries",
        success: function(msg) {
            var boundaries = (msg.d).split('|');
            SetSliderMax(boundaries[1] * 1);
            SetSliderMin(boundaries[0] * 1);

            var value = GetSliderValue();
            value = SetValueToSliderRange(value);

            if (value != null) {
                SetAmount(value);
                SetSliderValue(value);
                SetMaxIndemnificationAmount(GetSliderValue());
            }
            CalculatePremium();
        },
        error: function(XMLHttpRequest, textStatus, errorThrown) {
            //alert("error: " + XMLHttpRequest.toString())
        }
    });
}

// Returns querystring parameter value by name
function getParameterByName(name) {
    name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
    var regexS = "[\\?&]" + name + "=([^&#]*)";
    var regex = new RegExp(regexS);
    var results = regex.exec(window.location.href);
    if (results == null)
        return "";
    else
        return results[1];
}

function GetPartnerName_() {
    return GetPartnerName()
}

function GetPackageId_() {
    return GetPackageId()
}

function GetDimensionData() {
    var dimensions = new Array();
    jQuery.each(jQuery("table.tariffDimensions input[type!=hidden]"), function(index, value) {
        dimensions[index] = jQuery(value).val().replace(' ', '');
    });
    return dimensions.join('|');
}


/*  EVENTS  */

var intervalId = 0;

var amountTypeStart;

function BindAmount_KeyDown() {
    jQuery("table.tariffDimensions input[type=text]:first").keydown(function(event) {
        
        var functionalKeys = new Array(46, 37, 39, 36, 35, 8, 9);
        var keyValue = String.fromCharCode(event.which);
        var re = new RegExp("^[0-9]{0,20}$");
        var isFunctionalKey = jQuery.inArray(event.keyCode, functionalKeys) != -1;
        if (!isFunctionalKey && re.exec(keyValue) == null) {
            event.preventDefault();
        }
        amountTypeStart = new Date().getTime();
    });

    setInterval(function() {
        var currentTime = new Date().getTime();
        if (amountTypeStart != null && amountTypeStart + 300 < currentTime) {
            var txt = jQuery("table.tariffDimensions input[type=text]:first");
                              
            if (GetSliderValue() != jQuery(txt).val()) {
                SetSliderValue(jQuery(txt).val());
                CalculatePremium();
            }
            amountTypeStart = new Date().getTime();
        }
    }, 100);
}

function BindAmount_KeyUp() {
    jQuery("ctl00_mainContentRight_PremiumCalculator_tariffDim_1").keyup(function(event) {
        
    });
}

function IsValueInSliderRange(value) {
    return (value * 1) >= (GetSliderMax() * 1)  &&  (value * 1) < (GetSliderMin() * 1);
}

function SetValueToSliderRange(value) {
    value = (value * 1) > (GetSliderMax() * 1) ? GetSliderMax() : (value * 1) < (GetSliderMin() * 1) ? GetSliderMin() : value;
    return value;
}


// Change event handler for all child textboxes of tariffContainer except the last
function BindTariffTxt_Change() {
    jQuery("table.tariffDimensions input[type=text] :not(:last-child)").change(function() {
            CalculatePremium();
    });
}

// Key down event handler for all child textboxes of tariffContainer except the last
function BindTariffTxt_KeyDown() {
    jQuery("table.tariffDimensions input[type=text] :not(:last-child)").keydown(function(event) {
        if (event.keyCode == '13') {
            event.preventDefault();
            CalculatePremium();
        }
    });
}

// Change event handler for all child drop down lists of tariffContainer
function BindTariffSel_Change() {
    jQuery("table.tariffDimensions select").change(function() {
        UpdateBoundaries(false);
    });
}

/* PROPERTIES */

function GetSliderStep() {
    return jQuery("#slider").slider("option", "step");
}

function GetSliderValue() {
    var value = jQuery("#slider").slider('option', 'value');
    return value;
}

function SetSliderValue(value) {
    jQuery("#slider").slider('option', 'value', value);
}

function GetSliderMax() {
    var max = jQuery("#slider").slider('option', 'max');
    return max;
}

function GetSliderMin() {
    var min = jQuery("#slider").slider('option', 'min');
    return min;
}

function SetSliderMax(value) {
    jQuery("#slider").slider('option', 'max', value);
    value = addSeparatorsNF(value, null, null, ' ');
    jQuery("#upperBound").html(value);
}

function SetSliderMin(value) {
    jQuery("#slider").slider('option', 'min', value);
    value = addSeparatorsNF(value, null, null, ' ');
    jQuery("#lowerBound").html(value);
}

function GetAmount() {
    return jQuery("#ctl00_mainContentRight_PremiumCalculator_tariffDim_1").val();
}

function SetAmount(value) {
    value = addSeparatorsNF(value, null, null, ' ');
    jQuery("#ctl00_mainContentRight_PremiumCalculator_tariffDim_1").val(value);
}

