/**
 * @author Naveed Ul Islam
 */
var map;
var geocoder;
var myPointer; //Global Pointer
var zoomLevel = 8;
var polyOptions = {
	geodesic: true
};

function loadMap(){
    myPointer = new google.maps.LatLng(latitude, longitude);
    map = new google.maps.Map(document.getElementById("map_canvas"));
    geocoder = new GClientGeocoder();
    
    map.addControl(new GSmallMapControl());
    map.addControl(new GMapTypeControl());
    
    myMarker();
}

function loadGoogleScript(){
    document.getElementById("location").style.visibility = "";
    
    var srcStr = "http://maps.google.com/maps?";
    srcStr += "file=api&";
    srcStr += "v=3&"; //Does not really work. I think it is using v2 under the hood.
    srcStr += "key=ABQIAAAA6VoQDIffRpPmiPB15Lsa0BSB03iwC6V5gYdKTBQF9tPJSHz9TxRIRuEIHhXFjot23eSH9tAxR2s-RA&"; //Key
    srcStr += "async=2&";
    srcStr += "sensor=false&";
    srcStr += "callback=loadMap";
    
    var script = document.createElement("script");
    script.type = "text/javascript";
    script.src = srcStr;
    document.body.appendChild(script);
}

function showAddressOnMap(address){
    if (geocoder) {
        geocoder.getLatLng(address, function(point){
            if (!point) {
                alert(address + " not found");
            }
            else {
                myPointer = point;
                geocoder.getLocations(myPointer, showAddress);
            }
        });
    }
}

function showAddress(response){
    if (!response || response.Status.code != 200) {
        //alert("Status Code:" + response.Status.code); //Error handling has to be defined later...
    }
    else {
        var place = response.Placemark[0];
        
        try {
            city = place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.LocalityName;
        } 
        catch (err) {
            city = "--";
        }
        try {
            region = place.AddressDetails.Country.AdministrativeArea.AdministrativeAreaName;
        } 
        catch (err) {
            region = "--";
        }
        try {
            country = place.AddressDetails.Country.CountryName;
        } 
        catch (err) {
            country = "--";
        }
        try {
            address = place.address;
        } 
        catch (err) {
            address = "--";
        }
    }
    latitude = myPointer.lat().toFixed(5);
    longitude = myPointer.lng().toFixed(5);
    wsGetDST(latitude, longitude, "wsGetDSTCallBack");	
    myMarker();
}

function myMarker(){
    map.setCenter(myPointer, zoomLevel);
    
    var marker = new GMarker(myPointer, {
        draggable: true
    });
    map.clearOverlays();
    map.addOverlay(marker);

    var polyline = new GPolyline([myPointer, new GLatLng(21.42251, 39.82619)], "#3333cc", 5, 1, polyOptions); //Direction to Qa'ba
    map.addOverlay(polyline);
    
    GEvent.addListener(marker, "dragend", function(){
        myPointer = marker.getPoint();
        map.panTo(myPointer);
        zoomLevel = map.getZoom();
        geocoder.getLocations(myPointer, showAddress);
    });
}

