В Яндексе насколько я понял сделано по другому, там <input> всегда имеет type="password", а на него сверху накладывается <label> с текстом «Пароль». <label> связан с <input> через атрибут «for», который соотвествует идентификатору <input>, при нажатии на <label> браузер передает фокус ввода <input type="password"> у которого для событий «onfocus» и «onblur» назначены обработчики событий, изменяющие положение <label>. Поэтому везде встроенные менеджеры паролей корректно срабатывают.
Псевдокласс :focus в IE < 8 обрабатывается через JavaScript
inputNode.onfocus = function() {…};
inputNode.onblur = function() {…};