added require js for easier modularization