/**
 * @class
 * Don't mess with the manager.
 */
var Manager = new function () {
	 
	/*
	 * Account number on Google Analytics.
	 * See function onload below...
	 */
	var GOOGLE_ACCOUNT = "UA-8809118-1";
	 
	/*
	 * Arrays of objects listening for DOM events 
	 * "load", "resize" and "DOMContentLoaded".
	 */
	var loadhandlers = [];
	var sizehandlers = [];
	var domhandlers = [];
	
	/**
	 * Register load handler.
	 * @param {object} handler
	 */
	this.onload = function ( handler ) {
		
		if ( handler.onload != null ) {
			loadhandlers.push ( handler );
		}
	}
	
	/**
	 * Register resize handler.
	 * @param {object} handler
	 */
	this.onsize = function ( handler ) {
		
		if ( handler.onsize != null ) {
			sizehandlers.push ( handler );
		}
	}
	
	/**
	 * Register DOMContentLoaded handler.
	 * @param {object} handler
	 */
	this.ondom = function ( handler ) {
		
		if ( handler.ondom != null ) {
			domhandlers.push ( handler );
		}
	}
	
	/*
	 * Trigger DOMContentLoaded listeners.
	 */
	function ondom () {
		
		var i = 0, handler;
		while ( handler = domhandlers [ i++ ]) {
			handler.ondom ();
		}
	}
	
	/*
	 * Trigger load listeners and poke Google Analytics.
	 */
	function onload () {
	
		try {
			var pageTracker = _gat._getTracker( GOOGLE_ACCOUNT );
			pageTracker._trackPageview();
		} catch( exception ) {
			// do nothing
		}
	
		var i = 0, handler;
		while ( handler = loadhandlers [ i++ ]) {
			handler.onload ();
		}
	}
	
	/*
	 * Trigger resize listeners.
	 */
	function onresize () {
		
		var i = 0, handler;
		while ( handler = sizehandlers [ i++ ]) {
			handler.onsize ();
		}
	}
	
	/*
	 * Listen onload.
	 */
	if ( window.addEventListener ) {
		window.addEventListener ( "load", onload, false );		
		window.addEventListener ( "resize", onresize, false );
		window.addEventListener ( "DOMContentLoaded", ondom, false );
	} else {
		window.attachEvent ( "onload", onload );
		window.attachEvent ( "onresize", onresize );
	}
	
	/**
	 * The DOMContentLoaded trigger is implemented in 
	 * Explorer by use of the script "defer" attribute.
	 * @see {Assiatant} 
	 */
	this.onDOMContentLoaded = function () {
	
		if ( Client.isExplorer ) {
			ondom ();
		}
	}
}
