function popup( obj, L, T ) {
with( obj.style ) {
display = "block";
position = "absolute";
left = L;
top = T;
}
}
function unpop( obj ) { obj.style.display = "none"; }


function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

var defaultValues = new Array();

// Default, Max, Min    
defaultValues['SW'] = new Array(1000, 850, 2000);
defaultValues['SS'] = new Array(2650, 850, 15000);
defaultValues['CV'] = new Array(0, 0, 100);
defaultValues['CW'] = new Array(0, 0, 100);
defaultValues['SM'] = new Array(1000, 850, 15000);
defaultValues['DS'] = new Array(0, 0, 0);
defaultValues['ID'] = new Array(0, 0, 0);
    
defaultValues['SF'] = new Array(0, 0, 0);
defaultValues['LF'] = new Array(0, 0, 0);
defaultValues['PV'] = new Array(0, 0, 0);

function setDefault(ID, COL) 
{
	setVal(ID, COL, defaultValues[ID][0]);
}

function resetValues() 
{
	setLFRateLabel();
	for (ii = 65; ii < 68; ii++) 
	{
		setDefault("SW", String.fromCharCode(ii));
		setDefault("SS", String.fromCharCode(ii));	
		setDefault("CV", String.fromCharCode(ii));	
		setDefault("CW", String.fromCharCode(ii));	
		setDefault("SM", String.fromCharCode(ii));	
		setDefault("DS", String.fromCharCode(ii));	
		setDefault("ID", String.fromCharCode(ii));	
		
		setDefault("SF", String.fromCharCode(ii));	
		setDefault("LF", String.fromCharCode(ii));	
		setDefault("PV", String.fromCharCode(ii));	
	}
}

function padDecimals(value, dec) 
{
	if (isNaN(dec))
		return value;

	if (value.length <= 0)
		value = "0";
				
	dec += 1;
	value = value + '';
	
	var dPos = value.indexOf('.');
	if (dPos > 0) 
	{
		var units = value.substring(0,dPos);
		var decs = value.substring(dPos);
		
		if (decs.length < dec)
			for (ii=decs.length; ii < dec; ii++)
				decs += "0";

		value = units + decs;
	} else
	{
		value += ".";
		for (ii=1; ii < dec; ii++)
			value += "0";
	}
	
	return value;
}

function newRound(value, dec)
{
	return Math.round(value*Math.pow(10,dec))/Math.pow(10,dec)
}

function checkSlurryDensityC()
{
	var sdC = document.getElementById('SM_C');
	var swC = document.getElementById('SW_C');
	
	if (parseFloat(sdC.value) < parseFloat(swC.value))
	{
		alert('The slurry density value must be greater than ' + swC.value);
		sdC.select();
		sdC.focus();
		sdC.value = swC.value;
	}
}

function getVal(ID,COL) 
{
	var t = document.getElementById(ID + '_' + COL);
	
	if (defaultValues[ID][1] != defaultValues[ID][2] != 0) {
		if (t.value < defaultValues[ID][1] || t.value > defaultValues[ID][2])
		{
			alert('Value must be between ' + defaultValues[ID][1] + ' and ' + defaultValues[ID][2]);
			t.focus();
			return defaultValues[ID][1];
		}
	}
	
	if (isNaN(t.value))
		return 0;
	else
		return parseFloat(t.value);
}

function setVal(ID, COL, VAL, PAD) 
{
	var t = document.getElementById(ID + '_' + COL);
	
	if (t == null)
		return;
	
	if (VAL != "Infinity")	
	{
		if (isNaN(VAL))
			return;
	} 
	else
		VAL = "";

	if (VAL < 0)
		VAL = 0;
		
	if (PAD <= 0 || PAD == undefined)
		t.value = VAL;		
	else
		t.value = padDecimals(VAL, PAD);
}

function calculateCW(Ss, Sw, Cv) 
{
	return newRound(((Ss / (Sw / (0.01 * Cv) + (Ss - Sw)) )* 100), 2)
}

function calculateCWwithSm(Ss, Sw, Sm)
{
	return newRound(((Ss * (Sm - Sw)) / (Sm * (Ss - Sw)) * 100), 2)
}


function calculateSM(Ss, Sw, Cv)
{
	return newRound((Sw + (0.01 * Cv) * (Ss - Sw)),0);
}

function calculateCV(Ss, Sw, Cw)
{
	return newRound((Sw / (Ss / (0.01 * Cw) - ( Ss -  Sw)) * 100), 2)
}

function getDDValue(ddName) 
{
	var tDD = document.getElementById(ddName);
	if (tDD == null) return "";
	
	var tDDVal = tDD[tDD.selectedIndex].value;
	if (tDDVal == null) return "";
	
	return tDDVal;
}

function GetMassFlowRateUnits(inVal) 
{
	switch (inVal) 
	{
		case "KGH" :
			return 1/3600;
		case "KGS" :
			return 1;
		case "DTPH" :
			return 1000/3600;
		case "TS" :
			return 1000;
		default :
			return 0;
	}
}

function GetFlowRateUnits(inVal) 
{
	switch (inVal) 
	{
		case "LH" :
			return 1000*3600;
		case "LS" :
			return 1000;
		case "MH" :
			return 3600;
		case "MS" :
			return 1;
		default :
			return 0;
	}
}

function getPipeDiameter(inVal) 
{
	switch (inVal) 
	{
		case "INCH" :
			return 0.0254;
		case "M" :
			return 1;
		case "MM" :
			return 0.001;
		default :
			return 0;
	}
}

function calculateSF(Ds, Ss, Cv) 
{
	var DTSTUnits 		= Ds * GetMassFlowRateUnits(getDDValue("DS_DD"));
	var StandardUnits 	= DTSTUnits / Ss / (Cv * 0.01);
	var SFRate			= StandardUnits * GetFlowRateUnits(getDDValue("SF_DD"));

	return newRound(SFRate,3);
}

function calculateLF(Ds, Ss, Cv)
{
	var DTSTUnits 		= Ds * GetMassFlowRateUnits(getDDValue("DS_DD"));
	var StandardUnits 	= DTSTUnits / Ss / (Cv * 0.01);
	var LFRate			= (StandardUnits - DTSTUnits / Ss) * GetFlowRateUnits(getDDValue("SF_DD"));
	
	return newRound(LFRate,3);
}

function calculatePV(Ds, Ss, Cv, Id)
{
	
	var DTSTUnits 		= Ds * GetMassFlowRateUnits(getDDValue("DS_DD"));
	var StandardUnits 	= DTSTUnits / Ss / (Cv * 0.01);
	
	var PVRate			= (StandardUnits / (Math.PI / 4 * Math.pow(Id * getPipeDiameter(getDDValue("ID_DD")), 2)))
	
	
	return newRound(PVRate,2);
}

function calculateBottom(_col) 
{
	var _ss = getVal("SS", _col);
	var _cv = getVal("CV", _col);
	var _ds = getVal("DS", _col);
	var _id = getVal("ID", _col);
	
	var _sf = calculateSF(_ds, _ss, _cv);
	var _lf = calculateLF(_ds, _ss, _cv);
	var _pv = calculatePV(_ds, _ss, _cv, _id);
	
	setVal("DS", _col, _ds, 0);
	setVal("ID", _col, _id, 0);
	setVal("SF", _col, _sf, 3);
	setVal("LF", _col, _lf, 3);
	setVal("PV", _col, _pv, 2);	
}

function calculateOnSwSsCv(_col) 
{
	var _sw = getVal("SW", _col);
	var _ss = getVal("SS", _col);
	var _cv = getVal("CV", _col);
	
	var _cw = calculateCW(_ss, _sw, _cv);
	var _sm = calculateSM(_ss, _sw, _cv);	
	
	setVal("SW", _col, _sw, 0);
	setVal("SS", _col, _ss, 0);
	setVal("CV", _col, _cv, 2);
	setVal("CW", _col, _cw, 2);
	setVal("SM", _col, _sm, 0);
	
	calculateBottom(_col);	
}

function calculateOnCw(_col)
{
	var _sw = getVal("SW", _col);
	var _ss = getVal("SS", _col);
	var _cw = getVal("CW", _col);
	
	var _cv = calculateCV(_ss, _sw, _cw);
	var _sm = calculateSM(_ss, _sw, _cv);
	
	setVal("SW", _col, _sw, 0);
	setVal("SS", _col, _ss, 0);
	setVal("CV", _col, _cv, 2);
	setVal("CW", _col, _cw, 2);
	setVal("SM", _col, _sm, 0);
	
	calculateBottom(_col);	
}

function calculateOnSm(_col)
{
	var _sw = getVal("SW", _col);
	var _ss = getVal("SS", _col);
	var _sm = getVal("SM", _col);
	
	var _cw = calculateCWwithSm(_ss, _sw, _sm);
	var _cv = calculateCV(_ss, _sw, _cw);
	
	setVal("SW", _col, _sw, 0);
	setVal("SS", _col, _ss, 0);
	setVal("CV", _col, _cv, 2);
	setVal("CW", _col, _cw, 2);
	setVal("SM", _col, _sm, 0);
		
	calculateBottom(_col);	
}

function setLFRateLabel() 
{
	var pDD = document.getElementById('SF_DD');
	document.getElementById('LF_TB').value = pDD[pDD.selectedIndex].text;
}

function calculateAll()
{
	setLFRateLabel();
	calculateOnSwSsCv('A');
	calculateOnSwSsCv('B');
	calculateOnSwSsCv('C');
}