// ===================================================================
// Class for showing paged list of filtered Parol.
//

function FirstStatusView(aModel, aController, numberNoneElementID, numberFewElementID, numberFewEvalElementID)
{
  try {
    PageView.call(this, "FirstStatusList", "", "", "", "selectedParol");

    this._Model = aModel;
    this._Controller = aController;
    this._prefixForID = "firstStatusLine";
    this._PageSize = 50000; // show one page only (bible has ~ 30000 verses)
    this._numberNoneElementID = numberNoneElementID ? document.getElementById(numberNoneElementID) : null;
    this._numberFewElementID = numberFewElementID ? document.getElementById(numberFewElementID) : null;
    this._numberFewEvalElementID = numberFewEvalElementID ? document.getElementById(numberFewEvalElementID) : null;
  }
  catch (e) {
    alert("FirstStatusView: " + e);
  }
}

FirstStatusView.prototype = new PageView();
FirstStatusView.prototype.constructor = FirstStatusView;

FirstStatusView.prototype.toString = function()
{
  return "FirstStatusView";
}

FirstStatusView.prototype.getCurParol = function()
{
  return this.getCurCollectionItem();
}

//// set, no visual update
//FirstStatusView.prototype.setFilteredParol = function()
//{
//  this.setCollection(this._Model.getFilteredParol());
//}


// set index, no visual update
//FirstStatusView.prototype.gotoParolQual= function(parolQual)
//{
//  var aSecondPairSet = this.getCollection();
//  var index = null;
//  for (var i = 0, len = aSecondPairSet.length; i < len; ++i) {
//    var aPair = aSecondPairSet[i];
//    if (aPair.getSecond() == parolQual) {
//      index = i;
//      break;
//    }
//  }
//  this.setCurIndex(index);// handles null
//}

FirstStatusView.prototype.findParolIndex = function(aParol)
{
  for (var i = 0, Coll = this.getCollection(), len = Coll.length; i < len; ++i) {
    var curParol = Coll[i];
    if (aParol == curParol) {
      return i;
    }
  }
  return null;
}

// --- overrides ---

FirstStatusView.prototype.notifyUpdatePage = function()
{
  this._Controller.selectFirstStatusLine(this.getCurIndex() - this.getPageStartIndex(), false);// no SecondView update
}

FirstStatusView.prototype.getElementForLineIndex = function(lineIndex)
{
  return document.getElementById(this._prefixForID + lineIndex);
}

FirstStatusView.prototype._computeEmptyPage = function()
{
  return "<p>- Keine Erstspr\u00fcche verf\u00fcgbar -</p>";
}

FirstStatusView.prototype._computePageHeader = function()
{
  return "<table class='parolTable'>"
    + "<colgroup>"
    + "<col class='fsSecond'/>"
    + "<col class='fsEval'/>"
    + "<col class='fsNo'/>"
    + "<col class='parolRef'/>"
    + "<col class='parolText'/>"
    + "</colgroup>"
    + "<tr class='fsHeader'>"
    + "<td title='Anzahl Zweitspr\u00fcche'>Zweit</td>" // [statusTitle]
    + "<td title='Anzahl Bewertungen'>Bew.</td>" // [evalTitle]
    + "<td title='Nummer / Serie'>Nr.</td>"
    + "<td>Bibelstelle</td>"
    + "<td>Spruchtext</td>"
    + "</tr>"
    ;
}

// computePageLines:
// Optimization: overwrite PageView.computePageLines, 
// so that we can put common code outside the for loop
// Hardly a difference in FF 3.5 (few seconds),
// IE6 takes 2min instead of 1min???
FirstStatusView.prototype.computePageLines = function(start, endIndex)
{
  var html = "";
  var coll = this.getCollection();
  if (!coll.length) {
    return "";
  }

  var aParolFormatter = new ParolFormatter(this._Model);
  var aPairSet = this._Model.getPairSet();
  var numSeries = this._Model.getNumSeries();

  var numberNone = 0;
  var numberFew = 0;
  var numberFewEval = 0;
  var statusTitle = "Anzahl Zweitspr\u00fcche"; // [statusTitle]
  var evalTitle = "Anzahl Bewertungen"; // [evalTitle]

//TODO low 2010-03-27 HS - optimize: 1. loop over all pairs in aPairSet.findSecondPerFirst(), 2. loop over all first in FirstStatusView
  var SecondPerFirst = aPairSet.findSecondPerFirst();

  for (var index = start; index < endIndex; ++index) {
    var lineIndex = index;
    var aParol = coll[index];
    var parolQual = aParol.getID();
  
    var noTitle = "Serie " + ((index % numSeries) + 1);

    // second
    var SECOND = SecondPerFirst[parolQual] || [];
    var nSecond = SECOND.length;
    var statusClass = "";
    if (!nSecond) {
      statusClass = " noPairs";
      ++numberNone;
    }
    else if (nSecond < 3) {
      statusClass = " fewPairs";
      ++numberFew;
    }

    // eval
    var evalStatus = 0;
    for (var i = 0, sLen = SECOND.length; i < sLen; ++i) {
      var aPair = SECOND[i];
      evalStatus += aPair.getYes() + aPair.getMaybe() + aPair.getNo();
    }
    var evalClass = "";
    if (evalStatus < 10) {
      evalClass = " fewEval";
      ++numberFewEval;
    }

    // text
    var text = "";
    var il = aParol.getHtmlIL();
    if (il) {
      text = "<em>" + il + "</em> ";
    }
    text += aParol.getHtmlL().replace(/\s+/g, " ");
    var ref = aParol.getSL();

    // title, info, img
    var title = "";
    var author = aParol.getAuthor();
    if (author != "Admin") {
      title = author + " " + aParol.getUpdated().substring(0, 10);
    }
    var Info = aParolFormatter.getInfo(aParol) || [100];
    var stateImg = "";
    if (Info[0] != 100) {
      title += " " + Info[2];
      stateImg = " <img src='images/" + Info[1] + "' alt='' />";
    }
    if (Info[3]) {
      title += " (" + parolQual + ")";
      ref += " (" + Info[3] + ")";
    }
    
    // create HTML
    var onclick = "";
    html += "<tr class='parolRow' id='" + this._prefixForID + lineIndex + "' "
      // pass 'true' for SecondView update
      + "onclick=\"document._Controller.selectFirstStatusLine(" + lineIndex + ", true); return false;\""
      + "ondblclick=\"document._Controller.gotoFirstStatusParol(); return false;\""
      + ">"
      + "<td class='fsSecond" + statusClass + "' title='" + statusTitle + "'>" + nSecond + "</td>"
      + "<td class='fsEval" + evalClass + "' title='" + evalTitle + "'>" + evalStatus + "</td>"
      + "<td class='fsNo' title='" + noTitle + "'>" + (index+1) + "</td>"
      + "<td class='parolRef' title='" + title + "'>" + ref + stateImg + "</td>"
      + "<td class='parolText'>" + text + "</td>"
      + "</tr>\n";
  }
  if (this._numberNoneElementID) {
    this._numberNoneElementID.innerHTML = numberNone;
  }
  if (this._numberFewElementID) {
    this._numberFewElementID.innerHTML = numberFew;
  }
  if (this._numberFewEvalElementID) {
    this._numberFewEvalElementID.innerHTML = numberFewEval;
  }

  return html;
}

FirstStatusView.prototype._computePageFooter = function()
{
  return "</table>";
}


