// user class for yolax.com ver 2.0

var UserClass = Class.create(Base, {
	targetList: {
		infoArea: 'login_st1'
	},
	api: '/passport/api/user.php',
	_myData: {},

	initialize: function() {
		this.initTargets();
		this.getCookie();
		this.getFavorites();
		//window.setInterval(this.getFavorites.bind(this), 3000);
	},

	openLogon: function() {
		this.createLogon();
		this.targetList.logonWin.open();
		this.targetList.logonWin.objects.content.down('form').getInputs("text", "username").first().activate();
	},

	createLogon: function() {
		if (!Object.isUndefined(this.targetList.logonWin)) return;
		var pnl = this.targetList.logonWin = new WiiWin({className:'sign_in', style:{zIndex:999}});
		pnl.objects.content.update("<form onsubmit=\"return false;\"><span id=\"sign_in_title\">快速登录</span>"+
			"<div class=\"inputbox\" style=\"margin:8px 25px;\"><label>帐&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;号：</label><input type=\"text\" name=\"username\" id=\"username\" /></div>"+
			"<div class=\"inputbox\" style=\"margin:8px 25px;\"><label>密&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;码：</label><input type=\"password\" name=\"password\" id=\"password\" /></div>"+
			"<div id=\"tips\" style=\"color:#E33;line-height:16px;\"></div>"+
			"<div class=\"inputbox\">"+
      "<input type=image src=\"/img/quick_login_bt.png\" width=\"86\" height=\"24\" alt=\"登录\" />"+
      "<a href=\"/passport/?register\"><img src=\"/img/quick_regiest_bt.png\" width=\"86\" height=\"24\" alt=\"注册\" border=0 /></a></div></form>");
		var form = $(pnl.objects.content.down('form'));
		form.observe("submit", (function(){
			var username = form.getInputs("text", "username")[0], password = form.getInputs("password", "password")[0];
			if (username.getValue().blank()) username.activate();
			else if (password.getValue().blank()) password.activate();
			else this.doLogin();
		}).bind(this));
	},

	doLogin: function() {
		var form = this.targetList.logonWin.objects.content.down('form');
		var data = Object.extend(form.serialize().toQueryParams(), {'do':'dologin', 'reload':1});
		//this._openTips($H(data).toQueryString(), {type:'alert'})
		new _ajax({api:this.api, queryObject:data, callFunc:[this, 'parseLogon'], procMethod:'post'});
	},

	parseLogon: function(xml) {
		if (Object.isString(xml)) {
			var code = xml;
		} else {
			try {
				var code = Element.nodeText(xml.getElementsByTagName("parsecode")[0]);
				if (!Object.isUndefined(this.targetList.logonWin))
						var form = this.targetList.logonWin.objects.content.down('form'),
								tips = $(form.down("#tips"));
			} catch(e) {
				var code = 'loggedout';
			}
		}
		//this._openTips(code)
		
		if (['incorrectinfo','froze'].include(code)&&!this.targetList.logonWin.visible()) code = 'loggedout';
		switch (code) {
			case 'incorrectinfo':
			/*
			case 'login_username_empty': // 兼容旧版本
			case 'login_password_empty': // 兼容旧版本
			case 'login_user_not_activation': // 兼容旧版本
			case 'login_user_not_exist': // 兼容旧版本
			case 'login_password_incorrect': // 兼容旧版本
			*/
			tips.update("用户名不存在或密码错误");
			break;

			case 'froze':
			//case 'login_password_over_trytimes': // 兼容旧版本
			var rs = Element.nodeText(xml.getElementsByTagName("reason")[0]);
			tips.update("帐户冻结中，"+(rs=='tryout' ?
				("请于"+Element.nodeText(xml.getElementsByTagName("lefttime")[0])+"后登陆")
				: "请联系客服解决帐户疑问"));
			break;

			// 通过cookie登录部分的因素待解决
			case 'loggedin':
			//case 'login_success': // 兼容旧版本
			//case 'global_already_loggedin': // 兼容旧版本
			if (/\/bbs\//i.test(location.href)) {
				location.reload();
			}
			this.setInfo(xml);
			if (!Object.isUndefined(this.targetList.logonWin)) this.targetList.logonWin.close();
			break;

			case 'loggedout':
			case 'loggedout2':
			var o = this.targetList.infoArea.update("<a id=\"login_bt\" style=\"cursor:pointer !important;cursor:hand;\"></a>&nbsp;<a id=\"login_reg\" href=\"/passport/?register\">注册</a>");
			$(o.down("a")).observe('click', this.openLogon.bind(this));
			break;
			
			case 'invalid_logon_user':
				tips.update("登录名不存在");
				form.getInputs("text", "username")[0].activate();
				break;
			
			case 'outof_trytimes':
				tips.update("请您在"+Element.nodeText(xml.getElementsByTagName('timeleft')[0])+"后重新尝试登录");
				break;

			case 'invalid_logon_password':
				var timesleft = parseInt(Element.nodeText(xml.getElementsByTagName('trytimesleft')[0]));
				tips.update(timesleft > 0 ?
					("密码错误，您还有"+timesleft+"次尝试机会") :
					("您可能忘记了密码，请在"+Element.nodeText(xml.getElementsByTagName('timeleft')[0])+"后重新尝试登录，或请使用【<a href=\"/passport/?getpass\">取回密码</a>】")
				);
				if (timesleft>0) form.getInputs("password", "username")[0].activate();
				break;

			case 'blockade_login':
				this.innerTips("您的帐户目前处于冻结状态，请联系客服人员以获得帮助");
				break;

			default:
			return true;
		}
		return false;
	},

	setInfo: function(inf) {
		var o = this.targetList.infoArea, username = document.cookie.toQueryParams("; ").bbusername
		o.update("<a click=\"return false;\" style=\"cursor:pointer !important;cursor:hand;\">"+username+"</a>&nbsp;[<a href=\"javascript:void(0)\">登出</a>]");

		$(o.down("a")).observe("click", this.openControl.bind(this));
		$(o.down("a", 1)).observe("click", this.doLogout.bind(this));
	},

	openControl: function() {
		location.href = "/passport";
	},

	doLogout: function() {
		this._openTips("您确定要退出登录吗？", {type:'confirm', doFn:[
			(function(){new _ajax({api:this.api, queryObject:{'do':'dologout'}, callFunc:[this, 'parseLogon'], procMethod:'post'});}).bind(this),
		]});
	},

	getCookie: function() {
		var cookie = document.cookie.toQueryParams("; ");
		var username = cookie.bbusername;
		return this.parseLogon(Object.isUndefined(username) ? 'loggedout' : 'loggedin');
	},

	getFavorites: function() {
		new _ajax({api:'/game.php', queryObject:{'do':'favorites'}, callFunc:[this, 'setFavorites']});
	},

	setFavorites: function(xml) {
		var code = Element.nodeText(xml.getElementsByTagName("parsecode")[0]);
		if (!this.parseLogon(code)) return;
		var data = xml.getElementsByTagName("item");
		var	favorites = data.length>0 ? Element.nodeText(data[0].getElementsByTagName("favorites")[0]).evalJSON() : [],
				focus = data.length>0 ? Element.nodeText(data[0].getElementsByTagName("focus")[0]).evalJSON() : [];
		this._myData = Object.extend(this._myData, {
			'favorites': favorites, 'focus': focus
		});
		alert(this._myData.toJSON())
	}
});