function $() {
   if (arguments.length == 1) return get$(arguments[0]);
   var elements = [];
   $c(arguments).each(function(el){
      elements.push(get$(el));
   });
   return elements;

   function get$(el){
      if (typeof el == 'string') el = document.getElementById(el);
      return el;
   }
}

Object.extend = function(destination, source) {
   for (property in source) destination[property] = source[property];
   return destination;
}

if (!window.Element) var Element = new Object();

Object.extend(Element, {
   hasClassName: function(element, className) {
      element = $(element);
      if (!element) return;
      var hasClass = false;
      element.className.split(' ').each(function(cn){
         if (cn == className) hasClass = true;
      });
      return hasClass;
   }
});


document.getElementsByClassName = function(className) {
   var children = document.getElementsByTagName('*') || document.all;
   var elements = [];
   $c(children).each(function(child){
      if (Element.hasClassName(child, className)) elements.push(child);
   });
   return elements;
}

//useful array functions
Array.prototype.each = function(func){
   for(var i=0;ob=this[i];i++) func(ob, i);
}

function $c(array){
   var nArray = [];
   for (i=0;el=array[i];i++) nArray.push(el);
   return nArray;
}
