don't rely one external js file