ABC = {
	/*	
	* @Positioning
	*/
	
	position: function(el) {
		var p = { x: el.offsetLeft, y: el.offsetTop };
		while (el.offsetParent)	{
			el = el.offsetParent;
			p.x += el.offsetLeft;
			p.y += el.offsetTop;
			if (el != document.body && el != document.documentElement) {
				p.x -= el.scrollLeft;
				p.y -= el.scrollTop;
			}
		}
		return p;
	},
	
	screenSize: function() {
	    var w, h;
	    w = (window.innerWidth ? window.innerWidth : (document.documentElement.clientWidth ? document.documentElement.clientWidth : document.body.offsetWidth));
	    h = (window.innerHeight ? window.innerHeight : (document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.offsetHeight));
	    
	    return {w:w, h:h};
	},
	
	getBodyScrollTop: function() {
	  return self.pageYOffset || (document.documentElement && document.documentElement.scrollTop) || (document.body && document.body.scrollTop);
	},
	
	getBodyScrollLeft: function() {
	  return self.pageXOffset || (document.documentElement && document.documentElement.scrollLeft) || (document.body && document.body.scrollLeft);
	},
	
	getCursorPosition: function(oEvent) {
		var mouseX = (oEvent || window.event).clientX;
		var mouseY = (oEvent || window.event).clientY;
		
		if (ABC.getBodyScrollTop() > 0) {
			mouseY = mouseY + ABC.getBodyScrollTop();
		}
		
		return {x: mouseX, y: mouseY};
	},
	
	
	
	/*	
	* @Event processing 
	*/
	addEvent: function(elm, evType, fn, useCapture) {
	    if (elm.addEventListener) {
	        elm.addEventListener(evType, fn, useCapture);
	        return true;
	    }
	    else if (elm.attachEvent) {
	        var r = elm.attachEvent('on' + evType, fn);
	        return r;
	    }
	    else {
	        elm['on' + evType] = fn;
	    }
	},
	
	cancelDefaultEvent: function(oEvent) {
		oEvent = (oEvent) ? oEvent : window.event;
		
		if(oEvent.preventDefault) {
			oEvent.preventDefault();	
		} else {
			oEvent.returnValue = false;	
		}
	},
	
	/*
	* @Selectors
	*/
	getElementsByClass: function(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 (i = 0, j = 0; i < elsLen; i++) {
	        if ( pattern.test(els[i].className) ) {
	            classElements[j] = els[i];
	            j++;
	        }
	    }
	    return classElements;
	},
	
	$: function() {
	    var elements = new Array();
	    for (var i = 0; i < arguments.length; i++) {
	        var element = arguments[i];
	        if (typeof element == 'string')
	            element = document.getElementById(element);
	        if (arguments.length == 1)
	            return element;
	        elements.push(element);
	    }
	    return elements;
	}
	
}

/*
function findClass(str, node) {
    if(document.getElementsByClassName) return (node || document).getElementsByClassName(str);
    else {
        var node = node || document, list = node.getElementsByTagName('*'), length = list.length, Class = str.split(/\s+/), classes = Class.length, array = [], i, j, key;
        for(i = 0; i < length; i++) {
            key = true;
            for(j = 0; j < classes; j++) if(list[i].className.search('\\b' + Class[j] + '\\b') == -1) key = false;
            if(key) array.push(list[i]);
        }
        return array;
    }
}
*/