var ticker = {

    contents1 : document.getElementById('ticker_contents_1'),
    contents2 : document.getElementById('ticker_contents_2'),
    offset : 0,
    timeout : null,
    firstPass : true,

    init : function(element) {
      this.tickerElement = element;

      element.onmouseover = function() {
        ticker.stop();
      };

      element.onmouseout = function() {
        ticker.start();
      };
      
      element.onmousewheel = function(event) {
        if (!event) {
          event = window.event;
        }
        if (event.wheelDelta) {
          delta = event.wheelDelta/120;
            if (window.opera) {
              delta = -delta;
            }
        } else if (event.detail) {
           delta = -event.detail/3;
        }
        if (delta) {
          ticker.move(delta * 30);
        }
        if (event.preventDefault) {
          event.preventDefault();
        }
        event.returnValue = false;
      };

      this.loadData();
    },
    
    setPosition : function(offset) {
      
      if (offset > this.contents1.clientWidth) {
        this.offset = offset - this.contents1.clientWidth;
      }
      else if (offset < 0 && !this.firstPass) {
        this.offset = offset + this.contents1.clientWidth;
      }
      else {
        this.offset = offset;
      }
      
      if (offset > 0) {
        this.firstPass = false;
      }

      document.getElementById('ticker_contents_1').style.left = (this.offset * -1) + "px";
  
      document.getElementById('ticker_contents_2').style.left = ((this.offset * -1) + document.getElementById('ticker_contents_1').clientWidth) + "px";
      
    },

    move : function(delta) {
      this.setPosition(this.offset - delta);
    },

    start : function() {
      this.timeout = window.setInterval("ticker.move(-1)", 25);
    },

    stop : function() {
      window.clearInterval(this.timeout);
    },

    loadData : function() {
      var xmlHttp = getAjaxObject();

      xmlHttp.onreadystatechange = function() {
        if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
          ticker.processData(json_parse(xmlHttp.responseText));
        }
      };

      xmlHttp.open("GET", "list_json.php?listid=703", true);
      xmlHttp.send(null);
      
    },

    processData : function(data) {
      this.stop();
      
      var contents = '<span class="name"><img src="eve_market_icon.png" alt="EVE Markets" style="vertical-align: middle; margin: -2px 3px 0 -4px;" \/>Top 100 Index<\/span>';
      contents += ' <span class="price price_' + ((data.index.change > 0) ? 'up' : (data.index.change < 0) ? 'down' : 'nochange');
      contents += '">' + data.index.value + ' ';
      
      if (Math.abs(data.index.change) > 0.009) {
        contents += ((data.index.change > 0) ? '+' : '') + data.index.change;
      }
      else {
        contents += '=';
      }
      contents += '<\/span> ';
      
      for (var i = 0; i < data.items.length; i++) {
        var item = data.items[i];
        contents += '<span class="name" id="ticker_type' + item.typeID + '"><a href="detail.php?typeid=' + item.typeID + '">' + item.typeName + '<\/a><\/span>';
        contents += ' <span class="price price_' + ((item.percent_change > 0) ? 'up' : (item.percent_change < 0) ? 'down' : 'nochange');
        contents += '">' + item.median_price + ' ';
        if (Math.abs(item.percent_change) > 0.009) {
          contents += ((item.change > 0) ? '+' : '') + item.change.toFixed(2) + ' ' + item.percent_change + '%';
        }
        else {
          contents += '=';
        }
        contents += '<\/span> '; 
      }

      this.contents1.innerHTML = contents;
      this.contents2.innerHTML = contents;
      this.setPosition(-1 * document.getElementById('ticker').clientWidth);

      this.start();
      window.setTimeout("ticker.loadData()", 300000); // 5 minutes
    }
    
};

addToOnload(function() {
  ticker.init(document.getElementById('ticker'));
});