﻿// JScript File
var safetyFactor = 4;
var frictionGrip = false;
function CalculateList(col)
{    
    var app = (col == undefined) ? resultsColumn : col;
    
    if ((col == "") && (element("rbCompareMode").checked))
    {
        element("CompModedivResultsMsg").innerHTML = element("hidCalcResults").value;
        element("divResultsMsg").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.";
//    }
    
    element(app + "divResultsMsg").innerHTML = element("hidCalcResults").value;      
    element(AppCol + "tabOuts").style.display = "none";
    
    // gather user inputs and send to the webservice for calculations.
    var pl = new SOAPClientParameters() ;

    var AppColumn = (AppCol == "" ? 1 : 2);
    if (Language == null)
	{
        Language = element("UserLanguageStorage").value;
    }
    
    // adjust lang input to correct name so the picky thing runs...
    if (Language == "en")
        Language = "English"
    else if (Language == "de")
        Language = "German"
    else if (Language == "es")
        Language = "Spanish"
        
    //var Language = "English";
    //var unitSystem = element("rbImperialGrippers").checked ? "Imperial" : "Metric";

    if (element("rbImperialGrippers").checked) {
        var unitSystem = "Imperial";

    }else if (element("rbMetricGrippers").checked)
    {
        var unitSystem = "Metric";
    }else
    {
        var unitSystem = "Imperial";
    }
    
    var type = element("rbAngular").checked ? "Angular" : "Parallel"; 
    var weight = element(AppCol + "spnUCWeight").ActualValue/element(AppCol + "spnUCWeight").ConvFact;
    var distance = element(AppCol + "spnUCDistance").ActualValue/element(AppCol + "spnUCDistance").ConvFact; 
    var pressure = element(AppCol + "spnUCPressure").ActualValue/element(AppCol + "spnUCPressure").ConvFact; 
    var contact = element(AppCol + "rbInternalGrip").checked ? "Internal" : "External"; 
    var sprOption;
    var travel;

    // setup safty factor
    if (element(AppCol + "rbFrictionGrip").checked) {
        if (element("rb3jaw").checked) {
            safetyFactor = 9;
        } else {
            safetyFactor = 6;
        }
    }
    else {
        if (element("rb3jaw").checked) {
            safetyFactor = 6;
        } else {
            safetyFactor = 4;
        }
    }
   
    
    
    if (type == "Angular")
    {
        travel = element(AppCol + "spnUCJaw").ActualValue/element(AppCol + "spnUCJaw").ConvFact;        
    }
    else
    {
        if (element("rbImperialGrippers").checked) {
            travel = element(AppCol + "spnUCJaw_P").ActualValue / element(AppCol + "spnUCJaw_P").ConvFact;
        }
        else if (element("rbMetricGrippers").checked) {
            travel = metricOnly(element(AppCol + "spnUCJaw_P"), element(AppCol + "txtJaw_P"));
        }
        else {
            travel = element(AppCol + "spnUCJaw_P").ActualValue / element(AppCol + "spnUCJaw_P").ConvFact;
        }
    }
    
    
        
    
         
    
    gripperType = type;
    if (element("rbSpringsYes").checked)
    {
        switch (element(AppCol + "selSpringOptions").selectedIndex)
        {
            
            case 0:
            {
                sprOption = "SpringGripsPartWithoutPressure";
                break;
            }
            case 1:
            {
                sprOption = "SpringReleasesPartWithoutPressure";
                break;
            }
            case 2:
            {
                sprOption = "SpringAssistsInGripping";
                break;
            }
            default:
            {
                sprOption = "SpringAssistsInReleasing";
                break;
            }            
        }
    }
    else
    {
        switch (element(AppCol + "selNoSpringOptions").selectedIndex)
        {
            case 0:
            {
                sprOption = "PermitSpringAssistOnGripping";
                break;
            }    
            default:
            {
                sprOption = "ForbidSpringAssistInSizing";
                break;        
            }
        }    
    }

    // set COF value
    var currentCOF = element(AppCol + "txtCOF").value
    currentCOF = parseFloat(currentCOF);

    // is friction grip?
    if (element(AppCol + "rbFrictionGrip").checked) {
        frictionGrip = true;
    }
    else {
        frictionGrip = false;
    }   
       
    var sortOrder = element(resultsColumn + "rbBySeries").checked ? 0 : 1; // true if by series, false if by weight
    //sortOrder = 0;  // Always sort by series - requested by Ben 10/8/08

    // set Tooling Weight per Jaw value
    var TWpJ = element(AppCol + "spnUCTWpJ").ActualValue / element(AppCol + "spnUCTWpJ").ConvFact;

    // set Tooling Weight per Jaw value
    //var partWeight = element(AppCol + "spnUCPartWeight").ActualValue / element(AppCol + "spnUCPartWeight").ConvFact;


    // set the orientation selected
    if (element(AppCol + "rbHorizontalOrientation").checked) {
        var orientation = "Horizontal";
    }
    else if (element(AppCol + "rbVerticalOrientation").checked) {
        var orientation = "Vertical";
    }
    else if (element(AppCol + "rbVerticalOrientationSide").checked) {
        var orientation = "VerticalSide";
    } 



    // add the values to the webservice call 
    pl.add("AppColumn", AppColumn );
    // pl.add("SeriesFlags", SeriesFlags );
    pl.add("Language", Language );
    pl.add("unitSystem", unitSystem );
    pl.add("type", type);
    pl.add("contact", contact);
    pl.add("sprOption", sprOption);
    pl.add("weight", weight);
    pl.add("distance", distance);
    pl.add("pressure", pressure);
    pl.add("sortOrder", sortOrder);
    pl.add("grp190191Flag", element("cb190191").checked);
    pl.add("grpGRDFlag", element("cbGRD").checked);
    pl.add("grp5300Flag", element("cb5300").checked || element("cb5300_P").checked);
    pl.add("grp7900Flag", false);
    pl.add("grp7900_2jawFlag", false);
    pl.add("grp7900_3jawFlag", false);
    pl.add("grpGRCFlag", element("cbGRC").checked);
    pl.add("grpGRTFlag", element("cbGRT_3").checked);
    pl.add("grp8600Flag", false);
    pl.add("grpGRWFlag", element("cbGRW").checked);
    pl.add("grpGRLFlag", element("cbGRL").checked);
    pl.add("grpGRRFlag", element("cbGRR").checked);
    pl.add("grpGRSFlag", element("cbGRS").checked);
    pl.add("grpGRKFlag", element("cbGRK").checked);
    pl.add("grpGRAFlag", element("cbGRA").checked);
    pl.add("grpEGRKFlag", element("cbEGRK").checked);
    pl.add("grpGRFFlag", element("cbGRF").checked);
    pl.add("grp8400_190Flag", element("cb8400").checked);
    pl.add("grp8600_2jawFlag", false);
    pl.add("grp8600_3jawFlag", false);
    pl.add("grpGRBFlag", element("cbGRB").checked);
    pl.add("showFailed", element(resultsColumn + "cbFailed").checked);
    pl.add("travel", travel);
    pl.add("safetyFactor", safetyFactor);
    pl.add("frictionGrip", frictionGrip);
    pl.add("COF", currentCOF);
    pl.add("toolingWeightPerJaw", TWpJ);
    pl.add("partWeight", weight);
    pl.add("orientation", orientation);
    
    SOAPClient.invoke("Gripper.asmx", "ListGrippers", pl, true, list_callback) ;
    
    return;
}

function list_callback(r)
{
    List = r.gripperList;
    var app = AppCol;
    var lbPartList = element(resultsColumn + "lbPartList"); 
    
//     // **********************************************
//     // 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 series = "";
    var lastSeries = " ";
    var selected;  // = getSelectedIndex(resultsColumn,0);
    var selected2;
    var selected3;
    var selectedGripperName = "";
    var selectedGripperName2 = "";
    var selectedGripperName3 = "";
         
    element(resultsColumn + "tdGripperCount").innerHTML =  List.length + element("hidGripperCount").value;
    
    var failedCount = r.failedCount;
    var marginalCount = r.marginalCount;
    
    element(resultsColumn + "spnFailed").innerHTML = element("hidShowFailed").value + " (" + r.failedCount + ")";
    element(resultsColumn + "spnMarginal").innerHTML = element("hidShowMarginal").value + " (" + r.marginalCount + ")";
   
    // Get selected gripper names. Getting the selected index is not enough since input changes can cause some
    // grippers to get dropped off the list, changing the index that a particular gripper was in.
    if(compInit)
    {        
        selected = getSelectedIndex("");
        selectedGripperName = getSelectedGripperName(selected, "");    
        
        selected2 = getSelectedIndex("", selected + 1);
        if (selected2 > 0)
        {
            selectedGripperName2 = getSelectedGripperName(selected2, "");   
            selected3 = getSelectedIndex("", selected2 + 1);
            if (selected3 > 0)
                selectedGripperName3 = getSelectedGripperName(selected3, "");
        }
          
    }
    else
    {
        selected = getSelectedIndex(resultsColumn);
        selectedGripperName = getSelectedGripperName(selected, resultsColumn); 
        
        selected2 = getSelectedIndex(resultsColumn, selected + 1);
        if (selected2 > 0)
        {
            selectedGripperName2 = getSelectedGripperName(selected2, resultsColumn);
            selected3 = getSelectedIndex(resultsColumn, selected2 + 1);
            if (selected3 > 0)
                selectedGripperName3 = getSelectedGripperName(selected3, resultsColumn);
        }   
   } 
    lbPartList.innerHTML = "";
    for (var i = 0; i < List.length; i++)
    {
        var s = List[i].s;
        switch (List[i].s)
        {
            case "series190_191":
            {
                series = "Series 190/191";
                break;
            }
            case "GRA":
            {
                series = "Series GRA";
                break;
            }
            case "GRD":
            {
                series = "Series GRD";
                break;
            }
            case "series530":
            {
                series = "Series 5300";
                break;
            }
            case "series7900":
            {
                series = "Series 7900";
                break;
            }
            case "series7900_2jaw":
            {
                series = "Series 7900 (2 jaw)";
                break;
            }
            case "series7900_3jaw":
            {
                series = "Series 7900 (3 jaw)";
                break;
            }
            case "series8400_190":
            {
                series = "Series 8400";
                break;
            }
            case "GRB":
            {
                series = "Series GRB";
                break;
            }
            case "GRL":
            {
                series = "Series GRL";
                break;
            }
            case "GRC":
            {
                series = "Series GRC";
                break;
            }
            case "GRT":
            {
                series = "Series GRT";
                break;
            }
             case "GRS":
            {
                series = "Series GRS";
                break;
            }
             case "GRK":
            {
                series = "Series GRK";
                break;
            }
            case "EGRK":
            {
                series = "Series EGRK";
                break;
            }
            case "GRR":
            {
                series = "Series GRR";
                break;
            }
            case "GRW":
            {
                series = "Series GRW";
                break;
            }
            case "GRF":
            {
                series = "Series GRF";
                break;
            }
            case "series8600":
            {
                series = "Series 8600";
                break;
            }
            case "series8600_2jaw":
            {
                series = "Series 8600 (2 jaw)";
                break;
            }
            default:
            {
                series = "Series 8600 (3 jaw)";
                break;
            }
        }
        
        if (lastSeries != series && element(resultsColumn + "rbBySeries").checked)
       //if (lastSeries != series)
        {
            lastSeries = series;
            var optGroup = document.createElement("optgroup") ;

            optGroup.label = series + "..." ;
       
            opt2=new Option(series, series, false);
            opt2.label = series + "...";
            lbPartList.appendChild(optGroup);
        }
        var unit;
        var weight = List[i].wt;
        
        if(compInit == false) // Standard Mode Only
        {
            if (element("rbMetricInputs").checked)
            {
                weight = weight * 0.45359;
                unit = " kg"
                }
            else
            {
                unit = " lb";
            }
        }
        else // Compare Mode
        {
            switch (resultsColumn)
            {
                case "App2":
                {
                    if (element("App2rbMetricInputs").checked)
                    {
                        weight = weight * 0.45359;
                        unit = " kg"
                        }
                    else
                    {
                        unit = " lb";
                    }
                    break;
                }
                case "CompMode":
                {
                    if (element("rbMetricInputs").checked)
                    {
                        weight = weight * 0.45359;
                        unit = " kg"
                        }
                    else
                    {
                        unit = " lb";
                    }
                    break;
                }
            }
        }
        
        // round to nearest thousandth
        weight = weight * 1000;    
        weight = Math.round(weight);
        weight = weight / 1000;
        
        var optionName = getOptionText(List[i].n,List[i].wt,resultsColumn);
        //alert("In list_callback optionName = " + optionName);
        
        option=new Option(optionName , optionName, false);            
        option.innerHTML = optionName ;             
       
        lbPartList.appendChild(option);
    } 
     
     element(resultsColumn + "divResultsMsg").innerHTML = "";
     
     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(selectedGripperName)>-1) 
            { 
                select1 = i;
                break;
            }
        }  
        if(selected2 > 0)
        {
            for (var i=select1 + 1; i <= lbPartList.options.length-1; i++) 
            {
                if (lbPartList.options[i].innerHTML.indexOf(selectedGripperName2)>-1)
                {
                    select2 = i;
                    break;
                } 
            }
            if(selected3 > 0)
            {
                for (var i=select2 + 1; i <= lbPartList.options.length-1; i++) 
                {
                    if (lbPartList.options[i].innerHTML.indexOf(selectedGripperName3)>-1)
                    {
                        select3 = i;
                        break;
                    } 
                }
            }
        }
                
    // if none selected, try again removing FSE2 or FSR2 from name
    if (select1 == 0)
    {
        selectedGripperName = removeOption(selectedGripperName);
        for (var i=0; i <= lbPartList.options.length-1; i++) 
        {   
            if (lbPartList.options[i].innerHTML.indexOf(selectedGripperName)>-1) 
            { 
                select1 = i;
                break;
            }
        }  
    }
    if (select2 == 0)
    {
        selectedGripperName2 = removeOption(selectedGripperName2);
        for (var i=0; i <= lbPartList.options.length-1; i++) 
        {   
            if (lbPartList.options[i].innerHTML.indexOf(selectedGripperName2)>-1) 
            { 
                select2 = i;
                break;
            }
        }  
    }
    if (select3 == 0)
    {
        selectedGripperName3 = removeOption(selectedGripperName3);
        for (var i=0; i <= lbPartList.options.length-1; i++) 
        {   
            if (lbPartList.options[i].innerHTML.indexOf(selectedGripperName3)>-1) 
            { 
                select3 = i;
                break;
            }
        }  
    }
        
    try
        {
            //lbPartList.selectedIndex = selected; 
            lbPartList.options[select1].selected = true;
              if (select2 > 0)
                lbPartList.options[select2].selected = true;
              if (select3 > 0)
                lbPartList.options[select3].selected = true;   
            fillDetails(AppCol);
        }
        catch(e)
        {
            //alert("Error populating results."); 
        }
    
    
    return;
}

function getOptionText(n, w, col)
{
    var maxLength = 32;
    var txt = n;
    var weight = w;
    var retVal = "";
    
 
            switch (resultsColumn)
            {
                case "":
                {
                    if (element("rbMetricInputs").checked)
                    {
                        weight = weight * 0.45359;
                        unit = " kg"
                        }
                    else
                    {
                        unit = " lb";
                    }
                    break;
                }
                case "App2":
                {
                    if (element("App2rbMetricInputs").checked)
                    {
                        weight = weight * 0.45359;
                        unit = " kg"
                        }
                    else
                    {
                        unit = " lb";
                    }
                    break;
                }
                case "CompMode":
                {
                    if (element("rbMetricInputs").checked)
                    {
                        weight = weight * 0.45359;
                        unit = " kg"
                        }
                    else
                    {
                        unit = " lb";
                    }
                    break;
                }
            }
        
        
        // round to nearest thousandth
        weight = weight * 1000;    
        weight = Math.round(weight);
        weight = weight / 1000;
        
        for (var i =txt.length; i < maxLength; i++)
            txt = txt + "&nbsp;";
       // for (length;length < maxLength; length++)
        //    txt = txt + " ";
            
        retVal = txt + "(" + weight + " " + unit + ")";
        //retVal = txt + weight + " " + unit;
        return retVal;
}

function getSelectedIndex(col, startIndex)
{
    var lbPartList = element(col + "lbPartList");
    var selected = 0; // if nothing is selected, set to 0
    var index;
    if (startIndex == undefined)
        index = 0;
    else
        index = startIndex;
    for (var i=index; i <= lbPartList.options.length - 1; i++) 
    {   
        if (lbPartList.options[i].selected) 
        { 
            selected = i;
            break;
        }
    }    
    return selected;
}

function getSelectedGripperName(index, col)
{
    var lbPartList = element(col + "lbPartList"); 
    var gripperName; 
   
    
    try
    {
         gripperName = lbPartList.options[index].innerHTML;    
    }
    catch(e)
    {
        try
        {
            gripperName = lbPartList.options[0].innerHTML;  
        }
        catch(e)
        {
            gripperName = "";
        }  
    }
    if (gripperName.substr(0,5) == "GRS33")
    {
        var debug = 0;
    }
    gripperName = removeStatus(gripperName);   
    
    
    return gripperName;    
}

function removeOption(name)
{
    var index = name.lastIndexOf("FSE2");
    if (index == -1)
        index = name.lastIndexOf("FSR2");
        
    if (index > -1)
    {
        name = name.substr(0,index - 1);
    }
    
    return name;
}

function removeStatus(name)
{
    // Removed 04/28/2009 - MRL
    // It's not enough to just remove the units of measure.. the whole number changes when converted
    //var index = name.lastIndexOf(" ");
    var index = name.lastIndexOf("(");
    name = name.substr(0,index);
    
        
    return name;
}

 function initComp(col)
 {
    compInit = true;
    CalculateList(col);
    //compInit = false;
 }
 
 function metricOnly(spn, txt)
 {
    var units;
    var value;
    value = txt.value.replace(/\,/g, "") ;
    value = parseFloat(value);
    
    if(spn.innerHTML.substr(0,1) == "m")
    {
        if(spn.innerHTML.substr(0,2) == "mm")
            units = "mm";
        else
            units = "m";
    }
    else if (spn.innerHTML.substr(0,2) == "cm")
        units = "cm";
    else
        units = "not metric";
    
    if (units == "mm")
        value = value;
    else if (units == "cm")
        value = value * 10;
    else if (units == "m")
        value = value * 1000;
    
    else
    {
        // is the value in inches?
        if (spn.innerHTML.substr(0,2) == element("hidIn").value.substr(0,2))
        {
            units = element("hidIn").value;
            value = value * 25.4;
        }
        else
        {
            units = element("hidFt").value;
            value = value * 304.8;            
        }
    }       
    return value;
   
 }
