').html('Loading Results'))
.append(jQuery('
![]()
').attr('src','https://cdn-p300.americantowns.com/img/progress-bar.gif'));
google.maps.event.addListener(infowindow, 'domready', function(){
jQuery(".gm-style-iw").next("div").addClass('icon-close');
jQuery(".gm-style-iw").next("div").css({'font-size':'x-large', 'width':'auto', 'height':'auto'});
});
am_next.click(function(){navigate('next');});
am_prev.click(function(){navigate('back');});
function navigate(direction){
direction = direction ? direction : 'next';
if(direction == 'next') {
if(current_page == last_page) return;
am_next.html('Loading...');
pg = current_page+1;
} else {
if(current_page <= 1) return;
am_prev.html('Loading...');
pg = current_page-1;
}
if(pages[pg]) {
am_list.html(populate_am_list(pages[pg]));
if(direction == 'next') am_next.html('NEXT'); else am_prev.html('BACK');
current_page = pg;
check_am_nav();
}
else {
jQuery.ajax({
type: "GET",
dataType: 'json',
data:{"page":pg,"options":options},
url: "/ajax/places/navigate/"
}).done(function( msg ) {
morepages = msg;
if(direction == 'next') am_next.html('NEXT'); else am_prev.html('BACK');
if(msg.length) {
pages[pg] = msg;
am_list.html(populate_am_list(pages[pg]));
current_page = pg;
}
check_am_nav();
});
}
}
function check_am_nav() {
if(parent.find("#localmap_locations").height() >= 560)
jQuery("#map_canvas").css({"height":parent.find("#localmap_locations").height()});
if(current_page <= 1){
am_prev.addClass("grey");
am_prev_arrow.addClass("grey");
}else{
am_prev.removeClass("grey");
am_prev_arrow.removeClass("grey");
}
if (current_page == last_page){
am_next.addClass("grey");
am_next_arrow.addClass("grey");
}else {
am_next.removeClass("grey");
am_next_arrow.removeClass("grey");
}
}
function populate_am_list(data) {
var list = jQuery('
');
var new_places = {};
am_list.html('');
jQuery.each(data, function(i,area) {
var row = '
';
new_places[i] = {'key':area.key,'id':area.id,'name':area.name,'address':area.address,'latitude':area.latitude,'longitude':area.longitude,'sef_tail':area.sef_tail};
am_list.append(row);
});
places = new_places;
load_places();
}
function load_places() {
setTimeout( function(){ //wait a bit for the listing to fully load before we get the height
$('.map_canvas').css('height',am_list.height());
google.maps.event.trigger(map, 'resize');
bounds = new google.maps.LatLngBounds();
while (markers.length > 0) {
var marker = markers.pop();
marker.setMap(null);
}
var first,last;
for (var i in places) {
var r = places[i];
var index = (parseInt(r['key'])).toString();
if(first==null) first = index;
last = index;
if(r.latitude && r.longitude) {
places[i].latlng = new google.maps.LatLng(places[i].latitude, places[i].longitude);
set_marker (i);
}
}
bounds.extend(new google.maps.LatLng(parent.data('lat'), parent.data('lng')));
map.fitBounds(bounds);
}, 500);
}
function set_marker(i) {
var r = places[i];
var index = (parseInt(r['key'])).toString();
var index_str = (index.length < 2) ? '0' + index : index;
var marker = new google.maps.Marker({
position: new google.maps.LatLng(r.latitude, r.longitude),
map: map,
title: r['name'],
index: index,
icon: basecdn+'/img/marker_pins/' + index + '.png',
html: '
'+r['name']+'
'+
//'

'+
'
'+r['address']+'
'+
'
'
});
am_list.on('mouseenter', 'div#list_'+index, function(){
infowindow.setContent(marker.html);
if (infowindow) infowindow.close();
infowindow.open(map,marker);
marker.setAnimation(google.maps.Animation.BOUNCE);
});
am_list.on('mouseleave', 'div#list_'+index, function(){
marker.setAnimation(null);
});
google.maps.event.addListener(marker, 'click', function() {
infowindow.setContent(this.html);
if (infowindow) infowindow.close();
infowindow.open(map,this);
});
google.maps.event.addListener(marker, "mouseover", function() {
el = parent.find('div#localmap_locations div#list_'+this.index);
el.css("background-color","#dee9e9");
});
google.maps.event.addListener(marker, "mouseout", function() {
el = parent.find('div#localmap_locations div#list_'+this.index);
el.css("background-color","");
});
markers.push(marker);
bounds.extend(new google.maps.LatLng(r.latitude, r.longitude));
//map.fitBounds(bounds);
}
function fromLatLngToPixel (position) {
var scale = Math.pow(2, map.getZoom());
var proj = map.getProjection();
var bounds = map.getBounds();
var nw = proj.fromLatLngToPoint(
new google.maps.LatLng(
bounds.getNorthEast().lat(),
bounds.getSouthWest().lng()
));
var point = proj.fromLatLngToPoint(position);
return new google.maps.Point(
Math.floor((point.x - nw.x) * scale),
Math.floor((point.y - nw.y) * scale));
}
function fromPixelToLatLng (pixel) {
var scale = Math.pow(2, map.getZoom());
var proj = map.getProjection();
var bounds = map.getBounds();
var nw = proj.fromLatLngToPoint(
new google.maps.LatLng(
bounds.getNorthEast().lat(),
bounds.getSouthWest().lng()
));
var point = new google.maps.Point();
point.x = pixel.x / scale + nw.x;
point.y = pixel.y / scale + nw.y;
return proj.fromPointToLatLng(point);
}
var mapOptions = {
center: new google.maps.LatLng(places[0]['latitude'], places[0]['longitude'])
};
map = new google.maps.Map(parent.find(".map_canvas")[0], mapOptions);
places = pages[1];
load_places();
}); /* map module places */
/* ============================================
* geo search functions
* ============================================ */
function trysearchbygeo(el,getlocation) {
var model = el.data('object') ? el.data('object') : 'places';
// el.data('hostname', getCookie("cs"));
// el.data('type','geo-search');
// el.data('page','1');
// el.data('show-image', el.data('show-image')=='yes' ? 'yes' : 'no');
// el.data('show-more', el.data('show-more') ? 'yes' : 'no');
// el.data('object', el.data('object') ? el.data('object') : 'places');
// el.data('show', el.data('show') ? el.data('show') : 5);
// el.data('min', el.data('min') ? el.data('min') : 5);
var searchdata = {data:el.data('options'), url:'/ajax/'+model+'/index/'};
if(getlocation) {
if (navigator.geolocation) {
var latitude = longitude = '';
navigator.geolocation.getCurrentPosition(
function(position) {
latitude = position.coords.latitude;
longitude = position.coords.longitude;
console.log('browser search');
searchbygeo(latitude,longitude,searchdata,el);
}
);
} else {
console.log("Geolocation is not supported by this browser.");
}
} else {
el.html('
loading
');
$.ajax(searchdata).done(function( msg ) {
el.html(msg);
el.find('.town-link').removeClass('hidden');
});
}
}
function searchbygeo(latitude,longitude,searchdata,el) {
$.ajax({
type: "GET",
data:{'latitude': latitude, 'longitude': longitude, 'settown':'yes'},
url: '/ajax/towns/locate/'
}).done(function( msg ) {
el.html('
loading
');
$.ajax(searchdata).done(function( msg ) {
el.html(msg);
el.find('.town-link').removeClass('hidden');
});
});
}
function showPosition(position) {
jQuery.getJSON('/ajax/towns/locate/', {latitude: position.coords.latitude, longitude: position.coords.longitude, settown: 'yes'}, function(data) {
//window.location = "/" + data.sef_url + "/" + window.location.href.split('/guest/')[1];
});
}
/* ============================================
* geo user location
* ============================================ */
jQuery('.geo-user-location-button').each(function(){
var el = $(this);
var redirect = el.data('redirect') ? el.data('redirect') : '';
var settown = (redirect == 'yes' || redirect == 'true') ? 'no' : 'yes';
el.click(function(){
el.html('Locating...');
if (navigator.geolocation) {
var latitude = longitude = '';
navigator.geolocation.getCurrentPosition(
function(position) {
latitude = position.coords.latitude;
longitude = position.coords.longitude;
$.ajax({
data:{latitude: latitude, longitude: longitude, settown:settown},
url: '/ajax/towns/locate/'
}).done(function( msg ) {
console.log("location found.");
msg = msg ? jQuery.parseJSON(msg) : '';
if(msg.sef_url && redirect) {
if(window.location.pathname.indexOf("/guest/") > -1)
var path = '/'+ msg.sef_url + '/' + window.location.href.split('/guest/')[1];
else
var path = '/'+ msg.sef_url + '/';
console.log("redirecting to "+path+" ...");
window.location = path;
}
else {
console.log("reloading...");
location.reload();
}
});
},
function() {
console.log("navigator.geolocation.getCurrentPosition is not supported by this browser.");
}
);
} else {
console.log("navigator.geolocation is not supported by this browser.");
}
});
});
/* ============================================
* lazy loading
* ============================================ */
$(function() {
var bLazy = new Blazy();
});
/* ============================================
* share button functions
* ============================================ */
$(function() {
var FB_WINDOW_WIDTH=550,FB_WINDOW_HEIGHT=350,shareOnFb={};
$(".p300-fb-share").on("click",function(e){
e.preventDefault();var url=$(this).data("url");
if(url){var sharerUrl="http://www.facebook.com/sharer/sharer.php?u="+url+"&",winTop=window.screen.height/2-FB_WINDOW_HEIGHT/2,winLeft=window.screen.width/2-FB_WINDOW_WIDTH/2,options=["top="+winTop,"left="+winLeft,"width="+FB_WINDOW_WIDTH,"height="+FB_WINDOW_HEIGHT,"toolbar=0,status=0"].join(",");window.open(sharerUrl,"sharer",options)}
});
var TWITTER_WINDOW_WIDTH=550,TWITTER_WINDOW_HEIGHT=350,shareOnTwitter={};
$(".p300-twitter-share").on('click',function(e){
e.preventDefault();var url=$(this).data("url");
if(url){var sharerUrl="https://twitter.com/share?via=Project300&url="+url,text=$(this).data("text")||"";text&&($(this).data("prepend-cta")&&(text="More on "+text),sharerUrl=sharerUrl+"&text="+text);
var hashtags=$(this).data("hashtags-param")||"";sharerUrl+=hashtags;var winTop=window.screen.height/2-TWITTER_WINDOW_HEIGHT/2,winLeft=window.screen.width/2-TWITTER_WINDOW_WIDTH/2,options=["top="+winTop,"left="+winLeft,"width="+TWITTER_WINDOW_WIDTH,"height="+TWITTER_WINDOW_HEIGHT,"toolbar=0,status=0"].join(",");window.open(sharerUrl,"sharer",options)}
});
});
(function(d){
/* load pinterest */
var f = d.getElementsByTagName('SCRIPT')[0], p = d.createElement('SCRIPT');
p.type = 'text/javascript';
p.async = true;
p.src = '//assets.pinterest.com/js/pinit.js';
f.parentNode.insertBefore(p, f);
}(document));
/* ============================================
* generic functions
* ============================================ */
function getCookie(cname) {
var name = cname + "=";
var ca = document.cookie.split(';');
for(var i=0; i