/*
// Javascript DOM Extended
// Version: 1.4
//
// Requires:
// IE 6.0, NS 7.1, Opera 7.54, FireFox 1.0.6
//
// Changes:
// 21.09.05 - document created
// 24.02.06 - added func getParentElementByTag
// 12.04.06 - added func invertElementVisibilityById
// 23.05.06 - added class domSelect
// 07.09.06 - added func
//
// Copyright(c) iNeta d.o.o., dev@ineta.si
// All rights reserved. Any unauthorized use of script or part of script is prohibited.
*/

// Get parent element by tag
function getParentElementByTag(child, tagName) {
  if (!child)
    return null;
  else if (child.parentElement.tagName == tagName)
    return child.parentElement;
  else
    return getParentElementByTag (child.parentElement, tagName);
}

// Get child element by id or name
function getChildElement(parent, childName) {
  var nodes = parent.childNodes;
  var i;
  for(i=0; i < nodes.length; i++) {
    if (nodes[i].name == childName || nodes[i].id == childName)
      return nodes[i];
    else {
      var tmpNode = getChildElement(nodes[i], childName);
      if (tmpNode != null) return tmpNode;
    }
  }
  return null;
}

// Get child element by tag
function getChildElementByTag(parent, tagName) {
  var nodes = parent.childNodes;
  var i;
  for(i=0; i < nodes.length; i++) {
    if (nodes[i].tagName == tagName)
      return nodes[i];
    else {
      var tmpNode = getChildElementByTag(nodes[i], tagName);
      if (tmpNode != null) return tmpNode;
    }
  }
  return null;
}

// Get absolute coords for element by ID name
function getElementPositionById(id) {
  getElementPosition (document.getElementById (id));
}

// Get absolute coords for element by object reference
function getElementPosition(offsetTrail) {
  var offsetLeft = 0;
  var offsetTop = 0;
  while (offsetTrail){
    offsetLeft += offsetTrail.offsetLeft;
    offsetTop += offsetTrail.offsetTop;
    offsetTrail = offsetTrail.offsetParent;
  }
  if (navigator.userAgent.indexOf('Mac') != -1 && typeof document.body.leftMargin != 'undefined') {
    offsetLeft += document.body.leftMargin;
    offsetTop += document.body.topMargin;
  }
  return {left:offsetLeft, top:offsetTop};
}

// Set element visiblity by ID name
function setElementVisibilityById(id, visible) {
  var obj = document.getElementById (id);
  setElementVisibility(obj, visible);
}

// Set element visiblity by object reference
function setElementVisibility(obj, visible) {
  if (obj) {
    obj.style.visibility = (visible ? "visible" : "hidden");
    obj.style.display =    (visible ? ""        : "none");
  }
}

// Invert element visiblity
function invertElementVisibilityById(id, imgId, imgOn, imgOff) {
  var obj = document.getElementById (id);
  var visible = !(obj.style.visibility == "visible" || obj.style.visibility == "");
  setElementVisibility(obj, visible);
  if (imgId) {
    var obj = document.getElementById (imgId);
    if (obj) {
      if (visible) obj.src = imgOn;
      else obj.src = imgOff;
    }
  }
}

// --------------------------------------------------------------------------------------------------------------

// HTML Select object
function domSelect(obj) {
  this.obj = obj;

  this.clear = function() {
    while (this.obj.length > 0) this.obj.remove(0); // Remove options
    while (this.obj.hasChildNodes()) this.obj.removeChild(this.obj.firstChild); // Remove options groups (does not work in Opera 7)
  }

  this.add = function(value, caption) {
    var opt = document.createElement("option");
    opt.value = value;
    opt.appendChild(document.createTextNode (caption));
    this.obj.appendChild(opt);
  }

}
