/* * 2007-2014 PrestaShop * * NOTICE OF LICENSE * * This source file is subject to the Academic Free License (AFL 3.0) * that is bundled with this package in the file LICENSE.txt. * It is also available through the world-wide-web at this URL: * http://opensource.org/licenses/afl-3.0.php * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to license@prestashop.com so we can send you a copy immediately. * * DISCLAIMER * * Do not edit or add to this file if you wish to upgrade PrestaShop to newer * versions in the future. If you wish to customize PrestaShop for your * needs please refer to http://www.prestashop.com for more information. * * @author PrestaShop SA * @copyright 2007-2014 PrestaShop SA * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) * International Registered Trademark & Property of PrestaShop SA */ $(document).ready(function(){ map = new google.maps.Map(document.getElementById('map'), { center: new google.maps.LatLng(defaultLat, defaultLong), zoom: 10, mapTypeId: 'roadmap', mapTypeControlOptions: {style: google.maps.MapTypeControlStyle.DROPDOWN_MENU} }); infoWindow = new google.maps.InfoWindow(); locationSelect = document.getElementById('locationSelect'); locationSelect.onchange = function() { var markerNum = locationSelect.options[locationSelect.selectedIndex].value; if (markerNum !== 'none') google.maps.event.trigger(markers[markerNum], 'click'); }; $('#addressInput').keypress(function(e) { code = e.keyCode ? e.keyCode : e.which; if(code.toString() === 13) searchLocations(); }); $(document).on('click', 'input[name=location]', function(e){ e.preventDefault(); $(this).val(''); }); $(document).on('click', 'button[name=search_locations]', function(e){ e.preventDefault(); searchLocations(); }); initMarkers(); }); function initMarkers() { searchUrl += '?ajax=1&all=1'; downloadUrl(searchUrl, function(data) { var xml = parseXml(data); var markerNodes = xml.documentElement.getElementsByTagName('marker'); var bounds = new google.maps.LatLngBounds(); for (var i = 0; i < markerNodes.length; i++) { var name = markerNodes[i].getAttribute('name'); var address = markerNodes[i].getAttribute('address'); var addressNoHtml = markerNodes[i].getAttribute('addressNoHtml'); var other = markerNodes[i].getAttribute('other'); var id_store = markerNodes[i].getAttribute('id_store'); var has_store_picture = markerNodes[i].getAttribute('has_store_picture'); var latlng = new google.maps.LatLng( parseFloat(markerNodes[i].getAttribute('lat')), parseFloat(markerNodes[i].getAttribute('lng'))); createMarker(latlng, name, address, other, id_store, has_store_picture); bounds.extend(latlng); } map.fitBounds(bounds); var zoomOverride = map.getZoom(); if(zoomOverride > 10) zoomOverride = 10; map.setZoom(zoomOverride); }); } function searchLocations() { $('#stores_loader').show(); var address = document.getElementById('addressInput').value; var geocoder = new google.maps.Geocoder(); geocoder.geocode({address: address}, function(results, status) { if (status === google.maps.GeocoderStatus.OK) searchLocationsNear(results[0].geometry.location); else { if (!!$.prototype.fancybox && isCleanHtml(address)) $.fancybox.open([ { type: 'inline', autoScale: true, minHeight: 30, content: '

' + address + ' ' + translation_6 + '

' } ], { padding: 0 }); else alert(address + ' ' + translation_6); } $('#stores_loader').hide(); }); } function clearLocations(n) { infoWindow.close(); for (var i = 0; i < markers.length; i++) markers[i].setMap(null); markers.length = 0; locationSelect.innerHTML = ''; var option = document.createElement('option'); option.value = 'none'; if (!n) option.innerHTML = translation_1; else { if (n === 1) option.innerHTML = '1'+' '+translation_2; else option.innerHTML = n+' '+translation_3; } locationSelect.appendChild(option); $("select#locationSelect").uniform(); $('#stores-table tr.node').remove(); } function searchLocationsNear(center) { var radius = document.getElementById('radiusSelect').value; var searchUrl = baseUri+'?controller=stores&ajax=1&latitude=' + center.lat() + '&longitude=' + center.lng() + '&radius=' + radius; downloadUrl(searchUrl, function(data) { var xml = parseXml(data); var markerNodes = xml.documentElement.getElementsByTagName('marker'); var bounds = new google.maps.LatLngBounds(); clearLocations(markerNodes.length); $('table#stores-table').find('tbody tr').remove(); for (var i = 0; i < markerNodes.length; i++) { var name = markerNodes[i].getAttribute('name'); var address = markerNodes[i].getAttribute('address'); var addressNoHtml = markerNodes[i].getAttribute('addressNoHtml'); var other = markerNodes[i].getAttribute('other'); var distance = parseFloat(markerNodes[i].getAttribute('distance')); var id_store = parseFloat(markerNodes[i].getAttribute('id_store')); var phone = markerNodes[i].getAttribute('phone'); var has_store_picture = markerNodes[i].getAttribute('has_store_picture'); var latlng = new google.maps.LatLng( parseFloat(markerNodes[i].getAttribute('lat')), parseFloat(markerNodes[i].getAttribute('lng'))); createOption(name, distance, i); createMarker(latlng, name, address, other, id_store, has_store_picture); bounds.extend(latlng); address = address.replace(phone, ''); $('table#stores-table').find('tbody').append(''+parseInt(i + 1)+''+(has_store_picture == 1 ? '' : '')+''+name+''+address+(phone !== '' ? ''+translation_4+' '+phone : '')+''+distance+' '+distance_unit+''); $('#stores-table').show(); } if (markerNodes.length) { map.fitBounds(bounds); var listener = google.maps.event.addListener(map, "idle", function() { if (map.getZoom() > 13) map.setZoom(13); google.maps.event.removeListener(listener); }); } locationSelect.style.visibility = 'visible'; $(locationSelect).parent().parent().addClass('active').show(); locationSelect.onchange = function() { var markerNum = locationSelect.options[locationSelect.selectedIndex].value; google.maps.event.trigger(markers[markerNum], 'click'); }; }); } function createMarker(latlng, name, address, other, id_store, has_store_picture) { var html = ''+name+'
'+address+(has_store_picture === 1 ? '

' : '')+other+'
'+translation_5+'<\/a>'; var image = new google.maps.MarkerImage(img_ps_dir+logo_store); var marker = ''; if (hasStoreIcon) marker = new google.maps.Marker({ map: map, icon: image, position: latlng }); else marker = new google.maps.Marker({ map: map, position: latlng }); google.maps.event.addListener(marker, 'click', function() { infoWindow.setContent(html); infoWindow.open(map, marker); }); markers.push(marker); } function createOption(name, distance, num) { var option = document.createElement('option'); option.value = num; option.innerHTML = name+' ('+distance.toFixed(1)+' '+distance_unit+')'; locationSelect.appendChild(option); } function downloadUrl(url, callback) { var request = window.ActiveXObject ? new ActiveXObject('Microsoft.XMLHTTP') : new XMLHttpRequest(); request.onreadystatechange = function() { if (request.readyState === 4) { request.onreadystatechange = doNothing; callback(request.responseText, request.status); } }; request.open('GET', url, true); request.send(null); } function parseXml(str) { if (window.ActiveXObject) { var doc = new ActiveXObject('Microsoft.XMLDOM'); doc.loadXML(str); return doc; } else if (window.DOMParser) return (new DOMParser()).parseFromString(str, 'text/xml'); } function doNothing() { }