function $(id) {
  if ($type(id) == 'object') {
    return id;
  }
  return document.getElementById(id);
}

function $new(elem,text) {
  if (elem == 'text') {
    return document.createTextNode(text);
  }
  else {
    return document.createElement(elem.toLowerCase());
  }
}

function $type(val) {
  var type = typeof val;
  return type.toLowerCase();
}

function isIE() {
  return /msie/i.test(navigator.userAgent) && !/opera/i.test(navigator.userAgent);
}

function $opacity(elemStyle,val) {
  if (isIE()) {
    elemStyle.filter = 'alpha(opacity=' + val * 10 + ')';
  }
  else {
    elemStyle.opacity = val / 10;
  }
}

EVENT = {
  filter:function(e) {
    e = e || window.event;
    return {
      event:e,
      target:e.target || e.srcElement,
      x:e.pageX || e.clientX + document.body.scrollLeft - document.body.clientLeft,
      y:e.pageY || e.clientY + document.body.scrollTop - document.body.clientTop
    }
  },
  add:function(elem,event,callBack) {
    if (elem.addEventListener) {
      elem.addEventListener(event,callBack,false); 
    }
    else {
      elem.attachEvent("on" + event,callBack); 
    }
  },
  remove:function(elem,event,callBack) {
    if (elem.removeEventListener) {
      elem.removeEventListener(event,callBack,false); 
    }
    else {
      elem.detachEvent("on" + event,callBack); 
    }
  },
  rightClick:function(e) {
    e = EVENT.filter(e);
    if(e.event.which) {
      return e.event.which == 3 ? true : false;
    }
    else {
      if(e.button) {
        return e.button == 2 ? true : false;
      }
    }
  }
};

ELEMENT = {
  getStyle:function(el,styleProp) {
    var y = 0;
    if (el.currentStyle) {
      y = el.currentStyle[styleProp];
    }
    else {
      if (window.getComputedStyle) {
        y = document.defaultView.getComputedStyle(el,null).getPropertyValue(styleProp);
      }
    }
    return y;
  },
  position:function(e) {
    var left = 0;
    var top = 0;
    if (e.offsetHeight == 0) {
      e = e.firstChild;
    }
    while (e.offsetParent) {
      left += e.offsetLeft;
      top += e.offsetTop;
      e = e.offsetParent;
    }
    left += e.offsetLeft;
    top += e.offsetTop;
    return {
      x:left,
      y:top
    };
  },
  size:function(elem) {
    if (elem.style.pixelHeight) {
      return {
        height:elem.style.pixelHeight,
        width:elem.style.pixelWidth
      }
    } 
    else {
      return {
        height:elem.offsetHeight,
        width:elem.offsetWidth
      }
    }
  } 
};

function getElementsByClass(searchClass,node,tag) {
  var classElements = new Array();
  if (node == null) {
    node = document;
  }
  if (tag == null) {
    tag = '*';
  }
  var els = node.getElementsByTagName(tag);
  var elsLen = els.length;
  var pattern = new RegExp('(^|\s)' + searchClass + '(\s|$)');
  for (var i = 0;i < elsLen;i++) {
    if (pattern.test(els[i].className)) {
      classElements.push(els[i]);
    }
  }
  return classElements;
}

function getInputsByType(searchType,node,tag) {
  var typeElements = new Array();
  if (node == null) {
    node = document;
  }
  if (tag == null) {
    tag = '*';
  }
  var els = node.getElementsByTagName(tag);
  var elsLen = els.length;
  for (var i = 0;i < elsLen;i++) {
    if (els[i].type == searchType) {
      typeElements.push(els[i]);
    }
  }
  return typeElements;
}