without any JavaScript libraries