I believe that the reasons for that are many...
1. It's a scalar UDF.
2. It does calculations instead of using constants.
3. It doesn't take advantage of nested replaces.
4. It has a relatively very expensive ORDER BY.
The nested replaces could actually be made into an Inline Table Valued Function as a kind of "iSF" or Inline Scalar Valued Function. Please see the following for more information on that subject.
http://www.sqlservercentral.com/articles/T-SQL/91724/
--Jeff Moden
Change is inevitable... Change for the better is not.