// ****************************************
//
// COPYRIGHT (c) 2008 - YellowHawk Ltd. All rights reserved.
//
// ticker.js
// Scrolling ticker-tape. To use include this file then - in your file - include
// a <div id="ticker_area">&nbsp;</div> to place the ticker. Also include a set of
// hidden anchor elements within a hidden div. Each anchor will be scrolled in turn
// across the ticker are :
// <div style="display:none" id="ticker_content">
//    <a href="...">First text string to scroll</a>
//    <a href="...">Second text string to scroll</a>
// </div>
//
// Change look & feel using CSS. Sample as follows :
//    <style type="text/css">
//      #ticket_title, #ticker_area {
//        font-size:140%;font-weight:bold;color:#9c65ff;
//      }
//      #ticket_title {text-align:right}
//      #ticker_area {
//        overflow:hidden;white-space:nowrap;position:relative
//      }
//      #ticker_area a {
//        text-decoration:none;color:#503080
//      }
//      #ticker_area a:hover {
//        text-decoration:underline
//      }
//    </style>


var Ticker = {
  cindex:0,
  pause:0,
  pause_seconds:1,
  pause_ticks:1,

  // Control of iterations
  steps:0,
  count:0,

  start_param:0,
  param:0,
  delta:6,

  maxWidth:0,
  style:'width',
  type:'expose',
  interval:50
}

Ticker.msgList = [];

Ticker.init = function(tag) {
  Ticker.pause_ticks = (Ticker.pause_seconds*1000)/Ticker.interval;
  if (Ticker.type=='scroll') {
    Ticker.style='left';

    Ticker.delta = -5;
    tag.style.left = Ticker.start_param = Ticker.maxWidth;

    Ticker.steps = Math.ceil(Ticker.maxWidth/5);
  }
  else if (Ticker.type=='expose') {
    Ticker.style='width';
    tag.style.width = '0px';
    Ticker.steps = Math.ceil(Ticker.maxWidth/Ticker.delta);
  }
}

Ticker.prepareNew = function() {
  if (Ticker.type=='scroll') {
    Ticker.maxWidth = Ticker.area.scrollWidth;
    Ticker.steps = Math.ceil(Ticker.maxWidth/5);
    Ticker.area.style.left = Ticker.start_param = Ticker.maxWidth;
  }
  else if (Ticker.type=='expose') {
    Ticker.style='width';
    Ticker.area.style.width = '0px';
    Ticker.steps = Math.ceil(Ticker.maxWidth/Ticker.delta);
  }
}


Ticker.update = function(area) {
  if (Ticker.pause>0) {
    Ticker.pause--;

    if (Ticker.pause==0) {
      // Next message
      Ticker.count  = 0;
      Ticker.param  = Ticker.start_param;

      Ticker.cindex = (Ticker.cindex+1) % Ticker.msgList.length;
      Ticker.cmsg   = Ticker.msgList[Ticker.cindex];
      Ticker.click  = Ticker.msgList[Ticker.cindex].cl==null ? '' : ' onclick="'+Ticker.msgList[Ticker.cindex].cl+'"';

      Ticker.area.style[Ticker.style] = ''+Ticker.param+'px';
      Ticker.area.style.width = "auto";
      Ticker.area.innerHTML = '<a href="'+Ticker.cmsg.l+'"'+Ticker.click+'>'+Ticker.cmsg.m+'</a>';

      Ticker.prepareNew();
    }
    return;
  }
  Ticker.count ++;
  Ticker.param += Ticker.delta;

  if (Ticker.count>=Ticker.steps)
    Ticker.pause=Ticker.pause_ticks;
  else
    Ticker.area.style[Ticker.style]= ''+Ticker.param+'px';
}

Ticker.findStrings = function() {
  var tag = document.getElementById('ticker_content');
  if (tag!=null) {
    var anchors = tag.getElementsByTagName('a');
    for (var i=0;i<anchors.length;i++) {
      var text = anchors[i].innerHTML;
      if (text.indexOf('<img')!=0)
        Ticker.msgList.push({m:text,l:anchors[i].href,cl:anchors[i].onclick});
    }
  }
}

Ticker.start = function() {
  Ticker.findStrings();

  if (Ticker.msgList.length>0) {
    // Set parameters for requested 'type';
    var area  = document.getElementById('ticker_area');

    if (area!=null) {
      area.style.position='relative';
      area.style.display = 'block';
      Ticker.maxWidth = parseInt(area.offsetWidth,10);

      // Place a nested 'div' into the outer one that controls position.
      area.innerHTML='&nbsp;<div id="ticker_inner" style="position:absolute;top:0;left:0;overflow:hidden">&nbsp;</div>';
      Ticker.pause=1;

      Ticker.area  = document.getElementById('ticker_inner');
      if (Ticker.area!=null) {
        Ticker.init(Ticker.area);
        window.setInterval(Ticker.update,Ticker.interval);
      }
    }
  }
}
