text: //>>excludeStart("jqmBuildExclude", pragmas.jqmBuildExclude);
  //>>description: Global initialization of the library.
  //>>label: Init
  //>>group: Core
  
  
  define( [ "jquery", "./jquery.mobile.core", "./jquery.mobile.support", "./jquery.mobile.navigation",
  	"./jquery.mobile.navigation.pushstate", "../external/requirejs/depend!./jquery.mobile.hashchange[jquery]" ], function( $ ) {
  //>>excludeEnd("jqmBuildExclude");
  ( function( $, window, undefined ) {
  	var	$html = $( "html" ),
  			$head = $( "head" ),
  			$window = $( window );
  
   	// trigger mobileinit event - useful hook for configuring $.mobile settings before they're used
  	$( window.document ).trigger( "mobileinit" );
  
  	// support conditions
  	// if device support condition(s) aren't met, leave things as they are -> a basic, usable experience,
  	// otherwise, proceed with the enhancements
  	if ( !$.mobile.gradeA() ) {
  		return;
  	}
  
  	// override ajaxEnabled on platforms that have known conflicts with hash history updates
  	// or generally work better browsing in regular http for full page refreshes (BB5, Opera Mini)
  	if ( $.mobile.ajaxBlacklist ) {
  		$.mobile.ajaxEnabled = false;
  	}
  
  	// Add mobile, initial load "rendering" classes to docEl
  	$html.addClass( "ui-mobile ui-mobile-rendering" );
  
  	// This is a fallback. If anything goes wrong (JS errors, etc), or events don't fire,
  	// this ensures the rendering class is removed after 5 seconds, so content is visible and accessible
  	setTimeout( hideRenderingClass, 5000 );
  
  	// loading div which appears during Ajax requests
  	// will not appear if $.mobile.loadingMessage is false
  	var loaderClass = "ui-loader",
  		$loader = $( "<div class='" + loaderClass + "'><span class='ui-icon ui-icon-loading'></span><h1></h1></div>" );
  
  	// For non-fixed supportin browsers. Position at y center (if scrollTop supported), above the activeBtn (if defined), or just 100px from top
  	function fakeFixLoader(){
  		var activeBtn = $( "." + $.mobile.activeBtnClass ).first();
  
  		$loader
  			.css({
  				top: $.support.scrollTop && $window.scrollTop() + $window.height() / 2 ||
  				activeBtn.length && activeBtn.offset().top || 100
  			});
  	}
  
  	// check position of loader to see if it appears to be "fixed" to center
  	// if not, use abs positioning
  	function checkLoaderPosition(){
  		var offset = $loader.offset(),
  			scrollTop = $window.scrollTop(),
  			screenHeight = $.mobile.getScreenHeight();
  
  		if( offset.top < scrollTop || (offset.top - scrollTop) > screenHeight ) {
  			$loader.addClass( "ui-loader-fakefix" );
  			fakeFixLoader();
  			$window
  				.unbind( "scroll", checkLoaderPosition )
  				.bind( "scroll", fakeFixLoader );
  		}
  	}
  
  	//remove initial build class (only present on first pageshow)
  	function hideRenderingClass(){
  		$html.removeClass( "ui-mobile-rendering" );
  	}
  
  	$.extend($.mobile, {
  		// turn on/off page loading message.
  		showPageLoadingMsg: function( theme, msgText, textonly ) {
  			$html.addClass( "ui-loading" );
  
  			if ( $.mobile.loadingMessage ) {
  				// text visibility from argument takes priority
  				var textVisible = textonly || $.mobile.loadingMessageTextVisible;
  
  				theme = theme || $.mobile.loadingMessageTheme,
  
  				$loader
  					.attr( "class", loaderClass + " ui-corner-all ui-body-" + ( theme || "a" ) + " ui-loader-" + ( textVisible ? "verbose" : "default" ) + ( textonly ? " ui-loader-textonly" : "" ) )
  					.find( "h1" )
  						.text( msgText || $.mobile.loadingMessage )
  						.end()
  					.appendTo( $.mobile.pageContainer );
  
  				checkLoaderPosition();
  				$window.bind( "scroll", checkLoaderPosition );
  			}
  		},
  
  		hidePageLoadingMsg: function() {
  			$html.removeClass( "ui-loading" );
  
  			if( $.mobile.loadingMessage ){
  				$loader.removeClass( "ui-loader-fakefix" );
  			}
  
  			$( window ).unbind( "scroll", fakeFixLoader );
  			$( window ).unbind( "scroll", checkLoaderPosition );
  		},
  
  		// find and enhance the pages in the dom and transition to the first page.
  		initializePage: function() {
  			// find present pages
  			var $pages = $( ":jqmData(role='page'), :jqmData(role='dialog')" );
  
  			// if no pages are found, create one with body's inner html
  			if ( !$pages.length ) {
  				$pages = $( "body" ).wrapInner( "<div data-" + $.mobile.ns + "role='page'></div>" ).children( 0 );
  			}
  
  			// add dialogs, set data-url attrs
  			$pages.each(function() {
  				var $this = $(this);
  
  				// unless the data url is already set set it to the pathname
  				if ( !$this.jqmData("url") ) {
  					$this.attr( "data-" + $.mobile.ns + "url", $this.attr( "id" ) || location.pathname + location.search );
  				}
  			});
  
  			// define first page in dom case one backs out to the directory root (not always the first page visited, but defined as fallback)
  			$.mobile.firstPage = $pages.first();
  
  			// define page container
  			$.mobile.pageContainer = $pages.first().parent().addClass( "ui-mobile-viewport" );
  
  			// alert listeners that the pagecontainer has been determined for binding
  			// to events triggered on it
  			$window.trigger( "pagecontainercreate" );
  
  			// cue page loading message
  			$.mobile.showPageLoadingMsg();
  
  			//remove initial build class (only present on first pageshow)
  			hideRenderingClass();
  
  			// if hashchange listening is disabled or there's no hash deeplink, change to the first page in the DOM
  			if ( !$.mobile.hashListeningEnabled || !$.mobile.path.stripHash( location.hash ) ) {
  				$.mobile.changePage( $.mobile.firstPage, { transition: "none", reverse: true, changeHash: false, fromHashChange: true } );
  			}
  			// otherwise, trigger a hashchange to load a deeplink
  			else {
  				$window.trigger( "hashchange", [ true ] );
  			}
  		}
  	});
  
  	// initialize events now, after mobileinit has occurred
  	$.mobile._registerInternalEvents();
  
  	// check which scrollTop value should be used by scrolling to 1 immediately at domready
  	// then check what the scroll top is. Android will report 0... others 1
  	// note that this initial scroll won't hide the address bar. It's just for the check.
  	$(function() {
  		window.scrollTo( 0, 1 );
  
  		// if defaultHomeScroll hasn't been set yet, see if scrollTop is 1
  		// it should be 1 in most browsers, but android treats 1 as 0 (for hiding addr bar)
  		// so if it's 1, use 0 from now on
  		$.mobile.defaultHomeScroll = ( !$.support.scrollTop || $(window).scrollTop() === 1 ) ? 0 : 1;
  
  
  		// TODO: Implement a proper registration mechanism with dependency handling in order to not have exceptions like the one below
  		//auto self-init widgets for those widgets that have a soft dependency on others
  		if ( $.fn.controlgroup ) {
  			$( document ).bind( "pagecreate create", function( e ){
  				$( ":jqmData(role='controlgroup')", e.target )
  					.jqmEnhanceable()
  					.controlgroup({ excludeInvisible: false });
  			});
  		}
  
  		//dom-ready inits
  		if( $.mobile.autoInitializePage ){
  			$.mobile.initializePage();
  		}
  
  		// window load event
  		// hide iOS browser chrome on load
  		$window.load( $.mobile.silentScroll );
  	});
  }( jQuery, this ));
  //>>excludeStart("jqmBuildExclude", pragmas.jqmBuildExclude);
  });
  //>>excludeEnd("jqmBuildExclude");
  