var VtmEkispert = function (options) { var baseId = options.id; var resultContentsId = options.resultContentsId; var resultId = options.resultId; var corporationBind = options.corporationBind; var dateTimeApp; var stationApp1; var stationApp2; var conditonApp; var resultApp; //ウェルカムナビ用の入力 var wStationApp1; var wStationApp2; var wDateTimeApp; var listeners = {}; var storage = localStorage; var transferTimeMostMargin = "T3221233232319:F332112212000:A23121121:"; var transferTimeNormal = "T3221233232319:F332112212000:A23121141:"; var transferTimeLessMargin = "T3221233232319:F332112212000:A23121111:"; var answerCount = 3; var radius = 10000; var fromLocationText = "マップから指定した出発地"; var toLocationText = "マップから指定した到着地"; //経路探索用変数 var from, to; var viaList; var date; var fromLocation, toLocation; var language = "ja"; var viaMultiList; // 経路検索時に駅候補が複数存在するかどうか var isiPhone = navigator.userAgent.match(/iPhone/i) != null; var isAndroid_phone = (navigator.userAgent.match(/Android/i) != null && navigator.userAgent.match(/Mobile/i) != null); var provider = "toyama"; //for web用ID切り替え // 辞書 var translationDic = { "ja": { "バスの地図で見る": "地図で見る", }, "en": { "出発地に指定": "Departure", "到着地に指定": "Arrival", "駅・バス停を入力": "Station / Bus stop", "エラー": "Error", "この端末では位置情報が取得できません。": "Location information can not be acquired on this terminal.", "このページにはアクセス許可がないため、位置情報の取得に失敗しました。": "The acquisition of the geolocation information failed because the page didn't have the permission to do it.", "内部的なエラーを返したため、位置情報の取得に失敗しました。": "The acquisition of the geolocation failed because at least one internal source of position returned an internal error.", "位置情報の取得に時間がかかりすぎたため、取得がタイムアウトしました。": "The time allowed to acquire the geolocation, defined by timeout information was reached before the information was obtained.", "住所が不正です": "Address is incorrect", "通知": "Information", "Myコースに保存しました": "Saved to My course", "時刻の詳細はこちら": "Click here for time details.", "マップから指定": "Designation from map", "出発地": "From", "到着地": "To", "検索日時を指定する": "Date", "検索条件を設定する": "Setting", "検索履歴から指定": "Route search history", "履歴一覧を表示": "Show history list", "Myコースを検索": "Route search My course", "登録済みのMyコースはありません": "There is no My course", "表示順": "Sort", "時間": "Time", "運賃": "Price", "乗換回数": "Transfer", "徒歩速度": "Transfer Time", "ゆっくり": "Most", "標準": "Normal", "早く歩く": "Less", "この経路をMyコースに保存する": "Save this route to My course", "ページトップへ": "Top of the page", "検索する": "Search", "閉じる": "Close", "→富山県外の検索はこちらから": "→Search for areas outside Toyama", "経路が見つかりませんでした": "Route was not found", "日付を正しく入力してください": "Please enter the date correctly", "出発地は必須です": "Departure is required", "位置情報取得中です": "Location information is being acquired.", "目的地は必須です": "Arrival is required", "出発地と到着地が同一です": "Origin and destination are the same", "現在地": "Your location", "下記の項目を確認してください": "Information", "出発地が不正です": "Departure place is illegal", "到着地が不正です": "Arrival place is illegal", "他の候補があります": "Have some choices", "他候補": "Candidate", "再検索": "Research", "時刻対応事業者": "Time Support Points", "全国の事業者": "All Points in Japan", "出発・到着地の履歴": "History of departure / arrival place", "履歴はありません": "There is no history", "駅・バス停・住所・施設名を入力": "Station / Bus stop / Address / Facility name", "運行情報": "Operation", "バスの地図で見る": "BusMap", "地図で見る": "Map", "あいの風とやま鉄道": "Ainokaze-Toyama-Railway", "マップから指定した出発地": "Departure specified from map", "マップから指定した到着地": "Arrival specified from map", "※年末年始ダイヤには未対応のため、バス会社のサイト等をご確認ください。": "*Since it is not a time schedule corresponding to the year-end and New Year holidays, please check the company website.", }, "ko": { "出発地に指定": "출발지 지정", "到着地に指定": "도착 지정", "駅・バス停を入力": "역 / 버스 정류장", "エラー": "오류", "この端末では位置情報が取得できません。": "장치에서 위치 정보를 얻을 수 없습니다", "このページにはアクセス許可がないため、位置情報の取得に失敗しました。": "권한이 없기 때문에이 페이지에서 위치 정보를 가져 오지 못했습니다", "内部的なエラーを返したため、位置情報の取得に失敗しました。": "내부 오류를 반환했기 때문에 위치 정보를 가져 오는 데 실패했습니다", "位置情報の取得に時間がかかりすぎたため、取得がタイムアウトしました。": "위치 정보의 취득이 타임 아웃했습니다", "住所が不正です": "주소가 잘못되었습니다", "通知": "정보", "Myコースに保存しました": "내 코스에 저장", "時刻の詳細はこちら": "자세한 시간 정보는 여기를 클릭하십시오.", "マップから指定": "지도에서 지정", "出発地": "출발지", "到着地": "목적지", "検索日時を指定する": "데이트", "検索条件を設定する": "설정", "検索履歴から指定": "경로 검색 기록", "履歴一覧を表示": "히스토리 목록 표시", "Myコースを検索": "경로 검색 내 코스", "登録済みのMyコースはありません": "내 코스가 없습니다", "表示順": "정렬", "時間": "시각", "運賃": "가격", "乗換回数": "환승 횟수", "徒歩速度": "도보 속도", "ゆっくり": "천천히", "標準": "표준", "早く歩く": "빨리 걷기", "この経路をMyコースに保存する": "이 경로를 내 코스에 저장", "ページトップへ": "페이지 맨 위로", "検索する": "검색", "閉じる": "닫기", "→富山県外の検索はこちらから": "도야마 현 이외의 경로 검색", "経路が見つかりませんでした": "경로를 찾을 수 없습니다", "日付を正しく入力してください": "날짜를 정확하게 입력하십시오", "出発地は必須です": "출발지가 필요합니다", "位置情報取得中です": "위치 정보 가져 오는 중입니다", "目的地は必須です": "목적지가 필요합니다", "出発地と到着地が同一です": "출발지와 도착지가 동일합니다", "現在地": "현재 위치", "下記の項目を確認してください": "정보", "出発地が不正です": "출발지 이 잘못되었습니다", "到着地が不正です": "목적지 이 잘못되었습니다", "他の候補があります": "다른 후보지가 있습니다", "他候補": "후보지", "再検索": "검색", "時刻対応事業者": "시간 대응하고있는 포인트", "全国の事業者": "일본의 모든 포인트", "出発・到着地の履歴": "출발 · 도착지 기록", "履歴はありません": "역사가 없다", "駅・バス停・住所・施設名を入力": "역 / 버스 정류장 / 주소 / 시설 명", "運行情報": "운행 정보", "バスの地図で見る": "버스지도", "地図で見る": "지도", "あいの風とやま鉄道": "아이노카제토야마테쓰도", "マップから指定した出発地": "지도에서 지정된 출발지", "マップから指定した到着地": "지도에서 지정한 도착지", "※年末年始ダイヤには未対応のため、バス会社のサイト等をご確認ください。": "*Since it is not a time schedule corresponding to the year-end and New Year holidays, please check the company website.", }, "zh-cn": { "出発地に指定": "指定为出发地", "到着地に指定": "指定为目的地", "駅・バス停を入力": "车站 / 巴士站", "エラー": "错误", "この端末では位置情報が取得できません。": "無法在此設備上獲取位置信息", "このページにはアクセス許可がないため、位置情報の取得に失敗しました。": "由于缺少权限,无法获取位置信息", "内部的なエラーを返したため、位置情報の取得に失敗しました。": "无法获取位置信息,因为它返回了内部错误", "位置情報の取得に時間がかかりすぎたため、取得がタイムアウトしました。": "采集超时,因为它花费了太长时间来获取位置信息", "住所が不正です": "地址无效", "通知": "通知", "Myコースに保存しました": "保存到我的课程", "時刻の詳細はこちら": "单击此处了解时间详细信息", "マップから指定": "从地图指定", "出発地": "出发地", "到着地": "到达地点", "検索日時を指定する": "日期", "検索条件を設定する": "设定", "検索履歴から指定": "路线搜索记录", "履歴一覧を表示": "显示历史记录列表", "Myコースを検索": "搜索我的课程", "登録済みのMyコースはありません": "没有我的课程", "表示順": "显示顺序", "時間": "时间", "運賃": "价钱", "乗換回数": "转移次数", "徒歩速度": "步行速度", "ゆっくり": "慢慢地", "標準": "标配", "早く歩く": "快走", "この経路をMyコースに保存する": "将此路线保存到我的课程", "ページトップへ": "转到页面顶部", "検索する": "搜索", "閉じる": "闭", "→富山県外の検索はこちらから": "→点击这里在富山市以外搜索", "経路が見つかりませんでした": "找不到路线", "日付を正しく入力してください": "请正确输入日期", "出発地は必須です": "需要出发地点", "位置情報取得中です": "获取位置信息", "目的地は必須です": "需要到达位置", "出発地と到着地が同一です": "出发地和目的地相同", "現在地": "现在的位置", "下記の項目を確認してください": "信息", "出発地が不正です": "出发点是无效", "到着地が不正です": "到达地点是无效", "他の候補があります": "还有其他候选网站", "他候補": "其他候选网站", "再検索": "搜索", "時刻対応事業者": "时间支持点", "全国の事業者": "日本的所有积分", "出発・到着地の履歴": "出发和到达的历史", "履歴はありません": "没有历史", "駅・バス停・住所・施設名を入力": "车站 / 巴士站 / 地址 / 设施名称", "運行情報": "运行状态", "バスの地図で見る": "巴士地图", "地図で見る": "地图", "あいの風とやま鉄道": "Aino风富山铁道", "マップから指定した出発地": "从地图指定的出发地", "マップから指定した到着地": "从地图指定的到达地", "※年末年始ダイヤには未対応のため、バス会社のサイト等をご確認ください。": "*Since it is not a time schedule corresponding to the year-end and New Year holidays, please check the company website.", }, "zh-tw": { "出発地に指定": "指定為出發地", "到着地に指定": "指定為目的地", "駅・バス停を入力": "車站 / 巴士站", "エラー": "錯誤", "この端末では位置情報が取得できません。": "无法在此终端上获取位置信息", "このページにはアクセス許可がないため、位置情報の取得に失敗しました。": "由於缺少權限,無法獲取位置信息", "内部的なエラーを返したため、位置情報の取得に失敗しました。": "無法獲取位置信息,因為它返回了內部錯誤", "位置情報の取得に時間がかかりすぎたため、取得がタイムアウトしました。": "採集超時,因為它花費了太長時間來獲取位置信息", "住所が不正です": "地址無效", "通知": "通知", "Myコースに保存しました": "保存到我的課程", "時刻の詳細はこちら": "單擊此處了解時間詳細信息", "マップから指定": "從地圖指定", "出発地": "出發地", "到着地": "到達地點", "検索日時を指定する": "日期", "検索条件を設定する": "設定", "検索履歴から指定": "路線搜索記錄", "履歴一覧を表示": "顯示歷史記錄列表", "Myコースを検索": "搜索我的課程", "登録済みのMyコースはありません": "沒有我的課程", "表示順": "顯示順序", "時間": "時間", "運賃": "價錢", "乗換回数": "轉移次數", "徒歩速度": "步行速度", "ゆっくり": "慢慢地", "標準": "標配", "早く歩く": "快走", "この経路をMyコースに保存する": "將此路線保存到我的課程", "ページトップへ": "轉到頁面頂部", "検索する": "搜索", "閉じる": "閉", "→富山県外の検索はこちらから": "→點擊這裡在富山市以外搜索", "経路が見つかりませんでした": "找不到路線", "日付を正しく入力してください": "請正確輸入日期", "出発地は必須です": "需要出發地點", "位置情報取得中です": "獲取位置信息", "目的地は必須です": "需要到達位置", "出発地と到着地が同一です": "出發地和目的地相同", "現在地": "現在的位置", "下記の項目を確認してください": "信息", "出発地が不正です": "出發點是無效", "到着地が不正です": "到達地點是無效", "他の候補があります": "還有其他候選網站", "他候補": "其他候選網站", "再検索": "搜索", "時刻対応事業者": "時間支持點", "全国の事業者": "日本的所有積分", "出発・到着地の履歴": "出發和到達的歷史", "履歴はありません": "沒有歷史", "駅・バス停・住所・施設名を入力": "車站 / 巴士站 / 地址 / 設施名稱", "運行情報": "運行狀態", "バスの地図で見る": "巴士地圖", "地図で見る": "地圖", "あいの風とやま鉄道": "Aino風富山鐵道", "マップから指定した出発地": "從地圖指定的出發地", "マップから指定した到着地": "從地圖指定的到達地", "※年末年始ダイヤには未対応のため、バス会社のサイト等をご確認ください。": "*Since it is not a time schedule corresponding to the year-end and New Year holidays, please check the company website.", }, "th": { "出発地に指定": "ตั้งเป็นออกเดินทาง", "到着地に指定": "กำหนดเป็นปลายทาง", "駅・バス停を入力": "สถานี / ป้ายรถเมล์", "エラー": "ข้อผิดพลาด", "この端末では位置情報が取得できません。": "คุณไม่สามารถรับข้อมูลตำแหน่งในอุปกรณ์นี้", "このページにはアクセス許可がないため、位置情報の取得に失敗しました。": "การรับข้อมูลตำแหน่งทางภูมิศาสตร์ล้มเหลวเนื่องจากหน้าเว็บไม่ได้รับอนุญาตให้ทำ", "内部的なエラーを返したため、位置情報の取得に失敗しました。": "การจัดหาตำแหน่งทางภูมิศาสตร์ล้มเหลวเนื่องจากแหล่งตำแหน่งภายในอย่างน้อยหนึ่งแหล่งส่งคืนข้อผิดพลาดภายใน", "位置情報の取得に時間がかかりすぎたため、取得がタイムアウトしました。": "การหมดเวลาเกิดขึ้นเนื่องจากใช้เวลานานเกินไปในการรับข้อมูลตำแหน่ง", "住所が不正です": "ที่อยู่ไม่ถูกต้อง", "通知": "ข้อมูล", "Myコースに保存しました": "บันทึกหลักสูตรของฉันแล้ว", "時刻の詳細はこちら": "คลิกที่นี่เพื่อดูรายละเอียดเวลา", "マップから指定": "ระบุจากแผนที่", "出発地": "จุดออกเดินทาง", "到着地": "สถานที่มาถึง", "検索日時を指定する": "วันที่", "検索条件を設定する": "การตั้งค่า", "検索履歴から指定": "ประวัติการค้นหาเส้นทาง", "履歴一覧を表示": "แสดงรายการประวัติ", "Myコースを検索": "ค้นหาเส้นทางสำหรับหลักสูตรของฉัน", "登録済みのMyコースはありません": "ไม่มีหลักสูตรของฉัน", "表示順": "จัดเรียงโดย", "時間": "เวลา", "運賃": "ราคา", "乗換回数": "จำนวนการถ่ายโอน", "徒歩速度": "ความเร็วในการเดิน", "ゆっくり": "ช้า", "標準": "มาตรฐาน", "早く歩く": "เดินเร็ว", "この経路をMyコースに保存する": "บันทึกเส้นทางนี้ไปยังหลักสูตรของฉัน", "ページトップへ": "สำหรับด้านบนของหน้า", "検索する": "เสาะ", "閉じる": "ปิด", "→富山県外の検索はこちらから": "→ค้นหาพื้นที่นอกโทยามะ", "経路が見つかりませんでした": "ไม่พบเส้นทาง", "日付を正しく入力してください": "โปรดป้อนวันที่อย่างถูกต้อง", "出発地は必須です": "ต้องระบุจุดออกเดินทาง", "位置情報取得中です": "กำลังรับข้อมูลตำแหน่งในขณะนี้", "目的地は必須です": "ต้องกำหนดจุดมาถึง", "出発地と到着地が同一です": "แหล่งกำเนิดและปลายทางเหมือนกัน", "現在地": "ที่ตั้งปัจจุบัน", "下記の項目を確認してください": "ข้อมูล", "出発地が不正です": "สถานที่ออกเดินทางไม่ถูกต้อง", "到着地が不正です": "ปลายทางไม่ถูกต้อง", "他の候補があります": "มีทางเลือกบางอย่าง", "他候補": "ทางเลือก", "再検索": "เสาะ", "時刻対応事業者": "จุดที่สอดคล้องกับเวลา", "全国の事業者": "สถานที่ทั้งหมดในญี่ปุ่น", "出発・到着地の履歴": "ประวัติสถานที่ออกเดินทาง / มาถึง", "履歴はありません": "ไม่มีประวัติ", "駅・バス停・住所・施設名を入力": "สถานี / ป้ายรถเมล์ / ที่อยู่ / ชื่อสถานที่", "運行情報": "สถานะการทำงาน", "バスの地図で見る": "แผนที่รถบัส", "地図で見る": "แผนที่", "あいの風とやま鉄道": "ไอโนะคะเซะโตะยะมะเต็ะซึโด", "マップから指定した出発地": "สถานที่ออกเดินทางที่ระบุจากแผนที่", "マップから指定した到着地": "สถานที่มาถึงที่ระบุจากแผนที่", "※年末年始ダイヤには未対応のため、バス会社のサイト等をご確認ください。": "*Since it is not a time schedule corresponding to the year-end and New Year holidays, please check the company website.", }, }; init(); /** * 初期化処理 */ function init() { language = storage.getItem("language") || "ja"; var buffer = ''; buffer += '
'; //ウェルカムナビモーダル buffer += ''; //メッセージモーダル buffer += ''; buffer += '
'; buffer += '
'; buffer += '
' + output('出発地') + '
入力1
'; buffer += '
'; buffer += '
' + output("到着地") + '
入力2
'; buffer += '
'; if (typeof options.forWebLink != "undefined" && options.forWebLink) { buffer += ''; } buffer += '
' + output("検索日時を指定する") + '
'; buffer += '
日付
'; buffer += '
' + output("検索条件を設定する") + '
'; buffer += '
探索条件
'; buffer += '' + output("検索する") + ''; //駅の履歴 buffer += '
' + output("検索履歴から指定") + '
'; buffer += '' + output("履歴一覧を表示") + ''; //探索履歴 buffer += '
' + output("Myコースを検索") + '
'; buffer += '
' + output("登録済みのMyコースはありません") + '
'; buffer += '
'; buffer += ''; document.getElementById(options.id).innerHTML = buffer; //履歴のボタン addEvent(document.getElementById(baseId + "_openHistory"), "click", function () { if (storage.getItem(VTM_RESULT_LOCAL_STORAGE) && typeof JSON.parse(storage.getItem(VTM_RESULT_LOCAL_STORAGE)).point != "undefined") { var history = JSON.parse(storage.getItem(VTM_RESULT_LOCAL_STORAGE)); var pointHistory = ""; for (var i = 0; i < history.point.length; i++) { pointHistory += '
'; pointHistory += history.point[i].name; pointHistory += '
'; pointHistory += ''; pointHistory += ''; pointHistory += '
'; pointHistory += '
'; } displayMessage(translation("出発・到着地の履歴"), pointHistory); for (var i = 0; i < history.point.length; i++) { addEvent(document.getElementById(baseId + "_depHistoryButton_" + String(i)), "click", function (e) { var n = e.srcElement.id.replace(baseId + "_depHistoryButton_", ""); setFromStationWithCode(history.point[parseInt(n)].name, history.point[parseInt(n)].code); $('#searchMessageModal').modal('hide'); }); addEvent(document.getElementById(baseId + "_arrHistoryButton_" + String(i)), "click", function (e) { var n = e.srcElement.id.replace(baseId + "_arrHistoryButton_", ""); setToStationWithCode(history.point[parseInt(n)].name, history.point[parseInt(n)].code); $('#searchMessageModal').modal('hide'); }); } } else { displayMessage(translation("出発・到着地の履歴"), translation("履歴はありません")); } }); dateTimeApp = new expGuiDateTime(document.getElementById(baseId + "_dateTime")); dateTimeApp.setConfigure("agent", 1); dateTimeApp.setConfigure(dateTimeApp.SEARCHTYPE_LASTTRAIN_LABEL, "最終"); dateTimeApp.dispDateTime(dateTimeApp.SEARCHTYPE_DIA); // 駅名入力パーツ#1初期化 stationApp1 = new expGuiStation(document.getElementById(baseId + "_station_1")); stationApp1.setConfigure("apiURL", "https://api-toyama.vtfm.jp/"); stationApp1.setConfigure("agent", 1); stationApp1.setConfigure("key", VTM_EKISPERT_KEY); stationApp1.setConfigure("geolocation", true); stationApp1.bind("geolocation", function (status) { getLocationStatus(status); }); stationApp1.setStationSort([stationApp1.createSortObject("電車", "train"), stationApp1.createSortObject("バス", "bus"), stationApp1.createSortObject("施設", "landmark"), stationApp1.createSortObject("住所", "address", false)]); stationApp1.bind("focus", function () { if (stationApp1.getStation() == translation(fromLocationText)) { stationApp1.setStation(""); delete fromLocation; } }); stationApp1.dispStation(); // 駅名入力パーツ#2初期化 stationApp2 = new expGuiStation(document.getElementById(baseId + "_station_2")); stationApp2.setConfigure("apiURL", "https://api-toyama.vtfm.jp/"); stationApp2.setConfigure("agent", 1); stationApp2.setConfigure("key", VTM_EKISPERT_KEY); stationApp2.setConfigure("geolocation", true); stationApp2.bind("geolocation", function (status) { getLocationStatus(status); }); stationApp2.setStationSort([stationApp2.createSortObject("電車", "train"), stationApp2.createSortObject("バス", "bus"), stationApp2.createSortObject("施設", "landmark"), stationApp2.createSortObject("住所", "address", false)]); stationApp2.bind("focus", function () { if (stationApp2.getStation() == translation(toLocationText)) { stationApp2.setStation(""); delete toLocation; } }); stationApp2.dispStation(); // 探索条件パーツ初期化 conditonApp = new expGuiCondition(document.getElementById(baseId + "_condition")); var conditionArea = ''; conditionArea += '
'; conditionArea += '
'; conditionArea += '' + output("表示順") + ''; conditionArea += '
'; conditionArea += ''; conditionArea += ''; conditionArea += ''; conditionArea += '
'; conditionArea += '
'; conditionArea += '
'; conditionArea += '' + output("徒歩速度") + ''; conditionArea += '
'; conditionArea += ''; conditionArea += ''; conditionArea += ''; conditionArea += '
'; conditionArea += '
'; conditionArea += '
'; document.getElementById(baseId + '_condition').innerHTML = conditionArea; // 経路表示パーツ初期化 var resultArea = ""; resultArea += '
'; resultArea += '' + output("この経路をMyコースに保存する") + ''; resultArea += '
'; resultArea += '
'; resultArea += '
'; if (typeof options.routeMessage != "undefined") { resultArea += '
'; resultArea += output(options.routeMessage.ja); resultArea += '
'; } resultArea += '
'; resultArea += '' + output("ページトップへ") + ''; resultArea += '
'; resultArea += '
'; resultArea += '
'; resultArea += '
'; document.getElementById(resultId).innerHTML = resultArea; resultApp = new expGuiCourse(document.getElementById(baseId + '_result')); resultApp.setConfigure("apiURL", "https://api-toyama.vtfm.jp/"); resultApp.setConfigure("ssl", true); resultApp.setConfigure("PriceChange", true);// 変更を許可 resultApp.setConfigure("PriceChangeRefresh", true);// 再読み込みをオン resultApp.setConfigure("AssignDia", true); resultApp.setConfigure("CourseList", true); resultApp.setConfigure("tab", "hidden"); resultApp.setConfigure("shortName", true); resultApp.setConfigure("agent", 2); resultApp.setConfigure("key", VTM_EKISPERT_KEY); resultApp.setConfigure("traffic", { name: "徒歩", type: resultApp.TYPE_WALK }); resultApp.setConfigure("sortTimeMode", "requiredTime"); // 所要時間順 //経路探索のイベント設定 addEvent(document.getElementById(baseId + "_swapStation"), "click", swapStation); addEvent(document.getElementById(baseId + "_searchButton"), "click", search); addEvent(document.getElementById(baseId + "_addResultButton"), "click", addResult); //トップに戻るボタン addEvent(document.getElementById(baseId + "_resultLinkTop"), "click", function () { $("html,body").animate({ scrollTop: 0 }); }); //for WEBのリンク addEvent(document.getElementById(baseId + "_for_web_link"), "click", function () { var url = ""; if (language == "ja") { url = "https://roote.ekispert.net/ja?provider=" + provider; } else { url = "https://roote.ekispert.net/en"; } window.open(url,"_blank"); }); //履歴の復元 viewHistory(); //多言語対応 setLanguage(language); VtmCommon.addEventListener("languageChanged", function (languageStr) { setLanguage(languageStr); }); document.onclick = function (e) { if (e.srcElement.id.indexOf(baseId + "_station_1") == -1) { stationApp1.closeStationList(); } if (e.srcElement.id.indexOf(baseId + "_station_2") == -1) { stationApp2.closeStationList(); } if (e.srcElement.id.indexOf(baseId + "_w_station_1") == -1 && typeof wStationApp1 != "undefined") { wStationApp1.closeStationList(); } if (e.srcElement.id.indexOf(baseId + "_w_station_2") == -1 && typeof wStationApp2 != "undefined") { wStationApp2.closeStationList(); } }; //ウェルカムナビの処理 if (location.search.indexOf("?to=") == 0 && !isNaN(location.search.replace("?to=", ""))) { var toStationCode = location.search.replace("?to=", ""); var wBuffer = ""; wBuffer += '
'; wBuffer += '
' + output('出発地') + '
入力1
'; wBuffer += '
'; wBuffer += '
' + output("到着地") + '
入力2
'; wBuffer += '
'; wBuffer += '
' + output("検索日時を指定する") + '
'; wBuffer += '
日付
'; wBuffer += '' + output("検索する") + ''; document.getElementById(baseId + "_welcomenavi").innerHTML = wBuffer; $('#welcomenaviModal').modal({ backdrop: 'static', keyboard: false, show: true }); //各パーツの初期化処理 wDateTimeApp = new expGuiDateTime(document.getElementById(baseId + "_w_dateTime")); wDateTimeApp.setConfigure("agent", 1); wDateTimeApp.dispDateTime(wDateTimeApp.SEARCHTYPE_DIA); // 駅名入力パーツ#1初期化 wStationApp1 = new expGuiStation(document.getElementById(baseId + "_w_station_1")); wStationApp1.setConfigure("agent", 1); wStationApp1.setConfigure("key", VTM_EKISPERT_KEY); wStationApp1.setConfigure("placeholder", translation("駅・バス停を入力")); wStationApp1.dispStation(); // 駅名入力パーツ#2初期化 wStationApp2 = new expGuiStation(document.getElementById(baseId + "_w_station_2")); wStationApp2.setConfigure("agent", 1); wStationApp2.setConfigure("key", VTM_EKISPERT_KEY); wStationApp2.setConfigure("placeholder", translation("駅・バス停を入力")); wStationApp2.dispStation(); wStationApp2.setStationCode(toStationCode); //検索ボタン addEvent(document.getElementById(baseId + "_w_searchButton"), "click", function () { // 候補を閉じる wStationApp1.closeStationList(); wStationApp2.closeStationList(); from = wStationApp1.getStation().split("/")[0].split("/")[0]; to = wStationApp2.getStation().split("/")[0].split("/")[0]; viaList = [wStationApp1.getStation(), wStationApp2.getStation()]; // 探索種別 var searchWord = 'date=' + wDateTimeApp.getDate(); switch (wDateTimeApp.getSearchType()) { case wDateTimeApp.SEARCHTYPE_DEPARTURE:// ダイヤ出発 searchWord += '&searchType=departure'; searchWord += '&time=' + wDateTimeApp.getTime(); break; case wDateTimeApp.SEARCHTYPE_ARRIVAL:// ダイヤ到着 searchWord += '&searchType=arrival'; searchWord += '&time=' + wDateTimeApp.getTime(); break; case wDateTimeApp.SEARCHTYPE_FIRSTTRAIN:// 始発 searchWord += '&searchType=firstTrain'; break; case wDateTimeApp.SEARCHTYPE_LASTTRAIN:// 終電 searchWord += '&searchType=lastTrain'; break; case wDateTimeApp.SEARCHTYPE_PLAIN:// 平均 searchWord += '&searchType=plain'; break; } searchCourse(searchWord); }); } } /** * 住所を設定する */ function setAddress(data) { stationApp1.setAddress(data); stationApp2.setAddress(data); stationApp1.setConfigure("address", true); stationApp2.setConfigure("address", true); } /** * GPS取得エラー */ function getLocationStatus(status) { if (typeof status == "undefined") { displayMessage(translation("エラー"), translation("この端末では位置情報が取得できません。")); } else if (status == 1) { displayMessage(translation("エラー"), translation("このページにはアクセス許可がないため、位置情報の取得に失敗しました。")); } else if (status == 2) { displayMessage(translation("エラー"), translation("内部的なエラーを返したため、位置情報の取得に失敗しました。")); } else if (status == 3) { displayMessage(translation("エラー"), translation("位置情報の取得に時間がかかりすぎたため、取得がタイムアウトしました。")); } } /** * 言語切替 */ function output(word) { var langHtml = ''; Object.keys(translationDic).forEach(function(key) { var txt = translationDic[key][word]; if (txt === undefined) { txt = word; } langHtml += '' + txt + ''; }); return langHtml; } /** * 言語切替 */ function setLanguage(languageStr) { language = languageStr; // languageStrとekispertのlocaleのマッピング var languageStrToLocale = { "ja": "japanese", "en": "english", "ko": "korean", "zh-cn": "simplified_chinese", "zh-tw": "traditional_chinese", "th": "thai", }; stationApp1.setConfigure("language", languageStrToLocale[language]); stationApp2.setConfigure("language", languageStrToLocale[language]); dateTimeApp.setConfigure("language", languageStrToLocale[language]); resultApp.setConfigure("language", languageStrToLocale[language]); stationApp1.setConfigure("apiParam", "language=" + language + "&provider=" + VTM_PROVIDER); stationApp2.setConfigure("apiParam", "language=" + language + "&provider=" + VTM_PROVIDER); stationApp1.setConfigure("placeholder", translation("駅・バス停・住所・施設名を入力")); stationApp2.setConfigure("placeholder", translation("駅・バス停・住所・施設名を入力")); resultApp.unbind("external"); // resultApp.bind("external", function(){ // window.open('newsDetail.html?id=3',"_blank"); // }, { // text: translation("※年末年始ダイヤには未対応のため、バス会社のサイト等をご確認ください。"), // class: "exp_lineComment", // type: "lineComment", // condition: isLineCommentLink, // conditionText: "年末年始ダイヤには未対応のため、バス会社のサイト等をご確認ください。" // }); resultApp.bind("external", openOperationInformation, { text: translation("運行情報"), class: "external_button_1", type: "line", condition: isBuscatch }); resultApp.bind("external", openAinokazeOperationinformation, { text: translation("運行情報"), class: "external_button_5", type: "line", condition: isAinokaze }); resultApp.bind("external", openBusMap, { text: translation("バスの地図で見る"), class: "external_button_2", type: "line", condition: isBuscatch }); resultApp.bind("external", function (index) { options.openMap(resultApp.getPointObject(index)); }, { text: translation("地図で見る"), class: "external_button_4", type: "point", condition: isOpenMap }); resultApp.unbind("change"); resultApp.bind("change", changeViewForExcludeCorporation); resultApp.unbind("click"); resultApp.bind("click", function(){ $(".resultForWebLink").remove(); }); } /** * メッセージの表示 */ function displayMessage(title, text) { document.getElementById(baseId + "_searchMessage_title").innerHTML = title; document.getElementById(baseId + "_searchMessage").innerHTML = text; $("#searchMessageModal").modal('show'); } /** * 履歴の表示 */ function viewHistory() { if (storage.getItem(VTM_RESULT_LOCAL_STORAGE)) { var history = JSON.parse(storage.getItem(VTM_RESULT_LOCAL_STORAGE)); if (typeof history.course != "undefined") { var historyBuffer = ''; for (var i = 0; i < history.course.length; i++) { historyBuffer += '' + history.course[i].from + ' → ' + history.course[i].to + ''; } document.getElementById(baseId + "_history").innerHTML = historyBuffer; for (var i = 0; i < history.course.length; i++) { addEvent(document.getElementById(baseId + "_historyButton_" + String(i)), "click", function (e) { $("#" + e.srcElement.id).addClass("active"); var n = e.srcElement.id.replace(baseId + "_historyButton_", ""); from = history.course[parseInt(n)].from; to = history.course[parseInt(n)].to; setFromStationWithCode(from, history.course[parseInt(n)].viaList[0]); setToStationWithCode(to, history.course[parseInt(n)].viaList[history.course[parseInt(n)].viaList.length-1]); viaList = history.course[parseInt(n)].viaList; // 探索種別 var searchWord = 'date=' + dateTimeApp.getDate(); switch (dateTimeApp.getSearchType()) { case dateTimeApp.SEARCHTYPE_DEPARTURE:// ダイヤ出発 searchWord += '&searchType=departure'; searchWord += '&time=' + dateTimeApp.getTime(); break; case dateTimeApp.SEARCHTYPE_ARRIVAL:// ダイヤ到着 searchWord += '&searchType=arrival'; searchWord += '&time=' + dateTimeApp.getTime(); break; case dateTimeApp.SEARCHTYPE_FIRSTTRAIN:// 始発 searchWord += '&searchType=firstTrain'; break; case dateTimeApp.SEARCHTYPE_LASTTRAIN:// 終電 searchWord += '&searchType=lastTrain'; break; case dateTimeApp.SEARCHTYPE_PLAIN:// 平均 searchWord += '&searchType=plain'; break; } $(".resultForWebLink").remove(); searchCourse(searchWord); }); } } } } /** * 発着地を保存 */ function addPoint() { var history = { point: [] }; if (storage.getItem(VTM_RESULT_LOCAL_STORAGE)) { history = JSON.parse(storage.getItem(VTM_RESULT_LOCAL_STORAGE)); if (typeof history.point == "undefined") { history.point = []; } for (var i = 0; i < history.point.length; i++) { if (history.point[i].name == from) { history.point.splice(i, 1); } } for (var i = 0; i < history.point.length; i++) { if (history.point[i].name == to) { history.point.splice(i, 1); } } } if (from != translation(fromLocationText)) { history.point.unshift({ id: (new Date().getTime()), name: from, code: resultApp.getPointObject(1).code }); } if (to != translation(toLocationText)) { let point_size = 1; let course = resultApp.getResultAll().ResultSet.Course; if (course instanceof Array) { point_size = course[0].Route.Point.length; } else { point_size = course.Route.Point.length; } history.point.unshift({ id: (new Date().getTime()), name: to, code: resultApp.getPointObject(point_size).code }); } storage.setItem(VTM_RESULT_LOCAL_STORAGE, JSON.stringify(history)); viewHistory(); } /** * 探索結果を保存 */ function addResult() { var history = { course: [] }; if (storage.getItem(VTM_RESULT_LOCAL_STORAGE)) { history = JSON.parse(storage.getItem(VTM_RESULT_LOCAL_STORAGE)); if (typeof history.course == "undefined") { history.course = []; } for (var i = 0; i < history.course.length; i++) { if (history.course[i].from == from && history.course[i].to == to) { history.course.splice(i, 1); break; } } } history.course.unshift({ id: (new Date().getTime()), from: from, to: to, viaList: viaList, serializeData: (typeof resultApp.getSerializeData() == "undefined") ? serializeData = resultApp.getSerializeDataAll()[0] : serializeData = resultApp.getSerializeData() }); storage.setItem(VTM_RESULT_LOCAL_STORAGE, JSON.stringify(history)); viewHistory(); displayMessage(translation("通知"), translation("Myコースに保存しました")); } /** * あいの風とやま鉄道運行情報のリンクを表示する条件 */ function isAinokaze(line) { return (line.Name !== undefined && line.Corporation !== undefined && line.Corporation.Name == translation("あいの風とやま鉄道")); } /** * 路線コメントのリンクを表示する条件 */ function isLineCommentLink(lineCommentText, line) { if (line.Name !== undefined) { // 予約便でも徒歩でもない場合 if (line.Name.indexOf("予約便") == -1 && line.Name.indexOf("徒歩") == -1) { // 路線コメントが存在している場合 if (typeof line.Comment != 'undefined') { var externalLineCommentText = ""; if (typeof line.Comment.text != 'undefined') { externalLineCommentText = line.Comment.text; } else if(typeof line.Comment == 'string') { externalLineCommentText = line.Comment; } // 路線コメント内に lineCommentText の内容が含まれる場合 if (externalLineCommentText.indexOf(lineCommentText) != -1) { var type = line.Type; if (line.Type !== undefined && typeof line.Type != "string") { type = line.Type.text + "." + line.Type.detail; } // 路線名について、対応事業者名が含まれている場合 if (typeof options.lineName.ja != 'undefined') { if (type == options.lineName.type) { if (line.Name.indexOf(options.lineName[language]) != -1 || line.Name.indexOf(options.lineName.ja) != -1) { return true; } } } else { for(var i=0; i" + text + ""; $(".resultFooter").before(linkText); // 一本前後リンクを非表示にする $(".exp_prev, .exp_next").hide(); } else { // 詳細へのリンクを削除する $(".resultForWebLink").remove(); } } /** * バスマップの表示 */ function openBusMap(sectionIndex) { var depDate = resultApp.getDepartureDate().toISOString(); var lineProvider = getBuscatchProvider(resultApp.getLineObject(sectionIndex).name); var url = "https://api.ekispert.jp/v1/json/"; url += "course/station?key=" + VTM_EKISPERT_KEY; url += "&serializeData=" + encodeURIComponent(resultApp.getSerializeData()); url += "§ionIndex=" + String(sectionIndex); url += "§ionOnly=false"; var link = ""; $.ajax({ type: 'GET', url: url, dataType: 'json', async: false, success: function (result) { var stations = []; for (var i = 0; i < result.ResultSet.Point.length; i++) { stations.push(result.ResultSet.Point[i].Station.code); } link = "https://buscatch.jp/rt/pc/val_tfm_map.php?id=" + lineProvider; link += "&ekispert_eki_code_list=" + stations.join(","); link += "&from=" + resultApp.getPointObject(sectionIndex).code; var time = getTextValue(result.ResultSet.Line[0].DepartureState.Datetime).split(":"); link += "&date=" + depDate.substr(0, 4) + depDate.substr(5, 2) + depDate.substr(8, 2); link += "&start_time=" + time[0] + ":" + time[1]; if (language != "ja") { link += "&lang=en"; } if (isiPhone || isAndroid_phone) { link += "&sp=1"; } } }); if (link != "") { window.open(link,"_blank"); } } /** * デマンドバスの表示 */ function openDemandBus() { window.open(options.demandBusURL,"_blank"); } /** * オブジェクトの値を取得 */ function getTextValue(obj) { if (typeof obj != "undefined") { if (typeof obj.text != "undefined") { return obj.text; } return obj; } else { return ""; } } /** * 発着地を入れ替え */ function swapStation() { if (stationApp1.getStation() != translation(fromLocationText) && stationApp2.getStation() != translation(toLocationText)) { // 候補を閉じる stationApp1.closeStationList(); stationApp2.closeStationList(); // 発着地リストを作成 var fromStation = stationApp1.getStation(); var fromStationCode; if ($("#" + baseId + "_station_1").data('name') == fromStation) { fromStationCode = $("#" + baseId + "_station_1").data('code'); } else { fromStationCode = stationApp1.getStationCode(); } var toStation = stationApp2.getStation(); var toStationCode; if ($("#" + baseId + "_station_2").data('name') == toStation) { toStationCode = $("#" + baseId + "_station_2").data('code'); } else { toStationCode = stationApp2.getStationCode(); } setFromStationWithCode(toStation, toStationCode); setToStationWithCode(fromStation, fromStationCode); } } /** * 探索前に入力チェックを行う */ function checkData() { // メッセージの初期化 var errorMessage = []; if (!dateTimeApp.checkDate()) { // 日付入力パーツのチェック errorMessage.push(translation("日付を正しく入力してください")); } if (stationApp1.getStation() == "") { // 駅名入力パーツの空チェック errorMessage.push(translation("出発地は必須です")); } if (stationApp1.getStation() == translation("現在地") && typeof stationApp1.getStationGeoPoint() == 'undefined') { errorMessage.push(translation("位置情報取得中です")); } if (stationApp2.getStation() == "") { // 駅名入力パーツの空チェック errorMessage.push(translation("目的地は必須です")); } else { if (stationApp1.getStation() == stationApp2.getStation()) { // 駅名同一チェック errorMessage.push(translation("出発地と到着地が同一です")); } } if (stationApp2.getStation() == translation("現在地") && typeof stationApp2.getStationGeoPoint() == 'undefined') { errorMessage.push(translation("位置情報取得中です")); } return errorMessage.join("
"); } /** * 住所判定 */ function isAddress(address) { if (address && address.match(/^(東京都|北海道|(京都|大阪)府|(青森|岩手|宮城|秋田|山形|福島|茨城|栃木|群馬|埼玉|千葉|神奈川|新潟|富山|石川|福井|山梨|長野|岐阜|静岡|愛知|三重|滋賀|兵庫|奈良|和歌山|鳥取|島根|岡山|広島|山口|徳島|香川|愛媛|高知|福岡|佐賀|長崎|熊本|大分|宮崎|鹿児島|沖縄)県)?(.{1,3}区|.{1,10}市|.{1,10}郡.{1,10}町|.{1,10}郡.{1,10}村|.{1,3}村|大島町|三宅島三宅村|三宅村|八丈島八丈町|八丈町)/) !== null) { return true; } else { return false; } } /** * 住所を緯度経度に変換 */ function getAddress2Location(address, code, callback) { if (code == "" && isAddress(address)) { var url = "https://maps.googleapis.com/maps/api/geocode/json?key=" + VTM_GOOGLE_GEOCODE_API_KEY + "&address=" + encodeURIComponent(address); $.ajax({ type: 'GET', url: url, dataType: 'json', success: function (result) { if (typeof result.results != 'undefined' || typeof result.results[0] != 'undefined' || typeof result.results[0].geometry != 'undefined' || typeof result.results[0].geometry.location != 'undefined') { callback(result.results[0].geometry.location.lat + "," + result.results[0].geometry.location.lng); } else { displayMessage(translation("エラー"), translation("住所が不正です")); } } }); } else { callback(""); } } /** * 経路探索イベント */ function search() { //入力チェック後に動作 if (checkData() != "") { displayMessage(translation("下記の項目を確認してください"), checkData()); } else { viaList = []; viaMultiList = {}; //出発地の取得 getAddress2Location(stationApp1.getStation(), stationApp1.getStationCode(), function (tmpFromLocation) { if (stationApp1.getStation() == translation("現在地")) { viaList.push(stationApp1.getStationGeoPoint().lati_d + "," + stationApp1.getStationGeoPoint().longi_d + ",wgs84," + String(radius)); from = stationApp1.getStation(); } else if (tmpFromLocation.length > 0) { viaList.push(tmpFromLocation + ",wgs84," + String(radius)); from = stationApp1.getStation(); } else { if (stationApp1.getStation() == translation(fromLocationText)) { viaList.push(String(fromLocation.lat) + "," + String(fromLocation.lon) + ",wgs84," + String(radius)); from = translation(fromLocationText); } else if (stationApp1.getStationCode().split(",").length == 2) { viaList.push(stationApp1.getStationCode() + ",wgs84," + String(radius)); from = stationApp1.getStation(); } else if (stationApp1.getStationCode() != "") { viaList.push(stationApp1.getStationCode()); from = stationApp1.getStation(); } else if (stationApp1.getStation() == $("#" + baseId + "_station_1").data('name') && $("#" + baseId + "_station_1").data('code') != "") { viaList.push($("#" + baseId + "_station_1").data('code')); from = $("#" + baseId + "_station_1").data('name'); } else { var isFromErr = true; if (stationApp1.getStation() != "") { // 対応事業者の駅名を検索 var stations = searchStations(stationApp1.getStation(), VTM_PROVIDER); if (stations.length > 0) { viaList.push(stations[0].code); from = stations[0].name; let code = stations[0].code; isFromErr = false; if (stations.length == 1) { stations = searchStations(stationApp1.getStation(), 'all'); if (stations.length > 1) { viaMultiList['from'] = VTM_PROVIDER; } else { // 駅確定 setFromStationWithCode(from, code); } } else { viaMultiList['from'] = VTM_PROVIDER; } } else { stations = searchStations(stationApp1.getStation(), 'all'); if (stations.length > 0) { let code = stations[0].code; viaList.push(stations[0].code); from = stations[0].name; isFromErr = false; if (stations.length > 1) { viaMultiList['from'] = 'all'; } else { // 駅確定 setFromStationWithCode(from, code); } } } } if(isFromErr) { displayMessage(translation("エラー"), translation("出発地が不正です")); return; } } } //到着地の取得 getAddress2Location(stationApp2.getStation(), stationApp2.getStationCode(), function (tmpToLocation) { if (stationApp2.getStation() == translation("現在地")) { viaList.push(stationApp2.getStationGeoPoint().lati_d + "," + stationApp2.getStationGeoPoint().longi_d + ",wgs84," + String(radius)); to = stationApp2.getStation(); } else if (tmpToLocation.length > 0) { viaList.push(tmpToLocation + ",wgs84," + String(radius)); to = stationApp2.getStation(); } else { if (stationApp2.getStation() == translation(toLocationText)) { viaList.push(String(toLocation.lat) + "," + String(toLocation.lon) + ",wgs84," + String(radius)); to = translation(toLocationText); } else if (stationApp2.getStationCode().split(",").length == 2) { viaList.push(stationApp2.getStationCode() + ",wgs84," + String(radius)); to = stationApp2.getStation(); } else if (stationApp2.getStationCode() != "") { viaList.push(stationApp2.getStationCode()); to = stationApp2.getStation(); } else if (stationApp2.getStation() == $("#" + baseId + "_station_2").data('name') && $("#" + baseId + "_station_2").data('code') != "") { viaList.push($("#" + baseId + "_station_2").data('code')); to = $("#" + baseId + "_station_2").data('name'); } else { var isToErr = true; if (stationApp2.getStation() != "") { var stations = searchStations(stationApp2.getStation(), VTM_PROVIDER); if (stations.length > 0) { viaList.push(stations[0].code); to = stations[0].name; let code = stations[0].code; if (stations.length == 1) { stations = searchStations(stationApp2.getStation(), 'all'); if (stations.length > 1) { viaMultiList['to'] = VTM_PROVIDER; } else { // 駅確定 setToStationWithCode(to, code); } } else { viaMultiList['to'] = VTM_PROVIDER; } isToErr = false; } else { stations = searchStations(stationApp2.getStation(), 'all'); if (stations.length > 0) { viaList.push(stations[0].code); to = stations[0].name; let code = stations[0].code; isToErr = false; if (stations.length > 1) { viaMultiList['to'] = 'all'; } else { // 駅確定 setToStationWithCode(to, code); } } } } if (isToErr) { displayMessage(translation("エラー"), translation("到着地が不正です")); return; } } } // 候補を閉じる stationApp1.closeStationList(); stationApp2.closeStationList(); // for webリンクがあれば閉じる $(".resultForWebLink").remove(); // 探索種別 var searchWord = 'date=' + dateTimeApp.getDate(); switch (dateTimeApp.getSearchType()) { case dateTimeApp.SEARCHTYPE_DEPARTURE:// ダイヤ出発 searchWord += '&searchType=departure'; searchWord += '&time=' + dateTimeApp.getTime(); break; case dateTimeApp.SEARCHTYPE_ARRIVAL:// ダイヤ到着 searchWord += '&searchType=arrival'; searchWord += '&time=' + dateTimeApp.getTime(); break; case dateTimeApp.SEARCHTYPE_FIRSTTRAIN:// 始発 searchWord += '&searchType=firstTrain'; break; case dateTimeApp.SEARCHTYPE_LASTTRAIN:// 終電 searchWord += '&searchType=lastTrain'; break; case dateTimeApp.SEARCHTYPE_PLAIN:// 平均 searchWord += '&searchType=plain'; break; } // 検索 searchCourse(searchWord); }); }); } } /** * 駅すぱあとの駅名検索実行 */ function searchStations(searchName, provider, sortProvider) { var stations = []; var url = "https://api-toyama.vtfm.jp/v1/json/"; url += "station/light?key=" + VTM_EKISPERT_KEY; url += "&name=" + encodeURIComponent(searchName); url += "&provider=" + provider; url += "&language=" + language; $.ajax({ type: 'GET', url: url, dataType: 'json', async: false, success: function (result) { var points = result.ResultSet.Point; if (result.ResultSet.Point instanceof Array == false) { points = [result.ResultSet.Point]; } for (var i = 0; i < points.length; i++) { var type = (typeof points[i].Station.Type == "string") ? points[i].Station.Type : points[i].Station.Type.text; var code = (type == "landmark") ? points[i].Station.code + ",wgs84," + String(radius) : points[i].Station.code; stations.push({ code: code, name: points[i].Station.Name, type: type }); } } }); /* ソート順が指定されていない場合は駅優先で並び替える */ if (typeof sortProvider === 'undefined') { sortProvider = "all"; } return sortStations(stations, sortProvider); } /** * 駅すぱあとの駅名検索結果をsortする * provider = all: station/bus/landmark/address/その他 の順 * provider = 上記以外: bus/landmark/address/その他 の順 */ function sortStations(stations, provider) { var sortType = []; switch(provider) { case "all": sortType = ['train', 'bus', 'landmark', 'address'].reverse(); break; default: sortType = ['bus', 'landmark', 'address'].reverse(); break; }; return stations.sort(function(a,b) { let aType = sortType.indexOf(a.type); let bType = sortType.indexOf(b.type); if (aType == bType) { return 0; } else if (aType < bType) { return 1; } else { return -1; } }); } /** * 駅すぱあとの探索実行 */ function searchCourse(searchWord) { // 発着地リストを作成 searchWord += "&viaList=" + viaList.join(":"); resultApp.setConfigure("from", from.split("/")[0].split("/")[0]); resultApp.setConfigure("to", to.split("/")[0].split("/")[0]); // 探索結果数 searchWord += '&answerCount=' + answerCount; // ソート if (document.getElementById(baseId + "sortTime").checked) { searchWord += '&sort=' + conditonApp.SORT_TIME; resultApp.setConfigure("sort", conditonApp.SORT_TIME); } else if (document.getElementById(baseId + "sortPrice").checked) { searchWord += '&sort=' + conditonApp.SORT_PRICE; resultApp.setConfigure("sort", conditonApp.SORT_PRICE); } else if (document.getElementById(baseId + "sortTransfer").checked) { searchWord += '&sort=' + conditonApp.SORT_TRANSFER; resultApp.setConfigure("sort", conditonApp.SORT_TRANSFER); } // 探索条件 if (document.getElementById(baseId + "transferTimeMostMargin").checked) { searchWord += '&conditionDetail=' + transferTimeMostMargin; } else if (document.getElementById(baseId + "transferTimeNormal").checked) { searchWord += '&conditionDetail=' + transferTimeNormal; } else if (document.getElementById(baseId + "transferTimeLessMargin").checked) { searchWord += '&conditionDetail=' + transferTimeLessMargin; } searchWord += '&gcs=wgs84'; if (typeof corporationBind != 'undefined') { searchWord += '&corporationBind=' + corporationBind; } searchWord += '&language=' + language; searchWord += '&vtmId=toyama'; // 他の候補表示エリアの削除 $('#otherStationCandidate').remove(); // google analytics に検索押下を通知 gtag('event', 'search', { event_category: 'route', event_label: searchWord }); // 探索を実行 resultApp.search(searchWord, conditonApp.PRICE_ONEWAY, result); } /** * 探索実行時のコールバック */ function result(isSuccess) { if (!isSuccess) { displayMessage(translation("エラー"), translation("経路が見つかりませんでした")); } else { $('#welcomenaviModal').modal('hide'); document.getElementById(resultContentsId).style.display = "block"; var resultSet = resultApp.getResultAll(); var course; if (typeof resultSet.ResultSet.Course.length == 'undefined') { course = resultSet.ResultSet.Course; } else { course = resultSet.ResultSet.Course[0]; } var points = course.Route.Point; if (typeof listeners['arrivalStation'] != "undefined") { for (var i = 0; i < listeners['arrivalStation'].length; i++) { var point = JSON.parse(JSON.stringify(points[points.length - 1])); if (typeof point.GeoPoint != "undefined") { listeners['arrivalStation'][i](parseFloat(point.GeoPoint.lati_d), parseFloat(point.GeoPoint.longi_d), point.Name); } else { if (point.Name.match(/^[0-9]+.[0-9]+,[0-9]+.[0-9]+,wgs84$/) === null) { var geoPoint = point.Name.split(","); listeners['arrivalStation'][i](parseFloat(geoPoint[0]), parseFloat(geoPoint[1])); } } } } //スクロール $("html,body").animate({ scrollTop: $('#' + resultContentsId).offset().top }); //履歴へ登録 addPoint(); } if (viaMultiList !== undefined && Object.values(viaMultiList).length > 0) { // 駅選択の候補がありますエリアを表示 let html = '
'; html += '
'; html += output('他の候補があります'); html += '
'; html += '
'; // 出発地 html += '
'; html += '
'; html += output('出発地'); html += '
'; html += '
'; var tmpCode = ""; if ($("#" + baseId + "_station_1").data("code") !== undefined) { tmpCode = $("#" + baseId + "_station_1").data("code"); } html += '
' + from + '
'; if (viaMultiList.from !== undefined) { html += ''; // modal html += ''; } html += '
'; html += '
'; // 到着地 html += '
'; html += '
'; html += output('到着地'); html += '
'; html += '
'; tmpCode = ""; if ($("#" + baseId + "_station_2").data("code") !== undefined) { tmpCode = $("#" + baseId + "_station_2").data("code"); } html += '
' + to + '
'; if (viaMultiList.to !== undefined) { html += ''; // modal html += ''; } html += '
'; html += '
'; html += '
'; // 再探索ボタン html += '
'; html += ''; html += '
'; html += '
'; $('#searchCourse_result').prepend(html); $('#result').show(); // 候補の表示 $('button.otherStationSelect').unbind('click'); $('button.otherStationSelect').bind('click', function() { var id; switch ($(this).data('key')) { case 'from': id = "#selectFromModal"; break; case 'to': id = "#selectToModal"; break; } $(id + "_list").html('
'); if ($(this).data('type') == VTM_PROVIDER) { // 時刻対応事業者のみ $(id + "_list .otherStationSelect_listTab").append('
' + output('時刻対応事業者')); let stations = searchStations($(this).data('input'), VTM_PROVIDER); $(id + "_list .otherStationSelect_listItems").append(''); for (var i=0; i < stations.length; i++) { $(id + "_list ul." + VTM_PROVIDER).append('
  • ' + stations[i].name + '
  • '); } } // 全国 $(id + "_list .otherStationSelect_listTab").append('
    ' + output('全国の事業者')); let stations = searchStations($(this).data('input'), 'all'); $(id + "_list .otherStationSelect_listItems").append('
      '); for (var i=0; i < stations.length; i++) { $(id + "_list ul.all").append('
    • ' + stations[i].name + '
    • '); } $(id + "_list .otherStationSelect_listTab div:first").addClass("selected"); $(id + "_list .otherStationSelect_listItems ul:first").addClass("selected"); $(id).modal('show'); // 候補表示切り替え $(id + "_list .otherStationSelect_listTab div").unbind('click'); $(id + "_list .otherStationSelect_listTab div").bind('click', function() { $(id + "_list .otherStationSelect_listTab div").removeClass("selected"); $(id + "_list .otherStationSelect_listItems ul").removeClass("selected"); $(this).addClass("selected"); $(id + "_list .otherStationSelect_listItems ul." + $(this).data("type")).addClass("selected"); }); // 候補から駅選択 $(id + "_list .otherStationSelect_listItems a").unbind('click'); $(id + "_list .otherStationSelect_listItems a").bind('click', function() { switch ($(this).data('key')) { case 'from': setFromStationWithCode($(this).data('name'), $(this).data('code')); $("#otherStationCandidate .station>.name[data-key=from]").text($(this).data('name')); $("#otherStationCandidate .station>.name[data-key=from]").data('code',$(this).data('code')); $("#otherStationCandidate .station>.name[data-key=from]").data('selected','selected'); $("#selectFromModal").modal('hide'); break; case 'to': setToStationWithCode($(this).data('name'), $(this).data('code')); $("#otherStationCandidate .station>.name[data-key=to]").text($(this).data('name')); $("#otherStationCandidate .station>.name[data-key=to]").data('code',$(this).data('code')); $("#otherStationCandidate .station>.name[data-key=to]").data('selected','selected'); $("#selectToModal").modal('hide'); break; } $("#otherStationCandidate .researchButtonArea").show(); return false; }); return false; }); // 再探索 $("#otherStationCandidate .researchButtonArea button.searchButton").unbind("click"); $("#otherStationCandidate .researchButtonArea button.searchButton").bind("click", function() { var station_name_key = "#otherStationCandidate .station>.name[data-key=from]"; // フォームに入力値を再設定 if ($(station_name_key).data('selected') !== undefined) { // 他候補から選んだ場合 setFromStationWithCode($(station_name_key).text(), $(station_name_key).data('code')); } else if ($(".otherStationSelect[data-key=from]").length > 0) { // 他候補はあるけれど選ばなかった場合 setFromStation($(".otherStationSelect[data-key=from]").data('input')); } else { // 確定している場合 var name = $(station_name_key).text(); var code = $(station_name_key).data('code'); if (code != "") { setFromStationWithCode(name, code); } else { setFromStation(name); } } station_name_key = "#otherStationCandidate .station>.name[data-key=to]"; if ($(station_name_key).data('selected') !== undefined) { // 他候補から選んだ場合 setToStationWithCode($(station_name_key).text(), $(station_name_key).data('code')); } else if ($(".otherStationSelect[data-key=to]").length > 0) { // 他候補はあるけれど選ばなかった場合 setToStation($(".otherStationSelect[data-key=to]").data('input')); } else { // 確定している場合 var name = $(station_name_key).text(); var code = $(station_name_key).data('code'); if (code != "") { setToStationWithCode(name, code); } else { setToStation(name); } } // 再探索 search(); return false; }); } } /** * イベントの設定(IE対応版) */ function addEvent(element, eventName, func) { if (element) { if (typeof eventName == 'string' && typeof func == 'function') { if (element.addEventListener) { element.addEventListener(eventName, func, false); } else if (element.attachEvent) { element.attachEvent("on" + eventName, func); } } } } /** * リスナー設定 */ function addEventListener(eventName, func) { if (typeof listeners[eventName] == "undefined") { listeners[eventName] = []; } listeners[eventName].push(func); } /** * 辞書を利用して単語を取得する */ function translation(word) { if (translationDic[language] !== undefined && translationDic[language][word] !== undefined) { return translationDic[language][word]; } return word; } this.addEventListener = addEventListener; this.setFromStation = setFromStation; this.setFromStationWithCode = setFromStationWithCode; this.setToStation = setToStation; this.setToStationWithCode = setToStationWithCode; this.setFromLocation = setFromLocation; this.setToLocation = setToLocation; this.setAddress = setAddress; this.search = search; };