var mapDIV = "content";
var myMap; 
var myLocation;
var myAddress;
var town;
var prov;



function loadScript() {

	toFullScreen();

	var script = document.createElement("script");
  	script.type = "text/javascript";
  	script.src = "http://maps.google.com/maps/api/js?sensor=true&language=it&callback=initialize";
  	document.body.appendChild(script);
}


function create_map() {
	var myOptions = {
   		zoom: 12, 
    	mapTypeControl: false,
    	mapTypeControlOptions: false,
    	navigationControl: false,
    	navigationControlOptions: false, 
    	mapTypeId: google.maps.MapTypeId.ROADMAP 
  	};
  
 	if (DetectAndroid()) {
		myOptions.navigationControl = true;
		myOptions.navigationControlOptions = {
    		style: google.maps.NavigationControlStyle.ANDROID,
			position: google.maps.ControlPosition.TOP
  		};
  	}
  
  	myMap = new google.maps.Map(document.getElementById(mapDIV), myOptions);
}

function create_click_handler() {
	google.maps.event.addListener(myMap, 'click', function(event) {
    	myLocation = event.latLng;
    	placeMarkerWithAddress(myLocation, getContentString());
	});
}

function initialize() {
  
  create_map();	 
	 
  var lat_node = document.getElementsByName('lat');
  var lon_node = document.getElementsByName('lon');
  if ( (lat_node.length > 0 ) && (lon_node.length > 0)){
	  
	myLocation = new google.maps.LatLng(lat_node[0].value,lon_node[0].value);
	myMap.setCenter(myLocation);
	placeMarkerWithAddress(myLocation, getContentString());
  
  }
  else geolocalize();
  
  create_click_handler();
}


function geolocalize() {
	
  // Try W3C Geolocation (Preferred)
  if(navigator.geolocation) {
    browserSupportFlag = true;
    
    navigator.geolocation.getCurrentPosition(
		function(position) {
        	myLocation = new google.maps.LatLng(position.coords.latitude,position.coords.longitude);
			myMap.setCenter(myLocation);
			placeMarkerWithAddress(myLocation, getContentString());   
        }, 
    	function() {
        	handleNoGeolocation(browserSupportFlag);
    	}
	);  
  // Browser doesn't support Geolocation
  } else {
    browserSupportFlag = false;
    handleNoGeolocation(browserSupportFlag);
  }
	
	
}


  
function handleNoGeolocation(errorFlag) {
    if (errorFlag == true) {
      alert("Geolocation service failed.");
      myLocation = newyork;
    } 
	else {
      alert("Your browser doesn't support geolocation.");
      //myLocation = siberia;
    }
    //myMap.setCenter(myLocation);
}
  
  
function placeMarkerWithAddress(location, contentString) {
        
    if (location){
    
        var geocoder = new google.maps.Geocoder();

        if (geocoder) {
      
            geocoder.geocode({'latLng': location}, function(results, status) {

            if (status == google.maps.GeocoderStatus.OK) {
                myAddress = results;
                myLocation = location;
                
				for (current in myAddress[0].address_components) {
                    
                	if (myAddress[0].address_components[current].types != undefined) {
                            
                            for (i in myAddress[0].address_components[current].types) {
                            
                
                                if (myAddress[0].address_components[current].types[i] == "locality"){
                                    town = myAddress[0].address_components[current].short_name;
                                    break;
                                }
                            
                                if (myAddress[0].address_components[current].types[i] == "administrative_area_level_2") {
                                    prov = myAddress[0].address_components[current].short_name;
                                    break;
                                }
                                
                            
                            }
                            
                        
                        
                        }  
                    }                   
                
                placeMarker();
                updateLocation();

            }
    
        }
		
		
		);
   
    }
    
  }

}
  

function placeMarker() {
            
    var infowindow = new google.maps.InfoWindow({
		maxWidth: 200,
		content: getContentString()
    });

    var clickedLocation = new google.maps.LatLng(myLocation);
    var marker = new google.maps.Marker({
      position: myLocation, 
      map: myMap
    });

    myMap.setCenter(myLocation);
    infowindow.open(myMap,marker);
    google.maps.event.addListener(marker, 'click', function() {
        infowindow.open(myMap,marker);
    });


}  

function showDIVSegnalazione() {	
	window.location = "segnalazione.php";
	if(window.sessionStorage)
		window.sessionStorage.clear();
}

function getContentString() {

    var segnala_handler = 'showDIVSegnalazione();';
    var contentString;

    if (myAddress) {
        contentString = '<a href="javascript:void(0)" onclick='+segnala_handler+'><b>Segnala</b></a>'+' un&apos;evasione in '+myAddress[0].formatted_address; 
    
    
    }
    else {
        contentString = '<a href="javascript:void(0)" onclick='+segnala_handler    +'>Segnala</a>'+' un&apos;evasione!'; 
    }


    return contentString;

}


function toFullScreen() {
	var mapdiv = document.getElementById(mapDIV);
	mapdiv.style.height = document.getElementsByTagName('body').item(0).clientHeight+"px";
}



window.onload = loadScript;



var deviceAndroid = "android";

//********************************************************************
// Detects if the current device is an Android OS-based device.
function DetectAndroid()
{
   if (navigator.userAgent.toLowerCase().search(deviceAndroid) > -1)
      return true;
   else
      return false;
}

/**********************************************************************************
					Functions for sending AJAX location updates.
************************************************************************************/

function getXHR()
{
	if(window.XMLHttpRequest) {
		req = new XMLHttpRequest();
		return true;
	}
	else try {
		req = new ActiveXObject('Msxml2.XMLHTTP');
		return true;
	} catch(e) {
		try {
			req = new ActiveXObject("Microsoft.XMLHTTP");
			return true;
		} catch(e) {
			req = false;
			return false;
		}
	}
}


function updateLocation()
{
	if(getXHR())
	{
		req.open('POST', "set_location.php", true);
		req.onreadystatechange = function()
		{
			if(req.readyState == 4) {
				
				if(req.status==200) {

				}
				else {
				
				}
			} 
			else {
				// loading
			}
		}
		
		var params = 'lat='+myLocation.lat()+'&lon='+myLocation.lng()+'&prov='+prov+'&town='+town;
		req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		req.send(params);
	}
	else return true;
	return false;
}
