
var g_app = new App();


function App()
{
	this.slotManager = null;
}

App.prototype.onLoad = function()
{
	this.slotManager = new SlotManager(
		6, document.formConfig, this);
}


App.prototype.onSlotGet = function(array)
{
	with (document.formInput)
	{
		var c = elements.length;

		for (var i = 0; i < c; i++)
			array.push(elements[i].value);
	}
}


App.prototype.onSlotSet = function(array)
{
	with (document.formInput)
	{
		var c = elements.length;

		for (var i = 0; i < c; i++)
			elements[i].value = array[i];
	}
}


App.prototype.onSlotReset = function()
{
	with (document.formInput)
	{
		var c = elements.length;

		for (var i = 0; i < c; i++)
		{

			elements[i].value = elements[i].defaultValue;
		}
	}
}

/*@}*/
/********************************************************************/


function onLoad()
{
	createJobSelector();
}

function createJobSelector()
{
	var obj = this.formInput.job;

	obj.options[ 0] = new Option("Vagrant", 0);
	obj.options[ 1] = new Option("Mercenary", 1);
	obj.options[ 2] = new Option("Acrobat", 2);
	obj.options[ 3] = new Option("Assist", 3);
	obj.options[ 4] = new Option("Magician", 4);
	obj.options[ 5] = new Option("=N/A=", 5);
	obj.options[ 6] = new Option("Knight", 6);
	obj.options[ 7] = new Option("Blade", 7);
	obj.options[ 8] = new Option("Jester", 8);
	obj.options[ 9] = new Option("Ranger", 9);
	obj.options[10] = new Option("Ringmaster", 10);
	obj.options[11] = new Option("Billposter", 11);
	obj.options[12] = new Option("Psykeeper", 12);
	obj.options[13] = new Option("Elementer", 13);
	obj.options[14] = new Option("=N/A=", 14);
	obj.options[15] = new Option("=N/A=", 15);
}

function onCalc()
{
	var job = document.formInput.job.selectedIndex;
	var lv = parseInt(document.formInput.lv.value);
	var vit = parseInt(document.formInput.vit.value);
	var int = parseInt(document.formInput.int.value);

	var mhpAdd = parseInt(document.formInput.mhpAdd.value);
	var mhpMul = parseInt(document.formInput.mhpMul.value);
	var hprAdd = 0;
	var hprMul = 0;

	var mmpAdd = parseInt(document.formInput.mmpAdd.value);
	var mmpMul = parseInt(document.formInput.mmpMul.value);
	var mprAdd = 0;
	var mprMul = 0;

	var mfpAdd = parseInt(document.formInput.mfpAdd.value);
	var mfpMul = parseInt(document.formInput.mfpMul.value);
	var fprAdd = 0;
	var fprMul = 0;


	var mhp = calcMHP(job, lv, vit, int, mhpAdd, mhpMul);
	var mmp = calcMMP(job, lv, vit, int, mmpAdd, mmpMul);
	var mfp = calcMFP(job, lv, vit, int, mfpAdd, mfpMul);


	var hpr = calcHPR(job, lv, vit, int, hprAdd, hprMul, mhp);
	var mpr = calcMPR(job, lv, vit, int, mprAdd, mprMul, mmp);
	var fpr = calcFPR(job, lv, vit, int, fprAdd, fprMul, mfp);


	document.formOutput.mhp.value = mhp;
	document.formOutput.mmp.value = mmp;
	document.formOutput.mfp.value = mfp;

	document.formOutput.hpr.value = hpr;
	document.formOutput.mpr.value = mpr;
	document.formOutput.fpr.value = fpr;
}


function calcMHP(job, lv, vit, int, mhpAdd, mhpMul)
{
	var co = new Array(
		0.8999999761581420900,  // 0.9
		1.5000000000000000000,  // 1.5
		1.3999999761581421000,  // 1.4
		1.3999999761581421000,  // 1.4
		1.3999999761581421000,  // 1.4
		1.6000000238418579000,  // 1.6
		2.0000000000000000000,  // 2.0
		1.6000000238418579000,  // 1.6
		1.6000000238418579000,  // 1.6
		1.6000000238418579000,  // 1.6
		1.6000000238418579000,  // 1.6
		1.7999999523162842000,  // 1.8
		1.5000000000000000000,  // 1.5
		1.5000000000000000000,  // 1.5
		0.6999999880790710400,  // 0.7
		0.6999999880790710400); // 0.7

	var a = lv * co[job] * 0.5;
	var b = (lv + 1.0) * 0.25;
	var c = a * b;
	var d = vit * 0.02 + 1.0;
	var e = d * c + vit * 10.0 + 80.0;

	return Math.floor((Math.floor(e) + mhpAdd) * (1 + mhpMul / 100));
}

function calcHPR(job, lv, vit, int, hprAdd, hprMul, mhp)
{
	var co = new Array(
		1.2000000476837158000,  // 1.2
		1.6000000238418579000,  // 1.6
		1.7000000476837158000,  // 1.7
		1.6000000238418579000,  // 1.6
		1.5000000000000000000,  // 1.5
		1.2000000476837158000,  // 1.2
		2.0999999046325684000,  // 2.1
		1.7000000476837158000,  // 1.7
		2.0000000000000000000,  // 2.0
		1.7999999523162842000,  // 1.8
		2.2999999523162842000,  // 2.3
		1.8999999761581421000,  // 1.9
		1.2000000476837158000,  // 1.2
		1.2000000476837158000,  // 1.2
		1.2000000476837158000,  // 1.2
		1.2000000476837158000); // 1.2;

	var a = mhp / (lv * 500.0);
	var b = vit * co[job] + a;
	var c = lv * 0.333333 + b;

	return Math.floor((Math.floor(c) + hprAdd) * (1 + hprMul / 100));
}

function calcMMP(job, lv, vit, int, mmpAdd, mmpMul)
{
	var co = new Array(
		0.3000000119209289600,  // 0.3
		0.5000000000000000000,  // 0.5
		0.5000000000000000000,  // 0.5
		1.2999999523162842000,  // 1.3
		1.7000000476837158000,  // 1.7
		0.5000000000000000000,  // 0.5
		0.6000000238418579100,  // 0.6
		0.6000000238418579100,  // 0.6
		0.5000000000000000000,  // 0.5
		0.5000000000000000000,  // 0.5
		1.7999999523162842000,  // 1.8
		1.0000000000000000000,  // 1.0
		2.0000000000000000000,  // 2.0
		2.0000000000000000000,  // 2.0
		1.0000000000000000000,  // 1.0
		0.5000000000000000000); // 0.5

	var a = (lv + lv + int * 8.0) * co[job] + 22.0 + int * co[job];

	return Math.floor((Math.floor(a) + mmpAdd) * (1 + mmpMul / 100));
}

function calcMPR(job, lv, vit, int, mprAdd, mprMul, mmp)
{
	var co = new Array(
		0.5000000000000000000,  // 0.5
		0.5000000000000000000,  // 0.5
		0.5000000000000000000,  // 0.5
		0.5000000000000000000,  // 0.5
		1.7500000000000000000,  // 1.75
		0.5000000000000000000,  // 0.5
		0.5000000000000000000,  // 0.5
		0.5000000000000000000,  // 0.5
		0.6999999880790710400,  // 0.7
		1.2999999523162842000,  // 1.3
		1.8999999761581421000,  // 1.9
		1.6000000238418579000,  // 1.6
		1.8999999761581421000,  // 1.9
		2.0000000000000000000,  // 2.0
		0.5000000000000000000,  // 0.5
		0.5000000000000000000); // 0.5

	var a = mmp / (lv * 500.0);
	var b = int * co[job] + a;
	var c = lv * 1.5 + b;
	var d = c * 0.2;

	return Math.floor((Math.floor(d) + mprAdd) * (1 + mprMul / 100));
}

function calcMFP(job, lv, vit, int, mfpAdd, mfpMul)
{
	var co = new Array(
		0.3000000119209289600,  // 0.3
		0.6999999880790710400,  // 0.7
		0.5000000000000000000,  // 0.5
		0.6000000238418579100,  // 0.6
		0.3000000119209289600,  // 0.3
		0.5000000000000000000,  // 0.5
		0.8999999761581420900,  // 0.9
		0.8000000119209289600,  // 0.8
		0.6999999880790710400,  // 0.7
		0.6000000238418579100,  // 0.6
		0.4000000059604644800,  // 0.4
		0.6999999880790710400,  // 0.7
		0.4000000059604644800,  // 0.4
		0.4000000059604644800,  // 0.4
		0.5000000000000000000,  // 0.5
		0.5000000000000000000); // 0.5

	var a = (lv + lv + vit * 6.0) * co[job] + vit * co[job];

	return Math.floor((Math.floor(a) + mfpAdd) * (1 + mfpMul / 100));
}

function calcFPR(job, lv, vit, int, fprAdd, fprMul, mfp)
{
	var co = new Array(
		0.5000000000000000000,  // 0.5
		1.0000000000000000000,  // 1.0
		0.5000000000000000000,  // 0.5
		1.0000000000000000000,  // 1.0
		0.6000000238418579100,  // 0.6
		0.5000000000000000000,  // 0.5
		1.3999999761581421000,  // 1.4
		1.2000000476837158000,  // 1.2
		0.5000000000000000000,  // 0.5
		0.5000000000000000000,  // 0.5
		1.1000000238418579000,  // 1.1
		1.2999999523162842000,  // 1.3
		0.5000000000000000000,  // 0.5
		0.5000000000000000000,  // 0.5
		0.5000000000000000000,  // 0.5
		0.5000000000000000000); // 0.5

	var a = mfp / (lv * 500.0);
	var b = vit * co[job] + a;
	var c = lv + lv + b;
	var d = c * 0.2;

	return Math.floor((Math.floor(d) + fprAdd) * (1 + fprMul / 100));
}
