var kamiro={};
var race={
	"stats":{},
	"facing": function(){
		return (2.5 + this.stats.Size / 8);
	}
};

var myXHR = new Request({url:'/js/test/kamiro_data.js', method:'get', onSuccess: function(r){
	kamiro.data=JSON.decode(r);
	//console.debug(kamiro.data);
	init();
	
}}).send();

function round(n,p) {
	p=Math.pow(10,p);
	return Math.round(n*p)/p;
}

function rank(n) {
	if (n==16) return 5;
	if (n>7) return 4;
	if (n>3) return 3;
	if (n>1) return 2;
	return 1;
}

function addColumn(o,w,h,title) {
	new Element('div', {'class':'data_column','title':title,'styles':{'width':w},'html':h}).inject(o);					
}

function displayWeapons(t) {
	$('weapons').empty();
	if (!t) t=$('stats_Technology').value;
	for (var tech in kamiro.data.Weapon) {
		if (parseInt(tech) <= parseInt(t)) {
			for (var weapon in kamiro.data.Weapon[tech]) {
				var wl=new Element('div', {'class':'weapon_line'});
				addColumn(wl,10,tech);	
				addColumn(wl,150,weapon);
				var wi=kamiro.data.Weapon[tech][weapon];
				var wsout=""; var wsdmg=0;
				for (var stat in wi.Damage) {
					var ceiling=99;
					wsout += stat + ' x ' + wi.Damage[stat];
					if (wi.Ceiling && wi.Ceiling[stat]) {
						ceiling=wi.Ceiling[stat];
						wsout += '[' + wi.Ceiling[stat] + ']';
					}
					wsdmg+=wi.Damage[stat]*(race.stats[stat]<ceiling?race.stats[stat]:ceiling);
					wsout += ' ';
				}	
				//addColumn(wl,200,wsout);
				addColumn(wl,40,round(wsdmg,1),wsout);
				addColumn(wl,40,wi.Supply*100);
				addColumn(wl,40,round(race.facing()*wi.Facing,1));
				addColumn(wl,60,round(100/(race.facing()*wi.Facing)*wsdmg,1));		
				wl.inject(weapons,'bottom');
			}
		}
	}
}

function modStatValue(o,stat,value,toggle) {
	if ($type(value)!='number') value=1;
	var mod=race.stats[stat]+value;
	if (mod > 16) mod=16;
	if (mod < 1) mod=1;
	o.value=race.stats[stat]=mod;
	$(o).tween('color', ['#AAA', '#333']);
	displayWeapons();
	addStatInfo(stat);
}

function addStatInfo(stat) {
	var statInfo=$(stat+'_info');
	var statField=$(stat+'_field');
	if (!statInfo) {
		var statInfo = new Element('div', {
			'id': stat + '_info'
		}).inject(statField, 'after');
	} else {
		statInfo.empty();
	}
	var rankNum=rank(race.stats[stat]);
	var rankInfo=kamiro.data.Racial[stat][rankNum];
	addColumn(statInfo,100,stat);
	addColumn(statInfo,10,rankNum);
	addColumn(statInfo,100,rankInfo.d);
	
	
}

function addIncrementButtons(o,stat) {
	new Element('div', {
		'class':'stat_down stat_toggle',
	    'events': {'click': function(obj){modStatValue(o,stat,-1,this);}}		
	}).inject(o,'before');
	new Element('div', {
		'class':'stat_up stat_toggle',
	    'events': {'click': function(obj){modStatValue(o,stat,1,this);}}
	}).inject(o,'after');	
}

function init() {
	for (var stat in kamiro.data.Racial) {
		var co=$('stats_'+stat);
		race.stats[stat]=parseInt(co.value);
		addStatInfo(stat);
		addIncrementButtons(co,stat);
			
	}
	displayWeapons();
}



