WWE.Touts.EditorialPod = (function() {
	var isIE6 = !!(navigator.appVersion.indexOf('MSIE 6.0') > -1);
	var jsonUrl = '';
	var epTitle = '';
	var slides = null;
	var navid = 'epNavigation';
	var viewid = 'epMainView';
	var view = 0; //current slide of ep player
	var nav;
	var navYPos = 0;
	var navSlots = 4;
	var navItemHeight = 84;
	var moving = null;
	var countdown = null;
	var adjust = (isIE6) ? 338 : 228;
	var isOpen = 1;
	var sliding = null;
	var phasing = null;
	var pos = 0;
	var slideXPos = 0;
	var paused = false;
	var prevId = -1;
	var prevPos = -1;
	var play = false;
	var playBtn;
	var rewBtn;
	var ffBtn;
	var epVidBtn;
	var epVideo;
	var epVideoPlaying = false;
	var slideDesc;
	var slideDescHeadline;
	var slideDescBody;
	var slideLinks;
	var slideDescTxt;


	function getJSON() {
		new Ajax.Request(jsonUrl, {
			method: 'get',
			evalJSON: true,
			onSuccess: function(transport) {
				slides = transport.responseJSON.publication.touts;
				$('epSlides').setStyle({width:'484px'});
				$$('.epNavItem').each(function(nav) {
					nav.observe('mouseover', function(){WWE.Touts.EditorialPod.navBgLo(nav);}.bind(nav));
					nav.observe('mouseout', function(){WWE.Touts.EditorialPod.navBgOff(nav);}.bind(nav));
					nav.observe('click', function() {WWE.Touts.EditorialPod.loadSlide(nav.id.substring(3,nav.id.length),'nav')}.bind(nav));
				});

				playBtn.observe('mouseover', function() {if(play) { playBtn.className = (isIE6) ? 'pause hover pause hover' : 'pause hover'; } else { playBtn.className = 'hover';}}.bind(playBtn));
				playBtn.observe('mouseout', function() {if(play) { playBtn.className = (isIE6) ? 'play hover pause' : 'pause'; } else { playBtn.className = 'play';}}.bind(playBtn));
				playBtn.observe('click', function() {if(play) WWE.Touts.EditorialPod.pause(); else WWE.Touts.EditorialPod.play(); });
				rewBtn.observe('mouseover', function() {rewBtn.addClassName('hover');}.bind(rewBtn));
				rewBtn.observe('mouseout', function() {rewBtn.removeClassName('hover');}.bind(rewBtn));
				rewBtn.observe('click', function() {WWE.Touts.EditorialPod.rew('nav');});
				ffBtn.observe('mouseover', function() {ffBtn.addClassName('hover');}.bind(ffBtn));
				ffBtn.observe('mouseout', function() {ffBtn.removeClassName('hover');}.bind(ffBtn));
				ffBtn.observe('click', function() {WWE.Touts.EditorialPod.ff('nav');});

				WWE.Touts.EditorialPod.play();
			}.bind(slides)
		});
	}

	function getSlide(id) {
		slide = null;
		for(var i=0; i<slides.length;i++)
			if(id == slides[i].id) slide = slides[i];
		return slide;
	}

	function getSlidePos(id) {
		for(var i=0; i<slides.length;i++) {
			if(id==slides[i].id) pos = i;
		}
		return pos;
	}

	function getIdFromElement(el) {
		if(el.id.indexOf('nav') > -1)
			return el.id.substring(3,el.id.length);
		else if(el.id.indexOf('slide') > -1)
			return el.id.substring(5,el.id.length);
	}

	return {
		init: function(jsonurl, eptitle) {
			playBtn = $('playBtn');
			rewBtn = $('rewBtn');
			ffBtn = $('ffBtn');
			epVidBtn = $('epVidBtn');
			epVideo = $('epVideo');
			slideDesc = $('epSlideDescBox');
			slideDescHeadline = slideDesc.down('h3');
			slideDescBody = slideDesc.down('div.txt p');
			slideLinks = $$('div.epWatchLinks')[0];
			slideDescTxt = $$('.epSlideDesc div.txt')[0];
			nav = $('epNavigation');
			jsonUrl = jsonurl;
			epTitle = eptitle;
			getJSON();
			$('epSlideDescToggle').observe('click', WWE.Touts.EditorialPod.phaseDesc);
			$$('.epSlideDesc h3')[0].observe('click', WWE.Touts.EditorialPod.phaseDesc);
			$$('.epSlideDescBg')[0].setOpacity('.75');
		},
		play: function() {
			play = true;
			if(epVideoPlaying) WWE.Touts.EditorialPod.hideVideo();
			if(paused) {
				WWE.Touts.EditorialPod.startCountdown(slides[pos]);
				paused = false;
			} else
				WWE.Touts.EditorialPod.loadSlide(slides[pos].id);
			WWE.Touts.EditorialPod.togglePlay();
		},
		pause: function() {
			play = false;
			paused = true;
			WWE.Touts.EditorialPod.stopCountdown();
			WWE.Touts.EditorialPod.togglePlay();
		},
		ff: function(src) {
			if(epVideoPlaying) WWE.Touts.EditorialPod.hideVideo();
			if(sliding === null) {
				if (typeof(src) != 'undefined' && src === 'nav') WWE.Touts.EditorialPod.pause();
				prevId = slides[pos].id;
				prevPos = pos;
				pos++;
				pos = (pos < slides.length) ? pos : 0;
				WWE.Touts.EditorialPod.loadSlide(slides[pos].id,src);
			}
		},
		rew: function(src) {
			if(epVideoPlaying) WWE.Touts.EditorialPod.hideVideo();
			if(sliding === null) {
				if (typeof(src) != 'undefined') WWE.Touts.EditorialPod.pause();
				prevId = slides[pos].id;
				prevPos = pos;
				pos--;
				pos = (pos > -1) ? pos : slides.length-1;
				WWE.Touts.EditorialPod.loadSlide(slides[pos].id,src);
			}
		},
		startCountdown: function(slide) {
			var duration = (slide.duration) ? slide.duration : 8;
			$('epSlideCountdown').setStyle({backgroundColor:'#FF0000'});
			countdown = new Effect.Morph('epSlideCountdown',{style:{width:'484px'},duration:duration,afterFinish:WWE.Touts.EditorialPod.countdownFinish});
		},
		stopCountdown: function() {
			if(countdown != null) {
				countdown.cancel();
				countdown = null;
			}
			$('epSlideCountdown').setStyle({width:'1px',backgroundColor:'transparent'});
		},
		countdownFinish: function() {
			WWE.Touts.EditorialPod.ff();
		},
		loadSlide: function(id,src) {
			if (sliding != null || (src == 'nav' && view == id)) return;
			if (slideDesc.style.display == 'none') slideDesc.show();
			view = id;
			src = (Object.isString(src)) ? src : 'player';
			if(src != 'player') {
				pos = getSlidePos(id);
				play = false;
				paused = true;
				WWE.Touts.EditorialPod.togglePlay();
			}

			slide = getSlide(id);
			if(typeof(slide.imgloaded) != 'undefined') {
				WWE.Touts.EditorialPod.showSlide(slide.id);
			} else {
				$('slide'+slide.id).insert('<img src="'+slide.imageurl+'" id="epMainSlide" width="484" height="364" style="position:relative;left:484px;cursor:pointer;" onLoad="WWE.Touts.EditorialPod.showImage(' + slide.id + ',\'' + src + '\')"/>');
				if(Object.isString(slide.imagelinkhref)) $('slide'+slide.id).observe('click',function(){window.location = slide.imagelinkhref });
				slide.imgloaded = 0;
				slides[pos] = slide;
				if(src != 'player')
					WWE.Touts.EditorialPod.showSlide(slide.id);
			}
		},
		showSlide: function(id) {
			$('slide'+id).setStyle({zIndex:1});
			slide = slides[pos];
			if(countdown != null) WWE.Touts.EditorialPod.stopCountdown();

			sliding = new Effect.Move($('slide'+id),{x:-484, y:0, duration:.5, afterFinish: function(){WWE.Touts.EditorialPod.showSlideFinish(slide)}.bind(slide)});

			slideDescHeadline.update(slide.headline);
			slideDescBody.update(slide.body);
			slideLinks.update();

			if(Object.isString(slide.imagelinkhref))
				slideLinks.insert(new Element('span',{'class':'slidelink'}).update(new Element('a',{href:slide.imagelinkhref}).update(slide.imagelinktext)));
			if(Object.isString(slide.galleryurlhref))
				slideLinks.insert(new Element('span',{'class':'slidelink'}).update(new Element('a',{href:slide.galleryurlhref,'class':'photo'}).update(slide.galleryurltext)));
			if(Object.isString(slide.externalvideourlhref))
				slideLinks.insert(new Element('span',{'class':'slidelink'}).update(new Element('a',{href:'javascript:wwevideoplayer("'+slide.externalvideourlhref+'")','class':'video'}).update(slide.externalvideourltext)));
			if(Object.isString(slide.externalvideourl2href))
				slideLinks.insert(new Element('span',{'class':'slidelink'}).update(new Element('a',{href:'javascript:wwevideoplayer("'+slide.externalvideourl2href+'")','class':'video'}).update(slide.externalvideourl2text)));
			if(Object.isString(slide.videourl)) {
				epVidBtn.observe('click', function() {
					WWE.Touts.EditorialPod.playVideo(slide);
				}.bind(epVideo));
				epVidBtn.observe('mouseover', function() {epVidBtn.style.backgroundPosition = '0px 0px';});
				epVidBtn.observe('mouseout', function() {epVidBtn.style.backgroundPosition = '0px -36px';});
				epVidBtn.show();
			} else {
				epVideo.hide();
				epVideo.update();
				epVidBtn.hide();
			}


			WWE.Touts.EditorialPod.updateNav();
		},
		showSlideFinish: function(slide) {
			if(prevId > -1) $('slide'+prevId).setStyle({left:'484px'});
			prevId = slides[pos].id;
			$('slide'+prevId).setStyle({zIndex:0});
			sliding = null;
			if(play) WWE.Touts.EditorialPod.startCountdown(slide);
		},
		showImage: function(id,src) {
			slide = getSlide(id);
			slide.imageloaded = 1;
			slides[pos] = slide;
			var doFinish = (src == 'player') ? function() {WWE.Touts.EditorialPod.showSlide(id)}.bind(id) : function() {};
			new Effect.Move($('slide'+id).down('img'),{x:-484, y:0, duration:.5, afterFinish: doFinish});
		},
		playVideo: function(slide) {
			slideDesc.hide();
			WWE.Touts.EditorialPod.pause();

			var so = new SWFObject("/swf/ep/videoPlayer.swf", "EPVideo", "485", "364", "8", "#000000");
			so.addParam("quality", "high");
			so.addParam("base", "/swf/ep/");
			so.addParam("wmode", "transparent");
			so.addVariable("videopath", slide.videourl);
			so.write("epVideo");

			epVideo.show();
			epVideoPlaying = true;
		},
		hideVideo: function() {
			slideDesc.show();
			epVideo.update();
			epVideo.hide();
			epVideoPlaying = false;
		},
		updateNav: function() {
			posFix = pos + 1;
			prevPosFix = prevPos + 1;
			navYPos = nav.style.top.substring(0,nav.style.top.indexOf('px'));

			nAbove = (navYPos < 0) ? navYPos / (navItemHeight * -1) : 0;
			nBelow = slides.length - (nAbove+navSlots);
			navPos = (nAbove > 0) ? nAbove + 1 : 1;
			navMoved = (prevPos != -1) ? posFix - prevPosFix : 0;

			var moveTo = 0;

			if(posFix < navPos || posFix >= (navPos + navSlots)) {
				if(navMoved == 1) {
					moveTo = navItemHeight * -1;
				} else if(navMoved > 1) {
					moveTo = navItemHeight * (nBelow * -1);
				} else if(navMoved == -1) {
					moveTo = navItemHeight * (navMoved * -1);
				} else if(navMoved < -1) {
					moveTo = navItemHeight * nAbove;
				}
			}
			if(typeof(moveTo) != 'undefined' && moveTo != 0) new Effect.Move(nav,{x: 0, y: moveTo, duration: .5});
			WWE.Touts.EditorialPod.navBgHi($('nav'+view));
		},
		phaseDescArrowDown: function() {
			$('epSlideDescToggle').setStyle({'backgroundImage':'url(/images/common/arrows/redArrowDown.gif)'});
			phasing = null;
		},
		phaseDescArrowUp: function() {
			$('epSlideDescToggle').setStyle({'backgroundImage':'url(/images/common/arrows/redArrowUp.gif)'});
			phasing = null;
		},
		phaseDesc: function() {
			if (phasing == null) {
				if (isOpen == 0) {
					isOpen = 1;
					phasing = new Effect.Move(slideDesc, {x: 0, y: -88, mode: 'relative', duration: .25, afterFinish:WWE.Touts.EditorialPod.phaseDescArrowDown, queue: 'front'});
					new Effect.Appear(slideDescTxt,{duration:0.25});
				} else {
					isOpen = 0;
					new Effect.Fade(slideDescTxt,{duration:0.25});
					phasing = new Effect.Move(slideDesc, {x: 0, y: 88, mode: 'relative', duration: .25, afterFinish:WWE.Touts.EditorialPod.phaseDescArrowUp, queue:'front'});
				}
			}
		},
		navBgLo: function(nav) {
			if(view != getIdFromElement(nav))
				nav.down('div.epNavDescBg').setStyle({'backgroundColor':'#660000'}).setOpacity(0.7);
		},
		navBgOff: function(nav) {
			if(view != getIdFromElement(nav))
				nav.down('div.epNavDescBg').setStyle({'backgroundColor':'#000000'}).setOpacity(0.7);
		},
		navBgHi: function(nav) {
			$$('div.epNavDescBg').invoke('setStyle',{'backgroundColor':'#000000'});
			nav.down('div.epNavDescBg').setStyle({'backgroundColor':'#FF0000'}).setOpacity(0.7);
		},
		togglePlay: function() {
			if(play)
				playBtn.className = (isIE6) ? 'pause hover pause' : 'pause'; //no idea why
			else {
				playBtn.className = 'play';
			}
		}
	};
})();

WWE.Touts.NewsTout = function(){

	// NewsTout settings
	var settings = sessionData;
	if (!settings.load()) settings.store();
	var tabs = new Array();
	var loading = new Array();
	var view = '';
	var size = '';
	var btnList;
	var btnListAttr;
	var btnExpand;
	var btnExpandAttr;

	function _getDifferenceFromNow(dateToConvert){
		var now = new Date();
		var difference = now.getTime() - dateToConvert.getTime();
		return difference;
	}

	function _createDate(milliseconds){
		var newDate = new Date();
		newDate.setTime(milliseconds);
		var offsetMillis = newDate.getTimezoneOffset();

		var dateMillis = newDate.getTime();

		var now = new Date();
		now.setTime(offsetMillis + dateMillis);

		return now;
	}

	function _getDifferenceText(difference){
		if(difference <= 0){
			return "in the future";
		}

		var minutes = Math.round(difference/1000/60);
		if(minutes <=59){
			mp = (minutes > 1) ? 's' : '';
			return minutes + ' minute' + mp + ' ago';
		}

		var minutesExcess = minutes %60;
		minutes = minutes - minutesExcess;
		var hours = minutes/60;
		if(hours <=23){
			hp = (hours > 1) ? 's' : '';

			if(minutesExcess > 0){
				mp = (minutesExcess > 1) ? 's' : '';
				return hours + " hour" + hp + ", " + minutesExcess + " minute" + mp + " ago";
			}else{
				return hours + " hour" + hp + " ago";
			}
		}

		var hoursExcess = hours % 24;
		hours = hours - hoursExcess;
		var days = hours/24;
		var dp = (days > 1) ? 's' : '';
		if(hoursExcess > 0){
			hp = (hoursExcess > 1) ? 's' : '';
			return days + " day" + dp + ", "  + hoursExcess + " hour" + hp + " ago";
		}else{
			return days + " day" + dp + " ago";
		}
	}

	function getTab(id) {
		for(var i=0; i<tabs.length;i++)
			if(tabs[i].id == id) return tabs[i];
		return null;
	}

	return {
		init: function(ulid, btnRss) {

			btnList = $('btnList');
			btnListAttr = $$('li#btnList a')[0];
			btnExpand = $('btnExpand');
			btnExpandAttr = $$('li#btnExpand a')[0];

			settings.view = (settings.view) ? settings.view : 'media';
			view = settings.view;
			settings.size = (settings.size) ? settings.size : 'collapse';
			size = settings.size;
			settings.store();

			this.tabids = (btnRss) ? $(ulid).childElements().without(btnExpand, btnList, btnRss).pluck('id').invoke('substring','3') : $(ulid).childElements().without(btnExpand, btnList).pluck('id').invoke('substring','3');
			this.tabids.each(function(i) {
				var url = $('tab'+i).down('a').href;
				tabs.push({id:i,url:url,type:false,loaded:false});
				$('tab'+i).down('a').href = 'javascript:void(0);';
				var tab = tabs[tabs.length - 1];
				$('tab'+i).observe('click',function(){WWE.Touts.NewsTout.select(tab)}.bind(tab));
			}.bind(tabs));

			this.loadSettings();
			this.select((typeof(settings.tab) != 'undefined') ? getTab(settings.tab) : tabs[0]);
		},
		loadSettings: function() {
			var viewremove = ['news','media'].without(view)[0];
			var sizeaddclass = size;
			tabs.each(function(i) {
				var div = $('div' + i.id);
				var ul = $$('#div' + i.id + ' ul')[0];

				if (size == 'collapse')
					sizeaddclass = (i.type == 'media' && view=='media') ? 'collapsemedia' : 'collapsenews';

				if (i.count > 12)
					div.className = sizeaddclass;

				if (i.type == 'media')
					ul.className = view;

			});
			this.toggleCollapseExpandButton();
			this.toggleListGridButton();
		},
		loadTab: function(tab) {
			WWE.Touts.NewsTout.showTab(tab);
			btnList.hide();
			btnExpand.hide();
			if(typeof(loading[tab.id]) == 'undefined') {
				loading[tab.id] = new Ajax.Request(tab.url,{
					method: 'get',
					onSuccess: function(transport) {
						tab.loaded = true;
						WWE.Touts.NewsTout.toggleLoader(tab);
						$('div'+tab.id).update(transport.responseText);
						tab.count = $$('#div' + tab.id + ' ul li').length;
						tab.type = $$('#div' + tab.id + ' ul').pluck('className');
						WWE.Touts.NewsTout.loadSettings();
						WWE.Touts.NewsTout.fixDates(tab);
						WWE.Touts.NewsTout.fixLinks(tab);
						WWE.Touts.NewsTout.hideShowListGridButton(tab.type);
						WWE.Touts.NewsTout.hideShowCollapseExpandButton(tab.count);
					}.bind(tab)
				});
			}
		},
		showTab: function(tab) {
			WWE.Touts.NewsTout.toggleLoader(tab);
			$('div' + tab.id).show();
			$('tab' + tab.id).removeClassName('unselected').addClassName('selected');
			WWE.Touts.NewsTout.hideShowListGridButton(tab.type);
			WWE.Touts.NewsTout.hideShowCollapseExpandButton(tab.count);
			settings.tab = tab.id;
			settings.store();
		},
		select: function(tab) {
			tabs.each(function(i) {
				if (i.id != tab.id) {
					$('div' + i.id).hide();
					$('tab' + i.id).removeClassName('selected').addClassName('unselected');
				} else {
					if(!i.loaded) {
						WWE.Touts.NewsTout.loadTab(tab);
					} else {
						WWE.Touts.NewsTout.showTab(tab);
					}
				}
			}.bind(tab));
		},
		toggle: function(action) {
			if (action == 'size') {
				size = ['collapse','expand'].without(settings.size)[0];
				settings.size = size;
				settings.store();
			}

			if (action == 'view') {
				view = ['media','news'].without(settings.view)[0];
				settings.view = view;
				settings.store;
			}
			this.loadSettings();
		},
		toggleListGridButton: function() {
			if(view == 'news') {
				btnList.className = 'thumb';
				btnListAttr.writeAttribute('title','Grid View');
			} else {
				btnList.className = 'list';
				btnListAttr.writeAttribute('title','List View');
			}
		},
		toggleCollapseExpandButton: function() {
			if(size == 'collapse') {
				btnExpand.className = 'expand';
				btnExpandAttr.writeAttribute('title','View More');
			} else {
				btnExpand.className = 'collapse';
				btnExpandAttr.writeAttribute('title','View Less');
			}
		},
		toggleLoader: function(tab) {
			if(tab.loaded)
				$('newsToutContent').setStyle({backgroundImage:'none'});
			else
				$('newsToutContent').setStyle({background:'transparent url(/styles/v4/images/newstout/loader.gif) no-repeat 50% 50%'});
		},
		hideShowListGridButton: function(type) {
			(type == 'news') ? btnList.hide() : btnList.show();
		},
		hideShowCollapseExpandButton: function(count) {
			(count < 13) ? btnExpand.hide() : btnExpand.show();
		},
		fixDates: function(tab) {
			$$('#div'+tab.id + ' span.publishedDate').each(function(pubdate) {
				var inputDate = _createDate(pubdate.innerHTML);
				var difference = _getDifferenceFromNow(inputDate);
				pubdate.update(_getDifferenceText(difference));
			});
		},
		fixLinks: function(tab) {
			if(tab.type == "media") {
				$$('#div'+tab.id+' a').each(function(link) {
					if (link.pathname.contains('content/media/video')) {
						link.onclick = function () {
							wwevideoplayer(this.href);
							return false;
						};
					}
				});
			}
		}
	};
}();
