function toggleAddressForm(mode, fieldPrefix)
{
  if (fieldPrefix == null)
    fieldPrefix = '';

  if (mode != 'show' && mode != 'hide')
    return;

  var addressForm       = null;
  var addressResponse   = null;

  if (addressForm = document.getElementById(fieldPrefix + 'addr_fields'))
  {
    if (addressResponse = document.getElementById(fieldPrefix + 'addr_response'))
    {
      if (mode == 'show')
      {
        addressResponse.style.display = 'none';
        addressForm.style.display = 'block';
      }
      else
      {
        addressForm.style.display = 'none';
        addressResponse.style.display = 'block';
      }
    }
  }

}

function doAddressCall(mode, fieldPrefix)
{
  var postParams    = '';

  var houseNumber   = '';
  var zipCode       = '';

  if (fieldPrefix == null)
    fieldPrefix = '';

  postParams        += '&prefix=' + fieldPrefix;

  // Built up the POST vars dependent on the mode
  if (mode == 'PC')
  {
    postParams += '&address_input_search=PC';

    if (zipCode = document.getElementById(fieldPrefix + 'address_input_zipcode'))
      postParams += '&address_input_zipcode=' + zipCode.value;

  }
  else if (mode == 'PS')
  {
    postParams += '&address_input_search=PS';

    if (street = document.getElementById('autocomplete2_input'))
      postParams += '&address_input_street=' + street.value;

    if (city = document.getElementById('autocomplete1_input'))
      postParams += '&address_input_city=' + city.value;

  }

  if (houseNumber = document.getElementById(fieldPrefix + 'address_input_housenumber'))
    postParams += '&address_input_housenumber=' + houseNumber.value;

  if (houseNumberAddition = document.getElementById(fieldPrefix + 'address_input_housenraddition'))
    postParams += '&address_input_housenumberaddition=' + houseNumberAddition.value;

  showLoadingBox();

  var callback =
  {
    success: function(o)
    {
      var addressElem = '';

      if (addressElem = document.getElementById(fieldPrefix + 'response'))
      {
      // Put the following generalized some day
        var responseXML = null;

        // Clear previous messages
        toggleFormResponse('hide', 'error', '', fieldPrefix + 'address_error');

        if (responseXML = o.responseXML)
        {
          var actions = null;

          // Read out the actions given in the xml response
          if (actions = responseXML.getElementsByTagName('action'))
          {
            for (i = 0; i < actions.length; i++)
            {
              var type = null;
              var value = null;
              var valueXMLNode = null;

              if (type = actions[i].getElementsByTagName('type'))
              {
                type = type[0].firstChild.nodeValue;

                if (valueXMLNode = actions[i].getElementsByTagName('value'))
                {
                  value = valueXMLNode[0].firstChild.nodeValue;

                  switch (type)
                  {
                    case 'success':
                      var addressXMLNode = null;
                      var streetXMLNode = null;
                      var houseNumberXMLNode = null;
                      var houseNumberAdditionXMLNode = null;
                      var zipCodeXMLNode = null;
                      var cityXMLNode = null;
                      var municipalityXMLNode = null;
                      var stateXMLNode = null;
                      var countryXMLNode = null;
                      var areaXMLNode = null;
                      var neighbourhoodXMLNode = null;

                      var street = '';
                      var houseNumber = '';
                      var houseNumberAddition = '';
                      var zipCode = '';
                      var city = '';
                      var municipality = '';
                      var state = '';
                      var country = '';
                      var area = '';
                      var neighbourhood = '';

                      addressXMLNode = valueXMLNode[0].getElementsByTagName('address');

                      if (streetXMLNode = addressXMLNode[0].getElementsByTagName('street'))
                        street = streetXMLNode[0].firstChild.nodeValue;

                      if (houseNumberXMLNode = addressXMLNode[0].getElementsByTagName('housenumber'))
                        houseNumber = houseNumberXMLNode[0].firstChild.nodeValue;

                      if (houseNumberAdditionXMLNode = addressXMLNode[0].getElementsByTagName('housenumberaddition'))
                      {
                        if (houseNumberAdditionXMLNode[0] && houseNumberAdditionXMLNode[0].firstChild)
                          houseNumberAddition = houseNumberAdditionXMLNode[0].firstChild.nodeValue;

                      }

                      if (zipCodeXMLNode = addressXMLNode[0].getElementsByTagName('zipcode'))
                        zipCode = zipCodeXMLNode[0].firstChild.nodeValue;

                      if (cityXMLNode = addressXMLNode[0].getElementsByTagName('city'))
                        city = cityXMLNode[0].firstChild.nodeValue;

                      if (municipalityXMLNode = addressXMLNode[0].getElementsByTagName('municipality'))
                        municipality = municipalityXMLNode[0].firstChild.nodeValue;

                      if (stateXMLNode = addressXMLNode[0].getElementsByTagName('state'))
                        state = stateXMLNode[0].firstChild.nodeValue;

                      if (countryXMLNode = addressXMLNode[0].getElementsByTagName('country'))
                        country = countryXMLNode[0].firstChild.nodeValue;

                      if (areaXMLNode = addressXMLNode[0].getElementsByTagName('area'))
                      {
                        if (areaXMLNode[0].firstChild)
                        {
                          area = areaXMLNode[0].firstChild.nodeValue;
                        }
                      }

                      if (neighbourhoodXMLNode = addressXMLNode[0].getElementsByTagName('neighbourhood'))
                      {
                        if (neighbourhoodXMLNode[0].firstChild)
                        {
                          neighbourhood = neighbourhoodXMLNode[0].firstChild.nodeValue;
                        }
                      }

                      var responseAddress = street + " " + houseNumber + " " + houseNumberAddition + "<br />" +
                                zipCode + "<br />" +
                                city + "<br /><br />" +
                                neighbourhood + "<br />" +
                                area + "<br />" +
                                state;

                      addressElem.innerHTML = responseAddress;

                      // Hide the error message
                      toggleFormResponse('hide', 'error', '', fieldPrefix + 'address_error');

                      // Hide the form
                      toggleAddressForm('hide', fieldPrefix);


                    break;
                    case 'error':
                      toggleFormResponse('show', 'error', value, fieldPrefix + 'address_error');
                    break;
                  }
                }
              }
            }
          }
        }

      }

      hideLoadingBox();
    },
    failure: function(o)
    {
      contentElem.innerHTML = 'Helaas, kon deze content niet inladen, probeer het a.u.b. nogmaals.';
      hideLoadingBox();
    },
    cache: false
  }

  var transaction = YAHOO.util.Connect.asyncRequest('POST', 'remote/address_call.php', callback, postParams);
}
