function toggleLinksForDomain(id)
{
  var plus = $('duid-' + id);
  if (plus.src.indexOf('images/minus') != -1)
  {
    $$('.duid-' + id).map(Element.hide);
    plus.src = plus.src.replace('images/minus', 'images/plus');
  }
  else
  {
    $$('.duid-' + id).map(Element.show);
    plus.src = plus.src.replace('images/plus', 'images/minus');
  }
}


function setAjaxRefresh(url, timeout)
{
  // Remove <meta> refresh
  metas = $$('meta');
  for (var i = 0; i < metas.length; i++)
  {
    if (metas[i].httpEquiv == 'Refresh') metas[i].remove();
  }

  // Set ajax refresh
  setTimeout(function()
  {
    new Ajax.Updater('body', url, {
      method: 'get',
      evalScripts: true,
      insertion: Insertion.Bottom,
      onComplete: function()
      {
        old_content = $('body').firstChild;
        while (old_content.nodeName != 'DIV')
          old_content = old_content.nextSibling;
        new_content = $('body').lastChild;
        while (new_content.nodeName != 'DIV')
          new_content = new_content.previousSibling;
        old_content.hide();
        new_content.show();
        old_content.remove();
      }
    });
  }, timeout * 1000);
}


function renumberRows(tbody, start, markodd)
{
  tbody = $(tbody);
  k = start;
  rows = tbody.childElements();
  for (var i = 0; i < rows.length; i++)
  {
    row = rows[i];
    row.firstDescendant().innerHTML = k++ + '.';
    if (markodd)
    {
      if (k % 2)
        row.addClassName('odd');
      else
        row.removeClassName('odd');
    }
  }
  return k;
}


function setDomainRefresh1(id, timeout)
{
  setTimeout(function()
  {
    new Ajax.Request(script_root + '/ajax/viewdomain1/' + id, {
      method: 'get',
      onSuccess: function(transport)
      {
        $('results').innerHTML = transport.responseText;
        $('stage1').src = url_root + '/images/ok.png';
        $('stage1-text').setStyle({
          'fontWeight': 'normal'
        });
        $('stage2').src = url_root + '/images/working.gif';
        $('stage2-text').setStyle({
          'fontWeight': 'bold'
        });
        unchecked = new Array();
        rows = $$('.backlinks > tbody > tr');
        for (i = 0; i < rows.length; i++)
        {
          if (rows[i].id)
            unchecked.push(parseInt(rows[i].id.replace('bl', '')));
        }
        setDomainRefresh2(id, unchecked, timeout);
      },
      onFailure: function(transport)
      {
        setDomainRefresh1(id, timeout);
      }
    });
  }, timeout * 1000);
}


function setDomainRefresh2(domain_id, unchecked, timeout)
{
  setTimeout(function()
  {
    new Ajax.Request(script_root + '/ajax/viewdomain2/' + domain_id, {
      method: 'post',  // technically this should be a GET but URL may end up overly long
      parameters: { 'ids': unchecked.join(',') },
      onSuccess: function(transport)
      {
        var response = transport.responseText.evalJSON();

        for (var name in response[0])
        {
          var elem = $('summary-' + name);
          if (elem) elem.innerHTML = response[0][name];
        }
        var percentage = '0.0%';
        if (parseInt(response[0]['retrieved']))
          percentage = (parseFloat(response[0]['checked']) / parseFloat(response[0]['retrieved']) * 100.0).toFixed(1) + '%';
        $('stage2-progress').innerHTML = ': ' + response[0]['checked'] + '&nbsp;/&nbsp;' + response[0]['retrieved'] +
                                         ' (' + percentage + ')';

        for (var i = 1; i < response.length; i++)
        {
          var data = response[i];
          var id = data['id'];
          var row = $('bl' + id);
          row.hide();
          row.removeClassName('backlinks-parent');
          $$('#bl' + id + ' > td.backlinks-page')[0].innerHTML =
            '<a class="domain" target="_blank" href="javascript:window.location.href=\'http://' + data['url'] + '\'">' + data['url_disp'] + '</a>' +
            '<br><span class="title">' + data['title'] + '</span>';
          switch (data['rate'])
          {
            case 'realgood':
            {
              $('list-links-realgood').appendChild(row);
              row.addClassName('good-bg');
              $$('#bl' + id + ' > td.backlinks-page')[0].innerHTML =
                '<a class="domain good" target="_blank" href="javascript:window.location.href=\'http://' + data['url'] + '\'">' + data['url_disp'] + '</a>' +
                '<br><span class="title">' + data['title'] + '</span>';
              $$('#bl' + id + ' > td.backlinks-target')[0].innerHTML =
                '<a class="domain" target="_blank" href="javascript:window.location.href=\'' + data['target'] + '\'">' + data['target_disp'] + '</a>'
              $$('#bl' + id + ' > td.backlinks-anchor')[0].innerHTML = data['anchor'];
              $$('#bl' + id + ' > td.backlinks-pr')[0].innerHTML = '<span class="unknown">??</span>';
              $$('#bl' + id + ' > td.backlinks-state')[0].innerHTML = '<img title="OK" src="' + url_root + '/images/ok.png">';
              $$('#bl' + id + ' > td.backlinks-rate')[0].innerHTML = '<img title="' + data['reason'] + '" src="' + url_root + '/images/good.png">';
            }
            break;

            case 'good':
            {
              $('list-links-good').appendChild(row);
              row.addClassName('good-bg');
              $$('#bl' + id + ' > td.backlinks-target')[0].innerHTML =
                '<a class="domain" target="_blank" href="javascript:window.location.href=\'' + data['target'] + '\'">' + data['target_disp'] + '</a>'
              $$('#bl' + id + ' > td.backlinks-anchor')[0].innerHTML = data['anchor'];
              $$('#bl' + id + ' > td.backlinks-pr')[0].innerHTML = '<span class="unknown">??</span>';
              $$('#bl' + id + ' > td.backlinks-state')[0].innerHTML = '<img title="OK" src="' + url_root + '/images/ok.png">';
              $$('#bl' + id + ' > td.backlinks-rate')[0].innerHTML = '<img title="' + data['reason'] + '" src="' + url_root + '/images/good.png">';
            }
            break;

            case 'average':
            {
              $('list-links-average').appendChild(row);
              row.addClassName('average-bg');
              $$('#bl' + id + ' > td.backlinks-target')[0].innerHTML =
                '<a class="domain" target="_blank" href="javascript:window.location.href=\'' + data['target'] + '\'">' + data['target_disp'] + '</a>'
              $$('#bl' + id + ' > td.backlinks-anchor')[0].innerHTML = data['anchor'];
              $$('#bl' + id + ' > td.backlinks-pr')[0].innerHTML = '<span class="unknown">??</span>';
              $$('#bl' + id + ' > td.backlinks-state')[0].innerHTML = '<img title="OK" src="' + url_root + '/images/ok.png">';
              $$('#bl' + id + ' > td.backlinks-rate')[0].innerHTML = '';
            }
            break;

            case 'bad':
            {
              $('list-links-bad').appendChild(row);
              row.addClassName('bad-bg');
              $$('#bl' + id + ' > td.backlinks-target')[0].innerHTML =
                '<a class="domain" target="_blank" href="javascript:window.location.href=\'' + data['target'] + '\'">' + data['target_disp'] + '</a>'
              $$('#bl' + id + ' > td.backlinks-anchor')[0].innerHTML = data['anchor'];
              $$('#bl' + id + ' > td.backlinks-pr')[0].innerHTML = '<span class="unknown">??</span>';
              $$('#bl' + id + ' > td.backlinks-state')[0].innerHTML = '<img title="OK" src="' + url_root + '/images/ok.png">';
              $$('#bl' + id + ' > td.backlinks-rate')[0].innerHTML = '<img title="' + data['reason'] + '" src="' + url_root + '/images/bad.png">';
            }
            break;

            case 'dead':
            {
              $('list-links-dead').appendChild(row);
              row.addClassName('dead-bg');
              $$('#bl' + id + ' > td.backlinks-target')[0].innerHTML = '&mdash;';
              $$('#bl' + id + ' > td.backlinks-anchor')[0].innerHTML = '&mdash;';
              $$('#bl' + id + ' > td.backlinks-pr')[0].innerHTML = '<span class="unknown">??</span>';
              $$('#bl' + id + ' > td.backlinks-state')[0].innerHTML = '<img title="Link gone" src="' + url_root + '/images/dead.png">';
              $$('#bl' + id + ' > td.backlinks-rate')[0].innerHTML = '&mdash;';
            }
            break;

            case 'missing':
            {
              $('list-links-missing').appendChild(row);
              row.addClassName('dead-bg');
              $$('#bl' + id + ' > td.backlinks-target')[0].innerHTML = '&mdash;';
              $$('#bl' + id + ' > td.backlinks-anchor')[0].innerHTML = '&mdash;';
              $$('#bl' + id + ' > td.backlinks-pr')[0].innerHTML = '<span class="unknown">??</span>';
              $$('#bl' + id + ' > td.backlinks-state')[0].innerHTML = '<img title="404" src="' + url_root + '/images/missing.png">';
              $$('#bl' + id + ' > td.backlinks-rate')[0].innerHTML = '&mdash;';
            }
            break;
          }

          row.show();
          unchecked.splice(unchecked.indexOf(parseInt(id)), 1);
        }
        i = 1;
        i = renumberRows('list-links-realgood', i, true);
        i = renumberRows('list-links-good', i, true);
        i = renumberRows('list-links-average', i, true);
        i = renumberRows('list-links-bad', i, true);
        i = renumberRows('list-links-dead', i, true);
        i = renumberRows('list-links-missing', i, true);
        i = renumberRows('list-links-multiple', i, false);
        if (unchecked.length)
          setDomainRefresh2(domain_id, unchecked, timeout);
        else
        {
          $('stage2').src = url_root + '/images/ok.png';
          $('stage2-progress').innerHTML = '';
          $('stage2-text').setStyle({
            'fontWeight': 'normal'
          });
          $('stage3').src = url_root + '/images/working.gif';
          $('stage3-text').setStyle({
            'fontWeight': 'bold'
          });
          goodlinks = new Array();
          tbody = $('list-links-good');
          rows = tbody.childElements();
          for (i = 0; i < rows.length; i++)
            goodlinks.push(rows[i].id.replace('bl', ''));
          setDomainRefresh3(domain_id, timeout);
        }
      }
    });
  }, timeout * 1000);
}


function setDomainRefresh3(id, timeout)
{
  setTimeout(function()
  {
    new Ajax.Request(script_root + '/ajax/viewdomain3/' + id, {
      method: 'get',
      onSuccess: function(transport)
      {
        var response = transport.responseText.evalJSON();

        for (var name in response[0])
        {
          var elem = $('summary-' + name);
          var content = response[0][name];
          if (elem && content != null) elem.innerHTML = content;
        }

        for (var i = 1; i < response.length; i++)
        {
          pr = $$('#bl' + response[i]['id'] + ' > td.backlinks-pr')[0];
          if (parseInt(response[i]['pr']) == -1)
            pr.innerHTML = '&mdash;';
          else
            pr.innerHTML = response[i]['pr'];
        }

        $('progress').hide();
      },
      onFailure: function(transport)
      {
        setDomainRefresh3(id, timeout);
      }
    });
  }, timeout * 1000);


}


function rateDomain(id, rate)
{
  if (rate == 'good')
  {
    cbox = $('rate-good-' + id);
    cbox2 = $('rate-bad-' + id);
    cbox2.checked = false;
    if (cbox.checked)
      new Ajax.Request(script_root + '/ajax/rate/' + id + '/good');
    else
      new Ajax.Request(script_root + '/ajax/rate/' + id + '/avg');
  }
  else
  {
    cbox = $('rate-bad-' + id);
    cbox2 = $('rate-good-' + id);
    cbox2.checked = false;
    if (cbox.checked)
      new Ajax.Request(script_root + '/ajax/rate/' + id + '/bad');
    else
      new Ajax.Request(script_root + '/ajax/rate/' + id + '/avg');
  }
}

function rateWebarchDomain(id, rate)
{
  if (rate == 'good')
  {
    cbox = $('rate-good-' + id);
    cbox2 = $('rate-bad-' + id);
    cbox2.checked = false;
    if (cbox.checked)
      new Ajax.Request(script_root + '/webarchajax/rate/' + id + '/good');
    else
      new Ajax.Request(script_root + '/webarchajax/rate/' + id + '/avg');
  }
  else
  {
    cbox = $('rate-bad-' + id);
    cbox2 = $('rate-good-' + id);
    cbox2.checked = false;
    if (cbox.checked)
      new Ajax.Request(script_root + '/webarchajax/rate/' + id + '/bad');
    else
      new Ajax.Request(script_root + '/webarchajax/rate/' + id + '/avg');
  }
}
