/*

 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);

	}

}



// GMap extension for walking through PdMarker list

// Note: some overlays are not markers, some may not be PdMarkers



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.x; y = thePoint.y;

			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());

		}

		// needs slop

		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);

	}

}



GMap2.prototype.defaultStateAll = function(){

  var count = getPdMarkerCount(this);

	for (var i = 0; i < count; i++)

    if(this.pdMarkers[i].hoverImage)

		{

      this.pdMarkers[i].onMouseOut(); 

			//alert(i);

		}

}



GMap2.prototype.closeDetailWinAll = function(thisMarker){

  var count = getPdMarkerCount(this);

	for (var i = 0; i < count; i++){

  

    

  	if (this.pdMarkers[i].detailOpen && thisMarker!=this.pdMarkers[i])

  	{

  		this.pdMarkers[i].closeDetailWin();

  		

  	}

  

  }

    

}



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);

	}

}





// PdMarker code





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";



// Globals - careful of multiple maps



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;

PdMarker.prototype = new GMarker(new GLatLng(1, 1));





function addMarkerToMapList(map,marker) {

	try {

		if (map.pdMarkers.length) ;

	}

	catch(e) {

		map.pdMarkers = new Array();

	}

	// add to list

	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 null;

		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) {

	// 		GMarker.prototype.initialize.call(this, 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() {
//prevent map's onclick to get triggered 
if(gEventClick!=null)GEvent.removeListener(gEventClick);

	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-5), (this.ttLeft-5), html);

	PdMarkerAddToExtList(this);

}





PdMarker.prototype.closeDetailWin = function() {
if(searchAround == 1)fClickEvent();
	this.detailOpen = false;

	if (this.detailObject)

	{

		this.setMouseOutEnabled(true);

		this.onMouseOut();

		// GEvent.trigger(this, "mouseout");

	      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;

}



// ***** Private routines *****



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;



	// append to body for size calculations

	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;//-100;

	if (theObj.tooltipObject)

	{

		if (rightSide) {

			theObj.tooltipObject.style.left = (ttPos.x - 5) + "px";

			theObj.tooltipObject.style.right = null;

		}

		else {

			theObj.tooltipObject.style.left = null;

			theObj.tooltipObject.style.right = -(ttPos.x + 5) + "px";

		}

		theObj.tooltipObject.style.top  = (ttPos.y - 5) + "px";

	}

}



function makeInterface(a) {

	var b = a || window;

	b.PdMarker = PdMarker;

}



makeInterface();

}





PdMarkerNamespace();


