var pagetypeTS='mosaic'
var cnnItemsPerPage = 21;
var totalPagesNumber = 1;
var cnnShareTitle= encodeURIComponent("Daily Dose");
var cnnShareDesc = encodeURIComponent("Daily Dose");
var IMG_SERV = 'http://i.cdn.turner.com/cnn';
var overrideVideoAd = '/cnn_adspaces/2.0/homepage/video.postroll_emb.ad';
var navPageHandle = false;

var PREV = 'prev';
var NEXT = 'next';
var NON_CLICKABLE = false;
var CLICKABLE = true;
var SOUNDOFF_ANCHOR = '#soundoff';
/**********************************************
 * how long can our topic strings get in px
 * before adding 'more' and truncating
 * *******************************************/
var LIST_LEN = 435; 

/**********************************************
 * any checkbox labels that don't match up with
 * topics can be corrected here.
 * *******************************************/
var topicsTrans = {
	'Female': "Women's Health",
	'Male': "Men's Health",
	'Child': "Children's Health",
	'Adult': "Boomer Health",
	'Beauty &amp; Plastic Surgery': "Beauty Plastic Surgery",
	'Calories, Carbs &amp; Fat': "Calories, Carbs Fats",
	'Cold &amp; flu': "Cold Flu",
	'Gadgets &amp; Hi-Tech': "Gadgets Hi-Tech",
	'Headaches &amp; migraines': "Headache Migraines",
	'How Much Exercise do I need?': "Exercise",
	'Pregnancy/Fertility': "Pregnancy Fertility",
	'Vitamins &amp; Supplements': "Vitamins Supplements",
	'Weight Training': "Strength Training",
	'Yoga/Meditation': "Yoga Meditation",
	'ADD &amp; ADHD': "ADHD",
	"Alzheimer's disease": "Alzheimer's Disease",
	'Brain &amp; nervous system': "Brain Nervous System",
	'Cancer &amp; Chemo': "Cancer Chemo",
	'Cold &amp; flu': "Cold Flu",
	'Digestive health': "Digestive Health",
	'Headaches &amp; migraines': "Headaches & Migraines",
	'Heart &amp; vascular': "Heart Vascular",
	'HIV &amp; AIDS':"HIV AIDS",
	'Infectious diseases': "Infectious Disease",
	'Pain management':	"Pain Management",
	'Post traumatic stress': "Post Traumatic Stress Disorder"
};

/**********************************************
 * These are the canned topic searches and the 
 * list of topics that they pass in
 * *******************************************/
var cannedSearches = {
men 		: ["Men's Health"],
women 	: ["Women's Health"],
children	: ["Children's Health"],
boomers  : ["Boomer Health"],
exercise	: ["Travel Fitness",
				"Budget Fitness",
				"Strength Training",
				"Alternative Exercise",
				"Cardio Fitness",
				"Exercise",
				"Yoga Meditation"],
diet		: ["Vitamins Supplements",
				"Calories, Carbs Fats",
				"Healthy Eating",
				"Recipes"],
mind		: ["Addiction",
				"ADHD",
				"Alzheimer's Disease",
				"Stress",
				"Depression",
				"Happiness",
				"Post Traumatic Stress Disorder",
				"Amazing Mind"]
};

var currState = new Hash();
	

var searcher = new SearchObject(
	'http://search.cnn.com/dailydose.jsp',
//	'http://srch8dev2.turner.com/cnnrelaunch/dailydose.jsp',
	'Daily Dose',
	'cnnPageCurrent',
	loadDDSearchResultsHandler
);

searcher.topicsTrans = topicsTrans;

function loadYPage(val){
   try{
		navPageHandle = true;
      YAHOO.util.History.navigate("val", val);
   }
   catch(e){ }
}

function pageHandler(stateHash){
	if ( navPageHandle ) {
		navPageHandle = false;
		return;
	}
   stateHash = stateHash.replace('val=', '');

	if ( typeof(stateHash) == "string" && stateHash != "" ) {
		var stateObj = stateHash.toQueryParams();
		var page = ((stateObj.page)?stateObj.page:1);
		switch(stateObj.type)
		{
			case 'canned'	:
				doSearch(stateObj.param, page);
				break;
			case 'specific' :
				if ( stateObj.param ) {
					cnnLoadChecks(stateObj.param);
				}
				cnnSubmitView(page);
				break;
			case 'default' :
				loadDefaultResults(page);
			default :
				break;
		}
	} else {
		loadDefaultResults(1);
	}	
}


function cnnShowStep(step) {
   if($("step" + step) != null) {
	   var s = 0;
	   while($("step" + s) != null) {
	      $("step" + s).hide();
	      s++
	   }
	   
	   $("step" + step).removeClassName("cnnHidden");
	   $("step" + step).show();
	   $("cnnEditSelectionBtn").hide();
	   $("cnnEditSelection").hide();
	}
}

function cnnLoadChecks(ids) {
	var idArr = ids.split('|');

	$A(idArr).each( function(e) {
		$(e).checked = true;
		$(e+'2').checked = true;
	});
}

function cnnSubmitView(page) {
	$('cnnTblPagination').hide();
	var demos = [];
	var interests = [];
	var conditions = [];
   searcher.clearParams();

   $$('#demosChecks input[type="checkbox"]').each( function(e) { 
      if(e.checked) {
			var key = $(e).name;
			var val = $(e).next(0).innerHTML;
			demos.push(val);
			searcher.addParam(key,val);
		} 
   });

   $$('#interestsChecks input[type="checkbox"]').each( function(e) { 
      if(e.checked) {
			var key = $(e).name;
			var val = $(e).next(0).innerHTML;
			interests.push(val);
			searcher.addParam(key,val);
		}
   });

   $$('#conditionsChecks input[type="checkbox"]').each( function(e) { 
      if(e.checked) {
			var key = $(e).name;
			var val = $(e).next(0).innerHTML;
			conditions.push(val);
			searcher.addParam(key,val);
		} 
   });

	currState = $H({type:'specific',param:searcher.getParamsStr()});
	loadYPage(currState.toQueryString());

   triggerPageSearch( searcher, (page?page:1) );

   cnnShowStep(4);

	setListDisplay(
		'demosSelection',
		null,
		demos.join(', '));

	setListDisplay(
		'interestsSelection',
		'interestsMore',
		interests.join(', '));

	setListDisplay(
		'conditionsSelection',
		'conditionsMore',
		conditions.join(', '));

   $("cnnEditSelection").removeClassName("cnnHidden");
   $("cnnEditSelectionBtn").show();
   $("cnnEditSelection").show();
}

function cnnResubmitView(page,params)
{
	searcher.clearParams();


}

function setListDisplay(selectionId, moreId, txt) {
	if ( txt.length > 0 ) {
		$(selectionId).update(txt);
		
		if (moreId != null) {	
			var wtest = $(selectionId).getWidth();
			if ( wtest > LIST_LEN ){
				$(moreId).show();
			} else {
				$(moreId).hide();
			}
			
			while(wtest > LIST_LEN) {
				txt = txt.substr(0,txt.lastIndexOf(','));
				wtest = $(selectionId).update(txt).getWidth();
			}
		}
	} else {
		$(selectionId).update('None selected');
		if ( moreId != null ) {
			$(moreId).hide();
		}
	}
}


function doOverlaySearch(type)
{
	doSearch(type);
	cnnHideOverlay('cnnCategory1');
	cnnShowStep(0);
}

function doSearch(type, page) {
	$('cnnTblPagination').hide();
	currState = $H({type:'canned',param:type,page:1});
	loadYPage(currState.toQueryString());

	searcher.clearParams();

	$A(cannedSearches[type]).each( function(e,type) {
		searcher.addParam(type,e);
	});

	if ( page ) {
		triggerPageSearch(searcher,page);
	} else {
		triggerPageSearch( searcher, 1 );
	}
}

function triggerSearch(searchObj) {
	//clear out the old pages
	$('cnnWorkArea').update('');  
   $('cnnPageCurrentLoading').show();
	$('cnnPageDefault').hide();
   $('cnnPageCurrent').hide();

   searchObj.setPage(1);

   var csiObj = CSIManager.getInstance();
   csiObj.setConfigForId(
      searchObj.display.id,
      {"pageNumber": 1});

   csiObj.call(
      searchObj.searchUrl,
      searchObj.getQueryStr(),
      searchObj.display.id,
      searchObj.display.handler,
      true);
}

function triggerPageSearch(searchObj,page) {
   $('cnnPageCurrentLoading').show();
	$('cnnPageDefault').hide();
   $('cnnPageCurrent').hide();

	if ( page == 'next' ) {
		page = (searchObj.searchJson.page+1);
	} else if (page == 'prev') {
		page = (searchObj.searchJson.page-1);
	}

//   searchObj.setPage(page);
	searchObj.searchJson.page = page;
	
   var csiObj = CSIManager.getInstance();
   csiObj.setConfigForId(
      searchObj.display.id,
      {"pageNumber": page,
		"setPagination":true}
	);

   csiObj.call(
      searchObj.searchUrl,
      searchObj.getQueryStr(),
      searchObj.display.id,
      searchObj.display.handler,
      true);
}

function loadDDSearchResultsHandler(json,id,config) {
	var html = cnnGetListing(json);

	totalPagesNumber = Math.ceil(json.articlesFound / cnnItemsPerPage);

	var pagers = document.getElementsByName('pager');

	var pgHtml = '';
	if ( json.articlesFound > 0 )	{
		var start = (config.pageNumber-1)*cnnItemsPerPage;
		var end = start + json.contentItems.length;
		pgHtml = getCountDisplay(start, end, json.articlesFound);
		setPageOnOff(totalPagesNumber);
		$('cnnTblPagination').show();
	} else {
		$('cnnTblPagination').hide();
	}
   copy2WorkArea(html, 'Page'+config.pageNumber, pgHtml);
   if(config.setPagination) {
      cnnSetPagination(config.pageNumber);
   }

	$('cnnCountDisplay').update(pgHtml);
   $('cnnPageCurrentLoading').hide();
	$('cnnPageDefault').hide();
   $('cnnPageCurrent').show();
   return html;
}

function loadDefaultResults(page)
{
	var x = document.getElementsByName('dailyDoseArticle');

	totalPagesNumber = Math.ceil(x.length / cnnItemsPerPage);

	setPageOnOff(totalPagesNumber);
	currState = $H({type:'default',page:page});
	cnnSetPagination(page);

	var start, end;
	start = (page-1)*cnnItemsPerPage;
	end = start+cnnItemsPerPage;

	for( var i = 0 ; i < x.length ; ++i ) {
		if ( i >= start && i < end ) {
			$(x[i]).show();
		} else {
			$(x[i]).hide();
		}
	}

	end = (end <= x.length)?end:x.length;
  	var pgHtml = getCountDisplay(start,end,x.length);

	$('cnnCountDisplay').update(pgHtml);
	$('cnnPageCurrent').hide();
	$('cnnPageDefault').show();
	$('cnnTblPagination').show();
}

function setPageOnOff( totalPages ) {
	var pagers = document.getElementsByName('pager');
	var pgHtml = '';

	for( var i = 0, len = pagers.length ; i < len ; ++i ) {
		if ( i < totalPages ) {
			$(pagers[i]).up('td').show();
		} else {
			$(pagers[i]).up('td').hide();
		}
	}
	if ( totalPages <= 1 ) {
		$('pagerNext').addClassName('cnnSearchNextPage');
	}
}

function getCountDisplay(start, end, total) {
	var params = {
		'first'	: start+1,
		'last' 	: end,
		'total'	: total
	};

	var cntDisplayTmpl = new Template('#{first}-#{last} of #{total}');
	return cntDisplayTmpl.evaluate(params);
}

function cnnGetListing(json,pageNumber) {
   try{
      var returnString = '';
      var html = [];

      if(isArray(json.contentItems)) {
	      html.push('<div class="cnnContent cnnBlueCards">');

			if ( json.contentItems.length == 0 ) {
				html.push('<div class="cnnNoResults">No results found</div>');
			}

         for( var i = 0, len = json.contentItems.length; i < len; ++i ) {
            var ciObj = new SearchItem(json.contentItems[i]);
            html.push(ciObj.listHtml(i));
         }
         html.push('<\/div>');
      }
   } catch(e) {
		return [	'The engine has encountered an unexpected error.',
					' An issue ticket has been sent to our team  Please',
					' make a new selection of topics and try again.'].join('');
   }
   
	return html.join('');
}

function copy2WorkArea(theHTML, pageID, pageTxt){
   if($('cnnWorkArea')){
      if(!$(pageID)){
			var pgDiv	= document.createElement('div');
			var pgAttr 	= document.createAttribute('id');
         var workDiv = document.createElement('div');
         var idAttr 	= document.createAttribute("id");

         idAttr.nodeValue = pageID;
         workDiv.setAttributeNode(idAttr);
         workDiv.innerHTML = theHTML;

			pgAttr.nodeValue = pageID+'_pg';
			pgDiv.setAttributeNode(pgAttr);
			pgDiv.innerHTML = pageTxt;
         $('cnnWorkArea').appendChild(workDiv);
			$('cnnWorkArea').appendChild(pgDiv);
      }
   }
}

function SearchItem(obj){
   this.headline = obj.headline;
   this.url = obj.url;
   this.ts = obj.ts;
   this.timestampHTML = cnnRenderMTTimeStamp(obj.ts);
   this.hasComments = obj.hasComments;
   this.commentCount = obj.commentCount;
   if(isArray(obj.images)){
      this.imagesURL = obj.images.length > 0? obj.images[0].url:'';
   }

	this.listHtml = function(i) {
		var html = [];
		var imgUrl = '';

		if ( (i+2)%3 == 0 ){
			html.push('<div class="cnnPad10Left">');
		}else{
         html.push('<div class="cnnPad9Left">');
      }
      html.push('<div class="cnnBlueCard">');
      html.push('<div class="cnnBlueCardPad">');

      if(this.imagesURL){
			var imgUrl = new String(this.imagesURL);
			if ( imgUrl.search('http://') < 0 ) {
				imgUrl = IMG_SERV + imgUrl;
			}
      	html.push('<a href="'+this.url+'">');
			html.push('<img src="'+imgUrl);
			html.push('" width="60" height="45" align="left" border="0"/></a>');
      }

		html.push('<a href="'+this.url+'">'+this.headline+' <span> &raquo;</span></a>');
		html.push('</div>');

		html.push('<div class="cnnDate">');
		html.push(this.timestampHTML);
		html.push('</div>');

		html.push('<div id="mosVidMore">');
      
		if(this.hasComments && typeof(this.commentCount) == "number"){
         html.push('<a href="'+this.url+SOUNDOFF_ANCHOR+'">');
			html.push(this.commentCount+' comments</a>');
      }
      html.push('</div>');
      html.push('</div>');
      html.push('</div>');

      return ( html.join('') );
	}
}

function cnnSetPagination(page) {
	if (page < 1) {
		return;
	}
	var oldPageNum;
	var currPageNum = searcher.getPage();
	
	if ( page == 'next' ) {
		page = currPageNum + 1;
	} else if ( page == 'prev' ) {
		page = currPageNum - 1;
	}
	
	if (!page || isNaN(page) || page < 1 ) {
		page = 1;
	} else if ( totalPagesNumber != 0 && page > totalPagesNumber ) {
		page = totalPagesNumber;
	}

//	if (currPageNum == page ) {
//		return;
//	}
	
	oldPageNum = currPageNum;
	searcher.setPage(page);

	currState['page'] = page;
	loadYPage(currState.toQueryString());	

	if( page == 1 ) {
		$('pagerPrev').addClassName('cnnSearchPreviousPage');
	} else {
		$('pagerPrev').removeClassName('cnnSearchPreviousPage');
	}

	if(page == totalPagesNumber || totalPagesNumber == 1) {
		$('pagerNext').addClassName('cnnSearchNextPage');
	} else {
		$('pagerNext').removeClassName('cnnSearchNextPage');
	}

	var pagers = document.getElementsByName('pager');
	for( var i = 0 ; i < pagers.length ; ++i) {
		if ( i == (page-1) ){
			$(pagers[i]).addClassName('cnnSearchCurrentPage');
		} else {
			$(pagers[i]).removeClassName('cnnSearchCurrentPage');
		}
	}
}

function showDefaultPage(page) {
	var origPg = searcher.getPage()-1;
	cnnSetPagination(page);
	var currPg = searcher.getPage()-1;

	if (origPg != currPg) {
		var x = document.getElementsByName('dailyDoseArticle');
		var start, end;

		start = origPg*cnnItemsPerPage;
		end = start+cnnItemsPerPage;
		end = (end <= x.length)?end:x.length;

		while( start < end ) {
			$(x[start++]).hide();
		}

		start = currPg*cnnItemsPerPage;
		end = start+cnnItemsPerPage;
		end = (end <= x.length)?end:x.length;
		
	  	var pgHtml = getCountDisplay(start,end,x.length);
		$('cnnCountDisplay').update(pgHtml);

		while( start < end ) {
			$(x[start++]).show();
		}
	}
}

function goToPage(page) {
	var currPg = searcher.getPage();

	if (	 page == currPg
		|| (page == 'prev' && currPg == 1)
		|| (page == 'next' && currPg == totalPagesNumber)) {
		return;
	}

	if ( page == 'prev' ) {
		page = currPg-1;
	} else if ( page == 'next' ) {
		page = currPg+1;
	}

	if ( currState.type == 'default' ) {
		showDefaultPage(page);
	} else {
//		var o = new getObj('Page' + page);
//		if(o && o.obj) {
//			var pgO = new getObj('Page' + page + '_pg');
//			if (pgO && pgO.obj) {
//				$('cnnCountDisplay').update(pgO.obj.innerHTML);
//			}
//			cnnSetPagination(page);
//		} else {
			triggerPageSearch(searcher,page);
//		}
	}
}

function isArray(obj){
   return (typeof(obj)=="undefined" || typeof(obj.length)=="undefined")?false:true;
}
