var goHere = "";
var map;
var mapLoaded = false;
var nearbyMarkersArray = [];
var mapInfoWindow;

var rankingDict = [
  				 'NULL',
  				 'LIKE',
  				 'LOVE',
  				 'MUST_BUY'
  		];

function createMap() 
{		
	if(lat!='' && lng!='' )
	{
		var detailsMapOptions = {
				zoom: 12,
			     center: new google.maps.LatLng(lat, lng),
			     mapTypeId: google.maps.MapTypeId.ROADMAP,
			     draggable: false,
			     zoomControl: false,
			     scrollwheel: false,
			     disableDefaultUI: true
			    };
		var detailsMap = new google.maps.Map(document.getElementById("detailsMap"),detailsMapOptions);
		var detailsMarker = new google.maps.Marker({
	  		position: new google.maps.LatLng(lat, lng),
	  		map: detailsMap});
		
		// switch tabs so map is visible while loading
		showNeighbourhoodTab();
		
		var myOptions = {
				zoom: 16,
			     center: new google.maps.LatLng(lat, lng),
			     mapTypeId: google.maps.MapTypeId.ROADMAP,
			     zoomControlOptions: {
			         style: google.maps.ZoomControlStyle.SMALL
			     }
			    };
		map = new google.maps.Map(document.getElementById("map"),myOptions);
		google.maps.event.addListener(map, 'zoom_changed',loadNearby);
		google.maps.event.addListener(map, 'dragend',loadNearby);
		createListingMarker();
		showDetailsTab();
	}
}

function createListingMarker()
{
	var marker = new google.maps.Marker({
  		position: new google.maps.LatLng(lat, lng),
  		map: map});
}

function emailWindow(goHere)
{
	if (goHere != "")
	{
	var showMeWin = window.open(goHere, "emailWindow", "toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=470,height=430,top=50,left=50");
	showMeWin.focus();
	}
}
function submitForm()
{
	var f = document.getElementById('drillDownSearchForm');
	/*b = f.target;
	window.open(goHere, "slideShowWindow", "toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=1000,height=800,top=50,left=50");
	f.target='slideShowWindow';*/
	f.submit();
	//f.target=b;
}

function SwitchUnits(divId)
{
	var target = document.getElementById(divId);
	SwapTextAndTitle(target);
}


function SwapTextAndTitle(node)
{
	for (var i = 0; i < node.childNodes.length; ++i)
	{
		var child = node.childNodes[i];
		if ( child.childNodes && child.childNodes.length)
		{
			SwapTextAndTitle(child);
		}
		if (child.title)
		{
			var title = child.title;
			var txt = getText(child);
			if (txt)
			{
				child.title = txt;
				child.innerHTML = title;
			}
		}
	}
}

function getText(node)
{
	if(typeof node.innerText!="undefined")
	{
		return node.innerText;
	}
	return getNodeText(node);
}

function getNodeText(N)
{
	var s = '';
	for(var i=0, c=N.childNodes; i < c.length; ++i)
	{
		if(c[i].nodeType==3) s+=c[i].nodeValue;
		else if(c[i].nodeType==1) s+=arguments.callee(c[i]);
	}
	return s;
}

function callService(action, callData, callback) { 
    $.ajax({
       url: "/jumplisting2" + action,
       data:callData,
       cache: true,
       async: false,
       success: function(data){
            callback(data);
       }
     });
}

function callAccountService(action, type, callData, callback, errorCallback) 
{ 
    $.ajax({
       type: type,
       url: "/jumpleads" + action,
       data:callData,
       async: true,
       cache: true,
       success: function(data, textstatus, XHRobject){
			if(callback) {
				callback(data);
			}
       } 
     });
}
var language;
function loadNearbyMapItems(term, lang, show)
{
	language = lang;
	if(show==false)
	{
		removeNearbyMarkers(term);
		return;
	}
	var bounds = map.getBounds();
	if(term == "schools")
	{
		callService("/schools", "swLat="+bounds.getSouthWest().lat() +
				"&swLng=" + bounds.getSouthWest().lng()+
				"&neLat="+bounds.getNorthEast().lat() + 
				"&neLng=" + bounds.getNorthEast().lng()+
				"&zoom="+map.getZoom()+"&source=2",doLoadSchools);
	}
	else if(term=="offices")
	{
		callService("/offices", "swLat="+bounds.getSouthWest().lat() +
				"&swLng=" + bounds.getSouthWest().lng()+
				"&neLat="+bounds.getNorthEast().lat() + 
				"&neLng=" + bounds.getNorthEast().lng()+
				"&zoom="+map.getZoom()+"&source=2",doLoadOffices);
	}
	else if(term=="shelter")
	{
		callService("/neighbourhood/note", 
	       		   "swLat="+bounds.getSouthWest().lat() + 
	      		   "&swLng=" + bounds.getSouthWest().lng()+
	      		   "&neLat="+bounds.getNorthEast().lat() + 
	      		   "&neLng=" + bounds.getNorthEast().lng()+"&source=2",doLoadShelter);
	}
	else if(term=="neighbourhood")
	{
		callService("/neighbourhood/note", 
       		   "swLat="+bounds.getSouthWest().lat() + 
      		   "&swLng=" + bounds.getSouthWest().lng()+
      		   "&neLat="+bounds.getNorthEast().lat() + 
      		   "&neLng=" + bounds.getNorthEast().lng()+"&source=2",doLoadNote);
		callService("/media", "swLat="+bounds.getSouthWest().lat() + 
				   "&swLng=" + bounds.getSouthWest().lng()+
				   "&neLat="+bounds.getNorthEast().lat() + 
				   "&neLng=" + bounds.getNorthEast().lng()+"&source=2",doLoadMGN)
	}
	else // yelp
	{
		nearby(term,bounds.getSouthWest().lat()+","+bounds.getSouthWest().lng()+"|"+bounds.getNorthEast().lat()+","+bounds.getNorthEast().lng(), lang);
	}
}

function nearby(term, bounds, lang) 
{
	var auth = { 
	  consumerKey: "_hidDxdrYr-NaYCl8NQB5Q", 
	  consumerSecret: "iS3AKFQk0je9wzyJD4qj10mmf60",
	  accessToken: "vZXDXNzyGUuHiVAuJTCkay_M48Ebeygk",
	  accessTokenSecret: "lhL_ItazJ5YPWsm1mcsfFEu5iQU",
	  serviceProvider: { 
	    signatureMethod: "HMAC-SHA1"
	  }
	};

	var accessor = {
	  consumerSecret: auth.consumerSecret,
	  tokenSecret: auth.accessTokenSecret
	};

	parameters = [];
	parameters.push(['term', term]);
	parameters.push(['bounds', bounds]);
	parameters.push(['callback', 'cb']);
	parameters.push(['oauth_consumer_key', auth.consumerKey]);
	parameters.push(['oauth_consumer_secret', auth.consumerSecret]);
	parameters.push(['oauth_token', auth.accessToken]);
	parameters.push(['oauth_signature_method', 'HMAC-SHA1']);
	parameters.push(['lang',lang]);

	var message = { 
	  'action': 'http://api.yelp.com/v2/search',
	  'method': 'GET',
	  'parameters': parameters 
	};

	OAuth.setTimestampAndNonce(message);
	OAuth.SignatureMethod.sign(message, accessor);

	var parameterMap = OAuth.getParameterMap(message.parameters);

	$.ajax({
	  'url': message.action,
	  'data': parameterMap,
	  'dataType': 'jsonp',
	  'jsonpCallback': 'cb',
	  'cache':true,
	  'success': function(data, textStats, XMLHttpRequest) {
	    data.term = term;
	    loadYelpResults(data);
	  }
	});
}

function doLoadMGN(argArray) 
{
	if(arguments.length == 0) {
		return;
  	}
	for(var i=0;i<argArray.length;i++) 
	{
		if((language=="en" && argArray[i].language==='EN') || (language=="fr" && argArray[i].language==='FR')) 
		{
			addMarker('mgn', argArray[i].latitude, argArray[i].longitude, argArray[i]);
		}
	}
}
function doLoadShelter(data)
{
	doLoadNeighbourhoodShelter('shelter',data);
}
function doLoadNote (data) 
{
	doLoadNeighbourhoodShelter('neighbourhood',data);
}
function doLoadNeighbourhoodShelter(type, data)
{
	if(arguments.length == 0) 
	{
		return;
  	}

	var argArray = data;
	if( argArray.length>0 ) 
	{
		for(var i=0;i<argArray.length;i++) 
		{
			if((type=="shelter" && argArray[i]["noteType"]=="SHELTER") || (type!="shelter" && argArray[i]["noteType"]!="SHELTER"))
			{
				addMarker(type, argArray[i].latitude, argArray[i].longitude, argArray[i]);
			}
		}
	}
}
function doLoadOffices(data)
{
	if(arguments.length == 0)
	{
		return;
  	}
	var ids = data[0];
	var lats = data[1];
	var lngs = data[2];
	
	var idArray = ids.split(",");
	var latArray = lats.split(",");
	var lngArray = lngs.split(",");
	
	if( idArray.length>0 && idArray[0]!="") 
	{
		var i;
		for(i=0;i<idArray.length;i++) 
		{
			callService("/location", "id="+idArray[i],function(officeData){
				addMarker('offices',latArray[i],lngArray[i],officeData);
			});
		}
	}
}
function doLoadSchools (summary) 
{
	if(arguments.length == 0)
	{
		return;
  	}
	var argArray = summary;
	var lats = argArray[0];
	var lngs = argArray[1];
	var ids = argArray[3];
	
	if(ids != "")
	{
		var latArray = lats.split(",");
		var lngArray = lngs.split(",");
		var idArray = ids.split(",");
	
		for(var j=0;j< idArray.length; j++) 
		{
			callService("/school", "id="+idArray[j],function(schoolData){
				addMarker('schools',latArray[j],lngArray[j],schoolData);
			});
		}
	}
}

function loadYelpResults(data)
{
	//map.clearOverlays();
	//createListingMarker();
	//deleteNearbyMarkers();
	
	var term = data.term;
	var businesses = data['businesses'];
	for(var i=0;i<businesses.length; i++) 
	{
		addMarker(term,businesses[i]['location']['coordinate']['latitude'],businesses[i]['location']['coordinate']['longitude'],businesses[i]);
	}
}

function removeNearbyMarkers(type) 
{
	if (nearbyMarkersArray) 
	{
		for (var i=0;i<nearbyMarkersArray.length;i++) 
		{
			if(nearbyMarkersArray[i].type==type)
			{
				nearbyMarkersArray[i].setMap(null);
				nearbyMarkersArray.splice(i,1);
				i--;
			}
		}
	}
}	

function addMarker(type, lat, lng, info) 
{	
	for(var x=0;x<nearbyMarkersArray.length;x++) 
	{
		if((nearbyMarkersArray[x].type===type || (type=="mgn" && nearbyMarkersArray[x].type==="neighbourhood")) && nearbyMarkersArray[x].getPosition().lat().toFixed(6)===Number(lat).toFixed(6) && nearbyMarkersArray[x].getPosition().lng().toFixed(6)===Number(lng).toFixed(6))
		{
			return;
		}
	}
	
	var icon = {
			'schools': '/jumplisting/rlp/style/cssimages/marker-education.png',
			'banks and credit unions': '/jumplisting/rlp/style/cssimages/marker-banks.png',
			'grocery':'/jumplisting/rlp/style/cssimages/marker-grocery.png',
			'restaurants':'/jumplisting/rlp/style/cssimages/marker-restaurants.png',
			'coffee and tea' :'/jumplisting/rlp/style/cssimages/marker-coffee.png',
			'offices':'/jumplisting/rlp/style/cssimages/map-marker-office.png',
			'neighbourhood':'/jumplisting/rlp/style/cssimages/map-marker-mgn.png',
			'mgn':'/jumplisting/rlp/style/cssimages/map-marker-mgn.png',
			'shelter': '/jumplisting/rlp/style/cssimages/map-marker-shelter.png'
	}
	if(language=="fr")
	{
		icon.neighbourhood = "/jumplisting/rlp/style/cssimages/map-marker-mgn-fr.png";
	}
	
	  var markerImage = new google.maps.MarkerImage(icon[type],
		      // This marker is 50 pixels wide by 50 pixels tall.
		      new google.maps.Size(28, 40),
		      // The origin for this image is 0,0.
		      new google.maps.Point(0,0),
		      // The anchor for this image is the base of the marker.
		      new google.maps.Point(13, 37));
	
	  var markerShadow;
	  if(type=="neighbourhood" || type=="mgn")
	  {
		  markerShadow = new google.maps.MarkerImage('/jumplisting/rlp/style/cssimages/shadow-map-marker-mgn.png',
		      // The shadow image is larger in the horizontal dimension
		      // while the position and offset are the same as for the main image.
		      new google.maps.Size(42, 29),
		      new google.maps.Point(0,0));
	  }
	  else
	  {
		  markerShadow = new google.maps.MarkerImage('/jumplisting/rlp/style/cssimages/map-marker-shadow.png',
		      // The shadow image is larger in the horizontal dimension
		      // while the position and offset are the same as for the main image.
		      new google.maps.Size(45, 41),
		      new google.maps.Point(0,0),
		      new google.maps.Point(13, 37));
	  }
	  
	  var marker = new google.maps.Marker({
  		position: new google.maps.LatLng(lat, lng),
  		map: map,
  		icon: markerImage,
  		shadow: markerShadow
  	});
  	
	marker.set('type',type);
	if(type=='mgn')
	{
		marker.set('type','neighbourhood');
	}

  	nearbyMarkersArray.push(marker);
  	
	var contentString='';
	
	if(type==='schools') 
	{
		contentString += info.name?"<h3>"+info.name+"</h3>":'';
		contentString += info.address1?"<span>"+info.address1+"</span><br/>":'';
		contentString += info.phone?"<span>"+info.phone+"</span><br/>":'';
	} 
	else if(type==='offices') 
	{
		contentString += info.name?"<h3>"+info.name+"</h3>":'';
		contentString += info.address1?"<span>"+info.address1+"</span><br/>":'';
		contentString += info.address2?"<span>"+info.address2+"</span><br/>":'';
		contentString += info.postalCode?"<span>"+info.postalCode+"</span><br/>":'';
		contentString += "<br/>";
		contentString += info.phoneNumber?"<span>"+info.phoneNumber+"</span><br/>":'';
		contentString += info.faxNumber?"<span>"+info.faxNumber+"</span><br/>":'';
		
		var address = info.address2.split(",");
		var prov = address.length>1?address[1].replace(/^\s+|\s+$/g, ''):"";
		var city = address[0].replace(/^\s+|\s+$/g, '');
		var url = "/Office/" + (language=="fr"?"fr/":"") + info.externalId + "/" + prov + "/" + city + "/" + info.name.replace(/\s/g,"-") + "/0";
		contentString += "<a href='" + url + "'>" + getDetailsMsg() + "</a><br/>";
	} 
	else if(type==='neighbourhood' || type==='shelter')
	{
		contentString += info.photo?"<div style='float:left;'><img src='http://"+info.photo+"_sm.jpg'/></div>":'';
		contentString += "<div >";
		if(language=="fr") 
		{
  			//french
			contentString += info.descriptionAlt?"<p style='clear:both; float: left;'>"+info.descriptionAlt+"</p>":'';
  		} 
		else
		{
  			//eng
	  		contentString += info.description?"<p style='clear:both; float: left;'>"+info.description+"</p>":'';
  		}
	  	contentString +="</div>";
	}
	else if(type==='mgn')
	{
		contentString += info.title?"<h3>"+info.title+"</h3>":'';
		contentString += info.thumbImage?"<div style='float:left;'><img src='"+info.thumbImage+"'/></div>":'';
		contentString += "<div style='float:left;'>";
		contentString += info.text?info.text:'';
		if(language=="fr")
		{
			contentString += info.website?'<a href="'+info.website+'">Voir plus</a>':'';
		}
		else
		{
			contentString += info.website?'<a href="'+info.website+'">View More</a>':'';
		}
		contentString +="</div>";
		
		marker.set('type','neighbourhood');
		
		google.maps.event.addListener(marker, 'click', function() {
  	  		$('body').append("<div class='overlay' /><div class='map-popup-box'><div class='map-popup-exit'></div>"+contentString+"</div>").ready(function(){
		  		if(mapInfoWindow)
				{
					mapInfoWindow.close();
					mapInfoWindow = null;
				}
				$('.map-popup-exit').click(function(e){
					$('.overlay').remove();
					$('.map-popup-box').remove();
				});
  	  		});
  	  	});
  		return;
	}
	else 
	{
		contentString +="<div style='float:left;'>";
		contentString += info.image_url?"<div style='float:left;'><img width=80  src='"+info.image_url+"'/><br/>":'';
		contentString += "<a target='_blank' href='http://www.yelp.com'/><img src='http://media1.ak.yelpcdn.com/static/20101216159295510/img/map/miniMapLogo.png'/></a></div>"
		contentString +="<div style='float:left; width:100px; padding-left:5px;'>";
		contentString += info.url?"<a target='_blank' href='"+info.url+"'>"+info.name+"</a><br/>":'';
		contentString += info.rating_img_url_small?"<img  src='"+info.rating_img_url_small+"'/> Based on "+info.review_count+" reviews<br/>":'';
		contentString += info.location.address[0]?"<span>"+info.location.address[0]+"</span><br/>":'';
		contentString += info.location.city?"<span>"+info.location.city+","+info.location.country_code+" "+ info.location.postal_code+"</span><br/>":'';
		contentString += info.display_phone?"<span>"+info.display_phone+"</span><br/>":'';
		contentString += info.url?"<a target='_blank' href='"+info.url+"'>Read the reviews &raquo;</a>":'';
		contentString +="</div>";
	}
	var infowindow = new google.maps.InfoWindow({
	    content: contentString,
	    maxWidth : '400'
	});
	
	google.maps.event.addListener(marker, 'click', function() 
	{
		if(mapInfoWindow)
		{
			mapInfoWindow.close();
		}
		mapInfoWindow = infowindow;
		infowindow.open(map,marker);
	});
}

function doAjaxCall(url, requestType, body)
{
	var client = new XMLHttpRequest();
	client.open(requestType, url, false);
	client.setRequestHeader("Content-Type", "text/plain");
	client.send(body);

	return client;
}

function showDetailsTab()
{
	document.getElementById("detailsTab").style.display = "block";
	document.getElementById("neighbourhoodTab").style.display = "none";
	$("#toNeighbourhood").removeClass("active");
	$("#toDetails").addClass("active");
}
function showNeighbourhoodTab()
{
	document.getElementById("detailsTab").style.display = "none";
	document.getElementById("neighbourhoodTab").style.display = "block";
	$("#toDetails").removeClass("active");
	$("#toNeighbourhood").addClass("active");
	if(map && !mapLoaded)
	{
		mapLoaded = true;
		// must resize map and set center when switching to visible tab for the first time
		google.maps.event.trigger(map, 'resize');
		map.setCenter(new google.maps.LatLng(lat, lng));
		loadNearby();
	}
}
