﻿// Copyright 2007, Pointe Blank Solutions. Developer: Mike Kiska. Created: 8/2/2007.

// Requires ControlFader.js

function PhotoGalleryRotator( id, captionID, imageContainerID )
{
  // Fields
  this.PlayOnLoad = true;
  var NoPhotosMessage = "There are no photos in this gallery.";
  
  var PreviousID = null;
  var NextID = null;
  var PlayID = null;
  this.SetPlayID = function( id ) { PlayID = id; };
  
  var FadeTime = 700;
  this.SetFadeTime = function( ms ) { FadeTime = time; };
  var DisplayTime = 3000;
  this.SetDisplayTime = function( ms ) { DisplayTime = ms; };
  var BackgroundColor = '#FFFFFF';
  this.SetBackgroundColor = function( color ) { BackgroundColor = color; };
  
  var ImageURLTemplate = null;
  this.SetImageURLTemplate = function( template ) { ImageURLTemplate = template; };
  var images = new Array();
  
  var selectedIndex = -1;
  
  var playInterval = null;

  var controlFader = new ControlFader();
  this.ControlFader = controlFader;
      
  // Initialize
  var init = function()
  {
    SetupNavigationControls();
  
    if ( images.length <= 1 )
    {
      if ( images.length == 1 )
        SwitchImage( 0 );
      else
      {
        var caption = document.getElementById(captionID);
        if ( caption == null )
          return;
        caption.innerHTML = NoPhotosMessage;        
      }
        
      if ( PreviousID != null )
        document.getElementById(PreviousID).style.display = 'none';
      if ( NextID != null )
        document.getElementById(NextID).style.display = 'none';
      if ( PlayID != null )
        document.getElementById(PlayID).style.display = 'none';
    }
    else
    {
      SwitchImage( 0 );
      document.getElementById(PlayID).innerHTML = 'Pause';
      setTimeout( id + '.InitPlay();', DisplayTime );
    }
  };
  if( window.attachEvent )  
    window.attachEvent( 'onload', init );
  else
    window.addEventListener( 'load', init, false );

  this.SetPreviousID = function( id )
  {
    PreviousID = id;
  };
  this.SetNextID = function( id )
  {
    NextID = id;
  };
  
  // Methods
  this.AddPhoto = function( url, caption )
  {
    var imgContainer = document.getElementById(imageContainerID);
    if ( imgContainer == null )
      return;
      
    var newImg = document.createElement('img');
    newImg.style.display = 'none';

    if ( ImageURLTemplate != null )    
      newImg.src = ImageURLTemplate + url;
    else
      newImg.src = url;
      
    imgContainer.appendChild(newImg);
  
    images.push( new Array(newImg, caption) );
  };
  
  this.SetNoPhotosMessage = function( msg )
  {
    NoPhotosMessage = msg;
  };
  
  var ShowImage = function( index )
  {
    selectedIndex = index;
    controlFader.Fade( imageContainerID, 100, 0, FadeTime, 15, BackgroundColor );
  };

  var FadeFinished = function( sender, arg )
  {
    if( arg <= 0 )
    {
      SwitchImage(selectedIndex);
      setTimeout( id + '.ControlFader.Fade(\'' + imageContainerID + '\', 0, 100, ' + FadeTime + ', 15, null);', 220 );
    }
    else if( arg >= 100 )
    {
      if ( document.getElementById(PlayID).innerHTML == "Pause" )
        setTimeout( id + '.ShowNextImage();', DisplayTime );
    }
  };
  controlFader.FadeComplete.AddHandler( FadeFinished );

  var SwitchImage = function( index )
  {
    for( var x = 0; x < images.length; x++ )
      images[x][0].style.display = 'none';
    images[index][0].style.display = 'inline';
    
    document.getElementById( captionID ).innerHTML = GetCaption(index);    
    
    selectedIndex = index;
  };
   
  var GetCaption = function( index )
  {
    return images[index][1];
  };
  this.GetCaption = GetCaption;
  
  var ShowNextImage = function( sender )
  {
    if ( sender != null ) // link click
    {
      Stop( sender );

      selectedIndex++;
      if ( selectedIndex >= images.length )
        selectedIndex = 0;
    
      ShowImage( selectedIndex );
    }
    else if ( document.getElementById( PlayID ).innerHTML == "Pause" )
    { // auto rotate
      selectedIndex++;
      if ( selectedIndex >= images.length )
        selectedIndex = 0;
    
      ShowImage( selectedIndex );
    }
  };
  this.ShowNextImage = ShowNextImage;
  
  var ShowPreviousImage = function( sender )
  {
    if ( sender != null ) // link click
    {
      Stop( sender );

      selectedIndex--;
      if ( selectedIndex < 0 )
        selectedIndex = images.length - 1;
        
      ShowImage( selectedIndex );
    }
    else if ( document.getElementById( PlayID ).innerHTML == "Pause" )
    { // auto rotate
      selectedIndex--;
      if ( selectedIndex < 0 )
        selectedIndex = images.length - 1;
        
      ShowImage( selectedIndex );
    }
  };
  this.ShowPreviousImage = ShowPreviousImage;
   
  var PlayClick = function( sender )
  {
    var playButton = document.getElementById( PlayID );
  
    if ( playButton.innerHTML == "Play" )
    {
      playButton.innerHTML = "Pause";
      ShowNextImage();
    }
    else if ( playButton.innerHTML == "Pause" )
      Stop( sender );
  };
  this.PlayClick = PlayClick;
  
  this.InitPlay = function()
  {
    var playButton = document.getElementById( PlayID );
  
    if ( playButton.innerHTML == "Pause" )
    {
      playButton.innerHTML = "Play";
      this.PlayClick();
    }
  };
  
  var Stop = function( sender )
  {
    document.getElementById( PlayID ).innerHTML = "Play";
  };
  
  var SetupNavigationControls = function()
  {
    if ( PreviousID != null )
    {
      var prev = document.getElementById( PreviousID );
      if ( prev == null )
        return;
      
      if ( prev.attachEvent )
        prev.attachEvent( 'onclick', ShowPreviousImage );
      else
        prev.addEventListener( 'click', ShowPreviousImage, false );
    }

    if ( NextID != null )        
    {
      var next = document.getElementById( NextID );
      if ( next.attachEvent )
        next.attachEvent( 'onclick', ShowNextImage );
      else
        next.addEventListener( 'click', ShowNextImage, false );
    }
    
    if ( PlayID != null )
    {
      var play = document.getElementById( PlayID );
      if ( play.attachEvent )
        play.attachEvent( 'onclick', PlayClick );
      else
        play.addEventListener( 'click', PlayClick, false );
    }
  };
}