function isFloat(x) {
	var y=parseFloat(x);
	if (isNaN(y)) return false;
	return x==y && x.toString()==y.toString();
}
function isInt(x) {
	var y=parseInt(x);
	if (isNaN(y)) return false;
	return x==y && x.toString()==y.toString();
}
function azimuth(deg,min,sec) {
	if (deg < 0) {
		azi= -1.0 * deg + 1.0 * min/60.0 + 1.0 * sec/3600.0;
		return round(-1.0 * azi, 6);
	}
	else {
		azi=1.0 * deg + 1.0 * min/60.0 + 1.0 * sec/3600.0;
		return round(azi, 6);
	}
}
function round(number,n) {
	return Math.round(number*Math.pow(10,n))/Math.pow(10,n);
}


var form1action = function(map){
	
	var longitude = $('#mapForm1 #longitude').val().replace(',','.');
	var latitude = $('#mapForm1 #latitude').val().replace(',','.');
	
	if((longitude.length == 0) || !isFloat(longitude) || (latitude.length == 0) || !isFloat(latitude)) {
		$('#mapForm1 div.form-error').html('Please enter the longitude and latitude.').slideDown('fast');
	}
	else {
		
		var point = new GLatLng(longitude, latitude);
		
		map.setCenter(point, 7);
		map.addOverlay(new GMarker(point));
		map.openInfoWindowHtml(point, '<p>Latitude: '+latitude+'<br />Longitude: '+longitude+'</p>');
	}
	
};

var form2action = function(map){
	
	var longitudeDegrees = parseInt($('#mapForm2 #longitude_degrees').val().replace(',','.'));
	var longitudeMinutes = parseFloat($('#mapForm2 #longitude_minutes').val().replace(',','.'));
	var longitudeSeconds = parseFloat($('#mapForm2 #longitude_seconds').val().replace(',','.'));
	var longitudeEW = $('#mapForm2 #east_west').val();
	var latitudeDegrees = parseInt($('#mapForm2 #latitude_degrees').val().replace(',','.'));
	var latitudeMinutes = parseFloat($('#mapForm2 #latitude_minutes').val().replace(',','.'));
	var latitudeSeconds = parseFloat($('#mapForm2 #latitude_seconds').val().replace(',','.'));
	var latitudeNS = $('#mapForm2 #north_south').val();
	
	
	if((longitudeDegrees.length == 0) || !isInt(longitudeDegrees)) {
		$('#mapForm2 div.form-error').html('Please enter the longitude.').slideDown('fast');
	}
	else if((latitudeDegrees.length == 0) || !isInt(latitudeDegrees)) {
		$('#mapForm2 div.form-error').html('Please enter the latitude.').slideDown('fast');
	}
	else {
		
		if(isNaN(longitudeDegrees)) longitudeDegrees = 0;
		if(isNaN(longitudeMinutes)) longitudeMinutes = 0;
		if(isNaN(longitudeSeconds)) longitudeSeconds = 0;
		if(isNaN(latitudeDegrees)) latitudeDegrees = 0;
		if(isNaN(latitudeMinutes)) latitudeMinutes = 0;
		if(isNaN(latitudeSeconds)) latitudeSeconds = 0;

		var longitude = azimuth(parseInt((longitudeEW == 'w' ? '-' : '+') + Math.abs(parseInt(longitudeDegrees))), parseFloat(longitudeMinutes), parseFloat(longitudeSeconds));
		var latitude = azimuth(parseInt((latitudeNS == 's' ? '-' : '+') + Math.abs(parseInt(latitudeDegrees))), parseFloat(latitudeMinutes), parseFloat(latitudeSeconds));
		var point = new GLatLng(latitude, longitude);
		
		var html = '<div style="height: 50px"><p>Latitude: '+parseInt(latitudeDegrees)+'&deg; '+parseFloat(latitudeMinutes)+'\' '+parseFloat(latitudeSeconds)+'"<br />';
		html += 'Longitude: '+parseInt(longitudeDegrees)+'&deg; '+parseFloat(longitudeMinutes)+'\' '+parseFloat(longitudeSeconds)+'"</p></div>';
		
		map.setCenter(point, 7);
		map.addOverlay(new GMarker(point));
		map.openInfoWindowHtml(point, html);
	}
	
};
 
var form3action = function(map, geocoder){
 	
	var street = $('#mapForm3 #street').val();
	var city = $('#mapForm3 #city').val();
	var country = $('#mapForm3 #country').val();

 	
 	if((city.length == 0) || (country.length == 0)) {
 		$('#mapForm3 div.form-error').html('Please enter an address.').slideDown('fast');
 	}
 	else {
 		
 		var address = (street.length > 0)?street:'';
 		address += city+', '+country;
 		
 		geocoder.getLatLng(
 		        address,
 		        function(point) {
 		          if (!point) {
 		        	 $('#mapForm3 div.form-error').html('The address can\'t be found.').slideDown('fast');
 		          } else {
 		        	
 		        	var html = '<p>Latitude: '+point.y+'<br />Longitude: '+point.x+'</p>';  
 		        	  
 		            map.setCenter(point, 7);
 		            var marker = new GMarker(point);
 		            map.addOverlay(marker);
 		            marker.openInfoWindowHtml(html);
 		          }
 		        }
 		      );
 		
 	}
 	
};



function showAddress(address) {
    if (geocoder) {
      geocoder.getLatLng(
        address,
        function(point) {
          if (!point) {
            alert(address + " not found");
          } else {
            map.setCenter(point, 13);
            var marker = new GMarker(point);
            map.addOverlay(marker);
            marker.openInfoWindowHtml(address);
          }
        }
      );
    }
  }



jQuery(function(){
    if (GBrowserIsCompatible()) {
        var map = new GMap2(document.getElementById("googlemaps"));
        map.setCenter(new GLatLng(0, 0), 1);
        map.addControl(new GLargeMapControl());
        
        var geocoder = new GClientGeocoder();

        // latitude - longitude
        $('#mapForm1').submit(function(evt){
        	evt.preventDefault();
        	
        	// remove current markers
        	map.clearOverlays();
        	
        	// remove existing errors
        	$('div.form-error').slideUp('fast');
        	
        	form1action(map);
        	
        });
        
        // latitude - longitude
        $('#mapForm2').submit(function(evt){
        	evt.preventDefault();
        	
        	// remove current markers
        	map.clearOverlays();
        	
        	// remove existing errors
        	$('div.form-error').slideUp('fast');
        	
        	form2action(map);
        	
        });
        
        // address
        $('#mapForm3').submit(function(evt){
        	evt.preventDefault();
        	
        	// remove current markers
        	map.clearOverlays();
        	
        	// remove existing errors
        	$('div.form-error').slideUp('fast');
        	
        	form3action(map, geocoder);
        	
        });
        
      }	
});

$(window).unload(function(){
	GUnload();
});