/* ################################################################# */
/*                                                                   */
/*  TITLE:        NBC_SLIDESHOW.JS                                   */ 
/*  VERSION:      1.13                                           */
/*  LAST UPDATED: 2010-08-25                                         */
/*  LAST UPDATED BY:  John Kamoosi                                  */
/*  @release 2010-08-26 kamoosi                                       */
/*                                                                   */
/*  NAMESPACE: SS                                                    */
/*                                                                   */
/*  PUBLIC FUNCTIONS:                                                */
/*    initializeSlideshow()                                          */
/*    handleNavPrevClick()                                           */
/*    handleNavNextClick                                             */
/*    handlePrevThumbSetClick                                        */
/*    handleNextSetClick                                             */
/*    handleThumbClick                                               */
/*    autoAdvanceSlide()                                             */
/*    replaySlideshow()                                              */
/*    resetInterval()                                                */
/*    startAutoplay()                                                */
/*    toggleAutoplay()                                               */
/*    killInterval()                                                 */
/*    togglePrevButtonState()                                        */
/*                                                                   */
/*  PRIVATE FUNCTIONS:                                               */
/*    setupButtons()                                                 */
/*    updateSlide()                                                  */
/*    doScroll()                                                     */
/*    checkThumbNavStatus()                                          */
/*    manageSlideImages()                                            */
/*    showFinalSlide()                                               */
/*    restartAutoplay()                                              */
/*    stopAutoplay()                                                 */
/*    nextUp()                                                       */
/*    nssCountDown()                                                 */
/*    nssStopCountDown()                                             */
/*                                                                   */
/*  PREREQUISTES:                                                    */
/*    U.$()                                                          */
/*    U.getElementsByClassName()                                     */
/*    U.toggleClass()                                                */
/*    U.addEvent()                                                   */
/*    U.preloadImages()                                              */
/*    rf.AdFrameRefresher()                                          */
/*                                                                   */
/* ADDED JS FOR ADS BELOW - BEGINS LINE 476 ALICE CHUANG  4/26/21010 */
/* ################################################################# */

(function() {

if(!window.SS) {
  window['SS'] = {};
}
else {
  return false;
}

var NUM_VISIBLE_THUMBS   = 3;      // the number of thumbs visible in the filmstrip scroll window
var INTERVAL_DURATION    = 20000;  // the delay in ms before the autoplay begins when autoplay is set to begin automatically
var INTERVAL_DURATION_2  = 9000;   // the delay in ms between each successive autoplay advance

  // thumbs constructor; defined in script in nbc_slideshow_resize
var thumbs = new Array();
window['SS']['thumbs'] = thumbs;

var numSlides;
var currentSlideIdx;
var firstVisibleThumbIdx;
var numSlidesDisplayed;
var arrLoadedSlideImages;
var playing;
var timerAP;
var nextSlideIdx;
var finalSlideActive;
var stoppedAtEnd;
var nextCountDown;
var adCount;
var modVal;

function initializeSlideshow() {
    //G.outputDebug2("initializeSlideshow");
  thumbs = U.getElementsByClassName("ssThumb","a",U.$("ssThumbs"));
  numSlides = thumbs.length;
  currentSlideIdx = firstVisibleThumbIdx = numSlidesDisplayed = 1;
  arrLoadedSlideImages = new Array(numSlides);
  setupButtons();
  playing          = false;
  finalSlideActive = false;
  stoppedAtEnd     = false;
  nextCountDown    = false;
   if(U.$("apPlayPauseButton").className == "playing") {
    playing = true;
  }
  doScroll();
    //G.outputDebug2("initializeSlideshow; playing: " + playing);
  if(playing) {
    timerAP = setInterval("SS.startAutoplay()", INTERVAL_DURATION);
  } 
}
window['SS']['initializeSlideshow'] = initializeSlideshow;

function setupButtons() {
    // This must be external to any class (none here) and repeated after every user interaction
    // because FF misindexes anchors in the DOM tree when links are added and removed in captions.
    // We us jquery for simplicity because IE uses a non-standard event model.
    // It is safe to remove event listeners even if the event listener has not yet been associated
    //G.outputDebug2("setupButtons");
    // setup a simple prev click
  $('#ssNavPrevLink').unbind('click', SS.handleNavPrevClick);
  $('#ssNavPrevLink').bind('click', SS.handleNavPrevClick);
    // setup a simple next click
  $('#ssNavNextLink').unbind('click', SS.handleNavNextClick);
  $('#ssNavNextLink').bind('click', SS.handleNavNextClick);
    // setup all set prev clicks
  $('#ssPrevThumbSetLink').unbind('click', SS.handlePrevThumbSetClick);
  $('#ssPrevThumbSetLink').bind('click', SS.handlePrevThumbSetClick);
    // setup all set next clicks
  $('#ssNextThumbSetLink').unbind('click', SS.handleNextThumbSetClick);
  $('#ssNextThumbSetLink').bind('click', SS.handleNextThumbSetClick);
    // setup all thumb clicks
  $('#ssThumbs a').each(function() {
    $(this).unbind('click', SS.handleThumbClick);
    $(this).bind('click', SS.handleThumbClick);
  });
}

  // handle a simple prev click
function handleNavPrevClick(e) {
    //G.outputDebug2("handleNavPrevClick");
  currentSlideIdx == 1 ? nextSlideIdx = numSlides : nextSlideIdx = currentSlideIdx - 1;
  if(playing) {
    resetInterval();
  }
  updateSlideOnClick(true);
  return false;
}
window['SS']['handleNavPrevClick'] = handleNavPrevClick;
  
  // handle a simple next click
function handleNavNextClick(e) {
    //G.outputDebug2("handleNavNextClick");
  if(currentSlideIdx == numSlides) {
    showFinalSlide();
  }
  else {
    if(playing) {
      resetInterval();
    }
    nextSlideIdx = currentSlideIdx + 1;
    updateSlideOnClick(true);
  }
  return false;
}
window['SS']['handleNavNextClick'] = handleNavNextClick;

  // handle set prev
function handlePrevThumbSetClick(e) {
    //G.outputDebug2("handlePrevThumbSetClick");
  if(firstVisibleThumbIdx > NUM_VISIBLE_THUMBS) {
    firstVisibleThumbIdx -= NUM_VISIBLE_THUMBS;
  }
  else {
    firstVisibleThumbIdx = 1;
  }
  if(playing) {
    resetInterval();
  }
  doScroll();
  return false;
}
window['SS']['handlePrevThumbSetClick'] = handlePrevThumbSetClick;

  // handle set next
function handleNextThumbSetClick(e) {
    //G.outputDebug2("handleNextThumbSetClick");
  if(firstVisibleThumbIdx + NUM_VISIBLE_THUMBS < numSlides - NUM_VISIBLE_THUMBS + 1) {
    firstVisibleThumbIdx += NUM_VISIBLE_THUMBS;
  }
  else {
    firstVisibleThumbIdx = numSlides - NUM_VISIBLE_THUMBS + 1;
  }
  if(playing) {
    resetInterval();
  }
  doScroll();
  return false;
}
window['SS']['handleNextThumbSetClick'] = handleNextThumbSetClick;

  // handle all thumb clicks
function handleThumbClick(e) {
    //G.outputDebug2("handleThumbClick");
    // get the slide number from the anchor's parent's id, which must be formatted like [sometext]_[someint]
  nextSlideIdx = parseInt(U.$(this).parentNode.getAttribute('id').split('_')[1]);
  if(finalSlideActive) {
    replaySlideshow(nextSlideIdx);
  }
  else {
    if(playing) {
      resetInterval();
    }
    updateSlideOnClick(true);
  }
  return false;
}
window['SS']['handleThumbClick'] = handleThumbClick;

function doScroll() {
    //G.outputDebug2("doScroll");
  $('#ssThumbSetMask').scrollTo($('#ssThumb_' + firstVisibleThumbIdx), 800, {axis:'x'});
  checkThumbNavStatus();
  manageSlideImages();
}

function updateSlide(adrefresh) {
    //G.outputDebug2("updateSlide");
  G.doPixelTracking(84, true);
  numSlidesDisplayed++;
  var currentNodeID = "ssThumb_" + currentSlideIdx;
  var nextNodeID    = "ssThumb_" + nextSlideIdx;
  U.toggleClass(currentNodeID, "selected");
  U.toggleClass(nextNodeID, "selected");
  U.$("ssSlide").style.cssText = "background-image:url(" + SS.thumbs[nextSlideIdx.toString()].fullImage + ");"; // we use this cssText method since setAttribute cannot be used for style in IE
  U.$("slideCredit").innerHTML = SS.thumbs[nextSlideIdx.toString()].credit;
  U.$("ssSlideCaption").innerHTML = SS.thumbs[nextSlideIdx.toString()].caption;
  U.$("slideCount").innerHTML = "Image " + nextSlideIdx + " of " + numSlides;
    // if we are leaving the first slide
  if(currentSlideIdx == 1) {
    togglePrevButtonState();
  }
  currentSlideIdx = nextSlideIdx;
  arrLoadedSlideImages[currentSlideIdx] = true;
    // if we are returning to the first slide
  if(currentSlideIdx == 1) {
    firstVisibleThumbIdx = 1;
    togglePrevButtonState();
  }
  else if(currentSlideIdx == numSlides) {
    firstVisibleThumbIdx = numSlides - NUM_VISIBLE_THUMBS + 1;
    
    
  }
  else {
    firstVisibleThumbIdx = (currentSlideIdx - Math.floor(NUM_VISIBLE_THUMBS/2));
  }
  doScroll();
    // refresh ads
  if (nbc.siteKey == "ami"){
	  adCount = 5;
	  modVal = 0;
  }
  else{
	  adCount = 2;
	  modVal = 1;
  }
  if(numSlidesDisplayed % adCount == modVal && adrefresh) {
    var rf = new NBC.Helpers();
    rf.AdFrameRefresher("#nbc_ad_970_66_iframe");
    rf.AdFrameRefresher("#nbcad_300x250_iframe");
    if(document.getElementById("nbcad_300x250_iframe_2")) {
     rf.AdFrameRefresher("#nbcad_300x250_iframe_2");
    }
  }
  setupButtons(); // this is necessary for FF only because of a weird internal FF bug encountered when a caption contains a link
}

function updateSlideOnClick(adrefresh) {
    //G.outputDebug2("updateSlide");
  G.doPixelTracking(51, true);
  numSlidesDisplayed++;
  var currentNodeID = "ssThumb_" + currentSlideIdx;
  var nextNodeID    = "ssThumb_" + nextSlideIdx;
  U.toggleClass(currentNodeID, "selected");
  U.toggleClass(nextNodeID, "selected");
  U.$("ssSlide").style.cssText = "background-image:url(" + SS.thumbs[nextSlideIdx.toString()].fullImage + ");"; // we use this cssText method since setAttribute cannot be used for style in IE
  U.$("slideCredit").innerHTML = SS.thumbs[nextSlideIdx.toString()].credit;
  U.$("ssSlideCaption").innerHTML = SS.thumbs[nextSlideIdx.toString()].caption;
  U.$("slideCount").innerHTML = "Image " + nextSlideIdx + " of " + numSlides;
    // if we are leaving the first slide
  if(currentSlideIdx == 1) {
    togglePrevButtonState();
  }
  currentSlideIdx = nextSlideIdx;
  arrLoadedSlideImages[currentSlideIdx] = true;
    // if we are returning to the first slide
  if(currentSlideIdx == 1) {
    firstVisibleThumbIdx = 1;
    togglePrevButtonState();
  }
  else if(currentSlideIdx == numSlides) {
    firstVisibleThumbIdx = numSlides - NUM_VISIBLE_THUMBS + 1;
    
    
  }
  else {
    firstVisibleThumbIdx = (currentSlideIdx - Math.floor(NUM_VISIBLE_THUMBS/2));
  }
  doScroll();
    // refresh ads
  if (nbc.siteKey == "ami"){
	  adCount = 5;
	  modVal = 0;
  }
  else{
	  adCount = 2;
	  modVal = 1;
  }
  if(numSlidesDisplayed % adCount == modVal && adrefresh) {
    var rf = new NBC.Helpers();
    rf.AdFrameRefresher("#nbc_ad_970_66_iframe");
    rf.AdFrameRefresher("#nbcad_300x250_iframe");
    if(document.getElementById("nbcad_300x250_iframe_2")) {
        rf.AdFrameRefresher("#nbcad_300x250_iframe_2");
       }
  }
  setupButtons(); // this is necessary for FF only because of a weird internal FF bug encountered when a caption contains a link
}

function checkThumbNavStatus() {
    //G.outputDebug2("checkThumbNavStatus");
  firstVisibleThumbIdx == 1
    ? U.$("ssPrevThumbSet").style.cssText = "display:none"
    : U.$("ssPrevThumbSet").style.cssText = "display:block";
  firstVisibleThumbIdx <= numSlides - NUM_VISIBLE_THUMBS
    ? U.$("ssNextThumbSet").style.cssText = "display:block"
    : U.$("ssNextThumbSet").style.cssText = "display:none";
}

function manageSlideImages() {
    //G.outputDebug2("manageSlideImages");
  var preloadImageIdx;
  var preloadImageUrl;
  for(i = firstVisibleThumbIdx; i < firstVisibleThumbIdx + NUM_VISIBLE_THUMBS; i++) {
    var temp1 = firstVisibleThumbIdx + NUM_VISIBLE_THUMBS;
    //G.outputDebug2("manageSlideImages: " + i + " < " + temp1);
    if(arrLoadedSlideImages[i] != true) {
      try {
        //G.outputDebug2("SS.thumbs.length: " + SS.thumbs.length);
        preloadImageUrl = SS.thumbs[i.toString()].fullImage;
        //G.outputDebug2("manageSlideImages: inside if; preloadImageUrl: " + preloadImageUrl);
        U.preloadImage(preloadImageUrl);
      }
      catch(err) {
      }
    }
  }
  //G.outputDebug2("leaving manageSlideImages");
  return true;
}

function autoAdvanceSlide() {
    //G.outputDebug2("autoAdvanceSlide; currentSlideIdx: " + currentSlideIdx + "; numSlides: " + numSlides);
  if(currentSlideIdx == numSlides) {
    showFinalSlide();
  }
  else {
    nextSlideIdx = currentSlideIdx + 1;
    updateSlide();
  }
  if (nbc.siteKey == "ami"){
	  adCount = 5;
	  modVal = 0;
  }
  else{
	  adCount = 2;
	  modVal = 1;
  }
  if(numSlidesDisplayed % adCount == modVal) {
    var rf = new NBC.Helpers();
    rf.AdFrameRefresher("#nbc_ad_970_66_iframe");
    rf.AdFrameRefresher("#nbcad_300x250_iframe");
    if(document.getElementById("nbcad_300x250_iframe_2")) {
        rf.AdFrameRefresher("#nbcad_300x250_iframe_2");
       }
  }
}
window['SS']['autoAdvanceSlide'] = autoAdvanceSlide;

function showFinalSlide() {
    //G.outputDebug2("showFinalSlide");
  if(playing) {
    stopAutoplay();
    stoppedAtEnd = true;
  }
  finalSlideActive = true;
  U.toggleClass("ssFinalSlide", "showIt");
  nextUp();
} 

  // add Next Up functionality
var nssCount = 21; // initial count down value in seconds

function nextUp() {
    //U.log("next up called");
    //U.log(suggNextUrl + " is next");
  $("#slideshowCountLayer").show("fast");
  nssTimer = setInterval(nssCountDown, 1000);
  nextCountDown = true;
}
 
function nssCountDown() {
    U.log("Next slideshow count down called " + nssCount + " seconds remain");
  if ( nssCount != 0 ) {
   nssCount = nssCount - 1;
     U.log("countdown : " + nssCount + " seconds remain");
   document.getElementById("container").innerHTML = nssCount;
     U.log("container updated to : " + nssCount);
   }
  else {
   U.log("load new page - count zero!");
   subsrURL = suggNextUrl;
   var postURL = subsrURL + "?ssAuto=true";
   document.getElementById("nssLanguage").innerHTML = "is loading";
     clearInterval(nssTimer);
     nssCount = 21;
     U.log("next url is loading... " + subsrURL);
     U.createCookie("finalSlide", "true", 365);
     window.location = subsrURL + "?ssAuto=true";
  }  
    // if anything in ssUtils is clicked, reset the timer
  $("#ssUtils").click(function () {  //stop timer/reset if link is clicked during countdown
    if(nextCountDown){
      nssCount = 31; 
    }
  });
}

function nssStopCountDown() {
  clearInterval(nssTimer);
  $("#slideshowCountLayer").hide("fast");
  nssCount = 21;
  nextCountDown = false;
}
window['SS']['nssStopCountDown'] = nssStopCountDown;

function replaySlideshow(p_nextSlideIdx) {
    //G.outputDebug2("replaySlideshow");
  if(stoppedAtEnd) {
    restartAutoplay();
  }
  finalSlideActive = false;
  if(p_nextSlideIdx) {
    nextSlideIdx = p_nextSlideIdx;
  }
  else {
    nextSlideIdx = 1;
  }
  updateSlide();
  U.toggleClass("ssFinalSlide", "showIt");
  nssStopCountDown();
  nextCountDown = false;
  
}
window['SS']['replaySlideshow'] = replaySlideshow;

function resetInterval() {
    //G.outputDebug2("resetInterval");
  clearInterval(timerAP);
  timerAP = setInterval("SS.autoAdvanceSlide()", INTERVAL_DURATION_2);
  playing = true;
}
window['SS']['resetInterval'] = resetInterval;

function startAutoplay() {
    //G.outputDebug2("startAutoplay");
  autoAdvanceSlide();
  resetInterval();
}
window['SS']['startAutoplay'] = startAutoplay;

function restartAutoplay() {
    //G.outputDebug2("restartAutoplay");
  resetInterval();
  U.toggleClass("apPlayPauseButton", "playing");
}

function toggleAutoplay() {
    //G.outputDebug2("toggleAutoplay");
  if(playing) {
      //G.outputDebug2("playing");
    stopAutoplay();
  }
  else {
      //G.outputDebug2("not playing; start autoplay");
    startAutoplay();
    U.toggleClass("apPlayPauseButton", "playing");
  }
}
window['SS']['toggleAutoplay'] = toggleAutoplay;

function stopAutoplay() {
    //G.outputDebug2("stopAutoPlay");
  killInterval(timerAP);
  playing = false;
  U.toggleClass("apPlayPauseButton", "playing");
}

function killInterval(timer) {
    //G.outputDebug2("killInterval");
  clearInterval(timer);
  clearInterval(timerAP);
  timer = null;
}
window['SS']['killInterval'] = killInterval;

function togglePrevButtonState() {
    //G.outputDebug2("togglePrevButtonState");
  U.toggleClass("ssNavPrev", "inactive");
}
window['SS']['togglePrevButtonState'] = togglePrevButtonState;

})();

  // nbc_gallery sets thisIsAGalleryPage.  If true, create Slideshow upon document.ready
if(thisIsAGalleryPage) {
  $(document).ready(initGalleryPage);
}

var showcaseAdDuration=5;
var showcaseAdInterval=0;
function initGalleryPage(){
	showcaseAdInterval=setInterval("showcaseAdCountdown()", 1100);
}

function showcaseAdCountdown(){
  if(showcaseAdDuration >= 1){
    showcaseAdDuration--;
    document.getElementById('showcaseAdText').innerHTML="Please wait. Your gallery will be ready in " + showcaseAdDuration + " seconds.";
  }else{
    showcaseAdClose();
  }
}

function showcaseAdClose(){
    clearInterval(showcaseAdInterval);
    document.getElementById('showcaseContainer').style.visibility="visible";
    $('#showcaseAd').animate({
      opacity: 0
      }, 650, function() {
      document.getElementById('showcaseAd').style.display="none";
      document.getElementById('ad300-250').style.display="block";
      if(document.getElementById('ad300-250-2')) {
    	  document.getElementById('ad300-250-2').style.display="block";
      }
      document.getElementById('showcaseAdContent').innerHTML=" ";
      $(document).ready(SS.initializeSlideshow);
      $("#processingMood").hide();
    });
    
}
