He.Bootstrap('He.Application');

He.Application.GetName = function()
{
	return He.Application.name;
};

He.Application.RegisterBackChannel = function(_key,_cb)
{
	if(!He.IsFunction(_cb))
	{
		He.Log('Callback isn\'t a function into RegisterBackChannel : ' ,_key, _cb);
		return;
	}
// 	He.Bootstrap('He.Application.FbCb');
	if(!He.Application.FbCb)
	{
		He.Application.FbCb = {};
	}
	He.Application.FbCb[_key] = _cb;
	if(He.Application.PData && He.Application.PData[_key])
	{
		var pending = He.Application.PData[_key];
		for(var i = 0; i < pending.length; ++i)
		{
			He.Application.BackChannel(_key,pending[i]);
		}
		delete(He.Application.PData[_key])
	}
};

He.Application.BackChannel = function(_key,_value)
{
	if(!He.Application.FbCb)
	{
		return;
	}

	if(He.IsFunction(He.Application.FbCb[_key]))
	{
		He.Application.FbCb[_key](_value);
	}
	else
	{
		He.Application.PendingBackChannel(_key,_value);
	}
};

He.Application.BulkBackChannel = function(_feedback)
{
	if(!He.Application.FbCb)
	{
		return;
	}

	for(var key in _feedback)
	{
		if(!He.IsFunction(_feedback[key]))
		{
			if(He.IsFunction(He.Application.FbCb[key]))
			{
				if(_feedback[key])
				{
					He.Application.FbCb[key](_feedback[key]);
				}
			}
			else
			{
				He.Application.PendingBackChannel(key,_feedback[key]);
			}
		}
	}
};

He.Application.PendingBackChannel = function(_key,_value)
{
	if(!He.Application.PData)
	{
		He.Application.PData = {};
	}
	if(He.Application.PData[_key])
	{
		He.Application.PData[_key].push(_value);
	}
	else
	{
		He.Application.PData[_key] = [_value];
	}
}

He.Application.UpdateUid = function(_feedback)
{
	if(!parseInt(_feedback) && He.Application.Common.UserProfileId)
	{
		document.location.reload(true);
	}

	He.Application.Common.UserProfileId = _feedback;
};

He.Application.UpdateVid = function(_feedback)
{
	He.Application.Common.VisitedProfileId = _feedback;
};

He.Application.UpdateTitle = function(_feedback)
{
	if(_feedback)
	{
		document.title = He.Application.GetName() + ' - ' + _feedback;
	}
};

He.Application.UpdateNodeDesc = function(_feedback)
{
	if(_feedback)
	{
		var node_description = $('node_description');
		if(node_description)
		{
			//node_description.nodeValue = "&bulll; " + _feedback;
			node_description.innerHTML = _feedback;
		}
	}
};

He.Application.RegisterBackChannel('uid',He.Application.UpdateUid);
He.Application.RegisterBackChannel('vid',He.Application.UpdateVid);
He.Application.RegisterBackChannel('title',He.Application.UpdateTitle);
He.Application.RegisterBackChannel('node_desc',He.Application.UpdateNodeDesc);
He.Application.RegisterBackChannel('navpath',He.Application.UpdateNavPath);

