
var forge_result_box_ids = new Array
('iron_per', 'steel_per', 'stone_per', 
'ele_lv1_per', 'vse_lv1_per', 'vvse_lv1_per', 'std_lv1_per', 'vs_lv1_per', 'vvs_lv1_per', 'vvvs_lv1_per',
'ele_lv2_per', 'vse_lv2_per', 'vvse_lv2_per', 'std_lv2_per', 'vs_lv2_per', 'vvs_lv2_per', 'vvvs_lv2_per',
'ele_lv3_per', 'vse_lv3_per', 'vvse_lv3_per', 'std_lv3_per', 'vs_lv3_per', 'vvs_lv3_per', 'vvvs_lv3_per');

var brew_result_box_ids = new Array
('ryw_avg_per', 'ryw_min_per', 'ryw_max_per', 
'bpot_avg_per', 'bpot_min_per', 'bpot_max_per',
'slimr_avg_per', 'slimr_min_per', 'slimr_max_per', 
'slimy_avg_per', 'slimy_min_per', 'slimy_max_per', 
'slimw_avg_per', 'slimw_min_per', 'slimw_max_per', 
'bottle_avg_per', 'bottle_min_per', 'bottle_max_per', 
'gcoat_avg_per', 'gcoat_min_per', 'gcoat_max_per', 
'elepot_avg_per', 'elepot_min_per', 'elepot_max_per', 
'alco_avg_per', 'alco_min_per', 'alco_max_per', 
'aloe_avg_per', 'aloe_min_per', 'aloe_max_per', 
'emb_avg_per', 'emb_min_per', 'emb_max_per'); 

var cook_result_box_ids = new Array (
'out_avg_per', 'out_min_per', 'out_max_per', 
'home_avg_per', 'home_min_per', 'home_max_per', 
'pro_avg_per', 'pro_min_per', 'pro_max_per', 
'royal_avg_per', 'royal_min_per', 'royal_max_per');


// calc for iron, steel and elemental stones
function refine_calc(refine_base_make_per, iron_lv, steel_lv, stone_lv, yes_baby){

	// data for refining
	iron_lvl = iron_lv.options[iron_lv.selectedIndex].value;
	steel_lvl = steel_lv.options[steel_lv.selectedIndex].value;
	stone_lvl = stone_lv.options[stone_lv.selectedIndex].value;

	iron_make_per = refine_base_make_per + 4000 + (iron_lvl * 500);
	steel_make_per = refine_base_make_per + 3000 + (steel_lvl * 500);
	stone_make_per = refine_base_make_per  + 1000 + (stone_lvl * 500);
	
	document.getElementById('iron_per').innerHTML = ((iron_make_per * yes_baby) / 100).toFixed(2);
	document.getElementById('steel_per').innerHTML = ((steel_make_per * yes_baby) / 100).toFixed(2);
	document.getElementById('stone_per').innerHTML = ((stone_make_per * yes_baby) / 100).toFixed(2);
}


function forge_calc(forge_base_make_per, anvil, smith_lv, weap_res_lv, ori_res_lv, yes_baby){

	// data for forging
	anvil_used = anvil.options[anvil.selectedIndex].value;
	smith_lvl = smith_lv.options[smith_lv.selectedIndex].value;
	weap_res_lvl = weap_res_lv.options[weap_res_lv.selectedIndex].value;
	ori_res_lvl = ori_res_lv.options[ori_res_lv.selectedIndex].value;

	// basic forging percent without difficulties deduction and ori_research for lvl 3 weapons
	forge_base_make_per = parseInt(forge_base_make_per) + (parseInt(smith_lvl) * 500)
		+ (parseInt(weap_res_lvl) * 100) + parseInt(anvil_used);

	// Chance decreases by weapon difficulties:
	// [If weapon is elemental] ==> base_make_per -= 2000
	// [Each "Very Strong" (star crumb used)] ==> base_make_per -= star_crumb * 1500
	// [If weapon level is > 1] ==> base_make_per -= weapon_level * 1000

	// Oridecon Research Bonus [For Lv 3 weapon forging only]:
	// base_make_per += Oridecon Research Level * 100

	function base_forge_per(wplv_penalty, orires_bonus){

		var per = new Array();

		// basic chances, without the weapon level deuction, it's the same for lvl 1 weapon 
		ele_per  = per[0] =  
			(((forge_base_make_per - 2000 - wplv_penalty + orires_bonus) * yes_baby) / 100).toFixed(2);
		vse_per  = per[1] =  
			(((forge_base_make_per - 1500 - 2000 - wplv_penalty + orires_bonus) * yes_baby) / 100).toFixed(2);
		vvse_per = per[2] =
			(((forge_base_make_per - 1500 * 2 - 2000 - wplv_penalty + orires_bonus) * yes_baby) / 100).toFixed(2);
		std_per  = per[3] = 
			(((forge_base_make_per  - wplv_penalty + orires_bonus) * yes_baby) / 100).toFixed(2);
		vs_per   = per[4] = 
			(((forge_base_make_per - 1500 - wplv_penalty + orires_bonus) * yes_baby) / 100).toFixed(2);
		vvs_per  = per[5] = 
			(((forge_base_make_per - 1500 * 2 - wplv_penalty + orires_bonus) * yes_baby) / 100).toFixed(2);
		vvvs_per = per[6] =
			(((forge_base_make_per - 1500 * 3 - wplv_penalty + orires_bonus) * yes_baby) / 100).toFixed(2);
	
		return per;
	}

	// level 1 weapon
	lv1_weapon_per = base_forge_per(0, 0);
	document.getElementById('ele_lv1_per').innerHTML = lv1_weapon_per[0];
	document.getElementById('vse_lv1_per').innerHTML = lv1_weapon_per[1];
	document.getElementById('vvse_lv1_per').innerHTML = lv1_weapon_per[2];
	document.getElementById('std_lv1_per').innerHTML = lv1_weapon_per[3];
	document.getElementById('vs_lv1_per').innerHTML = lv1_weapon_per[4];
	document.getElementById('vvs_lv1_per').innerHTML = lv1_weapon_per[5];
	document.getElementById('vvvs_lv1_per').innerHTML = lv1_weapon_per[6];

	// level 2 weapon
	lv2_weapon_per = base_forge_per(2000, 0);
	document.getElementById('ele_lv2_per').innerHTML = lv2_weapon_per[0];
	document.getElementById('vse_lv2_per').innerHTML = lv2_weapon_per[1];
	document.getElementById('vvse_lv2_per').innerHTML = lv2_weapon_per[2];
	document.getElementById('std_lv2_per').innerHTML = lv2_weapon_per[3];
	document.getElementById('vs_lv2_per').innerHTML = lv2_weapon_per[4];
	document.getElementById('vvs_lv2_per').innerHTML = lv2_weapon_per[5];
	document.getElementById('vvvs_lv2_per').innerHTML = lv2_weapon_per[6];

	// level 3 weapon
	lv3_weapon_per = base_forge_per(3000, ori_res_lvl * 100);
	document.getElementById('ele_lv3_per').innerHTML = lv3_weapon_per[0];
	document.getElementById('vse_lv3_per').innerHTML = lv3_weapon_per[1];
	document.getElementById('vvse_lv3_per').innerHTML = lv3_weapon_per[2];
	document.getElementById('std_lv3_per').innerHTML = lv3_weapon_per[3];
	document.getElementById('vs_lv3_per').innerHTML = lv3_weapon_per[4];
	document.getElementById('vvs_lv3_per').innerHTML = lv3_weapon_per[5];
	document.getElementById('vvvs_lv3_per').innerHTML = lv3_weapon_per[6];
}


function brew_calc(brew_base_make_per, yes_baby){

	function base_brew_per(bonus, min_variation, max_variation){

		var per = new Array();

		avg_per = per[0] = (((brew_base_make_per + bonus + (max_variation / 2)) * yes_baby) / 100).toFixed(2);
		min_per = per[1] = (((brew_base_make_per + bonus + min_variation) * yes_baby) / 100).toFixed(2);
		max_per = per[2] = (((brew_base_make_per + bonus + max_variation) * yes_baby) / 100).toFixed(2);

		return per;
	}

	// red yellow white potion
	ryw_base_per = base_brew_per(2000, 10, 1000);
	document.getElementById('ryw_avg_per').innerHTML = ryw_base_per[0];
	document.getElementById('ryw_min_per').innerHTML = ryw_base_per[1];
	document.getElementById('ryw_max_per').innerHTML = ryw_base_per[2];

	// alcohol
	alco_base_per = base_brew_per(1000, 10, 1000);
	document.getElementById('alco_avg_per').innerHTML = alco_base_per[0];
	document.getElementById('alco_min_per').innerHTML = alco_base_per[1];
	document.getElementById('alco_max_per').innerHTML = alco_base_per[2];

	// Bottle Grenade (fire bottle), Acid Bottle, Plant Bottle, Marine Sphere Bottle
	bottle_base_per = base_brew_per(0, 10, 1000);
	document.getElementById('bottle_avg_per').innerHTML = bottle_base_per[0];
	document.getElementById('bottle_min_per').innerHTML = bottle_base_per[1];
	document.getElementById('bottle_max_per').innerHTML = bottle_base_per[2];

	// Slim Yellow Potion
	slimy_base_per = base_brew_per(0, -10, -500);
	document.getElementById('slimy_avg_per').innerHTML = slimy_base_per[0];
	document.getElementById('slimy_min_per').innerHTML = slimy_base_per[2];	// max and min reverse in negative
	document.getElementById('slimy_max_per').innerHTML = slimy_base_per[1];

	// Slim White Potion 
	slimw_base_per = base_brew_per(0, -10, -1000);
	document.getElementById('slimw_avg_per').innerHTML = slimw_base_per[0];
	document.getElementById('slimw_min_per').innerHTML = slimw_base_per[2];	// max and min reverse in negative
	document.getElementById('slimw_max_per').innerHTML = slimw_base_per[1];

	// Glistening Coat (same as slim white actually)
	gcoat_base_per = base_brew_per(0, -10, -1000);
	document.getElementById('gcoat_avg_per').innerHTML = gcoat_base_per[0];
	document.getElementById('gcoat_min_per').innerHTML = gcoat_base_per[2];	// max and min reverse in negative
	document.getElementById('gcoat_max_per').innerHTML = gcoat_base_per[1];

	// These below uses base_make_per without variation
	default_base_per = base_brew_per(0, 0, 0);
	
	// blue potion
	document.getElementById('bpot_avg_per').innerHTML = default_base_per[0];
	document.getElementById('bpot_min_per').innerHTML = default_base_per[1];
	document.getElementById('bpot_max_per').innerHTML = default_base_per[2];

	// slim red
	document.getElementById('slimr_avg_per').innerHTML = default_base_per[0];
	document.getElementById('slimr_min_per').innerHTML = default_base_per[1];
	document.getElementById('slimr_max_per').innerHTML = default_base_per[2];

	// elemental resist potion
	document.getElementById('elepot_avg_per').innerHTML = default_base_per[0];
	document.getElementById('elepot_min_per').innerHTML = default_base_per[1];
	document.getElementById('elepot_max_per').innerHTML = default_base_per[2];

	// anodyne, aloevera
	document.getElementById('aloe_avg_per').innerHTML = default_base_per[0];
	document.getElementById('aloe_min_per').innerHTML = default_base_per[1];
	document.getElementById('aloe_max_per').innerHTML = default_base_per[2];

	// embryo
	document.getElementById('emb_avg_per').innerHTML = default_base_per[0];
	document.getElementById('emb_min_per').innerHTML = default_base_per[1];
	document.getElementById('emb_max_per').innerHTML = default_base_per[2];

}


function cook_calc(cook_base_make_per, cook_exp, food_lvl, yes_baby){

	var OUT_SCRIPT = 11;
	var HOME_SCRIPT = 12;
	var PRO_SCRIPT = 13;
	var ROYAL_SCRIPT = 14;

	var c_success_exp = new Array(5, 5, 10, 10, 20, 20, 40, 40, 80, 80);
	var c_fail_exp = new Array(-1, -1, -5, -5, -10, -10, -20, -20, -40, -40);

	function base_cook_per(SCRIPT_VAR){

		// cooking exp plus randomness
		var min_variation = 0;
		var max_variation = 24;

		var per = new Array();

		avg_exp_rand = 100 * ( (max_variation/2) + 6 + cook_exp/80 );
		min_exp_rand = 100 * ( min_variation + 6 + cook_exp/80 );
		max_exp_rand = 100 * ( max_variation + 6 + cook_exp/80 );

		avg_per = per[0] = (( ( cook_base_make_per + (1200 * (SCRIPT_VAR - 10)) + avg_exp_rand) * yes_baby) / 100).toFixed(2);
		min_per = per[1] = (( (cook_base_make_per + (1200 * (SCRIPT_VAR - 10)) + min_exp_rand) * yes_baby) / 100).toFixed(2);
		max_per = per[2] = (( (cook_base_make_per + (1200 * (SCRIPT_VAR - 10)) + max_exp_rand) * yes_baby) / 100).toFixed(2);

		return per; 
	
	}

	// cooking exp gain/loss depend on level of food
	document.getElementById('out_exp_success').innerHTML = c_success_exp[food_lvl - 1];
	document.getElementById('out_exp_fail').innerHTML = c_fail_exp[food_lvl - 1];

	// outdoor cooking set
	out_cook_per = base_cook_per(OUT_SCRIPT);
	document.getElementById('out_avg_per').innerHTML = out_cook_per[0];
	document.getElementById('out_min_per').innerHTML = out_cook_per[1];
	document.getElementById('out_max_per').innerHTML = out_cook_per[2];

	// home cooking set
	home_cook_per = base_cook_per(HOME_SCRIPT);
	document.getElementById('home_avg_per').innerHTML = home_cook_per[0];
	document.getElementById('home_min_per').innerHTML = home_cook_per[1];
	document.getElementById('home_max_per').innerHTML = home_cook_per[2];

	// pro cooking set
	pro_cook_per = base_cook_per(PRO_SCRIPT);
	document.getElementById('pro_avg_per').innerHTML = pro_cook_per[0];
	document.getElementById('pro_min_per').innerHTML = pro_cook_per[1];
	document.getElementById('pro_max_per').innerHTML = pro_cook_per[2];

	// royal cooking set
	royal_cook_per = base_cook_per(ROYAL_SCRIPT);
	document.getElementById('royal_avg_per').innerHTML = royal_cook_per[0];
	document.getElementById('royal_min_per').innerHTML = royal_cook_per[1];
	document.getElementById('royal_max_per').innerHTML = royal_cook_per[2];

}

// when a calculated value is more than 100%, set it to 100%, if it's lower than 0% change it to 0%
// otherwise, just add % sign after it
function format_result(result_box_ids){

	for(var i = 0; i < result_box_ids.length; i++){
		if(document.getElementById(result_box_ids[i]).innerHTML > 100.00){
			document.getElementById(result_box_ids[i]).innerHTML = '100%';
		}else if(document.getElementById(result_box_ids[i]).innerHTML < 0.00){
			document.getElementById(result_box_ids[i]).innerHTML = '0%';
		}else{
			document.getElementById(result_box_ids[i]).innerHTML += '%';
		}
	}
}
