var gMap;
var gMarkers = Array();
var gMarkerGeos = Array();
var gMarkerHtml = Array();
var gBounds = false;

function initSearchResults()
{
	var pars = {
		f: 1,
		lat: gSearchParams.lat,
		lng: gSearchParams.lng,
		venue: gSearchParams.venue,
		page: gSearchParams.page,
		sortCol: gSearchParams.sortCol,
		sortDir: gSearchParams.sortDir
	};

	if (gSearchParams.monthly)
		pars.monthly = 1;
	else {
		pars.start = escape(gSearchParams.start);
		pars.end = escape(gSearchParams.end);
	}

	if (gSearchParams.overnight) pars.overnight = 1;
	if (gSearchParams.indoor) pars.indoor = 1;
	if (gSearchParams.valet) pars.valet = 1;
	if (gSearchParams.event_protection) pars.event_protection = 1;
	if (gSearchParams.tailgate) pars.tailgate = 1;
	if (gSearchParams.handicap) pars.handicap = 1;
	if (gSearchParams.unobstructed) pars.obstructed = 1;
	if (gSearchParams.security) pars.security = 1;
	if (gSearchParams.restroom) pars.restroom = 1;
	if (gSearchParams.rv) pars.rv = 1;
	if (gSearchParams.attended) pars.attended = 1;
	if (gSearchParams.reservation) pars.reservation = 1;
	if (gSearchParams.eticket) pars.eticket = 1;
	if (gSearchParams.has_gallery) pars.has_gallery = 1;
	if (gSearchParams.deal) pars.deal = 1;
	if (gSearchParams.shuttle) pars.shuttle = 1;

	if (gSearchParams.dist) pars.dist = gSearchParams.dist;
	if (gSearchParams.price) pars.price = gSearchParams.price;
	if (gSearchParams.event_id) pars.event_id = gSearchParams.event_id;

	$('#resultsContainer').load('/search/table/', $.param(pars), buildSearchMap);
};

var infowindow;
function attachInfoWindow(marker, content)
{
	google.maps.event.addListener(marker, "click", function() {
		infowindow.setContent(content);
		infowindow.open(gMap, this);
	});
}

var gMarkers = [];
function buildSearchMap()
{
	infowindow = new google.maps.InfoWindow({
		pixelOffset: new google.maps.Size(0,13)
	});

	if (!gSearchParams)
		return false;

	// clear old markers
	for (var i in gMarkers) {
		gMarkers[i].setMap(null);
		gMarkers[i] = null;
	}

	gMarkers = [];

	center = new google.maps.LatLng(gSearchParams.lat, gSearchParams.lng);

	if (!gMap) {
		gMap = new google.maps.Map(document.getElementById('yMapContainer'), {
			mapTypeId: google.maps.MapTypeId.ROADMAP,
			disableDefaultUI: true,
			mapTypeControl: true,
			mapTypeControlOptions: {style: google.maps.MapTypeControlStyle.DROPDOWN_MENU},
			navigationControl: true,
			navigationControlOptions: {style: google.maps.NavigationControlStyle.SMALL}
		});
	}

	var destMarker = new google.maps.Marker({
		position: center,
		map: gMap,
		zIndex: Math.round(10000)
		});

	if (gSearchParams.destHtml) {
		google.maps.event.addListener(destMarker, "click", function() {
			infowindow.setOptions({content: gSearchParams.destHtml, pixelOffset: new google.maps.Size(20, 20)});
			infowindow.open(gMap, this);
		});
	}

	if (gMarkerData.length == 0) {
		gMap.setCenter(center);
		gMap.setZoom(15);
		return;
	}

	bounds = new google.maps.LatLngBounds;
	bounds.extend(center);

	if (gSearchParams.noNumbers == true) {
		var bluePIcon = new google.maps.MarkerImage(pw.stat('/images/map-sprites.png'),
			new google.maps.Size(21,37),
			pw.mapSpriteCoords('p', 'blue'),
			new google.maps.Point(10, 37));
		var whitePIcon = new google.maps.MarkerImage(pw.stat('/images/map-sprites.png'),
			new google.maps.Size(21,37),
			pw.mapSpriteCoords('p', 'white'),
			new google.maps.Point(10, 37));

		var shadow = new google.maps.MarkerImage(pw.stat('/images/map-sprites.png'),
			new google.maps.Size(36,24),
			pw.mapSpriteCoords('p_shadow'),
			new google.maps.Point(4,22));
	} else {
		var icons = [];
		var iconSize = new google.maps.Size(26,34);
		var iconAnchor = new google.maps.Point(13, 33);
		var shadow = new google.maps.MarkerImage(pw.stat('/images/map-sprites.png'),
			new google.maps.Size(40,22),
			pw.mapSpriteCoords('number_shadow'),
			new google.maps.Point(6,19));
	}

	for (var i in gMarkerData) {

		if (!gMarkerData[i].show_marker) {
			continue;
		}
		var num = i*1+1;

		if (gSearchParams.noNumbers != true) {
			icons[i] = {
				'blue': new google.maps.MarkerImage(pw.stat('/images/map-sprites.png'),
					iconSize,
					pw.mapSpriteCoords(num, 'blue'),
					iconAnchor),
				'white': new google.maps.MarkerImage(pw.stat('/images/map-sprites.png'),
					iconSize,
					pw.mapSpriteCoords(num, 'white'),
					iconAnchor)
				};

			var icon = icons[i].blue
		} else {
			icon = bluePIcon;
		}

		point = new google.maps.LatLng(gMarkerData[i].lat, gMarkerData[i].lng);

		if (i < 10 || gMarkerData[i].dist < 4260) {
			bounds.extend(point);
		}

		var marker = new google.maps.Marker({
			position: point,
			map: gMap,
			icon: icon,
			shadow: shadow,
			//zIndex: 99-i
			zIndex: Math.round(10000 - point.lat()*1000)
			});

		attachInfoWindow(marker, gMarkerData[i].text);

		marker.set('number', i);

		gMarkers[gMarkerData[i].asset_id] = marker;
	}

	gMap.setCenter(bounds.getCenter());
	gMap.fitBounds(bounds);

	$('.listingRow').bind('mouseover', function() {
		var i = this.id.split('_')[1];

		if (!gMarkers[i]) return;

		if (whitePIcon) {
			gMarkers[i].setIcon(whitePIcon);
		} else {
			gMarkers[i].setIcon(icons[gMarkers[i].get('number')].white);
		}

		gMarkers[i].setZIndex(101);
	}).bind('mouseout', function() {
		var i = this.id.split('_')[1];

		if (!gMarkers[i]) return;

		if (bluePIcon) {
			gMarkers[i].setIcon(bluePIcon);
		} else {
			gMarkers[i].setIcon(icons[gMarkers[i].get('number')].blue);
		}

		gMarkers[i].setZIndex(99-gMarkers[i].get('number'));
	});

};

var gFilterElements;
function initControls(meta)
{
	var distCurVal = $('#distVal').first();

	$('#distSlider').slider({
		min: Math.ceil(meta.min_dist / 260.0),
		max: Math.ceil(meta.max_dist /260.0),
		value: Math.ceil(meta.max_dist /260.0),
		slide: function(event, ui) {
			distCurVal.html(ui.value);
		},
		change: function(event, ui) {
			gSearchParams.dist = ui.value*260;

			initSearchResults();
		}
	});
	distCurVal.html(Math.floor(meta.max_dist / 260.0));

	var priceCurVal = $('#priceVal').first();

	$('#priceSlider').slider({
		min: Math.ceil(meta.min_price),
		max: Math.ceil(meta.max_price),
		value: Math.ceil(meta.max_price),
		slide: function(event, ui) {
			priceCurVal.html(ui.value);
		},
		change: function(event, ui) {
			if (ui.value == Math.ceil(meta.max_price)) {
				gSearchParams.price = false;
			} else {
				gSearchParams.price = ui.value;
			}

			initSearchResults();
		}
	});
	priceCurVal.html(Math.floor(meta.max_price));

	gFilterElements = $('.searchFilters input');
	gFilterElements.bind('click', featureFilter);

	if ($('.searchFilters input:checked').length) {
		featureFilter();
	}

	$('#showall').bind('click', function(e) {
		gFilterElements.attr('checked', false);
		featureFilter();
		return false;
	});
};

function featureFilter(e)
{
	gFilterElements.each(function() {
		gSearchParams[this.id] = this.checked;
	});

	initSearchResults();
};

$('#resultsTable a.timesLink').live('click', function() {
	$('#popupTimesForm').Flasher();
});


$('.searchSortLink').live('click', function() {
	gSearchParams.sortDir = getQueryVar('sortDir', this.href);
	gSearchParams.sortCol = getQueryVar('sortCol', this.href);

	initSearchResults();

	return false;
});

