window.addEvent('domready', function () {
									  
String.implement({
  underscore: function() {
    return this.trim().toLowerCase().replace(/(\s+)/g, '_')
  },
  convertHtmlEntities: function() {
    var text = this, matches = this.match(/\&[a-z]+\;/g)
    if(matches) {
      var stub_object = new Element('span')
      matches.each(function(match) {
        text = text.replace(match, stub_object.set('html', match).get('text'))
      })
      stub_object.destroy()
    }
    return text
  }
})

$('newswire').getElements('ul').each(function(ul) {
												
    var n = 0, news_html = ul.getElements('li').map(function(li) { return li.get('html') }), news = ul.getElements('li').map(function(li) { return li.get('text') })
	var html=""
    var ticker = new Element('div', { 'class': 'ticker', 'html': news_html[0] }).replaces(ul)
    var cursor = new Element('div', { 'class': 'cursor', 'text': ' ' })
    var span   = new Element('span')
    var foo    = new Element('div')
    var tick_it = function() { 
      span.empty().dispose()
      n++
      n = n % news.length
      // We replace html-encoded chars (&amp; etc.) so that the position matches the html-encoded version
      html = news_html[n].replace(/&(.*?);/g, "_")

	  span_start = html.search("<span>")
	  if(span_start== -1) span_start = html.search("<SPAN>")
      span_end = html.search("</span>")
	  if(span_end== -1) span_end = html.search("</SPAN>")
	  
      letters = news[n].split("")
      ticker.empty()
      cursor.inject(ticker, 'after')
      var i = 0, tick_letter = function() {
        letter = foo.set('text', letters[i]).get('html').convertHtmlEntities()
        if (span_start && span_end && i >= span_start && i < span_end){
          if (span_start == i) span.inject(ticker)
          span.set('text', span.get('text')+letter) && i++
        } else {
          ticker.set('html', ticker.get('html')+letter) && i++
        }
        if (i >= letters.length) {
          $clear(tick_letter)
          cursor.dispose()
          tick_it.delay(5000)
        }
      }.periodical(20)
    }
    tick_it.delay(5000)
  })

});
