$(document).ready(function() {
	var searchTerm = $.trim($("input#search").val().toLowerCase());
	var startPosition = $(document).getUrlParam("st");
	
	if(searchTerm && (!startPosition || startPosition == 1)) {
		findSearchResults(searchTerm);
	}	
});

function findSearchResults(searchTerm) {
	var resultsFound = false;

	$.each(search.terms, function(i, term) {
		if(term.term == searchTerm) {
			resultsFound = true;
			if(term.featured) {
				displayFeaturedResults(term.featured);
			} else if(term.results) {
				displayTopResults(term.results);
			}
			
			return false;
		}
	});
	
	if(!resultsFound && searchTerm != $(document).getUrlParam("qt")) {
		var originalSearchTerm = $(document).getUrlParam("qt");
	
		$.each(search.terms, function(i, term) {
			if(term.term == originalSearchTerm) {
				if(term.featured) {
					displayFeaturedResults(term.featured, originalSearchTerm);
				} else if(term.results) {
					displayTopResults(term.results, originalSearchTerm);
				}
				
				return false;
			}
		});
	}
}

function displayFeaturedResults(featuredResults, searchTerm) {
	var header                 = '<div id="results-featured"><div class="heading"><h3>Featured Results';
	var resultsList            = $('<ul class="results-list"></ul>');
	var orderedFeaturedResults = chooseFeaturedResults(featuredResults);
	
	renderSearchResults(orderedFeaturedResults, resultsList, true);

	if(searchTerm) {
		header += ' for ' + searchTerm;
	}
	
	header += '</h3></div></div>';

	$(".results:first").after($(header));
	$("#results-featured").append(resultsList);
}

function displayTopResults(topResults, searchTerm) {
	var header      = '<div id="results-top"><div class="heading"><h3>Top Results';
	var resultsList = $('<ul class="results-list"></ul>');

	renderSearchResults(topResults, resultsList, false);

	if(searchTerm) {
		header += ' for ' + searchTerm;
	}
	
	header += '</h3></div></div>';

	$(".results:first").after($(header));
	$("#results-top").append(resultsList);
}

function renderSearchResults(results, resultsList, featured) {
	$.each(results, function(i, result) {
		renderSearchResult(result, resultsList, featured);
	});
}

function renderSearchResult(result, resultsList, featured) {
	var container        = $('<div class="result-text"></div>');
	var descriptionLimit = 295;
	var description      = formatText(result.description, descriptionLimit);
	var resultListItem   = $('<li class="results"><li>');
	var titleLimit       = 100;
	var title            = formatText(result.title, titleLimit);

	container.append($('<h4><a href="' + result.url + '">' + title + '</a></h4>'));
	container.append($('<p>' + description + '</p>'));

	resultListItem.append(container);	

	if(featured && result.image) {	
		resultListItem.append($('<img src="' + buildImageURL(result.image) + '" alt="' + title + '" >'));
	
		$(resultListItem).bind("featureDisplayed", function(event, feature) { 
			VISA.Analytics.event(event, {
				type: "impression",
				item: "featuredLink",
				page_context: feature,
				application: "internalSearch"
			});
		}).triggerHandler("featureDisplayed", result.title);
	}	

	resultListItem.hover(function() {
		window.status = result.url;
	
		$(this).css("cursor", "pointer");
		$("a", $(this)).css("text-decoration", "underline");		
	}, function() {
		window.status = "";

		$(this).css("cursor", "default");
		$("a", $(this)).css("text-decoration", "none");
	});	
	
	resultListItem.click(function(event) {
		var href = result.url;
	
		if(featured) {			
			VISA.Analytics.event(event, {
				type: "navigation",
				item: title  + "|featuredLink",
				page_context: "featuredSearchResults",
				application: "internalSearch",
				searchKeywords: $.trim($("input#search").val()),
				featureDesc: result.image
			});
		} else {
			VISA.Analytics.event(event, {
				type: "navigation",
				item: result.title,
				page_context: "topSearchResults",
				application: "internalSearch",
				searchKeywords: $.trim($("input#search").val())
			});
		}

		if(href && href.match(/^http/) && !visa_site(href)) {
			window.open(href, "_blank");
		} else {
			window.location = href;
		}       
		
		event.preventDefault();		
	});	

	resultsList.append(resultListItem);
}

function chooseFeaturedResults(featuredResults) {
	if(featuredResults.length > 1) {
		var orderedFeaturedResults = new Array();
		
		orderedFeaturedResults.push(pickRandomResult(limitFeaturedResults(featuredResults, true)));
		orderedFeaturedResults.push(pickRandomResult(limitFeaturedResults(featuredResults, false)));
		
		return orderedFeaturedResults;
	} else {
		return featuredResults;
	}
}

function limitFeaturedResults(featuredResults, highPriority) {
	var limitedFeaturedResults = new Array();
	
	$.each(featuredResults, function(i, result) {
		if(highPriority) {
			if(result.highPriority) {
				limitedFeaturedResults.push(result);
			}
		} else if(!result.highPriority) {
			limitedFeaturedResults.push(result);
		}
	});
	
	if(limitedFeaturedResults.length == 0) {
		limitedFeaturedResults = featuredResults;
	}
	
	return limitedFeaturedResults;
}

function pickRandomResult(results) {
	if(results.length == 1) {
		return results[0];
	} else {
		var position = Math.round(Math.random() * results.length);
	
		if(position == results.length) {
			position = results.length - 1;
		}
	
		return results[position];
	}
}

function formatText(text, limit) {
	if(text.length > limit) {
		return text.substring(0, limit - 5) + "&hellip;";
	}
	
	return text;
}

function buildImageURL(image) {
	return "http://usa.visa.com" + image;
}

/* 
 * Override this from visa.js to open in new windows 
 */
var visa_site = function(url) {
// the general rule is that URLs with 'visa' in the name share the same UI

	var usa_ui = url.match(/http.*visa.*\.[com|net|org]/i);
// specific rules follow in order of precedence, and return the appropriate value directly

                             if (url.match(/surveysolutions\.com/i)) { return true; }
                             if (url.match(/lifetakesvisa\.com/)) { return false; }
                             if (url.match(/investor\.visa\.com/)) { return false; }
							 if (url.match(/visa\.com\/news/)) { return false; }
							 if (url.match(/visa\.com\/media/)) { return false; }
							 if (url.match(/visa\.com\/careers/)) { return false; }
							 if (url.match(/visa\.com\/aboutvisa/)) { return false; }
							 if (url.match(/\?nopass=1/)) { return false; }
							 if (url.match(/usa\.visa\.com\/corporate\/splash.html/)) { return true; }
							 if (url.match(/corporate\.visa\.com*/)) { return false; }

                             return usa_ui;
                   }

$(function(){
$("a").each(function() {
                   var target = $(this);
                   var href = target.attr("href");
                   if (href && href.match(/^http/) && !visa_site(href) && !target.attr("target") ) {
                             target.attr("target", "_blank");

                   }        

          });

});

/* Copyright (c) 2006-2007 Mathias Bank (http://www.mathias-bank.de)
 * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) 
 * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
 * 
 * Version 2.1
 * 
 * Thanks to 
 * Hinnerk Ruemenapf - http://hinnerk.ruemenapf.de/ for bug reporting and fixing.
 * Tom Leonard for some improvements
 * 
 */
jQuery.fn.extend({
/**
* Returns get parameters.
*
* If the desired param does not exist, null will be returned
*
* To get the document params:
* @example value = $(document).getUrlParam("paramName");
* 
* To get the params of a html-attribut (uses src attribute)
* @example value = $('#imgLink').getUrlParam("paramName");
*/ 
 getUrlParam: function(strParamName){
	  strParamName = escape(unescape(strParamName));
	  
	  var returnVal = new Array();
	  var qString = null;
	  
	  if ($(this).attr("nodeName")=="#document") {
	  	//document-handler
		
		if (window.location.search.search(strParamName) > -1 ){
			
			qString = window.location.search.substr(1,window.location.search.length).split("&");
		}
			
	  } else if ($(this).attr("src")!="undefined") {
	  	
	  	var strHref = $(this).attr("src")
	  	if ( strHref.indexOf("?") > -1 ){
	    	var strQueryString = strHref.substr(strHref.indexOf("?")+1);
	  		qString = strQueryString.split("&");
	  	}
	  } else if ($(this).attr("href")!="undefined") {
	  	
	  	var strHref = $(this).attr("href")
	  	if ( strHref.indexOf("?") > -1 ){
	    	var strQueryString = strHref.substr(strHref.indexOf("?")+1);
	  		qString = strQueryString.split("&");
	  	}
	  } else {
	  	return null;
	  }
	  	
	  
	  if (qString==null) return null;
	  
	  
	  for (var i=0;i<qString.length; i++){
			if (escape(unescape(qString[i].split("=")[0])) == strParamName){
				returnVal.push(qString[i].split("=")[1]);
			}
			
	  }
	  
	  
	  if (returnVal.length==0) return null;
	  else if (returnVal.length==1) return returnVal[0];
	  else return returnVal;
	}
});

