/* SpiffyMap navigation slider/splash page fader 16-Dec-2011 */
window.onload = init;

var headNav = null;
var browserHack = new Object;
var themeObj = null;

function init() {
  if (!document.getElementById) return;
  var ua = navigator.userAgent;
  if (ua.indexOf('IE') > 0) {
    var rest = navigator.appVersion.substring(navigator.appVersion.indexOf('MSIE') + 5);
    var version = rest.substring(0, rest.indexOf('.'));
    if (version == 8)
      browserHack.ie8 = 1;
    else if (version < 8)
      browserHack.oldIE = 1;
  }

  headNav = document.getElementById("headNav");

  if (browserHack.oldIE)
      headNav.style.width = "422px";

  headNav.activeLI = 0;
  headNav.currentLI = 0;
  headNav.interval = null;
  headNav.slideStep = 6;

  lis = headNav.getElementsByTagName("li");
  headNav.lis = lis;
    
  for (i=0; i < lis.length; i++) {
    if (browserHack.oldIE)
      lis[i].style.display = 'inline';

    lis[i].lid = i;

    lis[i].onmouseover = function() {
      initSlide(this.lid);
    }

    if (lis[i].className == 'current') {
      headNav.currentLI = i;
      headNav.activeLI = i;
    }
  }

  headNav.currentPos = getOffset();
  setSlider();
  headNav.onmouseout = function() { initSlide(headNav.currentLI); }

  themeObj = document.getElementById('themes');
  if (themeObj) {
    themeObj.intro = document.getElementById('intro');
    if (window.location.href.match('#$') || (browserHack.oldIE))
      showThemes();
    else {
      themeObj.introStage = 0;
      fadeInIntro();
    }
  }
}

function setSlider() {
  headNav.style.backgroundPosition = headNav.currentPos + "px 21px";
}

function initSlide(objIndex) {
  if (objIndex == headNav.activeLI) return;
  clearInterval(headNav.interval);
   
  headNav.activeLI = objIndex;
  destinationX = getOffset();
    
  intervalMethod = function() { doSlide(destinationX); }
  if (intervalMethod)
    headNav.interval = setInterval(intervalMethod, 10);
}

function getOffset() {
  li = headNav.lis[headNav.activeLI];
  return Math.floor(li.offsetLeft + (li.offsetWidth - 87)/2);
}

function doSlide(dest) {
  x = headNav.currentPos;
  if (x + headNav.slideStep < dest) {
    headNav.currentPos = x + headNav.slideStep;
  } else if (x - headNav.slideStep > dest) {
    headNav.currentPos = x - headNav.slideStep;
  } else  {
    headNav.currentPos = dest;
    clearInterval(headNav.interval);
    headNav.interval = null;
  }
  setSlider();
}

function showThemes() {
  themeObj.style.backgroundImage = 'url("gfx/themeIcons2.png")';
  themeObj.intro.style.display = 'none';
  for (i=0; i < themeObj.childNodes.length; i++) {
    if (themeObj.childNodes[i].className == 'theme')
      themeObj.childNodes[i].style.display='block';
  }
}

function fadeInIntro() {
  var start = 0;
  var delta = 1;
  var speed = 20;

  var stage = themeObj.introStage;
  switch (stage) {
  case 0:
    themeObj.style.backgroundImage = '';
    setIntroSrc(1);
    speed = 10;
    break;
  case 1: case 2: case 3:
    themeObj.style.backgroundImage = 'url("gfx/introLogo' + stage + '.png")';
    setIntroSrc(stage+1);
    break;
  case 4:
    themeObj.style.backgroundImage = 'url("gfx/introLogo4.png")';
    break;
  case 5:
    themeObj.style.backgroundImage = '';
    delta = -1;
    start = 100;
    speed = 44;
    break;
  default:
    showThemes();
    return;
  }

  themeObj.intro.style.display = 'block';
  themeObj.introOpacity = start;
  themeObj.introDelta = delta;
  themeObj.fadeTimer = setInterval('doFade()', speed);
}

function setIntroSrc(stage) {
    if (browserHack.ie8)
      themeObj.intro.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(opacity=0)';
    else
      themeObj.intro.style.opacity = 0;
    themeObj.intro.src = 'gfx/introLogo' + stage + '.png';
}

function doFade() {
  var opacity = themeObj.introOpacity += themeObj.introDelta;
  if ((opacity > 0) && (opacity < 101)) {
    if (browserHack.ie8)
      themeObj.intro.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(opacity=' + opacity + ')';
    else
      themeObj.intro.style.opacity = (opacity / 100);
    themeObj.introOpacity = opacity;
  } else {
    themeObj.intro.style.filter = null;
    clearInterval(themeObj.fadeTimer);
    ++themeObj.introStage;
    fadeInIntro();
  }
}

