var map;
var mapdiv;
var dealers = [];
var regions = [];
var markers = [];

window.onload = initialize;
window.onunload = GUnload;

function initialize() {
	if (GBrowserIsCompatible()) {
		// set map div style
		mapdiv = document.getElementById("gmap");

		// get dealers & regions
		dealers = getdealers();
		regions = getregions();
			
		// init map
		map = new GMap2(mapdiv);		
		resetmap();
		map.addControl(new GLargeMapControl());		
		
		// set helper also on zoom
		GEvent.addListener(map, "zoomend", function(oldLevel,newLevel) {
			sethelper();
		});	
		
		// set events
		rselect = document.getElementById("select-regions");
		rselect.onchange = function (e) {
			if( this.options[this.selectedIndex].value == '' ) {
				resetmap();
				region_dealerlist(0);
			}
			else {
				zoomregion( this.options[this.selectedIndex].text );
				region_dealerlist( this.options[this.selectedIndex].value );
			}
			stopit(e);
			return false;
		}
		
		/*rlist = document.getElementById("list-regions").getElementsByTagName('a');
		for(i = 0; i < rlist.length; i ++ )
			rlist[i].onclick = function (e) {
				zoomregion( this.innerHTML );
				region_dealerlist( this.parentNode.id.replace("region","") );
				region_subregionlist( this.parentNode.id.replace("region","") );
				
				// clear active class
				regions = document.getElementById("list-regions").getElementsByTagName("li");
				for(m = 0; m < regions.length; m++) 
					regions[m].className = '';
				allregions = document.getElementById("list-allregions").getElementsByTagName("li");
				allregions[0].className = '';
				
				// set class name
				this.parentNode.className = 'active';
				
				stopit(e);
				return false;			
			}
		allrlist =  document.getElementById("list-allregions").getElementsByTagName('a');
		allrlist[0].onclick = function (e) {
			resetmap();
			region_dealerlist(0);
			
			// clear active class
			regions = document.getElementById("list-regions").getElementsByTagName("li");
			for(m = 0; m < regions.length; m++) 
				regions[m].className = '';
			allregions = document.getElementById("list-allregions").getElementsByTagName("li");
			allregions[0].className = '';
			
			// set class name
			this.parentNode.className = 'active';
			
			stopit(e);
			return false;
		}*/
			
		// add dealers
		for(i = 0; i < dealers.length; i ++ ) if( dealers[i]['geocode'] > '' ) {
			latlng = dealers[i]['geocode'].split(',');
			
			// info window message
			message = '<p><strong>' + dealers[i]['name'] + '</strong></p>';
			if( dealers[i]['address'].length )
				message += '<p>' + dealers[i]['address'] + '</p>';
			if( dealers[i]['phone'].length )
				message += '<p>' + dealers[i]['phone'] + '</p>';
			if( dealers[i]['website'].length )
				message += '<p><a href="' + dealers[i]['website'] + '" title="' + dealers[i]['name'] + '">' + dealers[i]['website'] + '</a></p>';
			
			// add dealer to map
			setmarker(dealers[i]['id'],latlng[0],latlng[1],message);
		}
	}
}

function sethelper() {
	// something here?
	//document.getElementById('gmap-geo').innerHTML = map.getCenter().toUrlValue();
	//document.getElementById('gmap-zoom').innerHTML = map.getZoom();
}

function zoommarker(id) {
	if( markers[id] ) {
		// close info window
		map.closeInfoWindow();
		// zoom to new marker window
		GEvent.trigger(markers[id],'click');
		mapdiv.scrollIntoView(true);		
	}
}

function zoomregion(q) {
	// close info window
	map.closeInfoWindow();
	
	// search for address
	var geocoder = new GClientGeocoder();
	geocoder.getLatLng(
		q + ', New Zealand',
		function(point) {
			if (!point)
				alert('Sorry we couldnt find that region, please zoom in manually');
			else {
				if( q == 'Waikato' )
					point = new GLatLng(-37.95,175.4);	
				if( q.match('East Auckland') )
					point = new GLatLng(-36.91847,174.882946);
				if( q.match('West Auckland') )
					point = new GLatLng(-36.867536,174.655151);
				
				// zoom in a bit more for sub regions
				if( q.match(' - ') )
					map.setCenter(point, 12);
				else
					map.setCenter(point, 9);			
			}
		}
	);
}

function region_dealerlist(region) {
	dealerlist = document.getElementById('list-dealers');

	// clear dealer list
	while (dealerlist.hasChildNodes())
		dealerlist.removeChild(dealerlist.firstChild);
	
	// add dealers to list
	for(i = 0; i < dealers.length; i ++ ) 
		// if no region is set or region eq's
		if( region == 0 || region == dealers[i]['region'] ) {	
			
			// make new li
			li = document.createElement('li');
			li.id = 'dealer' + dealers[i]['id'];
			
			// make html contents
			contents = '<h4>' + dealers[i]['name'] + '</h4><address><ul>';
			if( dealers[i]['address'].length )
				contents += '<li><span class="label address">Address</span>' + dealers[i]['address'] + '</li>';
			if( dealers[i]['phone'].length )
				contents += '<li><span class="label phone">Phone</span>' + dealers[i]['phone'] + '</p>';
			if( dealers[i]['website'].length )
				contents += '<li><span class="label website">Website</span><a href="' + dealers[i]['website'] + '" title="' + dealers[i]['name'] + '">' + dealers[i]['website'] + '</a></p>';
			if( dealers[i]['geocode'].length )
				contents += '<li><span class="label map"><a href="javascript:zoommarker(' + dealers[i]['id'] + ')" title="Show the location of ' + dealers[i]['name'] + ' on the map">View location on the map</a></span>';
			contents += '</ul></address>';
			li.innerHTML = contents;
						
			// add to ul
			dealerlist.appendChild(li);
		}	
}

function region_subregionlist(id) {
	div = document.getElementById('subregions');	
	
	// clear div
	while (div.hasChildNodes())
		div.removeChild(div.firstChild);
		
	// if children, make list
	if( regions[id] ) if( regions[id]['children'] ) {
		
		// make new ul
		ul = document.createElement('ul');
		ul.id = 'list-subregions';
				
		for( i = 0; i < regions.length; i ++ ) 
		if ( regions[i]['id'] == id )
		for(m = 0; m < regions[i]['children'].length; m ++ ) {
			// make new li
			li = document.createElement('li');
			li.id = 'region' + regions[i]['children'][m]['id'];
			
			// make HTML contents
			contents = '<a href="dealers.php/show/region/' + regions[i]['children'][m]['id'] + '">' + regions[i]['children'][m]['name'] + '</a>';
			li.innerHTML = contents;
			
			// add to ul
			ul.appendChild(li);
		}
		
		// add ul to div
		div.appendChild(ul);
		
	}
}

function setmarker(id, lat,lng,message) {

	// create marker
	markers[id] = new GMarker(new GLatLng(lat,lng), {
			draggable: false
		});

	// set events
	GEvent.addListener(markers[id], "click", function() {
		this.openInfoWindowHtml(message);
		map.setCenter(markers[id].getLatLng(), 15);
	});	
	
	// place marker
	map.addOverlay(markers[id]);
	
	return markers[id];
}

function resetmap() {
	map.setCenter(new GLatLng(-40.946714,172.617188), 5);
	map.closeInfoWindow();
	sethelper();
}

function stopit(e) {
	if(!e) var e = window.event;
	
	//e.cancelBubble is supported by IE - this will kill the bubbling process.
	e.cancelBubble = true;
	e.returnValue = false;

	//e.stopPropagation works only in Firefox.
	if (e.stopPropagation) {
		e.stopPropagation();
		e.preventDefault();
	}
	return false;
}
