
// ---- Helpers ---- //

/**
 * @namespace Miller Medeiros namespace
 */
var MM = MM || {};
/**
 * @namespace Utilities for Browser Native Events
 */
MM.event = MM.event || {};
MM.event.addListener = function(elm, eType, fn){
	if(elm.addEventListener){
		elm.addEventListener(eType, fn, false);
	}else if(elm.attachEvent){
		elm.attachEvent('on' + eType, fn);
	}else{
		elm['on' + eType] = fn;
	}
};
MM.event.removeListener = function(elm, eType, fn){
	if (elm.removeEventListener) {
		elm.removeEventListener(eType, fn, false);
	}else if(elm.detachEvent){
		elm.detachEvent('on' + eType, fn);
	}else{
		elm['on' + eType] = null;
	}
};

// ---- Custom Fit ---- //

/**
 * @namespace Stripped down version of swffit (http://swffit.millermedeiros.com/) with a fixed footer below flash movie
 * @author Miller Medeiros
 * @version 0.2 (2010/07/13)
 */
var customFit = (function(window, document, undef){
	
	var _ua = navigator.userAgent.toLowerCase(),
		_isIE = /msie/.test(_ua) && !window.opera,
		_isWK = /webkit/.test(_ua),
		_flashMovie, //{Element}
		_footer, //{Element}
		_minWid, //{int}
		_minHei, //{int}
		_footerHei; //{int}
	
	/**
	 * check/update flash movie size
	 */
	function _checkSize(){
		
		var iWid = _getInnerWidth(),
			iHei = _getInnerHeight(),
			endWid,
			endHei;
		
		//fix window innerSize difference when scrollbar is visible on non-IE browsers
		iWid -= (!_isIE && iHei <= _minHei)? 18 : 0;
		iHei -= (!_isIE && iWid <= _minWid)? 18 : 0;
		
		endWid = (iWid <= _minWid)? _minWid + 'px' : '100%';
		endHei = (iHei <= _minHei + _footerHei)? _minHei + 'px' : (iHei - _footerHei) + 'px';
		
		_flashMovie.style.width = _footer.style.width = endWid;
		_flashMovie.style.height = endHei;
		_footer.style.top = endHei;
		
		//FIXME: on Webkit browsers depending on how you resize the window the horizontal scrollbar won't show up unless you resize the windon again. regular methods to force browser redraw didn't worked.
	}
	
	/**
	 * @return {int}	Browser window inner width
	 */
	function _getInnerWidth(){
		return (window.innerWidth)? window.innerWidth : ((document.documentElement.clientWidth)? document.documentElement.clientWidth : document.body.clientWidth);
	}
	
	/**
	 * @return {int}	Browser window inner height
	 */
	function _getInnerHeight(){
		return (window.innerHeight)? window.innerHeight : ((document.documentElement.clientHeight)? document.documentElement.clientHeight : document.body.clientHeight);
	}
	
	//-- Public API --//
	
	return {
		
		/**
		 * Start/Configure resize
		 * @param {String} flashId	Id of the flash movie
		 * @param {String} footerId	Id of the Footer
		 * @param {int} minWid	Minimum width of flash movie
		 * @param {int} minHei	Minimum height of flash movie
		 */
		fit : function(flashId, footerId, minWid, minHei){
				_flashMovie = document.getElementById(flashId);
				_footer = document.getElementById(footerId);
				_minWid = minWid;
				_minHei = minHei;
				_footerHei = _footer.offsetHeight;
				_footer.style.position = 'absolute';
				MM.event.addListener(window, 'resize', _checkSize);
				_checkSize();
			},
		getInnerWidth : _getInnerWidth,
		getInnerHeight : _getInnerHeight
		
	};
	
}(window, document));
