﻿    var imagePath = "/route_search/";
    var cgiName = "./nexco.cgi";
    var initMapPrefix = "japan";
    var traceData = [];
    traceData["japan"] = [];
    traceData["tokyo"] = [];

    var zoomImg = null;
    var app = null;
    var navi = null;
    var focusElement = "";
    var radioValue = 0;
    var theDate = new Date();

	var tmpIcCode = "";

    function right(ustrString, uintLength){
        var intLength,intStartPos,intEndPos;
        var strGetString;
        intLength = ustrString.length;
        intStartPos = intLength - uintLength;
        intEndPos = intStartPos + uintLength;
        strGetString = ustrString.substring(intStartPos,intEndPos);
        return strGetString;
    }

    function dispResult(){
         document.forms[0].submit();
    }

    function showIcList(text){
        if (text.name == "startPlace"){
             document.forms[0].startPlaceCode.value = "";
        } else {
             document.forms[0].arrivePlaceCode.value = "";
        }
        document.getElementById("if").src = baseURL + cgiName + "?val_word=" + escape(text.value) + "&val_focus=" + focusElement + "&val_screen=3";
        showRightArea("list");
        hideRightArea("map");
    }

    function showRightArea(id){
        var targetObj = document.getElementById(id);
        targetObj.style.visibility = "visible";
        targetObj.style.display = "block";
    }

    function hideRightArea(id){
        var targetObj = document.getElementById(id);
        targetObj.style.visibility = "hidden";
        targetObj.style.display = "none";
    }

    function setIc(elementName, icName, icCode) {
        document.getElementById("if").src = baseURL + "dummy.html";
        if (elementName == "startPlace"){
             document.forms[0].startPlace.value = icName;
             document.forms[0].startPlaceCode.value = icCode;
        } else {
             document.forms[0].arrivePlace.value = icName;
             document.forms[0].arrivePlaceCode.value = icCode;
        }
        showRightArea("map");
        hideRightArea("list");
    }

    function initial() {
        app = new CMapApp(baseURL, document.getElementById("map"));
        //word = document.cookie.split(",");
        //if (word.length < 3){
			if(initCenterIc==""){
				initCenterIc="1010001";
			}
           app.dispMapIC(initCenterIc, initMapPrefix, onDispMapIC, onICClick);
        //} else {
        //    var mapPt = new CMapPoint(parseInt(word[0]), parseInt(word[1]), word[2]);
        //    app.dispMapCenterPoint(mapPt, onICClick);
        //    createControl(mapPt.getMapPrefix());
        //    createNavi(mapPt.getMapPrefix());
        //    app.dispMapCenterPoint(mapPt, onICClick);
        //    createZoomBtn();
        //}
        focusElement = "startPlace";
    }

    function reproduction(){
        //word = document.cookie.split(",");
        //if (word.length < 3 || word[2] != "japan"){
            app.dispMapIC("1010001", "japan", onDispMapIC, onICClick);
        //} else {
        //    var mapPt = new CMapPoint(parseInt(word[0]), parseInt(word[1]), word[2]);
        //    app.dispMapCenterPoint(mapPt, onICClick);
        //    createControl(mapPt.getMapPrefix());
        //    createNavi(mapPt.getMapPrefix());
        //    app.dispMapCenterPoint(mapPt, onICClick);
        //    createZoomBtn();
        //    setTraceData();
        //}
    }

    function onICClick(icName, icCode, icFlag, icType, lati, longi) {

	// 幕張PAクリック時にポップアップ表示
	if (icCode == "213A041"){
		window.open('http://pasar.driveplaza.com/makuhari/','PASAR幕張','');
	} else {


		if (icType == 1 || icType == 2 ){
			//alert("icName:'" + icName + "' icCode:'" + icCode + "' icFlag:'" + icFlag + "' icType:'" + icType + "' lati:'" + lati + "' longi:'" + longi + "'");
			if (icCode.length==7){
				showSAPABalloon(icCode);
				//alert("icCode:'" + icCode.substring(0,4)+ "'");
				//document.sapaForm.action="/sapa/"+icCode.substring(0,4)+"/"+icCode+"/2/";
				//alert(document.sapaForm.action);
				//document.forms[0].target="sapa";
				//document.sapaForm.submit();
			}
		}
	}
    }

    function setFocus(elementName) {
        if (elementName == "startPlace"){
            document.getElementById("startPlace_img").src = imagePath + "images/arrow.gif";
            document.getElementById("arrivePlace_img").src = imagePath + "images/spacer.gif";
        } else {
            document.getElementById("startPlace_img").src = imagePath + "images/spacer.gif";
            document.getElementById("arrivePlace_img").src = imagePath + "images/arrow.gif";
        }
        
        focusElement = elementName;
    }

    function changeMap(mapPrefix, mapName, icCode) {
        //document.getElementById("title").innerHTML = mapName;
        app.dispMapIC(icCode, mapPrefix, onDispMapIC, onICClick);
    }

    function onDispMapIC(isSuccess, icCode) {
        if (isSuccess){
            //createControl(app.getMapPrefix());
            createNavi(app.getMapPrefix());
            app.userInterface.mapReload();
            //createZoomBtn();
            setTraceData();
        }
    }

    function createZoomBtn(){
        if (app.getMapPrefix() == "japan"){
            var mapPoint = app.getMapConvertPoint(6465,3717);
            if (zoomImg){
                var parent = zoomImg.parentNode;
                parent.removeChild(zoomImg);
            }
            zoomImg = createImgElement(imagePath + "images/zoom.gif", mapPoint.x, mapPoint.y, 116, 66, "東京近郊の路線図を表示します");
            zoomImg.onclick = function(e) { setCookie(); changeMap("tokyo", "東京近郊", "6001061"); };
            app.getMapDiv().appendChild(zoomImg);
        }
    }

    function createControl(mapPrefix) {
        var control = document.getElementById("control")
        if (control) {
            while (control.hasChildNodes()) {
                control.removeChild(control.lastChild);
            }
        } else {
            control = document.createElement("DIV");
            control.id = "control";
            control.style.position = "absolute";
            control.style.left = "0px";
            control.style.top = "0px";
            control.style.zIndex = 5000;
            document.getElementById("map").appendChild(control);
        }
        var img = createImgElement(imagePath + "images/upleft.gif",0,0,20,20,"左上へ");
        img.onclick = function(e) { app.userInterface.mapMoveUpLeft(); };
        control.appendChild(img);
        img = createImgElement(imagePath + "images/up.gif",20,0,20,20,"上へ");
        img.onclick = function(e) { app.userInterface.mapMoveUp(); };
        control.appendChild(img);
        img = createImgElement(imagePath + "images/upright.gif",40,0,20,20,"右上へ");
        img.onclick = function(e) { app.userInterface.mapMoveUpRight(); };
        control.appendChild(img);
        img = createImgElement(imagePath + "images/left.gif",0,20,20,20,"左へ");
        img.onclick = function(e) { app.userInterface.mapMoveLeft(); };
        control.appendChild(img);
        img = createImgElement(imagePath + "images/reload.gif",20,20,20,20,"再読み込み");
        //img.onclick = function(e) { app.userInterface.mapReload(); createZoomBtn(); setTraceData(); };
        img.onclick = function(e) { app.userInterface.mapReload(); setTraceData(); };
        control.appendChild(img);
        img = createImgElement(imagePath + "images/right.gif",40,20,20,20,"右へ");
        img.onclick = function(e) { app.userInterface.mapMoveRight(); };
        control.appendChild(img);
        img = createImgElement(imagePath + "images/lowleft.gif",0,40,20,20,"左へ");
        img.onclick = function(e) { app.userInterface.mapMoveDownLeft(); };
        control.appendChild(img);
        img = createImgElement(imagePath + "images/low.gif",20,40,20,20,"下へ");
        img.onclick = function(e) { app.userInterface.mapMoveDown(); };
        control.appendChild(img);
        img = createImgElement(imagePath + "images/lowright.gif",40,40,20,20,"右下へ");
        img.onclick = function(e) { app.userInterface.mapMoveDownRight(); };
        control.appendChild(img);
        if (mapPrefix == "tokyo"){
            img = createImgElement(imagePath + "images/japan.gif",60,0,61,20,"日本全国へ戻ります");
            img.onclick = function(e) { reproduction(); };
            control.appendChild(img);
        }
    }

    function createImgElement(src, left, top, width, height, title) {
        var img = document.createElement("IMG");
        img.src = src;
        img.style.position = "absolute";
        img.style.left = left + "px";
        img.style.top = top + "px";
        img.style.width = width + "px";
        img.style.height = height + "px";
        img.width = width;
        img.height = height;
        img.style.cursor = "pointer";
        img.title = title;
        var agent = navigator.userAgent.toLowerCase();
        if (agent.indexOf("msie") != -1 && document.all){ // IE
            img.unselectable = "on";
            img.onselectstart = new Function("return false;");
        } else {
            img.style.MozUserSelect = "none";
        }
        img.style.border = "0";
        img.oncontextmenu = new Function("return false;");
        return img;
    }

    function createNavi(mapPrefix) {
        navi = new CNavi();
        navi.setNavigationStatus(mapPrefix, "クリックした箇所へ移動します", document.getElementById("navi"), "relative");
        navi.setClickHandler(clickNavigation);
        navi.show();
        app.setNaviListener(marking);
    }

    function marking(mapPrefix, viewX, viewY, viewW, viewH, mapW, mapH, eventType) {
        switch (eventType) {
            case 1: // ドラッグ終了
            case 4: // スクロール終了
            case 5: // ウィンドウサイズ変更時
            case 6: // 表示位置変更時
                if (navi) {
                    if (navi.marking(viewX, viewY, viewW, viewH, mapW, mapH)) {
                        navi.showMark();
                    } else {
                        navi.hideMark();
                    }
                }
                break;
        }
    }

    function clickNavigation(clickX, clickY, naviWidth, naviHeight) {
        app.clearRoute();
	app.destroyBalloon(tmpIcCode);
	app.destroyMark(tmpIcCode);
        var mapSize = app.getMapSize(app.getMapPrefix());
        var scaleW = naviWidth  / mapSize.width;
        var scaleH = naviHeight / mapSize.height;
        var centerX = Math.round(clickX / scaleW);
        var centerY = Math.round(clickY / scaleH);
        app.dispMap(centerX, centerY, app.getMapPrefix());
        //createZoomBtn();
    }

    function setCookie(){
        var mapPt = app.getMapCenterPoint();
        var cookieVal = mapPt.getX() + "," + mapPt.getY() + "," + mapPt.getMapPrefix();
        document.cookie = cookieVal;
    }

    function Turning(){
        var startPlace =  document.forms[0].startPlace.value;
        var startPlaceCode =  document.forms[0].startPlaceCode.value;
         document.forms[0].startPlace.value =  document.forms[0].arrivePlace.value;
         document.forms[0].startPlaceCode.value =  document.forms[0].arrivePlaceCode.value;
         document.forms[0].arrivePlace.value = startPlace;
         document.forms[0].arrivePlaceCode.value = startPlaceCode;
    }

    function Clear(){
         document.forms[0].startPlace.value = "";
         document.forms[0].startPlaceCode.value = "";
         document.forms[0].arrivePlace.value = "";
         document.forms[0].arrivePlaceCode.value = "";
        setFocus("startPlace");
    }

    function createXMLHttpRequest(func){
        var xmlHttpObject= null;
        if (window.XMLHttpRequest){ // Safari,Firefox...
            xmlHttpObject = new XMLHttpRequest();
        } else if (window.ActiveXObject){ // IE
            try{
                xmlHttpObject = new ActiveXObject("Msxml2.XMLHTTP"); // IE6
            } catch(e){
                try{
                    xmlHttpObject = new ActiveXObject("Microsoft.XMLHTTP"); // IE5
                } catch(e){
                    return null;
                }
            }
        }
        if (xmlHttpObject){
            xmlHttpObject.onreadystatechange = func;
        }
        return xmlHttpObject;
    }

    function requestTraceData(){
        if ( document.forms[0].startPlace.value.length <= 0){
            alert("出発地が指定されていません");
            return;
        }
        if ( document.forms[0].arrivePlace.value.length <= 0){
            alert("到着地が指定されていません");
            return;
        }
        var requestURL = baseURL + cgiName + "?val_apiid=routesearch&startPlace=" +  document.forms[0].startPlaceCode.value + "&arrivePlace=" +  document.forms[0].arrivePlaceCode.value;
        httpObj = createXMLHttpRequest(getTraceData);
        if (httpObj){
            httpObj.open("GET", requestURL, true);
            httpObj.send(null);
        }
    }

    function getTraceData(){
        if ((httpObj.readyState == 4) && (httpObj.status == 200)){
            var routeItem = httpObj.responseXML.getElementsByTagName("RouteItem");
            if (routeItem.length <= 0){
                return;
            }
            var trace = routeItem[0].getElementsByTagName("Trace");
            for (var i = 0; i < trace.length; i++){
                if (trace[i].getAttribute("map") == "japan"){
                    var point = trace[i].getElementsByTagName("Point");
                    traceData["japan"] = [];
                    for (var j = 0; j < point.length; j++){
                        traceData["japan"][j] = point[j].firstChild.nodeValue;
                    }
                } else if (trace[i].getAttribute("map") == "tokyo"){
                    var point = trace[i].getElementsByTagName("Point");
                    traceData["tokyo"] = [];
                    for (var j = 0; j < point.length; j++){
                        traceData["tokyo"][j] = point[j].firstChild.nodeValue;
                    }
                }
            }
            setTraceData();
        }
    }

    function setTraceData(){
        app.clearRoute();
        for (var i = 0; i < traceData[app.getMapPrefix()].length; i++){
            app.traceRoute(traceData[app.getMapPrefix()][i]);
        }
    }

    function clearTrace(){
        app.clearRoute();
        for (var mapPrefix in traceData){
            traceData[mapPrefix] = [];
        }
    }


	//地図中心
	function fMap(id) {
		app.destroyBalloon(tmpIcCode);
		app.destroyMark(tmpIcCode);
		app.dispMapIC(id, "japan", onDispMapIC, onICClick);
	}

	function showSAPABalloon(ic){
		app.destroyBalloon(tmpIcCode);
		app.destroyMark(tmpIcCode);
		tmpIcCode = ic;
        var innerHTML = "<b>SA/PA</b><br>";

		if(ic == "1400161" || ic == "1430066" || ic == "1830071"){
		//if(ic == "1400161" || ic == "2A17066" || ic == "1830071"){
			innerHTML = innerHTML + "<a href='javascript:actionSAPA(\"1\")'>上り線</a><br>";
			innerHTML = innerHTML + "下り線";
			app.showBalloon(ic, 92, 92, innerHTML, 100);		
		}else if(ic.substring(0,4) == "1461"){
			innerHTML = innerHTML + "<a href='javascript:actionSAPA(\"1\")'>西行き</a><br>";
			innerHTML = innerHTML + "<a href='javascript:actionSAPA(\"2\")'>東行き</a>";
			app.showBalloon(ic, 92, 92, innerHTML, 100);
		}else if(ic.substring(0,4) == "214K"){
			innerHTML = innerHTML + "<a href='javascript:actionSAPA(\"1\")'>内回り</a><br>";
			innerHTML = innerHTML + "<a href='javascript:actionSAPA(\"2\")'>外回り</a>";
			app.showBalloon(ic, 92, 92, innerHTML, 100);
		}else if(
				ic == "1050033" || ic == "5004016" || ic == "1101186" || ic == "1830031" || ic == "1830049" ||
				ic == "1612006" || ic == "1202006" || ic == "1030036" || ic == "1311076" ||
				ic == "1312002" || ic == "5009021" || ic == "5012006" || ic == "1810003"
		){
			innerHTML = innerHTML + "<a href='javascript:actionSAPA(\"1\")'>上り線</a>";
			app.showBalloon(ic, 92, 75, innerHTML, 100);
		}else if(
				ic == "5004031" || ic == "1011019" || ic == "1830036" || ic == "1830056" ||
				ic == "1073031" || ic == "1612011" || ic == "1202011" || ic == "1030041" ||
				ic == "1311071" || ic == "1312004" || ic == "5009016" || ic == "5009036" ||
				ic == "5012011"
		){
			innerHTML = innerHTML + "<a href='javascript:actionSAPA(\"2\")'>下り線</a>";
			app.showBalloon(ic, 92, 75, innerHTML, 100);
		}else if(ic == "1040041"){
			innerHTML = innerHTML + "<a href='javascript:actionSAPA(\"1\")'>上り線</a><br>";
			innerHTML = innerHTML + "<a href='http://pasar.driveplaza.com/hanyu/' target='sapa'>下り線</a>";
			app.showBalloon(ic, 92, 92, innerHTML, 100);
		}else if(ic == "1800011"){
                        innerHTML = innerHTML + "<a href='http://pasar.driveplaza.com/miyoshi/' target='sapa'>上り線</a><br>";
                        innerHTML = innerHTML + "<a href='javascript:actionSAPA(\"2\")'>下り線</a>";
                        app.showBalloon(ic, 92, 92, innerHTML, 100);
		}else{
			innerHTML = innerHTML + "<a href='javascript:actionSAPA(\"1\")'>上り線</a><br>";
			innerHTML = innerHTML + "<a href='javascript:actionSAPA(\"2\")'>下り線</a>";
			app.showBalloon(ic, 92, 92, innerHTML, 100);
		}
        //app.showBalloon(ic, 92, 92, innerHTML, 100);
	//var markStyle = CMark.STYLE_STATION_POINT | CMark.STYLE_STATION_NAME;
	var markStyle = CMark.STYLE_STATION_NAME;
        var isBlink = 0;
        var markColor = 1;
        app.showMark(ic,markStyle, isBlink, markColor);
    }

	function actionSAPA(updown){
		//document.sapaForm.action="/sapa/"+tmpIcCode.substring(0,4)+"/"+tmpIcCode+"/"+updown+"/";
		document.sapaForm.action="http://sapa.driveplaza.com/sapa/"+tmpIcCode.substring(0,4)+"/"+tmpIcCode+"/"+updown+"/";
		document.forms[0].target="sapa";
		document.sapaForm.submit();
	}


