function firstChildElement(elem){var walker=elem.firstChild;while(walker&&(walker.nodeType!=1))walker=walker.nextSibling;return walker;}
function nextSiblingElement(elem){var walker=elem.nextSibling;while(walker&&(walker.nodeType!=1))walker=walker.nextSibling;return walker;}
function MapData(elem,commandsAttributeName,defaultW,defaultH){this.elem=elem;this.inheritedStyle=null;this.className=null;this.inheritedID=null;this.defaultW=defaultW;this.defaultH=defaultH;this.commandsAttributeName=commandsAttributeName;this.type=G_NORMAL_MAP;this.geoCoord=null;this.zoom=null;this.overviewMapControl=true;this.controls=true;this.showMarkers=true;this.detaultGeoCoord=new GLatLng(-15.779699,-47.910004);this.markers=[];this.xmlOverlays=[];this.debug=0;}
MapData.prototype.toString=function(){var text="";text+="Center: "+ this.geoCoord.toString()+"<br/>";text+="Zoom: "+ this.zoom+"<br/>";return text;}
MapData.prototype.createGoogleMap=function(){var realMap;var mapNode;var dimX;var dimY;mapNode=document.createElement("div");if(this.className)mapNode.className="map "+ this.className;else mapNode.className="map";if(this.inheritedStyle)mapNode.style.cssText=this.inheritedStyle;mapNode.style.display="block";if(mapNode.style.visibility=="hidden")
mapNode.style.visibility="inherit";this.elem.parentNode.replaceChild(mapNode,this.elem);if(mapNode.style.width==0){if(this.defaultW.toString().indexOf("%")!=-1)
mapNode.style.width=this.defaultW;else mapNode.style.width=this.defaultW+"px";}
if(mapNode.style.height==0){if(this.defaultH.toString().indexOf("%")!=-1)
mapNode.style.height=this.defaultH;else mapNode.style.height=this.defaultH+"px";}
if(this.inheritedID)mapNode.id=this.inheritedID;else mapNode.id="googlemap-"+ Math.ceil(10000*Math.random());realMap=new GMap2(mapNode);realMap.setCenter(this.geoCoord,parseInt(this.zoom),this.type);if(this.controls){if(parseInt(mapNode.style.height)>=320)
realMap.addControl(new GLargeMapControl());else realMap.addControl(new GSmallMapControl());realMap.addControl(new GMapTypeControl());realMap.addControl(new GScaleControl());if(this.overviewMapControl)
realMap.addControl(new GOverviewMapControl());}
while(this.xmlOverlays.length>0){var url=this.xmlOverlays.shift();var overlay=new GGeoXml(url);realMap.addOverlay(overlay);}
if(this.showMarkers&&this.markers.length>0){var manager=new GMarkerManager(realMap);manager.addMarkers(this.markers,1);manager.refresh();}}
MapData.prototype.parseGoogleMapsURL=function(gmapsurl){if(gmapsurl.indexOf("http://maps.google.")==-1)return 0;var i;var params=gmapsurl.split("?");params=params[1].split("&");for(i=0;i<=params.length-1;i++){var param=params[i].split("=");switch(param[0]){case"ll":{var _geocoord=param[1].split(",");if(_geocoord[0]!=null||_geocoord[1]!=null){this.geoCoord=new GLatLng(_geocoord[0],_geocoord[1]);}}
break;case"z":{this.zoom=param[1];}
break;case"om":{this.overviewMapControl=(param[1]==0?false:true);}
break;case"t":{switch(param[1]){case'k':this.type=G_SATELLITE_MAP;break;case'h':this.type=G_HYBRID_MAP;break;case'p':this.type=G_PHYSICAL_MAP;}}
break;case"msid":{this.xmlOverlays.push("http://maps.google.com/maps/ms?oe=UTF-8&msa=0&output=kml&msid="+ param[1]);}
break;}}
return 1;}
MapData.prototype.parseCommands=function(commands){if(commands==undefined)return 0;if(commands.indexOf("googlemap")==-1)return 0;var params=commands.split(";");var i;for(i=0;i<params.length;i++){if(params[i].indexOf("nomarker")!=-1){this.showMarkers=false;}else if(params[i].indexOf("w:")!=-1){var val=params[i].split(':');this.defaultW=val[1];}else if(params[i].indexOf("h:")!=-1){var val=params[i].split(':');this.defaultH=val[1];}else if(params[i].indexOf("nocontrol")!=-1){this.controls=false;}}
return 1;}
MapData.prototype.addMarker=function(point,markerHTML){var marker=new GMarker(point);if(markerHTML)
GEvent.addListener(marker,"click",function(){var opts={maxWidth:450};marker.openInfoWindowHtml("<div class=\"balloon\" style=\"width:auto;height:auto\">"+markerHTML+"</div>",opts);});this.markers.push(marker);}
MapData.prototype.parseAnchorTag=function(){if(!this.parseGoogleMapsURL(this.elem.href))return 0;if(this.geoCoord==null)this.geoCoord=this.defaultGeoCoord;if(this.elem.style.cssText)this.inheritedStyle=this.elem.style.cssText;if(this.elem.className)this.className=this.elem.className;if(this.elem.id)this.inheritedID=this.elem.id;this.addMarker(this.geoCoord,this.elem.innerHTML);return 1;}
MapData.prototype.parseDefinitionBlock=function(){var walker;if(this.elem.style.cssText)this.inheritedStyle=this.elem.style.cssText;if(this.elem.className)this.className=this.elem.className;if(this.elem.id)this.inheritedID=this.elem.id;this.elem.title=null;walker=firstChildElement(this.elem);while(walker&&walker.nodeName.toLowerCase()=="dt"){var elem=firstChildElement(walker);if(!elem){do walker=nextSiblingElement(walker);while(walker&&walker.nodeName.toLowerCase()!="dt");continue;}
if(elem.nodeName.toLowerCase()=="a"){if(this.geoCoord==null){this.parseGoogleMapsURL(elem.href);do walker=nextSiblingElement(walker);while(walker&&walker.nodeName.toLowerCase()!="dt");continue;}else if(elem.title=="kml"||elem.title=="georss"){this.xmlOverlays.push(elem.href);do walker=nextSiblingElement(walker);while(walker&&walker.nodeName.toLowerCase()!="dt");continue;}else{var tempMapData=new MapData();if(!tempMapData.parseGoogleMapsURL(elem.href)){do walker=nextSiblingElement(walker);while(walker&&walker.nodeName.toLowerCase()!="dt");continue;}
do walker=nextSiblingElement(walker);while(walker&&(walker.nodeName.toLowerCase()!="dd"&&walker.nodeName.toLowerCase()!="dt"));if(walker&&walker.nodeName.toLowerCase()=="dd"){this.addMarker(tempMapData.geoCoord,walker.innerHTML);}else this.addMarker(tempMapData.geoCoord);}}
while(walker&&walker.nodeName.toLowerCase()!="dt")
walker=nextSiblingElement(walker);}
if(this.geoCoord==null)return 0;else return 1;}
MapData.prototype.parseNode=function(){switch(this.elem.nodeName.toLowerCase()){case"dl":if(!this.parseCommands(this.elem.getAttribute("title")))return false;if(!this.parseDefinitionBlock(this.commandsAttributeName))return false;break;case"a":if(!this.parseCommands(this.elem.getAttribute(this.commandsAttributeName)))return false;if(!this.parseAnchorTag(this.commandsAttributeName))return false;break;default:return false;}
return true;}
MapPlugin.prototype.consumeMapContainers=function(){var mapContainers=["dl","a"];var attributeForCommands="title";if(this.useRelAttribute)
attributeForCommands="rel";for(var i1=0;i1<mapContainers.length;i1++){var elems=document.getElementsByTagName(mapContainers[i1]);var cur=null;var i2=0;while((cur=elems.item(i2))){var cmd=null;var map=new MapData(cur,attributeForCommands,this.defaultW,this.defaultH);if(map.parseNode())this.maps.unshift(map);else delete map;i2++;}}}
MapPlugin.prototype.createMaps=function(){var map;while((map=this.maps.pop())){map.createGoogleMap();delete map;}}
function MapPlugin(_defaultWidth,_defaultHeight,_useRelAttribute){this.defaultW=_defaultWidth;this.defaultH=_defaultHeight;this.useRelAttribute=_useRelAttribute;this.maps=new Array;this.consumeMapContainers();this.createMaps();}
function MapPluginInit(_defaultWidth,_defaultHeight,_useRelAttribute){if(!GBrowserIsCompatible())return;var oldOnLoad=window.onload;var oldOnUnload=window.onunload;var instantiate=function(){new MapPlugin(_defaultWidth,_defaultHeight,_useRelAttribute);}
if(typeof window.onload!='function')
window.onload=instantiate;else window.onload=function(){oldOnLoad();instantiate();}
if(typeof window.onunload!='function')
window.onunload=GUnload;else window.onunload=function(){oldOnUnload();GUnload();}}
