function isInClass(node, className)
{
  result = false;
  if ((node.nodeType == 1))
  {
    // getting all classes the elements are contained in
    classes = node.className.split(" ");
  
    for (i = 0; i < classes.length; i++) {
      result |= (classes[i] == className);
    }
  }
  return result; 
}

function getChildByClassName(node, className) {
  resultNode = node.firstChild;
  while ((resultNode != null) && (!isInClass(resultNode, className))) {
    resultNode = resultNode.nextSibling;
  }
  return resultNode;
}

function getNextSiblingByClassName(node, className) {
  resultNode = node.nextSibling;
  while ((resultNode != null) && (!isInClass(resultNode, className))) {
    resultNode = resultNode.nextSibling;
  }
  return resultNode;
}

function getPreviousSiblingByClassName(node, className) {
  resultNode = node.previousSibling;
  while ((resultNode != null) && (!isInClass(resultNode, className))) {
    resultNode = resultNode.previousSibling;
  }
  return resultNode;
}

function nodeInfo(node) {
  switch (node.nodeType) {
    case 1:
      result = '<' + node.tagName + ' type="' + node.nodeType + '" class="' + node.className + '" name="' + node.name + '" value="' + node.value + '" [' + node.childNodes.length + ']>';
      result += '</' + node.tagName + '>';
      break;
    case 3:
      result = '"' + node.data + '"';
      break;
    default:
      result = '<' + node.nodeType + ' />';
  }
  return result;
}

function fullNodeInfo(node) {
  result = "";

  if (node != null) {
    switch (node.nodeType) {
      case 1:
        result += '<' + node.tagName + ' class="' + node.className + '" [' + node.childNodes.length + ']>\n';
        child = node.firstChild;
        while (child != null) {
          result += nodeInfo(child);
          child = child.nextSibling;
        }
        result += '</'+ node.tagName + '>\n';
        break;
      case 3:
        result += node.data + '\n';
        break;
    }
  }
  return result;
}

function getGallery(node) {
  resultNode = node;
  while ((resultNode != null) && (!isInClass(resultNode, 'gallery'))){
    resultNode = resultNode.parentNode;
  }
  return resultNode;
}

function galleryOpenImage(thumbnailNode) {
  index = thumbnailNode.value;
  galleryNode = thumbnailNode.form;

  showImage(galleryNode, index);
}

function imageLoaded(imageNode) {
  imageNode.style.visibility = 'visible';
}

function showImage(gallery, index) {
  if (gallery.elements['src'].length > 1)
    source = gallery.elements['src'][index].value;
  else  
    source = gallery.elements['src'].value;

  fullViewNode = getChildByClassName(gallery, 'fullview');
  outerFrameNode = getChildByClassName(fullViewNode, 'outer-frame');
  innerFrameNode = getChildByClassName(outerFrameNode, 'inner-frame');
  imageFrameNode = getChildByClassName(innerFrameNode, 'image-frame');
  imageNode = getChildByClassName(imageFrameNode, 'image');
  imageNode.style.visibility = 'hidden';
  imageNode.onLoad = imageLoaded(imageNode);
  imageNode.src = source;

  if (gallery.elements['title'].length > 1)
    imageTitle = gallery.elements['title'][index].value;
  else  
    imageTitle = gallery.elements['title'].value;

  imageTitleNode = getChildByClassName(innerFrameNode, 'title');
//  imageTitleNode.firstChild.data = imageTitle;
  imageTitleNode.innerHTML = imageTitle;
  
  breadcrumbNode = getChildByClassName(innerFrameNode, 'breadcrumb')
  imageCounterNode = getChildByClassName(breadcrumbNode, 'counter');
  imageCounterNode.firstChild.data = parseInt(index) + 1;  

  gallery.elements['currentlyDisplayed'].value = index;
  
  fullViewNode.style.visibility = 'visible';
}

function galleryShowNextImage(nextButtonNode){
  gallery = nextButtonNode.form;
  total = parseInt(gallery.elements['total'].value);
  index = (parseInt(gallery.elements['currentlyDisplayed'].value) + 1) % total;
    
  showImage(gallery, index);
}

function galleryShowPreviousImage(prevButtonNode){
  gallery = prevButtonNode.form;
  total = parseInt(gallery.elements['total'].value);
  index = (parseInt(gallery.elements['currentlyDisplayed'].value) - 1) % total;
  if (index < 0)
    index = total - 1;
    
  showImage(gallery, index);
}

function galleryShowFirstImage(firstButtonNode){
  gallery = firstButtonNode.form;
  total = parseInt(gallery.elements['total'].value);
  index = 0;
    
  showImage(gallery, index);
}

function galleryShowLastImage(lastButtonNode){
  gallery = lastButtonNode.form;
  total = parseInt(gallery.elements['total'].value);
  index = (total - 1);
    
  showImage(gallery, index);
}

function galleryCloseImage(element) {
  galleryNode = element.form;
  
  fullViewNode = getChildByClassName(galleryNode, 'fullview');
  outerFrameNode = getChildByClassName(fullViewNode, 'outer-frame');
  innerFrameNode = getChildByClassName(outerFrameNode, 'inner-frame');
  imageFrameNode = getChildByClassName(innerFrameNode, 'image-frame');
  imageNode = getChildByClassName(imageFrameNode, 'image');
  
  imageNode.src = '';
  imageNode.style.visibility = 'hidden';
  fullViewNode.style.visibility = 'hidden';
}


