//<![CDATA[
	pro = {
		debugMode	: false, // Mettre true pour avoir les erreurs
		map_id : 'proGmaps',
		wait_id : 'proWait',
		pro_id : null,
		map : null,	
		re_split : null,
		liste_gite : null,
		liste_poly : null,
		bounds : null,
		url_kml : '/include/getProduit.php?mode=kml',
		url_pi : '/include/getItineraire.php?mode=pi',
		liste_pi : null,
		
		initialize : function (pro_id) {
			pro.map = new google.maps.Map2(document.getElementById(pro.map_id), {backgroundColor:"#9CB2CE"});
	        pro.map.setCenter(new GLatLng(45.4673, 5.9951), 1);
			pro.map.addControl(new GLargeMapControl());
			pro.map.addControl(new GHierarchicalMapTypeControl());
			pro.map.addMapType(G_PHYSICAL_MAP);
			pro.map.setMapType(G_PHYSICAL_MAP); 
			pro.map.enableDoubleClickZoom();
			//pro.map.enableScrollWheelZoom();
			pro.map.disableScrollWheelZoom();
			pro.pro_id = pro_id;
	    	document.getElementById(pro.wait_id).style.display = 'none';
	    	pro.url_kml += '&proid=' + pro.pro_id;
	    	pro.re_split = new RegExp('[\t| |\r]*','g');	
	    	
	    	
			// Chargement xml
			GDownloadUrl(pro.url_kml, function (doc) {
				try {
					oXML = GXml.parse(doc);
					cPM = oXML.getElementsByTagName('Placemark');
				  	if (cPM.length > 0) {
				  		pro.liste_poly = [];      
				  		pro.liste_gite = [];
				  		pro.bounds = new GLatLngBounds();   
						for (i=0;cPM[i];i++) {
							cLineString = cPM[i].getElementsByTagName('LineString');
							if (cLineString[0]) {
							  /*
									coor = cPM[i].getElementsByTagName('coordinates')[0].firstChild.nodeValue;
									try {
										coor2 = cPM[i].getElementsByTagName('coordinates')[0].lastChild.nodeValue;
										if (coor != coor2) coor += coor2;
									} catch(exc) {
										//
									}
								*/
								coor = GXml.value(cPM[i].getElementsByTagName('coordinates')[0]);
								aPoint = pro.getPointFromCoordinates(coor);
								if (aPoint != null) {
									width = GXml.value(cPM[i].getElementsByTagName('width')[0]);
									color = GXml.value(cPM[i].getElementsByTagName('rgbcolor')[0]);
									if (color == '') {
										color = '#000000';
									} else if (color.replace('#', '') == color) {
										color = '#' + color;
									}
									tmpPoly = pro.createPolyline(aPoint, color, width);
									pro.map.addOverlay(tmpPoly);
									pro.liste_poly.push(tmpPoly);							
								}
							} else {
								kicon = new GIcon(G_DEFAULT_ICON);
								kicon.image = GXml.value(cPM[i].getElementsByTagName('href')[0]);
								kicon.iconSize = new GSize(32, 32);
								kicon.iconAnchor = new GPoint(32, 32);
								kicon.shadowSize= new GSize(0,0);
								aPoint = pro.getPointFromCoordinates(GXml.value(cPM[i].getElementsByTagName('coordinates')[0]));
								if (aPoint != null) {
									point = aPoint[0];
									tmpMarker = pro.createMarker(point, kicon);
									pro.map.addOverlay(tmpMarker);
									pro.liste_gite.push(tmpMarker);
								}
							}
						}
						pro.map.setCenter(pro.bounds.getCenter(), pro.map.getBoundsZoomLevel(pro.bounds));
					}
				} catch (ex) {
					pro.debug(ex);
				}		
			});
		},
		
		getPointFromCoordinates : function(txt){
			var aP = [];
			aTxt = txt.split('\n');
			lIndex = aTxt.length;
			for (j=0;j<lIndex;j++) {
				if (aTxt[j] != '') {
					var m = aTxt[j].replace(pro.re_split, '').split(',');
					if (m != null) {
						var p = new GLatLng(m[1], m[0]);
						pro.bounds.extend(p);
						aP.push(p);
					}
				}
			}
			return (aP.length >0 ? aP : null);
			
		},
		
		createMarker : function(point, icon) {
			var marker = new GMarker(point, {icon:icon});
			return marker;
		},
		
		createMarkerPI : function(point, icon, title) {
			var marker = new GMarker(point, {icon:icon, title:title});
			return marker;
		},		
		
 		encodeSignedNumber : function(num) {
  			var sgn_num = num << 1;
			if (num < 0) {
				sgn_num = ~(sgn_num);
			}
			return(pro.encodeNumber(sgn_num));
		},
	
		encodeNumber : function(num) {
		  var encodeString = "";
		  while (num >= 0x20) {
		    encodeString += (String.fromCharCode((0x20 | (num & 0x1f)) + 63));
		    num >>= 5;
		  }
		  encodeString += (String.fromCharCode(num + 63));
		  return encodeString;
		},
		
		createPolyline : function(aPoint, _color, _weight) {
			
			  var i = 0;
			  var plat = 0;
			  var plng = 0;
			  var encoded_points = "";
			  var encoded_levels = "";
			  for(i = 0; i < aPoint.length; i++) {
			    var point = aPoint[i];
			    var lat = new Number(point.lat());
			    var lng = new Number(point.lng());
			    var level = 3;
			    			
			    var late5 = Math.floor(lat * 1e5);
			    var lnge5 = Math.floor(lng * 1e5);
			
			    dlat = late5 - plat;
			    dlng = lnge5 - plng;
			
			    plat = late5;
			    plng = lnge5;
			
			    encoded_points += pro.encodeSignedNumber(dlat) + pro.encodeSignedNumber(dlng);
			    encoded_levels += pro.encodeNumber(level);
			  }
		
			oTmp = GPolyline.fromEncoded({opacity:1, color: _color, weight: _weight, points: encoded_points, zoomFactor: 32, levels: encoded_levels, numLevels: 4});
			return oTmp;
			
			//return  new GPolyline(aPoint, _color, _weigth, 1);
		},
		
		showPI : function(oInput) {
			document.getElementById(pro.wait_id).style.display = 'block';
			
			if (pro.liste_pi == null) {
				pro.liste_pi = [];
				
				// Chargement itinéraire et point d'interet
				GDownloadUrl(pro.url_pi, function (doc) {
					try {
						oXML = GXml.parse(doc);
						cKML = oXML.getElementsByTagName('kml_pi');
						if (cKML.length > 0) {
							for (i=0;cKML[i];i++) {
								try {
					      			kid = cKML[i].getAttribute('kid');
					      			kurl = cKML[i].getAttribute('kurl');
					      			kname = GXml.value(cKML[i].getElementsByTagName('name')[0]);
						      		kicon = new GIcon(G_DEFAULT_ICON);
									kicon.image = cKML[i].getAttribute('icon');
									kicon.iconSize = new GSize(18,21);
									kicon.shadowSize= new GSize(0,0);
									kicon.iconAnchor = new GPoint(18, 21);
									kicon.infoWindowAnchor = new GPoint(6,6);
									
									kmlMarker = pro.createMarkerPI(new GLatLng(cKML[i].getAttribute('lat'), cKML[i].getAttribute('lng')), kicon, kname);
									kmlMarker.desc = GXml.value(cKML[i].getElementsByTagName('desc')[0]);
								
									// Evenements charge
									GEvent.addListener(kmlMarker, 'click', function() {
										this.openInfoWindowHtml('<div>' + this.desc + '<div>');									
									}); 
									
									pro.liste_pi.push(kmlMarker);
									pro.map.addOverlay(kmlMarker);
								} catch(gex2) {
									pro.debug(gex2);
								}
							}
						}
					} catch (gex1) {
						pro.debug(gex1);
					}
					document.getElementById(pro.wait_id).style.display = 'none';				
				});
			} else {
				mapFunction = (oInput.checked ? 'addOverlay' : 'removeOverlay');
				for (j=0;pro.liste_pi[j];j++) {
					eval('pro.map.' + mapFunction + '(pro.liste_pi[j])');
				}
				document.getElementById(pro.wait_id).style.display = 'none';
			}
		},
			
		debug : function(o) {
			if (pro.debugMode) {
				try {
					if (o) {
						s = '';cpt=0;
						for (t in o) {
							s += "\n" + t + " : " + o[t];
							if (++cpt > 10) {alert(s);s = '';cpt=0;};
						}
						if (cpt > 0) alert(s);
					}
				} catch (ex) {
					alert("debugCatch" + ex);
				}
			}
		}
	};
//]]>