/**
 * Copyright 2011
 * Developer:Pingenti Sergio
 * Nextskin S.a.s.
 * Via Giovanni Minotto,16 - 30175 Marghera (Ve)
 * Tel. +39 0410993619
 * Email: info@nxn.it
 */

var geocoder;
var map;
var marker;
var panorama;
if(jQuery)(
	function(jQuery){
		jQuery.extend(jQuery.fn,{
			nxnGmap:function(options){
				jQuery(this).each(function(){
					settings = jQuery.extend({
			            address: '', //Indirizzo
			            titleInfo: '', //Titolo del fumetto
			            contentString : '', //Contenuto descrittivo del fumetto
			            streetView : true, //Abilita e disabilita lo street view
			            scaleCtrl : true, //Abilita la scala
			            zoomCtrl : true, //Abilita lo zoom
			            zoomView : 'large', //Abilita visualizzazione small o large della barra dello zoom
			            panCtrl : true, //Abilita tondino per muoversi
			            idMap : '', //Id div mappa
			            image : '', //Icona puntatore
			            info : true, //Abilita disabilita fumetto
			            zoom : 13, //Zoom mappa
			            typeMap : google.maps.MapTypeId.ROADMAP //ROADMAP; SATELLITE; HYBRID; TERRAIN
					}, options);
				});
				initialize();
				function initialize(){
					if(settings.zoomView == 'small'){
						var higsma = google.maps.ZoomControlStyle.SMALL;
					}else{
						var higsma = google.maps.ZoomControlStyle.LARGE;
					}
					geocoder = new google.maps.Geocoder();
					var myOptions = {
							zoom: settings.zoom,
							mapTypeId: settings.typeMap,
							streetViewControl: false,
							panControl: settings.panCtrl,
							zoomControl: settings.zoomCtrl,
							zoomControlOptions:{
							    style: higsma
							},
							scaleControl: settings.scaleCtrl
					}
					map = new google.maps.Map(document.getElementById(settings.idMap), myOptions);
					map.setTilt(45);
					map.setHeading(90);
					codeAddress();
				}

				function codeAddress(){
					geocoder.geocode({'address': settings.address}, function(results, status){
						if (status == google.maps.GeocoderStatus.OK){
							map.setCenter(results[0].geometry.location);
							addMarker(results[0].geometry.location);
							panorama = map.getStreetView();
							panorama.setPosition(results[0].geometry.location);
							panorama.setPov({
								heading: 265,
								zoom:1,
								pitch:0
							});
							$("#"+settings.idMap).append('<div style="display:none;" id="check_'+settings.idMap+'"></div>')
						}else{
							$("body").append('<div style="background:#FFFFF;position:absolute;top:0;left:0;border:1px solid red;">Geocode was not successful for the following reason: '+status+'</div>');
						}
					});
				}
				function addMarker(location){
					var contents = settings.titleInfo+"<br />"+settings.contentString;
					if(settings.streetView){
						contents = contents+"<br /><a id=\"strvw\" style=\"cursor:pointer;\" href=\"javascript:jQuery(\'#strvw\').toggleStreetView()\">Street View</a>";
					}
					var infowindow = new google.maps.InfoWindow({
						content: contents
					});
					marker = new google.maps.Marker({
						position: location,
						map: map,
						draggable: false,
						animation: google.maps.Animation.DROP,
						title: settings.titleInfo,
						icon: settings.image
					});
					if(settings.info){
						infowindow.open(map,marker);
						google.maps.event.addListener(marker, 'click', function() {
							infowindow.open(map,marker);
						});
					}
				}
			},
			toggleStreetView: function(){
				var toggle = panorama.getVisible();
				if (toggle == false){
					panorama.setVisible(true);
				}else{
					panorama.setVisible(false);
				}
			}
		});
	}
)(jQuery); 
