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_NO_RESULTS = 'UNKNOWN';
var CNN_IMAGE_HOST = 'http://i.cdn.turner.com';
var CNN_TOPICS_DOMAIN = 'http://topics.cnn.com';
var CNN_DEFAULT_IMG_DIR = '/cnn/.element/img/2.0/global/misc';
var CNN_VIDEO_ICON = 'http://i.cdn.turner.com/cnn/.element/img/3.0/global/icons/video_icon.gif';
var CNN_HEALTH_SPOTLIGHT_IMAGE = 'http://i.cdn.turner.com/cnn/.element/img/2.0/sect/health/search_cnn.gif';
var CNN_VIDEO_URL_PREFIX = 'http://www.cnn.com/video/#';
var INTL_VIDEO_URL_PREFIX = 'http://edition.cnn.com/video/#';
var TOP_STORIES_BULLET_IMAGE_URL = 'http://i.cdn.turner.com/cnn/.element/img/3.0/1px.gif';
var pagetypeTS='search_07'; // Used for timestamp in main.js
var webTriggered=false;
var cnnPaginationChanged = false;
var cnnOnlySideAds = false;
var firstCall = true;
var cnnPrimaryType = CNN_INTERNAL_TYPE_MIXED;
var cnnQIndex;
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 = '';

function cnnToggleSrchText() {
var cnnSrchTypeTxt = $('cnnSrchTxtToggle').innerHTML;
cnnSrchTypeTxt = cnnSrchTypeTxt.toString();

	if (cnnSrchState == 1) {
		$('cnnSrchTxtToggle').innerHTML = 'Advanced Search <img src="http://i.cdn.turner.com/cnn/.element/img/3.0/search/down_arrow_blue.gif" />';
		cnnSrchState = 0;
		}
		else {
		$('cnnSrchTxtToggle').innerHTML = 'Back to basic search <img src="http://i.cdn.turner.com/cnn/.element/img/3.0/search/up_arrow_blue.gif" />'
		cnnSrchState = 1;
		}

	}

function cnnGetIsIntl(){
	var isIntl = (location.hostname.indexOf('edition.') > -1) ? true : false;
	var intlParamValue = cnnGetQueryStringKeyValue('intl');
	if(intlParamValue && intlParamValue == 'true') { isIntl = true; }
	else if(intlParamValue && intlParamValue == 'false') { isIntl = false; }
	return isIntl;
}
var cnnIsIntl = cnnGetIsIntl();
var cnnSortByHashParam = 'sortBy';

function cnnGetSortBy(){
	var sortBy = '';
	if(cnnGetQueryStringKeyValue(cnnSortByHashParam)){
		sortBy = cnnGetQueryStringKeyValue(cnnSortByHashParam);
	}
	return sortBy;
}
var cnnSortBy = 'date';

var cnnSectionIds = ['mixedresults','articleresults','videoresults','mixedpagination','articlepagination','videopagination','webpagination'];
var cnnAdsDomIds = ['cnnSearchSponsoredLinks','cnnSearchSponsoredVideoLinks','cnnSearchSponsoredLinksBottom','cnnSearchSponsoredLinksAll','cnnSearchSponsorBoxTop','cnnSearchSponsoredSearches'];
var cnnPaginationIds = ['mixedpagination','articlepagination','videopagination','webpagination'];
var cnnContentTxtTopSearchId = 'hdr-search-box';
var cnnContentTxtMainSearchId = 'txtTopSearch';
var cnnContentTxtBotSearchId = 'ftr-search-box';
var cnnPrevMarkup = '<strong class="cnnPreviousArrows"><img src="http://i.cdn.turner.com/cnn/.element/img/3.0/1px.gif" alt=""></strong> Previous';
var cnnNextMarkup = 'Next <strong class="cnnNextArrows"><img src="http://i.cdn.turner.com/cnn/.element/img/3.0/1px.gif" alt=""></strong>';
var cnnTopId = 'hdr-search';
var cnnMixedContentId = 'mixedresults';
var cnnArticleContentId = 'articleresults';
var cnnVideoContentId = 'videoresults';
var cnnWebContentId = 'webresults';
var cnnMixedContentContainerId = 'mixedpagination';
var cnnArticleContentContainerId = 'articlepagination';
var cnnVideoContentContainerId = 'videopagination';
var cnnWebContentContainerId = 'webpagination';
var cnnContentTypeParam = 'type';
var cnnFeaturedContentTypeParam = 'primaryType';
var cnnSortByQueryParam = 'sortBy';
var cnnFirstResultHashParam = 'start';
var cnnFirstResult = 1;
if(cnnGetQueryStringKeyValue(cnnFeaturedContentTypeParam)){
	cnnPrimaryType = cnnGetQueryStringKeyValue(cnnFeaturedContentTypeParam);
}
if(cnnGetQueryStringKeyValue(cnnSortByQueryParam)){
	cnnSortBy = cnnGetQueryStringKeyValue(cnnSortByQueryParam);
}
if(cnnGetQueryStringKeyValue(cnnFirstResultHashParam)){
	cnnFirstResult = cnnGetQueryStringKeyValue(cnnFirstResultHashParam);
}

var cnnContentType = cnnPrimaryType; 

var cnnTestEnv = cnnGetQueryStringKeyValue('env')?cnnGetQueryStringKeyValue('env'):location.hostname;

var cnnWebSearchURL = 'http://searchapp.cnn.com/gwebsearch/gwebsearch.jsp';
var cnnCustomSearchURL = 'http://searchapp.cnn.com/cnn-search/query.jsp';

if (cnnTestEnv.indexOf('jcmsdev') > -1){
	cnnCustomSearchURL = 'http://arya.turner.com:8080/cnn-search-1.1/query.jsp';
	cnnWebSearchURL = 'http://arya.turner.com:8080/gwebsearch-1.0-SNAPSHOT/gwebsearch.jsp';
} else if(cnnTestEnv.indexOf('ref') > -1){
	cnnCustomSearchURL = 'http://srchp1refws1.turner.com/cnn-search/query.jsp'
	cnnWebSearchURL = 'http://srchp1refws1.turner.com/gwebsearch/gwebsearch.jsp';
	//cnnCustomSearchURL = 'http://searchapp.q.cnn.com/cnn-search/query.jsp'
	//cnnWebSearchURL = 'http://searchapp.q.cnn.com/gwebsearch/gwebsearch.jsp';	
} else if (cnnTestEnv.indexOf('loadtest') > -1){
	cnnCustomSearchURL = 'http://srchs1ws1.turner.com/cnn-search/query.jsp';
	cnnWebSearchURL = 'http://srchs1ws1.turner.com/gwebsearch-1.0/gwebsearch.jsp';
}

var cnnMixedSearchParameters = {
	queryVariable:'query',
	contentTypeVariable:cnnContentTypeParam,
	firstResultVariable:'start',
	resultsPerPageVariable:'npp',
	siteSiloVariable:'s',
	customSearchUrl: cnnCustomSearchURL,
	extraUrlParameters:((cnnIsIntl)?'&intl=true':'') + '&primaryType=mixed' + ((cnnSortBy)?'&'+cnnSortByQueryParam+'='+cnnSortBy:''),
	disableDefaultNoContentMessage:true,
	siteSilo: 'all',
	maxResultsToRequest: 30, // unused at present
	pagination: {
		resultsPerPage: 10,
		isNumberPaginationActive: true,
		isPrevNextPaginationActive: false,
		prevNextMiddleMarkup: '',
		prevMarkup: cnnPrevMarkup,
		nextMarkup: cnnNextMarkup,
		isElipseEnabled: false,
		maxPaginationLinks: 5
	},
	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:((cnnIsIntl)?'&intl=true':'') + '&primaryType=article' + ((cnnSortBy)?'&'+cnnSortByQueryParam+'='+cnnSortBy:''),
	disableDefaultNoContentMessage:true,
	siteSilo: 'all',
	maxResultsToRequest: 30, // unused at present
	pagination: {
		resultsPerPage: 10,
		isNumberPaginationActive: true,
		isPrevNextPaginationActive: false,
		prevNextMiddleMarkup: '',
		prevMarkup: cnnPrevMarkup,
		nextMarkup: cnnNextMarkup,
		isElipseEnabled: false,
		maxPaginationLinks: 5
	},
	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:((cnnIsIntl)?'&intl=true':'') + '&primaryType=video' + ((cnnSortBy)?'&'+cnnSortByQueryParam+'='+cnnSortBy:''), 
	disableDefaultNoContentMessage:true,
	siteSilo: 'all',
	resultsPerPageRR: 20,
	maxResultsToRequest: 30, // unused at present
	pagination: {
		resultsPerPage: 20,
		isNumberPaginationActive: true,
		isPrevNextPaginationActive: false,
		prevNextMiddleMarkup: '',
		prevMarkup: cnnPrevMarkup,
		nextMarkup: cnnNextMarkup,
		isElipseEnabled: false,
		maxPaginationLinks: 5
	},
	contentTypes: [
		{
			contentType: 'video', // matches json target and mediaType
			contentPublishingFunction: cnnVideoPublishingCallbackFunction,
			contentContainerId: cnnVideoContentContainerId,
			contentId: cnnVideoContentId,
			//contentMetaId: 'videoCount',
			numberPaginationIds: [cnnVideoContentContainerId],
			prevNextIds: []
		}
	]
};

var cnnWebSearchParameters = {
	queryVariable:'query',
	contentTypeVariable:cnnContentTypeParam,
	firstResultVariable:'start',
	resultsPerPageVariable:'npp',
	siteSiloVariable:'s',
	customSearchUrl: cnnWebSearchURL,
	extraUrlParameters: 'type=all&webClientId=cnn' + '&domains=cnn.com|turner.com',
	disableDefaultNoContentMessage:true,
	siteSilo: 'all',
	maxResultsToRequest: 30, // unused at present
	pagination: {
		resultsPerPage: 5,
		isNumberPaginationActive: true,
		isPrevNextPaginationActive: false,
		prevNextMiddleMarkup: '',
		prevMarkup: cnnPrevMarkup,
		nextMarkup: cnnNextMarkup,
		isElipseEnabled: false,
		maxPaginationLinks: 5
	},
	contentTypes: [
		{
			contentType: 'web',
			contentPublishingFunction: cnnWebPublishingCallbackFunction,
			contentContainerId: cnnWebContentContainerId,
			contentId: cnnWebContentId,
			//contentMetaId: 'webCount',
			//contentMetaId: { topMetaId: 'cnnSearchSubHeader', rightMetaIdTop1: 'cnnSearchRight_1_Header', rightMetaIdBot1: 'cnnSearchRight_1_Footer', rightMetaIdTop2: 'cnnSearchRight_2_Header', rightMetaIdBot2: 'cnnSearchRight_2_Footer', topDidYouMeanId: 'cnnSearchDidYouMean'},
			numberPaginationIds: [cnnWebContentContainerId],
			prevNextIds: []
		}
	]
};

//Configuration for multiple instances.
var cnnMultipleSearchParameters = {
	queryVariable:'query',
	contentTypeVariable:'ignore',
	firstResultVariable:'start',
	resultsPerPageVariable:'npp',
	siteSiloVariable:'s',
	customSearchUrl: cnnCustomSearchURL,
	extraUrlParameters:'&type=all' + ((cnnIsIntl)?'&intl=true':'') + ((cnnSortBy)?'&'+cnnSortByQueryParam+'='+cnnSortBy:'') +'&' + cnnFeaturedContentTypeParam + '=' + cnnContentType,
	siteSilo: 'all',
	instances: [
		{
			configuration: cnnMixedSearchParameters
		},
		{
			configuration: cnnArticleSearchParameters
		},
		{
			configuration: cnnVideoSearchParameters
		}
	]
};

//Search Processor publishing functions
function cnnMixedPublishingCallbackFunction(textContObj, aLookupString) { 
	var html = new Array();
	var finalContent = '';

	var foundData = false;
	cnnPublishGeneralInfo(textContObj, aLookupString, CNN_INTERNAL_TYPE_MIXED);
	if(textContObj.results[0][0]) {

		var resData = textContObj.results[0];
		
		$('cnnFiltersBox').show();
		
			if($(cnnTopId)){
				$(cnnTopId).scrollTo();
			}
			paginationChange(textContObj.criteria[0].startAt, CNN_INTERNAL_TYPE_MIXED);
			html.push('<ul class="cnnResultsList">');
			for(var count=0; count < resData.length; count++) {
				if(resData[count]) {

					var result = resData[count];
					
					if (result.url && result.title) {
						var resultURL = result.url;
						if(foundData === false){
							html.push(cnnSpotLight(textContObj, textContObj.criteria[0].sortBy,CNN_INTERNAL_TYPE_MIXED));
						}
						
						foundData = true;
						//This html code duplicates what's in the spotlight function.  Todo: make a function for use by both
							
							if(result.metadata.media.image){
								var resultURLPath = cnnLeftTrim(result.url);
								resultURL = cnnGetVideoURL(resultURLPath);
							}
							
							html.push('<li>');
							var cnnVideoIcon = "";
							if(result.metadata.media && result.metadata.media.image) {
									html.push('<div class="cnnResultsImage">');
									html.push('		<div class="cnn_relpostn">');
									html.push('			<a href="' + resultURL + '?iref=allsearch"><img height="68" border="0" width="120" src="' + result.metadata.media.image + '"/></a>');
									html.push('			<div class="cnn_vidplyb38x38">');
									html.push('				<a href="' + resultURL + '?iref=allsearch"><img border="0" src="http://i.cdn.turner.com/cnn/.element/img/3.0/1px.gif"/></a>');
									html.push('			</div>');
									html.push('		</div>');
									html.push('	</div>');
									html.push('<ul class="cnnResultItem cnnResultItemV" >');
									cnnVideoIcon = "<img src=" + CNN_VIDEO_ICON + " />"
							} else {
								html.push('<ul class="cnnResultItem" >');
							}

							html.push('<li class="cnnResultTitle cnnResultTitleTopic">');
							html.push('	<a href="'+ resultURL +'?iref=allsearch">' + result.title + ' ' + cnnVideoIcon + '</a>');
							cnnVideoIcon = "";
							if (result.mediaDateUts) {
								html.push('	<span class="cnnContentTimeStamp">' + cnnRenderTimeStamp((result.mediaDateUts * 1000) , '')+ '</span>');
							}
							html.push('</li>');

							if(result.metadata.media && result.metadata.media.excerpt){
								html.push('<li class="cnnResultText cnnResultTextTopic">');
								html.push(result.metadata.media.excerpt.substring(0,350));
								if(result.metadata.media.excerpt.length > 350) { html.push('...'); }
								html.push('	<div>');
								html.push('		<a href="'+ resultURL +'?iref=allsearch">'+ resultURL +'</a>');
								html.push('	</div>');
								html.push('</li>');
							}
						
						html.push('</ul></li><li class="cnn_clear cnnResultSpacer"></li>');
						
					}
				}
			}
		
		html.push('</ul>');
		finalContent = html.join("");
	}
	var omnitureCode = '';
	if(cnnPrimaryType == CNN_INTERNAL_TYPE_MIXED) {
		if(foundData === false){
			//finalContent = cnnNoResultsFound(textContObj, aLookupString, cnnMixedSearchParameters);	
		}
		omnitureCode = cnnCallOmniture(cnnPrimaryType, foundData, aLookupString);
	}
	return finalContent + omnitureCode;
};

function cnnArticlesPublishingCallbackFunction(textContObj, aLookupString) { 
	var html = new Array();
	var finalContent = '';
	var foundData = false;
	cnnPublishGeneralInfo(textContObj, aLookupString, CNN_INTERNAL_TYPE_ARTICLE);
	if(textContObj.results[0][0])
	{
		var resData = textContObj.results[0];
			if($(cnnTopId)){
				$(cnnTopId).scrollTo();
			}
			paginationChange(textContObj.criteria[0].startAt, CNN_INTERNAL_TYPE_ARTICLE);
			
			html.push('<ul class="cnnResultsList">');
			for(var count=0; count < resData.length; count++) {
				if(resData[count]) {

					var result = resData[count];
					
					if (result.url && result.title) {
						var resultURL = result.url;
						if (foundData === false) {
							html.push(cnnSpotLight(textContObj, textContObj.criteria[0].sortBy,CNN_INTERNAL_TYPE_ARTICLE));
						}
						
						foundData = true;
						//This html code duplicates what's in the spotlight function.  Todo: make a function for use by both
						
						if (result.metadata.media.image) {
							var resultURLPath = cnnLeftTrim(result.url);
							resultURL = cnnGetVideoURL(resultURLPath);
						}
						
						html.push('<li>');
						
						if (result.metadata.media && result.metadata.media.image) {
							html.push('<div class="cnnResultsImage">');
							html.push('		<div class="cnn_relpostn">');
							html.push('			<a href="' + resultURL + '?iref=storysearch"><img height="68" border="0" width="120" src="' + result.metadata.media.image + '"/></a>');
							html.push('			<div class="cnn_vidplyb38x38">');
							html.push('				<a href="' + resultURL + '?iref=storysearch"><img border="0" src="http://i.cdn.turner.com/cnn/.element/img/3.0/1px.gif"/></a>');
							html.push('			</div>');
							html.push('		</div>');
							html.push('	</div>');
							html.push('<ul class="cnnResultItem cnnResultItemV" >');
						} else {
							html.push('<ul class="cnnResultItem" >');
						}
						
						html.push('<li class="cnnResultTitle cnnResultTitleTopic">');
						html.push('	<a href="' + resultURL + '?iref=storysearch">' + result.title + '</a>');
						if (result.mediaDateUts) {
							html.push('	<span class="cnnContentTimeStamp">' + cnnRenderTimeStamp((result.mediaDateUts * 1000), '') + '</span>');
						}
						html.push('</li>');
						
						if (result.metadata.media && result.metadata.media.excerpt) {
							html.push('<li class="cnnResultText cnnResultTextTopic">');
							html.push(result.metadata.media.excerpt.substring(0, 350));
							if (result.metadata.media.excerpt.length > 350) {
								html.push('...');
							}
							html.push('	<div>');
							html.push('		<a href="' + resultURL + '?iref=storysearch">' + resultURL + '</a>');
							html.push('	</div>');
							html.push('</li>');
						}
						
						html.push('</ul></li><li class="cnn_clear cnnResultSpacer"></li>');
					}
				}
			}
		
		html.push('</ul>');
		finalContent = html.join("");
	}
	var omnitureCode = '';
	if(cnnPrimaryType == CNN_INTERNAL_TYPE_ARTICLE) {
		if(foundData === false){
			//finalContent = cnnNoResultsFound(textContObj, aLookupString, cnnArticleSearchParameters);
		}
		omnitureCode = cnnCallOmniture(cnnPrimaryType, foundData, aLookupString);
	}
	return finalContent + omnitureCode;
};

function cnnWebPublishingCallbackFunction(textContObj, wLookupString) { 
		
	var html = new Array();
	var finalContent = '';
	var foundData = false;
	if(textContObj.results[0][0]) {

		$('cnnWebResultsSearch').show();
		$(cnnWebContentId).show();

		//$('numResultsReturned').update(textContObj.results[0].length);
		//$('numResultsTotal').update(textContObj.metaResults.web);
		$('webSearchQuery').update(cnnEscapeQuery(wLookupString));

		var resData = textContObj.results[0];

			if($(cnnTopId)){
				$(cnnTopId).scrollTo();
			}
					
			for(var count=0; count < resData.length; count++) {
				if(resData[count]) {
					var result = resData[count];
					if (result.redirUrl && result.title) {
						if(foundData === false){
							html.push(cnnSpotLight(textContObj));
						}
						foundData = true;

						html.push('<div class="cnn_srchwbrslt">');
						html.push('	<div class="cnn_srchwrl1"><a href="' + result.clickUrl + '" target="_blank" title="' + result.title + '">' + result.title + '</a></div>');
						html.push('	<div>' + result.description + '</div>');
						html.push('	<div class="cnn_srchwrl2"><a href="' + result.clickUrl + '" target="_blank" title="' + result.dispUrl + '">' + result.dispUrl + '</a></div>');
						html.push('</div>');
					}
				}
			}
		
		finalContent = html.join("");
	}
	var omnitureCode = '';
	if(cnnPrimaryType == CNN_INTERNAL_TYPE_WEB) {
		if(foundData === false){
			//finalContent = cnnNoResultsFound(textContObj, wLookupString, cnnWebSearchParameters);
		}
		omnitureCode = cnnCallOmniture(cnnPrimaryType, foundData, wLookupString);
	}
	

	return finalContent + omnitureCode;
};

function cnnVideoPublishingCallbackFunction(videoContObj, vLookupString) {
	var html = new Array();
	var resultsPerPage = cnnVideoSearchParameters.pagination.resultsPerPage;
	var finalContent = '';
	var foundData = false;
	cnnPublishGeneralInfo(videoContObj, vLookupString, CNN_INTERNAL_TYPE_VIDEO);
	if(videoContObj.results[0][0])
	{
		var resData = videoContObj.results[0];
			if($(cnnTopId)){
				$(cnnTopId).scrollTo();
			}
			paginationChange(videoContObj.criteria[0].startAt, CNN_INTERNAL_TYPE_VIDEO);
			
			html.push('<ul class="cnnVideoResultsUL">');
			for(var count=0; count < resData.length; count++) {
				if(resData[count])
				{
					var result = resData[count];
					var resultURLPath = cnnLeftTrim(result.url);
					if (resultURLPath && result.title) {
						if(foundData === false){
							html.push(cnnSpotLight(videoContObj, videoContObj.criteria[0].sortBy, CNN_INTERNAL_TYPE_VIDEO));
						}
						foundData = true;
						var resultURL = cnnGetVideoURL(resultURLPath);

				
							if((count + 1) % 4 == 0){
								html.push('<li class="cnnVideoResults4C">');
							}
							else{
								html.push('<li>');
							}
							if(result.metadata.media ){
								html.push('<div class="cnnVRimgBG" style="background-image: url(');
								if(result.metadata.media.image){
									html.push(result.metadata.media.image);
								} 
								html.push(')">');
								html.push('<a href="'+ resultURL +'?iref=videosearch"><span class="cnnVRimgLink"></span></a></div>');
							}
							if(result.mediaDateUts){
								html.push('<div class="cnnResultDate">' + cnnRenderTimeStamp((result.mediaDateUts * 1000) , '')+ '</div>');
							}
							
							html.push('	<div class="cnnResultText"><a href="'+ resultURL +'?iref=videosearch">' + result.title + '</a></div>');
							
							if(result.metadata.media && result.metadata.media.length){
							
							
							
								html.push('<div class="cnnVideoTime"><a href="'+ resultURL +'?iref=videosearch"><img src="' + CNN_VIDEO_ICON + '" /></a> &nbsp;' + result.metadata.media.length + '</div>');
							}
							
						html.push('</li>');
					
					}
				}
			}
		html.push('</ul>');
		finalContent = html.join("");
	}
	var omnitureCode = '';
	
	if(cnnPrimaryType == CNN_INTERNAL_TYPE_VIDEO) {
		if(foundData === false){
			//finalContent = cnnNoResultsFound(videoContObj, vLookupString, cnnVideoSearchParameters);
		}
		omnitureCode = cnnCallOmniture(cnnPrimaryType, foundData, vLookupString);
	}
	
	
	
	return finalContent + omnitureCode;
}
//End Search Processor publishing functions

//LATCH CODE
function  cnnLatch(){
	
}

cnnLatch.prototype.created = function(cbNames, completionCb) {
	//console.log('creating ' + cbNames[0] + ' ' + cbNames[1] + ' ' + cbNames[2]);
	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) {
	//console.log('calling ' + cbName);
	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) {
		//console.log('completed');
		this.completionCb(this.cbState);
	} 
};

cnnLatch.prototype.clear = function() {
	//console.log('clearing latch');
	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


function cnnPublishGeneralInfo(contentObj, LookupString, contentType)
{	
	CNN_LOOKUPSTRING = LookupString;
	
	switch(contentType){
		case "mixed":
			 var resultCount = contentObj.metaResults.mixed;
			 cnnMixedCount = resultCount;
			 var resultWording = 'CNN results';
			 var tabWording = 'All Results';
		break;
		case "article":
			 var resultCount = contentObj.metaResults.article;
			 cnnArticleCount = resultCount;
			 var resultWording = 'CNN results';
			 var tabWording = 'Stories';
		break;
		case "video":	
			 var resultCount = contentObj.metaResults.video;
			 cnnVideoCount = resultCount;
			 var resultWording = 'CNN videos';
			 var tabWording = 'Videos'; 
		break;
		case "web":
		//console.log('publish general web ');
			var resultCount = parseInt(contentObj.metaResults.web);
			cnnWebCount = resultCount;
			var resultWording = 'Web results';
			var tabWording = 'Web';
		break;
		default:
			var resultCount = contentObj.metaResults.mixed;
			
	}
	
	var indexStart =  parseInt(contentObj.criteria[0].startAt);
	var indexEndTmp = indexStart + ( parseInt(contentObj.criteria[0].maxResults) - 1);
	var indexEnd = (resultCount < indexEndTmp)? resultCount : indexEndTmp;
	
	if(resultCount != 0){
		
		$('cnnInitialTabText').innerHTML = '';
		$('resultLine' + contentType).innerHTML = 'Showing <strong>' + indexStart + '-' + indexEnd + '</strong> of <strong>' +  resultCount +  ' ' + resultWording + ' </strong> for <strong> ' + cnnEscapeQuery(LookupString) + '</strong>';
		$(contentType + 'Tab').innerHTML = '<a href="javascript:cnnSwitchSection(\'' + contentType + '\', false);" >' + tabWording + ' <span>(' + resultCount + ')</span></a>';
		
		var sortingMarkup = 'Sort By <select name="sort" id="cnnSubSearchSortBy" onchange="cnnSwitchSorting(this)" >';
		var sorting = contentObj.criteria[0].sortBy;
		
		if( sorting == "" || sorting == 'date'){
			sortingMarkup += '<option value="date" selected>Date</option><option value="relevance">Relevance</option>';
		}
		else{
			sortingMarkup += '<option value="date">Date</option><option value="relevance" selected>Relevance</option>';
		}
		sortingMarkup += '</select>';
		$('cnnSearchSortBy').innerHTML = sortingMarkup;
	}
	/*else{
		cnnNoResultsEnabled = true;
		//console.log('general triggered noresults');
		cnnTriggerNoResultsDisplay(LookupString);
	}*/
	
	// DID YOU MEAN
	if(firstCall == true && contentObj.didYouMean && contentObj.didYouMean.prompt!="" && cnnIsIntl === false){
		cnnDidYouMeanEnabled = true;
		cnnDidYouMean(contentObj, LookupString);
	}
	 
	
	// END DID YOU MEAN
	
	// RELATED SEARCHES
	if(firstCall == true){
		var html = new Array();
		var relatedLinks = contentObj.topics;
		if(relatedLinks && relatedLinks.length > 0){
			html.push('Related Searches: ');
			for(var j=0; j<relatedLinks.length; j++){
				 html.push('<a href="javascript:cnnRunSearch( \'' + relatedLinks[j].topic + ' \');" >' + relatedLinks[j].topic);
				html.push('</a>')
				if(j != relatedLinks.length - 1){html.push(', ')};
			}
			var finalContent = html.join("");
			$('cnnRelatedSearch').innerHTML = finalContent;
		}
	}

	// END RELATED SEARCHES
	
	if(contentType == 'web'){
		cnnLatch.prototype.called('rDataW', contentObj);
	}
	else if(contentType == 'video'){
		cnnLatch.prototype.called('rDataV', contentObj);
	}
	else if(contentType == 'mixed'){
		cnnLatch.prototype.called('rDataM', contentObj);
	}
	else if(contentType == 'article'){
		cnnLatch.prototype.called('rDataA', contentObj);
	}
	

}
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 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);
	cnnSortSearchBy(selectedOption, qIndex) 
}

function cnnDisplayController(mainObj){
	//console.log("display");
	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';
				}
				
				$('cnnResultsDisplay').style.display = 'block'; 
				cnnNoResultsEnabled = false;
			}
			else{
				cnnTriggerNoResultsDisplay(CNN_LOOKUPSTRING);
			}
			
			if(cnnDidYouMeanEnabled == true && firstCall == true){
				$('cnnDidYouMeanContainer').style.display = 'block';
				$(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';
				}
				
				$('cnnResultsDisplay').style.display = 'block'; 
				cnnNoResultsEnabled = false;
			}
			else{
				cnnTriggerNoResultsDisplay(CNN_LOOKUPSTRING);
			}
		break;
		case "video":
			//console.log('publish display 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){
				$('cnnResultsDisplay').style.display = 'block'; 
				cnnNoResultsEnabled = false;
			}
			else{
				$('cnnNoResultsContainer').innerHTML = cnnNoResultsFound(CNN_LOOKUPSTRING);
				cnnNoResultsEnabled = true;
				$('cnnNoResultsContainer').style.display = 'block';
			}
		break;
		case "web":
			//console.log('publish display web no check');
	
			if(cnnWebCount>0){
				//console.log('publish display web ');
	
				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';
				}
				
				$('cnnResultsDisplay').style.display = 'block'; 
				cnnNoResultsEnabled = false;
			}
			else{
				cnnTriggerNoResultsDisplay(CNN_LOOKUPSTRING);
			}
		break;
		default:
			
	}
	
	
	firstCall = false;

}

function cnnAdvancedSearch(formObj){
	//orClause notClause exactClause author section, startDate=YYYY-MM-DD
	var cnnQueryUpdate = false
	var cnnAsAllTerms = '';
	var cnnAsAnyTerms = '';
	var cnnAsExactPhase = '';
	var cnnAsNoTerms = '';
	var cnnAsDate = '';
	var cnnAsSection = '';
	var cnnAsAuthor = '';

	var cnnAsQueryString = '';

	if($('cnnAsAllTerms').value != ''){
		cnnAsAllTerms =  $('cnnAsAllTerms').value;
		cnnAsQueryString += '&allClause=' + cnnAsAllTerms;
		cnnQueryUpdate = true;
	}
	
	if($('cnnAsAnyTerms').value != ''){
		cnnAsAnyTerms =  $('cnnAsAnyTerms').value;
		cnnAsQueryString += '&orClause=' + cnnAsAnyTerms;
	}
	if($('cnnAsExactPhase').value!= ''){
		cnnAsExactPhase =  $('cnnAsExactPhase').value;
		cnnAsQueryString += '&exactClause=' + cnnAsExactPhase;
	}
	if($('cnnAsNoTerms').value!= ''){
		cnnAsNoTerms =  $('cnnAsNoTerms').value;
		cnnAsQueryString += '&notClause=' + cnnAsNoTerms;
	}

	if($('cnnAsDate').value!= ''){
		cnnAsDate =  $('cnnAsDate').value;
		var cnnAsStartDate = '';
		
		var currentTime = new Date();
	
		switch(cnnAsDate){
			case "anytime":
			break;
			case "today":
				cnnAsStartDate = cnnDoubleDigits(currentTime.getFullYear()) + '-' + cnnDoubleDigits(currentTime.getMonth() + 1) + '-' + cnnDoubleDigits(currentTime.getDate());
			break;
			case "week":
				var newTime = new Date();
				newTime.setDate(currentTime.getDate() - 7);
				cnnAsStartDate = cnnDoubleDigits(newTime.getFullYear()) + '-' + cnnDoubleDigits(newTime.getMonth() + 1) + '-' + cnnDoubleDigits(newTime.getDate());
			break;
			case "month":
				var newTime = new Date();
				newTime.setMonth(currentTime.getMonth() - 1);
				cnnAsStartDate = cnnDoubleDigits(newTime.getFullYear()) + '-' + cnnDoubleDigits(newTime.getMonth() + 1) + '-' + cnnDoubleDigits(newTime.getDate());
			break;
			case "3months":
				var newTime = new Date();
				newTime.setMonth(currentTime.getMonth() - 3);
				cnnAsStartDate = cnnDoubleDigits(newTime.getFullYear()) + '-' + cnnDoubleDigits(newTime.getMonth() + 1) + '-' + cnnDoubleDigits(newTime.getDate());
			break;
			case "year":
				var newTime = new Date();
				newTime.setYear(currentTime.getYear() - 1);
				cnnAsStartDate = cnnDoubleDigits(newTime.getFullYear() + 1900) + '-' + cnnDoubleDigits(newTime.getMonth() + 1) + '-' + cnnDoubleDigits(newTime.getDate());
			break;
			default:
			cnnAsStartDate = cnnDoubleDigits(currentTime.getFullYear()) + '-' + cnnDoubleDigits(currentTime.getMonth() + 1) + '-' + cnnDoubleDigits(currentTime.getDate());
		}
		
		if(cnnAsStartDate != ''){
			cnnAsQueryString += '&startDate=' + cnnAsStartDate;
		}
	}
 
	if($('cnnAsSection').value!= ''){
		cnnAsSection =  $('cnnAsSection').value;
		if(cnnAsSection != 'all'){
			cnnAsQueryString += '&section=' + cnnAsSection;
		}
	}
	if($('cnnAsAuthor').value!= ''){
		cnnAsAuthor =  $('cnnAsAuthor').value;
		cnnAsQueryString += '&author=' + cnnAsAuthor;
	}
	
	
	var qIndex = cnnGetQindex(cnnPrimaryType);
	cnnAdvancedQuery = cnnAsQueryString;
	coreAddSearchAttribute(cnnAsQueryString, 0);
	coreAddSearchAttribute(cnnAsQueryString, 1);
	coreAddSearchAttribute(cnnAsQueryString, 2);
	cnnSwitchSection(cnnPrimaryType, true)
}

function cnnDoubleDigits(number)
{
	var digits = number.toString();
	if(digits.length < 2 ){
		var converted = '0' + digits;
		return converted;
	}
	else{
		return digits;
	}
}

function paginationChange(firstResult, sectionType)
{
	if(firstResult > 1){
		cnnPaginationChanged = true
	}
	
	if(cnnPaginationChanged === true){
		//console.log('triggering pagination flip');
		var pageNumber = (firstResult/10) + 1;
		var noDataLatch;
		
		if (cnnIsIntl === true){
			noDataLatch = new Array('sLinks');
		}
		else{
			noDataLatch = new Array('sLinks','wOffers')
		}

		cnnUpdateQueryStringKey('start', firstResult);
		
		cnnLatch.prototype.created(noDataLatch, cnnDisplayController);
		
		if (cnnIsIntl === false){
			WebOffers.getInstance().initialize();
		}
		SponsoredLinks.getInstance().initialize(sectionType, cnnIsIntl); 
	}
}

function cnnSwitchSection(sectionType, isFirstCall) {

	cnnUpdateQueryStringKey(cnnFeaturedContentTypeParam, sectionType);
	var qIndex;
	
	var webLatch = new Array('rDataW','sLinks','wOffers');
	var articleLatch = new Array('rDataA','sLinks','wOffers');
	var mixedLatch = new Array('rDataM','sLinks','wOffers');
	var videoLatch = new Array('rDataV','sLinks','wOffers');
	var noDataLatch = new Array('sLinks','wOffers');
	
	if (cnnIsIntl){
		var webLatch = new Array('rDataW','sLinks');
		var articleLatch = new Array('rDataA','sLinks');
		var mixedLatch = new Array('rDataM','sLinks');
		var videoLatch = new Array('rDataV','sLinks');
		noDataLatch = new Array('sLinks');
	}
	
	if(isFirstCall === true){
		if(sectionType == 'article'){
			cnnLatch.prototype.created(articleLatch, cnnDisplayController);
		} else if(sectionType == 'mixed'){
			cnnLatch.prototype.created(mixedLatch, cnnDisplayController);
		} else if(sectionType == 'video'){
			cnnLatch.prototype.created(videoLatch, cnnDisplayController);
		}
	} else if(sectionType == 'web'){
		if(webTriggered == false){
			cnnLatch.prototype.created(webLatch, cnnDisplayController);
		} else{
			cnnLatch.prototype.created(noDataLatch, cnnDisplayController);
		}
	} else {
		cnnLatch.prototype.created(noDataLatch, cnnDisplayController);
	}
		
	for(var id=0; id < cnnSectionIds.length; id++) {
		$(cnnSectionIds[id]).style.display = 'none';
	}

	$('resultLinemixed').style.display = 'none';
	$('resultLinearticle').style.display = 'none';
	$('resultLinevideo').style.display = 'none';
	$('resultLineweb').style.display = 'none';
	$('mixedTab').className = 'cnnResultsType';
	$('articleTab').className = 'cnnResultsType cnnResultsTypeIndent';
	$('videoTab').className = 'cnnResultsType cnnResultsTypeIndent';
	
	if($('cnnResultsRightCol').style.display == 'none'){
		$('cnnResultsRightCol').style.display = 'block';
		$('cnnResultsContainerNoBG').id = 'cnnResultsContainer';
		$('cnnVideoResults').id = 'cnnResultsLeftCol';
	}

	switch(sectionType){
		case "mixed":
			$(cnnMixedContentId).style.display = 'block';
			$(cnnMixedContentContainerId).style.display = 'block';
			$('resultLine' + sectionType).style.display = 'block';
			$(sectionType + 'Tab').className = 'cnnResultsType cnnResultsTypeSelected';
			qIndex = 0;
		break;
		case "article":
			$(cnnArticleContentId).style.display = 'block';
			$(cnnArticleContentContainerId).style.display = 'block';
			$('resultLine' + sectionType).style.display = 'block';
			$(sectionType + 'Tab').className = 'cnnResultsType cnnResultsTypeIndent cnnResultsTypeSelected';
			qIndex = 1;
		break;
		case "video":
			$(cnnVideoContentId).style.display = 'block';
			$(cnnVideoContentContainerId).style.display = 'block';
			$('resultLine' + sectionType).style.display = 'block';
			$('cnnResultsRightCol').style.display = 'none';
			$('cnnResultsContainer').id = 'cnnResultsContainerNoBG';
			$('cnnResultsLeftCol').id = 'cnnVideoResults';
			$(sectionType + 'Tab').className = 'cnnResultsType cnnResultsTypeIndent cnnResultsTypeSelected';
			qIndex = 2;
		break;
		default:
			$(cnnMixedContentId).style.display = 'block';
			$(cnnMixedContentContainerId).style.display = 'block';
			$('resultLine' + sectionType).style.display = 'block';
			$(sectionType + 'Tab').className = 'cnnResultsType cnnResultsTypeIndent cnnResultsTypeSelected';
	}
	cnnPrimaryType = sectionType;
	
	for(var i = 0; i<cnnAdsDomIds.length; i++){
		$(cnnAdsDomIds[i]).style.display = 'none';
	}	
	
	isFirstCall = false;
	if (cnnIsIntl === false){
		WebOffers.getInstance().initialize();
	}
	SponsoredLinks.getInstance().initialize(sectionType, cnnIsIntl); 
	
}

//Supporting functions to the Search Processor publishing functions

function cnnAddCommas(number) {
	number += '';
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(number)) {
		number = number.replace(rgx, '$1' + ',' + '$2');
	}
	return number;
}

function cnnCallOmniture(queryInternalCType, foundData, lookupStringTmp){

	var lookupString = cnnEscapeQuery(lookupStringTmp);
	
	if(typeof s != 'undefined'){
		if(queryInternalCType == "article"){
			s.pageName = "Article search results";
			s.eVar1 = "Article search results";
			s.channel= "Search";
			s.eVar2= "Search";
			s.eVar7 = lookupString;
			
			if(foundData === false){
				s.eVar12 =lookupString; //NO RESULTS
			}
		} else if(queryInternalCType == "video"){
			s.pageName = "Video search results";
			s.eVar1 = "Video search results";
			s.channel= "Search";
			s.eVar2= "Search";
			s.eVar8 = lookupString;
			if(foundData === false){
				s.eVar11 = lookupString; //NO RESULTS
			}
			
		} else if(queryInternalCType == "mixed"){
			s.pageName = "All search results";
			s.eVar1 = "All search results";
			s.channel= "Search";
			s.eVar2= "Search";
			s.eVar10 = lookupString;
			if(foundData === false){
				s.eVar12 = lookupString; //NO RESULTS
			}
			
		} else { //web results
			s.pageName = "Web search results";
			s.eVar1 = "Web search results";
			s.channel= "Search";
			s.eVar2= "Search";
			s.eVar6 = lookupString;
		}
		var s_code=s.t();
		return s_code;
	} else {
		return '';
	}
}

function cnnEscapeQuery(q){
	//remove any plus symbols, escaped or unescaped
	q=(q)?q:'';
	if(q.indexOf('+')>0){		q = q.replace(/\+/g,' ');	}
	if(q.indexOf('%2b')>0){		q = q.replace(/%2b/g,' ');	}
	return unescape(q);
}

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"){
		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 videoPrefix = (cnnIsIntl)?INTL_VIDEO_URL_PREFIX:CNN_VIDEO_URL_PREFIX;
	var resultURL = (resultURLPath.indexOf('http') == 0)?resultURLPath:videoPrefix + resultURLPath;
	return resultURL;
}

function cnnLeftTrim(sString) {
	while (sString.substring(0,1) == ' ') {
		sString = sString.substring(1, sString.length);
	}
	return sString;
}

function cnnTriggerNoResultsDisplay(LookupString){
	//console.log('noresults triggered');
	$('cnnResultsDisplay').style.display = 'none';
	for(var i = 0; i<cnnAdsDomIds.length; i++){
		$(cnnAdsDomIds[i]).style.display = 'none';
	}	
	
	$('cnnResultsDisplay').style.display = 'none';
	for(var j = 0; j<cnnPaginationIds.length; j++){
		$(cnnPaginationIds[j]).style.display = 'none';
	}	
	if(CNN_ALL_ADS_AVAILABLE === true){
		$(cnnAdsDomIds[3]).style.display = 'block';
	}
	$('cnnNoResultsContainer').innerHTML = cnnNoResultsFound(LookupString);
	cnnNoResultsEnabled = true;
	$('cnnNoResultsContainer').style.display = 'block';
}

function cnnNoResultsFound(lookUpString) { 
	//console.log('noresults display');
	var html = new Array();
	html.push('<div id="cnnNoResultsL1">Your search <strong>' + cnnEscapeQuery(lookUpString) + '</strong> did not match any documents</div>');
	html.push('<hr class="cnnSearchHR" /><div id="cnnSearchSuggestions"><strong>A few suggestions</strong><ul><li>Make sure all words are spelled correctly</li><li>Try different keywords</li><li>Try more general keywords</li></ul></div><hr class="cnnSearchHR" />	');
	
	 html.push("<div id='cnnNoResultsL2'>Top CNN searches this week</div><table id='cnnTopSearches' cellspacing='0' ><tr style='margin: 0; padding: 0;'><td>");
    html.push("<ul id='cnnTopSearchesLeft' class='cnnTopSearches' >");

    // Retrieve top stories bullets from include data.
    var stories = document.getElementById("topStorySearchesInclude").getElementsByTagName("li");

    for ( var i = 0; i < stories.length; i++ ) 
    {
        // Are we ready to add to the right column.
        if ( i == 5 ) {
            html.push("</ul></td><td style='margin: 0; padding: 0;'><ul id='cnnTopSearchesRightx' class='cnnTopSearches'>");
        }

        // Set bullet class.      
        var className = "cnnTopSearches" + ( i + 1 );

        // Retrieve bullet hyperlink.
        var hyperlink = (stories[i].getElementsByTagName("a"))[0];

        // Create bullet.
        html.push("<li class='" + className + "'><a href=\"javascript:cnnRunSearch('" +
        hyperlink.innerHTML + "')\";>" + "<img src='" + TOP_STORIES_BULLET_IMAGE_URL +
        "' border='0' />" + hyperlink.innerHTML + "</li>");
    }

    html.push("</ul></td></tr></table></div>");   
	
	var noResultHtml = html.join("");
	return noResultHtml;
}

function cnnDidYouMean(resultObj, LookupString){

	var html = new Array();
	var didYouMean = resultObj.didYouMean;
	
	if(cnnIsIntl === false && didYouMean.correctedResults[0]){
		
		html.push('<p class="cnnDYMtext">Did you mean: <a href=\'javascript:cnnRunSearch("' + didYouMean.prompt + '")\';><strong>' + didYouMean.prompt + '</strong></a> ?');
		if(didYouMean.correctedResults[0]){
			html.push('<span class="cnnDYMtextgray">Top ' + didYouMean.correctedResults.length + ' results shown</span>');
		}
		html.push('</p>');
		html.push('<hr class="cnnSearchHR cnnDYMHR" />');
		
		var crHtml = new Array();
		crHtml.push('<ul class="cnnResultsList">');
		var lengthOfResults = didYouMean.correctedResults.length;
		for (var i = 0; i<lengthOfResults; i++) {
			var result = didYouMean.correctedResults[i];
			var resultURL;
			
			if(result.metadata.media.image){
				var resultURLPath = cnnLeftTrim(result.url);
				resultURL = cnnGetVideoURL(resultURLPath);
			}
			else if(result.url){
				resultURL = result.url;
			
			}
			crHtml.push('<li>');
			if(result.metadata.media && result.metadata.media.image){
				crHtml.push('<a href="' + resultURL + '?iref=allsearch" class="cnnResultsImage" style="background: #000 url(' + result.metadata.media.image + ') center no-repeat"><span class="cnnVRimgLink"></span></a>');
				crHtml.push('<ul class="cnnResultItem cnnResultItemV" >');
			}
			else{
				crHtml.push('<ul class="cnnResultItem" >');
			}
			
			if(result.mediaDateUts){
				crHtml.push('<li class="cnnResultDate">' + cnnRenderTimeStamp((result.mediaDateUts * 1000) , '')+ '</li>');
			}
			
			crHtml.push('<li class="cnnResultTitle cnnResultTitleTopic"><a href="'+ resultURL +'?iref=allsearch" >' + result.title + '</a></li>');
		
			if(result.metadata.media && result.metadata.media.excerpt){
				crHtml.push('<li class="cnnResultText cnnResultTextTopic">');
				crHtml.push(result.metadata.media.excerpt.substring(0,350));
				if(result.metadata.media.excerpt.length > 350) { html.push('...'); }
				crHtml.push('</li>');
			}
			
			crHtml.push('</ul></li>');
			crHtml.push('<li class="cnn_clear cnnResultSpacer"></li>');	
		}
		crHtml.push('</ul>');
		html.push(crHtml.join(""));
	}else{
		html.push("");
	}
	
	if($('cnnDidYouMeanContainer')){
		$('cnnDidYouMeanContainer').innerHTML = html.join('');
	}
}

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 intlQuery =  (cnnIsIntl)?"&intl=true":'';
	var contentTypeValue = cnnGetQueryStringKeyValue(cnnFeaturedContentTypeParam);
	var contentTypeQuery = (contentTypeValue)?'&' + cnnFeaturedContentTypeParam + '=' + contentTypeValue:'';
	//var sortBy = cnnGetSortBy();
	var sortBy = cnnSortBy;
	var sortByHash = (sortBy)?'&sortBy='+sortBy:'';
	var query = "query=" + searchTerm + intlQuery + sortByHash;
	location.href = location.pathname + '?' + query;
}

function cnnSortSearchBy(sortByValue, qIndex) {
	// Adding primaryType as a parameter here.
	var theFeaturedType = cnnPrimaryType;
	var querySubstring = (cnnAdvancedQuery?cnnAdvancedQuery:'') + '&sortBy=' + sortByValue + ((cnnIsIntl)?'&intl=true':'') + ((theFeaturedType)?'&'+cnnFeaturedContentTypeParam+'='+theFeaturedType:'');
	cnnUpdateQueryStringKey('sortBy', sortByValue);
	cnnSortBy = sortByValue;
	coreAddSearchAttribute(querySubstring, qIndex);
}

function cnnSpotLight(contObj, sortBy, presentationType) {
	var html = new Array();
	var omniSLiref;
	if (presentationType == CNN_INTERNAL_TYPE_VIDEO) {
		return "";
    }
	else if (presentationType == CNN_INTERNAL_TYPE_MIXED) {
		omniSLiref = "allsearch"; 
	}
	else if (presentationType == CNN_INTERNAL_TYPE_ARTICLE) {
		omniSLiref = "storysearch"; 
	}
    
	if(contObj.spotlights && contObj.spotlights.length){
		for ( var i = 0; i < contObj.spotlights.length; i++ ) {
			var spotlight = contObj.spotlights[i];
			if(spotlight.items && spotlight.items.length){
				for ( var j = 0; j < spotlight.items.length; j++ ) {
					var spotLightItem = spotlight.items[j];
					if(spotLightItem.title && spotLightItem.url){
						var item = spotlight.items[j];
					    var resultURL;
					    
					    var resultURLPath = cnnLeftTrim(item.url);
					    resultURL = cnnGetVideoURL(resultURLPath);
							
						html.push('<li>');
					    if(item.metadata.media && item.metadata.media.image){
							html.push('<a href="' + resultURL + '?iref='+omniSLiref+'"><img src="' + item.metadata.media.image + '" class="cnnResultsImage" /></a>');
							html.push('<ul class="cnnResultItem cnnResultItemV" >');
						}
						else{
							html.push('<ul class="cnnResultItem" >');
						}
					    if(item.mediaDateUts){
					    html.push('<li class="cnnResultDate">' + cnnRenderTimeStamp((item.mediaDateUts * 1000) , '')+ '</li>');
					    }
							
							html.push('<li class="cnnResultTitle cnnResultTitleTopic"><a href="'+ resultURL +'?iref='+omniSLiref+'" >' + item.title + '</a></li>');
						
							if(item.metadata.media && item.metadata.media.excerpt){
					    html.push('<li class="cnnResultText cnnResultTextTopic">');
					    html.push(item.metadata.media.excerpt.substring(0,350));
					    if(item.metadata.media.excerpt.length > 350) { html.push('...'); }
					    html.push('</li>');
					    }
					    html.push('</ul></li><li class="cnn_clear cnnResultSpacer"></li>');
					
					}
				}
			}
		}
	}
	return html.join("");
}


function cnnUpdateIntoSearchBoxes(lookupString, disableMainBoxUpdate){
	var inputTopTxtSearch = cnnContentTxtTopSearchId;
	var inputMainTxtSearch = cnnContentTxtMainSearchId;
	var inputBotTxtSearch = cnnContentTxtBotSearchId;
	if($(inputTopTxtSearch)){
		$(inputTopTxtSearch).value = cnnEscapeQuery(lookupString);
	}
	if($(inputBotTxtSearch)){
		$(inputBotTxtSearch).value = cnnEscapeQuery(lookupString);
	}
	if($('ir-searchbox')){
		$('ir-searchbox').value = cnnEscapeQuery(lookupString);
	}
	if(disableMainBoxUpdate && disableMainBoxUpdate === true){
		
	}
	else{
		if($(inputMainTxtSearch)){
			$(inputMainTxtSearch).value = cnnEscapeQuery(lookupString);
		}
		if($('cnnAsAllTerms')){
			$('cnnAsAllTerms').value = cnnEscapeQuery(lookupString);
		}
	}
}

function cnnUpdateTitle(cnnSearchTerm){

	cnnSearchTerm = cnnEscapeQuery(cnnSearchTerm);
	document.title = cnnSearchTerm + ' - Search results for ' + cnnSearchTerm + ' - CNN.com';
}
//End Supporting functions to the Search Processor publishing functions


//Start the processes that fill in the page

SearchProcessor.getInstance().addMultipleSearchInstances(cnnMultipleSearchParameters);
SearchProcessor.getInstance().addSearchInstance(cnnWebSearchParameters);
	
	
function cnnEmptyQuery(LookupString){
	document.title = 'CNN.com Search';
	cnnTriggerNoResultsDisplay("");
	cnnUpdateIntoSearchBoxes('SEARCH', true);
}	
	
var cnnSearchTerm = cnnGetQueryStringKeyValue('query');
if(cnnSearchTerm){
	cnnUpdateTitle(cnnSearchTerm);
	cnnUpdateIntoSearchBoxes(cnnSearchTerm);
	SearchProcessor.getInstance().initialize();
	cnnSwitchSection(cnnPrimaryType, true);
} else {
	cnnEmptyQuery('');
}

