
	/* Insert your key */
	VMAPI.registerKey(DIST_PRIVATE_KEY);
	VMAPI.setLanguage(DIST_LANGUAGE);

	function o(strObjId){
		return document.getElementById(strObjId);
	}
	function show(objId){
		o(objId).style.display = 'block';
	}
	function hide(objId){
		o(objId).style.display = 'none';
	}

   /* Transform user start address into a geographical point */
   function search_start_location(){
	  hide(DIST_OUTPUT_TEXT);
	  show(DIST_LOADING);
	
      Start_geocoder = new VMGeocoder();
      Start_myaddress = new VMAddress();
    
      Start_myaddress.zipCode = DIST_START_POSTCODE; // startowy kod pocztowy
      Start_myaddress.countryISOCode = DIST_LANGUAGE; // domyslny kraj w ktorym szukamy
      
      Start_geocoder.addEventHandler("onCallBack",search_stop_location);
      Start_geocoder.search(Start_myaddress);
   }
   
    /* Transform user stop address into a geographical point */
   function search_stop_location(){
      Stop_geocoder = new VMGeocoder();
      Stop_myaddress = new VMAddress();
      
      Stop_myaddress.zipCode = document.getElementById(DIST_INPUT_DATA).value;
      Stop_myaddress.countryISOCode = "gbr";
      
      Stop_geocoder.addEventHandler("onCallBack",iti_search);
      Stop_geocoder.search(Stop_myaddress);
   }
            
   /* Itinary search configuration */
   function iti_search(){
      myiti = new VMItinerary();
      myiti.addStopOver(Start_geocoder.result);
      myiti.addStopOver(Stop_geocoder.result);      
      
      myiti.setItineraryType(0); // "Recommended by Michelin" - droga 
      myiti.setItineraryVehicleType(0); // "AUTOMOBIL" - srodek transportu
      myiti.setCarType(0); // "HATCHBACK" - rodzaj auta 
      myiti.setFuelType(0); // "PETROL" - rodzaj paliwa
      myiti.setFuelCost(1.0); // cena za 1l paliwa (w euro) 
      
      myiti.addEventHandler("onCallBack", iti_found);
      myiti.search();
   }

   /* Function fired when itinary was found */
   function iti_found(){
	  var message;
	  var distance = meters2miles(myiti.getTotalDistance());
	  var cost = Math.round(distance * DIST_PRICE * 100) / 100; // cena
	  var pattern = new RegExp("^(" + DIST_EXCLUDED_POSTCODES.join('|') + ")", "i"); // wyrazenie regularne ktore uwzglednia darmowe regiony
	  if(pattern.test(o(DIST_INPUT_DATA).value)){ // mamy darmowa strefe
		 message = 'Distance: <b>' + distance + '</b> miles, cost: <b>0 &pound;</b>, because your location is in West London area';
		 cost = 0;
	  }else{ // standardowa oplata
		 message = 'Distance: <b>' + distance + ' miles</b>, cost: <b>' + cost + ' &pound;</b>';
	  }

	  o(DIST_OUTPUT_DATA).value = cost;
	  o(DIST_OUTPUT_TEXT).innerHTML = message;
	  hide(DIST_LOADING);
	  show(DIST_OUTPUT_TEXT);
   }
   
   /* Calculates miles from meters and rounds it */
   function meters2miles(meters){
		var scale = 1609.34; // 1 mila = 1609.34 metry
		return Math.round(meters / scale);
   }
   