YAHOO.namespace('Heehaw.Dom');
YAHOO.namespace('Heehaw.tagCache');
var Y = YAHOO, H = Y.Heehaw, E = Y.util.Event, D = Y.util.Dom;

H.tagCache.BUTTON = document.createElement("input");
	H.tagCache.BUTTON.type = "button";
H.tagCache.HIDDEN_INPUT = document.createElement("input");
	H.tagCache.HIDDEN_INPUT.type = "hidden";
H.tagCache.UL = document.createElement("ul");
H.tagCache.LI = document.createElement("li");
H.tagCache.DIV = document.createElement("div");
H.tagCache.A = document.createElement("a");
H.tagCache.SPAN = document.createElement("span");
H.tagCache.STRONG = document.createElement("strong");

/**
 * create an HTML element, params is an object like: {tag:"input", deep:false, attributes:{type:"hidden"}}
 * @param {Object} params
 */
H.tagCache.createElement = function(params){
	var ucTag = params.tag.toUpperCase(), result = null;
	
	if ( Y.lang.isUndefined( H.tagCache ) ){
		H.tagCache = {};
	}
	if ( Y.lang.isUndefined(params.deep)){
		params.deep = false;
	}
	if ( Y.lang.isUndefined( H.tagCache[ ucTag ] ) ){
		result = document.createElement( params.tag );
		H.tagCache[ucTag] = result.cloneNode(params.deep);
	} else {
		result = H.tagCache[ucTag].cloneNode(params.deep);
	}
	if ( !Y.lang.isUndefined( params.attributes ) ){
		for ( var attr in params.attributes ){
			result[attr] = params.attributes[attr];
		}
	}
	
	return result;
};

H.Dom.clearNodes = function( target ){var Dom = YAHOO.util.Dom;if (!target.appendChild){var targetElement = Dom.get( target );} else {var targetElement = target;}if ( targetElement ){while( targetElement.firstChild != null ){targetElement.removeChild( targetElement.firstChild );}return true;}return false;}