// var map
var map = null;
var geocoder = null;
var marker = null;
var centerMarker;
var centerListener = null;
var prevInfoWindow = null;
var myMarker = new Array;
var myMarkerId = new Array;
var myMarkerLen;
var currentMarker = null;
var currentMarkerNo = -1;
var zoom = 15;
var lat, lng, latlng;
var markerSrc = '/images/common/icon_map_01.png';
var greyMarkerSrc = '/images/common/icon_map_02.png';
var curMarkerSrc = '/images/common/icon_map_cur.png';
var markerSize = 36;
if (uaDevice == 'sp') {
markerSrc = '/images/common/icon_map_01_sp.png';
greyMarkerSrc = '/images/common/icon_map_02_sp.png';
curMarkerSrc = '/images/common/icon_map_cur_sp.png';
markerSize = 27;
}
var iconH = 54;
var textH = 32;
// var search
var stationdata;
var stationdataLen;
var searchResult;
var resultStation;
var hitStation;
var pageLimit = 20;
var pagerLimit = 9;
var pagerCenter = Math.ceil(pagerLimit / 2);
var action = '';
var stationCount = 0;
var query;
var searchQuery;
var searchWord;
var searchCars;
var prefWord, cityWord;
var queryMonth;
var requestSearch = '';
// var log
var type_keyword = null;
var type_car = null;
var type_location = null;
var type_city = null;
var prefKeyword = null;
var cityKeyword = null;
var makerArr = new Array();
var makerArrTxt;
var OFF = 'off';
var ON = 'on';
var searchCarsGtm;
// var flg
var mapFlg = 0;
var carShapeFlg = 0;
var carTypeFlg = 0;
var placeSearchFlg = 0;
var gtmCarFlg;
// msg
var noStationMsg00 = '中心から1.5km圏内のステーションをアイコンで表示しています。';
var noStationMsg01 = '中心から3km圏内のステーションをアイコンで表示しています';
var noStationMsg02 = '誠に申し訳ございません。
ご指定の条件に該当するステーションはありませんでした。
条件を広げて再検索してください。';
var noStationMsg03 = '誠に申し訳ございません。
3km圏内に、条件に該当するステーションはありませんでした。
条件を広げて再検索してください。';
var noSelectMsg = '検索条件を選択してください';
var prefOptionDefault = '';
var cityOptionDefault = '';
// array data
var prefdata = new Array();
var caroptdata = new Array();
var carshapedata = new Array();
var cartypedata = new Array();
var cargradedata = new Array();
var carcpdata = new Array();
var requestArr = {
'car_type' : 'メーカー・車種',
'car_shape' : '車両タイプ',
'car_opt' : '装備品',
'car_grade' : '料金クラス',
'car_cp' : 'その他条件'
};
// selector
var $map;
var $result;
var $searchTab;
var $stationList
var $stationZero;
var $searchWord01, $searchWord02, $searchWordMore;
var $pref, $pref01, $city, $city01;
var $pagerWrap, $pager, $page, $pageTotal, $pageNum;
var $resultLead;
var $carShape, $carType, $carOpt, $carGrade, $carCp;
var $searchTargetForm;
var $detailSearch;
$(function() {
$map = $('#map')
$result = $('.result');
$searchTab = $('.searchSection, .searchTab');
$searchWord01 = $('#searchWord01');
$searchWord02 = $('#searchWord02');
$searchWordMore = $('#searchWordMore');
$stationList = $('.stationList02');
$stationZero = $('#stationZero');
$pref = $('#pref');
$pref01 = $('#pref01');
$city = $('#city');
$city01 = $('#city01');
$page = $('.pageNum');
$pageTotal = $page.find('.total span');
$pageNum = $page.find('.num span');
$pagerWrap = $('.pagerWrap');
$pager = $pagerWrap.find('.pager');
$resultLead = $('.result .lead');
$detailSearch = $('#detailSearch');
window.addEventListener('popstate', function (event) {
location.href = '/station';
});
loadSearchData();
loadStationData();
// accordion
$('.addCarselect').on('click', function() {
accordion($(this), $(this).parents('.searchBtnarea').next());
return false;
});
var options = {
componentRestrictions: {
country: 'jp'
}
};
var autocomplete01 = $searchWord01 ? new google.maps.places.Autocomplete($searchWord01[0], options) : null;
var autocomplete02 = $searchWord02 ? new google.maps.places.Autocomplete($searchWord02[0], options) : null;
var autocomplete = $searchWordMore ? new google.maps.places.Autocomplete($searchWordMore[0], options) : null;
$('.pref').on('change', function() {
var _this = $(this);
var prefVal = $(this).val();
var $targetWord = $(this).parents('.searchForm').find('.searchWord');
if (prefVal != '') {
$targetWord.val('')
setCityOption(prefVal, _this.next());
} else {
_this.next().html(cityOptionDefault).prop('disabled', true);
}
});
$('.city').on('change', function() {
var _this = $(this);
var cityVal = $(this).val();
var $targetWord = $(this).parents('.searchForm').find('.searchWord');
if (cityVal != '') $targetWord.val('');
});
$('#searchPlace').on('click', function() {
placeSearchFlg = 0;
searchWord = $searchWord01.val();
prefWord = '';
cityWord = '';
window.history.pushState(null, null, '/station');
searchStationQuery();
});
$('#searchAddress').on('click', function() {
placeSearchFlg = 0;
searchWord = '';
prefWord = $pref01.val();
cityWord = $city01.val();
window.history.pushState(null, null, '/station');
searchStationQuery();
});
$('.searchCarBtn').on('click', function() {
placeSearchFlg = 1;
action = '';
var id = $(this).attr('id');
if (id == 'searchShape') {
carShapeFlg = 1;
} else if (id == 'searchType') {
carTypeFlg = 1;
} else {
carShapeFlg = 0;
carTypeFlg = 0;
}
$searchTargetForm = $(this).parents('.searchForm');
searchWord = $searchTargetForm.find('.searchWord').val();
prefWord = $searchTargetForm.find('.pref').val();
if (searchWord != '') {
$pref.val('');
prefWord = '';
cityWord = '';
searchStationQuery();
} else if (prefWord != '') {
cityWord = $searchTargetForm.find('.city').val();
searchWord = '';
searchStationQuery();
} else {
searchStationQuery();
}
return false;
});
$('.searchGps').on('click', function() {
searchGps();
});
// $('.searchSection .linkList01 li a').on('click', function() {
// placeSearchFlg = 0;
// searchWord = $(this).text();
// $searchWordMore.val(searchWord);
// prefWord = '';
// cityWord = '';
// searchStationQuery();
//
// return false;
// });
// reset
$('input[type="reset"]').on('click', function() {
var $form = $(this).parents('.searchForm');
$form.find('textarea, :text, select').val('').end().find(':checked').prop('checked', false);
$form.find('select').eq(1).prop('disabled', true);
});
geocoder = new google.maps.Geocoder();
// from other page
if (location.search.indexOf('&') > 0) {
query = location.search.split('&');
query = query[0].split('=');
} else {
query = location.search.split('=');
}
if (query[0] == '?place') {
searchWord = decodeURI(query[1]);
$searchWordMore.val(searchWord);
prefWord = '';
cityWord = '';
searchStationQuery();
}
$(window).on('resize', function() {
if ($('.mapPadding01').length) $('.mapPadding01').height($('.gm-style-iw table tr').eq(0).outerHeight());
});
$(document).ready(function(){
var url = new URL(window.location.href);
var params = url.searchParams;
if( params.has('key') ) {
if( searchWord01 != "" ){
placeSearchFlg = 0;
searchWord = $searchWord01.val();
prefWord = '';
cityWord = '';
searchStationQuery();
}
}
});
});
// location name set
function placeNameSet(results) {
var pref = '';
var city = '';
var state = '';
for (var i = results.address_components.length - 1; i >= 0; i--) {
var resultLen = results.address_components[i].types.length;
for (var j = 0; j < resultLen; j++) {
if (results.address_components[i].types[j] == 'administrative_area_level_1') {
pref = results.address_components[i].short_name;
} else if (results.address_components[i].types[j] == 'locality') {
city += results.address_components[i].short_name;
} else if (results.address_components[i].types[j] == 'sublocality_level_1') {
state = results.address_components[i].short_name;
}
}
}
return [pref, city, state];
}
function searchGps() {
if (navigator.geolocation) {
var option = {
enableHighAccuracy: true,
timeout: 30000,
maximumAge: 600000
};
navigator.geolocation.getCurrentPosition(
function(position) {
searchWord = '';
pref = '';
city = '';
prefWord = '';
cityWord = '';
var $form = $('#detailSearch');
$form.find('textarea, :text, select').val('').end().find(':checked').prop('checked', false);
$form.find('select').eq(1).prop('disabled', true);
if ($result.is(':hidden')) searchFormat();
if(mapFlg == 0) {
mapFormat();
mapFlg = 1;
}
lat = position.coords.latitude;
lng = position.coords.longitude;
latlng = new google.maps.LatLng(lat, lng);
map.setCenter(latlng);
if (currentMarker != null) currentMarker.setMap(null);
currentMarker = new google.maps.Marker({
position: latlng,
map: map,
animation: google.maps.Animation.BOUNCE
});
geocoder.geocode({
'latLng': latlng
}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
var codedAddress = '';
[pref, city, state] = placeNameSet(results[0]);
var formatAddress = results[0].formatted_address;
if (formatAddress.indexOf('日本') >= 0) {
formatAddress = formatAddress.replace(/^日本, 〒[0-9]{3}-[0-4]{4} /, '');
$searchWordMore.val(formatAddress);
}
$pref.val('');
window.setTimeout(function() {
action = 'location';
searchStationQuery();
}, 1);
}
});
},
function(error) {
alert('現在地の取得に失敗しました。(' + error.code + ':' + error.message + ')');
return false;
}
);
} else {
alert('ご利用のブラウザではGPSによる現在地の取得に対応していません。');
return false;
}
}
// search station
function searchStation() {
$.ajax({
url: '/st_search/station_search.php' + searchQuery,
dataType: 'json',
cache: false,
async: false
})
.then(
// success
function(data) {
if (data.rcd == '1') {
alert(data.msg);
} else {
setTimeout(function(){
$('#mapLoadingLayer').hide();
}, 1000);
searchResult = data.result;
if (action != 'map' && $map.is(':visible')) {
zoom = (searchResult != 1500) ? 14 : 15;
map.setZoom(zoom);
}
hitStation = new Array();
if (searchResult != 0) {
var html = '';
$stationList.empty();
carShapeFlg = 0;
carTypeFlg = 0;
page = 1;
resultStation = data.station;
stationCount = resultStation.length;
for(var i = 0; i < stationCount; i++){
if (i < pageLimit) {
html += generateStationComponent(resultStation[i]);
}
hitStation.push(resultStation[i]['station_id']);
}
$stationList.append(html);
pagerCreate(1);
if (searchResult == 3000) {
$resultLead.html(noStationMsg01).show();
} else {
//$resultLead.hide();
$resultLead.html(noStationMsg00).show();
}
$page.show();
$stationZero.hide();
$stationList.show();
$pageTotal.text(stationCount);
$pageNum.text(stationCountTxt(page));
} else {
if($map.is(':visible')) {
$resultLead.html(noStationMsg03).show();
$('input[name="st_coordinates"]').val(lat +'/'+ lng);
} else {
$resultLead.html(noStationMsg02).show();
$('input[name="st_coordinates"]').val('');
}
$('input[name="st_keywords"]').val(requestSearch);
$page.hide();
$pagerWrap.hide();
$stationZero.show();
$stationList.hide();
}
if ($map.is(':visible')) {
putAllMarkers();
}
if ($map.is(':visible')) {
setTimeout(function () {
if (action != 'map' && $map.is(':visible')) {
zoom = (searchResult != 1500) ? 14 : 15;
map.setZoom(zoom);
}
var dragOptions = {
draggable: true
};
map.setOptions(dragOptions);
centerListener = google.maps.event.addListener(map, 'dragend', function() {
if ($detailSearch.is(':visible')) {
$detailSearch.prev().removeClass(curClass);
$detailSearch.hide();
}
$('#mapLoadingLayer').show();
google.maps.event.removeListener(centerListener);
var dragOptions = {
draggable: false
};
map.setOptions(dragOptions);
window.setTimeout(function() {
action = 'map';
searchStationQuery();
}, 1);
});
}, 600);
}
var gtmLocation = null;
var gtmMaker = '';
var gtmKeyword = null;
var gtmPref = null;
var gtmCity = null;
if (action != 'map') {
type_car = (gtmCarFlg == 1) ? ON : OFF;
if (action == 'location') {
type_location = ON;
gtmLocation = city + state;
} else {
type_location = OFF;
}
if (searchWord != '') {
type_keyword = ON;
gtmKeyword = searchWord;
} else {
type_keyword = OFF;
}
if (searchWord == '' && prefWord != '') {
type_city = ON;
gtmPref = prefWord;
if (cityWord != '') {
gtmCity = cityWord;
}
} else {
type_city = OFF;
}
if(makerArr.length) {
for(var i = 0; i < makerArr.length; i++) {
gtmMaker += (i == 0) ? makerArrTxt[makerArr[i]] : ',' + makerArrTxt[makerArr[i]];
}
} else {
gtmMaker = null;
}
var gtmResult = (searchResult == 0 || (searchWord != '' || prefWord != '') || action == 'location') ? searchResult: null;
var dataLayer = dataLayer || [];
window.dataLayer.push({
"event": "station_search",
"type_keyword": type_keyword,
"type_city": type_city,
"type_car": type_car,
"type_location": type_location,
"keyword": gtmKeyword,
"prefecture": gtmPref,
"city": gtmCity,
"location": gtmLocation,
"maker": gtmMaker,
"model": searchCarsGtm['car_type'],
"type": searchCarsGtm['car_shape'],
"equipment": searchCarsGtm['car_opt'],
"price": searchCarsGtm['car_grade'],
"other": searchCarsGtm['car_cp'],
"result": gtmResult
});
}
}
},
// error
function (jqXHR, textStatus, errorThrown) {
alert('通信に失敗しました。('.jqXHR.status+':'+jqXHR.statusText+')');
});
}
// ステーション全てのマーカー情報取得
function loadStationData() {
$.ajax({
url: '/st_search/station_map.json',
cache: false
})
.then(
// success
function(data) {
stationdata = data;
stationdataLen = stationdata.length;
},
// error
function (jqXHR, textStatus, errorThrown) {
alert('通信に失敗しました。('.jqXHR.status+':'+jqXHR.statusText+')');
});
}
// 検索用リスト取得
function loadSearchData() {
$.ajax({
url: '/st_search/station_search_item.json',
cache: false
})
.then(
// success
function(data, status, xhr) {
if(queryMonth) {
var month = queryMonth;
} else {
var month = new Date(xhr.getResponseHeader('Date')).getMonth()+1;
}
//car_shape
var dataShape = data.car_shape;
var carShapeLen = dataShape.length;
for (var i = 0; i < carShapeLen; i++) {
var shape = dataShape[i];
var shapeVal = dataShape[i].value;
carshapedata[shapeVal] = new Array();
carshapedata[shapeVal]['name'] = shape.name;
carshapedata[shapeVal]['cnt'] = shape.cnt;
}
setCarShapeList($('.carShapeList'), carshapedata, 'shape', 1)
//car_grade
var dataGrade = data.car_grade;
var dataGradeLen = dataGrade.length;
for (var i = 0; i < dataGradeLen; i++) {
var grade = dataGrade[i];
cargradedata[grade.value] = grade.name;
}
$('.carGradeList').each(function(idx) {
setSearchCheckList($(this), cargradedata, 'grade', idx)
});
//car_type
var dataType = data.car_type;
var dataTypeLen = dataType.length;
for (var i = 0; i < dataTypeLen; i++) {
var typeMaker = dataType[i];
var companyName = typeMaker.name;
var typeMakerVal = typeMaker.value;
var typeMakerValLen = typeMakerVal.length;
cartypedata[companyName] = new Array();
for (var j = 0; j < typeMakerValLen; j++) {
var typeCar = typeMakerVal[j];
cartypedata[companyName][typeCar.car_type_id] = new Array();
cartypedata[companyName][typeCar.car_type_id] = typeCar.car_type_name;
}
}
$('.carTypeList').each(function(idx) {
setCarTypeList($(this), cartypedata, 'name', idx)
});
//car_opt
var dataOpt = data.car_opt;
var dataOptLen = dataOpt.length;
for (var i = 0; i < dataOptLen; i++) {
var opt = dataOpt[i];
caroptdata[opt.value] = opt.name;
}
$('.carOptList').each(function(idx) {
setSearchCheckList($(this), caroptdata, 'opt', idx)
});
//car_cp
var dataCp = data.station_cp;
var dataCpLen = dataCp.length;
for (var i = 0; i < dataCpLen; i++) {
var cp = dataCp[i];
carcpdata[cp.value] = cp.name;
}
$('.carCpList').each(function(idx) {
setSearchCheckList($(this), carcpdata, 'cp', idx)
});
//pref
var dataPref = data.pref;
var dataPrefLen = dataPref.length;
for (var i = 0; i < dataPrefLen; i++) {
var prefArr = dataPref[i];
var prefName = prefArr.name;
prefdata[prefName] = new Array();
for (key in prefArr.city) {
prefdata[prefName][key] = new Array();
prefdata[prefName][key] = prefArr.city[key];
}
}
setPrefOption();
$('.city').each(function() {
setCityOption('', $(this));
});
$('#pref01').val('東京都');
setCityOption('東京都', $city01);
$('#city01').val('渋谷区');
},
// error
function (jqXHR, textStatus, errorThrown) {
alert('通信に失敗しました。('.jqXHR.status+':'+jqXHR.statusText+')');
});
}
// function to half width
function toHalfWidth(value) {
return value.replace(/ /g, " ").replace(/[A-Za-z0-9]/g, function(s) {
return String.fromCharCode(s.charCodeAt(0) - 0xFEE0);
});
}
// disp page number count
function stationCountTxt(page) {
return ((page - 1) * pageLimit + 1) + '~' + (page * pageLimit > stationCount ? stationCount : page * pageLimit);
}
// maker check
function makerSelect(target) {
target.find('.makerName input').each(function() {
var _this = $(this);
var maxLen = $(this).parent().next().find('input').length;
//all check
$(this).on('click', function() {
$(this).parent().next().find('input').prop('checked', this.checked);
});
//check
$(this).parent().next().find('input').on('click', function() {
if (_this.parent().next().find('input:checked').length == maxLen) {
_this.prop('checked', 'checked');
} else {
_this.prop('checked', false);
}
});
});
}
// disp car_type
function setCarTypeList(target, data, name, id) {
var listHttml = '\n';
var i = 1;
makerArrTxt = new Array();
for (key1 in data) {
var j = 1;
makerArrTxt.push(key1);
listHttml += '
' + stationName + ' | |