/*
  Script to display news items
  (c) 2006-2007, Sam Sykes - Taurus Systems
  http://www.taurussystems.co.uk/
  Version: 1.1
*/

/*
  Change History
  07/09/11 - First release!
*/

// variables
var newsAreaHeight = 100;
var startPixel = 100;
var pixelMove = 2;
var topItem = 0;
var totalPixelHeight = 0;
var isPaused = false;
var secondsPause = 5;

// array for the news items
var newsItems = new Array();

// add new news items
function addNews(nTitle, nBody, nLink){

  // create a new news item
  var newsItem = new Object();
  
  // add the data
  newsItem.title = nTitle;
  newsItem.body = nBody;
  newsItem.link = nLink;
  newsItem.id = newsItems.length;
  
  // add to the array
  newsItems.push(newsItem);
  
}


// call to build everything
function makeNews(xHeight, xStart, xSpeed, xPause) {
	
  // set the window variables
  newsAreaHeight = xHeight;
  startPixel = xStart;
  secondsPause = xPause;
  pixelMove = xSpeed;

  // for tidy code!
  document.writeln();

  // loop through the items
  for (i=0; i<newsItems.length; i++) {
  
    // load the news item
    var newsItem = newsItems[i];
    
    // write the code
    document.write('<div id="news'+newsItem.id+'" class="newsItem" title="'+newsItem.title+'"');
    document.write(' onMouseOver="newsOver('+newsItem.id+');" onMouseOut="newsOut('+newsItem.id+');"');
		if (newsItem.link!="")
		  document.write('onClick="newsClick('+newsItem.id+');"');
		document.write('>');
    document.write(newsItem.body);
    document.writeln('</div>');
    
		// load the height data into the news item
    var newsDiv = getObj('news'+newsItem.id);
	  newsItem.div = newsDiv;
	  newsItem.style = newsItem.div.style;
		newsItem.style.visibility = "hidden";

  }
  
}

// resize the DIVs correctly
function startNews() {
	
  // loop through each of the DIVs to get their size and then move them
  for (i=0; i<newsItems.length; i++) {
    
    // load the news item
    var newsItem = newsItems[i];
		
		// show the DIV!
		newsItem.style.visibility = "inherit";
    
		// set the position of the DIV
    newsItem.height = newsItem.div.offsetHeight;
    newsItem.top = totalPixelHeight + startPixel;
		moveObjTo(newsItem.div,0,newsItem.top);
	
	  // total height for next news element
    totalPixelHeight += newsItem.height;
		
	}
	
	// go
	displayNews();
	
}

// loop through and move the news items
function displayNews(){
	
  // check to see if we should be moving or not
  if (isPaused) {
    setTimeout('displayNews();',25);
    return;
  }
  
  // set a break point
  var keepMoving = true;
  
  // loop through the news items and then move them accordingly
  // (this will move all, visible or not)
  for (i=0; i<newsItems.length; i++) {
	  
	// this news item
	var newsItem = newsItems[i];
	
    // see if this item needs to be moved to the end
    if (newsItem.top + newsItem.height < 0) {
      newsItem.top = newsItem.top + totalPixelHeight;
      topItem = i;
    }
	
	  // pause when the top item is at the top of the DIV
    if ( (newsItem.top <= 0 && newsItem.top > 0-pixelMove) && keepMoving == true)
      keepMoving = false;
	  
	  // position the news item  
	  moveObjTo(newsItem.div,0,newsItem.top);
	
	  // get ready for the next position
    newsItem.top = newsItem.top - pixelMove;
	
  }
  
  // see if this is to move or pause
  if (keepMoving)
    setTimeout('displayNews();',25);
  else
    setTimeout('displayNews();', secondsPause*1000);
	
}

// hover
function newsOver(item) {
  var newsItem = newsItems[item];
	if (newsItem.link!="")
    newsItem.style.textDecoration='underline';
  isPaused = true;
}

// leave
function newsOut(item) {
  var newsItem = newsItems[item];
	if (newsItem.link!="")
	  newsItem.style.textDecoration='none';
  isPaused = false;
}

// click
function newsClick(item) {
  var newsItem = newsItems[item];
	if (newsItem.link!="")
    window.location = newsItem.link;
}

// load the element
function getObj(objName) {
    if ( document.getElementById )
        return document.getElementById(objName);
    else if ( document.layers )
        return document.layers[objName];
    else if ( document.all )
        return document.all.item(objName);
}

// move an object
function moveObjTo( obj, x, y ){
    if ( ! obj.style ){
        obj.top = y;
        obj.left = x;
    }else{
        obj.style.top = y + "px";
        obj.style.left = x + "px";
    }
}