Sol.hooks.Hook

Sol.hooks.Hook = function(addonName, fnName, newFn, frame)
Hooking a function means that whenever the system attempts to call that 
function, it will call your function, instead. So, for example, if you 
want to change how things display in a chat frame, you can hook that 
frame's AddMessage function and have your own function be called. 
After you do whatever processing you want, you can (and in most cases,
should) call the original function using Sol.hooks.GetOriginalFn()
Parameters:
+ addonName - Your addon's name
+ fnName - The name of the function to hook
+ frame - The frame or table the function is for, or nil
WARNING: First of all, hooking is inherently dangerous; if you mess
things up you'll most likely have to restart the game. Aside from
that, there are some situations where the hooks came apart on a
ReloadUI(). They shouldn't. But they do. C'est la vie. Test thoroughly.