// PhotoCity Map Dynamics

var flagManager;
var modelManager;
var flagList = [];
var imageList = [];
var modelList = [];
var flagsShown = 1;
var modelsShown = 1;

var map;

document.observe("dom:unloaded", GUnload);

// starts all the initialization of the page
document.observe("dom:loaded", function () {
	map_init();
        
	// toggle the "change location" select box (start with it hidden)
	$("change_map_location").toggle();
	$("change_button").observe("click", function() {
		$("change_map_location").toggle();
	});
	
	// change the page when a new location is chosen	
	$$("#change_map_location select")[0].observe("change", function(event) {
		//alert("changing location to: " + this.value);
		window.location = "map.php?viewZone=" + this.value;
	});        
});

/* icon toggle controls */
function IconToggleControl(){
}

IconToggleControl.prototype = new GControl();
    
IconToggleControl.prototype.initialize = function(map){
	var container = document.createElement("div");
	var flagButton = document.createElement("div");
	this.setButtonStyle_(flagButton);
	container.appendChild(flagButton);
	var flag_img = document.createElement("img");
	flag_img.src = "flags/22/flag_red.png";
	flagButton.appendChild(flag_img);
	GEvent.addDomListener(flagButton,"click", function() { showFlags(); } );

	var modelButton = document.createElement("div");
	this.setButtonStyle_(modelButton);
	container.appendChild(modelButton);
	var image_img = document.createElement("img");
	image_img.src = "/images/model-toggle.png";
	modelButton.appendChild(image_img);
	GEvent.addDomListener(modelButton,"click", function() { showModels(); } );
	
	map.getContainer().appendChild(container);
	return container;
}

IconToggleControl.prototype.getDefaultPosition = function() {
	return new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(10, 30));
}

    IconToggleControl.prototype.setButtonStyle_ = function(button) {
      button.style.color = "#000000";
      button.style.backgroundColor = "white";
      button.style.font = "small Arial";
      button.style.border = "1px solid black";
      button.style.padding = "2px";
      button.style.marginBottom = "3px";
      button.style.textAlign = "center";
      button.style.width = "28px";
      button.style.cursor = "pointer";
    }

    
    function map_init(){
        if (true && GBrowserIsCompatible()) {   
            map = new GMap2(document.getElementById("map_canvas"));
            map.setMapType(G_SATELLITE_MAP);
            map.addControl(new GLargeMapControl3D(), new GControlPosition(G_ANCHOR_TOP_LEFT,new GSize(8,8)));
            map.addControl(new GMapTypeControl());
            map.addControl(new IconToggleControl());

            centerMap(); 
            
            flagManager = new MarkerManager(map);
            modelManager = new MarkerManager(map);
            addFlags();
            addModels();
        }
    }

    function centerMap(){
        map.setCenter(new GLatLng(zone['latitude'], zone['longitude']) );
        map.setZoom(zone['zoom']-1);
    }

    function addImages(){
        var all = images;
        for (i in all){
            var image = all[i];
            newImage(image);
        }
    }

    function newImage(i){
       var icon = new GIcon();
       icon.image = "showimage.php?id=" + i['image_id'] + "&s=vs";
       icon.iconSize = new GSize(25,20);
       icon.iconAnchor = new GPoint(12,10);

        var imageIcon = new GMarker(new GLatLng(i['lat'], i['lng']), {icon:icon});
        map.addOverlay(imageIcon);
        imageList.push(imageIcon);
        var url = "info_image.php?image_id=" + i['image_id'];
        GEvent.addListener(imageIcon, "click", function() {document.getElementById("info_iframe").src=url;});
    }

    function showFlagPhotos(f){
        var flag_id = f['flag_id'];
        new Ajax.Request(
            "get_images_for_flag_ajax.php?flag_id=" + flag_id + "&json=true&limit=3", 
            {
                onSuccess: function(transport){
                    var imgs = eval(transport.responseText);
                    clearImages();
                    newImage(imgs[0]);
                    newImage(imgs[1]);
                    newImage(imgs[2]);
                    /*
                    if (imgs.length > 0){
                        map.setZoom(18);
                        map.panTo( new GLatLng( imgs[0]['lat'], imgs[0]['lng'] ) );
                    }
                    */
                }
            }
        );
    }

    function addFlags(){
        for (fl in all_flags){
            var f = all_flags[fl];
            newFlag(f);
        }
        flagManager.addMarkers(flagList,10);
        flagManager.refresh();
    }

    function newFlag(f){
        if (f['disputed'] === undefined)
            return;

        if (f['collectable'] == 0){
            var disp = f['disputed'];
            var winner = f['winning_team_id'];
            var icon = flag_icons[winner][disp];
            var flag_url = "info_flag.php?id=" + f['flag_id'];
        }
        else{
            if (f['collector'] == 0){
                var icon = gemIcon; 
            }
            else{
                var icon = gemIcon2; 
            }
            var flag_url = "info_gem.php?id=" + f['flag_id'];
        }
        var latlng = new GLatLng(f['latitude'], f['longitude']);
        var flagMarker = new GMarker(latlng, {"icon": icon});
            
 
        flagList.push(flagMarker);
        GEvent.addListener(flagMarker, "click", function() {document.getElementById("info_iframe").src=flag_url;});
        //GEvent.addListener(flagIcon, "click", function() {showFlagPhotos(f);});
    }

    function addModels(){
        for (mo in all_models){
            var m = all_models[mo];
            newModel(m);
            newGroundOverlay(m);
        }
        modelManager.addMarkers(modelList,5);
        modelManager.refresh();
    }

    function newModel(m){
        if (m['lat'] === undefined)
            return;
        var owner = 0;
        var username = "Uncaptured!";
        if (m['owner'] != undefined){
            owner = m['owner']['team_id'];
            username = m['owner']['username'];
        }
        var latlng = new GLatLng(m['lat'], m['lng']);
        opts = {
             "icon": houseIcon[owner],
             "clickable": true,
             "labelText": username,
             "labelOffset": new GSize(-20,-5)
        };
        var modelMarker = new LabeledMarker(latlng, opts);
        modelList.push(modelMarker)
        var model_url = "info_model.php?id=" + m['model_id'];
        GEvent.addListener(modelMarker, "click", function() {document.getElementById("info_iframe").src=model_url;});
    }

    function showPlayerPhotos(pid){
        document.getElementById("info_iframe").src="info_player.php?player_id=" + pid;
    }

    function loadInfoUrl(url){
        document.getElementById("info_iframe").src=url;
    }

    function newGroundOverlay(m){
        var n = m['north'];
        var s = m['south'];
        var w = m['west'];
        var e = m['east'];
        var path = m['overlay'];
        var bounds = new GLatLngBounds(new GLatLng(s,w), new GLatLng(n,e));
        var overlay = new GGroundOverlay(path, bounds);
        map.addOverlay(overlay);
    }

    function showFlags(){
        if (flagsShown){
            flagsShown = 0;
            flagManager.hide();
        }
        else{
            flagsShown = 1;
            flagManager.show();
        }
    }

    function showModels(){
        if (modelsShown){
            modelsShown = 0;
            modelManager.hide();
        }
        else{
            modelsShown = 1;
            modelManager.show();
        }
    }


