/**
 * abacho "Routenplaner" based on Google Maps API v3
 *
 * This is the javascript file with all functionality needed by the "Routenplaner"
 * for abacho.de
 *
 * @author Martin Albrecht <martin.albrecht@econa.com>
 * @version 1.0
 * @name Routenplaner
 */

// Global variables
var geocoder;
var map;
var parameters;
var route_start, route_end, route_type;
var directionDisplay;
var directionsService = new google.maps.DirectionsService();
var txtDefault_start = 'Startadresse, -ort oder Stichwort';
var txtDefault_end = 'Zieladresse, -ort oder Stichwort'

/**
 * Function to fetch all GET parameters and return them put in an array.
 * The structure of the array is: arr[key] = value
 */
function get_GET_params() {
  var GET = new Array();
  if(location.search.length > 0) {
    var get_param_str = location.search.substring(1, location.search.length);
    var get_params = get_param_str.split("&");
    for(i = 0; i < get_params.length; i++) {
      var key_value = get_params[i].split("=");
      if(key_value.length == 2) {
        var key = key_value[0];
        var value = key_value[1];
        GET[key] = value;
      }
    }
  }
  return(GET);
}

/** Initialization **/
function initialize() {  
  parameters = get_GET_params();

  directionsDisplay = new google.maps.DirectionsRenderer();
  geocoder = new google.maps.Geocoder({region:'de'});
  var myLatlng = new google.maps.LatLng(52.52437, 13.41177);
  var myOptions = {
    zoom: 8,
    center: myLatlng,
    mapTypeId: google.maps.MapTypeId.ROADMAP,
    noClear: true
  }
  map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
  directionsDisplay.setMap(map);
  directionsDisplay.setPanel(document.getElementById("directionsPanel"));
}


/** Calculate and display the route **/
function calcRoute() {
  var r_start = document.getElementById('route_start').value;
  var r_end = document.getElementById('route_end').value;  
  var dir_panel = document.getElementById('directionsPanel');
  var car = document.getElementById('car');
  var walk= document.getElementById('walk');
  //var bike = document.getElementById('bike');
  if( r_start === '' || r_start === txtDefault_start) {
    alert("Bitte geben Sie eine Startadresse an!");
    return false;
  }
  if( r_end === '' || r_end === txtDefault_end ) {
    alert("Fehler: Bitte geben Sie eine Zieladresse an!");
    return false;
  }
  
  dir_panel.innerHTML = '';

  var type = null;
  /*if( bike.checked === true ) {
    type = google.maps.DirectionsTravelMode.BICYCLING;
  } else*/ if( walk.checked === true ) {
    type = google.maps.DirectionsTravelMode.WALKING
  } else {
    type = google.maps.DirectionsTravelMode.DRIVING;
  }

  var request = {
    origin: r_start,
    destination: r_end,
    travelMode: type,
    region: 'de'
  };
  directionsService.route(request, function(result, status) {
    if( status == google.maps.DirectionsStatus.OK ) {
      directionsDisplay.setDirections(result);
      document.getElementById('printRoute').style.display = 'block';      
      document.getElementById('map_canvas').style.width = '60%';
      dir_panel.style.display = 'inline';
    } else {
      alert("Fehler: Route konnte nicht berechnet werden!");
      return false;
    }
  });
  return true;
}


/** Encode the given address **/
function encodeAddress(addr) {
  if( typeof addr === 'undefined' || addr === '' ) {
    alert("Fehler: Keine Adresse angegeben!");
    return false;
  }

  if( geocoder ) {
    geocoder.geocode( {'address':addr}, function( results, status ) {
      if( status === google.maps.GeocoderStatus.OK ) {
        map.setCenter(results[0].geometry.location);        
        return results[0].formatted_address;
      } else {
        alert("Fehler: Geocode konnte nicht ermittelt werden! Grund: " + status);
        return '';
      }
    });
  } else {
    alert("Fehler: Geocoder nicht initialisiert!");
    return false;
  }
  return true;
}

/**
 * Set an input field or clear the text in it.
 * If an empty string is given for the parameter text, the value of the input
 * field defined by the parameter object will be cleared.
 */
function setInput(object, text) {
  if( (typeof object === 'undefined' || object === null) ||
      (typeof text === 'undefined' || text === null) ) {
    return false;
  } else {
    if(text.length === 0 && (object.value === txtDefault_start && object.value === txtDefault_end)) {
      object.value = '';
      object.focus();
    } else {
      if( object.value == txtDefault_start ||
          object.value == txtDefault_end ||
          object.value == '' ) {
        object.value = text;
      }
    }
  }
  return true;
}
