var loading = $('<img>').attr( {
	//'src' : 'images/globe.gif',
	'alt' : 'loading..'
}), map, boundsJSON, bounds, allMarkers = {}, minZoom = 1;
var spinner_obj = $('<img>').attr( {
	//'src' : 'images/spinner.gif',
	'alt' : ''
});
//var spinner = '<img src="' + BASE_URL + '/images/spinner" alt="">';
var spinner = '';

var clearMarkers = function() {
	for (var i in allMarkers) {
		allMarkers[i].map.setMap(null);
	}
	allMarkers = {};
}

var createMarker = function(lat, lng, name, id) {
	allMarkers[id] = {
		'map' : new google.maps.Marker( {
			'position' : new google.maps.LatLng(lat, lng),
			'map' : map,
			'title' : name,
			'clickable' : true
		})
	};
	google.maps.event.addListener(allMarkers[id].map, 'click', function() {
		map.panTo(allMarkers[id].map.position);
		openInfoWindow(id);
	});
	
}

function makeSpan(id, data) {
    if (data !== null) {
        return '<span id="' + id + '">' + data + '</span><br>';
    }
    else {
        return '';
    }
}

function makeA(id, content, url) {
    if (url !== null) {
        return '<a id="' + id + '" href="' + url + '">' + content + '</a><br>';
    }
    else {
        return '';
    }
}

function makeBoldSpan(id, data) {
    if (data !== null) {
        return '<span id="' + id + '" style="font-weight:bold">' + data + '</span><br>';
    }
    else {
        return '';
    }
}
var tester;
function setWindowInfo(data) {
	tester = data;
	var content = makeBoldSpan(data.church[0].church_id + 'name', '<a href="' 
				+ BASE_URL +
				'/church/' + data.church[0].slug + '">' + data.church[0].name) + '</a>';
	content += makeSpan(data.church[0].church_id + 'address', data.church[0].address);
	content += makeSpan(data.church[0].church_id + 'city', data.church[0].city + ', ' + data.church[0].state + '<br><br>');
	
	content += makeBoldSpan(data.church[0].church_id + 'masstimes', 'Masstimes:<br>');
	
	for (var i in data.masstimes) {
		for (var j in data.masstimes[i]) {
			content += makeBoldSpan(data.masstimes[i][j].masstime_id + 'name', data.masstimes[i][j].masstime);
		    content += '<br>';
		}
	}
    
    infowindow.setContent('<div class="infowindow">' + content + '</div>');
}

function parseInfoWindowData(data) {
    var parse = {};
    parse.id = data[0].i;
    parse.title = data[0].title;
    parse.address1 = data[0].address1;
    parse.city = data[0].ct;
    parse.state = data[0].st;
    parse.country = data[0].c;
    parse.zip = data[0].z;
    return parse;
}

function openInfoWindow(id) {
    // map.panTo(allMarkers[id].map.position);
	$.ajax({
		type : "GET",
		dataType : "json",
		url : BASE_URL + "/ajax/getinfowindow",
		data : {
		id : id
	},
	beforeSend : function() {
		if (infowindow === undefined) {
			infowindow = new google.maps.InfoWindow( {
			    content : spinner,
			    disableAutoPan : true
			});
		}
		infowindow.setContent(spinner);
		infowindow.open(map, allMarkers[id].map);
		var height = boundsJSON.n - boundsJSON.s;
		var lowercenter = (allMarkers[id].map.position.lat() + (height / 3));
		map.panTo(new google.maps.LatLng(lowercenter,
				allMarkers[id].map.position.lng()));
	},
	success : function(data) {
		//data = parseInfoWindowData(data);
		setWindowInfo(data);
	}
	});
}


function closeInfoWindows() {
    if (infowindow !== undefined) {
        infowindow.close();
    }
}


var getPoints = function() {
	
	if (map.getZoom() < minZoom) {
		boundsJSON = {};
		clearMarkers();
		return 0;
	}
	 
	if (boundsJSON !== undefined) {
		boundsJSON.on = boundsJSON.n;
		boundsJSON.os = boundsJSON.s;
		boundsJSON.oe = boundsJSON.e;
		boundsJSON.ow = boundsJSON.w;
	} else {
		boundsJSON = {};
	}
	bounds = map.getBounds();
	var southWest = bounds.getSouthWest();
	var northEast = bounds.getNorthEast();
	boundsJSON.n = northEast.lat();
	boundsJSON.s = southWest.lat();
	boundsJSON.e = northEast.lng();
	boundsJSON.w = southWest.lng();
	
	$.ajax({
		type : "GET",
		url : BASE_URL + "/ajax/getbounds",
		data : boundsJSON,
		dataType : "json",
		success : function(data) {
			test = data;
			for ( var i in data) {
				createMarker(data[i].l, data[i].g, data[i].n, data[i].i);
			}
			numMarkers = 0;
			for ( var n in allMarkers) {
				if (!bounds.contains(allMarkers[n].map.getPosition())) {
					allMarkers[n].map.setMap(null);
					delete allMarkers[n];
				} else {
					numMarkers++;
				}
			}
			//makeMarkerList();
		},
		complete : function() {
			//$("div#numChurches").html("Churches Shown: " + numMarkers);
		}
	});

	
}
var test;

var initialize = function() {
    var myOptions = {
        zoom: 12,
        center: loc,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    }
    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
    
    google.maps.event.addListener(map, 'click', function(event) {
        //map.setCenter(event.latLng);
        //google.maps.Map.prototype.clearMarkers();
    	
    });
    
    //scheduleDelayedCallback();
    google.maps.event.addListener(map, "idle", function(event) {
    	getPoints();
    });
    
    google.maps.event.addListener(map, "click", function() {
        closeInfoWindows();
    });
    google.maps.event.addListener(map, "tilesloaded", function(event) {
    	getPoints();
    });
    return false;
    
}

var infowindow;

$(document).ready(function() {
	if (navigator.geolocation) {
	    navigator.geolocation.getCurrentPosition(function(position) {  
	        loc = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
	        initialize();
	    }, function() {}, {'enableHighAccuracy':true});
	} else {  
	    loc = new google.maps.LatLng(latlng.lat, latlng.lng);
	    initialize();
	}
	
});
$(window).unload(function() {
	//GUnload();
});
