function getFlashMovie(movieName) {
    var isIE = navigator.appName.indexOf("Microsoft") != -1;
    return (isIE) ? window[movieName] : document[movieName];
}

// IE requires that this be a global variable
var slideshowswf;
// this might as well be global, too
var Slideshow;
var thumbcheck;

function load_slideshow(href, current_slide) {
  var df=loadJSONDoc(href);
  df.addCallback(function(json) {
    Slideshow=json;
    logDebug('in json callback');
    initialize_slideshow(current_slide);
  });
  df.addErrback(function(response) {
    logDebug('in json errback');
    logError(response.message + ' (' +
	     response.fileName + ':' +
	     response.lineNumber + ')');
  });
}

function initialize_slideshow(current_slide) {
  logDebug('in initialize_slideshow');
  // additional attributes we're adding
  Slideshow.current_slide=current_slide;
  Slideshow.timepoints = [];
  Slideshow.images = [];
  Slideshow.thumbs = [];
  setup_thumbs();
  setup_slides();
  setup_links();
  if (window.location.search.indexOf('noflash') == -1 && Slideshow.audio) {
    callLater(0.5, injectSWF);
  }
};


function setup_thumbs() {
  for (var i = 0; i < Slideshow.slides.length; i++) {
	var slide= Slideshow.slides[i];
    var thumb = new Image();
    thumb.src = slide.thumb || slide.image+'/150x97';
    Slideshow.thumbs.push(thumb);
  }
};


function setup_slides() {
  for (var i = 0; i < Slideshow.slides.length; i++) {
    var slide= Slideshow.slides[i];
    Slideshow.timepoints.push(slide.timepoint);
    var image = new Image();
    image.src = slide.image;
    Slideshow.images.push(image);
  }
};

function setup_links() {
  logDebug("in setup_links");
  connect('prevanchor', 'onclick', function(evt) {
    evt.preventDefault();
    prevSlide();
  });
  connect('nextanchor', 'onclick', function(evt) {
    evt.preventDefault();
    nextSlide();
  });
  logDebug("survived");
};

function prevSlide() {
  logDebug('in prevSlide');
  var c=Slideshow.current_slide;
  if (c > 0) {
    showSlide(c-1);
  }
}

function nextSlide() {
  logDebug('in nextSlide');
  var c=Slideshow.current_slide;
  if (c < Slideshow.slides.length-1) {
    showSlide(c+1);
  }
}

function injectSWF() {
  logDebug('in injectSWF');
  var query = [];
  if (Slideshow.audio) {
    query.push('file=' + encodeURIComponent(Slideshow.audio));
  }
  if (Slideshow.current_slide == 0) {
    query.push('autostart=true');
  }
  query.push('startSlide=' + Slideshow.current_slide);
  query.push('timepoints=' + Slideshow.timepoints.join(',') + ',' + Slideshow.duration);
  query.push('hoverHandler=hover');
  query.push('showSlideHandler=showSlide');
  query.push('logDebug=logDebug');
  var url = "/images/apps/slideshows/slideplayer.swf?" + query.join('&');
  slideshowswf = new SWFObject(url, 'slideshowswf', "640", "24", "8", "#FFFFFF");
  slideshowswf.write('slideshow-player');
};

function hover(slideNum, hoverPos) {
  //logDebug("in hover with slideNum ", slideNum, " hoverPos ", hoverPos);
  var hover = $('slideshow-hover');
  if (slideNum == -1) {
    hover.style.left = '-1000px';
    return;
  }
  var playerPos = elementPosition($('slideshow-player'));
  var thumbimg=Slideshow.thumbs[slideNum];
 logDebug('hoverspot is '+hoverPos+" player posx is "+playerPos.x);
  setElementPosition($('slideshow-hover'), {
    x: Math.max(0, playerPos.x + hoverPos - 135 - (thumbimg.width/2)),
    y: playerPos.y - 211
  });

  var thumbplace=$('slideshow-thumb');
  thumbplace.src = thumbimg.src;
  thumbplace.width=thumbimg.width;
  thumbplace.height=thumbimg.height;
};

function showSlide(slideNum) {
  logDebug('in showSlide');
  if (!Slideshow.images[slideNum]) {
    logDebug('returning');
    return;
  }
  var prevNum=Slideshow.current_slide;
  Slideshow.current_slide = slideNum;
  var imgs=$('slideshow').getElementsByTagName('img');

  for (var i = 0; i < Slideshow.slides.length; i++) {
    if (i != slideNum) {
      hideElement(imgs[i]);
    }
  }
  showElement(imgs[slideNum]);
  updateMarkup();
};

function _show(elem) {
  try {
   removeElementClass(elem, 'invisible');
  }  catch (e) {};
}

function _hide(elem) {
  try {
    addElementClass(elem, 'invisible');
  } catch (e) {};
}

function updateMarkup() {
  logDebug('in updateMarkup');
  var curidx=Slideshow.current_slide;
  var slide = Slideshow.slides[curidx];
  $('slideshow-num').innerHTML = (Slideshow.current_slide + 1);
  $('slideshow-total').innerHTML = Slideshow.slides.length;
  $('slideshow-photo-title').innerHTML = slide.title || '';
  $('slideshow-photo-description').innerHTML = slide.description || '';
  var credits= (slide.credits) ? 'Credit: ' + slide.credits : '';
  $('slideshow-photo-credit').innerHTML = credits;
  if (Slideshow.current_slide == 0) {
    logDebug("current slide is 0");
    _hide('prevanchor');
    _show('nextanchor');
  }  else if (Slideshow.current_slide == Slideshow.slides.length -1) {
    logDebug('current slide is last one');
    _show('prevanchor');
    _hide('nextanchor');
  } else {
    logDebug('current slide is in the middle');
    _show('prevanchor');
    _show('nextanchor');
  }
};


