  /*
  /   JavaScript: DistanceCalculator.js
  /   calculates distance between 2 locations via google maps
  /   Requires getXmlHttpObject() which simply returns an XMLHHTP object. See: /js/AJAX.js
  /   By eKerner@eKerner.com
 */

  var distanceCalculatorAJAX;
  function calculateDistance() {
    if (!calculateDistanceAJAX())
      calculateDistanceGoogleMaps();
  }
  function calculateDistanceAJAX() {
    var formObj = document.getElementById('distanceCalculatorForm');
    if (formObj.distanceFrom.value == '' || formObj.distanceTo.value == '') {
      alert ("Please provide From and To locations!");
      formObj.distanceFrom.value = 'Canberra ACT Australia';
      formObj.distanceTo.value   = 'Sydney NSW Australia';
      document.getElementById('distanceCalculatorResults').innerHTML = '286km';
      return true;
    }
    distanceCalculatorAJAX = getXmlHttpObject();
    if (distanceCalculatorAJAX == null) // ajax not supported
      return false;  // cause default calculateDistanceGoogleMaps();
    var url = '/ajax/DistanceCalculator.php?from=' + formObj.distanceFrom.value + '&to=' + formObj.distanceTo.value;
    url = url.replace(/\s+/g, '+');
    distanceCalculatorAJAX.onreadystatechange = calculateDistanceAJAXStateChanged;
    distanceCalculatorAJAX.open('GET', url, true);
    distanceCalculatorAJAX.send(null);
    return true;
  }
  function calculateDistanceAJAXStateChanged() {
    if (distanceCalculatorAJAX.readyState == 4) {
      if (distanceCalculatorAJAX.responseText == 'failed'){
        calculateDistanceGoogleMaps();
        document.getElementById("distanceCalculatorResults").innerHTML = 'Opening Google Maps';
      }
      else
        document.getElementById("distanceCalculatorResults").innerHTML = distanceCalculatorAJAX.responseText;
      callDistanceCalculatorCallback(distanceCalculatorAJAX.responseText);
    }
  }
  function calculateDistanceGoogleMaps() {
    formObj = document.getElementById("distanceCalculatorForm");
    window.open(formObj.action + '?hl=en&q=' + formObj.distanceFrom.value + ' to ' + formObj.distanceTo.value);
    callDistanceCalculatorCallback('failed'); // failed to get distance via ajax.
  }
  function callDistanceCalculatorCallback(responseText) {
    if (typeof(distanceCalculatorCallback) == 'function')
      distanceCalculatorCallback(responseText);
  }
