var Event = YAHOO.util.Event;
var Dom = YAHOO.util.Dom;
var Anim = YAHOO.util.Anim;
var Connect = YAHOO.util.Connect;

Dom.addChild = function(oParent, oChild){
	var rChildren = [].concat(oChild);
	for(var i=0;i<rChildren.length;i++){
		if (typeof rChildren[i] == "object") {
			oParent.appendChild(rChildren[i]); 
		} else if (typeof rChildren[i] == "string" || typeof rChildren[i] == "number") { 
			oParent.innerHTML += rChildren[i]; 
		} 
	}
	return oParent;
}
Dom.create = function(sNodeName, oAttributes, children, oParent) {

	var oEl = document.createElement(sNodeName);
	
	//attributes
	oAttributes = oAttributes || {};
	for(var sAtt in oAttributes){
		if(sAtt == "className"){
			Dom.addClass(oEl, oAttributes[sAtt]);
		} else {
			oEl.setAttribute(sAtt, oAttributes[sAtt]);
		}
	}
	
	//children
	if(children){
		var rChildren = [].concat(children);
		for(var i=0;i<rChildren.length;i++){
			this.addChild(oEl, rChildren[i]);
		}
	}
	
	if(oParent){
		this.addChild(oParent, oEl);
	}
	
	return oEl;

}

Event.add = function(oElement,sType,oHandler,oContext,oData) {

	var oContext = oContext || window;
	var rEl = [].concat(oElement);
	for(var i=0;i<rEl.length;i++) {
		this._addSingle(rEl[i],sType, oHandler,oContext,oData);	
	}
}

Event._addSingle = function(oElement,sType,oHandler,oContext,oData){

	var _handler = function(oEvent){
		oHandler.apply(oContext,[oEvent, oElement, oData]);
	}

	Event.on(oElement,sType,_handler);

}
Function.prototype.Context = function(obj){
	var fnReference = this; 
	return function () {return typeof fnReference == "function" ? fnReference.apply(obj, arguments) : obj[fnReference].apply(obj, arguments);}; 
}
