	var aso = {
		'version' : 'Alpha',
		'build' : ''
	};
	aso.core = {
		ObjectReservedWords : 'extend,add,prototype,inherit',
		/* ASOobject : (function(){
			Object.prototype.extend = function(obj){
				function _func() {}
				_func.prototype = this;
				var _instance = new _func();
				if(obj) _instance.add(obj);
				return _instance;
			};
			Object.prototype.add = function(obj){
				for(i in obj) this[i] = obj[i];
			};
			Function.prototype.inherit = function(base){
				if(base.constructor == Function){
					this.prototype = new base;
					this.prototype.constructor = this;
					this.prototype.parent = base.prototype;
				}else{
					this.prototype = base;
					this.prototype.constructor = this;
					this.prototype.parent = base;
				}
				return this;
			};
		})(),
		Class : function(obj){
			var obString = '';
			for(o in obj) if(typeof obj[o]=='string') obString+= o+",";
			var F = function(arg){
				if(arg) for(var i in arg) if(obString.match(this[i]))this[i] = arg[i];	
			};
			for(var i in obj){
				if(i == 'parent'){
					if(typeof obj[i] == 'function'){
						F.prototype = new obj[i];
						F.prototype.constructor = F;
					}else{
						F.prototype = obj[i];
					}
				}else if(!aso.core.ObjectReservedWords.match(i)){
					F.prototype[i] = obj[i];
				}
			}
			return F;
		}, */
		DOMElement : {
			extend: function(name,func){
				document[name] = func;
				if(!document.all)
					eval("HTMLElement.prototype." + name + " = func");
				else{
					var _createElement = document.createElement;
					document.createElement = function(tag){
						var _elem = _createElement(tag);
						eval("_elem." + name + " = func");
						return _elem;
					}
					var _getElementById = document.getElementById;
					document.getElementById = function(id){
						try{
							var _elem = _getElementById(id);
							eval("_elem." + name + " = func");
							return _elem;
						}catch(e){}
					}
					var _getElementsByTagName = document.getElementsByTagName;
					document.getElementsByTagName = function(tag){
						var _arr = _getElementsByTagName(tag);
						for(var _elem=0;_elem<_arr.length;_elem++)
							eval("_arr[_elem]." + name + " = func");
						return _arr;
					}
				}
			},
			getElementsByClassName : function(){
				var 	_arrCls = [],
					_arr =  _getElementsByTagName("*"),
					_arrCount = _arr.length;
				while(_arrCount--)
					if(_arr[_arrCount].className == cls)
						_arrCls.push(_arr[_arrCount])
				return _arrCls;
			}	
		},
		loadarray : [],
		DOMReady : function(func){
			if(document.addEventListener){
				document.addEventListener("DOMContentLoaded",func, false);
			}else{
				loadarray = aso.core.loadarray;
				loadarray.push(func)
				document.onreadystatechange = function(){
					if(document.readyState == "interactive"){
						for(var i = 0;i<loadarray.length;i++) loadarray[i]();
					}
				}
			}
		},
		// -- Simon Willison window.onload replacement 
		// -- http://simonwillison.net/2004/May/26/addLoadEvent/
		addLoadEvent : function (func) {
			var oldonload = window.onload;
			if (typeof window.onload != 'function') {
				window.onload = func;
			} else {
				window.onload = function() {
					if (oldonload) {
						oldonload();
					}
					func();
				}
			}
		}
	};

	(function(){
		DOMelement = aso.element;
		Class = aso.core.Class;
		window.onDomReady = aso.core.DOMReady;
		window.onDocumentReady = aso.core.addLoadEvent;
		__window = window;
		__domelement = aso.core.DOMElement;
		__domelement.extend("getElementsByClassName",__domelement.getElementsByClassName);
	})();