//
// JavaScript Newsticker written by KjM <kjm@kjm.hu>
// You can use this script only if you include this header
// Eventwrapper by Scrott Andrew
//

// Start NewsTicker Object
var NewsTicker = {

  // Cross browser event handling by Scrott Andrew
  addEvent: function(obj, evType, fn, useCapture) {
    if (obj.addEventListener) {
      obj.addEventListener(evType, fn, useCapture);
      return true;
    } else if (obj.attachEvent) {
      var r = obj.attachEvent('on'+evType,fn);
      return r;
    } else {
      obj['on'+evType] = fn;
    }
  },

  // Setup Function which can be used after page is loaded
  isLoaded: function() {


  },

  // Init Function
  Init: function() {
    
    // Init news array
    NewsTicker.Content = new Array();
    NewsTicker.WaitFor = 1000; NewsTicker.Orient = 0;
    NewsTicker.WaitAfter = 5000; NewsTicker.ClearOld = 0;
    NewsTicker.Timeout = setTimeout("NewsTicker.Tick()",NewsTicker.WaitFor);
    NewsTicker.CharAt  = 1; NewsTicker.Element = 0;

    // Browser detect
    var isIE = !window.opera && navigator.userAgent.indexOf('MSIE') != 1;

    // Init XML Object
    if (document.all) {
      NewsTicker.xmlhttp = new XMLHttpRequest();
    } else {
      NewsTicker.xmlhttp = new XMLHttpRequest();
    }
  },

  // Start fetch request of new newsfeed
  GetNews: function(url,clearold) {
    
    // Clear old array?
    if ((clearold != null) && (clearold)) NewsTicker.ClearOld = 1;

    // Fetch news from the given URL
    if ((url != null) && (NewsTicker.xmlhttp)) {
      NewsTicker.xmlhttp.onreadystatechange = NewsTicker.XMLHandler;
      NewsTicker.xmlhttp.open("GET", url, true);
      NewsTicker.xmlhttp.send(null);
    }
  },

  // XML Fetch Handler
  XMLHandler: function() {

    // Fetch is done
    if (NewsTicker.xmlhttp.readyState == 4) {
      var c = NewsTicker.xmlhttp.responseXML.getElementsByTagName("content");
      if (c.length == 0) return;

      // Get content
      for (var i=0;i<c.length;i++) {
        var a = c[i].getElementsByTagName("text");
        var l = c[i].getElementsByTagName("link");

        // Show content
        NewsTicker.Add(a[0].firstChild.nodeValue,l[0].firstChild.nodeValue);
      }
    }
  },

  // Show Ticker
  Tick: function() {

    // Get display container
    var d = document.getElementById("ticker");

    // We have content to show
    if ((d) && (NewsTicker.Content.length)) {

      // Get current Array element
      var a = NewsTicker.Content[NewsTicker.Element];
      var s = ''+a[0]+''; var l = ''+a[1]+'';

      // Orientation
      if (!NewsTicker.Orient) {

        // With or without link
        if (l.length) 
          d.innerHTML = "<a title='"+a[0]+"' href='"+a[1]+"'>"+s.substr(0,NewsTicker.CharAt)+"</a>";
        else 
          d.innerHTML = s.substr(0,NewsTicker.CharAt)+" ";
      } else {

        // With or without link
        var o = "";
        if (l.length) 
          o = "<a href='"+a[1]+"'>";
        for (var i = 0; i < NewsTicker.CharAt; i++) {
          o += s.substr(i,1) + "<br />";
        }
        // With or without link
        if (l.length) o += "</a>";
        d.innerHTML = o;
      }

      // Increment Char Offset
      NewsTicker.CharAt++;
      if (NewsTicker.CharAt > s.length) {
        NewsTicker.CharAt = 1; 
        NewsTicker.WaitFor = NewsTicker.WaitAfter;
        NewsTicker.Element++;

        // End of Array?
        if (NewsTicker.Element>=NewsTicker.Content.length)
          NewsTicker.Element = 0;
      } else

        // Change newsticker intervall
        NewsTicker.WaitFor = 55;
    }

    // Next Element
    NewsTicker.Timeout = setTimeout("NewsTicker.Tick()",NewsTicker.WaitFor);
  },

  // Clear all entries within the private array
  Clear: function() {
    NewsTicker.Content = new Array();
  },

  // Fill content of the NewsTicker database
  Add: function(text,link) {
    if (!NewsTicker.Content) return 0;
    NewsTicker.Content[NewsTicker.Content.length] = [[''+text+''],[''+link+'']];
    return NewsTicker.Content.length;
  },

  noop: []
}

// Setup loader 
NewsTicker.addEvent(window,'load',NewsTicker.isLoaded,false);

// Start Image Object Handler
NewsTicker.Init();
