/** this depend on jquery 1.4+
*/
_CHARSET='UTF-8';
_JSON_TIMEOUT=10000;
_timeOut='timeout';
var Server={
	'gamecode':null,//it's can auto get from gamedomain needed
	'gamedomain':null,//get server history needed
	'baseurl':null,
	'interfaceurl':null,
	
	'serverlist':null,
	'gameinfo':null,
	/*function init(string code,function call)*/
	'_init':function(call){
		if(Server.serverlist!=null&&Server.gameinfo!=null)
			call();
		else
			Server._loadServerList(call);
	},
	/*getServerList*/
	'getServerList':function(call){
		if(Server.serverlist!=null&&Server.gameinfo!=null)
			call({'gameinfo':Server.gameinfo,'serverlist':Server.serverlist});
		else
			Server._init(function(){Server.getServerList(call);});
	},
	/*getRecentServers*/
	'getRecentServers':function(call){
		if(Server.serverlist!=null&&Server.gameinfo!=null){
			Server.getJsonData(Server.interfaceurl+"?method=User.getRecentlyServer&gameDomain="+Server.gamedomain,
				function(json){
				var ret=new Array();
				try{
					var recentServer=json.servers;
					for(var i=0;i<recentServer.length;i++){
						var sinfo=Server.getServerInfo(recentServer[i]);
						ret[i]={'gameName':Server.gameinfo.name,'serverName':sinfo.serverName,'url':Server.getUrl(sinfo.url)};
					}
				}catch(e){}
				call(ret);
			});
		}else
			Server._init(function(){Server.getRecentServers(call);});
		
	},
	/*getRecentGame*/
	'getRecentGame':function(call){
		var style=arguments[1]||1;
		if(style==1){
			Server.getJsonData(Server.interfaceurl+"?method=Game.getRecentlyGames",function(his){
			if(his!=null&&!(his.games==undefined||his.games.length<=0)){
				Server.gamedomain=his.games[0];
				if(Server.serverlist!=null&&Server.gameinfo!=null){
					Server._getRecentGame(call);
				}else{
					Server._init(function(){Server._getRecentGame(call);});
				}
			}else{
				call(new Array());
			}
			});
		}else if(style==2){
			Server._loadJs(Server.baseurl+"gamelist.js",function(){
				Server.getJsonData(Server.interfaceurl+"?method=Game.getRecentlyGames",function(his){
					var ginfo=new Array();
					for(var i=0;i<his.games.length;i++){
						Server.gamedomain=his.games[i];
						Server.gamecode=Server.gamedomain.substring(0,Server.gamedomain.indexOf('.'));
						for(var r=0;r<_gameList.length;r++){
							if(_gameList[r].code==Server.gamecode){ginfo.push(_gameList[r]);break;}
						}
					}
					call(ginfo);
				});
			});
		}
	},
	/*getGameName*/
	'_getRecentGame':function(call){
		Server.getJsonData(Server.interfaceurl+"?method=User.getRecentlyServer&gameDomain="+Server.gamedomain,
			function(json){
			var ret=new Array();
			var recentServer=json.servers;
			if(recentServer.length>0){
				var sinfo=Server.getServerInfo(recentServer[0]);
				ret[0]={'gameName':Server.gameinfo.name,'serverName':sinfo.serverName,'url':Server.getUrl(sinfo.url)};
			}
			call(ret);
		});
	},
	/*getGameName*/
	'getGameName':function(){
		
	},
	'getServerInfo':function (domain){
		var serverList=Server.serverlist;
		if (serverList==''||serverList.length==0) return {"serverName":domain,"url":domain};
		var s_url=arguments[0]||null;
		for(var i=0;i<serverList.length;i++){
			if(s_url&&serverList[i].url.toLowerCase().indexOf(s_url.toLowerCase())>=0) return serverList[i];
		}
		return {"serverName":domain,"url":domain};
	},
	/*_loadServerList*/
	'_loadServerList':function(call){
		if(Server.gamecode==null&&Server.gamedomain!=null)
			Server.gamecode=Server.gamedomain.substring(0,Server.gamedomain.indexOf('.'));
		Server._loadJs(Server.baseurl+Server.gamecode+".js",function(){
			eval('try{Server.serverlist=svrs_'+Server.gamecode+';Server.gameinfo  =game_'+Server.gamecode+';}catch(err){Server.gameinfo={};Server.serverlist={};}');
			call();
		});
	},
	/*function Server._loadJs(String url[,function callback]) */
	'_loadJs':function(url){
	var fun=arguments[1]||function(){};
	var charset=arguments[2]||_CHARSET;
	$.ajax({'url': url,'scriptCharset':charset,'dataType':"script",success: function(){fun();}});
	},
	'getJsonData':function(url,fun){
		var	callback=((url.indexOf("?")>-1)?"&":"?")+"callback=?";
		var timeout=arguments[2]||_JSON_TIMEOUT;
		var charset=arguments[3]||_CHARSET;
		var t=setTimeout(function(){fun({result:false,error_info:_timeOut});},timeout);
		$.ajax({
	   'url': url+callback,'scriptCharset':charset,'dataType':"jsonp",
	   success: function(json){clearTimeout(t);fun(json);}
	    });
	},
	'getUrl':function(url){
		return /^http:\/\//i.test(url) ? url:"http://"+url;
	}
}

