
	function InfoWindow(master)
	{
		var self=this;
		this.init=function()
		{
				var img_ext = (JQ.browser.msie && JQ.browser.version < 7) ? "gif" : "png";
				
				var str= "<div class=\"infowindow\">";
					str+="	<div class=\"iwtabs_wrapper\">";
					str+="		<ul class=\"iwtabs\">";
					str+="			<li id=\"iw_details\" class=\"active_iw\">"+map_translations.details+"</li>";
					str+="			<li id=\"iw_street\">"+map_translations.street_view+"</li>";
					str+="			<li id=\"iw_close\"><img src=\"/nikebasketball/emea/assets/images/maps/info_window_close.gif\" /></li>";
					str+="		</ul>";
					str+="		<div class=\"clearme\"></div>";
					str+="	</div>";
					str+="	<div class=\"infowindow_body\" id=\"infowindow_body\">";
					str+="	</div>";
					str+="	<div class=\"infowindow_tail\">";
					str+="		<img src=\"/nikebasketball/emea/assets/images/maps/info_arrow."+img_ext+"\" />";
					str+="	</div>";
					str+="</div>";
				
				self.div = JQ(str);
				self.street_view_client=new GStreetviewClient();
  				self.offsetY=340;
  				self.offsetX=190;
				JQ(master.map.map.getPane(G_MAP_FLOAT_PANE)).append(self.div);
				
				self.div.find('ul.iwtabs>li').click(function()
				{
					if(	JQ(this).hasClass('active_iw')	)
						return;
					var mode=JQ(this).attr('id').replace('iw_','');
					self.set_mode(mode);
				});
				self.div.find('li#iw_close>img').click(self.hide);
				
				JQ("div.infowindow").click(function(e)
				{
					
				});
				JQ("div.infowindow").hover(
					function(){master.map.map.disableDragging();master.map.map.disableDoubleClickZoom();},
					function(){master.map.map.enableDragging();master.map.map.enableDoubleClickZoom();}
				);
				GEvent.addListener(master.map.map, "click", function(overlay,latlng)
				{
					if(overlay!=null)
						return;
					if(self.is_open)
					{
						if(self.in_range(latlng))
							return;
					}
					self.hide();
				});
		
				GEvent.addListener(master.map.map, "zoomend", function()
				{
					self.zoomChanged();
				});
			
		}
		this.check_street_view=function()
		{
			self.street_view_client.getNearestPanorama(self.currentMarker.getLatLng(), function(response)
			{			
				if(response.code!=200)
					return false;
				
				JQ('li#iw_street').show();
				self.street_response=response;
			});
		}
		this.set_mode=function(mode)
		{
			JQ('div.infowindow_body').empty();
			JQ('li#iw_'+mode).addClass('active_iw');

			if(mode=='details')
			{
				JQ('li#iw_street').removeClass('active_iw');
				JQ('div.infowindow_body').html(		self.render_detail_view()	);
				
				JQ('a#to_here').click(function(){	JQ('a#to_here').addClass('active');	JQ('a#from_here').removeClass('active');	JQ('div.address_label').html(map_translations.start_address);	});
				JQ('a#from_here').click(function(){	JQ('a#from_here').addClass('active');	JQ('a#to_here').removeClass('active');	JQ('div.address_label').html(map_translations.end_address);	});
				JQ('input#iw_address_input').click(function(){JQ(this).focus();});
				
				JQ('input#iw_address_input').keypress(function(e){	if(e.keyCode==13)	self.do_iw_directions();	});
				JQ('div.iw_submit_btn').click(self.do_iw_directions);
			}
			else if(mode=='street')
			{
				JQ('li#iw_details').removeClass('active_iw');
				JQ('div.infowindow_body').html(		self.render_street_view()	);
				var panorama = new GStreetviewPanorama(document.getElementById("pano"));
				panorama.setLocationAndPOV(new GLatLng(self.street_response.Location.lat, self.street_response.Location.lng), null);
			}
		}
		self.do_iw_directions=function()
		{
			var marker=master.results.results[self.currentMarker.id-1];
			var address=marker.street+" "+marker.city+" "+marker.state+" "+marker.zip;
			if(	JQ('a#to_here').hasClass('active')	)
				master.right_col.do_directions_from_iw(	JQ('input#iw_address_input').val(), address	);
			else
				master.right_col.do_directions_from_iw(	address, JQ('input#iw_address_input').val()	);
		}
		self.render_street_view=function()
		{
			var marker=master.results.results[self.currentMarker.id-1];
			var str= "<div class=\"street_view\">";
				str+="	<div class=\"detail_title\">"+marker.title+"</div>";
				str+="	<div class=\"detail_street\">"+marker.street+"</div>";
				str+="	<div class=\"detail_city\">"+marker.city+", "+marker.state+" "+marker.zip+"</div>";
				str+="	<div id=\"pano\" style=\"height:196px;width:345px;\"></div>";
				str+="</div>";
			return str;
		}
		self.render_detail_view=function()
		{
			var marker=master.results.results[self.currentMarker.id-1];
			var str= "<div class=\"detail_view\">";
				str+="	<div class=\"detail_title\">"+marker.title+"</div>";
				str+="	<div class=\"detail_street\">"+marker.street+"</div>";
				str+="	<div class=\"detail_city\">"+marker.city+", "+marker.state+" "+marker.zip+"</div>";
				str+="	<div class=\"detail_phone\">"+marker.phone+"</div>";
				str+="	<div class=\"detail_site\"><a href=\""+marker.site_url+"\" target=\"_blank\" >"+marker.site+"</a></div>";
				str+="	<div class=\"detail_email\"><a href=\"mailto:"+marker.email+"\">"+marker.email+"</a></div>";
				str+="</div>";
				str+="<div class=\"iw_get_directions\">";
				str+="	<div class=\"iw_get_directions_options\">";
				str+="		<span class=\"get_directions_title\">"+map_translations.get_directions+"</span>";
				str+="		<a href=\"#\" id=\"to_here\" class=\"active\">"+map_translations.to_here+"</a> - ";
				str+="		<a href=\"#\" id=\"from_here\">"+map_translations.from_here+"</a>";
				str+="	</div>";
				str+="	<div class=\"address_label\">"+map_translations.start_address+"</div>";
				str+="	<div class=\"address_input\">";
				str+="		<div class=\"address_input_wrapper\"><input type=\"text\" id=\"iw_address_input\"></input></div>";
				str+="		<div class=\"iw_submit_btn\">"+map_translations.map_submit+"</div>";
				str+="		<div class=\"clearme\"></div>";
				str+="	</div>";
				str+="</div>";
			return str;
		}
		this.in_range=function(latlng)
		{
			var obj=JQ("div.infowindow_body");	
			var px=master.map.map.fromLatLngToContainerPixel(latlng);
			var base=master.map.map.fromLatLngToContainerPixel(self.currentMarker.getLatLng());
			var top=base.y-self.offsetY;
			var bot=top+obj.height()+25;
			
			if(px.y<top||px.y>bot)
				return false;
			
			var left=base.x-self.offsetX;
			var right=left+obj.width();
			
			if(px.x<left||px.x>right)
				return false;		
			return true;	
		}
		this.zoomChanged=function()
		{
			if(!self.is_open)
				return;
				
			JQ("div.infowindow").css	({
											top:(master.map.map.fromLatLngToDivPixel(self.currentMarker.getPoint()).y - self.offsetY),
											left:(master.map.map.fromLatLngToDivPixel(self.currentMarker.getPoint()).x - self.offsetX)
										});
		}		
		this.open=function(marker)
		{

			self.goto(marker);
				
			JQ("div.infowindow").css	({
											top:(master.map.map.fromLatLngToDivPixel(marker.getPoint()).y - self.offsetY),
											left:(master.map.map.fromLatLngToDivPixel(marker.getPoint()).x - self.offsetX)
										});
										
			self.currentMarker=marker;
			JQ('li#iw_street').hide();
			self.check_street_view();
			self.show();
			//info.populateContent(marker);
		}
		this.goto=function(marker)
		{
			
										
			var bounds = master.map.map.getBounds();
			var southWest = bounds.getSouthWest();
			var northEast = bounds.getNorthEast();
			var lngSpan = northEast.lng() - southWest.lng();
			var latSpan = northEast.lat() - southWest.lat();
			
			var newlng=parseFloat(marker.getPoint().lng())+parseFloat(lngSpan*(0.22));
			var newlat=parseFloat(marker.getPoint().lat())+parseFloat(latSpan*(0.08));			

			var location=new GLatLng(
						newlat,
						newlng
									);
								
								
			//var point = master.map.map.fromLatLngToPixel(GLatLng, 15)				
			//var newpoint = new GPoint(point.x-135, point.y+31);			
			//var newlocation = master.map.map.fromPixelToLatLng(newpoint, 15);
			
			
        	master.map.map.panTo(location);
        	
        	// pan map so that the bubble is not hidden
        	if (master.map.map.getZoom() > 15)  {
	        	master.map.map.setZoom(15);
	        	master.map.map.panBy(new GSize(-135, 31));
        	}        	        
        	
        	// set static zoom level for search results 
        	
        }		
		this.hide=function()
		{
			JQ("div.infowindow").hide();
			self.is_open=false;
			master.map.map.enableDragging();
			master.map.map.enableDoubleClickZoom();
		}
		this.show=function()
		{
			self.set_mode('details');

			
			JQ("div.infowindow").show();
			self.is_open=true;
		}
			
			
		self.init();
	}
