﻿/*
-----------------------------------------------
Dynamic Lead -- JavaScript
Author(s): Paul Waldschmidt, David Johnson
Created: 4/8/2008
Last Modified: 4/28/08

-----------------------------------------------
*/

Newsweek.Component.DynamicLead = {
	showLightBox : true,
	showPreview : true,
	showCaption : true,
	globalSlidePause : 8500,
	globalTitleTransition : 400,
	onClick : null,
	isAnimating : false,
	transitionTimeoutId : null,
	
	init : function(){		
					
		var dlObj = document.getElementById('dynamicLead');
	
		dlObj = {				
			imageDeck               : $('.imageDeck', this),
			mainArtLink             : $('.imageDeck a.mainArt', this),
			mainArtImg              : $('.imageDeck a.mainArt img', this),			
			overlay                 : $('.imageDeck #dlOverlay', this),
			overlayXOffset			: $('.imageDeck').width(),
			caption					: $('.imageDeck #dlOverlay .caption', this),
			rubric                  : null,
			title		            : null,
			deck	                : null,
			source					: null,
			titlePause              : 250,
			currentIndex            : 0,
			lightBox				: $('div.bot div.lightBox a', this),
			mainNav					: $('div.bot ol.mainNav', this),
			subNav                  : $('div.bot ol.subNav', this),
			back					: $('div.bot ol.mainNav li a.back', this),				
			pausePlay				: $('div.bot ol.mainNav li a.pausePlay', this),
			next					: $('div.bot ol.mainNav li a.next', this),
			isPaused			    : false,
			slides					: []
		}
		
		// conversion from seconds to milliseconds
		this.globalSlidePause = this.globalSlidePause * 1000;
		this.globalTitleTransition = this.globalTitleTransition * 1000;
		
		this.getSlidePreviews(dlObj);
		this.getMainContent(dlObj);
		this.getLightBox(dlObj);		
	
		this.playPauseHandler(dlObj);
		this.previousHandler(dlObj)
		this.nextHandler(dlObj);
		this.start(dlObj);
		
		dlObj.onselectstart = function(){
			return false;
		}		
	},
	
	getSlidePreviews: function(dlObj){
		$('li', dlObj.subNav).each(function(i){
			if(Newsweek.Component.DynamicLead.showCaption){
				$('a', this).mouseover(function(e){
					if(document.getElementById('dlLightBox')){
						return;
					}
					
					var pos = GetObjPos(this);
					var dlPos = GetObjPos(dlObj.dl);
					var left = (pos[0] - dlPos[0]) + dlPos[0] - 50;
					var top = pos[1] - 145;
					
					if(i !== dlObj.currentIndex){
						var content = $(this).siblings('.slideContent').html();
						var html = '<div class="dlPreview transp" style="left:' + left + 'px;top:' + top + 'px;"><div class="slideContent">' + content + '</div></div>';
						$(html).appendTo('body');
					}
					
					$(this).mouseout(function(e){
						$('div.dlPreview').remove();
						return false;
					});
					return false;
				});
			}
		
			$('a', this).click(function(e){
				if(i == dlObj.currentIndex){
					return;
				}
				Newsweek.Component.DynamicLead.showSelected(i, dlObj);
				return false;
			});			
		});
	},
	
	
	getMainContent : function(dlObj){
		$('li', dlObj.subNav).each(function(i){
			var slide = this;
			slide = {
				url : $('div.slideContent a.mainArtLink', this).attr('href'),
				rubric : $('div.slideContent h6.rubric', this).text(),
				title : $('div.slideContent h1.title a', this).text(),
				deck : $('div.slideContent p.deck', this).text(),
				source : $('div.slideContent p.source', this).text(),
				imageSrc : $('div.slideContent a.mainArtLink img', this).attr('src'),
				date : $('div.slideContent p.date', this).text()
			}
			dlObj.slides.push(slide);
		});
	},	

	getLightBox : function(dlObj){
		if(this.showLightBox){
			$(dlObj.lightBox).click(function(e){
				
				if(document.getElementById('dlLightBox')){
					return;
				}
				
				$(this).addClass('selected');
				
				var lightBox = '<ul>';
				
				
				for(var i=0;i<=5;i++){
					if(i%3 == 2){
						var slide = '<li class="last">';
					} else {
						var slide = '<li>';
					}
					
					if(dlObj.slides[i] != null){
						slide += '<div class="imageDeck"><img id="' + i + '" class="dlLbItem" width="100" src="' + dlObj.slides[i].imageSrc + '" alt="' + dlObj.slides[i].title + '" /></div><h6 id="' + i + '" class="title dlLbItem">' + dlObj.slides[i].title + '</h6><p id="' + i + '" class="dlLbItem">' + dlObj.slides[i].deck + '</p><p class="date">' + dlObj.slides[i].date + '</p>';					
					} else {
					 slide += '&nbsp;';
					}
					
					slide += '</li>';
					lightBox += slide;					
				}
				
				lightBox += '</ul>';
				
				var pos = GetObjPos(this);
				var dlPos = GetObjPos(dlObj.dl);
				var left = pos[0] - 89;
				var top = pos[1] - 296;				
				
				var html = '<div id="dlLightBox" class="dlLightBox transp" style="left:' +  left + 'px;top:' + top + 'px"><span class="close">&#xA0;</span>' + lightBox + '</div>';
			
				$(html).appendTo('body');
				
				$(document).one('click', function(e){					
					$(dlObj.lightBox).removeClass('selected');
					$('#dlLightBox').remove();
					return false;
				});		
				
				$('.dlLbItem').click(function(){
					if(parseInt(this.id) == dlObj.currentIndex){
						return;
					}
					dlObj.animating = false;
					Newsweek.Component.DynamicLead.showSelected(parseInt(this.id), dlObj);
					$(dlObj.lightBox).removeClass('selected');
					$('#dlLightBox').remove();					
				});						
				
				return false;
			});	
			
		} else {
			$(dlObj.lightBox).parent('div.lightBox').css({'visibility' : 'hidden'});
		}
	},
	
	setMainArtContent : function(dlObj){
		$(dlObj.mainArtLink).attr('href', dlObj.slides[dlObj.currentIndex].url);
		$(dlObj.mainArtImg).attr({
			'src' : dlObj.slides[dlObj.currentIndex].imageSrc,
			'alt' : dlObj.slides[dlObj.currentIndex].title
		});		
	},
	
	setOverlayContent : function(dlObj){
	
		var pngTitleUrl = staticContentRoot + 'dynimages/textrenderer.aspx?t=' + encodeURIComponent(dlObj.slides[dlObj.currentIndex].title) + '&s=32&r=0&g=0&b=0&f=NWGROT-M.TTF';
		var html = '<h6 class="rubric"><a href="' + dlObj.slides[dlObj.currentIndex].url + '">' + dlObj.slides[dlObj.currentIndex].rubric + ' </a></h6>';	
		html += '<h1 class="title"><a href="' + dlObj.slides[dlObj.currentIndex].url + '"><img src="' + pngTitleUrl + '" alt="' + dlObj.slides[dlObj.currentIndex].title + '" /></a></h1>';
		html += '<p class="deck"><a href="' + dlObj.slides[dlObj.currentIndex].url + '">' + dlObj.slides[dlObj.currentIndex].deck + '</a></p>';
		html += '<p class="source"><a href="' + dlObj.slides[dlObj.currentIndex].url + '">' + dlObj.slides[dlObj.currentIndex].source + '</a></p>';				
		return html;
	}, 
	
	playPauseHandler : function(dlObj){
		$(dlObj.pausePlay).click(function(){
			if($(this).hasClass('pause')){
				Newsweek.Component.DynamicLead.pause(dlObj);
			} else {
				Newsweek.Component.DynamicLead.play(dlObj);
			}
			return false;
		});	
	},
	
	previousHandler : function(dlObj){
		$(dlObj.back).one('click', function(){	
			if(Newsweek.Component.DynamicLead.isAnimating){return;}
			Newsweek.Component.DynamicLead.isAnimating = true;
			$(dlObj.overlay).dequeue();
			Newsweek.Component.DynamicLead.showPrevious(dlObj);
			return false;
		});
	},
	
	nextHandler : function(dlObj){
		$(dlObj.next).one('click', function(){
			if(Newsweek.Component.DynamicLead.isAnimating){return;}
			Newsweek.Component.DynamicLead.isAnimating = true;	
			Newsweek.Component.DynamicLead.showNext(dlObj);
			return false;
		});	
	},
	
	start : function(dlObj){
	
		$('li', dlObj.subNav).slice(dlObj.currentIndex, dlObj.currentIndex+1).children('a').removeClass('selected').css({
			'background-position' : 'center ' +  (-90 -(dlObj.currentIndex*15)) + 'px'
		});		
	
		// Populate first slide into image deck & overlay
		this.setMainArtContent(dlObj);
		var overlayContent = this.setOverlayContent(dlObj);
		$(dlObj.caption).html(overlayContent);
		
		// omniture
		if (this.onClick != null){
		    $(dlObj.imageDeck).find("a").click(function(){
				Newsweek.Component.DynamicLead.onClick();
		    });
		}		
		
		// DO NOT REMOVE (IE)
		$(dlObj.overlay).fadeOut();
		this.resetOverlayPos(dlObj);
		$(dlObj.mainArtLink).fadeIn(500, function(){
			Newsweek.Component.DynamicLead.slideTransition(dlObj);
		});
	},
	
	showSelected : function(index, dlObj){
		this.goTo(index, dlObj);	
	},	
	
	showPrevious : function(dlObj){
		if (dlObj.currentIndex == 0){
			this.goTo(dlObj.slides.length - 1, dlObj);
		} else {
			this.goTo(dlObj.currentIndex - 1, dlObj);
		}	
	},
	
	showNext : function(dlObj){
		if (dlObj.currentIndex == (dlObj.slides.length - 1)){
			this.goTo(0, dlObj);
		} else {
			this.goTo(dlObj.currentIndex + 1, dlObj);
		}	
	},
	
	play : function(dlObj){
		dlObj.isPaused = false;
		$(dlObj.pausePlay).addClass('pause').removeClass('play');
		this.goNext(dlObj);
	},
	
	pause : function(dlObj){
		dlObj.isPaused = true;
		$(dlObj.pausePlay).addClass('play').removeClass('pause');
		this.clearInterval(dlObj);	
	}, 
	
	slideTransition : function(dlObj){
		// Bring in the overlay
		if(dlObj.currentIndex%3 == 0){
			this.slideOverlayRightLeft(dlObj);
		} else if (dlObj.currentIndex%3 == 1){
			this.slideOverlayBottomTop(dlObj);
		} else {
			this.slideOverlayLeftRight(dlObj);
		}
				
		Newsweek.Component.DynamicLead.setNextTransition(dlObj);
	},
	
	slideOverlayRightLeft : function(dlObj){
		window.setTimeout(function(){
			$(dlObj.overlay).animate({left : 0 + 'px'}, Newsweek.Component.DynamicLead.globalTitleTransition, function(){
				dlObj.animating = false;
				Newsweek.Component.DynamicLead.hideOverlayLeftRight(dlObj);							
			});
		}, dlObj.titlePause);		
	},
	
	slideOverlayBottomTop : function(dlObj){		
		window.setTimeout(function(){				
			$(dlObj.overlay).animate({top : -110 + 'px'}, Newsweek.Component.DynamicLead.globalTitleTransition, function(){
				dlObj.animating = false;
				Newsweek.Component.DynamicLead.hideOverlayTopBottom(dlObj);						
			});					
		}, dlObj.titlePause);			
	},
	
	slideOverlayLeftRight : function(dlObj){		
		window.setTimeout(function(){
			$(dlObj.overlay).animate({left : 0 + 'px'}, Newsweek.Component.DynamicLead.globalTitleTransition, function(){
				dlObj.animating = false;
				Newsweek.Component.DynamicLead.hideOverlayRightLeft(dlObj);							
			});
		}, dlObj.titlePause);		
	},
	
	setNextTransition : function(dlObj){	
		if(dlObj.slides.length == 1){return;} // Exit
		if (!dlObj.isPaused){		
			this.transitionTimeoutId = window.setTimeout(function(){
				Newsweek.Component.DynamicLead.goNext(dlObj);
			}, Newsweek.Component.DynamicLead.globalSlidePause);
		}	
	},
	
	goNext : function(dlObj){
		if (dlObj.currentIndex == (dlObj.slides.length - 1)){
			Newsweek.Component.DynamicLead.goTo(0, dlObj);
		} else {
			Newsweek.Component.DynamicLead.goTo(null, dlObj);
		}	
	},
	
	goTo : function(index, dlObj){
		Newsweek.Component.DynamicLead.clearInterval(dlObj);
		
		if(index != null){
			$('li', dlObj.subNav).slice(dlObj.currentIndex, dlObj.currentIndex+1).children('a').removeClass('selected').css({
				'background-position' : 'center ' +  (-(dlObj.currentIndex*15)) + 'px'				
			});
			
			if(index !== 0){				
				$('li', dlObj.subNav).slice(index, index+1).children('a').addClass('selected').css({
					'background-position' : 'center ' +  (-90-(index*15)) + 'px'
				});
			} else {
				$('li a', dlObj.subNav).slice(dlObj.slides.length-1, dlObj.slides.length).removeClass('selected').css({
					'background-position' : 'center ' +  (-(dlObj.slides.length*15)) + 'px'					
				});
				$('li', dlObj.subNav).slice(index, index+1).children('a').addClass('selected').css({
					'background-position' : 'center ' +  (-90-(index*15)) + 'px'
				});
			}
			
			dlObj.currentIndex = index;
		} else {
		
			$('li', dlObj.subNav).slice(dlObj.currentIndex, dlObj.currentIndex+1).children('a').removeClass('selected').css({
				'background-position' : 'center ' +  (-(dlObj.currentIndex*15)) + 'px'
			});
				
			$('li', dlObj.subNav).slice(dlObj.currentIndex+1, dlObj.currentIndex+2).children('a').addClass('selected').css({
				'background-position' : 'center ' +  (-90-((dlObj.currentIndex+1)*15)) + 'px'
			});			
			
			dlObj.currentIndex++;	
		}
		
		
		this.fadeOutSlide(dlObj);
	},
	
	hideOverlayRightLeft : function(dlObj, endPos){
		$('span.close', dlObj.overlay).one('click', function(){			
			$(dlObj.overlay).animate({left : -(dlObj.overlayXOffset) + 'px'}, Newsweek.Component.DynamicLead.globalTitleTransition);		
			return false;
		});
	},
	
	hideOverlayTopBottom : function(dlObj, endPos){
		$('span.close', dlObj.overlay).one('click', function(){
			$(dlObj.overlay).animate({top : 0 + 'px'}, Newsweek.Component.DynamicLead.globalTitleTransition);							
			return false;
		});	
	},
	
	hideOverlayLeftRight : function(dlObj, endPos){
		$('span.close', dlObj.overlay).one('click', function(){	
			$(dlObj.overlay).animate({left : dlObj.overlayXOffset + 'px'}, Newsweek.Component.DynamicLead.globalTitleTransition);						
			return false;
		});	
	},	
	
	clearInterval : function(dlObj){
		window.clearTimeout(this.transitionTimeoutId);
		this.transitionTimeoutId = null;	
	},
	
	fadeOutSlide : function(dlObj){
		$(dlObj.overlay).fadeOut(function(){
			var overlayContent = Newsweek.Component.DynamicLead.setOverlayContent(dlObj);
			$(dlObj.caption).html(overlayContent);
			// Reset the origin of the overlay
			Newsweek.Component.DynamicLead.resetOverlayPos(dlObj);
		}).siblings(dlObj.mainArtLink).fadeOut(350, function() {
			Newsweek.Component.DynamicLead.setMainArtContent(dlObj);
			Newsweek.Component.DynamicLead.fadeOutComplete(dlObj);			
		});
	},
	
	fadeOutComplete  : function(dlObj){
		$(dlObj.mainArtLink).fadeIn(300, function() {
			Newsweek.Component.DynamicLead.slideTransition(dlObj);
			Newsweek.Component.DynamicLead.isAnimating = false;
			Newsweek.Component.DynamicLead.previousHandler(dlObj);
			Newsweek.Component.DynamicLead.nextHandler(dlObj);
		});		
	},
	
	resetOverlayPos : function(dlObj){
		// Bring in the overlay
		if(dlObj.currentIndex%3 == 0){
			$(dlObj.overlay).css({
				left: dlObj.overlayXOffset +'px',
				top:-110+'px',
				display : 'block'			
			});
		} else if (dlObj.currentIndex%3 == 1){
			$(dlObj.overlay).css({
				left:0+'px', 
				top:0+'px',
				display : 'block'
			});
		} else {
			$(dlObj.overlay).css({
				left: (-(dlObj.overlayXOffset)) +'px', 
				top:-110+'px',
				display : 'block'
			});
		}	
	}
}

