/*
 * Geo.js - map javascript for Velistipercaso.it
 * ChannelWeb srl 
 */

var panYadjust = 100;
var panYadjustBounds = 280;
var map;
var markers	= {};

function initialize() {
	var timestamp = Number(new Date());

	var currentNickname	= $("meta[name='BEdita.content']").attr('content');
	var sectionNickname = $("#content").attr("rel");
	var latitude		= parseFloat($("meta[name='BEdita.latitude']").attr('content'));
	var longitude		= parseFloat($("meta[name='BEdita.longitude']").attr('content'));
	var mapZoom			= parseInt($("meta[name='BEdita.mapZoom']").attr('content'));
	var fitToBound		= false;

	// in some sections there is not a default content (such as diary) so fit to bounds all markers
	if (!$("meta[name='BEdita.content']").attr('content')) {
		fitToBound	= true;
	}
	// default center coords: italy
	if (isNaN(latitude)) {
		latitude = 41.87194;
	}
	if (isNaN(longitude)) {
		latitude =  12.567379999999957;
	}
	if (isNaN(mapZoom)) {
		mapZoom		= 5;
	}


	// GOOGLE MAP
	var myLatlng = new google.maps.LatLng(latitude, longitude);
	var myOptions = {
		zoom: mapZoom,
		center: myLatlng,
		scrollwheel: false,
		backgroundColor: "transparent",
    	mapTypeId: google.maps.MapTypeId.SATELLITE,
    	mapTypeControlOptions: {
//    		position: google.maps.ControlPosition.RIGHT_BOTTOM,
    		style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR
    	},
		streetViewControl: false,
		rotateControl: true,
		panControl: false,
		panControlOptions: {
			position: google.maps.ControlPosition.RIGHT_TOP
		},
		zoomControlOptions: {
			position: google.maps.ControlPosition.RIGHT_TOP,
			style: google.maps.ZoomControlStyle.DEFAULT
		}
  	}

	var infowindow = new google.maps.InfoWindow({
		content: "",
		size: new google.maps.Size(70,70)
	});

  	map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
	
	var locationHash = location.hash;
	
	
	for (i in section.childContents) {
				
		if (section.childContents[i].GeoTag != undefined && section.childContents[i].GeoTag[0].latitude != undefined && section.childContents[i].GeoTag[0].longitude != undefined) {
			var latitude = section.childContents[i].GeoTag[0].latitude;
			var longitude = section.childContents[i].GeoTag[0].longitude;

			if (latitude && longitude) {

				var point = new google.maps.LatLng( latitude, longitude );

				// union of bound to set the viewport to contain the given bounds
				if (bounds == undefined) {
					var bounds = new google.maps.LatLngBounds(point, point);
				} else {
					bounds.union(new google.maps.LatLngBounds(point, point));
				}

				var marker = new google.maps.Marker({
					position: point,
					map: map,
					title: section.childContents[i].title,
					icon: baseurl + "img/marker-adriatica.png",
					nickname: section.childContents[i].nickname
				});

				// add marker object to an array of markes with nickname as key
				markers[section.childContents[i].nickname] = marker;

				if (section.childContents[i].GeoTag[0].gmaps_lookat != null && section.childContents[i].GeoTag[0].gmaps_lookat.zoom != null) {
					marker.zoom = parseInt(section.childContents[i].GeoTag[0].gmaps_lookat.zoom);
				}

				var startDate = "";
				var dateonly = false;
				if (section.childContents[i].DateItem != undefined) {
					if (section.childContents[i].DateItem[0].start_date != null) {
						startDate = section.childContents[i].DateItem[0].start_date;
					}
				} else {
					if (section.childContents[i].start_date != null) {
						startDate = section.childContents[i].start_date;
						dateonly = true;
					}
				}
				addMarkerListner(marker, baseurl + section.childContents[i].canonicalPath.replace(/(^\/)/, ""), section.childContents[i].title, startDate, dateonly);

			}

		} else if ( currentNickname == section.childContents[i].nickname) {
			fitToBound = true;
		}

	}

	if (fitToBound) {
		map.fitBounds(bounds);
		map.panBy(0, panYadjustBounds);
		map.setZoom(map.getZoom() - 1);
	} else {
		// apply pan adjust
		map.panBy(0, panYadjust);
	}

	// load content by hash url
	if (locationHash) {
		var nickname = locationHash;
		nickname = nickname.replace("#", "");
		
		if (markers[nickname] != undefined) {
			google.maps.event.trigger(markers[nickname], 'click');
		}
		var url = location.href;
		url = url.replace(location.hash, "");
		url += "/" + nickname;
		loadContent(url, nickname);
	}	

	function addMarkerListner(marker, url, title, date, dateonly) {
		// add listener to marker for clicks
		google.maps.event.addListener(marker, 'click', function(event) {
				
			map.panTo(marker.getPosition());
			map.panBy(0, panYadjust);
			var prettyDate = formatDate(date, dateonly);
			var message = (prettyDate)? prettyDate : "";
			message	+= "<div style='color:#3399CC; margin: 5px 0;'>" + title + "</div><a onclick='javscript: loadContent(\""+url+"\",\""+marker.nickname+"\");' href='javascript:void(0);'>Apri &rsaquo;</a>";
			infowindow.setContent(message);
			infowindow.open(map,marker);

			// list diary
			if ($("ul#diary_menu").length == 1) {
				$(".scrollpane").find(".column").removeClass("diary_on");
				var diaryAnchor = $(".scrollpane").find("a[rel=" + marker.nickname + "]:first");
				// if hidden emule tab click
				if (diaryAnchor.parents(".scrollpane:visible").length == 0) {
					var scrollpaneRel = diaryAnchor.parents(".scrollpane").attr("rel");
					$("#diary_menu li[rel=" + scrollpaneRel + "]").click();
				}
				var api = diaryAnchor.parents(".scrollpane").data('jsp');
				var columnParent = diaryAnchor.parents(".column:first");
				var x = columnParent.outerWidth() * columnParent.prevAll().length;
				api.scrollToX(x);
				columnParent.addClass("diary_on");

			}
			
		});
		
		// add listener to marker for clicks
		google.maps.event.addListener(marker, 'dblclick', function(event) {
			// only load via ajax if not in diary horizontal view
			if ($("ul#diary_menu").length > 0) {
				window.location.href = url;
			}
		});
	}
	
}

/**
 * load content via ajax and set hash in the url
 */
function loadContent(url, urlHash) {
	if (window['isHome'] != undefined) {
		window.location.href = url;
	} else {
		hideContent();
		$("#content_container").removeClass("content_container_diary").css("height", "");
		$("#content").children().css("visibility", "hidden");
		// force remove width from center_content, used for diary section 
		$("#center_content").css("width", "");
		location.hash = urlHash;
		// ajax call
		$("#content").addClass("loader");
		$.ajax({
			context: document.body,
			url: url,
			dataType: "html",
			success: function(data, textStatus, jqXHR){
				$("#content").removeClass("loader");
				try {
					$("#content").html(data);
					$("title").text($("h1.siblings.on").text() + " - " + $("meta[name='BEdita.titlePage']").attr('content'));
				} catch(ex) {

				}

				showContent();

			}
		});
	}
}

function formatDate(date, dateonly) {
	if (!date) return false;

	var days	= new Array("Domenica", "Lunedì", "Martedì", "Mercoledì", "Giovedì", "Venerdì", "Sabato");
	var months	= new Array("Gennaio", "Febbraio", "Marzo", "Aprile", "Magio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre");
	var jsDate	= new Date;

	dateTmp = date.split(" ");
	dateArray = dateTmp[0].split("-");
	timeArray = dateTmp[1].split(":");

	jsDate.setYear(dateArray[0]);
	jsDate.setMonth(dateArray[1] - 1);
	jsDate.setDate(dateArray[2] - 1);
	jsDate.setHours(timeArray[0]);
	jsDate.setMinutes(timeArray[1]);

	var returnDate = days[jsDate.getDay()] + " " +
				jsDate.getDate() + " " +
				months[jsDate.getMonth()] + " " +
				jsDate.getFullYear();
	if (!dateonly) {
		returnDate += "<br/>Ore " +
			timeArray[0] + ":" +
			timeArray[1];
	}

	return	returnDate; 
}



function loadScript() {
  var script = document.createElement("script");
  script.type = "text/javascript";
  script.src = "http://maps.google.com/maps/api/js?sensor=false&callback=initialize";
  document.body.appendChild(script);
}
 
$(document).ready( function () {
	
	// trigger marker click on DOM items
	$(".triggermarker").live("click", function(event) {
		event.preventDefault();
		var nickname = $(this).attr("rel");
		if (!nickname) {
			return;
		}
		// if object is in map perform click on marker
		if (markers[nickname] != undefined) {
			google.maps.event.trigger(markers[nickname], 'click');
		// if in home redirect
		} else if (window['isHome'] != undefined) {
			var url = $(this).attr("href");
			url = url.replace(/#.+/, "");
			url += "/" + nickname;
			location.href = url;
			return;
		}
		
		// se non sono nel diario visualizzazione orizzontale e non sono in home
		if ($("ul#diary_menu").length == 0 && window['isHome'] == undefined) {
			var url = location.href;
			url = url.replace(location.hash, "");
			url += "/" + nickname;
			loadContent(url, nickname);
		}
	});

	
	if (!$("#content_container").hasClass("content_only")) {
		loadScript();
	} else {
		
	}
});

