/***
 * News Link Slider Javascript
 * REQUIRED: generic_timer.js 
 * REQUIRED: The news HTML container, see larcada_eng.html
 * REQUIRED: Page must include "news_link_slider" inside the HTML div
 * Total number of news links is stored in variable "total_news_links" 
 * Displays X news items in the slider at once  
 * After a user-defined interval, slides the current X links away and slides in the next X
 */

/** Initialization **/
// -780 = -750 (size of the news_slider div) - link_padding
var news_slider_timer = new Generic_Timer(0, -750, 3000, 50, 1000, Start_Show, Show_New_Links, Slide_Links, Hide_Old_Links);
var links_per_page = 3;
var first_link_currently_on_page = 0;
var next_first_link = 0;
var link_padding = 30;  // How much x-axis space between links
var link_width = 220;
var link_height = 165;

/* Activate slider if we have enough news links to require sliding */
if (total_news_links > links_per_page)
{
  news_slider_timer.go(0);
}
else if (total_news_links == 0)
{
  document.getElementById("news_slider").style.display = "none";
}
else
{
  /* Only enough links to fit on one page */
  Show_Hide_Links_Starting_At(0, true);  
  Position_Links(0, 3, 0);
}


/** Timer Callbacks **/

/* Start_Show: Show the first "links_per_page" links */
function Start_Show()
{
  Show_Hide_Links_Starting_At(0, true);
  Position_Links(0, 3, 0);
}

/* Show_New_Links: Happens when the viewing time is up and new links should slide in */
function Show_New_Links()
{
  next_first_link = first_link_currently_on_page + links_per_page;
  if (next_first_link >= total_news_links)
    next_first_link = 0;
  Show_Hide_Links_Starting_At(next_first_link, true); // Show the next links
}

/* Hide_Old_Links: Sliding is complete, hide the old set of links */
function Hide_Old_Links()
{
//  Position_Links(first_link_currently_on_page, links_per_page * 2, -750);
  Show_Hide_Links_Starting_At(first_link_currently_on_page, false);
  first_link_currently_on_page = next_first_link;
//  alert(first_link_currently_on_page);
}

/* Slide_Links */
function Slide_Links(how_far)
{
  Position_Links(first_link_currently_on_page, links_per_page * 2, how_far);
}

/**
 * Show_Hide_Links_Starting_At
 * Shows or hides "links_per_page" (or fewer, if not enough are available) links starting at index in the links list
 * @param visibility True for visible, False for cloaked 
 */
function Show_Hide_Links_Starting_At(index, visibility)
{
  //alert("show hide: " + index + ", " + visibility);
  var i, style_visibility, ele;
  if (visibility)
    style_visibility = "visible";
  else
    style_visibility = "hidden";
  
  for(i = index; i < (index + links_per_page); i++) {
    ele = document.getElementById("news_link_" + i);
    if (ele)
    {
      ele.style.visibility = style_visibility;
    }
  }
}

/**
 * Position_Links
 * Sets the x position of howmany links starting at index
 * The specified x is where the first link is positioned 
 */  
function Position_Links(index, howmany, x)
{
  var i, ele, num_affected, padding;
  num_affected = 0;
  i = index;
  if (howmany > total_news_links)
    howmany = total_news_links;
  while(num_affected < howmany)
  {
    if (i >= total_news_links)
    {
      /* Special case: Pad X position at the end of the links if we don't have clean multiples of links_per_page */
      padding = links_per_page - (total_news_links % links_per_page);
      padding = padding * (link_width + link_padding);
      x += padding;
      i = 0;
    }
    ele = document.getElementById("news_link_" + i);
    if (ele)
    {
      ele.style.left = x + "px";
      x += link_width + link_padding;
      num_affected++;
    }
    i++;    
  }
}
