// needs gulf_class_gmaps.js and mootools 1.11


var extendedClassGMaps = ClassGMaps.extend({
		
	initialize:function(options, responseXML) {
		this.responseXML = responseXML;
		this.coordinates = new Array;
		this.setOptions(options);

	},

		
	get_coordinates: function() {


		if(!this.responseXML) {
			return false;
		}
						
	 	var filling_stations = this.responseXML.documentElement.getElementsByTagName('filling_station');				
			

			
		for(var i=0; i < filling_stations.length; i++) {
			this.coordinates[i] = new Array;
			this.coordinates[i]['filling_station_id'] = 	filling_stations[i].childNodes[0].firstChild.nodeValue;
			this.coordinates[i]['filling_station_name'] = 	filling_stations[i].childNodes[1].firstChild.nodeValue;
			this.coordinates[i]['Y_WGS84'] = 			filling_stations[i].childNodes[2].firstChild.nodeValue; 
			this.coordinates[i]['X_WGS84'] = 			filling_stations[i].childNodes[3].firstChild.nodeValue;	
		}
		
	},
	

	find_nearest_filling_station: function() {


		if(!this.options.point) {
			return false;	
		}

		
 		for(var i=0; i < this.coordinates.length; i++) {		
			var point1 = new GLatLng(this.coordinates[i]['X_WGS84'], this.coordinates[i]['Y_WGS84']);
			var distance = point1.distanceFrom(this.options.point); 
			this.coordinates[i]['distance'] = distance;
		}			

	},
	
	
	bubble_sort: function()  {   
  
		var n = this.coordinates.length;
    		for(var i = 0; i < n; i++) {              
        		for(var j = 1; j < (n-i); j++) {              
           			if(this.coordinates[j-1]['distance'] > this.coordinates[j]['distance']) {    
             				var tmp = this.coordinates[j-1];
              			this.coordinates[j-1] = this.coordinates[j];
              			this.coordinates[j] 	= tmp;
              			tmp = null;
              		} 
       		} 
    		} 
   },



   
   print_coordinates: function() {
	

	var str = '';
	var l = 3;
	if(this.coordinates.length < 3) {
		l = this.coordinates.length;
	}
				
	for(var i=0; i < l; i++) {
		str += "<tr><td>" + (i+1) + ". ";
		str += "<a href='http://www.gulf.nl/index.php?section=brandstofprijzen&filling_station_id=" + this.coordinates[i]['filling_station_id'] + "&m=1&l=nl'>" + this.coordinates[i]['filling_station_name'] +  "</a>";
		str += "</td></tr>";
		str += "<tr><td style='border-bottom: 1px solid #CCCCCC'>";
		str += "(" + Math.round(this.coordinates[i]['distance']) + " meter)";
		str += "</td></tr>";
	}

	if(str != '') {
		str =  "<table>" + str + "</table>";
	} 	
	var find_nearest_station_div = document.getElementById('find_nearest_station');
	if(find_nearest_station_div) {
		find_nearest_station_div.innerHTML = str;		
       }	

  }			
});

	extendedClassGMaps.implement(new Options);


	function find_nearest_station() {
	    

		var from_address = document.getElementById('from_address').value;

		var button_from_address = document.getElementById('button_from_address');
		button_from_address.disabled = true;	

		if(from_address.search(/^[0-9]{4}\s*[a-zA-Z]{2}$/)==-1 ) {
			button_from_address.disabled = false;
			return;
		}

		var geocoder = new GClientGeocoder();
       	geocoder.setBaseCountryCode("nl");
      		

		if (geocoder) { 
        		geocoder.getLatLng( from_address,  function(point) { 
            			if (!point) { 
					button_from_address.disabled = false;

               		    return;
            			} else { 			  
					
					var cb = document.getElementById('chk_find_nearest_station');
					if(cb && cb.checked == true) {
						if(from_address && from_address != '') {
							 setCookie(from_address);
						}
					} else {
						eraseCookie('www.gulf.nl');
					}

					var request = GXmlHttp.create();
	   				if(!request) {
		 				return false;  	
	   				}
	   	
					request.open('GET', 'inc/get_markers.php', false);
	   				request.onreadystatechange = function() {
			
						if(request.readyState == 4) {
							var objClassGmaps = new extendedClassGMaps({point: point}, request.responseXML);
							objClassGmaps.get_coordinates();
							objClassGmaps.find_nearest_filling_station();
							objClassGmaps.bubble_sort();
							objClassGmaps.print_coordinates();	
							button_from_address.disabled = false;

						}

   					} 		
					request.send(null);
					button_from_address.disabled = false;
					request = null;
					objClassGmaps = null;

			
				} // endelse 

		});
		
		}  

	}	






	
  