if (typeof (srvGeneralForm) == "undefined")
{
    // var hsWebsrvServer="/";
    var srvGeneralForm = "HsGeneralForms.asmx";
}

var ActiveFormId = 0;               // nummer van het formulier
var ActiveFormNum = 0;              // volgnummer van het formulier

var ActiveBetalingstermijnId = "";
var ActiveContractduurId = "";

var ActivePage = "";                // actieve pagina
var ActiveInfoAssurId = null;
var ActiveInfoProductId = null;
var ActiveInfoProductVariant = null;

var FormType =                      // formuliertype
{
    SingleForm: 0,                  // enkelvoudig formulier
    PakketForm: 1,                  // pakketformulier
    AfsluitForm: 2,                 // afsluitformulier

    PakketVoorloopForm: 6,
    SbiForm: 28
}

var ActiveFormFormType = FormType.SingleForm;

var LastSessionInfo = null;                 // laatst opgehaalde sessiegegevens

var ObjectSelectionControlRegistry = {};
var PopupControlRegistry = {};
var AdresXpressControlRegistry = {};

var ActiveFormIsAfsluiten = false;          // betreft het actieve formulier een afsluitformulier?
var ActiveFormPartialSaveAllowed = false;   // kan het huidige formulier onafgemaakt opgeslagen worden?

var submitClicked = false;              // is er op versturen gedrukt tijdens een asynchrone controle van gegevens!?
var alternativeSubmit = null;           // alternatieve submitfunctie
var submitBusy = false;                 // zijn we aan het versturen
var hasAddedForms = false;              // formulieren in pakket?
var hasExistingForms = false;
var hasPartialForms = false;            // zitten er partiële formulieren in het pakket?
var hasTerAcceptatie = false;           // zitten er ter acceptatie formulieren in het pakket?
var canHavePakketKorting = true;        // pakket heeft pakketkorting

var postFieldsFromSessionFuncs = [];
var postFieldsFromSessionDone = false;

//Functie arrays ten behoeve van objecten
var CustomFuncs = [];
var CustomFuncsDone = false;
var CustomRepeatableFuncs = [];

var EmailValidationRegex = /^[a-zA-Z][a-zA-Z0-9_\.\-]+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
var PasswordValidationRegex = /^[a-zA-Z0-9_]{6,}$/;

var Keys =
{
    None: 0,
    Return: 13,
    Escape: 27
};

var FollowupActions =
{
    None: 0x0000,
    UpdateRollsCompareResults: 0x0001,
    UpdateCompareResults: 0x0002,
    UpdateCompareAdditionalFields: 0x0004,
    UpdateRollsMotorCompareResults: 0x0010,
    ClearCompareResults: 0x0020,
    UpdateClausules: 0x0040
};

var ValidationResult =
{
    Error: 0,
    Altered: 1,
    Valid: 2
};

var AcceptationLevel =
{
    Unknown: 0,
    Accepted: 1,
    Aanvraag: 5,
    Offerte: 10,
    TerAcceptatie: 13,
    NotAccepted: 15
};

var LoginType =
{
    Unknown: 0,
    BackofficeCustomer: 1,
    PersonelBenefit: 2,
    OnlineCustomer: 3,
    Redirect: 4
};

var SubmitAction =
{
    Send: 0,
    AddedToPackage: 1,
    PackageSend: 2,
    VoorloopFormFinished: 3,
    AcceptationError: 4,
    SbiKeuzeFormulierFinished: 5
};

var FieldStatus =
{
    Unknown: 0,
    Mandatory: 1,
    NotComplete: 2,
    Complete: 3
};

var IntBoolean =
{
    False: 0,
    True: 1
};

// FIELD CHECK
function GfFieldCheck(field, webmethod)
{
    if (!webmethod)
    {
        webmethod = 'CheckField';
    }

    LastSessionInfo = null; // invalid geworden

    if (field.type && field.type == "button") return;

    var ftype = field.getAttribute("hstype");
    var flevel = field.getAttribute("hsformlevel");
    var fdata = field.getAttribute("hsdata");

    var pl = new SOAPClientParameters();
    pl.add("sessionId", "" + sesId);
    pl.add("formId", "" + ActiveFormId);
    pl.add("formNum", "" + ActiveFormNum);

    if (field.type == "radio")
    {
        fieldName = field.name;
    }
    else
    {
        fieldName = field.id;
    }
    pl.add("fieldName", fieldName);

    if (flevel) pl.add("fieldLevel", "" + flevel);
    pl.add("fieldType", ftype ? "" + ftype : "");
    pl.add("fieldData", fdata ? "" + fdata : "");

    if (field.type && (field.type == "checkbox"))
    {
        if (field.checked) pl.add("fieldValue", field.value);
        else pl.add("fieldValue", "0");
    }
    else
    {
        var value = field.value;
        if (field.type && field.type == "text" && value.replace)
        {
            // trim
            value = trimLeftRightSpaces(value);

            if (value != field.value)
            {
                field.value = value;
            }
        }
        pl.add("fieldValue", value);
    }

    submitClicked = false;
    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, webmethod, pl, true, GfFieldCheckResp);

    // Always hide, something might have been changed...
    $("#teracceptationacceptedmessage").hide();
}

function GfFieldCheckResp(r)
{
    if (!r)
    {
        alert(Language.GeneralForms_ServerStuurdeGeenResultaat);
    }
    else
    {
        var isRadio = false;

        // als er een divje gekoppeld is dan deze laten reageren op het vinkje
        // eerst schakelen zodat r.ErrorField netjes focus kan zetten!
        var field = document.getElementById(r.FieldName);
        if (field && field.type && field.type == "checkbox")
        {
            var linkedIds = field.getAttribute("hshidediv");
            if (linkedIds)
            {
                linkedIds = linkedIds.split("|");
                var linkedId;
                for (var j = 0; j < linkedIds.length; j++)
                {
                    linkedId = linkedIds[j];
                    if (field.checked) hideField(linkedId);
                    else showField(linkedId);
                }
            }

            linkedIds = field.getAttribute("hsshowdiv");
            if (linkedIds)
            {
                linkedIds = linkedIds.split("|");
                var linkedId;
                for (var j = 0; j < linkedIds.length; j++)
                {
                    linkedId = linkedIds[j];
                    if (field.checked) showField(linkedId);
                    else hideField(linkedId);
                }
            }

            if (field.checked)
            {
                var o = field.getAttribute("hsfocusobject");
                if (o) setFocus(o);
            }
        }
        else if (field && field.tagName.toLowerCase() == "select")
        {
            UpdateLinkedFieldsForSelect(field);
        }
        else if (!field || (field && field.type && field.type == "radio")) // IE also search by name with getElementById -> GET A REAL BROWSER!
        {
            UpdateLinkedFieldsForRadioGroup(r.FieldName);
            isRadio = true;
        }

        if (field || isRadio)
        {
            var req = false;
            if (field && !isRadio)
            {
                var reqAttrib = field.getAttribute("hsrequired");
                req = reqAttrib && reqAttrib.toLowerCase() == "true";
            }

            // status=0, veld is NIET OK!
            if (r.Result == ValidationResult.Error)
            {
                // het is mogelijk dat het veld wel gewijzigd is
                if (r.NewValue && field) field.value = r.NewValue;
                changeClassAddStr(r.FieldName + "Lbl", "E");
                showFieldError(r.FieldName + "E", "<p>" + r.Error + "</p>");

                if (req)
                {
                    UpdateMandatoryField(field, FieldStatus.NotComplete);
                }

                if (r.Premies)
                {
                    FillPremieFields(r.Premies);
                }
            }

            // status=1, veld is OK, maar gewijzigd.
            if (field && r.Result == ValidationResult.Altered)
            {
                field.value = r.NewValue ? r.NewValue : "";
            }

            if (r.Result > ValidationResult.Error)
            {
                if (req)
                {
                    var status = field.value ? FieldStatus.Complete : FieldStatus.Mandatory;
                    if (r.AcceptationLevel == AcceptationLevel.NotAccepted && r.AcceptationField == r.FieldName)
                    {
                        status = FieldStatus.NotComplete;
                    }
                    UpdateMandatoryField(field, status);
                }
                else if (isRadio)
                {
                    var status = r.Fieldvalue ? FieldStatus.Complete : FieldStatus.Mandatory;
                    if (r.AcceptationLevel == AcceptationLevel.NotAccepted && r.AcceptationField == r.FieldName)
                    {
                        status = FieldStatus.NotComplete;
                    }

                    var radios = document.getElementsByName(r.FieldName);
                    if (radios)
                    {
                        UpdateMandatoryField(radios[0], status);
                    }
                }

                changeClassDelStr(r.FieldName + "Lbl", "E");

                var ef = document.getElementById(r.FieldName + "E");
                if (ef && ef.tagName.toLowerCase() == "span") hideFieldError(r.FieldName + "E");

                if (r.Premies)
                {
                    FillPremieFields(r.Premies);
                }

                if (r.AcceptationLevel != AcceptationLevel.Unknown)
                {
                    if (r.OfferteFields && r.AcceptationLevel != AcceptationLevel.NotAccepted)
                    {
                        var visi = (r.AcceptationLevel <= AcceptationLevel.Aanvraag) || r.AcceptationLevel == AcceptationLevel.TerAcceptatie;
                        ToggleFieldsVisibility(r.OfferteFields, visi);
                    }

                    if (r.AcceptationMessage && r.AcceptationLevel == AcceptationLevel.TerAcceptatie)
                    {
                        var o = document.getElementById("teracceptationmessagedetail");
                        if (o) o.innerHTML = r.AcceptationMessage;
                        showField("teracceptationmessage");
                    }
                    else
                    {
                        hideField("teracceptationmessage");
                    }

                    if (r.AcceptationMessage && r.AcceptationLevel == AcceptationLevel.Offerte)
                    {
                        var o = document.getElementById("offertemessagedetail");
                        if (o)
                        {
                            o.innerHTML = r.AcceptationMessage;
                        }
                        showField("offertemessage");
                    }
                    else hideField("offertemessage");

                    if (r.AcceptationField && r.AcceptationLevel == AcceptationLevel.NotAccepted)
                    {
                        changeClassAddStr(r.AcceptationField + "Lbl", "E");
                        showFieldError(r.AcceptationField + "E", "<p>" + r.AcceptationMessage + "</p>");
                        try
                        {
                            if (!IsAdvancedSelect(r.AcceptationField) && !ActiveFormIsAfsluiten)
                            {
                                setFocus(r.AcceptationField);
                            }
                            UpdateMandatoryField(r.AcceptationField, FieldStatus.NotComplete);
                        }
                        catch (err) { }
                    }
                }

                HandleFieldsSchakeling(r)

                if (r.UpdatedFields)
                {
                    GfFillFieldsFromList(r.UpdatedFields);
                }

                var o = document.getElementById(r.FieldName);
                if (o)
                {
                    var f = o.getAttribute("hspostfieldcheck");
                    if (f) eval(f);
                }

                if ((r.FollowupActions & FollowupActions.UpdateRollsCompareResults) == FollowupActions.UpdateRollsCompareResults) UpdateRollsAutoCompareResults();
                if ((r.FollowupActions & FollowupActions.UpdateCompareResults) == FollowupActions.UpdateCompareResults) UpdateCompareResults();
                if ((r.FollowupActions & FollowupActions.UpdateCompareAdditionalFields) == FollowupActions.UpdateCompareAdditionalFields && typeof (UpdateCompareAdditionalFields) == "function") UpdateCompareAdditionalFields();
                if ((r.FollowupActions & FollowupActions.UpdateRollsMotorCompareResults) == FollowupActions.UpdateRollsMotorCompareResults && typeof (UpdateRollsMotorCompareResults) == "function") UpdateRollsMotorCompareResults();
                if ((r.FollowupActions & FollowupActions.ClearCompareResults) == FollowupActions.ClearCompareResults && typeof (ClearCompareResults) == "function") ClearCompareResults();
                if ((r.FollowupActions & FollowupActions.UpdateClausules) == FollowupActions.UpdateClausules && typeof (LoadClausules) == "function") LoadClausules();
            }
        }

        if (r.Result != ValidationResult.Error && submitClicked)
        {
            if (alternativeSubmit) alternativeSubmit();
            else SubmitForm();
            alternativeSubmit = null;
        }
    }

    if (r)
    {
        if (r.Result != ValidationResult.Error)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}

function HandleFieldsSchakeling(r)
{
    if (r.FieldsToHide)
    {
        var fields = r.FieldsToHide.split('|');

        for (var i in fields)
        {
            hideField(fields[i]);
        }

    }
    if (r.FieldsToShow)
    {
        var fields = r.FieldsToShow.split('|');
        for (var i in fields)
        {
            showField(fields[i]);
        }
    }
}

function SetAcceptationErrorOnField(fieldName, message)
{
    var isRadio = false;
    // als er een divje gekoppeld is dan deze laten reageren op het vinkje
    // eerst schakelen zodat r.ErrorField netjes focus kan zetten!
    var field = document.getElementById(fieldName);

    if (field || isRadio)
    {
        var req = false;
        if (field && !isRadio)
        {
            var reqAttrib = field.getAttribute("hsrequired");
            req = reqAttrib && reqAttrib.toLowerCase() == "true";
        }

        changeClassAddStr(fieldName + "Lbl", "E");
        showFieldError(fieldName + "E", "<p>" + message + "</p>");

        if (req)
        {
            UpdateMandatoryField(field, FieldStatus.NotComplete);
        }
    }
}

function ToggleFieldsVisibility(fields, visi)
{
    for (var i = 0; i < fields.length; i++)
    {
        if (visi) showField(fields[i]);
        else hideField(fields[i]);
    }
}

function FindParentLine(obj)
{
    while (obj)
    {
        if (obj.className.indexOf("hsLine") == 0)
        {
            break;
        }

        obj = obj.parentNode;

        if (obj.id == "hsGeneralForm" || obj == document.body)
        {
            obj = null;
        }
    }

    if (obj)
    {
        // check if we are in a container (div)
        var parent = obj.parentNode;
        if (parent && parent.tagName.toLowerCase() == "div")
        {
            // check if we are in an only-one container
            var attrib = parent.getAttribute("hsonlyone");
            if (attrib && attrib.toLowerCase() == "true")
            {
                // part of onlyone
                var children = parent.getElementsByTagName("div");
                if (children && children.length > 0)
                {
                    // assume the first div where class contains "hsLine" to be the header
                    var chld;
                    for (var i = 0, n = children.length; i < n; i++)
                    {
                        chld = children[i];
                        if (chld.className.indexOf("hsLine") == 0)
                        {
                            obj = chld;
                            break;
                        }
                    }
                }

                // als de div al gemarkeerd is als 'compleet' tijdens het laden van de sessiegegevens dan skippen...
                if (LastSessionInfo && obj && obj.className.indexOf("hsStatusComplete") != -1)
                {
                    obj = null;
                }
            }
        }
    }

    return obj;
}

function IsPartOfOnlyOneDiv(line)
{
    var parent = line.parentNode;
    if (parent && parent.tagName.toLowerCase() == "div")
    {
        // check if we are in an only-one container
        var attrib = parent.getAttribute("hsonlyone");
        if (attrib && attrib.toLowerCase() == "true")
        {
            return parent;
        }
    }

    return null;
}

function UpdateMandatoryField(o, status)
{
    if (typeof (o) == "string")
    {
        o = document.getElementById(o);
    }
    if (!o)
    {
        return;
    }

    var req = o.getAttribute("hsrequired");
    if (req && req.toLowerCase() == "true")
    {
        var line = FindParentLine(o);
        if (line)
        {
            var value = "";
            if (o.type && o.type == "radio")
            {
                value = getValueFromRadio(o.name);
            }
            else if (o.type && o.type == "checkbox")
            {
                if (o.checked) value = o.value;
            }
            else
            {
                value = o.value;
            }

            if (!value)
            {
                var onlyOneDiv = IsPartOfOnlyOneDiv(line);
                if (onlyOneDiv)
                {
                    // check if another control in the container is set, for now only the inputs
                    var y = onlyOneDiv.getElementsByTagName('input');
                    for (var i = 0; i < y.length; i++)
                    {
                        attrib = y[i].getAttribute("hsrequired");
                        if (attrib && attrib.toLowerCase() == "true" && y[i].value)
                        {
                            value = y[i].value;
                            break;
                        }
                    }

                    if (!value)
                    {
                        // check other controls?
                    }
                }
            }

            if (status == FieldStatus.Mandatory && value)
            {
                // if reset but has value, mark as Complete
                status = FieldStatus.Complete;
            }

            var class_ = line.className;
            class_ = class_.replace(" hsStatusMandatory", "");
            class_ = class_.replace(" hsStatusNotComplete", "");
            class_ = class_.replace(" hsStatusComplete", "");

            if (status == FieldStatus.Mandatory)
            {
                class_ += " hsStatusMandatory";
            }
            else if (status == FieldStatus.NotComplete)
            {
                if (!o.disabled)
                {
                    class_ += " hsStatusNotComplete";
                }
            }
            else if (status == FieldStatus.Complete)
            {
                class_ += " hsStatusComplete";
            }

            line.className = class_;
        }
    }
}

function GfSetForms(containingelement, methodtoattach)
{
    if (!containingelement)
    {
        containingelement = 'hsGeneralForm';
    }

    if (typeof (methodtoattach) != "function")
    {
        methodtoattach = function () { GfFieldCheck(this); };
    }


    var x = document.getElementById(containingelement);
    if (!x) return;

    var y = x.getElementsByTagName('input');
    for (var i = 0; i < y.length; i++)
    {
        switch (y[i].type)
        {
            case "checkbox":
                y[i].onclick = methodtoattach;
                UpdateMandatoryField(y[i], FieldStatus.Mandatory);
                break;
            case "radio":
                y[i].onclick = methodtoattach; // onchange beter?
                UpdateMandatoryField(y[i], FieldStatus.Mandatory);
                break;
            case "button":
                // skip
                break;
            case "file":
                // skip
                break;
            default:
                var pof = y[i].getAttribute("hspartofform");
                if (y[i].getAttribute("hsisselect") != "true" && (!pof || pof == "true"))
                {
                    y[i].onblur = methodtoattach;
                    y[i].onkeyup = function (event)
                    {
                        if (!event) event = window.event;
                        // enter also triggers the check...
                        if (event.keyCode == Keys.Return)
                        {
                            this.onblur();
                        }
                    };
                    y[i].onfocus = function ()
                    {
                        this.select();
                    };

                    UpdateMandatoryField(y[i], FieldStatus.Mandatory);
                }
                break;
        }
    }

    var y = x.getElementsByTagName('select');
    for (var i = 0; i < y.length; i++)
    {
        y[i].onchange = methodtoattach;
        hsInitAdvSelect(y[i].id);

        UpdateMandatoryField(y[i], FieldStatus.Mandatory);
    }

    // loop the textarea's
    var y = x.getElementsByTagName('textarea');
    for (var i = 0; i < y.length; i++)
    {
        y[i].onblur = methodtoattach;
        UpdateMandatoryField(y[i], FieldStatus.Mandatory);
    }

    // info teksten koppelen
    var y = document.getElementsByTagName('a');
    for (var i = 0; i < y.length; i++)
    {
        if (y[i].getAttribute("hshinttext"))
        {
            y[i].onmouseover = function (event) { showhint(this.getAttribute("hshinttext"), this, event, ''); };
        }
    }
}

function GfSetFormReadOnly()
{
    var x = document.getElementById('hsGeneralForm');
    if (!x) return;

    var y = x.getElementsByTagName('input');
    for (var i = 0; i < y.length; i++)
    {
        switch (y[i].type)
        {
            case "checkbox":
                y[i].onclick = function () { };
                y[i].disabled = true;
                y[i].className += " disabled";
                break;
            case "radio":
                y[i].onclick = function () { };
                y[i].disabled = true;
                y[i].className += " disabled";
                break;
            case "button":
                y[i].disabled = true;
                y[i].className += " disabled";
                // skip
                break;
            default:
                // alles disablen
                // var pof = y[i].getAttribute("hspartofform");
                // if(y[i].getAttribute("hsisselect")!="true" && (!pof || pof=="true"))
                {
                    y[i].onblur = function () { };
                    y[i].onkeyup = function () { };
                    y[i].onfocus = function () { };
                    y[i].disabled = true;
                    y[i].className += " disabled";
                }
                break;
        }
    }

    var y = x.getElementsByTagName('select');
    for (var i = 0; i < y.length; i++)
    {
        y[i].onchange = function () { };
        y[i].disabled = true;
        y[i].className += " disabled";
    }

    // loop the textarea's
    var y = x.getElementsByTagName('textarea');
    for (var i = 0; i < y.length; i++)
    {
        y[i].onblur = function () { };
        y[i].disabled = true;
        y[i].className += " disabled";
    }
}

function faseReady(fasenr)
{
    if (!submitClicked && isSoapClientBusy())
    {
        return false;
    }

    if (fasenr > 1)
    {
        if (!faseReady(fasenr - 1))
        {
            return false;
        }
    }
    if (!hsCheckFormfieldsInDiv(document.getElementById("hsFase" + fasenr + "Div"), fasenr))
    {
        return false;
    }
    return true;
}

function lastFaseReady()
{
    var i = 1;
    while (document.getElementById("hsFase" + i + "Div"))
    {
        i++;
    }
    return faseReady(i - 1);
}

function hsCheckFormfieldsInDiv(faseDiv, faseId)
{
    if (faseDiv.style.display == "none" && faseDiv.className != "test_select")
    {
        return true;
    }

    var attrib = faseDiv.getAttribute("hsonlyone");
    var onlyOne = false;
    if (attrib && attrib.toLowerCase() == "true")
    {
        onlyOne = true;
        hideField(faseDiv.id + "E");
    }

    var y = faseDiv.getElementsByTagName('input');
    for (var i = 0; i < y.length; i++)
    {
        if (onlyOne || y[i].parentNode == faseDiv || (y[i].type && y[i].type == "radio" && (y[i].parentNode.parentNode == faseDiv || y[i].parentNode.parentNode.parentNode == faseDiv)))
        {
            attrib = y[i].getAttribute("hsrequired");
            if (attrib && attrib.toLowerCase() == "true")
            {
                if (!checkGeneralFieldValid(y[i].id, false, faseId, !onlyOne))
                {
                    if (!onlyOne) return false;
                }
                else if (onlyOne && IsOnlyOneFieldVisible(faseDiv, y[i])) return true;
            }
            else if (fieldHasErrorMessage(y[i].id))
            {
                return false;
            }
        }
    }

    var y = faseDiv.getElementsByTagName('select');
    for (var i = 0; i < y.length; i++)
    {
        if (y[i].parentNode == faseDiv)
        {
            attrib = y[i].getAttribute("hsrequired");
            if (attrib && attrib.toLowerCase() == "true")
            {
                if (!checkGeneralFieldValid(y[i].id, false, faseId, !onlyOne))
                {
                    if (!onlyOne) return false;
                }
                else if (onlyOne && IsOnlyOneFieldVisible(faseDiv, y[i])) return true;
            }
            else if (fieldHasErrorMessage(y[i].id))
            {
                return false;
            }
        }
    }

    // loop the textarea's (used for slotopmerking, medicijnverklaring and ziekteverklaring)
    var y = faseDiv.getElementsByTagName('textarea');
    for (var i = 0; i < y.length; i++)
    {
        if (y[i].parentNode == faseDiv)
        {
            attrib = y[i].getAttribute("hsrequired");
            if (attrib && attrib.toLowerCase() == "true")
            {
                if (!checkGeneralFieldValid(y[i].id, false, faseId, !onlyOne))
                {
                    if (!onlyOne) return false;
                }
                else if (onlyOne && IsOnlyOneFieldVisible(faseDiv, y[i])) return true;
            }
            else if (fieldHasErrorMessage(y[i].id))
            {
                return false;
            }
        }
    }

    if (onlyOne)
    {
        // toon de bij de div behorende errormessage
        showFieldError(faseDiv.id + "E");
        return false;
    }

    var y = faseDiv.getElementsByTagName('div');
    for (var i = 0; i < y.length; i++)
    {
        if ((y[i].parentNode == faseDiv/* || y[i].parentNode.parentNode==faseDiv*/) && !IsOnlyOneDiv(y[i].parentNode))
        {
            if (!hsCheckFormfieldsInDiv(y[i], faseId)) return false;
            else if (onlyOne) return true;
        }
    }

    var y = faseDiv.getElementsByTagName('fieldset');
    for (var i = 0; i < y.length; i++)
    {
        if ((y[i].parentNode == faseDiv/* || y[i].parentNode.parentNode==faseDiv*/) && !IsOnlyOneDiv(y[i].parentNode))
        {
            if (!hsCheckFormfieldsInDiv(y[i], faseId)) return false;
            else if (onlyOne) return true;
        }
    }

    return true;
}

function IsOnlyOneDiv(divje)
{
    var attrib = divje.getAttribute("hsonlyone");
    if (attrib && attrib.toLowerCase() == "true")
    {
        return true;
    }
    return false;
}

function IsOnlyOneFieldVisible(onlyOneDiv, onlyOneField)
{
    var parent = onlyOneField.parentNode;
    while (parent != onlyOneDiv)
    {
        if (parent.style.display == "none" && parent.className != "test_select")
        {
            return false;
        }

        parent = parent.parentNode;
    }

    return true;
}

// FASE MANAGEMENT
var curFase = 1;

function hsNextFase()
{
    if (isSoapClientBusy())
    {
        setTimeout("hsNextFase()", 250);
        return;
    }

    if (faseReady(curFase))
    {
        changeFase("hsFase" + curFase, "hsFase" + (curFase + 1));
        curFase++;

        var o = document.getElementById('hsGeneralForm');
        if (o && o.scrollIntoView) o.scrollIntoView(true);
        else window.scroll(0, o ? o.offsetTop : 0);
    }

}

function hsPrevFase()
{
    changeFase("hsFase" + curFase, "hsFase" + (curFase - 1));
    if (curFase > 1) curFase--;

    var o = document.getElementById('hsGeneralForm');
    if (o && o.scrollIntoView) o.scrollIntoView(true);
    else window.scroll(0, o ? o.offsetTop : 0);
}

function hsGoToFase(nr)
{
    if (isSoapClientBusy())
    {
        setTimeout(function () { hsGoToFase(nr); }, 250);
        return;
    }

    if (nr != 1 && nr == curFase)
    {
        return;
    }

    if (nr != 1)
    {
        if (nr > curFase + 1) nr = curFase + 1;
    }

    if (nr == 1 || nr < curFase || faseReady(curFase/*nr-1*/))
    {
        changeFase("hsFase" + curFase, "hsFase" + nr);
        curFase = nr;
    }
}

function changeFase(oldFase, newFase)
{
    var fs_cur = document.getElementById(oldFase + "Div");
    var fs_new = document.getElementById(newFase + "Div");
    if (fs_cur && fs_new)
    {
        fs_cur.style.display = "none";
        fs_new.style.display = "block";

        // buttons uit en aan zetten
        changeClassDelStr(oldFase + "But", "Active");
        changeClassAddStr(newFase + "But", "Active");
    }
    else if (!fs_cur && fs_new)
    {
        fs_new.style.display = "block";
        changeClassAddStr(newFase + "But", "Active");
    }
}

// FIELD CHECKS

function checkGeneralFieldValid(fieldName, allowNul, fasenr, invalid)
{
    var o = document.getElementById(fieldName);
    var selectOK = true;
    if (o)
    {
        if (o.type == "select-one")
        {
            if (o.value == "" && !allowNul) selectOK = false;
        }
        else if (o.type == "radio")
        {
            var rg = document.getElementsByName(o.name);
            if (rg)
            {
                selectOK = false;
                fieldName = o.name;
                for (var i = 0; !selectOK && i < rg.length; i++)
                {
                    if (rg[i].checked) selectOK = true;
                }
            }
        }
        else if (o.type == "checkbox")
        {
            if (!getValueFromCheckbox(document.getElementById(fieldName))) selectOK = false;
        }

        if (o.value && selectOK)
        {
            var p = document.getElementById(fieldName + "E");
            if (p && p.tagName.toLowerCase() == "span")
            {
                // if(p.style.display=="none") return true;
                if (p.style.display != "block") return true; // kan ook uitgezet zijn via de css, block is zichtbaar. Bovenstaande regel is netter
            }
            else return true;
        }
    }
    if (fasenr) hsGoToFase(fasenr);
    if (invalid == null || invalid)
    {
        setGeneralFieldInvalid(fieldName);

        if (o)
        {
            var req = o.getAttribute("hsrequired");
            if (req && req.toLowerCase() == "true")
            {
                UpdateMandatoryField(o, FieldStatus.NotComplete);
            }
        }
    }
    return false;
}

function fieldHasErrorMessage(fieldName)
{
    var p = document.getElementById(fieldName + "E");
    if (p && p.tagName.toLowerCase() == "span")
    {
        // if(p.style.display!="none") 
        if (p.style.display == "block") // check op display:block, kan ook leeg zijn en dan toch niet zichtbaar agv CSS
        {
            return true;
        }
    }

    return false;
}

function setGeneralFieldValid(fieldName)
{
    changeClassDelStr(fieldName + "Lbl", "E");

    var ef = document.getElementById(fieldName + "E");
    if (ef && ef.tagName.toLowerCase() == "span") hideFieldError(fieldName + "E");
}

function setGeneralFieldInvalid(fieldName)
{
    var continueMsg = Language.JS_GeneralForms_MandatoryIsEmptyMessage;

    var o = document.getElementById(fieldName);
    if (o)
    {
        var customError = o.getAttribute("hscustomerror");

        if (customError)
        {
            continueMsg = customError;
        }
    }


    changeClassAddStr(fieldName + "Lbl", "E");

    if (typeof (GlobalContinueMsg) == "string")
    {
        continueMsg = GlobalContinueMsg;
    }

    // alleen doen als nog niet fout?
    /*
    if (!fieldHasErrorMessage(fieldName))
    {
    showFieldError(fieldName+"E", "<p>" + continueMsg + "</p>");
    }
    /**/
    showFieldError(fieldName + "E", "<p>" + continueMsg + "</p>");


    if (o && !o.disabled && !IsAdvancedSelect(o) && !ActiveFormIsAfsluiten)
    {
        setFocus(fieldName);
    }
}

function hofGetFieldsFromSession(formId, formNum)
{
    if (formId == 0)
    {
        // what happened?! this can not be the case if we get here...
        return;
    }

    ActiveFormId = formId;
    if (!formNum) formNum = ActiveFormNum;
    LastSessionInfo = null;

    var pl = new SOAPClientParameters();
    pl.add("sessionId", "" + sesId);
    pl.add("formId", "" + formId);
    pl.add("formNum", "" + formNum);

    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "GetFieldsFromSession", pl, true, GfGetFieldsFromSessionResp);
}

function IsParent(obj, parent)
{
    if (!obj) return false;

    var o = obj.parentNode;
    while (o && o != document.body)
    {
        if (o == parent)
        {
            return true;
        }
        o = o.parentNode;
    }
    return false;
}

function SkipField(fieldName)
{
    return fieldName == "rollsautokentekenmerk" ||
        fieldName == "rollsautokentekenmodel" ||
        fieldName == "rollsmotorkentekenmerk" ||
        fieldName == "rollsmotorkentekensoort";
}

function GfFillFieldsFromList(fields, fieldContainer)
{
    if (fieldContainer && !fieldContainer.getElementById)
    {
        fieldContainer.getElementById = function (id)
        {
            var obj = document.getElementById(id);
            if (obj && IsParent(obj, this))
            {
                return obj;
            }
            return null;
        };
    }

    var o, field;
    for (var i = 0; i < fields.length; i++)
    {
        field = fields[i];
        if (field.FieldName && !SkipField(field.FieldName))
        {
            o = fieldContainer ? fieldContainer.getElementById(field.FieldName) : document.getElementById(field.FieldName);
            if (o && o.id != field.FieldName) o = null; // patch for IE

            if (o)
            {
                if (o.tagName.toLowerCase() == "select") setSelectFromValue(o, field.FieldValue);
                else if (o.tagName.toLowerCase() == "textarea") setTextFromValue(o, field.FieldValue);
                else if (o.tagName.toLowerCase() == "input")
                {
                    if (o.type == "checkbox") setCheckboxFromValue(o, field.FieldValue);
                    else if (o.type == "text") setTextFromValue(o, field.FieldValue);
                    else if (o.type == "hidden") setTextFromValue(o, field.FieldValue);
                }
                else if (o.tagName.toLowerCase() == "img")
                {
                    // skip for now, later assign to o.src
                }
                else if (field.FieldValue) o.innerHTML = "" + field.FieldValue;

                var req = o.getAttribute("hsrequired");
                if (req && req.toLowerCase() == "true")
                {
                    UpdateMandatoryField(o, o.value ? FieldStatus.Complete : FieldStatus.Mandatory);
                }
            }
            else
            {
                o = document.getElementsByName(field.FieldName);
                if (o && o.length > 0) // radio's
                {
                    setRadioFromValue(field.FieldName, field.FieldValue);

                    var req = o[0].getAttribute("hsrequired");
                    if (req && req.toLowerCase() == "true")
                    {
                        UpdateMandatoryField(o[0], field.FieldValue ? FieldStatus.Complete : FieldStatus.Mandatory);
                    }
                }
            }
        }
    }
}

function InitializePakketButtons()
{
    var specForm = ActiveFormFormType == FormType.SbiForm || ActiveFormFormType == FormType.PakketVoorloopForm;

    if (hasAddedForms)
    {
        // toon winkelmandje als nog niet zichtbaar
        var wm = document.getElementById("pakketoverzicht");
        if (wm && wm.style.display == "none") wm.style.display = "";
    }
    else
    {
        var wm = document.getElementById("pakketoverzicht");
        if (wm && wm.getAttribute("hideifempty") == "true") wm.style.display = "none";
    }

    var can = !ActiveDossierFormId && !ActiveFormIsAfsluiten && !specForm;
    if (can && (hasAddedForms || ActiveDossierId)) // eerst doen ivm onafhankelijkheid van hasTerAcceptatie
    {
        $("#btnSaveDossier").show();
    }
    else
    {
        $("#btnSaveDossier").hide();
    }

    if (can && loggedIn && ActiveDossierId)
    {
        $("#btnCloseDossier").show();
    }
    else
    {
        $("#btnCloseDossier").hide();
    }

    can &= !hasTerAcceptatie;
    if (can)
    {
        $("#liPakketAfsluit, #liPakketAfsluitBig").show();
    }
    else
    {
        $("#liPakketAfsluit, #liPakketAfsluitBig").hide();
    }

    can &= (hasAddedForms || !!ActiveDossierId); // Als formulieren of open dossier
    if (can)
    {
        $("#btnGenerateOfferte").show();
    }
    else
    {
        $("#btnGenerateOfferte").hide();
    }
}

function GfGetFieldsFromSessionResp(r)
{
    if (!r) return;

    LastSessionInfo = r;
    // voeg wat functionaliteit toe aan LastSessionInfo
    LastSessionInfo.FindFieldById = function (id)
    {
        var f = null;
        for (var i = 0, max = this.Fields.length; f == null && i < max; i++)
        {
            f = this.Fields[i];
            if (f.FieldName != id) f = null;
        }
        return f;
    };

    InitializePakketButtons();

    var fields = r.Fields;
    GfFillFieldsFromList(fields);

    if (r.AcceptationLevel != AcceptationLevel.Unknown)
    {

        if (r.OfferteFields)
        {
            var visi = (r.AcceptationLevel <= AcceptationLevel.Aanvraag) || r.AcceptationLevel == AcceptationLevel.TerAcceptatie;
            ToggleFieldsVisibility(r.OfferteFields, visi);
        }

        if (r.AcceptationMessage && r.AcceptationLevel == AcceptationLevel.TerAcceptatie)
        {
            var o = document.getElementById("teracceptationmessagedetail");
            if (o)
            {
                o.innerHTML = r.AcceptationMessage;
            }
            showField("teracceptationmessage");

            var o = document.getElementById("teracceptationswitch");
            if (o)
            {
                o.value = 0;
            }
        }
        else
        {
            hideField("teracceptationmessage");
            var o = document.getElementById("teracceptationswitch");
            if (o)
            {
                o.value = 1;
            }
        }

        if (r.AcceptationMessage && r.AcceptationLevel == AcceptationLevel.Offerte)
        {
            var o = document.getElementById("offertemessagedetail");
            if (o)
            {
                o.innerHTML = r.AcceptationMessage;
            }
            showField("offertemessage");
        }
        else hideField("offertemessage");

        if (r.AcceptationMessage && r.AcceptationLevel == AcceptationLevel.NotAccepted)
        {
            changeClassAddStr(r.AcceptationField + "Lbl", "E");
            showFieldError(r.AcceptationField + "E", "<p>" + r.AcceptationMessage + "</p>");
            //alert(r.AcceptationMessage);
            UpdateMandatoryField(r.AcceptationField, FieldStatus.NotComplete);
        }
    }

    if (typeof (r.AllowedToAdd) != "undefined" && r.AllowedToAdd == IntBoolean.False)
    {
        hideField("btnSubmitFormSpan");
        if (r.AllowedToAddMessage)
        {
            setInnerHtml("pakketrulemsg", r.AllowedToAddMessage);
            showField("pakketrulemsg");
        }
    }

    // formulier even in readonly zetten zonodig
    if (r.ShowReadOnly == IntBoolean.True)
    {
        GfSetFormReadOnly();
    }

    // allow partial saving of forms
    ActiveFormPartialSaveAllowed = (r.PartialSaveAllowed == IntBoolean.True);
    ActiveFormFormType = r.FormType;

    if (r.Premies)
    {
        FillPremieFields(r.Premies);
    }

    if (r.InvalidFields)
    {
        // Velden op ongeldig zetten
        for (var i = 0, max = r.InvalidFields.length; i < max; i++)
        {
            var field = r.InvalidFields[i];

            changeClassAddStr(field.FieldName + "Lbl", "E");
            showFieldError(field.FieldName + "E", "<p>" + field.Message + "</p>");
            UpdateMandatoryField(field.FieldName, FieldStatus.NotComplete);
        }
    }

    HandleFieldsSchakeling(r)

    if (!postFieldsFromSessionDone)
    {
        // eventueel formulierscripts nog opzoeken en injecteren
        var o = document.getElementById("hsformdatadiv");
        if (o) // anders los formulier, heeft dit niet nodig
        {
            var s = "";
            var y = o.getElementsByTagName("script");
            for (var i = 0; i < y.length; i++)
            {
                if (y[i].getAttribute("controlscript") == "true")
                {
                    s += y[i].innerHTML;
                }
            }

            var scriptElem = document.createElement("script");
            scriptElem.type = "text/javascript";
            scriptElem.text = s;
            var head = document.getElementsByTagName("head")[0];
            head.appendChild(scriptElem);
        }

        if (postFieldsFromSessionFuncs && postFieldsFromSessionFuncs.length > 0)
        {
            for (var i = 0; i < postFieldsFromSessionFuncs.length; i++)
            {
                var fx = postFieldsFromSessionFuncs[i];
                if (typeof (fx) == "function")
                {
                    fx();
                }
                else
                {
                    eval(fx);
                }
            }
            postFieldsFromSessionFuncs = new Array();
        }

        postFieldsFromSessionDone = true;
    }
    else
    {
        // aantal wel doen        
        if ((document.getElementById("rollsautocompareresultcontainer") || (document.getElementById("rollsautocompareresultextcontainer"))) && typeof (UpdateRollsAutoCompareResults) == "function")
        {
            UpdateRollsAutoCompareResults();
        }
        if (document.getElementById("compareresultcontainer") && typeof (UpdateCompareResults) == "function")
        {
            UpdateCompareResults();
        }
        if (document.getElementById("rollsmotorcompareresultcontainer") && typeof (UpdateRollsMotorCompareResults) == "function")
        {
            UpdateRollsMotorCompareResults();
        }
        if (document.getElementById("clausulecode") && typeof (LoadClausules) == "function")
        {
            LoadClausules();
        }
    }
}

function FillPremieFields(premies, parent)
{
    var p;
    for (var i = 0; i < premies.length; i++)
    {
        p = premies[i];
        if (!parent || IsParent(document.getElementById(p.FieldName), parent))
        {
            var id = p.FieldName.substr(0, p.FieldName.length - 3); // PrS eraf
            id += "DiscSignal";
            var discCtrl = document.getElementById(id);
            if (discCtrl)
            {
                discCtrl.style.display = p.Premie < 0 ? "" : "none";
            }

            SetPremieField(p.FieldName, p.Premie);

            if (p.FieldName == "frm_poliskostenPrS")
            {
                if (p.Premie == 0) hideField("poliskostendiv");
                else showFieldEx("poliskostendiv");
            }
        }
    }
}

function SubmitForm()
{
    if (isSoapClientBusy())
    {
        submitClicked = true;
        return;
    }

    var isPartial = false;
    if (ActiveFormFormType == FormType.PakketForm)
    {
        if (!lastFaseReady())
        {
            if (!ActiveFormPartialSaveAllowed)
            {
                // not allowed to save partially -> return, otherwise save it as 'in progress'
                return;
            }
            else
            {
                // partial allowed
                if (!confirm(Language.JS_GeneralForms_NotAllMandatoryFieldsFilled))
                {
                    return;
                }

                isPartial = true;
            }
        }
    }
    else
    {
        if (!lastFaseReady())
        {
            return;
        }
    }

    if (submitBusy)
    {
        // already submitting
        return;
    }
    submitBusy = true;
    var pl = new SOAPClientParameters();
    pl.add("sessionId", "" + sesId);
    pl.add("formId", "" + ActiveFormId);
    pl.add("formNum", "" + ActiveFormNum);
    pl.add("isPartial", isPartial ? "1" : "0");

    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "SubmitForm", pl, true, SubmitFormResp);

    ShowPopup("waitonsubmitpopup");

    submitClicked = false;
}

function SubmitFormResp(r)
{
    ClosePopup(); // waitonsubmitpopup

    submitBusy = false;

    if (r.Success)
    {
        if (r.Action == SubmitAction.Send)
        {

            var o = document.getElementById("hsGeneralForm");
            if (o) o.innerHTML = r.Message;

            if (typeof (GfAfterSubmitForm) == "function") GfAfterSubmitForm();
        }
        else if (r.Action == SubmitAction.AddedToPackage)
        {
            // GfUpdatePakketInfo(); 

            // terug naar pakket
            HideFormDiv();

            if (typeof (GfAfterAddedToPackage) == "function") GfAfterAddedToPackage();
        }
        else if (r.Action == SubmitAction.SbiKeuzeFormulierFinished)
        {
            GfInitPakketPagina();
            GfGetPakketPaginaData();
        }
        else if (r.Action == SubmitAction.PackageSend)
        {
            heeftAlPakket = true;
            var n = document.getElementById("nieuw_in_pakket_container");
            if (n)
            {
                $("li#liPakketReken a").attr('onclick', '');
                $("li#liPakketReken a").click(function ()
                {

                    return false;
                });
                n.style.display = 'none';
            }
            if (ActiveDossierId)
            {
                StopDossierTimer();
                ActiveDossierId = "";
            }

            var o = document.getElementById("hsGeneralForm");
            if (o) o.innerHTML = r.Message;

            curFase = 0;
            ActiveFormId = 0;   // reset to prevent reinit of the form just sent
            ActiveFormNum = 0;

            GfUpdatePakketInfo();

            if (typeof (GfAfterSubmitForm) == "function") GfAfterSubmitForm();
        }
        else if (r.Action == SubmitAction.VoorloopFormFinished)
        {
            GfInitPakketPagina();
            //GfGetPakketPaginaData();
            //GfInitPakketPaginaResp(null);
        }
        else if (r.Action == SubmitAction.AcceptationError)
        {
            if (r.ErrorField)
            {
                SetAcceptationErrorOnField(r.ErrorField, r.Message);
            }
            else
            {
                alert(r.Message);
            }
        }

        if (r.LoginChanged) // Login gegevens overnemen en site 'ombouwen'
        {
            loggedIn = "true";
            loggedInType = r.LoggedInType;
            displayName = r.DisplayName;
            displayAanhef = r.DisplayAanhef;

            GfUpdateLoginStatus();
        }
    }
    else if (r.Message)
    {
        alert(Language.JS_GeneralForms_FormSubmitFailedWithReason + r.Message);

        if (r.Action == SubmitAction.PackageSend)
        {
            GfUpdatePakketInfo();
        }
    }
    else
    {
        alert(Language.JS_GeneralForms_FormSubmitFailedWithoutReason);
    }
}

///////////////////////////////////////////////////////////////////
/////////////////            PAKKET           /////////////////////
///////////////////////////////////////////////////////////////////
function GfInitPakketPagina()
{
    if (!document.getElementById("pakketoverzicht"))
    {
        return;
    }
    
    // standaard onzichtbaar ivm voorlopende formulieren
    hideField("btnSaveDossier");

    var mijcode = GetQuerystringValue("m");
    var prod = GetQuerystringValue("p");
    var variant = GetQuerystringValue("v");
    var info = GetQuerystringValue("info");
    var dossierToBeLoaded = GetQuerystringValue("dossier");

    var pl = new SOAPClientParameters();
    pl.add("sessionId", "" + sesId);

    pl.add("product", "" + prod);
    pl.add("mijcode", "" + mijcode);
    pl.add("variant", "" + variant);

    pl.add("dossier", "" + dossierToBeLoaded);

    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "GetInitDataForPakket", pl, true, GfInitPakketPaginaResp);
}

function FillPremiumOptions(r)
{
    var o, lbl;
    var labelsetter = function (id, label)
    {
        var el = document.getElementById(id);
        if (el) el.innerHTML = label;
    }

    var premieoptions = false;

    lbl = r.PakketkortingLabel || Language.JS_GeneralForms_PakketKortingsDefaultLabel;
    labelsetter("pakketpakketkortingkortinglbl", lbl);
    labelsetter("pakketpakketkortingtoeslaglbl", lbl);

    o = document.getElementById("frm_pakketbetalingstermijn");
    if (o)
    {
        if (r.Betalingstermijnen)
        {
            removeOptionsFromSelect(o);

            for (var i = 0; i < r.Betalingstermijnen.length; i++)
            {
                addOptionToSelect(o, r.Betalingstermijnen[i].Description, r.Betalingstermijnen[i].Id);
            }
        }

        setSelectFromValue(o, r.ActiveBetalingstermijnId);

        o.onchange = function () { OnChangeBetalingstermijn(this); };
    }
    lbl = r.BetalingstermijnLabel || Language.JS_GeneralForms_BetalingsTermijnDefaultLabel;
    labelsetter("frm_pakketbetalingstermijnlbl", lbl);
    labelsetter("pakketbetalingstermijnkortinglbl", lbl);
    labelsetter("pakketbetalingstermijntoeslaglbl", lbl);
    o = document.getElementById("frm_pakketbetalingstermijncontainer");
    if (o)
    {
        // tonen als meer dan 1!
        var disp = (r.Betalingstermijnen && r.Betalingstermijnen.length > 1);
        o.style.display = disp ? "" : "none";
        premieoptions |= disp;
    }

    o = document.getElementById("frm_pakketcontractduur");
    if (o)
    {
        if (r.Contractduren)
        {
            removeOptionsFromSelect(o);

            for (var i = 0; i < r.Contractduren.length; i++)
            {
                addOptionToSelect(o, r.Contractduren[i].Description, r.Contractduren[i].Id);
            }
        }
        UpdateJQueryUniformSelect(o);
        o.onchange = function () { OnChangeContractduur(this); };
    }
    lbl = r.ContractduurLabel || Language.JS_GeneralForms_ContractduurDefaultLabel;
    labelsetter("frm_pakketcontractduurlbl", lbl);
    labelsetter("pakketcontractduurkortinglbl", lbl);
    labelsetter("pakketcontractduurtoeslaglbl", lbl);
    o = document.getElementById("frm_pakketcontractduurcontainer");
    if (o)
    {
        // tonen als meer dan 1!
        var disp = (r.Contractduren && r.Contractduren.length > 1);
        o.style.display = disp ? "" : "none";
        premieoptions |= disp;
    }

    lbl = r.PakketkostenLabel || "Pakketkosten";
    labelsetter("frm_pakketkostenlbl", lbl);


    // Toggle het hele container met premieopties afhankelijk van inhoud
    o = document.getElementById("frm_pakketpremieoptionscontainer");
    if (o)
    {
        o.style.display = premieoptions ? "" : "none";
    }
}

function GfInitPakketPaginaResp(r)
{
    if (r && r.ProductAlreadyInPakket)
    {
        alert(r.Message);
        return;
    }

    document.body.onbeforeunload = function ()
    {
        GfWannaExitPagina(event);
    };

    InitHintsOnWebsite();

    if (r && r.RedirectForm && r.RedirectForm.FormId) // && ActiveFormId != r.RedirectForm.FormId) 
    {
        GfLoadCalcFormData(r.RedirectForm.FormId, r.RedirectForm.FormNum, false);

        // Wel pakketgedeelte updaten (winkelmandje etc)
        GfUpdatePakketInfo();

        return;
    }

    if (r)
    {
        FillPremiumOptions(r);
    }

    var dossierToBeLoaded = GetQuerystringValue("dossier");
    if (dossierToBeLoaded)
    {
        QuickOpenDossier(dossierToBeLoaded);
    }

    var mijcode = GetQuerystringValue("m");
    var prod = GetQuerystringValue("p");
    var variant = GetQuerystringValue("v");
    var info = GetQuerystringValue("info");
    if (mijcode && prod)
    {
        if (info == "1" || info == "true")
        {
            GfLoadProductInfoForProduct(mijcode, prod, variant);
        }
        else
        {
            GfLoadCalcFormDataForProduct(mijcode, prod, variant, IntBoolean.False);
        }
        GfUpdatePakketInfo();
    }
    else ToggleVisiblePage("hspakketdiv");
}

function GfWannaExitPagina(e)
{
    if (!e) e = window.event;

    // firefox: clientY bestaat niet maar ff komt hier alleen als je echt van de pagina afgaat (of refreshed)...
    // IE: clientY < 0
    if (typeof (e.clientY) == "undefined" || e.clientY < 0)
    {
        e.returnValue = Language.JS_GeneralForms_PakketPaginaVerlatenWaarschuwing;
    }
}

function GfLoadCalcFormData(formId, formNum, isAfsluitForm)
{
    var pl = new SOAPClientParameters();
    pl.add("sessionId", "" + sesId);
    pl.add("formId", "" + formId);
    pl.add("formNum", "" + formNum);
    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "GetFormDataById", pl, true, GfLoadCalcFormDataResp);

    ActiveFormId = formId;
    ActiveFormNum = formNum;
    ActiveFormIsAfsluiten = (isAfsluitForm ? true : false);
}

function NullOrUndefinedToEmpty(filtervalue)
{
    if (!filtervalue)
    {
        return "";
    }

    if (null == filtervalue)
    {
        return "";
    }

    if (typeof (filtervalue) == 'undefined')
    {
        return "";
    }

    if (filtervalue == 'undefined')
    {
        return "";
    }
}

function GfLoadCalcFormDataForProduct(assurId, productId, variant, formNum, isAfsluitForm)
{
    var pl = new SOAPClientParameters();
    pl.add("sessionId", "" + sesId);
    pl.add("assurId", "" + assurId);

    if (NullOrUndefinedToEmpty(variant) != "")
    {
        pl.add("variant", "" + variant);
    }

    pl.add("productId", "" + productId);
    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "GetFormDataForProduct", pl, true, GfLoadCalcFormDataResp2);

    ActiveFormId = 0;
    ActiveFormNum = formNum;
    ActiveFormIsAfsluiten = isAfsluitForm == IntBoolean.True;
}

function GfLoadCalcFormDataResp(r)
{
    //Verwijdert alle object selectie controls uit de registry
    ObjectSelectionControlRegistry.ClearAll();
    PopupControlRegistry.ClearAll();

    postFieldsFromSessionFuncs = new Array();
    postFieldsFromSessionDone = false;

    if (!r)
    {
        ActiveFormId = 0;
        ActiveFormNum = 0;
        ActiveFormIsAfsluiten = false;
        return;
    }

    var s = r.PageData.join("");

    var o = document.getElementById("hsformdatadiv");
    if (o)
    {
        var idx = s.indexOf("hofGetFieldsFromSession(");
        if (idx != -1)
        {
            idx += "hofGetFieldsFromSession(".length;

            var idxEnd = s.indexOf(")", idx);
            if (idxEnd != -1)
            {
                var num = s.substr(idx, idxEnd - idx);
                ActiveFormId = parseInt(num);
            }
        }

        o.innerHTML = s;

        GfSetForms();

        hofGetFieldsFromSession(ActiveFormId, ActiveFormNum);
        hsGoToFase(1);

        var o = document.getElementById("btnAddToPakket");
        if (o) o.innerHTML = (ActiveFormNum == 0 ? "Toevoegen" : "Aanpassen");

        var o = document.getElementById("btnCancelFormSpan");
        if (o) o.style.display = (ActiveFormNum == 0 ? "" : "none");

        var o = document.getElementById("frm_pakketbetalingstermijn");
        if (o)
        {
            var termijn = getTxtFromSelect(o).toLowerCase();

            var o = document.getElementById("frm_maandpremie");
            if (o)
            {
                o.innerHTML = Language.JS_GeneralForms_UwTotaleTermijnPremiePrefix + termijn + Language.JS_GeneralForms_UwTotaleTermijnPremieSuffix;
            }
        }

        ToggleVisiblePage("hsformdatadiv");

        var o = document.getElementById('hsGeneralForm');
        if (o && o.scrollIntoView) o.scrollIntoView(true);
        else window.scroll(0, o ? o.offsetTop : 0);
    }
}

function GfLoadCalcFormDataResp2(r)
{
    if (!r || (r.Success && !r.FormId))
    {
        return;
    }

    if (!r.Success)
    {
        if (r.Message)
        {
            alert(r.Message || "");
        }
        return;
    }

    GfLoadCalcFormData(r.FormId, ActiveFormNum, ActiveFormIsAfsluiten);
}

function ToggleVisiblePage(page)
{
    var updatePakket = false;

    ShowHideField("hspakketdiv", page == "hspakketdiv");
    ShowHideField("hsformdatadiv", page == "hsformdatadiv");
    ShowHideField("hsproductinfodiv", page == "hsproductinfodiv");

    ShowHideField("liPakketPakket", page == "hspakketdiv");
    ShowHideField("liPakketReken", page == "hsformdatadiv" || page == "hsproductinfodiv");
    ShowHideField("liRekenReken", page == "hsformdatadiv" && !ActiveFormIsAfsluiten);
    ShowHideField("liPakketAfsluit", (page == "hsformdatadiv" && !ActiveFormIsAfsluiten) || page == "hspakketdiv");
    ShowHideField("liAfsluitAfsluit", page == "hsformdatadiv" && ActiveFormIsAfsluiten);

    if ((ActiveFormIsAfsluiten && page == "hsformdatadiv") || page == "hspakketdiv") updatePakket = true;

    ActivePage = page;

    if (updatePakket)
    {
        GfUpdatePakketInfo();
    }
}

function HideFormDiv()
{
    ToggleVisiblePage("hspakketdiv");

    ActiveFormId = 0;
    ActiveFormNum = 0;
    ActiveFormIsAfsluiten = false;
}

function IsPakketOmgeving()
{
    var o = document.getElementById("pakketsamenstelling");
    return o ? true : false;
}

function GfUpdatePakketInfo()
{
    LastPakketInfo = null; // invalidate

    if (!IsPakketOmgeving())
    {
        return;
    }

    var pl = new SOAPClientParameters();
    pl.add("sessionId", "" + sesId);
    pl.add("betalingstermijnId", "" + ActiveBetalingstermijnId);
    pl.add("contractduurId", "" + ActiveContractduurId);
    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "GetPakketInfoFromSession", pl, true, GfUpdatePakketInfoResp);
}

var LastPakketInfo = null;
function GfUpdatePakketInfoResp(r)
{
    var o;

    LastPakketInfo = r;

    hasAddedForms = (r.Forms && r.Forms.length > 0);
    hasExistingForms = (r.ExistingForms && r.ExistingForms.length > 0);

    // dossier zaken toevoegen aan formulieren
    var resort = false;
    if (r.DossierProducts && r.DossierProducts.length > 0)
    {
        for (var i = 0, max = r.DossierProducts.length; i < max; i++)
        {
            r.Forms.push(r.DossierProducts[i]);
        }

        r.DossierProducts = new Array();
        resort = true;
    }

    if (resort)
    {
        var max = r.Forms.length;
        for (var j = 0; j < max - 1; j++)
        {
            for (i = 1; i < max - j; i++)
            {
                if (r.Forms[i - 1].Description > r.Forms[i].Description)
                {
                    var t = r.Forms[i];
                    r.Forms[i] = r.Forms[i - 1];
                    r.Forms[i - 1] = t;
                }
            }
        }
    }

    hasPartialForms = false;
    hasTerAcceptatie = false;
    var s = "";
    var c = r.Forms.length;
    var f;
    for (var i = 0; i < c; i++)
    {
        f = r.Forms[i];

        if (f.IsPartial == IntBoolean.True)
        {
            hasPartialForms = true;
        }

        if (f.AcceptationLevel == AcceptationLevel.TerAcceptatie)
        {
            hasTerAcceptatie = true;
        }

        var cmdClick = "";
        if (!f.FormId)
        {
            cmdClick = "LoadProductFromDossier('" + f.Id + "');";
        }
        else
        {
            cmdClick = "GfLoadCalcFormData(" + f.FormId + ", " + f.FormNum + ");";
        }

        var txtHint = "";
        var txtStatus = "";
        var isMoney = false;
        if (f.IsPartial == IntBoolean.True)
        {
            txtStatus = Language.JS_GeneralForms_PakketInfoDeelsIngevuldStatusText;
            txtHint = Language.JS_GeneralForms_PakketInfoDeelsIngevuldHintText;
        }
        else if (f.AcceptationLevel > AcceptationLevel.Aanvraag && f.AcceptationLevel != AcceptationLevel.TerAcceptatie)
        {
            txtStatus = Language.JS_GeneralForms_PremieOpAanvraagStatusText;
            txtHint = Language.JS_GeneralForms_PremieOpAanvraagHintText;
        }
        else
        {
            txtStatus = fmtMoney(f.Total || f.Totaal || 0);
            isMoney = true;
        }

        var cmdDelete = "";
        if (!ActiveFormIsAfsluiten || ActivePage != "hsformdatadiv")
        {
            if (!f.FormId)
            {
                cmdDelete = "DeleteFromDossier('" + (f.Id ? f.Id : "") + "', '" + f.AssurId + "', '" + f.ProductId + "', '" + (f.Variant ? f.Variant : "") + "');";
            }
            else
            {
                cmdDelete = "GfVerwijderUitPakket(" + f.FormId + ", " + f.FormNum + ", '" + f.ProductId + "', '" + f.AssurId + "', '" + (f.Variant ? f.Variant : "") + "', '" + (f.DossierProductId ? f.DossierProductId : "") + "');";
            }
        }

        var phtml = "<li>";

        var descriptionHintHtml = f.Identification ? " title=\"" + f.Identification + "\"" : "";

        phtml += "<a class=\"premie-titel-span\" href=\"javascript:void(0);\" onclick=\"" + cmdClick + "\"" + descriptionHintHtml + ">" + f.Description + "</a>";

        if (isMoney)
        {
            phtml += "<span class=\"eurosignfield\">&euro;</span><span class=\"po_premie\"><a href=\"javascript: void(0);\" onclick=\"" + cmdClick + "\">" + txtStatus + "</a></span>";
        }
        else
        {
            phtml += "<span class=\"eurosignfield\">&nbsp;</span><span><a href=\"javascript: void(0);\" class=\"hsHintanchor\" hshinttext=\"" + txtHint + "\" onmouseover=\"showhint(this.getAttribute('hshinttext'), this, event, '');\" onclick=\"" + cmdClick + "\">" + txtStatus + "</a></span>";
        }
        if (cmdDelete)
        {
            phtml += "<span><img src=\"" + BaseSiteUrl + "site/system/images/dustbin.gif\" alt=\"Verwijderen\" onclick=\"" + cmdDelete + "\"/></span>"
        }
        else
        {
            phtml += "<span><img src=\"" + BaseSiteUrl + "site/system/images/dustbin.gif\" alt=\"Verwijderen\" style=\"visibility:hidden\"/></span>";
        }
        phtml += "</li>";

        s += phtml;

        if (f.AllowMultiple == IntBoolean.False)
        {
            o = null;
            if (f.Variant)
            {
                o = document.getElementById("verz" + f.AssurId + f.ProductId + f.Variant);
            }
            if (!o) o = document.getElementById("verz" + f.AssurId + f.ProductId);
            if (!o) o = document.getElementById("verz" + f.ProductId);
            if (o)
            {
                if (typeof (o.oldOnClick) == "undefined")
                {
                    o.oldOnClick = o.onclick;
                    o.oldClassName = o.className;
                }
                o.onclick = null;
                o.className = "product_disabled";
            }
        }
    }

    o = document.getElementById("pakketsamenstelling");
    if (o)
    {
        if (s) s = (hasTerAcceptatie ? "<div class=\"teracceptatiewinkelmandjebericht\">" + Language.Product_TerAcceptatie_Message + "</div>" : "") + "<ul class=\"productlist-po\">" + s + "</ul>";
        else s = "<p class=\"emptypakketinfo\">" + Language.HSGeneralForms_LeegPakketTekst + "</p>";
        o.innerHTML = s;
    }

    if (r.ExistingForms)
    {
        s = "";
        for (var i = 0, max = r.ExistingForms.length; i < max; i++)
        {
            f = r.ExistingForms[i];
            if (f.PremieTotaal > 0)
            {
                s += "<li><span class=\"premie-titel-span\">" + f.Description + "</span><span class=\"eurosignfield\">&euro;</span><span class=\"po_premie\">" + fmtMoney(f.PremieTotaal) + "</span></li>";
            }
            else
            {
                s += "<li><span class=\"premie-titel-span\">" + f.Description + "</span><span class=\"eurosignfield\">&nbsp;</span><span class=\"po_premie\">&nbsp;</span></li>";
            }

            if (f.AssurId && f.ProductId && f.AllowMultiple == IntBoolean.False)
            {
                o = null;
                if (f.Variant)
                {
                    o = document.getElementById("verz" + f.AssurId + f.ProductId + f.Variant);
                }
                if (!o) o = document.getElementById("verz" + f.AssurId + f.ProductId);
                if (!o) o = document.getElementById("verz" + f.ProductId);
                if (o)
                {
                    if (typeof (o.oldOnClick) == "undefined")
                    {
                        o.oldOnClick = o.onclick;
                        o.oldClassName = o.className;
                    }
                    o.onclick = null;
                    o.className = "product_disabled";
                }
            }
        }

        if (s)
        {
            s = "<ul>" + s + "</ul>";

            o = document.getElementById("bestaandeverzekeringen");
            if (o)
            {
                o.innerHTML = s;

                o = document.getElementById("al_in_pakket");
                if (o)
                {
                    o.style.display = "";
                }
            }
        }
        else
        {
            hideField("al_in_pakket");
        }
    }
    else
    {
        hideField("al_in_pakket");
    }

    if (r.CanOpenDossier)
    {
        o = document.getElementById("listofdossiers");
        if (o)
        {
            var s = "<ul>";
            for (var i = 0, max = r.ExistingDossiers.length; i < max; i++)
            {
                var dossier = r.ExistingDossiers[i];

                var dossiernumber = dossier.DossierNumber ? " (" + dossier.DossierNumber + "B)" : "";

                if (dossier.Id == r.ActiveDossier)
                {
                    s += "<li class=\"activedossier\">" + dossier.Description + dossiernumber;
                    if (!ActiveDossierChanged && dossier.LastOfferteId)
                    {
                        s += "<a class=\"pdflink\" hshinttext=\"" + Language.HSGeneralForms_DownloadOffertePdfHint + "\" onmouseover=\"showhint(this.getAttribute('hshinttext'), this, event, '');\"  href=\"" + BaseSiteUrl + "offerteform.aspx?DossierId=" + dossier.Id + " \" target=\"_blank\"></a>";
                    }
                    s += "</li>";
                }
                else
                {
                    s += "<li>";
                    s += "<a class=\"opendossierlink\" href=\"javascript: void(0);\" onclick=\"QuickOpenDossier('" + dossier.Id + "')\">" + dossier.Description + dossiernumber + "</a>";

                    if (dossier.LastOfferteId)
                    {
                        s += "<a class=\"pdflink\" hshinttext=\"" + Language.HSGeneralForms_DownloadOffertePdfHint + "\" onmouseover=\"showhint(this.getAttribute('hshinttext'), this, event, '');\"  href=\"" + BaseSiteUrl + "offerteform.aspx?DossierId=" + dossier.Id + " \" target=\"_blank\"></a>";
                    }
                    s += "<img src=\"" + BaseSiteUrl + "site/system/images/dustbin.gif\" alt=\"Verwijderen\" onclick=\"DeleteDossier('" + dossier.Id + "', '" + dossier.Description + "')\"/>";
                    s += "</li>";
                }
            }
            s += "</ul>";

            o.innerHTML = s;
            o = document.getElementById("listofdossiersWrapper");
            if (o) o.style.display = "";
        }

        if (r.ActiveDossier)
        {
            ActiveDossierId = r.ActiveDossier;
            ActiveDossierChanged = r.ActiveDossierChanged;
            StartDossierTimer(); // start if not running
        }
        else
        {
            ActiveDossierId = "";
            ActiveDossierChanged = false;
            hideField("in_dossier");
        }
    }
    else
    {
        ActiveDossierId = "";
        ActiveDossierChanged = false;

        o = document.getElementById("listofdossiers");
        if (o) o.innerHTML = "";

        o = document.getElementById("listofdossiersWrapper");
        if (o) o.style.display = "none";

        hideField("btnCloseDossier");
    }

    o = document.getElementById("frm_pakketbetalingstermijn");
    if (o && o.value != "" + r.BetalingstermijnId)
    {
        o.value = "" + r.BetalingstermijnId;
        var termijn = getTxtFromSelect(o).toLowerCase();

        o = document.getElementById("premieper_pakketsamenoverzicht");
        if (o) o.innerHTML = termijn;

        o = document.getElementById("frm_maandpremie");
        if (o)
        {
            o.innerHTML = "Uw totale " + termijn + "premie";
        }
    }

    o = document.getElementById("frm_pakketcontractduur");
    if (o && o.value != "" + r.ContractduurId)
    {
        setSelectFromValue(o, r.ContractduurId);
    }

    // Pakketkosten
    if (r.Pakketkosten != 0.0)
    {
        o = document.getElementById("pakketkostentoeslagval");
        if (o)
        {
            o.innerHTML = fmtMoney(r.Pakketkosten);
        }

        o = document.getElementById("pakketpakketkostentoeslagwrapper");
        o.style.display = "";
    }
    else
    {
        o = document.getElementById("pakketpakketkostentoeslagwrapper");
        o.style.display = "none";
    }

    var hasDiscount = false, hasCharge = false;
    var maxWidth = 148; // max breedte van balkje

    var handler = function (data, prefix, showIfZero)
    {
        var discprefix = prefix + "korting";
        var chargeprefix = prefix + "toeslag";

        o = document.getElementById(discprefix + "wrapper");
        o.style.display = "none";
        o = document.getElementById(chargeprefix + "wrapper");
        o.style.display = "none";

        var idprefix = "";
        var limit = 0;
        if (data.Percentage < 0)
        {
            idprefix = chargeprefix;
            limit = data.MinPercentage;
            hasCharge = true;
        }
        else if (data.Percentage > 0 || (showIfZero && data.MaxPercentage > 0))
        {
            idprefix = discprefix;
            limit = data.MaxPercentage;
            hasDiscount = true;
        }

        if (idprefix)
        {
            // var value = Math.abs(totalValue);

            var perc = Math.abs(data.Percentage);
            var width;
            if (limit != 0)
            {
                width = (perc * maxWidth) / Math.abs(limit);
            }
            else
            {
                width = maxWidth * perc * 0.01;
            }
            width = Math.round(width);
            if (width > maxWidth) width = maxWidth;

            document.getElementById(idprefix + "staaf").style.width = width + "px";
            document.getElementById(idprefix + "percentage").innerHTML = (perc + " %").replace(".", ",");
            document.getElementById(idprefix + "wrapper").style.display = "";
        }
    };

    //  Betalingstermijn
    handler(r.BetalingstermijnKorting, "pakketbetalingstermijn", true);

    // Contractduur
    handler(r.ContractduurKorting, "pakketcontractduur", true);

    // Pakketkorting
    handler(r.PakketKorting, "pakketpakketkorting", false);

    o = document.getElementById("showifkortingwrapper");
    o.style.display = hasDiscount ? "" : "none";
    o = document.getElementById("showiftoeslagwrapper");
    o.style.display = hasCharge ? "" : "none";

    // totale premies updaten
    o = document.getElementById("pakketkortingval");
    if (o)
    {
        o.innerHTML = fmtMoney(r.TotaleKorting);
    }
    o = document.getElementById("pakkettoeslagval");
    if (o)
    {
        o.innerHTML = fmtMoney(r.TotaleToeslag);
    }
    o = document.getElementById("pakketpremie");
    if (o)
    {
        o.innerHTML = fmtMoney(r.TotalePremie);
    }

    var termijn = getTxtFromSelect("frm_pakketbetalingstermijn").toLowerCase();
    var o = document.getElementById("premieper_pakketsamenoverzicht");
    if (o) o.innerHTML = termijn;

    if (ActivePage == "hsformdatadiv" && ActiveFormId && !ActiveFormIsAfsluiten)
    {
        // formulier ook updaten...
        hofGetFieldsFromSession(ActiveFormId, ActiveFormNum);
    }

    // Velden dichtzetten op afsluitformulier!
    o = document.getElementById("frm_pakketbetalingstermijn");
    if (o)
    {
        setSelectDisabled(o, hasExistingForms || (ActiveFormId && ActiveFormIsAfsluiten));
        // o.disabled = hasExistingForms || (ActiveFormId && ActiveFormIsAfsluiten);
    }

    o = document.getElementById("frm_pakketcontractduur");
    if (o) 
    {
        setSelectDisabled(o, hasExistingForms || (ActiveFormId && ActiveFormIsAfsluiten));
        // o.disabled = hasExistingForms || (ActiveFormId && ActiveFormIsAfsluiten);
    }

    InitializePakketButtons();
}

function OnChangeBetalingstermijn(field)
{
    ActiveBetalingstermijnId = field.value;

    var termijn = getTxtFromSelect(field).toLowerCase();

    var o = document.getElementById("premieper_pakketsamenoverzicht");
    if (o) o.innerHTML = termijn;

    var o = document.getElementById("frm_maandpremie");
    if (o)
    {
        o.innerHTML = "Uw totale " + termijn + "premie";
    }

    GfUpdatePakketInfo();
}

function OnChangeContractduur(field)
{
    ActiveContractduurId = field.value;

    GfUpdatePakketInfo();
}

function GfVerwijderUitPakket(formId, formNum, productId, assurId, variant, dossierProductId)
{
    if (formId == ActiveFormId && formNum == ActiveFormNum)
    {
        alert(Language.GeneralForms_ActieveProductKanNietUitPakketVerwijderdWorden);
        return;
    }

    if (!confirm(Language.GeneralForms_ConfirmTekstProductUitPakketVerwijderen))
    {
        return;
    }

    var pl = new SOAPClientParameters();
    pl.add("sessionId", "" + sesId);
    pl.add("formId", "" + formId);
    pl.add("formNum", "" + formNum);
    pl.add("dossierProductId", "" + dossierProductId);
    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "VerwijderUitPakket", pl, true, GfVerwijderUitPakketResp);

    var o = null;
    if (variant) o = document.getElementById("verz" + assurId + productId + variant);
    if (!o && assurId) o = document.getElementById("verz" + assurId + productId);
    if (!o) o = document.getElementById("verz" + productId);
    if (o)
    {
        if (o.oldOnClick) o.onclick = o.oldOnClick;
        if (o.oldClassName) o.className = o.oldClassName;
    }
}

function GfVerwijderUitPakketResp(r)
{
    if (!r.Success)
    {
        if (r.Message)
        {
            alert(r.Message);
        }
    }

    GfUpdatePakketInfo();

    if (ActivePage == "hsformdatadiv")
    {
        hofGetFieldsFromSession(ActiveFormId, ActiveFormNum);
    }
}

function GfShowAfsluitPagina(id)
{
    if (ActiveDossierId)
    {
        // igv dossier een uitstapje maken
        var pl = new SOAPClientParameters();
        pl.add("sessionId", "" + sesId);
        pl.add("dossierId", "" + ActiveDossierId);
        pl.add("formId", "" + id);
        SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "PrepareDossierForAfsluitForm", pl, true, PrepareDossierForAfsluitFormResp);

        return;
    }

    if (!hasAddedForms)
    {
        if (typeof (NoFormsPopup) != "undefined" && NoFormsPopup)
        {
            ShowPopupDiv("", NoFormsPopup);
        }
        else
        {
            alert(Language.HSGeneralForms_NaarAfsluit_GeenProductInPakket);
        }
        return;
    }

    if (hasPartialForms)
    {
        alert(Language.GeneralForms_OnvolledigIngevuldeFormulieren);
        return;
    }

    if (hasTerAcceptatie)
    {
        alert(Language.Product_TerAcceptatie_In_Winkelmand);
        return;
    }

    var pl = new SOAPClientParameters();
    pl.add("sessionId", "" + sesId);
    pl.add("formId", "" + id);
    pl.add("formNum", "" + 0);
    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "GetAfsluitFormDataById", pl, true, GfShowAfsluitPaginaResp);

    ActiveFormId = id;
    ActiveFormNum = 0;
    ActiveFormIsAfsluiten = true;
}

function GfShowAfsluitPaginaResp(r)
{
    if (!r.Succes)
    {
        alert(r.Message || "");
        return;
    }

    GfLoadCalcFormDataResp(r);
}

function PrepareDossierForAfsluitFormResp(r)
{
    if (!r || !r.Success)
    {
        alert(Language.GeneralForms_NietAlleProductenKunnenWordenAfgesloten);
        GfUpdatePakketInfo(); // Update pakketinfo to visualize the changes, if any...
        return;
    }
    GfLoadCalcFormData(r.FormId, 0, true);
}

function GfLoadProductInfoForProduct(assurId, productId, variant)
{
    ActiveInfoAssurId = assurId;
    ActiveInfoProductId = productId;
    ActiveInfoProductVariant = variant ? variant : "";

    var pl = new SOAPClientParameters();
    pl.add("assurId", "" + assurId);
    pl.add("productId", "" + productId);
    pl.add("variant", variant ? "" + variant : "");
    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "LoadProductInfoByProduct", pl, true, GfLoadProductInfoResp);
}

function GfLoadProductInfoByUrl(url)
{
    var pl = new SOAPClientParameters();
    pl.add("url", "" + url);
    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "LoadProductInfoByUrl", pl, true, GfLoadProductInfoResp);
}

function GfLoadProductInfoResp(r)
{
    if (!r) return;

    var o = document.getElementById("hsproductinfodiv");
    if (o && r)
    {
        var s = "";
        if (ActiveInfoAssurId && ActiveInfoProductId && typeof (InfoInteractionBlock) != "undefined" && InfoInteractionBlock)
        {
            s += InfoInteractionBlock;
            s = s.replace(/\{AssurId\}/g, ActiveInfoAssurId);
            s = s.replace(/\{ProductId\}/g, ActiveInfoProductId);
            s = s.replace(/\{Variant\}/g, ActiveInfoProductVariant);
        }

        if (typeof (gfproductinfoheader) == "string") s += gfproductinfoheader;
        for (var i = 0; i < r.length; i++) s += r[i];
        if (typeof (gfproductinfofooter) == "string") s += gfproductinfofooter;

        o.innerHTML = s;
    }

    ToggleVisiblePage("hsproductinfodiv");

    ActiveInfoAssurId = null;
    ActiveInfoProductId = null;
    ActiveInfoProductVariant = null;
}

function GfToggleMijnPaginaDiv(toShow)
{
    document.getElementById("polisdetails").style.display = (toShow == "polisdetails" ? "block" : "none");
    document.getElementById("polisoverzicht").style.display = (toShow == "polisoverzicht" ? "block" : "none");
}

function GfTogglePolisZoekenDiv(toShow)
{
    document.getElementById("polisZoeken").style.display = (toShow == "polisZoeken" ? "block" : "none");
    document.getElementById("polisZoekenDetails").style.display = (toShow == "polisZoekenDetails" ? "block" : "none");
}

function InternalLoginUser(username, password, callback)
{
    var pl = new SOAPClientParameters();
    pl.add("sessionId", "" + sesId);
    pl.add("username", "" + username);
    pl.add("password", "" + password);
    pl.add("querystring", "" + window.location.search.substring(1));

    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "LoginUser", pl, true, callback);
}

function GfLoginUser()
{
    var un = document.getElementById("username");
    var pw = document.getElementById("password");

    var username = un.value;
    var password = pw.value;

    un.disabled = true;
    pw.disabled = true;
    var o = document.getElementById("password2");
    if (o) o.disabled = true;
    var btn = document.getElementById("btnlogin");
    if (btn) btn.disabled = true;

    InternalLoginUser(username, password, GfLoginUserResp);
}

function GfLoginUserResp(r)
{
    if (r.Success)
    {
        hideField("wwError");

        var o = document.getElementById("preferedredir");
        if (o && o.value) r.RedirectUrl = o.value;

        if (typeof (GfPostLoginUser) == "function")
        {
            GfPostLoginUser(r);
        }

        if (!r.LoginType || r.LoginType == LoginType.BackofficeCustomer)
        {
            loggedIn = true;
            welcomeurl = r.RedirectUrl;
            displayName = r.DisplayName;

            GfUpdateLoginStatus();

            if (r.RedirectUrl) document.location = r.RedirectUrl;
        }
        else if (r.LoginType == LoginType.OnlineCustomer)
        {
            if (r.RedirectUrl) document.location = r.RedirectUrl;
        }
        else if (r.LoginType == LoginType.PersonelBenefit)
        {
            if (r.RedirectUrl) document.location = r.RedirectUrl;
        }
        else if (r.LoginType == LoginType.Redirect)
        {
            alert(r.Message);
            document.location = r.RedirectUrl;
        }
    }
    else if (r.RedirectUrl)
    {
        document.location = r.RedirectUrl;
    }
    else if (r.Message)
    {
        // alert(r.Message);
        document.getElementById("wwError").innerHTML = r.Message;
        showField("wwError");
    }
    else
    {
        showField("wwError");
    }

    document.getElementById("username").disabled = false;
    document.getElementById("password").disabled = false;
    var o = document.getElementById("password2");
    if (o) o.disabled = false;
    var btn = document.getElementById("btnlogin");
    if (btn) btn.disabled = false;
}

var PostInlineLoginCallback = null;
function GfInlineLoginUser(msg, callback)
{
    PostInlineLoginCallback = callback;

    var html = "<h2>Inloggen</h2>";

    if (msg)
    {
        html += "<p>" + msg + "</p>";
    }

    html += "<table>";
    html += "<tr>";
    html += "<td>" + Language.JSGeneralforms_Inlog_Gebruikersnaam + "</td>";
    html += "<td><input type=\"text\" id=\"tbLoginUsername\" /></td>";
    html += "</tr>";
    html += "<tr>";
    html += "<td>" + Language.JSGeneralforms_InlogWachtwoord + "</td>";
    html += "<td><input type=\"password\" id=\"tbLoginPassword\" /></td>";
    html += "</tr>";
    html += "</table>";

    html += "<p>Heeft u nog geen account? Klik <a href=\"javascript:void(0);\" onclick=\"GfInlineCreateAccount();\">hier</a> om een nieuw account aan te maken.</p>";

    html += "<div class=\"popupbuttonwrapper\">";
    html += "<input type=\"button\" class=\"button\" value=\"Annuleren\" onclick=\"HidePopupDiv()\"/>";
    html += "<input type=\"button\" class=\"button\" value=\"" + Language.JSGeneralforms_InloggenButton + "\" onclick=\"DoInlineLoginUser()\"/>";
    html += "</div>";

    html += "<p id=\"wwError\" style=\"display: none\">" + Language.JSGeneralForms_FailedLogin + "</p>";

    ShowPopupDiv("", html, null, true);

    var o = document.getElementById("tbLoginUsername");
    if (o)
    {
        o.focus();
    }
    o = document.getElementById("tbLoginPassword");
    if (o)
    {
        o.onkeydown = function (event)
        {
            if (!event) event = window.event;

            if (event.keyCode == Keys.Return)
            {
                DoInlineLoginUser();
            }
        }
    }
}

function DoInlineLoginUser()
{
    var un = document.getElementById("tbLoginUsername");
    if (!un.value) // niet checken of geldig e-mail, mag ook relatienummer zijn!
    {
        alert(Language.JSGeneralforms_OngeldigeGebruikersnaam);
        un.focus();
        return;
    }
    var pw = document.getElementById("tbLoginPassword");
    if (!pw.value)
    {
        alert(Language.JSGeneralforms_GeenWachtwoordIngevuld);
        pw.focus();
        return;
    }

    var username = un.value;
    var password = pw.value;

    InternalLoginUser(username, password, DoInlineLoginUserResp);
}

function DoInlineLoginUserResp(r)
{
    if (!r.Success)
    {
        showField("wwError");
        return;
    }
    hideField("wwError");

    if (r.LoginType == LoginType.OnlineCustomer || r.LoginType == LoginType.BackofficeCustomer)
    {
        loggedIn = true;
        if (r.DisplayName) displayName = r.DisplayName;

        GfUpdateLoginStatus();

        if (PostInlineLoginCallback)
        {
            PostInlineLoginCallback(r);
        }
    }

    PostInlineLoginCallback = null;
    HidePopupDiv();
}

function GfInlineCreateAccount(msg, callback)
{
    if (callback)
    {
        PostInlineLoginCallback = callback;
    }

    var html = "<h2>Account aanmaken</h2>";

    if (!msg)
    {
        msg = "Vul onderstaande velden in om een account aan te maken.<br />Kies een gebruikersnaam en een wachtwoord met minimaal 6 karakters (letters/cijfers).<br />Het ingevulde e-mailadres zal gebruikt worden voor communicatie.";
    }
    html += "<p>" + msg + "</p>";

    html += "<table>";
    html += "<tr>";
    html += "<td>" + Language.JSGeneralforms_CreateAccount_Gebruikersnaam + "</td>";
    html += "<td><input type=\"text\" id=\"tbLoginUsername\" /></td>";
    html += "</tr>";
    html += "<tr>";
    html += "<tr>";
    html += "<td>" + Language.JSGeneralforms_CreateAccount_EmailAdres + "</td>";
    html += "<td><input type=\"text\" id=\"tbLoginEmail\" /></td>";
    html += "</tr>";
    html += "<tr>";
    html += "<td>" + Language.JSGeneralforms_CreateAccount_Wachtwoord + "</td>";
    html += "<td><input type=\"password\" id=\"tbLoginPassword\" /></td>";
    html += "</tr>";
    html += "<tr>";
    html += "<td>" + Language.JSGeneralforms_CreateAccount_HerhaalWachtwoord + "</td>";
    html += "<td><input type=\"password\" id=\"tbLoginPassword2\" /></td>";
    html += "</tr>";
    html += "</table>";

    html += "<div class=\"popupbuttonwrapper\">";
    html += "<input type=\"button\" class=\"button\" value=\"" + Language.JSGeneralforms_CreateAccount_Button_Annuleren + "\" onclick=\"HidePopupDiv()\"/>";
    html += "<input type=\"button\" class=\"button\" value=\"" + Language.JSGeneralforms_CreateAccount_Button_Aanmaken + "\" onclick=\"DoInlineCreateAccount()\"/>";
    html += "</div>";

    html += "<p id=\"wwError\" style=\"display: none\">" + Language.JSGeneralforms_CreateAccount_GebruikersnaamAlInGebruik + "</p>";

    ShowPopupDiv("", html, null, true);

    var o = document.getElementById("tbLoginUsername");
    if (o)
    {
        o.focus();
    }
    o = document.getElementById("tbLoginPassword2");
    if (o)
    {
        o.onkeydown = function (event)
        {
            if (!event) event = window.event;

            if (event.keyCode == Keys.Return)
            {
                DoInlineCreateAccount();
            }
        }
    }
}

function DoInlineCreateAccount()
{
    var un = document.getElementById("tbLoginUsername");

    var email = document.getElementById("tbLoginEmail");
    if (!email.value || !EmailValidationRegex.test(email.value))
    {
        alert(Language.JSGeneralForms_InvalidEmailAddress);
        email.focus();
        return;
    }

    var pw = document.getElementById("tbLoginPassword");

    //    if (!pw.value || !PasswordValidationRegex.test(pw.value))
    //    {
    //        alert("Vul een geldig wachtwoord in.\r\n\r\nHet wachtwoord moet voldoen aan:\r\n- karakters: a-z, A-Z, 0-9 en _ (underscore);\r\n- minimaal 6 posities lang.");
    //        pw.focus();
    //        return;
    //    }

    var pw2 = document.getElementById("tbLoginPassword2");
    if (!pw2.value || pw.value != pw2.value)
    {
        alert(Language.JSGeneralForms.Wachtwoord1DoesNotMatchWachtwoord2);
        pw2.focus();
        return;
    }

    var username = un.value;
    var password = pw.value;

    var pl = new SOAPClientParameters();
    pl.add("sessionId", "" + sesId);
    pl.add("username", "" + username);
    pl.add("password", "" + password);
    pl.add("email", "" + email.value);
    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "CreateUserAccount", pl, true, DoInlineCreateAccountResp);
}

function DoInlineCreateAccountResp(r)
{
    if (!r.Success)
    {
        document.getElementById('wwError').innerHTML = r.Message;
        showField("wwError");
        return;
    }
    hideField("wwError");

    if (r.LoginType == LoginType.OnlineCustomer || r.LoginType == LoginType.BackofficeCustomer)
    {
        loggedIn = true;
        if (r.DisplayName) displayName = r.DisplayName;

        GfUpdateLoginStatus();

        if (PostInlineLoginCallback)
        {
            PostInlineLoginCallback(r);
        }
    }

    PostInlineLoginCallback = null;
    HidePopupDiv();
}

function GfInlineCreateAccountProspect(msg, callback)
{
    PostInlineLoginCallback = callback;

    var html = "<h2>Account aanmaken</h2>";

    if (!msg)
    {
        msg = "Vul onderstaande velden in om een account aan te maken.<br />Kies een gebruikersnaam.<br />Het ingevulde e-mailadres zal gebruikt worden voor communicatie.";
    }

    html += "<p>" + msg + "</p>";

    html += "<table>";
    html += "<tr>";
    html += "<td>" + Language.JSGeneralforms_CreateAccount_Gebruikersnaam + "</td>";
    html += "<td><input type=\"text\" id=\"tbLoginUsername\" /></td>";
    html += "</tr>";
    html += "<tr>";
    html += "<tr>";
    html += "<td>" + Language.JSGeneralforms_CreateAccount_EmailAdres + "</td>";
    html += "<td><input type=\"text\" id=\"tbLoginEmail\" /></td>";
    html += "</tr>";
    html += "<tr>";
    html += "<td>" + Language.JSGeneralforms_VerstuurWachtwoordNaarKlant + "</td>";
    html += "<td><input type=\"checkbox\" id=\"tbEmailCustomer\" value=\"1\" checked=\"checked\" /></td>";
    html += "</tr>";
    html += "</table>";

    html += "<div class=\"popupbuttonwrapper\">";
    html += "<input type=\"button\" class=\"button\" value=\"" + Language.JSGeneralforms_CreateAccount_Button_Annuleren + "\" onclick=\"HidePopupDiv()\"/>";
    html += "<input type=\"button\" class=\"button\" value=\"" + Language.JSGeneralforms_CreateAccount_Button_Aanmaken + "\" onclick=\"DoInlineCreateAccountProspect()\"/>";
    html += "</div>";

    html += "<p id=\"wwError\" style=\"display: none\">" + Language.JSGeneralforms_CreateAccount_GebruikersnaamAlInGebruik + "</p>";

    ShowPopupDiv("", html, null, true);

    $("#tbLoginUsername").focus();

    var o = document.getElementById("tbLoginEmail");
    if (o)
    {
        o.onkeydown = function (event)
        {
            if (!event) event = window.event;

            if (event.keyCode == Keys.Return)
            {
                DoInlineCreateAccountProspect();
            }
        }
    }
}

function DoInlineCreateAccountProspect()
{
    var username = $("#tbLoginUsername").val();

    // RB : Waarom deze check, gebeurt ook server side
    var email = $("#tbLoginEmail").val();
    if (!email || !EmailValidationRegex.test(email))
    {
        alert(Language.JSGeneralForms_InvalidEmailAddress);
        $("#tbLoginEmail").focus();
        return;
    }

    var emailCustomer = $("#tbEmailCustomer:checked").val() || "0";

    var pl = new SOAPClientParameters();
    pl.add("sessionId", "" + sesId);
    pl.add("username", "" + username);
    pl.add("email", "" + email);
    pl.add("emailCustomer", "" + emailCustomer);
    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "CreateUserAccountProspect", pl, true, DoInlineCreateProspectAccountResp);
}

function DoInlineCreateProspectAccountResp(r)
{
    if (!r.Success)
    {
        $("#wwError").html(r.Message);
        $("#wwError").show();
        return;
    }

    $("#wwError").hide();

    if (r.LoginType == LoginType.OnlineCustomer || r.LoginType == LoginType.BackofficeCustomer)
    {
        loggedIn = true;
        loggedInType = r.LoginType;

        if (r.DisplayName)
        {
            displayName = r.DisplayName;
        }

        GfUpdateLoginStatus();

        if (PostInlineLoginCallback)
        {
            PostInlineLoginCallback(r);
        }
    }

    PostInlineLoginCallback = null;
    HidePopupDiv();
}

/**********************************************************************************/

function GfUpdateLoginStatus()
{
    if (ActiveDossierId)
    {
        StartDossierTimer();
    }

    var o;
    // var LoggedInElements = new Array('hsUitloggen', 'hsMijnPagina', 'hsIngelogdAls');
    // var NotLoggedInElements = new Array('hsInloggen');

    if (typeof (LoggedInElements) != "undefined")
    {
        for (var i = 0; i < LoggedInElements.length; i++)
        {
            o = document.getElementById(LoggedInElements[i]);
            if (o) o.style.display = loggedIn ? "" : "none";
        }
    }
    if (typeof (NotLoggedInElements) != "undefined")
    {
        for (var i = 0; i < NotLoggedInElements.length; i++)
        {
            o = document.getElementById(NotLoggedInElements[i]);
            if (o) o.style.display = loggedIn ? "none" : "";
        }
    }

    // naam invullen op de site
    o = document.getElementById("relatienaam1");
    if (o) o.innerHTML = displayName ? displayName : "";
    o = document.getElementById("relatienaam2");
    if (o) o.innerHTML = displayName ? displayName : "";
    o = document.getElementById("relatienaam3");
    if (o) o.innerHTML = displayName ? displayName : "";

    o = document.getElementById("relatieaanhef1");
    if (o) o.innerHTML = displayAanhef ? displayAanhef : "";
    o = document.getElementById("relatieaanhef2");
    if (o) o.innerHTML = displayAanhef ? displayAanhef : "";
    o = document.getElementById("relatieaanhef3");
    if (o) o.innerHTML = displayAanhef ? displayAanhef : "";

    o = document.getElementById("vorigelogin");
    if (o) o.innerHTML += previousLogin ? previousLogin : "";

    if (loggedInType == LoginType.OnlineCustomer)
    {
        o = document.getElementById("linkbackofficeaccountcontainer");
        if (o)
        {
            o.style.display = "";
        }
    }
}

function GfLogoutUser()
{
    var pl = new SOAPClientParameters();
    pl.add("sessionId", "" + sesId);
    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "LogoutUser", pl, true, GfLogoutUserResp);
}

function GfLogoutUserResp()
{
    loggedIn = false;
    document.location = BaseSiteUrl; // naar root van (sub)site
}

function GfGetPolisOverzicht()
{
    var pl = new SOAPClientParameters();
    pl.add("sessionId", "" + sesId);
    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "GetPolisOverzicht", pl, true, GfGetPolisOverzichtResp);
}

function GfGetPolisOverzichtResp(r)
{
    if (!r || r.length == 0) return;

    var html = r.join("");

    document.getElementById("polisoverzicht").innerHTML = html;

    InitAdvSelectOnNormalWebsite();
    GfSetForms();

    GfToggleMijnPaginaDiv("polisoverzicht");

    if (typeof (GfPostGetPolisOverzicht) == "function")
    {
        GfPostGetPolisOverzicht();
    }
}

function GfGetPolisDetails(polisId, description)
{
    try
    {
        var pl = new SOAPClientParameters();
        pl.add("sessionId", "" + sesId);
        pl.add("polisId", "" + polisId);
        pl.add("description", description);
        SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "GetPolisDetails", pl, true, GfGetPolisDetailsResp);
    }
    catch (ex)
    {
        alert(Language.JSGeneralformsErrorOnFetchPolisDetails);
    }
}

function GfGetPolisDetailsResp(r)
{
    // Check argument
    if (!r)
    {
        r = "";
    }

    var detaildiv = document.getElementById("polisdetails");
    var s = r.join("");
    s += "<p><a href=\"javascript: void(0)\" onclick=\"GfToggleMijnPaginaDiv('polisoverzicht')\">" + Language.JSGeneralforms_TerugNaarOverzicht + "</a></p>";

    detaildiv.innerHTML = s;

    GfToggleMijnPaginaDiv("polisdetails");

    // Scroll to the top of the screen
    window.scrollTo(0, 0);
}

function GfGetPolisZoekenDetails(polisId, description)
{
    try
    {
        var pl = new SOAPClientParameters();
        pl.add("sessionId", "" + sesId);
        pl.add("polisId", "" + polisId);
        pl.add("description", description);
        SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "GetPolisDetails", pl, true, GfGetPolisZoekenDetailsResp);
    }
    catch (ex)
    {
        alert(Language.JSGeneralformsErrorOnFetchPolisDetails);
    }
}

function GfGetPolisZoekenDetailsResp(r)
{
    // Check argument
    if (!r)
    {
        r = "";
    }

    var detaildiv = document.getElementById("polisZoekenDetails");
    var s = r.join("");
    s += "<p><a href=\"javascript: void(0)\" onclick=\"GfTogglePolisZoekenDiv('polisZoeken')\">" + Language.JSGeneralforms_TerugNaarZoekresultaat + "</a></p>";

    detaildiv.innerHTML = s;

    GfTogglePolisZoekenDiv("polisZoekenDetails");

    // Scroll to the top of the screen
    window.scrollTo(0, 0);
}


function GfGetPakketPaginaData()
{
    var pl = new SOAPClientParameters();
    pl.add("sessionId", "" + sesId);
    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "GetPakketPaginaData", pl, true, GfGetPakketPaginaDataResp);
}

function GfGetPakketPaginaDataResp(r)
{
    if (!r) return;

    //Er moet geredirect worden naar een voorloopformulier
    if (false && r.RedirectForm && r.RedirectForm.FormId)
    {
        // Voorloopformulier word al geladen door GfInitPakketPagina, hier dus niet alsnog doen...

        // ActiveFormId = r.RedirectForm.FormId;
        // ActiveFormNum = r.RedirectForm.FormNum;
        // GfLoadCalcFormData(r.RedirectForm.FormId, r.RedirectForm.FormNum, false);
        return;
    }
    else if (r.PageData)
    {
        if (typeof (GfPreGetPakketPaginaData) == "function")
        {
            GfPreGetPakketPaginaData();
        }

        var html = r.PageData.join("");

        document.getElementById("pakketpaginacontainer").innerHTML = html;
        InitHintsOnWebsite();
        if (LastPakketInfo) GfUpdatePakketInfoResp(LastPakketInfo);

        if (typeof (GfPostGetPakketPaginaData) == "function")
        {
            GfPostGetPakketPaginaData();
        }
    }
}

function GfGetRelationData()
{
    var pl = new SOAPClientParameters();
    pl.add("sessionId", "" + sesId);
    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "GetRelationData", pl, true, GfGetRelationDataResp);
}

function GfGetRelationDataResp(r)
{
    if (!r) return;

    var html = r.join("");

    document.getElementById("relationdata").innerHTML = html;
    showField("relationdata");
}

function GfGetClausuleText(polisId, codes)
{
    var pl = new SOAPClientParameters();
    pl.add("sessionId", "" + sesId);
    pl.add("polisId", "" + polisId);
    pl.add("codes", codes);
    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "GetClausuleText", pl, true, GfGetClausuleTextResp);
}

function GfGetClausuleTextResp(data)
{
    var html = "";
    for (var i = 0, c = data.length; i < c; i++)
    {
        html += data[i];
    }
    html = "<pre class=\"clausuletext\">" + html + "</pre>";
    ShowPopupDiv("Clausules", html, "500px");
}

function GfCheckFirstLogin()
{
    if (document.location.href.indexOf("firstlogin=true") != -1)
    {
        var o = document.getElementById("firstloginmsg");
        if (o) o.style.display = "";
    }
}

function GfGetAssurancePreview(assuranceFormId, assuranceFormNum)
{
    var pl = new SOAPClientParameters();
    pl.add("sessionId", "" + sesId);
    pl.add("formId", "" + ActiveFormId);
    pl.add("formNum", "" + ActiveFormNum);
    pl.add("assuranceFormId", "" + assuranceFormId);
    pl.add("assuranceFormNum", "" + assuranceFormNum);
    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "GetAssurancePreview", pl, true, GfGetAssurancePreviewResp);
}

function GfGetAssurancePreviewResp(r)
{
    if (!r) return;

    var s = r.join("");

    ShowPopupDiv("", s, "400px");
}

// ******************************************************************
// ******************************************************************
// ***********************      DOSSIER      ************************
// ******************************************************************
// ******************************************************************

var ActiveDossierChanged = false;
var ActiveDossierTimer = null;
var DossierTimerDelay = 90000;

var DossierOpenOption =
{
    Annuleren: 1,
    OpenWithoutDeletionOfActiveProducts: 2,
    OpenAndDeleteActiveProducts: 3
};

var DossierType =
{
    Pakket: 0,
    SingleForm: 1,
    SingleFormWithProduct: 2,
    WijzigForm: 3,
    WijzigFormWithProduct: 4
};

var DossierStatus =
{
    Unknown: 0,
    Active: 1,
    Deleted: 2,
    Sent: 3
};

var DossierOpenResult =
{
    Failed: 0,
    Success: 1,
    AlreadyOpen: 2,
    AlreadyAnotherOpen: 3,
    Blocked: 4
};

function StartDossierTimer()
{
    if (ActiveDossierTimer)
    {
        // already running
        return;
    }

    OnDossierTimerTick();
}

function StopDossierTimer()
{
    clearTimeout(ActiveDossierTimer);
    ActiveDossierTimer = null;
}

function OnDossierTimerTick()
{
    if (ActiveDossierId)
    {
        var pl = new SOAPClientParameters();
        pl.add("sessionId", "" + sesId);
        pl.add("dossierId", "" + ActiveDossierId);
        SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "DossierKeepLocked", pl, true);

        ActiveDossierTimer = setTimeout(function () { OnDossierTimerTick(); }, DossierTimerDelay);
    }
    else
    {
        ActiveDossierTimer = null;
    }
}

function HasPakketAcceptatie()
{
    return true; // eventueel kan dit van de server gezet worden. Nu doen we safe en gooien altijd alle producten uit het winkelmandje alsof elk pakket acceptatie heeft.
}


function QuickOpenDossier(dossierId)
{
    if (ActiveDossierId)
    {
        if (ActiveDossierId != dossierId)
        {
            alert(Language.JSGeneralforms_OpenBerekeningMetBerekeningReedsOpen);
        }
        return;
    }

    if (!hasAddedForms)
    {
        DoOpenDossier(dossierId);
    }
    else
    {
        var html = "<h2>Openen van een berekening:</h2>";

        if (HasPakketAcceptatie())
        {
            html += "<p>Er bevinden zich reeds producten in het pakket. Deze zullen verwijderd worden als de berekening geopend wordt.</p>";
        }
        else
        {
            html += "<p>Er bevinden zich reeds producten in het pakket. Maak een keuze uit een van onderstaande acties:</p>";

            html += "<ul>";
            html += "<li><label><input type=\"radio\" name=\"dossieropenoption\" id=\"dossieropenoption3\" value=\"3\" checked=\"checked\" />Verwijderen uit pakket en berekening openen</label></li>";
            html += "<li><label><input type=\"radio\" name=\"dossieropenoption\" id=\"dossieropenoption2\" value=\"2\" />Toevoegen aan de te openen berekening</label></li>";
            html += "</ul>";
        }

        html += "<div class=\"popupbuttonwrapper\">";
        html += "<input type=\"button\" class=\"button\" value=\"Annuleren\" onclick=\"HidePopupDiv()\"/>";
        html += "<input type=\"button\" class=\"button\" value=\"Doorgaan\" onclick=\"DoQuickOpenDossier('" + dossierId + "')\"/>";
        html += "</div>";

        ShowPopupDiv("", html, null, true);
    }
}

function DoQuickOpenDossier(dossierId)
{
    var option;

    if (HasPakketAcceptatie())
    {
        option = DossierOpenOption.OpenAndDeleteActiveProducts;
    }
    else
    {
        option = DossierOpenOption.OpenWithoutDeletionOfActiveProducts;
        radio = document.getElementById("dossieropenoption3");
        if (radio.checked)
        {
            option = DossierOpenOption.OpenAndDeleteActiveProducts;
        }
    }

    DoOpenDossier(dossierId, option);

    HidePopupDiv();
}

function DoOpenDossier(dossierId, option)
{
    var pl = new SOAPClientParameters();
    pl.add("sessionId", "" + sesId);
    pl.add("dossierId", "" + dossierId);
    if (option)
    {
        pl.add("option", "" + option);
    }
    pl.add("canOpenInactive", true);

    ActiveDossierId = dossierId;

    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "OpenDossier", pl, true, OpenDossierResp);
}

function OpenDossierResp(r)
{
    if (r.Succeeded)
    {
        if (r.RedirectUrl)
        {
            StartDossierTimer();

            document.location = r.RedirectUrl;
        }
        else
        {
            HideFormDiv(); // sluit een eventueel rekenformulier
            GfGetPakketPaginaData(); // reload pakketdeel voor corrigeren disabled products

            var dossierToBeLoaded = GetQuerystringValue("dossier");
            var originofrequest = GetQuerystringValue("origin");

            if (dossierToBeLoaded && originofrequest)
            {
                ShowPopupDiv('Nieuwe offerte', '<p>Er staat een nieuwe offerte onder \'Uw berekeningen\'.</p>', null, true);
            }
            GfUpdatePakketInfo();
            StartDossierTimer();
        }
    }
    else
    {
        if (r.Result == DossierOpenResult.AlreadyOpen)
        {
            // ignore
        }
        else if (r.Result == DossierOpenResult.AlreadyAnotherOpen)
        {
            alert(Language.JSGeneralforms_OpenBerekeningMetBerekeningReedsOpen);
        }
        else if (r.Result == DossierOpenResult.Blocked)
        {
            alert(Language.JSGeneralforms_BerekeningenGeblokkeerd);
            ActiveDossierId = "";
        }
        else
        {
            alert(Language.JSGeneralforms_OnverwachteFoutBijOpenenDossier);
            ActiveDossierId = "";
        }
    }
}

function DossierPostInlineLogin(r)
{
    // inloggen is gelukt, even een update doen van het pakket om de laatste gegevens te hebben!
    GfUpdatePakketInfo();

    // inloggen is gelukt, nu overgaan tot opslaan!
    CloseDossier(true);
}

function CloseDossier(save)
{
    if (!loggedIn)
    {
        // eerst een account aanmaken...
        if (typeof (AuthData) != "undefined" && AuthData)
        {
            GfInlineCreateAccountProspect("", DossierPostInlineLogin);
        }
        else
        {
            GfInlineLoginUser("Log hier in om door te gaan.", DossierPostInlineLogin);
        }
        return;
    }

    if (save)
    {
        var pl = new SOAPClientParameters();

        pl.add("formId", "" + ActiveFormId);
        pl.add("sessionId", "" + sesId);
        if (ActiveDossierId)
        {
            pl.add("dossierId", "" + ActiveDossierId);
        }
        SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "GetDossierInfo", pl, true, GetDossierInfoResp);
    }
    else
    {
        if (ActiveDossierChanged/* || hasAddedForms*/)
        {
            if (!confirm(Language.JSGeneralFormsBerekeningSluitenZonderWijzigingenOpslaanConfirmation))
            {
                return;
            }
        }

        var pl = new SOAPClientParameters();
        pl.add("sessionId", "" + sesId);
        pl.add("dossierId", "" + ActiveDossierId);
        pl.add("save", "0");
        pl.add("formId", "" + ActiveFormId);
        pl.add("formnum", "" + ActiveFormNum);
        SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "CloseDossier", pl, true, CloseDossierResp);
    }
}

function GetDossierInfoResp(r)
{
    if (!r)
    {
        alert(Language.JSGeneralforms_OnverwachteFoutBijOphalenBerekening);
        return;
    }

    if (!r.Description)
    {
        var today = new Date();
        var day = today.getDate();
        var month = today.getMonth() + 1;
        r.Description = "Berekening " + (day <= 9 ? "0" + day : "" + day) + "-" + (month <= 9 ? "0" + month : "" + month) + "-" + today.getFullYear();
    }

    var html = "";

    html += "<table class=\"dossierdescquestion\">";
    html += "<tr id=\"dossierdesclblrow\">";
    html += "<td>Omschrijving:</td>";
    html += "<td class=\"dossierdescriptiontd\">" + (r.Description ? r.Description : "") + "</td>";
    html += "<td><input type=\"button\" class=\"button\" value=\"Hernoemen\" onclick=\"ShowRenameDossierField();\"/></td>";
    html += "</tr>";
    html += "<tr id=\"dossierdescinputrow\" style=\"display: none\">";
    html += "<td>Omschrijving</td>";
    html += "<td class=\"dossierdescriptiontd\"><input type=\"text\" id=\"tbDossierDesc\" value=\"" + (r.Description ? r.Description : "") + "\" /></td>";
    html += "</tr>";
    html += "</table>";
    html += "<div class=\"popupbuttonwrapper\">";

    html += "<input type=\"button\" class=\"button\" value=\"Annuleren\" onclick=\"HidePopupDiv()\" />";
    html += "<input type=\"button\" class=\"button\" value=\"Opslaan\" onclick=\"DoCloseDossier()\" />";
    html += "</div>";

    if (r.Type == DossierType.Pakket)
    {
        ShowPopupDiv(Language.Dossier_Calculation_SavePopupMessage, html, null, true);
    }
    else
    {
        ShowPopupDiv(Language.Dossier_Form_SavePopupMessage, html, null, true);
    }

    var o = document.getElementById("tbDossierDesc");
    if (o)
    {
        o.onkeydown = function (e)
        {
            if (!e) e = window.event;

            if (e.keyCode == Keys.Return)
            {
                DoCloseDossier();
            }
            else if (e.keyCode == Keys.Escape)
            {
                HidePopupDiv();
            }
        };
    }
}

function ShowRenameDossierField()
{
    hideField('dossierdesclblrow');
    showFieldEx('dossierdescinputrow');

    var o = document.getElementById("tbDossierDesc");
    if (o)
    {
        o.select();
        o.focus();
    }
}

function DoCloseDossier()
{
    var o = document.getElementById("tbDossierDesc");
    if (!o.value)
    {
        alert(Language.Dossier_Fillin_Description_ErrorMessage);
        o.focus();
        return;
    }

    if (isSoapClientBusy())
    {
        return;
    }

    var pl = new SOAPClientParameters();
    pl.add("sessionId", "" + sesId);
    pl.add("dossierId", "" + ActiveDossierId);
    pl.add("description", "" + o.value);
    pl.add("save", "1");
    pl.add("formId", "" + ActiveFormId);
    pl.add("formnum", "" + ActiveFormNum);
    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "CloseDossier", pl, true, CloseDossierResp);
}

function CloseDossierResp(r)
{
    if (r.Type != DossierType.Pakket)
    {
        StopDossierTimer();
        HidePopupDiv();
        ActiveDossierId = "";

        document.location = r.RedirectUrl;
    }
    else
    {
        StopDossierTimer();
        HidePopupDiv();
        ActiveDossierId = "";
        GfGetPakketPaginaData();
        GfUpdatePakketInfo();
        HideFormDiv();
    }
}

function LoadProductFromDossier(productId)
{
    var pl = new SOAPClientParameters();
    pl.add("sessionId", "" + sesId);
    pl.add("dossierProductId", "" + productId);
    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "GetFormForProductFromDossier", pl, true, function (form)
    {
        if (!form)
        {
            alert(Language.JSGeneralforms_GeenFormulierBijGekozenProduct);
            return;
        }

        OpenProductFromDossier(productId, form);
    });
}

function OpenProductFromDossier(dossierProductId, formId)
{
    var pl = new SOAPClientParameters();
    pl.add("sessionId", "" + sesId);
    pl.add("dossierProductId", "" + dossierProductId);
    pl.add("formId", "" + formId);
    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "OpenProductFromDossier", pl, true, OpenProductFromDossierResp);
}

function OpenProductFromDossierResp(r)
{
    if (r && r.Success)
    {
        GfUpdatePakketInfo();

        if (r.RedirUrl)
        {
            document.location = r.RedirUrl;
        }
        else if (r.FormId != 0)
        {
            // er vanuit gaande dat we reeds op de pakketpagina zitten
            GfLoadCalcFormData(r.FormId, r.FormNum, false);
        }
    }
}

function DeleteFromDossier(dossierProductId, assurId, productId, variant)
{
    if (!confirm(Language.JSGeneralForms_ConfirmationProductVerwijderen))
    {
        return;
    }

    var pl = new SOAPClientParameters();
    pl.add("sessionId", "" + sesId);
    pl.add("dossierProductId", "" + dossierProductId);
    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "DeleteFromDossier", pl, true, DeleteFromDossierResp);

    var o = null;
    if (variant) o = document.getElementById("verz" + assurId + productId + variant);
    if (!o && assurId) o = document.getElementById("verz" + assurId + productId);
    if (!o) o = document.getElementById("verz" + productId);
    if (o)
    {
        if (o.oldOnClick) o.onclick = o.oldOnClick;
        if (o.oldClassName) o.className = o.oldClassName;
    }
}

function DeleteFromDossierResp(r)
{
    if (!r)
    {
        return;
    }

    if (!r.Success)
    {
        if (r.Message)
        {
            alert(r.Message);
        }
    }

    GfUpdatePakketInfo();

    if (ActivePage == "hsformdatadiv")
    {
        hofGetFieldsFromSession(ActiveFormId, ActiveFormNum);
    }
}

function DeleteDossier(dossierId, dossierName)
{
    if (!confirm("Weet u zeker dat u de berekening '" + dossierName + "' wilt verwijderen?"))
    {
        return;
    }

    var pl = new SOAPClientParameters();
    pl.add("sessionId", "" + sesId);
    pl.add("dossierId", "" + dossierId);
    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "DeleteDossier", pl, true, DeleteDossierResp);
}

function DeleteDossierResp(r)
{
    if (!r)
    {
        alert(Language.JSGeneralFormsOpgeslagenBerekeningKanNietVerwijderdWorden);
        return;
    }

    GfUpdatePakketInfo();
}

function DeleteDossierMijnPagina(dossierId, dossierName)
{
    if (!confirm("Weet u zeker dat u de berekening '" + dossierName + "' wilt verwijderen?"))
    {
        return;
    }

    var pl = new SOAPClientParameters();
    pl.add("sessionId", "" + sesId);
    pl.add("dossierId", "" + dossierId);
    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "DeleteDossier", pl, true, DeleteDossierMijnPaginaResp);
}

function DeleteDossierMijnPaginaResp(r)
{
    if (!r)
    {
        alert(Language.JSGeneralFormsOpgeslagenBerekeningKanNietVerwijderdWorden);
        return;
    }

    document.location = document.location;
}

function DeleteSingleFormDossier(dossierId, dossierName)
{
    if (!confirm("Weet u zeker dat u het formulier '" + dossierName + "' wilt verwijderen?"))
    {
        return;
    }

    var pl = new SOAPClientParameters();
    pl.add("sessionId", "" + sesId);
    pl.add("dossierId", "" + dossierId);
    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "DeleteDossier", pl, true, DeleteSingleFormDossierResp);
}

function DeleteSingleFormDossierResp(r)
{
    if (!r)
    {
        alert(Language.JSGeneralforms_OpgeslagenFormulierenKunnenNietVerwijderdWorden);
        return;
    }

    document.location = document.location;
}

function GetUserDossiersInfo(activeOnly)
{
    var pl = new SOAPClientParameters();
    pl.add("sessionId", "" + sesId);
    pl.add("activeOnly", activeOnly ? true : false);
    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "GetUserDossiersInfo", pl, true, GetUserDossiersInfoResp);
}

function GetUserSingleFormDossiersInfo(activeOnly)
{
    var pl = new SOAPClientParameters();
    pl.add("sessionId", "" + sesId);
    pl.add("activeOnly", activeOnly ? true : false);
    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "GetUserSingleFormDossiersInfo", pl, true, GetUserDossiersInfoResp);

}

function GetUserDossiersInfoResp(r)
{
    if (!r)
    {
        alert(Language.JSGeneralforms_FoutBijOphalenDossier);
        return;
    }

    var s = "";
    var actvDossier = r.ActiveDossier;
    var redir = r.RedirectUrl;

    for (var i = 0, max = r.Dossiers.length; i < max; i++)
    {
        var cur = r.Dossiers[i];

        var t = "";
        switch (cur.Type)
        {
            case DossierType.Pakket:
                t = "B";
                break;
            case DossierType.SingleForm:
                t = "F";
                break;
            case DossierType.WijzigForm:
                t = "M";
                break;
        }

        var dossiernumber = cur.DossierNumber ? " (" + cur.DossierNumber + "<span class=\"dossiertype\">" + t + "</span>)" : "";

        var cssClass;
        switch (cur.Status)
        {
            case DossierStatus.Unknown:
                cssClass = "liDossierStatusOnbekend";
                break;
            case DossierStatus.Active:
                cssClass = "liDossierStatusActief";
                break;
            case DossierStatus.Deleted:
                cssClass = "liDossierStatusVerwijderd";
                break;
            case DossierStatus.Sent:
                cssClass = "liDossierStatusVerzonden";
                break;
            default:
                cssClass = "liDossierStatusOnbekend";
                break;
        }


        if (r.Type == DossierType.Pakket)
        {
            s += "<li class=\"" + cssClass + "\"><a href=\"javascript: void(0);\" onclick=\"MijnPaginaOpenDossier('" + cur.Id + "', '" + redir + "');\">" + cur.Description + dossiernumber + "</a> " + GetActiveDossierLabel(cur.Id);
        }
        else
        {
            if(cur.Type == DossierType.WijzigForm)
            {

                s += "<li class=\"" + cssClass + "\"><a href=\"javascript: void(0);\" onclick=\"OpenProductFromSingleFormDossier('" + cur.SingleFormDossierProductId + "', '" + cur.FormId + "');\">" + cur.Description + dossiernumber + "</a> " + GetActiveDossierLabel(cur.Id);
            }
            else if (cur.SingleFormDossierProductId)
            {
                s += "<li class=\"" + cssClass + "\"><a href=\"javascript: void(0);\" onclick=\"LoadProductFromSingleFormDossier('" + cur.Id + "', '" + cur.SingleFormDossierProductId + "', '" + redir + "');\">" + cur.Description + dossiernumber + "</a> " + GetActiveDossierLabel(cur.Id);
            }
            else
            {
                s += "<li class=\"" + cssClass + "\"><a href=\"javascript: void(0);\" onclick=\"MijnPaginaOpenSingleFormDossier('" + cur.Id + "', '" + redir + "');\">" + cur.Description + dossiernumber + "</a> " + GetActiveDossierLabel(cur.Id);
            }
        }

        if (cur.Id != ActiveDossierId)
        {
            if (r.Type == DossierType.Pakket)
            {
                s += " <img src=\"" + BaseSiteUrl + "site/system/images/dustbin.gif\" onclick=\"DeleteDossierMijnPagina('" + cur.Id + "', '" + cur.Description + "');\" /> ";
            }
            else
            {
                s += " <img src=\"" + BaseSiteUrl + "site/system/images/dustbin.gif\" onclick=\"DeleteSingleFormDossier('" + cur.Id + "', '" + cur.Description + "');\" /> ";
            }
        }

        if (cur.LastOfferteId)
        {
            s += "<a class=\"pdflink\" hshinttext=\"Download de offerte in pdf formaat\" onmouseover=\"showhint(this.getAttribute('hshinttext'), this, event, '');\"  href=\"" + BaseSiteUrl + "offerteform.aspx?DossierId=" + cur.Id + " \" target=\"_blank\"></a>";
        }

        s += "</li>";
    }

    if (!s)
    {
        var title = (r.Type == DossierType.Pakket) ? "berekeningen" :  "formulieren";

        s += "<p>Er zijn nog geen opgeslagen " + title + ".</p>";
    }
    else
    {
        s = "<ul class=\"mijnpaginadossierlist\">" + s + "</ul>";
    }

    var container = "";
    if (r.Type == DossierType.Pakket)
    {
        container = "opgeslagenberekeningencontainer";
    }
    else
    {
        container = "opgeslagenformulierencontainer";
    }

    $("#" + container).html(s);
}

function GetActiveDossierLabel(currentId)
{
    if (ActiveDossierId == currentId)
    {
        return '<span class=\"currentopendossier\">(Geopend)</span>';
    }
    else
    {
        return '';
    }
}

function MijnPaginaOpenDossier(dossierId, redir)
{
    // request to load the dossier
    redir += "?dossier=" + dossierId;

    document.location = redir;
}

function MijnPaginaOpenSingleFormDossier(dossierId, redir)
{
    if (ActiveDossierId && (ActiveDossierId != dossierId))
    {
        alert(Language.JSGeneralforms_OpenDossierTerwijlErReedsEenOpenStaat);
        return;
    }

    var pl = new SOAPClientParameters();
    pl.add("sessionId", "" + sesId);
    pl.add("dossierId", "" + dossierId);
    pl.add("canOpenInactive", "" + true);

    ActiveDossierId = dossierId;

    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "OpenDossier", pl, true, MijnPaginaOpenSingleFormDossierResp);
}

function MijnPaginaOpenSingleFormDossierResp(r)
{
    if (r.RedirectUrl)
    {
        document.location = r.RedirectUrl;
    }
    else
    {
        // Is wijzig formulier dossier gewijzigd
        if (r.Result == 5)
        {
            alert(Language.JSGeneralforms_DossierKanNietGeopendWordenWantIsGewijzigd);
        }
        else
        {
            alert(Language.JSGeneralforms_DossierKanNietGeopendWorden);
        }
        ActiveDossierId = "";
    }
}

function LoadProductFromSingleFormDossier(dossierId, productId)
{
    if (ActiveDossierId == dossierId)
    {
        OpenProductFromSingleFormDossier(productId, ActiveDossierFormId);
        return;
    }

    if (ActiveDossierId)
    {
        alert(Language.JSGeneralforms_OpenDossierTerwijlErReedsEenOpenStaat);
        return;
    }

    ActiveDossierId = dossierId;

    var pl = new SOAPClientParameters();
    pl.add("sessionId", "" + sesId);
    pl.add("dossierId", "" + dossierId);
    pl.add("dossierProductId", "" + productId);
    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "GetFormForProductFromDossier", pl, true,
        function (r)
        {
            GetFormForProductFromSingleFormDossierResp(productId, r);
        });
}

function GetFormForProductFromSingleFormDossierResp(productId, formId)
{
    if (!formId)
    {
        alert(Language.JSGeneralforms_GeenFormulierBijGekozenProduct);
        return;
    }

    OpenProductFromSingleFormDossier(productId, formId);
}

function OpenProductFromSingleFormDossier(dossierProductId, formId)
{
    var pl = new SOAPClientParameters();
    pl.add("sessionId", "" + sesId);
    pl.add("dossierProductId", "" + dossierProductId);
    pl.add("formId", "" + formId);
    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "OpenSingleFormDossierWithProduct", pl, true, OpenSingleFormDossierWithProductResp);
}

function OpenSingleFormDossierWithProductResp(r)
{
    if (!r)
    {
        return;
    }

    if (r.Success)
    {
        if (r.RedirUrl)
        {
            document.location = r.RedirUrl;
        }
    }
    else
    {
        if (r.Modified)
        {
            alert(Language.RecentlyOpenedCalculations_DossierIsModified_StartNew);
        }
    }
}

/////////////////////////////////////////////////////////////
/////////////////// Wijzigingsformulieren ///////////////////
/////////////////////////////////////////////////////////////

function EditForm(polisId)
{
    var pl = new SOAPClientParameters();
    pl.add("sessionId", "" + sesId);
    pl.add("polisId", "" + polisId);
    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "GetEditFormRedirectUri", pl, true, EditFormResp);
}

function EditFormResp(r)
{
    if (!r)
    {
        alert(Language.JSGeneralForms_GeenWijzigingsformulierGevonden);
    }
    else
    {
        // Redirect to edit page
        if (r.OpenInWindow)
        {
            if (!window.open(r.Url)) alert('Popups zijn geblokkeerd');
        }
        else
        {
            document.location = r.Url;
        }
    }
}

function DamageForm(polisId)
{
    var pl = new SOAPClientParameters();
    pl.add("sessionId", "" + sesId);
    pl.add("polisId", "" + polisId);
    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "GetDamageFormRedirectUri", pl, true, DamageFormResp);
}

function DamageFormResp(r)
{
    if (!r)
    {
        alert(Language.JSGeneralForms_GeenSchadeFormulierGevonden);
    }
    else
    {
        if (r.OpenInWindow)
        {
            if (!window.open(r.Url)) alert('Popups zijn geblokkeerd');
        }
        else
        {
            document.location = r.Url;
        }
    }
}

function GetRelationEditForm()
{
    var pl = new SOAPClientParameters();
    pl.add("sessionId", "" + sesId);
    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "GetRelationEditFormRedirectUrl", pl, true, GetRelationEditFormResp);
}

function GetRelationEditFormResp(r)
{
    if (!r)
    {
        alert(Language.JSGeneralForms_GeenWijzigingsformulierGevonden);
    }
    else
    {
        // Redirect to edit page
        document.location = r;
    }
}


/////////////////////////////////////////////////////////////
//////////////// Elders lopende verzekeringen ///////////////
/////////////////////////////////////////////////////////////

var ActiveExternalAssuranceId = "";
var ActiveExternalAssuranceTimestamp = "0";

function DeleteExternalAssurance(id, timestamp, description)
{
    if (!confirm("Weet u zeker dat u de elders lopende verzekering '" + description + "' wilt verwijderen?"))
    {
        return;
    }

    var pl = new SOAPClientParameters();
    pl.add("sessionId", "" + sesId);
    pl.add("id", "" + id);
    pl.add("timestamp", "" + timestamp);
    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "DeleteExternalAssurance", pl, true, DeleteExternalAssuranceResp);
}

function DeleteExternalAssuranceResp(r)
{
    if (!r)
    {
        alert(Language.JSGeneralforms_OnverwachteFoutBijVerwijderenEldersLopendeVerzekering);
        return;
    }

    UpdateExternalAssurances();
}

function UpdateExternalAssurances()
{
    var pl = new SOAPClientParameters();
    pl.add("sessionId", "" + sesId);
    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "GetHtmlForExternalAssurances", pl, true, GetHtmlForExternalAssurancesResp);
}

function GetHtmlForExternalAssurancesResp(r)
{
    if (!r)
    {
        return;
    }

    var o = document.getElementById("externalassurancescontainer");
    if (o)
    {
        o.innerHTML = r.join("");
    }
}

function SaveExternalAssurance()
{
    var pl = new SOAPClientParameters();

    // popup controleren en data versturen naar de server
    var o = document.getElementById("extassdescription");
    if (!o.value)
    {
        alert(Language.JSGeneralforms_InvoerEldersLopendeVerzekering_LegeOmschrijving);
        o.focus();
        return;
    }
    pl.add("description", "" + o.value);

    o = document.getElementById("extasspolisnummer");
    if (!o.value)
    {
        alert(Language.JSGeneralforms_InvoerEldersLopendeVerzekering_LeegPolisnummer);
        o.focus();
        return;
    }
    pl.add("polisnr", "" + o.value);

    // Maatschappij
    o = document.getElementById("extassmijcode");
    if (!o.value)
    {
        alert(Language.JSGeneralforms_InvoerEldersLopendeVerzekering_LegeMaatschappij);
        o.focus();
        return;
    }
    pl.add("mijcode", "" + o.value);

    if (o.value == "Z999")
    {
        o = document.getElementById("extassmijdesc");
        if (!o.value)
        {
            alert(Language.JSGeneralforms_InvoerEldersLopendeVerzekering_LegeOmschrijvingVanMaatschappij);
            o.focus();
            return;
        }
        pl.add("mijcodedesc", "" + o.value);
    }

    // Product
    o = document.getElementById("extassproduct");
    if (!o.value)
    {
        alert(Language.JSGeneralforms_InvoerEldersLopendeVerzekering_GeenProductGekozen);
        o.focus();
        return;
    }
    pl.add("product", "" + o.value);

    if (o.value == "0")
    {
        o = document.getElementById("extassproductdesc");
        if (!o.value)
        {
            alert(Language.JSGeneralforms_InvoerEldersLopendeVerzekering_LegeOmschrijvingProduct);
            o.focus();
            return;
        }
        pl.add("productdesc", "" + o.value);
    }

    // Bedragen
    o = document.getElementById("extassverzekerdbedrag");
    if (!o.value)
    {
        alert(Language.JSGeneralforms_InvoerEldersLopendeVerzekering_GeenVerzekerdBedrag);
        o.focus();
        return;
    }
    pl.add("verzekerdbedrag", "" + o.value);

    o = document.getElementById("extasspremium");
    if (!o.value)
    {
        alert(Language.JSGeneralforms_InvoerEldersLopendeVerzekering_GeenPremie);
        o.focus();
        return;
    }
    pl.add("premium", "" + o.value);

    // Datums    
    o = document.getElementById("extassstartdate");
    if (!o.value)
    {
        alert(Language.JSGeneralforms_InvoerEldersLopendeVerzekering_GeenStartDatum);
        o.focus();
        return;
    }
    pl.add("ingangsdatum", "" + o.value);

    o = document.getElementById("extassvervaldatum");
    if (!o.value)
    {
        alert(Language.JSGeneralforms_InvoerEldersLopendeVerzekering_GeenVervaldatum);
        o.focus();
        return;
    }
    pl.add("vervaldatum", "" + o.value);

    pl.add("sessionId", "" + sesId);
    pl.add("id", "" + ActiveExternalAssuranceId);
    pl.add("timestamp", "" + ActiveExternalAssuranceTimestamp);
    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "SaveExternalAssurance", pl, true, SaveExternalAssuranceResp);
}

function SaveExternalAssuranceResp(r)
{
    if (!r)
    {
        alert(Language.JSGeneralform_OnverwachteFoutBijOpslaanEldersLopendePolis);
        return;
    }

    UpdateExternalAssurances();

    ClosePopup();
}

function AddExternalAssurance()
{
    ClosePopup();

    ActiveExternalAssuranceId = "";
    ActiveExternalAssuranceTimestamp = "0";

    // popup leegmaken
    var o = document.getElementById("extassdescription");
    o.value = "";

    o = document.getElementById("extasspolisnummer");
    o.value = "";

    // Maatschappij
    o = document.getElementById("extassmijcode");
    o.value = "";
    o = document.getElementById("extassmijdesc");
    o.value = "";

    // Product
    o = document.getElementById("extassproduct");
    o.value = "";
    o = document.getElementById("extassproductdesc");
    o.value = "";

    // Bedragen
    o = document.getElementById("extassverzekerdbedrag");
    o.value = "";
    o = document.getElementById("extasspremium");
    o.value = "";

    // Datums    
    o = document.getElementById("extassstartdate");
    o.value = "";
    o = document.getElementById("extassvervaldatum");
    o.value = "";

    // popup tonen
    ShowPopup("externalassurancespopup");
}

function EditExternalAssurance(id)
{
    ClosePopup();

    ActiveExternalAssuranceId = "";
    ActiveExternalAssuranceTimestamp = "0";

    var pl = new SOAPClientParameters();
    pl.add("sessionId", "" + sesId);
    pl.add("id", "" + id);
    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "GetExternalAssurance", pl, true, GetExternalAssuranceResp);
}

function GetExternalAssuranceResp(r)
{
    if (!r)
    {
        alert(Language.JSGeneralforms_GeenGegevensGevondenEldersLopendeVerzekeringen);
        return;
    }

    ActiveExternalAssuranceId = r.Id;
    ActiveExternalAssuranceTimestamp = r.Timestamp;

    r.FindFieldById = function (id)
    {
        var f = null;
        for (var i = 0, max = i < this.Fields.length; f == null && max; i++)
        {
            f = this.Fields[i];
            if (f.FieldName != id) f = null;
        }
        return f;
    };

    var field;

    var o = document.getElementById("extassdescription");
    o.value = r.Description ? r.Description : "";

    o = document.getElementById("extasspolisnummer");
    o.value = r.Polisnumber;

    // Maatschappij
    o = document.getElementById("extassmijcode");
    o.value = "";
    field = r.FindFieldById("mijcode");
    if (field)
    {
        setSelectFromValue(o, field.FieldValue);
        OnChangeExtAssMijCode(o);

        o = document.getElementById("extassmijdesc");
        o.value = "";
        field = r.FindFieldById("mijdescription");
        if (field) o.value = field.FieldValue ? field.FieldValue : "";
    }

    // Product
    o = document.getElementById("extassproduct");
    o.value = "";
    field = r.FindFieldById("productid");
    if (field)
    {

        o.value = field.FieldValue;
        OnChangeExtAssProduct(o);

        o = document.getElementById("extassproductdesc");
        o.value = "";
        field = r.FindFieldById("productdesc");
        if (field) o.value = field.FieldValue ? field.FieldValue : "";
    }

    // Bedragen
    o = document.getElementById("extassverzekerdbedrag");
    o.value = "";
    field = r.FindFieldById("verzekerdbedrag");
    if (field && field.FieldValue) o.value = field.FieldValue;

    o = document.getElementById("extasspremium");
    // o.value = fmtMoney(r.Premie);
    o.value = GetDots(r.Premie);

    // Datums    
    o = document.getElementById("extassstartdate");
    o.value = "";
    if (r.StartDate)
    {
        var day = r.StartDate.getDate();
        var month = r.StartDate.getMonth() + 1;
        o.value = "" + (day < 10 ? "0" + day : day) + "-" + (month < 10 ? "0" + month : month) + "-" + r.StartDate.getFullYear();
    }

    o = document.getElementById("extassvervaldatum");
    o.value = "";
    field = r.FindFieldById("vervaldatum");
    if (field) o.value = field.FieldValue;

    // popup tonen
    ShowPopup("externalassurancespopup");
}

function OnChangeExtAssMijCode(field)
{
    var tr = document.getElementById("extassmijdesctr");
    if (tr)
    {
        tr.style.display = field.value == "Z999" ? "" : "none";
    }
}

function OnChangeExtAssProduct(field)
{
    var tr = document.getElementById("extassproductdesctr");
    if (tr)
    {
        tr.style.display = field.value == "0" ? "" : "none";
    }
}

/////////////////////////////////////////////////////////////
//////////////////// Account management  ////////////////////
/////////////////////////////////////////////////////////////

function AccountCreateAccount(usernameId, passwordId, password2Id, emailId)
{
    var un = document.getElementById(usernameId);

    var email = document.getElementById(emailId);
    if (!email.value || !EmailValidationRegex.test(email.value))
    {
        alert(Language.JSGeneralForms_InvalidEmailAddress);
        email.focus();
        return;
    }

    var pw2 = document.getElementById(password2Id);
    if (!pw2.value || pw.value != pw2.value)
    {
        alert(Language.Wachtwoord1DoesNotMatchWachtwoord2);
        pw2.focus();
        return;
    }

    var username = un.value;
    var password = pw.value;

    var pl = new SOAPClientParameters();
    pl.add("sessionId", "" + sesId);
    pl.add("username", "" + username);
    pl.add("password", "" + password);
    pl.add("email", "" + email.value);
    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "CreateUserAccount", pl, true, AccountCreateAccountResp);
}

function AccountCreateAccountResp(r)
{
    if (!r.Success)
    {
        if (r.Message)
        {
            $("#wwError").html(r.Message);
        }

        showField("wwError");
        return;
    }

    hideField("wwError");

    if (r.LoginType == LoginType.OnlineCustomer || r.LoginType == LoginType.BackofficeCustomer)
    {
        loggedIn = true;
        if (r.DisplayName) displayName = r.DisplayName;

        GfUpdateLoginStatus();
    }
}

function AccountChangePassword(oldpasswordId, newpasswordId, newpasswordId2)
{
    var o = document.getElementById(oldpasswordId);
    var oldpassword = trimLeftRightSpaces(o.value);
    if (!oldpassword)
    {
        alert(Language.JSGeneralForms_ChangePass_LeegOudWachtwoord);
        o.focus();
        return;
    }

    o = document.getElementById(newpasswordId);
    var newpassword = trimLeftRightSpaces(o.value);
    if (!newpassword)
    {
        alert(Language.JSGeneralForms_ChangePass_LeegNieuwWachtwoord);
        o.focus();
        return;
    }

    o = document.getElementById(newpasswordId2);
    var newpassword2 = trimLeftRightSpaces(o.value);
    if (!newpassword2)
    {
        alert(Language.JSGeneralForms_ChangePass_NieuwWachtwoordTweedeKeer);
        o.focus();
        return;
    }

    if (newpassword != newpassword2)
    {
        alert(Language.JSGeneralForms_ChangePass_NieuwWachtwoordTweeKeer);
        o.select();
        o.focus();
        return;
    }

    var pl = new SOAPClientParameters();
    pl.add("sessionId", "" + sesId);
    pl.add("oldPassword", "" + oldpassword);
    pl.add("newPassword", "" + newpassword);
    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "AccountChangePassword", pl, true, AccountChangePasswordResp);
}

function AccountChangePasswordResp(r)
{
    if (!r)
    {
        alert(Language.JSGeneralforms_ChangePasswordFailed);
        return;
    }

    // melding en popup verbergen
    // alert(Language.JSGeneralforms_ChangePasswordSuccess);
    $("#changepasswordformcontainer").hide();
    $("#changepasswordformresultmsg").html(Language.JSGeneralforms_ChangePasswordSuccess).show();
}

function AccountForgotPassword(usernameId, emailId)
{
    var o = document.getElementById(usernameId);
    var username = trimLeftRightSpaces(o.value);
    if (!username)
    {
        alert(Language.JSGeneralforms_ForgotPassword_EmptyGebruikersnaam);
        o.focus();
        return;
    }

    o = document.getElementById(emailId);
    var email = trimLeftRightSpaces(o.value);
    if (!email)
    {
        alert(Language.JSGeneralforms_ForgotPassword_EmptyEmailAddress);
        o.focus();
        return;
    }

    var pl = new SOAPClientParameters();
    pl.add("sessionId", "" + sesId);
    pl.add("username", "" + username);
    pl.add("email", "" + email);
    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "AccountForgotPassword", pl, true, AccountForgotPasswordResp);
}

function AccountForgotPasswordResp(r)
{
    if (!r)
    {
        alert(Language.JSGeneralforms_ForgotPassword_ErrorSendingNewPass);
        return;
    }

    // melding en popup verbergen
    alert(Language.JSGeneralforms_ForgotPassword_SuccessSendingNewPass);
}

function AccountForgotUsername(emailId)
{
    var o = document.getElementById(emailId);
    var email = trimLeftRightSpaces(o.value);
    if (!email)
    {
        alert(Language.JSGeneralforms_ForgotUsername_LeegEmailAdres);
        o.focus();
        return;
    }

    var pl = new SOAPClientParameters();
    pl.add("sessionId", "" + sesId);
    pl.add("email", "" + email);
    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "AccountForgotUsername", pl, true, AccountForgotUsernameResp);
}

function AccountForgotUsernameResp(r)
{
    if (!r)
    {
        alert(Language.JSGeneralforms_ForgotUsername_OnbekendEmailAdres);
        return;
    }

    // melding en popup verbergen
    alert(Language.JSGeneralforms_ForgotUsername_SuccessFullySentGebruikersnaam);
}

function AccountConnectToBackoffice1(relationNumberId, passwordId)
{
    var o = document.getElementById(relationNumberId);
    var relnr = o.value;
    if (!relnr)
    {
        alert("Vul uw relatienummer in.");
        o.focus();
        return;
    }

    o = document.getElementById(passwordId);
    var password = o.value;
    if (!password)
    {
        alert("Vul uw (backoffice-)wachtwoord in.");
        o.focus();
        return;
    }

    var pl = new SOAPClientParameters();
    pl.add("sessionId", "" + sesId);
    pl.add("relationNumber", "" + relnr);
    pl.add("password", "" + password);
    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "AccountConnectToBackoffice1", pl, true, AccountConnectToBackofficeResp);
}

function AccountConnectToBackoffice2(relationNumberId, polisNumberId)
{
    var o = document.getElementById(relationNumberId);
    var relnr = o.value;
    if (!relnr)
    {
        alert(Language.JSGeneralforms_Connect2Backoffice_LeegRelatienr);
        o.focus();
        return;
    }

    o = document.getElementById(polisNumberId);
    var polnr = o.value;
    if (!polnr)
    {
        alert(Language.JSGeneralforms_Connect2Backoffice_LeegPolisNr);
        o.focus();
        return;
    }

    var pl = new SOAPClientParameters();
    pl.add("sessionId", "" + sesId);
    pl.add("relationNumber", "" + relnr);
    pl.add("polisNumber", "" + polnr);
    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "AccountConnectToBackoffice2", pl, true, AccountConnectToBackofficeResp);
}

function IsNumeric(value)
{
    // TODO: middels regex     return value.match(/^[0-9]*$/);

    var nums = "0123456789";

    for (var i = 0, max = value.length; i < max; i++)
    {
        if (nums.indexOf(value.charAt(i)) == -1)
        {
            return false;
        }
    }

    return true;
}

function AccountConnectToBackoffice3(polisNumberId, zipCodeId, streetNumberId)
{
    var o = document.getElementById(polisNumberId);
    var polnr = o.value;
    if (!polnr)
    {
        alert(Language.JSGeneralforms_Connect2Backoffice_LeegPolisNr);
        o.focus();
        return;
    }

    o = document.getElementById(zipCodeId);
    var zipcode = o.value;
    zipcode = zipcode.replace(" ", "");
    if (!zipcode)
    {
        alert(Language.JSGeneralforms_Connect2Backoffice_LeegPostcode);
        o.focus();
        return;
    }

    o = document.getElementById(streetNumberId);
    var streetNumber = o.value;
    if (!streetNumber)
    {
        alert(Language.JSGeneralforms_Connect2Backoffice_LeegHuisnummer);
        o.focus();
        return;
    }
    if (!IsNumeric(streetNumber))
    {
        alert(Language.JSGeneralforms_Connect2Backoffice_ToevoegingInNumeriekVeldHuisnummer);
        o.focus();
        return;
    }

    var pl = new SOAPClientParameters();
    pl.add("sessionId", "" + sesId);
    pl.add("polisNumber", "" + polnr);
    pl.add("zipCode", "" + zipcode);
    pl.add("streetNumber", "" + streetNumber);
    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "AccountConnectToBackoffice3", pl, true, AccountConnectToBackofficeResp);
}

function AccountConnectToBackofficeResp(r)
{
    if (!r || !r.Success)
    {
        if (r && r.Reason)
        {
            alert(r.Reason);
        }
        else
        {
            alert(Language.JSGeneralforms_Connect2Backoffice_KoppelingFailed);
        }
        return;
    }

    alert(Language.JSGeneralforms_Connect2Backoffice_KoppelingSuccess);

    if (r.RedirectUrl)
    {
        document.location = r.RedirectUrl;
    }
}

///////////////////////////////////////////////////////////////////
/////////////////         ACCOUNTWIZARD       /////////////////////
///////////////////////////////////////////////////////////////////

var AccountWizardCreateAccountIsCustomer = false;

function AccountWizardCreateAccount(usernameId, passwordId, password2Id, emailId, isCustomer)
{
    var un = document.getElementById(usernameId);

    var email = document.getElementById(emailId);
    if (!email.value || !EmailValidationRegex.test(email.value))
    {
        alert(Language.JSGeneralForms_InvalidEmailAddress);
        email.focus();
        return;
    }

    var pw = document.getElementById(passwordId);
    if (!pw.value)
    {
        alert(Language.JSGeneralforms_GeenWachtwoordIngevuld);
        pw.focus();
        return;
    }

    var pw2 = document.getElementById(password2Id);
    if (!pw2.value || pw.value != pw2.value)
    {
        alert(Language.Wachtwoord1DoesNotMatchWachtwoord2);
        pw2.focus();
        return;
    }

    var username = un.value;
    var password = pw.value;

    AccountWizardCreateAccountIsCustomer = isCustomer;

    var pl = new SOAPClientParameters();
    pl.add("sessionId", "" + sesId);
    pl.add("username", "" + username);
    pl.add("password", "" + password);
    pl.add("email", "" + email.value);
    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "CreateUserAccount", pl, true, AccountWizardCreateAccountResp);
}

function AccountWizardCreateAccountResp(r)
{
    if (!r.Success)
    {
        var errorId = "";
        if (AccountWizardCreateAccountIsCustomer)
        {
            errorId = "inloggen_wwError_stap2_ja";
        }
        else
        {
            errorId = "inloggen_wwError_nee";
        }

        if (errorId)
        {
            if (r.Message)
            {
                var o = document.getElementById(errorId);
                if (o)
                {
                    o.innerHTML = r.Message;
                }
            }
            showField(errorId);
        }
        return;
    }

    hideField("inloggen_wwError_stap2_ja");
    hideField("inloggen_wwError_nee");

    if (AccountWizardCreateAccountIsCustomer)
    {
        loggedIn = true;
        if (r.DisplayName)
        {
            displayName = r.DisplayName;
        }

        // switch naar volgende        
        hideField("inloggen_stap2_ja");
        showField("inloggen_stap3");
    }
    else
    {
        if (r.LoginType == LoginType.OnlineCustomer || r.LoginType == LoginType.BackofficeCustomer)
        {
            loggedIn = true;
            if (r.DisplayName)
            {
                displayName = r.DisplayName;
                displayAanhef = r.DisplayName;
            }

            GfUpdateLoginStatus();
        }
    }
}

function GfInitOpvragenPagina()
{
    if (!document.getElementById("getpassword_gebruikersnaam"))
    {
        return;
    }

    var i = document.getElementById("getpassword_gebruikersnaam");

    var username = GetQuerystringValue("naam");

    if (username)
    {
        i.value = username;
    }
}

/*
var ArchiveType =                   
{       
Relation: 0,
Polis: 1
};
/**/
function LoadArchiveDocumentsByPolis(id)
{
    var pl = new SOAPClientParameters();
    pl.add("sessionId", "" + sesId);
    pl.add("id", id);

    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "GetArchiveForPolis", pl, true, LoadArchiveDocumentsResp);
}

function LoadArchiveDocumentsByRelation()
{
    var pl = new SOAPClientParameters();
    pl.add("sessionId", "" + sesId);

    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "GetArchiveForRelation", pl, true, LoadArchiveDocumentsResp);
}

function LoadArchiveDocumentsByTp()
{
    var pl = new SOAPClientParameters();
    pl.add("sessionId", "" + sesId);

    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "GetArchiveForTp", pl, true, LoadArchiveDocumentsResp);
}

function LoadArchiveDocumentsResp(r)
{
    if (!r || r.length == 0)
    {
        var msg = "Er zijn geen archief documenten.";
        if (typeof (geenarchiefdocumentenmsg) == "string") msg = geenarchiefdocumentenmsg;
        var width = "";
        if (typeof (geenarchiefdocumentenmsgwidth) == "string") width = geenarchiefdocumentenmsgwidth;
        ShowPopupDiv("Archiefdocumenten", msg, width);
    }
    else
    {
        // popup met opties tonen
        var s = "<ul class=\"archiefdocumentenlijst\">";
        for (var i = 0; i < r.length; i++)
        {
            var archive = r[i];
            var desc = (archive.Description ? archive.Description : archive.Filename) + " (" + archive.Created.getDate() + "-" + (archive.Created.getMonth() + 1) + "-" + archive.Created.getFullYear() + ")";
            s += "<li><a href=\"" + BaseSiteUrl + "ArchiveDownload.aspx?archiveId=" + archive.Id + "\" target=\"_blank\" onclick=\"HidePopupDiv()\">" + desc + "</a></li>";
        }
        s += "</ul>";

        ShowPopupDiv("Archiefdocumenten", s);
    }
}

///////////////////////////////////////////////////////////////////
/////////////////         MIJNPAGINAVIEWS       ///////////////////
///////////////////////////////////////////////////////////////////

var zvpakketdetailsdiv = "";

function GfGetPolisDetailsForPakketView(polisId, description, displaydiv)
{
    zvpakketdetailsdiv = displaydiv;
    try
    {
        var pl = new SOAPClientParameters();
        pl.add("sessionId", "" + sesId);
        pl.add("polisId", "" + polisId);
        pl.add("description", description);

        SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "GetPolisDetails", pl, true, GfGetPolisDetailsForPakketViewResp);
    }
    catch (ex)
    {
        alert(Language.JSGeneralformsErrorOnFetchPolisDetails);
    }
}

function GfGetPolisDetailsForPakketViewResp(r)
{
    // Check argument
    if (!r)
    {
        r = "";
    }

    var detaildiv = document.getElementById(zvpakketdetailsdiv);

    var s = r.join("");

    detaildiv.innerHTML = s;
}

function CountClick(counterguid, url) // todo moet ook array van funcs aankunnen ???
{
    var countClickArgs = arguments;

    // Register click
    var pl = new SOAPClientParameters();
    pl.add("sessionId", "" + sesId);
    pl.add("counterGuid", "" + counterguid);
    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "RegisterClick", pl, false, function ()
        {
            for (var i = 1; i < countClickArgs.length; i++)
            {
                if (typeof(countClickArgs[i]) == 'function')
                {
                    countClickArgs[i]();
                }
                else if (typeof(countClickArgs[i]) == 'string')
                {
                    eval(countClickArgs[i]);
                }
            }
        });

    return true;
}

///////////////////////////////////////////////////////////////////
/////////////////         Objects       ///////////////////////////
///////////////////////////////////////////////////////////////////

function ExecuteCustomFunctions()
{
    if (this && this.length > 0)
    {
        for (var i = 0; i < this.length; i++)
        {
            var fx = this[i];
            if (typeof (fx) == "function")
            {
                fx();
            }
            else
            {
                eval(fx);
            }
        }
        this.length = 0;
    }
    CustomFuncsDone = true;
}

CustomFuncs.Execute = ExecuteCustomFunctions;

function ExecuteCustomRepeatableFunctions()
{
    if (this && this.length > 0)
    {
        for (var i = 0; i < this.length; i++)
        {
            var fx = this[i];
            if (typeof (fx) == "function")
            {
                fx();
            }
            else
            {
                eval(fx);
            }
        }
    }
}

CustomRepeatableFuncs.Execute = ExecuteCustomRepeatableFunctions;

function RegistryFind(value)
{
    for (var i in this)
    {
        if (i == value)
        {
            return this[i];
        }
    }
    return null;
}

function RegistryClearAll()
{
    for (var i in ObjectSelectionControlRegistry)
    {
        //Wanneer het object de reload functie heeft gaat het om een control
        if (typeof (ObjectSelectionControlRegistry[i].Reload) == "function")
        {
            delete (ObjectSelectionControlRegistry[i]);
        }
    }
}


ObjectSelectionControlRegistry.Find = RegistryFind;
ObjectSelectionControlRegistry.ClearAll = RegistryClearAll;

PopupControlRegistry.Find = RegistryFind;
PopupControlRegistry.ClearAll = RegistryClearAll;

AdresXpressControlRegistry.Find = RegistryFind;
AdresXpressControlRegistry.ClearAll = RegistryClearAll;

//Selector object
function ObjectSelector(controlid, objecttype, selectortype)
{
    this._id = controlid;
    this._objecttype = objecttype;
    //1 = single , 2 = multiple
    this._selectortype = selectortype;
    this._selected = new Array();
    var me = this;

    this._selected.Remove = function (value)
    {
        for (var i = 0; i < this.length; i++)
        {
            if (this[i] == value)
            {
                this.splice(i, 1);
                return true;
            }
        }
        return false;
    }

    this._selected.Find = function (value)
    {
        for (var i = 0; i < this.length; i++)
        {
            if (this[i] == value)
            {
                return true;
            }
        }
        return false;
    }


    //Methode om voor een multiple select een item toe te voegen
    this.AddItem = function (name, value)
    {
        //alert(me._id + ' - ' + name + ' - ' + value);
        me._list.innerHTML += '<li class="multipleObjectSelectListItem"> \
                                        <input class="multipleObjectSelectListItemCheckbox" \
                                                onclick="ObjectSelectionControlRegistry.Find(\'' + me._id + '\').HandleClick(this);" \
                                                type="checkbox" \
                                                value=  "' + value + '" \
                                                id=     "' + value + '_' + this._id + '"  ' + (me._selected.Find(value) ? 'checked' : '') + '> \
                                        <label class="multipleObjectSelectListItemLabel" for="' + value + '_' + this._id + '">' + name + '</label>\
                                 </li>';
    }

    this.HandleClick = function (checkbox)
    {
        if (checkbox.checked)
        {
            this._selected[this._selected.length] = checkbox.value;
        }
        else
        {
            this._selected.Remove(checkbox.value);
        }
        this._input.value = this._selected.join('|');

        GfFieldCheck(this._input);
    }

    this.GetObjects = function ()
    {
        var pl = new SOAPClientParameters();
        pl.add("sessionId", "" + sesId);
        pl.add("objectType", "" + this._objecttype);

        if (me._selectortype == 2)
        {
            SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "GetObjects", pl, true, me.GetObjectsResponseMultiple);
        }
        else
        {
            SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "GetObjects", pl, true, me.GetObjectsResponseSingle);
        }
    }

    this.GetObjectsResponseMultiple = function (r)
    {
        if (r)
        {
            me._lastresponse = r;

            while (me._list.hasChildNodes())
            {
                me._list.removeChild(me._list.lastChild);
            }

            var newSelected = new Array();

            for (var i = 0; i < r.length; i++)
            {
                var obj = r[i];
                me.AddItem(obj.Name, obj.Value);

                if (me._selected.Find(obj.Value))
                {
                    newSelected.push(obj.Value);
                }
            }

            if (newSelected.length != me._selected.length) // Aantal anders = ander lijstje
            {
                me._selected = newSelected;

                me._input.value = me._selected.join('|');
                GfFieldCheck(me._input);
            }
        }

        me.DetermineEditButtonState();
    }

    me._lastresponse = new Array();

    this.GetObjectsResponseSingle = function (r)
    {
        if (r)
        {
            me._lastresponse = r;

            removeOptionsFromSelect(me._id);

            addOptionToSelect(me._id, "Maak een keuze", "");

            for (var i = 0; i < r.length; i++)
            {
                addOptionToSelect(me._id, r[i].Name, r[i].Value);
            }

            setSelectFromValue(me._id, "");

            if (me._selected[0])
            {
                setSelectFromValue(me._id, me._selected[0]);
            }

            var o = document.getElementById(me._id);
            if (o)
            {
                var req = o.getAttribute("hsrequired");
                if (req && req.toLowerCase() == "true")
                {
                    UpdateMandatoryField(o, o.value ? FieldStatus.Complete : FieldStatus.Mandatory);
                }
            }
        }

        me.DetermineEditButtonState();
    }

    this.DetermineEditButtonState = function ()
    {
        var editbuttonelement = document.getElementById('ObjectBewerkenButton' + me._id);

        if (editbuttonelement)
        {
            if (me._lastresponse.length == 0)
            {
                editbuttonelement.style.display = 'none';
            }
            else
            {
                editbuttonelement.style.display = '';
            }
        }
    }

    this.Reload = function ()
    {
        //Wanneer het om een gewone select box gaat moet de geselecteerde waarde onthouden worden
        //Bij de multiple select worden deze waarden al opgeslagen bij het checken van een checkbox
        if (me._selectortype == 1)
        {
            var selectelement = document.getElementById(me._id);
            var value = getValueFromSelect(selectelement);
            me._selected[0] = value;
        }
        me.GetObjects();
    }

    this.GetSelectedObjectsFromSession = function ()
    {
        if (LastSessionInfo)
        {
            var f = LastSessionInfo.FindFieldById(this._id);
            if (f && f.FieldValue)
            {
                this._selected.length = 0;

                var selectedvalues = f.FieldValue.split('|');

                for (var i = 0; i < selectedvalues.length; i++)
                {
                    this._selected[this._selected.length] = selectedvalues[i];
                }

                //Als het een multiple select is moet in het input veld de valua geset worden. Anders is het control niet valid.
                if (this._selectortype == 2)
                {
                    this._input.value = this._selected.join('|');
                }
            }
        }
    }

    this.Init = function ()
    {
        //Als het een multiple select is moet er het een en ander aan properties gezet worden
        if (me._selectortype == 2)
        {
            this._list = document.getElementById('MultipleObjectSelect_' + this._id);
            this._input = document.getElementById(this._id);
        }

        this.GetSelectedObjectsFromSession();
        this.GetObjects();

    }
    this.Init();
}


/*
Begin popup
*/

var ObjectPopupAction =
{
    Add: 1,
    Edit: 2
};

function ObjectPopup(controlid, objecttype, objecttypename, sessionid)
{
    this._action = ObjectPopupAction.Edit;
    this._objecttype = objecttype;
    this._objecttypename = objecttypename;
    this._controlid = controlid;
    this._sessionid = sessionid;
    this._popupdivid = this._controlid + '_popupdiv';
    this._popupdiv = null;
    this._objectselectorid = this._popupdivid + '_adv_select';
    this._objectformwrapperid = this._popupdivid + '_object_form_wrapper';

    this._loadedobject = new Object();

    var me = this;

    function FindIndexForPropertyValue(name, value)
    {
        for (var i = 0; i < this.length; i++)
        {
            if (this[i][name] == value)
            {
                return this[i];
            }
        }
        return false;
    }

    this.Hide = function ()
    {
        document.body.removeChild(document.getElementById(me._popupdivid));
        me._popupdiv = null;
        me._loadedobject = null;
    }

    this.LoadObjects = function ()
    {
        var pl = new SOAPClientParameters();
        pl.add("sessionId", "" + this._sessionid);
        pl.add("objectType", "" + this._objecttype);

        SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "GetObjects", pl, true, me.GetObjectsForPopupResp);
    }

    this.GetObjectsForPopupResp = function (r)
    {
        removeOptionsFromSelect(me._objectselectorid);

        //addOptionToSelect(me._objectselectorid, "Maak een nieuw " + me._objecttypename.toLowerCase() +" aan", me._objecttype+".");

        for (var i = 0; i < r.length; i++)
        {
            addOptionToSelect(me._objectselectorid, r[i].Name, r[i].Value);
        }

        setSelectFromValue(me._objectselectorid, me.GetSelectedValue());

        me.LoadObjectData();
    }

    this.GetSelectedValue = function ()
    {
        var parentSelectControl = document.getElementById(this._controlid);
        var selectedvalue = "";

        if (parentSelectControl)
        {
            selectedvalue = getValueFromSelect(parentSelectControl);
        }

        if (!selectedvalue)
        {
            var selector = document.getElementById(me._objectselectorid);
            if (selector.options[0])
            {
                selectedvalue = selector.options[0].value;
            }
        }

        return selectedvalue;
    }

    this.DeleteObject = function ()
    {
        if (this._loadedobject.Externed)
        {
            // Externed object, don not delete!
            return;
        }

        if (!confirm(Language.JSGeneralforms_ConfirmDeleteObject))
        {
            return;
        }

        var selectlist = document.getElementById(me._objectselectorid);
        var objectId = selectlist.options[selectlist.selectedIndex].value;

        var pl = new SOAPClientParameters();
        pl.add("sessionId", "" + me._sessionid);
        pl.add("objectId", "" + objectId);
        pl.add("timestamp", "" + me._loadedobject.Timestamp);
        SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "DeleteObject", pl, true, me.DeleteObjectResp);
    }

    this.DeleteObjectResp = function (r)
    {
        if (r)
        {
            me.ClosePopupHandler();
        }
        else
        {
            alert(Language.JSGeneralforms_DeleteObjectFailed);
        }
    }

    this.LoadObjectData = function ()
    {
        var objectId;

        if (me._action == ObjectPopupAction.Edit)
        {
            var selectlist = document.getElementById(me._objectselectorid);
            if (selectlist.options.length > 0)
            {
                objectId = selectlist.options[selectlist.selectedIndex].value;
            }
        }
        else
        {
            objectId = objecttype;
        }

        var pl = new SOAPClientParameters();
        pl.add("sessionId", "" + me._sessionid);
        pl.add("objectId", "" + objectId);
        SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "GetObjectProperties", pl, true, me.LoadObjectDataResp);
    }

    this.LoadObjectDataResp = function (r)
    {
        me._loadedobject = r;
        me.DecorateLoadedObject();

        //Maak formulier leeg
        me.ResetForm();

        if (r && r.Properties && r.Properties.length > 0)
        {
            GfFillFieldsFromList(r.Properties, document.getElementById(me._objectformwrapperid));
            me.SetDisabled(r.Externed);

            CustomFuncs.Execute();
            CustomRepeatableFuncs.Execute();
        }
        else
        {
            me.SetDisabled(false);

            CustomFuncs.Execute();
            CustomRepeatableFuncs.Execute();
        }

    }

    this.ResetForm = function ()
    {
        this._loadedobject.Properties.Find = FindIndexForPropertyValue;

        var fieldContainer = document.getElementById(this._objectformwrapperid);
        var _inputfields = fieldContainer.getElementsByTagName('input');
        var _selectfields = fieldContainer.getElementsByTagName('select');
        var _textareafields = fieldContainer.getElementsByTagName('textarea');

        for (var i = 0; i < _inputfields.length; i++)
        {
            if (_inputfields[i].type && _inputfields[i].type == "radio")
            {
                var rg = document.getElementsByName(_inputfields[i].name);
                if (rg)
                {
                    for (var b = 0; b < rg.length; b++)
                    {
                        rg[b].checked = false;
                    }
                    UpdateLinkedFieldsForRadioGroup(_inputfields[i].name);

                    var attrib = _inputfields[i].getAttribute("hsrequired");
                    if (attrib && attrib.toLowerCase() == "true")
                    {
                        UpdateMandatoryField(_inputfields[i], FieldStatus.Mandatory);
                    }
                }
                continue;
            }

            if (_inputfields[i].type && _inputfields[i].type == "checkbox")
            {
                setCheckboxFromValue(_inputfields[i], "");

                var attrib = _inputfields[i].getAttribute("hsrequired");
                if (attrib && attrib.toLowerCase() == "true")
                {
                    UpdateMandatoryField(_inputfields[i], FieldStatus.Mandatory);
                }
                continue;
            }

            if (_inputfields[i].type && (_inputfields[i].type == "text" || _inputfields[i].type == "hidden"))
            {
                setTextFromValue(_inputfields[i], "", "");

                var attrib = _inputfields[i].getAttribute("hsrequired");
                if (attrib && attrib.toLowerCase() == "true")
                {
                    UpdateMandatoryField(_inputfields[i], FieldStatus.Mandatory);
                }
                continue;
            }
        }

        for (var i = 0; i < _selectfields.length; i++)
        {
            setSelectFromValue(_selectfields[i], "");

            var attrib = _selectfields[i].getAttribute("hsrequired");
            if (attrib && attrib.toLowerCase() == "true")
            {
                UpdateMandatoryField(_selectfields[i], FieldStatus.Mandatory);
            }
        }

        for (var i = 0; i < _textareafields.length; i++)
        {
            setTextFromValue(_textareafields[i], "", "");

            var attrib = _textareafields[i].getAttribute("hsrequired");
            if (attrib && attrib.toLowerCase() == "true")
            {
                UpdateMandatoryField(_textareafields[i], FieldStatus.Mandatory);
            }
        }
    }

    this.SetDisabled = function (disabled)
    {
        var fieldContainer = document.getElementById(this._objectformwrapperid);
        var _inputfields = fieldContainer.getElementsByTagName('input');
        var _selectfields = fieldContainer.getElementsByTagName('select');
        var _textareafields = fieldContainer.getElementsByTagName('textarea');

        for (var i = 0; i < _inputfields.length; i++)
        {
            var o = _inputfields[i];
            var hsdisabled = o.getAttribute("hsdisabled");
            if (!hsdisabled)
            {
                o.disabled = disabled;
            }
        }

        for (var i = 0; i < _selectfields.length; i++)
        {
            var o = _selectfields[i];
            var hsdisabled = o.getAttribute("hsdisabled");
            if (!hsdisabled)
            {
                o.disabled = disabled;
            }
        }

        for (var i = 0; i < _textareafields.length; i++)
        {
            var o = _textareafields[i];
            var hsdisabled = o.getAttribute("hsdisabled");
            if (!hsdisabled)
            {
                o.disabled = disabled;
            }
        }

        var btn = document.getElementById(this._objectformwrapperid + "save");
        if (btn)
        {
            btn.disabled = disabled;
        }
        btn = document.getElementById(this._objectformwrapperid + "del");
        if (btn)
        {
            btn.disabled = disabled;
        }
    }

    this.DecorateLoadedObject = function ()
    {
        for (var i = 0; i < me._loadedobject.Properties.length; i++)
        {
            var field = document.getElementById(me._loadedobject.Properties[i].FieldName);

            if (field)
            {
                var ftype = field.getAttribute("hstype");

                if (ftype)
                {
                    me._loadedobject.Properties[i].FieldType = ftype;
                }
            }

            if (field)
            {
                var req = field.getAttribute("hsrequired");

                if (req)
                {
                    if (req == "True")
                    {
                        me._loadedobject.Properties[i].Required = true;
                    }
                }
            }

            if (field)
            {
                var data = field.getAttribute("hsdata");

                if (data)
                {
                    me._loadedobject.Properties[i].FieldData = data;
                }
            }
        }
    }

    /*
    Het wijzigen van formulier waarden in het javascript object
    */
    this.SetObjectPropery = function (name, value)
    {
        var property = me._loadedobject.Properties.Find('FieldName', name);

        //De property bestaat al in het client side object
        if (property)
        {
            property['FieldValue'] = value;
            //me._loadedobject.Properties[propertyindex]['FieldValue'] = value;
        }
        else
        {
            //De property bestaat niet. Voeg hem toe
            var toAdd = { "FieldName": name, "FieldValue": value };
            me._loadedobject.Properties.push(toAdd);
            me.DecorateLoadedObject();
        }
    }

    this.GetChangedObjectData = function ()
    {
        this._loadedobject.Properties.Find = FindIndexForPropertyValue;

        var fieldContainer = document.getElementById(this._objectformwrapperid);
        var _inputfields = fieldContainer.getElementsByTagName('input');
        var _selectfields = fieldContainer.getElementsByTagName('select');
        var _textareafields = fieldContainer.getElementsByTagName('textarea');

        for (var i = 0; i < _inputfields.length; i++)
        {
            if (!_inputfields[i].getAttribute("hsisselect"))
            {
                if (_inputfields[i].type && _inputfields[i].type == "radio")
                {
                    me.SetObjectPropery(_inputfields[i].name, getValueFromRadio(_inputfields[i].name));
                    continue;
                }

                else if (_inputfields[i].type && _inputfields[i].type == "checkbox")
                {
                    me.SetObjectPropery(_inputfields[i].name, getValueFromCheckbox(_inputfields[i]));
                    continue;
                }

                else if (_inputfields[i].type && (_inputfields[i].type == "text" || _inputfields[i].type == "hidden"))
                {
                    me.SetObjectPropery(_inputfields[i].name, _inputfields[i].value);
                    continue;
                }
            }
        }

        for (var i = 0; i < _selectfields.length; i++)
        {
            me.SetObjectPropery(_selectfields[i].name, _selectfields[i].value);
        }

        for (var i = 0; i < _textareafields.length; i++)
        {
            me.SetObjectPropery(_textareafields[i].name, _textareafields[i].value);
        }

    }

    this.StoreObjectProperties = function ()
    {
        if (this._loadedobject.Externed)
        {
            // Externed object, don not overwrite!
            return;
        }

        if (isSoapClientBusy())
        {
            return;
        }

        if (!hsCheckFormfieldsInDiv(document.getElementById(this._objectformwrapperid)))
        {
            return;
        }

        me.GetChangedObjectData();

        var pl = new SOAPClientParameters();
        pl.add("sessionId", "" + this._sessionid);
        pl.add("objectData", this._loadedobject);

        pl.add("formId", ActiveFormId);
        pl.add("formNum", ActiveFormNum);

        SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "StoreObjectProperties", pl, true, me.ClosePopupHandler);
    }

    this.ClosePopupHandler = function (r)
    {
        if (r)
        {
            if (!GfFieldCheckResp(r))
            {
                return;
            }

            if (IsPakketOmgeving())
            {
                GfUpdatePakketInfo();
            }
            else if (ActiveFormId)
            {
                hofGetFieldsFromSession(ActiveFormId, ActiveFormNum);
            }
        }

        for (var i in ObjectSelectionControlRegistry)
        {
            if (typeof (ObjectSelectionControlRegistry[i].Reload) == "function")
            {
                ObjectSelectionControlRegistry[i].Reload();
            }
        }
        me.Hide();
    }

    this.Open = function (action)
    {
        me._action = action;

        var pl = new SOAPClientParameters();
        pl.add("sessionId", "" + this._sessionid);
        pl.add("objectType", "" + this._objecttype);

        SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "GetObjectEditFormDataByObjectType", pl, true, me.OpenResp);
    }

    this.OpenResp = function (r)
    {
        if (!r)
        {
            alert(Language.JSGeneralForms_GeenWijzigingsformulierGevonden);
            return;
        }


        //Create the Popup
        me._popupdiv = document.createElement("div");
        me._popupdiv.setAttribute('id', me._popupdivid);
        me._popupdiv.style.position = "absolute";
        me._popupdiv.className = "popupdiv";
        me._popupdiv.style.zIndex = 100;
        me._popupdiv.style.width = '500px';
        me._popupdiv.setAttribute('class', 'popup hsGeneralForm hsPopUpForm hsObjectEditDiv');

        var html = "";


        if (me._action == ObjectPopupAction.Edit)
        {
            html += '<div class="hsLine selectBuildingLine">';
            html += '<label class="hsLbl" id="' + me._objectselectorid + 'Lbl">Selecteer een ' + me._objecttypename.toLowerCase() + ':</label>';
            html += '<div style="position: relative">';
            html += '<input type="text" name="' + me._objectselectorid + '_input" id="' + me._objectselectorid + '_input" class="hsInput input_select" hsisselect="true" />';
            html += '<span class="selectbox_right"><img id="' + me._objectselectorid + '_img" class="select_arrow" src="' + BaseSiteUrl + 'site/system/images/selectbg.gif" width="21px" height="18px" /></span> ';
            html += '<div id="' + me._objectselectorid + '_div" class="test_select" hshtmlpositioned="true">';
            html += '<select name="' + me._objectselectorid + '" class="" size="" onchange="PopupControlRegistry.Find(\'' + me._controlid + '\').LoadObjectData();" id="' + me._objectselectorid + '" hshasinput="true">';
            html += '</select>';
            html += '</div>';
            html += '</div>';
            html += '</div>';
        }


        html += '<form action="" class="popupFormWrapper" id="' + me._objectformwrapperid + '">';
        html += r.join("");
        html += '</form>';

        //append the buttons
        html += '<div class="hsObjectEditButtons">'
        html += '<input type="button" class="button" id="' + me._objectformwrapperid + 'cancel" value="Annuleren" onclick="PopupControlRegistry.Find(\'' + me._controlid + '\').Hide();">';

        if (me._action == ObjectPopupAction.Edit)
        {
            html += '<input type="button" class="button" id="' + me._objectformwrapperid + 'del" value="Verwijderen" onclick="PopupControlRegistry.Find(\'' + me._controlid + '\').DeleteObject();">';
        }

        html += '<input type="button" class="button" id="' + me._objectformwrapperid + 'save" value="Opslaan" onclick="PopupControlRegistry.Find(\'' + me._controlid + '\').StoreObjectProperties();">';
        html += '</div>';

        me._popupdiv.innerHTML = html;

        document.body.appendChild(me._popupdiv);
        me.AddJavascriptToHeader();
        GfSetForms(me._objectformwrapperid, function () { GfFieldCheck(this, 'CheckFieldBasic'); });

        if (me._action == ObjectPopupAction.Edit)
        {
            hsInitAdvSelect(me._objectselectorid);
            me.LoadObjects();
        }
        else
        {
            me.LoadObjectData();
        }


        me.ShowPopUp(null, null, 400, true);

        //IE7 deed raar, nog even een keer de classnames toevoegen
        me._popupdiv.className = "popup hsGeneralForm hsPopUpForm hsObjectEditDiv";
    }

    this.AddJavascriptToHeader = function ()
    {
        var o = document.getElementById(me._objectformwrapperid);
        if (o) // anders los formulier, heeft dit niet nodig
        {
            var s = "";
            var y = o.getElementsByTagName("script");
            for (var i = 0; i < y.length; i++)
            {
                if (y[i].getAttribute("controlscript") == "true")
                {
                    s += y[i].innerHTML;
                }
            }

            var scriptElem = document.createElement("script");
            scriptElem.type = "text/javascript";
            scriptElem.text = s;
            var head = document.getElementsByTagName("head")[0];
            head.appendChild(scriptElem);
        }
    }


    this.ShowPopUp = function (title, content, width, noAutoHide)
    {
        if (!noAutoHide)
        {
            me._popupdiv.onmouseover = function ()
            {
                this.onblur = function () { };
                document.body.onclick = function ()
                {
                    document.body.onclick = function () { };
                    Hidethis._popupdiv();
                };
                //this.onmouseout = function() { this.style.display="none"; }
            };
        }
        else
        {
            me._popupdiv.onmouseover = function () { };
        }

        if (!noAutoHide)
        {
            me._popupdiv.onblur = function () { this.style.display = "none"; };
        }
        else
        {
            me._popupdiv.onblur = function () { };
        }

        if (content)
        {
            me._popupdiv.innerHTML = "<div onclick=\"Hidepopupdiv();\" title=\"Scherm sluiten\"></div><h3>" + title + "</h3>" + content;
        }

        me._popupdiv.style.display = "block";
        me._popupdiv.style.left = ((document.body.offsetWidth - me._popupdiv.offsetWidth) / 2) + "px";

        var oh = window.innerHeight ? window.innerHeight : document.documentElement.clientHeight;
        oh = ((oh - me._popupdiv.offsetHeight) / 2);
        oh += (window.scrollY ? window.scrollY : document.documentElement.scrollTop);
        if (oh < 0) oh = 0;
        me._popupdiv.style.top = oh + "px";
        me._popupdiv.focus();
    }
}

function AdresXpressControl(_id, _pctag, _huisnrtag, _huisnrtoevtag, _straattag, _plaatstag, _webmethod, _isobjectcontrol)
{
    var me = this;

    me.id = _id;
    me.postcodetag = _pctag;
    me.huisnummertag = _huisnrtag;
    me.huisnummertoevtag = _huisnrtoevtag;

    me.isobjectcontrol = _isobjectcontrol;

    me.straattag = _straattag;
    me.plaatstag = _plaatstag;

    me.straatlabeltag = _straattag + "Label";
    me.plaatslabeltag = _plaatstag + "Label";

    me.webmethod = _webmethod;

    // cache to minimize requests
    me.AdresXpressPostcode = "";
    me.AdresXpressHuisnummer = "";

    this.UpdateAdresXpress = function ()
    {
        var postcode = getValueFromText(me.postcodetag);
        var huisnummer = getValueFromText(me.huisnummertag);

        if (postcode && huisnummer) // reload
        {
            if (postcode == me.AdresXpressPostcode &&
                huisnummer == me.AdresXpressHuisnummer)
            {
                return;
            }

            var pl = new SOAPClientParameters();
            pl.add("sessionId", "" + sesId);
            pl.add("formId", "" + ActiveFormId);
            pl.add("formNum", "" + ActiveFormNum);
            pl.add("postcode", postcode);
            pl.add("huisnummer", huisnummer);
            pl.add("suffix", "" + me.id);
            SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, me.webmethod, pl, true, me.GetAdresXpressAddressResp);
        }
        else
        {
            me.ToggleAdresXpressData(false);
            document.getElementById(me.straatlabeltag).innerHTML = "";
            document.getElementById(me.plaatslabeltag).innerHTML = "";
        }

        me.AdresXpressPostcode = postcode;
        me.AdresXpressHuisnummer = huisnummer;
    }

    me.LastAddressResult = null;

    this.GetAdresXpressAddressResp = function (r)
    {
        me.LastAddressResult = r;

        if (!r)
        {
            me.ToggleAdresXpressData(false);
            document.getElementById(me.straatlabeltag).innerHTML = "";
            document.getElementById(me.plaatslabeltag).innerHTML = "";

            me.ShowAdresXpressError();

            // Reset, volgende keer zeker weer checken
            me.AdresXpressPostcode = "";
            me.AdresXpressHuisnummer = "";
            return;
        }

        // Eventuele fout uitzetten, nodig als postcode eerst fout en daarna gevonden na wijzigen huisnummer
        changeClassDelStr(me.postcodetag + "Lbl", "E");
        hideField(me.postcodetag + "E");
        UpdateMandatoryField(me.postcodetag, FieldStatus.Complete);

        document.getElementById(me.straatlabeltag).innerHTML = r.Street;
        document.getElementById(me.plaatslabeltag).innerHTML = r.City;


        if (document.getElementById(me.straattag) && document.getElementById(me.plaatstag))
        {
            document.getElementById(me.straattag).value = r.Street;
            document.getElementById(me.plaatstag).value = r.City;
        }


        me.ToggleAdresXpressData(true);
    }

    this.ToggleAdresXpressData = function (show)
    {
        if (show)
        {
            showField("adresxpressdata" + me.id);
        }
        else
        {
            hideField("adresxpressdata" + me.id);
        }
    }

    this.ShowAdresXpressError = function ()
    {
        changeClassAddStr(me.postcodetag + "Lbl", "E");
        showFieldError(me.postcodetag + "E", "<p>" + Language.JSGeneralforms_AdresXpress_GeenResultaat + "</p>");
        UpdateMandatoryField(me.postcodetag, FieldStatus.NotComplete);
    }

    this.PostLoadAdresXpressCheck = function ()
    {
        if (me.isobjectcontrol)
        {
            if (document.getElementById(me.straattag))
            {
                document.getElementById(me.straatlabeltag).innerHTML = document.getElementById(me.straattag).value;
            }

            if (document.getElementById(me.plaatstag))
            {
                document.getElementById(me.plaatslabeltag).innerHTML = document.getElementById(me.plaatstag).value;
            }
        }
        else if (LastSessionInfo)
        {
            var f = LastSessionInfo.FindFieldById(me.straattag);
            if (f)
            {
                document.getElementById(me.straatlabeltag).innerHTML = f.FieldValue;
            }
            var f = LastSessionInfo.FindFieldById(me.plaatstag);
            if (f)
            {
                document.getElementById(me.plaatslabeltag).innerHTML = f.FieldValue;
            }
        }

        var postcode = getValueFromText(me.postcodetag);
        var huisnummer = getValueFromText(me.huisnummertag);
        var straat = document.getElementById(me.straatlabeltag).innerHTML;

        if (postcode && huisnummer)
        {
            if (!straat)
            {
                me.ShowAdresXpressError();
            }
            else
            {
                me.ToggleAdresXpressData(true);
            }
        }
        else
        {
            me.ToggleAdresXpressData(false);
        }
    }
}

function MenuItemCount(id)
{
    var pl = new SOAPClientParameters();
    pl.add("sessionId", "" + sesId);
    pl.add("menuItemId", id);
    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "MenuItemCount", pl, false, null);
}

function ChangeAccountType(type)
{
    var pl = new SOAPClientParameters();
    pl.add("sessionId", "" + sesId);
    pl.add("type", "" + type);
    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "ChangeAccountType", pl, true, ChangeAccountTypeResp);
}

function ChangeAccountTypeResp(r)
{
    if (!r)
    {
        alert(Language.JSGeneralforms_ChangeAccountTypeFailed);
        return;
    }

    // Refresh the page.
    document.location = document.location;
}

function GfRedirectedLogin()
{
    var id = GetQuerystringValue("authenticate");
    if (!id)
    {
        document.location = BaseSiteUrl;
        return;
    }

    var pl = new SOAPClientParameters();
    pl.add("sessionId", "" + sesId);
    pl.add("id", "" + id);
    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "LoginUserRedirect", pl, true, GfRedirectedLoginResp);
}

function GfRedirectedLoginResp(r)
{
    if (r && r.Success)
    {
        document.location = r.RedirectUrl;
    }
    else
    {
        document.location = BaseSiteUrl;
    }
}

function FindCompaniesByZipcodeNumberAddition(pagenr, templatemode)
{
    var pl = new SOAPClientParameters();
    var postcode = document.getElementById("bedrijfpostcode");
    if (!postcode.value)
    {
        alert("Postcode is verplicht!");
        postcode.focus();
        return;
    }
    pl.add("zipcode", postcode.value ? postcode.value : "");

    var straatnummer = document.getElementById("bedrijfstraatnummer");
    if (!straatnummer.value)
    {
        alert("Huisnummer is verplicht!");
        straatnummer.focus();
        return;
    }
    pl.add("number", straatnummer.value);

    var straatnummertoevoeging = document.getElementById("bedrijfstraatnummertoevoeging");
    pl.add("addition", straatnummertoevoeging.value ? straatnummertoevoeging.value : "");
    pl.add("pagenumber", pagenr || "1");
    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "SearchCompaniesByZipCodeNumberExtension", pl, true, function (r)
    {
        FindCompaniesByZipcodeNumberAdditionResp(r, templatemode);
    });
}

function FindCompaniesByZipcodeNumberAdditionResp(r, templatemode)
{
    if (r)
    {
        var liparts = "";
        var pagesparts = "";
        for (var i = 0; i < r.CompanyInformationData.length; i++)
        {
            var liid = "liidcomp_" + (r.CompanyInformationData[i].DossierNumber || "") + '_' + (r.CompanyInformationData[i].DossierSubNumber || "");
            liparts += '<li id="' + liid + '"><a href="javascript:void(0)" onclick="GetSBIsByDossierNumber(' + "'" + liid + "','" + r.CompanyInformationData[i].DossierNumber + "','" + r.CompanyInformationData[i].DossierSubNumber + "','" + r.CompanyInformationData[i].Name.replace(/'/g, "\\'").replace(/"/g, "") + "'," + templatemode + ')">Kies</a>' + r.CompanyInformationData[i].Name + '</li>';
        }
        if (templatemode)
        {
            liid = "liidcomp_nocompany";
            liparts += '<li class="notavailable" id="' + liid + '"><a href="javascript:void(0)" onclick="SBICompanyNotFound()">Kies</a>Het bedrijf staat er niet tussen</li>';
        }
        if (r.NumberOfPages > 1)
        {
            for (var i = 1; i < r.NumberOfPages + 1; i++)
            {
                if (i == r.CurrentPage)
                {
                    pagesparts += '<a class="active" href="javascript:void(0)" onclick="FindCompaniesByZipcodeNumberAddition(' + i + ',' + templatemode + ')">' + i + '</a>';
                }
                else
                {
                    pagesparts += '<a href="javascript:void(0)" onclick="FindCompaniesByZipcodeNumberAddition(' + i + ',' + templatemode + ')">' + i + '</a>';
                }
            }
        }
        $("#nieuwe_relatie_bedrijven_selectie").slideDown();
        $("#companypages").html(pagesparts);
        $("#ulcompanies").html(liparts);
        $("#companynotpresent").show();
    }
}

function GetSBIsByDossierNumber(liid, dossiernumber, dossiersubnumber, companyname, templatemode)
{
    $("#nieuwe_relatie_bedrijven_selectie").slideDown();
    $("#ulcompanies li").removeClass("active");
    $("#" + liid).addClass("active");
    $("#selectedcompany").html(companyname);
    $("#ulsbis").attr('sbicode', '');
    $("#selectedsbi").html('');
    $("#bedrijfnaam").val(companyname);
    $("#bedrijfnaam").attr('disabled', 'disabled');
    $("#ulsbis").attr('sbicompanyname', companyname);
    $("#ulcompanies").hide();
    $("#companypages").hide();
    $("#selectedcompanyedit").show();
    $("#companynotpresent").hide();

    var pl = new SOAPClientParameters();
    pl.add("dossierNo", dossiernumber);
    pl.add("dossierSubNo", dossiersubnumber);
    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "GetSBIsByDossierNumber", pl, true, function (r)
    {
        GetSBIsByDossierNumberResp(r, templatemode);
    });
}
function GetSBIsByDossierNumberResp(r, templatemode)
{
    if (r)
    {
        var prim = r.PrimarySBICode;
        var sec1 = r.SecondarySBICode1;
        var sec2 = r.SecondarySBICode2;

        var pl = new SOAPClientParameters();
        pl.add("prim", prim || "");
        pl.add("sec1", sec1 || "");
        pl.add("sec2", sec2 || "");
        SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "GetSBIPickList", pl, true, function (r)
        {
            GetSBIPickListResp(r, templatemode);
        });
    }
}

function GetSBIPickListResp(r, templatemode)
{
    if (r)
    {
        var liparts = "";
        for (var i = 0; i < r.length; i++)
        {
            var liid = "liidsbi_" + (r[i].Code || "") + "_" + (r[i].Toevoeging || ""), oms = r[i].Omschrijving.replace(/'/g, "&#92;&#39;").replace(/"/g, "&#92;&#34;"), omsDisp = r[i].Omschrijving.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
            if (templatemode)
            {
                liparts += '<li class="' + r[i].LevelClass + '" id="' + liid + '"><a href="javascript:void(0)" onclick="SetSelectedSbi(' + "'" + liid + "'," + "'" + (oms || "") + "','" + (r[i].Code || "") + "','" + (r[i].Toevoeging || "") + "'" + ')">Kies</a>' + omsDisp  + '</li>';
            } else
            {
                liparts += '<li class="' + r[i].LevelClass + '" id="' + liid + '"><a href="javascript:void(0)" onclick="SelectSbiCodeKvk(' + "'" + (r[i].Code || "") + "','" + (r[i].Toevoeging || "") + "','" + (oms || "") + "'" + ')">Kies</a>' + omsDisp + '</li>';
            }
        }
        if (templatemode)
        {
            liid = "liidsbi_nosbi";
            liparts += '<li class="notavailable" id="' + liid + '"><a href="javascript:void(0)" onclick="SBINotFound()">Kies</a>Het soort bedrijf staat er niet tussen</li>';
        }

        $("#nieuwe_relatie_SBI_selectie").show();
        $("#ulsbis").html(liparts);
    }
}

function SBICompanyNotFound()
{
    $("#ulcompanies li").removeClass("active");
    $("#liidcomp_nocompany").addClass("active");
    $("#selectedcompany").html("Het bedrijf staat er niet tussen");
    $("#ulcompanies").hide();
    $("#companypages").hide();
    $("#selectedcompanyedit").show();
    $("#ulsbis").attr('sbiomschrijving', "");
    $("#ulsbis").attr('sbicode', "#");
    $("#ulsbis").attr('sbitoevoeging', "");
    $("#ulsbis").attr('sbicompanyname', "#");
    $("#bedrijfnaam").val("");
    $("#bedrijfnaam").attr('disabled', '');
    $("#nieuwe_relatie_SBI_selectie").slideUp(500);
}


function SBINotFound()
{
    $("#ulsbis").attr('sbiomschrijving', "");
    $("#ulsbis").attr('sbicode', "#");
    $("#ulsbis").attr('sbitoevoeging', "");
    $("#sbinaam").val("Het soort bedrijf staat er niet tussen");
    $("#selectedsbi").html("Het soort bedrijf staat er niet tussen");
    $("#ulsbis li").removeClass("active");
    $("#liidsbi_nosbi").addClass("active");
}

function SetSelectedSbi(liid, omschrijving, code, toevoeging)
{
    $("#selectedsbi").html(omschrijving);
    $("#sbicontrolview").val(omschrijving);
    $("#sbinaam").val(omschrijving);
    $("#ulsbis li").removeClass("active");
    $("#" + liid).addClass("active");
    $("#ulsbis").attr('sbiomschrijving', omschrijving || "");
    $("#ulsbis").attr('sbicode', code || "");
    $("#ulsbis").attr('sbitoevoeging', toevoeging || "");
}

function InitSBIControlKvK(templatemode)
{

    // new company panel

    var number = document.getElementById('bedrijfstraatnummer');
    var postcode = document.getElementById('bedrijfpostcode');
    var suffix = document.getElementById('bedrijfstraatnummertoevoeging');

    var postcodeval = postcode.value;
    var huisnummerval = number.value;
    var suffixval = suffix.value;

    number.onchange = function ()
    {
        OnFieldCheck(this, "huisnummer");
        ComposeAddressByAdresXpress('bedrijfpostcode', 'bedrijfstraatnummer', 'bedrijfstraatnummertoevoeging', templatemode);
    };


    postcode.onchange = function ()
    {
        OnFieldCheck(this, "postcode");
        ComposeAddressByAdresXpress('bedrijfpostcode', 'bedrijfstraatnummer', 'bedrijfstraatnummertoevoeging', templatemode);
    };


    suffix.onchange = function ()
    {
        ComposeAddressByAdresXpress('bedrijfpostcode', 'bedrijfstraatnummer', 'bedrijfstraatnummertoevoeging', templatemode);
    };
}

function ComposeAddressByAdresXpress(postcodeId, huisnummerId, suffixId, templatemode)
{
    if (!AuthData || !AuthData.AllowAddressLookup)
    {
        return;
    }
    var postcode = document.getElementById(postcodeId).value;
    var huisnummer = document.getElementById(huisnummerId).value;
    var suffix = document.getElementById(suffixId).value;

    var result = "";
    if (postcode != "" && huisnummer != "")
    {
        var pl = new SOAPClientParameters();
        pl.add("sessionId", sesId);
        pl.add("formId", "" + ActiveFormId);
        pl.add("formNum", "" + ActiveFormNum);
        pl.add("postcode", postcode);
        pl.add("huisnummer", huisnummer);
        pl.add("suffix", suffix);

        SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "GetAdresXpressAddressBasic", pl, true,
            function (r) // Response handler inline for access to straatId and woonplaatsId
            {
                if (r)
                {
                    result += r.Street || "";
                    result += " " + huisnummer + " " + suffix + ", ";
                    result += r.City || "";
                    result.replace("  ", " ");
                    $("#bedrijfplaats").val(r.City || "");
                    $("#bedrijfstraat").val(r.Street || "");
                    $("#ulsbis").attr('sbiomschrijving', "");
                    $("#ulsbis").attr('sbicode', "");
                    $("#ulsbis").attr('sbitoevoeging', "");
                    $("#ulsbis").attr('sbicompanyname', "");
                    $("#selectedcompany").html("");
                    $("#ulsbis li").removeClass("active");
                    $("#selectedsbi").html("");
                    $("#nieuwe_relatie_SBI_selectie").hide();
                    $("#ulcompanies").show();
                    $("#companypages").show();
                    $("#selectedcompanyedit").hide();
                    document.getElementById('fulladdress').innerHTML = result;
                    FindCompaniesByZipcodeNumberAddition(1, templatemode);

                }
                else
                {
                    document.getElementById('fulladdress').innerHTML = "Onbekend adres";
                    $("#bedrijfplaats").val("");
                    $("#bedrijfstraat").val("");
                    $("#ulsbis").attr('sbiomschrijving', "");
                    $("#ulsbis").attr('sbicode', "");
                    $("#ulsbis").attr('sbitoevoeging', "");
                    $("#ulsbis").attr('sbicompanyname', "");
                    $("#selectedcompany").html("");
                    $("#ulsbis li").removeClass("active");
                    $("#selectedsbi").html("");
                    $("#nieuwe_relatie_SBI_selectie").hide();
                    $("#nieuwe_relatie_bedrijven_selectie").hide();
                    $("#ulcompanies").hide();
                    $("#companypages").hide();
                    $("#selectedcompanyedit").hide();
                    $("#bedrijfnaam").val("");
                    $("#bedrijfnaam").attr('disabled', '');

                    //alert('Ongeldige postcode/huisnummer combinatie, probeer opnieuw');
                    //document.getElementById(postcodeId).focus();
                }
            }
        );
    }
    else
    {
        document.getElementById('fulladdress').innerHTML = "Onbekend adres";
        $("#bedrijfplaats").val("");
        $("#bedrijfstraat").val("");
        $("#ulsbis").attr('sbiomschrijving', "");
        $("#ulsbis").attr('sbicode', "");
        $("#ulsbis").attr('sbitoevoeging', "");
        $("#ulsbis").attr('sbicompanyname', "");
        $("#selectedcompany").html("");
        $("#ulsbis li").removeClass("active");
        $("#selectedsbi").html("");
        $("#nieuwe_relatie_SBI_selectie").hide();
        $("#nieuwe_relatie_bedrijven_selectie").hide();
        $("#ulcompanies").hide();
        $("#companypages").hide();
        $("#selectedcompanyedit").hide();
        $("#bedrijfnaam").val("");
        $("#bedrijfnaam").attr('disabled', '');
    }
}
function SbiKeuzeNext()
{
    var postcode = document.getElementById("bedrijfpostcode");
    if (!postcode.value)
    {
        alert("Postcode is verplicht!");
        postcode.focus();
        return;
    }
    var straatnummer = document.getElementById("bedrijfstraatnummer");
    if (!straatnummer.value)
    {
        alert("Huisnummer is verplicht!");
        straatnummer.focus();
        return;
    }
    if (document.getElementById('fulladdress').innerHTML == "Onbekend adres")
    {
        $("#sbinaam").hide();
        $("#labelsbinaam").hide();
    }
    else
    {
        if ($("#ulsbis").attr('sbicompanyname') == undefined || $("#ulsbis").attr('sbicompanyname') == '')
        {
            if ($("#nieuwe_relatie_bedrijven_selectie").is(':visible'))
            {
                alert("Bedrijf is niet geselecteerd, selecteer een bedrijf of kies voor de keuze: het bedrijf staat er niet tussen");
            }
            return;
        }
        if ($("#ulsbis").attr('sbicode') == undefined || $("#ulsbis").attr('sbicode') == '')
        {
            alert("Het soort bedrijf is niet geselecteerd, selecteer een soort bedrijf of kies voor de keuze: Het soort bedrijf staat er niet tussen");
            return;
        }
        if ($("#ulsbis").attr('sbicompanyname') != '#' && $("#ulsbis").attr('sbicode') != '#')
        {
            $("#sbinaam").show();
            $("#labelsbinaam").show();
        }
        else
        {
            $("#sbinaam").hide();
            $("#labelsbinaam").hide();
        }
    }

    $("#popupContent2CompanyTab2").show();
    $("#popupContent2Company").hide();
    $("#bedrijfpostcode_selected").val($("#bedrijfpostcode").val());
    $("#bedrijfstraatnummer_selected").val($("#bedrijfstraatnummer").val());
    $("#bedrijfstraatnummertoevoeging_selected").val($("#bedrijfstraatnummertoevoeging").val());
}

function SbiKeuzePrev()
{
    $("#popupContent2CompanyTab2").hide();
    $("#popupContent2Company").show();
}

function SbiCompanyEdit()
{
    $("#ulcompanies").show();
    $("#companypages").show();
    $("#selectedcompanyedit").hide();
    $("#companynotpresent").show();
}

// ************************************
// PROGRESS POPUP
// ************************************

var clsProgressActive = "actieve_stap";
var clsProgressDone = "afgeronde_stap";

function ProgressPopup(settings)
{
    this._stepIndex = -1;
    this._settings = settings;
    this._timer = null;

    $("#" + settings.Id + " .popuptitle").html(settings.Title);

    var html = "";
    for (var i = 0; i < settings.Steps.length; i++)
    {
        html += "<li>" + settings.Steps[i].Description + "</li>";
    }
    $("#" + settings.Id + " .progress_stappen").html(html);

    $("#" + settings.Id + " .popupcontent div").removeClass("progress_klaar_actieve").addClass("progress_klaar");

    ShowPopup(settings.Id);

    this.Step();
}

ProgressPopup.CanShowProgress = function (id)
{
    return !!document.getElementById(id);
};

ProgressPopup.prototype.Step = function ()
{
    if (this._stepIndex >= 0)
    {
        var prev = this._settings.Steps[this._stepIndex];

        $("#" + this._settings.Id + " .progress_stappen li:eq(" + this._stepIndex + ")").removeClass(clsProgressActive).addClass(clsProgressDone);
    }

    this._stepIndex++;

    var step = this._settings.Steps[this._stepIndex];

    $("#" + this._settings.Id + " .progress_stappen li:eq(" + this._stepIndex + ")").addClass(clsProgressActive);

    this._timer = null;
    if (this._stepIndex < this._settings.Steps.length - 1)
    {
        var me = this;
        this._timer = setTimeout(function () { me.Step(); }, step.Duration);
    }
};

ProgressPopup.prototype.Finish = function (response)
{
    if (this._timer)
    {
        clearTimeout(this._timer);
        this._timer = null;
    }

    // Quickly finish it
    $("#" + this._settings.Id + " .progress_stappen li").removeClass(clsProgressActive).addClass(clsProgressDone);

    // Activate last step
    $("#" + this._settings.Id + " .popupcontent div").removeClass("progress_klaar").addClass("progress_klaar_actieve");

    // Give a little wait 
    var me = this;
    this._timer = setTimeout(function () { me.ReallyFinish(response); }, 700);
};

ProgressPopup.prototype.ReallyFinish = function (response)
{
    if (!this._settings.DontClose)
    {
        ClosePopup();
    }

    this._settings.Callback(response);
};

// *********************************
// Doelgroep
// *********************************

var DoelgroepLoginState =
{
    Unknown: 0,
    Success: 1,
    NotFound: 2,
    NotAllowed: 3,
    AllowedWithRedirect: 4,
    NotAllowedForRole: 5,
    UnableToRedirect: 6
};

function LoginDoelgroep(usernameId, passwordId, errorId)
{
    $("#" + errorId).hide();

    var un = $("#" + usernameId).val();
    var pw = $("#" + passwordId).val();

    if (!un || !pw)
    {
        $("#" + errorId).html("Vul gebruikersnaam en wachtwoord in.");
        $("#" + errorId).show();

        $("#" + usernameId).focus();
    }

    var pl = new SOAPClientParameters();
    pl.add("username", un);
    pl.add("password", pw);

    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "LoginDoelgroep", pl, true, function (r)
    {
        LoginDoelgroepResp(r, errorId);
    });
}

function LoginDoelgroepResp(r, errorId)
{
    if (!r)
    {
        return;
    }

    var error;
    switch (r.State)
    {
        case DoelgroepLoginState.Success:
            document.location = r.RedirectUrl;
            break;
        case DoelgroepLoginState.NotFound:
            error = "Ongeldige gebruikersnaam/wachtwoord combinatie.";
            break;
        case DoelgroepLoginState.NotAllowed:
            error = "U heeft geen rechten om op deze doelgroep in te loggen.";
            break;
        case DoelgroepLoginState.NotAllowedForRole:
            error = "U heeft geen rechten om op deze doelgroep in te loggen.";
            break;
        case DoelgroepLoginState.UnableToRedirect:
            error = "De doelgroep waarvan u wenst gebruik te maken is niet actief op deze site.";
            break;
        case DoelgroepLoginState.AllowedWithRedirect:
            alert("De doelgroep is actief op een andere site, u wordt doorgestuurd.");
            document.location = r.RedirectUrl;
            break;
        default:
            error = "Ongeldige gebruikersnaam/wachtwoord combinatie.";
            break
    }

    if (error)
    {
        $("#" + errorId).html(error);
        $("#" + errorId).show();
    }
}


function SetDoelgroep(shortName, errorId)
{
    $("#" + errorId).hide();

    var pl = new SOAPClientParameters();
    pl.add("shortName", shortName);

    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "SetDoelgroep", pl, true, function (r)
    {
        SetDoelgroepResp(r, errorId);
    });
}

function SetDoelgroepResp(r, errorId)
{
    if (!r)
    {
        return;
    }

    if (!r.Success)
    {
        $("#" + errorId).html(r.Message);
        $("#" + errorId).show();
    }
    else if (r.RedirectUrl)
    {
        document.location = r.RedirectUrl;
    }
}







