var Hard = parseFloat(0);
var Cleansing = parseFloat(0);
var Fluffy = parseFloat(0);
var Conditioning = parseFloat(0);
var Stable = parseFloat(0);
var Iodine = parseFloat(0);
var INS = parseFloat(0);

var Lauric = parseFloat(0);
var Linoleic = parseFloat(0)
var Linolenic = parseFloat(0);
var Myristic = parseFloat(0);
var Oleic = parseFloat(0);
var Palmitic = parseFloat(0)
var Ricinoleic = parseFloat(0)
var Stearic = parseFloat(0)

var aryOilWeights = new Array(12)
var aryUserOilSAP = new Array(12)
var aryUserOilIndex = new Array(12)
var aryPerCent = new Array(12)
var aryPerCentSave = new Array(12)

resetArrays()

var radio
var unit = "lb"
var aryOil = new Array(1)
function Oil(id,name,sap,iodine,ins,lauric,linoleic,myristic,oleic,palmitic,ricinoleic,stearic,linolenic,unique,hard,clean,cond,fluff,stable){
	this.id = id;
	this.name = name;
	this.sap = sap;
	this.iodine = iodine;
	this.ins = ins;
	this.lauric = lauric;
	this.linoleic = linoleic;
	this.myristic = myristic;
	this.oleic = oleic;
	this.palmitic = palmitic;
	this.ricinoleic = ricinoleic;
	this.stearic = stearic;
	this.linolenic = linolenic;
	this.unique = unique;
	this.hard = hard;
	this.clean = clean;
	this.cond = cond;
	this.fluff = fluff;
	this.stable = stable;
	}
function resetProps(){
	Hard = parseInt(0);
	Cleansing = parseInt(0);
	Fluffy = parseInt(0);
	Conditioning = parseInt(0);
	Stable = parseInt(0);
	Iodine = parseInt(0);
	INS = parseInt(0);

	Lauric = parseFloat(0);
	Linoleic = parseFloat(0);
	Linolenic = parseFloat(0);
	Myristic = parseFloat(0);
	Oleic = parseFloat(0);
	Palmitic = parseFloat(0);
	Ricinoleic = parseFloat(0);
	Stearic = parseFloat(0);
}
function WindowOnLoad(){
selOilOnChange();
}
function resetArrays(){
	for (var k = 0; k <= 14; k++){
		aryOilWeights[k] = parseFloat(0.0);
		aryUserOilSAP[k] = parseFloat(0.0);
		aryUserOilIndex[k] = parseInt(0);
		aryPerCent[k] = parseFloat(0.0);
		}
}
function twOnClick(){
	if (document.getElementById('oilWeight0').checked == true){
		document.getElementById('TWunit').innerHTML = "Фунты";
		document.getElementById('lblWT').innerHTML="lb";
		radio = 0;
		unit = "lb";
		document.getElementById('FragranceRatioUnit').innerHTML = "Унций на Фунт";
		}
	if (document.getElementById('oilWeight1').checked == true){
		document.getElementById('TWunit').innerHTML = "Унции";
		document.getElementById('lblWT').innerHTML="oz";
		radio = 1;
		unit = "oz";
		document.getElementById('FragranceRatioUnit').innerHTML = "Унций на Фунт";
		}
	if (document.getElementById('oilWeight2').checked == true){
		document.getElementById('TWunit').innerHTML= "Граммы";
		document.getElementById('lblWT').innerHTML="gm";
		radio = 2;
		unit = "gm";
		document.getElementById('FragranceRatioUnit').innerHTML = "Грамм на Килограмм";
		}
}
//--------------------------------------
function getProperties(idx, isCompute, weight){
var str, sap, weightSave
var spacer
var pc
	weightSave = weight
	pc = parseFloat(aryOil[idx].linoleic)
	if ( pc > 0 ){
		Conditioning += pc * weight
		Linoleic += pc * weight
		}
	pc = parseFloat(aryOil[idx].Lauric)
	if ( pc >= 0 ){
		Hard += pc * weight
		Cleansing += pc * weight
		Fluffy += pc * weight
		Lauric  += pc * weight
		}
	pc = parseFloat(aryOil[idx].linolenic)
	if ( pc > 0 ){
		Conditioning += pc * weight
		Linolenic += pc * weight
		}
	pc = parseFloat(aryOil[idx].myristic)
	if ( pc > 0 ){
		Hard += pc * weight
		Cleansing += pc * weight
		Fluffy += pc * weight
		Myristic += pc * weight
		}
	pc = parseFloat(aryOil[idx].oleic)
	if ( pc > 0 ){
		Conditioning += pc * weight
		Oleic += pc * weight
		}
	pc = parseFloat(aryOil[idx].palmitic)
	if ( pc > 0 ){
		Hard += pc * weight
		Stable += pc * weight
		Palmitic += pc * weight
		}	
	pc = parseFloat(aryOil[idx].ricinoleic)
	if ( pc > 0 ){
		Conditioning += pc * weight
		Fluffy += pc * weight
		Stable += pc * weight
		Ricinoleic += pc * weight
		}	
	pc = parseFloat(aryOil[idx].stearic)
	if ( pc > 0 ){
		Hard += pc * weight
		Stable += pc * weight
		Stearic += pc * weight
		}
	// Meadowfoam
	str = new String(aryOil[idx].name)
	if ( str.indexOf("Meadowfoam") != -1 ){
		Conditioning += 84 * weight
		Cleansing += 16 * weight
		}
	// fractionated Coconut
	str = aryOil[idx].name
	if ( str.indexOf("fractionated") != -1 ){
		Hard += 90 * weight
		Cleansing += 90 * weight
		Fluffy += 90 * weight
		}
		
	sap = parseFloat(aryOil[idx].sap)
	INS += parseFloat(aryOil[idx].ins) * weight
	Iodine += parseFloat(aryOil[idx].iodine)  * weight 
	
	if ( ! isCompute ){
	document.getElementById('spnHard').value = " " + Hard;
	document.getElementById('spnCleansing').value = " " +  Cleansing;
	document.getElementById('spnConditioning').value = " " +  Conditioning;
	document.getElementById('spnFluffy').value = " " +  Fluffy;
	document.getElementById('spnStable').value = " " +  Stable;
	document.getElementById('spnIodine').value = " " +  Iodine
	document.getElementById('spnINS').value = " " +  INS
	
	document.getElementById('spnLauric').value = " " +  roundNumber(Lauric,0);
	document.getElementById('spnLinoleic').value = " " +  roundNumber(Linoleic,0);
	document.getElementById('spnLinolenic').value = " " +  roundNumber(Linolenic,0);
	document.getElementById('spnMyristic').value = " " +  roundNumber(Myristic,0);
	document.getElementById('spnOleic').value = " " +  roundNumber(Oleic,0);
	document.getElementById('spnPalmitic').value = " " +  roundNumber(Palmitic,0);
	document.getElementById('spnRicinoleic').value = " " +  roundNumber(Ricinoleic,0);
	document.getElementById('spnStearic').value = " " +  roundNumber(Stearic,0);
	}
}
function roundNumber(number, dec) {
	return Math.round(number*Math.pow(10,dec))/Math.pow(10,dec);
}
//-----------------------------------------
function selOilOnChange(){
resetProps()
var idx = document.getElementById('selOil').selectedIndex;
getProperties(idx, false, 1.0);
var sap = parseFloat(aryOil[idx].sap)
document.getElementById('txtSAPKOH').value = sap;
document.getElementById('txtSAPNaOH').value = roundNumber(sap * (40.0 / 56.1), 3);
}
function clearAll(){
if ( ! confirm("Пожалуйста, подтвердите удаление списка масел"))
	return

for ( var k = 1; k <= 14; k++){
	removeOil(k); // also onclick for remove button
	document.getElementById("oil" + k).value = " "
	document.getElementById("weight" + k).value = " "
	document.getElementById("weightOZ" + k).value = " "
	document.getElementById("weightGM" + k).value = " "
	}
resetProps();
resetArrays();

document.getElementById("spnHard2").value = " ";
document.getElementById("spnCleansing2").value = " ";
document.getElementById("spnConditioning2").value = " ";
document.getElementById("spnFluffy2").value = " ";
document.getElementById("spnStable2").value =  " ";
document.getElementById("spnIodine2").value = " ";
document.getElementById("spnINS2").value = " ";

document.getElementById("spnLauric2").value = " ";
document.getElementById("spnLinoleic2").value = " ";
document.getElementById("spnLinolenic2").value = " ";
document.getElementById("spnMyristic2").value = " ";
document.getElementById("spnOleic2").value = " ";
document.getElementById("spnPalmitic2").value = " ";
document.getElementById("spnRicinoleic2").value = " ";
document.getElementById("spnStearic2").value = " ";

document.getElementById("hydroxide0").checked = true;

document.getElementById("txtWaterFactor").value = "38";	
document.getElementById("txtDiscount").value = "5";

document.getElementById("txtTW").value = "1";	
document.getElementById("txtFragranceRatio").value = "";

document.getElementById("txtTotalPerCent").value = "0";
document.getElementById("spnFragranceRequired").value = "0";

document.getElementById("twLyeRequired").value = "0";
document.getElementById("twWaterRequired").value = "0";

document.getElementById("twLyeRequiredOZ").value = "0";
document.getElementById("twWaterRequiredOZ").value = "0";

document.getElementById("twLyeRequiredGM").value = "0";
document.getElementById("twWaterRequiredGM").value = "0";

setButtons(false);
}
function addOil(num){
var sel = document.getElementById("selOil");

document.getElementById("hdnIndex" + num).value = sel.selectedIndex;
document.getElementById("txtOil" + num).value = sel.options[sel.selectedIndex].text;

aryUserOilIndex[num] = parseInt(sel.selectedIndex);
aryUserOilSAP[num] = parseFloat(sel.options[sel.selectedIndex].value);
}
function removeOil(num){
aryUserOilSAP[num]  = parseFloat(0.0);
aryUserOilIndex[num] = parseInt(0);
	
document.getElementById("hdnIndex" + num).value = "-1";
document.getElementById("txtOil" + num).value = "";
document.getElementById("txtPerCent" + num).value = "0";
document.getElementById("txtWeight" + num).value = "";
}
function autoAddOil(){
	for (var k = 1; k <= 14 ; k++){
		if ( document.getElementById("txtOil" + k).value.length == 0){
			addOil(k);
			break;
		}
	}
}
//===========++++++++++++++++++++++++++++++++++++++++++++++++++++++
function  validate(){
var txtTW = new String(document.getElementById("txtTW").value);
var radPercent =  document.getElementById("radPercent0");
var twOils, pc, totalPerCent, adjust, whichway;
var txtWT, totalWeight;
var str = new String();

totalPerCent = 0;
if ( radPercent.checked == true ){
	if (txtTW.length == 0){
		jAlert("Пожалуйста, заполните количество масел.");
		return false;
		}
	else{
		if (isNaN(txtTW)){
			jAlert("Общее количество масел не является числом.");
			return false;
			}
			else{
			twOils = parseFloat(txtTW);
			}
		}
	if (twOils <= 0.0 ){
			jAlert("Общее количество масел не может быть меньше либо равно 0.");
			return false;
			}
			
	for (var k = 1; k <= 14 ; k++){
		if ( document.getElementById("txtOil" + k).value != null){
		pc = parseFloat(document.getElementById("txtPerCent" + k).value);
		if (isWhitespace (document.getElementById("txtPerCent" + k).value))
			continue;
		if (isNaN(pc)){
			jAlert("Value for Oil Number " + k + " is not a number");
			return false;
			}
		}
		
		if ( document.getElementById("txtOil" + k).value != null  && isWhitespace(document.getElementById("txtPerCent" + k).value)  ){
			jAlert("Please enter a value for Oil Number " + k + ", " + document.getElementById("txtOil" + k).value + ", or remove it from the recipe.");
			return false;
		}
		totalPerCent += pc;
		
	}
		var testPerCent = roundNumber(totalPerCent, 1);
		if (testPerCent != 100.0){
		adjust = roundNumber((100.0 - testPerCent),4);
		
		if ( adjust > 0 )
			whichway = " добавив ";
		else
			whichway = " убрав ";
		jAlert("Итоговая сумма не равна 100%\n\nНеобходимо исправить, " + whichway + Math.abs(adjust) + " %", "Внимание!");
		return false;
		}
}
else{ 
	totalWeight = 0;
	for (var k = 1; k <= 14; k++){
		
		txtWT = document.getElementById("txtWeight" + k).value;
		if (isNaN(txtWT) && txtWT.length > 0 ){
			jAlert("Value for Oil Number " + k + " is not a number");
			return false;
		}
		else if (document.getElementById("txtOil" + k).value.length > 0  && txtWT.length == 0){
			jAlert("Value for Oil Number " + k + " is empty.  \nRemove the oil or add a value for it.");
			return false;
		}
		else{
			if (txtWT.length > 0)
				totalWeight += parseFloat(txtWT);
		}
	}
	
	if (totalWeight <= 0){
		jAlert("The total weight of the oils in your recipe can not be 0 or less.");
		return false;
		}
}

if (document.getElementById("chkFixedConc").checked == false && document.getElementById("chkFixedRatio").checked == false){
	var waterPercent = document.getElementById("txtWaterFactor").value;
	if( isWhitespace (waterPercent) || isNaN(waterPercent)){
		jAlert("\"Water as % of Oils\" is not a number.");
		return false;
		}
}

var superFat = document.getElementById("txtDiscount").value;
if( isWhitespace (superFat) || isNaN(superFat)){
		jAlert("\"Super Fat/Discount %\" is not a number.  Please set to 0 or greater.");
		return false;
		}

str = document.getElementById("txtFragranceRatio").value
if (str.length == 0){
	fr = 0.0;
	}
else{
	if (isNaN(str)){
		jAlert("Fragrance ratio is not a number");
		return false;
		}
	else{
		fr = parseFloat(str);
		}
	}

if ( FixedConc == true ){
	var strSet = document.getElementById("spnLyeWater").value
	if( isNaN (parseFloat(strSet))){
		jAlert("Lye Concentration value must be a number.\nEither uncheck the Lye Concentration 'Set' box or enter a number.");
		return false;
		}
}
if (FixedRatio == true ){
	var strRatio = new String(document.getElementById("spnWaterLyeRatio").value);
	if ( strRatio.indexOf(":") == -1){
		jAlert("The ratio must be expressed as 'Water:Lye'.\nA colon, : , must be be between the water value and the lye value.");
		return false;
	}
	var ratioArray = strRatio.split(":");
	if(isNaN(ratioArray[0]) || isNaN(ratioArray[1])){
		jAlert("Water and Lye values in the ratio must both be numbers.");
		return false;
	}
}
		
return true;

}


//++++++++++++++++++++++++++++++++
function fixPCrounding(num){
var sInt, sDec;
var lr;
var trueRound;
var s1 = new String(num);

// return on whole integer
if (s1.indexOf(".") == -1 )
	return num;
lr = s1.split(".");
sInt = lr[0];
sDec = lr[1];
if(sDec.charAt(0) != '14' && sDec.charAt(0) != '0')
	return num;
if ( sDec.charAt(0) == '14' ){
	for (var k = 0; k < sDec.length; k++){
		if (sDec.charAt(k) == '14' && k == 6)
			return (parseInt(sInt) + 1);
		if ( k > 0 ){
			if (sDec.charAt(k) != '14')
				return num;
		}
	}
	
}
else{
	for (var k = 0; k < sDec.length; k++){
		if (sDec.charAt(k) == '0' && k == 6)
			return parseInt(sInt);
		}
		if ( k > 0 ){
			if (sDec.charAt(k) != '0')
				return num;
		}
}
return num;
}
function ComputeWeightPC(){
var pc 
var weight, totalWeight, twOils, totalPerCent, pcValue
var oil, txtOil, txtWeight, txtWeightOZ, txtWeightGM

totalPerCent = parseFloat(0.0);
totalWeight = parseFloat(0.0);
weight = parseFloat(0.0);
	
twOils = parseFloat(document.getElementById("txtTW").value);
for (var k = 1; k <= 14 ; k++){
	pc = parseFloat(document.getElementById("txtPerCent" + k).value);
	if ( isNaN(pc))
		pc = 0.0;
	
	aryPerCent[k] = pc / 100.0;
	totalPerCent += pc;
	
	//weight = roundNumber(pc * twOils / 100, 3);
	weight = pc * twOils / 100;
	if( pc > 0.0)
		document.getElementById("txtWeight" + k).value = fixPCrounding(weight);
	
	
	aryOilWeights[k] = weight;
	totalWeight +=  weight;
	
	txtOil = document.getElementById("txtOil" + k);
	oil = document.getElementById("oil" + k);
	if (txtOil.value == "")
		oil.value = "";
	else
		oil.value = txtOil.value;

	}
	document.getElementById("txtTotalPerCent").value = roundNumber(totalPerCent,4)
	document.getElementById("txtTotalRecipeWeight").value = roundNumber(totalWeight, 3) 

return true	
}
function ComputeWeightWT(){
var txtWT = new String();
var txtPC = new String();
var msg = new String();
var TotalPerCent = 0;
var totalWeight = 0;
var weight;   
var j = 0;
    // get individual weights
    for (var k = 1; k <= 14; k++){
        txtWT = document.getElementById("txtWeight" + k).value
		if (txtWT.length > 0){
			aryOilWeights[k] = parseFloat(txtWT);
			totalWeight += aryOilWeights[k];
		}
	}
    
	// get individual percent for recipe
    for ( k = 1; k <= 14; k++){
        // convert weights into percent
        aryPerCent[k] = (aryOilWeights[k] / totalWeight) * 100.0
		//alert(aryPerCent[k]);
		txtPC = document.getElementById("txtPerCent" + k)
		if (aryPerCent[k] == 0)
			txtPC.value = "";
        else
			//txtPC.value = (roundNumber(aryPerCent[k], 4));
			txtPC.value = fixPCrounding(aryPerCent[k]);
			TotalPerCent += aryPerCent[k]
	}
			
	document.getElementById("txtTotalPerCent").value = roundNumber(TotalPerCent,4);
	document.getElementById("txtTotalRecipeWeight").value = roundNumber(totalWeight, 3) 
	document.getElementById("txtTW").value = roundNumber(totalWeight, 3)

return true;

}
//--------------------------------------------
function computeRecipe(){
var  k, tot, totGM, num, sap;
var weightedSAP, weightLYE, weightWATER; 
var weight;
var str, fr, lb;

if ( ! validate() )
	return;
	
var radPercent =  document.getElementById("radPercent0");
if ( radPercent.checked == true ){
	if ( ! ComputeWeightPC() )
		return;
}
else{ 
	if( ! ComputeWeightWT() )
		return;
}
// fragrance
if (document.getElementById("txtFragranceRatio").value.length == 0){
	fr = 0.0;
	}
else{
	fr = parseFloat(document.getElementById("txtFragranceRatio").value);
	}
		
weightedSAP = parseFloat(0.0);
weightLYE = parseFloat(0.0);
weightWATER  = parseFloat(0.0);
weight = parseFloat(0.0);

tot = parseFloat(0.0);
sap = new Array(12);

if ( document.getElementById("hydroxide0").checked == true){	
	for ( k = 1 ; k <= 14; k++ ){
		tot += aryOilWeights[k];
		sap[k-1] = parseFloat(aryUserOilSAP[k]) * (40.0 / 56.1);
		}
}
else{
	for ( k = 1 ; k <= 14; k++ ){
		tot += aryOilWeights[k];
		sap[k-1] = aryUserOilSAP[k];
		}
	}

for ( k = 1 ; k <= 14; k++ )		{
	weightedSAP += ((aryOilWeights[k]/tot) * sap[k-1]);
}
// start lye
weightLYE = weightedSAP * tot;
weightLYE *= ( (100.0 - parseFloat(document.getElementById("txtDiscount").value)) / 100.0 );
switch (unit){
	case "lb":
			document.getElementById("twLyeRequired").value = " " +  roundNumber(weightLYE,3);
			document.getElementById("twLyeRequiredOZ").value = " " +  roundNumber(weightLYE * 16,3);
			document.getElementById("twLyeRequiredGM").value = " " +  roundNumber(weightLYE * 453.592,3); 
			break;
	case "oz":
			document.getElementById("twLyeRequired").value = " " +  roundNumber(weightLYE / 16.0,3);
			document.getElementById("twLyeRequiredOZ").value = " " +  roundNumber(weightLYE,3);
			document.getElementById("twLyeRequiredGM").value = " " +  roundNumber(weightLYE/ 16.0 * 453.592,3); 
			break;
	case "gm":
			document.getElementById("twLyeRequired").value = " " +  roundNumber(weightLYE/ 453.592,3); 
			document.getElementById("twLyeRequiredOZ").value = " " +  roundNumber(weightLYE/ 453.592 *16 ,3); 
			document.getElementById("twLyeRequiredGM").value = " " +  roundNumber(weightLYE,3);
			break;
}
// end lye
// start water
setFixedWaterMethod();
if ( ! FixedLye ){
	weightWATER = tot * parseFloat(document.getElementById("txtWaterFactor").value)/100.0;
}
else{
	if ( FixedConc == true ){
		var conc = parseFloat(document.getElementById("spnLyeWater").value);
		if( conc < 10 || conc > 70 ){
			jAlert("Fixed lye concentration must be between 10 and 70.");
			return;
		}
		weightWATER =  weightLYE /(conc/100) - weightLYE;
		document.getElementById("txtWaterFactor").value = roundNumber((weightWATER / tot) * 100, 4) ;
	}
	if (FixedRatio == true ){
		var strRatio = new String(document.getElementById("spnWaterLyeRatio").value);
		var ratioArray = strRatio.split(":");
		weightWATER = (parseFloat(ratioArray[0])/parseFloat(ratioArray[1])) * weightLYE;
		document.getElementById("txtWaterFactor").value = roundNumber((weightWATER / tot) * 100, 4) ;
	}
	
}
switch (unit){
	case "lb":
			document.getElementById("twWaterRequired").value = " " +  roundNumber(weightWATER, 3);
			document.getElementById("twWaterRequiredOZ").value = " " +  roundNumber(weightWATER * 16,3);
			document.getElementById("twWaterRequiredGM").value = " " +  roundNumber(weightWATER * 453.592,3); 
			break
	case "oz":
			document.getElementById("twWaterRequired").value = " " +  roundNumber(weightWATER / 16.0,3);
			document.getElementById("twWaterRequiredOZ").value = " " +  roundNumber(weightWATER, 3);
			document.getElementById("twWaterRequiredGM").value = " " +  roundNumber(weightWATER/ 16.0 * 453.592,3); 
			break
	case "gm":
			document.getElementById("twWaterRequired").value = " " +  roundNumber(weightWATER/ 453.592,3); 
			document.getElementById("twWaterRequiredOZ").value = " " +  roundNumber(weightWATER/ 453.592 *16 ,3); 
			document.getElementById("twWaterRequiredGM").value = " " +  roundNumber(weightWATER, 3);
			break
}
var a = weightLYE;
var b = weightWATER;
var LWRatio = roundNumber(  (a / (b + a))*100,4);

if ( LWRatio > 40.0 && document.getElementById("hydroxide0").checked == true)
	jAlert( "CAUTION:  Lye is greater than 40% of Water & Lye solution !\n\nThis is generally considered an unsafe percentage.\n\nThe calculation will continue with the value you entered.");

if (! FixedConc ){
	document.getElementById("spnLyeWater").value = LWRatio;
}

if (! FixedRatio ){
	var WtoLRatio = weightWATER / weightLYE
	document.getElementById("spnWaterLyeRatio").value = roundNumber(WtoLRatio, 4) + " : 1";
}
// end water
if (document.getElementById("oilWeight0").checked == true )
	document.getElementById("spnFragranceRequired").value = " " +  roundNumber((fr * tot),3) + " Oz";
	
if (document.getElementById("oilWeight1").checked == true){
	lb = tot/16.0;
	document.getElementById("spnFragranceRequired").value = " " +  roundNumber((fr * lb),3) + " Oz";
	}
if (document.getElementById("oilWeight2").checked == true)
	document.getElementById("spnFragranceRequired").value = " " +  roundNumber((fr * tot/1000),2) + " Gm";

resetProps()

var idx
for ( k = 1 ; k <= 14; k++ ){
	var str = document.getElementById("txtOil" + k).value
	if ( str.length > 0 ){ 
		idx  = aryUserOilIndex[k]
		weight = aryOilWeights[k]/tot
		getProperties(idx, true, weight)
		}
	}		
	document.getElementById("spnHard2").value = " " +  roundNumber(Hard, 0);
	document.getElementById("spnCleansing2").value = " " +  roundNumber(Cleansing, 0);
	document.getElementById("spnConditioning2").value = " " +  roundNumber(Conditioning, 0) ;
	document.getElementById("spnFluffy2").value = " " +  roundNumber(Fluffy, 0);
	document.getElementById("spnStable2").value = " " +  roundNumber(Stable, 0);
	document.getElementById("spnIodine2").value = " " +  roundNumber(Iodine, 0); 
	document.getElementById("spnINS2").value = " " +  roundNumber(INS,0);
	
	document.getElementById("spnLauric2").value = " " +  roundNumber(Lauric,0);
	document.getElementById("spnLinoleic2").value = " " +  roundNumber(Linoleic,0);
	document.getElementById("spnLinolenic2").value = " " +  roundNumber(Linolenic,0);
	document.getElementById("spnMyristic2").value = " " +  roundNumber(Myristic,0);
	document.getElementById("spnOleic2").value = " " +  roundNumber(Oleic,0);
	document.getElementById("spnPalmitic2").value = " " +  roundNumber(Palmitic,0);
	document.getElementById("spnRicinoleic2").value = " " +  roundNumber(Ricinoleic,0);
	document.getElementById("spnStearic2").value = " " +  roundNumber(Stearic,0);
//------  fill results table -------- 
	var txtOil, oil, txtWeight, txtWeightOZ, txtWeightG;
	for ( k = 1; k <= 14; k++){
		// get objects
    	txtOil = document.getElementById("txtOil" + k);
		oil = document.getElementById("oil" + k);
		// set blank rows
		if (txtOil.value == "")
			oil.value = "";
		else
			oil.value = txtOil.value;

		txtWeight = document.getElementById("weight" + k);
		txtWeightOZ = document.getElementById("weightOZ" + k);
		txtWeightGM = document.getElementById("weightGM" + k);
		
		weight = aryOilWeights[k];
		switch (unit){
				case "lb" :
					if (weight == 0 )
						txtWeight.value = "";
					else
						txtWeight.value = roundNumber(weight,3); 
					
					if (weight == 0 )
						txtWeightOZ.value = "";
					else
						txtWeightOZ.value = roundNumber(weight * 16.0, 3); 
					
					if (weight == 0 )
						txtWeightGM.value = "";
					else
						txtWeightGM.value = roundNumber(weight * 453.592, 3); 
					break
					
				case "oz" :
					if (weight == 0 )
						txtWeight.value = "";
					else
						txtWeight.value = roundNumber(weight / 16.0, 3); 
					
					if (weight == 0 )
						txtWeightOZ.value = "";
					else
						txtWeightOZ.value = roundNumber(weight, 3);
					
					if (weight == 0 )
						txtWeightGM.value = "";
					else
						txtWeightGM.value = roundNumber(weight / 16 * 453.592, 3); 
					break
				
				case "gm" :
					if (weight == 0 )
						txtWeight.value = "";
					else
						txtWeight.value = roundNumber(weight / 453.592, 3);
					
					if (weight == 0 )
						txtWeightOZ.value = "";
					else
						txtWeightOZ.value = roundNumber(weight/ 453.592 * 16.0 , 3); 
					
					if (weight == 0 )
						txtWeightGM.value = "";
					else
						txtWeightGM.value = roundNumber(weight , 3); 
					break;		
		}
	}
	setButtons(true);
}

//==========================
function setButtons(on){
if (on){
	document.getElementById("printLink").disabled = false;
//	document.getElementById("btnSaveRecipe").disabled = false;
}
else{
	document.getElementById("printLink").disabled = true;
//	document.getElementById("btnSaveRecipe").disabled = true;
}
}

//==========================
function printRecipe(){
	document.getElementById("F1").target = "_blank";
	document.getElementById("F1").submit();
}
//========================


function SaveRecipe(){
var k, str; 
var strIndex, strPerCent;
var v;
var recipeName; 
var expire = new Date();
var plus30 = expire.getTime() + (31236000000)//360 365 days;
expire.setTime(plus30);

var hdnIndex;
var str = new String("");
var str2 = new String(""); 
recipeName = document.getElementById("selRecipeName").value;

for ( k = 1 ; k <= 14; k++ ){
	if(document.getElementById("radPercent0").checked == true)
		v = document.getElementById("txtPerCent" + k);
	else
		v = document.getElementById("txtWeight" + k);
//	id:48&pc:50 @id:10&pc:25 @id:7&pc:25 # tow:3@
	// if value is present
	hdnIndex = document.getElementById("hdnIndex" + k)
	if (hdnIndex.value != -1){
		if ( k == 14 ){
			str += aryOil[hdnIndex.value].id + ":" + v.value + "#";
			}
		else{
			str += aryOil[hdnIndex.value].id + ":" + v.value + "@";
			}
		}
	else{
		if ( k == 14 )
			str += hdnIndex.value + ":" + 0 + "#";
		else
			str += hdnIndex.value + ":" + 0 + "@";
		}
	}
	// other settings
	var unit;
	if (document.getElementById("oilWeight0").checked == true)
		str2 += "unit:lb@"
	if (document.getElementById("oilWeight1").checked == true)
		str2 += "unit:oz@"
	if (document.getElementById("oilWeight2").checked == true)
		str2 += "unit:gm@"
	str2 += "wt:" + document.getElementById("txtTW").value + "@";
	str2 += "wpc:" +  document.getElementById("txtWaterFactor").value + "@";
	str2 += "wdis:" +  document.getElementById("txtDiscount").value + "@";
	str2 += "lyecon:" +  document.getElementById("spnLyeWater").value + "@";
	str2 += "wlratio:" +  document.getElementById("spnWaterLyeRatio").value + "@";
	str2 += "chklc:" +  document.getElementById("chkFixedConc").checked + "@";
	str2 += "chkwl:" +  document.getElementById("chkFixedRatio").checked + "@";
	str2 += "pw:" +  document.getElementById("radPercent0").checked + "@";
	
	str2 += "wpc:" +  document.getElementById("txtWaterFactor").value + "@";
	str2 += "wdis:" +  document.getElementById("txtDiscount").value + "@";
	str2 += "naoh:" +  document.getElementById("hydroxide0").checked + "@";
	str2 += "frag:" +  document.getElementById("txtFragranceRatio").value;
var cookie = str + str2;

document.cookie = recipeName + "=" + cookie + ";" + "expires=" + expire.toGMTString();

jAlert("Рецепт успешно сохранен!", "Сохранение рецепта");

}
function GetCookie(name){
var allCookies = document.cookie;
var pos = allCookies.indexOf(name);
if(pos != -1){
	var start = pos + name.length + 1;	// +1 for the = sign
	var end = allCookies.indexOf(";",start);
	if (end == -1) end = allCookies.length;
	var value = allCookies.substring(start,end);
	value = unescape(value);
	return (value);
	}
else{
	return ("");
	}
}
function GetRecipe(){
	
var name = document.getElementById("selRecipeName").value;
var aryIDfromCookie = new Array();
var aryIDValue = new Array();
var txtIDValue, oilTxtObject, hdnUserOilIDXobject;
var cookieVal = GetCookie(name);
var j = 0, idx;
var sel = document.getElementById("selOil");
var pos = name.lastIndexOf("e");
var strName = name.substring(0,pos + 1);
var recipeNumber = name.substring(pos + 1);
strName += " " + recipeNumber;



if ( cookieVal.length == 0){
	jAlert("Рецепт под этим номером не был сохранен на Вашем компьютере.", "Ошибка загрузки рецепта!");
	return;
	}
else{
	for( var k=1; k <= 14; k++){
	document.getElementById("txtWeight" + k).value = "";
	document.getElementById("txtPerCent" + k).value = "";
	}
	document.getElementById("spnFragranceRequired").value = "";
	document.getElementById("txtTotalPerCent").value = "";
	document.getElementById("txtTotalRecipeWeight").value = "";
	
	var allValues = cookieVal.split('#');
	//	48:50 @ 10:25 @ 7:25 # tow:3@

	var a = allValues[0].split('@');
	var b;
	// oil values
	for (var i = 0; i < 14; i++){
		b = a[i].split(':');
		aryIDfromCookie[i] = b[0]
		aryIDValue[i] = b[1];
		}
	// other values
	a = allValues[1].split('@');
	for (i = 0; i < a.length; i++){
		b = a[i].split(':');
		switch (b[0]){
			case "unit":
				if ( b[1] == "lb"){
					document.getElementById("oilWeight0").checked = true;
					document.getElementById('lblWT').innerHTML="Фунтов";
					document.getElementById('TWunit').innerHTML="Фунтов";
					document.getElementById('FragranceRatioUnit').innerHTML = "Унций на фунт";
					unit = "lb";
				}
				if ( b[1] == "oz"){
					document.getElementById("oilWeight1").checked = true;
					document.getElementById('lblWT').innerHTML="Унций";
					document.getElementById('TWunit').innerHTML="Унций";
					document.getElementById('FragranceRatioUnit').innerHTML = "Унций на фунт";
					unit = "oz";
				}
				if ( b[1] == "gm"){
					document.getElementById("oilWeight2").checked = true;
					document.getElementById('lblWT').innerHTML="Грамм";
					document.getElementById('TWunit').innerHTML="Грамм";
					document.getElementById('FragranceRatioUnit').innerHTML = "Грамм на килограмм";
					unit = "gm";
				}
				break;
			case "wt":
				document.getElementById("txtTW").value = b[1];
				break;
			case "wpc":
				document.getElementById("txtWaterFactor").value = b[1];
				break;
			case "wdis":
				document.getElementById("txtDiscount").value = b[1];
				break;
			case "lyecon":
				document.getElementById("spnLyeWater").value = b[1];
				break;
			case "wlratio":
				document.getElementById("spnWaterLyeRatio").value = b[1] + ": 1";
				break;
			case "chklc":
				if ( b[1] == "true")
					document.getElementById("chkFixedConc").checked = true;
				else
					document.getElementById("chkFixedConc").checked = false;
				break;
			case "chkwl":
				if ( b[1] == "true")
					document.getElementById("chkFixedRatio").checked = true;
				else
					document.getElementById("chkFixedRatio").checked = false;
				break;
			case "pw":
				if ( b[1] == "true")
					document.getElementById("radPercent0").checked = true;
				else
					document.getElementById("radPercent1").checked = true;
				break;
			case "wpc":
				document.getElementById("txtWaterFactor").value = b[1];
				break;
			case "wdis":
				document.getElementById("txtDiscount").value = b[1];
				break;
			case "naoh":
				if ( b[1] == "true")
					document.getElementById("hydroxide0").checked = true;
				else
					document.getElementById("hydroxide1").checked = true;
				break;
			case "frag":
				document.getElementById("txtFragranceRatio").value = b[1];
				break;
		}
	}
		
	for (i = 0; i < aryIDfromCookie.length; i++){
		idx = i + 1;
		if(document.getElementById("radPercent0").checked == true)
			pcTxtObject = document.getElementById("txtPerCent" + idx );
		else
			pcTxtObject = document.getElementById("txtWeight" + idx );
		oilTxtObject = document.getElementById("txtOil" + idx);
		hdnUserOilIDXobject = document.getElementById("hdnIndex" + idx);
		if (aryIDfromCookie[i] == -1 ){
			oilTxtObject.value = "";
			pcTxtObject.value = "";
			hdnUserOilIDXobject.value = "-1";
			aryUserOilSAP[i+1] = parseFloat(0.0);
			aryUserOilIndex[i+1] = parseInt(0);
			continue;
			}
		pcTxtObject.value = aryIDValue[i];
		
		// FIND aryOil INDEX
		for (var x=0; x < aryOil.length; x++){
			if ( aryIDfromCookie[i] == aryOil[x].id )
				break;
			}
				
		oilTxtObject.value = sel.options[x].text;
		aryUserOilIndex[i+1] = x;
		hdnUserOilIDXobject.value = x;
		aryUserOilSAP[i+1] = parseFloat(sel.options[x].value);
		}
	
	} 
	PorWClick();
	setFixedWaterMethod();
} 
var newWin
function hideHelp(){
	divHelp.style.visibility = "hidden";
	newWin.close();
}
function showHelp(){
//window.open( "http://www.soapcalc.com/calc/helptext.asp", newWin, "width=600,height=300,resizable=1,toolbar=0,scrollbars=1");
}
function PorWClick(){
	var hdnPorW = document.getElementById('hdnPorW')
	// if Weight is checked
	if (document.getElementById('radPercent1').checked == true)
		hdnPorW.value = "1";
	else
		hdnPorW.value = "0";
		
	changePorW();		
}
function changePorW(){
	var txtOil, txtWt, tdPC, tdWT, txtTW, txtPCtotal, txtWTtotal, radPC, radWT;
	tdPC = document.getElementById('tdUsePercent');
	tdWT = document.getElementById('tdUseWeight');
	txtTW = document.getElementById('txtTW');
	txtPCtotal = document.getElementById('txtTotalPerCent');
	txtWTtotal = document.getElementById('txtTotalRecipeWeight');
	radPC = document.getElementById('radPercent0')
	radWT = document.getElementById('radPercent1')
	var hdnPorW = document.getElementById('hdnPorW')
	//document.getElementById('lblWT').innerHTML = unit;
	
	// if Weight is checked
	if (hdnPorW.value == "1"){
		//hdnPorW.value = "1";
		for (var k = 1; k <= 14 ; k++){
			txtOil = document.getElementById("txtPerCent" + k);
			txtOil.style.background = "#FFFFEE";
			txtOil.readOnly = true;
			txtWt = document.getElementById("txtWeight" + k);
			txtWt.style.backgroundImage="url('modules/soapcalc/innershadowgreen.gif')";
			txtWt.readOnly = false;
			}
		tdPC.style.background = "#FFFFEE";
		tdWT.style.background = "#c8eacd";
		tdPC.style.color = "#777777";
		tdWT.style.color = "#000000";
		tdPC.style.fontSize = "12px";
		tdWT.style.fontSize = "14px";
		radPC.style.background = "#FFFFEE";
		radWT.style.background = "#c8eacd";
		txtTW.style.backgroundImage="url('modules/soapcalc/innershadow.gif')";
		radPC.checked = false;
		radWT.checked = true;
		//txtTW.value = "";
		txtTW.readOnly = true;
	}
	else{
		//hdnPorW.value = "0";
		for (var k = 1; k <= 14 ; k++){
			txtOil = document.getElementById("txtPerCent" + k);
			txtOil.style.backgroundImage="url('modules/soapcalc/innershadowgreen.gif')";
			txtOil.readOnly = false;
			txtWt = document.getElementById("txtWeight" + k);
			txtWt.style.background = "#FFFFEE";
			txtWt.readOnly = true;
		}
		tdPC.style.background = "#c8eacd";
		tdWT.style.background = "#FFFFEE";
		tdPC.style.color = "#000000";
		tdWT.style.color = "#777777";
		tdPC.style.fontSize = "14px";
		tdWT.style.fontSize = "12px";
		radPC.style.background = "#c8eacd";
		radWT.style.background = "#FFFFEE";
		txtTW.style.backgroundImage="url('modules/soapcalc/innershadowgreen.gif')";
		radPC.checked = true;
		radWT.checked = false;
		
		txtTW.readOnly = false;
	}
}
//===================
function onPageHelp(obj){
if ( obj.id == "imgConc")
	jAlert("<span style=\"position: relative; top: -6px\">Вы можете задать долю воды и щелочи непосредственно в этом окошке. Пример: Если вы хотите, чтобы Щелочь + Вода составляли 34% в Вашем рецепте, то установите флажок и введите цифру 34 Дo нажатия на кнопку </span><img src=\"modules/soapcalc/calcRecipe.png\" border=\"0\">", "Установка концентрации щелочи");
if ( obj.id == "imgRatio")
	jAlert("<span style=\"position: relative; top: -6px\">Вы можете задать процент воды относительно щелочи напрямую. Пример: Если Вы хотите, чтобы вода и щелочь составляли соотношение 2 к 1, то установите флажок и введите 2:1, До того, как нажмете на кнопку </span><img src=\"modules/soapcalc/calcRecipe.png\" border=\"0\">", "Соотношение вода : щелочь");
if ( obj.id == "imgLoad")
	jAlert("<span style=\"position: relative; top: -6px\">После загрузки сохраненного рецепта нажмите на кнопку </span><img src=\"modules/soapcalc/calcRecipe.png\" border=\"0\">", "Сохранение / загрузка рецептов");
if ( obj.id == "imgIC")
	jAlert("<span style=\"position: relative; top: -6px\">«<b>Характеристика мыла</b>» и «<b>Жирные кислоты</b>» отображают значения для масел, которые выбираются из списка в середине страницы. Попробуйте нажать несколько масел, чтобы увидеть эти значения. В правой колонке отображаются количества масел в Вашем рецепте. Эти значения отображаются после того, как Вы составите рецепт и нажмете на кнопку </span><img src=\"modules/soapcalc/calcRecipe.png\" border=\"0\">", "Характеристики мыла и Жирные кислоты");
if ( obj.id == "imgRecipe")
	jAlert("Чтобы добавить новое масло в Ваш рецепт, выберете его из списка в середине и <span style=\"color:Red;\">дважды нажмите</span> на него левой кнопкой мыши. Или нажмите на кнопку «<span style=\"color:Green;\">+</span>» справа от мыльного рецепта. Для удаления масла из Вашего рецепта либо нажмите на кнопку «<span style=\"color:Red;\">-</span>», либо нажмите на кнопку «<span style=\"color:Green;\">+</span>» около нужного масла, чтобы перезаписать его.", "Добавление масел в рецепт");
if ( obj.id == "imgZHK")
	jAlert("Жирные кислоты (алифатические кислоты) — многочисленная группа исключительно неразветвлённых одноосновных карбоновых кислот с открытой цепью. Название определяется, во-первых, химическими свойствами данной группы веществ основанными на присутствии в их структуре карбоксильной группы, во-вторых, исторически основано на обнаружении их в природных жирах.", "Жирные кислоты");
if ( obj.id == "imgTotals"){
	var s = "";  
	var s2 = "";
	var s3 = ""
document.getElementById("divOnPageHelp").innerHTML = (s + s2 + s3);
}


document.getElementById("divOnPageHelp").style.display = "block";
}
function closeOnPageHelp(){
	document.getElementById("divOnPageHelp").style.display = "none";
}

//===================
function setGlSoapProperties(obj) {
	var prop = document.getElementById("glSoap");
	//alert("Checked");
	
	if ( obj != null){
		if (obj.id == "chkGlSoap")
			prop.checked = false;
//		else
//			conc.checked = false;
	}	

	if( prop.checked == true){
		document.getElementById("selSpirit").disabled = false;
		document.getElementById("selGlycerine").disabled = false;
		//document.getElementById("txtWaterFactor").style.backgroundImage="url('modules/soapcalc/innershadow.gif')";
	}else{
		document.getElementById("selSpirit").disabled = true;
		document.getElementById("selGlycerine").disabled = true;		
	}

}


//===================
var FixedLye;
var FixedConc;
var FixedRatio;
function setFixedWaterMethod(obj){
	FixedLye = false;
	FixedConc = false;
	FixedRatio = false;
	
	var conc = document.getElementById("chkFixedConc");
	var ratio = document.getElementById("chkFixedRatio");
	
	if ( obj != null){
		if (obj.id == "chkFixedConc")
			ratio.checked = false;
		else
			conc.checked = false;
	}
	
		
	if( conc.checked == true || ratio.checked == true){
		document.getElementById("txtWaterFactor").readOnly = true;
		document.getElementById("txtWaterFactor").style.backgroundImage="url('modules/soapcalc/innershadow.gif')";
		}
	else{
		document.getElementById("txtWaterFactor").style.backgroundImage="url('modules/soapcalc/innershadowgreen.gif')";
		document.getElementById("txtWaterFactor").readOnly = false;
		document.getElementById("spnLyeWater").readOnly = true;
		document.getElementById("spnWaterLyeRatio").readOnly = true;
		document.getElementById("spnLyeWater").style.backgroundImage="url('modules/soapcalc/innershadow.gif')";
		document.getElementById("spnWaterLyeRatio").style.backgroundImage="url('modules/soapcalc/innershadow.gif')";
		return;
		}
		
	if( conc.checked == true){
		FixedLye = true;
		FixedConc = true;
		document.getElementById("spnLyeWater").style.backgroundImage="url('modules/soapcalc/innershadowgreen.gif')";
		document.getElementById("spnLyeWater").readOnly = false;
		}
	else
		document.getElementById("spnLyeWater").style.backgroundImage="url('modules/soapcalc/innershadow.gif')";
		document.getElementById("spnLyeWater").readOnly = true;
	
	if ( ratio.checked == true){
		FixedLye = true;
		FixedRatio = true;
		document.getElementById("spnWaterLyeRatio").style.backgroundImage="url('modules/soapcalc/innershadowgreen.gif')";
		document.getElementById("spnWaterLyeRatio").readOnly = false;
	}
	else
		document.getElementById("spnWaterLyeRatio").style.backgroundImage="url('modules/soapcalc/innershadow.gif')";
		document.getElementById("spnWaterLyeRatio").readOnly = true;
		
}

//==================
var whitespace = " \t\n\r";
// Is string empty.
function isEmpty(s)
{   
	return ((s == null) || (s.length == 0))
}
function isWhitespace (s)
{   
	var i;

    if (isEmpty(s)) return true;

    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
		if (whitespace.indexOf(c) == -1) return false;
    }

    // All characters are whitespace.
    return true;
}
function showCount(){
	document.getElementById("spnCount").style.display = "inline";
}
function hideCount(){
	document.getElementById("spnCount").style.display = "none";
}

