/******************** ArticleList Class ********************/
function ArticleList(id, limit, offset, allowNavigation)
{
  //document.getElementById("debugTA").value += "\nArticleList class constructor called.";

  this.containerObject = null;
  this.retrieverObject = null;
  this.id = id;
  this.limit = limit;
  this.offset = offset;
  if ((allowNavigation === "") || (typeof allowNavigation == "undefined"))
  {
    this.allowNavigation = true;
  }
  else
  {
    this.allowNavigation = allowNavigation;
  }
  this.status = "initializing";  // Possible values: "initializing", "loading", "loaded"
  this.artArr = new Array();
  this.artIDArr = new Array();
  this.artPos = -1;
  this.activeArticle = -1;
}

ArticleList.articleArray = new Array();

ArticleList.nextOffset = null;

ArticleList.prevOffset = null;

ArticleList.prototype.changeCategory = function(id)
{
  //document.getElementById("debugTA").value += "\nArticleList.changeCategory() called.";
  //document.getElementById("debugTA").value += "\n id="+id;

  this.id = id;

  this.retrieveData(this.offset);
};

ArticleList.prototype.dataRetrieved = function(artArray, offset, prevOffset, nextOffset)
{
  //document.getElementById("debugTA").value += "\nArticleList.dataRetrieved() called.";
  //document.getElementById("debugTA").value += "\n artArray="+artArray+"\n offset="+offset+", prevOffset="+prevOffset+", nextOffset="+nextOffset;
  
  this.offset = offset;
  var numArts = artArray.length;
  var displayStr = '<table width="345" cellpadding="0" cellspacing="0" border="0">';

  for (var i=0; i < numArts; i++)
  {
    this.artArr[i] = artArray[i];
    this.artIDArr["ID_"+this.artArr[i].id] = i;

    displayStr += '<tr id="alTR_' + this.artArr[i].id + '" onclick="articleListObj.jump(' + i + ', false);" onmouseover="articleListObj.hover_hl(' + this.artArr[i].id + ');" onmouseout="articleListObj.hover_dl(' + this.artArr[i].id + ');" class="Article" style="cursor:pointer;" title="Play video">' +
                    '<td align="left" valign="top"><img src="http://cdn.dayport.com/olnimg/img/1x1.gif" width="1" height="1" border="0" /><br />' +
                      '<table width="100%" cellpadding="0" cellspacing="0" border="0" style="background-color:#000000">' +
                        '<tr>' +
                          '<td id="alTD_number_' + this.artArr[i].id + '" width="24" rowspan="3" align="center" valign="bottom" class="Article_number">' +
                            zeroPad((i + 1)) +
                          '</td>' +
                          '<td width="321" colspan="3" align="left" valign="top"><table width="100%" cellpadding="0" cellspacing="0" border="0">' +
                              '<tr>' +
                                '<td id="alTD_name_' + this.artArr[i].id + '" width="99%" align="left" valign="top" class="Article_name"><span title="' +
                                  unescape(this.artArr[i].name) + '">' +
                                  player_truncateString(unescape(this.artArr[i].name), 25) +
                                  '</span></td>' +
                                '<td width="1%" align="right" valign="middle" class="rightTime" nowrap>(' +
                                  convertFromSec(this.artArr[i].durationSeconds, 8, true) +
                                  ')<img src="http://cdn.dayport.com/olnimg/img/1x1.gif" width="6" height="1" border="0" /><a href="#" onclick="player_email(' + this.artArr[i].id + ');if (window.event){ event.cancelBubble = true; } else{ event.stopPropagation(); }; return false;" title="E-mail"><img src="http://cdn.dayport.com/olnimg/img/player/mail_red.gif" width="20" height="12" border="0" align="absmiddle" /></a></td>' +
                              '</tr>' +
                            '</table></td>' +
                        '</tr>' +
                        '<tr>' +
                          '<td width="77" align="left" valign="top">';

    if (this.artArr[i].previewImage != "")
    {
      displayStr +=         '<img id="alIMG_' + this.artArr[i].id + '" src="' + this.artArr[i].previewImage + '" width="77" height="59" border="0" class="Article" />';
    }
    else if (player_defaultPreviewImg != null)
    {
      displayStr +=         '<img id="alIMG_' + this.artArr[i].id + '" src="' + player_defaultPreviewImg + '" width="77" height="59" border="0" class="Article" />';
    }
    else
    {
      displayStr +=         '<img id="alIMG_' + this.artArr[i].id + '" src="http://cdn.dayport.com/olnimg/img/1x1.gif" width="77" height="59" border="0" class="Article" />';
    }

    displayStr +=         '</td>' +
                          '<td width="10"><img src="http://cdn.dayport.com/olnimg/img/1x1.gif" width="10" height="1" border="0" /></td>' +
                          '<td id="alTD_intro_' + this.artArr[i].id + '" width="234" align="left" valign="top" class="Article_intro"><p>' +
                            unescape(this.artArr[i].intro) +
                            '</p></td>' +
                        '</tr>' +
                        '<tr>' +
                          '<td height="4" colspan="3"><img src="http://cdn.dayport.com/olnimg/img/1x1.gif" width="1" height="4" border="0" /></td>' +
                        '</tr>' +
                      '</table>' +
                      '<img src="http://cdn.dayport.com/olnimg/img/1x1.gif" width="1" height="1" border="0" /></td>' +
                  '</tr>';
  }

  if (this.allowNavigation && ((prevOffset != null) || (nextOffset != null)))
  {
    displayStr += '<tr><td height="10" align="left" valign="top"><img src="http://cdn.dayport.com/olnimg/img/1x1.gif" width="1" height="10" border="0" /></td></tr>' +
                  '<tr><td align="right" valign="middle" class="playerText_navigation">';

    if (prevOffset != null)
    {
      displayStr += '<a href="#" onclick="articleListObj.retrieveData(' + prevOffset + '); return false;" class="playerText_navigation" title="Previous videos"><< BACK</a>';

      if (nextOffset != null)
      {
        displayStr += ' | ';
      }
    }

    if (nextOffset != null)
    {
      displayStr += '<a href="#" onclick="articleListObj.retrieveData(' + nextOffset + '); return false;" class="playerText_navigation" title="Next videos">NEXT ' + this.limit + ' >></a>';
    }

    displayStr += '</td></tr>';
  }

  displayStr += '</table>';

  if ((navigator.userAgent.toLowerCase().indexOf("mac") != -1) && (navigator.appVersion.toLowerCase().indexOf("msie") != -1))
  {
    // IE on Mac
    setTimeout("articleListObj.containerObject.innerHTML = unescape('" + escape(displayStr) + "');", 10);
  }
  else
  {
    this.containerObject.innerHTML = displayStr;
  }
  this.status = "loaded";

  // See if a listed article is being played
  if ((typeof dpVidObj != "undefined") && (typeof this.artIDArr["ID_"+dpVidObj.video.articleID] != "undefined"))
  {
    this.jump(this.artIDArr["ID_"+dpVidObj.video.articleID], false);
  }
};

ArticleList.prototype.dl = function()
{
  //document.getElementById("debugTA").value += "\nArticleList.dl() called.";

  if (this.activeArticle != -1)
  {
    var altrElem = document.getElementById("alTR_"+this.activeArticle);
    if (altrElem)
    {
      // Reset row class
      altrElem.className = "Article";

      var altd_nameElem = document.getElementById("alTD_name_"+this.activeArticle);
      if (altd_nameElem)
      {
        // Reset name class
        altd_nameElem.className = "Article_name";
      }

      var altd_numberElem = document.getElementById("alTD_number_"+this.activeArticle);
      if (altd_numberElem)
      {
        // Reset number class
        altd_numberElem.className = "Article_number";
      }

      var alimgElem = document.getElementById("alIMG_"+this.activeArticle);
      if (alimgElem)
      {
        // Reset image class
        alimgElem.className = "Article";
      }

      var altd_introElem = document.getElementById("alTD_intro_"+this.activeArticle);
      if (altd_introElem)
      {
        // Reset intro class
        altd_introElem.className = "Article_intro";
      }
    }

    this.activeArticle = -1;
  }
};

ArticleList.prototype.hl = function(artID)
{
  //document.getElementById("debugTA").value += "\nArticleList.hl() called.";

  var altrElem = document.getElementById("alTR_"+artID);
  if (altrElem)
  {
    // Set row class
    altrElem.className = "ArticleSelected";

    var altd_nameElem = document.getElementById("alTD_name_"+artID);
    if (altd_nameElem)
    {
      // Set name class
      altd_nameElem.className = "ArticleSelected_name";
    }

    var altd_numberElem = document.getElementById("alTD_number_"+artID);
    if (altd_numberElem)
    {
      // Set number class
      altd_numberElem.className = "ArticleSelected_number";
    }

    var alimgElem = document.getElementById("alIMG_"+artID);
    if (alimgElem)
    {
      // Set image class
      alimgElem.className = "ArticleSelected";
    }

    var altd_introElem = document.getElementById("alTD_intro_"+artID);
    if (altd_introElem)
    {
      // Set intro class
      altd_introElem.className = "ArticleSelected_intro";
    }    
  }
};

ArticleList.prototype.hover_dl = function(artID)
{
  //document.getElementById("debugTA").value += "\nArticleList.hover_dl() called.";

  var isActive = false;
  if (this.activeArticle == artID)
  {
    isActive = true;
  }

  var altrElem = document.getElementById("alTR_"+artID);
  if (altrElem)
  {
    // Set row class
    if (!isActive)
    {
      altrElem.className = "Article";
    }
    else
    {
      altrElem.className = "ArticleSelected";
    }

    var altd_nameElem = document.getElementById("alTD_name_"+artID);
    if (altd_nameElem)
    {
      // Set name class
      if (!isActive)
      {
        altd_nameElem.className = "Article_name";
      }
      else
      {
        altd_nameElem.className = "ArticleSelected_name";
      }
    }

    var altd_numberElem = document.getElementById("alTD_number_"+artID);
    if (altd_numberElem)
    {
      // Set number class
      if (!isActive)
      {
        altd_numberElem.className = "Article_number";
      }
      else
      {
        altd_numberElem.className = "ArticleSelected_number";
      }
    }

    var alimgElem = document.getElementById("alIMG_"+artID);
    if (alimgElem)
    {
      // Set image class
      if (!isActive)
      {
        alimgElem.className = "Article";
      }
      else
      {
        alimgElem.className = "ArticleSelected";
      }
    }

    var altd_introElem = document.getElementById("alTD_intro_"+artID);
    if (altd_introElem)
    {
      // Set intro class
      if (!isActive)
      {
        altd_introElem.className = "Article_intro";
      }
      else
      {
        altd_introElem.className = "ArticleSelected_intro";
      }
    }    
  }
};

ArticleList.prototype.hover_hl = function(artID)
{
  //document.getElementById("debugTA").value += "\nArticleList.hover_hl() called.";

  var altrElem = document.getElementById("alTR_"+artID);
  if (altrElem)
  {
    // Set row class
    altrElem.className = "ArticleSelected";

    var altd_nameElem = document.getElementById("alTD_name_"+artID);
    if (altd_nameElem)
    {
      // Set name class
      altd_nameElem.className = "ArticleSelected_name";
    }

    var altd_numberElem = document.getElementById("alTD_number_"+artID);
    if (altd_numberElem)
    {
      // Set number class
      altd_numberElem.className = "ArticleSelected_number";
    }

    var alimgElem = document.getElementById("alIMG_"+artID);
    if (alimgElem)
    {
      // Set image class
      alimgElem.className = "ArticleSelected";
    }

    var altd_introElem = document.getElementById("alTD_intro_"+artID);
    if (altd_introElem)
    {
      // Set intro class
      altd_introElem.className = "ArticleSelected_intro";
    }    
  }
};

// Jump to specified article in list
ArticleList.prototype.jump = function(aPos, queueAd)
{
  //document.getElementById("debugTA").value += "\nArticleList.jump() called.";

  if (!pageLoaded)
  {
    alert("Please allow the player to finish loading.");
    return false;
  }

  if (this.status != "loaded")
  {
    //alert("Please allow the video list to finish loading.");
    return false;
  }

  this.artPos = aPos;
  this.select(this.artArr[this.artPos].id, queueAd);

  return true;
};

ArticleList.prototype.resetData = function()
{
  //document.getElementById("debugTA").value += "\nArticleList.resetData() called.";

  this.retrieverObject.innerHTML = "";
  this.artPos = -1;
  this.activeArticle = -1;
  this.artArr.length = 0;
  ArticleList.articleArray.length = 0;

  // Clear any references by article ID
  for (var prop in this.artIDArr)
  {
    delete this.artIDArr[prop];
  }
};

ArticleList.prototype.retrieveData = function(offset)
{
  //document.getElementById("debugTA").value += "\nArticleList.retrieveData() called.";

  this.status = "loading";
  this.resetData();
  this.containerObject.innerHTML = '<table width="345" cellpadding="0" cellspacing="0" border="0">' +
                                     '<tr>' +
                                       '<td align="center" valign="top" class="playerText">Loading...</td>' +
                                     '</tr>' +
                                   '</table>';
  if ((navigator.userAgent.toLowerCase().indexOf("mac") != -1) && (navigator.appVersion.toLowerCase().indexOf("msie") != -1))
  {
    // IE on Mac
    setTimeout("articleListObj.retrieverObject.innerHTML = '_<scr' + 'ipt id=\"videoArchive_retrieverJS\" language=\"JavaScript\" type=\"text/javascript\" src=\"http://www.olntv.com/nw/article/archive/" + this.id + "/?tf=broadband_player_articlelist.tpl&Limit=" + this.limit + "&Offset=" + offset + "&UserDef=true&mt=1\" defer></scr' + 'ipt>';", 100);
  }
  else if ((navigator.userAgent.toLowerCase().indexOf("mac") != -1) && (navigator.userAgent.toLowerCase().indexOf("safari") != -1))
  {
    // Safari on Mac
    var scrObj = document.createElement("script");
    scrObj.id = "videoArchive_retrieverJS";
    scrObj.defer = true;
    scrObj.src = "http://www.olntv.com/nw/article/archive/" + this.id + "/?tf=broadband_player_articlelist.tpl&Limit=" + this.limit + "&Offset=" + offset + "&UserDef=true&mt=1";
    this.retrieverObject.appendChild(scrObj);
  }
  else
  {
    this.retrieverObject.innerHTML = '_<scr' + 'ipt id="videoArchive_retrieverJS" language="JavaScript" type="text/javascript" defer></scr' + 'ipt>';
    var target = this;
    setTimeout(function()
    {
      document.getElementById("videoArchive_retrieverJS").src = "http://www.olntv.com/nw/article/archive/" + target.id + "/?tf=broadband_player_articlelist.tpl&Limit=" + target.limit + "&Offset=" + offset + "&UserDef=true&mt=1";
    }, 10);
  }
};

ArticleList.prototype.select = function(artID, queueAd)
{
  //document.getElementById("debugTA").value += "\nArticleList.select() called.";

  this.dl();
  if (typeof articleSearchObj != "undefined")
  {
    // Remove any highlighting for ArticleSearch class object
    articleSearchObj.dl();
  }

  if (dpVidObj.video.articleID != artID)
  {
    if (queueAd)
    {
      // Have an advertisement played before this video
      dpVidObj.video.queueAd();
    }

    // Play selected article
    dpVidObj.video.setSource("article", artID);
  }
  this.activeArticle = artID;
  this.hl(artID);
  // See if the ArticleSearch class object has the article listed
  if ((typeof articleSearchObj != "undefined") && (typeof articleSearchObj.artIDArr["ID_"+artID] != "undefined"))
  {
    // Set activeArticle property and add highlighting for ArticleSearch class object
    articleSearchObj.activeArticle = artID;
    articleSearchObj.hl(artID);
  }  

  return true;
};

ArticleList.prototype.setObjects = function(containerObj, retrieverObj)
{
  //document.getElementById("debugTA").value += "\nArticleList.setObjects() called.";

  this.containerObject = containerObj;
  this.retrieverObject = retrieverObj;

  if (this.status == "initializing")
  {
    this.retrieveData(this.offset);
  }
};

ArticleList.prototype.toString = function()
{
  //document.getElementById("debugTA").value += "\nArticleList.toString() called.";

  return "[object ArticleList]";
};
/******************** End of ArticleList Class ********************/