var markerMap=new Object();
var reviewIdMap=new Object();
var favorites=new Object();
var friendFavorites=new Object();
var alreadyRun=0,ignoreMove=0,msg='';			
var outlineHood,outline,outlineWalk1,outlineWalk2;
var toolTip;									
var page=0;
var iconSelected,iconMouseOver,iconSubway,iconLocation,iconStart,iconTransfer,iconFriend,iconHome,iconTransparent;

var typeSubway=0;
var typeBar=1;
var typeRestaurant=2;
var typeAddress=3;
var typeCustom=4;
var typeFriend=5;
var typeHome=6;

var hoodDefault=1;
var oldHoodBar;

var selectedAddress;
var markerTypes=new Array('infoWindow','addressStart','addressEnd','selected','mouseover','subway','location','locationFave','locationFriendFave','locationBoth','transfer','friend','home');

var nowType='',nowView='';
var loadedNear,loadedFar;
var openWindow;
			
function a(txt){if(debug){GLog.write(txt);}}
function copyObject(o) {var c = new Object(); for (var e in o) { c[e] = o[e]; } return c;}

function selHood(){return document.storage.info.hood;}
function selView(){if(nowView!=''){return nowView}else{return selId[chooseView];}}
function selType(){if(nowType!=''){return nowType}else{return selId[chooseType];}}
function viewText(view){
	switch(view){
		case 'iconTap':return 'Notable';break;
		case 'iconNear':return 'Nearby';break;
		case 'iconFavorite':return 'Your favorite';break;
		case 'iconFriend':return 'Your friends favorite';break;
		case 'iconAll':return 'All';break;
	}	
}
function typeText(type){
	switch(type){
		case 'iconBarMap':return 'Bar Map';break;
		//case 'iconRestaurants':return 'Restaurants';break;
		case 'iconSubwayMap':return 'Subways';break;
	}	
}
function reviewTypeNumber(type){
	switch(type){
		case 'iconBarMap':return 1;
		//case 'iconRestaurants':return 2;
	}
}
function getArg(argName,args){
	var argsL=args.toLowerCase();
	argsL=argsL.slice(1).split('&');
	args=args.slice(1).split('&');				
	var r='';
	for (var i = 0; i < args.length; i++) {
	    if (argsL[i].slice(0,argsL[i].indexOf('='))==argName) {
	        r = args[i].slice(args[i].indexOf('=')+1);
	        break;
	    }
	}
	return (r.length>0?unescape(r).split(',') : '');
}		
function argItems(argName) {												
	return(getArg(argName.toLowerCase(),location.search))
}
function addressByReviewId(reviewId){	
	var objAddress=reviewIdMap[reviewId].address;
	return objAddress;
}
function updateHood(objAddress){
	if(!objAddress){objAddress=document.storage.info.selectedAddress;}
	if(objAddress&&objAddress.hoodId){
		objHood=getHoodById(objAddress.hoodId);	
	}else{
		objHood=getNearestHood(map.getCenter());
	}
	showNearestHoodPolyline(objHood);
	getHoodStats(objHood);
	getPics(objHood);
	document.storage.info.hood=objHood;	
}
function updateSideBar(view,type,objHood){	
	//if(type!='iconSubwayMap'){
		type='iconBarMap'; //hack to show bars on subway map now
	    switch(view){
		    case 'iconTap':						
			    getShowTopByHood(objHood,type);break;
		    case 'iconNear':
			    var objAddress=document.storage.info.selectedAddress;
			    if(objAddress){				
				    updateHood();
				    getShowNearby(objAddress,type);		
				    break;
			    }else{return(false)}
		    case 'iconFave':
			    if(userId!=''){getShowFavesByHood(objHood,type);}break;
		    case 'iconFriend':
			    if(userId!=''){getShowFriendFavesByHood(objHood,type);}break;
		    case 'iconAll':
			    getShowAllByHood(objHood,type);	break;
		    default: 
			    alert(view);return(false);
	    }								
    //}
}
var subwayLoaded=new Object();

function pix2Lat(){return(map.getBounds().toSpan().latDegrees/map.getSize().height);}

function subwayMapToLoad(){
	var mapCenter=map.getCenter();
	var latLon=new GLatLng(40.74,-73.99);
	var distance=mapCenter.distanceFrom(latLon);	
	xml="StationsSorted.xml";
	if(distance<3000){
		xml="StationsNear.xml";
	}
	else if(distance<5000){
		xml="StationsFar.xml";
	}
	else{
		xml="StationsFarther.xml";
	}
	return xml;
}
function checkLoadStations(){
    if(!subwayLoaded['all']){
	    var sLoading="Loading subway stations<br /><div style='font-size:10px'>(This may take a moment)</div>";
	    if(isIE()){sLoading+="<div style='clear:left;padding-top:8px;font-size:8px;'>It's much faster with Firefox</div>";}	
	    loading(sLoading);
	    window.setTimeout("loadStationsAll(loadingDone)",100);
	    //loadStationsAll(loadingDone);
	    subwayLoaded['all']=1;
    }
	/*
	var xml=subwayMapToLoad();	
	if(!subwayLoaded[xml]){		
		loading(sLoading);
		window.setTimeout("loadStations(xml,loadingDone)",500);
		subwayLoaded[xml]=1;
	}
	*/	
}
function chooseType(type){
	nowType=type;
	if(type=='iconSubwayMap'){		
		cMap=cMapSubway;
		resetMarkers();
		hideUnusedMarkers();
		if(outlineHood){map.removeOverlay(outlineHood);}
		checkLoadStations();
		$("allSearch").style.display="none";
		$("subwayDirections").style.display="block";
	}else{
		cMap=G_NORMAL_MAP;
		hideMarker('addressStart',0);
		hideMarker('addressEnd',0);
		hideTransferMarkers();		
		hidePath();		
		showNearestHoodPolyline(document.storage.info.hood,1);
		$("allSearch").style.display="block";
		$("subwayDirections").style.display="none";
		updateSideBar(selView(),type,selHood());
		if(userId!=''){$("mapKeyType").innerHTML=typeText(type).substring(0,typeText(type).length-1);}		
		getPics(selHood(),type);
	}
	map.setMapType(cMap);
	nowType='';
	return true;				
}
function chooseView(view){	
	nowView=view;	
	if(selType()=="iconSubwayMap"){
		showInfoBox("Not available when subway is selected.<br>Select either bars or restaurants on the top header and then change your view.");
	}
	else{
		page=0;
		hideError();		
		updateSideBar(view,selType(),selHood());		
		switch(view){
			case 'iconTap':
				nowView='';
				return(true);
				break;
			case 'iconNear':
				if(document.storage.info.selectedAddress){
					var objAddress=document.storage.info.selectedAddress;
					moveMap(objAddress.lat,objAddress.lon);nowView='';return(true);
				}else{showError('Near');nowView='';return(false)}
				break;
			case 'iconFave':											
				if(userId==''){showError("Fave");nowView='';return(false);}else{nowView='';return(true);}
				break;
			case 'iconFriend':
				if(userId==''){showError("Friend");nowView='';return(false);}else{nowView='';return(true);}
				break;
			case 'iconAll':
				nowView='';
				return(true);
				break;
			default: 
				nowView='';
				alert(view);
				return(false);
				break;
		}		
	}
}
function hideToolTip(){toolTip.style.visibility="hidden";}
function hideMarker(type,index){	
    if(markerMap[type]){        
	    if(markerMap[type][index]){		
		    if(markerMap[type][index].visible){
		        var latLon = new GLatLng(1,1);
			    markerMap[type][index].setPoint(latLon);
			    markerMap[type][index].redraw(true);
			    markerMap[type][index].visible=0;			
			    hideToolTip();
		    }
	    }   
    }
}
function redrawMarker(objAddress,newType){
	if(objAddress.type!=newType){		
		hideMarker(objAddress.type,objAddress.index);		
		setMarker(objAddress,newType);		
	}
}


function createMarker(objAddress,noClick){	
	var i=objAddress.index;	
	var type=objAddress.type;	
	latLon = new GLatLng(parseFloat(objAddress.lat),parseFloat(objAddress.lon));
	var marker=new GMarker(latLon,objAddress.icon,noClick);	
	markerMap[type][i]=marker;
	markerMap[type].indexMax=i;
	markerMap[type][i].visible=1;
	markerMap[type][i].address=objAddress;    	
	map.addOverlay(markerMap[type][i]);	
	if(!noClick){
		var clickMarker=function(){									
			if(type=='subway'){
				//showDetails(objAddress,0); //near subways are no longer clickable
			}else{
				//location change picked up by interval timer
				openWindow=1;
				saveHash(markerMap[type][i].address);
			}
		}
		var overMarker=function(){
			hideCenterImg();
			if(markerMap[type][i].address.type!='mouseover'&&markerMap[type][i].address.type!='subway'){
				setMarker(copyObject(markerMap[type][i].address),'mouseover')
			};
			showReviewObject(markerMap[type][i].address,1);
		}
		var outMarker=function(){hideToolTip();writetxt(0);}
		GEvent.addListener(markerMap[type][i],"click",clickMarker);
		GEvent.addListener(markerMap[type][i],"mouseover",overMarker);
		GEvent.addListener(markerMap[type][i],"mouseout",outMarker);		
	}
}
function resetMarkers(){		
	markerMap['location'].indexVisible=0;	
	markerMap['locationFave'].indexVisible=0;
	markerMap['locationFriendFave'].indexVisible=0;
	markerMap['locationBoth'].indexVisible=0;			
	markerMap['addressStart'].indexVisible=0;		
	markerMap['addressEnd'].indexVisible=0;				
} 
function setMarker(objAddress,type){
	var offset,noClick;	
	var icon=markerMap[type].icon;	
	if(type=='infoWindow'||type=='selected'||type=='mouseover'||type=='addressStart'||type=='addressEnd'){index=0;}
	else{
		markerMap[type].indexVisible++;
		index=markerMap[type].indexVisible;		
	}
	objAddress.type=type;
	objAddress.icon=icon;
	objAddress.index=index;	
	if(!markerMap[type][index]){
		if(type=='transfer'){noClick=1}
		createMarker(objAddress,noClick);
	}else{							    	    
		var latLon = new GLatLng(parseFloat(objAddress.lat),parseFloat(objAddress.lon));
		markerMap[type][index].setPoint(latLon);		
		markerMap[type][index].redraw(true);
		markerMap[type][index].visible=1; 		
	}	 
	markerMap[type][index].address=objAddress;
	if(type!=='mouseover'&&type!=='selected'&&type!=='addressStart'&&type!=='addressEnd'&&type!=='transfer'){reviewIdMap[objAddress.reviewId]=markerMap[type][index];}	
}			
function moveToHood(hoodId){
	var hood=deserializeHood(hoods[idMap[hoodId]]);	
	map.panTo(new GLatLng(hood.lat,hood.lon));
}
function setToHood(hoodId,zoom){
	var hood=deserializeHood(hoods[idMap[hoodId]]);		
	moveMap(hood.lat,hood.lon,zoom);	
	mapMove(new GLatLng(hood.lat,hood.lon));
}
function moveMap(lat,lon,zoom){
	a('moveMap');
	var i=ignoreMove;ignoreMove=1;
	//map.panTo(new GLatLng(lat,lon));
	if(!zoom){zoom=map.getZoom();}
	a('gotZoom');
	a(lat+' '+lon+' '+zoom);
	map.setCenter(new GLatLng(lat,lon),zoom,cMap);
	a('setCenter');
	ignoreMove=i;
}									
function checkBounds() {							
	if(!allowedBounds.contains(map.getCenter())){
		var c = map.getCenter();
		var lon = c.lngDegrees;
		var lat = c.latDegrees;
		var maxLon = allowedBounds.getNorthEast().lngDegrees;
		var maxLat = allowedBounds.getNorthEast().latDegrees;
		var minLon = allowedBounds.getSouthWest().lngDegrees;
		var minLat = allowedBounds.getSouthWest().latDegrees;
		if(lon<minLon){lon=minLon;}
		if(lon>maxLon){lon=maxLon;}
		if(lat<minLat){lat=minLat;}
		if(lat>maxLat){lat=maxLat;}
		moveMap(lat,lon);
	}		
}			
function hideCenterImg(){							
	if(centerMark){centerMark.style.display="none";}
}
//failed attempt to offset center
function centerImgOffset(){ 
	if(centerMark){centerMark.style.display="block";}
	else{					
		centerMark=document.createElement("img");
		var mapDiv=$("map");
		var controlBox=$("controlBox");
		centerMark.style.left=((mapDiv.offsetWidth/2)+mapDiv.offsetLeft)+'px';															
		centerMark.style.top=(((mapDiv.offsetHeight-controlBox.offsetHeight)/2)+mapDiv.offsetTop+controlBox.offsetHeight+centerOffset)+'px'
		if(isIE()){centerMark.src="images/blank.gif";centerMark.className="overlayImgIE";}else{centerMark.className="overlayImg";centerMark.src="images/centerMark.png";}
		$("body").appendChild(centerMark);
	}
}
function centerImg(){
	if(centerMark){centerMark.style.display="block";}
	else{					
		centerMark=document.createElement("img");
		var mapDiv=$("map");
		var controlBox=$("controlBox");
		var header=$("topHeader");
		centerMark.style.left=((mapDiv.offsetWidth/2)+wLeft)+'px';
		centerMark.style.top=((mapDiv.offsetHeight/2)+controlBox.offsetHeight+header.offsetHeight+20)+'px';
		if(isIE()){centerMark.src="images/blank.gif";centerMark.className="overlayImgIE";}else{centerMark.className="overlayImg";centerMark.src="images/centerMark.png";}
		$("body").appendChild(centerMark);
	}
}		
function mapMoveStart(){a('mapMoveStart');if(!ignoreMove){centerImg()};hideMarker('mouseOver',0);}
function mapMoveEnd(){hideCenterImg();mapMove();}
var lastShowHoodId=0,lastLatLon;
function mapMoving(){
    var distance;      	
    latLon=map.getCenter();
	if(lastLatLon){distance=latLon.distanceFrom(lastLatLon);}else{distance=301;}	
	if(distance>300){	    
	    lastLatLon=latLon;
        var hood=getNearestHood(latLon);
        if(hood){
            if(lastShowHoodId!==hood.id){
                showNearestHoodPolyline(hood,1);
                lastShowHoodId=hood.id;
            }
        }
    }
}
function updateHoodBar(hood){		
	var hoodBar=$('hoodBar'+hood.id);
	if(oldHoodBar){oldHoodBar.style.fontWeight='normal';oldHoodBar.style.color='#000';}else{loadHoods(hood.burrough);}
	if(hoodBar){hoodBar.style.fontWeight='bold';hoodBar.style.color='#A90000';}			
	oldHoodBar=hoodBar;
}
function mapMove(latLon){
var lastHoodId=0,lastBurrough=0;	
	a('mapMove');
	if(selType()=='iconSubwayMap'){checkLoadStations();}
	hideError();
	if(!ignoreMove){				
		//checkBounds();
		if(!latLon){latLon=map.getCenter();}
		var hood=getNearestHood(latLon);
		if(document.storage.info.hood){lastHoodId=document.storage.info.hood.id}
		if(hood.id!==lastHoodId){			
			page=0;						
			showNearestHoodPolyline(hood);
			getHoodStats(hood);
			getPics(hood);
			//if(selType()!='iconSubwayMap'){
				updateSideBar(selView(),selType(),hood);
			//}					
			if(document.storage.info.hood){lastBurrough=document.storage.info.hood.burrough}
			if(hood.burrough!=lastBurrough){
				loadHoods(hood.burrough);
			}
			document.storage.info.hood=hood;						
		}
		hideMarker('mouseover',0);		
	}				
}
function getNearestHood(latLon){	
	var obj=new Object(),minHood,distance,minDistance=99999;
	for(i=0;i<hoods.length;i++){
		var hood=deserializeHood(hoods[i]);
		var hoodLatLon=new GLatLng(hood.lat,hood.lon);
		distance=latLon.distanceFrom(hoodLatLon);
		if(distance<minDistance){minHood=hood;minDistance=distance;}
	}				
	return(minHood);
}
function hideSubways(){	
	for(var i=0;i<7;i++){		
		hideMarker('subway',i);
	}
	markerMap['subway'].indexVisible=0;
}
function updatePages(count){	
	if(count==0){$("pages").innerHTML=""}
	else{				
		var sPages="";						
		for(var i=0;i<count;i++){
			if(i==page){sPages+="<b style='color:#a90a08'>"+(i+1)+"</b> "}
			else{
				sPages+="<a href=\"javascript:{choosePage("+i+")}\">"+(i+1)+"</a> ";
			}
		}		
		if(page<(count-1)&&count>0){sPages+="<a href=\"javascript:{choosePage("+(page+1)+")}\"> > </a> ";}
		if(page>0&&count>0){sPages="<a href=\"javascript:{choosePage("+(page-1)+")}\"> < </a> "+sPages;}
		$("pages").innerHTML="<div style='font-size:12px'>Page: "+sPages+"</div>";
	}
} 
function showNearestHoodPolyline(hood,force){	
	if(force||(!document.storage.info.hood)||(hood.id!=document.storage.info.hood.id)){		
		//if(selType()!='iconSubwayMap'){			
			getShowHoodPolyline(hood);
		//}
		$("hoodName").innerHTML=hood.name;
		updateHoodBar(hood);	
	}					
}	
function hideError(){
	$("errorFave").style.display="none";
	$("errorFriend").style.display="none";
	$("errorNear").style.display="none";
}
function showError(type){
	$("error"+type).style.display="block";
}
function getAddressType(objAddress){
var type='location';
	if(friendFavorites[objAddress.reviewId]&&favorites[objAddress.reviewId]){
		type='locationBoth';
	}else{
		if(favorites[objAddress.reviewId]){
			type='locationFave';}
		else if(friendFavorites[objAddress.reviewId]){
			type='locationFriendFave';
		}else{
			type='location';
		}
	}
	return type;
}
function moveIcons(objAddresses){
	var objAddress,type;	

	//ensure that mouseover and selected markers are below everything else(should only run once)
	initMouseOverAndSelectedMarkers();

	//delete reviewIdMap;reviewIdMap=new Object();
	resetMarkers();
	
	for(i=0;i<objAddresses.length;i++){		
		objAddress=objAddresses[i];		
		objAddress.html=getInfoTextHTMLFromAddressObject(objAddress);
		objAddress.friendNames=friendFavorites[objAddress.reviewId];		
		type=getAddressType(objAddress);
		setMarker(objAddress,type);				
	}
	hideUnusedMarkers();
}
function hideTransferMarkers(){
	for(var i=0;i<markerMap['transfer'].indexVisible+1;i++){
		hideMarker("transfer",i);
	}
	markerMap['transfer'].indexVisible=0;
}
function hideUnusedMarkers(){	
	for(var i=4;i<markerTypes.length;i++){		
		for(var j=(markerMap[markerTypes[i]].indexVisible+1);j<=markerMap[markerTypes[i]].indexMax;j++){
			hideMarker(markerTypes[i],j);
		}
	}
}
function deserializeCategories(arr){
    var newArr = new Array();       
    for(var i=1;i<arr.length;i++){
        var obj=new Object();
        obj.id=arr[i].split("|")[0];
        obj.name=arr[i].split("|")[1];
        newArr.push(obj);
    }    
    return newArr;
}
function deserializeHoodStats(str){    
    var arr=str.split("^");
    var obj=new Object();
    obj.name=arr[0];
    obj.userCount=arr[1];
    obj.userCountRank=arr[2];
    obj.barsCount=arr[3];
    obj.barsCountRank=arr[4];
    obj.barsRatingAverage=arr[5];
    obj.barsRatingAverageRank=arr[6];
    obj.barsPopular=deserializeAddresses(arr[7].split("@"));
    obj.barsTopRated=deserializeAddresses(arr[8].split("@"));    
    obj.barsCommonCategories=deserializeCategories(arr[9].split("@"));
    return obj;
}
function showRank(title,xml,href,hrefClose,hoodId){
   var script="xml/rankedHoods/"+xml;
	var request = GXmlHttp.create();	
	request.open('GET',script,true);
	request.onreadystatechange = function(){
		if(request.readyState == 4){			
			if(request.status == 200){
				var response= request.responseText;
				var hoods=response.split("@");
				var htm="<div style='font-size:1.2em;font-weight:bold;padding-bottom:5px;'>"+title+"</div>"
				for(var i=0;i<20;i++){
				    var hood=hoods[i].split("|");				    
				    if(hood[1]==hoodId){htm=htm+"<b>";}
				    htm=htm+(i+1)+") <a href="+href+hood[1]+hrefClose+">"+hood[0]+"</a> ("+hood[2]+")<br>"
				    if(hood[1]==hoodId){htm=htm+"</b>";}
				}
				showInfoBox(htm);
			}
	    }
    }    
    request.send(null);
} 
var statOver;
function getHoodStats(objHood){
    var script="xml/hoods/s_"+objHood.xml;
	var request = GXmlHttp.create();		
	request.open('GET',script,true);
	request.onreadystatechange = function(){
		if(request.readyState == 4){			
			if(request.status == 200){			    
				var response= request.responseText;				
				var hs=deserializeHoodStats(response);				
				$("statName").innerHTML=hs.name;
				$("statUserCount").innerHTML="<a href='friendsbrowse.asp?hood="+objHood.id+"'>"+hs.userCount+"</a>";
				$("statUserCountRank").innerHTML="#<a href=javascript:{showRank('Number%20of%20users','userCount.xml','friendsbrowse.asp?hood=','',"+objHood.id+")}>"+hs.userCountRank+"</a>";
				$("statBarsCount").innerHTML="<a href='showresults.asp?hood="+objHood.id+"'>"+hs.barsCount+"</a>";
				$("statBarsCountRank").innerHTML="#<a href=javascript:{showRank('Number%20of%20bars','barCount.xml','javascript:{moveToHood(',')}',"+objHood.id+")}>"+hs.barsCountRank+"</a>";
				$("statBarsRatingAverage").innerHTML=hs.barsRatingAverage;
				$("statBarsRatingAverageRank").innerHTML="#<a href=javascript:{showRank('Average%20user%20rating','AverageRating.xml','javascript:{moveToHood(',')}',"+objHood.id+")}>"+hs.barsRatingAverageRank+"</a>";
				$("statBarsPopular").innerHTML="";		
				statOver=new Array();var o=-1,sAnchor;
				for(var i=0;i<hs.barsPopular.length;i++){				    
				    var address=hs.barsPopular[i];				    
				    var li=document.createElement("li");				    				    
				    statOver.push(getMouseOver(address));o++;    
				    sAnchor="<a href='reviews2show.asp?show="+address.reviewId+"' onmouseover=writetxt(statOver["+o+"]) onmouseout='writetxt(0)'>"+address.name+"</a>";				    
				    li.innerHTML=sAnchor;
				    $("statBarsPopular").appendChild(li);
				}								
				$("statHighestRatedBars").innerHTML="";
				for(var i=0;i<hs.barsTopRated.length;i++){
				    var address=hs.barsTopRated[i];
				    var li=document.createElement("li");				    				    
				    statOver.push(getMouseOver(address));o++;
                    sAnchor="<a href='reviews2show.asp?show="+address.reviewId+"' onmouseover=writetxt(statOver["+o+"]) onmouseout='writetxt(0)'>"+address.name+"</a>";
				    li.innerHTML=sAnchor;
				    $("statHighestRatedBars").appendChild(li);
				}								
				$("statMostCommonCategories").innerHTML="";				
				for(var i=0;i<hs.barsCommonCategories.length;i++){				    
				    var li=document.createElement("li");
				    var anchor=document.createElement("a");
				    anchor.href="showresults.asp?hood="+objHood.id+"&type=1&prop="+hs.barsCommonCategories[i].id;
				    anchor.innerHTML=hs.barsCommonCategories[i].name;
				    li.appendChild(anchor);
				    $("statMostCommonCategories").appendChild(li);
				}								
			}
        }
    }
    request.send(null);
}
function getPics(objHood,type){			
var script;		
	if(!objHood){objHood=document.storage.info.hood}
	if(!type){type=selType();}
	switch(type){
		case 'iconBarMap':
			script="xml/pics/bars/pb_"+objHood.xml;break;
		//case 'iconRestaurants':
		//	script="xml/pics/restaurants/pr_"+objHood.xml;break;
	}		
	if(script){
		var request = GXmlHttp.create();	
		request.open('GET',script,true);
		request.onreadystatechange = function(){
			if(request.readyState == 4){			
				if(request.status == 200){
					var response= request.responseText;				
					var pics=response.split('@');												
					$("pictureSideBar").innerHTML=""
					var divPics=$("pictureSideBar");													
					for(i=1;i<pics.length;i++){
						if(i>8){break};
						pic=pics[i].split('|');
						var div=document.createElement("div");	
						div.id="img_"+pic[0];
						div.style.backgroundImage='url('+pic[2]+'wide/'+pic[1]+')';
						div.className = "picture";
						div.onmouseover=function(){this.style.cursor='pointer';this.style.borderColor="#fff";}
						div.onmouseout=function(){this.style.cursor='auto';this.style.borderColor="#ffe"};
						var anchor=document.createElement("a");
						anchor.href="reviews2show.asp?show="+pic[0];
						anchor.appendChild(div);
						divPics.appendChild(anchor);
					}
				}
			}
		};			
		request.send(null);
	}
}
function getShowHoodPolyline(hood){
	var request = GXmlHttp.create();
	a('xml/hoods/b_'+hood.xml);
	request.open('GET','xml/hoods/b_'+hood.xml,true);
	request.onreadystatechange = function(){
		if (request.readyState == 4){
			if (request.status == 200){
				var points = [];
				var xml = request.responseXML;
				var line = xml.documentElement.getElementsByTagName("PolyLine");
				if (line.length > 0) {
					line = line[0];
					var pointElements = line.getElementsByTagName("Point");
					for (var i = 0; i < pointElements.length; ++i){
						var p = new GLatLng(pointElements[i].getAttribute("lat"),pointElements[i].getAttribute("lon"));
						points.push(p);
					}
					if(outlineHood){map.removeOverlay(outlineHood);}
					outlineHood=new GPolyline(points,'#3333CC',5,.6);
					map.addOverlay(outlineHood);
				}
			}	
		}
	};			
	request.send(null);
}
function noListings(type,explain,title,addendum,name,objHood){
	if(objHood){
		$("headLocations").innerHTML=title+" "+type.toLowerCase()+" in "+objHood.prep+" "+objHood.name;
		$("nearbyLocations").innerHTML="<li></li>"+explain+" "+type.toLowerCase()+" in "+objHood.name+".<br>"+addendum;
	}else{		
		$("headLocations").innerHTML=type+" nearby "+name;
		$("nearbyLocations").innerHTML="<li></li>There are no "+type.toLowerCase()+" listed within 1.5 miles of this address.";
	}
	if(type=="restaurants"){
		$("nearbyLocations").innerHTML+="<br>We're working on adding more restaurants to our database."	;
	}  
	updatePages(0);
}
function getShowTopByHood(objHood,type){		
	var str1="We haven't filed any notable "	
	var str2="Notable "
	var str3="Still busy working on adding restaurants into the mix. As of now we haven't filed any notable"	
	var script;
	switch(type){
		case 'iconBarMap':
			script="xml/picks/bars/tb_"+objHood.xml;break;
		//case 'iconRestaurants':
		//	script="xml/picks/restaurants/tr_"+objHood.xml;break;
	}	
	var imgType="Tap"	
	getShow(script,typeText(type),imgType,str1,str2,str3,'',objHood)
}
function getShowFriendFavesByHood(objHood,type){
	var str1="No friends have saved favorite"
	var str2="Your friends' favorite"
	var str3="<a href='friendsinvite.asp'>Add more friends</a> and encourage them to track their favorite places."
	var script;
	switch(type){
		case 'iconBarMap':
			script="xml/friendFaves/bars/u"+userId+"h"+objHood.id+".xml";break;			
		//case 'iconRestaurants':
		//	script="xml/friendFaves/restaurants/u"+userId+"h"+objHood.id+".xml";break;
	}
	var imgType="Friend"
	getShow(script,typeText(type),imgType,str1,str2,str3,'',objHood)
}
function getShowAllByHood(objHood,type){
	var str1="We have no ";
	var str2="All the ";
	var str3="";	
	var script;
	switch(type){
		case 'iconBarMap':
			script="xml/allByHood/bars/ab_"+objHood.xml;break;
		//case 'iconRestaurants':
		//	script="xml/allByHood/restaurants/ar_"+objHood.xml;break;
	}			
	var imgType="All"
	getShow(script,typeText(type),imgType,str1,str2,str3,'',objHood)
}
function getShowFavesByHood(objHood,type){
	var str1="You've saved no favorite "
	var str2="Your favorite"
	var str3="You can save favorites by selecting <i>View Review</i> and then clicking <i>Save as favorite</i>."
	var reviewType=reviewTypeNumber(type);
	var script="ajaxGetFavorites.aspx?hoodid="+objHood.id+"&reviewtype="+reviewType;
	var imgType="Fave"
	getShow(script,typeText(type),imgType,str1,str2,str3,'',objHood)
}
function getShowNearby(objAddress,type){
	var str1="We have no ";
	var str2="Nearby ";
	var str3="";
	var imgType="Near"
	var reviewType=reviewTypeNumber(type);
	if(objAddress.reviewId>0){					
		script="ajaxGetNearby.aspx?reviewId="+objAddress.reviewId+"&reviewtype="+reviewType;
	}else{		
		script="ajaxGetNearby.aspx?lat="+objAddress.lat+"&lon=" +objAddress.lon+"&reviewType="+reviewType;						
	}								
	getShow(script,typeText(type),imgType,str1,str2,str3,objAddress.name);		
}
function getShow(script,typeText,imgType,str1,str2,str3,name,objHood){	
	loading('Please wait...');
	var request = GXmlHttp.create();
	request.open('GET',script,true);	
	request.onreadystatechange = function(){
		if (request.readyState == 4){
			if (request.status == 200){			
				loadingDone();	
				var results=request.responseText;
				var groups=results.split('^');				
				var allLocations=groups.join('').split('@');				
				var objAllLocations=deserializeAddresses(allLocations);
				var objLocations=new Array();
				for(i=0;i<groups.length;i++){objLocations.push(deserializeAddresses(groups[i].split('@')));}
				document.storage.info.sideBarLocations=objLocations;
				moveIcons(objAllLocations);
				if(allLocations.length==1){noListings(typeText,str1,str2,str3,name,objHood);}
					else{							
						if(objHood){
							var strTitle=str2+" "+typeText+" in "+objHood.prep+" "+objHood.name;
						}else{
							var strTitle=typeText+" listed nearby "+name;
						}
						showSideBar(objLocations[page],strTitle);
						updatePages(groups.length);
					}
			}
			else{								
				loadingDone();
				noListings(typeText,str1,str2,str3,name,objHood);				
				resetMarkers();
				hideUnusedMarkers();
			}
			cornerImg(imgType);
		}
	};			
	request.send(null);		
}
function cornerImg(type){
	$("cornerImg").src=oImagesOver['icon'+type].src;	
}
function getNearbySubways(objAddress){
	var request = GXmlHttp.create();
	var str;
	request.onreadystatechange = function() {
		if (request.readyState == 4){						
			if (request.status == 200){																	
				var subways = request.responseText.split('@');				
				hideSubways();				
				showSubways(subways);
			}
			else{msg.innerHTML="Couldn't get nearest subways.";}			
		}
	};				
	if(objAddress.reviewId>0){										
		request.open("GET", "ajaxGetNearestsubways.aspx?reviewId="+objAddress.reviewId);
	}else{		
		request.open("GET", "ajaxGetNearestsubways.aspx?lat="+objAddress.lat+"&lon=" +objAddress.lon);					
	}								
	request.send(null);				
}
function showSubways(subways){
	var lineHTML,html,addressDetails,j,i;
	var lat,lon,stopId,stopName,line,miles;
	lineHTML='';html='';j=1;					
	for(i=1;i<subways.length;i++){
		addressDetails=subways[i].split('|');
		lat=addressDetails[0];lon=addressDetails[1];stopName=addressDetails[2];stopId=addressDetails[3];line=addressDetails[4];miles=addressDetails[5];
		if(i<(subways.length-1)){nextStopId=subways[i+1].split('|')[3];}else{nextStopId=0;}
		lineHTML=lineHTML+'<img height=23 width=23 src=images/subwaysymbols/'+line+'.gif>';
		if((i+1==subways.length)||(stopId!=nextStopId)){
			html='<span class=stationName>'+stopName+'</span><br><span class=distance>Distance: <span style=color:#22C>'+miles+'</span> miles<br>';
			var objAddress=new Object();
			objAddress.lat=lat;objAddress.lon=lon;objAddress.html=html+lineHTML;objAddress.addressType=typeSubway;
			//objAddress.name=stopName+" <span style='font-size:10px;'>(<span style='color:#22C'>"+miles.substring(0,4)+"</span> miles)</span>";
			objAddress.name=objAddress.html;
			setMarker(objAddress,'subway');
			html='';lineHTML='';
		}																											
	}				
}
function getHoodById(id){
	a('getHoodById'+id+' '+idMap[id]);
	var hood=hoods[idMap[id]];
	var obj=deserializeHood(hood);					
	return obj;
}
function getAddressObjectFromQueryString(){
	return getAddressObject(4,unescape(argItems('address')),unescape(argItems('lat')),unescape(argItems('lon')),unescape(argItems('name')),unescape(argItems('reviewId')),unescape(argItems('crossStreets')),unescape(argItems('quickImage')),unescape(argItems('quickImageDirectory')),unescape(argItems('html')),'',0,0,'',unescape(argItems('customDescription')));
}
function loadHoods(burrough){
	var hood,sHoods='';sHoodsHTML='';
	var hoodDiv=$("hoodBar");	
	for(var i=0;i<hoods.length;i++){
		hood=deserializeHood(hoods[i]);
		if(hood.burrough==burrough&&hood.display==1){ 
			if(sHoodsHTML!=''){sHoodsHTML+=' | ';sHoods+=' | ';}			
			sHoodsHTML+="<a id='hoodBar"+hood.id+"' style='text-decoration:none;' href='javascript:{moveToHood("+hood.id+")}'>"+hood.shortName+"</a>";			
		}
	}	
	if(hoodDiv.innerHTML.length==0){
		hoodDiv.innerHTML=sHoodsHTML;
		//hoodDiv.innerText=sHoods; 
	}else{										
		hoodDiv.innerHTML=sHoodsHTML;
	}	
}
function hideAddress(){
    hideMarker('mouseover',0);
    writetxt(0);
}
function showAddress(page,i){
	var html;
	var objAddress=document.storage.info.sideBarLocations[page][i];
	setMarker(objAddress,'mouseover');
	showReviewObject(objAddress);	
	showToolTipAddress(objAddress);
}
function showToolTipAddress(objAddress,marker){	
	var sFriends='';
	if(objAddress.friendNames){sFriends='<br>['+objAddress.friendNames+']';}
	var content = "<div style='max-width:200px;'><b style='font-size:14px;'>"+objAddress.name+"</b>"+sFriends+"</div>";	
	if(!marker){marker=markerMap['mouseover'][0];}
	showToolTip(marker,content);
}
function showToolTip(marker,text){
	toolTip.innerHTML = "<div style='background-color:#fff;border:1px solid #000;padding:2px;'>"+text+"</div>";
	var point=map.getCurrentMapType().getProjection().fromLatLngToPixel(map.getBounds().getSouthWest(),map.getZoom());
	var offset=map.getCurrentMapType().getProjection().fromLatLngToPixel(marker.getPoint(),map.getZoom());
	var anchor=marker.getIcon().iconAnchor;
	var width=marker.getIcon().iconSize.width;
	var pos = new GControlPosition(G_ANCHOR_BOTTOM_LEFT, new GSize(offset.x - point.x - anchor.x + width+2,- offset.y + point.y-12)); 
	pos.apply(toolTip);
	toolTip.style.visibility="visible";
}
function initFavorites(){
	var i;
	var request = GXmlHttp.create();				
	var script='ajaxGetFavorites.aspx';
	request.open('GET',script,true);	
	request.onreadystatechange = function(){
		if (request.readyState == 4){
			if (request.status == 200){			    
				results=request.responseText.split("|");
				for(i=0;i<results.length;i++){
					favorites[results[i]]=1;					
				}								
			}
		}
	};			
	request.send(null);				
}
function initFriendFavorites(){
	var id,friends;
	var request = GXmlHttp.create();				
	var script='xml/friendFaves/u'+userId+'.xml'	
	request.open('GET',script,true);	
	request.onreadystatechange = function(){
		if (request.readyState == 4){
			if (request.status == 200){				
				var results = request.responseText.split("@");
				for(i=0;i<results.length;i++){
					id=results[i].split('|')[0];
					friends=results[i].split('|')[1];
					friendFavorites[id]=friends;
				}				
			}
		}
	};			
	request.send(null);				
}


function getTile(a, b){
    var sTile = '000000';
    sTile += (parseInt(a.y.toString(2) * 2) + parseInt(a.x.toString(2)));
    sTile = sTile.substring(sTile.length - b, sTile.length);
    s = 'http://a'
    s += sTile.substring(sTile.length-1, sTile.length);
    s += '.ortho.tiles.virtualearth.net/tiles/a'
    s += sTile;
    s += '.jpeg?g=1';
    return s;
};

// Method to get text from an XML DOM object
function getTextFromXML( oNode, deep ) {
    var s = "";
    var nodes = oNode.childNodes;

    for (var i = 0; i < nodes.length; i++) {
        var node = nodes[i];
        if (node.nodeType == Node.TEXT_NODE) {
            s += node.data;
        } else if (deep == true && (node.nodeType == Node.ELEMENT_NODE || node.nodeType == Node.DOCUMENT_NODE
                                       || node.nodeType == Node.DOCUMENT_FRAGMENT_NODE)) {
            s += getTextFromXML(node, true);
        };
    }
    ;
    return s;
}

function centerMap(lat,lon){
//called by subway directions only
	moveMap(lat,lon);
}
function showDetails(objAddress,showNear){
var html, hood,marker;	
	a('showDetails_start');			
	selectedAddress=objAddress;	
	if(objAddress.hoodId){hood=getHoodById(objAddress.hoodId);}else{hood=getNearestHood(new GLatLng(objAddress.lat,objAddress.lon));}	
	var zoom=0;	
	if(map.getZoom()){
		zoom=map.getZoom()
	}
	if(zoom<16){			
		map.setCenter(new GLatLng(objAddress.lat,objAddress.lon),16,cMap)
	}
	else{			
		if((!document.storage.info.hood)||document.storage.info.hood.id!=hood.id){
			map.setCenter(new GLatLng(objAddress.lat,objAddress.lon));
		}
	}		
	if(objAddress.addressType==typeFriend){		
		objAddress.type='friend';
		setMarker(objAddress,'infoWindow');
		marker=markerMap['infoWindow'][0];
	}else if(objAddress.addressType==typeHome){			
		objAddress.type='home';
		setMarker(objAddress,'infoWindow');
		marker=markerMap['infoWindow'][0];
	}else if(objAddress.addressType==typeSubway){		
		objAddress.type='subway';
		setMarker(objAddress,'infoWindow');
		marker=markerMap['infoWindow'][0];
	}else{				    
		getNearbySubways(objAddress);
		var objSelected=copyObject(objAddress);
		objAddress.html=getInfoTextHTMLFromAddressObject(objAddress);
		setMarker(objSelected,'selected');
		marker=markerMap['selected'][0];
		document.storage.info.selectedAddress=objAddress;		
		a('showDetails hoodid:'+(objAddress.hoodId));	
		showNearestHoodPolyline(hood);
		document.storage.info.hood=hood;		
		if(showNear){if(chooseView('iconNear')){onSelectImg('iconNear',chooseView);}}		
		//if((objAddress.reviewId)&&(objAddress.reviewId!=-1)){objAddress.index=reviewIdMap[objAddress.reviewId].index};
	}			
	if(!marker){marker=markerMap[objAddress.type][objAddress.index];}
	document.title="New York City Bar and Subway Map"
	if(objAddress.name){document.title+=" - "+objAddress.name;}
	marker.openInfoWindowHtml(objAddress.html);	
	a('showDetails_done:'+objAddress.reviewId)
}
function choosePage(i){
	page=i;	
	var objLocations=document.storage.info.sideBarLocations;	
	showSideBar(objLocations[page]);
	updatePages(objLocations.length);
}
function chooseSearchSubway(i,startOrDest){
	hideInfoBox();
	var objAddress=document.storage.info.searchChoices[i];
	showSelect(objAddress,startOrDest);
}
function chooseSearch(i){
	a('chooseSearch_Start');
	hideInfoBox();
	var objAddress=document.storage.info.searchChoices[i];	
	//map.setCenter(new GLatLng(objAddress.lat,objAddress.lon),map.getZoom(),cMap);
	//showDetails(objAddress,0);		
	saveHash(objAddress);
	//updateSideBar(selView(),selType(),selHood());				
	a('chooseSearch_Done');
}
function chooseAddress(page,i){
	a('chooseAddress');
	var objAddress=document.storage.info.sideBarLocations[page][i];
	if(selView()=='iconNear'){page=0;} //reset page if selecting 
	hideMarker('mouseover',0);
	//showDetails(objAddress,0);
	//hood=getHoodById(objAddress.hoodId);
	//getHoodStats(hood);
	//getPics(hood);
	//updateSideBar(selView(),selType(),hood);	
	//alert(objAddress.name);
	saveHash(objAddress);
	a('chooseAddress_Done');	
} 
function showSideBar(objAddresses,title){
	var addressDetails,html='';
	html="";
	for(var i=0;i<objAddresses.length;i++){
		objAddress=objAddresses[i];
		html+="<li><a onmouseout=hideAddress() onmouseover=showAddress("+page+","+i+") href=javascript:{chooseAddress("+page+","+i+")}>"+objAddress.name+"</a>";
		if(objAddress.pick=='True'){html+="<img height=14 width=14 src='images/star_14x14.gif'>";}
		html+='</li>';
	}	
	var box=$("nearbyLocationsBox");
	if(objAddresses.length>0){box.style.display="block";}else{box.style.display="none";}
	$("nearbyLocations").innerHTML=html;
	if(title){$("headLocations").innerHTML=title;}
}			
function saveFavorite(reviewId){
	var objAddress=addressByReviewId(reviewId);
	location.href="ajaxSaveFavorite.aspx?reviewid="+objAddress.reviewId;
	$('save'+objAddress.reviewId).style.display='none';
	$('remove'+objAddress.reviewId).style.display='block';
	favorites[objAddress.reviewId]=1;
	if(objAddress.type=='locationFriendFave'){
		redrawMarker(objAddress,'locationBoth');
	}else{
		redrawMarker(objAddress,'locationFave');
	}
}
function removeFavorite(reviewId){				
	var objAddress=addressByReviewId(reviewId);	
	location.href="ajaxSaveFavorite.aspx?remove=1&reviewid="+objAddress.reviewId;
	$("remove"+objAddress.reviewId).style.display="none";
	$("save"+objAddress.reviewId).style.display="block";
	delete favorites[objAddress.reviewId];
	if(objAddress.type=='locationBoth'){
		redrawMarker(objAddress,'locationFriendFave');
	}else{
		redrawMarker(objAddress,'location');
	}
}
var map2;
function fixListing(reviewId){
    var objAddress=addressByReviewId(reviewId);
	var mapDiv=$("map");
	mapDiv.appendChild($("fixReview"));
	$("fixReview").style.left="150px";		
	$("fixReview").style.top="100px"
	$("fixReview").style.display="block";

    //$("fixReview").style.top=($("map").style.top+250)+"px";
    //$("fixReview").style.left=($("map").style.top+$("map").style.left+100)+"px";            
}

function getInfoTextHTMLFromAddressObject(objAddress){					
	var type=objAddress.addressType;	
	var infoText="";			
	infoText+="<div class='popUp'>"
	if(objAddress.customDescription){
		if(objAddress.customDescription!==""){
			if(objAddress.customDescription!=="undefined"){
				infoText+="<div class='customDescription'>"+objAddress.customDescription+"</div>";}
			}
		}
	if(!(type==typeSubway||type==typeFriend||type==typeHome)){
		if(objAddress.preHtml){
		    infoText+=objAddress.preHtml;}
		if(objAddress.quickImage!==''){			
		    infoText+="<img class='picture' src='"+objAddress.quickImageDirectory+"small/"+objAddress.quickImage+"' />";}			
		if(objAddress.name!==""){
			infoText+="<div class='h1'>"+objAddress.name+"</div>";
			if(objAddress.address!==""){
			    infoText+="<div class='h2'>"+objAddress.address+"</div>";}
		}else{			
			if(objAddress.address!==''){
				infoText+="<div class='h1'>"+unescape(objAddress.address).split(",")[0]+"</div>";
				infoText+="<div class='h2'>" +unescape(objAddress.address).split(",")[1]+"</div>";
			}
		}										
		if(objAddress.crossStreets!==''&&(objAddress.crossStreets)){infoText+='('+objAddress.crossStreets+')';}
		if(objAddress.quickDescription!==''&&(objAddress.quickDescription)){infoText+="<div class='content'>"+objAddress.quickDescription+"</div>";}	
		infoText+="<div style='padding-top:5px;width:180px;'>";
		if(objAddress.reviewId>0){
			infoText+="<div style='float:left'>"+getButton("Review","reviews2show.asp?show="+objAddress.reviewId,1)+"</div>";
			if(userId!==""){
			    var sHideRemove='',sHideSave='';
				if(favorites[objAddress.reviewId]){
				    sHideRemove="display:none;";
			    }else{
                    sHideSave="display:none;";
				}				
				var over="Your favorites show up on the map in a different color for you and your friends.";
				infoText+="<div id='save"+objAddress.reviewId+"' style='float:left;"+sHideRemove+"'>"+getButton("Save favorite","javascript:{saveFavorite("+objAddress.reviewId+")}",1)+"</div>";
				infoText+="<div id='remove"+objAddress.reviewId+"' style='float:left;"+sHideSave+"'>"+getButton("Remove favorite","javascript:{removeFavorite("+objAddress.reviewId+")}",1,"remove"+objAddress.reviewId)+"</div>";
				//infoText+=getButton("Fix Listing","javascript:{fixListing("+objAddress.reviewId+")}",1)+"</div>";
			}
		}		
		if(objAddress.customDescription==''){
			var over="Click to add a custom description of this location and return a link you can email to friends.";
			infoText+="<div style='float:left;clear:left;width:45px;'>"+getButton("Link","javascript:{createLink()}",1,"getLink",over)+"</div>";
			//infoText+=" <a style='margin-left:10px' onmouseover="+over+" onmouseout=writetxt(0) href='javascript:{createLink()}'>Get link</a>";
		}
		if((objAddress.name!==document.directions.addressEnd.value&&objAddress.name!=='')||(objAddress.address!==document.directions.addressEnd.value)){
			var over="Get subway directions and estimated travel time.";
			infoText+="<div style='float:left'>"+getButton("Directions","javascript:{getDirections()}",1,"getDirections",over)+"</div>";
		}
		var never;
		if(objAddress.reviewId>0&&never){
			var over="Add this bar to an itinerary you can print out, email to others or save and share.";
			infoText+="<div style='float:left'>"+getButton("Bar crawl","javascript:{addToCrawl("+objAddress.reviewId+")}",1,"addToCrawl",over)+"</div>";			
		}
		if($("admin")){
			infoText+=getAdminButtons(objAddress);
        }
		infoText+="</div>";
	}
	else{
		infoText+="<div class='h1'>"+unescape(objAddress.address).split(',')[0]+"</div><b>"+unescape(objAddress.address).split(',')[1]+"</b>";
	}
	infoText+="</div>";	
	return infoText;
}
function getCrawl(){
	var crawl=readCookie("crawl");
	var objCrawl=crawl.toJSONString();
	return objCrawl;
}
function putCrawl(objCrawl){
	var crawl=objCrawl.toJSONString();
	setCookie("crawl",crawl,7)
}
function addToCrawl(reviewId){
	var crawl=readCrawlFromCookie();	
	if(crawl.length>0){
	}else{
		var icon=getLetterIcon(i);	
		$("crawlSideBar")
	}
}
function resetAlreadyRun(){alreadyRun=0;loadingDone();}
function checkAddress(strAddress,reviewId,customDescription){	    
	var qry,objChoice;	
	alreadyRun=1;
	var clear=window.setTimeout("resetAlreadyRun()",4000);
	var request = GXmlHttp.create();	
	if(reviewId){qry="reviewid="+reviewId;}
		else{		    
		    if(strAddress.split(",").length>1){		        
		        qry="address=" + escape(strAddress)
		    }
		    else{
		        qry="address=" + escape(strAddress) + "&burrough=" + escape(document.closestSubways.burrough.value);    
		    }
    }
	request.open("GET", "ajaxLookupAddress.aspx?"+qry,1);	
	loading("Loading...");	
	request.onreadystatechange = function() {
		if (request.readyState == 4){
			clearTimeout(clear);
			alreadyRun=0;msg.innerHTML='';
			if (request.status == 200){											
				a("checkAddress_found");
				loadingDone();
				var messageText;
				var response = request.responseText;
				var arrAddresses=response.split('@');							
				if(arrAddresses.length==1){messageText=response;} //error message
				else{												    
					var objChoices=deserializeAddresses(arrAddresses);
					var street=trimAll(objChoices[0].address.toLowerCase().split(',')[0].replace(".",""));
					var searchStreet=trimAll(strAddress.toLowerCase().split(',')[0].replace(".",""));																		
					if(reviewId||street==searchStreet||objChoices[0].address.toLowerCase()==strAddress){																	
						objChoice=objChoices[0];						
						if(customDescription){objChoice.customDescription=customDescription;}							
						if(map.getZoom()){
							var zoom=map.getZoom()
						}else{						
							var zoom=15;
						}								
						
						a("checkAddress_setCenter");	
						var latLon=new GLatLng(40.71566,-73.9842);
						map.setCenter(latLon,15,cMap);
						
						//var latLon=new GLatLng(objChoice.lat,objChoice.lon);
						//alert(objChoice.lat+' '+objChoice.lon);											
						//map.setCenter(latLon,zoom,cMap);
						a("checkAddress_setCenter_Done");
						//showDetails(objChoice,0);																		
						saveHash(objChoice);
						//updateSideBar(selView(),selType(),selHood());	
						a('checkAddress_done');
						return;
					}
					else{
						if(arrAddresses.length>3){messageText='<b>Which did you mean?</b><br>';}else{messageText='<b>Did you mean?</b><br>';}
						document.storage.info.searchChoices=objChoices;
						for(i=0;i<objChoices.length;i++){
							objChoice=objChoices[i];
							messageText=messageText+"<a href=javascript:{chooseSearch("+i+")}>"+objChoice.name+" <i>"+objChoice.address+"</i></a><br>";
						}
					}
				}							
				showInfoBox(messageText);
			} 
			else{							
				loadingDone();
				showInfoBox("Sorry. We didn't recognize that address.<br>Check spelling and incude number and full street name.<br><i>example: 101 E. 3rd St.</i>");
			}
		}
	};
	request.send(null);
}

function getLink(){																
	//var objAddress=document.storage.info.selectedAddress;		
	var objAddress=selectedAddress;
	objAddress.customDescription=escape(document.addName.addressName.value);	
	saveHash(objAddress);
	hideInfoBox();
	/*
	if(obj.reviewId&&obj.reviewId!=-1){qry="?reviewid="+obj.reviewId+"&customDescription="+escape(customDescription);}
	else{
		qry='?lat='+obj.lat+'&lon='+obj.lon;
		if(obj.address){qry+='&address='+escape(obj.address);}
		if(obj.name){qry+='&name='+obj.name;}
		if(obj.quickImage){qry+='&quickImage='+obj.quickImage;}
		if(obj.quickImageDirectory){qry+='&quickImageDirectory='+obj.quickImageDirectory;}
		if(obj.crossStreets){qry+='&crossStreets='+obj.crossStreets;}
		if(obj.html){qry+='&html='+obj.html;}
		if(customDescription){qry+='&customDescription='+escape(customDescription);}					
	}
	*/
	//var loc='http://'+window.location.host+window.location.pathname;
	//window.location=loc;
}	
function createLink(){
	var text="<div class=createLink><b>Create link</b><br>Use this feature to create a permalink to this location that you can then use to email to a friend or post to your site.<br>";
	text+="<br>Caption for this address:&nbsp (optional) <form name=addName><input onkeypress='if(event.keyCode==13){getLink();return false;}' type=text name=addressName size=40>&nbsp <a href='javascript:{getLink()};'><b>Get Link</b></a></form></div>";
	showInfoBox(text);
}		
function getLetterIcon(i){
	var icon=new GIcon();
	icon.image = "images/letters/a.gif";
	return icon
}
function getIcon(image,shadow,transparent,iconSize,iconAnchor,shadowSize,infoWindowAnchor,imageMap){	
	var icon=new GIcon();
	icon.image = image;
	if(!isIE()){icon.imageMap=imageMap;}	    	        
    if(shadow){icon.shadow = shadow};
    icon.iconSize = iconSize;
    icon.iconAnchor = iconAnchor;
    icon.transparent = transparent;
    if(shadow){icon.shadowSize = shadowSize;}
    //icon.imageMap=imageMap
    icon.infoWindowAnchor = infoWindowAnchor;		    
	return icon;
}
function initIconClasses(){		
	var imageMap=[0,5,5,0,10,5,5,10];
	iconLocation=getIcon("images/iconWhite_10x10.gif",false,"images/iconClear_10x10.png",new GSize(10,10),new GPoint(5,5),new GSize(10,10),new GPoint(5,5),imageMap);
	iconLocationFriend=getIcon("images/iconBlue_10x10.gif",false,"images/iconClear_10x10.png",new GSize(10,10),new GPoint(5,5),new GSize(10,10),new GPoint(5,5),imageMap);
	iconLocationFave=getIcon("images/iconRed_10x10.gif",false,"images/iconClear_10x10.png",new GSize(10,10),new GPoint(5,5),new GSize(10,10),new GPoint(5,5),imageMap);
	iconLocationBoth=getIcon("images/iconRedBlue_10x10.gif",false,"images/iconClear_10x10.png",new GSize(10,10),new GPoint(5,5),new GSize(10,10),new GPoint(5,5),imageMap);
	var imageMap=[0,7,7,0,15,7,7,15];
	iconMouseOver=getIcon("images/iconGrey_15x15.png",false,"images/iconClear_15x15.png",new GSize(15, 15),new GPoint(7, 7),new GSize(15, 15),new GPoint(9, 4),imageMap);
	iconSelected=getIcon("images/iconRed_15x15.png",false,"images/iconClear_15x15.png",new GSize(15, 15),new GPoint(7, 7),new GSize(15, 15),new GPoint(9, 4),imageMap);		
	var imageMap=[0,10,10,0,20,10,10,20];
	iconSubway=getIcon("images/iconSubway_20x20.png",false,"images/iconClear_20x20.png",new GSize(20,20),new GPoint(10,10),new GSize(20,20),new GPoint(10,10),imageMap);	
	iconStart=getIcon("images/start_30x20.png",false,"images/iconClear_10x10.png",GSize(30,20),new GPoint(15,10),new GSize(10,20),new GPoint(15,5));	
	iconEnd=getIcon("images/end_30x20.png",false,"images/iconClear_10x10.png",GSize(30,20),new GPoint(15,10),new GSize(10,20),new GPoint(15,5));	
	iconTransfer=getIcon("images/SubwaySymbols/transfer.gif",false,"images/iconClear_10x10.png",new GSize(100,17),new GPoint(5,10),new GSize(10,10),new GPoint(15,5));
	//iconFriend=getIcon("images/bluePin.png","images/pinShadow.png","images/pinClear.png",new GSize(12,20),new GPoint(5,10),new GSize(22,20),new GPoint(15,5));	
	iconFriend=getIcon("images/mapIcon/manBlack.png","images/mapIcon/manShadow.png","images/mapIcon/manClear.png",new GSize(22,24),new GPoint(5,10),new GSize(22,24),new GPoint(15,5));
	iconHome=getIcon("images/mapIcon/home2.png","","images/mapIcon/homeClear.png",new GSize(15,16),new GPoint(5,10),new GSize(15,16),new GPoint(15,5));
	iconTransparent=getIcon("images/iconClear_10x10.png",false,"images/iconClear_10x10.png",new GSize(10,10),new GPoint(5,5),new GSize(10,10),new GPoint(5,5),imageMap);
	markerMap['transfer'].icon=iconTransfer;
	markerMap['addressStart'].icon=iconStart;
	markerMap['addressEnd'].icon=iconEnd;
	markerMap['selected'].icon=iconSelected;
	markerMap['mouseover'].icon=iconMouseOver;
	markerMap['subway'].icon=iconSubway;
	markerMap['location'].icon=iconLocation;
	markerMap['locationFave'].icon=iconLocationFave;
	markerMap['locationFriendFave'].icon=iconLocationFriend;
	markerMap['locationBoth'].icon=iconLocationBoth;
	markerMap['friend'].icon=iconFriend;
	markerMap['home'].icon=iconHome;	
	markerMap['infoWindow'].icon=iconTransparent;	
}
function showHelp(suppressCheckBox){
    var message="";
    $("ieDDHack").style.display="block";
    message+="<div style='width:450px;'>"
    message+=$("mapHelp").innerHTML;
    if(!suppressCheckBox){        
        message+="      <div style='float:right;padding-left:5px;'>Don't show this message next time</div><div style='float:right;'><input style='padding-top:5px;' id='doNotShow' type='checkbox' /></div>";        
    }
    message+="  <div style='float:right;clear:right;padding-top:20px;'><input on type='submit' value='&nbsp;Ok&nbsp;' onclick=hideInfoBox();if($('doNotShow').checked){setCookie('doNotShow',1,100);};></div>";    
    message+="  <div class='breaker'></div>";    
    message+="</div>"
    showInfoBox(message);
}
function initFriendPositions(){
	var request = GXmlHttp.create();
	var script="ajaxGetFriendPositions.aspx"
	request.open("GET", script,1);	
	request.onreadystatechange=function(){
		if(request.readyState==4){
			if(request.status==200){												
				var response=request.responseText;									
				if(response!==""){					
					var fPos=eval("("+response+")");
					/*								
					for(var i=0;i<fPos.positions.length;i++){
						var friend=fPos.positions[i];			
						var objAddress=new Object();			
						objAddress.name=friend.displayName;
						objAddress.lat=friend.latitude;objAddress.lon=friend.longitude;
						if(fPos.accuracy=-1){
							objAddress.html="<a href='friendsprofile.asp?show="+friend.uid+"'>"+friend.nameDisplay+"</a> was last near this cell phone tower <br />at "+friend.dateLastUpdated;
						}else{
							objAddress.html="<a href='friendsprofile.asp?show="+friend.uid+"'>"+friend.nameDisplay+"</a> was last here <br />at "+friend.dateLastUpdated;
						}					
						objAddress.addressType=typeFriend;
						setMarker(objAddress,'friend');						
					}
					*/
					for(var i=0;i<fPos.addresses.length;i++){
						var home=fPos.addresses[i];
						var objAddress=new Object();
						if(home.uid==userId){
							objAddress.name="Your home.";
						}else{
							objAddress.name=home.nameDisplay+" lives here.";
						}
						objAddress.lat=home.latitude;objAddress.lon=home.longitude;
						objAddress.uid=home.uid;
						objAddress.nameDisplay=home.nameDisplay;
						objAddress.address=home.address;						
						objAddress.html=getHomeHTML(objAddress);
						objAddress.addressType=typeHome;
						setMarker(objAddress,'home');						
					}					
				}				
			}
		}
	}
	request.send(null);	
}
function getHomeHTML(objAddress){
	return "<a href='friendsprofile.asp?show="+objAddress.uid+"'>"+objAddress.nameDisplay+"</a> lives at<br />"+objAddress.address;
}

function createHoodNameDiv(){
	var hoodName = document.createElement("div");
	hoodName.setAttribute("id","hoodName");
	$("map").appendChild(hoodName);				
	hoodName.className="hoodBox";
	var pos = new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(75,5)); 
	pos.apply(hoodName);
}
function createToolTipDiv(){
	toolTip = document.createElement("div");
	toolTip.setAttribute("id","toolTip");
	$("map").appendChild(toolTip);				
	toolTip.className="overlayTip";
	toolTip.innerHTML='';
}
function initMarkerMapObjects(){
	for(var i=0;i<markerTypes.length;i++){	
		markerMap[markerTypes[i]]=new Object();
		markerMap[markerTypes[i]].indexVisible=0;
		markerMap[markerTypes[i]].indexMax=0;
	}	
}
function initSpecialMarkers(){
	if(userId!=''){
		initFriendFavorites();
		initFavorites();
		initFriendPositions();
	}	
}
function initMouseOverAndSelectedMarkers(force){    	
	a('initMouseOverAndSelectedMarkers');	
	if(map.getCenter()){
		if(!(markerMap['selected'][0])||force){
			var objAddress=new Object();
			objAddress.lat=1;objAddress.lon=1;
			setMarker(objAddress,'selected')};
		if(!(markerMap['mouseover'][0])||force){
			var objAddress=new Object();
			objAddress.lat=1;objAddress.lon=1;		
			setMarker(objAddress,'mouseover')
		};
		if(!(markerMap['infoWindow'][0])||force){
			var objAddress=new Object();
			objAddress.lat=1;objAddress.lon=1;		
			setMarker(objAddress,'infoWindow')
		};	
	}
}

function setInitialPosition(){
	a('setInitialPosition_start');						
	var reviewId=argItems('reviewid');
	if(reviewId!==''&&reviewId!==-1){		
		checkAddress('',reviewId,unescape(argItems('customDescription')));		
	}
	else{													
		objAddress=getAddressObjectFromQueryString();
		objAddress.addressType=typeCustom;
		if(objAddress.lon!==''&&objAddress.lat!==''){			
			showDetails(objAddress,0);
			if(!objAddress.hood){objAddress.hood=getNearestHood(map.getCenter());}
			updateSideBar(selView(),selType(),objAddress.hood);				
		}
		else{			
			var hood,objHood;
			if(centerOnHome){
				if(homeLat!==0&&homeLon!==0){		
					a('centerOnHome');					
					//center map to neighborhood your home is in
					var latLon=new GLatLng(homeLat,homeLon)
					objHood=getNearestHood(latLon);
					if(!objHood){ //address is too far away from any hood
						hood=hoods[idMap[hoodDefault]];
						objHood=deserializeHood(hood);					
					}		
				}else if(neighborhoodId!=0){
					a('centerOnNeighborhood');		
					//center map to neighborhood your home is in
					hood=hoods[idMap[neighborhoodId]];
					if(hood){
						objHood=deserializeHood(hood);					
					}										
				}
			}
			if(!objHood){
				a('centerOn_Default');					
				//Default to centering on the East Village
				hood=hoods[idMap[hoodDefault]];
				objHood=deserializeHood(hood);
			}				
			a('1'+objHood.lat);			
			$("hoodName").innerHTML=objHood.name;						
			try{
				map.setCenter(new GLatLng(objHood.lat,objHood.lon),16,cMap);
			}catch(err){a('centerOnHoodFail')}
			
			if(argItems('type')=='iconSubwayMap'){
				onSelectImg('iconSubwayMap',chooseType);
				chooseType('iconSubwayMap');					
			}else{										
				updateSideBar(selView(),selType(),objHood);					
			}			
		}
		updateHood();
	}
	a('setInitialPosition_done');						
}
function setMapMoveEvents(){
	GEvent.addListener(map, "moveend", mapMoveEnd);
	GEvent.addListener(map, "movestart", mapMoveStart);
	GEvent.addListener(map, "move", mapMoving);
}


var initialCenterSetFromHash;
var locationHandler = function() {
	checkHashChanged();
};


function removeHash(hashValue){
      if (hashValue == null || hashValue == undefined)
         return null;
      else if (hashValue == "")
         return "";
      else if (hashValue.length == 1 && hashValue.charAt(0) == "#")
         return "";
      else if (hashValue.length > 1 && hashValue.charAt(0) == "#")
         return hashValue.substring(1);
      else
         return hashValue;     
}
function selTypeCode(){
	switch(selType()){
		case 'iconBarMap':
			return 0
			break
		//case 'iconRestaurants':
		//	return 1
		//	break
		case 'iconSubwayMap':
			return 2
			break
	}			
}
function selTypeFromCode(code){	
	switch(parseInt(code)){
		case 0:								
			return 'iconBarMap'
			break
		//case 1:
		//	return 'iconRestaurants'
		//	break
		case 2:
			return 'iconSubwayMap'
			break
	}				
}
function getHashFromAddress(objAddress){		
	a('getHashFromAddress');		
	if(objAddress.addressType==typeHome){			
		return("-3|"+objAddress.lat+"|"+objAddress.lon+"|"+objAddress.address+"|"+objAddress.nameDisplay+"|"+objAddress.uid+"|"+objAddress.index+"|"+objAddress.customDescription);
	}else if(objAddress.addressType==typeAddress){		
		return("-1|"+objAddress.lat+"|"+objAddress.lon+"|"+objAddress.address+"|"+objAddress.customDescription);
	}else if(objAddress.reviewId==-1){		
		return("-2|"+objAddress.lat+"|"+objAddress.lon+"|"+objAddress.address+"|"+objAddress.name+"|"+objAddress.quickImageDirectory+"|"+objAddress.quickImage+"|"+objAddress.customDescription);
	}
	else{		
		return(objAddress.reviewId+"|"+objAddress.hoodId+"|"+objAddress.customDescription);
	}
}
function getHashFromMap(){	
	a('getHashFromMap')
	return(map.getZoom()+"|"+selTypeCode()+"|"+selView())+"|";
}
function saveHash(objAddress){	
	a('saveHash');	
	var at=objAddress.addressType;	
	if(!(at==typeSubway)){		
		var hash=getHashFromMap()+getHashFromAddress(objAddress);	
		unFocus.History.addHistory(hash);
	}
}

function saveHash2(objAddress){	
	a('saveHash');
	var at=objAddress.addressType;	
	if(!(at==typeSubway)){		
		var hash=getHashFromMap()+getHashFromAddress(objAddress);	
		a(hash);	
		if(hash!==getHash()){
			a('hash:'+hash);
			_createAnchor(hash);
			window.location.hash=hash;
		}
	}		
}
function getHash(){
      var currentLocation = this.removeHash(window.location.hash);         
      return currentLocation;
}
var lastHash,ignoreHashChange;
function getHashObject(loc){		
	if(loc){loc=loc.split("|")};
	var hash=new Object();				
	if(loc[3]>0){	//bar
		a('hash argument test pass');	
		hash.addressType=typeBar;	
		hash.zoom=loc[0];
		hash.type=selTypeFromCode(loc[1]);					
		hash.view=loc[2];		
		hash.reviewId=loc[3];				
		hash.hood=loc[4];				
		hash.customDescription=loc[5];		
		hash.customDescription=unescape(hash.customDescription);		
		return hash
	}else{ //address			
		if(loc[3]==-1||loc[3]==-2||loc[3]==-3){						
			hash.zoom=loc[0];
			hash.type=selTypeFromCode(loc[1]);
			hash.view=loc[2];		
			hash.lat=loc[4];
			hash.lon=loc[5];			
			hash.address=loc[6];			
			if(loc[3]==-2){	//special location					
				hash.addressType=typeCustom;
				hash.name=loc[7];
				hash.quickImageDirectory=loc[8];
				hash.quickImage=loc[9];				
				hash.customDescription=loc[10];
			}else if(loc[3]==-3){//home				
				hash.addressType=typeHome;
				hash.nameDisplay=loc[7];
				hash.uid=loc[8];
				hash.index=loc[9];
				hash.customDescription=loc[10];
			}else{ //regular address
				hash.addressType=typeAddress;
				hash.name='';
				hash.quickImage='';
				hash.quickImageDirectory='';
				hash.customDescription=loc[7];
			}						
			return hash;
		}		
	}		
}

function historyChange(historyHash){
	if(historyHash==''){
		a('initial position');
		var infoWindow=map.getInfoWindow();
		infoWindow.hide();
		hideSubways();					
		setInitialPosition();
	}else{		
		var hash=getHashObject(historyHash);
		if(hash){				
			if(hash.addressType!==typeBar){
				a('address');								
				//if(customDescription){objChoice.customDescription=customDescription;}									
				var objAddress=new Object();
				objAddress.addressType=hash.addressType;
				if(hash.uid){//home
					objAddress.index=hash.index;
					objAddress.addressType=typeHome;
					if(hash.uid==userId){
						objAddress.name="Your home.";
					}else{
						objAddress.name=home.nameDisplay+" lives here.";
					}
					objAddress.html=getHomeHTML(hash); 
				}								
				objAddress.quickImage=hash.quickImage;
				objAddress.quickImageDirectory=hash.quickImageDirectory;
				objAddress.lat=hash.lat;
				objAddress.lon=hash.lon;				
				objAddress.preHtml='';
				objAddress.address=hash.address;
				objAddress.name=hash.name;				
				objAddress.crossStreets='';																		
				objAddress.customDescription=hash.customDescription;				
				if(hash.view!==selView()){					
					onSelectImg(hash.view,chooseView);
					chooseView(hash.view);					
				}	
				if(hash.type!==selType()){																
					onSelectImg(hash.type,chooseType);
					chooseType(hash.type);												
				}				
				map.setCenter(new GLatLng(hash.lat,hash.lon),hash.zoom,cMap);
				updateHood(objAddress);
				updateSideBar(selView(),selType(),selHood());												
				showDetails(objAddress,0);
			}else{							
				a('bar or restaurant');					
				if(document.storage){
					if(document.storage.info.hood){
						lastHoodId=document.storage.info.hood.id;				
					}else{lastHoodId=-1;}
				}else{lastHoodId=-1;}
				if(hash.hood!==lastHoodId){
					a('start set hood:'+hash.hood+'and zoom:'+hash.zoom);
					setToHood(hash.hood,hash.zoom);											
					a('set hood and zoom');					
				}
				if(hash.view!==selView()){					
					onSelectImg(hash.view,chooseView);
					chooseView(hash.view);
				}								
				if(hash.type!==selType()){															
					onSelectImg(hash.type,chooseType);
					chooseType(hash.type);					
				}			
				if(reviewIdMap[hash.reviewId]){	
					a('length: '+reviewIdMap[hash.reviewId].address.reviewId+' '+hash.reviewId);
				}							
				if(!(reviewIdMap[hash.reviewId])){								
					getReviewThenShowDetails(hash.reviewId,hash.customDescription);
				}else{					
					reviewIdMap[hash.reviewId].address.customDescription=hash.customDescription;
					window.setTimeout("showDetails(reviewIdMap["+hash.reviewId+"].address,0);",400);				
				}
			}
		}
	}
}
function getReviewThenShowDetails(reviewId,customDescription){
	var script = "ajaxGetReview.aspx?reviewid="+reviewId;
	var request = GXmlHttp.create();	
	request.open('GET',script,true);
	request.onreadystatechange = function(){
		if(request.readyState == 4){			
			if(request.status == 200){								
				var response= request.responseText;				
				objAddress=deserializeAddress(response);
				objAddress.customDescription=request.customDescription;				
				type=getAddressType(objAddress);
				setMarker(objAddress,type);
				window.setTimeout("showDetails(reviewIdMap["+reviewId+"].address,0);",400);
			}
		}
	};			
	request.customDescription=customDescription;
	request.send(null);	
}

//subway directions
function changeSearchSubway(tb){
	tb.style.fontWeight="normal";
	tb.style.color="#333";
	tb.verified=0;
	resetMarkers();
	hideUnusedMarkers();	
	hidePath();
	hideTransferMarkers();			
	hideMarker(tb.name,0);
	if(eval("document.storage.info."+tb.name)){eval("document.storage.info."+tb.name+"=''");}
}
function hidePath(){
	if(outline){map.removeOverlay(outline);}
	if(outlineWalk1){map.removeOverlay(outlineWalk1);}
	if(outlineWalk2){map.removeOverlay(outlineWalk2);}
}
function showSelect(objAddress,startOrDest){
	var iconName;	
	if(startOrDest==1){
		textbox=document.directions.addressEnd;		
		textbox.verified=1;
		iconName='addressEnd';
		textbox.style.color="#700";		
	}else{
		textbox=document.directions.addressStart;
		textbox.verified=1;
		iconName='addressStart';
		textbox.style.color="#070";	
	}	
	textbox.style.fontWeight="bold";
	if(objAddress.name==''){		
		textbox.value=objAddress.address.split(",")[0];
	}else{
		textbox.value=objAddress.name;
	}	
	var objSelected=copyObject(objAddress);	
	if(!objSelected.name){objSelected.name=objSelected.address;}
	setMarker(objSelected,iconName);		
	if(startOrDest==0){		
		document.storage.info.addressStart=objAddress;
	}else{
		document.storage.info.addressEnd=objAddress;
	}
	if(document.directions.addressStart.verified&&document.directions.addressEnd.verified){			
		var s=document.storage.info.addressStart;		
		map.setCenter(new GLatLng(s.lat,s.lon),13,cMap);
		getShowDirections();
	}else{ 
		checkAddressSubway(!startOrDest);
	}
}
function getDirections(){
	/*
	var sLoading="Loading subway stations<br><div style='font-size:10px'>(This may take a moment)</div>"
	if(isIE()){sLoading+="<div style='font-size:10px;color:blue;'><i>(It's much faster with Firefox)</i></div>"}
	loading(sLoading);
	*/
	var obj=document.storage.info.selectedAddress;
	onSelectImg('iconSubwayMap',chooseType);
	chooseType('iconSubwayMap');	
	if(obj.name==''){
		var arrAddress=obj.address.split(",");
		var address;
		address=arrAddress[0];
		if(arrAddress.length>0){
			var burrough=arrAddress[1];			
			var arrBurroughs=new Array("New York","Brooklyn","Bronx","Long Island City","Flushing","Jamaica","Far Rockaway","Floral Park");			
			for(var i=0;i<=arrBurroughs.length;i++){								
				if(burrough.search(arrBurroughs[i])==1){
					document.directions.burroughEnd.value=i+1;					
				}
			}			
		}		
		document.directions.addressEnd.value=address;
	}else{		
		document.directions.addressEnd.value=obj.name;
	}
	document.directions.addressStart.focus();	
	$("addressStartId").backgroundColor="#A00";
	$("addressStartId").border="5px solid #000"
	map.getInfoWindow().hide();
	checkAddressSubway(1);
}
function getShowDirections(){
	loading('Getting subway directions...');
	var objAddress1=document.storage.info.addressStart;	
	var objAddress2=document.storage.info.addressEnd;	
	setMarker(objAddress1,'addressStart');
	setMarker(objAddress2,'addressEnd');
	var script="ajaxSubwayDirections.aspx?startLat="+objAddress1.lat+"&startLon="+objAddress1.lon+"&endLat="+objAddress2.lat+"&endLon="+objAddress2.lon;		
	var request = GXmlHttp.create();
	request.open('GET',script,true);	
	request.onreadystatechange = function(){
		if (request.readyState == 4){
			if (request.status == 200){			
				resetMarkers();
				hideUnusedMarkers();
				hideTransferMarkers();
				loadingDone();
				var points = [],pointsWalk1 = [],pointsWalk2 = [];
				var xml = request.responseXML;				
				var line = xml.documentElement.getElementsByTagName("PolyLine");				
				if(line.length>0){
					line = line[0];
					var pointElements=line.getElementsByTagName("Point");					
					for (var i=0;i<pointElements.length;++i){						
						var p=new GLatLng(pointElements[i].getAttribute("lat"),pointElements[i].getAttribute("long"));
						if((i!=0)&&(i!=(pointElements.length-1))){points.push(p);}
						if(i==0||i==1){pointsWalk1.push(p);}
						if((i==pointElements.length-1)||(i==(pointElements.length-2))){pointsWalk2.push(p);}
						var transfer=pointElements[i].getAttribute("transfer");
						if((transfer!== null)&&(transfer=="true")){							
							if((i>3)&&(i<(pointElements.length-3))){															
								var objAddress=new Object();								
								objAddress.lat=pointElements[i].getAttribute("lat");objAddress.lon=pointElements[i].getAttribute("long");
								setMarker(objAddress,'transfer');								
							}
						}
					}
					hidePath();			
					outline=new GPolyline(points,'#3333CC',5,.6);
					outlineWalk1=new GPolyline(pointsWalk1,'#BB3333',4,.8);
					outlineWalk2=new GPolyline(pointsWalk2,'#BB3333',4,.8);
					map.addOverlay(outline);
					map.addOverlay(outlineWalk1);
					map.addOverlay(outlineWalk2);
				}	
				var directions;		
				if(xml.documentElement.getElementsByTagName("Description")[0].firstChild.text){
					directions=xml.documentElement.getElementsByTagName("Description")[0].firstChild.text
				}else{
					directions=xml.documentElement.getElementsByTagName("Description")[0].textContent;
				}
				directions="<div style='margin-bottom:5px;font-size:14px;font-weight:bold'>Directions</div>"+directions;
				showInfoBox(directions,0,1);				
				$("selTab4").style.display="block";
				$("directionsSideBar").innerHTML="<div style='padding:6px;'>"+directions+"</div>";
				changeRightSideBar(2);
			}
			else{				
				loadingDone();
			}
		}
	};			
	request.send(null);			
}
function getSubwayDirection(){
	var d=document.directions;
	if(d.addressStart.verified&&d.addressEnd.verified){	
		var s=document.storage.info.addressStart;
		map.setCenter(new GLatLng(s.lat,s.lon),13,cMap);		
		getShowDirections();
	}else{		
		checkAddressSubway(document.directions.addressStart.verified);//bit tricky		
	}
}
function checkAddressSubway(startOrDest){
	var burrough,strSearch,textBox;
	alreadyRun=1;
	var clear=window.setTimeout("resetAlreadyRun()",4000);
	if(startOrDest){
		burrough=document.directions.burroughEnd.value;
		textBox=document.directions.addressEnd;	
	}else{
		burrough=document.directions.burroughStart.value;
		textBox=document.directions.addressStart;			
	}
	if(trimAll(textBox.value)==''){
		showInfoBox("Please enter both a start and a destination.");
	}else{
		strSearch=trimAll(textBox.value.toLowerCase());	 	
		var request = GXmlHttp.create();
		qry="address=" + escape(strSearch) + "&burrough=" + escape(burrough);	
		request.open("GET", "ajaxLookupAddress.aspx?"+qry,1);
		loading("Loading...");
		request.onreadystatechange = function() {
			if (request.readyState == 4){
				clearTimeout(clear);
				alreadyRun=0;
				loadingDone();
				if (request.status == 200){				
					var response = request.responseText;
					var arrAddresses=response.split('@');
					if(arrAddresses.length==1){showInfoBox(response);} //error message
					else{								
						var objChoices=deserializeAddresses(arrAddresses);
						var street=trimAll(objChoices[0].address.toLowerCase().split(',')[0]);
						var searchStreet=trimAll(strSearch.toLowerCase().split(',')[0]);					
						if(objChoices[0].name.toLowerCase()==strSearch||street==searchStreet||objChoices[0].address.toLowerCase()==strSearch){
							objChoice=objChoices[0]; 
							if(objChoice.name){							
								textBox.value=objChoice.name;
							}else{
								textBox.value=objChoice.address;
							}						
							showSelect(objChoice,startOrDest);						
						}
						else{
							if(objChoices.length==1){messageText='<b>Which did you mean?</b><br>';}else{messageText='<b>Did you mean?</b><br>';}
							document.storage.info.searchChoices=objChoices;						
							for(i=0;i<objChoices.length;i++){
								objChoice=objChoices[i];
								messageText=messageText+"<a href=javascript:{chooseSearchSubway("+i+","+startOrDest+")}>"+objChoice.name+" <i>"+objChoice.address+"</i></a><br>";
							}
							showInfoBox(messageText);
						}
					}											
				} 
				else{											
					showInfoBox("Sorry. We didn't recognize that address.<br>Check spelling and incude number and full street name.<br><i>example: 101 E. 3rd St.</i>");
				}
			}
		}
		request.send(null);
	}
}
	