if (typeof(svnwikiImage) != "object") {

var svnwikiImage = new Object();

svnwikiImage.pickSize = function (imgName, prefix, width, height)
{
  var sizesDiv = document.getElementById('svnwikiImageSizes' + imgName);
  svnwikiJavascript.cleanContent(sizesDiv);
  sizesDiv.appendChild(svnwikiJavascript.makeElement('p', document.createTextNode('Please wait, loading image...')));

  var img = document.getElementById('svnwikiImage' + imgName);
  img.width = width;
  img.height = height;
  img.src = prefix + '-' + Math.max(width, height);
  img.onload = function () { svnwikiJavascript.cleanContent(sizesDiv); };

  var imgLink = document.getElementById('svnwikiImageLink' + imgName);
  if (imgLink) {
    imgLink.setAttribute('href', img.src);
  }
}

svnwikiImage.initImageView = function (imgName, sizes, prefix, path, linkTags) {
  svnwikiJavascript.queryStringInit();
  svnwikiImage.setInitialImageSize(imgName, sizes, prefix);
  var tag = svnwikiJavascript.queryString['tag'];
  if (tag && tag.length > 0)
    svnwikiImage.addTagLinks(imgName, path, linkTags, tag[0]);
}

svnwikiImage.addTagLinks = function (imgName, path, linkTags, tag) {
  svnwikiJavascript.loadXml(linkTags + '/' + tag + '.xhtml', function (xmlDoc) { svnwikiImage.addTagLinksNow(imgName, path, linkTags, tag, xmlDoc); });
}

svnwikiImage.addTagLinksNow = function (imgName, path, linkTags, tag, xmlDoc) {
  var ul = document.getElementById('svnwiki-image-links-' + imgName);
  var prev, next;
  var found = false;
  svnwikiTagsLoader.iterateListOfLinks(xmlDoc.getElementById("files-for-tag"), function(target, name, class) {
    var classes = class.split(" ");
    var rightClass = false;
    for (var i in classes)
      if (classes[i] == 'image')
        rightClass = true;
    if (!rightClass)
      return;
    if (name == path) {
      found = true;
      return;
    }
    if (!found) {
      prev = target;
      return;
    }
    if (next)
      return;
    next = target;
  });
  if (!found)
    return;
  var size = '';
  svnwikiJavascript.queryStringInit();
  if (svnwikiJavascript.queryString['size'])
    size += '&size=' + svnwikiJavascript.queryString['size'][0];
  if (prev)
    svnwikiImage.addTagLinksOne(ul, linkTags + '/' + prev + '?tag=' + tag + size, '⇦ Previous in tag: ' + tag);
  svnwikiImage.addTagLinksOne(ul, linkTags + '/' + tag + '?view=image' + size, 'Tag: ' + tag);
  if (next)
    svnwikiImage.addTagLinksOne(ul, linkTags + '/' + next + '?tag=' + tag + size, 'Next in tag: ' + tag + ' ⇨');
}

svnwikiImage.addTagLinksOne = function (ul, target, linkName) {
  ul.appendChild(svnwikiJavascript.makeElement('li', svnwikiJavascript.makeLink(target, document.createTextNode(linkName))));
}

svnwikiImage.setInitialImageSize = function (imgName, sizes, prefix) {
  // TODO: Remove the next line, the call to queryStringInit, once we're sure
  // that all pages have been updated so that everyone gets to this function
  // from initializeImageView.
  svnwikiJavascript.queryStringInit();
  if (!svnwikiJavascript.queryString['size'])
    return;
  var size = parseInt(svnwikiJavascript.queryString['size'][0]);
  if (isNaN(size))
    return;
  var choice = null;
  for (var j = 0; j < sizes.length; j ++) {
    var m = Math.max(sizes[j][0], sizes[j][1]);
    if (m > size)
      continue;
    if (choice && Math.max(sizes[choice][0], sizes[choice][1]) > m)
      continue;
    choice = j;
  }
  if (!choice)
    return;
  svnwikiImage.pickSize(imgName, prefix, sizes[choice][0], sizes[choice][1]);
}

svnwikiImage.showSizes = function (imgName, sizes, prefix)
{
  var sizesDiv = document.getElementById('svnwikiImageSizes' + imgName);
  var img = document.getElementById('svnwikiImage' + imgName);

  if (sizesDiv.firstChild) {
    svnwikiJavascript.cleanContent(sizesDiv);
    return;
  }

  var ul = document.createElement('ul');
  ul.setAttribute('class', 'svnwiki-image-sizes');
  for (var j = 0; j < sizes.length; j ++) {
    var target = "javascript:svnwikiImage.pickSize('" + imgName + "','" + prefix + "'," + sizes[j][0] + "," + sizes[j][1] + ");";
    var text = document.createTextNode(sizes[j][0] + "x" + sizes[j][1]);
    ul.appendChild(svnwikiJavascript.makeElement('li', svnwikiJavascript.makeLink(target, text)));
  }
  sizesDiv.appendChild(ul)
}

svnwikiImage.imageSizes = [ 100, 240, 500 ];
svnwikiImage.currentImageSize = 0;
svnwikiImage.imagesList = [];

svnwikiImage.tagsDisplayImages = function (tag) {
  svnwikiTagsLoader.hideAll();
  if (!svnwikiImage.imagesList.length) {
    svnwikiImage.loadImagesList();
  }
  svnwikiImage.currentTag = tag;
  svnwikiImage.updateImagesDisplay();
}

svnwikiImage.loadImagesList = function() {
  var files = document.getElementById('files-for-tag').getElementsByTagName('li');
  svnwikiImage.imagesList = [];
  for (i = 0; i < files.length; i ++) {
    var fileClasses = files[i].getAttribute('class').split(' ');
    for (c = 0; c < fileClasses.length; c ++) {
      if (fileClasses[c] == 'image') {
        url = files[i].firstChild.getAttribute('href')
        name = 'files[i].firstChild.firstChild.textContent';
        svnwikiImage.imagesList.push([url, name]);
      }
    }
  }
}

svnwikiImage.currentTag = null;

svnwikiImage.updateImagesDisplay = function() {
  svnwikiJavascript.queryStringInit();
  var size = svnwikiJavascript.queryString['size'];
  document.getElementById('tag-list-images').style.display = 'inline'
  var container = document.getElementById('tag-list-images').getElementsByTagName('ul')[1];
  svnwikiJavascript.cleanContent(container)
  for (var i = 0; i < svnwikiImage.imagesList.length; i ++) {
    url = svnwikiImage.imagesList[i][0];
    name = svnwikiImage.imagesList[i][1];
    var img = svnwikiJavascript.makeElement('img');
    img.setAttribute('src', url + '-' + svnwikiImage.imageSizes[svnwikiImage.currentImageSize]);
    separator = '?'
    if (svnwikiImage.currentTag) {
      url += separator + 'tag=' + svnwikiImage.currentTag;
      separator = '&';
    }  
    if (size) {
      url += separator + 'size=' + svnwikiJavascript.queryString['size'][0];
      separator = '&';
    }
    container.appendChild(svnwikiJavascript.makeElement('li', svnwikiJavascript.makeLink(url, img)));
  }
}

svnwikiImage.changeImageSize = function (direction) {
  var x = svnwikiImage.currentImageSize + direction;
  if (x < 0 || x >= svnwikiImage.imageSizes.length)
    return;
  svnwikiImage.currentImageSize = x;
  svnwikiImage.updateImagesDisplay();
}

}