////
// Set the Unload for the map...
// This is currently the best way to do it
window.onbeforeunload = function() {
	GUnload();
}

var perpage = 3;
var currentpage = 1;
var singleboxheight = 85;
function writePagination() {
	var totalpages = Math.ceil(totalresults/perpage);
	
	var pagehandles = new Array();
	pagehandles[0] = new Element('a', { title: '1', href: '#' }).update('1');
	
	if (currentpage == 1) {
		pagehandles[0].addClassName('current');
	}
	
	var ul = new Element('ul');
	ul.insert({ bottom: new Element('li').addClassName('resultnum').update(totalresults+' Results') });
	ul.insert({ bottom: new Element('li').addClassName('page').update(pagehandles[0]).setStyle({ clear: 'left' }) });
	
	if (currentpage > 6 && totalpages > 9) {
		ul.insert({ bottom: new Element('li').addClassName('page').update('...') });
	}
	
	$('pagination-container').update(ul);
	
	if (totalpages <= 9 || (totalpages > 9 && currentpage < 7)) {
		
		for(i=2;i<=(totalpages > 9?8:totalpages);i++) {
			pagehandles[i-1] = new Element('a', { title: i, href: '#' }).update(i);
			if (currentpage == i) {
				pagehandles[i-1].addClassName('current');
			}
			ul.insert({ bottom: new Element('li').addClassName('page').update(pagehandles[i-1]) });
		}
		
	} else if (currentpage >= (totalpages -perpage)) {
		
		var k = 1;
		for(i=(totalpages-7);i<=(totalpages-1);i++) {
			pagehandles[k] = new Element('a', { title: i, href: '#' }).update(i);
			if (currentpage == i) {
				pagehandles[k].addClassName('current');
			}
			ul.insert({ bottom: new Element('li').addClassName('page').update(pagehandles[k]) });
			k++;
		}
			
		var i = k;
		
	} else {
		
		var k = 1;
		for(i=(currentpage-3);i<=(currentpage+2);i++) {
			pagehandles[k] = new Element('a', { title: i, href: '#' }).update(i);
			if (currentpage == i) {
				pagehandles[k].addClassName('current');
			}
			ul.insert({ bottom: new Element('li').addClassName('page').update(pagehandles[k]) });
			k++;
		}
			
		var i = k;
		
	}
		
		
	if (!i) var i=0;
	
	if (totalpages > 9) {
		
		var i = pagehandles.length;
		
		if (currentpage < (totalpages - perpage)) {
			ul.insert({ bottom: new Element('li').addClassName('page').update('...') });
		}
		pagehandles[i] = new Element('a', { title: totalpages, href: '#' }).update(totalpages);
		if (currentpage == totalpages) {
			pagehandles[i].addClassName('current');
		}
		ul.insert({ bottom: new Element('li').addClassName('page').update(pagehandles[i]) });
	}
	
	for(i=0;i<pagehandles.length;i++) {
		pagehandles[i].observe('click', changePageWrapper);
	}
}

function changePage(page) {
	
	new Effect.Morph('locator-results', {
		style: 'bottom: '+((page*(singleboxheight*perpage))-(singleboxheight*perpage))+'px',
		duration: 0.5,
		afterFinish: function() {
			updateMarkers();
		}
	});
	
	currentpage = page;
	writePagination();
}

function changePageWrapper(ev) {
	ev.stop();
	var el = Event.element(ev);
	var page = parseInt(el.readAttribute('title'));
	changePage(page);
}

var map;
var mapicons = new Array();
var gmarkers,
	markers;
function initMap() {
	if (GBrowserIsCompatible()) {
		map = new GMap2($('map-box'));
		resetMap();
		map.setUIToDefault();
		
		mapicons[1] = new GIcon();
		mapicons[1].image = BASE_HREF+"_images/icon-storelocator_a.png";
		mapicons[1].iconSize = new GSize(24.0, 22.0);
		mapicons[1].iconAnchor = new GPoint(12.0, 11.0);
		mapicons[2] = new GIcon();
		mapicons[2].image = BASE_HREF+"_images/icon-storelocator_b.png";
		mapicons[2].iconSize = new GSize(24.0, 22.0);
		mapicons[2].iconAnchor = new GPoint(12.0, 11.0);
		mapicons[3] = new GIcon();
		mapicons[3].image = BASE_HREF+"_images/icon-storelocator_c.png";
		mapicons[3].iconSize = new GSize(24.0, 22.0);
		mapicons[3].iconAnchor = new GPoint(12.0, 11.0);
		mapicons[4] = new GIcon();
		mapicons[4].image = BASE_HREF+"_images/icon-storelocator_d.png";
		mapicons[4].iconSize = new GSize(24.0, 22.0);
		mapicons[4].iconAnchor = new GPoint(12.0, 11.0);
	}
}

function doSearch() {
	
	$('locator-results').update();
	$('pagination-container').update();
	
	currentpage = 1;
	$('locator-results').setStyle({ bottom: '0px' });
	
	new Ajax.Request(BASE_HREF+'_ajax/stores.php', {
		method:'post',
		parameters: { search: $F('store-search') },
		onSuccess: function(transport){
			var json = transport.responseText.evalJSON();
			if (json.error.length > 0) {
				alert(json.error);
			} else {
				$('locator-results').update(json.results);
				totalresults = json.totalresults;
				markers = json.markers;
				changePage(currentpage);
				//writePagination();
			}
		}
	});
	
}

function updateMarkers() {

	resetMap();
	gmarkers = new Array();
	var bounds = new GLatLngBounds();
	var ii = 1;
	
	var marker_latitude, marker_longitude, marker_sid;
	
	for(var i=((currentpage*perpage)-perpage);i<(currentpage*perpage);i++) {
		if ((i+1) > markers.length) break;
		
		if (markers[i].latitude != '') {
		
			marker_latitude = parseFloat(markers[i].latitude);
			marker_longitude = parseFloat(markers[i].longitude);
			marker_sid = parseInt(markers[i].sid);
			marker_html = markers[i].window_html;
			
			
			if (marker_latitude != '') {
			
				var marker_point = new GLatLng(marker_latitude, marker_longitude);
				bounds.extend(marker_point);
				
				var marker = createMarker(marker_point, marker_sid, ii);
				map.addOverlay(marker);
				
			}

		}
				
		ii++;
		if (ii==5) ii = 1;
	}
		
	setMapCenter();
	map.setZoom(map.getBoundsZoomLevel(bounds)-1);
	map.setCenter(bounds.getCenter());
}

function createMarker(marker_point, marker_sid, ii) {
	var marker = new GMarker(marker_point, { icon:mapicons[ii] });
	gmarkers[marker_sid] = marker;
	return marker;
}
function resetMap() {
	map.clearOverlays();
	setMapCenter();
}
function setMapCenter() {
	map.setCenter(new GLatLng(parseInt(38.8226), parseInt(-94.8555)), parseInt(3));
}

document.observe('page:loaded', initMap);