/**
 * @author jmoe
 */
// <![CDATA[
var application = null;

function MyApplication(trailhead,editing){
	
    var trailheadIcon = new GIcon();
    trailheadIcon.image = "/media/images/map/trailhead_map_icon.png";
    trailheadIcon.shadow = "/media/images/map/map_icon_shadow.png";
    trailheadIcon.iconSize = new GSize(34, 36);
    trailheadIcon.shadowSize = new GSize(38, 36);
    trailheadIcon.iconAnchor = new GPoint(14, 30);
    trailheadIcon.infoWindowAnchor = new GPoint(14, 10);


    var campgroundIcon = new GIcon();
    campgroundIcon.image = "/media/images/map/campground_map_icon.png";
    campgroundIcon.shadow = "/media/images/map/map_icon_shadow.png";
    campgroundIcon.iconSize = new GSize(34, 36);
    campgroundIcon.shadowSize = new GSize(38, 36);
    campgroundIcon.iconAnchor = new GPoint(14, 30);
    campgroundIcon.infoWindowAnchor = new GPoint(14, 10);
	
	if(trailhead)
	{
		icon = trailheadIcon;
	}
	else
	{
		icon = campgroundIcon;
	}
	
	if (editing) {
		trailheadMarkerOptions = {
			icon: icon,
			draggable: true,
			clickable: true
		};
	}
	else {
		trailheadMarkerOptions = {
			icon: icon,
			draggable: true,
			clickable: false
		}
	};
    
    var start = new GLatLng(37.887771, -122.256452);
    this.startmarker = new GMarker(start, trailheadMarkerOptions);
    
    this.map = new GMap2($('drawMap'));
    this.map.setCenter(start, 17);
    //this.map.setCenter(startLatLng, 16);
    this.map.addControl(new GLargeMapControl3D());
    this.map.addControl(new GMapTypeControl());
    var scaleControlPosition = new GControlPosition(G_ANCHOR_BOTTOM_LEFT, new GSize(10, 40));
    this.map.addControl(new GScaleControl(), scaleControlPosition);
    //this.map.enableScrollWheelZoom();
    this.map.enableContinuousZoom();
    this.map.enableGoogleBar();
	var copyOSM = new GCopyrightCollection("<a href=\"http://www.openstreetmap.org/\">OpenStreetMap</a>");
    copyOSM.addCopyright(new GCopyright(1, new GLatLngBounds(new GLatLng(-90,-180), new GLatLng(90,180)), 0, " "));
    var tilesMapnik     = new GTileLayer(copyOSM, 1, 17, {tileUrlTemplate: 'http://tile.openstreetmap.org/{Z}/{X}/{Y}.png'});
    var mapMapnik     = new GMapType([tilesMapnik],     G_NORMAL_MAP.getProjection(), "OSM");
	this.map.addMapType(mapMapnik);
	
    this.map.addMapType(G_PHYSICAL_MAP);
    this.map.addMapType(G_SATELLITE_3D_MAP);
	this.map.setMapType(G_NORMAL_MAP);
    this.map.addOverlay(this.startmarker);
    this.map.disableDoubleClickZoom();
    GEvent.bind(this.startmarker, "dragend", this, this.moveStart);
    GEvent.bind(this.map, "dblclick", this, this.moveStart);
}

function saveMap(){
    saveKeyValueToSession('map.center', this.map.getCenter().toUrlValue());
    saveKeyValueToSession('map.zoom', this.map.getZoom());
}

MyApplication.prototype.moveStart = function(overlay, latlng){
    if (overlay) {
        this.updateLatLngDisplay(this.startmarker.getLatLng());
    }
    if (latlng) {
        this.startmarker.setLatLng(latlng);
        this.updateLatLngDisplay(latlng);
        
    }
}

MyApplication.prototype.updateLatLngDisplay = function(latlng){
    var latLngString = latlng.toUrlValue();
    
    $('id_latitude').value = latlng.lat();
    $('id_longitude').value = latlng.lng();
}

MyApplication.prototype.loadTrailhead = function(id){
    url = "/json/Trailhead/" + id;
    GDownloadUrl(url, function(data){
        var object = data.evalJSON();
        var startLatLng = new GLatLng(parseFloat(object.latitude), parseFloat(object.longitude));
        application.map.setCenter(startLatLng, 13);
        application.startmarker.setLatLng(startLatLng);
		application.map.panTo(application.startmarker.getLatLng());
        application.updateLatLngDisplay(startLatLng);
    });
}

MyApplication.prototype.loadCampground = function(id){
    url = "/json/Campground/" + id;
    GDownloadUrl(url, function(data){
        var object = data.evalJSON();
        var startLatLng = new GLatLng(parseFloat(object.latitude), parseFloat(object.longitude));
        application.map.setCenter(startLatLng, 13);
        application.startmarker.setLatLng(startLatLng);
		application.map.panTo(application.startmarker.getLatLng());
        application.updateLatLngDisplay(startLatLng);
    });
}

function initTrailheadDetails(id,editing)
{
    if (GBrowserIsCompatible()) {
		application = new MyApplication(true,editing);	
		application.loadTrailhead(id);
		if(!editing)
		{
			application.startmarker.disableDragging();
		}
	}	
}

function initCampgroundDetails(id,editing)
{
    if (GBrowserIsCompatible()) {
		application = new MyApplication(false,editing);		
		application.loadCampground(id);
		if(!editing)
		{
			application.startmarker.disableDragging();
		}
		
	}	
}

// Initialize google maps and the rounded corners
function initEditing(trailhead,editing){
    if (GBrowserIsCompatible()) {
        application = new MyApplication(trailhead,editing);
		application.startmarker.enableDragging();        
        if (editing) {
            application.startmarker.setLatLng(new GLatLng(parseFloat($('id_latitude').value), parseFloat($('id_longitude').value)));
			application.map.panTo(application.startmarker.getLatLng());
        }
        else {        
            centerUrl = '/session/loadkv/map.center';
            GDownloadUrl(centerUrl, function(data){
                if (data != "NOT_FOUND") {
                    latlngarray = data.split(",");
                    lat = parseFloat(latlngarray[0]);
                    lng = parseFloat(latlngarray[1]);
                    var newCenter = new GLatLng(lat, lng);
					application.startmarker.setLatLng(newCenter);
					application.map.setCenter(application.startmarker.getLatLng());
                }
                else {
                    chooseStart();
                }
            });
            zoomUrl = '/session/loadkv/map.zoom';
            GDownloadUrl(zoomUrl, function(data){
                if (data != "NOT_FOUND") {
                    newZoom = parseInt(data, 10);
                    //alert(newZoom);
                    application.map.setZoom(newZoom);
                }
            });
        }                
        
    }
}

function chooseStart(){
    application.chooseStart();
}

MyApplication.prototype.chooseStart = function(){   
    var start = new GLatLng(37.887771, -122.256452);
    if (google.loader.ClientLocation != null) {
        start = new GLatLng(google.loader.ClientLocation.latitude, google.loader.ClientLocation.longitude);
    }
    this.startmarker.setLatLng(start);
    this.map.panTo(start);
    this.updateLatLngDisplay(start);
}

// ]]>
