var
  uc_curUCID = null,
  uc_inPop = false,
  uc_popSpn,
  uc_curFldVal,
  uc_divUCPop ;


function SetupDivPop(dpId)
{
  uc_divUCPop = element(dpId) ;
  uc_divUCPop.onmouseover = popMouseOver ;
  uc_divUCPop.onmouseout = popMouseOut ;
  /* uc_divUCPop.style.zindex = 1000; */
}


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 ;
  
  // jcw test: - needed for firefox. You actually need to specify the creation of an attribute.
  var newatt=document.createAttribute("ActualValue");
  newatt.value=defVal;
  uc.setAttributeNode(newatt);
  // end jcw test
  
  
  uc.ActualValue = defVal ;
  
  uc.SetMetric = function(m)
  {
    uc_popSpn = this ;

// this is what sets up the unit name next to the value
 switch (this.MeasureUnits)
    {
      case "Length":
      case "length": ucSelect(m ? element("hidCM").value : element("hidIn").value) ; break ;
      //case "length": ucSelect(m ? "cm" : "in") ; break ;

      case "Mass":
      case "mass":
      case "Weight":
      case "gripForceWeight":
      case "weight": ucSelect(m ? element("hidG").value : element("hidLb").value) ; break ;

      //case "weight": ucSelect(m ? "g" : "lb") ; break ;

      case "Pressure":
      case "pressure": ucSelect(m ? element("hidBar").value : element("hidPSI").value) ; break ;
      //case "pressure": ucSelect(m ? "bar" : "psi") ; break ;

      case "Energy":
      case "energy":
      case "Torque":
      case "torque": ucSelect(m ? "N-m" : "in-lb") ; break ;

      case "TorqueRate":
      case "torque_rate": ucSelect(m ? "N-m / hr" : "in-lb / hr") ; break ;

      case "LifeSpan":
      case "life_span": ucSelect(m ? "M cm" : "M in") ; break ;

      case "Velocity":
      case "velocity": ucSelect(m ? "mm/sec" : "in/sec") ; break ;
      
      case "AngularVelocity":
      case "angularvelocity":
        ucSelect(m ? "rad/sec" : "deg/sec") ; break ;

      case "AngularAcceleration":
      case "angularacceleration":
        ucSelect(m ? "rad/sec^2" : "deg/sec^2") ; break ;

      case "Time":
      case "time": ucSelect("sec") ; break ;
      
      case "Inertia":
      case "inertia": ucSelect(m ? "g-cm-s^2" : "in-lb-s^2"); break;

      case "CycleRate":
      case "cycle_rate": 
      case "cyclerate":
        ucSelect("/min") ; break ;
      
      case "Angle":
      case "angle": ucSelect(m ? element("hidRad").value : element("hidDeg").value); break;
      //case "angle": ucSelect(m ? "rad" : "deg"); break;
            
      case "Units":
      case "units": ucSelect("units"); break;
      
      case "Temperature":
      case "temperature": ucSelect(m ? "C" : "F"); break;
      
      case "FlowRate":
      case "flowrate": ucSelect(m ? "LPM" : "SCFM"); break;
      
      case "Cv":
      case "cv":
      case "Jaws":
      case "jaws":
      case "Friction":
      case "friction": ucSelect(""); break;
      
      case "Success":
      case "success":  ucSelect("(Success)"); break;
      case "Failure":
      case "failure":  ucSelect("(Failure)"); break;
      
      default: ucSelect(""); 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

  if (readOnly)
  {
    uc.TxtValue.readOnly = true ;
    uc.TxtValue.style.color = "#666" ;   

    uc.ImgPlus.style.display = "none" ;
    uc.ImgMinus.style.display = "none" ;
  }
  
  uc_popSpn = uc ;
  ucSelect(defUnits, conv, incDec, prec) ;
  
  return;
}


function Entered(e)
{
  uc_curFldVal = Sender(e).value.replace(/\,/g, "") ;
  Sender(e).value = uc_curFldVal ;
  Sender(e).select(); // added jcw 12/12/06
}


function Exited(e)
{
  KeyUp(e) ;

  var
    x = parseFloat(Sender(e).value),
    spn = Sender(e).SpnUC ;

  Sender(e).value = FormatNumber(spn.ActualValue, spn.DecPrec) ;

  if (uc_IsBadValue(x, spn))
  {
    Sender(e).style.backgroundColor = "" ;
    //DEBUG
    //alert("In Exited, AppCol = " + AppCol);
    alert("Input not in valid range (must be > " + spn.MinValue + " and < " + spn.MaxValue + ")");
    //*****
    InputChanged() ;
  }
  
}


function uc_IsBadValue(x, spn)
{
  return (isNaN(x) 
    || (spn.MaxValue != null && x > spn.MaxValue) 
    || (spn.MinValue != null && x < spn.MinValue) ) ;
}


function KeyUp(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))
    {
/*      var
        dr = element("divResults") ;

      dr.innerHTML = "Illegal number in input field." ;
      dr.style.fontWeight = "bold" ;
      dr.style.fontStyle = "normal" ;*/

      Sender(e).style.backgroundColor = "#ff9999" ;
    }
    else
    {
      Sender(e).style.backgroundColor = "" ;
      spn.ActualValue = x ;
      InputChanged() ;
    }
  }
}


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 = parseFloat(spn.ActualValue) - parseFloat(spn.IncDecAmt) ;
    
    //DEBUG
  var tmpCol = getColName(Sender(e).id);
  setCol(tmpCol);
  //*****

  if (spn.MinValue != null && x < spn.MinValue)
  {
    x = spn.MinValue ;
  }
  spn.defaultValue = x;
  spn.ActualValue = x ;
  spn.TxtValue.value = FormatNumber(x, spn.DecPrec) ;
  spn.TxtValue.defaultValue = x;
  InputChanged() ;
}


function PlusClick(e)
{
    
  var
    spn = Sender(e).SpnUC,
    x = parseFloat(spn.ActualValue) + parseFloat(spn.IncDecAmt) ;

  //DEBUG
  var tmpCol = getColName(Sender(e).id);
  setCol(tmpCol);
  //*****
  
  
  if (spn.MaxValue != null && x > spn.MaxValue)
  {
    x = spn.MaxValue ;
  }
  spn.ActualValue = x ;
  spn.defaultValue = x;
  spn.TxtValue.value = FormatNumber(x, spn.DecPrec) ;
  spn.TxtValue.defaultValue = x;
 
  InputChanged(); 
}


function ucMouseOver(e)
{
  var
    spn = (Sender(e).src != null ? Sender(e).parentNode : Sender(e)) ;

  spn.style.backgroundColor = "#fff" ;
  uc_curUCID = spn.id ;
  // alert(uc_curUCID);
}


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");
    /* if (CompareMode.checked) // unused?
    {
        yAdj += 10;
    }
    else
    {
        yAdj += 80;
    } */
   
    uc_popSpn = (Sender(e).src != null ? Sender(e).parentNode : Sender(e)) ;   

    if (CompareMode.checked || !CompareMode.checked) // not just for compare mode anymore
    { 
        uc_divUCPop.style.left = x + "px";        
        uc_divUCPop.style.top = y + "px"; // scrolling the window threw this off.
    }
    /*
    alert("document.documentElement.scrollTop: " + document.documentElement.scrollTop);
    alert("document.body.scrollTop: " + document.body.scrollTop);
    */
    
// this is what sets up the names in the pop-up window for selecting a different unit
 switch (uc_popSpn.MeasureUnits)
  {
  
  
    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>" ;
//      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>" ;

      break ;

    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>" ;
//      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>" ;

      break ;
    case "gripForceWeight":
       uc_divUCPop.innerHTML =
		"<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('"+ element("hidLb").value+ "'); return false;\">"+ element("hidLb").value+ "</a>"
		+ "<hr />"
		+ "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('"+ element("hidN").value+ "'); return false;\">"+ element("hidN").value+ "</a>";
//        uc_divUCPop.innerHTML =
//        "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('lb'); return false;\">lb</a>"
//        + "<hr />"
//        + "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('N'); return false;\">N</a>" ;
        
        break;

    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>" ;
//      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>" ;

      break ;

    case "Pressure":
    case "pressure":
    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>" ;
//      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>" ;

      break ;

    case "CycleRate":
    case "cycle_rate":
    case "cyclerate":
    	  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>" ;
//      uc_divUCPop.innerHTML =
//        "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('/hour'); return false;\">per hour</a>"
//        + "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('/min'); return false;\">per min</a>"
//        + "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('/sec'); return false;\">per sec</a>" ;

      break ;
      
    case "inertia":
    case "Inertia":
        uc_divUCPop.innerHTML =
        "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('in-lb-s^2'); return false;\" >in-lb-s^2</a>" 
        + "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('in-oz-s^2'); return false;\">in-oz-s^2</a>"
        + "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('ft-lb-s^2'); return false;\">ft-lb-s^2</a>"
        + "<hr />"
        + "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('g-cm-s^2'); return false;\">g-cm-s^2</a>"
        + "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('kg-m-s^2'); return false;\">kg-m-s^2</a>";
        break;
        
    case "Energy":
    case "energy":
    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'); return false;\">N</a>"
        + "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('N-mm'); return false;\">N-mm</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>" ;

      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>" ;

      break ;
      
    case "AngularVelocity":
    case "angularvelocity":    
        uc_divUCPop.innerHTML =    
        "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('deg/sec'); return false;\">deg/sec</a>"
        + "<hr />"
        + "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('rad/sec'); return false;\">rad/sec</a>";
    break;
    
    case "AngularAcceleration":
    case "angularacceleration":    
        uc_divUCPop.innerHTML =    
        "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('deg/sec^2'); return false;\">deg/sec^2</a>"
        + "<hr />"
        + "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('rad/sec^2'); return false;\">rad/sec^2</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>" ;

      break ;
      
      
    case "Angle":
    case "angle":
      uc_divUCPop.innerHTML =
		"<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('"+ element("hidDeg").value+ "'); return false;\">"+ element("hidDeg").value+ "</a>" 
		+ "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('"+ element("hidRad").value+ "'); return false;\">"+ element("hidRad").value+ "</a>" 
//      uc_divUCPop.innerHTML =
//        "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('deg'); return false;\">deg</a>"
//        + "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('rad'); return false;\">rad</a>";
      break ;
      
    case "Units":
    case "units":    
      uc_divUCPop.innerHTML =
        "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('units'); return false;\">units</a>";
      break ;
      
    case "Success":
    case "success":
      uc_divUCPop.innerHTML =
        "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('(Success)'); return false;\">(Success)</a>";
      break ;
      
    case "Failure":
    case "failure":
      uc_divUCPop.innerHTML =
        "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('(Failure)'); return false;\">(Failure)</a>";
      break ;
      
    case "FlowRate":
    case "flowrate":
      uc_divUCPop.innerHTML =
        "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('SCFM'); return false;\">SCFM</a>"
        + "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('LPM'); return false;\">LPM</a>";
      break ;
    
      
    case "Temperature":
    case "temperature":
      uc_divUCPop.innerHTML =
        "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('F'); return false;\">F</a>"
        + "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect('C'); return false;\">C</a>";
      break ;
      
    default: // none
      uc_divUCPop.innerHTML =
        "<a class=\"menuLink\" href=\"#\" onclick=\"ucSelect(''); return false;\"></a>";
      break ;
  }

  uc_divUCPop.style.visibility = "visible" ;
}


function ucSelect(unitName)
{
  uc_inPop = false ;
  uc_divUCPop.style.visibility = "hidden" ;

   
   
  uc_popSpn.style.backgroundColor = "" ;
  uc_popSpn.firstChild.nodeValue = unitName ; 

// this is what actually converts the value
  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 "deg/sec": ucSetUnit(1, 1, 3); break ;
    case "rad/sec": ucSetUnit(0.0174532925, 1, 3); break ;
    
    case "deg/sec^2": ucSetUnit(1, 1, 3); break ;
    case "rad/sec^2": ucSetUnit(0.0174532925, 1, 3); break ;

    case "/hour": ucSetUnit(60, 10, 2); break ;
    case "/min": ucSetUnit(1, 1, 2); break ;
    case "/sec": ucSetUnit(1/60, 1, 2); break ;

    case "ms": ucSetUnit(1000, 100, 1); break ;
    case "sec": ucSetUnit(1, 0.1, 3); break ;
    case "min": ucSetUnit(1/60, 1/60, 3); 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, 0.1, 3); break ;
//    case "mm-Hg": ucSetUnit(51.7149325715, 1, 1); break ;

    case "per hour": ucSetUnit(60, 10, 2); break ;
    case "per minute": ucSetUnit(1, 1, 2); break ;
    case "per second": ucSetUnit(1/60, 1, 1); break ;
    
    case "in-lb-s^2": ucSetUnit(1, 1, 5); break ;
    case "in-oz-s^2": ucSetUnit(16, 1, 5); break ;
    case "ft-lb-s^2": ucSetUnit(1/12, 1, 5); break ;
    case "g-cm-s^2": ucSetUnit(1152.12459, 1, 5); break ;
    case "kg-m-s^2": ucSetUnit(0.0115212459, 1, 5); break ;

    case "in-lb": ucSetUnit(1, 1, 4); break ;
    case "oz-in": ucSetUnit(16, 1, 4); break ;
    case "lb-ft": ucSetUnit(1/12, 1, 3); break ;
    case "N-m": ucSetUnit(0.1129848, 1, 4); break ;
    case "N-mm": ucSetUnit(112.9848, 1, 4); 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 "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 "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 element("hidDeg").value: ucSetUnit(1, 5, 2); break ; // 1 degree = 0.0174532925 radian
    case element("hidRad").value: ucSetUnit(0.01745, 0.1, 2); break ;
//    case "deg": ucSetUnit(1, 5, 2); break ; // 1 degree = 0.0174532925 radian
//    case "rad": ucSetUnit(0.01745, 0.1, 2); break ;
    
    case "SCFM": ucSetUnit(1, 1, 5); break ; // 1 SCFM = 28.31685 lpm
    case "LPM": ucSetUnit(28.31685, 1, 5); break ;
        
    case "C": ucConvertTemp("C", 1, 1); break; // not a straight conversion factor
    case "F": ucConvertTemp("F", 1, 1); break;
    
        
    case "units": ucSetUnit(1, 1, 1); break;
    case "": ucSetUnit(1, 1, 4); break;
  }
}


function ucConvertTemp(ConvFact, incDecAmt, decPrec)
{
    //alert("ConvFact: " + ConvFact);
    //alert("uc_popSpn.ConvFact: " + uc_popSpn.ConvFact );
  if ((ConvFact == "C") && uc_popSpn.ConvFact != "C")   // convert from C to F
  { //alert("convert1: " + uc_popSpn.ConvFact + "->" + ConvFact);      
    uc_popSpn.ActualValue = (uc_popSpn.ActualValue - 32) * 5/9 ;

    if (uc_popSpn.MinValue != null)
      uc_popSpn.MinValue = (uc_popSpn.MinValue - 32) * 5/9 ;

    if (uc_popSpn.MaxValue != null)
      uc_popSpn.MaxValue = (uc_popSpn.MaxValue - 32) * 5/9 ;

    uc_popSpn.TxtValue.value = FormatNumber(uc_popSpn.ActualValue, decPrec) ;

    uc_popSpn.ConvFact = "C" ;
    uc_popSpn.IncDecAmt = incDecAmt ;
    uc_popSpn.DecPrec = decPrec ;
  }
  else if ((ConvFact == "F") && uc_popSpn.ConvFact != "F")  // convert from F to C 
  {
  //alert("convert2: " + uc_popSpn.ConvFact + "->" + ConvFact);    
  
    uc_popSpn.ActualValue = (uc_popSpn.ActualValue * 9/5) + 32 ;

    if (uc_popSpn.MinValue != null)
      uc_popSpn.MinValue = (uc_popSpn.MinValue * 9/5) + 32 ;

    if (uc_popSpn.MaxValue != null)
      uc_popSpn.MaxValue = (uc_popSpn.MaxValue * 9/5) + 32 ;

    uc_popSpn.TxtValue.value = FormatNumber(uc_popSpn.ActualValue, decPrec) ;

    uc_popSpn.ConvFact = "F" ;
    uc_popSpn.IncDecAmt = incDecAmt ;
    uc_popSpn.DecPrec = decPrec ;
  }
  else
  {
  //alert("convert3: " + uc_popSpn.ConvFact + "->" + ConvFact);
  // alert("uc_popSpn: " + uc_popSpn.ActualValue); 
   
    uc_popSpn.TxtValue.value = FormatNumber(uc_popSpn.ActualValue, decPrec) ;
    uc_popSpn.ConvFact = ConvFact ;
    uc_popSpn.IncDecAmt = incDecAmt ;
    uc_popSpn.DecPrec = decPrec ;
  }

   uc_popSpn.TxtValue.defaultValue = uc_popSpn.TxtValue.value;
}



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 ;

if (uc_popSpn.TxtValue != null)
  uc_popSpn.TxtValue.value = FormatNumber(uc_popSpn.ActualValue, decPrec) ;
  //uc_popSpn.TxtValue.value = FormatNumber(uc_popSpn.ActualValue, uc_popSpn.DecPrec) ;


  uc_popSpn.ConvFact = convFact ;
  uc_popSpn.IncDecAmt = incDecAmt ;
  uc_popSpn.DecPrec = decPrec ;
  
   //alert("uc_popSpn.ActualValue: " + uc_popSpn.ActualValue);
if (uc_popSpn.TxtValue != null)
  uc_popSpn.TxtValue.defaultValue = uc_popSpn.TxtValue.value;
}



function Sender(e)
{
 try
 {
    var retVal;
    retVal = e != null ? e.target : event.srcElement;
 }
 catch(err)
 {    
    //throw(err);
 }

  return (retVal) ;
}


function FormatNumber(num, decPrec, money, pct, noDec)
{
  if (decPrec < 1)
    noDec = true ;



  var
    fx = Math.pow(10, decPrec),
    gx = fx / 10,
    sign = (num == (num = Math.abs(num))),
    num = Math.floor(num * fx + 0.50000000001),
    cents = num % fx,
    num = Math.floor(num / fx).toString();

  while (gx > 1)
  {
    if(cents < gx)
      cents = "0" + cents;

    gx /= 10 ;
  }

  for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
    num = num.substring(0,num.length-(4*i+3))+','+num.substring(num.length-(4*i+3));

  return (((sign)?'':'-') + ((money)?'$':'') + num + (noDec ? '' : '.' + cents)) + ((pct)?'%':'');
}