


var ClassGMaps = new Class({
	
	initialize: function(options) {
	
		if (!GBrowserIsCompatible()) {
			return false;
    		}		
	
		this.setOptions(options);
	},
	
	
   	create: function() {

		this.map = new GMap2(document.getElementById(this.options.map_div));

		if(!this.map) {
			return false;
		}
		
		if(this.options.gmaptypecontrol) {
			this.map.addControl(new GMapTypeControl());
		}
			
		if(this.options.gsmallmapcontrol) {
			this.map.addControl(new GSmallMapControl());
		}
		
		if(this.options.gmapzoom) {
			this.map.setCenter(new GLatLng(this.options.centerlatitude, this.options.centerlongitude), this.options.gmapzoom);
		}
  	},

		
  	
  	create_marker: function(point) {  
		
  		var baseIcon = new GIcon();
		baseIcon.shadow = "http://www.gulf.nl/img/map/markers/shadow50.png";
		baseIcon.iconSize = new GSize(20, 34);
		baseIcon.shadowSize = new GSize(37, 34);
		baseIcon.iconAnchor = new GPoint(9, 34);
		baseIcon.infoWindowAnchor = new GPoint(9, 2);
		baseIcon.infoShadowAnchor = new GPoint(18, 25);
		baseIcon.image = 'http://www.gulf.nl/img/map/markers/blue_MarkerO.png';
		var marker = new GMarker(point, baseIcon);  
     		return marker;

	},
	
	
    


   	add_marker: function(marker) {
    		this.map.addOverlay(marker);
    	},
    
    
	clear_overlays: function() {
	  	this.map.clearOverlays();	  
	},
    

	set_zoomlevel: function(latlng, zoomlevel) {
	 	this.map.setCenter(latlng, zoomlevel);        
    	},
    

	initialize_directions: function() {

		if(this.options.gdir) {
			
			this.gdir_map_div = document.getElementById(this.options.gdir_map_div);

			if(!this.gdir_map_div) {
				return false;		
			}

			var objGetDirections = document.getElementById('get_directions'); 
			if(!objGetDirections) {
				return false;
			}

			if(!this.map) {
				return false;
			}
  
			this.gdir = new GDirections(this.map, this.gdir_map_div);
			// attach event to button

     			//objGetDirections.addEventListener("click", this.get_directions, true); 

			GEvent.addListener(this.gdir, "load", 	this.on_gdirections_load);
			GEvent.addListener(this.gdir, "error", 	this.get_directions_handle_errors);

			// todo:: all validation/checks go in initialize_directions
			return true;
		}
  	},


	get_directions: function() {

		


		if(!objClassGmaps) {
			return false;
		}



		if(!objClassGmaps.gdir) {
			return false;
		}

		if(!objClassGmaps.options.locale) {
			return false;
		}
		
		
		
		var objFromAddress 	= document.getElementById(objClassGmaps.options.from_address);

		if(!objFromAddress) {
			return false;
		}
			
		if(objFromAddress.value == '') {
			return false;
		}
	
		var objToAddress = document.getElementById(objClassGmaps.options.to_address);
		
		if(!objToAddress) {
			return false;
		}
			
		if(objToAddress.value == '') {
			return false;
		}

		document.getElementById(objClassGmaps.options.gdir_map_div).innerHTML = "";

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

		if(from_address.search(/^[a-zA-Z0-9\s]+$/)==-1) {
			return;
		}

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


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

		if (geocoder) { 
        		geocoder.getLatLng( from_address,  function(point) { 
            			if (!point) { 
					button_from_address.disabled = false;	
               		    alert('Uw invoer heeft geen geldig adres opgeleverd.');
					return;
            			} else { 	
					var point_str = point.toString();

					if(point_str.search("/^\\(\d+,\d+\\)$/")==-1) {
						point_str = point_str.substring(1, point_str.length-1);
					}

					objClassGmaps.gdir.load("from: " + point_str + " to: " + objToAddress.value, { "locale": objClassGmaps.options.locale });
				} 
		
		});
		gecoder = null;
	}


		button_from_address.disabled = false;	

	},


	get_directions_handle_errors: function(){

		switch(objClassGmaps.gdir.getStatus().code) {

			case G_GEO_UNKNOWN_ADDRESS:
				alert("Een corresponderende geografische lokatie kon worden gevonden voor het door u ingevulde adres. Het adres is of relatief nieuw of onjuist.");
				break;
			case G_GEO_SERVER_ERROR:
				alert("Uw verzoek kon niet worden verwerkt. De oorzaak hiervoor is onbekend.");
				break;
			case G_GEO_MISSING_QUERY:
				alert("De opdracht kon niet worden uitgevoerd. U heeft geen adres ingevuld.");	     
				break;
			case G_GEO_BAD_KEY:
	     			alert("De gegeven sleutel is ongeldig of komt niet overeen met het domein waarvoor het was gegeven.");
				break;
			case G_GEO_BAD_REQUEST:
				alert("Uw verzoek kon niet worden verwerkt.");
				break;
			default:
				alert("Er is een fout opgetreden. De oorzaak hiervoor is onbekend.");
		}
    	},


 	on_gdirections_load: function(){ 
	}

	
});


