var map = null;
var markers = null;
var highlightMarker = null;
var firstQuery = true;
var NEARBY_BIZ_COUNT = 5;

function startLoadingAnimation() {
	document.getElementById('loading_animation').style.visibility = 'visible';
}

function stopLoadingAnimation() {
	document.getElementById('loading_animation').style.visibility = 'hidden';
}

function showPopupIndex(index) {

	markers[index].showMouseOver();
	highlightMarker = new GMarker(markers[index].getPoint(), createSliceIcon(index, SLICE_STYLE_HIGHLIGHTED));
	map.addOverlay(highlightMarker);
}

function hidePopupIndex(index) {

	markers[index].hideMouseOver();
	map.removeOverlay(highlightMarker);
}

function handleQueryResponse(results) {
results = JSON.parse(results.responseText);
	map.clearOverlays();

	if (!results['success']) {
		setElementHTML('nearby_biz_list', '<span class="error">' + results['result'] + '<'+'/span>');
		stopLoadingAnimation();
		return;
	}

	var biz;

	markers = new Array();
	var r = '';
	var bizInfos = results['result']['biz_list'];

	if (bizInfos.length == 0) {
		r += 'No matching businesses found.  Try <a href="#" onclick="map.zoomTo(map.getZoomLevel()+1); return false;">zooming out<'+'/a> on the map.';
	} else {
		var index = 0;
		r += '<ul id="mapsearch_results">';
		for (var i = 0; (i < bizInfos.length) && (index < NEARBY_BIZ_COUNT); i++) {
			biz = bizInfos[i];

			if (biz['id'] == '$biz.id') {
				continue;
			}

			index++;

			var bizdUrl = '/biz/' + biz['id'];
			// list item
			r += '<li onMouseOver="showPopupIndex(' + index + ')" onMouseOut="hidePopupIndex(' + index + ')">';						
			r += index + '.&nbsp;';
			r += '<a href="' + bizdUrl + '">' + biz['name'] + '<'+'/a>';
			if ((biz['avg_rating'] != null) && (biz['review_count'] > 0)) {
				r += '<br/><span class="nonwrapping">' + stars(biz['avg_rating'], true);
				r += '<'+'/span> <em class="smaller">' + biz['review_count'] + ' review' + (biz['review_count'] != 1 ? 's' : '') + '<'+'/em>';
			}			
			r += '<'+'/li>';

			var m = createBizMarker(biz, index, true);
			markers[index] = m;
			map.addOverlay(m);
		}
		r += '<'+'/ul>';
	}

	setElementHTML('nearby_biz_list', r);

	biz = json_biz;
	map.addOverlay(createBizMarker(biz, -1, false));

	stopLoadingAnimation();
}

function handleQueryError(req) {
	setElementHTML('nearby_biz_list', '<span class="error">Error connecting to server.  Please try again later.<'+'/span>');
	stopLoadingAnimation();
}



function updateResults() {
	startLoadingAnimation();

	var params = getAdjustedMapBounds(map, document.getElementById("mapdiv"));
	params['type'] = 'browse';
	var select_element = document.getElementById('nearby_cat_select');
	params['arg'] = select_element.options[select_element.selectedIndex].value;
	params['sort'] = 'rating';
	params['start'] = 0;
	params['count'] = NEARBY_BIZ_COUNT + 1;
	if (firstQuery) {
		params['ch'] = '1';
	}

	firstQuery = false;

	var url = '/mapsearch_query/search?' + xmlhttpreq_encode_dict(params);
	asyncGetJson(url, handleQueryResponse, handleQueryError);
}

var copyrightTimer = null;

function initMap(bizLat,bizLong) {
	map = new GMap2(document.getElementById("mapdiv"));

	map.addControl(new GSmallZoomControl());
	map.setCenter(new GLatLng(parseFloat(bizLat), parseFloat(bizLong)), 15);

	GEvent.addListener(map, "moveend", updateResults);

	updateResults();
	
	copyrightTimer = window.setInterval('makeCopyrightSmaller()', 150);	
}
function makeCopyrightSmaller() {
	if (map.isLoaded()) 
	{
		for(var i = 0; i < map.getContainer().childNodes.length; ++i) {
			if(map.getContainer().childNodes[i].innerHTML.indexOf(String.fromCharCode(169)) !== -1){
      			map.getContainer().childNodes[i].style.fontSize = '9px';
      			window.clearInterval(copyrightTimer);
      			break;
    		}
    	}
  	}
}
