function KMLObj(title,desc,op,fid){
	this.title=title;this.description=escape(desc);
	this.marks=[];this.folders=[];
	this.groundOverlays=[];
	this.open=op;
	this.folderid=fid;
	};
	
function Lance$(mid){
	return document.getElementById(mid);
	};
	
function GeoXml(myvar,map,url,opts){
	this.myvar=myvar;
	this.opts=opts||{};
	this.mb=new MessageBox(map,this,"mb",this.opts.messagebox);
	this.map=map;this.url=url;
	if(typeof url=="string"){
		this.urls=[url];}
		else{
			this.urls=url;};
			this.mb.style=this.opts.messagestyle||{backgroundColor:"silver"};
			this.alwayspop=this.opts.alwaysinfopop||false;
			this.quiet=this.opts.quiet||false;this.titlestyle=this.opts.titlestyle||'style = "font-family: arial, sans-serif;font-size: medium;font-weight:bold;font-size: 100%;"';
			this.descstyle=this.opts.descstyle||'style = "font-family: arial, sans-serif;font-size: small;padding-bottom:.7em;"';
			this.directionstyle=this.opts.directionstyle||'style="font-family: arial, sans-serif;font-size: small;padding-left: 1px;padding-top: 1px;padding-right: 4px;"';this.sidebarfn=this.opts.sidebarfn||GeoXml.addSidebar;this.pointlabelopacity=this.opts.pointlabelopacity||100;this.polylabelopacity=this.opts.polylabelopacity||100;
			this.hilite=this.opts.hilite||{color:"#039",opacity:0.3,textcolor:"#FFFFFF"
			//this.mb.style=this.opts.messagestyle||{backgroundColor:"silver"};
			//this.alwayspop=this.opts.alwaysinfopop||false;
			//this.quiet=this.opts.quiet||false;this.titlestyle=this.opts.titlestyle||'style = "font-family: arial, sans-serif;font-size: medium;font-weight:bold;font-size: 100%;"';
			//this.descstyle=this.opts.descstyle||'style = "font-family: arial, sans-serif;font-size: small;padding-bottom:.7em;"';
			//this.directionstyle=this.opts.directionstyle||'style="font-family: arial, sans-serif;font-size: small;padding-left: 1px;padding-top: 1px;padding-right: 4px;"';this.sidebarfn=this.opts.sidebarfn||GeoXml.addSidebar;this.pointlabelopacity=this.opts.pointlabelopacity||100;this.polylabelopacity=this.opts.polylabelopacity||100;
			//this.hilite=this.opts.hilite||{color:"#aaffff",opacity:0.3,textcolor:"#000000"
			};
			this.latestsidebar="";this.forcefoldersopen=false;
				if(typeof this.opts.allfoldersopen!="undefined"){
					this.forcefoldersopen=this.opts.allfoldersopen;
					};
					this.clickablepolys=true;
				if(typeof this.opts.clickablepolys=="boolean"){
					this.clickablepolys=this.opts.clickablepolys;
					};
					this.clickablemarkers=true;
				if(typeof this.opts.clickablemarkers=="boolean"){
					this.clickablemarkers=this.opts.clickablemarkers;};
					this.clickablelines=true;
				if(typeof this.opts.clickablelines=="boolean"){
					this.clickablelines=this.opts.clickablelines;
					};
				if(typeof this.opts.nolegend!="undefined"){
					this.nolegend=true;
					};
				if(typeof this.opts.preloadHTML=="undefined"){
					this.opts.preloadHTML=true;
					};
			this.hideall=false;if(typeof proxy!="undefined"){
			this.proxy=proxy;
			};
				if(!this.proxy&&typeof getcapproxy!="undefined"){
				if(fixUrlEnd){
					getcapproxy=fixUrlEnd(getcapproxy);}
				};
				if(this.opts.hideall){
					this.hideall=this.opts.hideall;
				};
				if(top.publishdirectory){
					this.publishdirectory=top.publishdirectory;}
				else{
					this.publishdirectory="http://www.dyasdesigns.com/tntmap/";
				};
				if(top.standalone){
					this.publishdirectory="";
				};
				this.kmlicon=this.publishdirectory+"images/ge.png";
				this.docicon=this.publishdirectory+"images/ge.png";
				this.foldericon=this.publishdirectory+"images/folder.png";
				this.gmlicon=this.publishdirectory+"images/geo.gif";
				this.rssicon=this.publishdirectory+"images/rssb.png";
				this.globalicon=this.publishdirectory+"images/geo.gif";
				this.WMSICON="<img src=\""+this.publishdirectory+"images/geo.gif\" style=\"border:none\" />";
																	
					GeoXml.WMSICON=this.WMSICON;this.baseLayers=[];
						this.bounds=new GLatLngBounds();
						this.style={width:2,opacity:0.75,fillopacity:0.4};
						this.style.color=this.randomColor();
						this.style.fillcolor=this.randomColor();
						this.iwwidth=this.opts.iwwidth||400;this.lastmarker={};
						this.verySmall=0.0000001;
						this.progress=0;
						this.ZoomFactor=2;
						this.NumLevels=18;
						this.maxtitlewidth=0;
						this.styles=[];
						this.jsdocs=[];
						this.jsonmarks=[];
						this.polyset=[];
						this.polygons=[];
						this.polylines=[];
						this.multibounds=[];
						this.overlayman=new Clusterer(map,this);
						this.overlayman.rowHeight=20;
							if(this.opts.sidebarid){
								this.basesidebar=this.opts.sidebarid;
								};
								this.kml=[new KMLObj("GeoXML","",true,0)];
								this.overlayman.folders.push([]);
								this.overlayman.subfolders.push([]);
								this.overlayman.folderhtml.push([]);
								this.overlayman.folderhtmlast.push(0);
								this.overlayman.folderBounds.push(new GLatLngBounds());
								this.wmscount=0;this.labels=new GTileLayerOverlay(G_HYBRID_MAP.getTileLayers()[1]);
								this.unnamedpath="un-named path";
								this.unnamedplace="un-named place";
								this.unnamedarea="un-named area";
							};
																			
						GeoXml.prototype.showIt=function(str,h,w){
							var features="status=yes,resizable=yes,toolbar=0,height="+h+",width="+h+",scrollbars=yes";
							var myWin;
								if(top.widget){
									alert(str);
									this.mb.showMess(str);
								}
									else{
										myWin=window.open("","_blank",features);
										myWin.document.open("text/xml");
										myWin.document.write(str);
										myWin.document.close();
										}
						};
						
						GeoXml.prototype.clear=function(idx){
							for(var m=0;m<this.overlayman.markers.length;m++){
								this.overlayman.RemoveMarker(this.overlayman.markers[m]);
								};
								
								this.kml=[new KMLObj("GeoXML","",true,0)];
								this.maxtitlewidth=0;this.styles=[];
								this.jsdocs=[];this.jsonmarks=[];
								this.polyset=[];this.polylines=[];
								this.multibounds=[];
								this.bounds=new GLatLngBounds();
								this.overlayman=new Clusterer(this.map,this);
								this.overlayman.rowHeight=20;
									
									if(typeof this.basesidebar!="undefined"&&this.basesidebar!=""){
										Lance$(this.basesidebar).innerHTML="";
									};
								
								this.overlayman.folders.push([]);
								this.overlayman.subfolders.push([]);
								this.overlayman.folderhtml.push([]);
								this.overlayman.folderhtmlast.push(0);
								this.overlayman.byname=[];
								this.overlayman.byid=[];
								this.overlayman.folderBounds.push(new GLatLngBounds());
								this.wmscount=0;
							};
						
						GeoXml.prototype.createMarkerJSON=function(item,idx){
							var that=this;
							var style=that.makeIcon(style,item.href);
							var point=new GLatLng(item.y,item.x);
							that.overlayman.folderBounds[idx].extend(point);
							that.bounds.extend(point);
							if(item.shadow){
							style.shadow=item.shadow;
							}
								else{
								style.shadow=null;
								};
							if(!!that.opts.createmarker){
							that.opts.createmarker(point,item.title,unescape(item.description),null,idx,style,item.visibility,item.id);
							}
								else{
									that.createMarker(point,item.title,unescape(item.description),null,idx,style,item.visibility,item.id);
								}
							};
						
						GeoXml.prototype.createMarker=function(point,name,desc,style,idx,instyle,visible,kml_id){
							var myvar=this.myvar;
							var icon;
							var bicon=new GIcon();
								if(this.opts.baseicon){
								bicon.iconSize=this.opts.baseicon.iconSize;
								bicon.iconAnchor=this.opts.baseicon.iconAnchor;
								bicon.shadowSize=this.opts.baseicon.shadowSize;
								bicon.infoWindowAnchor=this.opts.baseicon.infoWindowAnchor;
								}
									else{
										bicon.infoWindowAnchor=new GPoint(16,0);
										bicon.iconSize=new GSize(32,32);
										bicon.shadowSize=new GSize(32,32);
										bicon.iconAnchor=new GPoint(16,32);
									};
									
							var shadow;
							var href;
								if(this.opts.iconFromDescription){
									var text=desc;
									var pattern=new RegExp("<\\s*img","ig");
									var result;
									var pattern2=/src\s*=\s*[\'\"]/;
									var pattern3=/[\'\"]/;
										while((result=pattern.exec(text))!=null){
											var stuff=text.substr(result.index);
											var result2=pattern2.exec(stuff);
												if(result2!=null){
													stuff=stuff.substr(result2.index+result2[0].length);
													var result3=pattern3.exec(stuff);
													if(result3!=null){
														var imageUrl=stuff.substr(0,result3.index);
														href=imageUrl;
													}
											}
										}
									shadow=null;
										if(!href){
											href="http://maps.google.com/mapfiles/kml/pal3/icon40.png";
										}
											icon=new GIcon(bicon,href,null,shadow);
											}
												else{
													href="http://maps.google.com/mapfiles/kml/pal3/icon40";
													if(instyle==null||typeof instyle=="undefined"){
														shadow=href+"s.png";href+=".png";
														if(this.opts.baseicon){
															href=this.opts.baseicon.image;
															shadow=this.opts.baseicon.shadow;
														}
													}
												
												else{
													if(instyle.href){
														href=instyle.href;
													}
													
													if(instyle.shadow){
														shadow=instyle.shadow;
													}
												}
												icon=new GIcon(bicon,href,null,shadow);
											}
											
											var iwoptions=this.opts.iwoptions||{};
											var markeroptions=this.opts.markeroptions||{};
											var icontype=this.opts.icontype||"style";
												if(icontype=="style"){
													if(!!this.styles[style]){
														icon=new GIcon(bicon,this.styles[style].href,null,this.styles[style].shadow);
														icon.src=this.styles[style].href;
														href=this.styles[style].href;
													}
												}
												if(!markeroptions.icon){
													markeroptions.icon=icon;
												}
													markeroptions.title=name;
													var m=new GMarker(point,markeroptions);
													m.title=name;m.id=kml_id;
													var obj={"type":"point","title":name,"description":escape(desc),"href":href,"shadow":shadow,"visibility":visible,"x":point.x,"y":point.y,"id":m.id
												};
												
												this.kml[idx].marks.push(obj);
													if(this.opts.pointlabelclass){
														var l=new ELabel(point,name,this.opts.pointlabelclass,this.opts.pointlabeloffset,this.pointlabelopacity,true);
														m.label=l;this.map.addOverlay(l);
													}
														var html,html1,html2,html3,html4;
														var awidth=this.iwwidth;
															if(desc.length*8<awidth){
																awidth=desc.length*8;
															}
															if(awidth<name.length*10){
																awidth=name.length*10;
															}
														html="<div style = 'width:"+awidth+"px'>"+"<h1 "+this.titlestyle+">"+name+"</h1>"+"<div "+this.descstyle+">"+desc+"</div>";
															if(this.opts.directions){
																html1=html+'<div '+this.directionstyle+'>'+'Get Directions: <a href="#" onclick="GEvent.trigger('+this.myvar+'.lastmarker,\'click2\');return false;">To Here</a> - '+'<a href="#" onclick="GEvent.trigger('+this.myvar+'.lastmarker,\'click3\');return false;">From Here</a><br>'+'<a href="#" onclick="GEvent.trigger('+this.myvar+'.lastmarker,\'click4\');return false;">Search nearby</a></div>';
																html2=html+'<div '+this.directionstyle+'>'+'Get Directions: To here - '+'<a href="#" onclick="GEvent.trigger('+this.myvar+'.lastmarker,\'click3\');return false;">From Here</a><br>'+'Start address:<form action="http://maps.google.com/maps" method="get" target="_blank">'+'<input type="text" SIZE=35 MAXLENGTH=80 name="saddr" id="saddr" value="" />'+'<INPUT value="Go" TYPE="SUBMIT">'+'<input type="hidden" name="daddr" value="'+point.lat()+','+point.lng()+"("+name+")"+'"/>'+'<br><a href="# onclick="GEvent.trigger('+this.myvar+'.lastmarker,\'click\');return false;">&#171; Back</a></div>';
															html3=html+'<div '+this.directionstyle+'>'+'Get Directions: <a href="#" onclick="GEvent.trigger('+this.myvar+'.lastmarker,\'click2\');return false;">To Here</a> - '+'From Here<br>'+'End address:<form action="http://maps.google.com/maps" method="get"" target="_blank">'+'<input type="text" SIZE=35 MAXLENGTH=80 name="daddr" id="daddr" value="" />'+'<INPUT value="Go" TYPE="SUBMIT">'+'<input type="hidden" name="saddr" value="'+point.lat()+','+point.lng()+"("+name+")"+'"/>'+'<br><a href="#" onclick="GEvent.trigger('+this.myvar+'.lastmarker,\'click\');return false;">&#171; Back</a></div>';
															html4=html+'<div '+this.directionstyle+'>'+'Search nearby: e.g. "pizza"<br>'+'<form action="http://maps.google.com/maps" method="get"" target="_blank">'+'<input type="text" SIZE=35 MAXLENGTH=80 name="q" id="q" value="" />'+'<INPUT value="Go" TYPE="SUBMIT">'+'<input type="hidden" name="near" value="'+name+' @'+point.lat()+','+point.lng()+'"/>'+'<br><a href="# onclick="GEvent.trigger('+this.myvar+'.lastmarker,\'click\');return false;">&#171; Back</a></div>';
															GEvent.addListener(m,"click2",function(){
																m.openInfoWindowHtml(html2+"</div>",iwoptions);
																}
															);
															GEvent.addListener(m,"click3",function(){
																m.openInfoWindowHtml(html3+"</div>",iwoptions);
																}
															);
															GEvent.addListener(m,"click4",function(){
																m.openInfoWindowHtml(html4+"</div>",iwoptions);
																}
															);
														}
														else{
															html1=html;
															}
																if(this.clickablemarkers){
																	GEvent.addListener(m,"click",function(){eval(myvar+".lastmarker = m");
																		m.openInfoWindowHtml(html1+"</div>",iwoptions);
																		}
																	);
																}
																if(this.opts.domouseover){
																	m.mess=html1+"</div>";
																	m.geoxml=this;GEvent.addListener(m,"mouseover",function(point){
																		if(!point){
																			point=m.getPoint();
																		}
																		m.geoxml.mb.showMess(m.mess,5000);
																	});
																}
																	var nhtml="";
																	var parm;
																		if(this.opts.sidebarid){
																			var folderid=this.myvar+"_folder"+idx;
																			var n=this.overlayman.markers.length;
																			var blob="&nbsp;<img style=\"vertical-align:text-top;padding:0;margin:0\" height=\"16\" border=\"0\" src=\""+href+"\">&nbsp;";
																			parm=this.myvar+"$$$"+name+"$$$marker$$$"+n+"$$$"+blob+"$$$"+visible+"$$$null";
																			m.sidebarid=this.myvar+"sb"+n;
																			m.hilite=this.hilite;
																			m.geoxml=this;
																			GEvent.addListener(m,"mouseover",function(){
																				var bar=Lance$(this.sidebarid);
																					if(bar&&typeof bar!="undefined"){
																						bar.style.backgroundColor=this.hilite.color;
																						bar.style.color=this.hilite.textcolor;
																					}
																				});
																			GEvent.addListener(m,"mouseout",function(){
																				var bar=Lance$(this.sidebarid);
																				if(bar&&typeof bar!="undefined"){
																					bar.style.background="none";
																					bar.style.color="";
																					}
																				});
																			}
																				if(!!this.opts.addmarker){
																					this.opts.addmarker(m,name,idx,parm,visible);
																				}else{
																					this.overlayman.AddMarker(m,name,idx,parm,visible);
																				}
																			};
																			GeoXml.getDescription=function(node){var sub="";
																				var n=0;var cn;
																					if(document.all){
																						for(;n<node.childNodes.length;n++){cn=node.childNodes.item(n);sub+=cn.xml;
																					}
																				}else{
																					var serializer=new XMLSerializer();
																					for(;
																						n<node.childNodes.length;
																						n++){
																						cn=serializer.serializeToString(node.childNodes.item(n));
																					sub+=cn;
																					}
																				}
																					var s=sub.replace("<![CDATA[","");
																					var u=s.replace("]]>","");
																					u=u.replace(/\&amp;/g,"&");
																					u=u.replace(/\&lt;/g,"<");
																					u=u.replace(/\&quot;/g,'"');
																					u=u.replace(/\&apos;/g,"'");
																					u=u.replace(/\&gt;/g,">");return u;
																				};
																			GeoXml.prototype.processLine=function(pnum,lnum,idx){
																				var that=this;
																				var op=this.polylines[pnum];
																				var line=op.lines[lnum];
																				var obj;
																				var p;
																					if(!line){
																						return;
																					}
																				var thismap=this.map;
																				var iwoptions=this.opts.iwoptions||{};
																				var polylineEncoder=new PolylineEncoder(this.NumLevels,this.ZoomFactor,this.verySmall,true);
																					if(line.length>2){
																						var result=polylineEncoder.dpEncode(line);
																							obj={
																								points:result.encodedPoints,levels:result.encodedLevels,color:op.color,weight:op.width,opacity:op.opacity,clickable:op.clickablepolys,zoomFactor:this.ZoomFactor,numLevels:this.NumLevels,type:"polyline"
																							};
																							p=new GPolyline.fromEncoded(obj);
																							}else{
																								obj={
																									points:line,color:op.color,weight:op.width,opacity:op.opacity,type:"line",id:op.id
																								};
																								p=new GPolyline(line,op.color,op.width,op.opacity);
																							}
																							p.bounds=op.pbounds;
																							p.id=op.id;
																							var nhtml="";
																							var n=this.overlayman.markers.length;this.polylines[pnum].lineidx.push(n);
																							var parm;
																							var awidth=this.iwwidth;
																							var desc=op.description;
																								if(desc.length*8<awidth){awidth=desc.length*8;
																						}
																							if(awidth<op.name.length*12){
																								awidth=op.name.length*12;
																							}
																								var html="<div style='font-weight: bold; font-size: medium; margin-bottom: 0em;'>"+op.name;html+="</div>"+"<div style='font-family: Arial, sans-serif;font-size: small;width:"+awidth+"px;'>"+desc+"</div>";
																							if(lnum==0){
																								if(this.opts.sidebarid){
																									var blob='&nbsp;&nbsp;<span style=";border-left:'+op.width+'px solid '+op.color+';">&nbsp;</span> ';
																									parm=this.myvar+"$$$"+op.name+"$$$polyline$$$"+n+"$$$"+blob+"$$$"+op.visibility+"$$$"+pnum+"$$$";
																									this.latestsidebar=this.myvar+"sb"+n;
																								}
																							}
																							if(lnum<line.length){
																								setTimeout(this.myvar+".processLine("+pnum+","+(lnum+1)+",'"+idx+"');",15);
																								if(this.opts.sidebarid){
																									p.sidebar=this.latestsidebar;
																								}
																							}
																							if(this.opts.domouseover){
																								p.mess=html;
																							}
																							p.title=op.name;
																							p.geoxml=this;
																							p.strokeColor=op.color;
																							p.strokeWeight=op.width;
																							p.strokeOpacity=op.opacity;
																							p.hilite=this.hilite;
																							p.mytitle=p.title;
																							p.map=this.map;p.idx=pnum;
																							p.onOver=function(){
																								var pline=this.geoxml.polylines[this.idx];
																									for(var l=0;l<pline.lineidx.length;l++){
																										var mark=this.geoxml.overlayman.markers[pline.lineidx[l]];
																											mark.realColor=mark.strokeColor;mark.setStrokeStyle({
																												color:this.hilite.color});
																											mark.redraw(true);
																										}
																										if(this.sidebar){
																											Lance$(this.sidebar).style.backgroundColor=this.hilite.color;
																											Lance$(this.sidebar).style.color=this.hilite.textcolor;
																										}
																										if(this.mess){this.geoxml.mb.showMess(this.mess,5000);
																											}else{
																												this.title="Click for more information about "+this.mytitle;
																											}
																									};
																							p.onOut=function(){
																								var pline=this.geoxml.polylines[this.idx];
																									for(var l=0;l<pline.lineidx.length;l++){
																										var mark=this.geoxml.overlayman.markers[pline.lineidx[l]];
																											mark.setStrokeStyle({
																												color:this.realColor});
																											mark.redraw(true);
																										}
																									this.geoxml.mb.hideMess();
																								if(this.sidebar){
																									Lance$(this.sidebar).style.background="none";
																									Lance$(this.sidebar).style.color="";
																								}
																							};
																						GEvent.addListener(p,"mouseout",p.onOut);
																						GEvent.addListener(p,"mouseover",p.onOver);
																						GEvent.addListener(p,"click",function(point){
																							var doit=false;if(!point){
																								point=this.getPoint();
																								doit=true;
																							}
																								if(this.geoxml.clickablelines||doit){
																									this.map.openInfoWindowHtml(point,html,iwoptions);
																								}
																							});
																						obj.name=op.name;obj.description=escape(op.description);
																							if(that.hideall){
																								op.visibility=false;
																							}
																						obj.visibility=op.visibility;this.kml[idx].marks.push(obj);
																						this.overlayman.AddMarker(p,op.name,idx,parm,op.visibility);
																					};
																					GeoXml.prototype.createPolyline=function(lines,color,width,opacity,pbounds,name,desc,idx,visible,kml_id){
																						var p={};
																							if(!color){
																								p.color=this.randomColor();
																							}
																							else{
																								p.color=color;
																							}
																							if(!opacity){
																								p.opacity=0.45;
																							}else{
																								p.opacity=opacity;
																							}
																							if(!width){
																								p.width=2;
																							}else{
																								p.width=width;
																							}
																								p.idx=idx;
																								p.visibility=visible;
																									if(this.hideall){
																										p.visibility=false;
																									}
																										p.name=name;
																										p.description=desc;
																										p.lines=lines;
																										p.lineidx=[];
																										p.id=kml_id;
																										this.polylines.push(p);
																										setTimeout(this.myvar+".processLine("+(this.polylines.length-1)+",0,'"+idx+"');",15);
																					};
																					GeoXml.prototype.processPLine=function(pnum,linenum,idx){
																						var p=this.polyset[pnum];
																						var line=p.lines[linenum];
																						var obj={};
																							if(line&&line.length){
																								var polylineEncoder=new PolylineEncoder(18,2,0.00001,true);
																								var result=polylineEncoder.dpEncode(line);
																								obj={};
																								obj.points=result.encodedPoints;
																								obj.levels=result.encodedLevels;
																								obj.color=p.color;
																								obj.weight=p.weight;
																								obj.numLevels=18;
																								obj.zoomFactor=2;
																								obj.opacity=p.opacity;
																								p.obj.polylines.push(obj);
																							}
																								if(linenum==p.lines.length-1){
																									this.finishPolygon(p.obj,idx);
																								}else{
																									setTimeout(this.myvar+".processPLine("+pnum+","+(linenum+1)+",'"+idx+"');",5);
																								}
																					};
																					
																					GeoXml.prototype.finishPolygon=function(op,idx){
																						op.type="polygon";this.finishPolygonJSON(op,idx,false);
																					};
																					
																					GeoXml.prototype.finishPolygonJSON=function(op,idx,updatebound,lastpoly){
																						var that=this;
																						var iwoptions=that.opts.iwoptions||{};
																							if(typeof op.visibility=="undefined"){
																								op.visibility=true;
																							}
																								if(that.hideall){
																									op.visibility=false;
																								}
																									var desc=unescape(op.description);
																									op.opacity=op.fillOpacity;
																									var p=new GPolygon.fromEncoded(op);
																									var html="<div style='font-weight: bold; font-size: medium; margin-bottom: 0em;'>"+op.name+"</div>"+"<div style='font-family: Arial, sans-serif;font-size: small;width:"+this.iwwidth+"px'>"+desc+"</div>";
																									var newgeom=(lastpoly!="p_"+op.name);
																										if(newgeom&&this.opts.sidebarid){
																											this.latestsidebar=that.myvar+"sb"+this.overlayman.markers.length;
																										}else{
																											this.latestsidebar="";
																										}
																										if(that.opts.domouseover){
																											p.mess=html;
																										}
																									p.strokeColor=op.polylines[0].color;
																									p.mb=that.mb;
																									p.hilite=that.hilite;
																									p.strokeOpacity=op.polylines[0].opacity;
																									p.fillOpacity=op.opacity;
																									p.fillColor=op.color;
																										if(!op.fill){
																											p.fillOpacity=0.0;
																										}
																											if(that.domouseover){
																												p.mess=html;
																											}
																											p.geoxml=that;
																											p.title=op.name;
																											p.id=op.id;
																											var n=this.overlayman.markers.length;
																												if(newgeom){
																												that.multibounds.push(new GLatLngBounds());that.polygons.push([]);
																												}
																											var len=that.multibounds.length-1;
																											that.multibounds[len].extend(p.getBounds().getSouthWest());
																											that.multibounds[len].extend(p.getBounds().getNorthEast());
																											that.polygons[that.polygons.length-1].push(n);
																											p.polyindex=that.polygons.length-1;
																											p.geomindex=len;
																											p.sidebarid=this.latestsidebar;
																											p.onOver=function(){
																												if(this.sidebarid){
																											var bar=Lance$(this.sidebarid);
																												if(!!bar){
																												bar.style.backgroundColor=this.hilite.color;
																												bar.style.color=this.hilite.textcolor;
																												}
																											}
																										if(this.geoxml.clickablepolys){
																											var poly=this.geoxml.polygons[this.polyindex];
																											if(poly){
																												for(var pg=0;pg<poly.length;pg++){
																													var mark=this.geoxml.overlayman.markers[poly[pg]];
																													mark.realColor=mark.fillColor;
																													mark.setFillStyle({
																														color:this.hilite.color
																													});
																													mark.redraw(true);
																												}
																											}
																										}if (this.mess){
																											p.geoxml.mb.showMess(this.mess,5000);
																											}
																										};
																											p.onOut=function(){
																										if(this.sidebarid){
																											var bar=Lance$(this.sidebarid);
																												if(!!bar){
																													bar.style.background="none";
																													bar.style.color="";
																												}
																											}
																											var poly;
																												if(this.geoxml.clickablepolys){
																													poly=this.geoxml.polygons[this.polyindex];
																												}
																												if(poly){
																													for(var pg=0;pg<poly.length;pg++){
																														var mark=this.geoxml.overlayman.markers[poly[pg]];
																														mark.setFillStyle({
																															color:mark.realColor});
																														mark.redraw(true);
																														}
																													}
																												};
															GEvent.addListener(p,"mouseout",p.onOut);
															GEvent.addListener(p,"mouseover",p.onOver);
															op.description=escape(desc);
															this.kml[idx].marks.push(op);
															p.map=this.map;
															var bounds;GEvent.addListener(p,"click",function(point,overlay){
																if(!point&&this.geoxml.alwayspop){
																	bounds=this.geoxml.multibounds[this.geomindex];
																	this.map.setCenter(bounds.getCenter(),this.map.getBoundsZoomLevel(bounds));point=bounds.getCenter();
																}if(!point){
																	this.geoxml.mb.showMess("Zooming to "+p.title,3000);
																	bounds=this.geoxml.multibounds[this.geomindex];
																	this.map.setZoom(this.map.getBoundsZoomLevel(bounds));
																	this.map.panTo(bounds.getCenter());
																}
																else{
																	if(this.geoxml.clickablepolys){
																		this.map.openInfoWindowHtml(point,html,iwoptions);
																	}
																}
															});
																if(this.opts.polylabelclass&&newgeom){
																	var epoint=p.getBounds().getCenter();
																	var off=this.opts.polylabeloffset;
																	if(!off){off=new GSize(0,0);
																}
																off.x=-(op.name.length*6);
																var l=new ELabel(epoint," "+op.name+" ",this.opts.polylabelclass,off,this.polylabelopacity,true);
																p.label=l;this.map.addOverlay(l);
															}
																var nhtml="";
																var parm;
																	if(this.basesidebar&&newgeom){
																		var folderid=this.myvar+"_folder"+idx;
																		var blob="<span style=\"background-color:"+op.color+";border:2px solid "+p.strokeColor+";\">&nbsp;&nbsp;&nbsp;&nbsp;</span> ";parm=this.myvar+"$$$"+op.name+"$$$polygon$$$"+n+"$$$"+blob+"$$$"+op.visibility+"$$$null";
																	}
																	if(updatebound){
																		var ne=p.getBounds().getNorthEast();
																		var sw=p.getBounds().getSouthWest();
																		this.bounds.extend(ne);
																		this.bounds.extend(sw);
																		this.overlayman.folderBounds[idx].extend(sw);
																		this.overlayman.folderBounds[idx].extend(ne);
																	}
																	this.overlayman.AddMarker(p,op.name,idx,parm,op.visibility);
																	return op.name;
																	};
														
														GeoXml.prototype.finishLineJSON=function(po,idx,lastlinename){
															var m;
															var that=this;
															var thismap=this.map;
																if(po.type=="line"){
																	m=new GPolyline(po.points,po.color,po.weight,po.opacity);
																	}
																	else{
																		m=new GPolyline.fromEncoded(po);
																	}
																	m.mytitle=po.name;
																	m.title=po.name;
																	m.geoxml=this;
																	m.strokeColor=po.color;
																	m.strokeWeight=po.weight;
																	m.strokeOpacity=po.opacity;
																	m.hilite=this.hilite;
																	var n=that.overlayman.markers.length;
																	var lineisnew=false;
																	var pnum;
																	if(("l_"+po.name)!=lastlinename){
																		lineisnew=true;that.polylines.push(po);
																		pnum=that.polylines.length-1;
																		that.polylines[pnum].lineidx=[];
																		that.latestsidebar=that.myvar+"sb"+n;
																	}
																	else{
																		pnum=that.polylines.length-1;
																		that.polylines[pnum].lineidx.push(n);
																	}
																	if(this.opts.basesidebar){
																		m.sidebarid=that.latestsidebar;
																	}
																	m.onOver=function(){
																		if(!!this.sidebarid){
																			var bar=Lance$(this.sidebarid);
																			if(bar&&typeof bar!="undefined"){
																				bar.style.backgroundColor=this.hilite.color;
																				}
																			}
																		this.realColor=this.strokeColor;
																			if(mark&&typeof mark!="undefined"){
																				mark.setStrokeStyle({
																					color:this.hilite.color
																					});
																				}this.redraw(true);
																				if(this.mess){
																					this.geoxml.mb.showMess(this.mess,5000);
																					}
																				else{
																					this.title="Click for more information about "+this.mytitle;
																					}
																				};
																			m.onOut=function(){
																				if(!!this.sidebarid){
																					var bar=Lance$(this.sidebarid);
																				if(bar&&typeof bar!="undefined"){
																					bar.style.background="none";
																					}
																				}
																				if(mark&&typeof mark!="undefined")mark.setStrokeStyle({
																					color:this.realColor
																				});
																				this.redraw(true);
																					if(this.mess){
																						this.geoxml.mb.hideMess();
																					}
																				};
														GEvent.addListener(m,"mouseover",m.onOver);
														GEvent.addListener(m,"mouseover",m.onOut);
														var parm="";
														that.kml[idx].marks.push(po);
														var desc=unescape(po.description);
														var awidth=this.iwwidth;
															if(desc.length*8<awidth){awidth=desc.length*8;
														}
															if(awidth<po.name.length*12){
																awidth=po.name.length*12;
															}
														var html="<div style='font-weight: bold; font-size: medium; margin-bottom: 0em;'>"+po.name;html+="</div><div style='font-family: Arial, sans-serif; font-size:small; width:"+awidth+"px'>"+desc+"</div>";
														m.map=this.map;
															if(this.clickablelines){
														
														GEvent.addListener(m,"click",function(point){
															if(!point){
																point=m.getPoint();
															}
														this.map.openInfoWindowHtml(point,html,that.opts.iwoptions);
														});
													}
													if(that.basesidebar&&lineisnew){
														var blob='&nbsp;&nbsp;<span style=";border-left:'+po.weight+'px solid '+po.color+';">&nbsp;</span> ';
														if(typeof po.visibility=="undefined"){
															po.visibility=true;
														}
														parm=that.myvar+"$$$"+po.name+"$$$polyline$$$"+n+"$$$"+blob+"$$$"+po.visibility+"$$$"+(that.polylines.length-1)+"$$$";
														}
														var ne=m.getBounds().getNorthEast();
														var sw=m.getBounds().getSouthWest();
														that.bounds.extend(ne);
														that.bounds.extend(sw);
														that.overlayman.folderBounds[idx].extend(sw);
														that.overlayman.folderBounds[idx].extend(ne);
														that.overlayman.AddMarker(m,po.name,idx,parm,po.visibility);
														return(po.name);
													};
												
												GeoXml.prototype.handlePlaceObj=function(num,max,idx,lastlinename,depth){
													var that=this;
													var po=that.jsonmarks[num];
													var name=po.name;
														if(po.title){
															name=po.title;
														}
														if(name.length+depth>that.maxtitlewidth){
															that.maxtitlewidth=name.length+depth;
															}
														switch(po.type){
															case "polygon":lastlinename="p_"+that.finishPolygonJSON(po,idx,true,lastlinename);
															break;
															
															case "line":case "polyline":lastlinename="l_"+that.finishLineJSON(po,idx,lastlinename);
															break;
															
															case "point":that.createMarkerJSON(po,idx);lastlinename="";
															break;
														}
														
														if(num<max-1){
															var act=that.myvar+".handlePlaceObj("+(num+1)+","+max+","+idx+",\""+lastlinename+"\","+depth+");";
															
														document.status="processing "+name;setTimeout(act,1);
														}
															else{
														lastlinename="";
															if(num==that.jsonmarks.length-1){
																that.progress--;
															if(that.progress<=0){
															if(!that.opts.nozoom){
																that.map.setZoom(that.map.getBoundsZoomLevel(that.bounds));
																that.map.setCenter(that.bounds.getCenter());
															}
													GEvent.trigger(that,"parsed");
													that.setFolders();
														if(!that.opts.sidebarid){
															that.mb.showMess("Finished Parsing",1000);
															that.ParseURL();
															}
														}
													}
												}
											};
										
										GeoXml.prototype.parseJSON=function(doc,title,latlon,desc,sbid){
											var that=this;that.overlayman.miStart=new Date();
											that.jsdocs=eval('('+doc+')');
											var bar=Lance$(that.basesidebar);
												if(bar){
												bar.style.display="";
											}
											that.recurseJSON(that.jsdocs[0],title,desc,that.basesidebar,0);
											};
										
										GeoXml.prototype.setFolders=function(){
											var that=this;
											var len=that.kml.length;
											for(var i=0;
												i<len;i++){
												var fid=that.kml[i].folderid;var fob=Lance$(fid);
													if(fob!==null&&fid!=that.opts.sidebarid){
														if(!!that.kml[i].open){
														fob.style.display='block';
														}
														else{
														fob.style.display='none';
														}
													}
												}
											};
										
										GeoXml.prototype.recurseJSON=function(doc,title,desc,sbid,depth){
											var that=this;
											var polys=doc.marks;
											var name=doc.title;
											if(!sbid){
												sbid=0;
											}
											var description=unescape(doc.description);
												if(!description&&desc){
													description=desc;
												}
											var keepopen=that.forcefoldersopen;
												if(doc.open){
													keepopen=true;
												}
											var visible=true;
												if(typeof doc.visibility!="undefined"&&doc.visibility){visible=true;
											}
												if(that.hideall){
													visible=false;
												}
											var snippet=doc.snippet;
											var idx=that.overlayman.folders.length;
												if(!description){description=name;
											}
											var folderid;
											var icon;
											that.overlayman.folders.push([]);
											that.overlayman.subfolders.push([]);
											that.overlayman.folderhtml.push([]);
											that.overlayman.folderhtmlast.push(0);
											that.overlayman.folderBounds.push(new GLatLngBounds());
											that.kml.push(new KMLObj(title,description,keepopen));
												if((!depth&&(doc.folders&&doc.folders.length>1))||doc.marks.length){
													if(depth<2||doc.marks.length<1){
														icon=that.globalicon;
														}
														else{
															icon=that.foldericon;
														}
													folderid=that.createFolder(idx,name,sbid,icon,description,snippet,keepopen,visible);
												}
												else{
													folderid=sbid;
													}
												var parm,blob;
												var nhtml="";
												var html;
												var m;
												var num=that.jsonmarks.length;
												var max=num+polys.length;
												for(var p=0;p<polys.length;p++){
													var po=polys[p];
													that.jsonmarks.push(po);
													desc=unescape(po.description);
													m=null;
														if(that.opts.preloadHTML&&desc&&desc.match(/<(\s)*img/i)){
															var preload=document.createElement("span");
															preload.style.visibility="visible";
															preload.style.position="absolute";
															preload.style.left="-1200px";
															preload.style.top="-1200px";
															preload.style.zIndex=this.overlayman.markers.length;
															document.body.appendChild(preload);
															preload.innerHTML=desc;
														}
													}
														if(that.groundOverlays){
														}
															if(polys.length){
																that.handlePlaceObj(num,max,idx,null,depth);
															}
																var fc=0;
																var fid=0;
															if(typeof doc.folders!="undefined"){
																fc=doc.folders.lenth;
																for(var f=0;f<doc.folders.length;++f){
																	var nextdoc=that.jsdocs[doc.folders[f]];
																	fid=that.recurseJSON(nextdoc,nextdoc.title,nextdoc.description,folderid,(depth+1));
																	that.overlayman.subfolders[idx].push(fid);
																	that.overlayman.folderBounds[idx].extend(that.overlayman.folderBounds[fid].getSouthWest());
																	that.overlayman.folderBounds[idx].extend(that.overlayman.folderBounds[fid].getNorthEast());
																if(fid!=idx){
																	that.kml[idx].folders.push(fid);
																}
															}
														}
														if(fc||polys.length){
															that.bounds.extend(that.overlayman.folderBounds[idx].getSouthWest());
															that.bounds.extend(that.overlayman.folderBounds[idx].getNorthEast());
														}
														return idx;
														};
												GeoXml.prototype.createPolygon=function(lines,color,width,opacity,fillcolor,fillOpacity,pbounds,name,desc,folderid,visible,fill,outline,kml_id){
													var thismap=this.map;
													var p={};
													p.obj={
														"description":desc,"name":name
													};
													p.obj.polylines=[];
													p.obj.id=kml_id;
													p.obj.visibility=visible;
													p.obj.fill=fill;
													p.obj.outline=outline;
													p.fillcolor=fillcolor;
													p.obj.strokecolor=color;
														if(!color){
															p.color=this.style.color;
														}
														else{
															p.color=color;
														}
														if(!fillcolor){
															p.obj.color=this.randomColor();
														}
														else{
															p.obj.color=fillcolor;
														}
														if(!opacity){
															p.obj.opacity=this.style.opacity;
														}
														else{
															p.obj.opacity=opacity;
														}
														if(typeof fillOpacity=="undefined"){
															p.obj.fillOpacity=this.style.fillOpacity;
														}
														else{
															p.obj.fillOpacity=fillOpacity;
														}
														if(!width){
															p.weight=this.style.width;
														}
														else{
															p.weight=width;
														}
															p.bounds=pbounds;
															p.lines=lines;
															p.sidebarid=this.opts.sidebarid;
															this.polyset.push(p);
															document.status="processing poly "+name;
															setTimeout(this.myvar+".processPLine("+(this.polyset.length-1)+",0,'"+folderid+"')",5);
														};
												
												GeoXml.prototype.toggleFolder=function(i){
													var f=Lance$(this.myvar+"_folder"+i);
													var tb=Lance$(this.myvar+"TB"+i);
														if(f.style.display=="none"){
															f.style.display="";if(tb){
																tb.style.fontWeight="normal";
															}
														}
														else{
															f.style.display="none";
															if(tb){
																tb.style.fontWeight="bold";
															}
														}
													};
													
												GeoXml.prototype.saveJSON=function(){
													if(top.standalone){
														var fpath=browseForSave("Select a directory to place your json file","JSON Data Files (*.js)|*.js|All Files (*.*)|*.*","JSON-DATA");
															if(typeof fpath!="undefined"){
																var jsonstr=JSON.stringify(this.kml);
																saveLocalFile(fpath+".js",jsonstr);
															}
																return;
													}
													if(typeof JSON!="undefined"){
														var jsonstr=JSON.stringify(this.kml);
															if(typeof serverBlessJSON!="undefined"){
																serverBlessJSON(escape(jsonstr),"MyKJSON");
																}
																else{
																	this.showIt(jsonstr);
																}
															}
															else{
																alert("No JSON methods currently available");
															}
														};
													GeoXml.prototype.hide=function(){this.toggleContents(1,false);
												};
												
												GeoXml.prototype.show=function(){
													this.toggleContents(1,true);
													};
												
												GeoXml.prototype.toggleContents=function(i,show){
													var f=this.overlayman.folders[i];
													var cb;
													var j;
													var m;
														if(typeof f=="undefined"){
															this.mb.showMess("folder "+f+" not defined");
															return;
														}
														if(show){
															for(j=0;j<f.length;j++){
																m=this.overlayman.markers[f[j]];
																m.hidden=false;
																	if(this.basesidebar){cb=Lance$(this.myvar+''+f[j]+'CB');
																	if(cb&&typeof cb!="undefined"){
																		cb.checked=true;
																	}
																}
															if(m.hide){
																m.show();
																}
																else{
																	this.map.addOverlay(m);
																}
																if(!!m.label){
																	m.label.show();
																}
															}
														}
														else{
															for(j=0;j<f.length;j++){
																m=this.overlayman.markers[f[j]];
																m.hidden=true;
																if(this.basesidebar){
																	cb=Lance$(this.myvar+''+f[j]+'CB');
																		if(cb&&typeof cb!="undefined"){
																			cb.checked=false;
																		}
																	}
																if(m.hide){
																	m.hide();
																}
																else{
																	this.map.removeOverlay(m);
																}
																if(!!m.label){
																	m.label.hide();
																}
															}
														}
														var sf=this.overlayman.subfolders[i];
														if(typeof sf!="undefined"){
															for(j=0;j<sf.length;j++){
																if(sf[j]!=i){
																	if(this.basesidebar){
																		cb=Lance$(this.myvar+''+sf[j]+'FCB');
																		if(cb&&typeof cb!="undefined"){
																			cb.checked=(!!show);
																		}
																	}
																	this.toggleContents(sf[j],show);
																}
															}
														}
													};
												
												GeoXml.prototype.showHide=function(a,show,p){
													var m,i;
													if(a!=null){
														if(show){
															this.overlayman.markers[a].show();
															this.overlayman.markers[a].hidden=false;
																if(!!this.overlayman.markers[a].label){
																	this.overlayman.markers[a].label.show();
																}
															}
															else{
																this.overlayman.markers[a].hide();
																this.overlayman.markers[a].hidden=true;
																if(!!this.overlayman.markers[a].label){
																	this.overlayman.markers[a].label.hide();
																}
															}
														}
														else{
															var ms=this.polylines[p];
																if(show){
																	for(i=0;i<ms.lineidx.length;i++){
																		m=this.overlayman.markers[ms.lineidx[i]];
																		m.hidden=false;
																			if(m.hide){
																				m.show();
																			}
																			else{
																				this.map.addOverlay(m);
																			}
																			if(!!m.label){
																				m.show();
																			}
																		}
																	}
																	else{
																		for(i=0;i<ms.lineidx.length;i++){
																			m=this.overlayman.markers[ms.lineidx[i]];
																			m.hidden=true;
																				if(m.hide){m.hide();
																		}
																		else{
																			this.map.removeOverlay(m);
																		}
																		if(!!m.label){
																			m.hide();
																		}
																	}
																}
															}
														};
												
												GeoXml.prototype.toggleOff=function(a,show){
													if(show){
														this.map.addOverlay(this.overlayman.markers[a]);
														this.overlayman.markers[a].hidden=false;
													}
													else{
														this.map.removeOverlay(this.overlayman.markers[a]);
														this.overlayman.markers[a].hidden=true;
													}
														if(this.labels.onMap){
															this.map.removeOverlay(this.labels);
															this.map.addOverlay(this.labels);
														}
													};
												
												GeoXml.addSidebar=function(myvar,name,type,e,graphic,ckd,i){
													var check="checked";
														if(ckd=="false"){
															check="";
														}
													var h="";
													var mid=myvar+"sb"+e;
													switch(type){
	case "marker":h='<div style="position:relative; float:left;" id="'+mid+'" onmouseout="GEvent.trigger('+myvar+'.overlayman.markers['+e+'],\'mouseout\');" onmouseover="GEvent.trigger('+myvar+'.overlayman.markers['+e+'],\'mouseover\');" ><!--'+graphic+'--><a class="mapPlacemark" href="#" onclick="GEvent.trigger('+myvar+'.overlayman.markers['+e+'],\'click\');return false;"><span style="color:white; font-weight:bold;">&nbsp;&times;&nbsp;</span>'+name+'&nbsp;</a></div>';
	break;
	
	case "polyline":h='<div id="'+mid+'"  onmouseout="'+myvar+'.overlayman.markers['+e+'].onOut();" onmouseover="'+myvar+'.overlayman.markers['+e+'].onOver();" ><span class="mapPlacemark" style="margin-top:6px;">&nbsp;'+graphic+'<a class="mapPlacemark" href="#" onclick="GEvent.trigger('+myvar+'.overlayman.markers['+e+'],\'click\');return false;">&nbsp;'+name+'</a></span></div>';
	break;
	
	case "polygon":h='<div id="'+mid+'"  onmouseout="'+myvar+'.overlayman.markers['+e+'].onOut();" onmouseover="'+myvar+'.overlayman.markers['+e+'].onOver();" ><input id="'+myvar+''+e+'CB" type="hidden" '+check+' onclick="'+myvar+'.showHide('+e+',this.checked)"><span style="margin-top:6px;">&nbsp;'+graphic+'<a href="#" onclick="GEvent.trigger('+myvar+'.overlayman.markers['+e+'],\'click\');return false;">&nbsp;'+name+'</a></span></nobr></div>';
	break;
	
	case "groundoverlay":h='<div id="'+mid+'"><input id="'+myvar+''+e+'CB" type="hidden" '+check+' onclick="'+myvar+'.showHide('+e+',this.checked)"><span style="margin-top:6px;">&nbsp;'+graphic+'<a href="#" onclick="GEvent.trigger('+myvar+'.overlayman.markers['+e+'],\'zoomto\');return false;">&nbsp;'+name+'</a></span></div>';
	break;
	
	case "tiledoverlay":h='<div id="'+mid+'"><nobr><input id="'+myvar+''+e+'CB" type="hidden" '+check+' onclick="'+myvar+'.toggleOff('+e+',this.checked)"><span style="margin-top:6px;"><a href="#" oncontextMenu="'+myvar+'.upgradeLayer('+i+');return false;" onclick="GEvent.trigger('+myvar+'.overlayman.markers['+e+'],\'zoomto\');return false;">'+GeoXml.WMSICON+'&nbsp;'+name+'</a><br />'+graphic+'</span></div>';
	break;
}
	return h;
	};
	
														GeoXml.addDropdown=function(myvar,name,type,i,graphic){
															return '<option value="'+i+'">'+name+'</option>';
														};
														
														GeoXml.prototype.parse=function(titles){
															var that=this;var names=[];
																if(typeof titles!="undefined"){
																	if(typeof titles!="string"){
																		names=titles;
																	}
																	else{
																		names=titles.split(",");
																	}
																}
																that.progress+=that.urls.length;
																	for(var u=0;u<that.urls.length;u++){
																		var title=names[u];
																			if(typeof title=="undefined"||!title||title=="null"){
																				var segs=that.urls[u].split("/");
																				title=segs[segs.length-1];
																			}
																			that.mb.showMess("Loading "+title);
																				var re=/\.js$/i;
																					if(that.urls[u].search(re)!=-1){
																						that.loadJSONUrl(this.urls[u],title);
																					}
																				else{
																					that.loadXMLUrl(this.urls[u],title);
																				}
																			}
																		};
														
														GeoXml.prototype.parseString=function(doc,titles,latlon){
															var names=[];if(titles){names=titles.split(",");
																}
															
															if(typeof doc=="string"){
																this.docs=[doc];
															}
																else{
																	this.docs=doc;
																}
															this.progress+=this.docs.length;
															for(var u=0;u<this.docs.length;u++){
																this.mb.showMess("Processing "+names[u]);
																this.processing(GXml.parse(this.docs[u]),names[u],latlon);
															}
														};
													
													
													GeoXml.prototype.parseXML=function(doc,titles,latlon){
														var names=[];
															if(typeof titles!="undefined"){
																if(typeof titles=="string"){
																	names=titles.split(",");
																}
															else{
																names=titles;
															}
														}
														if(typeof doc=="array"){
															this.docs=doc;
														}
														else{
															this.docs=[doc];
														}
														this.progress+=this.docs.length;
														for(var u=0;u<this.docs.length;u++){
															this.mb.showMess("Processing "+names[u]);
															this.processing(this.docs[u],names[u],latlon);
															}
														};
														
														var currdeschead="";
														
											GeoXml.prototype.makeDescription=function(elem,title,depth){
												var d="";
												var len=elem.childNodes.length;
												var ln=0;
												var val;
												while(len--){
													var subelem=elem.childNodes.item(ln);
													var nn=subelem.nodeName;
													var sec=nn.split(":");
													var base="";
												if(sec.length>1){
													base=sec[1];
												}
												else{
													base=nn;
												}
												if(base.match(/^(visible|visibility|boundedBy|StyleMap|styleUrl|posList|coordinates|Style|Polygon|LineString|Point|LookAt|Envelope|Box|MultiPolygon|where)/)){currdeschead="";}else{if(base.match(/#text|the_geom|SchemaData|ExtendedData|#cdata-section/)){}else{if(base.match(/Snippet/i)){}else{if(base.match(/SimpleData/)){base=subelem.getAttribute("name");}currdeschead="<b>&nbsp;"+base+"&nbsp;</b> :";}}val=subelem.nodeValue;if(nn=="link"){var href=subelem.getAttribute("href");if(href){val='<a href="'+href+'">'+href+'</a>';}}if(base.match(/(\S)*(name|title)(\S)*/i)){if(!val){val=GXml.value(subelem);}title=val;if(val&&typeof title!="undefined"&&title.length>this.maxtitlewidth){this.maxtitlewidth=title.length;}currdeschead="";}else{if(val&&val.match(/(\S)+/)){if(val.match(/^http:\/\/|^https:\/\//i)){val='<a href="'+val+'">'+val+'</a>';}else{if(!title||title==""){title=val;if(val&&typeof title!="undefined"&&title.length>this.maxtitlewidth){this.maxtitlewidth=title.length;}}}}if(val&&(val.match(/(\s)*/)!=true)){d+=currdeschead+"<span>"+val+"</span><br />";currdeschead="";}if(subelem.childNodes.length){var con=this.makeDescription(subelem,title,depth+1);if(con){d+=con.desc;if(typeof con.title!="undefined"&&con.title){title=con.title;if(title.length>this.maxtitlewidth){this.maxtitlewidth=title.length+depth;}}}}}}ln++;}var dc={};dc.desc=d;dc.title=title;return dc;};GeoXml.prototype.randomColor=function(){var color="#";for(var i=0;i<6;i++){var idx=parseInt(Math.random()*16,10)+1;color+=idx.toString(16);}return color;};GeoXml.prototype.handleGeomark=function(mark,idx,trans){var that=this;var desc,title,name,style;title="";desc="";var styleid=0;var lat,lon;var visible=true;if(this.hideall){visible=false;}var fill=true;var outline=true;var width,color,opacity,fillOpacity,fillColor;var cor=[];var node,nv,cm;var coords="";var poslist=[];var point_count=0;var box_count=0;var line_count=0;var poly_count=0;var p;var points=[];var cc,l;var pbounds=new GLatLngBounds();var coordset=mark.getElementsByTagName("coordinates");if(coordset.length<1){coordset=mark.getElementsByTagName("gml:coordinates");}if(coordset.length<1){coordset=[];poslist=mark.getElementsByTagName("gml:posList");if(poslist.length<1){poslist=mark.getElementsByTagName("posList");}for(l=0;l<poslist.length;l++){coords=" ";cor=GXml.value(poslist.item(l)).split(' ');if(that.isWFS){for(cc=0;cc<(cor.length-1);cc++){if(cor[cc]&&cor[cc]!=" "&&!isNaN(parseFloat(cor[cc]))){coords+=""+parseFloat(cor[cc])+","+parseFloat(cor[cc+1]);coords+=" ";cc++;}}}else{for(cc=0;cc<(cor.length-1);cc++){if(cor[cc]&&cor[cc]!=" "&&!isNaN(parseFloat(cor[cc]))){coords+=""+parseFloat(cor[cc+1])+","+parseFloat(cor[cc]);coords+=" ";cc++;}}}if(coords){if(poslist.item(l).parentNode&&(poslist.item(l).parentNode.nodeName=="gml:LineString")){line_count++;}else{poly_count++;}cm="<coordinates>"+coords+"</coordinates>";node=GXml.parse(cm);if(coordset.push){coordset.push(node);}}}var pos=mark.getElementsByTagName("gml:pos");if(pos.length<1){pos=mark.getElementsByTagName("gml:pos");}if(pos.length){for(p=0;p<pos.length;p++){nv=GXml.value(pos.item(p));cor=nv.split(" ");if(!that.isWFS){node=GXml.parse("<coordinates>"+cor[1]+","+cor[0]+"</coordinates>");}else{node=GXml.parse("<coordinates>"+cor[0]+","+cor[1]+"</coordinates>");}if(coordset.push){coordset.push(node);}}}}var newcoords=false;point_count=0;box_count=0;line_count=0;poly_count=0;var dc=that.makeDescription(mark,"");desc="<ul>"+dc.desc+"</ul>";if(!name&&dc.title){name=dc.title;if(name.length>this.maxtitlewidth){this.maxtitlewidth=name.length;}}if(newcoords&&typeof lat!="undefined"){coordset.push(""+lon+","+lat);}var lines=[];var point;var skiprender;var bits;for(var c=0;c<coordset.length;c++){skiprender=false;if(coordset[c].parentNode&&(coordset[c].parentNode.nodeName=="gml:Box"||coordset[c].parentNode.nodeName=="gml:Envelope")){skiprender=true;}coords=GXml.value(coordset[c]);coords+=" ";coords=coords.replace(/\s+/g," ");coords=coords.replace(/^ /,"");coords=coords.replace(/, /,",");var path=coords.split(" ");if(path.length==1||path[1]==""){bits=path[0].split(",");point=new GLatLng(parseFloat(bits[1])/trans.ys-trans.y,parseFloat(bits[0])/trans.xs-trans.x);that.bounds.extend(point);if(!skiprender){if(typeof name=="undefined"){name=that.unnamedplace;}if(!!that.opts.createmarker){that.opts.createmarker(point,name,desc,styleid,idx,null,visible);}else{that.createMarker(point,name,desc,styleid,idx,null,visible);}}}else{for(p=0;p<path.length-1;p++){bits=path[p].split(",");point=new GLatLng(parseFloat(bits[1])/trans.ys-trans.y,parseFloat(bits[0])/trans.xs-trans.x);points.push(point);pbounds.extend(point);}that.bounds.extend(pbounds.getNorthEast());that.bounds.extend(pbounds.getSouthWest());if(!skiprender){lines.push(points);}}}if(!lines||lines.length<1){return;}var linestring=mark.getElementsByTagName("LineString");if(linestring.length<1){linestring=mark.getElementsByTagName("gml:LineString");}if(linestring.length||line_count>0){if(!!style){width=style.width;color=style.color;opacity=style.opacity;}else{width=this.style.width;color=this.style.color;opacity=this.style.opacity;}if(typeof name=="undefined"){name=that.unnamedpath;}if(!!that.opts.createpolyline){that.opts.createpolyline(lines,color,width,opacity,pbounds,name,desc,idx,visible);}else{that.createPolyline(lines,color,width,opacity,pbounds,name,desc,idx,visible);}}var polygons=mark.getElementsByTagName("Polygon");if(polygons.length<1){polygons=mark.getElementsByTagName("gml:Polygon");}if(polygons.length||poly_count>0){if(!!style){width=style.width;color=style.color;opacity=style.opacity;fillOpacity=style.fillOpacity;fillColor=style.fillColor;fill=style.file;outline=style.outline;}fillColor=this.randomColor();color=this.randomColor();fill=1;outline=1;if(typeof name=="undefined"){name=that.unnamedarea;}if(!!that.opts.createpolygon){that.opts.createpolygon(lines,color,width,opacity,fillColor,fillOpacity,pbounds,name,desc,idx,visible,fill,outline);}else{that.createPolygon(lines,color,width,opacity,fillColor,fillOpacity,pbounds,name,desc,idx,visible,fill,outline);}}};GeoXml.prototype.handlePlacemark=function(mark,idx,depth,fullstyle){var that=this;var desc,title,name,style;title="";desc="";var styleid=0;var lat,lon;var visible=true;if(this.hideall){visible=false;}var newcoords=false;var outline;var opacity;var fillcolor;var fillOpacity;var color;var width;var pbounds;var fill;var points=[];var lines=[];var bits=[];var point;var cor,node,cm,nv;var l,pos,p,j,k,cc;var kml_id=mark.getAttribute("id");var point_count=0;var box_count=0;var line_count=0;var poly_count=0;var coords="";l=mark.getAttribute("lat");if(typeof l!="undefined"){lat=l;}l=mark.getAttribute("lon");if(typeof l!="undefined"){newcoords=true;lon=l;}l=0;var coordset=mark.getElementsByTagName("coordinates");if(coordset.length<1){coordset=mark.getElementsByTagName("gml:coordinates");}if(coordset.length<1){coordset=[];var poslist=mark.getElementsByTagName("gml:posList");if(!poslist.length){poslist=mark.getElementsByTagName("posList");}for(l=0;l<poslist.length;l++){coords=" ";var plitem=GXml.value(poslist.item(l))+" ";plitem=plitem.replace(/(\s)+/g,' ');cor=plitem.split(' ');if(that.isWFS){for(cc=0;cc<(cor.length-1);cc++){if(!isNaN(parseFloat(cor[cc]))&&!isNaN(parseFloat(cor[cc+1]))){coords+=""+parseFloat(cor[cc])+","+parseFloat(cor[cc+1]);coords+=" ";cc++;}}}else{for(cc=0;cc<(cor.length-1);cc++){if(!isNaN(parseFloat(cor[cc]))&&!isNaN(parseFloat(cor[cc+1]))){coords+=""+parseFloat(cor[cc+1])+","+parseFloat(cor[cc]);coords+=" ";cc++;}}}if(coords){if(poslist.item(l).parentNode&&(poslist.item(l).parentNode.nodeName=="gml:LineString")){line_count++;}else{poly_count++;}cm="<coordinates>"+coords+"</coordinates>";node=GXml.parse(cm);if(coordset.push){coordset.push(node);}}}pos=mark.getElementsByTagName("gml:pos");if(pos.length<1){pos=mark.getElementsByTagName("gml:pos");}if(pos.length){for(p=0;p<pos.length;p++){nv=GXml.value(pos.item(p))+" ";cor=nv.split(' ');if(!that.isWFS){node=GXml.parse("<coordinates>"+cor[1]+","+cor[0]+"</coordinates>");}else{node=GXml.parse("<coordinates>"+cor[0]+","+cor[1]+"</coordinates>");}if(coordset.push){coordset.push(node);}}}}for(var ln=0;ln<mark.childNodes.length;ln++){var nn=mark.childNodes.item(ln).nodeName;nv=GXml.value(mark.childNodes.item(ln));var ns=nn.split(":");var base;if(ns.length>1){base=ns[1].toLowerCase();}else{base=ns[0].toLowerCase();}var processme=false;switch(base){case "name":name=nv;if(name.length+depth>this.maxtitlewidth){this.maxtitlewidth=name.length+depth;}break;case "title":title=nv;if(title.length+depth>this.maxtitlewidth){this.maxtitlewidth=title.length+depth;}break;case "desc":case "description":desc=GeoXml.getDescription(mark.childNodes.item(ln));if(!desc){desc=nv;}if(that.opts.preloadHTML&&desc&&desc.match(/<(\s)*img/i)){var preload=document.createElement("span");preload.style.visibility="visible";preload.style.position="absolute";preload.style.left="-1200px";preload.style.top="-1200px";preload.style.zIndex=this.overlayman.markers.length;document.body.appendChild(preload);preload.innerHTML=desc;}if(desc.match(/^http:\/\//i)){var flink=desc.split(/(\s)+/);if(flink.length>1){desc="<a href=\""+flink[0]+"\">"+flink[0]+"</a>";
												for(var i=1;i<flink.length;i++){
													desc+=flink[i];
													}
												}
												else{
													desc="<a href=\""+desc+"\">"+desc+"</a>";
												}
											}
											break;
											
											case "visibility":if(nv=="0"){
												visible=false;
											}
											break;
											
											case "href":case "link":if(nv){
												desc+="<p><a target='_blank' href='"+nv+"'>link</a></p>";
											}
											else{
												var href=mark.childNodes.item(ln).getAttribute("href");
												if(href){
													var imtype=mark.childNodes.item(ln).getAttribute("type");
													if(imtype&&imtype.match(/image/)){
														desc+="<img style=\"width:256px\" src='"+href+"' />";
													}
												}
											}
											break;
											
											case "author":desc+="<p><b>author:</b>"+nv+"</p>";
											break;
											
											case "time":desc+="<p><b>time:</b>"+nv+"</p>";
											break;
											
											case "lat":lat=nv;
											break;
											
											case "long":lon=nv;newcoords=true;
											break;
											
											case "point":point_count++;processme=true;
											break;
											
											case "line":line_count++;processme=true;
											break;
											
											case "box":box_count++;processme=true;
											break;
											
											case "polygon":poly_count++;processme=true;
											break;
											
											case "styleurl":styleid=nv;
											break;
											
											case "stylemap":var found=false;
											node=mark.childNodes.item(ln);for(j=0;(j<node.childNodes.length&&!found);j++){
												var pair=node.childNodes[j];
													for(k=0;(k<pair.childNodes.length&&!found);k++){
														var pn=pair.childNodes[k].nodeName;if(pn=="Style"){
															style=this.handleStyle(pair.childNodes[k]);
															found=true;
														}
													}
												}
											break;
											
											case "Style":case "style":style=this.handleStyle(mark.childNodes.item(ln));
											break;
											
											}
											if(processme){cor=nv.split(' ');coords="";
												for(cc=0;cc<(cor.length-1);cc++){
													if(!isNaN(parseFloat(cor[cc]))&&!isNaN(parseFloat(cor[cc+1]))){
														coords+=""+parseFloat(cor[cc+1])+","+parseFloat(cor[cc]);
														coords+=" ";cc++;
													}
												}
											if(coords!=""){
												node=GXml.parse("<coordinates>"+coords+"</coordinates>");
												if(coordset.push){
													coordset.push(node);
												}
											}
										}
									}
									if(!name&&title){
										name=title;
									}if(fullstyle){
										style=fullstyle;
									}if(styleid){
										style=this.styles[styleid];
									}if(typeof desc=="undefined"||!desc){
										var dc=that.makeDescription(mark,"");
										desc="<ul>"+dc.desc+"</ul>";
										if(!name&&dc.title){
											name=dc.title;
											if((name.length+depth)>this.maxtitlewidth){
												this.maxtitlewidth=name.length+depth;
											}
										}
									}if(newcoords&&typeof lat!="undefined"){
										if(lat){
											var cs=""+lon+","+lat+" ";
											node=GXml.parse("<coordinates>"+cs+"</coordinates>");
											coordset.push(node);
										}
									}for(var c=0;c<coordset.length;c++){
										var skiprender=false;
										if(coordset[c].parentNode&&(coordset[c].parentNode.nodeName.match(/^(gml:Box|gml:Envelope)/i))){
											skiprender=true;
										}
										coords=GXml.value(coordset[c]);
										coords+=" ";
										coords=coords.replace(/(\s)+/g," ");
										coords=coords.replace(/^ /,"");
										coords=coords.replace(/, /,",");
										var path=coords.split(" ");
											if(path.length==1||path[1]==""){
												bits=path[0].split(",");
												point=new GLatLng(parseFloat(bits[1]),parseFloat(bits[0]));
												this.overlayman.folderBounds[idx].extend(point);
											if(!skiprender){
												if(typeof name=="undefined"){
													name=that.unnamedplace;
												}if(!!that.opts.createmarker){
													that.opts.createmarker(point,name,desc,styleid,idx,style,visible,kml_id);
												}
												else{
													that.createMarker(point,name,desc,styleid,idx,style,visible,kml_id);
												}
											}
										}
										else{points=[];
										pbounds=new GLatLngBounds();
											for(p=0;p<path.length-1;p++){
												bits=path[p].split(",");
												point=new GLatLng(parseFloat(bits[1]),parseFloat(bits[0]));
												points.push(point);
												pbounds.extend(point);
											}this.overlayman.folderBounds[idx].extend(pbounds.getSouthWest());
											this.overlayman.folderBounds[idx].extend(pbounds.getNorthEast());
											this.bounds.extend(pbounds.getSouthWest());
											this.bounds.extend(pbounds.getNorthEast());
											if(!skiprender){lines.push(points);
											}
										}
									}if(!lines||lines.length<1){
										return;
										}
										
										var linestring=mark.getElementsByTagName("LineString");
											if(linestring.length<1){
												linestring=mark.getElementsByTagName("gml:LineString");
											}
											if(linestring.length||line_count>0){
												if(!!style){
													width=style.width;color=style.color;opacity=style.opacity;
												}
												else{
													width=this.style.width;color=this.style.color;opacity=this.style.opacity;
												}
												if(typeof name=="undefined"){
													name=unnamedpath;
												}
												if(!!that.opts.createpolyline){
													that.opts.createpolyline(lines,color,width,opacity,pbounds,name,desc,idx,visible,kml_id);
												}
												else{
													that.createPolyline(lines,color,width,opacity,pbounds,name,desc,idx,visible,kml_id);
												}
											}
										var polygons=mark.getElementsByTagName("Polygon");
											if(polygons.length<1){
												polygons=mark.getElementsByTagName("gml:Polygon");
											}
											if(polygons.length||poly_count>0){
												if(!!style){
													width=style.width;color=style.color;opacity=style.opacity;fillOpacity=style.fillOpacity;fillcolor=style.fillcolor;fill=style.fill;outline=style.outline;
												}
											if(typeof fill=="undefined"){
												fill=1;
												}
												if(typeof color=="undefined"){
													color=this.style.color;
												}
												if(typeof fillcolor=="undefined"){
													fillcolor=this.randomColor();
												}
												if(typeof name=="undefined"){
													name=that.unnamedarea;
												}
												if(!!that.opts.createpolygon){
													that.opts.createpolygon(lines,color,width,opacity,fillcolor,fillOpacity,pbounds,name,desc,idx,visible,fill,outline,kml_id);
												}
												else{
													that.createPolygon(lines,color,width,opacity,fillcolor,fillOpacity,pbounds,name,desc,idx,visible,fill,outline,kml_id);
												}
											}
										};
										
									GeoXml.prototype.makeIcon=function(tempstyle,href){
										if(!!href){
											if(!!this.opts.baseicon){
												tempstyle=new GIcon(this.opts.baseicon,href);
												tempstyle.href=href;
											}
											else{
												tempstyle=new GIcon(G_DEFAULT_ICON,href);
												tempstyle.iconSize=new GSize(32,32);
												tempstyle.shadowSize=new GSize(59,32);
												tempstyle.dragCrossAnchor=new GPoint(2,8);
												tempstyle.iconAnchor=new GPoint(16,32);
												tempstyle.href=href;
											if(this.opts.printgif){
												var bits=href.split("/");
												var gif=bits[bits.length-1];
												gif=this.opts.printgifpath+gif.replace(/.png/i,".gif");tempstyle.printImage=gif;tempstyle.mozPrintImage=gif;
											}
											if(!!this.opts.noshadow){
												tempstyle.shadow="";
											}
											else{
												if(href.indexOf("/red.png")>-1||href.indexOf("/blue.png")>-1||href.indexOf("/green.png")>-1||href.indexOf("/yellow.png")>-1||href.indexOf("/lightblue.png")>-1||href.indexOf("/purple.png")>-1||href.indexOf("/orange.png")>-1||href.indexOf("/pink.png")>-1||href.indexOf("-dot.png")>-1){
													tempstyle.shadow="http://maps.google.com/mapfiles/ms/icons/msmarker.shadow.png";
												}
											else if(href.indexOf("-pushpin.png")>-1||href.indexOf("/pause.png")>-1||href.indexOf("/go.png")>-1||href.indexOf("/stop.png")>-1){
												tempstyle.shadow="http://maps.google.com/mapfiles/ms/icons/pushpin_shadow.png";
											}
											else{
												var shadow=href.replace(".png",".shadow.png");
												if(shadow.indexOf(".jpg")){
													shadow="";
												}
												tempstyle.shadow=shadow;
											}
										}
									}
								}
								if(this.opts.noshadow){
									tempstyle.shadow="";
								}
							return tempstyle;
						};
						
						GeoXml.prototype.handleStyle=function(style,sid){
							var icons=style.getElementsByTagName("Icon");
							var tempstyle,opacity;
							var aa,bb,gg,rr;
							var fill,href,color,colormode,outline;
							if(icons.length>0){
								href=GXml.value(icons[0].getElementsByTagName("href")[0]);
								tempstyle=this.makeIcon(tempstyle,href);
							}var linestyles=style.getElementsByTagName("LineStyle");
								if(linestyles.length>0){
									var width=parseInt(GXml.value(linestyles[0].getElementsByTagName("width")[0]),10);
										if(width<1){
											width=5;
										}
									color=GXml.value(linestyles[0].getElementsByTagName("color")[0]);
									aa=color.substr(0,2);
									bb=color.substr(2,2);
									gg=color.substr(4,2);
									rr=color.substr(6,2);
									color="#"+rr+gg+bb;
									opacity=parseInt(aa,16)/256;
										if(!tempstyle){
											tempstyle={};
										}
											tempstyle.color=color;tempstyle.width=width;tempstyle.opacity=opacity;
										}
									var polystyles=style.getElementsByTagName("PolyStyle");
										if(polystyles.length>0){
											fill=parseInt(GXml.value(polystyles[0].getElementsByTagName("fill")[0]),10);
											outline=parseInt(GXml.value(polystyles[0].getElementsByTagName("outline")[0]),10);
											color=GXml.value(polystyles[0].getElementsByTagName("color")[0]);
											colormode=GXml.value(polystyles[0].getElementsByTagName("colorMode")[0]);
										if(polystyles[0].getElementsByTagName("fill").length==0){
											fill=1;
										}
										if(polystyles[0].getElementsByTagName("outline").length==0){
											outline=1;
										}
										aa=color.substr(0,2);
										bb=color.substr(2,2);
										gg=color.substr(4,2);
										rr=color.substr(6,2);
										color="#"+rr+gg+bb;
										opacity=parseInt(aa,16)/256;
										if(!tempstyle){
											tempstyle={};
										}
										tempstyle.fill=fill;
										tempstyle.outline=outline;
										if(colormode!="random"){
											tempstyle.fillcolor=color;
										}
										else{
											tempstyle.colortint=color;
										}
										tempstyle.fillOpacity=opacity;
										if(!fill){tempstyle.fillOpacity=0;
										}
										if(!outline){
											tempstyle.opacity=0;
										}
									}
									if(sid){
										this.styles["#"+sid]=tempstyle;
									}
										return tempstyle;
								};
							
							GeoXml.prototype.processKML=function(node,marks,title,sbid,depth,paren){
								var that=this;
								var thismap=this.map;
								var icon;
								var grouptitle;
								var keepopen=this.forcefoldersopen;
									if(node.nodeName=="kml"){
										icon=this.docicon;
									}
									if(node.nodeName=="Document"){
										icon=this.kmlicon;
									}
									if(node.nodeName=="Folder"){
										icon=this.foldericon;
										grouptitle=title;
									}
								var pm=[];
								var sf=[];
								var desc="";
								var snip="";
								var i;
								var visible=false;
								if(!this.hideall){
									visible=true;
								}
								var boundsmodified=false;
								var networklink=false;
								var url;
								var ground=null;
								var opacity=1.0;
								var wmsbounds;
								var makewms=false;
								var wmslist=[];
								var mytitle;
								var color;
								var ol;
								var n,ne,sw,se;
								var html;
								var kml_id=node.getAttribute("id");
									for(var ln=0;ln<node.childNodes.length;ln++){
										var nextn=node.childNodes.item(ln);
										var nn=nextn.nodeName;
										var nv=nextn.nodeValue;
											switch(nn){
												case "name":case "title":title=GXml.value(nextn);
												if(title.length+depth>this.maxtitlewidth){
													this.maxtitlewidth=title.length+depth;
												}
												break;
												
												case "Folder":case "Document":sf.push(nextn);
												break;
												
												case "GroundOverlay":url=GXml.value(nextn.getElementsByTagName("href")[0]);
												var north=parseFloat(GXml.value(nextn.getElementsByTagName("north")[0]));
												var south=parseFloat(GXml.value(nextn.getElementsByTagName("south")[0]));
												var east=parseFloat(GXml.value(nextn.getElementsByTagName("east")[0]));
												var west=parseFloat(GXml.value(nextn.getElementsByTagName("west")[0]));
												var attr=GXml.value(nextn.getElementsByTagName("attribution")[0]);
												sw=new GLatLng(south,west);
												ne=new GLatLng(north,east);
												this.bounds.extend(sw);
												this.bounds.extend(ne);
												color=GXml.value(nextn.getElementsByTagName("color")[0]);
												opacity=parseInt(color.substring(1,3),16)/256;mytitle=GXml.value(nextn.getElementsByTagName("name")[0]);var arcims=/arcimsproxy/i;
												if(url.match(arcims)){
													url+="&bbox="+west+","+south+","+east+","+north+"&response=img";
													wmsbounds=new GLatLngBounds(sw,ne);
													makewms=true;
													ol=this.makeWMSTileLayer(url,visible,mytitle,opacity,attr,title,wmsbounds);
												if(ol){
													ol.bounds=wmsbounds;ol.title=mytitle;ol.opacity=opacity;ol.visible=visible;ol.url=url;
												if(!this.quiet){
													this.mb.showMess("Adding Tiled ArcIms Overlay "+title,1000);
												}
												wmslist.push(ol);
												}
											}
											else{
												var rs=/request=getmap/i;
													if(url.match(rs)){
														url+="&bbox="+west+","+south+","+east+","+north;
														wmsbounds=new GLatLngBounds(sw,ne);
														makewms=true;
														ol=this.makeWMSTileLayer(url,visible,mytitle,opacity,attr,title,wmsbounds);
													if(ol){
														ol.bounds=wmsbounds;ol.title=mytitle;ol.opacity=opacity;ol.visible=visible;ol.url=url;
														if(!this.quiet){
															this.mb.showMess("Adding Tiled WMS Overlay "+title,1000);
														}
														wmslist.push(ol);
													}
												}
												else{
													wmsbounds=new GLatLngBounds(sw,ne);
													ground=new GGroundOverlay(url,wmsbounds);
													ground.bounds=wmsbounds;ground.getBounds=function(){
														return this.bounds;
													};
													boundsmodified=true;
													makewms=false;
												}
											}
											break;
											
											case "NetworkLink":url=GXml.value(nextn.getElementsByTagName("href")[0]);
											networklink=true;break;case "description":case "Description":desc=GeoXml.getDescription(nextn);
											break;
											
											case "open":if(GXml.value(nextn)=="1"){
												keepopen=true;
												}
												if(GXml.value(nextn)=="0"){
													keepopen=this.forcefoldersopen;
												}
												break;
											
											case "visibility":if(GXml.value(nextn)=="0"){
												visible=false;}break;case "snippet":snip=GXml.value(nextn);
												break;
												
												default:for(var k=0;k<marks.length;k++){
													if(nn==marks[k]){pm.push(nextn);
												}
											}
										}
									}
								var folderid;
								var idx=this.overlayman.folders.length;
								var me=paren;
								if(sf.length>1||pm.length||ground||makewms){
									this.overlayman.folders.push([]);
									this.overlayman.subfolders.push([]);
									this.overlayman.folderhtml.push([]);
									this.overlayman.folderhtmlast.push(0);
									this.overlayman.folderBounds.push(new GLatLngBounds());
									this.kml.push(new KMLObj(title,desc,false,idx));
									me=this.kml.length-1;folderid=this.createFolder(idx,title,sbid,icon,desc,snip,true,visible);
								}
								else{
									folderid=sbid;
								}
								if(node.nodeName=="Folder"||node.nodeName=="Document"){
									this.kml[me].open=keepopen;
									this.kml[me].folderid=folderid;
								}
								if(ground||makewms){
									this.kml[this.kml.length-1].visibility=visible;
									this.kml[this.kml.length-1].groundOverlays.push({
										"url":url,"bounds":wmsbounds
									});
								}
								if(networklink){
									var re=/&amp;/g;url=url.replace(re,"&");
									var nl=/\n/g;url=url.replace(nl,"");
									this.progress++;if(!top.standalone){
										if(typeof this.proxy!="undefined"){
											url=this.proxy+escape(url);
										}
									}
									var comm=this.myvar+".loadXMLUrl('"+url+"','"+title+"',null,null,'"+sbid+"');";
									setTimeout(comm,1000);
									return;
								}
								if(makewms&&wmslist.length){
									for(var wo=0;wo<wmslist.length;wo++){
										var ol=wmslist[wo];
										var blob="";
										if(this.basesidebar){
											var n=this.overlayman.markers.length;
											if(!this.nolegend){
												var myurl=ol.url.replace(/height=(\d)+/i,"height=100");
												myurl=myurl.replace(/width=(\d)+/i,"width=100");
												blob='<img src="'+myurl+'" style="width:100px" />';
											}
										}
									parm=this.myvar+"$$$"+ol.title+"$$$tiledoverlay$$$"+n+"$$$"+blob+"$$$"+ol.visible+"$$$"+(this.baseLayers.length-1);
									var html=ol.desc;
									var thismap=this.map;GEvent.addListener(ol,"zoomto",function(){
										thismap.setZoom(thismap.getBoundsZoomLevel(this.getBounds()));
										thismap.panTo(this.getBounds().getCenter());
									});
									this.overlayman.AddMarker(ol,title,idx,parm,true,true);
								}
							}
							if(ground){
								if(this.basesidebar){
									var n=this.overlayman.markers.length;
									var blob='<span style="background-color:black;border:2px solid brown;">&nbsp;&nbsp;&nbsp;&nbsp;</span> ';
									parm=this.myvar+"$$$"+title+"$$$polygon$$$"+n+"$$$"+blob+"$$$"+visible+"$$$null";
									var html=desc;
									var thismap=this.map;GEvent.addListener(ground,"zoomto",function(){
										thismap.setZoom(thismap.getBoundsZoomLevel(ground.getBounds()));
										thismap.panTo(ground.getBounds().getCenter());
									});
									this.overlayman.folderBounds[idx].extend(ground.getBounds().getSouthWest());
									this.overlayman.folderBounds[idx].extend(ground.getBounds().getNorthEast());
									boundsmodified=true;this.overlayman.AddMarker(ground,title,idx,parm,visible);
								}
								this.map.addOverlay(ground);
							}
							for(i=0;i<pm.length;i++){
								this.handlePlacemark(pm[i],idx,depth+1);
								}
								var fc=0;for(i=0;i<sf.length;i++){
									var fid=this.processKML(sf[i],marks,title,folderid,depth+1,me);
									if(typeof fid=="number"&&fid!=idx){
										var sub=this.overlayman.folderBounds[fid];
										if(!sub){
											this.overlayman.folderBounds[fid]=new GLatLngBounds();
										}
										else{
											var sw=this.overlayman.folderBounds[fid].getSouthWest();
											var ne=this.overlayman.folderBounds[fid].getNorthEast();
											this.overlayman.folderBounds[idx].extend(sw);
											this.overlayman.folderBounds[idx].extend(ne);
										}
										this.overlayman.subfolders[idx].push(fid);
										if(fid!=idx){
											this.kml[idx].folders.push(fid);
										}
										fc++;
									}
								}
								if(fc||pm.length||boundsmodified){
									this.bounds.extend(this.overlayman.folderBounds[idx].getSouthWest());
									this.bounds.extend(this.overlayman.folderBounds[idx].getNorthEast());
								}
								if(sf.length==0&&pm.length==0&&!this.opts.basesidebar){
									this.ParseURL();}return idx;
							};
							
							GeoXml.prototype.processGPX=function(node,title,sbid,depth){
								var icon;if(node.nodeName=="gpx"){
									icon=this.gmlicon;
								}
								if(node.nodeName=="rte"||node.nodeName=="trk"||node.nodeName=="trkseg"){
									icon=this.foldericon;
								}
								var pm=[];
								var sf=[];
								var desc="";
								var snip="";
								var i,lon,lat,l;
								var open=this.forcefoldersopen;
								var coords="";
								var visible=true;
								for(var ln=0;ln<node.childNodes.length;ln++){
									var nextn=node.childNodes.item(ln);
									var nn=nextn.nodeName;
										if(nn=="name"||nn=="title"){
											title=GXml.value(nextn);
											if(title.length+depth>this.maxtitlewidth){
												this.maxtitlewidth=title.length+depth;
											}
										}
										if(nn=="rte"){
											sf.push(nextn);
										}
										if(nn=="trk"){
											sf.push(nextn);
										}
										if(nn=="trkseg"){
											sf.push(nextn);
										}
										if(nn=="trkpt"){
											pm.push(nextn);
											l=nextn.getAttribute("lat");
										if(typeof l!="undefined"){
											lat=l;}l=nextn.getAttribute("lon");
											if(typeof l!="undefined"){
												lon=l;coords+=lon+","+lat+" ";
											}
										}
										if(nn=="rtept"){
											pm.push(nextn);
											l=nextn.getAttribute("lat");
											if(typeof l!="undefined"){
												lat=l;}l=nextn.getAttribute("lon");
												if(typeof l!="undefined"){
													lon=l;coords+=lon+","+lat+" ";
												}
											}
										if(nn=="wpt"){
											pm.push(nextn);
										}
										if(nn=="description"||nn=="desc"){
											desc=GXml.value(nextn);
										}
									}
									if(coords.length){
										var nc="<?xml version=\"1.0\"?><Placemark><name>"+title+"</name><description>"+desc+"</description><LineString><coordinates>"+coords+"</coordinates></LineString></Placemark>";
										var pathnode=GXml.parse(nc).documentElement;pm.push(pathnode);
									}
									var folderid;
									var idx=this.overlayman.folders.length;
										if(pm.length||node.nodeName=="gpx"){
											this.overlayman.folders.push([]);
											this.overlayman.subfolders.push([]);
											this.overlayman.folderhtml.push([]);
											this.overlayman.folderhtmlast.push(0);
											this.overlayman.folderBounds.push(new GLatLngBounds());
											this.kml.push(new KMLObj(title,desc,open,idx));
											folderid=this.createFolder(idx,title,sbid,icon,desc,snip,true,visible);
										}
										else{
											folderid=sbid;
										}
										for(i=0;i<pm.length;i++){
											this.handlePlacemark(pm[i],idx,depth+1);
											}
											for(i=0;i<sf.length;i++){
												var fid=this.processGPX(sf[i],title,folderid,depth+1);
												this.overlayman.subfolders[idx].push(fid);
												this.overlayman.folderBounds[idx].extend(this.overlayman.folderBounds[fid].getSouthWest());
												this.overlayman.folderBounds[idx].extend(this.overlayman.folderBounds[fid].getNorthEast());
											}
											if(this.overlayman.folderBounds[idx]){
												this.bounds.extend(this.overlayman.folderBounds[idx].getSouthWest());
												this.bounds.extend(this.overlayman.folderBounds[idx].getNorthEast());
											}
											return idx;
										};
										
									GeoXml.prototype.ParseURL=function(){
										var query=top.location.search.substring(1);
										var pairs=query.split("&");
										var marks=this.overlayman.markers;
											for(var i=0;i<pairs.length;i++){
												var pos=pairs[i].indexOf("=");
												var argname=pairs[i].substring(0,pos).toLowerCase();
												var val=unescape(pairs[i].substring(pos+1));
												var m=0;
												var nae;
													if(val){
														switch(argname){
															case "openbyid":for(m=0;m<marks.length;m++){
																nae=marks[m].id;
																if(nae==val){
																	this.overlayman.markers[m].show();
																	this.overlayman.markers[m].hidden=false;
																	GEvent.trigger(this.overlayman.markers[m],"click");
																	break;
																}
															}
															break;
															
															case "kml":case "url":case "src":case "geoxml":this.urls.push(val);
															this.parse();
															break;
															
															case "openbyname":for(m=0;m<marks.length;m++){
																nae=marks[m].title;
																if(nae==val){
																	this.overlayman.markers[m].show();
																	this.overlayman.markers[m].hidden=false;
																	GEvent.trigger(this.overlayman.markers[m],"click");
																	break;
																}
															}
															break;
														}
													}
												}
											};
									
									GeoXml.prototype.processing=function(xmlDoc,title,latlon,desc,sbid){
										this.overlayman.miStart=new Date();
											if(!desc){
												desc=title;
											}
											var that=this;
												if(!sbid){sbid=0;
											}
											var shadow;
											var idx;
											var root=xmlDoc.documentElement;
												if(!root){
													alert("No document found");
													return 0;
												}
											var placemarks=[];
											var name;
											var pname;
											var styles;
											var basename=root.nodeName;
											var keepopen=that.forcefoldersopen;
											var bases=basename.split(":");
												if(bases.length>1){
													basename=bases[1];
												}
											var bar,sid,i;that.wfs=false;
												if(basename=="FeatureCollection"){
													bar=Lance$(that.basesidebar);
													if(!title){
														title=name;
													}
													if(typeof title=="undefined"){
														title="Un-named GML";
													}
													that.isWFS=true;
													if(title.length>that.maxtitlewidth){
														that.maxtitlewidth=title.length;
														}
													if(bar){
														bar.style.display="";
													}
													idx=that.overlayman.folders.length;that.processGML(root,title,latlon,desc,(that.kml.length-1));
													that.kml[0].folders.push(idx);
												}
												if(basename=="gpx"){
													if(!title){
														title=name;
													}
													if(typeof title=="undefined"){
														title="Un-named GPX";
													}
													that.title=title;
													if(title.length>that.maxtitlewidth){
														that.maxtitlewidth=title.length;
													}
													bar=Lance$(that.basesidebar);
													if(bar){
														bar.style.display="";
													}
													idx=that.overlayman.folders.length;that.processGPX(root,title,that.basesidebar,sbid);
													that.kml[0].folders.push(idx);
													}
													else{
														if(basename=="kml"){
															styles=root.getElementsByTagName("Style");
															for(i=0;i<styles.length;i++){
																sid=styles[i].getAttribute("id");
																if(sid){
																	that.handleStyle(styles[i],sid);
																}
															}
															styles=root.getElementsByTagName("StyleMap");
															for(i=0;i<styles.length;i++){
																sid=styles[i].getAttribute("id");
																if(sid){
																	var found=false;var node=styles[i];
																	for(var j=0;(j<node.childNodes.length&&!found); j++){
																		var pair=node.childNodes[j];
																	for(var k=0;(k<pair.childNodes.length&&!found);k++){
																		var pn=pair.childNodes[k].nodeName;
																		if(pn=="styleUrl"){
																			var pid=GXml.value(pair.childNodes[k]);
																			that.styles["#"+sid]=that.styles[pid];
																			found=true;
																		}
																		if(pn=="Style"){
																			that.handleStyle(pair.childNodes[k],sid);
																			found=true;
																		}
																}
															}
														}
													}
													if(!title){
														title=name;
													}
													if(typeof title=="undefined"){
														title="KML Document";
													}
													that.title=title;
													if(title.length>that.maxtitlewidth){
														that.maxtitlewidth=title.length;
													}
													var marknames=["Placemark"];
													var schema=root.getElementsByTagName("Schema");
														for(var s=0;s<schema.length;s++){
															pname=schema[s].getAttribute("parent");
															if(pname=="Placemark"){
																pname=schema[s].getAttribute("name");
																marknames.push(pname);
															}
														}
														bar=Lance$(that.basesidebar);
														if(bar){bar.style.display="";
													}
														idx=that.overlayman.folders.length;
														var paren=that.kml.length-1;
														var fid=that.processKML(root,marknames,title,that.basesidebar,idx,paren);
														that.kml[paren].folders.push(idx);
													}
													else{
														placemarks=root.getElementsByTagName("item");
														if(placemarks.length<1){
															placemarks=root.getElementsByTagName("atom");
														}
														if(placemarks.length<1){
															placemarks=root.getElementsByTagName("entry");
														}
														if(!title){
															title=name;
														}
														if(typeof title=="undefined"){
															title="News Feed";
														}
														that.title=title;
														if(title.length>that.maxtitlewidth){
															that.maxtitlewidth=title.length;
														}
														var style;
														if(that.opts.baseicon){
															style=that.opts.baseicon;style.href=style.image;
														}
														else{
															style=new GIcon(G_DEFAULT_ICON,that.rssicon);
															style.iconSize=new GSize(32,32);
															style.shadowSize=new GSize(59,32);
															style.dragCrossAnchor=new GPoint(2,8);
															style.iconAnchor=new GPoint(16,32);
															style.href=that.rssicon;
															shadow=that.rssicon.replace(".png",".shadow.png");
															style.shadow=shadow+"_shadow.png";
														}
														style.color="#00FFFF";
														style.width="3";
														style.opacity=0.50;
														if(!desc){
															desc="RSS feed";
														}
														that.kml[0].folders.push(that.overlayman.folders.length);
														if(placemarks.length){bar=Lance$(that.basesidebar);
														if(bar){
															bar.style.display="";
														}
														that.overlayman.folders.push([]);
														that.overlayman.folderhtml.push([]);
														that.overlayman.folderhtmlast.push(0);
														that.overlayman.folderBounds.push(new GLatLngBounds());
														idx=that.overlayman.folders.length-1;
														that.kml.push(new KMLObj(title,desc,keepopen,idx));
														that.kml[that.kml.length-1].open=keepopen;
														if(that.basesidebar){
															var visible=true;
															if(that.hideall){
																visible=false;
															}
															var folderid=that.createFolder(idx,title,that.basesidebar,that.globalicon,desc,null,keepopen,visible);
														}
														for(i=0;i<placemarks.length;i++){
															that.handlePlacemark(placemarks[i],idx,sbid,style);
															}
														}
													}
												}
												that.progress--;
												if(that.progress==0){
													GEvent.trigger(that,"initialized");
													if(!that.opts.sidebarid){
														that.mb.showMess("Finished Parsing",1000);
													}
													if(!that.opts.nozoom&&!that.basesidebar){
														that.map.setZoom(that.map.getBoundsZoomLevel(that.bounds));
														that.map.setCenter(that.bounds.getCenter());
													}
												}
											};
										
								GeoXml.prototype.createFolder=function(idx,title,sbid,icon,desc,snippet,keepopen,visible){
									var sb=Lance$(sbid);
									keepopen=true;
									var folderid=this.myvar+'_folder'+idx;
									var checked="";
									if(visible){
										checked=" checked ";
									}
									this.overlayman.folderhtml[folderid]="";
									var disp="display:block";
									var fw="font-weight:normal";
									if(typeof keepopen=="undefined"||!keepopen){
										disp="display:none";fw="font-weight:bold";
									}
									if(!desc||desc==""){
										desc=title;
									}
									desc=escape(desc);
									var htm='<!--<ul>--><input type="hidden" id="'+this.myvar+''+idx+'FCB" style="vertical-align:middle" ';
									htm+=checked;htm+='onclick="'+this.myvar+'.toggleContents('+idx+',this.checked)">';
								  /*htm+='&nbsp;<span title="'+snippet+'" id="'+this.myvar+'TB'+idx+'" oncontextmenu=\"'+this.myvar+'.saveJSON('+idx+');\" onclick="'+this.myvar+'.toggleFolder('+idx+')" style=\"'+fw+'\">';htm+='<img style=\"vertical-align:text-top;padding:0;margin:0\" height=\"16\" border=\"0\" src="'+icon+'" /></span>&nbsp;'*//*;*/
								  	htm+='<a style="text-decoration:none;" href="#" onclick="'+this.myvar+'.overlayman.zoomToFolder('+idx+');'+this.myvar+'.mb.showMess(\''+desc+'\',3000);return false;"><div style="background-color:#039; padding:5px; color:#FFF; font-weight:bold; text-transform:uppercase; display:none;">canegrate partecipa</div></a><br><div id=\"'+folderid+'\" style="'+disp+'"></div><!--</ul>-->';
									if(sb){sb.innerHTML=sb.innerHTML+htm;
								}
								return folderid;
							};
							
							GeoXml.prototype.processGML=function(root,title,latlon,desc,me){
								var that=this;
								var isWFS=false;
								var placemarks=[];
								var srsName;
								var isLatLon=false;
								var xmin=0;
								var ymin=0;
								var xscale=1;
								var yscale=1;
								var points,pt,pts;
								var coor,coorstr;
								var x,y,k,i;
								var name=title;
								var visible=true;
									if(this.hideall){
										visible=false;
									}
									var keepopen=that.allfoldersopen;
									var pt1,pt2,box;
										for(var ln=0;ln<root.childNodes.length;ln++){
											var kid=root.childNodes.item(ln).nodeName;
											var n=root.childNodes.item(ln);
												if(kid=="gml:boundedBy"||kid=="boundedBy"){
														for(var j=0;j<n.childNodes.length;j++){
															var nn=n.childNodes.item(j).nodeName;
															var llre=/CRS:84|(4326|4269)$/i;
																if(nn=="Box"||nn=="gml:Box"){
																	box=n.childNodes.item(j);
																	srsName=n.childNodes.item(j).getAttribute("srsName");
																		if(srsName.match(llre)){
																			isLatLon=true;
																		}
																		else{
																			alert("SRSname ="+srsName+"; attempting to create transform");
																			for(k=0;k<box.childNodes.length;k++){
																				coor=box.childNodes.item(k);
																				if(coor.nodeName=="gml:coordinates"||coor.nodeName=="coordinates"){
																					coorstr=GXml.value(coor);
																					pts=coorstr.split(" ");
																					pt1=pts[0].split(",");
																					pt2=pts[1].split(",");
																					xscale=(parseFloat(pt2[0])-parseFloat(pt1[0]))/(latlon.xmax-latlon.xmin);yscale=(parseFloat(pt2[1])-parseFloat(pt1[1]))/(latlon.ymax-latlon.ymin);
																					xmin=pt1[0]/xscale-latlon.xmin;ymin=pt1[1]/yscale-latlon.ymin;
																				}
																			}
																		}
																		break;
																	}
																if(nn=="Envelope"||nn=="gml:Envelope"){
																	box=n.childNodes.item(j);srsName=n.childNodes.item(j).getAttribute("srsName");
																	if(srsName.match(llre)){
																		isLatLon=true;
																	}
																else{
																	alert("SRSname ="+srsName+"; attempting to create transform");
																	for(k=0;k<box.childNodes.length;k++){
																		coor=box.childNodes.item(k);
																		if(coor.nodeName=="gml:coordinates"||coor.nodeName=="coordinates"){
																			pts=coor.split(" ");
																			var b={
																				"xmin":100000000,"ymin":100000000,"xmax":-100000000,"ymax":-100000000
																			};
																		for(var m=0;m<pts.length-1;m++){
																			pt=pts[m].split(",");
																			x=parseFloat(pt[0]);
																			y=parseFloat(pt[1]);
																			if(x<b.xmin){
																				b.xmin=x;
																			}
																			if(y<b.ymin){
																				b.ymin=y;
																			}
																			if(x>b.xmax){
																				b.xmax=x;
																			}
																			if(y>b.ymax){
																				b.ymax=y;
																			}
																		}
																		xscale=(b.xmax-b.xmin)/(latlon.xmax-latlon.xmin);yscale=(b.ymax-b.ymin)/(latlon.ymax-latlon.ymin);
																		xmin=b.xmin/xscale-latlon.xmin;ymin=b.ymin/yscale-latlon.ymin;
																	}
																}
															}
														}
														break;
														}
													}
													if(kid=="gml:featureMember"||kid=="featureMember"){
														placemarks.push(n);
													}
												}
												var folderid;
													if(!title){
														title=name;
													}
													this.title=title;
													if(placemarks.length<1){
														alert("No features found in "+title);
														this.mb.showMess("No features found in "+title,3000);
														}
														else{
															this.mb.showMess("Adding "+placemarks.length+" features found in "+title);
															this.overlayman.folders.push([]);
															this.overlayman.folderhtml.push([]);
															this.overlayman.folderhtmlast.push(0);
															this.overlayman.folderBounds.push(new GLatLngBounds());
															var idx=this.overlayman.folders.length-1;
															if(this.basesidebar){
																folderid=this.createFolder(idx,title,this.basesidebar,this.gmlicon,desc,null,keepopen,visible);
															}
															this.kml.push(new KMLObj(title,desc,true,idx));
															this.kml[me].open=that.opts.allfoldersopen;
															this.kml[me].folderid=folderid;
																if(isLatLon){
																	for(i=0;i<placemarks.length;i++){
																		this.handlePlacemark(placemarks[i],idx,0);
																	}
																}
																else{
																	var trans={
																		"xs":xscale,"ys":yscale,"x":xmin,"y":ymin
																	};
																	for(i=0;i<placemarks.length;i++){
																		this.handleGeomark(placemarks[i],idx,trans,0);
																	}
																}
															}
														};
														
														PolylineEncoder=function(numLevels,zoomFactor,verySmall,forceEndpoints){
															var i;
															if(!numLevels){
																numLevels=18;
															}
															if(!zoomFactor){
																zoomFactor=2;
															}
															if(!verySmall){
																verySmall=0.0000001;
															}
															if(!forceEndpoints){
																forceEndpoints=true;
															}
															this.numLevels=numLevels;
															this.zoomFactor=zoomFactor;
															this.verySmall=verySmall;
															this.veryTiny=verySmall*verySmall;
															this.forceEndpoints=forceEndpoints;
															this.zoomLevelBreaks=[];
															for(i=0;i<numLevels;i++){
																this.zoomLevelBreaks[i]=verySmall*Math.pow(zoomFactor,numLevels-i-1);
																this.zoomLevelBreaks[i]*=this.zoomLevelBreaks[i];
															}
														};
														
													PolylineEncoder.prototype.dpEncode=function(points){
														var absMaxDist=0;
														var stack=[];
														var dists=[];
														var maxDist,maxLoc,temp,first,last,current;
														var i,encodedPoints,encodedLevels;
														var segmentLength;stack.push([0,points.length-1]);
															while(stack.length>0){
																current=stack.pop();
																maxDist=0;
																segmentLength=Math.pow(points[current[1]].lat()-points[current[0]].lat(),2)+Math.pow(points[current[1]].lng()-points[current[0]].lng(),2);
																for(i=current[0]+1;
																	i<current[1];i++){
																	temp=this.distance(points[i],points[current[0]],points[current[1]],segmentLength);
																	if(temp>maxDist){maxDist=temp;maxLoc=i;
																	if(maxDist>absMaxDist){
																		absMaxDist=maxDist;
																	}
																}
															}
															if(maxDist>this.veryTiny){
																dists[maxLoc]=maxDist;
																stack.push([current[0],maxLoc]);
																stack.push([maxLoc,current[1]]);
															}
														}
														encodedPoints=this.createEncodings(points,dists);
														encodedLevels=this.encodeLevels(points,dists,absMaxDist);
														return{
															encodedPoints:encodedPoints,encodedLevels:encodedLevels,encodedPointsLiteral:encodedPoints.replace(/\\/g,"\\\\")};
														};
												
												PolylineEncoder.prototype.dpEncodeToJSON=function(points,color,weight,opacity){
													var result;result=this.dpEncode(points);
													return{
														color:color,weight:weight,opacity:opacity,points:result.encodedPoints,levels:result.encodedLevels,numLevels:this.numLevels,zoomFactor:this.zoomFactor,literals:result.encodePointsLiteral};
													};
													
												PolylineEncoder.prototype.dpEncodeToGPolyline=function(points,color,weight,opacity){
													return new GPolyline.fromEncoded(this.dpEncodeToJSON(points,color,weight,opacity));
												};
												
												PolylineEncoder.prototype.dpEncodeToGPolygon=function(pointsArray,boundaryColor,boundaryWeight,boundaryOpacity,fillColor,fillOpacity,fill,outline){
													var i,boundaries;boundaries=[];
														for(i=0;i<pointsArray.length;i++){
															boundaries.push(this.dpEncodeToJSON(pointsArray[i],boundaryColor,boundaryWeight,boundaryOpacity));
														}
													return new GPolygon.fromEncoded({
														polylines:boundaries,color:fillColor,opacity:fillOpacity,fill:fill,outline:outline});
													};
												
												PolylineEncoder.prototype.distance=function(p0,p1,p2,segLength){
													var u,out;
													var dlat2=p2.lat()-p1.lat();
													var dlong1=p2.lng()-p1.lng();
														if(dlat2==0&&dlong1==0){
															out=Math.pow(p2.lat()-p0.lat(),2)+Math.pow(p2.lng()-p0.lng(),2);
														}
														else{
															var dlat0=p0.lat()-p1.lat();
															var dlong0=p0.lng()-p1.lng();u=((dlat0)*(dlat2)+(dlong0)*(dlong1))/segLength;
															if(u<=0){out=Math.pow(dlat0,2)+Math.pow(dlong0,2);
															}
															if(u>=1){
																out=Math.pow(p0.lat()-p2.lat(),2)+Math.pow(p0.lng()-p2.lng(),2);
															}
															if(0<u&&u<1){
																out=Math.pow(dlat0-u*(dlat2),2)+Math.pow(dlong0-u*(dlong1),2);
															}
														}
														return out;
													};
													
												PolylineEncoder.prototype.createEncodings=function(points,dists){
													var i;
													var j;
													var floor=Math.floor;
													var len=points.length-2;
													var late5;
													var lnge5;
													var dlat=floor(points[0].lat()*1e5);
													var dlng=floor(points[0].lng()*1e5);
													var plat=dlat;
													var plng=dlng;
													var encoded_points=this.encodeSignedNumber(dlat)+this.encodeSignedNumber(dlng);
														for(j=len;j>0;j--){
															i=len-j+1;
															if(dists[i]!=undefined){
																late5=floor(points[i].lat()*1e5);
																lnge5=floor(points[i].lng()*1e5);
																dlat=late5-plat;dlng=lnge5-plng;plat=late5;plng=lnge5;encoded_points+=this.encodeSignedNumber(dlat)+this.encodeSignedNumber(dlng);
															}
														}
														dlat=floor(points[len+1].lat()*1e5)-plat;dlng=floor(points[len+1].lng()*1e5)-plng;encoded_points+=this.encodeSignedNumber(dlat)+this.encodeSignedNumber(dlng);
													return encoded_points;
												};
												
												PolylineEncoder.prototype.computeLevel=function(dd){
													var lev;if(dd>this.veryTiny){
														lev=0;while(dd<this.zoomLevelBreaks[lev]){
															lev++;
														}
														return lev;}
													};
												
												PolylineEncoder.prototype.encodeLevels=function(points,dists,absMaxDist){
													var i;
													var encoded_levels="";
													if(this.forceEndpoints){
														encoded_levels+=this.encodeNumber(this.numLevels-1);
														}
														else{
															encoded_levels+=this.encodeNumber(this.numLevels-this.computeLevel(absMaxDist)-1);
														}
														for(i=1;i<points.length-1;i++){
															if(dists[i]!=undefined){
																encoded_levels+=this.encodeNumber(this.numLevels-this.computeLevel(dists[i])-1);
															}
														}
														if(this.forceEndpoints){
															encoded_levels+=this.encodeNumber(this.numLevels-1);
														}
														else{
															encoded_levels+=this.encodeNumber(this.numLevels-this.computeLevel(absMaxDist)-1);
														}
														return encoded_levels;
													};
													
												PolylineEncoder.prototype.encodeNumber=function(num){
													var encodeString="";
													var nextValue,finalValue;
													while(num>=0x20){
														nextValue=(0x20|(num&0x1f))+63;
														encodeString+=(String.fromCharCode(nextValue));
														num>>=5;
													}
													finalValue=num+63;
													encodeString+=(String.fromCharCode(finalValue));
													return encodeString;
												};
												
												PolylineEncoder.prototype.encodeSignedNumber=function(num){
													var sgn_num=num<<1;if(num<0){
														sgn_num=~(sgn_num);
													}
													return(this.encodeNumber(sgn_num));
												};
												
												PolylineEncoder.latLng=function(y,x){
													this.y=y;this.x=x;
												};
												
												PolylineEncoder.latLng.prototype.lat=function(){
													return this.y;
												};
												
												PolylineEncoder.latLng.prototype.lng=function(){
													return this.x;
												};
												
												PolylineEncoder.pointsToLatLngs=function(points){
													var i,latLngs;latLngs=[];
													for(i=0;i<points.length;i++){
														latLngs.push(new PolylineEncoder.latLng(points[i][0],points[i][1]));
														}
														return latLngs;
													};
												
												PolylineEncoder.pointsToGLatLngs=function(points){
													var i,gLatLngs;gLatLngs=[];
													for(i=0;i<points.length;i++){
														gLatLngs.push(new GLatLng(points[i][0],points[i][1]));
														}
														return gLatLngs;
													};
													
												GPolyline.prototype.getPoint=function(){
													return(this.getVertex(Math.round(this.getVertexCount()/2)));
												};
												
												GPolyline.prototype.computeBounds=function(){
													var bounds=new GLatLngBounds();
													for(var i=0;i<this.getVertexCount();i++){
														var v=this.getVertex(i);if(v){
															bounds.extend(v);
														}
													}
													this.bounds=bounds;
													return bounds;
												};
												
												GTileLayerOverlay.prototype.getBounds=function(){
													return this.bounds;
												};
												
												GPolyline.prototype.getBounds=function(){
													if(typeof this.bounds!="undefined"){
														return this.bounds;
													}
													else{
														return(this.computeBounds());
													}
												};
												
												GTileLayer.prototype.getBounds=function(){
													return this.bounds;
												};
												
												GPolygon.prototype.getPoint=function(){
													return(this.getBounds().getCenter());
												};
												
												Clusterer=function(map,paren){
													this.myvar=paren.myvar;
													this.paren=paren;
													this.map=map;
													this.markers=[];
													this.byid=[];
													this.byname=[];
													this.clusters=[];
													this.timeout=null;
													this.folders=[];
													this.folderBounds=[];
													this.folderhtml=[];
													this.folderhtmlast=[];
													this.subfolders=[];
													this.currentZoomLevel=map.getZoom();
													this.isParsed=false;
													this.maxVisibleMarkers=Clusterer.defaultMaxVisibleMarkers;
													this.gridSize=Clusterer.defaultGridSize;
													this.minMarkersPerCluster=Clusterer.defaultMinMarkersPerCluster;
													this.maxLinesPerInfoBox=Clusterer.defaultMaxLinesPerInfoBox;
													this.icon=Clusterer.defaultIcon;GEvent.addListener(map,'zoomend',Clusterer.MakeCaller(Clusterer.Display,this));
													GEvent.addListener(map,'moveend',Clusterer.MakeCaller(Clusterer.Display,this));
													GEvent.addListener(map,'infowindowclose',Clusterer.MakeCaller(Clusterer.PopDown,this));
												};
												
												Clusterer.defaultMaxVisibleMarkers=650;
												Clusterer.defaultGridSize=15;
												Clusterer.defaultMinMarkersPerCluster=5;
												Clusterer.defaultMaxLinesPerInfoBox=15;
												Clusterer.defaultIcon=new GIcon();
												Clusterer.defaultIcon.image='http://www.acme.com/resources/images/markers/blue_large.PNG';
												Clusterer.defaultIcon.shadow='http://www.acme.com/resources/images/markers/shadow_large.PNG';
												Clusterer.defaultIcon.iconSize=new GSize(30,51);Clusterer.defaultIcon.shadowSize=new GSize(56,51);
												Clusterer.defaultIcon.iconAnchor=new GPoint(13,34);
												Clusterer.defaultIcon.infoWindowAnchor=new GPoint(13,3);
												Clusterer.defaultIcon.infoShadowAnchor=new GPoint(27,37);
												Clusterer.prototype.SetIcon=function(icon){
													this.icon=icon;
												};
												
												Clusterer.prototype.SetMaxVisibleMarkers=function(n){
													this.maxVisibleMarkers=n;
												};
												
												Clusterer.prototype.SetMinMarkersPerCluster=function(n){
													this.minMarkersPerCluster=n;
												};
												
												Clusterer.prototype.SetMaxLinesPerInfoBox=function(n){
													this.maxLinesPerInfoBox=n;
												};
												
												Clusterer.prototype.AddMarker=function(marker,title,idx,sidebar,visible,forcevisible){
													if(marker.setMap!=null){
														marker.setMap(this.map)
													}
													marker.hidden=false;
														if(visible!=true){
															marker.hidden=true;
														}
														if(this.paren.hideall){
															marker.hidden=true;
														}
														marker.title=title;
														this.folders[idx].push(this.markers.length);
														var bounds=this.map.getBounds();
														var vis=false;
														if(typeof marker.getBounds=="undefined"){
															if(bounds.contains(marker.getPoint())){
																vis=true;
															}
														}
														else{
															var b=marker.getBounds();
															if(!b.isEmpty()){
																if(bounds.intersects(b)){
																	vis=true;}
																}
															}
															if(forcevisible){
																vis=true;
															}
															this.markers.push(marker);
															if(vis){
																marker.onMap=true;
																this.map.addOverlay(marker);
																if(marker.hidden){
																	marker.hide();
																	if(!!marker.label){
																		marker.label.hide();
																	}
																}
															}
															this.DisplayLater();
															if(sidebar){
																this.folderhtml[idx].push(sidebar);
															}
														};
														
													Clusterer.prototype.zoomToFolder=function(idx){
														var bounds=this.folderBounds[idx];
														this.map.setZoom(this.map.getBoundsZoomLevel(bounds));
														this.map.panTo(bounds.getCenter());
													};
													
													Clusterer.prototype.RemoveMarker=function(marker){
														for(var i=0;i<this.markers.length;++i){
															if(this.markers[i]==marker){
																if(marker.onMap){
																	this.map.removeOverlay(marker);
																}
																if(!!marker.label){
																	this.map.removeOverlay(marker.label);
																}
																for(var j=0;j<this.clusters.length;++j){
																	var cluster=this.clusters[j];
																	if(cluster!=null){
																		for(var k=0;k<cluster.markers.length;++k){
																			if(cluster.markers[k]==marker){
																				cluster.markers[k]=null;--cluster.markerCount;
																			break;
																			}
																		}
																	if(cluster.markerCount==0){
																		this.ClearCluster(cluster);
																		this.clusters[j]=null;
																		}
																		else{
																			if(cluster==this.poppedUpCluster){
																				Clusterer.RePop(this);
																			}
																		}
																	}
																}
																this.markers[i]=null;break;
															}
														}
														this.DisplayLater();
													};
													
													Clusterer.prototype.DisplayLater=function(){
														if(this.timeout!=null){
															clearTimeout(this.timeout);
														}
														this.timeout=setTimeout(Clusterer.MakeCaller(Clusterer.Display,this),50);
													};
													
													Clusterer.Display=function(clusterer){
														var i,j,k,marker,cluster,l;clearTimeout(clusterer.timeout);
														var update_side=false;
														var count=0;
														var clon,bits;
														var vis;
														var content;
															if(clusterer.paren.basesidebar){
																for(k=0;k<clusterer.folderhtml.length;k++){
																	var curlen=clusterer.folderhtml[k].length;
																	var con=clusterer.folderhtmlast[k];
																	if(con<curlen){
																		var destid=clusterer.paren.myvar+"_folder"+k;
																		var dest=Lance$(destid);if(dest){
																			if(clusterer.paren.opts.sortbyname){
																				content=dest.innerHTML;clon=clusterer.folderhtml[k].sort();
																				for(l=0;l<curlen;l++){
																					bits=clon[l].split("$$$",7);
																					content+=clusterer.paren.sidebarfn(bits[0],bits[1],bits[2],bits[3],bits[4],bits[5],bits[6]);
																				}
																			}
																			else{
																				content=dest.innerHTML;clon=clusterer.folderhtml[k];
																				for(l=con;l<curlen;l++){
																					bits=clon[l].split("$$$",7);
																					content+=clusterer.paren.sidebarfn(bits[0],bits[1],bits[2],bits[3],bits[4],bits[5],bits[6]);
																				}
																			}
																			clusterer.folderhtmlast[k]=curlen;dest.innerHTML=content;
																			if(clusterer.paren.forcefoldersopen){
																				dest.style.display="block";
																				}
																				update_side=true;
																				count=curlen;
																			}else{
																				}
																			}
																		}
																	}
																	if(update_side&&count>0){
																		if(clusterer.paren.progress==0){
																			clusterer.paren.setFolders();
																			GEvent.trigger(clusterer.paren,"parsed");
																			if(!clusterer.paren.opts.sidebarid){
																				clusterer.paren.mb.showMess("Finished Parsing",1000);
																			}
																			var mifinish=new Date();
																			var sec=((mifinish-clusterer.miStart)/1000+" seconds");
																			clusterer.paren.mb.showMess("Loaded "+count+" GeoXML elements in "+sec,5000);
																			clusterer.paren.ParseURL();
																			if(!clusterer.paren.opts.nozoom){
																				clusterer.paren.map.setZoom(clusterer.paren.map.getBoundsZoomLevel(clusterer.paren.bounds));
																				clusterer.paren.map.setCenter(clusterer.paren.bounds.getCenter());
																			}
																		}
																	}
																	if(update_side&&typeof resizeKML!="undefined"){
																		resizeKML();
																	}
																	var bounds,sw,ne,dx,dy;
																	var newZoomLevel=clusterer.map.getZoom();
																	if(newZoomLevel!=clusterer.currentZoomLevel){
																		for(i=0;i<clusterer.clusters.length;++i){
																			if(clusterer.clusters[i]!=null){
																				clusterer.ClearCluster(clusterer.clusters[i]);
																				clusterer.clusters[i]=null;
																			}
																		}
																	clusterer.clusters.length=0;clusterer.currentZoomLevel=newZoomLevel;
																	}
																	bounds=clusterer.map.getBounds();
																	sw=bounds.getSouthWest();
																	ne=bounds.getNorthEast();
																	dx=ne.lng()-sw.lng();
																	dy=ne.lat()-sw.lat();
																	if(dx<300&&dy<150){
																		dx*=0.05;dy*=0.05;
																		bounds=new GLatLngBounds(new GLatLng(sw.lat()-dy,sw.lng()-dx),new GLatLng(ne.lat()+dy,ne.lng()+dx));
																	}
																	var visibleMarkers=[];
																	var nonvisibleMarkers=[];
																	var viscount=0;
																		for(i=0;i<clusterer.markers.length;++i){
																			marker=clusterer.markers[i];
																			vis=false;
																			if(marker!=null){
																				var mid=clusterer.paren.myvar+"sb"+i;
																				if(typeof marker.getBounds=="undefined"){
																					if(bounds.contains(marker.getPoint())){
																						vis=true;if(Lance$(mid)){
																							Lance$(mid).className="inView";
																						}
																						viscount++;
																						}
																						else{
																							if(Lance$(mid)){
																								Lance$(mid).className="outView";
																							}
																						}
																					}
																					else{
																						var b=marker.getBounds();
																						if(Lance$(mid)){
																							if(bounds.intersects(b)){
																								Lance$(mid).className="inView";
																							}
																							else{
																								Lance$(mid).className="outView";
																							}
																						}
																						vis=true;
																					}
																					if(vis){
																						visibleMarkers.push(i);
																						}
																						else{
																							nonvisibleMarkers.push(i);
																						}
																					}
																				}
																				for(i=0;i<nonvisibleMarkers.length;++i){
																					marker=clusterer.markers[nonvisibleMarkers[i]];
																					if(marker.onMap){
																						if(!!marker.label){
																							marker.label.hide();
																						}
																						clusterer.map.removeOverlay(marker);
																						marker.onMap=false;
																					}
																				}
																				for(i=0;i<clusterer.clusters.length;++i){
																					cluster=clusterer.clusters[i];
																					if(cluster!=null&&cluster.marker){
																						vis=false;
																						if(typeof cluster.marker.getBounds=="undefined"){
																							if(bounds.contains(cluster.marker.getPoint())){
																								vis=true;
																							}
																						}
																						else{
																							vis=true;
																						}
																						if(!vis&&cluster.onMap){
																							clusterer.map.removeOverlay(cluster.marker);
																							cluster.onMap=false;
																						}
																					}
																				}
																				if(viscount>clusterer.maxVisibleMarkers){
																					if(!update_side){
																						clusterer.paren.mb.showMess("Clustering on "+viscount+"  GeoXML elements");
																					}
																					var latRange=bounds.getNorthEast().lat()-bounds.getSouthWest().lat();
																					var latInc=latRange / clusterer.gridSize;var lngInc=latInc / Math.cos( ( bounds.getNorthEast().lat() + bounds.getSouthWest().lat() ) / 2.0 * Math.PI / 180.0);
																					for(var lat=bounds.getSouthWest().lat();
																						lat<=bounds.getNorthEast().lat();
																						lat+=latInc){
																							for(var lng=bounds.getSouthWest().lng();
																							lng<=bounds.getNorthEast().lng();
																							lng+=lngInc){
																								cluster={};
																								cluster.clusterer=clusterer;
																								cluster.bounds=new GLatLngBounds(new GLatLng(lat,lng),new GLatLng(lat+latInc,lng+lngInc));
																								cluster.markers=[];
																								cluster.markerCount=0;
																								cluster.onMap=false;
																								cluster.marker=null;
																								clusterer.clusters.push(cluster);
																							}
																						}
																						for(i=0;i<visibleMarkers.length;++i){
																							marker=clusterer.markers[visibleMarkers[i]];
																							if(marker!=null&&!marker.inCluster){
																								for(j=0;j<clusterer.clusters.length;++j){
																									cluster=clusterer.clusters[j];
																									if(cluster!=null){
																										vis=false;
																										if(typeof marker.getBounds=="undefined"){
																											if(cluster.bounds.contains(marker.getPoint())){
																												vis=true;
																											}
																										}
																										if(vis){
																											marker.inCluster=true;
																											clusterer.clusters[j].markers.push(marker);++clusterer.clusters[j].markerCount;
																										}
																									}
																								}
																							}
																						}
																						for(i=0;i<clusterer.clusters.length;++i){
																							if(clusterer.clusters[i]!=null&&clusterer.clusters[i].markerCount<clusterer.minMarkersPerCluster){
																								clusterer.ClearCluster(clusterer.clusters[i]);
																								clusterer.clusters[i]=null;
																							}
																						}
																						for(i=clusterer.clusters.length-1;i>=0;--i){
																							if(clusterer.clusters[i]!=null){
																							break;
																						}
																						else{
																							--clusterer.clusters.length;}
																						}
																						for(i=0;i<clusterer.clusters.length;++i){
																							cluster=clusterer.clusters[i];
																							if(cluster!=null){
																								for(j=0;j<cluster.markers.length;++j){
																									marker=cluster.markers[j];
																									if(marker!=null&&marker.onMap){
																										clusterer.map.removeOverlay(marker);
																										marker.onMap=false;
																										if(!!marker.label){
																											marker.label.hide();
																											}
																										}
																									}
																								}
																							}
																						for(i=0;i<clusterer.clusters.length;++i){
																							cluster=clusterer.clusters[i];
																							if(cluster!=null&&cluster.marker==null){
																								var xTotal=0.0;
																								var yTotal=0.0;
																								for(j=0;j<cluster.markers.length;++j){
																									marker=cluster.markers[j];
																									if(marker!=null){
																										xTotal+=(+marker.getPoint().lng());
																										yTotal+=(+marker.getPoint().lat());
																									}
																								}
																								var location=new GLatLng(yTotal / cluster.markerCount, xTotal / cluster.markerCount);
																								marker=new GMarker(location,{
																									icon:clusterer.icon});
																								cluster.marker=marker;
																								GEvent.addListener(marker,'click',Clusterer.MakeCaller(Clusterer.PopUp,cluster));
																							}
																						}
																					}
																					if(!update_side&&viscount&&(clusterer.paren.quiet!=true)){
																						clusterer.paren.mb.showMess("visualizzati "+viscount+"  elementi",500);
																					}
																					for(i=0;i<visibleMarkers.length;++i){
																						marker=clusterer.markers[visibleMarkers[i]];
																						if(marker!=null&&!marker.onMap&&!marker.inCluster){
																							if(marker.addedToMap!=null){
																								marker.addedToMap();
																							}
																							if(marker.hidden){
																								if(marker.hide){
																									clusterer.map.addOverlay(marker);
																									marker.hide();if(!!marker.label){
																										marker.label.hide();
																									}
																								}
																							}
																							else{
																								clusterer.map.addOverlay(marker);
																								if(!!marker.label){
																									marker.label.show();
																								}
																							}
																							marker.onMap=true;
																						}
																					}
																					for(i=0;i<clusterer.clusters.length;++i){
																						cluster=clusterer.clusters[i];
																						if(cluster!=null&&cluster.marker){
																							vis=false;
																							if(typeof marker.getPoint!="undefined"){
																								if(bounds.contains(cluster.marker.getPoint())){
																									vis=true;
																								}
																							}
																							else{
																								if(bounds.intersects(cluster.marker.getBounds())){
																									vis=true;
																								}
																							}
																							if(!cluster.onMap&&vis){
																								clusterer.map.addOverlay(cluster.marker);
																								cluster.onMap=true;
																							}
																						}
																					}
																				
																				Clusterer.RePop(clusterer);
																			};
																			
																			Clusterer.PopUp=function(cluster){
																				var clusterer=cluster.clusterer;
																				var html='<table width="300">';
																				var n=0;
																				for(var i=0;i<cluster.markers.length;++i){
																					var marker=cluster.markers[i];
																					if(marker!=null){
																						++n;html+='<tr><td>';
																						if(typeof marker.getIcon!="undefined"&&marker.getIcon().smallImage!=null){
																							html+='<img src="'+marker.getIcon().smallImage+'">';
																						}
																						else{
																							html+='<img src="'+marker.getIcon().image+'" width="'+(marker.getIcon().iconSize.width / 2 ) + '" height="' + ( marker.getIcon().iconSize.height / 2)+'">';
																						}
																						html+='</td><td>'+marker.title+'</td></tr>';
																						if(n==clusterer.maxLinesPerInfoBox-1&&cluster.markerCount>clusterer.maxLinesPerInfoBox){
																							html+='<tr><td colspan="2">...and '+(cluster.markerCount-n)+' more</td></tr>';
																						break;
																					}
																				}
																			}
																			html+='</table>';
																			clusterer.map.closeInfoWindow();
																			cluster.marker.openInfoWindowHtml(html);
																			clusterer.poppedUpCluster=cluster;
																		};
																		
																		Clusterer.RePop=function(clusterer){
																			if(clusterer.poppedUpCluster!=null){
																				Clusterer.PopUp(clusterer.poppedUpCluster);
																			}
																		};
																		
																		Clusterer.PopDown=function(clusterer){
																			clusterer.poppedUpCluster=null;
																		};
																		
																		Clusterer.prototype.ClearCluster=function(cluster){
																			var i,marker;
																			for(i=0;i<cluster.markers.length;++i){
																				if(cluster.markers[i]!=null){
																					cluster.markers[i].inCluster=false;
																					cluster.markers[i]=null;
																				}
																			}
																			cluster.markers.length=0;
																			cluster.markerCount=0;
																			if(cluster==this.poppedUpCluster){
																				this.map.closeInfoWindow();
																			}
																			if(cluster.onMap){
																				this.map.removeOverlay(cluster.marker);
																				cluster.onMap=false;
																			}
																		};
																		
																		Clusterer.MakeCaller=function(func,arg){
																			return function(){
																				func(arg);
																			};
																		};
																		
																		GMarker.prototype.setMap=function(map){
																			this.map=map;
																		};
																		
																		GMarker.prototype.addedToMap=function(){
																			this.map=null;
																		};
																		
																		GMarker.prototype.origOpenInfoWindow=GMarker.prototype.openInfoWindow;
																		GMarker.prototype.openInfoWindow=function(node,opts){
																			if(this.map!=null){
																				return this.map.openInfoWindow(this.getPoint(),node,opts);
																			}
																			else{
																				return this.origOpenInfoWindow(node,opts);
																				}
																			};
																		
																		GMarker.prototype.origOpenInfoWindowHtml=GMarker.prototype.openInfoWindowHtml;
																		GMarker.prototype.openInfoWindowHtml=function(html,opts){
																			if(this.map!=null){
																				return this.map.openInfoWindowHtml(this.getPoint(),html,opts);
																			}
																			else{
																				return this.origOpenInfoWindowHtml(html,opts);
																			}
																		};
																		
																		GMarker.prototype.origOpenInfoWindowTabs=GMarker.prototype.openInfoWindowTabs;
																		GMarker.prototype.openInfoWindowTabs=function(tabNodes,opts){
																			if(this.map!=null){
																				return this.map.openInfoWindowTabs(this.getPoint(),tabNodes,opts);
																		}
																		else{
																			return this.origOpenInfoWindowTabs(tabNodes,opts);
																		}
																	};
																	
																	GMarker.prototype.origOpenInfoWindowTabsHtml=GMarker.prototype.openInfoWindowTabsHtml;
																	GMarker.prototype.openInfoWindowTabsHtml=function(tabHtmls,opts){
																		if(this.map!=null){
																			return this.map.openInfoWindowTabsHtml(this.getPoint(),tabHtmls,opts);
																		}
																		else{
																			return this.origOpenInfoWindowTabsHtml(tabHtmls,opts);
																		}
																	};
																	
																	GMarker.prototype.origShowMapBlowup=GMarker.prototype.showMapBlowup;
																	GMarker.prototype.showMapBlowup=function(opts){
																		if(this.map!=null){
																			return this.map.showMapBlowup(this.getPoint(),opts);
																			}
																			else{
																				return this.origShowMapBlowup(opts);
																			}
																		};
																	MessageBox=function(map,paren,myvar,mb){
																		this.map=map;
																		this.paren=paren;
																		this.myvar=paren.myvar+"."+myvar;
																		this.eraseMess=null;
																		this.centerMe=null;
																		this.mb=null;
																		if(mb){
																			this.mb=mb;
																		}
																		this.id=this.myvar+"_message";
																	};
																	
																	MessageBox.prototype.hideMess=function(){
																		this.mb.style.visiblity="hidden";
																		this.mb.style.left="-1200px";
																		this.mb.style.top="-1200px";
																	};
																	
																	MessageBox.prototype.centerThis=function(){
																		var c=this.map.getObjCenter();
																		if(!this.mb){
																			this.mb=Lance$(this.id);
																		}
																		if(this.centerMe){
																			clearTimeout(this.centerMe);
																		}
																		if(this.mb){
																			var nw=this.mb.clientWidth;
																			if(nw>this.map.getSize().width){
																				nw=parseInt(2*this.map.getSize().width/3,10);this.mb.style.width=nw+"px";this.centerMe=setTimeout(this.myvar+".centerThis()",5);return;}this.mb.style.left=(c.x-(nw/2))+"px";
																				this.mb.style.top=(c.y-20-(this.mb.clientHeight/2))+"px";
																			}
																			else{
																				this.centerMe=setTimeout(this.myvar+".centerThis()",10);
																			}
																		};
																		
																	MessageBox.prototype.showMess=function(val,temp){
																		val=unescape(val);
																		if(this.eraseMess){
																			clearTimeout(this.eraseMess);
																		}
																		if(!this.mb){
																			this.mb=Lance$(this.id);
																		}
																		if(this.mb){
																			this.mb.innerHTML="<span>"+val+"</span>";
																			if(temp){
																				this.eraseMess=setTimeout(this.myvar+".hideMess();",temp);
																			}
																			this.mb.style.left="-1200px";
																			this.mb.style.top="-1200px";
																			this.mb.style.width="";
																			this.mb.style.height="";
																			this.centerMe=setTimeout(this.myvar+".centerThis()",5);
																			this.mb.style.visibility="visible";
																		}
																		else{
																			var d=document.createElement("div");
																			d.innerHTML=val;
																			d.id=this.myvar+"_message";
																			d.style.position="absolute";
																			d.style.backgroundColor=this.style.backgroundColor||"silver";
																			d.style.opacity=this.style.opacity||0.80;
																			d.style.filter="alpha(opacity="+parseInt(d.style.opacity*100,10)+")";
																			d.style.color=this.style.color||"black";
																			d.style.padding=this.style.padding||"6px";
																			d.style.borderWidth=this.style.borderWidth||"3px";
																			d.style.borderColor=this.style.borderColor||"";
																			d.style.backgroundImage=this.style.backgroundImage||"";
																			d.style.borderStyle=this.style.borderStyle||"outset";
																			d.style.visibility="visible";d.style.left="-1200px";
																			d.style.top="-1200px";
																			this.centerMe=setTimeout(this.myvar+".centerThis()",5);
																			d.style.zIndex=1000;document.body.appendChild(d);
																		}
																	};
																	
																	GMap2.prototype.getObjCenter=function(){
																		var obj=this.getContainer();
																		var container=obj;
																		var y=0;
																		var x=0;
																		if(obj.offsetParent){
																			x=obj.offsetLeft;
																			y=obj.offsetTop;
																			obj=obj.offsetParent;
																			while(obj){
																				x+=obj.offsetLeft;
																				y+=obj.offsetTop;
																				obj=obj.offsetParent;
																			}
																			return new GPoint(x+parseInt(this.getSize().width,10)/2,y+parseInt(this.getSize().height,10)/2);
																		}
																	};
																	
																	GeoXml.prototype.loadJSONUrl=function(url,title,latlon,desc,idx){
																		var that=this;GDownloadUrl(url,function(doc){
																			that.parseJSON(doc,title,latlon,desc,idx);
																		});
																	};
																	
																	GeoXml.prototype.loadXMLUrl=function(url,title,latlon,desc,idx){
																		var that=this;that.DownloadURL(url,function(doc){
																			that.processing(GXml.parse(doc),title,latlon,desc,idx)},title);
																		};
																	
																	GeoXml.prototype.upgradeLayer=function(n){
																		var mt=this.map.getMapTypes();
																		var found=false;
																		for(var i=0;i<mt.length;i++){
																			if(mt[i]==this.baseLayers[n]){
																				found=true;
																				this.map.removeMapType(this.baseLayers[n]);
																			}
																		}
																		if(!found){
																			this.map.addMapType(this.baseLayers[n]);
																		}
																	};
																	
																	GeoXml.prototype.makeWMSTileLayer=function(getmapstring,on,title,opac,attr,grouptitle,wmsbounds){
																		var that=this;gmapstring=new String(getmapstring);
																		getmapstring=gmapstring.replace("&amp;","&");
																		var args=getmapstring.split("?");
																		var baseurl=args[0]+"?";
																		baseurl=baseurl.replace(/&request=getmap/i,"");
																		baseurl=baseurl.replace(/&service=wms/i,"");
																		var version="1.1.0";
																		var format="image/png";
																		var styles="";
																		var layers="";
																		var queryable=false;
																		var opacity=1.0;
																		if(typeof opac!="undefined"){
																			opacity=opac;
																		}
																		var bbox="-180,-90,180,90";
																		var pairs=args[1].split("&");
																		var sld="";
																		var servicename="";
																		var atlasname="";
																		var gmcrs="";
																		var epsg;
																		for(var i=0;i<pairs.length;i++){
																			var dstr=pairs[i];
																			var duo=pairs[i].split("=");
																			var dl=duo[0].toLowerCase();
																			switch(dl){
																				
																			case "version":version=duo[1];
																			break;
																				
																			case "bbox":bbox=duo[1];
																			break;
																				
																			case "width":case "height":break;
																				
																			case "service":break;
																				
																			case "servicename":servicename=duo[1];
																			break;
																				
																			case "atlasname":atlasname=duo[1];
																			break;
																			
																			case "styles":styles=duo[1];
																			break;
																			
																			case "layers":layers=duo[1];
																			break;
																			
																			case "format":format=duo[1];
																			break;
																			
																			case "opacity":opacity=parseFloat(duo[1]);
																			break;
																			
																			case "crs":case "srs":epsg=duo[1];
																			break;
																			
																			case "gmcrs":gmcrs=duo[1];
																			break;
																			
																			case "queryable":queryable=duo[1];
																			break;
																			
																			case "getmap":break;
																			case "service":break;
																			
																			default:if(duo[0]){
																				baseurl+="&"+pairs[i];
																			}
																			break;
																		}
																	}
																	if(gmcrs){
																		epsg=gmcrs;
																	}
																	var bbn=bbox.split(",");
																	var bb={
																		"w":parseFloat(bbn[0]),"s":parseFloat(bbn[1]),"e":parseFloat(bbn[2]),"n":parseFloat(bbn[3])};
																		var lon=(bb.n-bb.s);
																		var z=0;
																		var ex=180;
																		while(ex>=lon){ex=ex/2;z++;
																	}z--;
																	if(z<1){
																		z=1;
																	}
																	if(!attr){
																		attr="Base Map from OGC WMS";
																	}
																	var cr0=new GCopyright(1,new GLatLngBounds(new GLatLng(bb.s,bb.w),new GLatLng(bb.n,bb.e)),0,attr);
																	var cc0=new GCopyrightCollection("");cc0.addCopyright(cr0);var twms=new GTileLayer(cc0,z,19);
																	twms.s=bb.s;twms.n=bb.n;twms.e=bb.e;twms.w=bb.w;twms.myBaseURL=baseurl;
																	if(servicename){
																		twms.servicename=servicename;
																	}
																	if(atlasname){
																		twms.atlasname=atlasname;
																	}
																	twms.publishdirectory=this.publishdirectory;twms.epsg=epsg;
																	twms.getTileUrl=function(a,b,c){
																		if(typeof(this.myStyles)=="undefined"){
																			this.myStyles="";
																		}
																		var lULP=new GPoint(a.x*256,(a.y+1)*256);
																		var lLRP=new GPoint((a.x+1)*256,a.y*256);
																		var lUL=G_NORMAL_MAP.getProjection().fromPixelToLatLng(lULP,b,c);
																		var lLR=G_NORMAL_MAP.getProjection().fromPixelToLatLng(lLRP,b,c);
																		var west=lUL.x;
																		var east=lLR.x;
																		var north=lUL.y;
																		var south=lLR.y;
																		var ge=east;
																		var gw=west;
																		var gs=south;
																		var gn=north;
																		if(gn<gs){
																			gs=gn;gn=south;
																		}
																		if(this.epsg!="EPSG:4326"&&this.epsg!="CRS:84"&&this.epsg!="4326"){
																			west=GeoXml.merc2Lon(west);
																			north=GeoXml.merc2Lat(north);
																			east=GeoXml.merc2Lon(east);
																			south=GeoXml.merc2Lat(south);
																		}
																		var w=Math.abs(east-west);
																		var h=Math.abs(north-south);
																		var s=h/w;h=Math.round((256.0*s)+0.5);
																		w=256;
																		var sud=south;
																		if(north<south){
																			south=north;
																			north=sud;
																		}
																		if(gs>(this.n)||ge<(this.w)||gn<(this.s)||gw>(this.e)){
																			var retstr=this.publishdirectory+"black.gif";
																		}
																		var lBbox=west+","+south+","+east+","+north;
																		var lSRS="EPSG:41001";
																		if(typeof this.epsg!="undefined"||this.srs=="4326"){
																			lSRS=this.epsg;
																		}
																		var lURL=this.myBaseURL;
																		if(typeof this.myVersion=="undefined"){
																			this.myVersion="1.1.1";
																		}
																		var ver=parseFloat(this.myVersion);
																		var arcims=/arcimsproxy/i;
																		if(!this.myBaseURL.match(arcims)){
																			lURL+="&SERVICE=WMS";
																			if(this.myVersion!="1.0.0"){
																				var gmap=/request=getmap/i;
																				if(!lURL.match(gmap)){
																					lURL+="&REQUEST=GetMap";
																					}
																				}
																			else{
																				lURL+="&REQUEST=Map";
																			}
																		}
																		if(this.servicename){
																			lURL+="?ServiceName="+this.servicename;
																		}
																		if(this.atlasname){
																			lURL+="&AtlasName="+this.servicename;
																		}
																		lURL+="&VERSION="+this.myVersion;
																		if(this.myLayers){
																			lURL+="&LAYERS="+this.myLayers;
																			lURL+="&STYLES="+this.myStyles;
																		}
																		if(this.mySLD){
																			lURL+="&SLD="+this.mySLD;
																		}
																		lURL+="&FORMAT="+this.myFormat;
																		lURL+="&BGCOLOR=0x000000";
																		lURL+="&TRANSPARENT=TRUE";
																		if(this.myVersion=="1.1.1"||ver<1.3){
																			lURL+="&SRS="+lSRS;
																		}
																		else{
																			lURL+="&CRS="+lSRS;
																		}
																		lURL+="&WIDTH="+w;
																		lURL+="&HEIGHT="+h;
																		lURL+="&BBOX="+lBbox;
																		this.requestCount++;
																		return lURL;
																		};
																		twms.myFormat=format;
																		twms.myVersion=version;
																		twms.myExtents=bbox;
																		twms.queryable=queryable;
																		twms.opacity=opacity;
																		twms.getOpacity=function(){
																			return this.opacity;
																		};
																		if(sld){
																			twms.mySLD=sld;
																		}
																		else{
																			twms.myLayers=layers;twms.myStyles=styles;
																		}
																		var ol=new GTileLayerOverlay(twms);
																		ol.bounds=new GLatLngBounds();
																		ol.bounds.extend(new GLatLng(bb.n,bb.e));
																		ol.bounds.extend(new GLatLng(bb.s,bb.w));
																		this.wmscount++;
																		if(this.opts.doMapTypes){
																			var twms2=new GTileLayer(cc0,z,19);
																			twms2.s=bb.s;
																			twms2.n=bb.n;
																			twms2.e=bb.e;
																			twms2.w=bb.w;
																			twms2.myBaseURL=baseurl;
																			twms2.servicename=servicename;
																			twms2.publishdirectory=this.publishdirectory;
																			twms2.getTileUrl=twms.getTileUrl;
																			twms2.myFormat=twms.myFormat;
																			twms2.myVersion=version;
																			twms2.opacity=1.0;
																			twms2.title=title;
																			if(attr){
																				twms2.attribution=attr;
																			}
																			twms2.getOpacity=function(){
																				return this.opacity;
																			};
																			if(sld){
																				twms2.mySLD=sld;
																			}
																			else{
																				twms2.myLayers=layers;
																				twms2.myStyles=styles;
																			}
																			twms2.epsg=epsg;
																			var base=new GTileLayer(cc0,z,19);
																			base.s=bb.s;
																			base.n=bb.n;
																			base.e=bb.e;
																			base.w=bb.w;
																			base.dir=this.publishdirectory;
																			base.getTileUrl=function(){
																				return(this.dir+"black.gif");
																			};
																			base.opacity=1.0;
																			base.title=title;
																			if(attr){
																				base.attribution=attr;
																			}
																			base.getOpacity=function(){
																				return this.opacity;
																			};
																			var layer=[twms2,G_HYBRID_MAP.getTileLayers()[1]];
																			var cmap=new GMapType(layer,G_HYBRID_MAP.getProjection(),""+title+"",G_HYBRID_MAP);
																			cmap.bounds=new GLatLngBounds(new GLatLng(bb.s,bb.w),new GLatLng(bb.n,bb.e));
																			if(grouptitle){cmap.grouptitle=grouptitle;
																		}
																		that.baseLayers.push(cmap);
																		that.map.addMapType(cmap);
																		return null;
																	}
																	else{
																		return ol;
																	}
																};
															
															GeoXml.SEMI_MAJOR_AXIS=6378137.0;
															GeoXml.ECCENTRICITY=0.0818191913108718138;
															GeoXml.DEG2RAD=180.0/(Math.PI);
															GeoXml.merc2Lon=function(lon){
																return(lon*GeoXml.DEG2RAD)*GeoXml.SEMI_MAJOR_AXIS;
															};
															
															GeoXml.merc2Lat=function(lat){
																var rad=lat*GeoXml.DEG2RAD;
																var sinrad=Math.sin(rad);
																return(GeoXml.SEMI_MAJOR_AXIS*Math.log(Math.tan((rad+Math.PI/2) / 2) * Math.pow(((1 - GeoXml.ECCENTRICITY * sinrad) / (1 + GeoXml.ECCENTRICITY * sinrad)), (GeoXml.ECCENTRICITY/2))));
															};
															
															GeoXml.prototype.toggleLabels=function(on){
																if(!on){
																	this.removeLabels();
																}
																else{
																	this.addLabels();
																}
															};
															
															GeoXml.prototype.addLabels=function(){
																this.labels.onMap=true;this.map.addOverlay(this.labels);
															};
															
															GeoXml.prototype.removeLabels=function(){
																this.labels.onMap=false;this.map.removeOverlay(this.labels);
															};
															var useLegacyLocalLoad=true;GeoXml.prototype.DownloadURL=function(fpath,callback,title){
																if(!fpath){
																	return;
																}
																var xmlDoc;var that=this;var cmlurl=fpath;
																if(!top.standalone&&this.proxy){
																	cmlurl=this.proxy+"url="+escape(cmlurl);
																}
																if(top.standalone||useLegacyLocalLoad){
																	if(cmlurl.substring(2,3)==":"){
																		xmlDoc=new ActiveXObject("Msxml2.DOMDocument.4.0");
																		xmlDoc.validateOnParse=false;
																		xmlDoc.async=true;xmlDoc.load(cmlurl);
																		if(xmlDoc.parseError.errorCode!=0){
																			var myErr=xmlDoc.parseError;
																			alert("GeoXml file appears incorrect\n"+myErr.reason+" at line:"+myErr.line);
																		}
																		else{
																			callback(xmlDoc.doc);
																		}
																		return;
																	}
																}
																var cmlreq;/*@cc_on @*//*@if(@_jscript_version>=5)try{cmlreq=new ActiveXObject("Msxml2.XMLHTTP");}catch(e){try{cmlreq=new ActiveXObject("Microsoft.XMLHTTP");}catch(E){alert("attempting xmlhttp");cmlreq=false;}}@end @*/
																if(!cmlreq&&typeof XMLHttpRequest!='undefined'){
																	cmlreq=new XMLHttpRequest();
																}
																else{
																	if(typeof ActiveXObject!="undefined"){
																		cmlreq=new ActiveXObject("Microsoft.XMLHTTP");
																	}
																}
																var here=cmlurl;
																if(cmlreq.overrideMimeType){
																	cmlreq.overrideMimeType("text/xml");
																}
																cmlreq.open("GET",here,true);
																cmlreq.onreadystatechange=function(){
																	switch(cmlreq.readyState){
																		
																		case 4:that.mb.showMess(title+" received",2000);
																		if(typeof ActiveXObject!="undefined"){
																			xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
																			xmlDoc.async="false";
																			var response=cmlreq.responseText;callback(response);
																		}
																		else{
																			if(cmlreq.responseXML){
																				that.mb.showMess(title+" received",2000);
																				callback(cmlreq.responseText);
																			}
																			else{
																				if(cmlreq.status==200){
																					var resp=cmlreq.responseText;
																					var sresp=resp.substring(0,400);
																					var isXML=resp.substring(0,5);
																					if(isXML=="<?xml"&&sresp.indexOf("kml")!=-1){
																						that.mb.showMess(title+" response received",2000);
																						callback(resp.responseText);
																					}
																					else{
																						that.mb.showMess("File does not appear to be a valid GeoData"+resp,6000);
																					}
																				}
																			}
																		}
																		break;
																		
																		case 3:that.mb.showMess("Receiving "+title+"...");
																		break;
																		
																		case 2:that.mb.showMess("Waiting for "+title,2000);
																		break;
																		
																		case 1:that.mb.showMess("Sent request for "+title,2000);
																		break;
																	}
																};
																try{cmlreq.send(null);
															}
															catch(err){
																if(cmlurl.substring(2,3)==":"&&!useLegacyLocalLoad){
																	useLegacyLocalLoad=true;
																	this.DownloadURL(cmlurl);
																}
															}
														};