//http://code.google.com/apis/maps/documentation/reference.html

google.load("maps", "2");
google.setOnLoadCallback(initializeMap);
//google.setOnUnloadCallback(GUnload);

var map;
var boundaries;

function initializeMap () {

	if (GBrowserIsCompatible()) {
	
		if(document.implementation.hasFeature( 
        "http://www.w3.org/TR/SVG11/feature#SVG","1.1")){ 
      _mSvgEnabled = true; 
      _mSvgForced  = true; 
    } 
	
		map = new GMap2(document.getElementById("map"));
		
		map.enableScrollWheelZoom();
		
		boundaries = new GLatLngBounds(new GLatLng(45.42105346192418, 12.206454277038574), new GLatLng(45.480227034455766, 12.280268669128418));
		
		setupMap();
	
	}

}

function setupMap () {

	G_SATELLITE_MAP.getMinimumResolution = function () { return 14; };
		
	G_SATELLITE_MAP.getMaximumResolution = function () { return 18; };
	
	GEvent.addListener(map, "move", function() { checkBoundaries(); });
	
	map.setMapType(G_SATELLITE_MAP);
	
	map.setCenter(boundaries.getCenter(), 14);
	
	// http://code.google.com/articles/support/ezdigitizer.htm
	// http://facstaff.unca.edu/mcmcclur/GoogleMaps/EncodePolyline/encodeForm.html
	
	var polygon = new GPolygon.fromEncoded({
		polylines: [
			{
				color: "#b8860b",
				weight: 3
			},
			// porto
			{
				points: "kzqtGuqtiAVaDf@}D|BuSd@aF~BgTt@yFxAqHtAyEnBiFfA{BfB_DhC{DrJgNhAiBtAkC`A}BhA}CnAoD`AwD`AiEd@{B^iC~@gI~AoP`@{CZcAv@aBzBgETeAEs@M_@D_CRkE^mBd@kAvIaQjAaDh@eB`@kBf@{C^oEPaAVmAt@_CtBoENFXf@TJXTRh@BdAKx@S`@{@Z]^@h@Ah@Q\\D\\E`ALNAr@o@lBWl@e@ZMj@o@x@Qt@aAx@@n@F^EzBg@`CSh@[Zw@Rd@Cd@Rd@F^Pv@h@hApAz@cBD]JKJk@POPYRGH\\nAwAXIjBuBn@_@bA{@PW`@Sl@o@d@OTC^Fv@CXINS^Am@e@@a@PON@V^b@JJ_@Ro@NDVg@d@q@~AmA|Ag@N]j@ElAH|@@xATnBPvAN~B^nADzBb@~Gj@d@LdE~AhAf@j@CNMXy@PQlDgHjF|ARKN@nBcELFFRsBbEDTc@jASTUWGYBMs@SKTQWDEqBe@mCdFb@`@a@`Ae@a@uBdEFR_@`AMUy@`BJH]r@GWm@lANVUf@OWeAxBV^[j@U]qAhCLPQb@OUEj@UVPJNCHP?T`AlApAoCUW\\q@TNhCcFn@l@AVyKhT[z@kDbHHT[^o@`Au@`@?VYVKa@WT?Za@RK]gCCM^{@EJa@sCIClEfHTBv@}BdFUr@c@b@Yt@_GtBmANsE?wRG?Vu@?BYuCECVw@?BWgAAIXY[}BF?TaAISYqAGKVe@Ys@Vc@Y]XY]]VW[eA_ABMc@e@_@Wq@uAoAwAs@Nc@vCEt@k@rBU~AUv@FLr@CbND\\G`XXPG`@BpAGtEH|C@TGPJPStFHJHfBBVDJX?h@e@bAYVq@~@S^}HdIg@l@yNrOVx@_@b@a@s@a@\\Kl@q@Ri@p@P^EZoJdKc@ZgEvE_@[@p@a@^Sc@q@r@P`@WZS]_BfBHRy@hAWYFh@W\\Ie@aCdCM\\[XFRu@t@KWwAdByAvAEVoGt@_BVMXu@?DUwDb@DpCR?LUPBDRPDlAbDDX~@pCqFfXDLv@`@BQLUVIRTVM^y@\\oAT_BNe@l@_Ex@wBxKwV`FsFtLaMfAhB~@bAtBxA\\\\dAAfBqBc@gA\\a@`@lAt@w@z@kBA]t@kAx@oBz@aBj@gBh@wAj@{@`DmHn@`@JIf@kBOWvBaHZFh@yBx@q@R^bBeBb@e@d@E^JhAjB`@x@Jb@Ev@MT@Zg@bB]v@YjAm@pBkAfEs@vBq@fCq@tBIf@Bv@UVwCpJyNpOT\\@n@dJILWJCZPbEgNzI_[tIkY|K?lDpFKf@gNve@nFxDbTot@`ALzJ~DV`Boe@~`Bd@h@m@dCUXQx@Ir@WV{@pCEl@F\\]fAoB~E}BfCDTqBxAEf@cAR?n@e@VIg@}CdAaETsWGsBUyBg@eDsA{KiFiNkG_ReJI\\FTMr@QVy@dEXhAtBhANPfCb@^E`CiAjCdA~@f@Ri@|DnBGh@jCnAHa@l@TKd@rCpAVa@zCnAKl@n@^Ro@jDbBGh@NNfANd@f@JO^D@T`@MNdAh`@^?]tBPA]\\AHVnHH@_@`@IFPV?NORA?Pv@AJOVBFNt@@LIZG?h@rAAh@BTLR\\h@zBvAjHPE|@vEMT\\nALBd@`BM`@|@`E\\OvBuDaA}E_@VOy@Zg@gByIe@YAa@LSuA}G_@Xc@}Bb@W_@eBs@W?a@Ua@qAkHVg@Lc@?c@NKAYMWpDmMpBsG^NLq@Sq@?i@jCyILI^uAN[Lo@`@oAPW`@yAVo@Hc@^W?s@@m@Ro@T?VKKw@L]HAj@wBJaA\\cAI[PSL?hAkDVsAf@eAf@iBr@qB?e@Re@b@uB\\OLc@Hc@M]TYL?p@aD`@qAb@oARS`@i@D_@JSB_@N_@BWVe@VgAv@wBv@yAvA{Av@e@`AS\\@fHMbA@JJl@AXU~DAVGrAbATCJYd@@h@C?VvAA@o@vCIDt@|B@pAiA`JELJNKvMIZHlAAp@l@n@jAb@dAB^A~@WxBm@pB~AtAp@^VcBVUv@{BRWh@YzEgG|@sAv@w@rAO~DGXIzBBf@OJCDNRQlD?t@QTOl@?RPzAOTHLKbGO[rAyBF_A~CvAfAdCkI^BLJNIv@TN[^Eb@@JHx@ABF^BNAb@XpCI?u@ZGBr@bAAVEn@CNTLf@Bz@Gx@Mn@_@dAeBlETXCtBD\\EbEEhBh@XJV\\TbAn@dChBF\\eEjGiHdK}F`JiBmAgASmA@cA\\kAlAsGtIg@`A_@nAEv@[vBuAxG]lBObBWlGSvLSxN[jOgAvq@SlCe@bDs@~CuAtDqDbHeCfEkPnZiHlMAXn@n@D`AQd@{AfB_A|@gBdA`@`AGf@qApHUV}@[kA~HWd@[Z]TwA{@wIaJ{@o@mDeBsFgC}Aw@cC_BiFcFeCeBsAs@oI_CcFeBmE_BcK}CmEgBgCoAiAqAmAwBeMyWs@_B}@{BkDmJgC{GCk@sA_AiKkF}G_Dw@[eCtN_]aQkSgJ{HyDcJcE}DoByC_BmHcDkAm@]i@Ge@A[",
				levels: "P@?@?BAFA@DA?@D@A?F?A?C@@D@AAD@ABAE@AD@B@A?CAJ@@?AC@EAAC?AB@@AD?ABAABC?ABD@BFA@@CAHA@@A?DBCA@A@@@@D?A@B@ADBD@BAD?BA?CBAGA?B@?@AAAD@?FAC@@EE@BCAIAA@EA@CBB@BECCCCBABBAABBEBBBCCCCBABBAEAB@AFBCBBDAEB@BB?FAACBAADBBCCBFEFB@A@HAD?BBBBBBBBBBBBCBBBBBBBFBB?CA?AACH?A@@AF@AAA@@A?AAABDA@C@IA@?B@?CBDCCBACAC@?CCBCCBBCCBBCBBBCB@ABBB@AF?BBBBGCAB@AC@@EAJC?BBAD@B?@C@F@FAC?CFCCDDCAA@?A?AADADBBABDCB?HAC@DA@@F@@??@??B@BAEDAIB@BF?@HEG@FHGADICCAA?AAB@E?CBBBCBICBBCBFAB@AF@AAAEC@KACC?CECCBBCCBCCBCCCACBBAABCFCBBCBBCBBB@@BBACAAB@CB?G@B@BCBBA@BBIAECCBCBBABCCBCBCAAD@AAB@G@CCAAC@A?@@@@??BC?AC@CB@ABAAC@B@A@?BA@BABADAB@BA?B@@?@A@@CAIAC?AABAA@DCAB?BABCCCCCAAAAAGA?D?ABD@GBAC@A@@FA@AA?AAAB@BAB@AAFCCDFFAAABAC@@@@?BBCBCC@?BKA@C?ADB@@?F@@A?BG?@EBCAE@F@B@A?G@B???DA@GAB??EABDABADC?DBDCA?KBAC??CAB@EA?AB@GAB?C??ACG@?FFBA@@?@?DA?P"
  			},
  			// isola superiore
  			{
  				points: "w~htGirxiAtAjAjAz@Qn@Wp@BHWx@Cl@@h@FTAPc@p@?TEL@He@Zs@hCMHBLGTKH?L_@xAKLWS]x@PNH?FFw@fCML@J]rABJDFc@_@iJx[f@`@Gr@MPOb@KROd@ML@Pq@hB]Y_DlKZXBHC\\KLBDKLQj@KJEv@ENWHBTDHGn@W`AYf@GTC\\?VF~@HPj@`@Kd@Bn@Q~@@J_@r@IT[f@YRIR@RFh@CPUPERA^NPGj@D^I^OPGROL@NHHPlKFPBTc@KMPB`@TFJILBPdBDnASJnBdKPAELBFJ?`@lB_@LJf@\\KZzAANHJAVGRBFPCRvAULDTRE@ZPrAjAtFd@nAl@|DbBbIDp@Rn@Xj@ZPZB^Iz@FT?ZMXFLXPbAGLGQWPfBhIRM[gBJIzAxHy@iD]NdBzIVGE|@Ml@wGxCg@^H[KSo@\\DXJB{BlAeAe@BUYIALu@a@?OQS_@mBXKwAiH]Je@mBtBgK}CyODONFDIu@qDSHAMMJ@IwAcHD_@gK}g@D[aCgLRmEtDoMHkAbBeGPGNFz@uCKMBIIMlBoGJKvIqZ?QXTh@{ACKHUHC^{A[YJC|EsPGKHWH@~CwKnDsIb@wA",
  				levels: "P?D?@@B@@@EA??BB@A@@@@CABC??C@B@A?CCCBD@??@AACCE?AC?@?@A@BB?AB@@?D?B@B@D@B?A@@C?B@A?BAAC@@?G@AA?CCAD@@C?BCBBA@ACCBC@@B?B@BBBAB@AAA@@E?AD@@?ABAECABCDBACECCBG@DACACBABJBBAAD@@BACBEEBAABCAAC@AAAAHCBDB@BB@@B@A@CC@@ACBBAAACAA@P"
  
  			},
  			// isola inferiore
  			{
  				points: "s{ltGy}yiA\\eC\\kAb@cAGMTc@EKLONJjA_CxEwJb@{@\\w@V]La@LUFCZm@d@yAf@eAHOJGLOf@oAbIcPHKj@mA`@mAJa@Hs@Tc@TQNg@HGJAJFBR?VC`@KT@LJXj@fCrCjNDt@E|@UvAInAENGb@@LELg@~EATI^gCtVG|@]lCw@^UXBFOb@_ABQYEWa@Ck@^_@d@e@Zk@f@[G{DLaAYi@g@]o@c@k@e@Wk@GqDC[F[KKMWOIQ]IEOWQ",
  				levels: "PA@AAADABB??@@@??A?A??A@?C?A?B@AA?I@B?@@B?@AE@@??@????@?@HBA@DB?BD@@?DAEB@?AD@AC@?@@A@P"
  			},
  			// bacino
  			{
  				points: "yqktG}uyiANmAH?^qDh@uDz@kIJYLKNEHIKQDQLEJ?^TBHIPJBj@Bh@?LEX?HD`@EPI^D|@EhBDNKJAh@N|A?\\GRAn@@f@GfBDVEf@HbHMVEPDZ?RIH?XFjB@x@Gt@B`NQxSQRERDLHDT?hF@jDJHFX@`@GXIN?NCP{@TQRG\\Y^w@v@SJ[?aDvEUVuCbAFf@[FAi@]PG^UWmGEmCWeFKoFPaOK{@BkDIyAh@gEq@qIk@sAmBCO",
  				levels: "PAA??CA??AAAG@B@B?C@@?A@A@@A?AA@@?@A@AB@A@A?A@A@@@@C@AI?B@AB?@?FB@A?B@C?BBBGCACBAACB@@CEAD@P"
  			}
		],
		fill: true,
		color: "#b8860b",
		opacity: 0.5,
		outline: true
	});
	
	map.addOverlay(polygon);

}

function checkBoundaries () {

	if (boundaries.contains(map.getCenter())) {
	
		return;
		
	}
	
	var center = map.getCenter();
	
	var lat = center.lat();
	var lng = center.lng();
	
	var minLat = boundaries.getSouthWest().lat();
	var maxLat = boundaries.getNorthEast().lat();
	var minLng = boundaries.getSouthWest().lng();
	var maxLng = boundaries.getNorthEast().lng();
	
	lat = (lat < minLat) ? minLat : ((lat > maxLat) ? maxLat : lat);
	lng = (lng < minLng) ? minLng : ((lng > maxLng) ? maxLng : lng);
	
	map.setCenter(new GLatLng(lat, lng));

}
