//Actioncode:
function document_onready_actioncode(chk_actioncodeEl, actioncodeEl) {
    actioncode_onchange(chk_actioncodeEl, actioncodeEl);
}

function actioncode_onchange(chk_actioncodeEl, actioncodeEl) {
    var hiddenActioncode    = actioncodeEl.children("input[name='formpartcode']:first");
    var postfix = "_hide";
    var postfixRegex = new RegExp(postfix, 'gi');

    if (chk_actioncodeEl.attr("checked")) {
        actioncodeEl.attr("style","display:block");

        //fix form and repair validations:
        var val = hiddenActioncode.val();
        hiddenActioncode.val(val.replace(postfixRegex, ""));
    } else {
        actioncodeEl.attr("style","display:none");

        //prevent submit from serverside validations:
        hiddenActioncode.val(hiddenActioncode.val() + postfix);
    }
}

//Terminate:
function document_onready_terminate(chk_terminateEl, terminateEl) {
    terminate_onchange(chk_terminateEl, terminateEl);
}

function terminate_onchange(chk_terminateEl, terminateEl) {
    var hiddenTerminate = terminateEl.children("input[name='formpartcode']:first");
    var postfix = "_hide";
    var postfixRegex = new RegExp(postfix, 'gi');

    if (!chk_terminateEl.attr("checked")) {
        terminateEl.attr("style","display:block");

        // fix form and repair validations:
        var val = hiddenTerminate.val();
        hiddenTerminate.val(val.replace(postfixRegex, ""));
    } else {
        terminateEl.attr("style","display:none");

        //prevent submit from serverside validations:
        hiddenTerminate.val(hiddenTerminate.val() + postfix);
    }
}

//Cendris:
function document_onready(countryEl, zipcodeEl, housenumberEl, streetEl, residenceEl, valueNL) {
    country_onchange(countryEl, zipcodeEl, housenumberEl, streetEl, residenceEl, valueNL);
}

function country_onchange(countryEl, zipcodeEl, housenumberEl, streetEl, residenceEl, valueNL){
    if (countryEl.length != 0 && streetEl.length != 0 && residenceEl.length != 0) {
        if (countryEl.val().toUpperCase() == valueNL) {
            residenceEl.attr("readOnly","true");
            streetEl.attr("readOnly","true");
        } else {
            streetEl.removeAttr("readOnly");
            residenceEl.removeAttr("readOnly");
        }
        lookupAddress(countryEl, zipcodeEl, housenumberEl, streetEl, residenceEl, valueNL);
    }
}

function zipcode_onblur(zipcodeEl) {
    if (zipcodeEl) {
        zipcodeEl.val(formatZipcode(zipcodeEl.val()));
    }
}

function lookupAddress(countryEl, zipcodeEl, housenumberEl, streetEl, residenceEl, valueNL) {

    if (countryEl.length != 0 && countryEl.val() == valueNL) {




        var xmlhttp;
        if (streetEl.length != 0 && residenceEl.length != 0 && zipcodeEl.length != 0 && housenumberEl.length != 0) {
            var zipcode = zipcodeEl.val();
            var housenumber = housenumberEl.val();

            if (zipcode != "" && housenumber != "" && validZipcode(zipcode) && validHousenumber(housenumber)) {
                if (window.XMLHttpRequest) {
                    // code for IE7+, Firefox, Chrome, Opera, Safari
                    xmlhttp = new XMLHttpRequest();
                } else if (window.ActiveXObject) {
                    // code for IE6, IE5
                    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
                }
                else {
                    alert("Your browser does not support XMLHTTP!");
                }

                //Add the spinner
                var spinner = $( '<span class="spinner" style="display:block"><img src="/static/freestyle/sites/salland/_images/read-only.gif" width="16" height="16" /></span>' );
                streetEl.after(spinner);

                var url = "/web/wcbservlet/com.gxwebmanager.solutions.cendris.cendrisservlet.servlet?zipcode=" + zipcode + "&housenumber=" + housenumber;
                xmlhttp.onreadystatechange = _stateChanged;
                xmlhttp.open("GET", url, true);
                xmlhttp.send(null);
            }
        }
    }

  function _stateChanged() {
    if (xmlhttp.readyState == 4) {
      _completeAddress(xmlhttp.responseText);
    }
  }

  function _completeAddress(response) {
    //First remove spinner
      //alert('must remove spinner..');
      if( spinner ) spinner.remove();

    var status;
    var street;
    var residence;
    try {
      var browserName = navigator.appName;
      var xmlDoc;
      if (browserName == "Microsoft Internet Explorer") {
          xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
          xmlDoc.async="false";
          xmlDoc.loadXML(response);

          status = getZipcodeCheckValueIE(xmlDoc, "status");
          street = getZipcodeCheckValueIE(xmlDoc, "straatnaam");
          residence = getZipcodeCheckValueIE(xmlDoc, "woonplaats");
      } else {
          //Firefox, Mozilla, Opera, etc.
          var parser = new DOMParser();
          xmlDoc = parser.parseFromString(response,"text/xml");

          status = getZipcodeCheckValue(xmlDoc, "status");
          street = getZipcodeCheckValue(xmlDoc, "straatnaam");
          residence = getZipcodeCheckValue(xmlDoc, "woonplaats");
      }
    } catch(e) {
      // alert(e.message);
      return;
    }



    if (status == 1) {
      streetEl.val(street);
      residenceEl.val(residence);

      residenceEl.attr("readOnly","true");
      streetEl.attr("readOnly","true");

      streetEl.addClass("grey");
      residenceEl.addClass("grey");
    } else {
      // Enable street and residence
      streetEl.removeClass("grey");
      streetEl.removeAttr("readOnly");

      residenceEl.removeClass("grey");
      residenceEl.removeAttr("readOnly");
    }
  }
}

function formatZipcode(zipcode) {
    zipcode = zipcode.replace(/\s+/g, '');
    return zipcode;
}

function validZipcode(value) {
    return /^[1-9]{1}[0-9]{3}[a-zA-Z]{2}$/.test(value);
}

function validHousenumber(value) {
    return /^[0-9]+$/.test(value);
}

function getZipcodeCheckValue(xmlDoc, name) {
    var node = xmlDoc.evaluate("//member[name = '" + name + "']/value/string", xmlDoc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null );
    return node.singleNodeValue.textContent;
}

function getZipcodeCheckValueIE(xmlDoc, name) {
    xmlDoc.setProperty('SelectionLanguage', 'XPath');
    var node = xmlDoc.selectSingleNode("//member[name = '" + name + "']/value/string")
    var value = node.text;
    return value;
}

//Apply form:
function document_onready_applysubform(insuredLastnameEl, subformEl){
    var display = "display:block";
    if (insuredLastnameEl.val() == "") {
        subformEl.html("");
        subformEl.hide();
    } else {
        // Subforms will be displayed.
    }
}

function nationality_onchange(nationalityEl,
                    permitTypeEl, permitNumberEl, permitEnddateEl,
                    dfltNationality) {
    if (!dfltNationality) {
        dfltNationality = "nederlands";
    }

    var display = "display:block";
    var hiddenPermitType    = permitTypeEl.children("input[name='formpartcode']:first");
    var hiddenPermitNumber  = permitNumberEl.children("input[name='formpartcode']:first");
    var hiddenPermitEnddate = permitEnddateEl.children("input[name='formpartcode']:first");
    var postfix = "_hide";

    if (dfltNationality.toLowerCase() == nationalityEl.val().toLowerCase()) {
            //hide input-fields
            display = "display:none";

            //prevent submit from serverside validations:
            hiddenPermitType.val(hiddenPermitType.val() + postfix);
            hiddenPermitNumber.val(hiddenPermitNumber.val() + postfix);
            hiddenPermitEnddate.val(hiddenPermitEnddate.val() + postfix);
    } else {
        //fix form and repair validations:
        var val = "";

        val = hiddenPermitType.val();
        hiddenPermitType.val(val.replace(postfix, ""));

        val = hiddenPermitNumber.val();
        hiddenPermitNumber.val(val.replace(postfix, ""));

        val = hiddenPermitEnddate.val();
        hiddenPermitEnddate.val(val.replace(postfix, ""));
    }
    permitTypeEl.attr("style", display);
    permitNumberEl.attr("style", display);
    permitEnddateEl.attr("style", display);
}

function currentInsurer_onchange(currentInsurerEl, enddateCurrentInsuranceEl, motiveTerminationEl, dfltNoInsurance) {
    if (!dfltNoInsurance) {
        dfltNoInsurance = "geen";
    }

    var display = "display:block";
    var hiddenEndDate   = enddateCurrentInsuranceEl.children("input[name='formpartcode']:first");
    var hiddenMotive    = motiveTerminationEl.children("input[name='formpartcode']:first");
    var postfix = "_hide";

    if (dfltNoInsurance.toLowerCase() == currentInsurerEl.val().toLowerCase()) {
        //hide input-fields
        display = "display:none";

        //prevent submit from serverside validations:
        hiddenEndDate.val(hiddenEndDate.val() + postfix);
        hiddenMotive.val(hiddenMotive.val() + postfix);
    } else {
        //fix form and repair validations:
        var val = "";

        val = hiddenEndDate.val();
        hiddenEndDate.val(val.replace(postfix, ""));

        val = hiddenMotive.val();
        hiddenMotive.val(val.replace(postfix, ""));
    }
    enddateCurrentInsuranceEl.attr("style", display);
    motiveTerminationEl.attr("style", display);
}

//Other user-interaction handling:
function document_onready_changetype(changetypeEl, changetypeHiddenEl, dfltChangetype) {
    if (changetypeEl.length != 0 && changetypeHiddenEl.length != 0) {
        if (changetypeHiddenEl.val() == "") {
            changetypeEl.val(dfltChangetype);
        }
       /* if (changetypeEl.html().toLowerCase().indexOf(" selected") == -1) {
            changetypeEl.val(dfltChangetype);
        }*/
    }
}

function initials_onchange(initialsEl) {
    if (initialsEl.length != 0) {
        var myExpression = /[a-zA-Z]/g;
        var value = initialsEl.val();
        var valid = myExpression.test(value);
        if (valid){
            initialsEl.val((value.match(myExpression)).join("").toUpperCase());
        }
    }
}

//--------------------------------------
//Energiek:
//--------------------------------------
function initEnergiekSubform(supplementEl, excessEl) {
    setPremiumAmounts(supplementEl, excessEl);
    
    $(document).unbind('ready', initEnergiekSubform);
}

function setPremiumAmounts(supplementEl, excessEl) {
    setIsurancePremium();
    setSupplementPremium(supplementEl, false);
    setExcessPremium(excessEl);
}

function getNumberValue(value) {
    if (value == "") {
        value = 0;
    }
    
    if (isNaN(value)){
        value = value.replace(/,/g,".");
        value = value.replace(/[^\d.]/g, "");
    }
    return value;
}

function parseNumber(value) {
    var intVal = 0;
    var strVal = getNumberValue(value);
    if (!isNaN(strVal)) {
        intVal = parseFloat(strVal);
    }
    return intVal;
}

function formatCurrencyAmount(value) {
    value = value.toString().replace(/\./g,",")
    var adec = value.split(",");
    if (adec.length < 1) {
        value = value + ",00"
    } else if (adec.length > 1 && adec[1].length == 1) {
        value = value + "0";
    }
    return "&euro; " + value;
}

function getCurrentDate() {
    var curDate;
    if (energiekCurrentDate) {
        if (matches = energiekCurrentDate.match(/^(\d{2,2})-(\d{2,2})-(\d{4,4})$/)) {
            curDate = new Date(matches[3], matches[2] - 1, matches[1]); 
        }
    }
    if (curDate == undefined) {
        curDate = new Date();
    }
    return curDate;
}

function startDate() {
    var curDate;
    var startDate;
    if (energiekStartDate) {
        if (matches = energiekStartDate.match(/^(\d{2,2})-(\d{2,2})-(\d{4,4})$/)) {
            startDate = new Date(matches[3]-18, matches[2] - 1, matches[1]);
            startDate.setHours(0,0,0,0);
            return startDate;
        }
    }
    curDate = getCurrentDate();
    
    startDate = new Date();
    startDate.setFullYear((curDate.getFullYear()+1-18),0,1);
    startDate.setHours(0,0,0,0);
    return startDate;
}

function isAdult(elm) {
    var blnAdult = true;
    
    var elmParent = elm.parents("div[class^='subform-']:first");
    if (elmParent.length > 0) {
        var elmDate = elmParent.find("input[id='birthdate']");
        if (elmDate.length > 0) {
            var datevalue = elmDate.val();
            if (matches = datevalue.match(/^(\d{2,2})-(\d{2,2})-(\d{4,4})$/)) {
                var inpdate = new Date(matches[3], matches[2] - 1, matches[1]); 
                inpdate.setHours(0,0,0,0);
                var maxdate = startDate();
                var ONE_DAY = (1000 * 60 * 60 * 24);
                var diff    = (maxdate.getTime()-inpdate.getTime())/ONE_DAY;
                blnAdult    = diff >= 0;
            }
        }
    }
    return blnAdult;
}

function isParent(cursubform) {
    var blnParent = false;
    if (cursubform.length > 0) {
        var person = cursubform.find("input[id='person']:first");
        if (person.length > 0) {
            var val = person.val();
            blnParent = (val == "Uzelf" || val == "Partner");
        }
    }
    return blnParent;
}

function isPartner(cursubform) {
    var blnPartner = false;
    if (cursubform.length > 0) {
        var person = cursubform.find("input[id='person']:first");
        if (person.length > 0) {
            var val = person.val();
            blnPartner = (val == "Partner");
        }
    }
    return blnPartner;
}

//hasParentSupplement Obsolete
function hasParentSupplement() {
    var blnSuppl = false;
    var persons = $("input[id='person']");
    if (persons.length > 0) {
        var col = persons.filter("[value='Uzelf']");
        if (col.length > 0) {
            var parent = col.parents("div[class^='subform-']:first");
            if (parent.length > 0) {
                var radio = parent.find("div[class^='fieldgrp-col2'] input:radio:checked");
                if (radio.length > 0) {
                    var val = parseNumber(radio.val());
                    blnSuppl = (val > 0);
                }
            }
        }
        col = persons.filter("[value='Partner']");
        if (!blnSuppl && col.length > 0) {
            var parent = col.parents("div[class^='subform-']:first");
            if (parent.length > 0) {
                var radio = parent.find("div[class^='fieldgrp-col2'] input:radio:checked");
                if (radio.length > 0) {
                    var val = parseNumber(radio.val());
                    blnSuppl = (val > 0);
                }
            }
        }
    }
    return blnSuppl;
}

//setSupplement4Minors Obsolete
function setSupplement4Minors(){
    var persons = $("input[id='person']");
    if (persons.length > 0) {
        var col = persons.filter("[value='Kind']");
        if (col.length > 0) {
            col.each(function(){   
                var parent = $(this).parents("div[class^='subform-']:first");
                if (parent.length > 0) {
                    var radios = parent.find("div[class^='fieldgrp-col2'] input:radio");
                    if (radios.length > 0) {
                        setSupplementPremium(radios, true);
                    }
                }
            });
        }
    }
}

//Basis verzekering
function setIsurancePremium() {
     var hiddenbasic = $("#default_basicamount:first");
     var elmLabels  = $("div[class='fieldgrp-top'] div[class='formstatictext-col3'] div[class='text']:visible");
     if (hiddenbasic.length > 0 && elmLabels.length > 0) {
        var amount = getNumberValue(hiddenbasic.val());
        var premium;
                
        if (!isNaN(amount)){
            elmLabels.each(function(){
                premium = isAdult($(this))? amount: "0.00";
                var elmHidden = $(this).parent().nextAll("input[name!='formpartcode']:first");
                elmHidden.val(premium);
                $(this).html(formatCurrencyAmount(premium));
            });
        }
    }
    sumAmounts();
}

//Eigen risico:
function setExcessPremium(excessEl) {
    var premium = getNumberValue(excessEl.val());
    changePremiumByElement(excessEl, premium);
    sumAmounts();
    if (!isAdult(excessEl)) {
        excessEl.attr("disabled","disabled");
    }
}

//Aanvullende verzekering:
function setSupplementPremium(supplementEl, blnSkip) {
    var chSupplementEl = supplementEl.filter(":checked");
    var premium = getNumberValue(chSupplementEl.val());
    
    if (!isAdult(chSupplementEl)) {
        premium = "0.00";
        supplementEl.filter(":eq(1)").attr("checked","checked");
        supplementEl.attr("disabled","disabled");
        chSupplementEl = supplementEl.filter(":checked");
    }
        
    changePremiumByElement(chSupplementEl, premium);
    sumAmounts();
}

function changePremiumByElement(elm, premium) {
    var elmParent = elm.parents("div[class='fieldgrp-col2']:first");
    if (!isNaN(premium) && elmParent.length > 0) {
        var elmCol3 = elmParent.nextAll("div[class='fieldgrp-col3']:first");
        if (elmCol3.length > 0) {
            var elmLabel = elmCol3.find("div[class='text']:first");
            var elmHidden = elmCol3.find("input[name!='formpartcode']:first");
            if (elmLabel.length > 0) {
                elmLabel.html(formatCurrencyAmount(premium));
            }
            if (elmHidden.length > 0) {
                elmHidden.val(premium);
            }
        }
        //sumAmounts();
    }
}

function sumAmounts() {
    var fldsAmounts  = $("div[class^='fieldgrp'] div[class='formstatictext-col3'] input[name!='formpartcode']");
    var total = 0;
    fldsAmounts.each(function(){
        var val = parseNumber($(this).val());
        total = total + val;
    });
    total = total.toFixed(2);
    
    var label = $("div[class='formstatictext-total'] div[class='fieldgrp-col3'] div[class='formstatictext-big'] div[class='text']");
    if (label.length > 0) {
        label.html(formatCurrencyAmount(total));
    }
    var input = $("input#energiek_totalamount");
    if (input.length > 0) {
        input.val(total);
    }
}

function setSubFormPerson(subforms, entryPersontype, entryBirthdate) {
    subforms.each(function(){
      var idcurrent = $(this).attr('id').replace('subform_','');
      var flgrHiddenflds = $(this).find("div[class^='fieldgrp-middle']:last");
      var text = "";
      if (flgrHiddenflds.length > 0) {
        var elmPersontype = flgrHiddenflds.find("input[id='person']");
        var elmBirthdate  = flgrHiddenflds.find("input[id='birthdate']");

        if (elmPersontype.length > 0) {
          var person = "";
          if (entryPersontype && entryPersontype.length != 0) {
            person = entryPersontype.nextAll(":first").text();
            elmPersontype.val(person);
          } else {
            person = elmPersontype.val();
          }
          text = person;
        }

        if (elmBirthdate.length > 0) {
          var date = "";
          if (entryBirthdate && entryBirthdate.length > 0) {
            date = entryBirthdate.val();
            elmBirthdate.val(date);
          } else {
            date = elmBirthdate.val();
          }
          text = text + "<br/>" + date;
        }
      }

      var headerForm = $(this).find("div[class^='fieldgrp-top'] div[class='fieldgrp-col1'] div[class='text']");
      if (headerForm.length > 0 && text != "") {
        //Show person type and birthdate in label
        headerForm.html(text);
      }

      //Position closelink:
      var linkFld = $(this).find("div[class^='fieldgrp-col1']:last div[class='text']:last");
      var closelink = $("#closelink_" + idcurrent + ":first");
      if (linkFld.length > 0 && closelink.length > 0) {
        closelink.appendTo(linkFld);
      }
    });
}