function ZdcEmapStorageNList (htmlStr) { var fafilter = document.formList.fafilter.value, faflg = document.formList.faflg.value, mefilter = document.formList.mefilter.value, lat = document.formList.lat.value, lon = document.formList.lon.value; sroute = document.formList.sroute.value; var me = ZdcStorageShop; var keyFa = me.keyFav; var keyMemo = me.keyMemo; var storageFa = me.getItem(keyFa); var storageMe = me.getItem(keyMemo); if (faflg == 1) displayFavoriteBoxInfo(faflg); $('#ZdcEmapSearchNShopList').append(htmlStr); //create temp element. // favorite screen. if (faflg == 1) { addMemoList(storageMe); //add memo to item. ZdcEmapSortFavNList(storageFa); // filter favorite list screen. sortable(faflg); // drag drop favorite screen showList(); // show 10 item and load more } // when search route else if (sroute == 1) { addAddressCenter(lat, lon, sroute); // add address center. $('.ml-block-info__title').html(titleSearchRoute); // show tittle when search route var center = new ZDC.LatLon(ZDC.msTodeg(lat),ZDC.msTodeg(lon)); ZdcNListFilterStorage(fafilter, mefilter, storageFa, storageMe); // filter favorite list screen. filterRoute(center); //filter route. if ($('.ml-list').find('.ml-list-item').length > 0) { addTimeMoveRoute(lat, lon, true, function() { // get distance and time. addMemoList(storageMe); //add memo to item. changeColorFavItem(storageFa); // change color favorite item. showList(); // show 10 item and load more. }); } else { showList(); // show 10 item and load more. } } // when not search route else { $('.ml-block-info__title').html(titleSearchNRoute); // show tittle when search route addAddressCenter(lat, lon, sroute); // add address center. addTimeMoveNRoute(); // get distance and time. addMemoList(storageMe); //add memo to item. changeColorFavItem(storageFa); // change color favorite item. ZdcNListFilterStorage(fafilter, mefilter, storageFa, storageMe); // filter favorite list screen. showList(); // show 10 item and load more. } } function displayFavoriteBoxInfo (flg) { if (flg == 1) { $("#fbox").css('display', 'block'); } else { $("#nbox").css('display', 'block'); } } //open filtering modal at map screen. function custOpenCondMap() { var dlg = document.getElementById("cust_cond_dlg"); if (!dlg) return; dlg.style.display = "block"; window.history.pushState('popup-open', null, ''); window.onpopstate = function(event) { custCloseCondMap(); }; disableScrollBody(); } //close filtering modal at map screen. function custCloseCondMap() { var dlg = document.getElementById("cust_cond_dlg"); if (!dlg) return; var form = document.formCond; if (form) form.reset(); dlg.style.display = "none"; enableScrollBody(); onchangePrivateType(); } //Re-search list screen by conditions filter. function custCondReSearchMap() { var e = document.getElementById("cust_research_url"); if (!e) return; var formCond = document.formCond; if (!formCond) return; hknUpdateConditionForm(formCond, true); var formMapTop = document.formMapTop; var formList = document.formList; if (formMapTop) custCondCheck(formCond, formMapTop); if (formList) custCondCheck(formCond, formList); var cond = ZdcEmapGetCondParm(true); cond += hknGetCondCustom(formCond); var url = e.value+cond; window.location.href = url; } //Update hidden form by filter cond form. function custCondCheck(fCond, form) { for (var i = 0; i < fCond.elements.length - 1; i++) { var obj = fCond.elements[i]; if (obj.type == "checkbox") { if (form){ if(form.elements[i].name == obj.name){ if (obj.checked) { form.elements[i].value = obj.value; }else{ form.elements[i].value = ""; } } } } } } //get condition filter storage favirote or memo. function ZdcEmapGetCondStorage (item, query, esc) { var chk = item; var condparm = ''; if (chk) { if ((chk.type == "checkbox" && chk.checked) || (chk.type == "hidden" && chk.value != "")) { condparm += ("&" + query + '='); if (esc) { condparm += encodeURIComponent(chk.value); } else { condparm += chk.value; } } } return condparm; } // add address to item. function addAddressCenter(lat, lon, sroute) { if (lat && lon) { ZDC.Search.getAddrByLatLon({latlons: [new ZDC.LatLon(ZDC.msTodeg(lat),ZDC.msTodeg(lon))]},function (status, res) { if (status['code'] == '000' && res[0] && "address" in res[0]) { if (sroute == 1) { $('.ml-block-info__address').html('ルート中心点' + ': ' + res[0]['address']['text']); // $('.ml-block-info__address').css('font-size', '11px') } else{ $('.ml-block-info__address').html('地図中心点' + ': ' + res[0]['address']['text']); // $('.ml-block-info__address').css('font-size', '11px') } } displayFavoriteBoxInfo(0); }); } else{ return false; } } // add time move and sort when search route function addTimeMoveRoute(lat, lon, sroute, callback) { if (lat && lon) { var center = new ZDC.LatLon(ZDC.msTodeg(lat),ZDC.msTodeg(lon)); var len = $('.ml-list').find('.ml-list-item').length; var count = 0; $('.ml-list').find('.ml-list-item').each(function(key, val) { var id = $(this).data('id'); var latHoikuen = $(this).data('lat'); var lonHoikuen = $(this).data('lon'); var hoikuen = new ZDC.LatLon(ZDC.msTodeg(latHoikuen),ZDC.msTodeg(lonHoikuen)); var option = { from: center, to: hoikuen, searchtype: 'dist', maxdist: 10, } ZDC.Search.getRouteByWalk(option, function(status,res){ count++; if (status['code'] == '000') { var dist = res['route']['distance']; var html = Math.round(dist) + 'm' + '(徒歩'+Math.round(dist/(hknSpeedWalk * 1000 / 60 ))+'分/自転車'+Math.round(dist/(hknSpeedBike*1000/60))+'分)'; var nlink = typeof res['route']['link'] == "undefined" ? 0 : res['route']['link'].length; $('.ml-list-item__distance[data-id="'+id+'"]').html(html); $('.ml-list-item[data-id="'+id+'"]').attr("data-dist", dist); $('.ml-list-item[data-id="'+id+'"]').attr("data-nlink", nlink); } //get all data route. if (count == len) { var list = $('.ml-list > .ml-list-item').get(); list.sort(function (a, b) { a = Math.round ($(a).attr('data-dist')); b = Math.round ($(b).attr('data-dist')); if (a == b) return 0; return (a > b) ? 1 : -1; }); $('.ml-list').html(''); var rcount = 0; var max = parseInt(searchRouteMax) || 5; for (var el in list) { if (sroute) { if (typeof $(list[el]).attr('data-dist') == "undefined" || typeof $(list[el]).attr('data-nlink') == 0) { //check item can not draw route. continue; } rcount++; if (rcount > max) { //check max route. break; } } $('.ml-list').append(list[el]); } if (typeof callback == "function") { callback(); } } }); }); } else{ return false; } } // add time move and sort when not search route function addTimeMoveNRoute() { $('.ml-list').find('.ml-list-item').each(function(key, val) { var dist = $(this).data('distnr'); var html = Math.round(dist) + 'm' + '(徒歩'+Math.round(dist/(hknSpeedWalk * 1000 / 60 ))+'分/自転車'+Math.round(dist/(hknSpeedBike*1000/60))+'分)'; $(this).find('.ml-list-item__distance').html(html); }); } //add memo to list screen function addMemoList(storageMe){ if (storageMe) { $('.ml-list').find('.ml-list-item').each(function(key, val) { var id = $(this).data('id'); for(i = 0; i < storageMe.length; i++){ if (storageMe[i]['id'] == id) { var memo = storageMe[i]['data'][0]['content']; $(this).find('.ml-list-item__memo').html(memo.replace(/\n/g, "
")); } } }); } else{ return false; } } // filter favorite list screen function ZdcEmapSortFavNList(storageFa) { var listItem = []; if (storageFa) { for(i = 0; i < storageFa.length; i++){ $('.ml-list').find('.ml-list-item').each(function(key, val) { var id = $(this).data('id'); if (id == storageFa[i]['id']) { listItem.push($(this).get(0).outerHTML); } }); } } $('.ml-list').html(listItem.join('')); //update list. } // drag drop favorite screen function sortable(faflg) { if (faflg == 1) { $('.ml-text-center').show(); $('.ml-landing-page p').show(); $('.ml-list').toggleClass('ml-list__move'); // use sortable to drag drop favorite hoikuen. $("#sortable").sortable({ axis: 'y', scroll : false, handle: '.ml-list-ic__move', // get array before drag drop. /* start: function(event,ui) { var oldArray = $(this).sortable('toArray',{attribute: 'data-id'}); $(this).attr('data-prearray', oldArray); }, */ // get 2 id is swap. update: function(event, ui) { /* var oldArray = $(this).attr('data-prearray').split(','); for(i = 0; i < newArray.length; i++){ if (oldArray[i] != newArray[i]) { oldId = oldArray[i]; newId = newArray[i]; break; } } */ var newArray = $(this).sortable('toArray',{attribute: 'data-id'}); ZdcStorageShop.sort(newArray); } }); $( "#sortable" ).disableSelection(); } else{ $('.ml-text-left').show(); } } function submitFormFilter() { $(".z_map_btn_locroute").submit(); // Submit the form filter } //support transit form list to map. function transit2map () { $('.z_map_btn_nlist').submit(); // Submit the form map } //support transit to favorite. function transit2favorite (url) { url = url || ""; var params = '&' + serialize(document.formMapList) url += params; window.location.href = url; } function transit2detail(url) { var nlist_url = serialize(document.formMapList) //replace state of history session for back from to detail. // history.replaceState({screen: 2}, "NLIST", nlist_url); window.location.href = url; } //load more. function showList() { var total = $(".ml-list-item").length; if (total == 0) { var html = '

'+msgEmptyNList+'

'; $('#ZdcEmapSearchNShopList').html(html); return; } if (total > hknstep) { $('.page-num').html('11件〜'); $('.pagination').css('display', 'block'); } $(".ml-list .ml-list-item").slice(0, hknstep).addClass('ml-show'); $(".ml-list .ml-list-item").slice(0, hknstep).removeClass('ml-hide'); $(document).delegate("#loadMore","click", function (e) { e.preventDefault(); $(".ml-hide").slice(0, hknstep).addClass('ml-show'); $(".ml-hide").slice(0, hknstep).removeClass('ml-hide'); var cur = $(".ml-show").length + 1; $('.page-num').html(cur + '件〜'); if ($(".ml-hide").length == 0) { $('.pagination').css('display', 'none'); } }); } // change color favorite item function changeColorFavItem(storageFa) { if (storageFa) { $('.ml-list').find('.ml-list-item').each(function(key, val) { var id = $(this).data('id'); for(i = 0; i < storageFa.length; i++){ if (storageFa[i]['id'] == id) { $(this).css("background-color", "rgba(255, 255, 0, 0.5)"); } } }); } else { return false; } } function ZdcNListFilterStorage (fafilter, mefilter, storageFa, storageMe) { var listKid = []; var listItemId = []; $(".ml-list .ml-list-item").each(function () { listItemId.push($(this).data('id').toString()); }); if (listItemId.length == 0) return; if (fafilter == 1 && storageFa && mefilter == 0) { for (var f in storageFa) { var kid = storageFa[f].id.toString(); if (listItemId.indexOf(kid) >= 0 && listKid.indexOf(kid) < 0) { listKid.push(kid); } } } if (mefilter == 1 && storageMe && fafilter == 0) { for (var m in storageMe) { var kid = storageMe[m].id.toString(); if (listItemId.indexOf(kid) >= 0 && listKid.indexOf(kid) < 0) { listKid.push(kid); } } } if (mefilter == 1 && storageMe && fafilter == 1 && storageFa) { for (var m in storageFa) { for (var n in storageMe){ if (storageFa[m].id.toString() == storageMe[n].id.toString()) { var kid = storageFa[m].id.toString(); if (listItemId.indexOf(kid) >= 0 && listKid.indexOf(kid) < 0) { listKid.push(kid); } } } } } if (mefilter == 1 || fafilter == 1) { if (listKid.length == 0) { $(".ml-list .ml-list-item").remove(); return false; } else { $(".ml-list .ml-list-item").each(function () { var itemid = $(this).data('id').toString(); if (listKid.indexOf(itemid) < 0) { $(this).remove(); } }) } } } //filter item route by radius. function filterRoute (center) { if ($('.ml-list').find('.ml-list-item').length == 0) return; //search route option. var radius = parseInt(searchRouteRad) || 3000; var max = parseInt(searchRouteMax) || 5; $('.ml-list').find('.ml-list-item').each(function(key, val) { var latHoikuen = $(this).data('lat'); var lonHoikuen = $(this).data('lon'); var hoikuen = new ZDC.LatLon(ZDC.msTodeg(latHoikuen),ZDC.msTodeg(lonHoikuen)); var rad = getLatLonToDistance(center, hoikuen); if (rad > radius) { $(this).remove(); } else { $(this).attr('data-rad', rad); } }) } //support calculate distance between 2 point //refer to moyori library. function getLatLonToDistance (p1, p2) { if (p1['lat'] == p2['lat'] && p1['lon'] == p2['lon']) return 0; var pi = Math.PI / 180; var R = 6370000; var a = R * Math.cos(p1['lat'] * pi) * Math.cos(p1['lon'] * pi); var b = R * Math.cos(p1['lat'] * pi) * Math.sin(p1['lon'] * pi); var c = R * Math.sin(p1['lat'] * pi); var d = R * Math.cos(p2['lat'] * pi) * Math.cos(p2['lon'] * pi); var e = R * Math.cos(p2['lat'] * pi) * Math.sin(p2['lon'] * pi); var f = R * Math.sin(p2['lat'] * pi); var g = a * d + b * e + c * f; var h = Math.acos(g / (R * R)); return Math.round(R * h * 100) / 100; };