CTX.onClickJoin = function() {
	var userId = $.userId.value;
	var userPw = $.userPw.value;
	var userName = $.userName.value;
	var userEmail = $.userEmail.value;

	// password check
	if (userPw != $.userPwRepeat.value) return APP.alert("join_msg_passwrdNotEqul");
	else if (!userName || !userEmail) return APP.alert("join_msg_needFill");

	if (userId && userPw) {
		// event
		APP.UserM.on('login:fail', function() {
			APP.UserM.off('login:fail',arguments.callee);
			APP.alert("join_msg_failed");
		});
		// login
		APP.openLoading();
		APP.UserM.join({
			username: userId,
			password: userPw,
			name: userName,
			email: userEmail
		});
	} else {
		// not filled
		APP.alert("join_msg_required").then(function() {
			if (!userId) $.userId.focus();
			else if (!userPw) $.userPw.focus();
		});
	}
}
		APP.UserM.on('login:fail', function() {
			APP.UserM.off('login:fail',arguments.callee);
			APP.alert("join_msg_failed");
		});
		APP.SettingsM.on('change:Installation_objectId', function() {
			APP.UserM.off('change:Installation_objectId', arguments.callee);
			exports.setUserInfo(userM);
		});