﻿function SetStatus(status) {

    switch (status) {
        case 'EMPTY':
            _postcodeControl.get(0).readOnly = false;
            _huisnummerControl.get(0).readOnly = false;
            _straatControl.get(0).readOnly = false;
            _plaatsControl.get(0).readOnly = false;
            _toevoegingControl.get(0).readOnly = false;

            _postcodeControl.get(0).style.color = "black";
            _huisnummerControl.get(0).style.color = "black";
            _straatControl.get(0).style.color = "black";
            _plaatsControl.get(0).style.color = "black";
            _toevoegingControl.get(0).style.color = "black";
            break;

        case 'LOADING':
            _postcodeControl.get(0).readOnly = true;
            _huisnummerControl.get(0).readOnly = true;
            _straatControl.get(0).readOnly = true;
            _plaatsControl.get(0).readOnly = true;
            _toevoegingControl.get(0).readOnly = true;
            _straatControl.get(0).value = 'Bezig met laden...';
            _plaatsControl.get(0).value = 'Bezig met laden...';

            _postcodeControl.get(0).style.color = "gray";
            _huisnummerControl.get(0).style.color = "gray";
            _straatControl.get(0).style.color = "gray";
            _plaatsControl.get(0).style.color = "gray";
            _toevoegingControl.get(0).style.color = "gray";

            break;

        case 'FOUND':
            _postcodeControl.get(0).readOnly = false;
            _huisnummerControl.get(0).readOnly = false;
            _straatControl.get(0).readOnly = false;
            _plaatsControl.get(0).readOnly = false;
            _toevoegingControl.get(0).readOnly = false;

            _postcodeControl.get(0).style.color = "black";
            _huisnummerControl.get(0).style.color = "black";
            _straatControl.get(0).style.color = "black";
            _plaatsControl.get(0).style.color = "black";
            _toevoegingControl.get(0).style.color = "black";
            break;
    }
}

var _values = [];

var _postcodeControl;
var _huisnummerControl;
var _toevoegingControl
var _straatControl;
var _plaatsControl;

function HasChanged(control, value) {

    var changed = true;
    var controlFound;

    // Controleer of combinatie control en value in values voorkomt;            
    for (i in _values) {
        if ((control == i) && (value == _values[i])) {
            changed = false;
        }

        if (control == i) {
            controlFound = control;
        }
    };


    if (changed && controlFound == null) {
        // Init state; control is nog niet toegevoegd aan collectie;                
        if (document.getElementById(control).getAttribute('oValue') == value) {
            return false;
        }
    }
    return changed;
}

function Lookup(postcodeId, huisnummerId, toevoegingId, straatId, plaatsId, exact) 
{
    _postcodeControl = jQuery("input[id $='" + postcodeId + "']");
    _huisnummerControl = jQuery("input[id $='" + huisnummerId + "']");
    _toevoegingControl = jQuery("input[id $='" + toevoegingId + "']");
    _straatControl = jQuery("input[id $='" + straatId + "']");
    _plaatsControl = jQuery("input[id $='" + plaatsId + "']");

    // Replace characters from the huisnummer field;
    var re = new RegExp("[a-zA-Z ]", "g");
    _huisnummerControl.get(0).value = _huisnummerControl.get(0).value.replace(re, "");


    // Check if both fields are filled;
    if (_postcodeControl.get(0).value == '' || _huisnummerControl.get(0).value == '') {
        return;
    }

    // Check if field is changed
    if (!HasChanged(_postcodeControl.get(0).id, _postcodeControl.get(0).value) && !HasChanged(_huisnummerControl.get(0).id, _huisnummerControl.get(0).value)) {
        return;
    }

    // Set loading status;
    SetStatus('LOADING');

    // Make call to webservice
    General.PostcodeService.Webservices.PostcodeService.GetData(_postcodeControl.get(0).value, _huisnummerControl.get(0).value, exact, OnLookupComplete, OnError);

}

function OnLookupComplete(result, userContext) {
    
    // Check if found;
    if (result.Found) {
        // Set status to found;
        SetStatus('FOUND');

        _postcodeControl.get(0).value = result.PostalCode;
        _huisnummerControl.get(0).value = result.HouseNumber
        _straatControl.get(0).value = result.Street;
        _plaatsControl.get(0).value = result.City;

        _values[_postcodeControl.get(0).id] = _postcodeControl.get(0).value;
        _values[_huisnummerControl.get(0).id] = _huisnummerControl.get(0).value;        
    }
    else {
        // Set status to not found;        
        SetStatus('EMPTY');
        _straatControl.get(0).value = '';
        _plaatsControl.get(0).value = '';

    }

    _toevoegingControl.get(0).focus();
}

function OnError(result) {
    
    SetStatus('EMPTY');
    _straatControl.get(0).value = '';
    _plaatsControl.get(0).value = '';
}

