// DOM load
function cleanWhitespace( element ) {
	element = element || document;
	var cur = element.firstChild;
	while ( cur != null ) {
		if ( cur.nodeType == 3 && ! /\S/.test(cur.nodeValue) ) {
			element.removeChild( cur );
		} else if ( cur.nodeType == 1 ) {
			 cleanWhitespace( cur );
		}
		cur = cur.nextSibling;
	}
}

function domReady( f ){
	if( domReady.done ){
		return f();
	}

	if( domReady.timer ){
		domReady.ready.push( f );
	} else {
		addEvent( window, "load", isDOMReady );

		domReady.ready = [f ];

		domReady.timer = setInterval( isDOMReady, 13 );
	}
}

function isDOMReady() {
	if( domReady.done ){
		return false;
	}
	if( document && document.getElementsByTagName &&
		document.getElementById && document.body ){

		clearInterval( domReady.timer );
		domReady.timer = null;

		for( var i = 0; i < domReady.length; i++ ){
			domReady.ready[i]();
		}

		domReady.ready = null;
		domReady.done = true;
	}
}

//Class selector
function byClass(name, type){
	var r = [];
	var t = document.getElementsByTagName(type || "*");
	for(var i = 0; i < t.length; i++){
		if(t[i].className == name){
			r.push(t[i]);
		}
	}
	return r;
}

function hasClass( name, type ){
	var r =[];

	var re = new RegExp("(^|\\s)" + name + "(\\s|$");

	var e = document.getElementsByTagName(type || "*" );
	for( var j = 0; j < e.length; j++ ){
		if( re.test(e[j])){
			r.push(e[j]);
		}
		return r;
	}
}

//get node

function text( e ){
	var t = "";

	e = e.childNodes || e;

	for( var i = 0; i < e.length; i++){
		t += e[i].nodeType != 1 ? e[i].nodeValue : text( e[i].childNodes );
	}
	
	return t;
}
// DOM Seletor Function
function ID( name ){
	return document.getElementById( name );
}

function TAG( name ){
	return document.getElementsByTagName( name );
}

function next_sibling( ele ){
	ele = ele || document;
	do{
		ele = ele.nextSibling;
	}
	while ( ele != null && ele.nodeType != 1);
	return ele;
}

function previous_sibling( ele ){
	ele = ele || document;
	do{
		ele = ele.previousSibling;
	}
	while ( ele != null && ele.nodeType != 1);
	return ele;
}

function first_child( ele ){
	ele = ele || document;
	ele = ele.firstChild;
	return ele != null && ele.nodeType != 1 ? next_sibling( ele ) : ele;
}

function first_child( ele ){
	ele = ele || document;
	ele = ele.lastChild;
	return ele != null && ele.nodeType != 1 ? previous_sibling( ele ) : ele;
}


function attr(elem, name, value){
	name = {"for":"htmlFor", "class":"className"}[name] || name;

	if(value != null){
		elem[name] = value;

		if(elem.setAttribute){
			elem.setAttribute(name, value);
		}
		return elem[name] || elem.getAttribute(name);
	}
}
