function cAddEventListener( element, type, callback ) {
	if ( window.addEventListener )
		element.addEventListener( type, callback, false );
	else
		element.attachEvent( 'on' + type, callback );
}

function cPreventDefault( event ) {
	if ( event.preventDefault )
		event.preventDefault();
	else
		event.returnValue = false;
}

function cStopPropagation( event ) {
	if ( event.stopPropagation )
		event.stopPropagation();
	else
		event.cancelBubble = true;
}

function cCurrentTarget( event ) {
	return event.currentTarget ? event.currentTarget : event.srcElement;
}

function cGetComputedStyle( element ) {
	return window.getComputedStyle ? window.getComputedStyle( element ) : element.currentStyle;
}

function cGetElementsByClassName( element, className ) {
	if ( element.getElementsByClassName )
		return element.getElementsByClassName( className );
	
	var elements = new Array();
	var expression = new RegExp( '\\b' + className + '\\b' );
	for ( var n = 0; n < element.childNodes.length; n++ ) {
		if ( element.childNodes[n].nodeType == 1 ) {
			if ( expression.test( element.childNodes[n].className ) )
				elements[elements.length] = element.childNodes[n];
			if ( element.childNodes[n].childNodes.length > 0 )
				elements = elements.concat( getElementsByClassName( element.childNodes[n], className ) );
		}
	}
	return elements;
}