var gZoomToLevel = 12;
var gCountryZoom = 4;
var gNearestZoom = 10;
var gRecentDistance = 0;
var gAjaxURL = 'aj_query.php?';

var gSlides, gSlideIndex, gNextSlideIdx, gAnimating, gSlideShow;

var gMap, gAddrEvent, gGeocoder;
var gDefaultLatLng, gCurrentPoint;
var gMapIcons, gAbc, gMarkers;
var gHiDealerId = -1, gCurrentPg, gOrgBounds;


YAHOO.util.Event.onDOMReady(init);

function init() {
	var div, href;
	
	seriesTabInit();
	// initialize gallery
	gSlideShow = new vsGallery();
	
	// initialize Google Maps
	if (!GBrowserIsCompatible())
		return;
	gMap = new GMap2(document.getElementById("map_canvas"));
	gDefaultLatLng = new GLatLng(-25.335448, 135.745076);
	GEvent.addListener(gMap, 'zoomend', function (oldLevel, newLevel) {
		var el = document.getElementById('showPane');
		if (newLevel <= gNearestZoom) {
			el.innerHTML = '';
		} else {
			el.innerHTML = 'Or, <a href="javascript:showWithin()">show the reseller(s) inside current map</a>';
		}
		});
	gMap.setCenter(gDefaultLatLng, gCountryZoom);
	gMap.setUIToDefault();
	gAddrEvent = new YAHOO.util.KeyListener('addr', {keys: [13] }, handleFind);
	gAddrEvent.enable();
	YAHOO.util.Event.addListener('findBtn', 'click', handleFind);
	gGeocoder = new GClientGeocoder();
	gGeocoder.setBaseCountryCode('au');
	// creating icons for maps
	gMapIcons = new Array();
	gAbc= new Array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j');
	for (var i = 0; i <= 10; i++) {
		var icon = new GIcon(G_DEFAULT_ICON);
		icon.image = 'images/marker_' + gAbc[i] + '.png';
		gMapIcons.push(icon);
	}

}

function handleFind(e) {
	getDealers();
}

function getDealers() {
	// convert the address into Lat/Lng
	var addr = document.getElementById('addr').value;
	
	gGeocoder.getLatLng(addr, function(point) {
		if (point) {
			var distMenu = document.getElementById('distance');
			gRecentDistance = distMenu.options[distMenu.selectedIndex].value;
			// address found, set the map
			gMap.setCenter(point, gZoomToLevel-distMenu.selectedIndex);
			// proceed to get the list of nearest dealers
			loadDealers(0, point);
		} else {
			// address not found, go back to default map loc
			gMap.setCenter(gDefaultLatLng, gCountryZoom);
		}
	});
}

function loadDealers(pageNo) {
	gHiDealerId = -1;
	gMap.clearOverlays();
	if (arguments.length > 1) {
		gCurrentPoint = arguments[1];
		gOrgBounds = gMap.getBounds();
	}
	// proceed to get the list of nearest dealers
	if (gRecentDistance != 0) {
		YAHOO.util.Connect.asyncRequest("GET", gAjaxURL + 'rt=find&d=' + gRecentDistance +
										'&lat=' + gCurrentPoint.lat() +
										'&lng=' + gCurrentPoint.lng() + '&p=' + pageNo, getDealerCBs);
	} else {
		var ne = gOrgBounds.getNorthEast();
		var sw = gOrgBounds.getSouthWest();
		YAHOO.util.Connect.asyncRequest("GET", gAjaxURL + 'rt=find&nwlat=' + ne.lat() +
										'&nwlng=' + sw.lng() + '&selat=' + sw.lat() +
										'&selng=' + ne.lng() + '&lat=' + gCurrentPoint.lat() +
										'&lng=' + gCurrentPoint.lng() + '&p=' + pageNo, getDealerCBs);
	}
	/* alert(gAjaxURL + 'rt=find&nwlat=' + ne.lat() +
									'&nwlng=' + sw.lng() + '&selat=' + sw.lat() +
									'&selng=' + ne.lng() + '&lat=' + gCurrentPoint.lat() +
									'&lng=' + gCurrentPoint.lng() + '&p=' + pageNo); */
}

function showWithin() {
	if (gMap.getZoom() > gNearestZoom) {
		gRecentDistance = 0;
		loadDealers(0, gMap.getCenter());
	} else
		alert("You need to zoom the map to a centain level in order to show the nearest resellers where you're browsing.");
}

var getDealerCBs = {
	success: function(o) {
		var i;
		// parse the response
		var res = YAHOO.lang.JSON.parse(o.responseText);
		var div = document.getElementById('resultPane');
		if (res.dealers.length == 0) {
			// if no dealers found, 
			// gMap.setCenter(gDefaultLatLng, gCountryZoom);
			var listHtml = 'No dealers found, please try again.';
			var navHtml = '';
		} else {
			// generate result list
			delete gMarkers;
			gMarkers = new Array(res.dealers.length);
			var listHtml = '';
			for (i = 0; i < res.dealers.length; i++) {
				var pt = new GLatLng(parseFloat(res.dealers[i].geo_lat),
									 parseFloat(res.dealers[i].geo_lng));
				var marker = new GMarker(pt, gMapIcons[i]);
				marker.data = res.dealers[i];
				var func = new Function('i', 'zoomToDealer(' + i + ');');
				GEvent.addListener(marker, "click", func);
				gMap.addOverlay(marker);
				gMarkers[i] = marker;
				// now generate divs for dealer list
				listHtml += '<div class="dealer" id="dealer' + i + '" onclick="zoomToDealer(' + i +
							')"><img src="images/marker_' + gAbc[i] + '.png" class="pin">' +
							'<div class="info"><b>' + res.dealers[i].official_name + ' ' +
							res.dealers[i].branch_name + '</b><br/>' + res.dealers[i].addr +
							'<br/>' + res.dealers[i].tel + '</div></div>';
			}
			res.pageNo = parseInt(res.pageNo);
			// generate nav pane
			var navHtml = '';
			var totalPg = Math.ceil(res.totalFound/10);
			if (res.pageNo > 0)
				navHtml += '<a href="#m" onclick="loadDealers(' + (res.pageNo - 1) +
						   ')" class="prev">Previous</a>';
			if (res.pageNo < (totalPg - 1)) {
				if (navHtml.length > 0)
					navHtml += ' | ';
				navHtml += '<a href="#m" onclick="loadDealers(' + (res.pageNo + 1) +
						   ')" class="next">Next</a>';
			}
			gCurrentPg = res.pageNo;
			// alert(navHtml);
		}
		div.innerHTML = listHtml;
		var el = YAHOO.util.Dom.getElementsByClassName('dealerNav', 'div', 'dealerList');
		for (i = 0; i < el.length; i++)
			el[i].innerHTML = navHtml;
	},
	failure: function(o) {
	},
	argument: null
}

function hiliteDealer(i) {
	var div = document.getElementById('dealer' + i);
	if (gHiDealerId != -1) {
		document.getElementById('dealer' + gHiDealerId).className = 'dealer';
	}
	div.className = 'dealerHi';
	gHiDealerId = i;
}

function zoomToDealer(i) {
	var theZoom = gMap.getZoom();
	/* if (theZoom < gZoomToLevel) {
		var theZoom = gZoomToLevel;
		gMap.setCenter(gMarkers[i].getLatLng(), theZoom);
	} else
		gMap.panTo(gMarkers[i].getLatLng()); */
	gMap.panTo(gMarkers[i].getLatLng());
	var div = document.getElementById('dealer' + i);
	if (gHiDealerId != -1) {
		document.getElementById('dealer' + gHiDealerId).className = 'dealer';
	}
	div.className = 'dealerHi';
	gHiDealerId = i;
	var theData = gMarkers[i].data;
	if (theData.description.length > 0)
		var desc = '<br/>' + theData.description;
	else
		var desc = '';
	gMarkers[i].openInfoWindowHtml('<p class="info"><b>' + theData.official_name + ' '+ theData.branch_name +
								   '</b><br/>' + theData.addr + '<br/>Phone: ' + theData.tel +
								   '<br/>Products: ' + theData.products_carried + desc, {maxWidth: 300});
}
