$.postJSON = function(url, data, func) { $.post(url+(url.indexOf("?") == -1 ? "?" : "&")+"callback=?", data, func, "json"); }

function in_array (needle, haystack, argStrict) {

	var key = '',
	strict = !! argStrict;
	
	if (strict) {
		for (key in haystack) {
			if (haystack[key] === needle) {
				return true;
			}
		}
	} else {
		for (key in haystack) {
			if (haystack[key] == needle) {
				return true;
			}
		}
	} 
	return false;
}

function is_object (mixed_var) {
	if (mixed_var instanceof Array) {
		return false;
	} else {
		return (mixed_var !== null) && (typeof(mixed_var) == 'object');
	}
}

var aud = {}

aud.address = 'Via Massimiliano Massimo, 1 00144 - Roma';

aud.baseurl = '/';

aud.plan = function(obj){
	var plan = obj.plan,
		offset = {};
		
	obj.coord = obj.coord.split(';');
	
	offset.left = obj.coord[0].split(':')[1];
	offset.top = obj.coord[1].split(':')[1];
	
	$('img.spec-plan').fadeOut(300, function(){$(this).remove()});
	
	$('<img class="spec-plan" src="' + plan + '" />').appendTo($('#plan-container'))
								   .css({
								   		display:  'none',
								   		position: 'absolute',
								   		top:	  offset.top + 'px',
								   		left:	  offset.left + 'px',
								   		zIndex:	  5
								   }).fadeIn(300);
		
}

var gal = aud.gallery;

gal = function(container){
	var li = $(container).find('li.gal-item'),
		ul = $(container).find('ul.gallery'),
		li_width = li.css('width');
	gal.w = li.width();
	gal.ts = li.length - 1;
	gal.t = 0;
	
	var container_width = $(container).width();
	var ul_width = (parseFloat(li_width) * li.length) + (10 * li.length); //10  il margin (margin: 0 5px);
	
	ul_width = (ul_width < container_width) ? container_width : ul_width;
	
	if(ul_width > container_width){
		var btns = gal.createBtn(container);
		$.each(btns, function(i, btn){
			$(btn).click(function(){
				var to = $(this).find('a').attr('href');
				if($.browser.msie && $.browser.version <= 7){
					to = to.split('#');
					to = '#' + to[1];
				}
				gal.animate(to, ul);
			}).find('a').click(function(e){
				try{
					e.preventDefault();
				}catch(exc){
					return false;
				}
			});
		})
	}
	
	ul.width(ul_width);	
}

gal.createBtn = function(container){
	var next = '<span class="gal-btn" id="nextGalBtn">\
					<a href="#next">Next</a>\
				</span>';
	var prev = '<span class="gal-btn" id="prevGalBtn">\
					<a href="#prev">Prev</a>\
				</span>';
				
	return $(next+prev).appendTo($(container));
}

gal.animate = function(to, ul){
	
	var margin = $(ul).css('margin-left'),
		ot = gal.t;

	margin = parseFloat(margin);
	switch(to){
		case '#next':
			gal.t = (ot >= gal.ts) ? gal.ts : gal.t + 1;
		break;
		case '#prev':
			gal.t = (gal.t <= 0) ? 0 : gal.t - 1;
		break;
	}
		p = (gal.t*(gal.w+10)*-1);

		$(ul).animate(
			{ marginLeft: p }, 
			{ queue:false, duration:300}
		);

}

aud.map = function(obj){
		
	var lat,
		lng,
		m_lat,
		m_lng,
		ico,
		directionDisplay;
		directionsService = new google.maps.DirectionsService();
		
	
	if( ("lat" in obj) && ("lng" in obj) ){
		
		lat = obj.lat;
		lng = obj.lng;
		
		m_lat = lat;
		m_lng = lng;
		
		ico = obj.ico;
		
		if( ("m_lat" in obj) && ("m_lng" in obj) ){
			m_lat = obj.m_lat;
			m_lng = obj.m_lng;
		}
		
		if( !('ico' in obj) ){
			ico = aud.baseurl + "img/marker.png";
		}
			
		var makeMarker = function(point,icona){
			var spriteMarker = new google.maps.Marker({
				map: mapp,
				position: point,
				icon: icona
			});
		};
		
		var rendererOptions = {
			draggable: true
		};
		
		directionsDisplay = new google.maps.DirectionsRenderer(rendererOptions);
		var mapp,
			Latlng = new google.maps.LatLng(lat, lng),
			MarkerLatlng = new google.maps.LatLng(m_lat, m_lng),	
			MarkerIcon = new google.maps.MarkerImage(
				ico,
				new google.maps.Size(55, 37), /* dimensioni dell'img */
				new google.maps.Point(0,0),	  /* l'origine dell'img 0,0 */
				new google.maps.Point(22, 33) /* l'ancora per l'img 49,65 */
			);

		var Options = {
			zoom:16,
			center: Latlng,
			navigationControl: true,
			mapTypeControl: true,
			scrollwheel: false,
			backgroundColor: '#ffffff',
			mapTypeControlOptions: {style: google.maps.MapTypeControlStyle.DROPDOWN_MENU,position: google.maps.ControlPosition.TOP_RIGHT},
			navigationControlOptions: {style: google.maps.NavigationControlStyle.DEFAULTS,position: google.maps.ControlPosition.TOP_LEFT},
			mapTypeId: google.maps.MapTypeId.ROADMAP
		};
		
		mapp = new google.maps.Map(document.getElementById("mapcanvas"), Options);
		
		directionsDisplay.setMap(mapp);
		directionsDisplay.setPanel(document.getElementById("directionsPanel"));
		
		makeMarker(MarkerLatlng, MarkerIcon);
		
		google.maps.event.trigger(mapp, 'resize');
		//mapp.setZoom( map.getZoom() );
	}else{
		//console.info("Error loading map! lat and lng wrong in obj");
	}
}


aud.calculateRoutes = function(start, end) {
	if(!start) return false;
	var request = {
		origin:start, 
		destination:end,
		travelMode: google.maps.DirectionsTravelMode.DRIVING,
		unitSystem: google.maps.DirectionsUnitSystem.METRIC,
		provideRouteAlternatives: true
	};
	
	directionsService.route(request, function(response, status){
		if (status == google.maps.DirectionsStatus.OK) {
			$("#loading").fadeOut(300);
			$("#directionsPanel").html("");
			directionsDisplay.setDirections(response);
		} else {
			$("#directionsPanel").html("<div>Indirizzo non trovato</div>");
		}
	});
}
