Hate to tell you this but this code doesn't generate all possible combinations. Upon testing the code and converting it for java I have discovered that is duplicates combinations. I put in the word "abcd" and it generates the same "abcd" twice. It seems to work fine for 3 letter words. There is clearly a bug in the code.
I just ran this code in HTML + Javascript and this is what I got for abcd. Code: abcd abdc acbd acdb adbc adcb badc bacd bcda bcad bdca bdac cabd cadb cbad cbda cdab cdba dacb dabc dbca dbac dcba dcab There is just one occurance of abcd.