var
  uc_curUCID = null,
  uc_inPop = false,
  uc_popSpn,
  uc_curFldVal,
  uc_divUCPop ;
  
// ADDED 5/5/08 - Cap max cycle rate
var
  uc_maxCycles = 3600 / (2*.25),
  App2uc_maxCycles = 3600 / (2*25),
  uc_curCycles,
  App2uc_curCycles,
  uc_curCycleUnits,
  App2uc_curCycleUnits;  
//*****

//ADDED 5/7/08 - add alerts to indicate cyclerate or pressure limit has been exceeded
var
  cycleAlertShown = false,
  cyclePlusAlertShown = false,
  cycleMinusAlertShown = false,
  pressureAlertShown = false,  
  pressurePlusAlertShown = false,
  pressureMinusAlertShown = false;
//*****

function SetupDivPop(dpId)
{
  uc_divUCPop = element(dpId) ;
  uc_divUCPop.onmouseover = popMouseOver ;
  uc_divUCPop.onmouseout = popMouseOut ;
}


function SetupUC(minusId, txtId, plusId, spnId, measUnits, defUnits, defVal, conv, incDec, prec, minVal, maxVal, readOnly)
{
  var
    spn = element(spnId),
    plus = element(plusId),
    minus = element(minusId),
    edit = element(txtId) ;

  SetupUCByRefs(minus, edit, plus, spn, measUnits, defUnits, defVal, conv, incDec, prec, minVal, maxVal, readOnly) ;
}


function SetupUCByRefs(minusRef, txtRef, plusRef, spnRef, measUnits, defUnits, defVal, conv, incDec, prec, minVal, maxVal, readOnly)
{
  var
    uc = spnRef ;

  uc.onmouseover = ucMouseOver ;
  uc.onmouseout = ucMouseOut ;
  uc.onclick = ucClick ;
  uc.style.cursor = "default" ;

  // "new" properties...
  uc.MeasureUnits = measUnits ;
  uc.IncDecAmt = incDec ;
  uc.ConvFact = conv ;
  uc.DecPrec = prec ;
  uc.MinValue = minVal ;
  uc.MaxValue = maxVal ;
  uc.ActualValue = defVal ;
  uc.StandardValue = defVal / conv ;  
  
  //ADDED 5/5/08
     if (txtRef == element("txtCycles"))
    {
       uc.MaxValue = uc_maxCycles;
    }
  //*****

  uc.SetReadOnly = function(x)
  {
    this.TxtValue.readOnly = x ;
    
    if (x)
    {
      
      this.TxtValue.style.color = "#757575" ;     
      this.TxtValue.style.backgroundColor = "#D1D1D1" 
      

      this.ImgPlus.style.display = "none" ;
      this.ImgMinus.style.display = "none" ;
    }
    else
    {
      this.TxtValue.style.color = "#000" ;       
      this.TxtValue.style.backgroundColor = "" ;
     

      this.ImgPlus.style.display = "inline" ;
      this.ImgMinus.style.display = "inline" ;
    }
  }

  uc.SetValue = function(x)
  {
    this.StandardValue = x ;
    this.SetActualValue() ;
    this.TxtValue.value = FormatNumber(this.ActualValue, this.DecPrec) ;
  }
  
  uc.SetStandardValue = function()
  {
    this.StandardValue = (this.Units == "deg C" ? ucTempCtoF(this.ActualValue) : this.ActualValue / this.ConvFact) ;        
  }
  
  uc.SetActualValue = function()
  {    
   this.ActualValue = (this.Units == "deg C" ? ucTempFtoC(this.StandardValue) : this.StandardValue * this.ConvFact) ;
  }
  
  uc.DisplayValue = function()
  {
    return this.TxtValue.value + " " + this.firstChild.nodeValue ;
  }

  uc.SetMetric = function(m)
  {
      uc_popSpn = this;
    
    // this is what actually converts the value
    switch (this.MeasureUnits)
    {
//      case "Length":
        //      case "length": ucSelect(m ? "mm" : "in") ; break ;

        case "Length":
        case "length": ucSelect(m ? element("hidMM").value : element("hidIn").value); break;

        case "Mass":
      case "mass":
      case "Weight":
          //case "weight": ucSelect(m ? "kg" : "lb") ; break ;
      case "weight": ucSelect(m ? element("hidKg").value : element("hidLb").value); break;


      case "Pressure":
          //case "pressure": ucSelect(m ? "bar" : "psi") ; break ;
      case "pressure": ucSelect(m ? element("hidBar").value : element("hidPSI").value); break;


      case "Torque":
          //case "torque": ucSelect(m ? "N-m" : "in-lb") ; break ;
      case "torque": ucSelect(m ? element("hidNM").value : element("hidInLb").value); break;


      case "TorqueRate":
          //case "torque_rate": ucSelect(m ? "N-m / hr" : "in-lb / hr") ; break ;
      case "torque_rate": ucSelect(m ? element("hidNMHr").value : element("hidInLbHr").value); break;


      case "LifeSpan":
          //case "life_span": ucSelect(m ? "M cm" : "M in") ; break ;
      case "life_span": ucSelect(m ? element("hidMillionCM").value : element("hidMillionIn").value); break;


      case "Velocity":
          //case "velocity": ucSelect(m ? "mm/sec" : "in/sec") ; break ;
      case "velocity": ucSelect(m ? element("hidMMSec").value : element("hidInSec").value); break;


      case "Temperature":
          //case "temperature": ucSelect(m ? "deg C" : "deg F") ; break ;
      case "temperature": ucSelect(m ? element("hidCelsius").value : element("hidFahrenheit").value); break;


      case "Time":
          //case "time": ucSelect("sec") ; break ;
      case "time": ucSelect(element("hidSec").value); break;


      case "CycleRate":
      case "cycle_rate": //ucSelect("per hour") ; break ;
          ucSelect(element("hidPerMin").value); break;

      case "Quantity":
      case "quantity": ucSelect("qty") ; break ;
      
      case "FlowRate":
          //case "flow_rate": ucSelect(m ? "LPM" : "SCFM") ; break ;
      case "flow_rate": ucSelect(m ? element("hidLPM").value : element("hidSCFM").value); break;
    }
  }

  uc.ImgPlus = plusRef ;
  uc.ImgMinus = minusRef ;
  uc.TxtValue = txtRef ;

  uc.TxtValue.onfocus = Entered ;
  uc.TxtValue.onblur = Exited ;
  uc.TxtValue.onkeyup = KeyUp ;
  uc.TxtValue.SpnUC = uc ;		// new

  uc.ImgPlus.onmouseover = PlusMouseOver ;
  uc.ImgPlus.onmouseout = PlusMouseOut ;
  uc.ImgPlus.onclick = PlusClick ;
  uc.ImgPlus.SpnUC = uc ;		// new

  uc.ImgMinus.onmouseover = MinusMouseOver ;
  uc.ImgMinus.onmouseout = MinusMouseOut ;
  uc.ImgMinus.onclick = MinusClick ;
  uc.ImgMinus.SpnUC = uc ;		// new

  uc.SetReadOnly(readOnly) ;

  uc_popSpn = uc ;

  if (measUnits == "Quantity" || measUnits == "quantity")
    uc.style.display = "none" ;

  ucSelect(defUnits) ;
}


function Entered(e)
{
  uc_curFldVal = Sender(e).value.replace(/\,/g, "") ;
  Sender(e).value = uc_curFldVal ;
  Sender(e).select() ;
}

// ADDED function 5/5/08  - put cap on cycle rate
function updateCycles()
{
   var
        cycles,
        App2Cycles,
        timeConversion,
        App2TimeConversion,
        cycleConversion,
        App2CycleConversion;
        
    var spnUCCycles = element("spnUCCycles");
    var spnUCTime = element("spnUCTime");
    var App2spnUCCycles = element("App2spnUCCycles");
    var App2spnUCTime = element("App2spnUCTime");

    var trimmedspnUCCycles = spnUCCycles.innerText;
    var trimmedApp2spnUCCycles = App2spnUCCycles.innerText;

    trimmedspnUCCycles = trimmedspnUCCycles.replace(/^\s+|\s+$/g, '');
    trimmedApp2spnUCCycles = trimmedspnUCCycles.replace(/^\s+|\s+$/g, '');


    var trimmedspnUCTime = spnUCTime.innerText;
    var trimmedApp2spnUCTime = App2spnUCTime.innerText;

    trimmedspnUCTime = trimmedspnUCTime.replace(/^\s+|\s+$/g, '');
    trimmedApp2spnUCTime = trimmedApp2spnUCTime.replace(/^\s+|\s+$/g, '');
        
        
    // set cycle conversion for App1 inputs
    if (trimmedspnUCCycles == element("hidPerMin").value)
    {
        cycleConversion = 60;           
        uc_curCycleUnits = element("hidPerMin").value;
    }
    if (trimmedspnUCCycles == element("hidPerSec").value)
    {
        cycleConversion = 1;            
        uc_curCycleUnits = "per second";
    }
    if (trimmedspnUCCycles == element("hidPerHr").value)
    {
        cycleConversion = 3600;            
        uc_curCycleUnits = element("hidPerHr").value;
    }
        
    // set time conversion for App1 inputs
    if (trimmedspnUCTime == element("hidSec").value)
    {
        timeConversion = 1;           
    }
    if (trimmedspnUCTime == element("hidMs").value)
    {
        timeConversion = 1/1000;       
    }
    if (trimmedspnUCTime == element("hidMin").value)
    {
        timeConversion = 60;        
    }    
    
    // set cycle conversion for App2 inputs
    if (trimmedApp2spnUCCycles == element("hidPerMin").value)
    {
        App2cycleConversion = 60;           
        App2uc_curCycleUnits = element("hidPerMin").value;
    }
    if (trimmedApp2spnUCCycles == element("hidPerSec").value)
    {
        App2cycleConversion = 1;            
        App2uc_curCycleUnits = "per second";
    }
    if (trimmedApp2spnUCCycles == element("hidPerHr").value)
    {
        App2cycleConversion = 3600;            
        App2uc_curCycleUnits = element("hidPerHr").value;
    }
    
    // set time conversion for App2 inputs
    if (trimmedApp2spnUCTime == element("hidSec").value)
    {
        App2timeConversion = 1;           
    }
    if (trimmedApp2spnUCTime == element("hidMs").value)
    {
        App2timeConversion = 1/1000;       
    }
    if (trimmedApp2spnUCTime == element("hidMin").value)
    {
        App2timeConversion = 60;        
    }            
    
    uc_curCycles = element("txtCycles").value;
    uc_maxCycles = cycleConversion / (element("txtTime").value * 2 * timeConversion);
    
    App2uc_curCycles = element("App2txtCycles").value;
    App2uc_maxCycles = App2cycleConversion / (element("App2txtTime").value * 2 * App2timeConversion);    
    
    // if current input cycles exceed the max, reset current value to max
    if (uc_curCycles > uc_maxCycles)
    {
        uc_curCycles = uc_maxCycles;        
        element("txtCycles").StandardValue = uc_curCycles ;        
    }  
    element("spnUCCycles").MaxValue = uc_maxCycles; 
    
    Exited(new DummyEvent("txtCycles")) ;   
     
     
     // '' for app2 inputs
     if (App2uc_curCycles > App2uc_maxCycles)
    {
        App2uc_curCycles = App2uc_maxCycles;       
        element("App2txtCycles").StandardValue = App2uc_curCycles ;
       
    }  
     element("App2spnUCCycles").MaxValue = App2uc_maxCycles; 
     Exited(new DummyEvent("App2txtCycles")) ;    
     
}
//*****


function Exited(e)
{  
     
     
  KeyUp(e) ;
  var jcwfix = Sender(e).value.replace(",", "");
  var x = parseFloat(jcwfix);
  var spn = Sender(e).SpnUC ;



  Sender(e).value = FormatNumber(spn.ActualValue, spn.DecPrec) ;

  if (uc_IsBadValue(x, spn))
  {
    Sender(e).style.backgroundColor = "" ;
    
    if (!isNaN(x))
    {
      if (x > spn.MaxValue)
        x = spn.MaxValue ;
        
      if (x < spn.MinValue)
        x = spn.MinValue ;
        
      spn.ActualValue = x ;
      spn.SetStandardValue() ;
      spn.TxtValue.value = FormatNumber(x, spn.DecPrec) ;
    }
    
    InputChanged(e) ;
  }
}


function uc_IsBadValue(x, spn)
{
  return (isNaN(x) 
    || (spn.MaxValue != null && x > spn.MaxValue) 
    || (spn.MinValue != null && x < spn.MinValue) ) ;
}


function KeyUp(e)
{

  //UPDATED 6/3/08 - tie hit/cycle output to Mid Stop Actuators input
  if (Sender(e) == AppElement(e, "txtMultiPosActuators"))
     {
        RestoreMultiInputDefaults(e) ;
     }
  //*****************************************************************
  
  // ADDED 5/5/08 - put cap on cycle rate
     if (Sender(e) == AppElement(e, "txtCycles"))
     {
       uc_curCycles = element("txtCycles").value; 
       App2uc_curCycles = element("App2txtCycles").value; 
       
     }
     
     if (Sender(e) == element("txtTime") || (Sender(e) == element("App2txtTime")))
     {       
      updateCycles(e);
     }
   //*****************   
   
   // ADDED 5/7/08 ***************   
   if (
       (Sender(e) == AppElement(e, "txtMultiPosForwardTop"))     ||
       (Sender(e) == AppElement(e, "txtMultiPosToSideTop"))      ||
       (Sender(e) == AppElement(e, "txtMultiPosFromTopTop"))     ||
       (Sender(e) == AppElement(e, "txtMultiPosForward"))        ||
       (Sender(e) == AppElement(e, "txtMultiPosToSide"))         ||
       (Sender(e) == AppElement(e, "txtMultiPosFromTop"))    
       )
   {
   
      if (!isNaN(Sender(e).value))
         {              
           updateShockInputs(e);
         }   
   }   
   // ****************************
    
  var
    newFldVal ;

  newFldVal = Sender(e).value.replace(/\,/g, "") ;

  if (newFldVal != uc_curFldVal)
  {
    uc_curFldVal = newFldVal ;

    var
      x = parseFloat(newFldVal),
      spn = Sender(e).SpnUC ;      
     

    if (uc_IsBadValue(x, spn))
    {
      Sender(e).style.backgroundColor = "#ff9999" ;
      
      //ADDED 5/7/08 - add alerts to indicate cylerate or pressure limit has been exceeded
      if (Sender(e) == AppElement(e, "txtCycles"))
      {
        if (!cycleAlertShown)
        {
            if (x > spn.MaxValue)
            {
                alert("Cycle rate reduced to match time parameters.");
                cycleAlertShown = true;
            }            
        }
      }         
      
      if (Sender(e) == AppElement(e, "txtPress"))
      {
        if (!pressureAlertShown)
        {
            if (x > spn.MaxValue)
            {
                alert("Pressure reduced to within range.");
                pressureAlertShown = true;
            }                         
        }
      }
      //*****
    }   
      
    else
    {
      Sender(e).style.backgroundColor = "" ;

      spn.ActualValue = x ;
      spn.SetStandardValue() ;

      InputChanged(e) ;
    }   
  }
}


function MinusMouseOver(e)
{
  Sender(e).src = "images/gif/minus2.gif" ;
}


function MinusMouseOut(e)
{
  Sender(e).src = "images/gif/minus.gif" ;
}


function PlusMouseOver(e)
{
  Sender(e).src = "images/gif/plus2.gif" ;
}


function PlusMouseOut(e)
{
  Sender(e).src = "images/gif/plus.gif" ;
}


function MinusClick(e)
{
  var
    spn = Sender(e).SpnUC,
    x = spn.ActualValue - spn.IncDecAmt ;

  if (spn.MinValue != null && x < spn.MinValue)
    x = spn.MinValue ;

  spn.ActualValue = x ;
  spn.SetStandardValue() ;
  spn.TxtValue.value = FormatNumber(x, spn.DecPrec) ;
  
   //UPDATED 6/2/08 tie hit/cycle output to Mid-Stop Actuators - image
  if (Sender(e) == AppElement(e, "imgMultiPosActuatorsMinus"))
  {       
    RestoreMultiInputDefaults(e) ;
  }      
  //**********************************************************************


  InputChanged(e) ;
}


function PlusClick(e)
{
  var
    spn = Sender(e).SpnUC,
    x = spn.ActualValue + spn.IncDecAmt ;

  if (spn.MaxValue != null && x > spn.MaxValue)
  {
    x = spn.MaxValue ;
    if (Sender(e) == AppElement(e, "imgCyclesPlus"))
      {       
        if (!cyclePlusAlertShown)
        {
            alert("Maximum cycle rate reached.");
            cyclePlusAlertShown = true;        
        }
      }
      if (Sender(e) == AppElement(e, "imgPressPlus"))
      {
        if (!pressurePlusAlertShown)
        {            
            alert("Maximum pressure reached.");
            pressurePlusAlertShown = true;
        }
      }      
  }

  spn.ActualValue = x ;
  spn.SetStandardValue() ;
  spn.TxtValue.value = FormatNumber(x, spn.DecPrec) ;
  
  //UPDATED 6/2/08 tie hit/cycle output to Mid-Stop Actuators + image
      if (Sender(e) == AppElement(e, "imgMultiPosActuatorsPlus"))
      {        
        RestoreMultiInputDefaults(e) ;
      }
      
      //**********************************************************************

  InputChanged(e) ;
}


function ucMouseOver(e)
{
  var
    spn = (Sender(e).src != null ? Sender(e).parentNode : Sender(e)) ;

  spn.style.backgroundColor = "#fff" ;
  uc_curUCID = spn.id ;
}


function ucMouseOut(e)
{
  uc_curUCID = null ;

  var
    spn = (Sender(e).src != null ? Sender(e).parentNode : Sender(e)) ;

  window.setTimeout("ucMouseOutTimer('" + spn.id + "');", 100) ;
}


function ucMouseOutTimer(id)
{
  if ((id != uc_curUCID) && !uc_inPop)
  {
    element(id).style.backgroundColor = "" ;
    uc_divUCPop.style.visibility = "hidden" ;
  }
}


function popMouseOver()
{
  uc_inPop = true ;
}


function popMouseOut()
{
  uc_inPop = false ;
  window.setTimeout("popMouseOutTimer();", 100) ;
}


function popMouseOutTimer()
{
  if (!uc_inPop)
  {
    uc_divUCPop.style.visibility = "hidden" ;
    uc_popSpn.style.backgroundColor = "" ;
  }
}


function ucClick(e)
{
  var
	isIE = (navigator.appName.indexOf("Microsoft Internet Explorer") != -1),
	xAdj = (isIE ? 2 : 0),
	yAdj = (isIE ? 5: 0) ;

	var version = 0;
	if (navigator.appVersion.indexOf("MSIE 7") != -1)
	{
		version = 7;
	}
	
	
	if (isIE && version != 7)
	{
		var x=event.clientX; 
		var y=event.clientY;
		
		y += document.body.scrollTop;
		y += document.documentElement.scrollTop;   
	}
	else if (isIE && version == 7)
	{
		var x=event.clientX; 
		var y=event.clientY;
		
		y += document.documentElement.scrollTop;        
	}
	else
	{
		var x = e.layerX;
		var y = e.layerY;     
		
		x = e.pageX;
		y = e.pageY;
	}
	
  
	var CompareMode;
	CompareMode = element("rbCompareMode");
   
	uc_popSpn = (Sender(e).src != null ? Sender(e).parentNode : Sender(e)) ;

	uc_divUCPop.style.left = x + "px";        
	uc_divUCPop.style.top = y + "px"; // scrolling the window threw this off.
	
	
	// OLD:
/*
  var
    isIE = (navigator.appName.indexOf("Microsoft Internet Explorer") != -1),
    xAdj = (isIE ? 2 : 0),
    yAdj = (isIE ? 5: 0),
    evnt = (e != null ? e : event) ;

  uc_popSpn = (Sender(e).src != null ? Sender(e).parentNode : Sender(e)) ;

  uc_divUCPop.style.left = ((isIE ? document.body.scrollLeft + evnt.clientX : evnt.pageX) - 8) + "px" ;
  uc_divUCPop.style.top = ((isIE ? document.body.scrollTop + evnt.clientY : evnt.pageY) + 5) + "px" ;

//  uc_divUCPop.style.left = (uc_popSpn.offsetLeft + uc_popSpn.offsetParent.offsetLeft + uc_popSpn.offsetParent.offsetParent.offsetLeft + uc_popSpn.offsetParent.offsetParent.offsetParent.offsetLeft + xAdj) + "px" ;
//  uc_divUCPop.style.top = (uc_popSpn.offsetTop + uc_popSpn.offsetParent.offsetTop + uc_popSpn.offsetParent.offsetParent.offsetTop + uc_popSpn.offsetHeight + yAdj) + "px" ;
*/
  switch (uc_popSpn.MeasureUnits)
  {
//    case "Length":
//    case "length":
//      uc_divUCPop.innerHTML =
//        "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('in'); return false;\">in</a>"
//        + "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('ft'); return false;\">ft</a>"
//        + "<hr />"
//        + "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('mm'); return false;\">mm</a>"
//        + "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('cm'); return false;\">cm</a>"
//        + "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('m'); return false;\">m</a>" ;

      case "Length":
      case "length":
          uc_divUCPop.innerHTML =
		"<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('" + element("hidIn").value + "'); return false;\">" + element("hidIn").value + "</a>"
		+ "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('" + element("hidFt").value + "'); return false;\">" + element("hidFt").value + "</a>"
		+ "<hr />"
		+ "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('" + element("hidMM").value + "'); return false;\">" + element("hidMM").value + "</a>"
		+ "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('" + element("hidCM").value + "'); return false;\">" + element("hidCM").value + "</a>"
		+ "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('" + element("hidM").value + "'); return false;\">" + element("hidM").value + "</a>";
            
            break ; 


    
//    case "Mass":
//    case "mass":
//    case "Weight":
//    case "weight":
//      uc_divUCPop.innerHTML =
//        "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('oz'); return false;\">oz</a>"
//        + "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('lb'); return false;\">lb</a>"
//        + "<hr />"
//        + "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('g'); return false;\">g</a>"
//        + "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('kg'); return false;\">kg</a>"
//        + "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('N'); return false;\">N</a>" ;
        case "Mass":
        case "mass":
        case "Weight":
        case "weight":
            uc_divUCPop.innerHTML =
		"<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('" + element("hidOz").value + "'); return false;\">" + element("hidOz").value + "</a>"
		+ "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('" + element("hidLb").value + "'); return false;\">" + element("hidLb").value + "</a>"
		+ "<hr />"
		+ "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('" + element("hidG").value + "'); return false;\">" + element("hidG").value + "</a>"
		+ "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('" + element("hidKg").value + "'); return false;\">" + element("hidKg").value + "</a>"
		+ "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('" + element("hidN").value + "'); return false;\">" + element("hidN").value + "</a>";
      break ;

//    case "Time":
//    case "time":
//      uc_divUCPop.innerHTML =
//        "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('ms'); return false;\">ms</a>"
//        + "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('sec'); return false;\">sec</a>"
//        + "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('min'); return false;\">min</a>" ;
  case "Time":
  case "time":
      uc_divUCPop.innerHTML =
		"<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('" + element("hidMs").value + "'); return false;\">" + element("hidMs").value + "</a>"
		+ "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('" + element("hidSec").value + "'); return false;\">" + element("hidSec").value + "</a>"
		+ "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('" + element("hidMin").value + "'); return false;\">" + element("hidMin").value + "</a>";

      break ;

    case "Temperature":
    case "temperature":
      uc_divUCPop.innerHTML =
        "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('deg F'); return false;\">deg F</a>"
        + "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('deg C'); return false;\">deg C</a>" ;

      break ;

    case "Pressure":
    case "pressure":
//      uc_divUCPop.innerHTML =
//        "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('psi'); return false;\">psi</a>"
//        + "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('in-Hg'); return false;\">in-Hg</a>"
//        + "<hr />"
//        + "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('bar'); return false;\">bar</a>"
//        + "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('mm-Hg'); return false;\">mm-Hg</a>" ;
        uc_divUCPop.innerHTML =
		"<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('" + element("hidPSI").value + "'); return false;\">" + element("hidPSI").value + "</a>"
		+ "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('" + element("hidInHg").value + "'); return false;\">" + element("hidInHg").value + "</a>"
		+ "<hr />"
		+ "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('" + element("hidBar").value + "'); return false;\">" + element("hidBar").value + "</a>"
		+ "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('" + element("hidMMHg").value + "'); return false;\">" + element("hidMMHg").value + "</a>";

      break ;

    case "CycleRate":
    case "cycle_rate":
//      uc_divUCPop.innerHTML =
//        "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('per hour'); return false;\">per hour</a>"
//        + "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('per minute'); return false;\">per minute</a>"
//        + "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('per second'); return false;\">per second</a>" ;
        uc_divUCPop.innerHTML =
		"<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('" + element("hidPerHr").value + "'); return false;\">" + element("hidPerHr").value + "</a>"
		+ "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('" + element("hidPerMin").value + "'); return false;\">" + element("hidPerMin").value + "</a>"
		+ "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('" + element("hidPerSec").value + "'); return false;\">" + element("hidPerSec").value + "</a>";
		
      break ;

    case "Torque":
    case "torque":
//      uc_divUCPop.innerHTML =
//        "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('in-lb'); return false;\">in-lb</a>"
//        + "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('oz-in'); return false;\">oz-in</a>"
//        + "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('lb-ft'); return false;\">lb-ft</a>"
//        + "<hr />"
//        + "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('N-m'); return false;\">N-m</a>"
//        + "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('N-mm'); return false;\">N-mm</a>" ;
        uc_divUCPop.innerHTML =
        "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('" + element("hidInLb").value + "'); return false;\">" + element("hidInLb").value + "</a>"
        + "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('" + element("hidOzIn").value + "'); return false;\">" + element("hidOzIn").value + "</a>"
        + "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('" + element("hidLbFt").value + "'); return false;\">" + element("hidLbFt").value + "</a>"
        + "<hr />"
        + "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('" + element("hidNM").value + "'); return false;\">" + element("hidNM").value + "</a>"
        + "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('" + element("hidNMM").value + "'); return false;\">" + element("hidNMM").value + "</a>";

      break ;

    case "TorqueRate":
    case "torque_rate":
//      uc_divUCPop.innerHTML =
//        "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('in-lb / hr'); return false;\">in-lb / hr</a>"
//        + "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('oz-in / hr'); return false;\">oz-in / hr</a>"
//        + "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('lb-ft / hr'); return false;\">lb-ft / hr</a>"
//        + "<hr />"
//        + "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('N-m / hr'); return false;\">N-m / hr</a>"
//        + "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('N-mm / hr'); return false;\">N-mm / hr</a>" ;
        uc_divUCPop.innerHTML =
        "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('" + element("hidInLbHr").value + "'); return false;\">" + element("hidInLbHr").value + "</a>"
        + "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('" + element("hidOzInHr").value + "'); return false;\">" + element("hidOzInHr").value + "</a>"
        + "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('" + element("hidLbFtHr").value + "'); return false;\">" + element("hidLbFtHr").value + "</a>"
        + "<hr />"
        + "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('" + element("hidNMHr").value + "'); return false;\">" + element("hidNMHr").value + "</a>"
        + "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('" + element("hidNMMHr").value + "'); return false;\">" + element("hidNMMHr").value + "</a>";
        
        break;
        

    case "LifeSpan":
    case "life_span":
//      uc_divUCPop.innerHTML =
//        "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('M in'); return false;\">million in of travel</a>"
//        + "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('M ft'); return false;\">million ft of travel</a>"
//        + "<hr />"
//        + "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('M cm'); return false;\">million cm of travel</a>"
//        + "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('M m'); return false;\">million m of travel</a>" ;
        uc_divUCPop.innerHTML =
        "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('" + element("hidMillionIn").value + "'); return false;\">" + element("hidMillionIn").value + "</a>"
        + "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('" + element("hidMillionFt").value + "'); return false;\">" + element("hidMillionFt").value + "</a>"
        + "<hr />"
        + "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('" + element("hidMillionCM").value + "'); return false;\">" + element("hidMillionCM").value + "</a>"
        + "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('" + element("hidMillionM").value + "'); return false;\">" + element("hidMillionM").value + "</a>";

      break ;

    case "Velocity":
    case "velocity":
//      uc_divUCPop.innerHTML =
//        "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('in/sec'); return false;\">in/sec</a>"
//        + "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('ft/sec'); return false;\">ft/sec</a>"
//        + "<hr />"
//        + "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('mm/sec'); return false;\">mm/sec</a>"
//        + "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('cm/sec'); return false;\">cm/sec</a>"
//        + "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('m/sec'); return false;\">m/sec</a>" ;
        uc_divUCPop.innerHTML =
        "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('" + element("hidInSec").value + "'); return false;\">" + element("hidInSec").value + "</a>"
        + "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('" + element("hidFtSec").value + "'); return false;\">" + element("hidFtSec").value + "</a>"
        + "<hr />"
        + "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('" + element("hidMMSec").value + "'); return false;\">" + element("hidMMSec").value + "</a>"
        + "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('" + element("hidCMSec").value + "'); return false;\">" + element("hidCMSec").value + "</a>"
        + "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('" + element("hidMSec").value + "'); return false;\">" + element("hidMSec").value + "</a>";

      break ;
      
    case "FlowRate":
    case "flow_rate":
//      uc_divUCPop.innerHTML =
//        "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('SCFM'); return false;\">SCFM</a>"
//        + "<hr />"
//        + "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('LPM'); return false;\">LPM</a>" ;
//
        uc_divUCPop.innerHTML =
        "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('" + element("hidSCFM").value + "'); return false;\">" + element("hidSCFM").value + "</a>"
        + "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('" + element("hidLPM").value + "'); return false;\">" + element("hidLPM").value + "</a>";
        
        break;
}

  uc_divUCPop.style.visibility = "visible" ;
}


function ucSelect(unitName)
{
  uc_inPop = false ;
  uc_divUCPop.style.visibility = "hidden" ;

  uc_popSpn.style.backgroundColor = "" ;

  switch (unitName)
  {
     
      case element("hidIn").value: ucSetUnit(1, 1, 4); break;
      case element("hidFt").value: ucSetUnit(1 / 12, 1 / 12, 4); break;
      case element("hidMM").value: ucSetUnit(25.4, 1, 2); break;
      case element("hidCM").value: ucSetUnit(2.54, 1, 3); break;
      case element("hidM").value: ucSetUnit(0.0254, 0.01, 4); break;
    
     //case "in": ucSetUnit(1, 1, 4) ; break ;
   // case "ft": ucSetUnit(1/12, 1/12, 4) ; break ;
    //case "mm": ucSetUnit(25.4, 1, 2) ; break ;
    //case "cm": ucSetUnit(2.54, 1, 3) ; break ;
    //case "m": ucSetUnit(0.0254, 0.01, 4) ; break ;

      case element("hidOz").value: ucSetUnit(16, 1, 2); break;
      case element("hidLb").value: ucSetUnit(1, 0.5, 3); break;
      case element("hidG").value: ucSetUnit(453.59237, 1, 1); break;
      case element("hidKg").value: ucSetUnit(0.45359237, 0.1, 3); break;
      case element("hidN").value: ucSetUnit(4.44822161526, 0.5, 3); break;

//    case "oz": ucSetUnit(16, 1, 2); break ;
//    case "lb": ucSetUnit(1, 0.5, 3); break ;
//    case "g": ucSetUnit(453.59237, 1, 1); break ;
//    case "kg": ucSetUnit(0.45359237, 0.1, 3); break ;
//    case "N": ucSetUnit(4.44822161526, 0.5, 3); break ;

      case element("hidMs").value: ucSetUnit(1000, 100, 1); break;
      case element("hidSec").value: ucSetUnit(1, 0.1, 3); break;
      case element("hidMin").value: ucSetUnit(1 / 60, 1 / 60, 3); break;

//    case "ms": ucSetUnit(1000, 100, 1); break ;
//    case "sec": ucSetUnit(1, 0.25, 3); break ;
//    case "min": ucSetUnit(1/60, 1/60, 3); break ;

      case element("hidCelsius").value: ucConvertTemp("C", 1, 1); break; // not a straight conversion factor
      case element("hidFahrenheit").value: ucConvertTemp("F", 1, 1); break;  
         
//    case "deg F":
//    case "deg C": ucSetTempUnit(unitName, 1, 2); break ;

      case element("hidPSI").value: ucSetUnit(1, 1, 2); break;
      case element("hidInHg").value: ucSetUnit(2.03602096738, 1, 2); break;
      case element("hidBar").value: ucSetUnit(0.06894757293, 0.1, 3); break;
      case element("hidMMHg").value: ucSetUnit(51.7149325715, 1, 1); break;

//    case "psi": ucSetUnit(1, 1, 2); break ;
//    case "in-Hg": ucSetUnit(2.03602096738, 1, 2); break ;
//    case "bar": ucSetUnit(0.06894757293, 1, 3);  break ;
//    case "mm-Hg": ucSetUnit(51.7149325715, 1, 1); break ;

    case element("hidPerHr").value: ucSetUnit(1, 10, 2); break ;
    case element("hidPerMin").value: ucSetUnit(1/60, 1, 2); break ;
    case "per second": ucSetUnit(1/3600, 1, 1); break ;

    case element("hidInLb").value: ucSetUnit(1, 1, 4); break;
    case element("hidOzIn").value: ucSetUnit(16, 1, 4); break;
    case element("hidLbFt").value: ucSetUnit(1 / 12, 1, 3); break;
    case element("hidNM").value: ucSetUnit(0.1129848, 1, 4); break;
    case element("hidNMM").value: ucSetUnit(112.9848, 1, 4); break;
    
//    case "in-lb": ucSetUnit(1, 1, 3); break ;
//    case "oz-in": ucSetUnit(16, 1, 3); break ;
//    case "lb-ft": ucSetUnit(1/12, 1, 2); break ;
//    case "N-m": ucSetUnit(0.1129848, 1, 3); break ;
//    case "N-mm": ucSetUnit(112.9848, 1, 3); break ;

    case element("hidInLbHr").value: ucSetUnit(1, 1, 3); break;
    case element("hidOzInHr").value: ucSetUnit(16, 1, 3); break;
    case element("hidLbFtHr").value: ucSetUnit(1 / 12, 1, 2); break;
    case element("hidNMHr").value: ucSetUnit(0.1129848, 1, 3); break;
    case element("hidNMMHr").value: ucSetUnit(112.9848, 1, 3); break;

//    case "in-lb / hr": ucSetUnit(1, 1, 3); break ;
//    case "oz-in / hr": ucSetUnit(16, 1, 3); break ;
//    case "lb-ft / hr": ucSetUnit(1/12, 1, 2); break ;
//    case "N-m / hr": ucSetUnit(0.1129848, 1, 3); break ;
//    case "N-mm / hr": ucSetUnit(112.9848, 1, 3); break ;

    case element("hidMillionIn").value: ucSetUnit(1, 1, 2); break;
    case element("hidMillionFt").value: ucSetUnit(1 / 12, 1, 2); break;
    case element("hidMillionCM").value: ucSetUnit(2.54, 1, 2); break;
    case element("hidMillionM").value: ucSetUnit(0.0254, 0.1, 2); break;

//    case "M in": ucSetUnit(1, 1, 2); break ;
//    case "M ft": ucSetUnit(1/12, 1, 2); break ;
//    case "M cm": ucSetUnit(2.54, 1, 2); break ;
//    case "M m": ucSetUnit(0.0254, 0.1, 2); break ;

    case element("hidInSec").value: ucSetUnit(1, 1, 2); break;
    case element("hidFtSec").value: ucSetUnit(1 / 12, 1, 2); break;
    case element("hidMMSec").value: ucSetUnit(25.4, 1, 2); break;
    case element("hidCMSec").value: ucSetUnit(2.54, 0.1, 2); break;
    case element("hidMSec").value: ucSetUnit(0.0254, 0.1, 3); break;

//    case "in/sec": ucSetUnit(1, 1, 2); break ;
//    case "ft/sec": ucSetUnit(1/12, 1, 2); break ;
//    case "mm/sec": ucSetUnit(25.4, 1, 2); break ;
//    case "cm/sec": ucSetUnit(2.54, 0.1, 2); break ;
//    case "m/sec": ucSetUnit(0.0254, 0.1, 3); break ;

    case "qty": ucSetUnit(1, 1, 4); break ;

    case element("hidSCFM").value: ucSetUnit(1, 1, 5); break; // 1 SCFM = 28.31685 lpm
    case element("hidLPM").value: ucSetUnit(28.31685, 1, 5); break;
//    case "SCFM": ucSetUnit(1, 1, 4); break ;
//    case "LPM": ucSetUnit(28.3168, 1, 4); break ;
  }

  uc_popSpn.firstChild.nodeValue = unitName ;
  uc_popSpn.Units = unitName ;
}


function ucTempCtoF(C)
{
  return (9 * C / 5) + 32 ;
}


function ucTempFtoC(F)
{
  return (5/9) * (F - 32) ;
}


function ucSetUnit(convFact, incDecAmt, decPrec)
{
  uc_popSpn.ActualValue = (uc_popSpn.ActualValue / uc_popSpn.ConvFact) * convFact ; 

  if (uc_popSpn.MinValue != null)
    uc_popSpn.MinValue = (uc_popSpn.MinValue / uc_popSpn.ConvFact) * convFact ;

  if (uc_popSpn.MaxValue != null)
    uc_popSpn.MaxValue = (uc_popSpn.MaxValue / uc_popSpn.ConvFact) * convFact ;

  uc_popSpn.ConvFact = convFact ;
  uc_popSpn.IncDecAmt = incDecAmt ;
  
  if (uc_popSpn.DecPrec == null)
    uc_popSpn.DecPrec = decPrec ;

  uc_popSpn.TxtValue.value = FormatNumber(uc_popSpn.ActualValue, uc_popSpn.DecPrec) ;
}


function ucTempSwitch(v)
{
  return (uc_popSpn.Units ? (uc_popSpn.Units == "deg C" ? ucTempCtoF(v) : ucTempFtoC(v)) : v) ;
}


function ucSetTempUnit(deg, incDecAmt, decPrec)
{
  if (uc_popSpn.Units != deg)
  {
    uc_popSpn.ActualValue = ucTempSwitch(uc_popSpn.ActualValue) ;
    
    if (uc_popSpn.MinValue != null)
      uc_popSpn.MinValue = ucTempSwitch(uc_popSpn.MinValue) ;

    if (uc_popSpn.MaxValue != null)
      uc_popSpn.MaxValue = ucTempSwitch(uc_popSpn.MaxValue) ;

    uc_popSpn.ConvFact = 1 ;
    uc_popSpn.IncDecAmt = incDecAmt ;
    
    if (uc_popSpn.DecPrec == null)
      uc_popSpn.DecPrec = decPrec ;

    uc_popSpn.TxtValue.value = FormatNumber(uc_popSpn.ActualValue, uc_popSpn.DecPrec) ;
  }
}


function setValue(val, units)
{
    // only need length, only using this for CG calcs.
    
    ucSelect(units)
    uc_popSpn.TxtValue.value = val;
    uc_popSpn.Units = units;
    return;
}

// simplifies creating column 2-
// first 4 fields are the same as SetupUCByRefs, and put in the column 1 unit converter span for parameter 5
// default values will be copied from app1 unit converter.
function setApp2(minusRef, txtRef, plusRef, spnRef, App1)
{   
    measUnits = App1.MeasureUnits;
    defUnits = App1.Units;
    defVal = App1.ActualValue;
    conv = App1.ConvFact;
    incDec = App1.IncDecAmt;
    prec = App1.DecPrec;
    minVal = App1.MinValue;
    maxVal = App1.MaxValue;
    readOnly = 0;
      
    SetupUCByRefs(minusRef, txtRef, plusRef, spnRef, measUnits, defUnits, defVal, conv, incDec, prec, minVal, maxVal, readOnly)
        
return;
}