﻿
/* Add a slide to a slider */
function AddSlideToSlider( SlideIndex ) 
{
  var slider = document.getElementById( SliderData.id );
  if ( !slider )
    return;
  
  slide = document.createElement( 'div' );
  img = document.createElement( 'img' );
  img.width = SliderData.slides[SlideIndex].width;
  img.height = SliderData.slides[SlideIndex].height;
  img.onload = function () { SliderData.slides[SlideIndex].loaded = true; AddNextSlideToSlider(); };
  slide.appendChild( img );
  p = document.createElement( 'p' );
  link = document.createElement( 'a' );
  link.href = SliderData.slides[SlideIndex].href;
  text = document.createTextNode( SliderData.slides[SlideIndex].text );
  link.appendChild( text );
  p.appendChild( link );
  slide.appendChild( p );
  slide.style.visibility = "hidden";
  slider.appendChild( slide );
  img.src = SliderData.slides[SlideIndex].src;
}

/* Add the next missing slide to the slider */
function AddNextSlideToSlider() 
{
  for( var index in SliderData.slides )
  {
    if ( SliderData.slides[index].loaded == false )
    {
      AddSlideToSlider( index );
      return;
    }
  }
}

/* Continue sliding from one slide to another */
function ContinueSliding( FromIndex, ToIndex, Step ) 
{
  var slider = document.getElementById( SliderData.id );
  if ( !slider )
    return;
  
  var From = slider.childNodes[FromIndex+1];
  var To = slider.childNodes[ToIndex+1];
  
  if ( From && To )
  {
    /* Move */
    left = parseInt(To.style.left);
    
    if ( (Step > 0) && (parseInt(To.style.left) > Step) ) 
    { 
      To.style.left = ( parseInt(To.style.left) - Step ) + "px";
      From.style.left = ( parseInt(From.style.left) - Step ) + "px";
      window.setTimeout( "ContinueSliding("+FromIndex+","+ToIndex+","+Step+")", 50 );
      return;
    }
    if ( (Step < 0) && (parseInt(To.style.left) < Step) ) 
    { 
      To.style.left = ( parseInt(To.style.left) - Step ) + "px";
      From.style.left = ( parseInt(From.style.left) - Step ) + "px";
      window.setTimeout( "ContinueSliding("+FromIndex+","+ToIndex+","+Step+")", 50 );
      return;
    }

    /* Done */
    From.style.visibility = "hidden";
    To.style.left = "0";
    SliderData.currentIndex = ToIndex;
    SliderData.sliding = false;
    /* display buttons div.a */
    slider.childNodes[0].childNodes[0].className = "slideArrow";
    slider.childNodes[0].childNodes[1].className = "slideArrow";
  }
}

/* Start sliding from one slide to another */
function StartSliding( FromIndex, ToIndex, Direction ) 
{
  if ( SliderData.sliding )
    return;

  var slider = document.getElementById( SliderData.id );
  if ( !slider )
    return;
  
  var From = slider.childNodes[FromIndex+1];
  var To = slider.childNodes[ToIndex+1];
  
  if ( From && To )
  {
    /* Start */
    SliderData.sliding = true;
    
    /* hide buttons div.a */
    slider.childNodes[0].childNodes[0].className = "";
    slider.childNodes[0].childNodes[1].className = "";
    
    if ( Direction == 1 )
    {
      step = 20;
      distance = From.offsetWidth;
      From.style.left = "0px";
      To.style.left = distance.toString() + "px";
    }
    else
    {
      step = -20;
      distance = -To.offsetWidth;
      From.style.left = "0px";
      To.style.left = distance.toString() + "px";
    }

    To.style.visibility = "visible";
    ContinueSliding( FromIndex, ToIndex, step );
  }
}

/* Slide one slider */
function SlideSlider( Direction ) 
{
  /* Find start and target index */
  slideFrom = SliderData.currentIndex;
  slideTo = slideFrom + Direction;
  
  /* Check, if outside of range */
  if ( slideTo >= SliderData.slides.length )
  {
    // Roll over
    slideTo = 0;
  }
  
  /* Check, if outside of range */
  if ( slideTo < 0 )
  {
    // Roll over
    slideTo = SliderData.slides.length - 1;
  }
  
  // Check if already loaded
  while ( !SliderData.slides[slideTo].loaded ) 
  {
    slideTo = slideTo - 1;
  }  
  
  // If not forward, roll over
  if ( (Direction == 1) && (slideTo <= slideFrom) )
    slideTo = 0;
  
  if ( slideTo != slideFrom )
    StartSliding( slideFrom, slideTo, Direction );
}

function ArrowRightClick()
{
  SliderData.autoSlideIntervall = 0;
  SlideSlider( 1 );
}

function ArrowLeftClick()
{
  SliderData.autoSlideIntervall = 0;
  SlideSlider( -1 );
}

/* Slide slider automatically */
function AutoSlideSlider() 
{
  if ( SliderData.autoSlideIntervall <= 0 )
    return;

  if ( !SliderData.blocked )
    SlideSlider( 1 );
    
  window.setTimeout( "AutoSlideSlider()", SliderData.autoSlideIntervall );
}

function ArrowLoaded()
{
  var slider = document.getElementById( SliderData.id );
  if ( slider )
  {
    width = slider.offsetWidth;
    height = slider.offsetHeight;
    slider.childNodes[0].childNodes[0].style.top = (height / 2) + "px";
    slider.childNodes[0].childNodes[0].style.left = "0px";
    slider.childNodes[0].childNodes[1].style.top = (height / 2) + "px";
    slider.childNodes[0].childNodes[1].style.left = width - slider.childNodes[0].childNodes[1].offsetWidth + "px";
  }
}

function SliderMouseOver()
{
  SliderData.blocked = true;
}

function SliderMouseOut()
{
  SliderData.blocked = false;
}

function SliderMouseClick()
{
  SliderData.autoSlideIntervall = 0;
}

/* Start adding slides to all SliderData and start timer */
function StartSlider() 
{
  var slider = document.getElementById( SliderData.id );
  if ( slider )
  {
    width = slider.childNodes[0].offsetWidth;
    height = slider.childNodes[0].offsetHeight;
    slider.style.height = height + "px";
    slider.style.width = width + "px";
    slider.style.overflowX = "hidden";
    slider.onmouseover = SliderMouseOver;
    slider.onmouseout = SliderMouseOut;
    slider.onclick = SliderMouseClick;
    
    /* Create slider buttons */
    buttonDiv = document.createElement( 'div' );
    slider.insertBefore( buttonDiv, slider.firstChild );
    buttonDiv.innerHTML = "<a href='Javascript:ArrowLeftClick()'  onfocus='this.blur()' class='slideArrow'><img src='/img/arrow-left.png' onload='ArrowLoaded()'><\/a><a href='Javascript:ArrowRightClick()' onfocus='this.blur()' class='slideArrow'><img src='/img/arrow-right.png' onload='ArrowLoaded()'><\/a>";
    buttonDiv.style.visibility = "hidden";
    buttonDiv.style.zIndex = 2;
  }  
    
  /* Add missing slides */  
  AddNextSlideToSlider();
  
  /* Start timer to slide automatically */
  if ( SliderData.autoSlideIntervall > 0 )
    window.setTimeout( "AutoSlideSlider()", SliderData.autoSlideIntervall );
} 


