﻿// $Id: //depot/EveryScape/Stable/services/web/EveryScapePortal_Jalapeno/js/EveryScape/PortalCommon.js#4 $
// include jq.js
function PortalFlashCheckFailed(/*Array(string)*/reasons)
{
	$("#viewerPreloader").fadeOut(500);
	$("#CompatibilityCheckErrorList").empty();
	for (var i = 0; i < reasons.length; ++i)
	{
		$("#CompatibilityCheckErrorList").append("<li>- " + reasons[i] + "</li>");
	}
	$("#CompatibilityCheckDiv").css("display", "block");
	$("#rc").css("display", "none");
}

function PortalFirstTimerTest()
{
	if (null == EveryScape.Utility.getCookie("HasVisitedSite"))
	{
		EveryScape.Utility.setPermanentCookie("HasVisitedSite", 1);
	}
	$("#rc").css("display", "block");
}


/**/

﻿// $Id: //depot/EveryScape/Stable/services/web/EveryScapePortal_Jalapeno/js/EveryScape/Tabs.js#3 $
// include jq.js
if (undefined === window.EveryScapePortal)
{
	EveryScapePortal = {};
}
if (undefined === window.EveryScapePortal.Tabs)
{
	EveryScapePortal.Tabs = {};
}
EveryScapePortal.Tabs = (function()
{
	var _internal = function()
	{
		this.TabControl = null;
		this.TabsById = new Array();
		this.TabsByLinkStateId = new Array();
		this.TabsByIndex = new Array();
	}
	
	_internal.prototype.Init = function(id)
	{
		this.TabControl = $(id);
	};
	
	_internal.prototype.AppendTab = function(/*string*/id, /*int*/linkStateId)
	{
		var index = this.TabsByIndex.length;
		var o = {index:index, id:id, linkStateId:linkStateId};
		this.TabsById[id] = o;
		this.TabsByIndex[index] = o;
		this.TabsByLinkStateId[linkStateId] = o;
	};

	_internal.prototype.GetTab = function(/*{index:int?,id:string?,linkStateId:int?}*/ti)
	{
		if (EXISTS(ti.index))
		{
			return this.TabsByIndex[ti.index];
		}
		else if (EXISTS(ti.id))
		{
			return this.TabsById[ti.id];
		}
		else if (EXISTS(ti.linkStateId))
		{
			return this.TabsByLinkStateId[ti.linkStateId];
		}
		
		return null;
	};
	
	_internal.prototype.GetTabIndex = function(/*{index:int?,id:string?,linkStateId:int?}*/ti)
	{
		var o = this.GetTab(ti);
		if (EXISTS(o))
		{
			return o.index;
		}
		else
		{
			return -1;
		}
	};
	
	_internal.prototype.InitializeTabs = function(/*{index:int?,id:string?,linkStateId:int?}*/ti)
	{
		var index = this.GetTabIndex(ti);
		this.TabControl.tabs();
		if (index < 0)
		{
			return;
		}
		this.TabControl.tabs("select", index);
	};
	
	_internal.prototype.Show = function(doShow)
	{
		var v;
		if (EXISTS(doShow) && !doShow)
		{
			v = "hidden";
		}
		else
		{
			v = "visible";
		}
		
		this.TabControl.css("visibility", v);
	};

	_internal.prototype.Hide = function()
	{
		this.Show(0);
	};

	_internal.prototype.SetDisabledTabs = function(/*array{index:int?,id:string?,linkStateId:int?}*/tiSet)
	{
		this.SetEnabledTabs(tiSet, false);
	};
	
	_internal.prototype.SetEnabledTabs = function(/*array{index:int?,id:string?,linkStateId:int?}*/tiSet, doEnable)
	{
		var b = !EXISTS(doEnable) || doEnable;
		var newTabState = new Array();
		for (var i = 0; i < tiSet.length; ++i)
		{
			var index = this.GetTabIndex(tiSet[i]);
			if (index >= 0)
			{
				newTabState[index] = 1;
			}
		}

		if (EXISTS(this.TabControl))
		{
			for (var i = 0; i < this.TabsByIndex.length; ++i)
			{
				var d = b ^ (newTabState[i] == 1);
				this.TabControl.tabs(d ? "disable" : "enable", [i]);
			}
		}
	};
	
	_internal.prototype.SetTabUrl = function(/*{index:int?,id:string?,linkStateId:int?}*/ti, url)
	{
		var index = this.GetTabIndex(ti);
		if (index < 0)
		{
			return;
		}
		this.TabControl.tabs("url", index, url);
	};

	_internal.prototype.EnableAllTabs = function()
	{
		for (var i = 0; i < this.TabsByIndex.length; ++i)
		{
			this.TabControl.tabs("enable", [i]);
		}
	};

	_internal.prototype.LoadTab = function(/*{index:int?,id:string?,linkStateId:int?}*/ti)
	{	
		var index = this.GetTabIndex(ti);
		if (index < 0)
		{
			return;
		}
		if ($(".ui-tabs-selected a").get(0) === $("a", this.TabControl).get(index))
		{
			this.TabControl.tabs("load", index);
		}
		else
		{
			this.TabControl.tabs("select", index);
		}
	};
	
	return new _internal();
})();


/**/

﻿//
// Everyscape/ExternalContentSources/ExternalContentManager.js
//
// $Id: //services/web/EveryScapePortal_Jalapeno/js/EveryScape/ExternalContentSources/ExternalContentManager.js#1 $
//
// Copyright (c) 2008 EveryScape, Inc.
// All Rights Reserved.
//
var esExtContentMgr = (function()
{
	var _esExtContentMgr = function()
	{
		this.RequestMap = {};
		this.RequestCount = 0;
	}
	
	/**
	 *@method UpdateExternalContent
	 *@param {Array} contentSrcs  content sources to update from
	 */
	_esExtContentMgr.prototype.UpdateExternalContentTab = function(args, contentSrcNames, tabElemId)
	{
		if (args == null || contentSrcNames == null || tabElemId == null) return;
		
		var content = "";
		for (var i = 0; i<contentSrcNames.length; i++)
		{
			var srcName = contentSrcNames[i];
			if (srcName == null) continue;
			var contentSrc = null;
			switch (srcName)
			{
				case "Yelp":
					contentSrc = new EveryScapePortal.ExternalContentSources.ReviewsYelp();
					break;
				case "Flickr":
					contentSrc = new EveryScapePortal.ExternalContentSources.PhotosFlickr();
					break;
				case "YouTube":
					contentSrc = new EveryScapePortal.ExternalContentSources.VideosYouTube();
					break;
				case "YahooNews":
					contentSrc = new EveryScapePortal.ExternalContentSources.NewsYahoo();
					break;
				case "YahooWeb":
					contentSrc = new EveryScapePortal.ExternalContentSources.WebYahoo();
					break;
			}
			contentSrc.MakeRequest(tabElemId, args);
		}
	};
	
	//
	// @method MakeRequest - makes generic request to third-party server
	// @param {String} url  request url (must include paramters, callback will be appended)
	// @param {Function} [successCB]  callback triggered on successful response to the request 
	// @param {Function} [failCB]  callback triggered on any error response to the request
	// @param {Function} [timeoutCB]  callback triggered on a timeout before request completes
	// @returns
	//
	_esExtContentMgr.prototype.MakeRequest = function(requestUrl, cbParamName, targetObj, successCB, failCB, timeoutCB)
	{
		// IE6 will not allow document.body.appendChild of a script element from javascript
		// embeded in the page itself, so the MakeRequest is executed after onload.
		setTimeout(function() {
			esExtContentMgr.MakeRequest2(requestUrl, cbParamName, targetObj, successCB, failCB, timeoutCB);
		}, 0);
	};
	
	_esExtContentMgr.prototype.MakeRequest2 = function(requestUrl, cbParamName, targetObj, successCB, failCB, timeoutCB)
	{
		// can't make direct xhr request - violates same origin browser security policy must
		//  achieve cross-site scripting via dynamic script embed instead.
		var requestId = "esReqId" + esExtContentMgr.RequestCount++;
		var scriptElem = document.createElement("script");

		var timeout = setTimeout(function() {
			if (EXISTS(targetObj) && EXISTS(timeoutCB))
			{
				timeoutCB.call(targetObj);
			}
			esExtContentMgr.CleanupRequest(requestId, scriptElem);
		}, 30000);

		esExtContentMgr.RequestMap[requestId] = function(response) { 
			clearTimeout(timeout); 
			esExtContentMgr.CleanupRequest(requestId, scriptElem);
			try
			{
				var responseObj = eval(response);
				if (EXISTS(targetObj) && EXISTS(successCB))
				{
					successCB.call(targetObj, responseObj);
				}
			}
			catch(e)
			{
				if (EXISTS(targetObj) && EXISTS(failCB))
				{
					failCB.call(targetObj, "Unexpected error: invalid response object format received");
				}
			}
		};

		// Return the resulting serialization
		scriptElem.setAttribute("src", requestUrl + "&" + cbParamName + "=esExtContentMgr.RequestMap." + requestId);
		document.body.appendChild(scriptElem);
	};

  /** 
   * @method CleanupRequest - cleans up after a request completes or times out
   * @param {String} requestId  id for the request to cleanup
   * @param {Object} scriptElem  request script elem to cleanup
   */
	_esExtContentMgr.prototype.CleanupRequest = function(requestId, scriptElem)
  {
    delete esExtContentMgr.RequestMap[requestId];
    setTimeout(function() { document.body.removeChild(scriptElem);}, 0);    
  };
  
  return new _esExtContentMgr();
})();



/**/

﻿//
// Everyscape/ExternalContentSources/ReviewsYelp.js
//
// $Id: //services/web/EveryScapePortal_Jalapeno/js/EveryScape/ExternalContentSources/ReviewsYelp.js#1 $
//
// Copyright (c) 2008 EveryScape, Inc.
// All Rights Reserved.
//
if (undefined === window.EveryScapePortal)
{
	EveryScapePortal = {};
}

if (undefined === window.EveryScapePortal.ExternalContentSources)
{
	EveryScapePortal.ExternalContentSources = {};
}

EveryScapePortal.ExternalContentSources.ReviewsYelp = function()
{
	this.UpdateElemId = null;
	
	var RequestUrl = "http://api.yelp.com/";
	var ParameterNames = new Object();
	ParameterNames.ReviewSearch = "business_review_search";
	ParameterNames.ReviewSearchTerm = "term";
	ParameterNames.ReviewSearchNumBiz = "num_biz_requested";
	ParameterNames.ReviewSearchAddress = "location";
	ParameterNames.ReviewSearchLat = "lat";
	ParameterNames.ReviewSearchLong = "lng";
	ParameterNames.ReviewSearchRadius = "radius";
	ParameterNames.Key = "ywsid";
	ParameterNames.Callback = "callback";
	var NumBusinesses = 10;
	var Radius = 1;
	var Key = "MLBooFaizWdd_UGB88o-_w";
	
	this.MakeRequest = function(elemId, args)
	{
		this.UpdateElemId = elemId;
		
		var request;		
		if (!(args.Poi.Address == null) &&
				!(args.Poi.Address.CanonicalStreet1 == null) &&
				!(args.Poi.Address.CanonicalCity == null) &&
				!(args.Poi.Address.CanonicalPostalCode == null))
		{
			var address = args.Poi.Address.CanonicalStreet1;
			if (args.Poi.Address.CanonicalStreet2 != null)
				address += " " + args.Poi.Address.CanonicalStreet2;
			address += " " + args.Poi.Address.CanonicalCity + " " + args.Poi.Address.CanonicalPostalCode;

			request = RequestUrl + ParameterNames.ReviewSearch + 
				"?" + ParameterNames.ReviewSearchTerm + "=" + encodeURIComponent(args.Poi.Name) +
				"&" + ParameterNames.ReviewSearchNumBiz + "=" + NumBusinesses +
				"&" + ParameterNames.ReviewSearchAddress + "=" + encodeURIComponent(address) +
				"&" + ParameterNames.ReviewSearchRadius + "=" + Radius +
				"&" + ParameterNames.Key + "=" + Key;
		}
		else
		{
			request = RequestUrl + ParameterNames.ReviewSearch + 
					"?" + ParameterNames.ReviewSearchTerm + "=" + encodeURIComponent(args.Poi.Name) +
					"&" + ParameterNames.ReviewSearchNumBiz + "=" + NumBusinesses +
					"&" + ParameterNames.ReviewSearchLat + "=" + args.Poi.Lat +
					"&" + ParameterNames.ReviewSearchLong + "=" + args.Poi.Lng +
					"&" + ParameterNames.ReviewSearchRadius + "=" + Radius +
					"&" + ParameterNames.Key + "=" + Key;
		}
		esExtContentMgr.MakeRequest(request, ParameterNames.Callback, this, this.HandleResults, this.HandleError, this.HandleError) 				
	}		
};

EveryScapePortal.ExternalContentSources.ReviewsYelp.prototype.UpdateElem = function(content)
{
  $("#"+this.UpdateElemId).html(content);
}

EveryScapePortal.ExternalContentSources.ReviewsYelp.prototype.HandleResults = function(data)
{
  var biz;
  if (data.message.text == "OK" && 
      EXISTS(data.businesses) && 
      data.businesses.length > 0 &&
      (biz = this.FindBestResult(data.businesses)) != null) 
  {      
    var reviewList = "<ul>";      
    for(var i=0; i<biz.reviews.length; i++)
    {      
      var review = biz.reviews[i];
      var reviewListItem = "<li class=\"spacer\">";

      reviewListItem += "<div class=\"thumb\">";
      reviewListItem += "<a href=\"" + review.user_url + "\" target=\"_blank\">";
      reviewListItem += "<img src=\"" + review.user_photo_url_small + "\" />";
      reviewListItem += review.user_name + "</a>";
      reviewListItem += "</div>";
      
      reviewListItem += "<div>";
      reviewListItem += "<div class=\"text\">" + review.text_excerpt + "</div>";
      reviewListItem += "<div class=\"moretext\"><a href=\"" + review.url + "\" target=\"_blank\">Read More ...</a></div>";      
      reviewListItem += "</div>";
      
      reviewListItem += "</li>";
      reviewList += reviewListItem;
    }
    reviewList += "</ul>";
    reviewList += "<div class=\"YelpBadge\"><a href=\"http://www.yelp.com/\"><img src=\"http://static.px.yelp.com/i/new/developers/reviewsFromYelpWHT.gif\" alt=\"Reviews from Yelp\" border=\"0\"></a></div>";
		this.UpdateElem(reviewList);
  }
  else 
  {
    this.HandleError();
  }
};

EveryScapePortal.ExternalContentSources.ReviewsYelp.prototype.HandleError = function()
{
	this.UpdateElem($("<div/>").addClass("error").text("No reviews are available at this time").eq(0));
};
	
EveryScapePortal.ExternalContentSources.ReviewsYelp.prototype.FindBestResult = function(businesses)
{
  var s = es.CurrentState.Site;
  if (!EXISTS(s) || !EXISTS(s.Name)) return businesses[0];

  // build the regexp for the parts of the current business name
  var bNamePartMatch = false;      
  var patternString = "";
  var nameParts = s.Name.split(" ");
  for (var j=0; j<nameParts.length; j++)
  {
    if (patternString != "") patternString += "|";
    patternString += nameParts[j];
  }
  var pattern = new RegExp(patternString, "i");

  var matches = new Array();
  for (var i=0; i<businesses.length; i++)
  {
    var biz = businesses[i];
    var businessName = biz.name.toLowerCase();
    var address = biz.address1.toLowerCase();
    var city = biz.city.toLowerCase();
    var postalCode = biz.zip.toLowerCase();      
    
    // match if the name is the exactly the same
    if (EXISTS(s.Name) && businessName == s.Name.toLowerCase())
    {
      matches.push(biz); 
      continue;
    }
    
    // match if the address is exactly the same
    if (EXISTS(s.City) && city == s.City.toLowerCase() &&
        EXISTS(s.Address1) && address == s.Address1.toLowerCase())
    {
      matches.push(biz);
      continue;
    }
    
    // match if some parts of the name are the same
    while ((result = pattern.exec(businessName)) != null)
    {
      bNamePartMatch = true;
      break;
    }       
    if (bNamePartMatch)
    {
      matches.push(biz);
      continue;
    }
  }
  
  return (matches.length > 0 ? matches[0] : null)
};





/**/

﻿//
// Everyscape/ExternalContentSources/PhotosFlickr.js
//
// $Id: //services/web/EveryScapePortal_Jalapeno/js/EveryScape/ExternalContentSources/PhotosFlickr.js#1 $
//
// Copyright (c) 2008 EveryScape, Inc.
// All Rights Reserved.
//
if (undefined === window.EveryScapePortal)
{
	EveryScapePortal = {};
}

if (undefined === window.EveryScapePortal.ExternalContentSources)
{
	EveryScapePortal.ExternalContentSources = {};
}

EveryScapePortal.ExternalContentSources.PhotosFlickr = function()
{
	this.UpdateElemId = null;
	this.Disclaimer ="This product uses the Flickr API but is not endorsed or certified by Flickr.";

	var RequestUrl = "http://api.flickr.com/services/rest/";
	var ParameterNames = new Object();
	ParameterNames.PhotoSearch = "method=flickr.photos.search";
	ParameterNames.PhotoSearchTerm = "text";
	ParameterNames.PhotoSearchBoundingBox = "bbox";
	ParameterNames.PhotoSearchPhotosPerPage = "per_page";
	ParameterNames.PhotoSearchPage = "page";
	ParameterNames.PhotoSearchSort = "sort";
	ParameterNames.PhotoSearchAccuracy = "accuracy";
	ParameterNames.PhotoSearchExtras = "extras";
	ParameterNames.PhotoSearchContentType = "content_type";
	ParameterNames.PhotoSearchFormat = "format";
	
	ParameterNames.PhotoInfo = "method=flickr.photos.getInfo";
	ParameterNames.PhotoInfoId = "photo_id";
	ParameterNames.PhotoInfoSecret = "secret";
	ParameterNames.PhotoInfoFormat = "format"; // undocumented?

	ParameterNames.Key = "api_key";
	ParameterNames.Callback = "jsoncallback";

	var Key = "cdc38aba13e79b64dd1b1d9fd81712b8";
	var SearchSort = "relevance";
	var SearchContentType = "1"; /* photos only */
	var SearchPhotosPerPage = 10;
	var SearchPage = 1;
	var Format = "json";
	var Accuracy = 16;
	var Extras = "geo";
	
	this.MakeRequest = function(elemId, args)
	{
		this.UpdateElemId = elemId;
	
		var request;
		if (args.Poi != null)
		{	
			/* Search by text */
			var searchTerm = encodeURIComponent("\"" + args.Poi.Name + "\" AND " + "\"" + args.Poi.CityName + "\"")
			request = RequestUrl + 
				"?" + ParameterNames.PhotoSearch +
				"&" + ParameterNames.PhotoSearchTerm + "=" + searchTerm +
				"&" + ParameterNames.PhotoSearchSort + "=" + SearchSort +
				"&" + ParameterNames.PhotoSearchPage + "=" + SearchPage + 
				"&" + ParameterNames.PhotoSearchPhotosPerPage + "=" + SearchPhotosPerPage +
				"&" + ParameterNames.PhotoSearchFormat + "=" + Format +
				"&" + ParameterNames.PhotoSearchContentType + "=" + SearchContentType +
				"&" + ParameterNames.Key + "=" + Key;
		}
		else if (args.Address != null)
		{
			var searchTerm = "";
			searchTerm += encodeURIComponent(args.Address);
			if (args.CityName != null)
			{
				searchTerm += encodeURIComponent(" OR \"" + args.CityName + "\"");
			}

			request = RequestUrl +
					"?" + ParameterNames.PhotoSearch +
					"&" + ParameterNames.PhotoSearchTerm + "=" + searchTerm +
					"&" + ParameterNames.PhotoSearchBoundingBox + "=" + args.MinLng + "," + args.MinLat + "," + args.MaxLng + "," + args.MaxLat +
					"&" + ParameterNames.PhotoSearchSort + "=" + SearchSort +
					"&" + ParameterNames.PhotoSearchAccuracy + "=" + Accuracy +
					"&" + ParameterNames.PhotoSearchExtras + "=" + Extras +
					"&" + ParameterNames.PhotoSearchPage + "=" + SearchPage +
					"&" + ParameterNames.PhotoSearchPhotosPerPage + "=" + SearchPhotosPerPage +
					"&" + ParameterNames.PhotoSearchFormat + "=" + Format +
					"&" + ParameterNames.PhotoSearchContentType + "=" + SearchContentType +
					"&" + ParameterNames.Key + "=" + Key;
		}
		esExtContentMgr.MakeRequest(request, ParameterNames.Callback, this, this.HandleResults, this.HandleError, this.HandleError) 				
	}
	
	this.MakePhotoDetailsRequest = function(p)
	{
		var request = RequestUrl +
	    "?" + ParameterNames.PhotoInfo + 
	    "&" + ParameterNames.PhotoInfoId + "=" + p.id +
	    "&" + ParameterNames.PhotoInfoSecret + "=" + p.secret +
	    "&" + ParameterNames.PhotoInfoFormat + "=" + Format +
	    "&" + ParameterNames.Key + "=" + Key;
	  esExtContentMgr.MakeRequest(request, ParameterNames.Callback, this, this.HandlePhotoDetails);
	}
};

EveryScapePortal.ExternalContentSources.PhotosFlickr.prototype.UpdateElem = function(content)
{
  $("#"+this.UpdateElemId).html(content);
};

EveryScapePortal.ExternalContentSources.PhotosFlickr.prototype.HandleResults = function(data)
{
  if (!EXISTS(data.photos) || data.photos.total == 0 || data.photos.pages == 0) 
  {
    this.HandleError();
    return;
  }      

	var photos = data.photos;
	var plist = document.createElement("ul");
	var pcount = 0;
	var savep = null;
	for ( var pi in photos.photo )
	{
	  var p = photos.photo[pi];
	  var pitem = document.createElement("li");		
	  $(pitem).addClass("spacer");  
	  $(pitem).append( 
	    "<div class=\"thumb\">" +
	    "<a href=\"http://www.flickr.com/photos/" + p.owner + "/" + p.id + "\" target=\"_blank\">" +
	    "<img src=\"http://farm" + p.farm + ".static.flickr.com/" + p.server + "/" + p.id + "_" + p.secret + "_s.jpg\"/>" + "</a>" +
			"<a href=\"http://www.flickr.com/photos/" + p.owner + "\" target=\"_blank\"><div id=\"photouser" + p.id + "\"></div></a></div>" +
			"<div class=\"phototitle\"><a href=\"http://www.flickr.com/photos/" + p.owner + "/" + p.id + "\" target=\"_blank\">" + p.title + "</a></div>" +
			"<div id=\"photodetail" + p.id + "\" class=\"photodetail\"></div>");
		plist.appendChild(pitem);
		
	  this.MakePhotoDetailsRequest(p);  
	  pcount++;
	}
  
  if (pcount > 0)		
  {
		$(plist).append("<div id=\"photodisclaimer\">" + this.Disclaimer + "</div>");
		this.UpdateElem(plist);
	  $("#photodisclaimer").css("display", "block");
	}
	else
	  this.HandleError();
};

EveryScapePortal.ExternalContentSources.PhotosFlickr.prototype.HandleError = function()
{
	this.UpdateElem( $("<div/>").addClass("error").text("No photos are available at this time").eq(0) );
};

EveryScapePortal.ExternalContentSources.PhotosFlickr.prototype.HandlePhotoDetails = function(data)
{
  if  (!EXISTS(data.photo)) return;
  
  var p = data.photo;
  var userDivId = "photouser" + p.id;
  var detailsDivId = "photodetail" + p.id;
  $("#" + userDivId).html(p.owner.username);
  var tags = "Tags: ";
  if (EXISTS(p.tags))
  {
    try
    {
      var tagcount = 0;
      for (var ti in p.tags.tag)
      {
        if (tagcount >=10) break;
        var t = p.tags.tag[ti];
        tags += " <a href=\"http://www.flickr.com/tags/" + t._content + "\" target=\"_blank\">" + t.raw + "</a> "          
        tagcount++;
      }
    }
    catch(e) {} // ignore no tags
  }
  var description = EveryScapePortal.Text.Shorten(p.description._content, 200);
  $("#" + detailsDivId).html("<div class=\"photodescription\">" + description + "</div><div class=\"phototags\">" + tags + "</div>" )
};




/**/

﻿//
// Everyscape/ExternalContentSources/VideosYouTube.js
//
// $Id: //services/web/EveryScapePortal_Jalapeno/js/EveryScape/ExternalContentSources/VideosYouTube.js#1 $
//
// Copyright (c) 2008 EveryScape, Inc.
// All Rights Reserved.
//
if (undefined === window.EveryScapePortal)
{
	EveryScapePortal = {};
}

if (undefined === window.EveryScapePortal.ExternalContentSources)
{
	EveryScapePortal.ExternalContentSources = {};
}

EveryScapePortal.ExternalContentSources.VideosYouTube = function()
{
	this.UpdateElemId = null;
	this.TmpIdMap = {};

	var RequestUrl = "http://gdata.youtube.com/feeds/api/videos";
	var ParameterNames = new Object();
	ParameterNames.VideoSearchTerm = "vq";
	ParameterNames.VideoSearchNumVideos = "max-results";
	ParameterNames.VideoSearchIndex = "start-index";
	ParameterNames.VideoSearchSort = "orderby";
	ParameterNames.VideoSearchContentType = "format";
	ParameterNames.VideoSearchFormat = "alt";	
	ParameterNames.Callback = "callback";

	var SearchSort = "relevance";
	var SearchContentType = "5"; /* embeddable only */
	var SearchVideosPerPage = 10;
	var SearchStartVideo = 1;
	var Format = "json-in-script";

  this.MakeRequest = function(elemId, args)
  {
		this.UpdateElemId = elemId;
		
		var request = RequestUrl +
				"?" + ParameterNames.VideoSearchTerm + "=" + encodeURIComponent("\""+args.Poi.Name+"\"") +
				"&" + ParameterNames.VideoSearchSort + "=" + SearchSort +
				"&" + ParameterNames.VideoSearchIndex + "=" + SearchStartVideo +
				"&" + ParameterNames.VideoSearchNumVideos + "=" + SearchVideosPerPage +
				"&" + ParameterNames.VideoSearchFormat + "=" + Format +
				"&" + ParameterNames.VideoSearchContentType + "=" + SearchContentType;

		esExtContentMgr.MakeRequest(request, ParameterNames.Callback, this, this.HandleResults, this.HandleError, this.HandleError) 				
  }
  
  this.MakeUserDetailsRequest = function(author)
  {
		var request = author.uri.$t + 
      "?" + ParameterNames.VideoSearchFormat + "=" + Format;
	  esExtContentMgr.MakeRequest(request,
      ParameterNames.Callback,
      this.HandleUserDetails);		          
  }
};

EveryScapePortal.ExternalContentSources.VideosYouTube.prototype.UpdateElem = function(content)
{
  $("#"+this.UpdateElemId).html(content);
};

EveryScapePortal.ExternalContentSources.VideosYouTube.prototype.HandleResults = function(data)
{
  if (!EXISTS(data.feed) || !EXISTS(data.feed.entry) || data.feed.entry.length == 0)
  {
    this.HandleError();
    return;
  }

  this.TmpIdMap = {};
  
  var vidlist = "<ul>";
  var entries = data.feed.entry;
  for (var i=0; i<entries.length; i++)
  {
    var entry = entries[i];
    var author = entry.author[0];
    var media = entry.media$group;

    var links = entry.link;   
    var vidlink = this.GetLink(links, "alternate");   
    var thumbnails = media.media$thumbnail;
    var thumblink = this.GetThumbnail(thumbnails);
    
    var viditem = "<li class=\"spacer\">";  
    
    var thumbStr = "<div class=\"thumb\">";
    if (EXISTS(vidlink))
      thumbStr += "<a href=\"" + vidlink + "\" target=\"_blank\">";
    if (EXISTS(thumblink)) 
      thumbStr += "<img src=\"" + thumblink + "\"/>";
    if (EXISTS(vidlink))
      thumbStr += "</a>";
		thumbStr += "<div class=\"viduser\" id=\"viduser" + this.GetUserDivId(author.name.$t) + "\">" + author.name.$t + "</div>";
		thumbStr += "</div>";
		viditem += thumbStr;

    var titleStr = "<div class=\"videotitle\">";
    if (EXISTS(vidlink))
      titleStr += "<a href=\"" + vidlink + "\" target=\"_blank\">";
    titleStr += entry.title.$t;
    if (EXISTS(vidlink))
      titleStr += "</a>";
    titleStr += "</div>";
    viditem += titleStr;
    
    var detailStr = "<div class=\"videodetail\">" + EveryScapePortal.Text.Shorten(entry.content.$t, 200) + "</div>";
    viditem += detailStr;
    
    viditem += "</li>";
    vidlist += viditem;
  }
  vidlist += "</ul>";
  vidlist += "<div class=\"YouTubeBadge\"><a href=\"http://www.youtube.com/\"><img src=\"" + ApplicationBaseUrl + "images/youtube_badge.gif\" border=\"0\"></a></div>";
  this.UpdateElem(vidlist);

  this.TmpIdMap = {};
  for (var i=0; i<entries.length; i++)
  {
    var entry = entries[i];
    var author = entry.author[0];
    this.MakeUserDetailsRequest(author);
  }    
};

EveryScapePortal.ExternalContentSources.VideosYouTube.prototype.HandleError = function()
{
  this.UpdateElem( $("<div/>").addClass("error").text("No videos are available at this time").eq(0) );
}

EveryScapePortal.ExternalContentSources.VideosYouTube.prototype.HandleUserDetails = function(data)
{
  if (!EXISTS(data.entry)) return;
  
  var entry = data.entry;
  var username = entry.author[0].name.$t;
  var viduserId = "viduser" + this.GetUserDivId(username);
  var userlink = this.GetLink(entry.link, "alternate");
  if (EXISTS(userlink))
  {
    var userhtml = "<a href=\"" + userlink + "\" target=\"_blank\">" + username + "</a>";
    $("#" + viduserId).html(userhtml);
  }
};

EveryScapePortal.ExternalContentSources.VideosYouTube.prototype.GetThumbnail = function(thumbnails)
{
  var minW = Number.MAX_VALUE;
  var t = null;
  for (var i=0; i<thumbnails.length; i++)
  {
    var thumb = thumbnails[i];
    if (thumb.width < minW)
    {
      t = thumb.url;
    }
  }
  return t;
};

EveryScapePortal.ExternalContentSources.VideosYouTube.prototype.GetLink = function(links, related)
{
  for (var i=0; i<links.length; i++)
  {
    var link = links[i];
    if (link.rel == related)
    {
      return link.href;
    }
  }
  return null;
};
  
EveryScapePortal.ExternalContentSources.VideosYouTube.prototype.GetUserDivId = function(youtubeid)
{
  if (this.TmpIdMap[youtubeid])
  {
    this.TmpIdMap[youtubeid]++;
    return youtubeid + this.TmpIdMap[youtubeid];
  }
  else
  {
    this.TmpIdMap[youtubeid] = 1;
    return  youtubeid + 1;
  }
};






/**/

﻿//
// Everyscape/ExternalContentSources/NewsYahoo.js
//
// $Id: //services/web/EveryScapePortal_Jalapeno/js/EveryScape/ExternalContentSources/NewsYahoo.js#1 $
//
// Copyright (c) 2008 EveryScape, Inc.
// All Rights Reserved.
//
if (undefined === window.EveryScapePortal)
{
	EveryScapePortal = {};
}

if (undefined === window.EveryScapePortal.ExternalContentSources)
{
	EveryScapePortal.ExternalContentSources = {};
}

EveryScapePortal.ExternalContentSources.NewsYahoo = function()
{
	this.UpdateElemId = null;
	
	var RequestUrl = "http://search.yahooapis.com/NewsSearchService/V1/newsSearch";
	var ParameterNames = new Object();
	ParameterNames.AppId = "appid";
	ParameterNames.Query = "query";
	ParameterNames.ResultCount = "results";
	ParameterNames.Callback = "callback";
	ParameterNames.Language = "language";
	ParameterNames.OutputFormat = "output";

	var AppId = "gEWQRYHV34FbGReKdOTd6KAGz4cLZALSp72vpDYP5MerNA8Qhgr5RdfCeNm8Cy0_nw--";
	var NumResults = 10;
	var Language = "en";
	var Format = "json";
	
	this.MakeRequest = function(elemId, args)
	{
		this.UpdateElemId = elemId;

		var request = RequestUrl +
				"?" + ParameterNames.AppId + "=" + AppId +
				"&" + ParameterNames.Query + "=" + encodeURIComponent("\"" + args.Poi.Name + "\" \"" +  args.Poi.CityName + "\"") +
				"&" + ParameterNames.ResultCount + "=" + NumResults +
				"&" + ParameterNames.Language + "=" + Language + 
				"&" + ParameterNames.OutputFormat + "=" + Format;

		esExtContentMgr.MakeRequest(request, ParameterNames.Callback, this, this.HandleResults, this.HandleError, this.HandleError) 								
	}
};

EveryScapePortal.ExternalContentSources.NewsYahoo.prototype.UpdateElem = function(content)
{
  $("#"+this.UpdateElemId).html(content);
};

EveryScapePortal.ExternalContentSources.NewsYahoo.prototype.HandleResults = function(results)
{
	if (!EXISTS(results) || !EXISTS(results.ResultSet) || !EXISTS(results.ResultSet.Result))
	{
		this.HandleError();
		return;
	}
	if (0 == results.ResultSet.Result.length)
	{
		this.UpdateElem( $("<div/>").addClass("error").text("No news results are available at this time").eq(0) );
		return;
	}

	var html = "<ul>";
	for (var i = 0; i < results.ResultSet.Result.length; ++i)
	{
		var article = results.ResultSet.Result[i];
		html += "<li><h2>";
		html += "<a href=\"" + article.Url + "\" target=\"_blank\">" + article.Title + "</a> - " + article.NewsSource
		html += "</h2>" + article.Summary;
		html += "</li>";
	}
	html += "</ul>";
	html += "<div class=\"YahooBadge\"><a href=\"http://developer.yahoo.com/\"><img src=\"http://l.yimg.com/us.yimg.com/i/us/nt/bdg/websrv_88_1.gif\" border=\"0\"></a></div>";
	this.UpdateElem(html);
	$("#NewsMta").css("display", "block");
};

EveryScapePortal.ExternalContentSources.NewsYahoo.prototype.HandleError = function()
{
  this.UpdateElem( $("<div/>").addClass("error").text("Error encountered loading news results").eq(0) );
};






/**/

﻿//
// Everyscape/ExternalContentSources/VideosYouTube.js
//
// $Id: //services/web/EveryScapePortal_Jalapeno/js/EveryScape/ExternalContentSources/VideosYouTube.js#1 $
//
// Copyright (c) 2008 EveryScape, Inc.
// All Rights Reserved.
//
if (undefined === window.EveryScapePortal)
{
	EveryScapePortal = {};
}

if (undefined === window.EveryScapePortal.ExternalContentSources)
{
	EveryScapePortal.ExternalContentSources = {};
}

EveryScapePortal.ExternalContentSources.VideosYouTube = function()
{
	this.UpdateElemId = null;
	this.TmpIdMap = {};

	var RequestUrl = "http://gdata.youtube.com/feeds/api/videos";
	var ParameterNames = new Object();
	ParameterNames.VideoSearchTerm = "vq";
	ParameterNames.VideoSearchNumVideos = "max-results";
	ParameterNames.VideoSearchIndex = "start-index";
	ParameterNames.VideoSearchSort = "orderby";
	ParameterNames.VideoSearchContentType = "format";
	ParameterNames.VideoSearchFormat = "alt";	
	ParameterNames.Callback = "callback";

	var SearchSort = "relevance";
	var SearchContentType = "5"; /* embeddable only */
	var SearchVideosPerPage = 10;
	var SearchStartVideo = 1;
	var Format = "json-in-script";

  this.MakeRequest = function(elemId, args)
  {
		this.UpdateElemId = elemId;
		
		var request = RequestUrl +
				"?" + ParameterNames.VideoSearchTerm + "=" + encodeURIComponent("\""+args.Poi.Name+"\"") +
				"&" + ParameterNames.VideoSearchSort + "=" + SearchSort +
				"&" + ParameterNames.VideoSearchIndex + "=" + SearchStartVideo +
				"&" + ParameterNames.VideoSearchNumVideos + "=" + SearchVideosPerPage +
				"&" + ParameterNames.VideoSearchFormat + "=" + Format +
				"&" + ParameterNames.VideoSearchContentType + "=" + SearchContentType;

		esExtContentMgr.MakeRequest(request, ParameterNames.Callback, this, this.HandleResults, this.HandleError, this.HandleError) 				
  }
  
  this.MakeUserDetailsRequest = function(author)
  {
		var request = author.uri.$t + 
      "?" + ParameterNames.VideoSearchFormat + "=" + Format;
	  esExtContentMgr.MakeRequest(request,
      ParameterNames.Callback,
      this.HandleUserDetails);		          
  }
};

EveryScapePortal.ExternalContentSources.VideosYouTube.prototype.UpdateElem = function(content)
{
  $("#"+this.UpdateElemId).html(content);
};

EveryScapePortal.ExternalContentSources.VideosYouTube.prototype.HandleResults = function(data)
{
  if (!EXISTS(data.feed) || !EXISTS(data.feed.entry) || data.feed.entry.length == 0)
  {
    this.HandleError();
    return;
  }

  this.TmpIdMap = {};
  
  var vidlist = "<ul>";
  var entries = data.feed.entry;
  for (var i=0; i<entries.length; i++)
  {
    var entry = entries[i];
    var author = entry.author[0];
    var media = entry.media$group;

    var links = entry.link;   
    var vidlink = this.GetLink(links, "alternate");   
    var thumbnails = media.media$thumbnail;
    var thumblink = this.GetThumbnail(thumbnails);
    
    var viditem = "<li class=\"spacer\">";  
    
    var thumbStr = "<div class=\"thumb\">";
    if (EXISTS(vidlink))
      thumbStr += "<a href=\"" + vidlink + "\" target=\"_blank\">";
    if (EXISTS(thumblink)) 
      thumbStr += "<img src=\"" + thumblink + "\"/>";
    if (EXISTS(vidlink))
      thumbStr += "</a>";
		thumbStr += "<div class=\"viduser\" id=\"viduser" + this.GetUserDivId(author.name.$t) + "\">" + author.name.$t + "</div>";
		thumbStr += "</div>";
		viditem += thumbStr;

    var titleStr = "<div class=\"videotitle\">";
    if (EXISTS(vidlink))
      titleStr += "<a href=\"" + vidlink + "\" target=\"_blank\">";
    titleStr += entry.title.$t;
    if (EXISTS(vidlink))
      titleStr += "</a>";
    titleStr += "</div>";
    viditem += titleStr;
    
    var detailStr = "<div class=\"videodetail\">" + EveryScapePortal.Text.Shorten(entry.content.$t, 200) + "</div>";
    viditem += detailStr;
    
    viditem += "</li>";
    vidlist += viditem;
  }
  vidlist += "</ul>";
  vidlist += "<div class=\"YouTubeBadge\"><a href=\"http://www.youtube.com/\"><img src=\"" + ApplicationBaseUrl + "images/youtube_badge.gif\" border=\"0\"></a></div>";
  this.UpdateElem(vidlist);

  this.TmpIdMap = {};
  for (var i=0; i<entries.length; i++)
  {
    var entry = entries[i];
    var author = entry.author[0];
    this.MakeUserDetailsRequest(author);
  }    
};

EveryScapePortal.ExternalContentSources.VideosYouTube.prototype.HandleError = function()
{
  this.UpdateElem( $("<div/>").addClass("error").text("No videos are available at this time").eq(0) );
}

EveryScapePortal.ExternalContentSources.VideosYouTube.prototype.HandleUserDetails = function(data)
{
  if (!EXISTS(data.entry)) return;
  
  var entry = data.entry;
  var username = entry.author[0].name.$t;
  var viduserId = "viduser" + this.GetUserDivId(username);
  var userlink = this.GetLink(entry.link, "alternate");
  if (EXISTS(userlink))
  {
    var userhtml = "<a href=\"" + userlink + "\" target=\"_blank\">" + username + "</a>";
    $("#" + viduserId).html(userhtml);
  }
};

EveryScapePortal.ExternalContentSources.VideosYouTube.prototype.GetThumbnail = function(thumbnails)
{
  var minW = Number.MAX_VALUE;
  var t = null;
  for (var i=0; i<thumbnails.length; i++)
  {
    var thumb = thumbnails[i];
    if (thumb.width < minW)
    {
      t = thumb.url;
    }
  }
  return t;
};

EveryScapePortal.ExternalContentSources.VideosYouTube.prototype.GetLink = function(links, related)
{
  for (var i=0; i<links.length; i++)
  {
    var link = links[i];
    if (link.rel == related)
    {
      return link.href;
    }
  }
  return null;
};
  
EveryScapePortal.ExternalContentSources.VideosYouTube.prototype.GetUserDivId = function(youtubeid)
{
  if (this.TmpIdMap[youtubeid])
  {
    this.TmpIdMap[youtubeid]++;
    return youtubeid + this.TmpIdMap[youtubeid];
  }
  else
  {
    this.TmpIdMap[youtubeid] = 1;
    return  youtubeid + 1;
  }
};






/**/

﻿//
// $Id: //depot/EveryScape/Stable/services/web/EveryScapePortal_Jalapeno/js/EveryScape/ExternalContentSources/Web_Yahoo.js#2 $
//
// Copyright (c) 2008 EveryScape, Inc.
// All Rights Reserved.
//
if (undefined === window.EveryScapePortal)
{
	EveryScapePortal = {};
}

if (undefined === window.EveryScapePortal.ExternalContentSources)
{
	EveryScapePortal.ExternalContentSources = {};
}

EveryScapePortal.ExternalContentSources.WebYahoo = function()
{
	this.UpdateElemId = null;
	
	var RequestUrl = "http://search.yahooapis.com/WebSearchService/V1/webSearch";
	var ParameterNames = new Object();
	ParameterNames.WebSearchTerm = "query";
	ParameterNames.WebSearchType = "type";
	ParameterNames.WebSearchNumResults = "results";
	ParameterNames.WebSearchIndex = "start";
	ParameterNames.WebSearchRegion = "region";
	ParameterNames.WebSearchFormat = "output";
	ParameterNames.Key = "appid";
	ParameterNames.Callback = "callback";
	ParameterNames.Language = "language";

	var Key = "gEWQRYHV34FbGReKdOTd6KAGz4cLZALSp72vpDYP5MerNA8Qhgr5RdfCeNm8Cy0_nw--";
	var SearchResultsPerPage = 10;
	var SearchStartResult = 1;
	var SearchType = "all";
	var Format = "json";
	
	this.MakeRequest = function(elemId, args)
	{
		this.UpdateElemId = elemId;
		
		var searchTerm = encodeURIComponent("\"" + args.Poi.Name + "\"  AND \"" +  args.Poi.CityName + "\"");
		var request = RequestUrl +
				"?" + ParameterNames.WebSearchTerm + "=" + searchTerm +
				"&" + ParameterNames.WebSearchType + "=" + SearchType +
				"&" + ParameterNames.WebSearchIndex + "=" + SearchStartResult +
				"&" + ParameterNames.WebSearchNumResults + "=" + SearchResultsPerPage +
				"&" + ParameterNames.WebSearchRegion + "=" + args.Poi.CountryCode +
				"&" + ParameterNames.WebSearchFormat + "=" + Format +
				"&" + ParameterNames.Language + "=" + "en" +
				"&" + ParameterNames.Key+ "=" + Key;
			
		esExtContentMgr.MakeRequest(request, ParameterNames.Callback, this, this.HandleResults, this.HandleError, this.HandleError) 				
	}
};

EveryScapePortal.ExternalContentSources.WebYahoo.prototype.UpdateElem = function(content)
{
	$("#"+this.UpdateElemId).html(content);
};

EveryScapePortal.ExternalContentSources.WebYahoo.prototype.HandleResults = function(data)
{
	if (!EXISTS(data.ResultSet) || (data.totalResultsReturned == 0))
	{
		this.HandleError();
	}
    
	var weblist = document.createElement("ul");
	var results = data.ResultSet.Result;
	for (var i=0; i<results.length; i++)
	{
		var result = results[i];
		var webitem = document.createElement("li");
		$(webitem).addClass("spacer");  
    
		var titleStr = "<h2>";
		if (EXISTS(result.Title))
		{
			if (EXISTS(result.ClickUrl))
			{
				titleStr += "<a href=\"" + result.ClickUrl + "\" target=\"_blank\">" + result.Title + "</a>";
			}
			else
			{
				titleStr += result.Title;
			}
		}
		titleStr += "</h2>";
		$(webitem).append(titleStr);
    
		var detailStr = "<div class=\"webdetail\">";
		if (EXISTS(result.Summary))
		{
			detailStr += result.Summary;
		}
		if (EXISTS(result.DisplayUrl) && EXISTS(result.ClickUrl))
		{
			detailStr += "<div class=\"webdetaillink\"><a href=\"" + result.ClickUrl + "\" target=\"_blank\">" + result.DisplayUrl + "</a></div>";
		}
		detailStr += "</div>";
		$(webitem).append(detailStr);
    
		weblist.appendChild(webitem);
	}
	$(weblist).append("<div class=\"YahooBadge\"><a href=\"http://developer.yahoo.com/\"><img src=\"http://l.yimg.com/us.yimg.com/i/us/nt/bdg/websrv_88_1.gif\" border=\"0\"></a></div>");
  
	this.UpdateElem(weblist);    
};

EveryScapePortal.ExternalContentSources.WebYahoo.prototype.HandleError = function()
{
	this.UpdateElem( $("<div/>").addClass("error").text("No web search results are available at this time").eq(0) );
};


/**/

