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(10)
var aryUserOilSAP = new Array(10)
var aryUserOilIndex = new Array(10)
var aryPerCent = new Array(10)

resetArrays()

var twOils
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){
	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
	}
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 < 10; 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 = "Футы";
		radio = 0;
		unit = "lb";
		document.getElementById('FragranceRatioUnit').innerHTML = "Унций на Фунт";
		}
	if (document.getElementById('oilWeight1').checked == true){
		document.getElementById('TWunit').innerHTML = "Унции";
		radio = 1;
		unit = "oz";
		document.getElementById('FragranceRatioUnit').innerHTML = "Унций на Фунт";
		}
	if (document.getElementById('oilWeight2').checked == true){
		document.getElementById('TWunit').innerHTML= "Граммы";
		radio = 2;
		unit = "gm";
		document.getElementById('FragranceRatioUnit').innerHTML = "Грамм на Килограмм";
		}
}
//--------------------------------------
function getProperties(idx, isCompute, weight){
var str, sap, weightSave
var spacer
	weightSave = 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].linoleic)
	if ( pc > 0 ){
		Conditioning += pc * weight
		Linoleic += 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 clearOutput(){
	for ( var k = 1; k < 10; k++){
	document.getElementById("oil" + k).value = " "
	document.getElementById("weight" + k).value = " "
	document.getElementById("weightOZ" + k).value = " "
	document.getElementById("weightGM" + k).value = " "
	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";
	}
}
function clearAll(){
if ( ! confirm("Пожалуйста, подтвердите удаление списка масел"))
	return

for ( var k = 1; k < 10; 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 = " "
	}
document.getElementById("spnTotalOilWeight").value = "0";
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("spnTotalPerCent").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";
}
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";
}
function autoAddOil(){
	for (var k = 1; k < 10 ; k++){
		if ( document.getElementById("txtOil" + k).value.length == 0){
			addOil(k);
			break;
		}
	}
}
function computePounds(){
var pc 
var weight, totalWeight, totalPerCent, pcValue, txtTW
var oil, txtOil, txtWeight, txtWeightOZ, txtWeightGM
var adjust, whichway;

totalPerCent = parseFloat(0);
totalWeight = parseFloat(0.0);
weight = parseFloat(0.0);


txtTW = new String(document.getElementById("txtTW").value);
if (txtTW.length == 0){
		alert("Please fill in Total Oil Weight.");
		return false;
		}
else{
	if (isNaN(txtTW)){
		alert("Total Oil Weight is not a number.");
		return false;
		}
		else{
		twOils = parseFloat(txtTW);
		}
	}
if (twOils <= 0.0 ){
		alert("Total Oil Weight  can not be 0 or less.");
		return false;
		}
		
for (var k = 1; k < 10 ; k++){
	
	pcValue = new String(document.getElementById("txtPerCent" + k).value);
	if ( pcValue.length == 0)
		continue;
	if (isNaN(pcValue)){
		alert("Per Cent for Oil Number " + k + " is not a number");
		return false;
		}
	else{
		pc = parseFloat(pcValue);
	}
		

	aryPerCent[k] = pc / 100.0;
	totalPerCent += pc;
	
	weight = (pc * twOils) / 100; 
	
	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;

txtWeight = document.getElementById("weight" + k);
txtWeightOZ = document.getElementById("weightOZ" + k);
txtWeightGM = document.getElementById("weightGM" + k);

switch (unit){
		case "lb" :
			if (weight == 0 )
				txtWeight.value = "";
			else
				txtWeight.value = weight; 
			
			if (weight == 0 )
				txtWeightOZ.value = "";
			else
				txtWeightOZ.value = roundNumber(weight * 16.0, 2); 
			
			if (weight == 0 )
				txtWeightGM.value = "";
			else
				txtWeightGM.value = roundNumber(weight * 453.592, 1); 
			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, 2);
			
			if (weight == 0 )
				txtWeightGM.value = "";
			else
				txtWeightGM.value = roundNumber(weight / 16 * 453.592, 1); 
			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 , 2); 
			
			if (weight == 0 )
				txtWeightGM.value = "";
			else
				txtWeightGM.value = roundNumber(weight , 1); 
			break		
				
		}
	}

document.getElementById("spnTotalOilWeight").value = " " +  roundNumber(totalWeight, 3)

document.getElementById("spnTotalPerCent").value = " " +  roundNumber(totalPerCent,3)
if (roundNumber(totalPerCent,3) != 100.000){
	adjust = roundNumber((100.0 - totalPerCent),3);
	if ( adjust > 0 )
		whichway = " добавив ";
	else
		whichway = " убрав ";
	alert("Итоговая сумма не равна 100%\n\nНеобходимо исправить, " + whichway + Math.abs(adjust) + " %");
	return false
	}

return true	
}
//--------------------------------------------
function computeLye(){
var  k, tot, totGM, num, sap;
var weightedSAP, weightLYE, weightWATER; 
var weight;
var str, fr, lb;

clearOutput();
if ( ! computePounds() )
	return;

str = document.getElementById("txtFragranceRatio").value
if (str.length == 0){
	fr = 0.0;
	}
else{
	if (isNaN(str)){
		alert("Fragrance ratio is not a number");
		return;
		}
	else{
		fr = parseFloat(str);
		}

	}
		
weightedSAP = parseFloat(0.0);
weightLYE = parseFloat(0.0);
weightWATER  = parseFloat(0.0);
weight = parseFloat(0.0);

tot = parseFloat(0.0);
sap = new Array(10);
if (isNaN(document.getElementById("txtWaterFactor").value)){
		alert("Per Cent Water is not a number.");
		return;
		}
if (isNaN(document.getElementById("txtDiscount").value)){
		alert("Per Cent Fat is not a number.");
		return;
		}

if ( document.getElementById("hydroxide0").checked == true){	
	for ( k = 1 ; k < 10; k++ ){
		tot += parseFloat(aryOilWeights[k]);
		sap[k-1] = parseFloat(aryUserOilSAP[k]) * (40.0 / 56.1);
		}
}
else{
	for ( k = 1 ; k < 10; k++ ){
		tot += parseFloat(aryOilWeights[k]);
		sap[k-1] = aryUserOilSAP[k];
		}
	}

for ( k = 1 ; k < 10; k++ )		{
	weightedSAP += ((aryOilWeights[k]/tot) * sap[k-1]);
}

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,2);
			document.getElementById("twLyeRequiredGM").value = " " +  roundNumber(weightLYE * 453.592,2); 
			break;
	case "oz":
			document.getElementById("twLyeRequired").value = " " +  roundNumber(weightLYE / 16.0,2);
			document.getElementById("twLyeRequiredOZ").value = " " +  roundNumber(weightLYE,2);
			document.getElementById("twLyeRequiredGM").value = " " +  roundNumber(weightLYE/ 16.0 * 453.592,2); 
			break;
	case "gm":
			document.getElementById("twLyeRequired").value = " " +  roundNumber(weightLYE/ 453.592,3); 
			document.getElementById("twLyeRequiredOZ").value = " " +  roundNumber(weightLYE/ 453.592 *16 ,1); 
			document.getElementById("twLyeRequiredGM").value = " " +  roundNumber(weightLYE,2);
			break;
}

FixWater();
if ( ! FixedLye ){
	weightWATER = tot * parseFloat(document.getElementById("txtWaterFactor").value)/100.0;
}
else{
	var strSet;
	if ( FixedConc == true ){
		strSet = document.getElementById("spnLyeWater").value
		if( isNaN (parseFloat(strSet))){
			alert("Lye Concentration value must be a number.\nEither uncheck the Lye Concentration 'Set' box or enter a number.");
			return;
			}
		var conc = parseFloat(strSet);
		if( conc < 10 || conc > 70 ){
			alert("Fixed lye concentration must be between 10 and 70.");
			return;
		}
		weightWATER =  weightLYE /(conc/100) - weightLYE;
	}
	if (FixedRatio == true ){
		var strRatio = new String(document.getElementById("spnWaterLyeRatio").value);
		if ( strRatio.indexOf(":") == -1){
			alert("The ratio must be expressed as 'Water:Lye'.\nA colon, : , must be be between the water value and the lye value.");
			return;
		}
		var ratioArray = strRatio.split(":");
		var water = parseFloat(ratioArray[0]);
		var lye = parseFloat(ratioArray[1]);
		if(isNaN(water) || isNaN(lye)){
			alert("Water and Lye values in the ratio must both be numbers.");
			return;
		}
		weightWATER = (water/lye) * weightLYE;
		
	}
	document.getElementById("txtWaterFactor").value = roundNumber((weightWATER / tot) * 100, 3) ;
}
switch (unit){
	case "lb":
			document.getElementById("twWaterRequired").value = " " +  roundNumber(weightWATER, 3);
			document.getElementById("twWaterRequiredOZ").value = " " +  roundNumber(weightWATER * 16,2);
			document.getElementById("twWaterRequiredGM").value = " " +  roundNumber(weightWATER * 453.592,2); 
			break
	case "oz":
			document.getElementById("twWaterRequired").value = " " +  roundNumber(weightWATER / 16.0,3);
			document.getElementById("twWaterRequiredOZ").value = " " +  roundNumber(weightWATER, 2);
			document.getElementById("twWaterRequiredGM").value = " " +  roundNumber(weightWATER/ 16.0 * 453.592,2); 
			break
	case "gm":
			document.getElementById("twWaterRequired").value = " " +  roundNumber(weightWATER/ 453.592,3); 
			document.getElementById("twWaterRequiredOZ").value = " " +  roundNumber(weightWATER/ 453.592 *16 ,2); 
			document.getElementById("twWaterRequiredGM").value = " " +  roundNumber(weightWATER, 2);
			break
}

var LWRatio = roundNumber(  (weightLYE / (weightWATER + weightLYE))*100,3);

if ( LWRatio > 40.0 && document.getElementById("hydroxide0").checked == true)
	alert( "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 WLRatio = roundNumber(weightWATER / weightLYE,2)
	document.getElementById("spnWaterLyeRatio").value = WLRatio + " : 1";
}


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),3) + " Gm";

resetProps()

var idx
for ( k = 1 ; k < 10; 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);

}
function SaveRecipe(){
var k, str; 
var strIndex, strPerCent;
var v;
var recipeName; 
var expire = new Date();
var plus30 = expire.getTime() + (31536000000)//360 365 days;
expire.setTime(plus30);

var hdnIndex;
var str = new String("");
var str2 = new String("");

for ( k = 0; k < document.forms['F1'].elements.length; k++){
	if(document.forms['F1'].elements[k].type == "text"){
		if(document.forms['F1'].elements[k].id == "spnWaterLyeRatio") 
			continue;
		str = document.forms['F1'].elements[k].value;
		if ( str.search('[#:@]') >= 0){
			str = "A special character ( #, @ or : ) was found in " + document.forms['F1'].elements[k].id;
			str += "\n\nA recipe can not be saved with #, @ or : in any of the ";
			str += "text fields (except the ':' in Water:Lye Ratio)";
			alert(str);
			return;
		}
		
	}
}

str = "";		
recipeName = document.getElementById("selRecipeName").value;

for ( k = 1 ; k < 10; k++ ){
	v = document.getElementById("txtPerCent" + k);
	// if value is present
	hdnIndex = document.getElementById("hdnIndex" + k)
	if (hdnIndex.value != -1){
		if ( k == 9 ){
			str += aryOil[hdnIndex.value].id + ":" + v.value + "#";
			}
		else{
			str += aryOil[hdnIndex.value].id + ":" + v.value + "@";
			}
		}
	else{
		if ( k == 9 )
			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 += "wpc:" +  document.getElementById("txtWaterFactor").value + "@";
	str2 += "wdis:" + document.getElementById("txtDiscount").value + "@";
	str2 += "naoh:" + document.getElementById("hydroxide0").checked + "@";
	str2 += "frag:" + document.getElementById("txtFragranceRatio").value + "@";
	str2 += "add1:" + document.getElementById("txtAdditive1").value + "@";
	str2 += "add2:" + document.getElementById("txtAdditive2").value + "@";
	str2 += "add3:" + document.getElementById("txtAdditive3").value + "@";
	str2 += "add4:" + document.getElementById("txtAdditive4").value + "@";
	str2 += "add5:" + document.getElementById("txtAdditive5").value + "@";
	str2 += "recname:" +  document.getElementById("txtRecipeName").value;
	
var cookie = str + str2;


document.cookie = recipeName + "=" + cookie + ";" + "expires=" + expire.toGMTString();
}
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){
	alert(strName + " не был сохранен на Вашем компьютере.");
	return;
	}
else{
	clearOutput();
	
	for( var k=1; k < 10; k++){
	//document.getElementById("txtWeight" + k).value = "";
	document.getElementById("txtPerCent" + k).value = "";
	}
	document.getElementById("spnFragranceRequired").value = "";
	document.getElementById("spnTotalPerCent").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 < 9; 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="lb";
					document.getElementById('TWunit').innerHTML="Фунтов";
					document.getElementById('FragranceRatioUnit').innerHTML = "Унций на фунт";
					unit = "lb";
				}
				if ( b[1] == "oz"){
					document.getElementById("oilWeight1").checked = true;
					//document.getElementById('lblWT').innerHTML="oz";
					document.getElementById('TWunit').innerHTML="Унций";
					document.getElementById('FragranceRatioUnit').innerHTML = "Унций на фунт";
					unit = "oz";
				}
				if ( b[1] == "gm"){
					document.getElementById("oilWeight2").checked = true;
					//document.getElementById('lblWT').innerHTML="gm";
					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 "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;
			case "add1":
				document.getElementById("txtAdditive1").value = b[1];
				break;
			case "add2":
				document.getElementById("txtAdditive2").value = b[1];
				break;
			case "add3":
				document.getElementById("txtAdditive3").value = b[1];
				break;
			case "add4":
				document.getElementById("txtAdditive4").value = b[1];
				break;
			case "add5":
				document.getElementById("txtAdditive5").value = b[1];
				break;
			case "recname":
				document.getElementById("txtRecipeName").value = b[1];
				break;
		}
	}
		
	for (i = 0; i < aryIDfromCookie.length; i++){
		idx = i + 1;
		pcTxtObject = document.getElementById("txtPerCent" + 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);
		}
	
	} 
	FixWater();
} 

var FixedLye;
var FixedConc;
var FixedRatio;
function FixWater(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").disabled = true;
		}
	else{
		document.getElementById("txtWaterFactor").disabled = false;
		document.getElementById("spnLyeWater").disabled = true;
		document.getElementById("spnWaterLyeRatio").disabled = true;
		return;
		}
		
	if( conc.checked == true){
		FixedLye = true;
		FixedConc = true;
		document.getElementById("spnLyeWater").disabled = false;
		}
	else
		document.getElementById("spnLyeWater").disabled = true;
	
	if ( ratio.checked == true){
		FixedLye = true;
		FixedRatio = true;
		document.getElementById("spnWaterLyeRatio").disabled = false;
	}
	else
		document.getElementById("spnWaterLyeRatio").disabled = true;
		
}
var newWin
function hideHelp(){
	divHelp.style.visibility = "hidden";
	newWin.close();
}
function showHelp(){
//window.open( "http://www.soapcalc.com/calc/helptext.htm", newWin, "width=600,height=300,resizable=1,toolbar=0,scrollbars=1");
}
function onPageHelp(obj){
if ( obj.id == "imgConc")
	document.getElementById("divOnPageHelp").innerHTML = "Вы можете задать долю воды и щелочи непосредственно в этом окошке. Пример: Если вы хотите, чтобы Щелочь + Вода составляли 34% в Вашем рецепте, то установите флажок и введите цифру 34 ДО нажатия на кнопку «Считать рецепт». &nbsp; <a href='javascript:closeOnPageHelp();'>Закрыть окно с подсказками</a>"
if ( obj.id == "imgRatio")
	document.getElementById("divOnPageHelp").innerHTML = "Вы можете задать процент воды относительно щелочи напрямую. Пример: Если Вы хотите, чтобы вода и щелочь составляли соотношение 2 к 1, то установите флажок и введите 2:1, До того, как нажмете на кнопку «Считать рецепт». &nbsp; <a href='javascript:closeOnPageHelp();'>Закрыть окно с подсказками</a>"
if ( obj.id == "imgLoad")
	document.getElementById("divOnPageHelp").innerHTML = "После загрузки сохраненного рецепта нажмите на кнопку «Считать рецепт». <a href='javascript:closeOnPageHelp();'>Закрыть окно с подсказками</a>"
if ( obj.id == "imgIC")
	document.getElementById("divOnPageHelp").innerHTML = "Колонки слева: «Характеристика мыла» и «Жирные кислоты» отображают значения для масел, которые выбираются из списка в середине страницы. Попробуйте нажать несколько масел, чтобы увидеть эти значения. В правой колонке отображаются количества масел в Вашем рецепте. Эти значения отображаются после того, как Вы составите рецепт и нажмете на кнопку «Считать рецепт». <a href='javascript:closeOnPageHelp();'>Закрыть окно с подсказками</a>"
if ( obj.id == "imgRecipe")
	document.getElementById("divOnPageHelp").innerHTML = "Чтобы добавить новое масло в Ваш рецепт, выберете его из списка в середине и <span style=\"color:Red;\">дважды нажмите</span> на него левой кнопкой мыши. Или нажмите на кнопку «<span style=\"color:Red;\">+</span>» справа от мыльного рецепта. Для удаления масла из Вашего рецепта либо нажмите на кнопку «<span style=\"color:Red;\">-</span>», либо нажмите на кнопку «<span style=\"color:Red;\">+</span>» около нужного масла, чтобы перезаписать его. <a href='javascript:closeOnPageHelp();'>Закрыть окно с подсказками</a>"
if ( obj.id == "imgTotalOilWeight"){
	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 showCount(){
	document.getElementById("spnCount").style.display = "inline";
}
function hideCount(){
	document.getElementById("spnCount").style.display = "none";
}
//**********************************************
//Copyright 2001-2007 by BRL Enterprises, Inc.
//Copies of this code may be freely downloaded for personal use only on a personal PC and
//as such may be used in a soapmaking business.
//Copies of this code may not be used or altered in any way and placed on another server.
//This code, or the algorithms within, may not be used in any commercial endeavor.
//The pages Soapcalc.asp, SoapCalc18.asp may be linked to and may be placed, in their
//entirety, within a frame of a frameset.
//For any clarification contact soapcalc@soapcalc.com.
//**********************************************


