//
// JavaScript Newsticker written by KjM <kjm@kjm.hu>
// You can use this script only if you include this header
// Eventwrapper by Scrott Andrew
//

// Shortcuts
var dcm = document;

// Wrapper for getElementById
function gE(id) {return dcm.getElementById(id);}

// Wrapper für getElementsByTagName
function eB(o,t,e) {var r = o.getElementsByTagName(t); return (e==null)?r:r[e];}

// Start NewsTicker Object
var NewsTicker = {

  // MSIE
  ismsie: false,
  msobj: null,
  msidx: -1,

  // 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() {


  },

  // Pick best available XML lib under MSIE
  pickLib: function() {

    // Possible Libs in MSIE
    var l = new Array("Msxml2.XMLHTTP.5.0","Msxml2.XMLHTTP.4.0","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP");

    // Alle möglichen Libs testen
    for (var i = 0; i < l.length; i++) {
      try {
        var t = new ActiveXObject(l[i]);
        NewsTicker.msidx = i; return l[i];
      } catch (e) { }
    }

    // Nothing found
    return null;
  },

  // Init Function for the GOWEB NewsTicker
  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;
    NewsTicker.xmlhttp   = null;

    // Browser detect
    NewsTicker.ismsie = !window.opera && navigator.userAgent.indexOf('MSIE') != 1;

    // Init XML Object
    if (!window.opera && navigator.userAgent.indexOf("MSIE") !=-1) {
      NewsTicker.ismsie = true;
      NewsTicker.msobj = NewsTicker.pickLib();
      if (NewsTicker.msobj!=null)
        NewsTicker.xmlhttp = new ActiveXObject(NewsTicker.msobj);
    } else {
      NewsTicker.xmlhttp = new XMLHttpRequest();
    }
  },

  //
  // Start fetch request of new newsfeed
  // URL must be local to the current URL because of security restrictions!
  //
  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);
    }
  },

  //
  // MSIE XML2.0 3.0 Fix
  //
  msiefix: function(o) {

    // Re-Init oder Objekt direkt weitergeben
    if (NewsTicker.ismsie && NewsTicker.msidx > 1) 
      return new ActiveXObject(NewsTicker.msobject);
    else return o;
  },

  // XML Fetch Handler
  XMLHandler: function() {

    // Fetch is done
    if (NewsTicker.xmlhttp.readyState == 4) {

      // XML Daten setzen
      var res = NewsTicker.xmlhttp.responseXML;

      // MSIE XML2.0 / 3.0 Fix
      NewsTicker.xmlhttp = NewsTicker.msiefix(NewsTicker.xmlhttp);

      // Inhalt prüfen
      var c = eB(res,"Content");
      var d = eB(res,"channel");
      if (c.length == 0 && d.length == 0) return;

      // RSS Style Newsfeed?
      if (d.length > 0) {

        // Get every item
        var c = eB(res,"item"); 
        for (var i=0;i<c.length;i++) {

          // Only link and title used
          var a = NewsTicker.get(c[i],"title");
          if (!a.length) continue;
          var l = NewsTicker.get(c[i],"link");
          var f = NewsTicker.get(c[i],"description");

          // Show content
          NewsTicker.Add(a,l,(f.length>0)?f:"");
        }
      } else {

        // Get content
        for (var i=0;i<c.length;i++) {
          var a = NewsTicker.get(c[i],"Text");
          if (!a.length) continue;
          var l = NewsTicker.get(c[i],"Link");
          var f = NewsTicker.get(c[i],"Info");

          // Show content
          NewsTicker.Add(a,l,(f.length>0)?f:"");
        }
      }
    }
  },

  // Show Ticker
  Tick: function() {

    // Get display container
    var d = gE("ticker"); var x = gE("tickerinfo");

    // 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]+'';

      // Show extended info
      var f = ''+a[2]+'';
      if (NewsTicker.CharAt==1 && x && f.length) {
        x.innerHTML = f;
      }

      // 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 into the NewsTicker database
  Add: function(text,link,info) {
    if (!NewsTicker.Content) return 0;
    NewsTicker.Content[NewsTicker.Content.length] = [[''+text+''],[''+((link==null)?"":link)+''],[''+((info==null)?"":info)+'']];
    return NewsTicker.Content.length;
  },

  //
  // Universal function to read from XML string
  //
  get: function(x,s,l) { 
    try { 
      var r = eB(x,s); 
    } catch (e) { 
      if (l==null) return ""; 
      return (l==true)?0:0.0;
    }
    if ((r.length) && (r[0].firstChild)) {
      var b = r[0].firstChild.nodeValue; 
      if (l==null) return b;
      return (l)?parseInt(b):parseFloat(b);
    } else { return (l!=null)?0:""; }
  }
}

// Setup loader 
NewsTicker.addEvent(window,'load',NewsTicker.isLoaded,false);

// Start Image Object Handler
NewsTicker.Init();

