Была такая проблема. Нужно непосредственно в init(a) тоже а передавать при объявлении init(), и перед вызовом init() так же передать. Немного измените структуру кода. init() желательно объявить как var init = function(a) {};
Для подготовленного читателя одной из хороших книг считаю Б. Фрейн HTML5 и CSS3 Разработка сайтов для любых браузеров и устройств. Для меня она показалась очень даже практической. Нет нудной теории, там конкретно написано, как и что делать.