﻿var act_page = "/camera/scene_act.ashx";
    
    var scenes;
	var sceneDic;
	var sceneLIDic;
    var resources;
	var curSceneId=-1;
    
    var map;
    var map_isShowResource = false;
    var map_isShowAllScene = false;
    
    var dicSceneMarker;
	
    function init()
    {
        var chkIsShowResource = document.getElementById("chkIsShowResource");
        map_isShowResource = chkIsShowResource.checked;
        var chkIsSceneAll = document.getElementById("chkIsSceneAll");
        map_isShowAllScene = chkIsSceneAll.checked;
        
        map_init();
        
        ddlType_onchange();
    }
    

    function ddlType_onchange()
    {
        var ddlType = document.getElementById("ddlType");
        var type = ddlType.options[ddlType.selectedIndex].value;
        
        getScenesByType(type);
    }
    

    function getScenesByType(type)
    {
        var lbScenes = document.getElementById("scene_list");
        lbScenes.innerHTML = "loading...";
        
        var dataString = 'act=GET_SCENES_BY_TYPE&id=' + type;
        $.ajax({
            type: "POST",
            url: act_page,
            data: dataString,
            dataType: "json",
            success: getScenes_onLoad
            });
    }
    
    
    function getScenes_onLoad(data)
    {
		curSceneId=-1;
        scenes = new Array();
		sceneDic=new Object();
		dicSceneMarker=null;
        for(var i=0; i<data.length; i++)
        {
            scenes[i] = data[i];
			sceneDic[scenes[i].id]=scenes[i];
        }
        
        if(scenes.length>0) {
			lbScenes_dataBind();
			
			
			//第一次進來，視需要，直接顯示request來的scene id
			var hidDefaultSceneId = document.getElementById("hidDefaultSceneId");
			if(hidDefaultSceneId.value!="")
    			showScene(hidDefaultSceneId.value);
    		else
    		    showScene(scenes[0].id);
			
		}else{
		    clearSceneList();
			showScene(-1);
		}
        map_redraw();
    }
    
    // 
    function lbScenes_dataBind()
    {
        var lbScenes = document.getElementById("scene_list");
		var t=new TagObj();		
		
        for(var i=0; i<scenes.length; i++)
        {
			t.beginTag("li", "id", "sl_"+scenes[i].id );
			t.beginTag("a", "href", "javascript: showScene('"+scenes[i].id+"')");
			t.writeString(scenes[i].name);
			t.closeTag("li");
        }
        lbScenes.innerHTML=t.getTagString();
		var col=lbScenes.childNodes;
		sceneLIDic=new Object();
		for(var i=0;i<col.length;i++){
			sceneLIDic[scenes[i].id]=col[i];
		}
    }
    function clearSceneList(){
        var lbScenes = document.getElementById("scene_list");
        lbScenes.innerHTML="";
        sceneLIDic=null;
    }
    

    function getScene(id)
    {
        return sceneDic[id];
    }
    
    function showScene(id){
		if(id>0){
			curSceneId=id;
		    var scene=getScene(id);
		    showDescription(scene);
		    hilitList(id);
		    showPhotos(scene);
		    map_selectScene(id);
		}else{
		    clearDescription();
		    clearPhotos();
		    hilitList_clear();
			curSceneId=-1;
		    //map_selectScene(-1);
		}
		
	}
	function showPhotos(scene){
		if(document.getElementById("ext"))
		{
		    document.getElementById("ext").ppp(scene); //上面的方法在IE會找不到物件
		}
		
	}
	function clearPhotos(){
	    MM_findObj("scene_photo").src="/camera/imgs/spacer_400_280.gif";
	}
	
	function hilitList(id){
		var v=MM_findObj("scene_list").childNodes;
		var idStr="sl_"+id;
		for(var i=0;i<v.length;i++){
			var tid=v[i].id;			
			if(tid==idStr){
				v[i].className="hilit";
			}else{
				v[i].className="";
			}
		}
	}
	function hilitList_clear(){
	    hilitList(-1);
	}
	
	function showDescription(scene){
		var title=MM_findObj("scene_title");
		title.innerHTML=scene.name;
		var sd=MM_findObj("scene_descr");
		var t=new TagObj();
		t.beginTag("p", "class", "address");
		t.writeString(scene.address);
		t.closeTag("p");
		t.beginTag("p");
		t.writeString(scene.description);
		t.closeTag("p");
		sd.innerHTML=t.getTagString();
	}
	function clearDescription(){
		var sd=MM_findObj("scene_descr");
		sd.innerHTML="";
	}

// event handler

    function chkIsShowResource_onclick()
    {
        var chkIsShowResource = document.getElementById("chkIsShowResource");
        map_isShowResource = chkIsShowResource.checked;
        var chkIsSceneAll = document.getElementById("chkIsSceneAll");
        chkIsSceneAll.checked = map_isShowAllScene = ((!map_isShowResource) && map_isShowAllScene);
        
        if(map_isShowAllScene) map_loadResources();
		else map_redraw();
    }
    function chkIsSceneAll_onclick(){
		var chkIsSceneAll = document.getElementById("chkIsSceneAll");
		map_isShowAllScene = chkIsSceneAll.checked;
		var chkIsShowResource = document.getElementById("chkIsShowResource");
		chkIsShowResource.checked = map_isShowResource = ( (! map_isShowAllScene) && map_isShowResource);
       //顯示所有場景，要放大範圍
	   	if(map_isShowAllScene) map.setZoom(10);
		map_redraw();
	}
	
	// 
    function map_init()
    {
        map = new GMap2(document.getElementById("map_canvas"));
        
        map.setCenter(new GLatLng(25.012085, 121.465701), 16);
        
        map.addControl(new GLargeMapControl());
        
        GEvent.addListener(map, "dragend", map_DragEnd);
        GEvent.addListener(map, "zoomend", map_ZoomEnd);
        
       //map_loadResources();
    }
    
    function map_DragEnd()
    {
        map_loadResources();
    }

    function map_ZoomEnd(oldLevel, newLevel)
    {
        map_loadResources();
    }
    
    function map_redraw()
    {
        map.clearOverlays();
        
        map_redrawScenes();
        
        if(map_isShowResource)
        {
            map_redrawResources();
        }
		
    }
    function getSIcon(){
		var icon = new GIcon(G_DEFAULT_ICON);
        icon.image = "http://www.google.com/mapfiles/markerS.png";
		return icon;
	}
    function map_redrawScenes()
    {
        if(scenes==null)return;
        
        dicSceneMarker = {};
		//alert(map_isShowAllScene);
		if(map_isShowAllScene) {
			_drawAllScenes( getSIcon() );
		}else{
			_drawSingleScene( getScene(curSceneId), getSIcon() );
		}        
    }
	function _drawAllScenes(icon){
		for(var i=0; i<scenes.length; i++)
        {
            _drawSingleScene(scenes[i], icon);
        }
	}
	function _drawSingleScene(scene, icon){
	
		var marker_scene = new GMarker(new GLatLng(scene.lat, scene.lng), {draggable: false, icon: icon});
		map.addOverlay(marker_scene);
		
		GEvent.addListener(marker_scene, "click", delegate({thisObj: this, sceneId: scene.id}, function(){
			this.thisObj.showScene(this.sceneId);
		}));
		
		dicSceneMarker[scene.id] = marker_scene;		
	}
    
    function map_redrawResources()
    {
        if(resources==null)return;
    
        var icon = new GIcon(G_DEFAULT_ICON);
        icon.image = "http://www.google.com/mapfiles/markerR.png";
        for(var i=0; i<resources.length; i++)
        {
            var marker_res = new GMarker(new GLatLng(resources[i].lat, resources[i].lng), {icon: icon});
            map.addOverlay(marker_res);
			resources[i].marker=marker_res;
			
            var scope = {scope: this, resource: resources[i]};
            GEvent.addListener(marker_res, "click", delegate(scope, function(){
				this.scope.map_selectResource(this.resource);                
            }));
        }
    }
    function map_selectResource(resource){
		var html = resource.name + "<br>";
		if(resource.tel) html += resource.tel + "<br>";
    	html += resource.address + "<br>";
    
    	resource.marker.openInfoWindowHtml(html);
	}
	
    function map_selectScene(sceneId)
    {
        if(dicSceneMarker==null || ! map_isShowAllScene) map_redraw();
		
		map_selectedScene = sceneId;        
        
        var scene = getScene(sceneId);
        //alert(scene);
        if(scene!=null){
            map.panTo(new GLatLng(scene.lat, scene.lng));
			var html = "";
            html +=  scene.name + "<br />";
            html +=  scene.address + "<br />";
            dicSceneMarker[sceneId].openInfoWindowHtml(html);
            
            //imgList_showPhotos(scene.photos);
        }
        else
        {
            lbScenes.selectedIndex = -1;
            //imgList_showPhotos([]);
        }
		
		if(map_isShowResource) map_loadResources();
    }
    

    function map_loadResources()
    {
		if(!map_isShowResource) return ;
        var bounds = this.map.getBounds();
        var sw = bounds.getSouthWest();
        var ne = bounds.getNorthEast();

        var latMin = Math.min(sw.lat(), ne.lat());
        var latMax = Math.max(sw.lat(), ne.lat());
        var lngMin = Math.min(sw.lng(), ne.lng());
        var lngMax = Math.max(sw.lng(), ne.lng());

        var dataString = 'act=GET_RESOURCES_BY_LATLNG&latMin=' + latMin + '&latMax=' + latMax + '&lngMin=' + lngMin + '&lngMax=' + lngMax;
        $.ajax({
            type: "POST",
            url: act_page,
            data: dataString,
            dataType: "json",
            success: map_getResourcesByLatLng_onLoad
            });
    }
    

    function map_getResourcesByLatLng_onLoad(data)
    {
        resources = new Array();
        for(var i=0; i<data.length; i++)
        {
            resources[i] = data[i];
        }
        
        map_redrawResources();
    }
    
	// put in flex
	function showFlex(divId, flexUrl){
		var so = new SWFObject(flexUrl, "ext", "400px", "374px", "9", "#c9caca");
		so.addParam("allowScriptAccess","sameDomain");
		so.write(divId);
	}