function hasClass(pElement, pClassName) {
  var classNames = pElement.className.split(" ");
  return findInArray(classNames, pClassName) != -1;
}

function getElementsByTagNameAndClass(pParent, pTagName, pClassName) {
  var results = new Array();
  var elements = pParent.getElementsByTagName(pTagName);
  for (var i = 0; i < elements.length; i++) {
    var element = elements[i];
    if (hasClass(element, pClassName)) {
      results.push(element);
    }
  }
  return results;
}

function findInArray(pArray, pItem) {
  for (var i in pArray) {
    if (pArray[i] === pItem) {
      return i;
    }
  }
  return -1;
}

function utilZeroPad(pNumber, pLength) {
  var stringNumber = pNumber.toString(10);
  while (stringNumber.length < pLength) {
    stringNumber = "00000000" + stringNumber;
  }
  return stringNumber.substr(stringNumber.length - pLength);
}

function utilGetAbsoluteTop(pElement) {
  var top = 0;
  while (pElement) {
    top += pElement.offsetTop;
    pElement = pElement.offsetParent;
  }
  return top;
}

function utilGetAbsoluteLeft(pElement) {
  var left = 0;
  while (pElement) {
    left += pElement.offsetLeft;
    pElement = pElement.offsetParent;
  }
  return left;
}

function addClassName(pElement, pClass) {
  if (!pElement.className) {
    pElement.className = pClass;
  }
  else {
    var pClassUpper = pClass.toUpperCase();
    var classList = pElement.className.replace(/ +/, " ").split(" ");
    for (var i = 0; i < classList.length; i++) {
      if (classList[i] == "") {
        alert("Found");
      }
      if (classList[i].toUpperCase() == pClassUpper) {
        return;
      }
    }
    classList[classList.length] = pClass;
    pElement.className = classList.join(" ");
  }
}

function removeClassName(pElement, pClass) {
  if (pElement.className) {
    var pClassUpper = pClass.toUpperCase();
    var classList = pElement.className.replace(/ +/, " ").split(" ");
    for (var i = 0; i < classList.length; i++) {
      if (classList[i].toUpperCase() == pClassUpper) {
        classList.splice(i, 1);
        i--;
      }
    }
    pElement.className = classList.join(" ");
  }
}

function myAddEventListener(pElement, pEventName, pFunction, pUseCapture) {
  if (pElement.addEventListener) {
    pElement.addEventListener(pEventName, pFunction, pUseCapture);
  }
  else if (pElement.attachEvent) {
    pElement.attachEvent("on" + pEventName, pFunction);
  }
}

function setTemporaryColor(pElement, pColor) {
  if (!pElement.style.saveColor) {
    pElement.style.saveColor = pElement.style.color;
  }
  pElement.style.color = pColor;
}

function restoreColor(pElement) {
  pElement.style.color = pElement.style.saveColor;
}

String.prototype.trim = function() {
  return this.replace(/^\s+|\s+$/g,"");
}

String.prototype.ltrim = function() {
  return this.replace(/^\s+/,"");
}

String.prototype.rtrim = function() {
  return this.replace(/\s+$/,"");
}

arraySum = function(array) {
  var sum = 0;
  for (var i = 0; i < array.length; i++) {
    sum += array[i];
  }
  return sum;
}

