// Badger object
//***************************************************************************************************


function Badger(){

this.badgerImage = new Array(50);
this.badgerSex = new Array(50);
this.badgerAge = new Array(50);
this.badgerHealth = new Array(50);
this.badgerStatus = new Array(50);
this.badgerWeight = new Array(50);
this.badgerName = new Array(50);
this.badgerForage = new Array(50);
this.badgerFed = new Array(50);
this.badgerRoadEx = new Array(50);

this.BuildClan = BuildClan;
this.DisplayTable = DisplayTable; 
this.UpdateForage = UpdateForage;
this.UpdateName = UpdateName;
this.UpdateImage = UpdateImage;
this.AddCub = AddCub;
this.FedStatus = FedStatus;
this.KillBadger = KillBadger;
this.AgeBadger = AgeBadger;
this.RiskBadger = RiskBadger;
this.FeedBadger = FeedBadger;
this.DoBadger = DoBadger;
this.BreedBadger = BreedBadger;
this.RoadBadger = RoadBadger;
this.CleanupBadgers = CleanupBadgers;
this.CrownBadger = CrownBadger;
this.BadgerJoin = BadgerJoin;
}

function BuildClan(){
	 for(n=0;n<12;n++){
		r=rand(6);
		this.badgerStatus[n]="";
		this.badgerImage[n]=badgerImages[r];
		if(r>2) this.badgerSex[n]="female";
		else this.badgerSex[n]="male";
		if(r==0 || r==3) {
		 	this.badgerAge[n]=1;
		 	this.badgerStatus[n]="cub";
		 	this.badgerForage[n]=false;
		 	}
		else {
		 	this.badgerForage[n]=true;
			}
		if(r==1 || r==4) this.badgerAge[n]=12;
		if(r==2 || r==5) this.badgerAge[n]=24;
		this.badgerHealth[n]="good";
		this.badgerWeight[n]="normal";
		this.badgerName[n]=getName(this.badgerSex[n]);
		this.badgerRoadEx[n]=10;
		}
}

function UpdateForage(n){
	if (document.getElementById("badgerForage"+n).checked==true) this.badgerForage[n]=true;
	else this.badgerForage[n]=false;
	game.DisplayForagers();
	
}
function UpdateName(n){
 	var name=document.getElementById("badgerName"+n).value;
	this.badgerName[n]=name; 		
}

function UpdateImage(n){
  	var image=0;
	if(this.badgerSex[n]=="female") image=3;
	if(this.badgerAge[n]<13) image+=1;
	else image+=2;
	this.badgerImage[n]=badgerImages[image];
}

function DisplayTableHeading(){
	return("<tr><td class='bt1' >Badger </td> \
	<td class='bt2'>Sex</td><td class='bt3'>Age</td> \
	<td class='bt4'>Health</td><td class='bt5'>Status</td> \
	<td class='bt6'>Weight</td><td class='bt7'>Forage</td><td class='bt8'>Name</td></tr>");
}

function doDisplayTable(){
	document.write('<div class="badgerTable">'+badger.DisplayTable()+'</div>');
}

function updateTable(){
	document.getElementById('cell5').innerHTML='<div class="badgerTable">'+badger.DisplayTable()+'</div>';
}

function getBadgerAge(age){
	var r="";
	months=age%12;
	years=(age-months)/12;
	if(years>0) r+= years+"y ";
	r+=months+"m";
	return r;
}

function DisplayTable(){
	var years;
	var months;
	var r="<table>";
	r+=DisplayTableHeading();
	for(n=0;n<game.numBadgers;n++){
	    r+='<tr >';
		r+="<td class='bt1'><img src='images/"+this.badgerImage[n]+"'></td>";
		r+="<td class='bt2'><img src='images/"+this.badgerSex[n]+".gif'></td>";
		r+="<td class='bt3'>";
		r+=getBadgerAge(this.badgerAge[n]);
		if(years>0) r+= years+"y ";
		r+="</td>";
		r+="<td class='bt4'>"+this.badgerHealth[n]+"</td>";
		r+="<td class='bt5'>"+this.badgerStatus[n]+"</td>";
		r+="<td class='bt6'>"+this.badgerWeight[n]+"</td>";
		r+='<td class="bt7"><input type="checkbox" id="badgerForage'+n+'" value="'+this.badgerForage[n]+'" onclick="badger.UpdateForage('+n+')"';
		if(this.badgerForage[n]) r+=' checked ';
		r+='></td>';
		r+='<td class="bt8"><input type="text" class="btn" id="badgerName'+n+'" value="'+this.badgerName[n]+'" size="16" onchange="badger.UpdateName('+n+')"></td>';
		r+='</tr>';
	    }	
	r+="</table>";
	return(r);
} 



function KillBadger(n,reason){
	this.badgerHealth[n]="dead";
	game.deathCount++;
	if(this.badgerStatus[n]=="king")game.noking=true;	
	if(this.badgerStatus[n]=="queen")game.noqueen=true;
	switch(reason){
		case "starve":
			switch(rand(3)){
				default:
				case 0:
					game.deathRoll+=this.badgerName[n]+" died of starvation. <br />";
					break;
				case 1:
					game.deathRoll+=this.badgerName[n]+" died of illness caused by malnutrition. <br /> ";
					break;
				case 2:
					game.deathRoll+=this.badgerName[n]+" was too weak to fight when attacked. <br />";
					break;
			};
			game.advisor[0]=true;
			break;
		case "other":
			switch(rand(3)){
				default:
				case 0:
					game.deathRoll+=this.badgerName[n]+" choked on litter. <br />";
					break;
				case 1:
					game.deathRoll+=this.badgerName[n]+" was killed by badger baiters. <br /> ";
					break;
				case 2:
					switch(rand(7)){
					 	default:
					 	case 0:
							game.deathRoll+=this.badgerName[n]+" was exterminated by DEFRA in a badger culling trial. <br />";
							break;
					 	case 1:
							game.deathRoll+=this.badgerName[n]+" was trapped in an old fridge. <br />";
							break;
					 	case 2:
							game.deathRoll+=this.badgerName[n]+" was trampled by deer. <br />";
							break;
					 	case 3:
							game.deathRoll+=this.badgerName[n]+" fell off a cliff. <br />";
							break;
					 	case 4:
							game.deathRoll+=this.badgerName[n]+" fell into a disused mineshaft. <br />";
							break;
					 	case 5:
							game.deathRoll+=this.badgerName[n]+" drowned in a water butt. <br />";
							break;
					 	case 6:
							game.deathRoll+=this.badgerName[n]+" ate poisonous toadstools. <br />";
							break;
						}
				};
			break;
		case "road":
			game.deathRoll+=this.badgerName[n]+" was hit by a car. <br />";
			game.advisor[2]=true;
			break;
		case "age":
			game.deathRoll+=this.badgerName[n]+" died aged "+getBadgerAge(this.badgerAge[n])+" of natural causes. <br />";
			game.score+=10;
			break;
		case "oldage":
			game.deathRoll+=this.badgerName[n]+" died of natural causes at the remarkable age of "+getBadgerAge(this.badgerAge[n])+"  <br />";
			game.score+=10;
			break;
		case "youth":
			game.deathRoll+=this.badgerName[n]+" died young, aged only " +getBadgerAge(this.badgerAge[n])+"<br />";
			if(this.badgerForage[n])game.advisor[5]=true;
			game.advisor[3]=true;
			break;
		case "infancy":
			game.deathRoll+=this.badgerName[n]+" died in infancy. <br />";
			game.advisor[3]=true;
			if(this.badgerForage[n])game.advisor[5]=true;
			break;
		case "sick":
			game.deathRoll+=this.badgerName[n]+" died of disease. <br />";
			game.advisor[4]=true;
			game.clanSick=false;
			break;
		case "injured":
			game.deathRoll+=this.badgerName[n]+" did not recover from a previous injury. <br />";
			game.advisor[4]=true;
			break;

		case "left":
			if(randSwitch())game.deathRoll+=this.badgerName[n]+" became increasingly dissatisfied with the direction the clan was taking and left. <br />";
			else game.deathRoll+=this.badgerName[n]+" became disillusioned with the leadership of the clan and left. <br />";
			break;
	}

}




function RiskBadger(n){

 	var margin=0;
 	var reason="other";
 	if(this.badgerHealth[n]=="dead")return;
	if(this.badgerForage[n]==true) margin=game.danger;
	if(this.badgerAge[n]<4){
	 	margin+=5;
	 	reason="infancy";
	 	}
	if(this.badgerAge[n]<12){
		margin+=5;
		reason="youth";
		}
	if(this.badgerAge[n]>=60){ //5 years
		margin+10;
		reason="age";
		} 
	if(this.badgerAge[n]>=96){ //8 years
	  	margin+10;
	  	reason="oldage";
	  	}
	if(this.badgerAge[n]>=180){ //15 years
	  	margin+50;
	  	reason="oldage";
		}
	if( badgerDiscontent(n)){
	  	margin+10;
	  	reason="left";
		}

	if(game.roadDanger==true && this.badgerForage[n]==true ){
	 	if(reason=="other")reason="road";
		margin+=(10-this.badgerRoadEx[n]);
		}
	if(game.clanSick==true){
		if(this.badgerStatus[n]=="elderly" || (rand(10)==2)){
		  	this.badgerHealth[n]="presick";
			StatusDown(n);
			}
	}
	if(this.badgerHealth[n]=="sick"){
		if(reason=="other")reason="sick";
		game.clanSick==true;
		}
		 
	if(rand(100)<margin) this.KillBadger(n,reason);
	else {
		if(getOverCrowding()){
		 	this.badgerHealth[n]="preinjured";
		 	StatusDown(n);
		}
	}
}



function FeedBadger(n){

	this.badgerFed[n]=false;
	if(this.badgerStatus[n]=="cub"){
	 	this.badgerFed[n]=true;
		return;
	}
	switch (this.badgerForage[n]){
		case false: //stay home
			if(depleteSett()) this.badgerFed[n]=true;
			break;
		case true: //go forage
			if(depleteTerritory()) this.badgerFed[n]=true;
			break;
 		}
	if(this.badgerFed[n]==false) game.hungryBadgers++;
	else game.score++;
}	


function FedStatus(n){
		if (this.badgerFed[n]==true) {
		 	WeightUp(n);
		 	HealthUp(n);
		 	}
		else {
		 	WeightDown(n);
		 	StatusDown(n);
		 	HealthDown(n);
			}
}


function assessClaim(){
 	game.roadDanger=false;
 	game.food=0;
 	game.danger=0;
 	game.deploy=0;
	for(n=0;n<100;n++)
		if(board.overlayfile[n]=="claim"){
			if( board.across[n])game.roadDanger=true;
			game.food+=board.food[n];
			game.danger+=board.danger[n];
			game.deploy++;
		}
	game.DisplayFood();
	game.DisplayDanger();
}


function CleanupBadgers(){
	var t=0
	for(n=0;n<game.numBadgers;n++){
		if(this.badgerHealth[n]!="dead"){
		 	this.badgerHealth[t]=this.badgerHealth[n];
			this.badgerImage[t]=this.badgerImage[n];
			this.badgerStatus[t]=this.badgerStatus[n];
			this.badgerForage[t]=this.badgerForage[n];
			this.badgerFed[t]=this.badgerFed[n];
			this.badgerAge[t]=this.badgerAge[n];
			this.badgerName[t]=this.badgerName[n];
			this.badgerSex[t]=this.badgerSex[n];
			this.badgerWeight[t]=this.badgerWeight[n];
			t++;
		}
	}
	game.numBadgers=t;
}
function BadgerJoin(num){
 	if (num==0)return;
	for(i=0;i<num;i++){
		n=game.numBadgers;
		r=randSwitch();
		if(n<50){
			if(r==true){
				this.badgerSex[n]="female";
				this.badgerImage[n]="badgeradultf.gif";			
				}
			else{
				this.badgerSex[n]="male";
				this.badgerImage[n]="badgeradult.gif";
				};
			this.badgerName[n]=getName(this.badgerSex[n]);
			
			if(rand(6)==2){
				this.badgerHealth[n]="sick";	
				this.badgerName[n]=dirty[rand(12)]+" "+getName(this.badgerSex[n]);
			}
			else{
				this.badgerHealth[n]="good";	
			}
			this.badgerWeight[n]="normal";

			this.badgerStatus[n]="";
			this.badgerForage[n]=true;
			this.badgerAge[n]=rand(24)+24;				
			game.numBadgers++;	
			game.combatRoll+=this.badgerName[n];
			if(i<(num-2))game.combatRoll+=", ";
			if(i==(num-2))game.combatRoll+=" and ";
			}	
	}
	game.combatRoll+=" joined the clan.<br />";
}

function badgerLeaves(n){
	badger.KillBadger(n,"left");
}

function AddCub(num,mum){
	if (num==0)return;
	game.birthRoll+=this.badgerName[mum]+" gave birth to";
	for(i=0;i<num;i++){
		n=game.numBadgers;
		r=randSwitch();
		if(n<50){
			if(r==true){
				this.badgerSex[n]="female";
				this.badgerImage[n]="badgercubf.gif";			
				}
			else{
				this.badgerSex[n]="male";
				this.badgerImage[n]="badgercub.gif";
				};
			this.badgerName[n]=getName(this.badgerSex[n]);
			this.badgerWeight[n]=this.badgerWeight[mum];
			this.badgerHealth[n]="good";
			this.badgerStatus[n]="cub";
			this.badgerForage[n]=false;
			this.badgerAge[n]=1;				
			game.numBadgers++;	
			game.cubsBorn++;
			game.advisor[7]=true;
			game.birthRoll+=" "+this.badgerName[n];
			if(i<(num-2))game.birthRoll+=",";
			if(i==(num-2))game.birthRoll+=" and ";
			}	
	}
	game.birthRoll+="<br />"
}

function BreedBadger(n){
	var cubs=0;
	if((this.badgerStatus[n]=="lady" || this.badgerStatus[n]=="queen" || this.badgerStatus[n]=="princess")&& this.badgerHealth[n]=="good"){ 
		for(i=0;i<game.numBadgers;i++){
		  	if(this.badgerStatus[i]=="lord" || this.badgerStatus[i]=="king" || this.badgerStatus[i]=="prince" ) cubs=1+rand(3);

			}
		this.AddCub(cubs,n);
		}
//game.advisor[1]=true; //nomates
}

function CrownBadger(n){
	if(this.badgerAge[n]>24 && this.badgerHealth[n]=="good" && this.badgerWeight[n]=="plump")StatusUp(n);
		
}


function AgeBadger(n){

	this.badgerAge[n]+=3;
	if(this.badgerStatus[n]=="cub" || this.badgerAge[n]==4){
	  	StatusUp(n);
		this.badgerForage[n]=true;
		game.DisplayForagers();
		}
	switch(this.badgerSex[n]){
	 	default:
		case "male": 
			if(this.badgerStatus[n]=="" && this.badgerAge[n]>(rand(6)+18)) StatusUp(n);
			break;
		case "female":
			if(this.badgerStatus[n]=="" && this.badgerAge[n]>(rand(3)+12)) StatusUp(n);
			break;
		}
	if(this.badgerAge[n]>70){
	 	if(this.badgerName[n].substring(0,3)!="Old") this.badgerName[n]="Old "+this.badgerName[n];
		StatusElderly(n);
		if(rand(5)==2) HealthDown(n);
		}
	this.UpdateImage(n);		
}

function DoBadger(n){

	//this is what happens to an individual badger in a season
	this.RiskBadger(n);
	if(this.badgerHealth[n]!="dead"){
		this.RoadBadger(n);
		this.FeedBadger(n);
		this.FedStatus(n);
		this.CrownBadger(n);	
		this.AgeBadger(n);
		if(game.season=="Winter")this.BreedBadger(n);
		else if(rand(10)==2)this.BreedBadger(n);
	}
}

function RoadBadger(n){
	//bumps experience 
 	if(this.badgerForage[n]==true && game.roadDanger==true && this.badgerRoadEx[n]>0){
		this.badgerRoadEx[n]--;
	}
}



function HealthUp(n){
	switch(badger.badgerHealth[n]){
		case "good":
			break;
		case "fair":
			badger.badgerHealth[n]="good";	
			break;
		case "bad":
			badger.badgerHealth[n]="fair";	
			break;
		case "sick":
			badger.badgerHealth[n]="bad";	
			break;
		case "injured":
			badger.badgerHealth[n]="bad";	
			break;
		case "preinjured":
			badger.badgerHealth[n]="injured";	
			break;
		case "presick":
			badger.badgerHealth[n]="sick";	
			break;
		default:
			alert("HealthUp "+badger.badgerHealth[n]);
			break;
	}
}

function HealthDown(n){
	switch(badger.badgerHealth[n]){
		case "good":
			break;
			badger.badgerHealth[n]="fair";				
		case "fair":
			badger.badgerHealth[n]="bad";	
			break;
		case "bad":
			badger.badgerHealth[n]="sick";	
			break;
		case "sick":
			badger.KillBadger(n,"sick");	
			break;
		case "injured":
			badger.KillBadger(n,"injured");
			break;
		case "preinjured":
			badger.badgerHealth[n]="injured";	
			break;
		case "presick":
			badger.badgerHealth[n]="sick";	
			break;
			
		default:
			break;
	}
}

function WeightUp(n){
	switch(badger.badgerWeight[n]){
		case "plump":
			break;
		case "normal":
			badger.badgerWeight[n]="plump";	
			break;
		case "thin":
			badger.badgerWeight[n]="normal";	
			break;
		case "emaciated":
			badger.badgerWeight[n]="thin";	
			break;
	}
}

function WeightDown(n){
	switch(badger.badgerWeight[n]){
		case "plump":
			badger.badgerWeight[n]="normal";				
			break;
		case "normal":
			badger.badgerWeight[n]="thin";	
			break;
		case "thin":
			badger.badgerWeight[n]="emaciated";	
			break;
		case "emaciated":
			badger.KillBadger(n,"starve");	
			break;
	}
}

function StatusUp(n){
	switch(badger.badgerStatus[n]){
		default:
		case "cub":
			badger.badgerStatus[n]="";	
		case "king":
		case "queen":
			break;
		case "prince":
			if(game.noking)	{
			 	badger.badgerStatus[n]="king";	
				game.noking=false;
				addReport(badger.badgerName[n]+" became king.<br/>");
				}
			break;
		case "princess":
			if(game.noqueen){
			  	badger.badgerStatus[n]="queen";	
				game.noqueen=false;
				addReport(badger.badgerName[n]+" became queen.<br/>");
				}
			break;
		case "lord":
			badger.badgerStatus[n]="prince";	
			break;
		case "lady":
			badger.badgerStatus[n]="princess";	
			break;
		case "":
			if(badger.badgerSex[n]=="male")badger.badgerStatus[n]="lord";	
			else badger.badgerStatus[n]="lady";	
			break;
	}
}

function StatusDown(n){
	switch(badger.badgerStatus[n]){
		case "king":
			game.noking=true;
			badger.badgerStatus[n]="";
			break	
		case "queen":
			game.noqueen=true;
			badger.badgerStatus[n]="";
			break;
		default:
			badger.badgerStatus[n]="";
		}
}

function StatusElderly(n){
	switch(badger.badgerStatus[n]){
		case "king":
			badger.badgerStatus[n]="elderly";
			game.noking=true;
			break	
		case "queen":
			badger.badgerStatus[n]="elderly";	
			game.noqueen=true;
			break;
			
		default:
			badger.badgerStatus[n]="elderly";
			break;
	}
}

function badgerDiscontent(num){
 	status=(badger.badgerStatus[num]!="queen" && badger.badgerStatus[num]!="king");
	if(randSwitch)return(badger.badgerAge[num]>24 && badger.badgerAge[num]<36 && status)	
	else return false
}
