/* FindAnyone.com */
/* UPC360 */

var usaStates = [
	"Alabama", 
	"Alaska", 
	"Arizona", 
	"Arkansas", 
	"California", 
	"Colorado", 
	"Connecticut", 
	"Delaware", 
	"District Of Columbia", 
	"Florida", 
	"Georgia", 
	"Hawaii", 
	"Idaho", 
	"Illinois", 
	"Indiana", 
	"Iowa", 
	"Kansas", 
	"Kentucky", 
	"Louisiana", 
	"Maine", 
	"Maryland", 
	"Massachusetts", 
	"Michigan", 
	"Minnesota", 
	"Mississippi", 
	"Missouri", 
	"Montana", 
	"Nebraska", 
	"Nevada", 
	"New Hampshire", 
	"New Jersey", 
	"New Mexico", 
	"New York", 
	"North Carolina", 
	"North Dakota", 
	"Ohio", 
	"Oklahoma", 
	"Oregon", 
	"Pennsylvania", 
	"Rhode Island", 
	"South Carolina", 
	"South Dakota", 
	"Tennessee", 
	"Texas", 
	"Utah", 
	"Vermont", 
	"Virginia", 
	"Washington", 
	"West Virginia", 
	"Wisconsin", 
	"Wyoming"
];

var xPreviewOffset = 220;
var yPreviewOffset = 5;

$(document).ready(function() { 

	$('#queryName').clearingInput();
	$('#queryState').clearingInput();
	$('#queryPhone').clearingInput();	
	
	$('#queryState').autocomplete({ source: usaStates });
	$('#miniState').autocomplete({ source: usaStates });
	
	$.validator.addMethod("FullName", function(value, element) {
		var theName = value.split(' ');
		return ( theName.length > 1 && theName[0].length >= 1 && theName[1].length >= 1 );
    }, "Please enter a first and last name.");
    
    $.validator.addMethod("USPhone", function(phone_number, element) {
    	phone_number = phone_number.replace(/\s+/g, ""); 
		return this.optional(element) || phone_number.length > 9 &&
			phone_number.match(/^(1-?)?(\([2-9]\d{2}\)|[2-9]\d{2})-?[2-9]\d{2}-?\d{4}$/);
	}, "Please specify a valid phone number.");
    
	$("#personFinder").validate({
		errorLabelContainer: $("#errorContainer"),
		messages: {
			who: "Please enter a first and last name.<br/>",
			state: "Please specify a US state to search.<br/> "
		}
	});
	
	$("#phoneLookup").validate({
		errorLabelContainer: $("#errorContainer"),
		messages: {
			phone: "Please enter a valid US phone number."
		}
	});
	
	if ( $("#popLinks") ) {

		var aboutContent = $("#about").html();
		$("#lnkAbout").tipTip({maxWidth: "250px",
		                      activation: 'click', 
		                      content: aboutContent,
		                      edgeOffset: 10});

		var privacyContent = $("#privacy").html();
		$("#lnkPrivacy").tipTip({maxWidth: "250px",
		                      activation: 'click',
		                      content: privacyContent,
		                      edgeOffset: 10});

	}
	
	
	$("#resultTabs").tabs({
			fx: { opacity: 'toggle', duration: 'fast' }
	});
	
	$(".resultGroup h3").click(function() {
		$(this).next().slideToggle('fast');
	});
		
	if ( $("#searchWho") )
	{
		bingSearch($("#searchWho").val());
		
		$("#progressAnim").fadeOut();
		$("#allResults").show();
		$("#footing").show();

	}
	

});

jQuery.fn.center = function () {
    this.css("position","absolute");
    this.css("top", (($(window).height() - this.outerHeight()) / 2) + $(window).scrollTop() + "px");
    this.css("left", (($(window).width() - this.outerWidth()) / 2) + $(window).scrollLeft() + "px");
    return this;
}

/* Bing Search Routines */

function bingSearch(query)
{
	var bingCall = buildBingCall(query);

	$.ajax({
		type: "GET",
		url: bingCall,
		dataType: 'jsonp',
		success: displayBingResults,
		error: displayError
	});
}

function displayBingResults(jsonData, textData)
{
	displayImageResults(jsonData, "#imageResults");	
	displayVideoResults(jsonData, "#videoResults");
	displayNewsResults(jsonData, "#newsResults");
	displayWebResults(jsonData, "#sitesResults");
	
	$("a.preview").hover(function(e) {
		var caption = ($(this).find(':first-child').attr('alt') != '') ? $(this).find(':first-child').attr('alt') : "";
		$("body").append("<p id='imgPreview'><img src='"+ this.title +"' alt='Image preview'/>"
		                 + "<br clear='all'/> " + caption + "</p>");								 
		$("#imgPreview")
			.css("top",(e.pageY - yPreviewOffset) + "px")
			.css("left",(e.pageX - xPreviewOffset) + "px")
			.fadeIn("fast");						
    },
	function(){
		$("#imgPreview").remove();
    });	
	$("a.preview").mousemove(function(e){
		$("#imgPreview")
			.css("top",(e.pageY - yPreviewOffset) + "px")
			.css("left",(e.pageX - xPreviewOffset) + "px");
	});

}

function displayImageResults(jsonData, selector)
{
	var htmlOutput = "";
	
	if ( jsonData.SearchResponse.Image.Results && jsonData.SearchResponse.Image.Results != null )
	{
		htmlOutput += "<ul class='mediaResults imageResults'>";
		$.each(jsonData.SearchResponse.Image.Results, function(i, item) {
			var itemTitle = item.Thumbnail.Url;
			htmlOutput += "<li>" 
                       +  "<a target='_blank' href='" + item.Url + "' class='preview' title='"
                       +  item.MediaUrl +"'>"
                       +  "<img src='" + item.Thumbnail.Url + "' height='95' alt='"
                       +  item.Title.replace(/\'/,"&#8217;") + "'/></a>"
                       +  "</li>";

		});
		htmlOutput += "</ul><br clear='all'>";
	}
	else
	{
		htmlOutput += "<p>No image results.</p>";
	}
	
	$(selector).append(htmlOutput);

}

function displayVideoResults(jsonData, selector)
{
	var htmlOutput = "";
	
	if ( jsonData.SearchResponse.Video.Results && jsonData.SearchResponse.Video.Results != null )
	{
		htmlOutput += "<ul class='mediaResults videoResults'>";
		$.each(jsonData.SearchResponse.Video.Results, function(i, item) {
			htmlOutput += "<li" 
			           +  " style='background-image: url("+ item.StaticThumbnail.Url + "); '>"
                       +  "<a target='_blank' href='" + item.PlayUrl + "'"
                       +  " title='" + item.Title.replace(/\'/,"&#8217;") + "'>"
                       +  "&nbsp;</a></li>";

		});
		htmlOutput += "</ul><br clear='all'>";
	}
	else
	{
		htmlOutput += "<p>No video results.</p>";
	}
	
	$(selector).append(htmlOutput);

}

function displayNewsResults(jsonData, selector)
{
	var htmlOutput = "";
	
	if ( jsonData.SearchResponse.News.Results && jsonData.SearchResponse.News.Results != null )
	{
		htmlOutput += "<ul class='textResults newsResults'>";
		$.each(jsonData.SearchResponse.News.Results, function(i, item) {
			htmlOutput += "<li><a target=\"blank\" href=\""
						+ item.Url
						+ "\">"
						+ item.Title
						+ "</a><br/><strong>"
						+ item.Source
						+ "</strong> <small> &bull; "
						+ item.Date
						+ "</small><br />"
						+ item.Snippet
						+ "</li>";

		});
		htmlOutput += "</ul><br clear='all'>";
	}
	else
	{
		htmlOutput += "<p>No video results.</p>";
	}
	
	$(selector).append(htmlOutput);

}

function displayWebResults(jsonData, selector)
{
	var htmlOutput = "";
	
	if ( jsonData.SearchResponse.Web.Results && jsonData.SearchResponse.Web.Results != null )
	{
		htmlOutput += "<ul class='textResults webResults'>";
		$.each(jsonData.SearchResponse.Web.Results, function(i, item) {
			htmlOutput += "<li><a target=\"blank\" href=\""
						+ item.Url
						+ "\">"
						+ item.Title
						+ "</a><br/><strong>"
						+ item.DisplayUrl
						+ "</strong><br />"
						+ item.Description
						+ "</li>";

		});
		htmlOutput += "</ul><br clear='all'>";
	}
	else
	{
		htmlOutput += "<p>No video results.</p>";
	}
	
	$(selector).append(htmlOutput);

}

function displayError(requestObj, textData, errorData)
{
	$("#relatedItems").append("<code>" + textData + "</code><br/>");
}

function buildBingCall(query)
{
	var bingApiUrl = "http://api.search.live.net/json.aspx";
	var bingApiAppId = "B90B7FEEDB91181F7F683385056B06BC61FECB97";
	var bingApiImageCount = "34";
	var bingApiVideoCount = "18";           
	var bingApiNewsCount = "7";           
	var bingApiWebCount = "7";           
	
	var s = bingApiUrl +
			"?AppId=" + bingApiAppId +
			"&Version=2.0" +
			"&Market=en-us" +
			"&Sources=image+video+news+web" +
			"&Query=" + query +
			"&Image.Count=" + bingApiImageCount +
			"&Video.Count=" + bingApiVideoCount +
			"&News.Count="+ bingApiNewsCount +
			"&Web.Count="+ bingApiWebCount +
			"&Image.Filters=Style:Photo&Image.Filters=Face:Face&Image.Filters=Aspect:Square&Image.Filters=Size:Medium" +
			"&News.LocationOverride=US." + $('#miniState').val() +
			"&JsonType=callback&JsonCallback=?";
	               
	return s;                
}

function requestForReport()
{
	_gaq.push(['_trackPageview', '/request/report']);
}

