/**
 * Dynamically add a class to an element
 */
function addClass(element, classAdd) {
	if ( element.className.indexOf( classAdd ) >= 0 )
		return true;

	element.className += element.className ? ' ' + classAdd : classAdd;
}

/**
 * Dynamically remove a class to an element
 */
function removeClass(element, className) {
	var replace = element.className.match(' ' + className) ? ' ' + className : className;
	element.className = element.className.replace(replace, '');
}

/**
 * Get elements by their class name
 */
if ( !document.getElementsByClassName ) {
	document.getElementsByClassName = function( className, root, element ) {
		if ( root == null )
			root = document;
		if ( element == null )
			element = '*';

		var elements = new Array();
		var tmp;

		for ( var i = 0; ( tmp = root.getElementsByTagName( element )[i] ); i++ )
			if ( tmp.className.indexOf( className ) >= 0 )
				elements[elements.length] = tmp;

		return elements.length > 0 ? elements : null;
	};
}

/**
 * Get cross browser XMLHTTPRequest object
 */
function AJAX() {
	var o = false;

	/*@cc_on @*/
	/*@if (@_jscript_version >= 5)
		try {
			o = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				o = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (E) {
				o = false;
			}
		}
	@end @*/

	if ( !o && typeof XMLHttpRequest != 'undefined' ) {
		o = new XMLHttpRequest();

		if ( o.overrideMimeType ) {
				o.overrideMimeType( 'text/xml' );
		}
	}

	return o;
}

var xhReq;

/**
 * Open URL and fetch data
 */
function doXmlHttpRequest( url, fn, queryString, method ) {
	if ( method == null ) method = 'GET';

	xhReq = AJAX();

	if ( method == 'POST' )
		xhReq.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded' );

	xhReq.onreadystatechange = function() {
		if ( xhReq.readyState == 4 || xhReq.readyState == 'complete' ) {
			if ( xhReq.status == 200 )
	            fn( xhReq.responseXML );
        }
    }

	xhReq.open( method, url, true );
	xhReq.send( queryString );
}