﻿var map;
var geocoder;
var markers = [];
var infoWindow;
var pinsArray;
var shadowArray;
var shapeArray;


function InitBRMap() {
	geocoder = new google.maps.Geocoder();
	infoWindow = new google.maps.InfoWindow();


	var mapOptions = {
		zoom: 17,
		center: new google.maps.LatLng(-36.857770, 174.75942),
		mapTypeId: google.maps.MapTypeId.ROADMAP,
		mapTypeControlOptions: {  
		 style: google.maps.MapTypeControlStyle.DROPDOWN_MENU  
	   } 

	}
	map = new google.maps.Map(document.getElementById("BRMapInner"), mapOptions);

	markers = new Array();

	pinsArray = new Array();
	shadowArray = new Array();
	shapeArray = new Array();

	pinsArray[0] = new google.maps.MarkerImage('/images/pins/br.png', new google.maps.Size(24, 24), new google.maps.Point(0, 0), new google.maps.Point(24, 24));
	pinsArray[1] = new google.maps.MarkerImage('/images/pins/coffee.png', new google.maps.Size(24, 24), new google.maps.Point(0, 0), new google.maps.Point(24, 24));
	pinsArray[2] = new google.maps.MarkerImage('/images/pins/food.png', new google.maps.Size(24, 24), new google.maps.Point(0, 0), new google.maps.Point(24, 24));
	pinsArray[3] = new google.maps.MarkerImage('/images/pins/bar.png', new google.maps.Size(24, 24), new google.maps.Point(0, 0), new google.maps.Point(24, 24));
	pinsArray[4] = new google.maps.MarkerImage('/images/pins/barber.png', new google.maps.Size(24, 24), new google.maps.Point(0, 0), new google.maps.Point(24, 24));
	shadowArray[0] = new google.maps.MarkerImage('/images/pins/shadow.png', new google.maps.Size(36, 24), new google.maps.Point(0, 0), new google.maps.Point(24, 24));
	shapeArray[0] = { coord: [23, 0, 23, 1, 23, 2, 23, 3, 23, 4, 23, 5, 23, 6, 23, 7, 23, 8, 23, 9, 23, 10, 23, 11, 23, 12, 23, 13, 23, 14, 23, 15, 23, 16, 23, 17, 23, 18, 23, 19, 23, 20, 23, 21, 23, 22, 23, 23, 0, 23, 0, 22, 0, 21, 0, 20, 0, 19, 0, 18, 0, 17, 0, 16, 0, 15, 0, 14, 0, 13, 0, 12, 0, 11, 0, 10, 0, 9, 0, 8, 0, 7, 0, 6, 0, 5, 0, 4, 0, 3, 0, 2, 0, 1, 0, 0], type: 'poly' };

	setMarkers();
}


function downloadUrl(url, callback) {
	var request = window.ActiveXObject ?
     new ActiveXObject('Microsoft.XMLHTTP') :
     new XMLHttpRequest;

	request.onreadystatechange = function() {

		if (request.readyState == 4) {
			request.onreadystatechange = doNothing;
			callback(request.responseText, request.status);
		}
	};

	request.open('GET', url, true);
	request.send(null);
}

function parseXml(str) {
	if (window.ActiveXObject) {
		var doc = new ActiveXObject('Microsoft.XMLDOM');
		doc.loadXML(str);
		return doc;
	} else if (window.DOMParser) {
		return (new DOMParser).parseFromString(str, 'text/xml');
	}
}


function doNothing() { }


function setMarkers(map) {

	clearLocations();

	var searchUrl = '/stuff.xml';

	downloadUrl(searchUrl, function (data) {
		var xml = parseXml(data);
		var markerNodes = xml.documentElement.getElementsByTagName("marker");

		for (var i = 0; i < markerNodes.length; i++) {

			var name = markerNodes[i].getAttribute("name");
			var description = markerNodes[i].getAttribute("description");
			var address = markerNodes[i].getAttribute("address");
			var type = markerNodes[i].getAttribute("type");

			var latlng = new google.maps.LatLng(
        parseFloat(markerNodes[i].getAttribute("lat")),
        parseFloat(markerNodes[i].getAttribute("lng")));

			createMarker(latlng, name, description, type);

			//geocode(name, address, description);
		}
	});
}


function createMarker(latlng, name, description, type) {

	var html = "<div id=\"infowindowReseller\"><h3>" + name + "</h3>" + description + "</div>";
	var marker = new google.maps.Marker({
		position: latlng,
		map: map,
		shadow: shadowArray[0],
		icon: pinsArray[type],
		shape: shapeArray[0],
		title: name
	});
	google.maps.event.addListener(marker, 'click', function() {
		infoWindow.setContent(html);
		infoWindow.open(map, marker);
	});
	markers.push(marker);
}


function clearLocations() {
	infoWindow.close();
	for (var i = 0; i < markers.length; i++) {
		markers[i].setMap(null);
	}
	markers.length = 0;
}





function codeAddress() {
	var address = document.getElementById("address").value;
	if (geocoder && address.length > 0) {

		if (!address.match(/New Zealand$/)) {
			address = address + " New Zealand";
		}


		geocoder.geocode({ 'address': address }, function(results, status) {
			if (status == google.maps.GeocoderStatus.OK) {
				map.setCenter(results[0].geometry.location);
				map.setZoom(11);

				//setMarkersWithinRadius(map, 50, results[0].geometry.location.lat(), results[0].geometry.location.lng());

			} else {
				$(".error.shopping-cart").fadeIn("normal").delay(4000).fadeOut("normal");
			}
		});
	}
}




function geocode(name, address, description) {

	if (!address.match(/New Zealand$/)) {
		address = address + " New Zealand";
	}

	geocoder.geocode({
		address: address,
		partialmatch: true
	},
            function geocodeResult(results, status) {
            	if (status == 'OK' && results.length > 0) {

            		console.log(name + ' - lat ' + results[0].geometry.location.lat() + ' / ' + 'lng ' + results[0].geometry.location.lng());

            		createMarker(results[0].geometry.location, name, description);

            	}
            	else {
            		alert("Geocode was not successful for the following reason: " + status);
            	}
            });
        } 
