//require JQuery
var collapsers = {};
function ClickOff(el){
	var e = $(el), keep = e.attr('keep');
	$(document).mousedown(function (evt){
			var t =evt.target;
			if(keep && $(t).is(keep)) return false;
			if($(t).is('.collapser')) return false;
			if(!$(t).parents('#'+ el.id).length &&  t!=e ){
				if(collapsers[el.id]){
						collapsers[el.id].collapse();
				}
				else {
					return false;
				}
			}
			return true;
		})
}

var mapAddress = function (){
	var elements =$('.map-address');
	var mapIndex = 0;
	if(!elements.length) return ;
	//var google_initialized= false;
	var geocoder = null;
	//function initialize() {
	//	google_initialized=true;
	//	geocoder=new GClientGeocoder();
	//}
	//google.setOnLoadCallback(initialize);
	function showMap(options,results,address){
		var mapId = "map"+ (mapIndex++);
		$('body').append('<div id="'+mapId+'" style="width:500px;height:400px"></div>');
		
		$('#'+mapId).dialog({modal:true,title:address,width:500,height:400}).bind('dialogclose',function (event,ui){
			$('#'+mapId).remove()
		});
		var map = new google.maps.Map(document.getElementById(mapId), options);
		var marker = new google.maps.Marker({position: results[0].geometry.location, map: map});
	}
	var address_click = function (el){
		if(!geocoder) geocoder = new google.maps.Geocoder();// google.maps.Geocoder();
		var address = $(el).attr('address');
		
		geocoder.geocode({'address': address},function (results,status){
			if (status == google.maps.GeocoderStatus.OK) {
				var options = {
					zoom: 16,
	                center: results[0].geometry.location,
	                mapTypeId: google.maps.MapTypeId.ROADMAP
	            };
				showMap(options,results,address);
			}
		});
	}
	elements.each(function (){
		var address = '';
		address=$(this).attr('title');
		if(!address) {
			address = $(this).text();
		}
		$(this).attr('address',address);
		this.title = r('view_map');
		$(this).click(function (){
			address_click(this);
		})
	})
	
}//end mapAddress
function mapDirection(){
	var directions = $('.map-direction');
	if(!directions.length){
		return ;
	}
	var parseLatLong = function (s){
		var re = new RegExp('-*\d+\.+\d+,{1}\s*-*\d+\.+\d+');
		if(re.test(s)) {
			var ll=s.split(",");
			return  new google.maps.LatLng(
												parseFloat($.trim(ll[0])),
												parseFloat($.trim(ll[1]))
												);
		}
		return s;
	}
	directions.each(function (){
		var jq = $(this),
		origin = jq.attr('origin'),
		destination = jq.attr('destination'),
		zoom = jq.attr('mapzoom')
		;
		if(!zoom) zoom =14;
		else zoom = parseInt(zoom);
		var travelMode = jq.attr('travelmode');
		if(travelMode) travelMode = google.maps.DirectionsTravelMode[travelMode];
		else travelMode = google.maps.DirectionsTravelMode.WALKING;
		if(origin && destination){
			origin = parseLatLong(origin);
			destination = parseLatLong(destination);
			var svc = new google.maps.DirectionsService();
			var myOptions = {
				zoom:zoom,
				mapTypeId: google.maps.MapTypeId.ROADMAP,
				center:new google.maps.LatLng(43.76704, 11.24051)
			}
			var directionsDisplay = new google.maps.DirectionsRenderer();
			var map = new google.maps.Map(this, myOptions);
			directionsDisplay.setMap(map);
			svc.route({origin:origin,destination:destination,travelMode:travelMode},function (result,status){
				if(status == google.maps.DirectionsStatus.OK) {
					directionsDisplay.setDirections(result);
				}
				else {
					console.log(status);
				}
			});
		}
	})
}
function meteoLoader(){

var code='<iframe width="200" height="299" scrolling="no" frameborder="no" noresize="noresize" src="http://www.ilmeteo.it/box/previsioni.php?citta=2798&type=mps1&width=190&ico=2&lang='+alt_lang+'&days=2&font=Arial&fontsize=11&bg=FAF9EE&fg=000000&bgtitle=595851&fgtitle=FFFFFF&bgtab=FFFCDF&fglink=746536"></iframe>';
	
$('#ilMeteo').append(code)	;
}
$(function (){
	
	$('img.shadow').each(function (){
		var img = $(this);
		var styl = img.attr('style');
		img.attr('style','');
		img.wrap('<div class="shadow" style="' + styl + '">'+
		'<div class="shadow1">'+
		'<div class="shadow2">'+
		'<div class="shadow3">'+
		'<div class="inner">'+
		'</div></div></div></div></div>');
		img.removeClass('shadow');
		img.after('<div class="clear"></div>');
	});
	
	var collapser_collapsed_class='ui-icon ui-icon-triangle-1-s';
	var collapser_expanded_class='ui-icon ui-icon-triangle-1-n';
	$('.collapser').each(function (){
		var e = $(this),el=this,p=e.parent() ;
		el.status =  e.hasClass('collapsed')?'expanded':'collapsed';
		var rel = e.attr('rel');
		if(rel){
			el.rel = $('#'+ rel);
			collapsers[rel]=el;
			el.collapsed = (el.status=='collapsed');
			if(p.css('position')!='absolute') {
				p.css({'position':'relative'});
			}
			el.collapse = function (){
				this.collapsed = true;
				this.rel.hide();
				$(this).removeClass(collapser_expanded_class).addClass(collapser_collapsed_class);
			}
			el.expand = function (){
				this.collapsed = false;
				this.rel.show();
				$(this).removeClass(collapser_collapsed_class).addClass(collapser_expanded_class);				
			}
			el.toggle = function (){
				var e = this;
				if(e.collapsed) e.expand();
				else e.collapse();
			}
			var cliccable = (e.hasClass ('parentclick'))?e.parent():e;
			cliccable.click(function (){
				if(this.toggle) this.toggle();
				else {
					$(this).find('.collapser').each(function (){
						this.toggle();
					})
				}
			});
			el.toggle();
		}
	});
	$('.click-off').each(function (){
		ClickOff(this);
	})		;
	mapAddress();
	mapDirection();
	meteoLoader();
})
