CEXPORT JSBool def_timestep_image_map_class_constructor(JSContext *cx, unsigned argc, jsval *vp) {
	JS_BeginRequest(cx);

	JSObject *thiz = timestep_image_map_create_ctor_object(cx, vp);

	timestep_image_map *map = timestep_image_map_init();
	JS_SetPrivate(thiz, map);

	JSObject *parent; // NOTE: Parent is currently not stored anywhere
	JSString *url_jstr;

	if (argc == 6) {
		if (JS_ConvertArguments(cx, argc, JS_ARGV(cx, vp), "oiiiiS", &parent, &map->x, &map->y, &map->width, &map->height, &url_jstr)) {
			map->margin_top = 0;
			map->margin_right = 0;
			map->margin_bottom = 0;
			map->margin_left = 0;
			JSTR_TO_CSTR_PERSIST(cx, url_jstr, url_cstr);
			map->url = url_cstr;

			JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(thiz));

			JS_EndRequest(cx);
			return JS_TRUE;
		}
	} else if (argc == 10) {
		if (JS_ConvertArguments(cx, argc, JS_ARGV(cx, vp), "oiiiiiiiiS", &parent, &map->x, &map->y, &map->width, &map->height, &map->margin_top, &map->margin_right, &map->margin_bottom, &map->margin_left, &url_jstr)) {
			JSTR_TO_CSTR_PERSIST(cx, url_jstr, url_cstr);
			map->url = url_cstr;
			
			JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(thiz));
			
			JS_EndRequest(cx);
			return JS_TRUE;
		}
	}

	LOG("{imagemap} ERROR: ImageMap constructor arguments were invalid!");

	// Unlikely
	timestep_image_delete(map);

	JS_EndRequest(cx);
	return JS_FALSE;
}
CEXPORT JSBool def_timestep_image_map_set_url(JSContext *cx, JSHandleObject obj, JSHandleId id, JSBool strict, JSMutableHandleValue vp) {
	JS_BeginRequest(cx);
	timestep_image_map *thiz = (timestep_image_map*)JS_GetPrivate(obj.get());
	if (thiz) {
		
		if (vp.isString()) {
	JSString *jstr = vp.toString();

	JSTR_TO_CSTR_PERSIST(cx, jstr, cstr);

	if (thiz->url) {
		free(thiz->url);
	}

	thiz->url = cstr;
}

		
	}
	JS_EndRequest(cx);
	return JS_TRUE;
}