/*
PdMarker
Purpose: extends Google Map API GMap and GMarker (hover effects, image swapping, moving)
Details: http://www.pixeldevelopment.com/pdmarker.asp
Updated: [see getPdMarkerRevisionInfo]
Author:  Peter Jones
Notes:   Relies on undocumented features of the Google Map API which may change.
Based on my own PJToolTip and ideas from GxMarker, TLabel and the Google Maps API forum.
Contact http://www.pixeldevelopment.com for your custom Google Map needs*/
function getPdMarkerRevisionInfo() {
var cr = "<br/>";
var s =
"2.03  10/02/07-fixed zindex bug (setMarkerZIndex, topMarkerZIndex)"+cr+
"2.02  05/22/07-fixed minor issues (blink, initDetailWin)"+cr+
"2.01  04/29/07-improved left hand side detail window positioning, uses new Google setImage &amp; show "+
"routines for added reliability, fixed zoomToMarkers for single marker case."+cr+
"2.00  04/22/07-fix for setImage when using Explorer 7."+cr+
"1.99f 07/09/06-zoomToMarkers now takes into account markers not displayed."+cr+
"1.99e 05/05/06-fixed zoomed tooltip positioning &amp; non-centered marker graphics."+cr+
"1.99d 05/01/06-fixed display &amp; blink when defining .transparent."+cr+
"1.99c 04/25/06-added display and blink."+cr+
"1.99b 04/21/06-added 'Powered By' version &amp; marker count display."+cr+
"1.99a 04/18/06-revised for Google Maps API Version 2, GMap2 required."+cr+
"0.99c 01/30/06-added setDetailWinClass and resetDetailWinClass."+cr+
"0.99a 10/12/05-now handles maps in containers with undefined widths"+cr+
"define a div with id 'pdmarkerwork' to reduce flicker"+cr+
"0.99  10/03/05-added setImageEnabled, allowLeftTooltips (global)"+cr+
"0.98  09/30/05-fixed zoomToMarkers"+cr+
"0.97  09/24/05-added setHoverImage, setShowDetailOnClick, setDetailWinHTML, showDetailWin, closeDetailWin"+cr+
"0.96  09/22/05-added setTooltipHiding, getTooltipHiding"+cr+
"0.95  09/20/05-handle zoom for lingering tooltips mouseOutEnabled(false) "+
"disables setImage and restoreImage"+cr+
"0.94  09/20/05-added setTooltipClass and resetTooltipClass"+cr+
"0.93  09/19/05-added slopPercentage [optional] parameter to zoomToMarkers"+cr+
"0.92  09/18/05-added getMouseOutEnabled, setMouseOutEnabled"+cr+
"0.91  09/17/05-fixed setOpacity";
return s;}
function getPdMarkerVersion() {
return getPdMarkerRevisionInfo().substring(0,15);}
function getPdMarkerShortVersion() {
return getPdMarkerRevisionInfo().substring(0,5);}
var APIkey = "";
function getGoogleMapsVersion() {
var i, a, b, c;
var v = "unknown";
if (document.getElementsByTagName)
for(i=0; (a = document.getElementsByTagName("script")[i]); i++)
if(a.getAttribute("src")){
b = a.getAttribute("src");
c = b.indexOf("/mapfiles/maps"); // /mapfiles/maps
d = b.indexOf("http://maps.google.com/maps?file=api");
e = b.indexOf("key=");
f = b.indexOf("/mapfiles/");
g = b.indexOf("/maps");
if (c > 0)
v = parseFloat(b.substring(c+14));
else if (f > 0)
v = "2."+b.substring(f+10,g);
if (d >= 0)
if (e > 0)
APIkey = b.substring(e+4);}
return v;}
function latLongToPixel(map,coord,zoom) {
return map.fromLatLngToDivPixel(coord);}
var pdMarkerExtList = [];
function PdMarkerAddToExtList(marker) {
pdMarkerExtList.push(marker);}
function PdMarkerRemoveFromExtList(id) {
for (var i=0; i<pdMarkerExtList.length; i++)
if (pdMarkerExtList[i].internalId == id)
pdMarkerExtList.splice(i,1);}
function PdMarkerFindInExtList(id) {
for (var i=0; i<pdMarkerExtList.length; i++)
if (pdMarkerExtList[i].internalId == id)
return pdMarkerExtList[i];}
function PdMarkerClose(id) {
for (var i=0; i<pdMarkerExtList.length; i++)
if (pdMarkerExtList[i].internalId == id){
pdMarkerExtList[i].closeDetailWin();
pdMarkerExtList.splice(i,1);}}
function PdMarkerBlinkOnOff(id) {
var marker = PdMarkerFindInExtList(id);
if (marker){
if (!marker.blinking) return;
marker.blinkOn = !marker.blinkOn;
marker.display(marker.blinkOn);
setTimeout("PdMarkerBlinkOnOff("+marker.getId()+");", marker.blinkSpeed);}}
function isPdMarker(a) {
if (a.isMarker)
return true;
return false;}
function getPdMarkerCount(a) {
if (a.pdMarkers)
return a.pdMarkers.length;
return 0;}
GMap2.prototype.getMarkerById = function(id) {
var count = getPdMarkerCount(this);
for (var i = 0; i < count; i++)
if (isPdMarker(this.pdMarkers[i]))
if (this.pdMarkers[i].internalId == id){
this.cursor = i;
return this.pdMarkers[i];}
return null;}
GMap2.prototype.getFirstMarker = function() {
var count = getPdMarkerCount(this);
for (var i = 0; i < count; i++)
if (isPdMarker(this.pdMarkers[i])){
this.cursor = i;
return this.pdMarkers[i];}
return null;}
GMap2.prototype.getNextMarker = function() {
var count = getPdMarkerCount(this);
if (count > 0)
if (this.cursor >= 0)
for (var i = this.cursor+1; i < count; i++)
if (isPdMarker(this.pdMarkers[i])){
this.cursor = i;
return this.pdMarkers[i];}
return null;}
GMap2.prototype.getNthMarker = function(nTh) {
var count = getPdMarkerCount(this);
for (var i = 0; i < count; i++)
if (isPdMarker(this.pdMarkers[i])){
nTh--;
if (nTh == 0){
this.cursor = i;
return this.pdMarkers[i];}}
return null;}
GMap2.prototype.getMarkerCount = function() {
return getPdMarkerCount(this);}
GMap2.prototype.boxMap = function(center, span) {
var spec = this.spec;
var zoom = spec.getLowestZoomLevel(center, span, this.viewSize);
this.centerAndZoom(new GPoint(center.x, center.y), zoom);}
GMap2.prototype.zoomToMarkers = function(slopPercentage, heightOffsetPct) {
var count = 0;
var thePoint, x, y, minX, maxX, minY, maxY, span;
var marker = this.getFirstMarker();
while (marker != null){
if (!marker.isHidden()){
thePoint = marker.getPoint();
x = thePoint.lat(); y = thePoint.lng();
if (count == 0){
minX = x; maxX = x; minY = y; maxY = y;}
else{
if (x < minX) minX = x;
if (x > maxX) maxX = x;
if (y < minY) minY = y;
if (y > maxY) maxY = y;}
count++;}
marker = this.getNextMarker();}
if (count == 1)
this.setCenter(new GLatLng(x,y), this.getZoom());
else if (count > 1){
var center = new GLatLng((minX+maxX) / 2, (minY+maxY) / 2)
span = new GSize(Math.abs(maxX-minX), Math.abs(maxY-minY));
slopWid = 0;
slopHgt = 0;
if (typeof slopPercentage != "undefined"){
slopWid = span.width * slopPercentage / 200;
slopHgt = span.height * slopPercentage / 200;
span.width  *= 1+slopPercentage / 100;
span.height *= 1+slopPercentage / 100;}
deltaHgt = 0;
if (typeof heightOffsetPct != "undefined"){
deltaHgt = span.height * heightOffsetPct / 100;
center = new GLatLng(center.lat()+deltaHgt, center.lng());}
var bounds = new GLatLngBounds(new GLatLng(minX-slopHgt, minY-slopWid), new GLatLng(maxX+slopHgt, maxY+slopWid)); // sw, ne
var zoom = this.getBoundsZoomLevel(bounds);
this.setCenter(center, zoom);}}
function shorten(x) {
var factor = 1000000
return Math.round(x * factor) / factor;}
function poweredByClick(map) {
var center = map.getCenter();
var span = map.getBounds().toSpan();
var zoom = map.getZoom();
var url = "http://maps.google.com/maps?ll="+center.lat()+","+center.lng()+"&spn="+shorten(span.lat())+","+shorten(span.lng())+"&z="+zoom+"&key="+APIkey;
document.location = url;}
function poweredByMouseover(map) {
var marker = map.getFirstMarker();
var bounds = map.getBounds();
var visibleCount = 0;
var totalCount = 0;
while (marker != null) {
if (!marker.isHidden()){
var point = marker.getPoint();
if (bounds.contains(point))
visibleCount++;
totalCount = totalCount+1;}
marker = map.getNextMarker();}
var title = map.poweredByTitle+" ("+visibleCount+" markers of "+totalCount+" visible)"
map.poweredByObj.setAttribute("title",title);
map.poweredByObj.setAttribute("alt",title);}
function getPoweredBy(map) {
try {
var tooltip = "GMap "+getGoogleMapsVersion()+" & PdMarker "+getPdMarkerShortVersion();
map.poweredByTitle = tooltip;
var b = document.createElement("img");
b.setAttribute("src","http://www.google.com/intl/en_ALL/mapfiles/transparent.gif");
b.setAttribute("width",62);
b.setAttribute("alt",tooltip);
b.setAttribute("title",tooltip);
b.setAttribute("height",30);
b.style.display = "block";
b.style.position = "absolute";
b.style.left    = "2px";
b.style.bottom  = "0px";
b.style.width   = "62px";
b.style.height  = "30px";
b.style.cursor  = "pointer";
b.style.zIndex  = 600001;
b.onclick = function() { poweredByClick(map); };
b.onmouseover = function() { poweredByMouseover(map); };
map.getPane(G_MAP_FLOAT_PANE).parentNode.parentNode.appendChild(b);
return b;}
catch (e) {}
return true;}
function setPoweredBy(map) {
if (!map.poweredByObj) {
getGoogleMapsVersion(); // possibly reduce IE memory leak, unchecked
map.poweredByObj = getPoweredBy(map);}}
function PdMarkerNamespace() {
var userAgent = navigator.userAgent.toLowerCase();
var n4=(document.layers);
var n6=(document.getElementById&&!document.all);
var ie=(document.all);
var o6=(userAgent.indexOf("opera") !=-1);
var safari=(userAgent.indexOf("safari") !=-1);
var msie  = (userAgent.indexOf("msie") !=-1) && (userAgent.indexOf("opera") ==-1);
var msiePre7 = false;
if (msie)
msiePre7 = userAgent.substr(userAgent.indexOf("msie")+5,2) < 7;
var nextMarkerId = 10;
var permitLeft = true;
var icon = new GIcon();
icon.shadow = "http://www.google.com/mapfiles/shadow50.png";
icon.iconSize = new GSize(20, 34);
icon.shadowSize = new GSize(37, 34);
icon.iconAnchor = new GPoint(9, 34);
icon.infoWindowAnchor = new GPoint(9, 2);
icon.infoShadowAnchor = new GPoint(18, 25);
icon.image = "http://www.google.com/mapfiles/marker.png";
function PdMarker(a, b, tooltip) {
this.inheritFrom = GMarker;
if (typeof b == "undefined") // pmj oct 23, 2005
b = icon;
this.inheritFrom(a,b);
if (typeof tooltip != "undefined")
this.pendingTitle = tooltip;
else
this.pendingTitle = "";
if (typeof b != "undefined")
this.oldImagePath = b.image;
else
this.oldImagePath = "http://www.google.com/mapfiles/marker.png";
this.internalId = nextMarkerId;
nextMarkerId+= 1;
this.zIndexSaved = false;
this.pendingCursor = "";
this.percentOpacity = 70;
this.mouseOutEnabled = true;
this.setImageOn = true;
this.hidingEnabled = true;
this.showDetailOnClick = true;
this.detailOpen = false;
this.userData = "";
this.displayed = true;}
PdMarker.prototype = new GMarker(new GLatLng(1, 1));
function addMarkerToMapList(map,marker) {
try {
if (map.pdMarkers.length) ;}
catch(e) {
map.pdMarkers = new Array();}
map.pdMarkers.push(marker);}
function removeMarkerFromMapList(map,marker) {
var id = marker.internalId;
for (var i=0; i<map.pdMarkers.length; i++)
if (map.pdMarkers[i].internalId == id){
map.pdMarkers.splice(i,1);
return;}}
PdMarker.prototype.initialize = function(a) {
if (typeof a == "GMap"){
GLog.write("PdMarker requires GMap2");
return;}
addMarkerToMapList(a,this);
try{
GMarker.prototype.initialize.call(this, a);
this.isMarker = true;
if (this.pendingTitle.length > 0)
this.setTitle(this.pendingTitle);
if (this.pendingCursor.length > 0)
this.setCursor(this.pendingCursor);
this.map = a;
setPoweredBy(a);
GEvent.bindDom(this, "mouseover", this, this.onMouseOver);
GEvent.bindDom(this, "mouseout",  this, this.onMouseOut);
GEvent.bindDom(this, "click",  this, this.onClick);
GEvent.bind(this.map, "zoomend", this, this.reZoom);}
catch(e) {
alert("PdMarker initialize error: "+e);}}
PdMarker.prototype.allowLeftTooltips = function(a){
permitLeft = a;}
PdMarker.prototype.reZoom = function(){
var didSet = false;
if (this.tooltipObject)
if (this.tooltipObject.style.display == "block"){
setTTPosition(this);
didSet = true;}
if (this.detailObject){
if (!didSet)
setTTPosition(this);
setDetailPosition(this);}}
PdMarker.prototype.setId = function(id) {
this.internalId = id;}
PdMarker.prototype.getId = function() {
return this.internalId;}
PdMarker.prototype.setName = function(a) {
this.name = a;}
PdMarker.prototype.getName = function() {
if (this.name)
return this.name;
else
return null;}
PdMarker.prototype.setUserData = function(a) {
this.userData = a;}
PdMarker.prototype.getUserData = function() {
if (this.userData)
return this.userData;
else
return "";}
PdMarker.prototype.setUserData2 = function(a) {
this.userData2 = a;}
PdMarker.prototype.getUserData2 = function() {
if (this.userData2)
return this.userData2;
else
return "";}
PdMarker.prototype.setImageEnabled = function(a) {
this.setImageOn = a;}
var PdMIN = "";
var PdMIA = "";
function PdCompPdMIN(marker) {
if (PdMIN.length == 0)
for (var i in marker)
if (eval("typeof marker."+i) == "object")
try {
if (eval("typeof marker."+i+"[0].src") != "undefined"){
PdMIA = "this."+i;
PdMIN = PdMIA+"[0]";}}
catch (e) {}}
PdMarker.prototype.setImageOld = function(a) {
var msFilter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+a+'")';
if (this.mouseOutEnabled && this.setImageOn){
PdCompPdMIN(this);
try {
if (this.oldImagePath.length == 0)
eval("this.oldImagePath = "+PdMIN+".src");
if (msie && msiePre7)
eval(PdMIN+".style.filter = msFilter");
else
eval(PdMIN+".src = a");}
catch (e) {}}}
PdMarker.prototype.setImage = function(a) {
if (this.mouseOutEnabled && this.setImageOn)
GMarker.prototype.setImage.call(this, a);}
PdMarker.prototype.restoreImage = function() {
if (this.mouseOutEnabled && this.setImageOn && this.oldImagePath.length > 0)
this.setImage(this.oldImagePath);}
PdMarker.prototype.display = function(a) {
if (a)
this.show();
else
this.hide();}
PdMarker.prototype.blink = function(a,b) {
if (a){
this.blinkOn = true;
this.blinkSpeed = b;
if (!this.blinking){
this.blinking = a;
PdMarkerAddToExtList(this);
PdMarkerBlinkOnOff(this.getId());}}
else{
this.blinking = a;
this.display(true);
PdMarkerRemoveFromExtList(this);}}
PdMarker.prototype.setIcon = function(a) {
this.remove();
this.icon = a;
this.initialize(this.map);
this.redraw(true);}
PdMarker.prototype.setMarkerZIndex = function(a) {
PdCompPdMIN(this);
if (!this.zIndexSaved){
this.zIndexSaved = true;
this.oldZIndex = eval(PdMIN+".style.zIndex");}
eval(PdMIN+".style.zIndex = a")
this.redraw(true);}
PdMarker.prototype.topMarkerZIndex = function() {
this.setMarkerZIndex (600000);}
PdMarker.prototype.restoreMarkerZIndex = function() {
PdCompPdMIN(this);
if (this.zIndexSaved){
this.zIndexSaved = false;
eval(PdMIN+".style.zIndex = this.oldZIndex")
this.redraw(true);}}
PdMarker.prototype.onInfoWindowOpen = function() {
this.hideTooltip();
GMarker.prototype.onInfoWindowOpen.call(this);}
PdMarker.prototype.setHoverImage = function(a) {
this.hoverImage = a;}
var inMouseOver = false;
PdMarker.prototype.onMouseOver = function() {
if (inMouseOver)
return;
inMouseOver = true;
if (this.hoverImage)
this.setImage(this.hoverImage);
if (!this.detailOpen)
this.showTooltip();
inMouseOver = false;}
PdMarker.prototype.onMouseOut = function() {
if (this.hoverImage)
this.restoreImage();
if (!this.detailOpen)
if (this.mouseOutEnabled)
this.hideTooltip();}
PdMarker.prototype.setMouseOutEnabled = function(a) {
this.mouseOutEnabled = a;}
PdMarker.prototype.getMouseOutEnabled = function() {
return this.mouseOutEnabled;}
PdMarker.prototype.setTooltipHiding = function(a) {
this.hidingEnabled = a;}
PdMarker.prototype.getTooltipHiding = function() {
return this.hidingEnabled;}
PdMarker.prototype.setTitle = function(a) {
this.tooltipText = "";
PdCompPdMIN(this);
try {
eval(PdMIN+".title = a");}
catch (e) {
this.pendingTitle = a;}}
PdMarker.prototype.setCursor = function(a) {
PdCompPdMIN(this);
try {
eval(PdMIN+".style.cursor = a");}
catch (e) {
this.pendingCursor = a;}}
PdMarker.prototype.setTooltipClass = function(a) {
this.pendingClassName = a;
if (this.tooltipObject){
var showing = (this.tooltipObject.style.display != "none");
this.deleteObjects();
if (this.tooltipRaw)
this.setTooltipNoResize(this.tooltipRaw);
if (showing)
this.showTooltip();}
else
if (this.tooltipRaw)
this.setTooltipNoResize(this.tooltipRaw);}
PdMarker.prototype.resetTooltipClass = function() {
this.setTooltipClass("markerTooltip");}
PdMarker.prototype.getTooltip = function() {
try {
return this.tooltipRaw;}
catch (e){
return "";}}
PdMarker.prototype.setTooltipNoResize = function(a) {
this.setTitle("");
var ttClass = "markerTooltip";
if (this.pendingClassName)
ttClass = this.pendingClassName;
this.tooltipRaw = a;
this.tooltipText = "<div class='"+ttClass+"'>"+a+"</div>";
if (this.tooltipObject)
this.tooltipObject.innerHTML = this.tooltipText;}
PdMarker.prototype.setTooltip = function(a) {
this.setTooltipNoResize(a);
this.deleteObjects();}
PdMarker.prototype.showTooltip = function() {
if (this.tooltipText){
if (!this.tooltipObject)
initTooltip(this);
setTTPosition(this);
this.tooltipObject.style.display = "block";}}
PdMarker.prototype.hideTooltip = function() {
if (this.tooltipObject)
if (this.hidingEnabled)
this.tooltipObject.style.display = "none";}
PdMarker.prototype.onClick = function(a) {
if (this.showDetailOnClick && this.detailWinHTML)
this.showDetailWin();}
PdMarker.prototype.setShowDetailOnClick = function(a) {
this.showDetailOnClick = a;}
PdMarker.prototype.setDetailWinHTML = function(a) {
this.detailWinHTML = a;}
PdMarker.prototype.setDetailWinClass = function(a) {
this.pendingDetailClassName = a;}
PdMarker.prototype.resetDetailWinClass = function() {
this.setDetailWinClass("markerDetail");}
PdMarker.prototype.showDetailWin = function() {
if (this.detailOpen){
this.closeDetailWin();
return;}
this.hideTooltip();
this.setMouseOutEnabled(false);
var winClass = "markerDetail";
if (this.pendingWinClassName)
winClass = this.pendingWinClassName;
var html = "<table><tr><td>"+this.detailWinHTML+"<\/td><td valign='top'><a class='markerDetailClose' href='javascript:PdMarkerClose("+this.internalId+")'><img src='http://www.google.com/mapfiles/close.gif' width='14' height='13'><\/a><\/td><\/tr><\/table>";
html = "<div class='"+winClass+"'>"+html+"</div>";
this.detailOpen = true;
if (!this.tooltipText){
this.ttWidth = 150;
this.ttHeight = 30;
setTTPosition(this); // compute ttTop, ttLeft}
initDetailWin(this, this.ttTop, this.ttLeft, html);
PdMarkerAddToExtList(this);}
PdMarker.prototype.closeDetailWin = function() {
this.detailOpen = false;
if (this.detailObject){
this.setMouseOutEnabled(true);
this.onMouseOut();
this.map.getPane(G_MAP_FLOAT_PANE).removeChild(this.detailObject);
this.detailObject = null;}}
PdMarker.prototype.deleteObjects = function() {
if (this.tooltipObject){
this.map.getPane(G_MAP_FLOAT_PANE).removeChild(this.tooltipObject);
this.tooltipObject = null;}
if (this.detailObject){
this.map.getPane(G_MAP_FLOAT_PANE).removeChild(this.detailObject);
this.detailObject = null;}}
PdMarker.prototype.remove = function(a) {
removeMarkerFromMapList(this.map, this);
PdMarkerRemoveFromExtList(this.getId());
GMarker.prototype.remove.call(this);
this.deleteObjects();}
PdMarker.prototype.setOpacity = function(b) {
if (b < 0)
b=0;
if (b >= 100)
b=100;
var c = b / 100;
this.percentOpacity = b;
var d = document.getElementById(this.objId);
if (d){
if(typeof(d.style.filter)=='string'){d.style.filter='alpha(opacity:'+b+')';}
if(typeof(d.style.KHTMLOpacity)=='string'){d.style.KHTMLOpacity=c;}
if(typeof(d.style.MozOpacity)=='string'){d.style.MozOpacity=c;}
if(typeof(d.style.opacity)=='string'){d.style.opacity=c;}}}
PdMarker.prototype.setOpacityNew = function(b) {
setObjOpacity(this.objId);
this.percentOpacity = b;}
function setObjOpacity(objId, b) {
if (b < 0)
b=0;
if (b >= 100)
b=100;
var c = b / 100;
var d = document.getElementById(objId);
if (d){
if(typeof(d.style.filter)=='string'){d.style.filter='alpha(opacity:'+b+')';}
if(typeof(d.style.KHTMLOpacity)=='string'){d.style.KHTMLOpacity=c;}
if(typeof(d.style.MozOpacity)=='string'){d.style.MozOpacity=c;}
if(typeof(d.style.opacity)=='string'){d.style.opacity=c;}}}
function idToElemId(id) {
return "ttobj"+id;}
function initTooltip(theObj) {
theObj.objId = idToElemId(theObj.internalId);
theObj.anchorLatLng = theObj.point;
var b = document.createElement('span');
theObj.tooltipObject = b;
b.setAttribute('id',theObj.objId);
b.innerHTML = theObj.tooltipText;
var c = document.body;
var d = document.getElementById("pdmarkerwork");
if (d)
c = d;
c.appendChild(b);
b.style.position = "absolute";
b.style.bottom = "5px";
b.style.left = "5px";
b.style.zIndex = 1;
if (theObj.percentOpacity)
theObj.setOpacity(theObj.percentOpacity);
var tempObj = document.getElementById(theObj.objId);
theObj.ttWidth  = tempObj.offsetWidth;
theObj.ttHeight = tempObj.offsetHeight;
c.removeChild(b);
b.style.zIndex = 600000;
b.style.bottom = "";
b.style.left = "";
theObj.map.getPane(G_MAP_FLOAT_PANE).appendChild(b);}
function initDetailWin(theObj, top, left, html) {
theObj.detailId = "detail"+theObj.internalId;
var b = document.createElement('span');
theObj.detailObject = b;
b.setAttribute('id',theObj.detailId);
b.innerHTML = html;
b.style.display = "block";
b.style.position = "absolute";
b.style.top  = top+"px";
if (theObj.rightSide)
b.style.left = left+"px";
else
b.style.right =-left+"px";
b.style.zIndex = 600001;
theObj.map.getPane(G_MAP_FLOAT_PANE).appendChild(b);}
function setTTPosition(theObj) {
var gap = 5;
var map = theObj.map;
var pt  = theObj.getPoint();
var ttPos = latLongToPixel(map, pt, map.getZoom());
var theIcon = theObj.getIcon();
ttPos.y-= Math.floor(theIcon.iconAnchor.y/2);
var rightSide = true;
var bounds = map.getBounds();
var boundsSpan	= bounds.toSpan();
var longSpan = boundsSpan.lng();
var mapWidth = map.getSize().width;
var tooltipWidthInDeg = (theObj.ttWidth+theIcon.iconSize.width+6) / mapWidth * longSpan;
if (pt.lng()+tooltipWidthInDeg > bounds.getNorthEast().lng() && permitLeft)
rightSide = false;
ttPos.y-= Math.floor(theObj.ttHeight/2);
delta = (theIcon.iconSize.width-theIcon.iconAnchor.x)+gap;
if (rightSide)
ttPos.x+= delta;
else
ttPos.x-= delta
theObj.rightSide = rightSide;
theObj.ttLeft = ttPos.x;
theObj.ttTop  = ttPos.y;
if (theObj.tooltipObject){
if (rightSide) {
theObj.tooltipObject.style.left = ttPos.x+"px";
theObj.tooltipObject.style.right = null;}
else {
theObj.tooltipObject.style.left = null;
theObj.tooltipObject.style.right =-ttPos.x+"px";}
theObj.tooltipObject.style.top  = ttPos.y+"px";}}
function makeInterface(a) {
var b = a || window;
b.PdMarker = PdMarker;}
makeInterface();}
PdMarkerNamespace();
