﻿/*
	PETMOOD MANAGEMENT
*/
function PetMood(petobj, xmlobj){
	var mood = new Array;
	var moodcount = 0;
	var statsdiv = null;
	var visible=false;
	var totalpoints=0;
	var totalpreferedpoints=0;
	initMood();
	function initMood(){
		var tmpele = xmlobj.getElementsByTagName('mood');
		//var loadcount=0,inloop=true;
		statsdiv = appendHTMLElement(view,"<div enabled='true' visible='false' width='100%' y='16' background='#FF0000' />");	
		statsdiv.onmouseout = hideme;
		for(var i=0; i<tmpele.length; i++){
			mood[moodcount] = new PetMoodObj(tmpele[i], moodcount, statsdiv);
			if(mood[moodcount].name!="mood" && mood[moodcount].prefered!=0){
				totalpoints+=parseFloat(mood[moodcount].max);
				totalpreferedpoints+=parseFloat(mood[moodcount].prefered);
			}
			moodcount++;
		}	
		if(compat_window) statsdiv.style.height = moodcount*20; else statsdiv.height = moodcount*20;
		loadMoodXML(petobj.passport.xmldom);
	}
	
	this.render = render;
	function render(){
		var currentpoints=0;
		var moodindex=-1;
		var moodvalue;
		//if(!visible) return;
		for(var i=0; i < moodcount; i++){
			if(mood[i].name=="mood") moodindex=i;
			if(mood[i].name!="mood" && mood[i].prefered!=0) currentpoints+=parseFloat(mood[i].value);
		}
		if(moodindex==-1) return false;
		i=moodindex;
		moodvalue = mood[i].value;
		var lifeline=1;
		if(petobj.lifetime!=0){
			lifeline = (petobj.passport.servertime - petobj.passport.dob);
			if(lifeline < 0){ debug.error("invalid passport"); return; } //something went terribly wrong!!!
			if(lifeline > petobj.lifetime)
				lifeline=1;
			else
				lifeline= ((lifeline / petobj.lifetime) * 100)+1;			
		}
		//alert(lifeline+" "+moodindex+" "+moodvalue+" "+currentpoints+" "+totalpreferedpoints);
		if(currentpoints < totalpreferedpoints){
			var percentunder = 100 - ((currentpoints / totalpreferedpoints) * 100);
			percentover = parseInt(percentunder/10);
			mood[i].value-= percentover;
			if(mood[i].value < 0) mood[i].value=0;
		}else{
			var percentover = 
			((currentpoints-totalpreferedpoints) / (totalpoints-totalpreferedpoints))*50;
			debug.trace(percentover+" "+lifeline);
			if(lifeline < 100){	// decrease additions until lifeforce used, then refuse to get happier
				percentover = parseInt(percentover/lifeline);
				mood[i].value+= percentover;
				if(mood[i].value > mood[i].max) mood[i].value=mood[i].max;
			}
		}
		mood[i].render();
		petobj.brain.eventhandler("moodchanged","mood", mood[i].value, mood[i].prefered);
	}
	
	this.setPos = function(petimg){
		if(compat_window){
			statsdiv.style.left = petimg.getX();
			statsdiv.style.top = petimg.getY()+16;
			statsdiv.style.width = petimg.getWidth();
		}else{
			statsdiv.x = petimg.getX();
			statsdiv.y = petimg.getY()+16;
			statsdiv.width = petimg.getWidth();			
		}
	}
	
	this.setMood = setMood;
	function setMood(moodname,newvalue){
		for(var i=0; i < moodcount; i++){
			if(mood[i].name==moodname){
				if(newvalue > mood[i].max){
					if(mood[i].prefered==0) mood[i].max = newvalue; else newvalue=mood[i].max;
				}
				if(newvalue < 0 ) newvalue=0;
				petobj.brain.eventhandler("moodchanged",moodname, newvalue, mood[i].prefered);
				if(mood[i].value!=newvalue){
					mood[i].value=newvalue;
					mood[i].render();
				}
				return true;
			}
		}
		return false;		
	}
	
	this.getMood = getMood;
	function getMood(moodname){
		for(var i=0; i < moodcount; i++){
			if(mood[i].name==moodname) return mood[i].value;		
		}
		return 0;
	}
	
	this.loadMoodXML = loadMoodXML;
	function loadMoodXML(moodxmlobj){
		var mname, mvalue;
		var moodvalues = moodxmlobj.getElementsByTagName("MOODS");
		if(moodvalues.length!=0){
			moodvalues = moodvalues[0].childNodes;
			for(var i=0; i<moodvalues.length; i++){
				if(moodvalues[i].tagName!=null){
					mname = moodvalues[i].tagName;
					mvalue = moodvalues[i].firstChild.nodeValue;
					if(mvalue < 0) mvalue=0;
					for(var y=0; y<moodcount; y++){
						if(mood[y].name==mname){ 
							if(mood[y].prefered==0) mood[y].max=mvalue;
							if(mood[y].max < mvalue) mvalue=mood[y].max;
							mood[y].value=mvalue;
							mood[y].render();
						}
					}
				}
			}
		}
	}
	
	this.createMoodXML = createMoodXML;
	function createMoodXML(){
		var xml="";
		for(var i=0; i < moodcount; i++){
			xml+=mood[i].getXML();	
		}
		return "<PET><PETNAME>"+petobj.passport.petname+"</PETNAME><PETTYPE>"+petobj.passport.pettype+"</PETTYPE><MOODS>"+xml+"</MOODS></PET>";
	}
	this.showme = showme;
	function showme(){
		visible=true;
		if(compat_window) statsdiv.style.visibility = "visible"; else statsdiv.visible = "true";
	}
	
	this.hideme = hideme;
	function hideme(){
		visible=false;
		if(compat_window) statsdiv.style.visibility = "hidden"; else statsdiv.visible = "false";
	}
	
	this.destroy = destroy;
	function destroy(){
		for(var i=0; i<moodcount; i++){
			mood[i].destroy();
			mood[i]=null;
		}
		if(compat_window) view.removeChild(statsdiv); else view.removeElement(statsdiv);
		statsdiv=null;
	}
}

function PetMoodObj(xmlobj, index, divele){
	var me = this;
	// global variables
	this.name = "unnamed";
	this.value = this.defaultvalue = 0;
	this.change = 0;
	this.prefered = 0;
	this.max=100;
	// local variables
	var eleLabel = null;
	var eleProgressBack = null;
	var eleProgressBar = null;
	var elePrefered = null;
	// constructor
	constructor();
	function constructor(){
		//	<mood name="thirst" default="100" prefered="60" change="-1" />
		me.name = xmlobj.getAttribute("name");
		me.value = me.defaultvalue = xmlobj.getAttribute("default");
		me.prefered = xmlobj.getAttribute("prefered");
		me.change = xmlobj.getAttribute("change");
		if(!(me.max=xmlobj.getAttribute("max"))) me.max=100;
		
		eleProgressBack = appendHTMLElement(divele, 
			"<div width='100%' y='"+index*20+"' height='20'  background='#FF6666' />"
		);
		eleProgressBar = appendHTMLElement(divele, 
			"<div width='50%' y='"+index*20+"' height='20'  background='#6666FF' />"
		);
		eleLabel = appendHTMLElement(divele, 
			"<label width='100%' y='"+index*20+"' height='20'>"+me.name+"</label>"
		);
		if(me.prefered!=0){
		elePrefered = appendHTMLElement(divele, 
			"<div width='1' x='"+me.prefered+"%' y='"+index*20+"' height='20' background='#000000' />"
		);
		}
		
		render();
	}

	// main functions
	this.render = render;
	function render(){
		var pos=0;
		if(me.max!=0) pos = parseInt((me.value / me.max) * 100);
		
		if(compat_window){
			eleProgressBar.style.width=pos+"%";
			eleLabel.innerHTML=me.name+": "+parseInt(me.value);
		}else{
			eleProgressBar.width=pos+"%";		
			eleLabel.innerText=me.name+": "+parseInt(me.value);
		}
	}
	
	this.getXML = function(){
		return "<"+me.name+">"+me.value+"</"+me.name+">";	
	}
	
	this.destroy = destroy;
	function destroy(){	
		if(compat_window){
			if(me.prefered!=0) divele.removeChild(elePrefered);
			divele.removeChild(eleLabel);
			divele.removeChild(eleProgressBar);
			divele.removeChild(eleProgressBack);
		}else{
			if(me.prefered!=0) divele.removeElement(elePrefered);
			divele.removeElement(eleLabel);
			divele.removeElement(eleProgressBar);
			divele.removeElement(eleProgressBack);
		}
		elePrefered=eleLabel=eleProgressBar=eleProgressBack=null;
	}
}
