To sum things up:
If you are running asynchronous (safety off) mirroring, the only way to fail over manually is to change the operating mode to synchronous (safety full), wait for it to be in a synchronized state, and then issue the failover command.
If you are running asynchronous (safety off) mirroring, and the principal goes offline, the best option for bringing the mirror online is to force service (ALTER DATABASE ... SET FORCE_SERVICE_ALLOW_DATA_LOSS). This will allow the mirror to come online. Any transactions that had committed on the principal but had not been hardened to the log on the mirror may be lost.
If the original principal comes back online after you have forced service, database mirroring will stay in a suspended state. The mirroring session will not automatically resume. This gives you time, if you so choose, to try to recover data missing on the new principal because data loss does not occur until the mirroring session is resumed. You could drop mirroring and recover the original principal to identify any extra data and manually insert it into the live database.
For a full explanation of the potential for data loss with asynchronous mirroring, have a look at the article I wrote for SQL Server Pro magazine: http://www.sqlmag.com/article/data-mirroring/database-mirroring-disaster-recovery-139794
My blog: SQL Soldier
My book: Pro SQL Server 2008 Mirroring
Microsoft Certified Master, SQL Server MVP
Database Engineer at BlueMountain Capital Management