The most common two ways of doing this are:
- Use a separate site or subdirectory like you described -- one for mobile, one for desktop (or "full" site).
- Use a MVC framework like FuseBox or Mach II and have separate views for the different formats.
I lean toward the second option but if your site does not already use a MVC framework, this is a huge undertaking and most likely not an option.
As to you second question, I would store it in a cookie and allow the user to toggle between the two.