/*
	Roku.Body
*/

if(typeof(Roku) == "undefined")
    Roku = { classes : [] };

Roku.Body =
{
	all	: null
};

Roku.classes.push(Roku.Body);

Roku.Body.onInit = function()
{
	this.all = this.scanClassElements(document.body);

	var count = Roku.classes.length;
	for(var index = 0; index < count; index++)
	{
		var entry = Roku.classes[index];
		if(entry && (typeof(entry.initialize) == "function"))
			entry.initialize(); 
	}
	
	//this.all = null;
	
	Roku.Util.eventHandler(document.body, "mousedown", this.onMouseDown);
	Roku.Util.eventHandler(document.body, "mousemove", this.onMouseMove);
	Roku.Util.eventHandler(document.body, "mouseup", this.onMouseUp);
}

Roku.Body.doRefresh = function(root)
{
	this.all = this.scanClassElements(root ? root : document.body);

	var count = Roku.classes.length;
	for(var index = 0; index < count; index++)
	{
		var entry = Roku.classes[index];
		if(entry && (typeof(entry.refresh) == "function"))
			entry.refresh(root); 
	}
	
	this.all = null;
}


Roku.Body.doRefreshContent = function(root, source, reason)
{
	this.all = this.scanClassElements(root ? root : document.body);

	var count = Roku.classes.length;
	for(var index = 0; index < count; index++)
	{
		var entry = Roku.classes[index];
		if(entry && (typeof(entry.refresh_content) == "function"))
			entry.refresh_content(root, source, reason); 
	}
	
	this.all = null;
}

Roku.Body.onLoad = function()
{
	//reuse all from onInit
	//this.all = this.scanClassElements(document.body);

	var count = Roku.classes.length;
	for(var index = 0; index < count; index++)
	{
		var entry = Roku.classes[index];
		if(entry && (typeof(entry.onBodyLoad) == "function"))
			entry.onBodyLoad(); 
	}

	this.all = null;
}

Roku.Body.onUnload = function()
{
	this.all = this.scanClassElements(document.body);

	var count = Roku.classes.length;
	for(var index = 0; index < count; index++)
	{
		var entry = Roku.classes[index];
		if(entry && (typeof(entry.onBodyUnload) == "function"))
			entry.onBodyUnload(); 
	}

	this.all = null;
}

Roku.Body.onMouseDown = function()
{
	var count = Roku.classes.length;
	for(var index = 0; index < count; index++)
	{
		var entry = Roku.classes[index];
		if(entry && (typeof(entry.need_mouse_down) == "function") && entry.need_mouse_down() && (typeof(entry.on_mouse_down) == "function"))
			entry.on_mouse_down((0 < arguments.length) ? arguments[0] : null);
	}
}

Roku.Body.onMouseMove = function()
{
	var count = Roku.classes.length;
	for(var index = 0; index < count; index++)
	{
		var entry = Roku.classes[index];
		if(entry && (typeof(entry.need_mouse_move) == "function") && entry.need_mouse_move() && (typeof(entry.on_mouse_move) == "function"))
			entry.on_mouse_move((0 < arguments.length) ? arguments[0] : null);
	}
}

Roku.Body.onMouseUp = function()
{
	var count = Roku.classes.length;
	for(var index = 0; index < count; index++)
	{
		var entry = Roku.classes[index];
		if(entry && (typeof(entry.need_mouse_up) == "function") && entry.need_mouse_up() && (typeof(entry.on_mouse_up) == "function"))
			entry.on_mouse_up((0 < arguments.length) ? arguments[0] : null);
	}
}

Roku.Body.scanClassElements = function(element, all)
{
	if(!element)
		return;
	
	if(!all)
	{
		all = [];
		this.scanClassElements(element, all);
		return all;
	}
	
	if(element.className)
	{
		if(!all[element.className])
			all[element.className] = [];

		all[element.className].push(element);
	}

	var children = element.childNodes;
	if(!children)
		return;
		
	var length = children.length;
	for(var index = 0; index < length; index++)
		this.scanClassElements(children[index], all);
}

