function ImageOverlay() {/* This addLoadEvent function take from: http://simon.incutio.com/archive/2004/05/26/addLoadEvent */
  this.addLoadEvent = addLoadEvent;
  function addLoadEvent(func) {
    var oldonload = window.onload;
    if (typeof window.onload != 'function') {
      window.onload = func;
    } else {
      window.onload = function() {
        oldonload();
        func();
      }
    }
  }

  /* this function taken from http://www.robertnyman.com/2005/11/07/the-ultimate-getelementsbyclassname/ */
  function getElementsByClassName(oElm, strTagName, oClassNames) {
    var arrElements = (strTagName == "*" && document.all)? document.all : oElm.getElementsByTagName(strTagName);
    var arrReturnElements = new Array();
    var arrRegExpClassNames = new Array();
    if (typeof oClassNames == "object") {
      for (var i=0; i<oClassNames.length; i++) {
        arrRegExpClassNames.push(new RegExp("(^|\\s)" + oClassNames[i].replace(/\-/g, "\\-") + "(\\s|$)"));
      }
    } else {
      arrRegExpClassNames.push(new RegExp("(^|\\s)" + oClassNames.replace(/\-/g, "\\-") + "(\\s|$)"));
    }
    var oElement;
    var bMatchesAll;
    for (var j=0; j<arrElements.length; j++) {
      oElement = arrElements[j];
      bMatchesAll = true;
      for (var k=0; k<arrRegExpClassNames.length; k++) {
        if (!arrRegExpClassNames[k].test(oElement.className)) {
          bMatchesAll = false;
          break;                      
        }
      }
      if (bMatchesAll) {
        arrReturnElements.push(oElement);
      }
    }
    return (arrReturnElements)
  }

  this.findImages = findImages;
  function findImages(where, className, newImageSrc) {
    var allImages = document.getElementsByTagName("img");
    var tester = new RegExp("(^|\\s)" + className + "(\\s|$)");
    for (var i = 0; i < allImages.length; i++) {
      var lookAt = allImages[i];
      if (where != null) {
        var whereParents = 0;
        if (where == "parent") {
          whereParents = 1;
        } else if (where.indexOf(".") != -1) {
          whereParents = where.split(".").length;
        }
        for (var j = 0; j < whereParents; j++) {
          if (lookAt != null) {
            lookAt = lookAt.parentNode;
          }
        }
      }
      if ((lookAt != null) && (tester.test(lookAt.className))) {
        this.overlayImage(allImages[i], newImageSrc);
      }
    }
  }

  this.overlayImage = overlayImage;
  function overlayImage(imgObj, newImageSrc) {
    var oldImageSrc = imgObj.src;
    if (imgObj != null) {
      imgObj.style['backgroundImage'] = "url('"+oldImageSrc+"')";
      imgObj.src = newImageSrc
    }
  }
}

var image_overlay = new ImageOverlay();