﻿// JScript File

// communicate with webservice
// first need to determine which orientation
// since they're all different
// R1 thru R8


var AppCol = "";
 var series = "";
 var lstSrs = " ";
 var compInit = false;  
var language; 
 
 function initComp(col)
 {
    compInit = true;
    rotList(col, compInit);
    //compInit = false;
 }

function rotList(col)
{
    AppCol = col;
    if (col == "CompMode")
        col = "";
    
    if (compMode && !compInit)
        var tmp = 0;
    
    if ((col == "") && (element("rbCompareMode").checked))
    {
        element("CompModedivResultsMsg").innerHTML = element("hidCalcResults").value;
        //element("CompModedivResultsMsg").innerHTML = "... Calculating results. Please wait.";
    }
    else
    {
        element(col + "divResultsMsg").innerHTML = element("hidCalcResults").value;
        //element(col + "divResultsMsg").innerHTML = "... Calculating results. Please wait.";
    }
    var pl = new SOAPClientParameters();
    var AngleOfRotation = element(col + "spnUCAOR").ActualValue/element(col + "spnUCAOR").ConvFact;    
    var RotationTime= element(col + "spnUCRotTime").ActualValue/element(col + "spnUCRotTime").ConvFact;
    var Pressure= element(col + "spnUCPressure").ActualValue/element(col + "spnUCPressure").ConvFact;
    var TorqueSafetyFactor= element(col + "spnUCTSF").ActualValue/element(col + "spnUCTSF").ConvFact;
    var RotaryFaceToLoad= element(col + "spnUCFTL").ActualValue/element(col + "spnUCFTL").ConvFact;
    var Inertia= element(col + "spnUCInertiaAdd").ActualValue/element(col + "spnUCInertiaAdd").ConvFact;   
    var TorqueAdder= element(col + "spnUCTorqueAdd").ActualValue/element(col + "spnUCTorqueAdd").ConvFact;
    var Positions; 
    var RotPlane; 
    var Power;
    var UOM;
    var ExternalShocks;      
    var showFailed;
    var showMarginal;  
    if ((col == "") && (element("rbCompareMode").checked))
    {
        ExternalShocks = element("CompModecbExternalShocks").checked;
        showFailed = element("CompModecbFailed").checked;
        showMarginal = element("CompModecbMarginal").checked;
    }
    else
    {
        ExternalShocks = element(col + "cbExternalShocks").checked;
        showFailed = element(col + "cbFailed").checked;
        showMarginal = element(col + "cbMarginal").checked;  
    }
      
   language = element("UserLanguageStorage").value;
   
   if (language.indexOf("de") >-1)
   {
        element("buttonReset").style.fontSize = "9px";
   }
   
    orientation = getOrientation(col);
   // Positions = (element("rbTwo").checked ? 0 : 1);
   Positions = (element("rbTwo").checked ? 0 : (element("rbMulti").checked ? 1 : 2));
   if (col == "CompMode")
       RotPlane = (element("rbAxisVertical").checked ? 0 : 1);
   else
       RotPlane = (element(col + "rbAxisVertical").checked ? 0 : 1); 
    Power = (element("rbPneumatic").checked ? 0 : 1);    
    UOM = (element("rbMetric").checked ? 1 : 0);
    
    pl.add("AngleOfRotation", AngleOfRotation) ; 
    pl.add("RotationTime", RotationTime) ;
    pl.add("Pressure", Pressure) ;
    pl.add("TorqueSafetyFactor", TorqueSafetyFactor) ;
    pl.add("RotaryFaceToLoad", RotaryFaceToLoad) ;    
    pl.add("InertiaAdder", Inertia) ;
    // pl.add("InertiaAdder", 1) ;
    pl.add("TorqueAdder", TorqueAdder) ;    
    pl.add("Positions", Positions) ;    
    pl.add("AxisOrientation", RotPlane) ;
    pl.add("Power", Power) ;
    pl.add("UOM", UOM);
    pl.add("ShowFailed", showFailed);
    pl.add("ShowMarginal", showMarginal);   
    pl.add("ExternalShocks", ExternalShocks);
    //pl.add("Language", language);
    pl.add("Language", language);
        
    
    //Since there are no compmode values for app 1 inputs if col = compmode set col to "" (app 1)
    if (col == "CompMode")
        col = "";    
     
    if (orientation == "R1")
    {        
        var Radius= element(col + "spnUCRadius").ActualValue/element(col + "spnUCRadius").ConvFact;
        var Load= element(col + "spnUCLoad").ActualValue/element(col + "spnUCLoad").ConvFact;
        
        pl.add("Radius", Radius) ; 
        pl.add("Load", Load) ;
        SOAPClient.invoke("Rotary.asmx", "UnitRotaryDiskOnCenter", pl, true, list_callback) ;       
    }
    else if (orientation == "R2")
    {
        var Radius= element(col + "spnUCRadius").ActualValue/element(col + "spnUCRadius").ConvFact;
        var Height= element(col + "spnUCHeight").ActualValue/element(col + "spnUCHeight").ConvFact;
        var Load= element(col + "spnUCLoad").ActualValue/element(col + "spnUCLoad").ConvFact;
        
        pl.add("Radius", Radius) ;
        pl.add("Height", Height) ;
        pl.add("Load", Load) ;
        SOAPClient.invoke("Rotary.asmx", "UnitRotaryDiskEndOnCenter", pl, true, list_callback) ;
    }
    else if (orientation == "R3")
    {
        var Radius= element(col + "spnUCRadius").ActualValue/element(col + "spnUCRadius").ConvFact;
        var Load= element(col + "spnUCLoad").ActualValue/element(col + "spnUCLoad").ConvFact;
        
        pl.add("Radius", Radius) ;
        pl.add("Load", Load) ;
        SOAPClient.invoke("Rotary.asmx", "UnitRotarySolidSphere", pl, true, list_callback) ;
    }
    else if (orientation == "R4")
    {
        var Radius= element(col + "spnUCRadius").ActualValue/element(col + "spnUCRadius").ConvFact;
        var PlateLength= element(col + "spnUCLength").ActualValue/element(col + "spnUCLength").ConvFact;
        var PlateHeight= element(col + "spnUCHeight").ActualValue/element(col + "spnUCHeight").ConvFact;
        var Load= element(col + "spnUCLoad").ActualValue/element(col + "spnUCLoad").ConvFact;
        
        pl.add("Radius", Radius) ;
        pl.add("Load", Load) ;
        pl.add("PlateLength", PlateLength) ;
        pl.add("PlateHeight", PlateHeight) ;
        
        SOAPClient.invoke("Rotary.asmx", "UnitRotaryPlateOnCenter", pl, true, list_callback) ;
    }
    else if (orientation == "R5")
    {
        var Radius= element(col + "spnUCRadius").ActualValue/element(col + "spnUCRadius").ConvFact;
        var RodLength= element(col + "spnUCLength").ActualValue/element(col + "spnUCLength").ConvFact;
        var Load= element(col + "spnUCLoad").ActualValue/element(col + "spnUCLoad").ConvFact;
        pl.add("Radius", Radius) ;
        pl.add("Load", Load) ;
        pl.add("RodLength", RodLength) ;
        
        SOAPClient.invoke("Rotary.asmx", "UnitRotaryRodOnCenter", pl, true, list_callback) ;
    }
    else if (orientation == "R6")
    {
        var LengthOfSupport= element(col + "spnUCLength").ActualValue/element(col + "spnUCLength").ConvFact;
        var Load= element(col + "spnUCLoad").ActualValue/element(col + "spnUCLoad").ConvFact;
        pl.add("Load", Load) ;
        pl.add("LengthOfSupport", LengthOfSupport) ;
        SOAPClient.invoke("Rotary.asmx", "UnitRotaryPointLoad", pl, true, list_callback) ;
    }
    else if (orientation == "R7")
    {
        
        var ShortSideLength= element(col + "spnUCShortLength").ActualValue/element(col + "spnUCShortLength").ConvFact;
        var LongSideLength= element(col + "spnUCLength").ActualValue/element(col + "spnUCLength").ConvFact;
        var Height= element(col + "spnUCHeight").ActualValue/element(col + "spnUCHeight").ConvFact;
        var ShortSideLoad= element(col + "spnUCShortLoad").ActualValue/element(col + "spnUCShortLoad").ConvFact;
        var LongSideLoad= element(col + "spnUCLoad").ActualValue/element(col + "spnUCLoad").ConvFact;
        
        pl.add("ShortSideLength", ShortSideLength) ;
        pl.add("LongSideLength", LongSideLength) ;
        pl.add("Height", Height) ;
        pl.add("ShortSideLoad", ShortSideLoad) ;
        pl.add("LongSideLoad", LongSideLoad) ;
        
        SOAPClient.invoke("Rotary.asmx", "UnitRotaryPlateOffCenter", pl, true, list_callback) ;
    }
    else if (orientation == "R8")
    {
        var ShortSideLength= element("spnUCShortLength").ActualValue/element("spnUCShortLength").ConvFact;
        var LongSideLength= element("spnUCLength").ActualValue/element("spnUCLength").ConvFact;
        var Radius= element("spnUCRadius").ActualValue/element("spnUCRadius").ConvFact;
        var ShortSideLoad= element("spnUCShortLoad").ActualValue/element("spnUCShortLoad").ConvFact;
        var LongSideLoad= element("spnUCLoad").ActualValue/element("spnUCLoad").ConvFact;
        
        pl.add("ShortSideLength", ShortSideLength) ;
        pl.add("LongSideLength", LongSideLength) ;
        pl.add("Radius", Radius) ;
        pl.add("ShortSideLoad", ShortSideLoad) ;
        pl.add("LongSideLoad", LongSideLoad) ;
        
        SOAPClient.invoke("Rotary.asmx", "UnitRotaryRodOffCenter", pl, true, list_callback) ;        
    }
     
    return;    
}
    
    function list_callback(criticalVal)
    {
        var col = AppCol;
        if (col == "CompMode")
            col = "";
        
     // **********************************************
     // Without this section, if a user changes App1 inputs and quickly changes App2 inputs, only the App2 inputs
     // will be calculated and vice versa.
     
        App2busy = false;
        busy = false;
            
       if ((needCalc) || (App2needCalc))
       {  
            needCalc = false;
            App2needCalc = false;
            //rotList(waitColumnName);
            InputChanged(new DummyEvent(waitColumnName + "rbMetricInputs")) ; 
       }
       //*******************************************
        
        var inertia;
        var reqTorque;
        var totalInertia = (element(col + "spnUCInertiaAdd").ActualValue / element(col + "spnUCInertiaAdd").ConvFact) * element(col + "spnUCInertia").ConvFact + criticalVal.Inertia;
        var totalTorque = (element(col + "spnUCTorqueAdd").ActualValue / element(col + "spnUCTorqueAdd").ConvFact) * element(col + "spnUCReqTorque").ConvFact + criticalVal.ReqTorque;
        var peakVelocity;
        var acceleration;
        var kineticEnergy;
        // it's easier to store these rather than recalculate them at time of the details calculations
        var load; // load and CG are calculated at the time of critical values
        var cg;   // we don't need to display them, but they are needed for the details calculations
        var List;
        var selected;
        var selected2;
        var selected3;
        var selectedRotName = "";
        var selectedRotName2 = "";
        var selectedRotName3 = "";
        
        
        if ((compMode)&&(col==""))
            col = "CompMode";
            
         // Get selected rotary names. Getting the selected index is not enough since input changes can cause some
         // rotaries to get dropped off the list, changing the index that a particular rotary was in.
        if(compInit)
        {
            selected = getSelectedIndex("");
            selectedRotName = getSelectedRotName(selected, "");    
            
            selected2 = getSelectedIndex("", selected + 1);
            if (selected2 > 0)
            {
                selectedRotName2 = getSelectedRotName(selected2, "");
                selected3 = getSelectedIndex("", selected2 + 1);
                if (selected3 > 0)
                    selectedRotName3 = getSelectedRotName(selected3, "");
            }
            
        }
        else
        {
            selected = getSelectedIndex(col);
            selectedRotName = getSelectedRotName(selected, col); 
            
            selected2 = getSelectedIndex(col, selected + 1);
            if (selected2 > 0)
            {
                selectedRotName2 = getSelectedRotName(selected2, col);
                selected3 = getSelectedIndex(col, selected2 + 1);
                if (selected3 > 0)
                    selectedRotName3 = getSelectedRotName(selected3, col);
            }   
       } 
            
        try
        {
            SetupUC("imgDummyMinus", col + "txtInertia", "imgDummyPlus", col + "spnUCInertia", "inertia", element(col + 'spnUCInertia').innerText.trim(), criticalVal.Inertia, 1, 1, 5, 0, Infinity, true) ;        
            SetupUC("imgDummyMinus", col + "txtReqTorque", "imgDummyPlus", col + "spnUCReqTorque", "torque", element(col + 'spnUCReqTorque').innerText.trim(), criticalVal.ReqTorque, 1, 1, 4, 0, Infinity, true) ; 
           
            SetupUC("imgDummyMinus", col + "txtTotalInertia", "imgDummyPlus", col + "spnUCTotalInertia", "inertia", element(col + 'spnUCInertia').innerText.trim(), totalInertia, 1, 1, 5, 0, Infinity, true) ;        
            SetupUC("imgDummyMinus", col + "txtTotalReqTorque", "imgDummyPlus", col + "spnUCTotalReqTorque", "torque", element(col + 'spnUCTotalReqTorque').innerText.trim(), totalTorque, 1, 1, 4, 0, Infinity, true) ; 
          
            SetupUC("imgDummyMinus", col + "txtPeakVelocity", "imgDummyPlus", col + "spnUCPeakVelocity", "angularvelocity", element(col + 'spnUCPeakVelocity').innerText.trim(), criticalVal.PeakVelocity, 1, 1, 4, 0, Infinity, true) ;        
            SetupUC("imgDummyMinus", col + "txtAcceleration", "imgDummyPlus", col + "spnUCAcceleration", "angularacceleration", element(col + 'spnUCAcceleration').innerText.trim(), criticalVal.Acceleration, 1, 1, 4, 0, Infinity, true) ;        
            SetupUC("imgDummyMinus", col + "txtKineticEnergy", "imgDummyPlus", col + "spnUCKineticEnergy", "energy", element(col + 'spnUCKineticEnergy').innerText.trim(), criticalVal.KineticEnergy, 1, 1, 5, 0, Infinity, true) ;        
            SetupUC("imgDummyMinus", col + "txtDetailsLoad", "imgDummyPlus", col + "spnUCDetailsLoad", "weight", element(col + 'spnUCDetailsLoad').innerText.trim(), criticalVal.Load, 1, 1, 4, 0, Infinity, true) ;        
            SetupUC("imgDummyMinus", col + "txtDetailsCG", "imgDummyPlus", col + "spnUCDetailsCG", "length", element(col + 'spnUCDetailsCG').innerText.trim(), criticalVal.CG, 1, 1, 4, 0, Infinity, true) ;        
           
        }
        catch(e)
        {
            SetupUC("imgDummyMinus", col + "txtInertia", "imgDummyPlus", col + "spnUCInertia", "inertia", element(col + 'spnUCInertia').textContent.trim(), criticalVal.Inertia, 1, 1, 5, 0, Infinity, true) ;        
            SetupUC("imgDummyMinus", col + "txtReqTorque", "imgDummyPlus", col + "spnUCReqTorque", "torque", element(col + 'spnUCReqTorque').textContent.trim(), criticalVal.ReqTorque, 1, 1, 4, 0, Infinity, true) ;  
            
            SetupUC("imgDummyMinus", col + "txtTotalInertia", "imgDummyPlus", col + "spnUCTotalInertia", "inertia", element(col + 'spnUCInertia').textContent.trim(), totalInertia, 1, 1, 5, 0, Infinity, true) ;        
            SetupUC("imgDummyMinus", col + "txtTotalReqTorque", "imgDummyPlus", col + "spnUCTotalReqTorque", "torque", element(col + 'spnUCTotalReqTorque').textContent.trim(), totalTorque, 1, 1, 4, 0, Infinity, true) ; 
                  
            SetupUC("imgDummyMinus", col + "txtPeakVelocity", "imgDummyPlus", col + "spnUCPeakVelocity", "angularvelocity", element(col + 'spnUCPeakVelocity').textContent.trim(), criticalVal.PeakVelocity, 1, 1, 4, 0, Infinity, true) ;        
            SetupUC("imgDummyMinus", col + "txtAcceleration", "imgDummyPlus", col + "spnUCAcceleration", "angularacceleration", element(col + 'spnUCAcceleration').textContent.trim(), criticalVal.Acceleration, 1, 1, 4, 0, Infinity, true) ;        
            SetupUC("imgDummyMinus", col + "txtKineticEnergy", "imgDummyPlus", col + "spnUCKineticEnergy", "energy", element(col + 'spnUCKineticEnergy').textContent.trim(), criticalVal.KineticEnergy, 1, 1, 5, 0, Infinity, true) ;        
            SetupUC("imgDummyMinus", col + "txtDetailsLoad", "imgDummyPlus", col + "spnUCDetailsLoad", "weight", element(col + 'spnUCDetailsLoad').textContent.trim(), criticalVal.Load, 1, 1, 4, 0, Infinity, true) ;        
            SetupUC("imgDummyMinus", col + "txtDetailsCG", "imgDummyPlus", col + "spnUCDetailsCG", "length", element(col + 'spnUCDetailsCG').textContent.trim(), criticalVal.CG, 1, 1, 4, 0, Infinity, true) ;        
        
        }
        
        //*****
        
        
        
        var List = criticalVal.RotaryList;
        var lbPartList = element(col + "lbPartList");
        lbPartList.innerHTML = ""; // clear the list
        
        if (col == "CompMode")
        {
            element("tabOuts").style.display = "none";
        }
        else
        {
            element(col + "tabOuts").style.display = "none";
        }
       
        var intValidParts = 0;
        for (var i = 0; i < List.length; i++)
        {   
            if (List[i].indexOf("Fail")==-1)
                intValidParts++;
            if (addItem(List[i]))
            {
                if (col == "CompMode")
                {
                    element("tabOuts").style.display = "block";
                 }
                else
                {
                    element(col + "tabOuts").style.display = "block";
                }
                // Determine which which series name to display
               
                if (
                     (List[i].substr(0,4) == "3Rx1") ||
                     (List[i].substr(0,4) == "4Rx1") ||
                     (List[i].substr(0,4) == "5Rx1") ||
                     
                      (List[i].substr(0,4) == "3Rx6") ||
                     (List[i].substr(0,4) == "4Rx6") ||
                     (List[i].substr(0,4) == "5Rx6")   
                     )
                     series = "Multi-Position 2000/8000";
                
                else if ((List[i].substr(0,3) == "Rx1") || (List[i].substr(0,3) == "Rx1") ||
                            (List[i].substr(0,3) == "Rx6") || (List[i].substr(0,3) == "Rx6"))
                    series = "1000-8000";   
                else if (List[i].substr(0,3) == "RCC")
                    series = "RCC";  
                else if (
                            (List[i].substr(0,4) == "3Rx9") || 
                           (List[i].substr(0,3) == "Rx9") || 
                           (List[i].substr(0,4) == "3Rx3") || 
                           (List[i].substr(0,3) == "Rx3") 
                         )
                           series = "Air/Oil Tandem 2000/8000";
                else if (List[i].substr(0,4) == "3RID")
                        series = "RI";
                
                else
                    series = List[i].substr(0,2);
               // series = "TEST";
                    
                   
                    
               if (lstSrs != series)
                {
                    lstSrs = series;
                    var optGroup = document.createElement("optgroup") ;

		            optGroup.label = series + "..." ;
		       
		            opt2=new Option(series, series, false);
                    opt2.label = series + "...";
                    lbPartList.appendChild(optGroup);
                }
                
                option=new Option(List[i], List[i], false);
                //option.innerHTML = List[i].substr(0, 50);
                option.innerHTML = List[i];
                lbPartList.appendChild(option);
            }
        }
    
         
        var select1 = 0; // if nothing is selected, set to 0
        var select2 = 0;
        var select3 = 0;
        for (var i=0; i <= lbPartList.options.length-1; i++) 
        {   
            if (lbPartList.options[i].innerHTML.indexOf(selectedRotName)>-1) 
            { 
                select1 = i;
                break;
            }
        }  
        if(selected2 > 0)
        {
            for (var i=select1 + 1; i <= lbPartList.options.length-1; i++) 
            {
                if (lbPartList.options[i].innerHTML.indexOf(selectedRotName2)>-1)
                {
                    select2 = i;
                    break;
                } 
            }
            if(selected3 > 0)
            {
                for (var i=select2 + 1; i <= lbPartList.options.length-1; i++) 
                {
                    if (lbPartList.options[i].innerHTML.indexOf(selectedRotName3)>-1)
                    {
                        select3 = i;
                        break;
                    } 
                }
            }
        }
       
        try
        {
              if(select2 > 0)
              {
                    
                    var debug = 0;
              }
                
              lbPartList.options[select1].selected = true;
              if (select2 > 0)
                lbPartList.options[select2].selected = true;
              if (select3 > 0)
                lbPartList.options[select3].selected = true;
                  
                fillDetails(col);      
                
//                  
        }
        catch(e)
        {
            window.setTimeout("element('lbPartList').selectedIndex = 0; fillDetails();", 200);
        }        
        if (col == "CompMode")
        {
             if (
                    (!element("CompModecbExternalShocks").checked) &&
                    (intValidParts == 0)
                 ) 
             {
                alert("No valid parts. Try checking the external shocks option.");
                element("CompModespnExternalShocks").style.backgroundColor = "ff030D";
             }
        }
        else
        {   
            if (   
                (!element(col + "cbExternalShocks").checked) &&
                (intValidParts == 0)
            ) 
            {
                alert("No valid parts. Try checking the external shocks option.");
                element(col + "spnExternalShocks").style.backgroundColor = "ff030D";
            }
        }       
    }
    
    
    function addItem(series)
    {
        
        var retVal = false;
        if ((element("cbRCC").checked && series.indexOf("RCC")>-1)
        || (element("cbRL").checked && series.indexOf("RL")>-1)
        || (element("cbRA").checked && series.indexOf("RA")>-1)
        || (element("cbRI").checked && series.indexOf("RI")>-1)
        || (element("cbR1K8K").checked && series.substring(0,1) == 'R' &&
            (series.indexOf("Rx1")>-1 || 
             series.indexOf("Rx5")>-1 ||
             series.indexOf("Rx6")>-1 || 
             series.indexOf("Rx1")>-1 ||
             series.indexOf("Rx5")>-1 || 
             series.indexOf("Rx6")>-1) )
        || (element("cbRAO2K8K").checked &&  
            (series.indexOf("Rx3R")>-1 || 
             series.indexOf("Rx8R")>-1 ||
             series.indexOf("Rx9R")>-1) )
        || (element("cbRMP2K8K").checked && series.substring(0,1)!= 'R' &&
            (series.indexOf("Rx1")>-1 || 
             series.indexOf("Rx5")>-1 ||
             series.indexOf("Rx6")>-1 || 
             series.indexOf("Rx1")>-1 ||
             series.indexOf("Rx5")>-1 || 
             series.indexOf("Rx6")>-1) )
        || (element("cbRF").checked  && series.indexOf("RF")>-1))
        {
            
            retVal = true;
        }
    
        return retVal;
        //***********************************************************************************
    }