


// CityPlug Place Functions
(function($){$.gritter={};$.gritter.options={fade_in_speed:'medium',fade_out_speed:1000,time:6000}
$.gritter.add=function(params){try{return Gritter.add(params||{});}catch(e){var err='Gritter Error: '+e;(typeof(console)!='undefined'&&console.error)?console.error(err,params):alert(err);}}
$.gritter.remove=function(id,params){Gritter.removeSpecific(id,params||{});}
$.gritter.removeAll=function(params){Gritter.stop(params||{});}
var Gritter={fade_in_speed:'',fade_out_speed:'',time:'',_custom_timer:0,_item_count:0,_is_setup:0,_tpl_close:'<div class="gritter-close"></div>',_tpl_item:'<div id="gritter-item-[[number]]" class="gritter-item-wrapper [[item_class]]" style="display:none"><div class="gritter-top"></div><div class="gritter-item">[[image]]<div class="[[class_name]]"><span class="gritter-title">[[username]]</span><p>[[text]]</p></div><div style="clear:both"></div></div><div class="gritter-bottom"></div></div>',_tpl_wrap:'<div id="gritter-notice-wrapper"></div>',add:function(params){if(!params.title||!params.text){throw'You need to fill out the first 2 params: "title" and "text"';}
if(!this._is_setup){this._runSetup();}
var user=params.title,text=params.text,image=params.image||'',sticky=params.sticky||false,item_class=params.class_name||'',time_alive=params.time||'';this._verifyWrapper();this._item_count++;var number=this._item_count,tmp=this._tpl_item;$(['before_open','after_open','before_close','after_close']).each(function(i,val){Gritter['_'+val+'_'+number]=($.isFunction(params[val]))?params[val]:function(){}});this._custom_timer=0;if(time_alive){this._custom_timer=time_alive;}
var image_str=(image!='')?'<img src="'+image+'" class="gritter-image" />':'',class_name=(image!='')?'gritter-with-image':'gritter-without-image';tmp=this._str_replace(['[[username]]','[[text]]','[[image]]','[[number]]','[[class_name]]','[[item_class]]'],[user,text,image_str,this._item_count,class_name,item_class],tmp);this['_before_open_'+number]();$('#gritter-notice-wrapper').append(tmp);var item=$('#gritter-item-'+this._item_count);item.fadeIn(this.fade_in_speed,function(){Gritter['_after_open_'+number]($(this));});if(!sticky){this._setFadeTimer(item,number);}
$(item).bind('mouseenter mouseleave',function(event){if(event.type=='mouseenter'){if(!sticky){Gritter._restoreItemIfFading($(this),number);}}
else{if(!sticky){Gritter._setFadeTimer($(this),number);}}
Gritter._hoverState($(this),event.type);});return number;},_countRemoveWrapper:function(unique_id,e){e.remove();this['_after_close_'+unique_id](e);if($('.gritter-item-wrapper').length==0){$('#gritter-notice-wrapper').remove();}},_fade:function(e,unique_id,params,unbind_events){var params=params||{},fade=(typeof(params.fade)!='undefined')?params.fade:true;fade_out_speed=params.speed||this.fade_out_speed;this['_before_close_'+unique_id](e);if(unbind_events){e.unbind('mouseenter mouseleave');}
if(fade){e.animate({opacity:0},fade_out_speed,function(){e.animate({height:0},300,function(){Gritter._countRemoveWrapper(unique_id,e);})})}
else{this._countRemoveWrapper(unique_id,e);}},_hoverState:function(e,type){if(type=='mouseenter'){e.addClass('hover');var find_img=e.find('img');(find_img.length)?find_img.before(this._tpl_close):e.find('span').before(this._tpl_close);e.find('.gritter-close').click(function(){var unique_id=e.attr('id').split('-')[2];Gritter.removeSpecific(unique_id,{},e,true);});}
else{e.removeClass('hover');e.find('.gritter-close').remove();}},removeSpecific:function(unique_id,params,e,unbind_events){if(!e){var e=$('#gritter-item-'+unique_id);}
this._fade(e,unique_id,params||{},unbind_events);},_restoreItemIfFading:function(e,unique_id){clearTimeout(this['_int_id_'+unique_id]);e.stop().css({opacity:''});},_runSetup:function(){for(opt in $.gritter.options){this[opt]=$.gritter.options[opt];}
this._is_setup=1;},_setFadeTimer:function(e,unique_id){var timer_str=(this._custom_timer)?this._custom_timer:this.time;this['_int_id_'+unique_id]=setTimeout(function(){Gritter._fade(e,unique_id);},timer_str);},stop:function(params){var before_close=($.isFunction(params.before_close))?params.before_close:function(){};var after_close=($.isFunction(params.after_close))?params.after_close:function(){};var wrap=$('#gritter-notice-wrapper');before_close(wrap);wrap.fadeOut(function(){$(this).remove();after_close();});},_str_replace:function(search,replace,subject,count){var i=0,j=0,temp='',repl='',sl=0,fl=0,f=[].concat(search),r=[].concat(replace),s=subject,ra=r instanceof Array,sa=s instanceof Array;s=[].concat(s);if(count){this.window[count]=0;}
for(i=0,sl=s.length;i<sl;i++){if(s[i]===''){continue;}
for(j=0,fl=f.length;j<fl;j++){temp=s[i]+'';repl=ra?(r[j]!==undefined?r[j]:''):r[0];s[i]=(temp).split(f[j]).join(repl);if(count&&s[i]!==temp){this.window[count]+=(temp.length-s[i].length)/f[j].length;}}}
return sa?s:s[0];},_verifyWrapper:function(){if($('#gritter-notice-wrapper').length==0){$('body').append(this._tpl_wrap);}}}})(jQuery);	
	
	
	function setRating(rating) {
		$("#reviewRating").val(rating);
		$("#showRating").css("width", (rating) * 2 + "0%");
	}
	
	function setTxt(txt) {
		$("#ratingtxt").html(txt);
	}
	function cleanTxt() {
		$("#ratingtxt").html('');
	}
	
	
	$(document).ready(function(){
	$('.reviewBodyWriteExtra').hide();
	
	$("#reviewBodyWrite").focus(
		function () {
			$('.reviewBodyWriteExtra').show('fast');
		});
	});
	
	
	
	function GetThis(T, C, U, L)
	{
	var targetUrl = 'http://www.myspace.com/Modules/PostTo/Pages/?' + 't=' + encodeURIComponent(T)
	+ '&c=' + encodeURIComponent(C) + '&u=' + encodeURIComponent(U) + '&l=' + L;
	window.open(targetUrl);
	}
	
		$(document).ready(function(){
			//$("a[rel^='prettyPhoto']").prettyPhoto();
			$("#maplarge").hide();
			
			// PhoneNumbers Format
			
			$(".mapexpand").click(function () {
				load();
				$("#mapsmall").toggle("slow");
			});
			$(".clicknext").click(function () {
				$(".textdesc").toggle('fast');
				return false;
			});
	
			$(".maptransports").click(function () {
			$(this).find('img').toggle("slow");
			
			});
			
			$(".moreinfo").click(function () {						  
				$(this).prev('.description').css("height","auto");
				$(this).hide();
				//$(this).next('.description').toggle();
				return false;
			});
			
			
			$('div.expandable p').expander({
			slicePoint:       1000,  // default is 100
			
			expandText:         '[ more ]', // default is 'read more...'
			
			collapseTimer:    0, // re-collapses after 5 seconds; default is 0, so no re-collapsing
			userCollapseText: '[^]'  // default is '[collapse expanded text]'
			});
			
			$('div.expandableshort p').expander({
			slicePoint:       250,  // default is 100
			expandText:         '[ more ]', // default is 'read more...'
			
			collapseTimer:    0, // re-collapses after 5 seconds; default is 0, so no re-collapsing
			userCollapseText: '[^]'  // default is '[collapse expanded text]'
			});
			
			$(".placepicturesmall").click(function() {
				$("#place-picture-big").hide('fast');
				$("#place-picture-big").attr('src',$(this).attr('longdesc'));
				$("#place-picture-big").show('fast');
			
			});
			$("#place-picture-big").click(function() {
					$("#place-picture-big").hide('fast');
				});
			
			d=new Date();
			$("#spamCheck").val(d.getDate());
			
			$("#contactUsLink").click(function()
			{
			$("#contactUs").toggle('fast');
			return false;
			});	
			
			
			$("#placemenunewsreview").html('').load('/ajax/place.reviews.new.cfm');  
			
			$(document).ready(function() { 
				$(".ttip img[title]").tooltip({
					tip: '#tooltip',
					effect: 'slide'
				}); 
				$("#reviewBodyWrite").tooltip({
					tip: '#tooltiprules',
					effect: 'slide'
				}); 
			});	
				
		});
	
		function voteReview(idElement,reviewUUID, voteValue){
			nocache=Math.random();
			$('#' + idElement).html('loading ....');
			
			$.get( "/ajax/review.vote.cfm", { reviewUUID: reviewUUID, voteValue: voteValue, nocache: nocache },
			  function(data){
				$('#' + idElement).html(data);
			  });
		 }
		 
		
	function HideContent(d) {
	if(d.length < 1) { return; }
	document.getElementById(d).style.display = "none";
	}
	function ShowContent(d) {
	if(d.length < 1) { return; }
	document.getElementById(d).style.display = "block";
	}
	function ReverseContentDisplay(d) {
	if(d.length < 1) { return; }
	if(document.getElementById(d).style.display == "none") { document.getElementById(d).style.display = "block"; }
	else { document.getElementById(d).style.display = "none"; }
	}
	
	
	function onConnected(user_id) {
		$('#fbLoginButton').hide();
		$('#fbUserInfo').show();
		$('#AuthBasic').hide();
		$('#AuthOr').hide();
		$('#AuthBasicAreYou').hide();
		$("#userEmail").val(user_id + '@facekook.com');
		$.get("/fbCreateSession.cfm");
		$.get("/modules/menu.user.pannel.online.cfm?fbNewSession=true", function(data){
			$("#rightUserPannel").html(data);
		});
	} function onNotConnected() { 
		$('#fbUserInfo').hide();
		$('#fbLoginButton').show();
		$('#AuthBasic').show();
		
	}
	
	
	/*
	 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);
		}
	}
	
	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() {
		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();
			// 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;
		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();
