  var livescores_XMLfeed;
  var livescores_serverTime;
  var livescores_clientTime;
  var livescores_xmlfeedTimer;
  var livescores_actionTimer;
  var livescores_actionlist;
  var livescores_eventlist;
  var livescores_displaylist;
  var livescores_displayeventcount = 5;
  var livescores_displayactioncount = 5;
  var livescores_active;
  var livescores_active_drawer;

  if (!Array.prototype.indexOf)
  {
    Array.prototype.indexOf = function(elt /*, from*/)
      {
        var len = this.length;

        var from = Number(arguments[1]) || 0;
        from = (from < 0)
        ? Math.ceil(from)
        : Math.floor(from);
        if (from < 0)
          from += len;

        for (; from < len; from++)
        {
          if (from in this &&
              this[from] === elt)
            return from;
        }
        return -1;
      };
  }

  function livescores_getServerTime()
  {
    if(livescores_XMLfeed)
    {
      livescores_serverTime = fixdate(livescores_XMLfeed.getAttribute('now'));
    }
  }
  
  function isNumeric(value) {
    if (value == null || !value.toString().match(/^[-]?\d*\.?\d*$/)) return false;
    return true;
  }
  
  function fixdate(timestamp)
  {
    if(livescores_timezone && isNumeric(livescores_timezone))
    {
      timestamp = parseInt(timestamp);
      timestamp += (livescores_timezone * 60 * 60);
    }
    var d = new Date(timestamp*1000);
    return d;
  }

  function livescores_getXML(readyState, response, responseParameter)
  {
    if(readyState==4)
    {
      livescores_XMLfeed = null;
      if (response.length > 0)
      {
        try{
          if (window.ActiveXObject) {  // IE
            livescores_XMLfeed=new ActiveXObject("Microsoft.XMLDOM");
            livescores_XMLfeed.async="false";
            livescores_XMLfeed.loadXML(response);
          } else {                     // Moz, FF, Opera etc
            parser=new DOMParser();
            livescores_XMLfeed=parser.parseFromString(response,"text/xml");
          }
          livescores_XMLfeed = livescores_XMLfeed.getElementsByTagName("MZLiveScores");
          if(livescores_XMLfeed[0])
            livescores_XMLfeed = livescores_XMLfeed[0];
          livescores_init();
        }
        catch(e)
        {
          livescores_XMLfeed = null;
        }
      }
    }
  }
  
  function livescores_makeActionLists()
  {
    livescores_actionlist = new Array();
    livescores_eventlist = new Array();
    livescores_xmlevents = livescores_XMLfeed.getElementsByTagName('Event');
    livescores_pendingmatches = 0;
    for(var i=0;i<livescores_xmlevents.length;i++)
    {
      eventdata = new Array();
      matchid = "mid" + livescores_xmlevents[i].getAttribute('matchid');
      teamdata = new Array();
      xmlteams = livescores_xmlevents[i].getElementsByTagName('Team');
      teamdata['hometeam_id']       = xmlteams[0].getAttribute('id');
      teamdata['awayteam_id']       = xmlteams[1].getAttribute('id');
      teamdata['game']              = livescores_xmlevents[i].getAttribute('game');
      teamdata['hometeam_name']     = xmlteams[0].getAttribute('name');
      teamdata['awayteam_name']     = xmlteams[1].getAttribute('name');
      teamdata['hometeam_short']    = xmlteams[0].getAttribute('shortname');
      teamdata['awayteam_short']    = xmlteams[1].getAttribute('shortname');
      if(livescores_xmlevents[i].getAttribute('state')=="notstarted")
      {
        teamdata['start']             = fixdate(livescores_xmlevents[i].getAttribute('start'));
        livescores_pendingmatches++;
      }
      teamdata['actions']           = new Array;

      xmlactions = livescores_xmlevents[i].getElementsByTagName('Action');
      homescore = 0;
      awayscore = 0;
      for(var j=0;j<xmlactions.length;j++)
      {
        actiondata = new Array();
        if(xmlactions[j].getAttribute('type')=='goal' || xmlactions[j].getAttribute('type')=='end' || xmlactions[j].getAttribute('type')=='start')
        {
          if(xmlactions[j].getAttribute('type')=='goal')
          {
            xmlplayers                 = xmlactions[j].getElementsByTagName('Player');
            actiondata['scorer_name']  = xmlplayers[0].getAttribute('name');
            actiondata['scorer_id']    = xmlplayers[0].getAttribute('id');
	    if(xmlactions[j].getAttribute('subtype')=='own goal')
		actiondata['scorer_team']  = "<div class='livescores_action_owngoal'>" + xmlplayers[0].getAttribute('teamshortname') + "</div>";
	    else            
		actiondata['scorer_team']  = xmlplayers[0].getAttribute('teamshortname');
            if(xmlplayers[0].getAttribute('teamshortname')==teamdata['hometeam_short'])
              if(xmlactions[j].getAttribute('subtype')=='own goal')
                awayscore++;
              else
                homescore++;
            else if(xmlplayers[0].getAttribute('teamshortname')==teamdata['awayteam_short'])
              if(xmlactions[j].getAttribute('subtype')=='own goal')
                homescore++;
              else
                awayscore++;
          }            
          else if(xmlactions[j].getAttribute('type')=='end')
          {
              homescore = xmlteams[0].getAttribute('goals');
              awayscore = xmlteams[1].getAttribute('goals');
          }
          actiondata['realtime']     = fixdate(xmlactions[j].getAttribute('realtime'));
          actiondata['eventtime']    = xmlactions[j].getAttribute('eventtime');
          actiondata['type']         = xmlactions[j].getAttribute('type');
          actiondata['matchid']      = matchid;
          actiondata['game']         = teamdata['game'];
          actiondata['homescore']    = homescore;
          actiondata['awayscore']    = awayscore;
          
          livescores_actionlist.push(actiondata);
        }
      }
      livescores_eventlist[matchid] = teamdata;
    }
    if(livescores_actionlist.length>0)
    {
      livescores_actionlist.sort(function(a,b) {return b['realtime'] - a['realtime']});
      livescores_scraptoservertime();
      livescores_getnextActionTime();
    }
    else if(livescores_pendingmatches>0)
    {
      livescores_fillup();
      livescores_setupTemplateByType(livescores_active);
    }
    else
      livescores_setupTemplateByType(livescores_active);
  }
  
  function livescores_getTimeElapsed()
  {
    var timenow     = new Date();
    var elapsedmill = timenow.getTime() - livescores_clientTime.getTime();
    return elapsedmill;
  }
  
  function livescores_getnextActionTime()
  {
    var timeelapsed = livescores_getTimeElapsed();
    var currenttime = new Date(livescores_serverTime.getTime() + timeelapsed);
    var nextaction = 5000;
    
    for(var i=livescores_actionlist.length - 1;i>0;i--)
    {
      if(livescores_actionlist[i]['realtime'] > currenttime)
      {
        nextaction = livescores_actionlist[i]['realtime'].getTime() - currenttime.getTime();
        break;
      }
    }
    clearTimeout(livescores_actionTimer);
    livescores_actionTimer = setTimeout("livescores_action()", nextaction);
  }
  
  function livescores_action()
  {
    if(livescores_actionlist.length > 0)
    {
      var actiondata = livescores_actionlist[livescores_actionlist.length - 1];
      var nextaction = actiondata;
      while(typeof nextaction!="undefined" && actiondata['realtime'].getTime() - nextaction['realtime'].getTime()==0 && livescores_actionlist.length > 0)
      {
        actiondata = livescores_actionlist.pop();
        if(actiondata['type']=="start")
          livescores_addtoDisplay(actiondata, 2);
        else
          livescores_addtoDisplay(actiondata, 1);
        livescores_addtoEvent(actiondata);

        nextaction = livescores_actionlist[livescores_actionlist.length - 1];
      }
    }
    livescores_setupTemplateByType(livescores_active);
    livescores_getnextActionTime();
  }
  
  function livescores_scraptoservertime()
  {
    livescores_initdisplaylist(true);
    var actiondata = livescores_actionlist[livescores_actionlist.length - 1];
    while(actiondata && actiondata['realtime'] < livescores_serverTime && livescores_actionlist.length>0)
    {
      actiondata = livescores_actionlist.pop();
      if(actiondata['type']=="start")
        livescores_addtoDisplay(actiondata, 2);
      else
        livescores_addtoDisplay(actiondata, 1);
      livescores_addtoEvent(actiondata);
      actiondata = livescores_actionlist[livescores_actionlist.length - 1];
    }
    livescores_fillup();
    livescores_setupTemplateByType(livescores_active);
  }
  
  function livescores_fillup()
  {
    livescores_initdisplaylist(false);
    var thelist = new Array('mzsoccer', 'mzhockey', 'all');
    var nohits = false;
    for(var j=0;j<thelist.length;j++)
    {
      if(livescores_displaylist[thelist[j]].length < livescores_displayactioncount)
        for(var key in livescores_eventlist)
        {
          if(key.indexOf('mid')==0)
            if(livescores_eventlist[key]['start'] && livescores_eventlist[key]['game']==thelist[j])
            {
              if(livescores_displaylist[thelist[j]].length > livescores_displayactioncount)
                break;
              actiondata = new Array();
              actiondata['matchid'] = key;
              actiondata['game']= livescores_eventlist[key]['game'];
              livescores_addtoDisplay(actiondata, 3);
            }
        }
    }
  }
  
  function livescores_addtoEvent(actionobj)
  {
    if(!livescores_eventlist[actionobj['matchid']]) return;
    
    if(livescores_eventlist[actionobj['matchid']]['actions'].length > livescores_displayactioncount + (actionobj['type']=="end" ? 1 : 0))
      livescores_eventlist[actionobj['matchid']]['actions'].pop();
    livescores_eventlist[actionobj['matchid']]['actions'].unshift(actionobj);
  }
  
  function livescores_initdisplaylist(force)
  {
    if(!livescores_displaylist || force)
    {
      livescores_displaylist = new Array();
      livescores_displaylist['mzsoccer'] = new Array();
      livescores_displaylist['mzhockey'] = new Array();
      livescores_displaylist['all'] = new Array();
    }
  }
  
  function livescores_addtoDisplay(actionobj, group)
  {
    livescores_initdisplaylist(false);
    livescores_adddisplaylist(actionobj['matchid'], actionobj['game'], group);
    livescores_adddisplaylist(actionobj['matchid'], 'all', group);
  }
  
  function livescores_Arrayremove(arr, s)
  {
    for(i=0;i<arr.length;i++)
    {
      if(s==arr[i]) arr.splice(i, 1);
    }
    return arr;
  }

  function livescores_getLastTopActionPos(game)
  {
    for(var i=0;i<livescores_displaylist[game].length;i++)
    {
      var eventobj = livescores_eventlist[livescores_displaylist[game][i]];
      if(eventobj['start'])
        return i;
    }
    return livescores_displaylist[game].length;
  }

  function livescores_adddisplaylist(matchid, game, group)
  {
    if(group==1) //top
    {
      if(livescores_displaylist[game].indexOf(matchid)!=-1)
        livescores_displaylist[game] = livescores_Arrayremove(livescores_displaylist[game], matchid);
      if(livescores_displaylist[game].length > livescores_displayeventcount)
        livescores_displaylist[game].pop();
      livescores_displaylist[game].unshift(matchid);
    }
    else if(group==2) //after top
    {
      if(livescores_displaylist[game].length < livescores_displayeventcount)
        livescores_displaylist[game].splice(livescores_getLastTopActionPos(game), 0, matchid);
    }
    else if(group==3) //last
    {
      if(livescores_displaylist[game].length < livescores_displayeventcount)
        livescores_displaylist[game].push(matchid);
    }
  }
  
  function livescores_init()
  {
    clearTimeout(livescores_actionTimer);
    clearTimeout(livescores_xmlfeedTimer);
    livescores_getServerTime();
    livescores_setClientTime();
    livescores_getNextEventTime();
    livescores_makeActionLists();
  }

  function livescores_getXMLfeed()
  {
    ajaxCall('ajax_com/livescores.php', 'val=getfeed', 'livescores_getXML', '');
  }

  function livescores_getNextEventTime()
  {
    clearTimeout(livescores_xmlfeedTimer);
    if(livescores_XMLfeed)
    {
      livescores_xmlevents = livescores_XMLfeed.getElementsByTagName('Event');
      for(var i=0;i<livescores_xmlevents.length;i++)
      {
        var eventtime = fixdate(livescores_xmlevents[i].getAttribute('start'));
        if(livescores_xmlevents[i].getAttribute('state')=='notstarted' && eventtime>livescores_serverTime)
        {
          nexttrigger = eventtime.getTime() - livescores_serverTime.getTime();
          livescores_xmlfeedTimer = setTimeout("livescores_getXMLfeed()", nexttrigger);
          return;
        }
      }
    }
    livescores_xmlfeedTimer = setTimeout("livescores_getXMLfeed()", 60000);
  }

  function livescores_setClientTime()
  {
    livescores_clientTime = new Date();
  }

  function livescores_run()
  {
    livescores_XMLfeed = null;
    livescores_serverTime = null;
    livescores_xmlfeedTimer = setTimeout('livescores_getXMLfeed()', 100);
  }


  function livescores_start(sport, ls_status)
  {
    if (ls_status !== true)
      ls_status = false;
    if (ls_status)
    {
      if (typeof sport != "undefined" && (sport == false || sport == null))
        divsShowOnly('livescores_content','livescores_content', false);
      else
        divsShowOnly('livescores_content','livescores_content', true);
    }
    else if (!ls_status)
    {
      if (typeof sport == "undefined")
        setActive('livescores_content','livescores_content');
      else if (typeof sport !== "undefined" && sport == null)
        setActive('true','livescores_run');
    }

    if ((typeof sport !== "undefined" && sport == null) ||
        (typeof livescores_XMLfeed !== "undefined" && livescores_XMLfeed !== null))
    {
      sport = livescores_getsport(sport);
      if (livescores_XMLfeed != null)
        livescores_selectTab(sport);
      else
        ajaxCall('ajax_com/livescores.php','val=getLiveScoresTemplates', 'livescores_responseTemplates', sport);
    }
    else
    {
      sport = livescores_getsport(sport);
      //livescores_selectTab(sport);
      document.getElementById("tab_content").style.display = "block";
    }
  }


  function livescores_showhidedrawer(mid)
  {
    if (typeof mid == "undefined")
      return;
    if (livescores_active_drawer != mid)
      livescores_active_drawer = mid;
    else
      livescores_active_drawer = null;
    divsShowOnly('drawer_actions_'+mid, 'drawer_actions_');
  }


  function livescores_getsport(sport)
  {
    if (typeof sport == "undefined" || sport == null || sport == false)
      sport = livescores_active;
    if (typeof sport == "undefined" || sport == null || sport == false)
      sport = "mz"+ajaxSport;
    return sport;
  }


  function livescores_responseTemplates(readyState, response, responseParameter) {
    if (readyState == 4 && response.indexOf("livescores_templates") == 0) {
      eval(response);
      if (typeof livescores_templates == "object") {
        livescores_selectTab(responseParameter);
        livescores_run();
      }
    }
  }

  function livescores_selectTab(type)
  {
    if (typeof livescores_templates == "object" && typeof livescores_templates[type] != "undefined")
    {
      if (livescores_active && livescores_active != type)
        livescores_activateTab(livescores_active);
      if (livescores_active != type)
      {
        livescores_active = type;
        livescores_activateTab(type);
        livescores_setupTemplateByType(type);
      }
      livescores_active = type;
    }
    else
    {
      if (livescores_active && livescores_active != type)
        livescores_activateTab(livescores_active);
      if (livescores_active != type)
        livescores_activateTab(type);
      livescores_active = type;
    }
  }


  function livescores_activateTab(tabname)
  {
    var obj = document.getElementById("tab_"+tabname);
    if (!obj)
      return;
    if (obj.src.indexOf("_unselected.gif") > 0)
    {
      setActive('livescores_content_'+tabname,'livescores_content');
      obj.src = obj.src.replace("_unselected.gif", "_selected.gif");
    }
    else if(obj.src.indexOf("_selected.gif") > 0)
    {
      obj.src = obj.src.replace("_selected.gif", "_unselected.gif");
    }
  }


  function livescores_setupTemplateByType(type)
  {
    var content = livescores_getContentByType(type);  
    if (content != "")
      layer_write( "tab_content", content );
    else if (livescores_XMLfeed == null)
      layer_write( "tab_content", "");
    else
      layer_write( "tab_content", doTheReplace( livescores_templates[livescores_active] ) );
    setTimeout("document.getElementById('tab_content').style.display = 'block';", 100);
  }

  function livescores_getContentByType(sport)
  {
    if (!livescores_displaylist)
      return "";
    var eventtemp = "";
    var mzsoccer = false;
    var mzhockey = false;
    for (var e=0 ; e<livescores_displaylist[sport].length ; e++)
    {
      actiontemp = "";
      event_id  = livescores_displaylist[sport][e];
      eventObj  = livescores_eventlist[ event_id ];
      if (typeof eventObj == "undefined" || !eventObj || eventObj === null)
        continue;
      event_mid = event_id.substr(3);
      event_hometeam_score = "X";
      event_awayteam_score = "X";
      event_state = "default";
      event_css_display = "none";
      if (event_id === livescores_active_drawer)
        event_css_display = "block";
      var changesport = eventObj.game.substr(2);
      event_threed = "";
      if (eventObj.start != undefined)
        event_lasteventtime = eventObj.start.getHours() +":"+ ((eventObj.start.getMinutes() < 10) ? "0" : "") + eventObj.start.getMinutes();
      else
      {
        if (!eval(eventObj.game))
        {
          event_state = eventObj.game;
          eval(eventObj.game+" = true");
        }
        event_threed = livescores_templates['threed_'+eventObj.game];
        event_lasteventtime = (eventObj.actions.length > 0) ? eventObj.actions[0].eventtime+"'" : "";
        event_hometeam_score = (eventObj.actions.length > 0) ? eventObj.actions[0].homescore : 0;
        event_awayteam_score = (eventObj.actions.length > 0) ? eventObj.actions[0].awayscore : 0;
        for (var a=0 ; a<eventObj.actions.length ; a++)
        {
          actionObj = eventObj.actions[a];
          if (actionObj.type == "goal")
            actiontemp += doTheReplace(livescores_templates['action_'+eventObj.game]);
          if (actionObj.type == "end")
            event_lasteventtime = livescores_templates['action_end'];
        }
      }
      if (actiontemp != "")
        actiontemp += "<tr><td class=padding_bottom_4></td></tr>";
      actiontemp = "<table border=0 cellspacing=0 cellpadding=0 width=100%>"+actiontemp+"</table>";
      event_threed = doTheReplace(event_threed);
      eventtemp += doTheReplace(livescores_templates['drawer_'+eventObj.game]);
    }
    if (eventtemp == "")
      return "";
    else
      return "<table border=0 cellspacing=0 cellpadding=0 width=100%>"+eventtemp+"</table>";
  }

