// version beta-2010-02-05
function $(element)
{
  if (typeof element == 'string') element = document.getElementById(element);
  return element;
}
function show()
{
  var element = $(arguments[0]);
  if (element && element.style) element.style.display = 'block';
  return false;
}
function showi()
{
  var element = $(arguments[0]);
  if (element && element.style) element.style.display = 'inline';
  return false;
}
function hide()
{
  var element = $(arguments[0]);
  if (element && element.style) element.style.display = 'none';
  return false;
}
function toggle()
{
  var element = $(arguments[0]);
  if ($(element) && $(element).style)
  {
    var s = $(element).style.display;
    if (s == '' || s == 'none') show(element);
    else hide(element);
  }
}
function esq(v)
{
  return v.replace("'", "\\'");
}
function ajax()
{
  var http = false;
  if (window.XMLHttpRequest)
  {
    http = new XMLHttpRequest();
  }
  else
  {
    try
    {
      http = new ActiveXObject('Msxml2.XMLHTTP');
    }
    catch (e)
    {
      try
      {
        http = new ActiveXObject('Microsoft.XMLHTTP');
      }
      catch (e) {}
    }
  }
  return http;
}
// ie specifics
function isIE()
{
  return (navigator.userAgent.toLowerCase().indexOf('msie') != -1);
}
function mouseX()
{
  var event = arguments[0];
  return event.pageX || (event.clientX +
    (document.documentElement.scrollLeft || document.body.scrollLeft));
}
function mouseY()
{
  var event = arguments[0];
  return event.pageY || (event.clientY +
    (document.documentElement.scrollTop || document.body.scrollTop));
}
function pageScrollX()
{
  return document.body.scrollLeft || document.documentElement.scrollLeft;
}
function pageScrollY()
{
  return document.body.scrollTop || document.documentElement.scrollTop;
}
function elementX()
{
  var obj = $(arguments[0]);
  var curleft = 0;
  if (obj.offsetParent)
  {
    while (obj.offsetParent)
    {
      curleft += obj.offsetLeft;
      obj = obj.offsetParent;
    }
  }
  else if (obj.x)
    curleft += obj.x;
  return curleft;
}
function elementY()
{
  var obj = $(arguments[0]);
  var curtop = 0;
  if(obj.offsetParent)
  {
    while (obj.offsetParent)
    {
      curtop += obj.offsetTop;
      obj = obj.offsetParent;
    }
  }
  else if (obj.y)
    curtop += obj.y;
  return curtop;
}
// smart tags (based on wikibits)
function insertTags(tagOpen, tagClose, sampleText) {
  var txtarea;
  if (document.editform) {
    txtarea = document.editform.pageText;
  }
  else {
    var areas = document.getElementsByTagName('textarea');
    txtarea = areas[0];
  }
  var selText, isSample = false;
  if (document.selection && document.selection.createRange) { // IE
    if (document.documentElement && document.documentElement.scrollTop)
      var winScroll = document.documentElement.scrollTop
    else if (document.body)
      var winScroll = document.body.scrollTop;
    txtarea.focus();
    var range = document.selection.createRange();
    selText = range.text;
    checkSelectedText();
    range.text = tagOpen + selText + tagClose;
    if (isSample && range.moveStart) {
      if (window.opera) tagClose = tagClose.replace(/\n/g,'');
      range.moveStart('character', - tagClose.length - selText.length);
      range.moveEnd('character', - tagClose.length);
    }
    range.select();
    if (document.documentElement && document.documentElement.scrollTop)
      document.documentElement.scrollTop = winScroll
    else if (document.body)
      document.body.scrollTop = winScroll;
  }
  else if (txtarea.selectionStart || txtarea.selectionStart == '0') { // Mozilla
    var textScroll = txtarea.scrollTop;
    txtarea.focus();
    var startPos = txtarea.selectionStart;
    var endPos = txtarea.selectionEnd;
    selText = txtarea.value.substring(startPos, endPos);
    checkSelectedText();
    txtarea.value = txtarea.value.substring(0, startPos)
      + tagOpen + selText + tagClose
      + txtarea.value.substring(endPos, txtarea.value.length);
    if (isSample) {
      txtarea.selectionStart = startPos + tagOpen.length;
      txtarea.selectionEnd = startPos + tagOpen.length + selText.length;
    }
    else {
      txtarea.selectionStart = startPos + tagOpen.length
        + selText.length + tagClose.length;
      txtarea.selectionEnd = txtarea.selectionStart;
    }
    txtarea.scrollTop = textScroll;
  }
  function checkSelectedText(){
    if (!selText && tagOpen == '[[picture:' && sampleText != 'picture title') {
      tagOpen += sampleText + tagClose;
      sampleText = ''; tagClose = '';
    }
    if (selText == 'picture title') {
      tagOpen = ''; tagClose = ''; selText = sampleText;
    }
    else {
      if (!selText) {
        selText = sampleText; isSample = true;
      }
      else if (selText.charAt(selText.length - 1) == ' ') {
        selText = selText.substring(0, selText.length - 1);
        tagClose += ' '
      }
    }
  }
}
// archive image functions
function toggleZoom(e) {
  if (!e) var e = window.event;
  var a = $('archive-image-container');
  var dpx = a.style.pixelWidth;
  if (!dpx) var dpx = a.clientWidth;
  var dpy = a.style.pixelHeight;
  if (!dpy) var dpy = a.clientHeight;
  if ($('archive-image').style.width == "200%") {
    var scy = a.scrollTop;
    $('archive-image').style.width = "100%";
    $('archive-image-overlay').style.width = "100%";
    a.scrollTop = (scy - dpy / 2) / 2;
  }
  else {
    $('archive-image').style.width = "200%";
    $('archive-image-overlay').style.width = "200%";
    var ofx = a.offsetLeft; var ofy = a.offsetTop;
    var scx = a.scrollLeft; var scy = a.scrollTop;
    var dx = a.offsetWidth - dpx; var dy = a.offsetHeight - dpy;
    a.scrollLeft = 2 * (mouseX(e) - ofx + scx) - (dpx / 2) + (dx / 2);
    a.scrollTop = 2 * (mouseY(e) - ofy + scy) - (dpy / 2) + (dy / 2);
  }
}
function viewZoomed() {
  $('archive-image').style.width = "200%";
  $('archive-image-overlay').style.width = "200%";
}
function viewNormal() {
  $('archive-image').style.width = "100%";
  $('archive-image-overlay').style.width = "100%";
}
function toggleOverlay() {
  if ($('archive-image-overlay').style.visibility != 'hidden')
    $('archive-image-overlay').style.visibility = 'hidden';
  else $('archive-image-overlay').style.visibility = 'visible';
}
var rotq = 0; var imx = 0; var imy = 0;
function getTransform(e) {
  var properties = [ 'transform', 'WebkitTransform', 'MozTransform' ]; var p;
  while (p = properties.shift()) {
    if (typeof e.style[p] != 'undefined') return p;
  }
  return false;
}
function rotate() {
  rotq = rotq + 90; if (rotq >= 360) rotq = 0;
  var a = $('archive-image-container'); var w = 680;
  var dpx = a.style.pixelWidth; if (!dpx) var dpx = a.clientWidth;
  var dpy = a.style.pixelHeight; if (!dpy) var dpy = a.clientHeight;
  if (imx == 0) {
    imx = dpx; imy = dpy;
  }
  var p = getTransform($('archive-image'));
  if (!p) { // try ie
    var ier = 'progid:DXImageTransform.Microsoft.BasicImage';
    if (rotq == 90) {
      ier = ier + ' (rotation=1)'; a.style.height = imx + 'px';
    }
    else if (rotq == 180) {
      ier = ier + ' (rotation=2)'; a.style.height = imy + 'px';
    }
    else if (rotq == 270) {
      ier = ier + ' (rotation=3)'; a.style.height = imx + 'px';
    }
    else {
      ier = ''; a.style.height = imy + 'px';
    }
    $('archive-image').style.filter = ier;
    $('archive-image-overlay').style.filter = ier;
  }
  else { // others
    var cfr = 'translate(0, 0) rotate(' + rotq + 'deg)';
    var d = Math.floor((imy - w) / 2);
    if ((rotq == 90) || (rotq == 270)) {
      cfr = 'translate(' + d + 'px, -' + d + 'px) rotate(' + rotq + 'deg)';
      a.style.height = w + 'px';
    }
    else {
      a.style.height = imy + 'px';
    }
    $('archive-image').style[p] = cfr;
    $('archive-image-overlay').style[p] = cfr;
  }
}

