﻿var EventSearch = function() {};
EventSearch.prototype = {

	latLngCenter: null,
	latLngCenter: null,
	optionsMap: null,
	map: null,
	markersUrl: null,
	
	markers: [],
	infoWindows: [],

	init: function (elMap, markersUrl) {
		var refObj = this;
		this.latLngCenter = new google.maps.LatLng(38, -97);
		this.markersUrl = markersUrl;
		this.optionsMap = {
		  zoom: 3,
		  center: this.latLngCenter,
		  mapTypeId: google.maps.MapTypeId.ROADMAP
		}
		this.map = new google.maps.Map(elMap[0], this.optionsMap);
		$('#ctl00_CContent_btnSearch').bind('click', function(event){
			event.stopPropagation();
			event.preventDefault();
			refObj.initializeMarkers(refObj.markersUrl, refObj);
		});
		this.initializeMarkers(this.markersUrl, refObj);
	},
	
	clearMarkers: function(refObj) {
		$(refObj.markers).each(function(){
			if (typeof this.set_map == "function") {
				this.set_map(null);
			}
		});
		$(refObj.infoWindows).each(function(){
			if (typeof this.set_map == "function") {
				this.set_map(null);
			}
		});
		refObj.markers = [];
		refObj.infoWindows = [];
	},
	
	initializeMarkers: function (url, refObj) {
		refObj.clearMarkers(refObj);
		refObj.showAjaxLoader(refObj);
		var callback = function(refObj, latLng) {
			var query = "?search=event";
			if ($('#ctl00_CContent_txtArtistName').val() != "") {
				query += "&artistName="+$('#ctl00_CContent_txtArtistName').val();
			}
			if ($('#ctl00_CContent_txtDateOfParty').val() != "") {
				query += "&fromDate="+$('#ctl00_CContent_txtDateOfParty').val();
			}
			if ($('#ctl00_CContent_txtDateOfPartyTo').val() != "") {
				query += "&toDate="+$('#ctl00_CContent_txtDateOfPartyTo').val();
			}
			if ($('#ctl00_CContent_ddlWithin').val() != "") {
				query += "&milesWithin="+$('#ctl00_CContent_ddlWithin').val();
			}
			if (typeof latLng != 'undefined') {
				query += "&latitude="+latLng.lat();
				query += "&longitude="+latLng.lng();
			}
			$.getJSON(url+query, function (data) {
				$(data.events).each(function(){
					var latLng = new google.maps.LatLng(this.latitude, this.longitude);
				
					var marker = new google.maps.Marker({
						position: latLng,
						title: this.eventTitle,
						map: refObj.map
					});
					refObj.markers.push(marker);
					
					var infoWindow = new google.maps.InfoWindow({
						content: refObj.formatEvent(this)
					});
					refObj.infoWindows.push(infoWindow);
					
					google.maps.event.addListener(marker, 'click', function() {
						$(refObj.infoWindows).each(function () {
							this.close();
						});
						infoWindow.open(refObj.map,marker);
					});
				});
				$(data.artists).each(function(){
					var latLng = new google.maps.LatLng(this.latitude, this.longitude);
				
					var marker = new google.maps.Marker({
						position: latLng,
						title: this.eventTitle,
						map: refObj.map
					});
					
					var infoWindow = new google.maps.InfoWindow({
						content: refObj.formatArtists(this)
					});
					
					google.maps.event.addListener(marker, 'click', function() {
						$(refObj.infoWindows).each(function () {
							this.close();
						});
						infoWindow.open(refObj.map,marker);
					});
				});
				if (typeof data.bounds != 'undefined') {
					var bounds = new google.maps.LatLngBounds(new google.maps.LatLng(data.bounds.swLat, data.bounds.swLng), new google.maps.LatLng(data.bounds.neLat, data.bounds.neLng));
					refObj.map.fitBounds(bounds);
				}
				refObj.hideAjaxLoader(refObj);
			});
		};
		
		if ($('#ctl00_CContent_txtZip').val() != "") {
			var geocoder = new google.maps.Geocoder();
			geocoder.geocode({'address': $('#ctl00_CContent_txtZip').val()}, function(results, status) {
				if (status == google.maps.GeocoderStatus.OK && status != google.maps.GeocoderStatus.ZERO_RESULTS) {
					callback(refObj, results[0].geometry.location);
				}
			});
		} else {
			callback(refObj);
		}
	},
	
	showAjaxLoader: function (refObj) {
		$('#map_canvas').append('<div id="ajax-loader" style="display:none;"><img src="/img/ajax-loader.gif" /></div>');
		$('#ajax-loader').fadeIn('normal');
	},
	
	hideAjaxLoader: function (refObj) {
		$('#ajax-loader').fadeOut('normal', function(){
			$(this).remove();
		});
	},
	
	formatEvent: function (data) {
		var content = "<div onclick=\"document.location = 'http://www.livemusicmachine.com/band/"+data.url+"'\">";
		if (data.userPhoto != "") {
			content += "<img src=\""+data.userPhoto+"\" alt=\"Avatar\" />";
		}
		if (data.eventTitle != "") {
			content += "<div>" + data.eventTitle + "</div>";
		}
		if (data.artistName != "") {
			content += "<div>" + data.artistName + "</div>";
		}
		if (data.venue != "") {
			if (data.eventTitle != "") {
				content += " ("+data.venue+")";
			} else {
				content += "<div>" + data.venue + "</div>";
			}
		}
		var timeString = "";
		var hours = data.eventDateTime.getHours();
		var minutes = data.eventDateTime.getMinutes();
		var meridiem = "AM";
		if (hours == 0) {
			hours = 12;
		} else if (hours == 12) {
			meridiem = "PM";
		} else if (hours > 12) {
			hours -= 12;
			meridiem = "PM";
		}
		if (minutes < 10) {
			minutes = "0" + minutes;
		}
		timeString = hours + ":" + minutes + meridiem;
		content += "<div>" + (data.eventDateTime.getMonth()+1) + "/" + data.eventDateTime.getDate() + "/" + data.eventDateTime.getFullYear() + " - " + timeString + "</div>";
		content += "</div>";
		return content;
	},
						
	formatArtists: function (data) {
		
	}
};