﻿/*
Map helper v0.3
============================

v0.4

v0.3 (2009-05-06)
Changelog 
- ported to jquery
  
v0.2 (2009-03-16)
Changelog 
- partial ported to jquery
  
  
v0.1 (2008-08-24)
Changelog 
- clean up code
- removed ewindow

(c) Tobias Nygren
http://petersonnygren.se
----------------------------	
*/

//constants
var MAP_DEFAULT_CENTER_LAT = 57.78321268140434;
var MAP_DEFAULT_CENTER_LNG = 14.168672561645508;
var MAP_DEFAULT_ZOOM = 15;
var MAP_DEFAULT_MARKER_IMAGE = "";



//global variables
var map;
var icon;
var xmlresponse = 0;

//global markers array
var marar = [];

//load google map
var apiKeys = new Array();
apiKeys["local-irevoice"] = "ABQIAAAA0lFwEcqsY2GnWgKCqLgS6RSjq1YJYktI6VnsoZ_jvqUI8hb3aBTdttWAr3wJImNvKIzLIAfJdWttaA";
apiKeys["lammhultsdesigngroup.kund.litium.se"] = "ABQIAAAA0lFwEcqsY2GnWgKCqLgS6RQ5QdnjCgBrah8qxQUygVMurlfhNxSgPfF-OuqwePwxWGaHN-8kEVxKXw";
apiKeys["lammhultshome.se"] = "ABQIAAAA0lFwEcqsY2GnWgKCqLgS6RR - bqpskO5Z3T6wqUfqT7kg4fvxzxScvvYtU5mdkLIw95870gPV1ktK8A";
apiKeys["www.irevoice.se"] = "ABQIAAAA0lFwEcqsY2GnWgKCqLgS6RRgMRFc7USyDnd-lTpcxyx43rBJdRR5IX0pjvIhBFpZwhWfy5WbOnCkcg";
apiKeys["irevoice.se"] = "ABQIAAAA0lFwEcqsY2GnWgKCqLgS6RRgMRFc7USyDnd-lTpcxyx43rBJdRR5IX0pjvIhBFpZwhWfy5WbOnCkcg";
apiKeys["www.voice.eu"] = "ABQIAAAAF4YVwL8blfqOyKbi16EhPhR9jEVHE_hdCqzVLpVIrTO8jhQMqRQuwmaj1Vi-KX9cODywpCenw1_-PQ";
apiKeys["voice.eu"] = "ABQIAAAAF4YVwL8blfqOyKbi16EhPhSTNFBM8ga6BojH3McgUkAZ8c-DFBTFnNzUidSsKQtf4P_zH4_I0aAy6A";
apiKeys["www.iremobel.se"] = "ABQIAAAAF4YVwL8blfqOyKbi16EhPhQsa73Q6W4JOlKuxG2rdbD7KSdd_RT0y52abbSnizhWl9Y2rkHa6dNtXA";
apiKeys["iremobel.se"] = "ABQIAAAAF4YVwL8blfqOyKbi16EhPhQt-w6oqXW3z1FNI92J0YHTjTl4txTQUzaT2XA8omRPlOrI97Mx5vriRA";
document.write("<script type='text/javascript' src='http://maps.google.com/maps?file=api&v=2.x&key=" + apiKeys[location.hostname] + "&sensor=false'></script>");


jQuery(document).ready(function($) {

/*
	if (GBrowserIsCompatible() && document.getElementById("map")) 
		createMap($);
*/

createMap($)

	window.onunload = GUnload;

});


/**
* Creates the map
* @param {Object} $ jquery object
*/
function createMap($) {

	//init the map
	initMap();

	//init marker icon
	var icon = createMarkerIcon();


	showAddress();

	//get map data and create markers
	/**
	new GDownloadUrl(MAP_MARKERS_XML_URL,
		function(data, responseCode) {
			createMapMarkers(data);
		});
	**/
	
	//show map
	$('#map')[0].style.visibility = 'visible';
}

/**
* Init map and set default properties
*/
function initMap() {
	//init map
	map = new GMap2(document.getElementById("map"));
	map.setCenter(new GLatLng(MAP_DEFAULT_CENTER_LAT, MAP_DEFAULT_CENTER_LNG), MAP_DEFAULT_ZOOM);

	//start as normal map
	map.setMapType(G_NORMAL_MAP);

	//small overview map
	//map.addControl(new GOverviewMapControl(new GSize(80, 80)));

	//use default ui buttons
	map.setUIToDefault();

	//enable cursor keys to pane map
	new GKeyboardHandler(map);

	//enable scroll wheel zoom	
	map.enableScrollWheelZoom();

}

/**
* Creates GIcon
* @return return google icon
*/
function createMarkerIcon() {
	var icon = new GIcon();

	icon.image = MAP_DEFAULT_MARKER_IMAGE;
	icon.iconSize = new GSize(24, 32);
	icon.iconAnchor = new GPoint(1, 32);
	icon.infoWindowAnchor = new GPoint(32, 1);

	return icon;
}

/**
* show address
*/
function showAddress() {

	var geocoder = new GClientGeocoder();

	var address = $("#mapAddress1")[0].innerHTML + "," + $("#mapAddress2")[0].innerHTML;

  geocoder.getLatLng(
    address,
    function(point) {
      if (!point) {
        //alert(address + " not found");
        $('#retailer-pop .col-1').hide();
      } else {
      map.setCenter(point, MAP_DEFAULT_ZOOM);
        var marker = new GMarker(point);
        map.addOverlay(marker);
      }
    }
  );
}




/**
* Process markers and add to map
* @param {Object} markers
*/
function processMarkers(markers) {
	//loop through markers
	for (var i = 0; i < markers.length; i++) {
		//get marker data
		var lat = parseFloat(markers[i].getAttribute("lat"));
		var lng = parseFloat(markers[i].getAttribute("lng"));
		var name = markers[i].getAttribute("name");
		var desc = markers[i].getAttribute("content");

		//create info window contents  
		var info = ("<h4>" + name + "</h4><br />") + decodeHTML(desc);

		//add marker to map
		var markerCarrier = new MarkerCarrier();
		markerCarrier.lat = lat;
		markerCarrier.lng = lng;
		markerCarrier.title = name;
		markerCarrier.info = info;
		markerCarrier.icon = createMarkerIcon();

		addMarkerToMap2(markerCarrier, map);

		//addMarkerToMap(lat, lng, map, info, icon, name);
	}

}

/**
* Create map markers
* @param {Object} data
*/
function createMapMarkers(data) {
	if (data != null) {

		xml = GXml.parse(data);
		var markers = xml.documentElement.getElementsByTagName("place");

		//add markers to map
		processMarkers(markers);
	}
}

/**
* Decodes < > and & from encoded string
* @param {Object} str
* @return string
*/
function decodeHTML(str) {
	return str.replace(/&amp;/g, '&').replace(/&lt;/g, '<').replace(/&gt;/g, '>');
}


/**
* Adds marker to map
* @param {MarkerCarrier} markerCarrier
* @param {Object} map_ map object
*/
function addMarkerToMap2(markerCarrier, map) {
	var point = new GLatLng(markerCarrier.lat, markerCarrier.lng);

	map.addOverlay(createMarker(point, markerCarrier.info, markerCarrier.icon, markerCarrier.title));
};


/**
* Creates new marker
* @param {Object} point
* @param {Object} info_
* @param {Object} icon_
* @param {Object} title_
*/
function createMarker(point, info_, icon_, title_) {
	var marker = new GMarker(point, { icon: icon_, clickable: true, title: title_ });
	marar[title_] = (marker);
	var lastmarkerpos = (marar.length - 1);

	GEvent.addListener(marker, "click", function() {
		var text = '<div style="font-family:arial;">' + info_ + "</div>";
		marker.openInfoWindowHtml(text, { maxWidth: 300 });
	});

	return marker;
};


/**
* Marker carrier class
* @param {string} lat_ longitude
* @param {string} lng_ latitude
* @param {Object} info_ info window
* @param {Object} icon icon
* @param {Object} title_ title */
function MarkerCarrier() {
	this.lat;
	this.lng;
	this.info;
	this.icon;
	this.title;
}

