function GetObserver(subject)
{
	var id = subject.id.replace("div","");
	var Unic = id.split("_");
  
  inherits(new Subject(), subject); 
	if(Unic[1]==0) subject.isvalid = true;   // 初始化每级技能组的条一列为true,即默认允许点击

	for(var i=0;i<Skill.length;i++)
	{
		// 判断此对象是属于哪个技能组
		if(Unic[0]==Skill[i][0])
		{
			// 例:如果属于第一技能组,则判断当他点击时.给对象添加相应的观察者
				if(Unic[1]==Skill[i][3])
				{
					 
					 var div = document.getElementById("div"+Unic[0]+"_"+Skill[i][6]);
					
					 inherits(new Subject(), div);    // 这个对象既继承Subject同时又继承Observer
					 inherits(new Observer(), div);
					 
					 subject["onclick"] = new Function(subject.id+".AddPoint()");
					 subject["oncontextmenu"] = new Function(subject.id+".SubPoint()");
				   subject.AddObserver(div);  // 增加观察者	 
				}	
				else
				{
					 subject["onclick"] = new Function(subject.id+".AddPoint()");
					 subject["oncontextmenu"] = new Function(subject.id+".SubPoint()");
				}

				if(Unic[1]==Skill[i][Skill[i].length-2])
				{
					
					subject.MaxHit = Skill[i][2];
					subject.Potential = Skill[i][Skill[i].length-1]
				}	
		}
	} 
}

// IsBright=true:取亮图,否则取灰色图,如果是第一列的第一个图,则永远保持亮图
function GetImgUrl(IdName,IsBright)
{
	var id = IdName.id.replace("div","");
	var Unic = id.split("_");
	var overimgOBJ = document.getElementById("overimg"+Unic[0]+"_"+Unic[1]);
	
	for(var i=0;i<Skill.length;i++)
	{
		// 判断此对象是属于哪个技能组
		if(Unic[0]==Skill[i][0])
		{
			if(Unic[1]==Skill[i][6])
			{
				if(IsBright==true)
				{
						
						overimgOBJ.src = "http://www.sinaimg.cn/gm/ol/ct/mnq/green.gif";
						return Skill[i][4];
				}
				else
				{
					 overimgOBJ.src = "http://www.sinaimg.cn/gm/ol/ct/mnq/grey.gif";
					 return Skill[i][5];
				}
			}
		}
	}	
	
}

// 判断是否允许进行扣点,如果它的观察者或是它所有观察者的子观察者.只要它们中有一个的当前值不为0,则
// 不允许对此主题对象进行扣点
function IsSubHit(subject)
{
		var m_count = subject.observers.Count();
		var returnValue = true;
		if(m_count==0)
		{
				return true;
		}
		for( var i = 0; i < m_count; i++ )
		{
				IsSubHit(subject.observers.GetAt(i));				
				returnValue = CurrentHitIsZero(subject.observers.GetAt(i));
			
				if(returnValue==false) return false				
				if(i==m_count-1) return returnValue;
		}			
}

function CurrentHitIsZero(subject)
{
		if(subject.CurrentHit!=0) return false;
		else return true;
}


// 弹出提示信息
function ShowInfo(event,divid)
{
	if (!event)
		{
			var event = window.event;
		}
	var dscpobj = document.getElementById(divid);
	if (!dscpobj)
		{
			return;
		}
	var xfix = 0;
	var yfix = 0;
	var yall = 768;
	if (document.documentElement.scrollTop || document.documentElement.scrollLeft)
		{
			xfix = document.documentElement.scrollLeft;
			yfix = document.documentElement.scrollTop;
			yall = document.documentElement.clientHeight;
		}
	else if (document.body.scrollTop || document.body.scrollLeft)
		{
			xfix = document.body.scrollLeft;
			yfix = document.body.scrollTop;
			yall = document.body.clientHeight;
		}
	if ((yall-event.clientY)<250)
		{
			dscpobj.style.top = event.clientY + yfix - 75 +'px';
		}
	else
		{
			dscpobj.style.top = event.clientY + yfix + 16 +'px';
		}

	if (event.clientX>800)
	{
			dscpobj.style.position = "absolute";
			dscpobj.style.left = event.clientX - 250 +'px';
	}
	else
	{
			dscpobj.style.left = event.clientX + xfix + 16 +'px';	
	}
	
	dscpobj.style.display = 'block';
	showingdscp = 1;
}


// 隐藏弹出窗口
function HindInfo(event,divid)
{
	if (canmovedscp == 0)
		{
			return;
		}
	showingdscp = 0;
	if (!event)
		{
			var event = window.event;
		}
	var dscpobj = document.getElementById(divid);
	if (!dscpobj)
		{
			return;
		}
	dscpobj.style.display = 'none';
	dscpobj.style.top = 0 +'px';
	dscpobj.style.left = 0 +'px';
}

function TransToFigure(str)
{
	var hit = 0;
	switch(str)
	{
		case "a":
			hit = 10;	break;				
		case "b":
			hit = 11; break;				
		case "c":
			hit = 12;break;				
		case "d":
			hit = 13;break;				
		case "e":
			hit = 14;break;				
		case "f":
			hit = 15;	break;			
		case "g":
			hit = 16;break;				
		case "h":
			hit = 17;break;				
		case "i":
			hit = 18;break;				
		case "j":
			hit = 19;	break;			
		case "k":
			hit = 20;	break;			
		case "l":
			hit = 21;break;				
		case "m":
			hit = 22;	break;			
		case "n":
			hit = 23;	break;			
		case "o":
			hit = 24;break;	
		case "p":
			hit = 25;break;	
		case "q":
			hit = 26;break;	
		case "r":
			hit = 27;break;	
		case "s":
			hit = 28;break;	
		case "t":
			hit = 29;break;	
		case "u":
			hit = 30;break;	
		case "v":
			hit = 31;break;	
		case "w":
			hit = 32;break;	
		case "x":
			hit = 33;break;	
		case "y":
			hit = 34;break;			
		case "z":
			hit = 35;break;			
		case "A":
			hit = 36;break;		
		case "B":
			hit = 37;break;		
		case "C":
			hit = 38;break;		
		case "D":
			hit = 39;break;		
		case "E":
			hit = 40;break;		
		case "F":
			hit = 41;break;		
		case "G":
			hit = 42;	break;	
		case "H":
			hit = 43;break;		
		case "I":
			hit = 44;break;		
		case "J":
			hit = 45;break;		
		case "K":
			hit = 46;break;		
		case "L":
			hit = 47;break;		
		case "M":
			hit = 48;break;		
		case "N":
			hit = 49;	break;	
		case "O":
			hit = 50;break;	
		default:
			hit = 0;	break;			
	}
	return hit;
}


function TransToStr(str)
{
	var hit="Z";
	switch(str)
	{
		case 10:
			hit = "a";	break;			
		case 11:
			hit = "b";break;	
		case 12:
			hit = "c";break;	
		case 13:
			hit = "d";break;	
		case 14:
			hit = "e";break;	
		case 15:
			hit = "f";break;	
		case 16:
			hit = "g";break;	
		case 17:
			hit = "h";break;	
		case 18:
			hit = "i";break;	
		case 19:
			hit = "j";break;	
		case 20:
			hit = "k";break;	
		case 21:
			hit = "l";break;	
		case 22:
			hit = "m";break;	
		case 23:
			hit = "n";break;	
		case 24:
			hit = "o";break;	
		case 25:
			hit = "p";break;	
		case 26:
			hit = "q";break;	
		case 27:
			hit = "r";break;	
		case 28:
			hit = "s";break;	
		case 29:
			hit = "t";break;	
		case 30:
			hit = "u";break;	
		case 31:
			hit = "v";break;	
		case 32:
			hit = "w";break;	
		case 33:
			hit = "x";break;	
		case 34:
			hit = "y";break;			
		case 35:
			hit = "z";	break;		
		case 36:
			hit = "A";	break;	
		case 37:
			hit = "B";	break;	
		case 38:
			hit = "C";	break;	
		case 39:
			hit = "D";	break;	
		case 40:
			hit = "E";	break;	
		case 41:
			hit = "F";	break;	
		case 42:
			hit = "G";	break;	
		case 43:
			hit = "H";	break;	
		case 44:
			hit = "I";	break;	
		case 45:
			hit = "J";	break;	
		case 46:
			hit = "K";	break;	
		case 47:
			hit = "L";	break;	
		case 48:
			hit = "M";	break;	
		case 49:
			hit = "N";	break;	
		case 50:
			hit = "O";break;	
		default:
			hit = "Z";		break;		
	}
	return hit;
}

function winload()
{
	try
	{
		var getArgs = location.search ;
		if ( getArgs )
		{
				var getArgs = getArgs.replace("?","");
				var GroupArgs;
				GroupArgs = getArgs.split('|');
				
				if(GroupArgs.length!=5)
				{
					InitialSpanUrl(0,true,0,0);  // 初始化URL
					return ;
				}
				
				for(var k=0;k<GroupArgs.length;k++)
				{						
						var KillGroup = GroupArgs[k].substr(0,1);								
						var Args = GroupArgs[k].substr(1);

						switch(k)
						{
							case 0:
								SpanUrl0 = Args;
								break;
							case 1:
								SpanUrl1 = Args;
								break;
							case 2:
								SpanUrl2 = Args;
								break;
							case 3:
								SpanUrl3 = Args;
								break;
							case 4:
								SpanUrl4 = Args;
								break;
						}
						
						// 判断参数的第一位和长度
						if(CheckArgs(Args,parseInt(KillGroup),GroupArgs[k].length))
						{
						//		showdiv(parseInt(KillGroup));
								SetTotalHit();  // 统计已用点数
						//		InitialKill(Args,parseInt(KillGroup),getArgs.length);						
						}
						else
						{
							location.href=location.pathname;
						}
					
			 }
			 var spanurlobj = document.getElementById("spanurl");
		   spanurlobj.innerText = location.href;
		}
		else
		{
			InitialSpanUrl(0,true,0,0);  // 初始化URL
		}
	}
	catch(e){InitialSpanUrl(0,true,0,0); }

}

//判断参数是否合法,参数:技能所处的技能组.该组有多少个的技能
function CheckArgs(Args,KillGroup,KillCount)
{
	if(KillGroup<0 || KillGroup>4) return false;	
	if(SkillCount[KillGroup]!=KillCount-2) return false;	
	
	var spanpotential = document.getElementById("spanp"+KillGroup);
	var totalE = document.getElementById("total"+KillGroup);

	
	for(var i=0;i<=KillCount-2;i++)
	{
			var killdetail = GetDetailKill(KillGroup,i);
			
			var divobj = document.getElementById("div"+KillGroup+"_"+i);
			var overimgOBJ = document.getElementById("overimg"+KillGroup+"_"+i);
			var imgOBJ = document.getElementById("img"+KillGroup+"_"+i);
			var killOBJ = document.getElementById("kill"+KillGroup+"_"+i);
			
			var hit = Args.substr(i,1);
			if(isNumber(hit)) divobj.CurrentHit = parseInt(hit);   // 如果是数字
			else  divobj.CurrentHit =  parseInt(TransToFigure(hit)); 
			if(divobj.CurrentHit>divobj.MaxHit) divobj.CurrentHit=0;
			
			if(i==0){
				overimgOBJ.src = "http://www.sinaimg.cn/gm/ol/ct/mnq/green.gif";
				killOBJ.innerText = divobj.CurrentHit+"/"+divobj.MaxHit ;
				SetDivGradeValue("DivGrade"+KillGroup+"_"+i,divobj.CurrentHit);
				spanpotential.innerText = parseInt(spanpotential.innerText) + divobj.CurrentHit*killdetail[killdetail.length-1];
			}
					
			// 判断页面的初始化值是否正确.即只有父类的点数加到最大时.后面的点数才有效.否则父类没有达到点数
			// 而子类却有点数存在.则视为异常.按正常的打开页面来处理
			if(divobj.CurrentHit<divobj.MaxHit) 
			{
				// 以下只要有一个子类的点数不为0,则视为异常
				var iscyc = false;
				for(j=i+1;j<=SkillCount[KillGroup];j++)
				{
						var killtemp = GetDetailKill(KillGroup,j);
						if(i==killtemp[3])
						{
							iscyc = true;  // 已经循环过了.
							var hit = Args.substr(j,1);
							if(isNumber(hit)) 
							{
								if(parseInt(hit)!=0) return false;
								
							}
							else
							{
								 return false;
							}
							
						}
						else
						{
								if(iscyc==true) break;
						}
				}
			}
			else  // 达到最高点数.则它的子类要亮度显示,
			{
				// 以下只要有一个子类的点数不为0,则视为异常
				var iscyc = false;
				divobj.iscaladd = true;	
				for(j=i+1;j<=SkillCount[KillGroup];j++)
				{
				//		debugger;
						var killtemp = GetDetailKill(KillGroup,j);
						if(i==killtemp[3])
						{
								iscyc = true;
								var hit = Args.substr(j,1);
								var divchildobj = document.getElementById("div"+KillGroup+"_"+j);
								var childoverimgOBJ = document.getElementById("overimg"+KillGroup+"_"+j);
								var childimgOBJ = document.getElementById("img"+KillGroup+"_"+j);
								var childkillOBJ = document.getElementById("kill"+KillGroup+"_"+j);
								
								if(!isNumber(hit)) 
								{
										hit = TransToFigure(hit);								
								}
								childimgOBJ.src = "http://www.sinaimg.cn/gm/ol/ct/mnq/"+GetImgUrlByGroup(parseInt(KillGroup),j,true);
								childkillOBJ.innerText = hit+"/"+divchildobj.MaxHit ;
								divchildobj.isvalid = true;	
								if(hit==divchildobj.MaxHit)  divchildobj.iscaladd = true;	
								if(hit==0) divchildobj.iscalsub = true;
								spanpotential.innerText = parseInt(spanpotential.innerText) + hit*killtemp[killtemp.length-1];					
								
						}
						else
						{
								if(iscyc==true) break;
						}
				}
			}
			
			totalE.innerText = spanpotential.innerText;
			
	}
	
	return true;	
}

// 根据技能组ID决定要显示哪一个技能组的DIV
function showdiv(KillGroup)
{	
	switch(KillGroup)
	{
			case 0:
				tab_config.current_label = "content1";				
				break;
			case 1:
				tab_config.current_label = "content2";
				break;
			case 2:
				tab_config.current_label = "content3";
				break;
			case 3:
				tab_config.current_label = "content4";
				break;
			case 4:
				tab_config.current_label = "content5";
				break;
	}
	tab2 = new tab_effect(tab_config);
	tab2.init("点击");
	document.getElementById("c"+tab_config.current_label).style.display="";
}

// 初始化各项技能的值,包括已用点数值等
function InitialKill(Args,KillGroup,KillCount)
{
	for(var i=0;i<=KillCount-2;i++)
	{
		var divobj = document.getElementById("div"+KillGroup+"_"+i);
		var overimgOBJ = document.getElementById("overimg"+KillGroup+"_"+i);
		var imgOBJ = document.getElementById("img"+KillGroup+"_"+i);
		var killOBJ = document.getElementById("kill"+KillGroup+"_"+i);
		
		var hit = Args.substr(i,1);
		if(isNumber(hit)) divobj.CurrentHit = parseInt(hit);   // 如果是数字
		else  divobj.CurrentHit =  parseInt(TransToFigure(hit)); 
		if(divobj.CurrentHit>divobj.MaxHit) divobj.CurrentHit=0;
		
		if(i==0){
				overimgOBJ.src = "http://www.sinaimg.cn/gm/ol/ct/mnq/green.gif";
				killOBJ.innerText = divobj.CurrentHit+"/"+divobj.MaxHit ;
		}
		else{
				if(divobj.CurrentHit!=0){ 
						overimgOBJ.src = "http://www.sinaimg.cn/gm/ol/ct/mnq/green.gif";
						imgOBJ.src = "http://www.sinaimg.cn/gm/ol/ct/mnq/"+GetImgUrlByGroup(parseInt(KillGroup),i,true);
						killOBJ.innerText = divobj.CurrentHit+"/"+divobj.MaxHit ;
						divobj.isvalid = true;	
				}
		}
		
	} 
}

// IsBright判断是否取得亮图
function GetImgUrlByGroup(KillGroup,position,IsBright)
{
		var killdetail = GetDetailKill(KillGroup,position);
		var overimgOBJ = document.getElementById("overimg"+KillGroup+"_"+position);		
		if(IsBright==true)
		{
				overimgOBJ.src = "http://www.sinaimg.cn/gm/ol/ct/mnq/green.gif";
				return killdetail[4];
		}
		else
		{
			 overimgOBJ.src = "http://www.sinaimg.cn/gm/ol/ct/mnq/grey.gif";
			 return killdetail[5];
		}
	
}


function GetDetailKill(KillGroup,position)
{
		var killdetail;
		switch(KillGroup)
		{
			case 0:
				killdetail = Skill[position];
				break;
			case 1:
				killdetail = Skill[SkillCount[0]+position+1];
				break;
			case 2:
				killdetail = Skill[SkillCount[0]+SkillCount[1]+position+2];
				break;
			case 3:
				killdetail = Skill[SkillCount[0]+SkillCount[1]+SkillCount[2]+position+3];
				break;
			case 4:
				killdetail = Skill[SkillCount[0]+SkillCount[1]+SkillCount[2]+SkillCount[3]+position+4];
				break;
		}
		return killdetail;
}


function SetDivGradeValue(id,CurrentHit)
{
	var _obj = document.getElementById(id);
	var str = _obj.innerText.split("/");
	var strtemp = CurrentHit +"/" + str[1];
	_obj.innerText = strtemp;
}

// 所属组,是否初始化,点击的位置,点数
function InitialSpanUrl(KillGroup,IsInit,position,CurrentHit)
{	
	var args="";
	var spanurlobj = document.getElementById("spanurl");
	if(IsInit)
	{
		spanurlobj.innerText = location.href + "?0"+SpanUrl0+"|1"+SpanUrl1+"|2"+SpanUrl2+"|3"+SpanUrl3+"|4"+SpanUrl4;
	}
	
}

// 获取地 址
function  GetInitSpanUrl(KillGroup)
{
	var args = "";
	for(var i=0;i<=SkillCount[KillGroup];i++)
	{
		args = args + "0";
	}
	return args;
}

// 将spanurl字符串的第position位置的字符替换为hit
function ReplaceUrl(spanurl,hit,position)
{
	var str1 = spanurl.substr(0,position);
	var str2 = spanurl.substr(position+1);
	return str1+hit+str2;
}


function SetSpanUrl(CurrentHit,Unic)
{				
					var hit = CurrentHit;
					var temparg = "";
					if(hit>9) hit = TransToStr(CurrentHit);
					switch(Unic[0])
					{
						case "0":
							SpanUrl0 = ReplaceUrl(SpanUrl0,hit,parseInt(Unic[1]));
							temparg = SpanUrl0;
							break;
						case "1":
							SpanUrl1 = ReplaceUrl(SpanUrl1,hit,parseInt(Unic[1]));
							temparg = SpanUrl1;
							break;
						case "2":
							SpanUrl2 = ReplaceUrl(SpanUrl2,hit,parseInt(Unic[1]));
							temparg = SpanUrl2;
							break;
						case "3":
							SpanUrl3 = ReplaceUrl(SpanUrl3,hit,parseInt(Unic[1]));
							temparg = SpanUrl3;
							break;
						case "4":
							SpanUrl4 = ReplaceUrl(SpanUrl4,hit,parseInt(Unic[1]));
							temparg = SpanUrl4;
							break;						
					}
					var spanurlobj = document.getElementById("spanurl");
					var p = spanurlobj.innerText.indexOf("?");
					if(p>0)
					{
					//	spanurlobj.innerText = spanurlobj.innerText.substr(0,p)+"?"+Unic[0]+temparg;
						spanurlobj.innerText = spanurlobj.innerText.substr(0,p)+"?0"+SpanUrl0+"|1"+SpanUrl1+"|2"+SpanUrl2+"|3"+SpanUrl3+"|4"+SpanUrl4;
					}
					else
					{
				//		spanurlobj.innerText = location.href +"?"+Unic[0]+temparg;	
						spanurlobj.innerText = location.href +"??0"+SpanUrl0+"|1"+SpanUrl1+"|2"+SpanUrl2+"|3"+SpanUrl3+"|4"+SpanUrl4;
					}
}

// 统计已用点数.已用点数不能大于最大值755
function SetTotalHit()
{
	stotalOBJ = document.getElementById("stotal");
	total0OBj = document.getElementById("total0");
	total1OBj = document.getElementById("total1");
	total2OBj = document.getElementById("total2");
	total3OBj = document.getElementById("total3");
	total4OBj = document.getElementById("total4");
	stotalOBJ.innerText = parseInt(total0OBj.innerText)+parseInt(total1OBj.innerText)+parseInt(total2OBj.innerText)+parseInt(total3OBj.innerText)+parseInt(total4OBj.innerText);
	
}

// 取得当前ID所属的潜力值
function GetPosition(Unic)
{
		var killdetail = GetDetailKill(parseInt(Unic[0]),parseInt(Unic[1]));		
		return killdetail[killdetail.length-1];
}

//数字; 
function isNumber(s){
	return !isNaN(s); 
}

// 剩余点数不足