//<script language="javascript" type="text/javascript">

// defaults that may be changed by the page
offerid = '';
taborder = '123456789'.split('');

locations = new Array();
// temporary function, only used to fill the locations array (saves bandwidth)
function f(id, name, latitude, longitude, businessStore, icon_id, highlight_icon_id) {
	locations[id] = { 'id': id, 'name': name, 'latitude': latitude, 'longitude': longitude, 'businessStore': businessStore, 'icon_id': icon_id, 'highlight_icon_id': highlight_icon_id };
}
f(32,'ARC DE TRIOMPHE AUTO',48.87484900,2.29344900,0,1,0);
f(33,'ARC DE TRIOMPHE AUTO',48.89050400,2.30330600,0,1,0);
f(31,'CAB NATION',48.81722115,2.36017227,0,1,0);
f(2,'CENTRE AUTOMOBILE BIZOT NATION',48.83879089,2.40411806,0,1,0);
f(4,'INTERMAP FRANCE SA - COPADA',48.88552400,2.38631800,0,1,0);
f(18,'INTERMAP FRANCE SA - NOVELLA AUTOMOBILES',48.84321976,2.24541712,0,1,0);
f(23,'INTERMAP FRANCE SA - SAINT OUEN',48.90535736,2.33264208,0,1,0);
f(51,'NEUBAUER',48.89425140,2.27930910,0,1,0);
f(35,'NEUBAUER PARIS',48.83434420,2.30859400,0,1,0);
groupings = new Array();
icons = new Array();
icons[1] = { 'id': 1, 'url': '/img/icons/icon_0.png', 'width': 22, 'height': 47, 'shadow_url': '', 'shadow_width': 0, 'shadow_height': 0 };



function initialize_map() {
	if (GBrowserIsCompatible()) {
				GM = new GMap2(document.getElementById("map"));
		GM.setCenter(new GLatLng(48.843028, 2.375793), 9);
				GM.enableDoubleClickZoom();
				
		//GMMgr = new GMarkerManager(GM, { 'borderPadding': 0 });
		GMMgr = new SMarkerManager(GM);

				GM.addControl(new GLargeMapControl());
		GM.addControl(new GMapTypeControl());
		GM.addControl(new GScaleControl());

		// ====== Restricting the range of Zoom Levels =====
 	    // Get the list of map types      
 	    var mt = GM.getMapTypes();
	    // Overwrite the getMinimumResolution() and getMaximumResolution() methods
	    for (var i=0; i<mt.length; i++) {
		  mt[i].getMinimumResolution = function() {return 5;}
		  //mt[i].getMaximumResolution = function() {return 16;}
	    }

				for (var iconid in icons) {
			var icon = icons[iconid];
			var gi = new GIcon();
			gi.image = icon.url;
			gi.iconSize = new GSize(icon.width, icon.height);
			gi.shadow = icon.shadow_url;
			gi.shadowSize = new GSize(icon.shadow_width, icon.shadow_height);
			gi.iconAnchor = new GPoint(icon.width / 2, icon.height / 2);
			gi.infoWindowAnchor = new GPoint(icon.width / 2, 0);
			icon.gicon = gi;
		}

				for (var locid in locations) {
			var loc = locations[locid];
			loc.glatlng = new GLatLng(loc.latitude, loc.longitude);
			loc.gmarker = new GMarker(loc.glatlng, icons[loc.icon_id].gicon);
			GEvent.addListener(loc.gmarker, 'click', curryFunction(function(myloc) {
				createTabs(myloc.id, 0);
			}, loc));

			var grouped = false;
						for (var grpid in groupings) {
				var grp = groupings[grpid];
				var distance = computeDistance(loc.latitude, loc.longitude, grp.latitude, grp.longitude);
				if (distance < grp.radius) {
					grouped = true;
					break;
				}
			}
						GMMgr.addMarker(loc.gmarker, (grouped ? 9 : 0));
		}

		
				for (var grpid in groupings) {
			var grp = groupings[grpid];
			grp.glatlng = new GLatLng(grp.latitude, grp.longitude);
			grp.gmarker = new GMarker(grp.glatlng, icons[grp.icon_id].gicon);
			GEvent.addListener(grp.gmarker, "click", curryFunction(function(mygrp) { 
				GM.setZoom(9);
				GM.panTo(mygrp.glatlng);
			}, grp));
			GMMgr.addMarker(grp.gmarker, 0, 8);
		}
		
	} else {
        var header = 'Sorry, this map cannot be displayed.';
        var main   = 'Your browser does not support features required to run the map application.';
        if (document.getElementById) {
            var html = '<h1>' + header + '</h1>';
            html +=    '<p>' + main + '</p>';
            document.getElementById('map').innerHTML = html;
        } else {
            alert(header + '\n' + main);
        }
    }
	
}

function curryFunction() {
	var curriedArgs = new Array();
	var f = arguments[0];
	for (var i = 1; i < arguments.length; i++) {
		curriedArgs[curriedArgs.length] = arguments[i];
	}
	return function() {
		var newArgs = new Array();
		for (var i = 0; i < curriedArgs.length; i++) {
			newArgs[newArgs.length] = curriedArgs[i];
		}
		for (var i = 0; i < arguments.length; i++) {
			newArgs[newArgs.length] = arguments[i];
		}
		return f.apply(null, newArgs);
	}
}

function createTabs(id) {
		        GDownloadUrl("data.php?q=" + Math.random() + "&id=" + id + "&offerid=" + offerid, function(data, responseCode) {
            var xml = GXml.parse(data);
            var tabs = xml.documentElement.getElementsByTagName("tab");
            infoTabs = new Array();
            for (i=0;i < tabs.length;i++) {
                try {
                    sText = tabs[i].childNodes[0].nodeValue;
                } catch (e) {
                    sText = '';
                }
                infoTabs[i] = new GInfoWindowTab(tabs[i].getAttribute("title"), sText);
            }
						var orderedTabs = new Array();
			for (i = 0; i < taborder.length; i++) {
				var tabnumber = taborder[i] - 1; 				if (tabnumber < infoTabs.length) {
					orderedTabs[orderedTabs.length] = infoTabs[tabnumber];
				}
			}
			openInfoWindowTabs(locations[id].gmarker, orderedTabs);
        });
		
		// Call the Google Analytics function in order to log the stores clicked
		//urchinTracker('/track_map_locations/location_' + id);
}

function openInfoWindowTabs(gmarker, tabs) {
		try {
		gmarker.openInfoWindowTabs(tabs);
	}
	catch (Exception) {
		window.setTimeout(curryFunction(openInfoWindowTabs, gmarker, tabs), 1);
	}
}

function doPan(id) {
    if (id != '') {
        GM.setZoom(17);
        GM.panTo(locations[id].glatlng);
		        setTimeout(curryFunction(createTabs, id), 100);
    }
}

function computeDistance(lat1, lng1, lat2, lng2) {
	var dlat  = (lat1 - lat2) * Math.PI / 180;
	var dlng = (lng1 - lng2) * Math.PI / 180;
	var a = Math.sin(dlat/2) * Math.sin(dlat/2) + Math.cos(lat1) * Math.cos(lat2) * Math.sin(dlng/2) * Math.sin(dlng/2);
	return 6371 * 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
}


function showPrintWindow(id) {
	var center = GM.getCenter();
	var zoom = GM.getZoom();
	// PREVIOUS window.open("map-print.php?printstore=" + id + "&lat=" + center.lat() + "&lng=" + center.lng() + "&zoom=" + zoom, "print");
	window.open("map-print.php?printstore=" + id + "&lat=" + center.lat() + "&lng=" + center.lng() + "&zoom=" + zoom + "&offerid=" + offerid, "print");
}

function initPrintWindow(id, lat, lng, zoom) {
	GM.setCenter(new GLatLng(lat, lng), zoom);

    // PREVIOUS GDownloadUrl("data.php?q=" + Math.random() + "&id=" + id, function(data, responseCode) {
	GDownloadUrl("data.php?q=" + Math.random() + "&id=" + id + "&offerid=" + offerid, function(data, responseCode) {
		//alert(data);
        var xml = GXml.parse(data);
        var id = xml.documentElement.getElementsByTagName("id")[0].childNodes[0].nodeValue;
		var tabs = xml.documentElement.getElementsByTagName("tab");
		var sText = tabs[0].childNodes[0].nodeValue; 		document.getElementById('storeinfo').innerHTML = sText;
		var loc = locations[id];
		var youarehere = new GMarker(loc.glatlng, icons[9].gicon); // XXX HARDCODED ICON ID
		window.setTimeout(function() { GMMgr.addMarker(youarehere, 0); print(); }, 100);
    });

}

function waitSearch(path){
	path.value = "searching...";
}
//</script>
