Исправил условия столкновения, сделал код более читабельным, прокомментировал
http://learn.javascript.ru/play/vqFX7 . Но проблема так и осталась, при столкновении с внутренним препятствием - застревает, а не скользит, как при столкновении с внешней рамкой.