var YWSID = "Ic-BzR-NhlJ7EoNV1RYFSQ"; // common required parameter (api key)

var yelpCategory = '';

var y_arts = 0;
var y_hotels = 0;
var y_restaurants = 0;
var y_coffee = 0;
var y_shopping = 0;
var y_banks = 0;
var y_hospitals = 0;

function yelpCamera(category) {
	var camera = ge.getView().copyAsLookAt(ge.ALTITUDE_RELATIVE_TO_GROUND);

	var lat = camera.getLatitude();
	var lng = camera.getLongitude();
	var range = camera.getRange();
	var heading = camera.getHeading();
	var tilt = camera.getTilt();
	
	if(!eval("y_"+category.toString())) {
		eval("y_"+category.toString() + " = 1");
		if(yelpCategory == '') {
			google.earth.addEventListener(ge.getView(), 'viewchangeend', yelp);
		}
		yelpCategory += category+"+";
	} else {
		eval("y_"+category.toString() + " = 0");
		yelpCategory = yelpCategory.replace(category+"+", '');
		if(yelpCategory == '') {
			google.earth.removeEventListener(ge.getView(), 'viewchangeend', yelp);
		}
	}

	if(yelpCategory != '') {
		if(tilt > 30) {
			ge.getOptions().setFlyToSpeed(0.5);
			moveCamera(lat, lng, range, heading, '30');
			ge.getOptions().setFlyToSpeed(0.2);
		} else {
			yelp();
		}
	} else {
		clearYelpPlacemarks();		
	}
}

function yelp(category) {
//	google.earth.removeEventListener(ge.getView(), 'viewchangeend', yelp);

	var yelpRequestURL = createYelpUrl(yelpCategory);

	/* clear existing markers */
	clearYelpPlacemarks();

	if(yelpRequestURL != '')
	{				
		/* do the api request */
		var script = document.createElement('script');
		script.src = yelpRequestURL;
		script.type = 'text/javascript';
		var head = document.getElementsByTagName('head').item(0);
		head.appendChild(script);
	}
	return false;
}

function createYelpUrl(category) {		
	var yelpCategory = category;

	var north;
	var south;
	var east;
	var west;
	
	var bbox = ge.getView().getViewportGlobeBounds();
	north = bbox.getNorth();
	south = bbox.getSouth();
	east  = bbox.getEast();
	west  = bbox.getWest();
	
	var url = "http://api.yelp.com/"
		+ "business_review_search?"
		+ "callback=" + "handleResults1"
		+ "&term="
		+ "&num_biz_requested=20"
		+ "&tl_lat=" + south
		+ "&tl_long=" + west
		+ "&br_lat=" + north
		+ "&br_long=" + east
		+ "&ywsid=" + YWSID
		+ "&category=" + category;

	// alert(url);
	return url;
}

function handleResults1(data) {
	$(".yelpError").remove();
	if(data.message.text == "OK") {
		if (data.businesses.length == 0) {
			// $("#term").after('<span class="yelpError">No results were found near that location.</span>');
			// alert("No results were found near that location.");
			return;
		}
		for(var i=0; i<data.businesses.length; i++) {
			biz = data.businesses[i];
			createMarker1(biz, biz.latitude, biz.longitude);
		}
	}
	else {
		switch(data.message.text) {
			case 'Area too large':
				// $("#term").after('<span class="yelpError">The area you are looking at is too large.  Please zoom in to view the results.</span>');
				// alert("The area you are looking at is too large.  Please zoom in to view the results.");
		}
	}
}

function createMarker1(biz, lat, lng) {
	// Placemark
	var placemark = ge.createPlacemark('');
	placemark.setName(biz.name);
	placemark.setSnippet('yelp');

	// Placemark/Point
	var point = ge.createPoint('');
	var lookAt = ge.getView().copyAsLookAt(ge.ALTITUDE_RELATIVE_TO_GROUND);
	point.setLatitude(lat);
	point.setLongitude(lng);
	placemark.setGeometry(point);

	// Placemark/Style
	var style = ge.createStyle('');
	placemark.setStyleSelector(style);

	eIconHref = BASE_URL + 'images/marker_star.png';
	// Placemark/Style/IconStyle
	var icon = ge.createIcon('');
	icon.setHref(eIconHref);	
	style.getIconStyle().setIcon(icon);
	style.getIconStyle().setScale(0.7);
	style.getLabelStyle().setScale(0.65);

	// add the placemark to Earth
	ge.getFeatures().appendChild(placemark);

	var balloon = ge.createHtmlStringBalloon('');
	var infoWindowHtml = generateInfoWindowHtml(biz);
	balloon.setFeature(placemark); // optional
	balloon.setMaxWidth(400);
	balloon.setContentString(infoWindowHtml);
	// $("#Right-Panel").html(infoWindowHtml);

	google.earth.addEventListener(placemark, 'click', function (event) {
		// $("#Right-Panel").html(balloon.getContentString());
		event.preventDefault();
		ge.setBalloon(balloon);
	});
}

function clearYelpPlacemarks()
{
	if(ge) {
		var c = ge.getFeatures().getFirstChild();
		while (c) {
			var s = c.getNextSibling();
			if(c.getSnippet() == 'yelp')
				ge.getFeatures().removeChild(c);
			c = s;
		}
	}
}


/*
 * Formats and returns the Info Window HTML 
 * (displayed in a balloon when a marker is clicked)
 */
function generateInfoWindowHtml(biz) {
	var text = '<div class="marker" style="height:210px">';
	
	// image and rating
	text += '<img class="yelpimage" src="'+BASE_URL+'images/yelp/yelp.png" /><br />';
	text += '<img class="businessimage" src="'+biz.photo_url+'"/>';
	
	// div start
	text += '<div class="businessinfo">';
	// name/url
	text += '<a href="'+biz.url+'" target="_blank">'+biz.name+'</a><br/>';
	// stars
	text += '<img class="ratingsimage" src="'+biz.rating_img_url_small+'"/>&nbsp;based&nbsp;on&nbsp;';
	// reviews
	text += biz.review_count + '&nbsp;reviews';
	// Read the reviews
	text += '<br/><a href="'+biz.url+'" target="_blank"><img src="'+BASE_URL+'images/yelp/reviews.gif" /></a><br /><br />';
	// categories
	text += formatCategories(biz.categories);
	// neighborhoods
	if(biz.neighborhoods.length)
	text += formatNeighborhoods(biz.neighborhoods);
	// address
	text += biz.address1 + '<br/>';
	// address2
	if(biz.address2.length) 
	text += biz.address2+ '<br/>';
	// city, state and zip
	text += biz.city + ',&nbsp;' + biz.state + '&nbsp;' + biz.zip + '<br/>';
	// phone number
	if(biz.phone.length)
	text += formatPhoneNumber(biz.phone);
	// div end
	text += '</div></div>'
	return text;
}

/*
 * Formats the categories HTML
 */
function formatCategories(cats) {
	var s = 'Categories: ';
	for(var i=0; i<cats.length; i++) {
		s+= cats[i].category_filter;//name;
		if(i != cats.length-1) s += ', ';
	}
	s += '<br/>';
	return s;
}

/*
 * Formats the neighborhoods HTML
 */
function formatNeighborhoods(neighborhoods) {
	s = 'Neighborhoods: ';
	for(var i=0; i<neighborhoods.length; i++) {
		s += '<a href="' + neighborhoods[i].url + '" target="_blank">' + neighborhoods[i].name + '</a>';
		if (i != neighborhoods.length-1) s += ', ';
	}
	s += '<br/>';
	return s;
}

/*
 * Formats the phone number HTML
 */
function formatPhoneNumber(num) {
	if(num.length != 10) return '';
	return '(' + num.slice(0,3) + ') ' + num.slice(3,6) + '-' + num.slice(6,10) + '<br/>';
}
