function set_opacity( elem, amount )
{
/*@cc_on
  @if (@_jscript)
  // This is For Internet Explorer Only
  //
    elem.style.filter = 'alpha(opacity=' + Math.round( amount * 100 ) + ")";
  @else*/
  // for all other browsers
  //
    elem.style.opacity = amount;
/*@end
  @*/
}

var cur_slide;
var cur_image;
var next_slide;
var next_image;
var slide_image = [];
var start_time;
var dwell_time = 250;
var fade_time = 2500;
var slide_time = 7000;
var mode;
var slide_timer = null;
var restart_flag = false;

function change_slide()
{
  var cur_time;
  if ( mode != change_slide )
  {
    start_time = (new Date()).getTime();
    cur_time = 0;
    mode = change_slide;
  }
  else
  {
    cur_time = (new Date()).getTime() - start_time;
  }
  if ( cur_time > fade_time )
  {
      cur_opacity = 1;
  }
  else
  {
    var cur_opacity = 0.5 - Math.cos(  Math.PI * cur_time / fade_time ) / 2.0;
  }
  set_opacity( slide_image[next_image], cur_opacity );
  set_opacity( slide_image[cur_image], 1 - cur_opacity );
  if ( cur_time > fade_time )
  {
    cur_image = next_image;
    cur_slide = next_slide;
    slide_image[0].title = slide_image[1].title = 
      slide_image[0].alt = slide_image[1].alt = slides[ cur_slide ].caption;
    document.getElementById( "slide_caption" ).innerHTML = slides[ cur_slide ].caption;
    slide_timer = setTimeout( move_slide, dwell_time );
  }
  else
  {
    slide_timer = setTimeout( change_slide, 25 );
  }
}

function move_slide()
{
  if ( restart_flag )
  {
    slide_timer = setTimeout( do_restart, 0 );
    return;
  }
  var cur_time;
  if ( mode != move_slide )
  {
    start_time = (new Date()).getTime();
    cur_time = 0;
    mode = move_slide;
    // set up next slide - giving plenty of time to load
    next_image = 1 - cur_image;
    next_slide = cur_slide + 1;
    if ( next_slide >= slides.length )
    {
      next_slide = 0;
    }
    slide_image[next_image].style.marginLeft = - slides[next_slide].start_x + 'px';
    slide_image[next_image].style.marginTop = - slides[next_slide].start_y + 'px';
    slide_image[next_image].src = slides[next_slide].src;
  }
  else
  {
    cur_time = (new Date()).getTime() - start_time;
  }
  var start_x = slides[ cur_slide ].start_x;
  var end_x = slides[ cur_slide ].end_x;      
  var start_y = slides[ cur_slide ].start_y;
  var end_y = slides[ cur_slide ].end_y;      
  if ( cur_time > slide_time )
  {
      cur_x = end_x;
      cur_y = end_y;
      slide_timer = setTimeout( change_slide, dwell_time );
  }
  else
  {
    var time_factor = 0.5 - Math.cos(  Math.PI * cur_time / slide_time ) / 2.0;
    var cur_x = Math.round( start_x + (end_x - start_x) * time_factor );
    var cur_y = Math.round( start_y + (end_y - start_y) * time_factor );
    slide_timer = setTimeout( move_slide, 25 );
  }
  slide_image[cur_image].style.marginLeft = -cur_x + 'px';
  slide_image[cur_image].style.marginTop = -cur_y + 'px';
}

function slideshow_restart( carousel )
{
  if ( carousel )
    slides = carousel

  if ( ! mode )
    do_restart()
  else
    restart_flag = true;
}

function do_restart()
{
  restart_flag = false;
  if ( slide_timer )
  {
    clearTimeout( slide_timer );
  }
  mode = null;
  next_slide = 0;
  next_image = 1 - cur_image;
  slide_image[next_image].style.marginLeft = - slides[next_slide].start_x + 'px';
  slide_image[next_image].style.marginTop = - slides[next_slide].start_y + 'px';
  slide_image[next_image].src = slides[next_slide].src;
  slide_timer = setTimeout( change_slide, 100 );
}
    
function slideshow_play( ev, carousel )
{
  if ( carousel )
    slides = carousel

  slide_image[0] = document.getElementById( 'slide_image0' );
  slide_image[1] = document.getElementById( 'slide_image1' );

  cur_slide = 0;
  cur_image = 0;

  slide_timer = setTimeout( move_slide, 2000 );
}
var current_proj = null;

function init_projpage()
{
  var root = document.getElementById( "text_frame" );
  var divs = root.getElementsByTagName( "div" );
  projects = [];
  var proj_num = 0;
  for ( var i = 0; i < divs.length; ++i )
  {
    if ( divs[i].className == 'project' )
    {
      projects[ proj_num ] = divs[i];
      if ( ! current_proj )
      {
        projects[proj_num].className = 'active_project';
        current_proj = projects[proj_num];
      }
      projects[proj_num].onmouseover = function()
      {
        if ( this.className != 'active_project' )
          this.className = 'hover_project';
      };
      projects[proj_num].onmouseout = function()
      {
        if ( this.className != 'active_project' )
          this.className = 'project';
      };
      projects[proj_num].onclick = function()
      {
        if ( this.className != 'active_project' )
        {
          current_proj.className = 'project';
          this.className = 'active_project';
          current_proj = this;
          for ( var pos = 0; pos < projects.length; ++pos )
          {
            if ( projects[pos] == this )
            {
              slideshow_restart(carousels[pos]);
              break;
            }
          }
        }
      };
      ++proj_num;
    }
  }
}

function revealSendingMessage()
{
  document.getElementById( "sendingMessage" ).innerHTML = " <em> (Your message is being sent - Please Wait...)</em>"
  return true;
}
