// Put your application scripts here

/**
 * MovieMenu LoadRegistry 
 * 
 * Usage:
 * ######
 * 
 * Register a EventListener:
 * --------------------------
 * 
 * pass a callback method:
 * 
 *     MovieMenu.register('some_event', function () {
 *         //passing an anonymous function as a handler will destroy it after use
 *         // at least it tries, js-gc comes into play here
 *     });
 * 
 * or a yepnope argument:
 * 
 *     MovieMenu.register('mootools', [{
 *         load : ['wait!a_widgetlib.js', 'needs-a_widgetlib.js']
 *       }, {
 *         load : ['normal.css', 'css!cachebusted.css?version=1452318']
 *     }]);
 * 
 * 
 * 
 * 
 */
window.MovieMenu = (function (win, doc, undef)
{
	"use strict";
	
	var mm = {},
	    events = {};

	var event_tpl = function ()
	{
		return {'fired': false, 'handlers': false};
	}

	var prefix = function (name)
	{
		return '$__' + name;
	};
	
	var unprefix = function (name)
	{
		return name.substr(3); // dropping the "$__" from the beginning. see prefix()
	}

	var register_load_key = function (name)
	{
		var n = prefix(name);
		if (false === events.hasOwnProperty(n))
		{
			events[n] = event_tpl();
		}
		return events[n];
	};


	var run_callback = function (cb, name)
	{
		var type = typeof cb;
		if ("function" === type)
		{
			cb(name);
		}
		else if (undef !== cb)
		{
			yepnope(cb);
		}
	};
	

	var run = function (name)
	{
		var h = register_load_key(name);
		h.fired = true;
		
		if (!h.handlers)
		{
			return;
		}
		
		var cbs = Object(h.handlers),
		    len = cbs.length >>> 0;
		
		for (var i = 0; i < len; i++)
		{
			if (i in cbs)
			{
				run_callback(cbs[i], name);
				delete h.handlers[i];
			}
		}
		// clean up some memory
		delete h.handlers;
		h.handlers = false;
	};

	var register_load_handler = function (name, callback)
	{
		var h = register_load_key(name);
		
		// run callbacks if allready ready
		if (h.fired)
		{
			run_callback(callback, name);
		}
		else
		{
			h.handlers = h.handlers || [];
			h.handlers.push(callback);
		}
	};


	mm.fire = run;
	mm.register = register_load_handler;

	return mm;
})(this, this.document/*, undefined*/);


/**
 * Initilize Basic JS-Files
 */
(function(win, doc, undef)
{
	"use strict";
	
	yepnope([
		{
			"load": "javascripts/swfobject.js",
			"callback": function(id, testResult)
			{
				MovieMenu.fire("swfobject");
			}
		},
		{
			"load": ["wait!javascripts/mootools-core.js", "javascripts/mootools-more.js"],
			"callback": function (id, testResult)
			{
				if ("javascripts/mootools-core.js" === id)
				{
					// mootools-core has loaded, may be enough for someone
					MovieMenu.fire("mootools-core");
				}
				else if ("javascripts/mootools-more.js" === id)
				{
					// all of mootools loaded
					MovieMenu.fire("mootools");
				}
			}
		}
	]);

})(this, this.document/*, undefined*/);
