text: /**
   * 演示程序当前的 “注册/登录” 等操作，是基于 “本地存储” 完成的
   * 当您要参考这个演示程序进行相关 app 的开发时，
   * 请注意将相关方法调整成 “基于服务端Service” 的实现。
   **/
  (function($, owner) {
  	/**
  	 * 用户登录
  	 **/
  	owner.login = function(loginInfo, callback) {
  		callback = callback || $.noop;
  		loginInfo = loginInfo || {};
  		loginInfo.account = loginInfo.account || '';
  		loginInfo.password = loginInfo.password || '';
  		if (loginInfo.account.length < 5) {
  			return callback('账号最短为 5 个字符');
  		}
  		if (loginInfo.password.length < 6) {
  			return callback('密码最短为 6 个字符');
  		}
  		var users = JSON.parse(localStorage.getItem('$users') || '[]');
  		var authed = users.some(function(user) {
  			return loginInfo.account == user.account && loginInfo.password == user.password;
  		});
  		if (authed) {
  			return owner.createState(loginInfo.account, callback);
  		} else {
  			return callback('用户名或密码错误');
  		}
  	};
  
  	owner.createState = function(name, callback) {
  		var state = owner.getState();
  		state.account = name;
  		state.token = "token123456789";
  		owner.setState(state);
  		return callback();
  	};
  
  	/**
  	 * 新用户注册
  	 **/
  	owner.reg = function(regInfo, callback) {
  		callback = callback || $.noop;
  		regInfo = regInfo || {};
  		regInfo.account = regInfo.account || '';
  		regInfo.password = regInfo.password || '';
  		if (regInfo.account.length < 5) {
  			return callback('用户名最短需要 5 个字符');
  		}
  		if (regInfo.password.length < 6) {
  			return callback('密码最短需要 6 个字符');
  		}
  		if (!checkEmail(regInfo.email)) {
  			return callback('邮箱地址不合法');
  		}
  		var users = JSON.parse(localStorage.getItem('$users') || '[]');
  		users.push(regInfo);
  		localStorage.setItem('$users', JSON.stringify(users));
  		return callback();
  	};
  
  	/**
  	 * 获取当前状态
  	 **/
  	owner.getState = function() {
  		var stateText = localStorage.getItem('$state') || "{}";
  		return JSON.parse(stateText);
  	};
  
  	/**
  	 * 设置当前状态
  	 **/
  	owner.setState = function(state) {
  		state = state || {};
  		localStorage.setItem('$state', JSON.stringify(state));
  		//var settings = owner.getSettings();
  		//settings.gestures = '';
  		//owner.setSettings(settings);
  	};
  
  	var checkEmail = function(email) {
  		email = email || '';
  		return (email.length > 3 && email.indexOf('@') > -1);
  	};
  
  	/**
  	 * 找回密码
  	 **/
  	owner.forgetPassword = function(email, callback) {
  		callback = callback || $.noop;
  		if (!checkEmail(email)) {
  			return callback('邮箱地址不合法');
  		}
  		return callback(null, '新的随机密码已经发送到您的邮箱，请查收邮件。');
  	};
  
  	/**
  	 * 获取应用本地配置
  	 **/
  	owner.setSettings = function(settings) {
  		settings = settings || {};
  		localStorage.setItem('$settings', JSON.stringify(settings));
  	}
  
  	/**
  	 * 设置应用本地配置
  	 **/
  	owner.getSettings = function() {
  			var settingsText = localStorage.getItem('$settings') || "{}";
  			return JSON.parse(settingsText);
  		}
  		/**
  		 * 获取本地是否安装客户端
  		 **/
  	owner.isInstalled = function(id) {
  		if (id === 'qihoo' && mui.os.plus) {
  			return true;
  		}
  		if (mui.os.android) {
  			var main = plus.android.runtimeMainActivity();
  			var packageManager = main.getPackageManager();
  			var PackageManager = plus.android.importClass(packageManager)
  			var packageName = {
  				"qq": "com.tencent.mobileqq",
  				"weixin": "com.tencent.mm",
  				"sinaweibo": "com.sina.weibo"
  			}
  			try {
  				return packageManager.getPackageInfo(packageName[id], PackageManager.GET_ACTIVITIES);
  			} catch (e) {}
  		} else {
  			switch (id) {
  				case "qq":
  					var TencentOAuth = plus.ios.import("TencentOAuth");
  					return TencentOAuth.iphoneQQInstalled();
  				case "weixin":
  					var WXApi = plus.ios.import("WXApi");
  					return WXApi.isWXAppInstalled()
  				case "sinaweibo":
  					var SinaAPI = plus.ios.import("WeiboSDK");
  					return SinaAPI.isWeiboAppInstalled()
  				default:
  					break;
  			}
  		}
  	}
  	
  	owner.searched = function(seaInfo, callback) {
  		
  		callback = callback || $.noop;
  		seaInfo = seaInfo || {} ;
  		seaInfo.searchValue = seaInfo.searchValue || '';
  		if (seaInfo.searchValue.length <= 0) {
  			return callback('查询最短需要 1 个字符');
  		}
  		
  		var seaObj = JSON.parse(localStorage.getItem('$seaObj') || '[]');
  		seaObj.push(seaInfo);
  		localStorage.setItem('$seaObj', JSON.stringify(seaObj));
  		
  		
  		return callback();
  	}
  	
  }(mui, window.app = {}));
  