
(function () {

	window.Utils = function () {}

	var self = Utils;

	Utils.getViewPortSize = function () {

		var w;
		var h;

		if ( false ) {}

		else if ( typeof window.innerWidth != "undefined" ) {

			w = window.innerWidth,
			h = window.innerHeight
		}

		else if (	typeof document.documentElement != "undefined"
				 &&	typeof document.documentElement.clientWidth != "undefined"
				 &&	document.documentElement.clientWidth != 0 ) {

			w = document.documentElement.clientWidth,
			h = document.documentElement.clientHeight
		}

		else {

			w = document.getElementsByTagName('body')[0].clientWidth,
			h = document.getElementsByTagName('body')[0].clientHeight
		}

		return ( [ w, h ] );
	}

	Utils.getElement = function ( id ) {

		return ( document.getElementById( id ) );
	}

	Utils.getElementsByClassName = function ( node, className ) {

		var classElements = new Array();

		var elements = node.getElementsByTagName( "*" );

		var pattern = new RegExp( "(^|\\s)" + className + "(\\s|$)" );

		var j = 0;

		for ( var i = 0; i < elements.length; i++ ) {

			if ( elements[ i ].className ) {

				if ( pattern.test( elements[ i ].className ) ) {

					classElements[ j++ ] = elements[ i ];
				}
			}
		}

		return ( classElements );
	}

	Utils.getFirstElementByClassName = function ( node, className ) {

		var es = self.getElementsByClassName( node, className );

		if ( es.length > 0 ) {

			return ( es[ 0 ] );
		}
		else {

			return ( null );
		}
	}

	Utils.getElementsByTagName = function ( node, name ) {

		return ( node.getElementsByTagName( name ) );
	}

	Utils.getTopmostElementsByTagName = function ( node, name ) {

		var nodes = document.evaluate(

			"*[local-name()='" + name + "']",
			node,
			null,
			XPathResult.UNORDERED_NODE_ITERATOR_TYPE,
			null
		);

		var arr = new Array();

		var node = nodes.iterateNext();

		while ( node != null )
		{
			arr.push( node );

			node = nodes.iterateNext();
		}

		return ( arr );
	}

	Utils.getFirstElementByTagName = function ( node, name ) {

		return ( node.getElementsByTagName( name )[ 0 ] );
	}

	Utils.getFirstChildElementTextValue = function ( node ) {

		return ( node.firstChild.nodeValue );
	}

	Utils.addClassToElement = function ( e, className ) {

		if ( !e.className || ( e.className == "" ) ) {

			e.className = className;

			return;
		}

		var classNames = e.className.split( " " );

		for ( var i in classNames ) {

			if ( classNames[ i ] == className ) {

				return;
			}
		}

		classNames.push( className );

		e.className = classNames.toString().replace( /,/g, " " );
	}

	Utils.removeClassFromElement = function ( e, className ) {

		if ( !e.className || ( e.className == "" ) ) {

			return;
		}

		var classNames = e.className.split( " " );

		for ( var i in classNames ) {

			if ( classNames[ i ] == className ) {

				classNames.splice( i, 1 );

				e.className = classNames.toString().replace( /,/g, " " );

				return;
			}
		}
	}

	Utils.elementHasClass = function ( e, className ) {

		if ( !e.className || ( e.className == "" ) ) {

			return ( false );
		}

		return ( e.className.indexOf( className ) > -1 );
	}

	Utils.iterableToArray = function ( iterable ) {

		if ( !iterable ) {

			return ( [] );
		}

		if ( "toArray" in Object( iterable ) ) {

			return ( iterable.toArray() );
		}

		var arr = [];

		for ( var i = 0; i < iterable.length; i++ ) {

			arr[ i ] = iterable[ i ];
		}

		return ( arr );
	}

})();



