//var as=0; alert(++as);
var Job={};

Job.put=function(id,name,min,max){
	var o=Job[id]={};
	o.name=name;
	o.min=min;
	o.max=max;
	}

Job.put(1,"神枪手",51,69);
Job.put(2,"魔法师",51,71);
Job.put(3,"圣职者",51,63);
Job.put(4,"鬼剑士",51,72);
Job.put(5,"格斗家",51,68);
Job.put(11,"漫游枪手",101, 114);
Job.put(12,"枪炮师",151, 163);
Job.put(13,"机械师",201, 210);
Job.put(14,"弹药专家",251, 260);
Job.put(101,"枪神",301, 302);
Job.put(102,"爆破者",351, 352);
Job.put(103,"机械大师",401, 402);
Job.put(104,"大将军",451, 452);
Job.put(21,"元素师",101, 114);
Job.put(22,"召唤师",151, 172);
Job.put(23,"战斗法师",201, 223);
Job.put(24,"魔道学者",251, 272);
Job.put(201,"大魔导师",301, 302);
Job.put(202,"月之女皇",351, 352);
Job.put(203,"贝拉特里克斯",401, 402);
Job.put(204,"炼金术士",0,0);
Job.put(31,"圣骑士",101, 116);
Job.put(32,"蓝拳圣使",151, 176);
Job.put(33,"驱魔师",201, 218);
Job.put(301,"未开放",0, 0);
Job.put(302,"未开放",0, 0);
Job.put(303,"未开放",0, 0);
Job.put(41,"剑魂",101, 116);
Job.put(42,"鬼泣",151, 166);
Job.put(43,"狂战士",201, 215);
Job.put(44,"阿修罗",251, 267);
Job.put(401,"剑圣",301, 302);
Job.put(402,"灵魂承载者",351, 352);
Job.put(403,"地狱狂暴者",401, 402);
Job.put(404,"大暗黑天",451, 452);
Job.put(51,"气功师",101, 116);
Job.put(52,"散打",149, 169);
Job.put(53,"街霸",200, 219);
Job.put(54,"柔道家",250, 268);
Job.put(501,"百花缭乱",301, 302);
Job.put(502,"散打冠军",351, 352);
Job.put(503,"毒王",401, 402);
Job.put(504,"飓风眼",451, 452);

Job[1].btn='<div class="sk_btn_on" onClick="javascript:Plan.setCate(1);">花式射术</div><div class="sk_btn" onClick="javascript:Plan.setCate(2);">机械</div><div class="sk_btn" onClick="javascript:Plan.setCate(3);">弹</div><div class="sk_btn" onClick="javascript:Plan.setCate(4);">重火器</div><div class="sk_btn" onClick="javascript:Plan.setCate(5);">通用</div>';
Job[2].btn='<div class="sk_btn_on" onClick="javascript:Plan.setCate(1);">元素</div><div class="sk_btn" onClick="javascript:Plan.setCate(2);">召唤</div><div class="sk_btn" onClick="javascript:Plan.setCate(3);">战斗魔法</div><div class="sk_btn" onClick="javascript:Plan.setCate(4);">魔道</div><div class="sk_btn" onClick="javascript:Plan.setCate(5);">通用</div>';
Job[3].btn='<div class="sk_btn_on" onClick="javascript:Plan.setCate(1);">启示</div><div class="sk_btn" onClick="javascript:Plan.setCate(2);">神击</div><div class="sk_btn" onClick="javascript:Plan.setCate(3);">驱魔</div><div class="sk_btn" onClick="javascript:Plan.setCate(4);">恶魔</div><div class="sk_btn" onClick="javascript:Plan.setCate(5);">通用</div>';
Job[4].btn='<div class="sk_btn_on" onClick="javascript:Plan.setCate(1, 0);">波动</div><div class="sk_btn" onClick="javascript:Plan.setCate(2, 0);">武器技</div><div class="sk_btn" onClick="javascript:Plan.setCate(3, 0);">血气</div><div class="sk_btn" onClick="javascript:Plan.setCate(4, 0);">鬼神</div><div class="sk_btn" onClick="javascript:Plan.setCate(5, 0);">通用</div>';
Job[5].btn='<div class="sk_btn_on" onClick="javascript:Plan.setCate(1);">体术</div><div class="sk_btn" onClick="javascript:Plan.setCate(2);">气功</div><div class="sk_btn" onClick="javascript:Plan.setCate(3);">狂暴</div><div class="sk_btn" onClick="javascript:Plan.setCate(4);">散打</div><div class="sk_btn" onClick="javascript:Plan.setCate(5);">通用</div>';

Job[1].cate=["花式射术","机械","弹","重火器","通用"];
Job[2].cate=["元素","召唤","战斗魔法","魔道","通用"];
Job[3].cate=["启示","神击","驱魔","恶魔","通用"];
Job[4].cate=["波动","武器技","血气","鬼神","通用"];
Job[5].cate=["体术","气功","狂暴","散打","通用"];

var Plan={};

	Plan.setLevel=function(num){
		Plan.lv = Math.min(60,num);
		if(Plan.lv>=18&&Plan.sJob==0&&document.getElementById("f_job_list").style.backgroundImage.indexOf("bg_list_job2.gif")<0){
			var fjl=document.getElementById("f_job_list").getElementsByTagName("a");
			for(var i=0,t=fjl.length;i<t;i++)
				fjl[i].style.color="#fff";
			document.getElementById("f_job_list").style.backgroundImage="url(http://ue1.17173.itc.cn/09dnfmnq/bg_list_job2.gif)";}
		var sp=0;
		for (var i=1; i<Plan.lv; i++){
			sp += 30+i-1;
		}
		Plan.sp=sp+Plan.qp;
		Plan.flush();
	}

	Plan.addLevel=function(num){
		Plan.setLevel(Plan.lv+num);
	}

	Plan.flush=function(){
		var stat=document.getElementById("sp_stat").getElementsByTagName("input");
		stat[0].value=Plan.sp;
		stat[1].value=Plan.gp=Plan.sp-Plan.up;
		stat[2].value=Plan.up;
		stat[3].value=document.getElementById("qp").value=Plan.qp;
		document.getElementById("lv").value=Plan.lv;
		if(Plan.sJob>0){
			for(var jb=Job[Plan.job*10+Plan.sJob],i=jb.min,t=jb.max,sk=null,s=null;i<=t;i++){
				sk=document.getElementById("sk_"+i);
				if(sk&&sk.style.display=="block"){
					s=Skill.next(i);
					sk.children[2].children[0].style.color=Plan.gp<s.sp?"#c31103":"#ffdf01";
					sk.children[2].children[1].style.color=Plan.lv+Plan.contract*5<s.lv?"#c31103":"fbf48d";
					}}
			for(var i=1001,sk=null,s=null;i<=1004;i++){
				sk=document.getElementById("sk_"+i);
				if(sk&&sk.style.display=="block"){
					s=Skill.next(i);
					sk.children[2].children[0].style.color=Plan.gp<s.sp?"#c31103":"#ffdf01";
					sk.children[2].children[1].style.color=Plan.lv+Plan.contract*5<s.lv?"#c31103":"fbf48d";
					}}
			if(Plan.wake==1)
				for(var jb=Job[Plan.job*100+Plan.sJob],i=jb.min,t=jb.max,sk=null,s=null;i<=t;i++){
					sk=document.getElementById("sk_"+i);
					if(sk&&sk.style.display=="block"){
						s=Skill.next(i);
						sk.children[2].children[0].style.color=Plan.gp<s.sp?"#c31103":"#ffdf01";
						sk.children[2].children[1].style.color=Plan.lv+Plan.contract*5<s.lv?"#c31103":"fbf48d";
						}}}
		for(var jb=Job[Plan.job],i=jb.min,t=jb.max,sk=null,s=null;i<=t;i++){
			sk=document.getElementById("sk_"+i);
			if(sk&&sk.style.display=="block"){
				s=Skill.next(i);
				sk.children[2].children[0].style.color=Plan.gp<s.sp?"#c31103":"#ffdf01";
				sk.children[2].children[1].style.color=Plan.lv+Plan.contract*5<s.lv?"#c31103":"fbf48d";
				}}
		for(var i=1,sk=null,s=null;i<=12;i++){
			sk=document.getElementById("sk_"+i);
			if(sk&&sk.style.display=="block"){
				s=Skill.next(i);
				sk.children[2].children[0].style.color=Plan.gp<s.sp?"#c31103":"#ffdf01";
				sk.children[2].children[1].style.color=Plan.lv+Plan.contract*5<s.lv?"#c31103":"fbf48d";
				}}
	}

	Plan.checkJob=function(num){
		if(Plan.job==num)return true;
		else if(Plan.sJob>0&&(Plan.job*10+Plan.sJob==num))return true;
		else if(Plan.wake>0&&(Plan.job*100+Plan.sJob==num))return true;
		return false;
	}

	Plan.setJob=function(num){
		if(num==Plan.sJob)return;
		if(Plan.lv<18){
			alert("您尚未达到转职等级,请设置18级后再点击!");
			return;}
		if(Plan.sJob>0){
			var fjl=document.getElementById("f_job_list").getElementsByTagName("a");
			for(var i=0,t=fjl.length;i<t;i++)
				fjl[i].style.color="#fff";
			Plan.truncate();}
		else{
			for(var jb=Job[Plan.job],i=jb.min,t=jb.max,sk=null;i<=t;i++)
				if((sk=Skill[i])&&sk.a&&sk.s&&sk.lv>0)
					Skill.sith(i);
			for(var i=1;i<=12;i++)
				if((sk=Skill[i])&&sk.a&&sk.s&&sk.lv>0)
					Skill.sith(i);
		}
		Plan.sJob=num;
		document.getElementById("job").innerText=Job[Plan.job*10+Plan.sJob].name;
		document.getElementById("f_job_list").getElementsByTagName("a")[num-1].style.color="#f33";
		for(var jb=Job[Plan.job*10+Plan.sJob],i=jb.min,t=jb.max;i<=t;i++)
			if(Skill[i])Skill.flush(i);
		for(var i=1001,sk=null,s=null;i<=1004;i++)
			if(Skill[i]&&!Plan.checkJob(Skill[i].job))Skill.flush(i);
	}

	Plan.setWake=function(){
		if(Plan.wake>0)return;
		if(Plan.sJob==0||Plan.lv<48){
			alert("您尚未达到觉醒条件,请设置48级且转职后再点击觉醒!");
			return;}
		if(Plan.job==3){
			alert("目前没有圣职者的觉醒数据!");
			}
		Plan.wake=1;
		document.getElementById("job").innerText=Job[Plan.job*100+Plan.sJob].name;
		document.getElementById("job_img").style.backgroundImage="url(http://ue1.17173.itc.cn/09dnfmnq/job/img_job_"+(Plan.job*100+Plan.sJob)+".gif)";
		for(var jb=Job[Plan.job*100+Plan.sJob],i=jb.min,t=jb.max;i<=t;i++)
			if(Skill[i])Skill.flush(i);
	}

	Plan.setContract=function(){
		if (!confirm("装备达人契约可以使用高于自身5级的技能.\n确定"+(Plan.contract==1?"卸下":"装备")+"?")) return;
		document.getElementById('cont_img').innerHTML=(Plan.contract==1?"装备":"卸下")+"达人契约";
		document.getElementById('cont_img').style.backgroundImage="url(http://ue1.17173.itc.cn/09dnfmnq/btn_cont_"+(Plan.contract==1?"off":"on")+".gif)";
		Plan.contract=Plan.contract==1?0:1;
		Plan.flush();
	}

	Plan.truncate=function(){
		if(Plan.sJob==0)return;
		document.getElementById("job_img").style.backgroundImage="url(http://ue1.17173.itc.cn/09dnfmnq/job/img_job_"+Plan.job+".gif)";
		document.getElementById("sk_list_1").innerHTML=document.getElementById("sk_list_2").innerHTML=document.getElementById("sk_list_3").innerHTML=document.getElementById("sk_list_4").innerHTML=document.getElementById("sk_list_5").innerHTML=document.getElementById("bg_list_1").innerHTML=document.getElementById("bg_list_2").innerHTML=document.getElementById("bg_list_3").innerHTML=document.getElementById("bg_list_4").innerHTML=document.getElementById("bg_list_5").innerHTML=document.getElementById("sk_t_list").innerHTML="";
		if(Plan.wake==1){
			for(var jb=Job[Plan.job*100+Plan.sJob],i=jb.min,t=jb.max;i<=t;i++)
				if(Skill[i])Skill.release(i);
			Plan.wake=0;}
		for(var jb=Job[Plan.job*10+Plan.sJob],i=jb.min,t=jb.max;i<=t;i++)
			if(Skill[i])Skill.release(i);
		for(var jb=Job[Plan.job],i=jb.min,t=jb.max;i<=t;i++)
			if(Skill[i]){
				Skill.release(i);
				Skill.flush(i);}
		for(var i=1;i<=12;i++)
			if(Skill[i]){
				Skill.release(i);
				Skill.flush(i);}
		for(var i=1001;i<=1004;i++)
			if(Skill[i])Skill.release(i);
		Plan.sJob=0;
		Plan.flush();
	}

	Plan.setCate=function(cate){
		var sbc=document.getElementById("sk_btn").children;
		var sbbc=document.getElementById("sk_btn_b").children;
		for(var i=0;i<5;){
			sbc[i].className=sbbc[i++].className="sk_btn";
			document.getElementById('sk_list_'+i).style.display=document.getElementById('bg_list_'+i).style.display='none';}
		document.getElementById('sk_list_'+cate).style.display=document.getElementById('bg_list_'+cate--).style.display='block';
		sbc[cate].className=sbbc[cate].className="sk_btn_on";
	}

	Plan.unserialize=function(str){
		str=decodeURIComponent(str);
		str=str.split(";");
		d=str[0].split(",");
		if(d.length%3==0)
			for(var i=0,t=d.length/3;i<t;i++){
				Skill[d[3*i]].lv=d[3*i+1]/1;
				Skill[d[3*i]].ct=d[3*i+2]/1;}
		q=str[1].split(",");
		for(var i=0,t=q.length;i<t;i++)
			if(Quest[q[i]])Quest[q[i]].checked=true;
		p=str[2].split(",");
		Plan.sJob=p[0]/1;
		Plan.wake=p[1]/1;
		Plan.lv=p[2]/1;
		Plan.contract=p[3]/1;
		Plan.sp=p[4]/1;
		Plan.up=p[5]/1;
		Plan.qp=p[6]/1;
		Plan.gp=Plan.sp-Plan.up;
	}

	Plan.serialize=function(){
		var d=[];
		if(Plan.sJob>0){
			for(var jb=Job[Plan.job*10+Plan.sJob],i=jb.min,t=jb.max,sk=null;i<=t;i++)
				if((sk=Skill[i])&&(sk.lv>sk.min||sk.ct>0)){
					d.push(i);
					d.push(sk.lv);
					d.push(sk.ct);}
			for(var i=1001,sk=null,s=null;i<=1004;i++)
				if((sk=Skill[i])&&(sk.lv>sk.min||sk.ct>0)){
					d.push(i);
					d.push(sk.lv);
					d.push(sk.ct);}
			if(Plan.wake==1)
				for(var jb=Job[Plan.job*100+Plan.sJob],i=jb.min,t=jb.max,sk=null;i<=t;i++)
					if((sk=Skill[i])&&(sk.lv>sk.min||sk.ct>0)){
						d.push(i);
						d.push(sk.lv);
						d.push(sk.ct);}}
		for(var jb=Job[Plan.job],i=jb.min,t=jb.max,sk=null;i<=t;i++)
			if((sk=Skill[i])&&(sk.lv>sk.min||sk.ct>0)){
				d.push(i);
				d.push(sk.lv);
				d.push(sk.ct);}
		for(var i=1,sk=null,s=null;i<=12;i++)
			if((sk=Skill[i])&&(sk.lv>sk.min||sk.ct>0)){
				d.push(i);
				d.push(sk.lv);
				d.push(sk.ct);}
		var q=[];
		for(var i=0,t=Quest.length;i<t;i++)
			if(Quest[i].checked)
				q.push(i);
		return encodeURIComponent(d.join(",")+";"+q.join(",")+";"+Plan.sJob+","+Plan.wake+","+Plan.lv+","+Plan.contract+","+Plan.sp+","+Plan.up+","+Plan.qp);
	}

	Plan.description=function(){
		var d={1:[],2:[],3:[],4:[],5:[]};
		if(Plan.sJob>0){
			for(var jb=Job[Plan.job*10+Plan.sJob],i=jb.min,t=jb.max,sk=null;i<=t;i++)
				if((sk=Skill[i])&&sk.lv>0)
					d[sk.cate].push(sk[0].name+" Lv "+sk.lv);
			for(var i=1001,sk=null,s=null;i<=1004;i++)
				if((sk=Skill[i])&&sk.lv>0)
					d[sk.cate].push(sk[0].name+" Lv "+sk.lv);
			if(Plan.wake==1)
				for(var jb=Job[Plan.job*100+Plan.sJob],i=jb.min,t=jb.max,sk=null;i<=t;i++)
					if((sk=Skill[i])&&sk.lv>0)
						d[sk.cate].push(sk[0].name+" Lv "+sk.lv);}
		for(var jb=Job[Plan.job],i=jb.min,t=jb.max,sk=null;i<=t;i++)
			if((sk=Skill[i])&&sk.lv>0){
				d[sk.cate].push(sk[0].name+" Lv "+sk.lv);}
		for(var i=1,sk=null,s=null;i<=12;i++)
			if((sk=Skill[i])&&sk.lv>0)
				d[sk.cate].push(sk[0].name+" Lv "+sk.lv);
		var q=[];
		for(var i=0,t=Quest.length;i<t;i++)
			if(Quest[i].checked)
				q.push(Quest[i].name);
		return "\n职业: "+Job[Plan.job*(Plan.sJob==0?1:Plan.wake==1?100:10)+Plan.sJob].name+"\n等级: "+Plan.lv+"\n总计SP: "+Plan.sp+"\n使用SP: "+Plan.up+"\n\n"+Job[Plan.job].cate[0]+"\n-----------------\n"+d[1].join(" | ")+"\n\n"+Job[Plan.job].cate[1]+"\n-----------------\n"+d[2].join(" | ")+"\n\n"+Job[Plan.job].cate[2]+"\n-----------------\n"+d[3].join(" | ")+"\n\n"+Job[Plan.job].cate[3]+"\n-----------------\n"+d[4].join(" | ")+"\n\n"+Job[Plan.job].cate[4]+"\n-----------------\n"+d[5].join(" | ")+"\n\n"+"\n\n已完成任务: "+q.join(" , ");
		}

	Plan.fixed=function(){
        var o=null;
		for(var jb=Job[Plan.job],i=jb.min,t=jb.max;i<=t;i++)
			if((o=Skill[i])&&o.lv>0)Skill.outBag(i).children[0].style.backgroundImage="url(http://ue1.17173.itc.cn/09dnfmnq/lv/lv_"+Skill.availLv(i)+".gif)";
		for(i=0;i<=12;i++)
			if((o=Skill[i])&&o.lv>0)Skill.outBag(i).children[0].style.backgroundImage="url(http://ue1.17173.itc.cn/09dnfmnq/lv/lv_"+Skill.availLv(i)+".gif)";
		if(Plan.sJob>0){
			for(var jb=Job[Plan.job*10+Plan.sJob],i=jb.min,t=jb.max;i<=t;i++)
				if((o=Skill[i])&&o.lv>0)Skill.outBag(i).children[0].style.backgroundImage="url(http://ue1.17173.itc.cn/09dnfmnq/lv/lv_"+Skill.availLv(i)+".gif)";
			for(var i=1001;i<=1004;i++)
				if((o=Skill[i])&&o.lv>0&&sk.job!=Plan.job*10+Plan.sJob)Skill.outBag(i).children[0].style.backgroundImage="url(http://ue1.17173.itc.cn/09dnfmnq/lv/lv_"+Skill.availLv(i)+".gif)";
			if(Plan.wake==1)
				for(var jb=Job[Plan.job*100+Plan.sJob],i=jb.min,t=jb.max;i<=t;i++)
					if((o=Skill[i])&&o.lv>0)Skill.outBag(i).children[0].style.backgroundImage="url(http://ue1.17173.itc.cn/09dnfmnq/lv/lv_"+Skill.availLv(i)+".gif)";}
	}

	Plan.init=function(num){
		if(window.planIsReadonly)num=window.planJobCode;
		num=num?Math.max(Math.min(num,5),1):4;
		Plan.job=num;
		Plan.sJob=0;
		Plan.wake=0;
		Plan.lv=1;
		Plan.contract=0;
		Plan.sp=0;
		Plan.up=0;
		Plan.qp=0;
		Plan.gp=0;
		var $import=function(str){
		  document.write('<script type="text/javascript" src="'+str+'.js"></script>');
		}
		$import("N0");
		$import("N"+num);
		window.onload=function(){
			if(window.planIsReadonly){
				if(window.planSkillStr)
					Plan.unserialize(window.planSkillStr);
				Plan.fixed();
				document.getElementById("list").innerHTML="职业 : "+(Plan.wake<1?Job[(Plan.job*(Plan.sJob==0?1:10)+Plan.sJob)].name:"<font color=\"red\">"+Job[(Plan.job*100+Plan.sJob)].name+"</font>")+"<br />等级 : "+Plan.lv+"<br />达人契约 : "+(Plan.contract?"已装备":"未装备")+"<br />已完成SP任务 : <br />"+(function(){var q=[];for(var i=0,t=Quest.length;i<t;i++)if(Quest[i].checked)q.push(Quest[i].name);return q.join("<br>");})();
				var stat=document.getElementById("sp_stat").getElementsByTagName("input");
				stat[0].value=Plan.sp;
				stat[1].value=Plan.gp=Plan.sp-Plan.up;
				stat[2].value=Plan.up;
				stat[3].value=Plan.qp;
				return;}
			if(queryString("str"))
				Plan.unserialize(queryString("str"));
			var oLv=document.getElementById("lv");
			oLv.onkeydown=function(evt){
				evt=window.event?window.event:evt;
				if(evt.keyCode==13){
					Plan.setLevel(this.value/1);
					document.getElementsByTagName("body")[0].focus();}}
			oLv.onfocus=function(evt){
				this.summary=this.value;}
			oLv.onblur=function(evt){
				if(this.summary==this.value)return;
				Plan.setLevel(this.value/1);
				}
			document.getElementById("loading").style.display="none";
			document.getElementById("skill_page").style.display="block";
			//document.execCommand("BackgroundImageCache",false,true);
			document.getElementById("job").innerText=Job[num].name;
			document.getElementById("job_img").style.backgroundImage="url(http://ue1.17173.itc.cn/09dnfmnq/job/img_job_"+Plan.job+".gif)";
			document.getElementById("sk_btn").innerHTML=Job[num].btn;
			document.getElementById("sk_btn_b").innerHTML=Job[num].btn;
			for(var i=1,s=null;i<5;i++)
				if(s=Job[num*10+i])
					document.getElementById("f_job_list").innerHTML+='<a onclick="javascript:Plan.setJob('+i+');" href="javascript:;" >'+s.name+'</a> ';
			Skill.init();
			Quest.init();
			Plan.flush();}

		}

var Skill={};

	Skill.init=function(){
		for(var jb=Job[Plan.job],i=jb.min,t=jb.max;i<=t;i++)
			if(Skill[i])Skill.flush(i);
		for(i=0;i<=12;i++)
			if(Skill[i])Skill.flush(i);
		if(Plan.sJob>0){
			for(var jb=Job[Plan.job*10+Plan.sJob],i=jb.min,t=jb.max;i<=t;i++)
				if(Skill[i])Skill.flush(i);
			for(var i=1001,sk=null;i<=1004;i++)
				if((sk=Skill[i])&&sk.job!=Plan.job*10+Plan.sJob)Skill.flush(i);
			if(Plan.wake==1)
				for(var jb=Job[Plan.job*100+Plan.sJob],i=jb.min,t=jb.max;i<=t;i++)
					if(Skill[i])Skill.flush(i);}
	}

Skill.put=function(sk_id,job,cate,lv,img,s,f,a){
	var o=Skill[sk_id]=Skill[sk_id]||[];
	o.job = job;
	o.cate = cate;
	o.lv = 0;
	o.min=lv;
	o.img = img;
	o.f = f;
	o.ct = 0;
	o.a = a;
	if(o.f)Skill.fillSith(sk_id,o.f);
}

Skill.fillSith=function(sk_id,f){
	for(var i=0,t=f.length;i<t;i++){
		var o=Skill[f[2*i]]=Skill[f[2*i]]||[];
		o.s=o.s||[];
		o.s.push(sk_id);
		o.s.push(f[2*i+1]);
	}
}

Skill.insert=function(sk_id,job, name, sk_lv, lv, sp, detail1, detail2, detail3){
	var o={};
	o.job = job;
	o.name = name;
	o.sk_lv = sk_lv;
	o.lv = lv;
	o.sp = sp;
	o.detail1 = detail1;
	o.detail2 = detail2;
	o.detail3 = detail3;
	Skill[sk_id].push(o);
}

Skill.first=function(sk_id){
	return Skill[sk_id][0];}

Skill.current=function(sk_id){
	return Skill[sk_id][Skill[sk_id].lv-1];}

Skill.next=function(sk_id){
	return Skill[sk_id][Skill[sk_id].lv];}

Skill.release=function(sk_id){
	var o=Skill[sk_id];
	if(!o)return;
	var sp=0;
	for(var i=0,t=o.lv;i<t;i++)
		sp+=o[i].sp;
	o.lv=0;
	o.ct=0;
	Plan.up-=sp;
	}

Skill.outStore=function(sk_id){
	var o=Skill[sk_id];
	if(!o)return;
	var oDiv=document.createElement("div");
	oDiv.id="sk_"+sk_id;
	oDiv.innerHTML='<div class="icon" style="background-image:url(http://ue1.17173.itc.cn/09dnfmnq/icon/'+o.img+'.gif);" onclick="javascript:Skill.plus('+sk_id+',event);" onmouseover="javascript:Skill.showLayer('+sk_id+',true,event);" onmouseout="javascript:Skill.hideLayer();"><div class="sk_lv"></div></div>\
		<div class="name">\
		<div class="sk_name">'+o[0].name+'</div>\
		<a class="sk_master" onClick="javascript:Skill.term('+sk_id+');" >升至满级</a>\
		</div>\
		<div class="term">\
		<div id="sk_l_sp_'+sk_id+'" class="sp"></div>\
		<div id="sk_l_lv_'+sk_id+'" class="lv"></div>\
		'+(o.f?'<div class="f_sk" id="sk_l_f_sk_'+sk_id+'"'+(o.f.length/2>o.ct?'':' style="display:none;"')+'>前置技能</div>':'')+'\
		</div>';
	
	if(sk_id>1000)
		return document.getElementById("sk_t_list").appendChild(oDiv);
	return document.getElementById("sk_list_"+o.cate).appendChild(oDiv);
}

Skill.outBag=function(sk_id){
	var o=Skill[sk_id];
	if(!o)return;
	var oDiv=document.createElement("div");
	oDiv.id="bg_"+sk_id;
	oDiv.className="icon";
	oDiv.onmouseover=function(){Skill.showLayer(sk_id,false,event);}
	oDiv.onmouseout=function(){Skill.hideLayer();} 
	oDiv.onclick=function(){Skill.minus(sk_id,event);}
	oDiv.style.backgroundImage="url(http://ue1.17173.itc.cn/09dnfmnq/icon/"+o.img+".gif)";
	oDiv.innerHTML='<div class="sk_lv"></div>';
	return document.getElementById("bg_list_"+o.cate).appendChild(oDiv);
}

Skill.availLv=function(sk_id){
	var o=Skill[sk_id];
	if(!o||o.lv==0)return 0;
	return o.a&&Skill[o.a].lv>0?o.lv+1:o.lv;
}

Skill.flush=function(sk_id){
	var o=Skill[sk_id];
	var sk=document.getElementById("sk_"+sk_id);
	var bg=document.getElementById("bg_"+sk_id);
	if(o.lv==0&&o.min>0)
		while(o.lv<o.min)
			Skill.up(sk_id);
	var s=Skill.next(sk_id);
	if(o.lv==o.length){
		if(sk)sk.style.display="none";}
	else{
		if(!sk)sk=Skill.outStore(sk_id);
		sk.style.display="block";
		sk.children[0].children[0].style.backgroundImage="url(http://ue1.17173.itc.cn/09dnfmnq/lv/lv_"+(Skill.availLv(sk_id)+1)+".gif)";
		sk.children[2].children[0].innerText=s.sp;
		sk.children[2].children[0].style.color=Plan.gp<s.sp?"#c31103":"#ffdf01";
		sk.children[2].children[1].innerText="Lv "+s.lv;
		sk.children[2].children[1].style.color=Plan.lv+Plan.contract*5<s.lv?"#c31103":"fbf48d";}
	if(o.lv==0){
		if(bg)bg.style.display="none";}
	else{
		if(!bg)bg=Skill.outBag(sk_id);
		bg.style.display="block";
		bg.children[0].style.backgroundImage="url(http://ue1.17173.itc.cn/09dnfmnq/lv/lv_"+Skill.availLv(sk_id)+".gif)";}
	}

Skill.upForestall=function(sk_id){
	var o=Skill[sk_id];
	if(!o||!o.f)return;
	for(var i=0,t=o.f.length/2;i<t;i++){
		while(Skill[o.f[2*i]].lv<o.f[2*i+1])
			if(!Skill.up(o.f[2*i])){
				Skill.flush(o.f[2*i]);
				return;}
		Skill.flush(o.f[2*i]);}
	return true;
	}

Skill.up=function(sk_id){
	var o=Skill[sk_id];
	var s=Skill.next(sk_id);
	if(!o||!s)return;
	if(Plan.lv+Plan.contract*5<s.lv){
		alert("您的等级低于技能["+o[0].name+"]升到Lv "+(Skill.availLv(sk_id)+1)+"的要求,请增加等级后再试!");
		return;
	}else if(s.sp > Plan.sp-Plan.up){
		alert("技能点不满足["+o[0].name+"]升到Lv "+(Skill.availLv(sk_id)+1)+"的要求,请增加技能点后再试!");
		return;
	}else if(s.job>0&&sk_id<1000&&!Plan.checkJob(s.job)){
		alert("请先转职,学习更高的等级需要["+Job[s.job].name+"]职业!");
		return;
	}else if(o.f&&o.ct<o.f.length/2)
		if(!(confirm("技能["+o[0].name+"]前置技能等级没有达到要求,是否自动增加前置技能等级?")&&Skill.upForestall(sk_id)))
			return;
	Plan.up+=s.sp;
	o.lv++;
	Skill.sith(sk_id);
	return true;
	}

Skill.plus=function(sk_id,evt){
	var o=Skill[sk_id];
	if(Skill.up(sk_id)){
		Skill.flush(sk_id);
		if(evt&&o.lv<o.length)Skill.showLayer(sk_id,true,evt);
		}
	Plan.flush();}

Skill.sith=function(sk_id){
	var o=Skill[sk_id];
	if(!o||!o.s)return;
	for(var i=0,t=o.s.length/2,sk=null;i<t;i++)
		if(o.lv==o.s[2*i+1]){
			(sk=Skill[o.s[2*i]]).ct++;
			if(sk.ct==sk.f.length/2&&document.getElementById("sk_"+o.s[2*i]))
				document.getElementById("sk_"+o.s[2*i]).children[2].children[2].style.display="none";
		}
	}

Skill.forestall=function(sk_id){
	var o=Skill[sk_id];
	if(!o||!o.f)return;
	for(var i=0,t=o.f.length/2;i<t;i++)
		if(Skill[o.f[2*i]].lv<o.f[2*i+1])
			return false;
	return true;
	}

Skill.term=function(sk_id){
	var o=Skill[sk_id];
	if(!o||!confirm("需要把["+o[0].name+"]升到顶级?"))return;
	while(o.lv<o.length)
		if(!Skill.up(sk_id))
			break;
	Skill.flush(sk_id);
	Plan.flush();
}

Skill.minus=function(sk_id,evt){
	var o=Skill[sk_id];
	if(!o||o.lv==o.min)return;
	var s=Skill.current(sk_id);
	if(o.s)
		for(var i=0,t=o.s.length/2,sk=null;i<t;i++)
			if(o.lv==o.s[2*i+1])
				if((sk=Skill[o.s[2*i]]).lv>0){
					alert("技能["+sk[0].name+"]需要至少"+o.s[2*i+1]+"级的["+s.name+"],无法再减少!");
					return;}
				else{
					sk.ct--;
					if(document.getElementById("sk_"+o.s[2*i]))document.getElementById("sk_"+o.s[2*i]).children[2].children[2].style.display="block";
					}
	Plan.up-=s.sp;
	o.lv--;
	Plan.flush();
	Skill.flush(sk_id);
	if (evt&&o.lv>0) Skill.showLayer(sk_id,false,evt);
}

Skill.showLayer=function(sk_id,bNext,event){
	var o=Skill[sk_id];
	var s=bNext?Skill.next(sk_id):Skill.current(sk_id);
	if(!o||!s)return;
	var obj = document.getElementById('skill_view');
	if(Skill.showLayer.s!=s){
		Skill.showLayer.s=s;
		var html="<table class=\"tbl_skill\"><tr><td class=\"name\">"+s.name+" Lv"+(Skill.availLv(sk_id)+bNext/1)+"</td></tr><tr><td class=\"detail\"><p>Lv"+s.lv+"以上</p>";
		if(bNext&&o.f)
			for(var i=0,t=o.f.length/2;i<t;i++)
				html+="<div style=\"color:#"+(Skill[o.f[2*i]].lv<o.f[2*i+1]?"f00":"fff")+";\">需要["+Skill[o.f[2*i]][0].name+"] Lv"+o.f[2*i+1]+" </div>";
		html += '<p>'+s.detail1+'</p>';
		html += s.name=="新技能未开放"?'<p>未开放</p>':'<p>'+s.detail2+'</p><p>'+s.detail3+'</p>';
		html += '</td></tr></table>';
		obj.innerHTML=html;}
	var x=event.clientX;
	var y=event.clientY;
	//obj.style.posLeft=x+document.documentElement.scrollLeft+(x+obj.clientWidth+5<document.documentElement.clientWidth?5:x<obj.clientWidth+5?0:-1*obj.clientWidth-5);obj.style.posTop= y+document.documentElement.scrollTop+(y+obj.clientHeight+5<document.documentElement.clientHeight?5:y<obj.clientHeight+5?0:-1*obj.clientHeight-5);obj.style.display="block";
	obj.style.posLeft=x+document.documentElement.scrollLeft+(x+obj.clientWidth+5<document.documentElement.clientWidth?5:x<obj.clientWidth+5?0:-1*obj.clientWidth-5);
	obj.style.posTop=y+obj.clientHeight+5<=document.documentElement.clientHeight?y+document.documentElement.scrollTop+5:document.documentElement.scrollTop+document.documentElement.clientHeight-obj.clientHeight;
	obj.style.display="block";
}

Skill.hideLayer=function(){
	document.getElementById('skill_view').style.display = 'none';}

var Quest={length:0};

	Quest.put=function(name,job,min,sp,link,ul){
		var o=Quest[Quest.length]={};
		o.name = name;
		o.sp = sp;
		o.min = min;
		o.job = job;
		o.link = link;
		o.ul = ul;
		o.checked = false;
		Quest.length++;
	}

	Quest.outQuest=function(id){
		var o=Quest[id];
		if(!o)return;
		var oDiv=document.createElement("div");
		oDiv.className="quest";
		oDiv.id="qs_"+id;
		if(o.job>0&&o.job!=Plan.job)oDiv.style.display="none";
		oDiv.innerHTML='<div class="title"><input type="checkbox" id="quest_ck_'+id+'" onclick="javascript:Quest.check(this,'+id+');" '+(o.checked?'checked="true"':"")+'/>'+o.name+' [SP:'+o.sp+'] (Lv:'+o.min+')</div>\
			<div class="link"><a><img src="http://ue1.17173.itc.cn/09dnfmnq/img_quest_link.gif" alt="" /></a></div>';
		return document.getElementById("quest_layer").appendChild(oDiv);
	}

	Quest.check=function(obj,id){
		var o=Quest[id];
		if(!o)return;
		if(o.min>Plan.lv){
			alert("您的等级不足"+o.min+"级,无法做["+o.name+"]任务!");
			obj.checked=false;
			return;}
		if(o.job>0&&o.job!=Plan.job){
			alert("您的职业不符合任务要求!");
			obj.checked=false;
			return;}
		var sp=o.sp*(obj.checked?1:-1);
		if(sp<0&&Plan.gp+sp<0){
			alert("剩余技能点不足,不能取消所选任务!");
			obj.checked=true;
			return;}
		o.checked=obj.checked;
		Plan.qp += sp;
		Plan.sp += sp;
		Plan.flush();
	}

	Quest.checkSuited=function(){
		if(!confirm('您确定要选择所有适合等级的任务?'))return;
		var sp=0;
		var qCks=document.getElementById("quest_layer").getElementsByTagName("input");
		for(var i=0,t=Quest.length;i<t;i++){
			if(Quest[i].checked||(Quest[i].job>0&&Quest[i].job!=Plan.job)||Quest[i].min>Plan.lv)continue;
			qCks[i].checked=true;
			Quest[i].checked=true;
			sp+=Quest[i].sp;}
		if(sp>0){
			Plan.sp+=sp;
			Plan.qp+=sp;
			Plan.flush();
		}
	}

	Quest.checkAll=function(){
		if(!confirm('您确定要选择所有任务?'))return;
		var sp=0;
		for(var i=0,t=Quest.length;i<t;i++){
			if(Quest[i].checked)continue;
			Quest[i].checked=true;
			sp+=Quest[i].sp;}
		var qCks=document.getElementById("quest_layer").getElementsByTagName("input");
		for(var i=0,t=qCks.length;i<t;i++)
			qCks[i].checked=true;
		if(sp>0){
			Plan.sp+=sp;
			Plan.qp+=sp;
			Plan.flush();
		}
	}

	Quest.decheckAll=function(){
		if(Plan.qp==0||!confirm('您确定要重置所选任务?'))return;
		if(Plan.qp>Plan.gp){alert("剩余技能点不足,不能取消所选任务!");return;};
		for(var i=0,t=Quest.length;i<t;i++)
			Quest[i].checked=false;
		var qCks=document.getElementById("quest_layer").getElementsByTagName("input");
		for(var i=0,t=qCks.length;i<t;i++)
			qCks[i].checked=false;
		Plan.sp-=Plan.qp;
		Plan.qp=0;
		Plan.flush();
	}

	Quest.flush=function(id){
		var o=Quest[id];
		if(!o)return;
		var qs=document.getElementById("qs_"+id);
		if(!qs)Quest.outQuest(id);
		else qs.getElementsByTagName("input")[0].checked=o.checked;
	}

	Quest.init=function(){
		document.getElementById("quest_layer").innerHTML="";
		for(var i=0,t=Quest.length;i<t;i++)
			if(Quest[i])Quest.flush(i);
	}

	Quest.put("邪恶的魔法师-2",0,13,20,1222,"");
	Quest.put("精灵的魔法阵-2",0,15,20,9,"");
	Quest.put("鬼剑士之路-最后的修炼",4,13,20,507,"");
	Quest.put("永远的格斗-最后的修炼",5,13,20,517,"");
	Quest.put("弹无虚发-向新的冒险…",1,13,20,527,"");
	Quest.put("神奇的魔法-最后的冒险",2,13,20,537,"");
	Quest.put("神圣之路-最后的任务",3,13,20,547,"");
	Quest.put("像风一样10",0,18,5,1080,"");
	Quest.put("像风一样11",0,20,5,1081,"");
	Quest.put("培养初级武术家2",0,20,5,1704,"");
	Quest.put("身体修炼之路(实战篇)",0,22,5,1708,"");
	Quest.put("像风一样12",0,23,5,1082,"");
	Quest.put("武斗家的资格测试",0,23,10,1712,"");
	Quest.put("成为高手之路2",0,25,30,1753,"");
	Quest.put("调查GBL神殿",0,26,5,22,"");
	Quest.put("怪异荒唐的收集癖",0,27,5,1472,"");
	Quest.put("魔法研究-暗属性篇",0,29,5,1533,"");
	Quest.put("赫亚西斯的预言书-3",0,29,5,51,"");
	Quest.put("收集钢铁材料",0,30,5,1371,"");
	Quest.put("短暂的允许",0,33,5,2527,"");
	Quest.put("我感谢的心",0,34,20,1534,"");
	Quest.put("布莱斯的托付",0,36,10,42,"");
	Quest.put("斯卡迪女王的亲笔信",0,40,20,2516,"");
	Quest.put("冰精灵史苏克",0,40,10,2517,"");
	Quest.put("不能倒流的时光-3",0,47,30,436,"");
	Quest.put("盗贼团头目",0,47,30,56,"");
	Quest.put("魔笛使者皮特",0,47,30,69,"");
	Quest.put("血腥伊恩",0,34,5,450,"");
	Quest.put("愿你安息",0,34,10,3051,"");
	Quest.put("安抚飘荡的灵魂",0,34,15,1612,"");
	Quest.put("肢解的邪龙身体",0,39,25,444,"");
	Quest.put("觉醒任务",1,48,20,0,"");
	Quest.put("觉醒任务",5,48,20,0,"");
	Quest.put("最后的决斗",0,49,10,74,"");
	Quest.put("开启暗黑城之门",0,50,5,77,"");
	Quest.put("骷髅凯恩",0,51,10,86,"");
	Quest.put("击退戮蛊",0,52,20,90,"");
	Quest.put("罗特斯的傀儡",0,30,10,0,"");
	Quest.put("五彩盐块",0,30,10,0,"");
	Quest.put("卡勒特的情报",0,30,10,0,"");


var queryString=function(key){
	var values=new RegExp("[?&]"+key+"=([^&]+)").exec(location.search);
	return values?values[1]:null;
	}
Plan.init(jobID);
/*  |xGv00|6cdc404db51613a51914bf00e8be6968 */
