added optional arg doLowerIfAllUppercase to ucFirst()