/**
 * Obtém um elemento.
 */
function getElement ( id ) {
	return document.getElementById( id );
}

/**
 * Obtém elementos de um nó que tem uma certa class.
 */
function getElementsByClassName ( classname, node )  {
    if ( !node ) {
		node = document.getElementsByTagName("body")[0];
	}
    var a = [];
    var els = node.getElementsByTagName( "*" );
    for ( var i = 0; i < els.length; i++ ) {
        if ( checkClassName( classname, els[i] )) {
			a.push( els[i] );
		}
	}
    return a;
}

function checkClassName ( classname, node ) {
    var re = new RegExp( '\\b' + classname + '\\b' );
	return re.test( node.className )
}

/**
 * Mostra um elemento.
 */
function showElement ( elem ) {
	elem.style.display = 'block';
}

/**
 * Esconde um elemento.
 */
function hideElement ( elem ) {
	elem.style.display = 'none';
}

/**
 * Inverte o estado de exibição de um elemento.
 */
function toggleElement ( elem ) {
	if ( elem.style.display != 'block' ) {
		showElement( elem );
	}
	else {
		hideElement( elem );
	}
}

/**
 * Mostra um elemento, escondendo o último exibido.
 */
var last = null;
function changeElementShown ( id ) {
	if ( last != null ) {
		hideElement( last );
	}
	if ( last != id ) {
		showElement( id );
		last = id;
	}
	else {
		last = null;
	}
}

function selectAll ( prefix, form ) {
	for ( var i = 0; i < form.elements.length; i++ ) {
		var elem = form.elements[i];
		if ( ( elem.type == 'checkbox' ) && ( elem.id.startsWith( prefix ) ) ) {
			alert( elem.id );
		}
	}
}

function getEventSource ( e ) {
	// get the source element in a cross-browser way
	if ( window.event ) { 
		return window.event.srcElement;
	} 
	else if ( e.target ) { 
		return e.target;
	} 
	return;
}

