if(typeof(srvGeneralForm) == "undefined")  
{
    var hsWebsrvServer="/server/";
    var srvGeneralForm = "HsGeneralForms.asmx"; 
}

var ActiveFormId = 0;               // nummer van het formulier
var ActiveFormNum = 0;              // volgnummer van het formulier
var ActivePremiePer = 0;            // actieve premieper
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
};
var ActiveFormFormType = FormType.SingleForm;

var LastSessionInfo = null;         // laatst opgehaalde sessiegegevens

var ObjectSelectionControlRegistry = new Object();
var PopupControlRegistry = new Object();
var AdresXpressControlRegistry = new Object();

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 hasPartialForms = false;        // zitten er partiële formulieren in het pakket?
var canHavePakketKorting = true;    // pakket heeft pakketkorting

var postFieldsFromSessionFuncs = new Array();
var postFieldsFromSessionDone = false;

//Functie arrays ten behoeve van objecten
var CustomFuncs = new Array();
var CustomFuncsDone = false;
var CustomRepeatableFuncs = new Array();

var EmailValidationRegex = /^[a-zA-Z][a-zA-Z0-9_\.\-]+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
var UsernameValidationRegex = /^[a-zA-Z0-9_]{6,}$/;
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,
    NotAccepted: 15
};

var LoginType =
{
    Unknown: 0,
    BackofficeCustomer: 1,
    PersonelBenefit: 2,
    OnlineCustomer: 3
};

var SubmitAction =
{
    Send: 0,
    AddedToPackage: 1,
    PackageSend: 2,
    VoorloopFormFinished: 3,
    AcceptationError: 4
};

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);
}

function GfFieldCheckResp(r)
{
	if(!r) 
	{
		alert("Error: de server heeft geen resultaat gestuurd!");
	} 
	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);
	                    ToggleFieldsVisibility(r.OfferteFields, visi);
	                }	                	            
	            
                    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))
	  		                {
	  		                    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;
        if(y[i].getAttribute("hshasinput")=="true") 
        {
            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))
        {
	        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 = "Om verder te gaan moet dit veld ingevuld worden.";
    
    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))
    {
	    // if (o && o.tagName.toLowerCase() == "select" && o.getAttribute("hshasinput")=="true") fieldName = o.id + "_input"; // exception voor onze select
	    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 InitializeDossierButtons() 
{
    if(ActiveFormId) 
    {
        var btnSave = document.getElementById('btnSaveDossier');
        var btnClose = document.getElementById('btnCloseDossier');
        
        if(btnSave) 
        {
            if( (ActiveFormId == ActiveDossierFormId) || !ActiveDossierId) {
                btnSave.style.display = 'inline';
            }
            else {
                btnSave.style.display = 'none';
            }
        }
        
        if(btnClose) 
        {
            if(ActiveFormId == ActiveDossierFormId && loggedIn) {
                btnClose.style.display = 'inline';
            }
            else {
                btnClose.style.display = 'none';
            }
        }
    }
}

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;
    };

    InitializeDossierButtons();

    var fields = r.Fields;
    GfFillFieldsFromList(fields);
       
    if (r.AcceptationLevel != AcceptationLevel.Unknown)
    {
        if (r.OfferteFields)
        {
            var visi = (r.AcceptationLevel <= AcceptationLevel.Aanvraag);
            ToggleFieldsVisibility(r.OfferteFields, visi);
        }	                	            
    
        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);
    }
    
		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") && 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("U heeft nog niet alle verplichte velden ingevuld. U kunt het formulier bewaren om later af te ronden. Het verschijnt dan als 'vul aan' onder Uw verzekeringen."))
                {
                    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.PackageSend)
        {
            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)
        {
            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("Het versturen is niet gelukt. Reden: " + r.Message);
    }
    else 
    {
        alert("Fout tijdens versturen, probeer nogmaals!");
    }
}


///////////////////////////////////////////////////////////////////
/////////////////            PAKKET           /////////////////////
///////////////////////////////////////////////////////////////////
function GfInitPakketPagina()
{
    if (!document.getElementById("pakketoverzicht")) 
    {
        return;
    }

    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 GfInitPakketPaginaResp(r)
{
    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;
    }


    var o = document.getElementById("frm_premieper");
    if (o)
    {
        o.onchange = function() { OnChangePremiePer(this); };
    }

    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 = "U verlaat de pakketpagina! Gebruik de navigatie in het pakketoverzicht om te navigeren op de pakketpagina.\n\nWilt u de pakketpagina echt verlaten?";
    }
}

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_premieper");
        if (o)
        {
            var termijn = "";
            switch(o.value)
            {
                case "12": termijn = "maand"; break;
                case "4": termijn = "kwartaal"; break;
                case "2": termijn = "half jaar"; break;
                case "1": termijn = "jaar"; break;
            }
            
            var o = document.getElementById("frm_maandpremie");
            if (o)
            {
                if (o.innerHTML.indexOf("maand") != -1) o.innerHTML = o.innerHTML.replace("maand", termijn);
                else if (o.innerHTML.indexOf("kwartaal") != -1) o.innerHTML = o.innerHTML.replace("kwartaal", termijn);
                else if (o.innerHTML.indexOf("half jaar") != -1) o.innerHTML = o.innerHTML.replace("half jaar", termijn);
                else if (o.innerHTML.indexOf("jaar") != -1) o.innerHTML = o.innerHTML.replace("jaar", termijn);
            }    
        }
        
        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.length == 0)
    {
        return;
    }
    else if (r.length == 1)
    {
        // één resultaat -> direct dat formulier laden...
        GfLoadCalcFormData(r[0].Value, ActiveFormNum, ActiveFormIsAfsluiten);
    }
    else
    {
        // popup met formulierkeuze
        var html = "";

        html += "<ul>";
        for (var i = 0; i < r.length; i++)
        {
            html += "<li><a href=\"javascript:void(0);\" onclick=\"GfLoadCalcFormData("+r[i].Value+", ActiveFormNum, ActiveFormIsAfsluiten);\">"+r[i].Name+"</a></li>";
        }
        html += "</ul>";
        
        ShowPopupDiv("Product openen in:", html); 
    }
    // ActiveFormId = r.FormId;
    // GfLoadCalcFormDataResp(r.FormData);
}

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("premiePer", ""+ActivePremiePer);
    SOAPClient.invoke(hsWebsrvServer+srvGeneralForm, "GetPakketInfoFromSession", pl, true, GfUpdatePakketInfoResp);    
}

var LastPakketInfo = null;
function GfUpdatePakketInfoResp(r)
{   
    /*
    if( !document.getElementById("pakketoverzicht") || !document.getElementById("listofdossiers")) 
    {
        return;
    }
    */

    LastPakketInfo = r;

    hasAddedForms = (r.Forms.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;
    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;
        }

        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 = "Vul aan";
            txtHint = "<p><strong>Vul aan</strong><br>Het formulier is nog niet geheel afgerond. Open het formulier om de aanvraag af te maken.</p>";
        }
        else if (f.AcceptationLevel > AcceptationLevel.Aanvraag) 
        {
            txtStatus = "Aanvraag";
            txtHint = "<p><strong>Premie op aanvraag</strong><br>Voor de door u ingestelde opties voor deze verzekering is het helaas niet mogelijk om een premie te berekenen. Onze adviseur neemt zo spoedig mogelijk contact met u op.</p>";
        }
        else 
        {
            txtStatus = fmtMoney(f.Total ? f.Total : f.Totaal);
            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 = "<tr>";
        
        var descriptionHintHtml = f.Identification ? " title=\""+f.Identification+"\"" : "";
        
        phtml += "<td class=\"verzDescCol\"><a href=\"javascript:void(0);\" onclick=\""+cmdClick + "\"" + descriptionHintHtml + ">"+f.Description+"</a></td>";
        																																																									   
        if (isMoney)
        {
            phtml += "<td>&euro;</td><td><span class=\"po_premie\"><a href=\"javascript: void(0);\" onclick=\""+cmdClick+"\">"+txtStatus+"</a></span></td>";
        }
        else
        {
            phtml += "<td>&nbsp;</td><td><a href=\"javascript: void(0);\" class=\"hsHintanchor\" hshinttext=\""+txtHint+"\" onmouseover=\"showhint(this.getAttribute('hshinttext'), this, event, '');\" onclick=\""+cmdClick+"\">"+txtStatus+"</a></td>";
        }
        if (cmdDelete)
        {
            phtml += "<td><img src=\"/private/images/dustbin.gif\" alt=\"Verwijderen\" onclick=\""+cmdDelete+"\"/></td>"
        }
        else
        {
            phtml += "<td><img src=\"/private/images/dustbin.gif\" alt=\"Verwijderen\" style=\"visibility:hidden\"/></td>";
        }
        phtml += "</tr>";

        s += phtml;

        if (f.AllowMultiple == IntBoolean.False)
        {
            var 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";
            }
        }
    }
    var o = document.getElementById("pakketsamenstelling");
    if (o)
    {
        if (s) s = "<table>" + s + "</table>";
        else s = "<p class=\"emptypakketinfo\">U heeft nog geen nieuwe verzekeringen toegevoegd aan uw pakket. Klik hiernaast op een product om deze toe te voegen aan uw pakket.</p>";
        o.innerHTML = s;
    }
    
    if (hasAddedForms)
    {
        // toon winkelmandje als nog niet zichtbaar
        var wm = document.getElementById("pakketoverzicht");
        if (wm && wm.style.display=="none")wm.style.display="";
    
        if(!ActiveDossierFormId) 
        {
            showFieldEx("btnSaveDossier");
        }
        else
        {
            hideField("btnSaveDossier");
        }
    }
    else
    {
        var wm = document.getElementById("pakketoverzicht");
        if (wm && wm.getAttribute("hideifempty")=="true")wm.style.display="none";
    
        hideField("btnSaveDossier");
    }
    
    if (r.ExistingForms)
    {
        s = "";
        for(var i=0, max = r.ExistingForms.length; i<max; i++)
        {
            f = r.ExistingForms[i];
            if (f.PremieTotaal > 0) 
            {
                s += "<tr><td class=\"verzDescCol\">"+f.Description+"</td><td>&euro;</td><td><span class=\"po_premie\">"+fmtMoney(f.PremieTotaal)+"</span></td></tr>";
            }
            else 
            {
                s += "<tr><td class=\"verzDescCol\">"+f.Description+"</td><td>&nbsp;</td><td><span class=\"po_premie\">&nbsp;</span></td></tr>";
            }
            
            if (f.AssurId && f.ProductId && f.AllowMultiple == IntBoolean.False)
            {
                var 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 = "<table>" + s + "</table>";
            
            var 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)
    {         
        // var o = document.getElementById("dossieroverview");
        // if (o) o.style.display = r.CanOpenDossier ? "" : "none";
        var 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 + ")" : "";
                
                if (dossier.Id == r.ActiveDossier)
                {
                    s += "<li class=\"activedossier\">" + dossier.Description + dossiernumber;
                    if(!ActiveDossierChanged && dossier.LastOfferteId) 
                    {
                        s += "<a class=\"pdflink\" hshinttext=\"Download de offerte in pdf formaat\" onmouseover=\"showhint(this.getAttribute('hshinttext'), this, event, '');\"  href=\"/server/offerteform.aspx?SessionId=" + sesId + "&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=\"Download de offerte in pdf formaat\" onmouseover=\"showhint(this.getAttribute('hshinttext'), this, event, '');\"  href=\"/server/offerteform.aspx?SessionId=" + sesId + "&DossierId=" + dossier.Id + " \" target=\"_blank\"></a>";
                    }
                    s += "<img src=\"/private/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
            
            if(!ActiveDossierFormId) 
            {
                showFieldEx("btnCloseDossier");
                showFieldEx("btnSaveDossier");
            }
            else 
            {
                hideField("btnCloseDossier");
                hideField("btnSaveDossier");
            }
        }
        else 
        {
            ActiveDossierId = "";
            ActiveDossierChanged = false;
            hideField("in_dossier");
            hideField("btnCloseDossier");
        }
    }
    else
    {
        ActiveDossierId = "";
        ActiveDossierChanged = false;
        
        var o = document.getElementById("listofdossiers");
        if (o) o.innerHTML = "";
  
        o = document.getElementById("listofdossiersWrapper");
        if (o) o.style.display = "none";
        
        hideField("btnCloseDossier");
    }
  
    var o = document.getElementById("frm_premieper");
    if (o && o.value != ""+r.PremiePer) 
    {
        o.value = ""+r.PremiePer;

        var termijn = "";
        switch(o.value)
        {
            case "12": termijn = "maand"; break;
            case "4": termijn = "kwartaal"; break;
            case "2": termijn = "half jaar"; break;
            case "1": termijn = "jaar"; break;
        }
        
        var o = document.getElementById("premieper_pakketsamenoverzicht");
        if (o) o.innerHTML = termijn;

        var o = document.getElementById("frm_maandpremie");
        if (o)
        {
            if (o.innerHTML.indexOf("maand") != -1) o.innerHTML = o.innerHTML.replace("maand", termijn);
            else if (o.innerHTML.indexOf("kwartaal") != -1) o.innerHTML = o.innerHTML.replace("kwartaal", termijn);
            else if (o.innerHTML.indexOf("half jaar") != -1) o.innerHTML = o.innerHTML.replace("half jaar", termijn);
            else if (o.innerHTML.indexOf("jaar") != -1) o.innerHTML = o.innerHTML.replace("jaar", termijn);
        }    
    }
  
    // totale premie updaten
    var o = document.getElementById("pakketpremie");
    if (o)
    {
        o.innerHTML = fmtMoney(r.TotalePremie);
    }
    
    var kortingstabel = document.getElementById("kortingstabel")
    if (kortingstabel) kortingstabel.style.display = (canHavePakketKorting ? "block" : "none");
    var o = document.getElementById("pakketkortingval");
    if (o)
    {
        o.innerHTML = fmtMoney(r.TotaleKorting);
    }
        
    var disp = (r.PakketKortingPercentage != 0 ? "block" : "none");
    document.getElementById("pakketkortingvalh1").style.display = disp;
    document.getElementById("leftStaaf").style.display = disp;
    document.getElementById("centerStaaf").style.display = disp;
    document.getElementById("rightStaaf").style.display = disp;  
    document.getElementById("kortingstabel").style.display = disp;
    var staafwidth = Math.round(12*r.PakketKortingPercentage);
    if (staafwidth > 174) staafwidth = 174;
    document.getElementById("centerStaaf").style.width = staafwidth + "px";
    document.getElementById("percentageStaaf").innerHTML = (r.PakketKortingPercentage + " %").replace(".", ",");    

    if (ActivePage == "hsformdatadiv" && ActiveFormId && !ActiveFormIsAfsluiten)
    {
        // formulier ook updaten...
        hofGetFieldsFromSession(ActiveFormId, ActiveFormNum);   
    }
}

function OnChangePremiePer(field)
{  
    ActivePremiePer = field.value; 
    //UpdatePremiePerText();
    
    var termijn = "";
    switch(field.value)
    {
        case "12": termijn = "maand"; break;
        case "4": termijn = "kwartaal"; break;
        case "2": termijn = "half jaar"; break;
        case "1": termijn = "jaar"; break;
    }
    
    var o = document.getElementById("premieper_pakketsamenoverzicht");
    if (o) o.innerHTML = termijn;

    var o = document.getElementById("frm_maandpremie");
    if (o)
    {
        if (o.innerHTML.indexOf("maand") != -1) o.innerHTML = o.innerHTML.replace("maand", termijn);
        else if (o.innerHTML.indexOf("kwartaal") != -1) o.innerHTML = o.innerHTML.replace("kwartaal", termijn);
        else if (o.innerHTML.indexOf("half jaar") != -1) o.innerHTML = o.innerHTML.replace("half jaar", termijn);
        else if (o.innerHTML.indexOf("jaar") != -1) o.innerHTML = o.innerHTML.replace("jaar", termijn);
    }    
       
    GfUpdatePakketInfo();
    
    /* --> wordt al gedaan door GfUpdatePakketInfo
    if (ActivePage == "hsformdatadiv")
    {
        hofGetFieldsFromSession(ActiveFormId, ActiveFormNum);   
    }*/
}

function GfVerwijderUitPakket(formId, formNum, productId, assurId, variant, dossierProductId)
{
    if (formId == ActiveFormId && formNum == ActiveFormNum)
    {
        alert("U kunt niet het actieve product uit het pakket verwijderen.");
        return;
    }
    
    if (!confirm("Weet u zeker dat u het product uit het pakket wilt verwijderen?")) 
    {
        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("Er zijn nog geen producten aan het pakket toegevoegd.");
        }
        return;
    }
    
    if (hasPartialForms)
    {
        alert("U heeft producten met de status 'vul aan'. Om deze producten af te sluiten vult u eerst deze formulieren aan.");
        return;
    }
    
    if (!id) id = 13; // backward compatible
    GfLoadCalcFormData(id, 0, true);    
}

function PrepareDossierForAfsluitFormResp(r)
{
    if (!r || !r.Success)
    {
        alert("Niet alle producten kunnen worden afgesloten op dit moment.");
        return;
    }
    
    GfLoadCalcFormData(r.FormId, 0, true);    
}

function GfLoadProductInfoByGuid(guid, assurId, productId, variant)
{
    ActiveInfoAssurId = assurId;
    ActiveInfoProductId = productId;
    ActiveInfoProductVariant = variant;
    
    var pl = new SOAPClientParameters();
    // pl.add("sessionId", ""+sesId);
    pl.add("guid", ""+guid);
    SOAPClient.invoke(hsWebsrvServer+srvGeneralForm, "LoadProductInfoByGuid", pl, true, GfLoadProductInfoResp);    
}

function GfLoadProductInfo(formId)
{
    var pl = new SOAPClientParameters();
    // pl.add("sessionId", ""+sesId);
    pl.add("formId", ""+formId);
    SOAPClient.invoke(hsWebsrvServer+srvGeneralForm, "LoadProductInfoById", pl, true, GfLoadProductInfoResp);    
}

function GfLoadProductInfoForProduct(assurId, productId, variant)
{
    ActiveInfoAssurId = assurId;
    ActiveInfoProductId = productId;
    ActiveInfoProductVariant = variant?variant:"";

    var pl = new SOAPClientParameters();
    // pl.add("sessionId", ""+sesId);
    pl.add("assurId", ""+assurId);
    pl.add("productId", ""+productId);
    pl.add("variant", variant ? ""+variant : "");
    SOAPClient.invoke(hsWebsrvServer+srvGeneralForm, "LoadProductInfoByProduct", pl, true, GfLoadProductInfoResp);    
}

function GfLoadProductInfoByThema(thema)
{
    var pl = new SOAPClientParameters();
    // pl.add("sessionId", ""+sesId);
    pl.add("thema", ""+thema);
    SOAPClient.invoke(hsWebsrvServer+srvGeneralForm, "LoadProductInfoByThema", pl, true, GfLoadProductInfoResp);    
}

function GfLoadProductInfoByBmsProduct(bmsProduct, assurId, productId, variant)
{
    ActiveInfoAssurId = assurId;
    ActiveInfoProductId = productId;
    ActiveInfoProductVariant = variant;

    var pl = new SOAPClientParameters();
    // pl.add("sessionId", ""+sesId);
    pl.add("bmsProduct", ""+bmsProduct);
    SOAPClient.invoke(hsWebsrvServer+srvGeneralForm, "LoadProductInfoByBmsProduct", 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;

	    var x = o.getElementsByTagName("a");
	    var link;
	    for (var i = 0; i < x.length; i++)
	    {
	        link = x[i].getAttribute("gfpakketpaginalink");
	        if (link)
	        {
	            if (link.charAt(0) == "/") 
	            {
	                x[i].href = link;
	                //x[i].target = "_blank";
	            }
	            else x[i].href = "javascript: " + link;
	        }
	        else if (x[i].href.indexOf("javascript:") == -1)
	        {
	            x[i].href = "javascript: void(0);";
	            x[i].outerHTML = x[i].innerHTML;
	        }
	    }
	    
	    // for IE
	    var x = o.getElementsByTagName("A");
	    var link;
	    for (var i = 0; i < x.length; i++)
	    {
	        link = x[i].getAttribute("gfpakketpaginalink");
	        if (link)
	        {
	            if (link.charAt(0) == "/") 
	            {
	                x[i].href = link;
	                //x[i].target = "_blank";
	            }
	            else x[i].href = "javascript: " + link;
	        }
	        else if (x[i].href.indexOf("javascript:") == -1)
	        {
	            x[i].href = "javascript: void(0);";
	            x[i].outerHTML = x[i].innerHTML;
	        }
	    }
	}

    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);
    /*
    var pl = new SOAPClientParameters();
    pl.add("sessionId", ""+sesId);
    pl.add("username", ""+username);
    pl.add("password", ""+password);
    pl.add("querystring", ""+ window.location.search);
    SOAPClient.invoke(hsWebsrvServer+srvGeneralForm, "LoginUser", pl, true, 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;
            collectiviteitsName = r.CollectiviteitsName;
            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.RedirectUrl)
    {
        document.location = r.RedirectUrl;
    }
	else if (r.Message)
	{
		alert(r.Message);
	}
    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>Gebruikersnaam</td>";
    html += "<td><input type=\"text\" id=\"tbLoginUsername\" /></td>";
    html += "</tr>";
    html += "<tr>";
    html += "<td>Wachtwoord</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=\"Inloggen\" onclick=\"DoInlineLoginUser()\"/>";
    html += "<input type=\"button\" class=\"button\" value=\"Annuleren\" onclick=\"HidePopupDiv()\"/>";
    html += "</div>";
    
    html += "<p id=\"wwError\" style=\"display: none\">Ongeldige combinatie van gebruikersnaam en wachtwoord! Probeer opnieuw.</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("Vul een geldige gebruikersnaam in.");
        un.focus();
        return;
    }
    var pw = document.getElementById("tbLoginPassword");
    if (!pw.value)
    {
        alert("Vul een wachtwoord in.");
        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.CollectiviteitsName) collectiviteitsName = r.CollectiviteitsName;
        if (r.DisplayName) displayName = r.DisplayName;
        
        GfUpdateLoginStatus();
        
        if (PostInlineLoginCallback)
        {
            PostInlineLoginCallback(r);
        }
    }
    
    PostInlineLoginCallback = null;
    HidePopupDiv();
}

function GfInlineCreateAccount(msg)
{
    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 zullen wij gebruiken voor communicatie met u.";
    }
    html += "<p>"+msg+"</p>";

    html += "<table>";
    html += "<tr>";
    html += "<td>Gebruikersnaam</td>";
    html += "<td><input type=\"text\" id=\"tbLoginUsername\" /></td>";
    html += "</tr>";
    html += "<tr>";
    html += "<tr>";
    html += "<td>E-mailadres</td>";
    html += "<td><input type=\"text\" id=\"tbLoginEmail\" /></td>";
    html += "</tr>";
    html += "<tr>";
    html += "<td>Wachtwoord</td>";
    html += "<td><input type=\"password\" id=\"tbLoginPassword\" /></td>";
    html += "</tr>";
    html += "<tr>";
    html += "<td>Herhaal wachtwoord</td>";
    html += "<td><input type=\"password\" id=\"tbLoginPassword2\" /></td>";
    html += "</tr>";
    html += "</table>";
    
    html += "<div class=\"popupbuttonwrapper\">";
    html += "<input type=\"button\" class=\"button\" value=\"Aanmaken\" onclick=\"DoInlineCreateAccount()\"/>";
    html += "<input type=\"button\" class=\"button\" value=\"Annuleren\" onclick=\"HidePopupDiv()\"/>";
    html += "</div>";
    
    html += "<p id=\"wwError\" style=\"display: none\">Gebruikersnaam is al in gebruik! Probeer een andere gebruikersnaam.</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");
    if (!un.value || !UsernameValidationRegex.test(un.value))
    {
        alert("Vul een geldige gebruikersnaam in.\r\n\r\nDe gebruikersnaam moet voldoen aan:\r\n- karakters: a-z, A-Z, 0-9 en _ (underscore);\r\n- minimaal 6 posities lang.");
        un.focus();
        return;
    }
    
    var email = document.getElementById("tbLoginEmail");
    if (!email.value || !EmailValidationRegex.test(email.value))
    {
        alert("Vul een geldig e-mailadres in.");
        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("Vul tweemaal hetzelfde wachtwoord in alvorens op aanmaken te drukken.");
        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.CollectiviteitsName) collectiviteitsName = r.CollectiviteitsName;
        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 = "/";
}

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("Er is iets misgegaan bij het ophalen van de polisdetails.");
    }
}

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')\">Terug naar overzicht</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("Er is iets misgegaan bij het ophalen van de polisZoekdetails.");
    }
}

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')\">Terug naar het zoekresultaat</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
};

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("U heeft al berekeningen open. Sluit deze eerst alvorens andere berekeningen te openen.");
        }
        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=\"Doorgaan\" onclick=\"DoQuickOpenDossier('"+dossierId+"')\"/>";
        html += "<input type=\"button\" class=\"button\" value=\"Annuleren\" onclick=\"HidePopupDiv()\"/>";
        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 
        {
            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("Er is reeds een andere berekening geopend. Sluit deze alvorens een andere te openen.");		
        }
        else if (r.Result == DossierOpenResult.Blocked)
        {
            alert("Berekeningen zijn geblokkeerd en derhalve niet te openen.\r\nProbeer het over enkele minuten nog een keer...");
            ActiveDossierId = "";
        }
        else
        {
            alert("Onverwachte fout bij het openen van het dossier.");
		    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...
        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("Weet u zeker dat u de berekening wilt sluiten zonder de wijzigingen op te slaan?"))
	        {
	            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("Onverwachte fout bij het ophalen van de berekeningen.");
        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=\"Opslaan\" onclick=\"DoCloseDossier()\" />";
    
    html += "<input type=\"button\" class=\"button\" value=\"Annuleren\" onclick=\"HidePopupDiv()\" />";
    html += "</div>";
    
    if(r.Type == DossierType.Pakket) 
    {
        ShowPopupDiv("Berekeningen opslaan", html, null, true);
    }
    else 
    {
        ShowPopupDiv("Formulier opslaan", 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("Voer een omschrijving in.");
        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, "GetFormsForProductFromDossier", pl, true, GetFormsForProductFromDossierResp);
}

function GetFormsForProductFromDossierResp(r)
{
    if (!r || r.Forms.length == 0)
    {
        alert("Geen formulieren gevonden voor het gekozen product.");
        return;
    }
    
	if (r.Forms.length == 1)
	{
		OpenProductFromDossier(r.DossierProductId, r.Forms[0].Value);
	}
	else
	{
	    var html = "";

		html += "<ul>";
	    for (var i = 0, max = r.Forms.length; i < max; i++)
	    {
	        html += "<li><a href=\"javascript:void(0);\" onclick=\"OpenProductFromDossier('" + r.DossierProductId + "', '"+r.Forms[i].Value+"')\">"+r.Forms[i].Name+"</a></li>";
	    }
		html += "</ul>";
	    
	    ShowPopupDiv("Product openen in:", html); 
	}
}

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("Weet u zeker dat u het product wilt verwijderen?")) 
    {
        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("De opgeslagen berekening kon niet verwijderd worden.");
        return;
    }
    
    GfUpdatePakketInfo();
}

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("De opgeslagen formulieren konden niet verwijderd worden.");
        return;
    }

    if (typeof(AuthData)!="undefined" && AuthData)
    {
	    OnMijnBerekeningen();
    }
    else
    {
        document.location = document.location;
	}
}


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 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 GetUserDossiersInfoResp(r)
{
    if (!r)
    {
        alert("Fout bij ophalen gegevens");
        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 dossiernumber = cur.DossierNumber ? " (" + cur.DossierNumber + ")" : "";
        
        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.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 && r.Type != DossierType.Pakket) 
        {
            s += " <img src=\"/private/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=\"/server/offerteform.aspx?SessionId=" + sesId + "&DossierId=" + cur.Id + " \" target=\"_blank\"></a>";
        }
        s += "</li>";
    }

    

    if (!s)
    {
        var headertitle = (r.Type == DossierType.Pakket) ? "berekeningen" : "formulieren";
    
        s += "<p>Er zijn nog geen opgeslagen " + headertitle +".</p>";
    }
    else
    {
        s = "<ul class=\"mijnpaginadossierlist\">" + s + "</ul>";
    }
    
    var containername ="";
    if(r.Type == DossierType.Pakket) 
    {
        containername = "opgeslagenberekeningencontainer";
    }
    else 
    {
        containername = "opgeslagenformulierencontainer";
    }
    
    var o = document.getElementById(containername);
    if (o) 
    {
        o.innerHTML = s;
    }
}

function GetActiveDossierLabel(currentId)
{
    if (ActiveDossierId == currentId)
    {
        return '<span class=\"currentopendossier\">(Geopend)</span>';
    }
    else 
    {
        return '';
    }
}

function MijnPaginaOpenDossier(dossierId, redir)
{
    if (typeof(AuthData)!="undefined" && AuthData)
    {
        OnProductenOverzicht("", "", "", dossierId);
    }
    else
    {
        // request to load the dossier
        redir += "?dossier=" + dossierId;
        
        document.location = redir;
    }
}

function MijnPaginaOpenSingleFormDossier(dossierId, redir)
{
    if(ActiveDossierId && (ActiveDossierId != dossierId) ) 
    {
        alert('U heeft al een dossier openstaan');
        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) 
    {
	    if (typeof(AuthData)!="undefined" && AuthData)
        {
		    AdvisorShowEditDamagePopup(r.RedirectUrl, function() { OnMijnBerekeningen(); });
        }
        else
        {
		    document.location = r.RedirectUrl;
		}
    }
    else 
    {
        alert('Het dossier kon niet geopend worden.');
        ActiveDossierId = "";
    }
}


//function MijnPaginaOpenSingleFormDossierWithProduct(dossierId, dossierProductId, redir)
//{
//    var pl = new SOAPClientParameters();
//    pl.add("sessionId", "" + sesId);
//    pl.add("dossierProductId", ""+ dossierProductId);
//    pl.add("dossierId", "" + dossierId);

//    ActiveDossierId = dossierId;
//    
//    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "OpenSingleFormDossierWithProduct", pl, true, MijnPaginaOpenSingleFormDossierResp);    
//}

function LoadProductFromSingleFormDossier(dossierId, productId)
{
    if(ActiveDossierId == dossierId) 
    {
        OpenProductFromSingleFormDossier(productId, ActiveDossierFormId);
        return;
    }

    if(ActiveDossierId) 
    {
        alert('U heeft al een dossier openstaan');
        return;
    }

    var pl = new SOAPClientParameters();
    pl.add("sessionId", "" + sesId);
    pl.add("dossierId", "" + dossierId);
    pl.add("dossierProductId", "" + productId);
    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "GetFormsForProductFromDossier", pl, true, GetFormsForProductFromSingleFormDossierResp);
    
    ActiveDossierId = dossierId;
}

function GetFormsForProductFromSingleFormDossierResp(r)
{
    if (!r || r.Forms.length == 0)
    {
        alert("Geen formulieren gevonden voor het gekozen product.");
        return;
    }
    
	if (r.Forms.length == 1)
	{
		OpenProductFromSingleFormDossier(r.DossierProductId, r.Forms[0].Value);
	}
	else
	{
	    var html = "";

		html += "<ul>";
	    for (var i = 0, max = r.Forms.length; i < max; i++)
	    {
	        html += "<li><a href=\"javascript:void(0);\" onclick=\"OpenProductFromSingleFormDossier('" + r.DossierProductId + "', '"+r.Forms[i].Value+"')\">"+r.Forms[i].Name+"</a></li>";
	    }
		html += "</ul>";
	    
	    ShowPopupDiv("Product openen in:", html); 
	}
}

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 && r.Success)
    {
		if (r.RedirUrl)
		{
    	    if (typeof(AuthData)!="undefined" && AuthData)
            {
			    AdvisorShowEditDamagePopup(r.RedirUrl, function() { OnMijnBerekeningen(); });
            }
            else
            {
			    document.location = r.RedirUrl;
			}
		}
    }
}

/////////////////////////////////////////////////////////////
/////////////////// 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("Geen wijzigingsformulier gevonden.");
    }
    else
    {
        // Redirect to edit page
    	if (typeof(AuthData)!="undefined" && AuthData)
        {
			AdvisorShowEditDamagePopup(r, function() { GfToggleMijnPaginaDiv('polisoverzicht'); });
        }
        else
        {
        	document.location = r;
        }
    }   // End if
}

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("Geen schadeformulier gevonden.");
    }
    else
    {
        // Redirect to edit page
    	if (typeof(AuthData)!="undefined" && AuthData)
        {
			AdvisorShowEditDamagePopup(r);
        }
        else
        {
        	document.location = r;
        }
    }   // End if
}

function GetRelationEditForm()
{
    var pl = new SOAPClientParameters();
    pl.add("sessionId", "" + sesId);
    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "GetRelationEditFormRedirectUrl", pl, true, GetRelationEditFormResp);
}

function GetRelationEditFormResp(r)
{
    if (!r)
    {
        alert("Geen wijzigingsformulier gevonden.");
    }
    else
    {
        // Redirect to edit page
    	if (typeof(AuthData)!="undefined" && AuthData)
        {
			AdvisorShowEditDamagePopup(r, function() { OnCustomerData(); });
        }
        else
        {
        	document.location = r;
        }
    }   // End if
}


/////////////////////////////////////////////////////////////
//////////////// Elders lopende verzekeringen ///////////////
/////////////////////////////////////////////////////////////

var ActiveExternalAssurance = 0;

function DeleteExternalAssurance(id, 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);
    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "DeleteExternalAssurance", pl, true, DeleteExternalAssuranceResp);
}

function DeleteExternalAssuranceResp(r)
{
    if (!r)
    {
        alert("Onverwachte fout bij het verwijderen van de elders lopende verzekering.");
        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("Voer een omschrijving in voor de elders lopende verzekering.");
        o.focus();
        return;
    }
    pl.add("description", "" + o.value);     
     
    o = document.getElementById("extasspolisnummer");
    if (!o.value)
    {
        alert("Voer een polisnummer in voor de elders lopende verzekering.");
        o.focus();
        return;
    }
    pl.add("polisnr", "" + o.value);

    // Maatschappij
    o = document.getElementById("extassmijcode");
    if (!o.value)
    {
        alert("Kies een maatschappij voor de elders lopende verzekering.");
        o.focus();
        return;
    }
    pl.add("mijcode", "" + o.value);
    
    if (o.value == "Z999")
    {
        o = document.getElementById("extassmijdesc");
        if (!o.value)
        {
            alert("Voer de omschrijving in voor de maatschappij van de elders lopende verzekering.");
            o.focus();
            return;
        }
        pl.add("mijcodedesc", "" + o.value);
    }
    
    // Product
    o = document.getElementById("extassproduct");
    if (!o.value)
    {
        alert("Kies een product voor de elders lopende verzekering.");
        o.focus();
        return;
    }
    pl.add("product", "" + o.value);
    
    if (o.value == "0")
    {
        o = document.getElementById("extassproductdesc");
        if (!o.value)
        {
            alert("Voer de omschrijving in voor het product van de elders lopende verzekering.");
            o.focus();
            return;
        }
        pl.add("productdesc", "" + o.value);
    }

    // Bedragen
    o = document.getElementById("extassverzekerdbedrag");
    if (!o.value)
    {
        alert("Voer het verzekerde bedrag in voor de elders lopende verzekering.");
        o.focus();
        return;
    }
    pl.add("verzekerdbedrag", "" + o.value);

    o = document.getElementById("extasspremium");
    if (!o.value)
    {
        alert("Voer de premie in voor de elders lopende verzekering.");
        o.focus();
        return;
    }
    pl.add("premium", "" + o.value);

    // Datums    
    o = document.getElementById("extassstartdate");
    if (!o.value)
    {
        alert("Voer de ingangsdatum in voor de elders lopende verzekering.");
        o.focus();
        return;
    }
    pl.add("ingangsdatum", "" + o.value);

    o = document.getElementById("extassvervaldatum");
    if (!o.value)
    {
        alert("Voer de vervaldatum in voor de elders lopende verzekering.");
        o.focus();
        return;
    }
    pl.add("vervaldatum", "" + o.value);
    
    pl.add("sessionId", "" + sesId);
    pl.add("id", "" + ActiveExternalAssurance);
    SOAPClient.invoke(hsWebsrvServer + srvGeneralForm, "SaveExternalAssurance", pl, true, SaveExternalAssuranceResp);
}

function SaveExternalAssuranceResp(r)
{
    if (!r) // r==0
    {
        alert("Onverwachte fout bij het opslaan van de elders lopende polis.");
        return;
    }
    
    UpdateExternalAssurances();
    
    ClosePopup();
}

function AddExternalAssurance()
{
    ClosePopup();
    
    ActiveExternalAssurance = 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();
    
    ActiveExternalAssurance = 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("Gegevens niet gevonden. Probeer opnieuw...");
        return;
    }
    
    ActiveExternalAssurance = r.Id;
    
    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);
	    // o.value = 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) 
	{
	    setSelectFromValue(o, field.FieldValue);
	    // 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);
    if (!un.value || !UsernameValidationRegex.test(un.value))
    {
        alert("Vul een geldige gebruikersnaam in.\r\n\r\nDe gebruikersnaam moet voldoen aan:\r\n- karakters: a-z, A-Z, 0-9 en _ (underscore);\r\n- minimaal 6 posities lang.");
        un.focus();
        return;
    }
    
    var email = document.getElementById(emailId);
    if (!email.value || !EmailValidationRegex.test(email.value))
    {
        alert("Vul een geldig e-mailadres in.");
        email.focus();
        return;
    }

    var pw2 = document.getElementById(password2Id);
    if (!pw2.value || pw.value != pw2.value)
    {
        alert("Vul tweemaal hetzelfde wachtwoord in alvorens op aanmaken te drukken.");
        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)
        {
            var o = document.getElementById("wwError");
            if (o)
            {
                o.innerHTML = r.Message;
            }
        }
        showField("wwError");
        return;
    }
    hideField("wwError");
    
    if (r.LoginType == LoginType.OnlineCustomer || r.LoginType == LoginType.BackofficeCustomer)
    {
        loggedIn = true;
        if (r.CollectiviteitsName) collectiviteitsName = r.CollectiviteitsName;
        if (r.DisplayName) displayName = r.DisplayName;
        
        GfUpdateLoginStatus();
    }
}

function AccountChangePassword(oldpasswordId, newpasswordId, newpasswordId2)
{
    var o = document.getElementById(oldpasswordId);
    var oldpassword = o.value;
    if (!oldpassword)
    {
        alert("Vul het oude wachtwoord in.");
        o.focus();
        return;
    }
    
    o = document.getElementById(newpasswordId);
    var newpassword = o.value;
    if (!newpassword)
    {
        alert("Vul het nieuwe wachtwoord in.");
        o.focus();
        return;
    }
    
    o = document.getElementById(newpasswordId2);
    var newpassword2 = o.value;
    if (!newpassword2)
    {
        alert("Vul het nieuwe wachtwoord een tweede maal in.");
        o.focus();
        return;
    }
    
    if (newpassword != newpassword2)
    {
        alert("Vul twee maal hetzelfde nieuwe wachtwoord in.");
        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("Het wachtwoord kon niet gewijzigd worden op basis van de ingevoerde gegevens.\r\nVul een wachtwoord in, dat voldoet aan de volgende eisen: Gebruik minimaal 8 karakters. Gebruik minimaal 1 hoofdletter, 1 kleine letter en 1 cijfer.");
        return;
    }
    
    // melding en popup verbergen
    alert("Het wachtwoord is gewijzigd. De volgende keer dat u inlogt dient u het nieuwe wachtwoord te gebruiken.");
}

function AccountForgotPassword(usernameId, emailId)
{
    var o = document.getElementById(usernameId);
    var username = o.value;
    if (!username)
    {
        alert("Vul de gebruikersnaam in.");
        o.focus();
        return;
    }
    
    o = document.getElementById(emailId);
    var email = o.value;
    if (!email)
    {
        alert("Vul het e-mailadres in.");
        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("Het wachtwoord kon niet gewijzigd worden op basis van de ingevoerde gegevens.");
        return;
    }
    
    // melding en popup verbergen
    alert("Uw wachtwoord is toegestuurd.");
}

function AccountForgotUsername(emailId)
{
    var o = document.getElementById(emailId);
    var email = o.value;
    if (!email)
    {
        alert("Vul het e-mailadres in.");
        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("Het e-mailadres is niet bij ons bekend, derhalve kunnen wij u uw gebruikersnaam niet toesturen.");
        return;
    }
    
    // melding en popup verbergen
    alert("Uw gebruikersnaam is toegestuurd.");
}

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("Vul uw relatienummer in.");
        o.focus();
        return;
    }
    
    o = document.getElementById(polisNumberId);
    var polnr = o.value;
    if (!polnr)
    {
        alert("Vul een polisnummer in.");
        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)
{
	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("Vul een polisnummer in.");
        o.focus();
        return;
    }
    
    o = document.getElementById(zipCodeId);
    var zipcode = o.value;
	zipcode = zipcode.replace(" ", "");
    if (!zipcode)
    {
        alert("Vul uw postcode in.");
        o.focus();
        return;
    }

    o = document.getElementById(streetNumberId);
    var streetNumber = o.value;
    if (!streetNumber)
    {
        alert("Vul uw huisnummer in.");
        o.focus();
        return;
    }
	if (!IsNumeric(streetNumber))
	{
        alert("Vul alleen het numerieke deel van uw huisnummer in.");
        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("Op basis van de ingevoerde gegevens kon uw account niet gekoppeld worden aan uw gegevens in de backoffice.");
        }
        return;
    }
    
    alert("Uw account is met succes gekoppeld aan uw gegevens uit de backoffice.");
    
    if (r.RedirectUrl)
    {
        document.location = r.RedirectUrl;
    }
}

///////////////////////////////////////////////////////////////////
/////////////////         ACCOUNTWIZARD       /////////////////////
///////////////////////////////////////////////////////////////////


var AccountWizardCreateAccountIsCustomer = false;
function AccountWizardCreateAccount(usernameId, passwordId, password2Id, emailId, isCustomer)
{
    var un = document.getElementById(usernameId);
    if (!un.value || !UsernameValidationRegex.test(un.value))
    {
        alert("Vul een geldige gebruikersnaam in.\r\n\r\nDe gebruikersnaam moet voldoen aan:\r\n- karakters: a-z, A-Z, 0-9 en _ (underscore);\r\n- minimaal 6 posities lang.");
        un.focus();
        return;
    }
    
    var email = document.getElementById(emailId);
    if (!email.value || !EmailValidationRegex.test(email.value))
    {
        alert("Vul een geldig e-mailadres in.");
        email.focus();
        return;
    }

    var pw = document.getElementById(passwordId);
    if (!pw.value) 
    {
        alert("Vul een wachtwoord in.");
        pw.focus();
        return;
    }
 
    var pw2 = document.getElementById(password2Id);
    if (!pw2.value || pw.value != pw2.value)
    {
        alert("Vul tweemaal hetzelfde wachtwoord in alvorens op aanmaken te drukken.");
        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.CollectiviteitsName)
        {
            collectiviteitsName = r.CollectiviteitsName;
        }
        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.CollectiviteitsName)
            {
                collectiviteitsName = r.CollectiviteitsName;
            }
            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=\"/server/ArchiveDownload.aspx?archiveId="+archive.Id+"&sessionId="+sesId+"\" target=\"_blank\" onclick=\"HidePopupDiv()\">"+desc+"</a></li>";
        }
        s += "</ul>";

        ShowPopupDiv("Archiefdocumenten", s);
    }
}

///////////////////////////////////////////////////////////////////
/////////////////         MIJPAGINAVIEWS       ////////////////////
///////////////////////////////////////////////////////////////////

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("Er is iets misgegaan bij het ophalen van de polisdetails.");
    }
}

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')
            {
                //document.location.href = typeof(countClickArgs[i]);
                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]);
            }
        }
        
        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('Weet u zeker dat u dit item wilt verwijderen.')) 
        {
            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);
		SOAPClient.invoke(hsWebsrvServer+srvGeneralForm, "DeleteObject", pl, true, me.DeleteObjectResp);
    }
    
    this.DeleteObjectResp = function(r)
    {
        if(r) 
        {
            me.ClosePopupHandler();
        }
        else 
        {
            alert('Verwijderen is mislukt.');
        }
    }

	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('Er is nog geen wijzigingsformulier ingesteld voor dit objecttype.');
	        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="/private/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 class="button" id="' + me._objectformwrapperid + 'save" value="Opslaan" onclick="PopupControlRegistry.Find(\''+me._controlid+'\').StoreObjectProperties();">';
			
			if(me._action == ObjectPopupAction.Edit)
			{
			    html += '<input class="button" id="' + me._objectformwrapperid + 'del" value="Verwijderen" onclick="PopupControlRegistry.Find(\''+me._controlid+'\').DeleteObject();">';
			}
			
			html += '<input class="button" id="' + me._objectformwrapperid + 'cancel" value="Annuleren" onclick="PopupControlRegistry.Find(\''+me._controlid+'\').Hide();">';
		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>Combinatie van huisnummer en postcode heeft geen resultaat opgeleverd.</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);
		}
	}
}