//---------------------------------------------------------------------------
// Athari
//---------------------------------------------------------------------------
var ajax = new Array();
var ajax_file = '/ajax.php',
    imagepopup_file = '/popup-image.htm';
var prevh = 0, prevy = 0;
//---------------------------------------------------------------------------
function getbyid (id)
{
  var itm = null;

  if (document.getElementById)
    itm = document.getElementById(id);
  else if (document.all)
    itm = document.all[id];

  return itm;
}
//---------------------------------------------------------------------------
function str_trim (str)
{
  str = str.replace(/^\s*(.*?)\s*$/i, "$1");
  return str;
}
//---------------------------------------------------------------------------
function show_error (str)
{
  str = str.replace(/<a href\="(.*?)">(.*?)<\/a>/g, "$2 ( http://"+document.domain+"$1 )");
  str = str.replace(/<b>(.*?)<\/b>/g, "*$1*");
  str = str.replace(/<\/?br.*?>\n?/g, "\n");
  str = str.replace(/<\/?pre\/?>/g, "\n");
  alert(str);
}
//---------------------------------------------------------------------------
function force_redraw ()
{
  var el = document.createElement('div');
  document.body.insertBefore(el, document.body.getElementsByTagName('div')[0]);
  el.innerHTML = " ";
}
//---------------------------------------------------------------------------
function endis2 (ctlid, val)
{
  var ctl = getbyid(ctlid);
  ctl.style.display = val ? 'none' : '';
}
//---------------------------------------------------------------------------
function rawendis2 (ctl)
{
  ctl.style.display = (ctl.style.display == "") ? 'none' : '';
  return false;
}
//---------------------------------------------------------------------------
function endis_lst1 (txtid, lstid)
{
  var txt = getbyid(txtid),
      lst = getbyid(lstid);
  txt.style.visibility = lst.value != -1 ? 'hidden' : 'visible';
}
//---------------------------------------------------------------------------
function init ()
{
  var i_am_dumb_browser = true;
  if (i_am_dumb_browser) {
    document.body.style.fontSize = 'medium'; /* force IE redraw */
  }
}
//---------------------------------------------------------------------------
function memo_lines (ctlid, offset)
{
  var ctl = getbyid(ctlid),
      rows = parseInt(ctl.getAttribute('rows'));

  page_resize_begin();
  if (offset > 0 || rows + offset > 3)
    ctl.setAttribute('rows', rows + offset);

  var ai = ajax.length;
  ajax[ai] = new sack();
  ajax[ai].requestFile = ajax_file + '?mode=userprefs&memorows=' + (rows + offset);
  ajax[ai].runAJAX();

  page_resize_scroll_max();

  return false;
}
//---------------------------------------------------------------------------
function preview_comment (cmtid)
{
  if (!validate_comment(null, 'bcmtpreview', cmtid))
    return false;

  getbyid('bcmtpreview'+cmtid).value = lang_pleasewait;

  var ai = ajax.length;
  ajax[ai] = new sack();
  ajax[ai].requestFile = ajax_file;
  ajax[ai].encVar('mode', 'commentpreview');
  ajax[ai].encVar('text', getbyid('cmtmemo'+cmtid).value);
  ajax[ai].onCompletion = function() {
      var divpreviewcont = getbyid('cmtpreviewcont'+cmtid),
          divpreview = getbyid('cmtpreview'+cmtid);
      divpreviewcont.style.display = "";
      divpreview.innerHTML = ajax[ai].response;
      getbyid('bcmtpreview'+cmtid).value = lang_preview;
    };
  ajax[ai].runAJAX();

  return false;
}
//---------------------------------------------------------------------------
function validate_comment (evt, butid, cmtid)
{
  if (str_trim(getbyid('cmtmemo'+cmtid).value).length < MIN_COMMENT_SIZE) {
    show_error(lang_commenttooshort);
    return false;
  }
  return true;
}
//---------------------------------------------------------------------------
function delete_comment_confirm (evt, cmtid)
{
  if (/*evt.shiftKey ||*/ confirm(lang_deletecomment)) {
    if (evt.ctrlKey) {
      self.status = lang_pleasewait;

      var ai = ajax.length;
      ajax[ai] = new sack();
      ajax[ai].requestFile = url_proccomment + 'delete/' + cmtid + '.htm';
      ajax[ai].encVar('b_ok', '');
      ajax[ai].encVar('ajax', '');
      ajax[ai].onCompletion = function() {
          if (ajax[ai].response == "") { // success
            var ctl = getbyid('comment' + cmtid);
            ctl.parentNode.removeChild(ctl);
            self.status = "Deleted successfully";
          }
          else { //failed
            show_error(ajax[ai].response);
            self.status = "";
          }
        };
      ajax[ai].runAJAX();
    }
    else {
      window.location = window.location.protocol + '//' + window.location.host +
                        url_proccomment + 'delete/' + cmtid + '.htm?b_ok';
    }
  }
  return false;
}
//---------------------------------------------------------------------------
function edit_comment (evt, cmtid)
{
  self.status = lang_pleasewait;

  var ai = ajax.length;
  ajax[ai] = new sack();
  ajax[ai].requestFile = url_proccomment + 'edit/' + cmtid + '.htm';
  ajax[ai].encVar('ajax', '');
  ajax[ai].onCompletion = function() {
      var rcode = ajax[ai].response.substring(0,3);
      if (rcode == '000') { // success
        var ctl = getbyid('cmttext' + cmtid);
        ctl.innerHTML = ajax[ai].response.substring(3);
        var ctltitle = getbyid('comment'+cmtid).getElementsByTagName('div')[0];
        ctltitle.style.display = 'none';
      }
      else { // failed
        show_error(ajax[ai].response);
      }
      self.status = "";
    };
  ajax[ai].runAJAX();

  return false;
}
//---------------------------------------------------------------------------
function post_edit_comment (evt, cmtid)
{
  if (!validate_comment(null, 'bcmtsubmit', cmtid))
    return false;

  getbyid('bcmtsubmit'+cmtid).value = lang_pleasewait;
  self.status = lang_pleasewait;

  var ai = ajax.length;
  ajax[ai] = new sack();
  ajax[ai].requestFile = url_proccomment + 'edit/' + cmtid + '.htm';
  ajax[ai].encVar('text', getbyid('cmtmemo'+cmtid).value);
  ajax[ai].encVar('ajax', '');
  ajax[ai].encVar('submit', '');
  ajax[ai].onCompletion = function() {
      var rcode = ajax[ai].response.substring(0,3);
      if (rcode == '000') { // success
        var ctl = getbyid('cmttext' + cmtid);
        ctl.innerHTML = ajax[ai].response.substring(3, ajax[ai].response.length);
        var ctltitle = getbyid('comment'+cmtid).getElementsByTagName('div')[0];
        ctltitle.style.display = '';
      }
      else { // failed
        show_error(ajax[ai].response);
      }
      self.status = "";
      getbyid('bcmtsubmit'+cmtid).value = lang_editcomment;
    };
  ajax[ai].runAJAX();

  return false;
}
//---------------------------------------------------------------------------
function cancel_edit_comment (evt, cmtid)
{
  self.status = lang_pleasewait;

  var ai = ajax.length;
  ajax[ai] = new sack();
  ajax[ai].requestFile = url_proccomment + 'edit/' + cmtid + '.htm';
  ajax[ai].encVar('ajax', '');
  ajax[ai].encVar('b_cancel', '');
  ajax[ai].onCompletion = function() {
      var rcode = ajax[ai].response.substring(0,3);
      if (rcode == '000') { // success
        var ctl = getbyid('cmttext' + cmtid);
        ctl.innerHTML = ajax[ai].response.substring(3, ajax[ai].response.length);
        var ctltitle = getbyid('comment'+cmtid).getElementsByTagName('div')[0];
        ctltitle.style.display = '';
      }
      else { // failed
        show_error(ajax[ai].response);
      }
      self.status = "";
    };
  ajax[ai].runAJAX();

  return false;
}
//---------------------------------------------------------------------------
function edit_object (evt, url_path, objtype, objid, ajaxredirect)
{
  self.status = "Please wait...";

  var ai = ajax.length;
  ajax[ai] = new sack();
  ajax[ai].requestFile = url_path + '/' + objtype + '-edit/' + objid + '.htm';
  ajax[ai].encVar('ajax', '');
  ajax[ai].encVar('redirect', document.location.pathname);
  ajax[ai].encVar('ajaxredirect', ajaxredirect);
  ajax[ai].onCompletion = function() {
      var rcode = ajax[ai].response.substring(0,3);
      if (rcode == '000') { // success
        var ctl = getbyid(objtype + 'text' + objid);
        ctl.innerHTML = ajax[ai].response.substring(3);
        // Import scripts (Opera bug?)
        var chead = document.getElementsByTagName('head')[0];
        var jss = ctl.getElementsByTagName('script');
        for (var i=0; i<jss.length; ++i) {
          var js = document.createElement('script');
          js.innerHTML = jss[i].innerHTML;
          chead.appendChild(js);
        }
      }
      else { // failed
        show_error(ajax[ai].response);
      }
      self.status = "";
    };
  ajax[ai].runAJAX();

  return false;
}
//---------------------------------------------------------------------------
function post_edit_object (evt, url_path, objtype, objid, ajaxredirect)
{
  self.status = "Please wait...";

  var ai = ajax.length;
  ajax[ai] = new sack();
  ajax[ai].requestFile = url_path + '/' + objtype + '-edit/' + objid + '.htm';

  // Collect form input
  var frm = document.forms['objform'+objid];
  for (var i=0; i<frm.elements.length; ++i) {
    var el = frm.elements[i],
        v = "";
    if (el.name != "") {
      if (el.type == 'checkbox')
        if (el.checked)
          v = "on";
        else
          continue;
      else
        v = el.value;
      ajax[ai].encVar(el.name, v);
    }
  }

  ajax[ai].encVar('ajax', '');
  ajax[ai].encVar('ajaxredirect', ajaxredirect);
  ajax[ai].encVar('submit', '');
  ajax[ai].onCompletion = function() {
      var rcode = ajax[ai].response.substring(0,3);
      if (rcode == '000') { // success
        if (ajaxredirect == "") {
          var ctl = getbyid(objtype + 'text' + objid);
          if (ajax[ai].response.length > 3)
            ctl.innerHTML = ajax[ai].response.substring(3);
          else
            ctl.innerHTML = "<span>[Edited successfully]</span>";
          self.status = "Edited successfully";
        }
        else {
          get_edit_object(evt, objtype, objid, ajaxredirect);
        }
      }
      else { // failed
        show_error(ajax[ai].response);
        self.status = "";
      }
    };
  ajax[ai].runAJAX();

  return false;
}
//---------------------------------------------------------------------------
function get_edit_object (evt, objtype, objid, ajaxredirect)
{
  self.status = "Please wait...";

  var ai = ajax.length;
  ajax[ai] = new sack();
  ajax[ai].requestFile = ajaxredirect;
  ajax[ai].encVar('ajax', '');
  ajax[ai].onCompletion = function() {
      var rcode = ajax[ai].response.substring(0,3);
      if (rcode == '000') { // success
        var ctl = getbyid(objtype + 'text' + objid);
        ctl.innerHTML = ajax[ai].response.substring(3);
        self.status = "Recieved successfully";
      }
      else { // failed
        show_error(ajax[ai].response);
        self.status = "";
      }
    };
  ajax[ai].runAJAX();

  return false;
}
//---------------------------------------------------------------------------
function cancel_edit_object (evt, objtype, objid, ajaxredirect)
{
  if (ajaxredirect == "") {
    var ctl = getbyid(objtype + 'text' + objid);
    ctl.innerHTML = "<span>[Edit cancelled]</span>";
  }
  else
    get_edit_object(evt, objtype, objid, ajaxredirect);
  force_redraw();
}
//---------------------------------------------------------------------------
function delete_object (evt, url_path, objtype, objid)
{
  if (/*evt.shiftKey ||*/ confirm('Are you sure you want to delete this object?')) {
    self.status = "Please wait...";

    var ai = ajax.length;
    ajax[ai] = new sack();
    ajax[ai].requestFile = url_path + '/' + objtype + '-delete/' + objid + '.htm';
    ajax[ai].encVar('b_ok', '');
    ajax[ai].encVar('ajax', '');
    ajax[ai].onCompletion = function() {
        if (ajax[ai].response == "") { // success
          var ctl = getbyid(objtype + objid);
          if (ctl)
            ctl.parentNode.removeChild(ctl);
          self.status = "Deleted successfully";
        }
        else { //failed
          show_error(ajax[ai].response);
          self.status = "";
        }
      };
    ajax[ai].runAJAX();
  }
  return false;
}
//---------------------------------------------------------------------------
function show_hide_menu (evt)
{
  var dmenu = getbyid('menu'),
      dprimary = getbyid('primary'),
      dtopline = getbyid('topline'),
      vis;
  if (dmenu.style.display != 'none') {
    dmenu.style.display = 'none';
    dprimary.style.padding = "170px 0 234px 1em";
    dtopline.style.left = '0';
    vis = 0;
  }
  else {
    dmenu.style.display = 'block';
    dprimary.style.padding = "170px 0 234px 28%";
    dtopline.style.left = '30%';
    vis = 1;
  }
  force_redraw();

  var ai = ajax.length;
  ajax[ai] = new sack();
  ajax[ai].requestFile = ajax_file + '?mode=userprefs&showmenu=' + vis;
  ajax[ai].runAJAX();

  return false;
}
//---------------------------------------------------------------------------
function generate_contents (el, title, l, upto)
{
  if (!l) l=3;
  if (!upto) upto = 2;
  var h1hds = el.getElementsByTagName('h'+l);
  var text = "<h"+l+">" + title + "</h"+l+"><ul class=halfcompact>";
  for (var i=0; i<h1hds.length; ++i) {
    if (h1hds[i].className != 'small') {
      text += "<li><a href=\"#title" + i + "\">" + h1hds[i].innerHTML.replace(/<.*?>/g, "") + "</a>";
      h1hds[i].innerHTML = "<a name=\"title" + i + "\"></a>" + h1hds[i].innerHTML;
      if (h1hds[i].nextSibling.nodeName == 'DIV') {
        var h2hds = h1hds[i].nextSibling.getElementsByTagName('h'+(l+1));
        if (h2hds.length) {
          text += "<ul class=halfcompact>";
          for (var j=0; j<h2hds.length; ++j) {
            text += "<li><a href=\"#title" + i + "_" + j + "\">" + h2hds[j].innerHTML.replace(/<.*?>/g, "") + "</a>";
            h2hds[j].innerHTML = "<a name=\"title" + i + "_" + j + "\"></a>" + h2hds[j].innerHTML;
            if (upto == 3 && h2hds[j].nextSibling.nodeName == 'DIV') {
              var h3hds = h2hds[j].nextSibling.getElementsByTagName('h'+(l+2));
              if (h3hds.length) {
                text += "<ul class=halfcompact>";
                for (var k=0; k<h3hds.length; ++k) {
                  text += "<li><a href=\"#title" + i + "_" + j + "_" + k + "\">" + h3hds[k].innerHTML.replace(/<.*?>/g, "") + "</a>";
                  h3hds[k].innerHTML = "<a name=\"title" + i + "_" + j + "_" + k + "\"></a>" + h3hds[k].innerHTML;
                }
                text += "</ul>";
              }
            }
          }
          text += "</ul>";
        }
      }
    }
  }
  text += "</ul>";
  document.getElementById('contents').innerHTML = text;
}
//---------------------------------------------------------------------------
function edit_all_objects (e, type)
{
  if (confirm("Are you sure you want to edit ALL the objects listed on the page?")) {
    var lnks = document.links;
    for (var i=0; i<lnks.length; ++i) {
      if (String(lnks[i].onclick).search(/edit_object/) != -1 &&
          String(lnks[i].onclick).search(RegExp("([\"'])"+type+"([\"']),", "")) != -1) {
        lnks[i].click();
      }
    }
  }
  return false;
}
//---------------------------------------------------------------------------
function page_resize_begin ()
{
  prevh = document.body.offsetHeight;
  prevy = document.body.scrollTop;
}
//---------------------------------------------------------------------------
function page_resize_scroll_max ()
{
  window.scrollTo(document.body.scrollLeft, Math.round(prevy + document.body.offsetHeight - prevh));
}
//---------------------------------------------------------------------------
function page_resize_scroll_prop ()
{
  window.scrollTo(document.body.scrollLeft, Math.round(prevy + (document.body.offsetHeight-prevh) * (prevy+screen.availHeight/2) / prevh));
}
//---------------------------------------------------------------------------
function install_listener (evtname, listener)
{
  if (document.addEventListener)
    document.addEventListener(evtname, listener, true);
  else if (document.attachEvent)
    document.attachEvent('on'+evtname, listener);
  else
    document['on'+evtname] = listener;
}
//---------------------------------------------------------------------------
function on_keyup (e)
{
  if (!e) e = window.event;
  if (e.keyCode==13 && e.ctrlKey)
    submit_current_form(e);
}
install_listener('keyup', on_keyup);
//---------------------------------------------------------------------------
function submit_current_form (e)
{
  var frm = e.srcElement;
  while (frm != null && frm.nodeName != 'FORM')
    frm = frm.parentNode;
  if (frm)
    frm.submit.click();
}
//---------------------------------------------------------------------------
function hide_compatwarn (evt)
{
  var strongs = getbyid('primary').getElementsByTagName('STRONG');
  for (var i=0; i<strongs.length; i++)
    if (strongs[i].className == 'warning')
      strongs[i].style.display = 'none';
  force_redraw();

  var ai = ajax.length;
  ajax[ai] = new sack();
  ajax[ai].requestFile = ajax_file + '?mode=userprefs&compatwarnings=0';
  ajax[ai].runAJAX();

  return false;
}
//---------------------------------------------------------------------------
function popup_image (e, imgurl, popupw, popuph)
{
  var winw = screen.availWidth,
      winh = screen.availHeight,
      x = (winw-popupw)/2,
      y = (winh-popuph)/2;

  window.open(imagepopup_file+'?img='+encodeURIComponent(imgurl), 'popup_image', 'width='+popupw+',height='+popuph+',left='+x+',top='+y+',menubar=no,scrollbars=no,status=no,toolbar=no');

  return false;
}
//---------------------------------------------------------------------------
function backre (e)
{
  if (!e) e = window.event;
  window.location = window.location.protocol + '//' + window.location.host +
                    e.srcElement.getAttribute('href') + '?redirect=' + encodeURIComponent(window.location.pathname+window.location.search);
  return false;
}
//---------------------------------------------------------------------------
function html_to_bb (node)
{
  var res = '';
  for (var i=0; i<node.childNodes.length; ++i) {
    var child = node.childNodes[i];
    switch (child.nodeName) {
      case 'HR':         res += '[hr]\n'; break;
      case 'BR':         res += '\n'; break;
      case 'B':          res += '[b]'+html_to_bb(child)+'[/b]'; break;
      case 'I':          res += '[i]'+html_to_bb(child)+'[/i]'; break;
      case 'DEL':        res += '[s]'+html_to_bb(child)+'[/s]'; break;
      case 'PRE':        res += '[pre]'+html_to_bb(child)+'[/pre]'; break;
      case 'CODE':       res += '[code]'+html_to_bb(child)+'[/code]'; break;
      case 'UL':         res += '[list]'+html_to_bb(child)+'\n[/list]\n'; break;
      case 'OL':         res += '[listn]'+html_to_bb(child)+'\n[/listn]\n'; break;
      case 'LI':         res += '[*]'+html_to_bb(child); break;
      case 'BLOCKQUOTE': res += '[q]'+html_to_bb(child)+'[/q]\n'; break;
      case 'ABBR':       res + '[abbr='+child.title+']'+html_to_bb(child)+'[/abbr]'; break;
      case 'IMG':
        switch (child.className) {
          case 'float':  res += '[img float=left]'+child.src+'[/img]'; break;
          case 'floatr': res += '[img float=right]'+child.src+'[/img]'; break;
          default:       res += '[img]'+child.src+'[/img]';
        }
        break;
      case 'SPAN': case 'DIV':
        switch(child.className) {
          case 'spoiler':break;
          case 'sm':     res += '[small]'+html_to_bb(child)+'[/small]'; break;
          default:
            res += '['+child.className.toLowerCase()+']'+html_to_bb(child)+'[/'+child.className.toLowerCase()+']';
            if (child.className == 'left' || child.className == 'center' || child.className == 'right')
              res += '\n';
            break;
        }
        break;
      case 'A':
        if (child.href.replace(window.location.protocol + '//' + window.location.host, "").search(/^\/w\d+$/) != -1)
          res += '[work='+child.href.replace(window.location.protocol + '//' + window.location.host, "").replace(/^\/w(\d+)$/, "$1")+']';
        else if (child.className == 'hiddentitle')
          res += '[spoiler='+html_to_bb(child)+']'+html_to_bb(child.nextSibling)+'[/spoiler]';
        else
          res += '[url='+child.href+']'+html_to_bb(child)+'[/url]';
        break;
      case '#text':
        res += child.data
                 .replace(/\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0/, "[tab]");
        break;
      default:
        res += html_to_bb(child);
    }
  }
  return res;
}
//---------------------------------------------------------------------------
function quote_comment (e, cmtid)
{
  var dcmt = getbyid('cmttext'+cmtid).getElementsByTagName('DIV')[0],
      dauthor = getbyid('cmta'+cmtid),
      memo = getbyid('cmtmemo0'),
      txt = '';

  txt = html_to_bb(dcmt);

  if (memo.selectionEnd) {
    memo.value = memo.value.substring(0, memo.selectionStart) +
                 txt +
                 memo.value.substring(memo.selectionStart, memo.textLength);
    memo.selectionEnd = memo.selectionStart += txt.length;
  }
  else
    memo.value += '\n[q][b]'+dauthor.innerText+':[/b]\n'+txt+'[/q]\n\n';
  memo.focus();

  return false;
}
//---------------------------------------------------------------------------
function click_key (e)
{
  if (e.keyCode==13 && this.onclick) {
    alert('keypress');
    return oElement.onclick();
  }
}
//---------------------------------------------------------------------------