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 += '
';
buffer += '
';
buffer += '
';
buffer += '';
buffer += '
';
buffer += '
';
buffer += '
';
//メッセージモーダル
buffer += '
';
buffer += '
';
buffer += '
';
buffer += '';
buffer += '
';
buffer += '
';
buffer += '
';
buffer += '';
buffer += '
';
buffer += '
';
buffer += '
';
buffer += '
';
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 += '';
}
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 += '
';
conditionArea += '
';
document.getElementById(baseId + '_condition').innerHTML = conditionArea;
// 経路表示パーツ初期化
var 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("検索日時を指定する") + '
';
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 += '
';
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;
};