Я не работал с GreaseMonkey, но, полагаю, ваш скрипт находится в отдельной области видимости, и все его переменные освобождаются после завершения работы скрипта. Поскольку вы определяете init в этой области, но затем вызываете его на главной странице, функция не определяется при вызове.
Вы можете поместить всю функцию в событие onclick или вызвать обратный вызов:
if (elem.addEventListener) {
elem.addEventListener('click',init,false);
} else {
elem.attachEvent('onclick',init);
}
(attachEvent зависит от IE)