﻿var map = null;
var marker = null;
var geocoder = null;
var lock_move = true;
var lock_move2 = true;
var v = null;
var ll = "";
var ll_arr = new Array();
var zoom = parseInt(16);
var lo = "";
var la = "";
var shopAddr = "";
var memberAddr = "";

function showAddress1(address,title) {
    if (GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById("map_canvas"),{ size: new GSize(490,490) });
        map.addControl(new GLargeMapControl);
        geocoder = new GClientGeocoder();
    }

    if (geocoder) {
        geocoder.getLatLng(address,function(point) {
            if (point) {
                map.setCenter(point, 18);
                var marker = new GMarker(point);
                map.addOverlay(marker);
                marker.openInfoWindowHtml(title);
            }
        });
    }
}

function load(s_lo,s_la) {
    if (GBrowserIsCompatible()) {
	    map = new GMap2(document.getElementById("map"));
	    if(ll == "" || ll == null ){
		    setLoLa("("+s_lo+","+s_la+")");// 預設經緯度
	    }
	    map.addControl(new GLargeMapControl());   
	    map.addControl(new GMapTypeControl()); 
	    map.setCenter(new GLatLng(lo,la), zoom);
	    //map.addControl(new GLargeMapControl());
	    var icon = new GIcon();
	    icon.image = "../images/show.png";
	    //      icon.shadow = "images/show.png";
	    icon.iconSize = new GSize(30, 37);
	    icon.shadowSize = new GSize(32, 38);
	    icon.iconAnchor = new GPoint(14, 35);
	    icon.infoWindowAnchor = new GPoint(5, 1);
	    geocoder = new GClientGeocoder();

	    // Our info window content
	    v = map.getInfoWindow();
	    v.maxWidth = 200;
	    v.selectedTab = 0;
	    var infoTabs = [ new GInfoWindowTab("c", info)];
	    // Place a marker in the center of the map and open the info window
	    // automatically

	    marker = new GMarker(map.getCenter(),{icon: icon,draggable: false}); //,{draggable: true}可以讓圖案任意移動
	    GEvent.addListener(map, "moveend", function() {　　//當地圖移動時
		    if(lock_move == false && lock_move2 == false){
		      // marker.setPoint(map.getCenter());
		      // setLoLa(marker.getPoint());
		    }
		    else if(lock_move == false && lock_move2 == true){
			    lock_move2 = false;//開啟
		    }
		    else{
			    lock_move = false;//開啟
		    }
	    });

	    GEvent.addListener(map, "zoomend", function() {　　//當ZOOM時
	      zoom = map.getZoom();
	      map.panTo(marker.getPoint());
	      mapapi();
	    });

	    GEvent.addListener(marker, "click", function() { //  當點擊指標時秀出訊息
		    infoTabs = [ new GInfoWindowTab("c", info)];
		    marker.openInfoWindowTabsHtml(infoTabs,v);
		    lock_move = true; //關閉移動 以免位移
	    });

	    GEvent.addListener(marker, 'dragend', function() {　　//當移動座標時可讓地圖以做標為中心點
		    map.panTo(marker.getPoint());
		    setLoLa(marker.getPoint());
	    });
	    map.addOverlay(marker);
    }
}

function showAddress(address) {
    if (geocoder) {
        geocoder.getLatLng(address,function(point) {
	        if (!point) {
		        alert("未發現此地址!請確定地址中是否含有樓或之,若有此字請先刪除後再重新查詢!謝謝!");
		        document.getElementById('lo').value = '';
		        document.getElementById('la').value = '';
	        } else {
		        lock_move = true; //關閉移動 以免位移
		        lock_move2 = true; //會位移兩次 所以上第二個鎖
		        setLoLa(point);
		        map.setCenter(new GLatLng(lo,la), zoom);
		        marker.setPoint(point);
		        marker.openInfoWindowHtml(address,v);
	        }
        });
    }
}

function setLoLa(point){
    ll = point;
    ll = ll.toString();
    ll_len = ll.length;
    ll = ll.substr(1,ll_len - 2);
    ll_arr = ll.split(",");
    lo = parseFloat(ll_arr[0]);
    la = parseFloat(ll_arr[1]);
    mapapi();
}

function setParam(name, value, nonSync) {
    if (name == 'width' || name == 'height')
	    if( name == 'width' && (value == null || value == "" || value < "200")) 
		    value = 200;
    if( name == 'height' && (value == null || value == "" || value < "200")) 
	    value = 200;
    adjustSize(name, value);
}

function adjustSize(name, value) {
    var frame = document.getElementById("map");
    var size;
    if (name == 'width') {
	    frame.style.width = value;
    } else {
	    frame.style.height = value;
    }
    map.checkResize();

}

function strReplace(s, r, w){
    return s.split(r).join(w);
}

function mapapi(){
    var address = document.getElementById('address').value;	
    document.getElementById('lo').value = lo;
    document.getElementById('la').value = la;
}

function map_go(value){
    //var s1 = document.getElementById("m_start");
    //var e1 = document.getElementById("m_end");
    var print_map = document.getElementById("map2");
    memberAddr=value;
    if(shopAddr=='' || memberAddr==''){
        alert("資料不完整，無法查詢");
    } else {
        var map;
        var gdir;
        var geocoder = null;
        var addressMarker;
        var start_icon = null;
        initialize(memberAddr,shopAddr);
    }
}

function initialize(form,to) {
    if (GBrowserIsCompatible()) {
	    var gd=document.getElementById("directions");
	    gd.innerHTML="";
	    map = new GMap2(document.getElementById("map_canvas"));
	    gdir = new GDirections(map, gd);
	    GEvent.addListener(gdir, "error", LoadMapErrors);
	    map.enableContinuousZoom(true);
	    map.continuousZoomEnabled(true);
	    map.addControl(new GLargeMapControl());
	    setDirections(form, to);
	    window.setTimeout('onGDirectionsLoad();',1000);
    }
}

function GetXmlHttpObject()
{
    var xmlHttp=null;
    try
    {
	    // Firefox, Opera 8.0+, Safari
	    xmlHttp=new XMLHttpRequest();
    }
    catch (e)
    {
	    // Internet Explorer
	    try
	    {
		    xmlHttp=new ActiveXObject('Msxml2.XMLHTTP');
	    }
	    catch (e)
	    {
		    xmlHttp=new ActiveXObject('Microsoft.XMLHTTP');
	    }
    }
    return xmlHttp; 
} 


function setDirections(fromAddress, toAddress) { gdir.load("from: " + fromAddress + " to: " + toAddress);}

function LoadMapErrors(){
    var block=document.getElementById('divBlock');
   
    if (gdir.getStatus().code == G_GEO_UNKNOWN_ADDRESS)
	    alert("找不到此地址!!\r\n\r\n您可能沒有輸入路段\r\n路段請輸入中文；號碼請輸入數字\r\n例：台中市外送路三段32號");
    else if (gdir.getStatus().code == G_GEO_SERVER_ERROR)
	    alert("經緯度定位失敗 !");
    else if (gdir.getStatus().code == G_GEO_MISSING_QUERY)
	    alert("參數遺失 !");
    else if (gdir.getStatus().code == G_GEO_BAD_KEY)
	    alert("發生錯誤 !");
    else if (gdir.getStatus().code == G_GEO_BAD_REQUEST)
	    alert("資料傳遞錯誤 !");
    else 
	    alert("發生不知名錯誤 !");
	if(block) block.style.display='none';
}

function onGDirectionsLoad(){
    var obj1=document.getElementById('directions');
	if(document.getElementById('directions').innerHTML.toString()!=''){
		var obj=document.getElementById('directions').document.getElementsByTagName('div');
		var str=null;
		for(var i=0;i<obj.length;i++){
            if (obj[i].innerText.length==0) continue;
			for(var j=0;j<obj[i].innerText.length;j++){
				if( str == null && obj[i].innerText.substr(j,3) == '(大約'){
					str=obj[i].innerText;
					break;
				}else if(obj[i].innerText.substr(j,3) == '(大約' && obj[i].innerText.length < str.length){
					str=obj[i].innerText;
                    break;
                }
            }
        }
        if(type){
            if(type==1){
               document.getElementById('spanKm1').innerText=str;
            }else if (type==2){
                document.getElementById('spanKm2').innerText=str;
                document.getElementById('QueryResults').style.display='';
            }
        }
        var block=document.getElementById('divBlock');
        if(block)
            block.style.display='none';
	} else if(obj1.value=='') {
		window.setTimeout('onGDirectionsLoad()',5000);
	}
}
var type;
function map_go1(address,t){
    if(address==''){
        alert("請輸入地址!!");
    } else {
        var map;
        var gdir;
        var geocoder = null;
        var addressMarker;
        var start_icon = null;
        type=t;
        initialize($('#m_start').val(),address);
    }
}

function map_go2(address1,address2){
    var map;
    var gdir;
    var geocoder = null;
    var addressMarker;
    var start_icon = null;
    initialize(address1,address2);
}