﻿function updatePricesWithOptionalExtrasPanel(radioobj, optionalextraid, groupclass, livalue, monthlydisplaypremium, displaypremium, bundledopexidtoreplace) {
    var optionalextrasradioinsimilarpolicyoptiongroupimage = radioobj.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.getElementsByTagName("img")[0];
    
    //Set grouped Premium spans to no cover
    var optionalextraspansinsimilarpolicyoptiongroup = getElementsByClass(document.documentElement, "group" + groupclass, "span");
    for (var i = 0; i < optionalextraspansinsimilarpolicyoptiongroup.length; i++) {
        optionalextraspansinsimilarpolicyoptiongroup[i].innerHTML = " ";
    }
    
    if (livalue == "y") {
        uncheckOptionalExtrasPanelInSimilarPolicyOptionGroup(groupclass, radioobj.id);
        optionalextrasradioinsimilarpolicyoptiongroupimage.setAttribute("src", buttondirectory + "tick.gif");
        optionalextrasradioinsimilarpolicyoptiongroupimage.setAttribute("alt", "cover");
        //Set Premium spans with premiums
        var opexmonthlypremiumspan = document.getElementById("opexmonthlypremium" + optionalextraid);
        if (opexmonthlypremiumspan) {
            opexmonthlypremiumspan.innerHTML = "&#163;" + monthlydisplaypremium;
        }
        var opexonepaymentspan = document.getElementById("opexonepayment" + optionalextraid);
        if (opexonepaymentspan) {
            opexonepaymentspan.innerHTML = "&#163;" + displaypremium;
        }
    }
    else {
        optionalextrasradioinsimilarpolicyoptiongroupimage.setAttribute("src", buttondirectory + "cross.gif");
        optionalextrasradioinsimilarpolicyoptiongroupimage.setAttribute("alt", "no cover");
        var optionalextrapanelitemselectedsectiondiv = radioobj.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode;
        var errormessagediv = getElementsByClass(optionalextrapanelitemselectedsectiondiv, "errormessage", "div")[0];
        if (errormessagediv.className == "errormessage") {
            errormessagediv.className = "errormessage hide";
        }
    }

    var runningTotal = parseFloat(policypremium) + parseFloat(bundledopextotal);

    //Loop through each optional extra row in the repeater
    var optionalExtraRows = getElementsByClass(document, "optionalextraspanelrepeateritem", "div");
    for (var j = 0; j < optionalExtraRows.length; j++) {
        var optionalextrapanelitemselectedsections = getElementsByClass(optionalExtraRows[j], "optionalextrapanelitemselectedsection", "div");
        if (optionalextrapanelitemselectedsections.length > 0) {
            var optionalextrapanelitemselectedsection = optionalextrapanelitemselectedsections[0];
            var hdnselectedoptionalextraids = document.getElementById(hiddenselectedoptionalextraids);
            //only add opex if bundled or selectable
            if (getElementsByClass(optionalextrapanelitemselectedsection, "opexid", "input").length > 0) {
                var addPremium = false;
                var addId = false;
                var opexid = getElementsByClass(optionalextrapanelitemselectedsection, "opexid", "input")[0].value;
                for (var k = 0; k < optionalextrapanelitemselectedsection.getElementsByTagName("input").length; k++) {
                    var input = optionalextrapanelitemselectedsection.getElementsByTagName("input")[k];
                    //Get the radio button
                    if (input.type.toLowerCase().match(/radio/g)) {
                        if (input.value == "y" && input.checked == true) {
                            addPremium = true;
                            addId = true;
                        }
                    }
                }

                if (addPremium == true) {
                    runningTotal += eval(getElementsByClass(optionalextrapanelitemselectedsection, "opexonepaymentamount", "input")[0].value);
                }

                if (addId == true) {
                    //Add to _hdnSelectedOptionalExtraIDs
                    if (hdnselectedoptionalextraids.value.indexOf(opexid + ",") == -1) {
                        hdnselectedoptionalextraids.value += opexid + ",";
                    }
                }
                else {
                    //Remove from _hdnSelectedOptionalExtraIDs
                    if (hdnselectedoptionalextraids.value.indexOf(opexid + ",") >= 0) {
                        hdnselectedoptionalextraids.value = hdnselectedoptionalextraids.value.replace(opexid + ",", "");
                    }
                }
            }
        }
    }

    if (livalue == "y" && bundledopexidtoreplace != 0) {
        //Remove from _hdnSelectedOptionalExtraIDs
        if (hdnselectedoptionalextraids.value.indexOf("'" + bundledopexidtoreplace + "',") >= 0) {
            hdnselectedoptionalextraids.value = hdnselectedoptionalextraids.value.replace("'" + bundledopexidtoreplace + "',", "");
        }
    }

    var n = parseFloat(runningTotal);
    var roundedRunningTotal = n.toFixed(2);

    //Show totals
    if (document.getElementById("spnPremiumOnePayment")) {
        document.getElementById("spnPremiumOnePayment").innerHTML = "&#163;" + roundedRunningTotal;
    }
    if (document.getElementById("spnOnePaymentAlternate")) {
        document.getElementById("spnOnePaymentAlternate").innerHTML = roundedRunningTotal;
    }
    var myInstalmentDetails = new InstalmentDetails();
    myInstalmentDetails.calculate(roundedRunningTotal);
    if (document.getElementById("spnDepositInPound")) {
        document.getElementById("spnDepositInPound").innerHTML = myInstalmentDetails.roundedDeposit;
    }
    if (document.getElementById("spnAmountInPound")) {
        document.getElementById("spnAmountInPound").innerHTML = myInstalmentDetails.roundedMonthlyPremium;
    }
    if (document.getElementById("spnTotalPriceMonthly")) {
        document.getElementById("spnTotalPriceMonthly").innerHTML = "&#163;" + myInstalmentDetails.roundedMonthlyPremium;
    }
}

function isAnyOptionalExtraSelectedInSimilarPolicyOptionGroup(cssclass) {
    var anyChecked = false;
    var optionalextrasinsimilarpolicyoptiongroup = getElementsByClass(document.documentElement, cssclass, "input");
    for (var i = 0; i < optionalextrasinsimilarpolicyoptiongroup.length; i++) {
        if (optionalextrasinsimilarpolicyoptiongroup[i].checked == true) {
            anyChecked = true;
        }
    }
    return anyChecked;
}

//InstalmentDetails class with calculate method
function InstalmentDetails() {
    this.roundedDeposit = 0;
    this.roundedMonthlyPremium = 0;
    this.calculate = function(roundedRunningTotal) {
        //Calculate deposit and monthly amount
        if (cdlpaymentcalculation == "15PercentOfPremiumAndOptionalExtras") {
            var deposit = parseFloat(roundedRunningTotal * (depositpercentage / 100));
            this.roundedDeposit = deposit.toFixed(2);
            var remainder = roundedRunningTotal - this.roundedDeposit;
            var monthlyPremium = parseFloat((remainder * balancemultiplier) / numberofpayments);
            this.roundedMonthlyPremium = monthlyPremium.toFixed(2);
        }
    };
}

function uncheckOptionalExtrasPanelInSimilarPolicyOptionGroup(groupclass, radioobjid) {
    //radio buttons are within a radiobuttonlist that renders as a table, the groupclass is set on the table
    var optionalextraspaneltableinsimilarpolicyoptiongroup = getElementsByClass(document.documentElement, groupclass, "");
    for (var i = 0; i < optionalextraspaneltableinsimilarpolicyoptiongroup.length; i++) {
        var optionalextrasradioinsimilarpolicyoptiongroup = optionalextraspaneltableinsimilarpolicyoptiongroup[i].getElementsByTagName("input");
        if (optionalextrasradioinsimilarpolicyoptiongroup[0].id != radioobjid) {
            optionalextrasradioinsimilarpolicyoptiongroup[1].checked = true;
        }
        var currentoptionalextrasradioinsimilarpolicyoptiongroupimage = optionalextraspaneltableinsimilarpolicyoptiongroup[i].parentNode.parentNode.getElementsByTagName("img")[0];

        currentoptionalextrasradioinsimilarpolicyoptiongroupimage.setAttribute("src", buttondirectory + "cross.gif");

        var optionalextrapanelitemselectedsectiondiv = optionalextraspaneltableinsimilarpolicyoptiongroup[i].parentNode.parentNode.parentNode;
        
        var errormessagediv = getElementsByClass(optionalextrapanelitemselectedsectiondiv, "errormessage", "div")[0];
        if (errormessagediv.className == "errormessage") {
            errormessagediv.className = "errormessage hide";
        }
    }
}

function getOptionalExtrasSelectedCount() {
    var hdnselectedoptionalextraids = document.getElementById(hiddenselectedoptionalextraids);
    var hdnisincludedininitialpriceoptionalextraids = document.getElementById(hiddenisincludedininitialpriceoptionalextraids);
    var selectedoptionalextraids = '';
    if (hdnisincludedininitialpriceoptionalextraids.value != "" && hdnselectedoptionalextraids.value.indexOf(hdnisincludedininitialpriceoptionalextraids.value) == -1) {
        selectedoptionalextraids += hdnisincludedininitialpriceoptionalextraids.value;
    }
    if (hdnselectedoptionalextraids.value != "") {
        selectedoptionalextraids += hdnselectedoptionalextraids.value;
    }
    if (selectedoptionalextraids.length > 0) {
        //remove trailing comma
        var hdnselectedoptionalextraidsvalue = selectedoptionalextraids.replace(/\,$/, '');
        var hdnselectedoptionalextraidsarr = hdnselectedoptionalextraidsvalue.split(",");
        return hdnselectedoptionalextraidsarr.length;
    }
    else {
        return 0;
    }
}

function validateThreeOpex(sender, args) {
    if (getOptionalExtrasSelectedCount() <= 3) {
        args.IsValid = true;
    }
    else {
        args.IsValid = false;
        self.location = '#errormessages';
    }
}

function validate_readQuoteTermsOfTrade(sender,args) {
    if (document.getElementById(readquotetermsoftradeid).checked == true) {
        args.IsValid = true;
    }
    else {
        args.IsValid = false;
        self.location = '#errormessages';
    }
}

function validate_readRenewalTermsOfTrade(sender,args) {
    if (document.getElementById(readrenewaltermsoftradeid).checked == true) {
        args.IsValid = true;
    }
    else {
        args.IsValid = false;
    }
}

function validateAllOpexSelected(sender, args) {
    //check that every optional extra is on cover or not and if neither is selected, display the error
    var alloptionalextrasselected = true;
    var optionalextrapanelitemselectedsections = getElementsByClass(document.documentElement, "optionalextrapanelitemselectedsection", "");
    for (var i = 0; i < optionalextrapanelitemselectedsections.length; i++) {
        var optionalextrapanelitemselectedsectionradios = optionalextrapanelitemselectedsections[i].getElementsByTagName("input");
        var optionalextraselected = false;
        for (var j = 0; j < optionalextrapanelitemselectedsectionradios.length; j++) {
            if (optionalextrapanelitemselectedsectionradios[j].type.toLowerCase().match(/radio/g)) {
                if (optionalextrapanelitemselectedsectionradios[j].checked == true) {
                    optionalextraselected = true;
                }
            }
        }
        var errormessagediv = getElementsByClass(optionalextrapanelitemselectedsections[i], "errormessage", "div")[0];
        if (optionalextraselected == false) {
            alloptionalextrasselected = false;
            if (errormessagediv.className == "errormessage hide") {
                errormessagediv.className = "errormessage";
                getElementsByClass(optionalextrapanelitemselectedsections[i], "optionalExtraPanelSelectedImageChoice", "div")[0].getElementsByTagName("img")[0].setAttribute("src", buttondirectory + "questionmark.gif");
            }
        }
        else {
            if (errormessagediv.className == "errormessage") {
                errormessagediv.className = "errormessage hide";
            }
        }
    }

    args.IsValid = alloptionalextrasselected;
    if (!alloptionalextrasselected) {
        self.location = '#errormessages';
    }
}
