Element={
	addClass: function(ele,className) {
		if (!Element.hasClass(ele,className)) {
			ele.className+=' '+className;
		}
	},
	
	hasClass: function(ele,className) {
		var classes = ele.className.split(' '); 
		for (var i=0;i<classes.length;i++) {
			if (classes[i] == className) return true;
		} 
		return false;
	},
	
	removeClass: function(ele,className) {
		var classes = ele.className.split(' '); 
		var ret = '';
		for (var i=0;i<classes.length;i++) {
			if (classes[i] != className) ret+= ' '+classes[i];
		}	
		ele.className=ret;
	},
	
	removeChildren: function(ele) {
		while(ele.firstChild) ele.removeChild(ele.firstChild);
	},
	
	isVisible: function(ele) {
		while(ele.tagName != 'BODY') {
			if(ele.style.display == 'none') return false;
			if(Element.getStyle(ele,'display')=='none') return false;
			ele = ele.parentNode;
		}
		return true;
	},
	
	// find the absolute position of any object
	findPos: function(obj) {
		var curleft = curtop = 0;
		if (obj.offsetParent) {
			curleft = obj.offsetLeft
			curtop = obj.offsetTop
			while (obj = obj.offsetParent) {
				curleft += obj.offsetLeft
				curtop += obj.offsetTop
			}
		}
		return {x:curleft,y:curtop};
	},
	
	getText: function(ele) {
		var ret = ele.innerText;
		if (ret==null) ret = ele.textContent;
		if (ret==null) {
			ret = ele.innerHTML;
			if (ret != null) ret = ret.replace(/<([^<])*>/, "");
		}
		return ret;
	},
	
	setText: function(ele,text) {
		if (Browser.IE) ele.innerText=text;
		else ele.textContent = text;
	},
	
	getElementsByClassName: function(className, tag, ele) {
		var testClass = new RegExp("(^|\\s)" + className + "(\\s|$)");
		tag = tag || "*";
		ele = ele || document;
		var elements = (tag == "*" && ele.all)? ele.all : ele.getElementsByTagName(tag);
		var ret = [];
		for(var i=0,c=elements.length; i<c; i++) {
			var current = elements[i];
			if(testClass.test(current.className)) ret.push(current);			
		}
		return ret;
	}

	
};

Element.attributeAliases={'class':'className','for':'htmlFor'};

Element.setAttribute=function( ele, name, value ) {	
	if (Element.attributeAliases[name]) {
	    ele[Element.attributeAliases[name]]=value;
	} else if (value.constructor == Function) {
		ele[name]=value;
	} else {
		ele.setAttribute(name,value,0);
	}
}

Element.getStyle=function( element, cssRule ) {	  
	  if( document.defaultView && document.defaultView.getComputedStyle ) {
	    var rs = cssRule.replace( /[A-Z]/g, function(  str )  { return "-" + str.toLowerCase(); } ); 
	    return document.defaultView.getComputedStyle( element, '' ).getPropertyValue( rs );
	  }
	  else if ( element.currentStyle ) return element.currentStyle[ cssRule ];
}




/*
Element.toConstruct = function( ele, depth ) {
	if (!depth) depth = 0;
	var ret = ""
	for (var i=0;i<depth;i++) ret+='   ';
	ret+="['"+ele.nodeName.toLowerCase()+"'";
	var attributes = ele.attributes;
	if (attributes.length>0) {
		ret+=', {';
		var cnt=0;
		for (var i=0;i<attributes.length;i++) {
			if (attributes[i].specified && attributes[i].nodeValue != null) {
				if (cnt>0) ret+=',';
				ret+="'"+attributes[i].nodeName+"'";
				ret+=":'"+attributes[i].nodeValue+"'";		
				cnt++;
			}
		}
		ret+='}';
	}
	var children = ele.children;
	if (children.length>0) {
		ret+=", [";
		for (var i=0;i<children.length;i++) {
			ret+="\n";
			ret+= Element.toConstruct( children[i],depth+1 );			
			if (i<children.length) ret+=',';
		}
		ret+="\n";
		for (var i=0;i<depth;i++) ret+='   ';
		ret+="]"
	} else {
		if (ele.innerText.length>0) {
			ret+= ",'"+ele.innerText+"'";
		}
	}	
	ret+="]";
	return ret;
} 
*/

Element.construct = function( t ) {
	var e=null;
	if (t == undefined || t==null) return null;		
	else if (t.constructor == String) {
		e = document.createTextNode(t);
	} else if (t.constructor == Array && t.length > 0) {		
		var tagName    = (t.length>0 && t[0].constructor==String) ? t[0].toUpperCase() : null;
		var attributes = (t.length>1 && t[1].constructor==Object) ? t[1] : null;
		if (tagName) {
			if (Browser.IE && attributes && attributes.name!=null) {
				e = document.createElement('<'+tagName+' name="'+attributes.name+'"></'+tagName+'>');
				if (attributes) {
					for (var name in attributes) {
						if (name!='name') Element.setAttribute(e,name,attributes[name]);
					}
				}
			} else {
				e = document.createElement(tagName);
				if (attributes) {
					for (var name in attributes) Element.setAttribute(e,name,attributes[name]);
				}
			}
		
			for (var p=(attributes) ? 2:1;p<t.length;p++) {
				if (t[p].nodeName) {
					e.appendChild(t[p]);
				} else if (t[p].constructor==Array) {
					var children = t[p];
					for (var i=0;i<children.length;i++) {
						if (children[i]!=undefined) {
							var c=Element.construct(children[i]);
							if (c!=null) e.appendChild(c);	
						}
					}
				} else if (t[p].constructor==String) {
					e.appendChild(document.createTextNode(t[p]));
				}
			}
		}
	} else if (t.nodeName) {
		e=t;
	}
	return e;
}









