/***************************************/
/*                                     */
/*  Twofifty Client-side Renderer 2.0  */
/*  by Ates Goral                      */
/*                                     */
/*  last modified 2003.11.05 01:32     */
/*                                     */
/***************************************/

/* Utils */

var font = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ.,:;-\'';
/*          0         10                        36     */

function limit(str, max)
{
  var wordarr = str.split(' ');
  for (var i = 0; i < wordarr.length; i++)
  {
    var word = wordarr[i];
    if (word.length > max)
      wordarr[i] = word.substr(0, max).concat(' ', limit(word.substr(max), max));
  }
  return wordarr.join(' ');
}

function textToGIF(clr, s)
{
  var r = '';
  for (var i = 0; i < s.length; i++)
  {
    var c = s.charAt(i).toUpperCase();
    var idx = font.indexOf(c);
    if (c == '"')
      c = '&quot;';
    r += '<img src="/i4/c' + clr + '/' + idx + '.gif" height="6" alt="' + c + '">';
  }
  return r;
}

function popup(url, target, width, height, scrollbars)
{
  window.open(url, target, 'width=' + width + ',height=' + height + ',scrollbars=' + scrollbars);
}

function ge(fid)
{
  return document.getElementById(fid);
}

function setVis(iid, visible)
{
  ge('id_' + iid).style.visibility = (visible) ? 'visible' : 'hidden';
}

function swapCheck(obj)
{
  var fld = ge('id_' + obj.id);
  var val = fld.value ^ 1;
  obj.src = ge('id_chk' + val).src;
  fld.value = val;
  return false;
}

function pad6(s)
{
  var pad = '00000' + s;
  return pad.substr(pad.length - 6);
}

/* Progress bar */

var prog = 0;
var progMax;
var progWidth = 1;
var progMaxWidth = 245;
var progGoal;

function advProg()
{
  if (prog < progMax)
  {
    progGoal = ++prog * progMaxWidth / progMax;
    if (prog == 1)
      progTick();
  }
}

function progTick()
{
  progWidth += (progGoal - progWidth) / 8;
  var width = Math.floor(progWidth + 0.5);
  ge('id_prog').style.width = width;
  if (width != progMaxWidth)
    setTimeout('progTick()', 40);
}

function loadInjector(url)
{
  url = "/" + url;
  try {
  injector.document.location.replace(url);
  } catch (err) {
  frames[1].document.location.replace(url);
  }
  //var inj;
  //if (document.injector != undefined)
    //inj = injector;
  //else
    //inj = frames[1];
  //inj.document.location.replace(url);
  //gbl_slideshow = false;
}

/* Initialization */

var init = false;
var target = '';
var bIsCompliant = (navigator.appName.substr(0, 9) != 'Microsoft');

var nodes = new Array();

function onLoad()
{
  if (!init)
  {
    nodes['nav'] = ge('id_nav');
    nodes['memb'] = ge('id_memb');
    nodes['thumbs'] = ge('id_thumbs');
    nodes['prev'] = ge('id_prev');
    nodes['next'] = ge('id_next');
    nodes['index'] = ge('id_index');
    nodes['ans'] = ge('id_ans');
    nodes['summary'] = ge('id_summary');
    nodes['cmnttab'] = ge('id_cmnttab');
    with (window.screen)
      loadInjector('n_init.php?w=' + width + '&h=' + height + '&c=' + colorDepth + '&a=' + navigator.appName + '&v=' + navigator.appVersion + '&r=' + document.referrer);
  // getNodes('thumbs,prev, etc.
  }
}

/* Online users */

var beats = 0;

function heartbeat()
{
  if (++beats == 60)
  {
    beats = 0;
    loadInjector('n_online.php');    
  }
}

/* Fullsize display */

var shownid = 0;
var queueSrc = '';
var buffer;
var bInImgMode = false;
var firstid;

function loadFull(url)
{
  full.document.location.replace(url);
}

function showFull(artid, extension)
{
  shownid = artid;
  
  var filename = pad6(artid);
  
  queueSrc = '/250/' + filename.charAt(2) + '/' + filename;
  
  if (extension.length)
    queueSrc += '.' + extension;
  else
    queueSrc += '/tf.htm';
  
  if (extension.length)
  {
    if (bInImgMode)
      showQueue();
    else
      loadFull('full4.htm');
  }
  else
  {
    bInImgMode = false;
    loadFull(queueSrc);
  }
}

function showArt(artid)
{
  loadInjector('n_showart.php?i=' + artid);
}

function showQueue()
{
  full.document.images['id_art'].src = '/i4/loading.gif'; // !
  buffer = new Image();
  buffer.src = queueSrc;
  buffer.onLoad = showBuffer();
  queueSrc = '';
}

function showBuffer()
{
  full.document.images['id_art'].src = buffer.src;
}

function setImgMode()
{
  bInImgMode = true;
  if (queueSrc.length)
    showQueue();
}

/* Item list manipulation */

var itemArr = new Array();
var itemCnt, itemAct, itemGroupClass, itemCountClass, itemTotal, itemCounts, itemPrevGroup, itemStr;

function resetItems(act, groupClass, countClass)
{
  itemAct = act;
  itemGroupClass = groupClass;
  itemCountClass = countClass;
  itemCnt = itemTotal = itemCounts = 0;
  itemPrevGroup = itemStr = '';
}

function addItem(id, name, group, count)
{
  if (group.length && ((group.charAt(0) < 'A') || (group.charAt(0) > 'Z')))
    group = '#';
  if (group != itemPrevGroup)
  {
    itemPrevGroup = group;
    if (itemCnt)
    {
      purgeItems();
      group = '<img src="/i4/s.gif" height="6" alt=""><br>' + group;
    }
    itemStr += '<tr><td colspan="2"><span class="' + itemGroupClass + '">' + group + '</span></td></tr>';
  }
  itemArr[itemCnt++] = '<a href="/n_art.php?a=' + itemAct + '&p=' + id + '" target="injector">' + name + '</a> <span class="' + itemCountClass + '">(' + count + ')</span><br>';
  itemTotal++;
  itemCounts += parseInt(count);
}

function purgeItems()
{
  var half = (itemCnt + 1) >> 1;
  itemStr += '<tr><td width="50%" valign="top" class="rightpad">' + itemArr.slice(0, half).join('\n') + '</td><td valign="top">' + itemArr.slice(half, itemCnt).join('\n') + '</td></tr>';
  itemCnt = 0;
}

function finalizeItems()
{
  if (itemCnt)
    purgeItems();
}

/* Template manipulation */

var parentNode;

function clone(id)
{
  return ge('tmp_' + id).cloneNode(true);
}

var bIsFAQEditor;
var qidx;
var ansTmp;
var ansPrnt;

function addFAQ(id, q, a)
{
  qidx++;
  
  var node = clone('index');
  var anchor = node.getElementsByTagName('a')[0];
  anchor.href = '#q' + qidx;
  anchor.innerHTML = qidx + '. ' + q;
  parentNode.appendChild(node);
  
  node = clone('faq');  
  var divs = node.getElementsByTagName('div');
  anchor = divs[1].getElementsByTagName('a')[0];
  anchor.id = 'q' + qidx;
  anchor.innerHTML = qidx + '. ' + q;
  divs[2].innerHTML = a;
  if (bIsFAQEditor)
  {
    anchor = divs[3].getElementsByTagName('a')[0];
    anchor.id = id;
    anchor.style.visibility = 'visible';
  }
  ansPrnt.appendChild(node);
}

function addLinkHdr(src, width, title, prespc)
{
  var divs = ge('tmp_icons').getElementsByTagName('div');
  if (prespc)
    parentNode.appendChild(divs[0].cloneNode(true));
  var node = divs[1].cloneNode(true);
  var img = node.getElementsByTagName('img')[0];
  img.src = '/i4/h_' + src + '.gif';
  img.width = width;
  img.title = title;
  parentNode.appendChild(node);
}

function addLink(href, src, title)
{
  var node = ge('tmp_icons').getElementsByTagName('span')[0].cloneNode(true);
  node.getElementsByTagName('a')[0].href = href;
  var img = node.getElementsByTagName('img')[0];
  img.src = 'ico/' + src + '.gif';
  img.title = title;
  parentNode.appendChild(node);
}

function addArt(artid, extension, publishorder, title, username)
{
  if (!firstid)
    firstid = artid;
  var filename = pad6(artid);
  if (!extension.length)
    extension = 'jpg';
  var node = clone('thumb');
  var anchor = node.childNodes[0];
  anchor.href = 'n_showart.php?i=' + artid;
  var img = anchor.childNodes[0];
  img.src = '/50/' + filename.charAt(2) + '/' + filename + '.' + extension;
  img.title = title + ((title.length) ? ' ' : '') + 'by ' + username;
  parentNode.appendChild(node);
}

function setVisibility(node, visible)
{
  node.style.visibility = (visible) ? 'visible' : 'hidden'; 
}

function setDisplay(node, shown)
{
  var s = (shown) ? 'block' : 'none';
  //if (bIsCompliant)
    node.style.display = s;
  //else
    //node.style.display.visibility = s;
}

function showPageNav(key, act, param, page, visible)
{
  var node = nodes[key];
  if (visible)
    node.href = 'n_art.php?a=' + act + '&p=' + param + '&n=' + page;
  setVisibility(node, visible);
}

function showPage(act, param, total, page, pages)
{
  showPageNav('prev', act, param, page - 1, (page > 1));
  showPageNav('next', act, param, page + 1, (page < pages));
  nodes['summary'].innerHTML = 'Total ' + total + '. &nbsp; Page ' + page + ' of ' + pages + '<br>[In descending order of submission]';
}

var bIsModerator;
var sessUserId;
var bIsFirstCmnt;

function addComment(commentid, comment, userid, username, indate)
{
  var rows = ge('tmp_comment').getElementsByTagName('tr');

  if (!bIsFirstCmnt)
    parentNode.appendChild(rows[0].cloneNode(true));
  else
    bIsFirstCmnt = false;
  
  var node = rows[1].cloneNode(true);
  var td = node.getElementsByTagName('td')[1];
  var comment = limit(comment, 32);
  
  if (bIsCompliant)
    td.appendChild(document.createTextNode(comment));
  else
    td.innerText = comment;
  
  parentNode.appendChild(node);
  
  node = rows[2].cloneNode(true);
  var cols = node.getElementsByTagName('td');
  cols[0].innerHTML = indate;
  cols[1].getElementsByTagName('b')[0].innerHTML = username;

  parentNode.appendChild(node);

  if ((sessUserId == userid) || bIsModerator)
  {
    node = rows[3].cloneNode(true);
    node.getElementsByTagName('a')[0].id = commentid;
    parentNode.appendChild(node);
  }
}

function addUser(username, userid)
{
  window.status = '|' + username + '|';
  var node = clone('user');
  window.status = '|' + username + '| cloned';
  node.value = userid;
  window.status = '|' + username + '| value set';
  node.innerHTML = username;
  window.status = '|' + username + '| html set';
  node.selected = (userid == sessUserId);
  window.status = '|' + username + '| selected set';
  parentNode.appendChild(node);
  window.status = '|' + username + '| appended';
}

function xpurgeChildren(id)
{
  var node = ge(id);
  while (node.childNodes.length)
    node.removeChild(node.childNodes[0]);
}

function purgeChildren(key)
{
  var node = nodes[key];
  while (node.childNodes.length)
    node.removeChild(node.childNodes[0]);
  return node;
}

function addNav(href, src, width, title)
{
  var tmp = ge('tmp_nav');
  var node = tmp.childNodes[0].cloneNode(true);
  node.getElementsByTagName('a')[0].href = "/" + href;
  var img = node.getElementsByTagName('img')[0];
  img.src = '/i4/l_' + src + '.gif';
  img.width = width;
  img.title = title;
  parentNode.appendChild(node);
  parentNode.appendChild(tmp.childNodes[1].cloneNode(true));
}

/* Content injection */

function inject(ids)
{
  var idarr = ids.split(',');
  for (var i = 0; i < idarr.length; i++)
  {
    var id = idarr[i];
    //alert('inject ' + id);
    ge('id_' + idarr[i]).innerHTML = injector.document.getElementById('id_' + idarr[i]).innerHTML;
  }
}

/* Form errors */

var frmerrs;
var frmerrids;
var frmerrenabled = false;

function initFrmErr(ids)
{
  frmerrenabled = true;
  frmerrids = ids;
  var idarr = frmerrids.split(',');
  frmerrs = new Array();
  for (var i = 0; i < idarr.length; i++)
  {
    var id = idarr[i];
    var frmerr = new Array();
    frmerr['hlp'] = ge('hlp_' + id).innerHTML;
    frmerrs[id] = frmerr;
  }
}

function resetFrmErrs()
{
  var idarr = frmerrids.split(',');
  for (var i = 0; i < idarr.length; i++)
    frmerrs[idarr[i]]['iserr'] = false;
}

function showFrmErrs()
{
  if (!frmerrenabled)
    return;
    
  var idarr = frmerrids.split(',');
  for (var i = 0; i < idarr.length; i++)
  {
    var id = idarr[i];
    var frmerr = frmerrs[id];
    var iserr = frmerr['iserr'];
    ge('frm_' + id).style.borderColor = (iserr) ? 'red' : '#b6b6b6';
    //ge('hlp_' + id).innerHTML = (iserr) ? '<span style="color: red;">' + frmerr['err'] + '</span>' : frmerr['hlp'];
    ge('hlp_' + id).innerHTML = (iserr) ? frmerr['err'] : frmerr['hlp'];
  }  
}

function setFrmErr(id, err)
{
  var frmerr = frmerrs[id];
  frmerr['err'] = err;
  frmerr['iserr'] = true;
}

function disableFrmErrs()
{
  frmerrenabled = false;
}

///////////////////////////////////

function setHeader(hdr, subhdr)
{
  ge('id_hdr').innerHTML = textToGIF('w', hdr);
  ge('id_subhdr').innerHTML = textToGIF('w', subhdr);
}

function actComment(id)
{
  popup('p_cmntform.php?ai=' + shownid + '&ci=' + id, 'cmnt', 276, 325, 'no');
  return false;
}

function actFAQ(id)
{
  popup('p_faqform.php?fi=' + id, 'faq', 276, 325, 'no');
  return false;
}

function actArt(id)
{
  popup('p_artform.php?ai=' + id, 'art', 276, 325, 'no');
  return false;
}

function editCat()
{
  popup('p_catform.php?ai=' + shownid, 'cat', 800, 600);
  return false;
}

function showMemb(bIsSignedIn, username, bIsGhost)
{
  if (bIsSignedIn)
  {
    ge('id_signininfo').innerHTML = 'You\'re signed in as <b>' + username + '</b>.' + (bIsGhost ? ' You are a ghost.' : '');
  }
  else
  {
    ge('id_username').value = username;
    ge('id_password').value = '';
    //ge('id_username').focus();
  }
  setDisplay(ge('id_memb0'), !bIsSignedIn);
  setDisplay(ge('id_memb1'), bIsSignedIn);
}

var gbl_slideshow = false;

function nextSlide()
{
  if (gbl_slideshow)
  {
    showArt(0);
    //gbl_slideshow = true;
    setTimeout('nextSlide()', 8000);
  }
}

function startSlideShow()
{
  if (!gbl_slideshow)
  {
    gbl_slideshow = true;
    nextSlide();
  }
  else
  {
    gbl_slideshow = false;
  }
}
