Removed typeof(x) === "undefined" and switched to x == undefined. undefined was introduced in JavaScript 1.3. I could swear I tried that before and it didn't work.
Testing out removing the setTimeout call on startUpload and returnUploadStart. Since setTimeout is used for all event calls and the splitting up of the uploadStart event it should be okay.