/** version 1.0
 *  reads and write rel-attribute for a-elements and link-elements
 */

function addRel(element, relName) {
    if (!hasRel(element, relName)) {
        if (element.rel) element.rel += " " + relName;
        else element.rel = relName;
    }
};

function removeRel(element, relName) {
    var regexp = new RegExp("(^|\\s)" + relName + "(\\s|$)");
    element.rel = element.rel.replace(regexp, "$2");
};

function hasRel(element, relName) {
    var regexp = new RegExp("(^|\\s)" + relName + "(\\s|$)");
    return regexp.test(element.rel);
};

getElementsByRelName = function(relName, tagName, fromElement) {
  var startNode = fromElement || document;
  var tagFilter = tagName || "*";
  var children = startNode.getElementsByTagName(tagFilter);
  var elements = new Array();
  
  for (var i = 0; i < children.length; i++) {
    var child = children[i];
    var relNames = child.getAttribute("rel").split(' ');
    for (var j = 0; j < relNames.length; j++) {
      if (relNames[j] == relName) {
        elements.push(child);
        break;
      }
    }
  }
  return elements;
}

document.getElementsByRelName = getElementsByRelName;
$R = getElementsByRelName;