/**
 * RUZEE.getElementsByClass 0.1
 * (c) 2006 Steffen Rusitschka <steffen@rusitschka.de>
 *
 * RUZEE.getElementsByClass is freely distributable under the terms of 
 * an MIT-style license. For details, see http://www.ruzee.com/
 */

var RUZEE=window.RUZEE||{};

RUZEE.getElementsByClass=function(className,nodeName){
  if(!RUZEE.classCache) RUZEE.updateClassCache();
  var a=RUZEE.classCache[className]||[];
  if(!nodeName)return a;
  nodeName=nodeName.toLowerCase();
  var na=[];
  for(var i=0; i<a.length; ++i){
    if(a[i].nodeName.toLowerCase()==nodeName) na.push(a[i]);
  }
  return na;
};

RUZEE.updateClassCache=function(node){
  if(!node){
    // no param given -> start with body, clear cache
    node=document.body;
    RUZEE.classCache={};
  }
  if(node.nodeType!=1) return;
  var c=RUZEE.classCache;
  // get the classnames and store them to the cache
  if(node.className){
    var cs=node.className.split(' ');
    for(var i=0; i<cs.length; ++i){
      var a=c[cs[i]]=c[cs[i]]||[];
      a.push(node);
    }
  }

  // recurse
  var cn=node.childNodes;
  for(var i=0; i<cn.length; ++i){
    RUZEE.updateClassCache(cn[i]);
  }
};
