var language = null;

var translations = new Array();
translations['fi'] = {
	closerDetails : "Tarkemmat yhteystiedot"
};

translations['en'] = {
	closerDetails : "Check details"
};

translations['ru'] = {
	closerDetails : "Контактные данные подразделения"
};


var selections = {
	
	currentSelection : "showAll",
	
	show : function(selection)
	{
		if (selection == selections.currentSelection) return;
		$('#' + selections.currentSelection).removeClass('selected');
		selections.currentSelection = selection;
		$('#' + selections.currentSelection).addClass('selected');
		
		contactsMap.clearMarkers();
		contactsMap.loadMarkers();
	}
}

var contactsMap = {
	
	lang	 			: null,
	defaultLatitude 	: 63.74363097533544,
	defaultLongitude 	: 23.02734375,
	defaultZoomLevel	: 4,
	
	map					: null,
	markers				: [],
	
	singleContactPath	: null,
	
	initialize : function(lang)
	{
		this.lang = lang;
		language = translations[lang];
		this.initializeGoogleMap();
	},
	
	setSingleContactPath : function(path)
	{
		this.singleContactPath = path;
	},
	
	setDefaultZoomLevel : function(level)
	{
		this.defaultZoomLevel = level;
	},
	
	initializeGoogleMap : function()
	{
		if (GBrowserIsCompatible()) {
			this.map = new GMap2(document.getElementById("mapArea"));
			this.map.setCenter(new GLatLng(this.defaultLatitude, this.defaultLongitude), this.defaultZoomLevel);
			//this.map.addControl(new GLargeMapControl());
			var mapControl = new GMapTypeControl();
			this.map.addControl(mapControl);
			this.map.addMapType(G_PHYSICAL_MAP);
			var uiOptions = this.map.getDefaultUI();
			uiOptions.zoom.doubleClick = true;
			uiOptions.controls.scaleControl = true;
			this.map.setUI(uiOptions); 			
		}
		
		this.loadMarkers(); 
	},
	
	loadMarkers : function()
	{
		$.getJSON('?mapaction=getmarkers&type=' + selections.currentSelection, contactsMap.loadMarkersCallback);
	},
	
	loadMarkersCallback : function(jsonData)
	{
		contactsMap.populateMarkers(jsonData);
	},
	
	populateMarkers : function(json)
	{
		if(json.contacts && json.contacts.length) {
			for (var i=0; i<json.contacts.length; i++) {
				var markerObject = new Marker(json.contacts[i]);
				this.map.addOverlay(markerObject);
				this.markers.push(markerObject);
			}
		}
	},
	
	clearMarkers : function() 
	{
		while(this.markers.length > 0 ) {
			this.map.removeOverlay( this.markers.shift() );
		}
	}
};

function Marker(data)
{
	var markerIcon = null;
	
	switch(data.type) {
		case "Logistics":
			markerIcon = new Icon("/static/images/www/contacts/LogisticsIcon.gif", 16, 16);
			break;
		case "Heavy":
			markerIcon = new Icon("/static/images/www/contacts/HeavyIcon.gif", 16, 16);
			break;
		case "Cargo":
			markerIcon = new Icon("/static/images/www/contacts/CargoIcon.gif", 16, 16);
			break;
	}
	
	var markerPoint = new GLatLng(
		parseFloat(data.latitude),
		parseFloat(data.longitude)
	);
				
	var mapMarker = new GMarker(markerPoint, markerIcon);
	GEvent.addListener(mapMarker, "click", function() {
        mapMarker.openInfoWindowHtml(createInfoWindowHtml(data));
    });
	
	return mapMarker;
}

function createInfoWindowHtml(data) {
	var html = "";
	
	html += '<h2>' + data.name + '</h2>';
	if (data.address != '') html += '<p class="contactBubbleInfo">' + data.address + '</p>';
	if (data.city != '') html += '<p class="contactBubbleInfo">' + data.city + '</p>';
	if (data.country != '') html += '<p class="contactBubbleInfo">' + data.country + '</p>';
	html += '<p class="contactBubbleLink"><a href="' + contactsMap.singleContactPath + '?id=' + data.id + '">' + language.closerDetails + '</p></a>';
	return html;
}

function Icon(image,width,height) {
	var icon = new GIcon();
	icon.image = image;
	icon.iconSize = new GSize(width,height);
	icon.iconAnchor = new GPoint(width / 2, height);
	icon.infoWindowAnchor = new GPoint(width / 2, 1);
	return icon;
}	