/*
  *  Start Search Configuration
*/
var SPAGE = [1,1,1];
var cnnTopId = 'cnnMoneyBody';
var CNN_INTERNAL_TYPE_MIXED = 'mixed';
var CNN_INTERNAL_TYPE_ARTICLE = 'article';
var CNN_INTERNAL_TYPE_WEB = 'web';
var CNN_INTERNAL_TYPE_VIDEO = 'video';
var CNN_VIDEO_URL_PREFIX = 'http://money.cnn.com/video/';
var pagetypeTS='search_07'; // Used for timestamp in main.js
var cnnPaginationChanged = false;
var firstCall = true;
var cnnPrimaryType = CNN_INTERNAL_TYPE_MIXED;
var cnnQIndex;  //primary type
var CNN_VIDEO_ADS_AVAILABLE = false;
var CNN_TOP_ADS_AVAILABLE = false;
var CNN_SIDE_ADS_AVAILABLE = false;
var CNN_ALL_ADS_AVAILABLE = false;
var CNN_WO_AVAILABLE = false;
var CNN_LOOKUPSTRING = '';
var CNN_URL_TRAIL_ENABLED = false;
var cnnMixedCount = 0;
var cnnArticleCount = 0;
var cnnWebCount = 0;
var cnnVideoCount = 0;
var cnnSrchState = 0;
var cnnNoResultsEnabled = false;
var cnnDidYouMeanEnabled = false;
var cnnAdvancedQuery = '';
var cnnSortByHashParam = 'sortBy';
var cnnSourceHashParam = 'source';
function cnnGetSortBy(){
	var sortBy = '';
	if(cnnGetQueryStringKeyValue(cnnSortByHashParam)){ sortBy = cnnGetQueryStringKeyValue(cnnSortByHashParam); }
	return sortBy;
}
function cnnGetSource(){
	var magSource = '';
	if(cnnGetQueryStringKeyValue(cnnSourceHashParam)){ magSource = cnnGetQueryStringKeyValue(cnnSourceHashParam); }
	return magSource;
}
var cnnSortBy = 'date';
var cnnSource = '';
var cnnSection = '';
var cnnSubSection = '';
var cnnSectionIds =['summaryList_mixed','summaryList_articles','summaryList_videos','mixedpagination','articlepagination','videopagination'];
var cnnAdsDomIds = ['cnnSearchSponsoredLinks','cnnSearchSponsoredVideoLinks','cnnSearchSponsoredLinksBottom','cnnSearchSponsoredLinksAll','cnnSearchSponsorBoxTop','cnnSearchSponsoredSearches'];
var cnnPaginationIds = ['mixedpagination','articlepagination','videopagination'];
var cnnContentTxtTopSearchId = 'cnnMoneyWebSearch'; //top-right search box
var cnnPrevMarkup = '<img src="http://i2.cdn.turner.com/money/.element/img/2.0/buttons/button_back_red.gif" width="41" height="22" border="0" alt="BACK" onmouseover="this.src=\'http://i2.cdn.turner.com/money/.element/img/2.0/buttons/button_back_blue.gif\'" onmouseout="this.src=\'http://i2.cdn.turner.com/money/.element/img/2.0/buttons/button_back_red.gif\'"></img>';
var cnnNextMarkup = '<img src="http://i2.cdn.turner.com/money/.element/img/2.0/buttons/button_next_red.gif" width="41" height="22" border="0" alt="NEXT" onmouseover="this.src=\'http://i2.cdn.turner.com/money/.element/img/2.0/buttons/button_next_blue.gif\'" onmouseout="this.src=\'http://i2.cdn.turner.com/money/.element/img/2.0/buttons/button_next_red.gif\'"></img>';
var cnnMixedContentId = 'summaryList_mixed';	//mixed results container
var cnnArticleContentId = 'summaryList_articles'; //article results container
var cnnVideoContentId = 'summaryList_videos';	//video results container
var cnnWebContentId = 'summaryList_web';	//web results container
var cnnMixedContentContainerId = 'mixedpagination';	//mixed results pagination div
var cnnArticleContentContainerId = 'articlepagination'; //article results pagination div
var cnnVideoContentContainerId = 'videopagination';//video results pagination div
var cnnWebContentContainerId = 'webpagination';//web results pagination div
var cnnContentTypeParam = 'type';
var cnnFeaturedContentTypeParam = 'primaryType';
var cnnSortByQueryParam = 'sortBy';
var cnnSourceQueryParam = 'source';
var cnnSectionQueryParam = 'section';
var cnnSubSectionQueryParam = 'subsection';
var cnnFirstResultHashParam = 'start';
var cnnFirstResult = 1;
if(cnnGetQueryStringKeyValue(cnnFeaturedContentTypeParam)){ cnnPrimaryType = cnnGetQueryStringKeyValue(cnnFeaturedContentTypeParam); }
if(cnnGetQueryStringKeyValue(cnnSortByQueryParam)){ cnnSortBy = cnnGetQueryStringKeyValue(cnnSortByQueryParam); }
if(cnnGetQueryStringKeyValue(cnnSourceQueryParam)){ cnnSource = cnnGetQueryStringKeyValue(cnnSourceQueryParam); }
if(cnnGetQueryStringKeyValue(cnnSectionQueryParam)){ cnnSection = cnnGetQueryStringKeyValue(cnnSectionQueryParam); }
if(cnnGetQueryStringKeyValue(cnnSubSectionQueryParam)){ cnnSubSection = cnnGetQueryStringKeyValue(cnnSubSectionQueryParam); }
if(cnnGetQueryStringKeyValue(cnnFirstResultHashParam)){ cnnFirstResult = cnnGetQueryStringKeyValue(cnnFirstResultHashParam); }
var cnnContentType = cnnPrimaryType; 
var cnnTestEnv = cnnGetQueryStringKeyValue('env')?cnnGetQueryStringKeyValue('env'):location.hostname;
var cnnCustomSearchURL = 'http://searchapp.cnn.com/money-search/query.jsp';
var cnnMixedSearchParameters = {
	queryVariable:'query',
	contentTypeVariable:cnnContentTypeParam,
	firstResultVariable:'start',
	resultsPerPageVariable:'npp',
	siteSiloVariable:'s',
	customSearchUrl: cnnCustomSearchURL,
	//extraUrlParameters:'&primaryType=mixed' + ((cnnSortBy)?'&'+cnnSortByQueryParam+'='+cnnSortBy:'') + '&source=fort'+((cnnSource != '')?'&'+cnnSourceQueryParam+'='+cnnSource:''),
	extraUrlParameters:'&primaryType=mixed' + ((cnnSortBy)?'&'+cnnSortByQueryParam+'='+cnnSortBy:'') + ((cnnSource != '')?'&'+cnnSourceQueryParam+'='+cnnSource:'') + ((cnnSection != '')?'&'+cnnSectionQueryParam+'='+cnnSection:'') + ((cnnSubSection != '')?'&'+cnnSubSectionQueryParam+'='+cnnSubSection:''),
	disableDefaultNoContentMessage:true,
	siteSilo: 'all',
	maxResultsToRequest: 30, // unused at present
	pagination: {
		resultsPerPage: 10,
		isNumberPaginationActive: true,
		isPrevNextPaginationActive: true,
		prevNextMiddleMarkup: '',
		prevMarkup: cnnPrevMarkup,
		nextMarkup: cnnNextMarkup,
		isElipseEnabled: false,
		maxPaginationLinks: 10
	},
	contentTypes: [
		{
			contentType: 'mixed',
			contentPublishingFunction: cnnMixedPublishingCallbackFunction,
			contentContainerId: cnnMixedContentContainerId,
			contentId: cnnMixedContentId,
			//contentMetaId: 'mixedCount',
			numberPaginationIds: [cnnMixedContentContainerId],
			prevNextIds: []
		}
	]
};

var cnnArticleSearchParameters = {
	queryVariable:'query',
	contentTypeVariable:cnnContentTypeParam,
	firstResultVariable:'start',
	resultsPerPageVariable:'npp',
	siteSiloVariable:'s',
	customSearchUrl: cnnCustomSearchURL,
	extraUrlParameters:'&primaryType=article' + ((cnnSortBy)?'&'+cnnSortByQueryParam+'='+cnnSortBy:'') + ((cnnSource != '')?'&'+cnnSourceQueryParam+'='+cnnSource:'') + ((cnnSection != '')?'&'+cnnSectionQueryParam+'='+cnnSection:'') + ((cnnSubSection != '')?'&'+cnnSubSectionQueryParam+'='+cnnSubSection:''),
	disableDefaultNoContentMessage:true,
	siteSilo: 'all',
	maxResultsToRequest: 30, // unused at present
	pagination: {
		resultsPerPage: 10,
		isNumberPaginationActive: true,
		isPrevNextPaginationActive: true,
		prevNextMiddleMarkup: '',
		prevMarkup: cnnPrevMarkup,
		nextMarkup: cnnNextMarkup,
		isElipseEnabled: false,
		maxPaginationLinks: 10
	},
	contentTypes: [
		{
			contentType: 'article',
			contentPublishingFunction: cnnArticlesPublishingCallbackFunction,
			contentContainerId: cnnArticleContentContainerId,
			contentId: cnnArticleContentId,
			//contentMetaId: 'articleCount',
			numberPaginationIds: [cnnArticleContentContainerId],
			prevNextIds: []
		}
	]
};

var cnnVideoSearchParameters = {
	queryVariable:'query',
	contentTypeVariable:cnnContentTypeParam,
	firstResultVariable:'start',
	resultsPerPageVariable:'npp',
	siteSiloVariable:'s',
	customSearchUrl: cnnCustomSearchURL,
	extraUrlParameters:'&primaryType=video' + ((cnnSortBy)?'&'+cnnSortByQueryParam+'='+cnnSortBy:'') + ((cnnSource != '')?'&'+cnnSourceQueryParam+'='+cnnSource:'') + ((cnnSection != '')?'&'+cnnSectionQueryParam+'='+cnnSection:'') + ((cnnSubSection != '')?'&'+cnnSubSectionQueryParam+'='+cnnSubSection:''), 
	disableDefaultNoContentMessage:true,
	siteSilo: 'all',
	resultsPerPageRR: 10,
	maxResultsToRequest: 30, // unused at present
	pagination: {
		resultsPerPage: 10,
		isNumberPaginationActive: true,
		isPrevNextPaginationActive: true,
		prevNextMiddleMarkup: '',
		prevMarkup: cnnPrevMarkup,
		nextMarkup: cnnNextMarkup,
		isElipseEnabled: false,
		maxPaginationLinks: 10
	},
	contentTypes: [
		{
			contentType: 'video', // matches json target and mediaType
			contentPublishingFunction: cnnVideoPublishingCallbackFunction,
			contentContainerId: cnnVideoContentContainerId,
			contentId: cnnVideoContentId,
			//contentMetaId: 'videoCount',
			numberPaginationIds: [cnnVideoContentContainerId],
			prevNextIds: []
		}
	]
};

//Configuration for multiple instances.
var cnnMultipleSearchParameters = {
	queryVariable:'query',
	//contentTypeVariable:'type',
	contentTypeVariable:'ignore',
	firstResultVariable:'start',
	resultsPerPageVariable:'npp',
	siteSiloVariable:'s',
	customSearchUrl: cnnCustomSearchURL,
	extraUrlParameters:'&type=all' + ((cnnSortBy)?'&'+cnnSortByQueryParam+'='+cnnSortBy:'') +'&' + cnnFeaturedContentTypeParam + '=' + cnnContentType + ((cnnSource != '')?'&'+cnnSourceQueryParam+'='+cnnSource:'') + ((cnnSection != '')?'&'+cnnSectionQueryParam+'='+cnnSection:'') + ((cnnSubSection != '')?'&'+cnnSubSectionQueryParam+'='+cnnSubSection:''),
	siteSilo: 'all',
	instances: [
		{
			configuration: cnnMixedSearchParameters
		},
		{
			configuration: cnnArticleSearchParameters
		},
		{
			configuration: cnnVideoSearchParameters
		}
	]
};
/*
  *  Start Search Configuration
*/

/*
  *  Start Search Processor Publishing Functions
*/
//This function is called by SearchProcessor.js to transform mixed json results to html
function cnnMixedPublishingCallbackFunction(textContObj, aLookupString) { 
	//add the prev. button if it's not there b/c SearchProcessor.js doesn't
	if( ($$("#"+cnnMixedContentContainerId+" ul .prev").length == 0) && ($$("#"+cnnMixedContentContainerId+" ul .next").length == 1) )
	{
		$$("#"+cnnMixedContentContainerId+" ul")[0].innerHTML = '<li class="ends prev"><span class="iefix"><img src="http://i2.cdn.turner.com/money/.element/img/2.0/buttons/back_button_gray.gif" width="41" height="22" border="0" alt="BACK"></img></span></li>'+$$("#"+cnnMixedContentContainerId+" ul")[0].innerHTML;
	}
	var html = new Array();
	var finalContent = '';
	var foundData = false;
	try{ cnnPublishGeneralInfo(textContObj, aLookupString, CNN_INTERNAL_TYPE_MIXED);}catch(e){}
	if(textContObj.results[0][0])
	{
		if($(cnnTopId)){
			$(cnnTopId).scrollTo();
		}

		var resData = textContObj.results[0];
			//SearchProcessor.js writes in pagination
			try { paginationChange(textContObj.criteria[0].startAt, CNN_INTERNAL_TYPE_MIXED); }catch(e){}
			//pagination doesnt print the first pagination link if there is only one page, so i'm adding it myself	
			if( $$('#mixedpagination ul li').length == 0 ){ $('mixedpagination').innerHTML = '<ul class="pagingLinks"><li><span class="iefix"><a id="selectedPage">1</a></span></li></ul>'; }

			for(var count=0; count < resData.length; count++) {
				if(resData[count])
				{
					var result = resData[count];
					if (result.url && result.title) {
						var resultURL = result.url;
						foundData = true;
	
							html.push("<div class=\"summaryBlock\">");
							if(result.metadata.media.image){
								var resultURLPath = cnnLeftTrim(result.url);
								resultURL = cnnGetVideoURL(resultURLPath);
							}
							
							if(result.metadata.media && result.metadata.media.image){
								html.push("<a href=\"" + result.url + "\">");
								html.push("<img class=\"img02paddingL\" height=\"49\" width=\"88\" src=\""+ result.metadata.media.image + "\" alt=\"\"></img>");
								html.push("</a>");
								html.push("<div class=\"cnnHeadline\">");
									html.push("<a href=\"" + result.url + "\">");
										html.push("<img class=\"vicon\" height=\"15\" border=\"0\" width=\"30\" src=\"http://i.cdn.turner.com/money/.element/img/2.0/buttons/video/play.enabled.gif\" alt=\"Play\"></img>");					
									html.push("</a>");
								html.push("<a href=\"" + result.url + "\">"+ result.title +"</a>");						
								html.push("</div>");
							} else {
								html.push("<div class=\"cnnHeadline\">");
									html.push("<a href=\"" + result.url + "\">"+ result.title +"</a>");						
								html.push("</div>");								
							}			
						
							if (result.metadata.media.excerpt) {
								var ell = "";
								if( (resultURL.indexOf('blogs') > -1) && ( result.metadata.media.excerpt[result.metadata.media.excerpt.length-1]!='.' ) )
									ell = "...";
								html.push("<p class=\"cnnBlurbTxt\">" + result.metadata.media.excerpt + ell + "</p>");
							}
							var dateUnits = new Date(result.mediaDateUts * 1000);
							var dateUnitsString = dateUnits.toDateString();
							var arrDate = dateUnitsString.split(" ");

							var currentSite = '';
							var currentSiteURL = '';
							switch (result.metadata.media.source.toLowerCase()) {
								case 'biz2':
									currentSiteURL = "http://money.cnn.com/magazines/business2/";
									currentSite = "Business 2.0";
									html.push("<span class=\"cnnResultMag\">"+ currentSite +"</span>");
								break;
								case 'bv':
									currentSiteURL = "http://www.breakingviews.com/";
									currentSite = "breakingviews.com";
									html.push("<span class=\"cnnResultMag\">"+ currentSite +"</span>");
								break;
								case 'rb':
									currentSiteURL = "http://www.reuters.com/";
									currentSite = "Reuters";
									html.push("<span class=\"cnnResultMag\">"+ currentSite +"</span>");
								break;
								case 'reut/cnnmoney':
									currentSiteURL = "http://money.cnn.com/";
									currentSite = "CNNMoney";
									html.push("<span class=\"cnnResultMag\">"+ currentSite +"</span>");
								break;
								case 'cnn':
									currentSiteURL = "http://money.cnn.com/";
									currentSite = "CNNMoney";
									html.push("<span class=\"cnnResultMag\">"+ currentSite +"</span>");
								break;
								case 'cnnw':
									currentSiteURL = "http://www.cnn.com/";
									currentSite = "CNN";
									html.push("<span class=\"cnnResultMag\">"+ currentSite +"</span>");
								break;
								case 'money':
									currentSiteURL = "http://money.cnn.com/";
									currentSite = "Money Magazine";
									html.push("<span class=\"cnnResultMag\">"+ currentSite +"</span>");
								break;
								case 'fort':
									currentSiteURL = "http://money.cnn.com/magazines/fortune/";
									currentSite = "Fortune";
									html.push("<span class=\"cnnResultMag\">" + currentSite + "</span>");
									//html.push("<span class=\"cnnResultMag\"><a href=\""+ currentSiteURL +"\">"+ currentSite +"</a></span>");
								break;
								case 'fsb':
									currentSiteURL = "http://money.cnn.com/smallbusiness/";
									currentSite = "Fortune Small Business";
									html.push("<span class=\"cnnResultMag\">"+ currentSite +"</span>");
								break;
								case 'smb':
									currentSiteURL = "http://money.cnn.com/";
									currentSite = "CNNMoney";
									html.push("<span class=\"cnnResultMag\">"+ currentSite +"</span>");
								break;
								default:
								break;
							}
						html.push("<span class=\"cnnDateStamp\">"+arrDate[1]+" "+arrDate[2]+", "+arrDate[3]+"</span>");	
						html.push('</div>');
						
					}
				}
			}
		html.push("<div class=\"clearFloat\"/></div>");
		finalContent = html.join("");
	}
	if(cnnPrimaryType == CNN_INTERNAL_TYPE_MIXED) {
		if(foundData === false){
			$$("#section_searchEntries .cnnSearchResults").each(function(searchResults) { searchResults.style.display = 'none'; }.bind(this));
			$$("#section_searchEntries .cnnSourceCat").each(function(sourceCat) { sourceCat.style.display = 'none'; }.bind(this));
			$$("#section_searchEntries .cnnSearchResultPages").each(function(searchResults) { searchResults.style.display = 'none'; }.bind(this));
			$("section_searchEntries").innerHTML += cnnNoResultsFound(aLookupString);	
		}
	}
	return finalContent;
};
//This function is called by SearchProcessor.js to transform article json results to html
function cnnArticlesPublishingCallbackFunction(textContObj, aLookupString) { 
	//add the prev. button if it's not there b/c SearchProcessor.js doesn't
	if( ($$("#"+cnnArticleContentContainerId+" ul .prev").length == 0) && ($$("#"+cnnArticleContentContainerId+" ul .next").length == 1) )
	{
		$$("#"+cnnArticleContentContainerId+" ul")[0].innerHTML = '<li class="ends prev"><span class="iefix"><img src="http://i2.cdn.turner.com/money/.element/img/2.0/buttons/back_button_gray.gif" width="41" height="22" border="0" alt="BACK"></img></span></li>'+$$("#"+cnnArticleContentContainerId+" ul")[0].innerHTML;
	}
	var html = new Array();
	var finalContent = '';
	var foundData = false;
	try{ cnnPublishGeneralInfo(textContObj, aLookupString, CNN_INTERNAL_TYPE_ARTICLE); }catch(e){}
	if(textContObj.results[0][0])
	{
		var resData = textContObj.results[0];
		if($(cnnTopId)){
			$(cnnTopId).scrollTo();
		}
			//SearchProcessor.js writes in pagination
			try { paginationChange(textContObj.criteria[0].startAt, CNN_INTERNAL_TYPE_ARTICLE); }catch(e){}
			//pagination doesnt print the first pagination link if there is only one page, so i'm adding it myself	
			if( $$('#articlepagination ul li').length == 0 ){ $('articlepagination').innerHTML = '<ul class="pagingLinks"><li><span class="iefix"><a id="selectedPage">1</a></span></li></ul>'; }

			for(var count=0; count < resData.length; count++) {
				if(resData[count])
				{
					var result = resData[count];
					if (result.url && result.title) {
						foundData = true;
						html.push("<div class=\"summaryBlock\">");
						if (result.metadata.media.image) {
							html.push("<a href=\"" + result.url + "\">");
								html.push("<img class=\"img02paddingL\" height=\"49\" border=\"0\" align=\"left\" width=\"88\" src=\""+ result.metadata.media.image +"\" alt=\""+ result.metadata.media.excerpt +"\"/>");  //TO DO : escape '"' 
							html.push("</a>");						
						}					
						html.push("<div class=\"cnnHeadline\">");
							if(result.mediaType == 'video')
							{
								html.push("<a href=\""+ result.url +"\">");
								html.push("<img class=\"vicon\" height=\"15\" border=\"0\" width=\"30\" src=\"http://i.cdn.turner.com/money/.element/img/2.0/buttons/video/play.enabled.gif\" alt=\"PLAY\"/></a>");
							}
							html.push("<a href=\""+ result.url +"\">"+ result.title +"</a>");
						html.push("</div>");
						var dateUnits = new Date(result.mediaDateUts * 1000);
						var dateUnitsString = dateUnits.toDateString();
						var arrDate = dateUnitsString.split(" ");
						//try{ console.log(arrDate[0]+" "+arrDate[1]+" "+arrDate[2]+" "+arrDate[3]); }catch(e){ alert(e); }
						if (result.metadata.media.excerpt) {
							var ell = "";
							if( (result.url.indexOf('blogs') > -1) && ( result.metadata.media.excerpt[result.metadata.media.excerpt.length-1]!='.' ) )
								ell = "...";
							html.push("<p class=\"cnnBlurbTxt\">" + result.metadata.media.excerpt + ell + "</p>");
						}		
						var currentSite = "";
						var currentSiteURL = "";
						switch (result.metadata.media.source.toLowerCase()) {
							case 'biz2':
								currentSiteURL = "http://money.cnn.com/magazines/business2/";
								currentSite = "Business 2.0";
								html.push("<span class=\"cnnResultMag\">"+ currentSite +"</span>");
							break;
							case 'bv':
								currentSiteURL = "http://www.breakingviews.com/";
								currentSite = "breakingviews.com";
								html.push("<span class=\"cnnResultMag\">"+ currentSite +"</span>");
							break;
							case 'rb':
								currentSiteURL = "http://www.reuters.com/";
								currentSite = "Reuters";
								html.push("<span class=\"cnnResultMag\">"+ currentSite +"</span>");
							break;
							case 'reut/cnnmoney':
								currentSiteURL = "http://money.cnn.com/";
								currentSite = "CNNMoney";
								html.push("<span class=\"cnnResultMag\">"+ currentSite +"</span>");
							break;
							case 'cnn':
								currentSiteURL = "http://money.cnn.com/";
								currentSite = "CNNMoney";
								html.push("<span class=\"cnnResultMag\">"+ currentSite +"</span>");
							break;
							case 'cnnw':
								currentSiteURL = "http://www.cnn.com/";
								currentSite = "CNN";
								html.push("<span class=\"cnnResultMag\">"+ currentSite +"</span>");
							break;
							case 'money':
								currentSiteURL = "http://money.cnn.com/";
								currentSite = "Money Magazine";
								html.push("<span class=\"cnnResultMag\">"+ currentSite +"</span>");
							break;
							case 'fort':
								currentSiteURL = "http://money.cnn.com/magazines/fortune/";
								currentSite = "Fortune";
								html.push("<span class=\"cnnResultMag\">"+ currentSite +"</span>");
							break;
							case 'fsb':
								currentSiteURL = "http://money.cnn.com/smallbusiness/";
								currentSite = "Fortune Small Business";
								html.push("<span class=\"cnnResultMag\">"+ currentSite +"</span>");
							break;
							case 'smb':
								currentSiteURL = "http://money.cnn.com/";
								currentSite = "CNNMoney";
								html.push("<span class=\"cnnResultMag\">"+ currentSite +"</span>");
							break;
							default:
							break;
						}
						html.push("<span class=\"cnnDateStamp\">"+arrDate[1]+" "+arrDate[2]+", "+arrDate[3]+"</span>");
						//html.push("<div><a href=\"" + currentSite + "\">" + result.site + " Website</a> | <a href=\"" + result.url + "\">View Article</a> | " + arrDate[0] + ", " + arrDate[1] + (arrDate[1] != "May" ? ". " : " ") + arrDate[2] + ", " + arrDate[3] + "</div>");
							html.push("</div>");	//end of .summaryBlock
					}
				}
			}
		html.push("<div class=\"clearFloat\"/></div>");
		finalContent = html.join("");
	}
	else
	{
		html.push('<div class="ResultDivide"><span class="moneyResultHeader">No Results</span><br>We did not find article results for <span class="moneyHiLite"><b>'+aLookupString+'</b></span>. We recommend that you try the following:<ul><li>Check your spelling</li><li>Try more general words</li><li>Try using synonyms or different words in your search</li><li>Try using fewer words; your search may be too specific</li></ul></div>');
	}
	return finalContent;
};
//This function is called by SearchProcessor.js to transform video json results to html
function cnnVideoPublishingCallbackFunction(videoContObj, vLookupString) {
	//add the prev. button if it's not there b/c SearchProcessor.js doesn't
	if( ($$("#"+cnnVideoContentContainerId+" ul .prev").length == 0) && ($$("#"+cnnVideoContentContainerId+" ul .next").length == 1) )
	{
		$$("#"+cnnVideoContentContainerId+" ul")[0].innerHTML = '<li class="ends prev"><span class="iefix"><img src="http://i2.cdn.turner.com/money/.element/img/2.0/buttons/back_button_gray.gif" width="41" height="22" border="0" alt="BACK"></img></span></li>'+$$("#"+cnnVideoContentContainerId+" ul")[0].innerHTML;
	}
	var html = new Array();
	var resultsPerPage = cnnVideoSearchParameters.pagination.resultsPerPage;
	var finalContent = '';
	var foundData = false;
	try{ cnnPublishGeneralInfo(videoContObj, vLookupString, CNN_INTERNAL_TYPE_VIDEO); }catch(e){}
	if(videoContObj.results[0][0])
	{
		var resData = videoContObj.results[0];
		if($(cnnTopId)){
			$(cnnTopId).scrollTo();
		}
		//SearchProcessor.js writes in pagination
		try{ paginationChange(videoContObj.criteria[0].startAt, CNN_INTERNAL_TYPE_VIDEO); }catch(e){}		
		//pagination doesnt print the first pagination link if there is only one page, so i'm adding it myself	
		if( $$('#videopagination ul li').length == 0 ){ $('videopagination').innerHTML = '<ul class="pagingLinks"><li><span class="iefix"><a id="selectedPage">1</a></span></li></ul>'; }	

		for(var count=0; count < resData.length; count++) 
		{
			if(resData[count])
			{
				var result = resData[count];
                var dateUnits = new Date(result.mediaDateUts * 1000);
                var dateUnitsString = dateUnits.toDateString();
                var arrDate = dateUnitsString.split(" ");
				foundData = true;
				html.push("<div class=\"summaryBlock\">");
					html.push("<a href=\"" + result.url + "\">");
					html.push("<img class=\"img02paddingL\" height=\"49\" width=\"88\" src=\""+ result.metadata.media.image + "\" alt=\"\"/></a>");
					html.push("<div class=\"cnnHeadline\">");
						html.push("<a href=\"" + result.url + "\">");
							html.push("<img class=\"vicon\" height=\"15\" border=\"0\" width=\"30\" src=\"http://i.cdn.turner.com/money/.element/img/2.0/buttons/video/play.enabled.gif\" alt=\"Play\" />");					
						html.push("</a>");
					html.push("<a href=\"" + result.url + "\">"+ result.title +"</a>");						
				html.push("</div>");
				html.push("<p class=\"cnnBlurbTxt\">" + result.metadata.media.excerpt + "</p>");
						
				var currentSite = "";
				var currentSiteURL = "";
				switch (result.metadata.media.source.toLowerCase()) {
					case 'biz2':
						currentSiteURL = "http://money.cnn.com/magazines/business2/";
						currentSite = "Business 2.0";
						html.push("<span class=\"cnnResultMag\">"+ currentSite +"</span>");
					break;
					case 'bv':
						currentSiteURL = "http://www.breakingviews.com/";
						currentSite = "breakingviews.com";
						html.push("<span class=\"cnnResultMag\">"+ currentSite +"</span>");
					break;
					case 'rb':
						currentSiteURL = "http://www.reuters.com/";
						currentSite = "Reuters";
						html.push("<span class=\"cnnResultMag\">"+ currentSite +"</span>");
					break;
					case 'reut/cnnmoney':
						currentSiteURL = "http://money.cnn.com/";
						currentSite = "CNNMoney";
						html.push("<span class=\"cnnResultMag\">"+ currentSite +"</span>");
					break;
					case 'cnn':
						currentSiteURL = "http://money.cnn.com/";
						currentSite = "CNNMoney";
						html.push("<span class=\"cnnResultMag\">"+ currentSite +"</span>");
					break;
					case 'cnnw':
						currentSiteURL = "http://www.cnn.com/";
						currentSite = "CNN";
						html.push("<span class=\"cnnResultMag\">"+ currentSite +"</span>");
					break;
					case 'money':
						currentSiteURL = "http://money.cnn.com/";
						currentSite = "Money Magazine";
						html.push("<span class=\"cnnResultMag\">"+ currentSite +"</span>");
					break;
					case 'fort':
						currentSiteURL = "http://money.cnn.com/magazines/fortune/";
						currentSite = "Fortune";
						html.push("<span class=\"cnnResultMag\">"+ currentSite +"</span>");
					break;
					case 'fsb':
						currentSiteURL = "http://money.cnn.com/smallbusiness/";
						currentSite = "Fortune Small Business";
						html.push("<span class=\"cnnResultMag\">"+ currentSite +"</span>");
					break;
					case 'smb':
						currentSiteURL = "http://money.cnn.com/";
						currentSite = "CNNMoney";
						html.push("<span class=\"cnnResultMag\">"+ currentSite +"</span>");
					break;
					default:
					break;		
				}	
				html.push("<span class=\"cnnDateStamp\">"+arrDate[1]+" "+arrDate[2]+", "+arrDate[3]+"</span>");					
				html.push("</div>");	//end of summaryBlock				
			}
		}	//end of for loop
	}	//end of if(videoContObj.results[0][0])
	else
	{
		html.push('<div class="ResultDivide"><span class="moneyResultHeader">No Results</span><br>We did not find video results for <span class="moneyHiLite"><b>'+vLookupString+'</b></span>. We recommend that you try the following:<ul><li>Check your spelling</li><li>Try more general words</li><li>Try using synonyms or different words in your search</li><li>Try using fewer words; your search may be too specific</li></ul></div>');
	}
	html.push("<div class=\"clearFloat\"/></div>");		
	finalContent = html.join("");
	return finalContent;
}
/*
  *  End Search Processor Publishing Functions
*/


/*
  * Start Latch Code
*/
//LATCH CODE cnnLatch.prototype.created(new Array('rDataM','sLinks','wOffers'), cnnDisplayController);
function cnnLatch(){}
cnnLatch.prototype.created = function(cbNames, completionCb) {
	//try { console.log('creating ' + cbNames[0] + ' ' + cbNames[1] + ' ' + cbNames[2]); }catch(e){}
	this.cbState = {};
	this.cbComplete = {};
	this.completionCb;
	for (var i = 0; i < cbNames.length; i++) {
	    this.cbComplete[cbNames[i]] = false;
	}
	this.completionCb = completionCb;
};

cnnLatch.prototype.called = function(cbName, cbState) {
	this.cbComplete[cbName] = true;
	if (typeof(cbState) !== "undefined" && cbState !== null) {
	   this.cbState[cbName] = cbState;
	}
	
	var completed = true;
	for (var i in this.cbComplete) {
		completed = completed && this.cbComplete[i];
		if (completed == false) { 
			break; 
		}
	}
	
	if (completed) {
		this.completionCb(this.cbState);
	} 
};

cnnLatch.prototype.clear = function() {
	//try{ console.log('clearing latch'); }catch(e){}
	for (var i in this.cbComplete) {
		this.cbComplete[i] = false;
	}
	delete this.cbState;
	this.cbState = {};
};
cnnLatch.prototype.addCbName = function(cbName) { this.cbComplete[cbName] = false; };

/*
  * End Latch Code
*/


//This function generates the output in the space above the ten search results: First, the tabs, then the dropdown menus
function cnnPublishGeneralInfo(contentObj, LookupString, contentType)
{	
	CNN_LOOKUPSTRING = LookupString;
	//contentTypeId is the id of the tab
	var contentTypeId;
	switch(contentType){
		case "mixed":
			 var resultCount = contentObj.metaResults.mixed;
			 cnnMixedCount = resultCount;
			 var resultWording = 'CNN results';
			 var tabWording = 'All Results';
			 contentTypeId = 'moneyTotalResults';
		break;
		case "article":
			 var resultCount = contentObj.metaResults.article;
			 cnnArticleCount = resultCount;
			 var resultWording = 'CNN results';
			 var tabWording = 'Articles';
			 contentTypeId = 'moneyTotalArticles';
		break;
		case "video":	
			 var resultCount = contentObj.metaResults.video;
			 cnnVideoCount = resultCount;
			 var resultWording = 'CNN videos';
			 var tabWording = 'Videos'; 
			 contentTypeId = 'moneyTotalVideos';
		break;
		default:
			var resultCount = contentObj.metaResults.mixed;
			contentTypeId = 'moneyTotalResults';
		break;			
	}
	
	var indexStart =  parseInt(contentObj.criteria[0].startAt);
	//10 is the max number of results per page
	var indexEndTmp = indexStart + 10 - 1;
	var indexEnd = (resultCount < indexEndTmp)? resultCount : indexEndTmp;
	if(resultCount != 0){
		$('resultLine' + contentType).innerHTML = 'Results: ' + indexStart + '-' + indexEnd + ' of ' +  resultCount;
		$(contentTypeId).innerHTML = '<a href="javascript:cnnSwitchSection(\'' + contentType + '\', false);" >' + tabWording + ' <em>(' + resultCount + ')</em></a>';
	}
	else{
		$('resultLine' + contentType).innerHTML = '';
		$(contentTypeId).innerHTML = '<a href="javascript:cnnSwitchSection(\'' + contentType + '\', false);" >' + tabWording + ' <em>(0)</em></a>';
	}
	//get cnnSource, which is the value of 'source' in the query string, and update the selected option
	//cnnSource = cnnGetSource();
	var sourceMarkup = '<select class="cnnSearchTxtField" name="magazine" onchange="cnnSwitchSource(this);return false;">';		
	if(cnnSource == "cnn") { sourceMarkup += '<option value="">All Sources&nbsp;</option><option value="cnn" selected="selected">CNNMoney&nbsp;</option><option value="fort">Fortune&nbsp;</option><option value="money">Money&nbsp;</option>'; }//<option value="fsb">Fortune Small Business&nbsp;</option>	
	else if(cnnSource == "fort") { sourceMarkup += '<option value="">All Sources&nbsp;</option><option value="cnn">CNNMoney&nbsp;</option><option value="fort" selected="selected">Fortune&nbsp;</option><option value="money">Money&nbsp;</option>'; }//<option value="fsb">Fortune Small Business&nbsp;</option>		
	else if(cnnSource == "money") { sourceMarkup += '<option value="">All Sources&nbsp;</option><option value="cnn">CNNMoney&nbsp;</option><option value="fort">Fortune&nbsp;</option><option value="money" selected="selected">Money&nbsp;</option>'; }//<option value="fsb">Fortune Small Business&nbsp;</option>		
	else { sourceMarkup += '<option value="" selected="selected">All Sources&nbsp;</option><option value="cnn">CNNMoney&nbsp;</option><option value="fort">Fortune&nbsp;</option><option value="money">Money&nbsp;</option>'; }//<option value="fsb">Fortune Small Business&nbsp;</option>
	//else if(cnnSource == "fsb") { sourceMarkup += '<option value="">All Sources&nbsp;</option><option value="fort">Fortune&nbsp;</option><option value="money">Money&nbsp;</option><option value="fsb" selected="selected">Fortune Small Business&nbsp;</option>'; }		
	sourceMarkup += '</select>';

	//get contentObj.criteria[0].sortBy, which is the value of 'sortBy' value is the json, and update the selected option
	var sortingMarkup = '<select name="sort" id="cnnSubSearchSortBy" onchange="cnnSwitchSorting(this);return false;" >';
	var sorting = contentObj.criteria[0].sortBy;
	if( sorting == "" || sorting == 'date'){ sortingMarkup += '<option value="date" selected>Date&nbsp;</option><option value="relevance">Relevance&nbsp;</option>'; }
	else{ sortingMarkup += '<option value="date">Date&nbsp;</option><option value="relevance" selected>Relevance&nbsp;</option>'; }
	sortingMarkup += '</select>';

	$('cnnMoneySort').innerHTML = sortingMarkup;
	$('cnnMoneySource').innerHTML = sourceMarkup;
	
	// DID YOU MEAN
	if(firstCall == true && contentObj.didYouMean.prompt!=""){
		cnnDidYouMeanEnabled = true;
		cnnDidYouMean(contentObj, LookupString);
	}
	/*Start Ad stuff*/
	if(contentType == 'mixed'){
		cnnLatch.prototype.called('rDataM', contentObj);
	}
	else if(contentType == 'article'){
		cnnLatch.prototype.called('rDataA', contentObj);
	}
	else if(contentType == 'video'){
		cnnLatch.prototype.called('rDataV', contentObj);
	}
	/*End Ad stuff*/
}
function cnnGetQindex(primary){
	var qIndex = 0;
	switch(primary){
		case "mixed":
			qIndex = 0;
		break;
		case "article":
			qIndex = 1;
		break;
		case "video":
			qIndex = 2;
		break;
		case "web":
			qIndex = 3;
		break;
		default:
			qIndex = 0;
	}
	cnnQIndex = qIndex;
	return qIndex;
}
function cnnDisplayController(mainObj){
	var sectionType = cnnPrimaryType;
	cnnLatch.prototype.clear();
	var cnnAdsDomIds = ['cnnSearchSponsoredLinks','cnnSearchSponsoredVideoLinks','cnnSearchSponsoredLinksBottom','cnnSearchSponsoredLinksAll','cnnSearchSponsorBoxTop','cnnSearchSponsoredSearches'];
	//$('cnnDidYouMeanContainer').style.display = 'none';
	//$('cnnNoResultsContainer').style.display = 'none';
	//$('cnnResultsDisplay').style.display = 'none';
	$(cnnAdsDomIds[0]).style.display = 'none';
	$(cnnAdsDomIds[1]).style.display = 'none';
	$(cnnAdsDomIds[2]).style.display = 'none';
	$(cnnAdsDomIds[3]).style.display = 'none';
	$(cnnAdsDomIds[4]).style.display = 'none';
	$(cnnAdsDomIds[5]).style.display = 'none';
	switch(sectionType){
		case "mixed":
			if(cnnMixedCount > 0){	
				if(CNN_TOP_ADS_AVAILABLE === true){
					$(cnnAdsDomIds[0]).style.display = 'block';
					$(cnnAdsDomIds[4]).style.display = 'block';
				}

				if(CNN_SIDE_ADS_AVAILABLE === true){
					$(cnnAdsDomIds[2]).style.display = 'block';
				}
				if(CNN_WO_AVAILABLE === true){
					$(cnnAdsDomIds[5]).style.display = 'block';
				}

				//try{ $('cnnResultsDisplay').style.display = 'block';}catch(e){}
				cnnNoResultsEnabled = false;
			}
			else{
				//cnnTriggerNoResultsDisplay(CNN_LOOKUPSTRING);
			}
			if(cnnDidYouMeanEnabled == true && firstCall == true){
				//$(cnnAdsDomIds[0]).style.display = 'none';
				//$(cnnAdsDomIds[4]).style.display = 'none';
			}
		break;
		case "article":
			if(cnnArticleCount>0){
				if(CNN_TOP_ADS_AVAILABLE === true){
					$(cnnAdsDomIds[0]).style.display = 'block';
					$(cnnAdsDomIds[4]).style.display = 'block';
				}
				if(CNN_SIDE_ADS_AVAILABLE === true){
					$(cnnAdsDomIds[2]).style.display = 'block';
				}
				if(CNN_WO_AVAILABLE === true){
					$(cnnAdsDomIds[5]).style.display = 'block';
				}
				cnnNoResultsEnabled = false;
			}
			else{
				//cnnTriggerNoResultsDisplay(CNN_LOOKUPSTRING);
			}
		break;
		case "video":
			if(CNN_VIDEO_ADS_AVAILABLE === true){
				$(cnnAdsDomIds[1]).style.display = 'block';
				$(cnnAdsDomIds[4]).style.display = 'block';
			}
			if(CNN_WO_AVAILABLE === true){
				$(cnnAdsDomIds[5]).style.display = 'block';
			}
			if(cnnVideoCount>0){
				cnnNoResultsEnabled = false;
			}
			else{
				/*$$('.cnnSearchResultPages')[0].style.display = 'none';
				$('cnnNoResultsContainer').innerHTML = cnnNoResultsFound(CNN_LOOKUPSTRING);
				cnnNoResultsEnabled = true;
				$('cnnNoResultsContainer').style.display = 'block';*/
			}
		break;
		default:
		break;		
	}
	//$('ta').value = $('mainCol').innerHTML;
	firstCall = false;
}
//This function is called by the first dropdown and passes the source parameter + the search instance to cnnSourceSearchBy(), which runs a search
function cnnSwitchSource(items) {
	var chosenSource = "";
	for (var i = 0; i < items.options.length; i++) 
	{
		if (items.options[i].selected) { chosenSource = items.options[i].value; }
	}
	/*uncomment the following two lines if you want to make the source dropdown ajaxy*/
	qIndex = cnnGetQindex(cnnPrimaryType);
	cnnSourceSearchBy(chosenSource, qIndex);

	/*comment the rest of this function if you want to make the source dropdown ajaxy
	var re = new RegExp("([?|&])source=.*?(&|$)","i");
	var currentURL = window.location.toString();
	if(currentURL.match(re))
	{
		var newURL = currentURL.replace(re,'$1source=' + chosenSource + '$2');
		window.location = newURL;
	}
	else
	{
		var newURL = currentURL+"&source="+chosenSource;
		window.location = newURL;
	}*/
}
//This function is called by the Sort-by dropdown and passed the source parameter + the search instance to cnnSourceSortBy(), which runs a search
function cnnSwitchSorting(items){
 	var selectedOption = "";
 	var qIndex = 0;
	for (var i = 0; i < items.options.length; i++) 
	{
		if (items.options[i].selected){ selectedOption = items.options[i].value; }
	}
	qIndex = cnnGetQindex(cnnPrimaryType);
	//selectedOption is either date or relevance
	//qIndex is the search instance index: 0, 1, or 2
	cnnSortSearchBy(selectedOption, qIndex) 
}
//Updates the query string based on the sortByValue and performs a search
function cnnSortSearchBy(sortByValue, qIndex) {
	// Adding primaryType as a parameter here: mixed, articles, videos
	var theFeaturedType = cnnPrimaryType;
	if (cnnSource == '') { var querySubstring = '&sortBy=' + sortByValue + ((theFeaturedType)?'&'+cnnFeaturedContentTypeParam+'='+theFeaturedType:'') + ((cnnSection != '')?'&'+cnnSectionQueryParam+'='+cnnSection:'') + ((cnnSubSection != '')?'&'+cnnSubSectionQueryParam+'='+cnnSubSection:''); }
	else { var querySubstring = '&sortBy=' + sortByValue + ((theFeaturedType)?'&'+cnnFeaturedContentTypeParam+'='+theFeaturedType:'') + '&source=' + cnnSource + ((cnnSection != '')?'&'+cnnSectionQueryParam+'='+cnnSection:'') + ((cnnSubSection != '')?'&'+cnnSubSectionQueryParam+'='+cnnSubSection:''); }
	cnnUpdateQueryStringKey('sortBy', sortByValue);
	cnnSortBy = sortByValue;
	//the following line only populates the sorted results for the displayed search instance (mixed,article, or video)
	//coreAddSearchAttribute(querySubstring, qIndex);
	for(var i=0;i<3;i++){
		coreAddSearchAttribute(querySubstring, i);
	}
}				
//Updates the query string based on the sourceValue and performs a search
function cnnSourceSearchBy(sourceValue, qIndex) {
	// Adding primaryType as a parameter here (qIndex)
	var theFeaturedType = cnnPrimaryType;
	if(sourceValue != '') { var querySubstring = '&sortBy=' + cnnSortBy + ((theFeaturedType)?'&'+cnnFeaturedContentTypeParam+'='+theFeaturedType:'') + '&source=' + sourceValue; }
	else { var querySubstring = '&sortBy=' + cnnSortBy + ((theFeaturedType)?'&'+cnnFeaturedContentTypeParam+'='+theFeaturedType:''); }
	cnnUpdateQueryStringKey('source', sourceValue);
	cnnSource = sourceValue;
	//the following line only populates the sorted results for the displayed search instance (mixed,article, or video)
	//coreAddSearchAttribute(querySubstring, qIndex);
	for(var i=0;i<3;i++){
		coreAddSearchAttribute(querySubstring, i);
	}
}
function paginationChange(firstResult, sectionType)
{
	try{
		if(firstResult > 1){
			cnnPaginationChanged = true
		}
		if(cnnPaginationChanged === true){
			//console.log('triggering pagination flip');
			var pageNumber = (firstResult/10) + 1;
			var noDataLatch;
			noDataLatch = new Array('sLinks')
			cnnUpdateQueryStringKey('start', firstResult);
			cnnLatch.prototype.created(noDataLatch, cnnDisplayController);
			//WebOffers.getInstance().initialize();
			SponsoredLinks.getInstance().initialize(sectionType); 
		}
	}catch(e){ /*alert(e);*/ }
}

function cnnSwitchSection(sectionType, isFirstCall)
{
	try{ cnnUpdateQueryStringKey(cnnFeaturedContentTypeParam, sectionType); }catch(e){}
	var qIndex;
	var webLatch = new Array('rDataW','sLinks');
	var articleLatch = new Array('rDataA','sLinks');
	var mixedLatch = new Array('rDataM','sLinks');
	var videoLatch = new Array('rDataV','sLinks');
	var noDataLatch = new Array('sLinks');
	if(isFirstCall === true)
	{
		if(sectionType == 'article'){
			try{ cnnLatch.prototype.created(articleLatch, cnnDisplayController); }catch(e){}
		}
		else if(sectionType == 'mixed'){
			try{ cnnLatch.prototype.created(mixedLatch, cnnDisplayController); }catch(e){}
		}
		else if(sectionType == 'video'){
			try{ cnnLatch.prototype.created(videoLatch, cnnDisplayController); }catch(e){}
		}
	}
	else{
		try{ cnnLatch.prototype.created(noDataLatch, cnnDisplayController); }catch(e){ /*alert(e);*/ }
		if(sectionType == 'article'){
			updateDropdowns(1);
		}
		else if(sectionType == 'mixed'){
			updateDropdowns(0);
		}
		else if(sectionType == 'video'){
			updateDropdowns(2);
		}
	}
	/* end tk */
	for(var id=0; id < cnnSectionIds.length; id++) {
		try{
			$(cnnSectionIds[id]).style.display = 'none';
		}catch(e){ }
	}
	//All Results / Articles / Videos Tabs
	try{ 
			$('resultLinemixed').style.display = 'none';
			$('resultLinearticle').style.display = 'none';
			$('resultLinevideo').style.display = 'none';
			$('moneyTotalResults').className = 'LinkedResult';
			$('moneyTotalArticles').className = 'LinkedResult';
			$('moneyTotalVideos').className = 'LinkedResult';
	}catch(e){}
	switch(sectionType){
		case "mixed":
			$(cnnMixedContentId).style.display = 'block'; 
			$(cnnMixedContentContainerId).style.display = 'block'; 
			$('resultLine' + sectionType).style.display = 'block';
			$('moneyTotalResults').className = 'selectedResult'; 
			qIndex = 0;
		break;
		case "article":
			$(cnnArticleContentId).style.display = 'block';
			$(cnnArticleContentContainerId).style.display = 'block';	
			$('resultLine' + sectionType).style.display = 'block';
			$('moneyTotalArticles').className = 'selectedResult';
			qIndex = 1;
		break;
		case "video":
			$(cnnVideoContentId).style.display = 'block';
			$(cnnVideoContentContainerId).style.display = 'block';
			$('resultLine' + sectionType).style.display = 'block';
			$('moneyTotalVideos').className = 'selectedResult';
			qIndex = 2;
		break;
		default:
		break;
	}
	cnnPrimaryType = sectionType;
	isFirstCall = false;
	//try{ WebOffers.getInstance().initialize(); }catch(e){ /*alert(e);*/ }
	try{ SponsoredLinks.getInstance().initialize(sectionType); }catch(e){ /*alert(e);*/ }
}
function cnnEscapeQuery(q){
	//remove any plus symbols, escaped or unescaped
	if ((typeof q) == "string") {
		q=(q)?q:'';
		if(q.indexOf('+')>0){ q = q.replace(/\+/g,' ');	}
		if(q.indexOf('%2b')>0){	q = q.replace(/%2b/g,' '); }
		return unescape(q);
	} 
	else { 
		return '';
	}
}
function cnnGetQueryStringKeyValue(key){
	var fullUrl = window.location.href;
	if(fullUrl.indexOf('?') > -1){
		var pathEnd = fullUrl.indexOf('?') + 1;
		var queryString = fullUrl.substring(pathEnd);
		var query = queryString.split("&");
		for (i=0;i<query.length;i++) {
			var finalText = query[i].split("=");
			if(finalText[0] == key){
				var finalValue = '';
				var hashes = finalText[1].indexOf('#');
				if(hashes > -1){
					finalValue = finalText[1].substring(0,hashes);
				}
				else{
					finalValue=finalText[1];
				}
				return finalValue;
			}
		}
	}
}
function cnnUpdateQueryStringKey(key, value) {

	var currentHash = window.location.hash.substring(1);
	var finalHash = currentHash;
	var newQuery = [];
	if(CNN_URL_TRAIL_ENABLED === true || key == "sortBy" || key == 'source'){
		if(currentHash.indexOf('&' + key + '=') == -1){
			window.location.hash += '&' + key + '=' + value;
		}
		else{
			var query = currentHash.split("&");
			 
			for (i=0;i<query.length;i++) {
				var item = query[i];
				if(item.indexOf(key + '=') > -1){
					item = key + '=' + value;
				}
				newQuery.push(item);
			}
			finalHash = newQuery.join("&");
			//window.location.hash = finalHash;
		}
	}
}
function cnnGetVideoURL(resultURLPath) {
	var resultURL = (resultURLPath.indexOf('http') == 0)?resultURLPath:CNN_VIDEO_URL_PREFIX + resultURLPath;
	return resultURL;
}
function cnnLeftTrim(sString) {
	while (sString.substring(0,1) == ' ') {
		sString = sString.substring(1, sString.length);
	}
	return sString;
}
function cnnTriggerNoResultsDisplay(LookupString){
	$('section_searchEntries').innerHTML = '<div class="ResultDivide"><span class="moneyResultHeader">No Results</span><br>We did not find results for <span class="moneyHiLite"><b>'+Lookupstring+'</b></span>. We recommend that you try the following:<ul><li>Check your spelling</li><li>Try more general words</li><li>Try using synonyms or different words in your search</li><li>Try using fewer words; your search may be too specific</li></ul></div>';
}
function cnnNoResultsFound(lookUpString) { 
	var html = new Array();
	html.push('<div class="ResultDivide"><span class="moneyResultHeader">No Results</span><br>We did not find results for <span class="moneyHiLite"><b>'+cnnEscapeQuery(lookUpString)+'</b></span>. We recommend that you try the following:<ul><li>Check your spelling</li><li>Try more general words</li><li>Try using synonyms or different words in your search</li><li>Try using fewer words; your search may be too specific</li></ul></div>');
	var noResultHtml = html.join("");
	return noResultHtml;
}
function cnnDidYouMean(resultObj, LookupString){
	if(!$$('.didYouMean')[0])
	{
		var html = new Array();
		var prompt = resultObj.didYouMean.prompt;
		try{ 
			html.push('<p class="didYouMean">Did you mean: <a href=\'javascript:cnnRunSearch("'+prompt+'")\';><strong>' + prompt + '</strong></a> ?</p>');
			$$("#mainCol .content_box")[1].innerHTML = html.join('')+$$("#mainCol .content_box")[1].innerHTML;
		}catch(e){}
	}
}
function cnnRunSearch(searchTerm){
	if(searchTerm == null || cnnLeftTrim(searchTerm).length == 0 || searchTerm.indexOf("</") >= 0 || searchTerm.indexOf(";") >= 0){
	//alert("Please enter a valid search term.  HTML, URLs, and Scripts are not allowed.");
	cnnTriggerNoResultsDisplay("");
	cnnUpdateIntoSearchBoxes('SEARCH', true);
	return false;
	}
	var htmlRegEx = new RegExp('[\w*|\W*]*<[[\w*|\W*]*|/[\w*|\W*]]>[\w*|\W*]*');
	if(htmlRegEx.exec(searchTerm)){
		//alert("Please enter a valid search term.  HTML, URLs, and Scripts are not allowed.");
		cnnTriggerNoResultsDisplay("");
		cnnUpdateIntoSearchBoxes('SEARCH', true);
		return false;
	}
	searchTerm = searchTerm.replace(/^\s+/g, '').replace(/\s+$/g, '');
	searchTerm = escape(searchTerm);
	var tmp = encodeURIComponent(searchTerm);
	var contentTypeValue = cnnGetQueryStringKeyValue(cnnFeaturedContentTypeParam);
	var contentTypeQuery = (contentTypeValue)?'&' + cnnFeaturedContentTypeParam + '=' + contentTypeValue:'';
	//var sortBy = cnnGetSortBy();
	var sortBy = cnnSortBy;
	var sortByHash = (sortBy)?'&sortBy='+sortBy:'';
	var query = "query=" + searchTerm + sortByHash;
	location.href = location.pathname + '?' + query;
}
function cnnUpdateIntoSearchBoxes(lookupString, disableMainBoxUpdate){
	var inputTopTxtSearch = cnnContentTxtTopSearchId;
	$('catHeading').innerHTML = "Results for '" + cnnEscapeQuery(lookupString) + "'";
	if($(inputTopTxtSearch)){
		$(inputTopTxtSearch).query.value = cnnEscapeQuery(lookupString);
	}	
}
function cnnUpdateTitle(cnnSearchTerm){
	cnnSearchTerm = cnnEscapeQuery(cnnSearchTerm);
	document.title = 'Search results for ' + cnnSearchTerm + ' - CNNMoney.com';
}
function updateDropdowns(qIndex)
{
	var storedSource = cnnSource;
	var storedSort = cnnSortBy;
	if($('cnnMoneySort').getElementsByTagName("select")[0].value != storedSort){
		var sortingMarkup = '<select name="sort" id="cnnSubSearchSortBy" onchange="cnnSwitchSorting(this);return false;" >';
		if( storedSort == "" || storedSort == 'date'){ sortingMarkup += '<option value="date" selected>Date&nbsp;</option><option value="relevance">Relevance&nbsp;</option>'; }
		else{ sortingMarkup += '<option value="date">Date&nbsp;</option><option value="relevance" selected>Relevance&nbsp;</option>'; }
		sortingMarkup += '</select>';
		$('cnnMoneySort').innerHTML = sortingMarkup;
	}
	if($('cnnMoneySource').getElementsByTagName("select")[0].value != storedSource){
		var sourceMarkup = '<select class="cnnSearchTxtField" name="magazine" onchange="cnnSwitchSource(this);return false;">';		
		if(storedSource == "cnn") { sourceMarkup += '<option value="">All Sources&nbsp;</option><option value="cnn" selected="selected">CNNMoney&nbsp;</option><option value="fort">Fortune&nbsp;</option><option value="money">Money&nbsp;</option>'; }//<option value="fsb">Fortune Small Business&nbsp;</option>	
		else if(storedSource == "fort") { sourceMarkup += '<option value="">All Sources&nbsp;</option><option value="cnn">CNNMoney&nbsp;</option><option value="fort" selected="selected">Fortune&nbsp;</option><option value="money">Money&nbsp;</option>'; }//<option value="fsb">Fortune Small Business&nbsp;</option>		
		else if(storedSource == "money") { sourceMarkup += '<option value="">All Sources&nbsp;</option><option value="cnn">CNNMoney&nbsp;</option><option value="fort">Fortune&nbsp;</option><option value="money" selected="selected">Money&nbsp;</option>'; }//<option value="fsb">Fortune Small Business&nbsp;</option>		
		else { sourceMarkup += '<option value="" selected="selected">All Sources&nbsp;</option><option value="cnn">CNNMoney&nbsp;</option><option value="fort">Fortune&nbsp;</option><option value="money">Money&nbsp;</option>'; }//<option value="fsb">Fortune Small Business&nbsp;</option>
		//else if(storedSource == "fsb") { sourceMarkup += '<option value="">All Sources&nbsp;</option><option value="fort">Fortune&nbsp;</option><option value="money">Money&nbsp;</option><option value="fsb" selected="selected">Fortune Small Business&nbsp;</option>'; }		
		sourceMarkup += '</select>';
		$('cnnMoneySource').innerHTML = sourceMarkup;
	}
}
//End Supporting functions to the Search Processor publishing functions



/*Start the search processor instances, grab the query, and run the search*/
SearchProcessor.getInstance().addMultipleSearchInstances(cnnMultipleSearchParameters);	
	
var cnnSearchTerm = cnnGetQueryStringKeyValue('query');

if(cnnSearchTerm)
{
	try{ cnnUpdateTitle(cnnSearchTerm); }catch(e){}					//update document.title to reflect the search term
	try{ cnnUpdateIntoSearchBoxes(cnnSearchTerm); }catch(e){}		//update the textfield in the search form 
	try{ SearchProcessor.getInstance().initialize(); } catch(e){}	//run a search
	try{ cnnSwitchSection(cnnPrimaryType, true); } catch(e){}		//update tabs
} 
else 
{
	//do something if user goes to the search page without a search term
}




