KonTrax
3/4/2013 - 9:57 PM

JavaScript: debugManager( )

JavaScript: debugManager( )

/*
BASIC USAGE:
	example 1:  if(debug()) doSomething();
	example 2:  debug()? doThis(): doThat();
	example 3:  var = debug()? debugValue: runtimeValue;

FILTER USAGE:
	example 1:  if(debug( 'filterName' )) doSomething();

INIT:
	example 1:  var filters = { filterA:false, filterB:true };
	            var debug = debugManager( true, false, filters );

USAGE:
	var debug = debugManager( true, { error:true, info:false, load:true } );
	if ( debug( 'info' ) ) console.log('information message');
*/
var debugManager = (function(){"use strict";

	// Properties
	var _triggers = {};

	// Getters
	var _true  = function(){ return true;  };
	var _false = function(){ return false; };
	var _lookup = function(trig){"use strict";
		if( trig === void(0) ) return false;
		if( _triggers[trig] === void(0))
		    _triggers[trig] = false;
		return _triggers[trig];
	};

	// Constructor
	return function(enable){  // enable, enableAll, triggersObj
		if( enable !== true )
		    return _false;

		var arg = Array.prototype.slice.call(arguments, 1, 3),
		    len = ( arg.length <= 2 )? arg.length : 2;

		if( len===1 && arg[0] === false )
		    return _false;
		if( !len || arg[0] === true )
		    return _true;
		if( typeof arg[0] !== 'object' )
		    arg[0] = false;

		_triggers = (typeof arg[len-1] === 'object')? arg[len-1] : {};

		return _lookup;
	};
})();