// dom helper @ June 23rd, 2008
(function(){
  function _$(elements){
    this.elements = [];
    for(var i = 0, len = elements.length; i < len; i ++){
      if(typeof elements[i] == 'string') elements[i] = document.getElementById(elements[i]);
      this.elements.push(elements[i]);
    }
    return this;
  }
  _$.prototype = {
    each : function(func){
      for(var i = 0, len = this.elements.length; i < len; i ++)func.call(this, this.elements[i]);
      return this;
    },
    on : function(type, func) {
      this.each(function(element){
        if(window.addEventListener) element.addEventListener(type, func, false);
        else if(window.attachEvent) element.attachEvent('on' + type, function(){
          func.call(element, window.event);
        });
      });
      return this;
    },
    addClass : function(className){
      this.each(function(element){
        var classNames = element.className.split(' ');
        classNames.push(className);
        element.className = classNames.join(' ');
      });
      return this;
    },
    removeClass : function(className){
      this.each(function(element){
        var _classNames = element.className.split(' ');
        var classNames = [];
        for(var i = 0, len = _classNames.length; i < len; i ++){
          if(_classNames[i] != className) classNames.push(_classNames[i]);
        }
        element.className = classNames.join(' ');
      });
      return this;
    },
    className : function(className){
	    this.each(function(element){
	      element.className = className;
	    });
	    return this;
    },
    css : function(style){
      var _this = this;
      this.each(function(element){
        for(var property in style){
          _this.setStyle(property, style[property]);
        }
      })
      return this;
    },
    setStyle : function(property, value){
      this.each(function(element){
        element.style[property] = value;
      });
      return this;
    }
  }
  window.$ = function(){
    return new _$(arguments);
  }
})();