var addEvent = function (obj, evType, fn){	
 if ( obj != null && obj.addEventListener){
   obj.addEventListener(evType, fn, false);
   return true;
 } else if (obj.attachEvent){
   var r = obj.attachEvent("on"+evType, fn);
   return r;
 } else {
   return false;
 }
}
var getCurrentStyle = function(HTMLObject, CSSProperty) {
	if(HTMLObject.currentStyle) {
		var generatedProp = String(CSSProperty).replace(/-(\w)/g,function(a,b){ return b.toUpperCase(); });
		return HTMLObject.currentStyle[generatedProp];
	} else if(typeof(document.defaultView.getComputedStyle) == 'function') {
		return document.defaultView.getComputedStyle(HTMLObject, null).getPropertyValue(CSSProperty);
	}
	return false;
};
var getObjectSize = function(HTMLObject) {
	var wBL = 1*this.getCurrentStyle(HTMLObject,'border-left-width').replace(/[^\d]/g,'');
	var wBR = 1*this.getCurrentStyle(HTMLObject,'border-right-width').replace(/[^\d]/g,'');
	var wPL = 1*this.getCurrentStyle(HTMLObject,'padding-left').replace(/[^\d]/g,'');
	var wPR = 1*this.getCurrentStyle(HTMLObject,'padding-right').replace(/[^\d]/g,'');
	if(this.debug) {
		writeToD(HTMLObject.tagName+' >> '+HTMLObject.offsetWidth+'::'+wBL+'::'+wBR+'::'+wPL+'::'+wPR);
	}
	var w = HTMLObject.offsetWidth-wBL-wBR-wPL-wPR;

	var hBT = 1*this.getCurrentStyle(HTMLObject,'border-top-width').replace(/[^\d]/g,'');
	var hBB = 1*this.getCurrentStyle(HTMLObject,'border-bottom-width').replace(/[^\d]/g,'');
	var hPT = 1*this.getCurrentStyle(HTMLObject,'padding-top').replace(/[^\d]/g,'');
	var hPB = 1*this.getCurrentStyle(HTMLObject,'padding-bottom').replace(/[^\d]/g,'');
	var h = HTMLObject.offsetHeight-hBT-hBB-hPT-hPB;
	return Array(w,h);
};
var setClass = function(a,o,c1,c2){
  switch (a){
    case 'swap':
      o.className=!setClass('check',o,c1)?o.className.replace(c2,c1):o.className.replace(c1,c2);
    break;
    case 'add':
      if(!setClass('check',o,c1)){o.className+=o.className?' '+c1:c1;}
    break;
    case 'remove':
      var rep=o.className.match(' '+c1)?' '+c1:c1;
      o.className=o.className.replace(rep,'');
    break;
    case 'check':
      return new RegExp('\\b'+c1+'\\b').test(o.className)
    break;
  }
}
