Validation substr() usage prior to plowing ahead.

In the .Mid()/Left()/Right() removal, replacement with .substr() was done in some circumstances without checking the first parameter (pos) of substr().  If pos is greater than the string length, substr() will throw.

This fixes those locations associated with .Mid() -> substr() conversion.

I've specifically noted areas of the code that could do with a cleanup.  Am confident about all commits, but would appreciate another eye.

@Montellese: An eye over the musicvideoalbum change in CVideoDatabase would be appreciated.

EDIT: Done Right/Left, so this *should* cover any throw'ing due to substr changes.