/** $(idOrEl, idOrEl2, idOrEl3, ...) -- getElement(s)ById
 ** Returns DOM elements based on their string IDs.
 ** Will return a single element given a single argument, otherwise an array.
 ** Originally from Sam Stephenson <sam@conio.net>. Much better now.
 **/
function $()
{
  var els = [], el = null;
  for (var i = 0; i < arguments.length; i++)
  {
    el = arguments[i];
    if (typeof el == 'string')
    {
      el = document.getElementById(el);
    }
    if (arguments.length == 1)
    {
      return el;
    }
    els.push(el);
  }
  return els;
}

/** Originally from Sam Stephenson <sam@conio.net>. **/
function $A(iterable) {
  if (!iterable) return [];
  if (iterable.toArray) {
    return iterable.toArray();
  } else {
    var results = [];
    for (var i = 0; i < iterable.length; i++)
      results.push(iterable[i]);
    return results;
  }
}

/** $class(sTagName, sClassName[, elRoot]) -- getElementsByClassName
 ** Returns all elements of a given tag name (* for all) with the given class
 ** name, optionally restricted to the subtree of a specific element, elRoot.
 **/
function $class(sTagName, sClassName, elRoot)
{
  var elsMatch = [];
  var elsAll = $T(sTagName, elRoot);

  try {
    for (var i=0; i < elsAll.length; i++)
    {
        if (CSS.hasClass(elsAll[i], sClassName))
        {
          elsMatch[elsMatch.length] = elsAll[i];
        }
    }
  }
  catch (e) {}
}
getElementsByClass = getElementsByClassName = $class;

/** $tag(sTagName[, elRoot]) -- getElementsByTagName
 ** Returns all elements of a given tag name (* for all) , optionally restricted
 ** to the subtree of a specific element, elRoot.
 **/
function $tag(sTagName, elRoot)
{
  if (!elRoot)
  {
    elRoot = document;
  }

  return elRoot.getElementsByTagName(sTagName);
}
