var maxOffset = 4;
var minOffset = 0;
var currentOffset = 0;
var totalMin = null;
var totalMax = null;

var ticker_ul = null;
var currentWidth = null;

var isScrolling = false;

var ticker_eventId = null;
var events_ul = null;
var eventOffset = 0;
var eventOffsetId = 0;

function saveOffsetIntoCookie()
{
  var expires = new Date();
  expires.setTime(expires.getTime() + (10 * 60 * 60 * 1000)); // 10 minutes
  document.cookie = "tickerCurrentOffset=" + currentOffset + "; path=/; expires=" + expires.toGMTString();
  
  /*
  var cookie = new ajaxRequest({
    url:'lib/ajax/session.php?name=tickerCurrentOffset&value=' + currentOffset + '&expires=500',
    type:'GET'
  });
  cookie.startRequest();
  */
}

function saveEventIdIntoCookie()
{ 
  document.cookie = "tickerEventId=" + ticker_eventId + "; path=/";
}

function resetTicker()
{
  if(ticker_ul === null)
    ticker_ul = document.getElementById('tickercontent').getElementsByTagName("ul")[0];
   
  while(ticker_ul.firstChild)
  {
    ticker_ul.removeChild(ticker_ul.firstChild);
  }
   
  currentOffset = 0;
  maxOffset = 4;
  minOffset = 0;
  totalMin = null;
  totalMax = null;
  isScrolling = false;
  currentWidth = null;
  
  saveOffsetIntoCookie();
  
  var request = new ajaxRequest({
    url:'lib/ajax/ticker.php?offset=' + (currentOffset) + '&limit=5&event_id=' + ticker_eventId,
    type:'GET',
    callback:matchesCallback,
    options:{type:null}
  });
  request.startRequest();
}


function scrollTicker(type)
{
  if(isScrolling)
  {
    // alert('isScrolling');
    return;
  }
  
  if(ticker_ul === null)
    ticker_ul = document.getElementById('tickercontent').getElementsByTagName("ul")[0];
  
  if(currentWidth === null)
    currentWidth = document.getElementById('tickercontent').offsetWidth;
  
  if(type === '+') // Scroll to the right
  {
    /*
    debug.value = 'currentOffset: ' + currentOffset + '; currentOffset+5: ' + (currentOffset+5) + '; totalMax: ' + totalMax + '; maxOffset: ' + maxOffset + '; totalMin: ' + totalMin + '; minOffset: ' + minOffset;
    */
    
    if(totalMax !== null && currentOffset + 6 > totalMax)
    {
      // alert('maxLimitReached');
      return;
    }
    
    // currentOffset: -6; currentOffset+5: -1; totalMax: 0; maxOffset: 0; totalMin: 11; minOffset: -6; +=0
    
    // minOffset < -6
    
    if(currentOffset < 0 && ((currentOffset <= -6 && currentOffset < minOffset) || currentOffset < minOffset || currentOffset + 5 >= maxOffset || currentOffset + 5 < maxOffset))
    {
      /* debug.value += '; +=0'; */
      var request = new ajaxRequest({
        url:'lib/ajax/ticker.php?offset=' + (currentOffset + 5) + '&event_id=' + ticker_eventId,
        type:'GET',
        callback:matchesCallback,
        options:{type:type}
      });
      request.startRequest();
    }
    else if(currentOffset + 5 > maxOffset)
    {
      /* debug.value += '; +=1'; */
      maxOffset += 1;
      var request = new ajaxRequest({
        url:'lib/ajax/ticker.php?offset=' + maxOffset + '&event_id=' + ticker_eventId,
        type:'GET',
        callback:matchesCallback,
        options:{type:type}
      });
      request.startRequest();
    }
    else
    {
      /* debug.value += '; +=2'; */
      currentOffset += 1;
      saveOffsetIntoCookie();
      scrollTickerByType('+');
    }
  }
  else // Scroll to the left
  {
    /*
    debug.value = 'currentOffset: ' + currentOffset + '; currentOffset-1: ' + (currentOffset-1) + '; totalMax: ' + totalMax + '; maxOffset: ' + maxOffset + '; totalMin: ' + totalMin + '; minOffset: ' + minOffset;
    */
    
    if(totalMin !== null && Math.abs(currentOffset - 1) > totalMin)
    {
      // alert('minLimitReached');
      return;
    }
    
    // alert('currentOffset: ' + currentOffset + '; minOffset: ' + minOffset);
    
    // alert(currentOffset);
    
    if(currentOffset > 0) // User scrolls left within the upcoming matches
    {
      var request = new ajaxRequest({
        url:'lib/ajax/ticker.php?offset=' + (currentOffset - 1) + '&event_id=' + ticker_eventId,
        type:'GET',
        callback:matchesCallback,
        options:{type:type}
      });
      request.startRequest();
    }
    else if(currentOffset - 1 < minOffset)
    {
      minOffset -= 1;
      var request = new ajaxRequest({
        url:'lib/ajax/ticker.php?offset=' + minOffset + '&event_id=' + ticker_eventId,
        type:'GET',
        callback:matchesCallback,
        options:{type:type}
      });
      request.startRequest();
    }
    else
    {
      currentOffset -= 1;
      saveOffsetIntoCookie();
      scrollTickerByType('-');
    }
  }
}

function scrollTickerByType(type)
{
  var currentMarginLeft = ticker_ul.style.marginLeft;
  if(currentMarginLeft === '')
  {
    currentMarginLeft = 0;
  }
  else
  {
    currentMarginLeft = parseInt(currentMarginLeft.substr(0, currentMarginLeft.indexOf("px")));
  }
  
  if(type === '+')
  {  
    currentMarginLeft -= 93;
    
    isScrolling = true;
    window.setTimeout("ticker_ul.style.marginLeft = '" + (currentMarginLeft + 45) + "px';", 0);
    window.setTimeout("ticker_ul.style.marginLeft = '" + (currentMarginLeft + 25) + "px';", 75);
    window.setTimeout("ticker_ul.style.marginLeft = '" + (currentMarginLeft + 15) + "px';", 150);
    window.setTimeout("ticker_ul.style.marginLeft = '" + (currentMarginLeft + 10) + "px';", 225);
    window.setTimeout("ticker_ul.style.marginLeft = '" + (currentMarginLeft + 5) + "px';", 300);
    window.setTimeout("ticker_ul.style.marginLeft = '" + (currentMarginLeft) + "px'; isScrolling = false;", 375);
  }
  else if(type === '-')
  {
    currentMarginLeft += 93;
    
    isScrolling = true;
    window.setTimeout("ticker_ul.style.marginLeft = '" + (currentMarginLeft - 45) + "px';", 0);
    window.setTimeout("ticker_ul.style.marginLeft = '" + (currentMarginLeft - 25) + "px';", 75);
    window.setTimeout("ticker_ul.style.marginLeft = '" + (currentMarginLeft - 15) + "px';", 150);
    window.setTimeout("ticker_ul.style.marginLeft = '" + (currentMarginLeft - 10) + "px';", 225);
    window.setTimeout("ticker_ul.style.marginLeft = '" + (currentMarginLeft - 5) + "px';", 300);
    window.setTimeout("ticker_ul.style.marginLeft = '" + (currentMarginLeft) + "px'; isScrolling = false;", 375);
  }
}

function matchesCallback(response)
{
  /* GET MATCHES FROM RESPONSE */
  
  var matches = response.xml.getElementsByTagName("match");
  
  if(response.options.type === '+')
  {
    totalMax = parseInt(response.xml.getElementsByTagName('root')[0].getAttribute("total"));
  }
  else if(response.options.type === '-')
  {
    totalMin = parseInt(response.xml.getElementsByTagName('root')[0].getAttribute("total"));
  }
  
  if(!matches.length)
  {
    // alert('noResults');
    return;
  }
  
  if(response.options.type === '+')
  {
    currentOffset += 1;
  }
  else if(response.options.type === '-')
  {
    currentOffset -= 1;
  }
  else
  {
    minOffset = parseInt(response.xml.getElementsByTagName('root')[0].getAttribute("minOffset"));
    maxOffset = parseInt(response.xml.getElementsByTagName('root')[0].getAttribute("maxOffset"));
    currentOffset = parseInt(response.xml.getElementsByTagName('root')[0].getAttribute("tickerOffset"));
  }
  
  saveOffsetIntoCookie();
  
  for(var m=0;m<matches.length;m++)
  {
    currentWidth += 93;
    ticker_ul.style.width = (currentWidth) + 'px';
    
    var match = matches[m];
    var li = document.createElement("li");
    var a = document.createElement("a");
    a.href = 'de/match/' + match.getAttribute("id") + '/';
    
    var date = document.createElement("div");
    date.className = 'date';
    date.appendChild(document.createTextNode(match.getAttribute("datetime")));
    a.appendChild(date);
    
    var div_team1 = document.createElement("div");
    div_team1.className = 'team1';
    var div_team2 = document.createElement("div");
    div_team2.className = 'team2';
    
    if(match.getAttribute("clans") == '1')
    {
      var teams = match.getElementsByTagName("teams")[0].getElementsByTagName("team");
      
      /*
      var div_logo1 = document.createElement('div');
      div_logo1.className = 'logo';
      var logo1 = document.createElement('img');
      logo1.alt = 'team1';
      // logo1.src = 'img/teams/' + teams[0].getAttribute("id") + '.png';
      logo1.src = teams[0].getAttribute("icon");
      div_logo1.appendChild(logo1);
      div_team1.appendChild(div_logo1);
      
      var div_logo2 = document.createElement('div');
      div_logo2.className = 'logo';
      var logo2 = document.createElement('img');
      logo2.alt = 'team2';
      // logo2.src = 'img/teams/' + teams[1].getAttribute("id") + '.png';
      logo2.src = teams[1].getAttribute("icon");
      div_logo2.appendChild(logo2);
      div_team2.appendChild(div_logo2);
      */
      
      var nick1 = document.createElement('div');
      nick1.className = 'nick';
      nick1.appendChild(document.createTextNode(teams[0].getAttribute("name")));
      div_team1.appendChild(nick1);
      
      var nick2 = document.createElement('div');
      nick2.className = 'nick';
      nick2.appendChild(document.createTextNode(teams[1].getAttribute("name")));
      div_team2.appendChild(nick2);
      
      var div_result1 = document.createElement('div');
      div_result1.className = 'result';
      var span_score = document.createElement('span');
      span_score.className = teams[0].getAttribute("class");
      span_score.appendChild(document.createTextNode(teams[0].getAttribute("score")));
      div_result1.appendChild(span_score);
      div_team1.appendChild(div_result1);
      
      var div_result2 = document.createElement('div');
      div_result2.className = 'result';
      var span_score = document.createElement('span');
      span_score.className = teams[1].getAttribute("class");
      span_score.appendChild(document.createTextNode(teams[1].getAttribute("score")));
      div_result2.appendChild(span_score);
      div_team2.appendChild(div_result2);
    }
    else
    {
      var players = match.getElementsByTagName("players")[0].getElementsByTagName("player");
      
      var nick1 = document.createElement('div');
      nick1.className = 'nick';
      nick1.appendChild(document.createTextNode(players[0].getAttribute("nick")));
      div_team1.appendChild(nick1);
      
      var nick2 = document.createElement('div');
      nick2.className = 'nick';
      nick2.appendChild(document.createTextNode(players[1].getAttribute("nick")));
      div_team2.appendChild(nick2);
      
      var div_result1 = document.createElement('div');
      div_result1.className = 'result';
      var span_score = document.createElement('span');
      span_score.className = parseInt(players[0].getAttribute("score")) > parseInt(players[1].getAttribute("score")) ? 'win' : (players[0].getAttribute("score") < players[1].getAttribute("score") ? 'loss' : 'draw');
      span_score.appendChild(document.createTextNode(players[0].getAttribute("score")));
      div_result1.appendChild(span_score);
      div_team1.appendChild(div_result1);
      
      var div_result2 = document.createElement('div');
      div_result2.className = 'result';
      var span_score = document.createElement('span');
      span_score.className = parseInt(players[1].getAttribute("score")) > parseInt(players[0].getAttribute("score")) ? 'win' : (players[1].getAttribute("score") < players[0].getAttribute("score") ? 'loss' : 'draw');
      span_score.appendChild(document.createTextNode(players[1].getAttribute("score")));
      div_result2.appendChild(span_score);
      div_team2.appendChild(div_result2);
    }
    
    a.appendChild(div_team1);
    a.appendChild(div_team2);
    
    var div_status = document.createElement('div');
    div_status.className = 'status';
    
    var div_game = document.createElement('div');
    div_game.className = 'left';
    div_game.appendChild(document.createTextNode(match.getAttribute("game")));
    div_status.appendChild(div_game);
    
    var status = document.createElement('div');
    status.className = 'right';
    span_status = document.createElement('span');
    span_status.className = match.getAttribute("status");
    span_status.appendChild(document.createTextNode(match.getAttribute("status")));
    status.appendChild(span_status);
    div_status.appendChild(status);
    
    a.appendChild(div_status);
    
    var line = document.createElement('li');
    line.className = 'line';
    var line_img = document.createElement('img');
    line_img.alt = 'line';
    line_img.src = 'img/design/ticker/line.jpg';
    line.appendChild(line_img);
    
    li.appendChild(a);
    
    if(response.options.type === '-')
    {
      ticker_ul.style.marginLeft = '-93px';
      ticker_ul.insertBefore(line, ticker_ul.firstChild);
      ticker_ul.insertBefore(li, ticker_ul.firstChild);
    }
    else if(response.options.type === '+')
    {
      ticker_ul.appendChild(line);
      ticker_ul.appendChild(li);
    }
    else
    {
      if(m > 0)
        ticker_ul.appendChild(line);
      ticker_ul.appendChild(li);
    }
    
    scrollTickerByType(response.options.type);
  }
}

/* EVENTS */

function scrollEvents(type)
{
  if(events_ul === null)
  {
    events_ul = document.getElementById('eventscontent').getElementsByTagName("ul")[0];
  }
  
  if(type == '+')
  {
    if(eventOffset + 4 == events_ul.getElementsByTagName("li").length)
    {
      return;
    }
    
    if(events_ul.getElementsByTagName("li")[eventOffset].className !== 'current')
      events_ul.getElementsByTagName("li")[eventOffset].className = 'clear';
    
    eventOffset += 1;
    events_ul.style.marginTop = '-' + (eventOffset * 14 + eventOffset + 1) + 'px';
    
    if(events_ul.getElementsByTagName("li")[eventOffset].className !== 'current')
      events_ul.getElementsByTagName("li")[eventOffset].className = '';
    
    
    
    if(events_ul.getElementsByTagName("li")[eventOffset + 2].className === 'current clear')
    {
      events_ul.getElementsByTagName("li")[eventOffset + 2].className = 'current';
    }
    else
    {
      events_ul.getElementsByTagName("li")[eventOffset + 2].className = '';
    }
    
    if(events_ul.getElementsByTagName("li")[eventOffset + 3].className == 'current')
      events_ul.getElementsByTagName("li")[eventOffset + 3].className = 'current clear';
    else if(events_ul.getElementsByTagName("li")[eventOffset + 3].className !== 'current clear')
      events_ul.getElementsByTagName("li")[eventOffset + 3].className = 'clear';
  }
  else
  {
    if(eventOffset === 0)
      return;
    
    if(events_ul.getElementsByTagName("li")[eventOffset].className !== 'current')
      events_ul.getElementsByTagName("li")[eventOffset].className = '';
    
    if(events_ul.getElementsByTagName("li")[eventOffset + 2].className == 'current')
      events_ul.getElementsByTagName("li")[eventOffset + 2].className = 'current clear';
    else
      events_ul.getElementsByTagName("li")[eventOffset + 2].className = 'clear';
    
    if(events_ul.getElementsByTagName("li")[eventOffset + 3].className !== 'current clear')
      events_ul.getElementsByTagName("li")[eventOffset + 3].className = '';
    
    eventOffset -= 1;
    events_ul.style.marginTop = '-' + (eventOffset * 14 + eventOffset) + 'px';
    if(events_ul.getElementsByTagName("li")[eventOffset].className == 'clear')
      events_ul.getElementsByTagName("li")[eventOffset].className = '';
  }
}

function switchEvent(eventId, offset)
{
  if(events_ul === null)
  {
    events_ul = document.getElementById('eventscontent').getElementsByTagName("ul")[0];
  }
  
  var nodes = events_ul.getElementsByTagName('li');
  
  if(eventOffsetId - 3 === eventOffset)
  {
    nodes[eventOffsetId].className = 'clear';
  }
  else
  {
    nodes[eventOffsetId].className = '';
  }
  
  ticker_eventId = eventId;
  saveEventIdIntoCookie();
  resetTicker();
  eventOffsetId = offset;
  
  if(eventOffsetId - 3 === eventOffset)
  {
    nodes[eventOffsetId].className = 'current clear';
  }
  else
  {
    nodes[eventOffsetId].className = 'current';
  }
}

function scrollEventsByOffset(offset)
{
  if(events_ul === null)
  {
    events_ul = document.getElementById('eventscontent').getElementsByTagName("ul")[0];
  }
  
  var nodes = events_ul.getElementsByTagName('li');
  
  // alert(offset + ' ' + nodes.length);
  
  if((offset + 3) > (nodes.length - 1))
  {
    eventOffset = nodes.length - 4;
  }
  else
  {
    eventOffset = offset;
  }
  
  eventOffsetId = offset;
  
  // eventOffsetId = offset;
  // eventOffset = offset;
  events_ul.style.marginTop = '-' + (eventOffset * 14 + eventOffset + 1) + 'px';
  
  if(eventOffsetId === eventOffset + 3)
  {
    nodes[eventOffsetId].className = 'current clear'; 
  }
  else
  {
    nodes[eventOffsetId].className = 'current';
    nodes[eventOffset + 3].className = 'clear';
  }
}

/* SCROLLING VIA KEYBOARD */

function keyDown(event)
{
  var event = event || window.event;
  
  if(event.keyCode == '39')
  {
    scrollTicker('+');
  }
  else if(event.keyCode == '37')
  {
    scrollTicker('-');
  }
}

document.onkeydown = keyDown;