var Event = {
  add: function() {
    if (window.addEventListener) {
      return function(el, type, fn) {
        el.addEventListener(type, fn, true);
      };
    } else if (window.attachEvent) {
      return function(el, type, fn) {
        var f = function() {
          fn.call(Dom.get(el), window.event);
        };
        el.attachEvent('on' + type, f);
      };
    }
  }(),
  cancel: function(event)
  {
    this.preventDefault(event);
    this.stopPropagation(event);
  },
  preventDefault: function(event)
  {
    if (event.preventDefault) event.preventDefault();
    else event.returnValue = false;
  },
  stopPropagation: function(event)
  {
    if (event.stopPropagation) event.stopPropagation();
    else event.cancelBubble = true;
  }
 };
var Style = {
  get: function() {
  if (document.defaultView && document.defaultView.getComputedStyle) {
      return function(el,newStyle) {
        return document.defaultView.getComputedStyle(el,null).getPropertyValue(newStyle);
      }
	}
  else if (window.getComputedStyle) {
      return function(el,newStyle) {
        return window.getComputedStyle(el,null).getPropertyValue(newStyle);
      }
	}
    else
    {
      return function(el,newStyle) {
        newStyle = newStyle.replace('margin-left','marginLeft');
        return (el.currentStyle) ? el.currentStyle[newStyle] : el[newStyle];
      }
    }
  }(),
  set: function(el,newStyle,value) {
    el.style[newStyle] = value;
  },
  setOpacity: function()
  {
    if ((document.defaultView && document.defaultView.getComputedStyle) || window.getComputedStyle) {
      return function(el,opacity)
      {
        el.style['opacity'] = opacity;
      };
  	}
    else
    {
      return function(el,opacity)
      {
        //alert('setAttribute');
        opacity *= 100;
        el.style.setAttribute('filter', ('alpha(opacity='+opacity+')'));
      };
    }
  }()
};
var Dom = {
  get: function(el) {
    return document.getElementById(el);
  },
  getElementsByClassName: function(className, tag, elm){
  	var testClass = new RegExp("(^|\\s)" + className + "(\\s|$)")
  	var tag = tag || "*";
  	var elm = elm || document;
  	var elements = (tag == "*" && elm.all)? elm.all : elm.getElementsByTagName(tag);
  	var returnElements = [];
  	var current;
  	var length = elements.length;
  	for(var i=0; i<length; i++){
  		current = elements[i];
  		if(testClass.test(current.className)){
  			returnElements.push(current);
  		}
  	}
  	return returnElements;
  },
  add: function(el, dest) {
    var el = (typeof(el) == 'string') ? this.get(el) : el;
    var dest = (typeof(dest) == 'string') ? this.get(dest) : dest;
    dest.appendChild(el);
  },
  remove: function(el) {
    var el = this.get(el);
    el.parentNode.removeChild(el);
  }
  };
