﻿//導航起點與終點ICON管理
function NaviIconManager()
{
    this.StartIconID = '';
    this.EndIconID = '';
    this.ClmIconID = '';
    this.StoreID = '';
    this.StartIcon = new GWMapIcon('SYS/TPC/IMAGES/GPS_START.png',40,40,20,38);
    this.EndIcon = new GWMapIcon('SYS/TPC/IMAGES/GPS_END.png',40,40,20,38);
    this.ShadowIcon = new GWMapIcon('SYS/TPC/IMAGES/BLANK.png',1,1,1,1);
    this.ClmIcon = new GWMapIcon('SYS/TPC/IMAGES/CLM.png',40,40,20,38);
    this.TempIconX = 121.60737979633106;
    this.TempIconY = 23.982690134301954;
    this.StartIconX = 0;
    this.StartIconY = 0;
    this.EndIconX = 0;
    this.EndIconY = 0;
    this.GPSIcon =  new GWMapIcon('SYS/TPC/IMAGES/GPSPosition.png',40,40,20,38);
    this.GPSIconID ='';
    this.GPSTime ='';
    this.GPSShow = true;
    this.GPSState ='Navi';
    this.GPSX = 0;
    this.GPSY = 0;
    this.GPSTracking = false;
    this.ClmIconX = 0;
    this.ClmIconY = 0;
    //
    this.MapCenterID = '';
    this.MapCenterIcon = new GWMapIcon("SYS/TPC/IMAGES/LIST_CENTER.png", 40, 40, 20, 38);
    //LIST_CENTER
    this.MapCenterX = 0;
    this.MapCenterY = 0;
} 

//最短路徑規劃
function ShortestPathPlan(ParamString)
{
    if(NIManager.EndIconX ==0 || NIManager.EndIconY ==0)
    {
        AjaxLabel.style.display = "none";
        alert("請先設置路徑規劃的終點!");
        return;
    }
    if(ParamString == "ByUser")
    {
        if (NIManager.StartIconX == 0 || NIManager.StartIconY ==0)
        {
            AjaxLabel.style.display = "none";
            alert("請先設置路徑規劃的起點!");
            return;
        }
        var StartPoint = WGSto67(NIManager.StartIconX, NIManager.StartIconY);
        var EndPoint = WGSto67(NIManager.EndIconX, NIManager.EndIconY);
        var SendString = StartPoint + "," + EndPoint;
        GeoWebShortestPathWS.GetShortestPathByGMethod(SendString,ShortestPathSuccess,OnError,null,null);
    }else{

        myMap.GetGPS(GetGPS4Navi);
    }

}
function GetGPS4Navi(obj)
{
    if(obj.success)
    {
        NIManager.GPSX = obj.position.x;
        NIManager.GPSY = obj.position.y;
        GPSLabel.innerHTML = "( " + obj.position.x + " , " + obj.position.y + " )";
        var StartPoint = WGSto67(obj.position.x, obj.position.y);
        var EndPoint = WGSto67(NIManager.EndIconX, NIManager.EndIconY);
        var SendString = StartPoint + "," + EndPoint;
        GeoWebShortestPathWS.GetShortestPathByGMethod(SendString,ShortestPathSuccess,OnError,null,null);
    }else{
        alert("無法取得GPS位置!");
    }
}


//最短路徑WS , Success
function ShortestPathSuccess(ResTemp)
{
    AjaxLabel.style.display = "none";
    
    var ResObj =eval("("+ResTemp+")");
    var ResString = ResObj.ShortestPath;
    
    if(ResString=="false")
    {
        alert("無法完成路徑規劃，\n請重新選取起點及終點位置!");
        return;
    }

    myMap.RemovePolyLine(ShortestPathId);
    // 繪出最短路徑線段
    var ResArray = ResString.split(",");
    var j = (ResArray.length/2);
    var b = new Array();
    for (var i=0; i<j;i++)
    {
        //型別轉換
        var xy = Transform67XY(parseFloat(ResArray[i*2]), parseFloat(ResArray[i*2+1]));
        var c = [xy[0],xy[1]];
        b.push(c);
    }
    //NaviPath = new GWPolyLine(new GWPoint(b[0][0],b[0][1]),5,"rgba(200,0,0,0.6)",0);
    //for (var i=1; i<b.length; i++)
        //NaviPath.AddPoint(new GWPoint(b[i][0],b[i][1]));
    //改加入前後點
    NaviPath = new GWPolyLine(new GWPoint(NIManager.StartIconX, NIManager.StartIconY),5,"rgba(200,0,0,0.6)",0);
    for (var i=0; i<b.length; i++)
        NaviPath.AddPoint(new GWPoint(b[i][0],b[i][1]));
    NaviPath.AddPoint(new GWPoint(NIManager.EndIconX, NIManager.EndIconY));
    
    ShortestPathId = myMap.AddPolyLine(NaviPath);
    myMap.ReflashPolyLine();
    
    //填入路名
    var RoadList = ResObj.RoadList;
    var RoadArray = RoadList.split(",");
    //var ListBox = document.getElementById("ListBox1");
    RoadNameListBox.innerHTML="";
    RoadNameListBox.size = RoadArray.length;
    for(var i=0;i<RoadArray.length;i++)
    {
        var option = document.createElement("OPTION");
        //RoadNameListBox.appendChild(option);
        RoadNameListBox.options.add(option);
        option.value = RoadArray[i];
        option.innerHTML = RoadArray[i];

    }
    
}

function GetGPSPosition(arg)
{
    myMap.GetGPS(GetGPSres);
}
function GetGPSres(obj)
{
    if(obj.success == "true"){
        //alert("X : "+obj.position.x+" \nY : "+obj.position.y);
        NIManager.GPSX = obj.position.x;
        NIManager.GPSY = obj.position.y;
        NIManager.GPSTime = obj.GPStime;
        GPSLabel.innerHTML = "( " + obj.position.x + " , " + obj.position.y + " )";
        //myMap.MoveTo(obj.position.x,obj.position.y,true);
        if(NIManager.GPSShow)
        {
            CreateGPSIcon();
        }
    }
}

function CreateGPSIcon()
{
    if(NIManager.GPSIconID!='' || NIManager.GPSIconID==0) myMap.RemovePlacard(NIManager.GPSIconID);
        
        var tips = '<span style="font-size:12px;"><span class="dtName">GPS坐標資訊</span>';
        tips+= '<div class="dtDescribe">';
        tips+= 'X坐標：'+NIManager.GPSX+'<br />';
        tips+= 'Y坐標：'+NIManager.GPSY+'<br />';
        tips+= '取得時間：'+NIManager.GPSTime+'<br />';
        tips+= '</div>';
        tips += '<img src="IMAGES/DialogClose.gif" class="DialogClose" onclick="myMap.ClosePlacardK3()" alt="關閉" />'
        //產生圖釘
        NIManager.GPSIconID = myMap.AddPlacard(3, NIManager.GPSIcon, NIManager.ShadowIcon, "1", NIManager.GPSX, NIManager.GPSY, tips,"","");

        myMap.ReflashPlacard();

        
}

function StartNavi()
{
    //if(NIManager.GPSTracking)return;
    myMap.TrackGPS(true, TrackGPSres);
}
function StopNavi()
{
    //if(!NIManager.GPSTracking)return;
    myMap.TrackGPS(false);
}
function TrackGPSres(obj)
{

    if(obj.success){
        //var gwIcon = new GWMapIcon('GPSIcon.png',32,32,12,32);
        if(obj.position.x==0 || obj.position.y==0) return;
        if(obj.position.x>130 || obj.position.x<110) return;
        if(obj.position.y<20 || obj.position.Y>30) return;
        NIManager.GPSX = obj.position.x;
        NIManager.GPSY = obj.position.y;
        NIManager.GPSTime = obj.GPStime;
        
        //GPSLabel.innerHTML = "( " + obj.position.x + " , " + obj.position.y + " )";
        //if(NIManager.GPSIconId!="")myMap.RemovePlacard(NIManager.GPSIconId);
        myMap.RemovePlacard(NIManager.GPSIconId);
        
        if(NIManager.GPSShow)
        { 
            CreateGPSIcon();
        }
        else  
        {
            myMap.MoveTo(obj.position.x,obj.position.y,true);
        }
        CheckBeep()
    }
}

function BeepObject()
{
    this.name = "";
    this.x =0;
    this.y= 0;
}
//var beep = new BeepObject();
var beeps = new Array();

//檢查是否已經發出過提示音
function IsBeeped(pcObject)
{
    if(beeps.length==0)
        return false;
    var beeped = false;
    for (var i = 0; i<beeps.length; i++)
    {
        if(beeps[i].name ==pcObject.name && beeps[i].x == pcObject.x && beeps[i].y == pcObject.y)
            beeped = true; 
    }
    return beeped;
}

//清除
function ClearBeep(pcObject)
{
    if(beeps.length == 0)
        return;
    for (var i=0; i< beeps.length; i++)
    {
        if(beeps[i].name ==pcObject.name && beeps[i].x == pcObject.x && beeps[i].y == pcObject.y)
       {
            beeps.splice(i,1);
            return; 
       } 
    } 
}

//提示音功能
function CheckBeep()
{
        for(var i=0; i< PushContentobj.length;i++)
        {
            var disX = Math.abs(NIManager.GPSX - PushContentobj[i].x);
            var disY = Math.abs(NIManager.GPSY - PushContentobj[i].y);
            //if(disX <0.0001 && disY < 0.0001) //約10公尺
            var dist = Math.sqrt(disX*disX+disY*disY);
            //alert("[A]" + dist);
            if(dist <0.0002) //約10公尺
            {
                //還沒嗶過 
                if(!IsBeeped(PushContentobj[i]))
                {
                    PlaySound();
                    var beep = new BeepObject();
                    beep.name = PushContentobj[i].name; 
                    beep.x = PushContentobj[i].x; 
                    beep.y = PushContentobj[i].y; 
                    beeps.push(beep); 
                }
            }else{
                ClearBeep(PushContentobj[i]);
            }
        }

//    if(beep.name=="" && beep.x==0 && beep.y==0)
//    {
//        for(var i=0; i< PushContentobj.length;i++)
//        {
//            var disX = Math.abs(NIManager.GPSX - PushContentobj[i].x);
//            var disY = Math.abs(NIManager.GPSY - PushContentobj[i].y);
//            //if(disX <0.0001 && disY < 0.0001) //約10公尺
//            var dist = Math.sqrt(disX*disX+disY*disY);
//            //alert("[A]" + dist);
//            if(dist <0.0002) //約10公尺
//            {
//                PlaySound();
//                beep.x = PushContentobj[i].x;
//                beep.y = PushContentobj[i].y;
//            }
//        }
//    }
//    else
//    {
//         var disX = Math.abs(NIManager.GPSX - beep.x);
//         var disY = Math.abs(NIManager.GPSY - beep.y);
//         var dist = Math.sqrt(disX*disX+disY*disY);
//         if(dist>0.0002)
//         {
//            beep.name="";
//            beep.x=0;
//            beep.y=0;
//         }
//    }
}


function CheckReSimNaving()
{

    if(!SimNaving) 
    {
        clearTimeout(SimNavingID);
        return
    }
    var mvi = new GWMapViewInfo();
    myMap.GetMapViewInfo(mvi);
    var cx = (mvi.iLBx+mvi.iRTx)/2
    var cy = (mvi.iLBy+mvi.iRTy)/2
    if((Math.abs(cx-NIManager.EndIconX))<0.001 && (Math.abs(cy-NIManager.EndIconY))<0.001)
    {
        
        setTimeout('RepeatNavi()',2000);
        //myMap.PlayPolyLine(NaviPath,0,10);
        //SimNavingID = setTimeout("CheckReSimNaving()",1000);
    }
    else
    {
        //alert(Math.abs(cx-NIManager.EndIconX));
        //alert(Math.abs(cy-NIManager.EndIconY));
        SimNavingID = setTimeout("CheckReSimNaving()",1000);
    }
   
}

function RepeatNavi()
{
    myMap.SetPlayPLSpeed(0);
    myMap.PlayPolyLine(NaviPath,0,10);
    SimNavingID = setTimeout("CheckReSimNaving()",1000);

}