var gearCounter = 0;
var CGN = 0;
var gear = new Array();
var gears = new Array();
gears[0] = 'none';
var errorItems = new Array();
var errorReasons = new Array();
var pitchBacklash = new Array();
var backlashID = new Array();
var usingCustom = false;
var decimalCheck = /^((\d+(\.\d*)?)|((\d*\.)?\d+))$/;
var fractionCheck = /^[0-9]+\/{1}[1-9]+[0]*$/;
var decFracCheck = /^((\d+(([-]?(\d)+)(?=\/{1}))?((\/)?(?!\.))?(\d)+)|(\d+(\.\d*)?(\d)*)|((\d*\.)?\d+))$/;
var stdKwyWfrac = new Array('3/32', '1/8', '3/16', '1/4', '5/16', '3/8', '1/2', '5/8', '3/4', '7/8', '1');
var stdKwyDfrac = new Array('3/64', '1/16', '3/32', '1/8', '5/32', '3/16', '1/4', '5/16', '3/8', '7/16', '1/2');
var stdKwyWdec = new Array('-', '-', '-', '-', .0625, .0938, .125, .1875, .250, .3125, .375, .500, .625, .750, .875, 1);
var stdKwyDdec = new Array('-', '-', '-', '-', .0313, .0469, .0625, .0938, .125, .1563, .1875, .250, .3125, .375, .4375, .500);
var stdSSdec = new Array(0, 1, 2, 3, 6, 10, 20, 30, 40, 40, 50, 50, 60, 70, 80, 90);
var stdBoreFrac = new Array('7/16', '9/16', '7/8', '1-1/4', '1-3/8', '1-3/4', '2-1/4', '2-3/4', '3-1/4', '3-3/4', '4-1/2');
var stdBoreDecL = new Array(.0156, .0625, .125, .1875, .250, .3125, .5, .625, .9375, 1.3125, 1.4375, 1.8125, 2.3125, 2.8125, 3.3125, 3.8125);
var stdBoreDecH = new Array(.0625, .125, .1875, .250, .3125, .4375, .5625, .875, 1.25, 1.375, 1.75, 2.25, 2.75, 3.25, 3.75, 4.5);
var stdSS = new Array('10-32', '1/4-20', '5/16-18', '3/8-16', '3/8-16', '1/2-13', '1/2-13', '5/8-11', '3/4-10', '7/8-9', '1-8');

function createGear(index, custom, dup)
{
    var elId = getElemID(index);
    var dupLastGear = false;
    var lastGearNum = '';
    
    if ($('startHere').visible()) 
    {
        $('startHere').hide();
        $('cgCover').hide();
        $('cgTeeth').value = 20;
        $('cgBore').value = .3;
        $('cgFace').value = 3;
    }
    else 
    {
        if (dup == 'dup') 
        {
            dupLastGear = true;
            lastGearNum = index;
        }
    }
    
    if (!$('opaqBack').visible()) 
    {
        $('opaqBack').show();
    }
    
    if (!$('customGearDiv').visible()) 
    {
        $('customGearDiv').show();
    }
    $('customGearDiv').style.top = 120 + findScrollY($(window)) + 'px';
    
    $('cgNewPartBtn').value = 'Create another item';
    clearCover('hide');
    
    gearCounter++;
    var gearNum = gear.push(ct) - 1;
    if (gearNum == 0) 
    {
        gearNum = 1;
    }
    CGN = gearNum;
    
    bcm2 = '';
    bcm3 = '';
    bcm4 = '';
    
    //build stock gears in this if...then
    //the arrays are there to accomodate the old "stock" specs since there are no counterbore and multiple kwys
    if (custom === false) 
    {
        var specArray = new Array();
        var specArrayCurrent = new Array();
        ignore = new Array('CAD', 'HT', 'CUSTOMIZE', 'QUOTE');
        
        switch ($('mainGearType').value.toLowerCase())
        {
            case "spur":
                specArray = new Array('PITCH', 'TEETH', 'PD', 'OD', 'PA', 'STYLE', 'BORE', 'FACE', 'HD', 'HP', 'OAL', 'NORMP', 'HAND', 'KWY', 'HA', 'MD', 'RATIO', 'LA', 'STARTS', 'WORMLEAD', 'LEAD', 'KWY2', 'RACKTH', 'PLINE', 'STEMLEN', 'HD2', 'HP2', 'KEYNUM', 'KEYW', 'KEYD', 'CBNUM', 'CBDIAM1', 'CBDEPTH1', 'CBDIAM2', 'CBDEPTH2', 'mainMaterial');
                specArrayCurrent = new Array('cgPitch', 'cgTeeth', 'cgPD', 'cgOD', 'cgPA', 'cgHubStyle', 'cgBore', 'cgFace', 'cgHD1', 'cgHP1', '--', '--', '--', '--', '--', '--', '--', '--', '--', '--', '--', '--', '--', '--', '--', 'cgHD2', 'cgHP2', 'cgKeyNum', 'cgKeyWidth', 'cgKeyDepth', 'cgCBnum', 'cgCBdiameter1', 'cgCBdepth1', 'cgCBdiameter2', 'cgCBdepth2', 'cgMaterial');
                break;
            case "helical":
                specArray = new Array('PITCH', 'NORMP', 'TEETH', 'PD', 'OD', 'PA', 'STYLE', 'BORE', 'FACE', 'HD', 'HP', 'OAL', 'HAND', 'KWY', 'HA', 'MD', 'RATIO', 'LA', 'STARTS', 'WORMLEAD', 'LEAD', 'KWY2', 'RACKTH', 'PLINE', 'STEMLEN', 'HD2', 'HP2', 'KEYNUM', 'KEYW', 'KEYD', 'CBNUM', 'CBDIAM1', 'CBDEPTH1', 'CBDIAM2', 'CBDEPTH2', 'mainMaterial');
                specArrayCurrent = new Array('cgTDP', 'cgPitch', 'cgTeeth', 'cgPD', 'cgOD', 'cgPA', 'cgHubStyle', 'cgBore', 'cgFace', 'cgHD1', 'cgHP1', '--', 'cgHand', '--', '--', '--', '--', '--', '--', '--', '--', '--', '--', '--', '--', 'cgHD2', 'cgHP2', 'cgKeyNum', 'cgKeyWidth', 'cgKeyDepth', 'cgCBnum', 'cgCBdiameter1', 'cgCBdepth1', 'cgCBdiameter2', 'cgCBdepth2', 'cgMaterial');
                break;
        }
        
        $('cgGearType').value = $('mainGearType').value;
        
        for (var i = 0; i < specArray.length; i++) 
        {
            try 
            {
                if (index != 'none') 
                {
                    if (specArrayCurrent[i] != '--') 
                    {
                        //bcm4 += specArray[i] + ' ' + $(specArray[i] + index).innerHTML ;
                        
                        if (specArray[i] != 'mainMaterial') 
                        {
                            $(specArrayCurrent[i]).value = $(specArray[i] + index).innerHTML == 'undefined' ? '0' : $(specArray[i] + index).innerHTML == '--' ? '' : $(specArray[i] + index).innerHTML;
                            
                            if ($('STYLE' + index).innerHTML != 'C' && (specArray[i] == 'HD2' || specArray[i] == 'HP2')) 
                            {
                                $(specArrayCurrent[i]).value = '';
                            }
                                                        
                            //For helicals, worms, and worm gears
                            if (specArray[i] == 'HAND') 
                            {
                                if ($('HAND' + index).innerHTML == 'L') 
                                {
                                    $(specArrayCurrent[i]).value = 'left';
                                }
                                if ($('HAND' + index).innerHTML == 'R') 
                                {
                                    $(specArrayCurrent[i]).value = 'right';
                                }
                            }
                        }
                        else 
                        {
                            $(specArrayCurrent[i]).value = $('mainMaterial').value;
                        }
                    }
                }
                else 
                {
                    $(specArrayCurrent[i]).value = '';
                }
            } 
            catch (err) 
            {
                if ($(specArrayCurrent[i]).type.toString().indexOf('select') == '-1') 
                {
                    if (!$(specArrayCurrent[i]).disabled) 
                    {
                        $(specArrayCurrent[i]).value = '';
                    }
                    else 
                    {
                        $(specArrayCurrent[i]).value = 0;
                    }
                }
                else 
                {
                    $(specArrayCurrent[i]).value = 0;
                }
            }
        }
    }
    //alert(bcm4);
    bcm9 = '';
    //alert($('HAND' + index).innerHTML);
    if (dupLastGear) 
    {
        if ($('cgGearType').value.toLowerCase() == 'spur') 
        {
            gear[gearCounter] = new Spur(gear[lastGearNum].teeth, gear[lastGearNum].pitch);
        }
        if ($('cgGearType').value.toLowerCase() == 'helical') 
        {
            if ($('cgHA').value == null || $('cgHA').value == '' || $('cgHA').value == 'undefined') 
            {
                $('cgHA').value = 45;
            }
            
            if ($('cgHand').value == null || $('cgHand').value == '' || $('cgHand').value == 'undefined') 
            {
                $('cgHand').value = 'right';
            }
            
            gear[gearCounter] = new Helical(gear[lastGearNum].teeth, gear[lastGearNum].pitch, $('cgHA').value, $('cgHand').value);
            
            //change to disregard specs that shouldn't be copied
            for (var i in gear[lastGearNum]) 
            {
                bcm9 += i + ' ' + typeof i + ' val=' + gear[lastGearNum][i] + '\r\n';
                if (typeof gear[gearCounter][i] != 'function') 
                {
                    gear[gearCounter][i] = gear[lastGearNum][i];
                }
                
                gear[gearCounter].getTDP();
            }
        }
        
        if (gear[gearCounter].geartype.toLowerCase() == gear[lastGearNum].geartype.toLowerCase()) 
        {
            for (var i in gear[lastGearNum]) 
            {
                bcm9 += i + ' ' + typeof i + ' val=' + gear[lastGearNum][i] + '\r\n';
                
                gear[gearCounter][i] = gear[lastGearNum][i];
            }
        }
    }
    else 
    {
        switch ($('cgGearType').value.toLowerCase())
        {
            case "spur":
                //alert('creating spur');
                gear[gearCounter] = new Spur($('cgTeeth').value, $('cgPitch').value);
                break;
            case "helical":
                //alert('creating helical');
                if ($('cgHA').value == null || $('cgHA').value == '') 
                {
                    $('cgHA').value = 45;
                }
                gear[gearCounter] = new Helical($('cgTeeth').value, $('cgPitch').value, $('cgHA').value, $('cgHand').value);
                break;
        }
    }
    
    if (custom === false) 
    {
        gear[CGN].keynum = 0;
    }
    
    createCGpartList('Item ' + CGN, 'cgPart' + CGN, CGN);
    updateGear();
    highlightCurrentGear(CGN);
}

function customize(idNum)
{
    var partno = $('PARTNO' + idNum).innerHTML;
    getPage('Tech_Tools/' + folder + '/findCustomParts.php?partno=' + partno + '&forMod=true', 'fillCustomParts');
}

function saveCurrent(gearn)
{
    if (!$('startHere').visible()) 
    {
        showGear(gearn);
        
        var email = getEmail();
        if (email == '') 
        {
            var savePosX = findPosX($('savePartEmailBtn1'));
            var savePosY = findPosY($('savePartEmailBtn1'));
            $('savePartEmail').value = email;
            $('savePartEmailDiv').style.top = parseInt(savePosY) + 'px';
            $('savePartEmailDiv').style.left = parseInt(savePosX) + 'px';
            $('savePartEmailDiv').show();
            $('savePartEmail').focus();
        }
        else 
        {
            setEmail(email);
            if ($('savedLabel' + CGN).innerHTML != 'saved') 
            {
                //$('savePartEmailBtn1').value = 'Saving...';
                $('savePartEmailBtn1').innerHTML = '<img src="/images/cgSave.gif" alt="" class="cgSaveButton" /> Saving...';
                getNewPartno('savePartEmail');
            }
        }
    }
}

function keepPartsOpen(e)
{
    var elId = getElemID(e) == 'error' ? e : getElemID(e);
    var len = $(elId).src.length;
    var offOn = $(elId).src.substr(parseInt(len) - 6, 2);
    //the variable "keepMyPartsOpen" is global. created in partSearch.php
    if (offOn.toLowerCase() == 'on') 
    {
        $(elId).src = '/images/keepOpenOff.gif';
        keepMyPartsOpen = 'off';
    }
    else 
    {
        $(elId).src = '/images/keepOpenOn.gif';
        keepMyPartsOpen = 'on';
    }
}

function keepPartsMsg(e)
{
    var elId = getElemID(e) == 'error' ? e : getElemID(e);
    var len = $(elId).src.length;
    var offOn = $(elId).src.substr(parseInt(len) - 6, 2);
    
    //the variable "keepMyPartsOpen" is global. created in partSearch.php
    if (offOn.toLowerCase() == 'on') 
    {
        showMessages(elId, 'Click this to hide "My Parts" after selecting a part.', '#ffffff,#666666,2px solid #ffffff');
    }
    else 
    {
        showMessages(elId, 'Click this to keep "My Parts" visible after selecting a part.', '#ffffff,#666666,2px solid #ffffff');
    }
}

function showCGinst(e)
{
    var elId = getElemID(e) == 'error' ? e : getElemID(e);
    var helpPos = elId.indexOf('Help');
    var elem = elId.substr(0, helpPos).toUpperCase();
    var msg = '';
    var addImage = '';
    var cgMsg = new Array();
    cgMsg['SPURFACE'] = 'Face Width';
    cgMsg['SPURBORE'] = 'Bore Diameter';
    cgMsg['SPURHD'] = 'Hub Diameter &amp; Hub Length <br />(hub projection)';
    cgMsg['SPURPD'] = 'Pitch Diameter<br />To change this modify<br /> one of the following:<br />pitch<br />number of teeth<br />';
    cgMsg['SPUROD'] = 'Outside Diameter<br />To change this modify<br /> one of the following:<br />pitch<br />number of teeth<br />';
    cgMsg['SPURPA'] = 'Pressure Angle';
    cgMsg['SPURSTYLE'] = 'Hub Style - enter a hub diameter <br /> and Hub Projection to change the hub style.';
    cgMsg['SPURCB'] = 'Counter Bore <br />Depth &amp; Diameter';
    cgMsg['SPURBACKLASH'] = 'Backlash is per set not per gear.<br />It is the difference between the circular tooth thickness <br />of the gear and the circular space width of the pinion.';
    cgMsg['SPURPITCHTYPE'] = 'Diametral Pitch: The number of teeth of a gear per inch of its pitch diameter.<br />Module: The pitch diameter divided by the # of teeth. (40mm pd / 20 teeth = 2 Module.)';
    cgMsg['HELICALFACE'] = 'Face Width';
    cgMsg['HELICALBORE'] = 'Bore Diameter';
    cgMsg['HELICALHD'] = 'Hub Diameter &amp; Hub Length <br />(hub projection)';
    cgMsg['HELICALPD'] = 'Pitch Diameter:<br />To change this modify<br /> one of the following:<br /> normal pitch<br /> transverse pitch<br />number of teeth<br />helix angle<br />';
    cgMsg['HELICALOD'] = 'Outside Diameter:<br />To change this modify<br /> one of the following:<br /> normal pitch<br /> transverse pitch<br />number of teeth<br />helix angle<br />';
    cgMsg['HELICALPA'] = 'Pressure Angle';
    cgMsg['HELICALSTYLE'] = 'Hub Style';
    cgMsg['HELICALHA'] = 'Helix Angle';
    cgMsg['HELICALCB'] = 'Counter Bore <br />Depth &amp; Diameter';
    cgMsg['HELICALBACKLASH'] = 'Backlash is per set not per gear.<br />It is the difference between the circular tooth thickness <br />of the gear and the circular space width of the pinion.';
    cgMsg['HELICALPITCHTYPE'] = 'Diametral Pitch: The number of teeth of a gear per inch of its pitch diameter.<br />Module: The pitch diameter divided by the # of teeth. (40mm pd / 20 teeth = 2 Module.)';
    cgMsg['HELICALHAND'] = 'Helix Direction';
    
    var gt = $('cgGearType').value;
    if ($('messages').visible()) 
    {
        $('messages').hide();
    }
    else 
    {
        if (elem == 'HD') 
        {
            addImage = ',' + gt + 'HP.gif'
        }
        if (cgMsg[gt + elem]) 
        {
            msg = cgMsg[gt + elem] ? cgMsg[gt + elem] : '';
        }
        
        //loadImages('', gt);
        //showMessages(elId, msg, '#ffffff,#cc0033,2px solid #ffffff', gt + elem + '.gif'+addImage);
        if (imageArray[gt + elem]) 
        {
            showMessages(elId, msg, '#ffffff,#cc0033,2px solid #ffffff', gt + elem + '.gif' + addImage);
        }
        else 
        {
            showMessages(elId, msg, '#ffffff,#cc0033,2px solid #ffffff', '');
        }
        
        
        /*if ($('customGearType').value == 'SPUR') 
         {
         if(elem == 'HD')
         {
         addImage = ',SPURHP.gif'
         }
         if(cgMsg['SPUR'+elem])
         {
         msg = cgMsg['SPUR'+elem] ? cgMsg['SPUR'+elem] : '';
         }
         if (imageArray['SPUR' + elem])
         {
         showMessages(elId, msg, '#ffffff,#cc0033,2px solid #ffffff', 'SPUR' + elem + '.gif'+addImage);
         }
         else
         {
         showMessages(elId,msg,'#ffffff,#cc0033,2px solid #ffffff','');
         }
         }  */
    }
}

function clearCover(doWhat)
{
    var x = findPosX($('cgTopLeftCell'));
    var y = findPosY($('cgTopLeftCell'));
    var x2 = findPosX($('tabContent'));
    var y2 = findPosY($('tabContent'));
    var w = $('cgPartnoCell').offsetWidth;
    var h = $('cgHeaderCell').offsetHeight;
    var h2 = $('cgDescCell').offsetHeight;
    
    if (doWhat == 'show') 
    {
        $('clearCGcover').style.left = parseInt(w) + 'px';
        $('clearCGcover').style.top = parseInt(h) + 'px';
        $('clearCGcover').show();
        $('clearCGcover2').style.left = parseInt(w) + 'px';
        $('clearCGcover2').style.bottom = parseInt(h2) + 'px';
        $('clearCGcover2').show();
    }
    else 
    {
        $('clearCGcover').hide();
        $('clearCGcover2').hide();
        $('lockInfo').hide();
    }
}

function hasPartno(e)
{
    alert('This item has a part number and is locked. \r\n Click "modify" or "Create another item." ');
}

function highlightCurrentGear(gNum)
{
    $$('#allCGparts li').each(function(s)
    {
        var liId = s.id;
        var liIdNum = s.id.substr(6);
        
        if (liIdNum == gNum) 
        {			
            $('viewButton' + liIdNum).value = 'SELECTED';
            $('viewButton' + liIdNum).className = "viewBtnSelected";
            $('viewButton' + liIdNum).style.color = '#0000FF';
            $('removeButton' + liIdNum).style.color = '#FFFFFF';
            $('removeButton' + liIdNum).style.backgroundColor = '#708090';
            $('removeButton' + liIdNum).style.fontSize = '10px';
            $('cadButton' + liIdNum).style.fontSize = '10px';
            $('modifyButton' + liIdNum).style.fontSize = '10px';
            $('cgPart' + liIdNum).style.borderBottom = '2px solid gray';
            var x3 = findPosX($('hexBoreTab'));
            var y3 = findPosY($('hexBoreTab'));
            $('lockInfo').style.left = parseInt(x3) + 105 + 'px';
            $('lockInfo').style.top = 290 + 'px';
            $('cgMainPN' + liIdNum).innerHTML != 'none' ? $('lockInfo').show() : $('lockInfo').hide();
            
            $(liId).style.backgroundColor = '#FFFF66';
            
            if ($('cgMainPN' + gNum).innerHTML == 'none') /////////////////put in partno check to have modify button change back to modify 
            {
                clearCover('hide');
                $('modifyButton' + liIdNum).value = '      ';
                $('modifyButton' + liIdNum).style.width = '50px';
                $('modifyButton' + liIdNum).style.backgroundImage = 'url("/images/cgArrowR.gif")';
                $('modifyButton' + liIdNum).disabled = true;
                $('modifyButton' + liIdNum).style.backgroundColor = 'silver';
            }
            else 
            {
                clearCover('show');
            }
            
            if ($('cadButton' + liIdNum).value == 'has errors') 
            {
                $('cadButton' + liIdNum).style.color = '#CC0033';
                $('cadButton' + liIdNum).style.backgroundColor = 'silver';
            }
            else 
            {
                $('cadButton' + liIdNum).style.color = '#FFFFFF';
                $('cadButton' + liIdNum).style.backgroundColor = '#708090';
            }
        }
        else 
        {
            $('viewButton' + liIdNum).value = 'SELECT';
            $('viewButton' + liIdNum).className = "viewBtn";
            $('viewButton' + liIdNum).style.color = '#ffffFF';
            $(liId).style.backgroundColor = '#C0C0C0';
            $('modifyButton' + liIdNum).value = 'modify';
            $('modifyButton' + liIdNum).style.backgroundImage = '';
            $('modifyButton' + liIdNum).disabled = false;
            $('modifyButton' + liIdNum).style.backgroundColor = '#708090';
            if ($('cadButton' + liIdNum).value == 'has errors') 
            {
                $('cadButton' + liIdNum).style.color = '#CC0033';
                $('cadButton' + liIdNum).style.backgroundColor = 'silver';
            }
            else 
            {
                $('cadButton' + liIdNum).style.color = '#FFFFFF';
                $('cadButton' + liIdNum).style.backgroundColor = '#708090';
            }
        }
    })
	

    
    return;
}

function createCGpartList(txt, attrID, currGear, pn)
{
    if (!pn) 
    {
        pn = 'none';
    }
    
    var idNum = attrID.substr(6);
    
    $('cgCurrentPart').innerHTML = 'Current Item: Item ' + idNum;
    $('cgCurrentPart2').innerHTML = 'Current Item: Item ' + idNum;
    
    var space = new Array();
    
    for (var x = 0; x < 10; x++) 
    {
        space[x] = document.createElement('span');
        space[x].setAttribute('class', 'space2');
        space[x].appendChild(document.createTextNode(' '));
    }
    
    var br = document.createElement('br');
    var br2 = document.createElement('br');
    var savedLabel = document.createElement('label');
    savedLabel.setAttribute('id', 'savedLabel' + idNum);
    savedLabel.setAttribute('title', 'If you want to be able to retrieve this part at a later date click "Save Selected Item" or just click "not saved"');
    savedLabel.appendChild(document.createTextNode('not saved'));
    savedLabel.style.color = '#666666';
    savedLabel.style.fontSize = '.8em';
    savedLabel.style.textDecoration = 'underline';
    savedLabel.style.cursor = 'pointer';
    savedLabel.onclick = function()
    {
        if ($('savedLabel' + idNum).innerHTML != 'saved') 
        {
            saveCurrent(currGear);
        }
        else 
        {
            $('savedLabel' + idNum).title = 'This item has been saved using your email address. You can retrieve whenever you come back to this site.';
        }
    }
    var mainPNlabel = document.createElement('label');
    mainPNlabel.appendChild(document.createTextNode('Part# '));
    
    var mainPN = document.createElement('label');
    mainPN.setAttribute('id', 'cgMainPN' + idNum);
    mainPN.setAttribute('class', 'cgListPart');
    mainPN.appendChild(document.createTextNode(pn));
    
    var mainList = $('cgPartsList');
    var chkBox = document.createElement('input');
    chkBox.type = 'checkbox';
    chkBox.name = 'attrID';
    chkBox.setAttribute('id', 'cgPartBox' + idNum);
    chkBox.onclick = function()
    {
        if ($('cgMainPN' + idNum).innerHTML != 'none') 
        {
            addToQuoteFile(this.id, $('cgMainPN' + idNum).innerHTML);
            showGear(currGear);
        }
        else 
        {
            showGear(currGear);
            getNewPartno();
            //newGear.changePartnoPrompt(this.id);
        }
    }
    var lock = document.createElement('img');
    lock.setAttribute('src', '/images/lockSpace.gif');
    lock.setAttribute('id', 'lock' + idNum);
    lock.setAttribute('alt', '');
    lock.setAttribute('width', '16');
    lock.setAttribute('height', '16');
    lock.setAttribute('class', 'lockImg');
    lock.setAttribute('title', 'This item is locked. Click modify to make changes.');
    
    var cgArrow = document.createElement('img');
    cgArrow.setAttribute('src', '/images/cgArrow.gif');
    cgArrow.setAttribute('alt', '<<');
    
    var cgAddToQ = document.createElement('label');
    cgAddToQ.setAttribute('for', 'cgPartBox' + idNum);
    cgAddToQ.appendChild(document.createTextNode('add to quote'));
    
    
    var cadButton = document.createElement('input');
    cadButton.setAttribute('type', 'button');
    cadButton.setAttribute('class', 'removeButton');
    cadButton.setAttribute('id', 'cadButton' + idNum);
    cadButton.setAttribute('value', 'get CAD');
    cadButton.setAttribute('name', 'cadButton' + idNum);
    cadButton.onclick = function()
    {
        if (this.value == 'get CAD') 
        {
            if ($('cgMainPN' + idNum).innerHTML == 'none') 
            {
                //newGear.changePartnoPrompt(this.id);
                //promptForPartno(this.id);
                showGear(idNum);
                getNewPartno('getCAD');
            }
            else 
            {
                showGear(idNum);
				showCustomCadChoice($('cgMainPN' + idNum).innerHTML);                
            }
        }
    }
    cadButton.onmouseover = function()
    {
        if (this.value != 'has errors') 
        {
            this.style.color = "#000000";
        }
        else 
        {
            this.style.color = "#CC0033";
        }
    }
    cadButton.onmouseout = function()
    {
        if (this.value != 'has errors') 
        {
            this.style.color = "#FFFFFF";
        }
        else 
        {
            this.style.color = "#CC0033";
        }
    }
    
    var removeButton = document.createElement('input');
    removeButton.setAttribute('type', 'button');
    removeButton.setAttribute('class', 'removeButton');
    removeButton.setAttribute('id', 'removeButton' + idNum);
    removeButton.setAttribute('value', 'remove');
    removeButton.setAttribute('name', 'removeButtons' + idNum);
    removeButton.onclick = function()
    {
        rmGear.openPrompt(this.id);
    }
    removeButton.onmouseover = function()
    {
        this.style.color = "#000000";
    }
    removeButton.onmouseout = function()
    {
        this.style.color = "#FFFFFF";
    }
    
    var modifyButton = document.createElement('input');
    modifyButton.setAttribute('type', 'button');
    modifyButton.setAttribute('class', 'removeButton');
    modifyButton.setAttribute('id', 'modifyButton' + idNum);
    modifyButton.setAttribute('value', 'modify');
    modifyButton.setAttribute('name', 'modifyButton' + idNum);
    modifyButton.onclick = function()
    {
        if ($('cgMainPN' + idNum).innerHTML != 'none') 
        {
            showGear(idNum);
            createGear(idNum, 'cg', 'dup')
        }
        else 
        {
            showGear(idNum);
        }
        
        this.style.color = "#FFFFFF";
    }
    modifyButton.onmouseover = function()
    {
        this.style.color = "#000000";
    }
    modifyButton.onmouseout = function()
    {
        this.style.color = "#FFFFFF";
    }
    
    var viewButton = document.createElement('input');
    viewButton.setAttribute('type', 'button');
    viewButton.setAttribute('class', 'viewBtn');
    viewButton.setAttribute('id', 'viewButton' + idNum);
    viewButton.setAttribute('value', 'SELECTED');
    viewButton.setAttribute('name', 'viewButton' + idNum);
    viewButton.onclick = function()
    {
        showGear(idNum);
    }
    viewButton.onmouseover = function()
    {
        if (this.className == 'viewBtnSelected') 
        {
            this.style.color = "#6699CC";
        }
        else 
        {
            this.style.color = "#FFFFFF";
        }
    }
    viewButton.onmouseout = function()
    {
        if (this.className == 'viewBtnSelected') 
        {
            this.style.color = "#0000FF";
        }
        else 
        {
            this.style.color = "#FFFFFF";
        }
    }
    var itemNum = document.createElement('label');
    itemNum.setAttribute('id', 'itemNum' + idNum);
    itemNum.setAttribute('class', 'cgItemLabel');
    itemNum.appendChild(document.createTextNode(txt));
    
    var li = document.createElement('li');
    li.setAttribute('id', attrID);
    li.setAttribute('class', 'cgListItem');
    li.appendChild(savedLabel);
    li.appendChild(space[0]);
    li.appendChild(mainPNlabel);
    li.appendChild(space[1]);
    li.appendChild(mainPN);
    li.appendChild(space[2]);
    li.appendChild(space[3]);
    li.appendChild(lock);
    li.appendChild(document.createElement('br'));
    li.appendChild(itemNum);
    li.appendChild(chkBox);
    li.appendChild(cgArrow);
    li.appendChild(cgAddToQ);
    li.appendChild(document.createElement('br'));
    li.appendChild(space[5]);
    li.appendChild(removeButton);
    li.appendChild(space[6]);
    li.appendChild(cadButton);
    li.appendChild(space[7]);
    li.appendChild(modifyButton);
    li.appendChild(document.createElement('br'));
    li.appendChild(viewButton);
    
    li.onclick = function(e)
    {
        var elId = getElemID(e) == 'error' ? e : getElemID(e);
        
        if (elId.substr(0, 12) != 'modifyButton' && elId.substr(0, 12) != 'removeButton') 
        {
            showGear(currGear);
            updateGear();
        }
    }
    mainList.appendChild(li);
	
	$('allCGparts').scrollTop = $('allCGparts').scrollHeight;
}

function changeGearType()
{
    var gearType = $('cgGearType').value.toLowerCase();
    loadImages('', gearType.toUpperCase());
    var lastHA = $('cgHA').value;
    var lastHand = $('cgHand').value;
    
    if (gearType == 'helical') 
    {
        $('haDiv').show();
        $('tdpDiv').show();
        $('handDiv').show();
    }
    else 
    {
        $('haDiv').hide();
        $('tdpDiv').hide();
        $('handDiv').hide();
    }
    
    if (CGN == 0) 
    {
        createGear();
    }
    else 
    {
        //createGear(CGN, 'cg', 'dup');
        
        if (gear[CGN].locked) 
        {
            createGear(CGN, 'cg', 'dup');
        }
        else 
        {
            gear[CGN] = null;
            
            switch (gearType)
            {
                case "spur":
                    gear[CGN] = new Spur($('cgTeeth').value, $('cgPitch').value);
                    break;
                case "helical":
                    if (lastHA == '' || lastHA == null || lastHA == 'undefined') 
                    {
                        lastHA = 45;
                    }
                    
                    if (lastHand == '' || lastHand == null || lastHand == 'undefined') 
                    {
                        lastHand = 'right';
                    }
                    
                    gear[CGN] = new Helical($('cgTeeth').value, $('cgPitch').value, lastHA, lastHand);
                    $$('input.cgGearSpec', 'select.cgGearSpec').each(function(s)
                    {
                    
                    });
                    $('cgHA').value = lastHA;
                    $('cgHand').value = lastHand;
                    break;
            }
            updateGear();
            highlightCurrentGear(CGN);
        }
    }
}

function yesViewPrev()
{
    var cgPartsCookie = readCookie('cgParts');
    var cookieParts = cgPartsCookie.split(',');
    var email = getEmail();
    
    for (x = 0; x < cookieParts.length; x++) 
    {
        getPage('Tech_Tools/' + folder + '/findCustomParts.php?partno=' + cookieParts[x] + '&email=' + email, 'fillCustomParts');
    }
}

function savePartsInCookie(p)
{
    var cookieParts = readCookie('cgParts');
    
    var savedParts = '';
    if (cookieParts) 
    {
        if (cookieParts.indexOf(p) == '-1') 
        {
            savedParts = cookieParts + ',' + p;
        }
    }
    else 
    {
        savedParts = p;
    }
    
    createCookie('cgParts', savedParts, 365);
}

function setEmail(em)
{
    $('loginEmail').value = em;
    $('savePartEmail').value = em;
    $('email1').value = em;
    createCookie('cgID', em, 60);
}

function getEmail(skip)
{
    var cookieEmail = readCookie('cgID');
    var loginEmail = $('loginEmail').value;
    var quoteEmail = $('email1').value;
    var savedPartEmail = $('savePartEmail').value;
    var email = '';
    if (cookieEmail) 
    {
        email = cookieEmail;
    }
    if (loginEmail) 
    {
        email = loginEmail;
    }
    if (quoteEmail) 
    {
        email = quoteEmail;
    }
    if (savedPartEmail) 
    {
        email = savedPartEmail;
    }
    if (!skip) 
    {
        setEmail(email);
    }
    
    return email;
}

function updateGear(e)
{
    var elId = getElemID(e);
    var args = arguments.callee;
    if (!args.uid) 
    {
        args.uid = 0;
    }
    args.uid++;
    if (CGN == 0) 
    {
        createGear();
        return;
    }
    
    currentObj = elId != 'error' ? $('elId') : 'none';
    var bcm = '';
    var hasKeyways = new Array();
    var hasSetscrews = new Array();
    var gearType = $('cgGearType').value.toLowerCase();
    var backlashPitchValue = $('cgPitch').value;
    
    //assign current gear the values from the form fields with class="cgGearSpec" as an attribute 
    $$('input.cgGearSpec', 'select.cgGearSpec').each(function(s)
    {
        errorItems[s.id] = false;
        
        var newID = s.id.substr(2).toLowerCase();
        bcm += s.id + ' ' + newID + ' ';
        
        if (typeof gear[CGN][newID] != 'function' && typeof gear[CGN][newID] != 'undefined') 
        {
            if ($(s.id).type == 'checkbox') 
            {
                s.value = $(s.id).checked;
            }
            
            gear[CGN][newID] = s.value;
        }
    });
    //alert(CGN+' '+bcm);
    
    // assign gear values that are not in input or select elements
    if ($('cgMainPN' + CGN).innerHTML != 'none') 
    {
        gear[CGN]['partno'] = $('cgMainPN' + CGN).innerHTML;
        gear[CGN].locked = true;
    }
    else 
    {
        gear[CGN].locked = false;
    }
    
    //show or hide keyways and setscrews
	for(var z=1;z<9;z++)
	{
		if (gear[CGN]['key' + z] == 'on')
		{
			$('key'+z+'cover').hide();
			hasKeyways[z] = true;
		}
		else
		{
			$('key'+z+'cover').show();
			hasKeyways[z] = false;
		}
		
		 if (gear[CGN]['ss' + z] == 'on') 
        {
            hasSetscrews[z] = true;
            $('cgss' + z).show();
            $('cgsss' + z).hide();
        }
        else 
        {
            hasSetscrews[z] = false;
            $('cgss' + z).hide();
            $('cgsss' + z).show();
        }
	}
	
    /* for (var z = 1; z < 9; z++) 
     {
     if (gear[CGN]['key' + z] == 'on')
     {
     hasKeyways[z] = true;
     $('cgkeyON' + z).show();
     $('cgkeyOFF' + z).hide();
     }
     else
     {
     hasKeyways[z] = false;
     $('cgkeyON' + z).hide();
     $('cgkeyOFF' + z).show();
     }
     
     if (gear[CGN]['ss' + z] == 'on')
     {
     hasSetscrews[z] = true;
     $('cgss' + z).show();
     $('cgsss' + z).hide();
     }
     else
     {
     hasSetscrews[z] = false;
     $('cgss' + z).hide();
     $('cgsss' + z).show();
     }
     }
     if ($('cgKeyLoc').value == 'SPACE')
     {
     $('keywayGearDiv').show();
     $('keywayGearPos').src = '/images/keywaysSpace.gif';
     }
     
     if ($('cgKeyLoc').value == 'TOOTH')
     {
     $('keywayGearDiv').show();
     $('keywayGearPos').src = '/images/keywaysTooth.gif';
     $('cgKeyNum').style.backgroundColor = '#FFFF66';
     }
     
     if ($('cgKeyLoc').value == 'ANY')
     {
     // $('keywayGearDiv').show();
     // $('keywayGearPos').src = '/images/keywaysAny.gif';
     }*/
    var keypos = $('cgKeyLoc').value;
    switch (keypos)
    {
        case "ANY":
            $('keySpriteImage').className = "keySpriteImage keyAny";
            break;
        case "TOOTH":
            $('keySpriteImage').className = "keySpriteImage keyTooth";
            break;
        case "SPACE":
            $('keySpriteImage').className = "keySpriteImage keySpace";
            break;
    }
    
    //if using standard keyways is checked and a key slot has been selected then fill in the keywidth and depth
    
    if (gear[CGN]['usestdkwy'] == 'true' && hasKeyways.indexOf(true) != '-1') 
    {
        for (var x = 0; x < gear[CGN]['stdBoreDecL'].length; x++) 
        {
            if (gear[CGN]['bore'] >= gear[CGN]['stdBoreDecL'][x] && gear[CGN]['bore'] <= gear[CGN]['stdBoreDecH'][x]) 
            {
                $('cgKeyWidth').value = gear[CGN].stdKwyWdec[x];
                gear[CGN].keywidth = gear[CGN].stdKwyWdec[x];
                $('cgKeyDepth').value = gear[CGN].stdKwyDdec[x];
                gear[CGN].keydepth = gear[CGN].stdKwyDdec[x];
            }
        }
    }
    
    if (gear[CGN]['usestdss'] == 'true' && hasSetscrews.indexOf(true) != '-1') 
    {
        for (var x = 0; x < gear[CGN]['stdBoreDecL'].length; x++) 
        {
            if (gear[CGN]['bore'] >= gear[CGN]['stdBoreDecL'][x] && gear[CGN]['bore'] <= gear[CGN]['stdBoreDecH'][x]) 
            {
                gear[CGN].sssize = gear[CGN].stdSSdec[x];
                $('cgSSsize').value = gear[CGN].stdSSdec[x];
            }
        }
    }
    
    if (hasKeyways.indexOf(true) == '-1') 
    {
        gear[CGN].keynum = 0;
		$('cgKeyWidth').value = '';
		$('cgKeyDepth').value = '';
		gear[CGN].keywidth = '';
		gear[CGN].keydepth = '';
    }
    
    //the following section checks the specs of the current gear
    /////////////////////////////////////////////////////////////  0      1      2	    3
    //the checking function for each spec returns: spec item(ie. bore),boolean,reason,value
    
    if (gear[CGN].geartype.toLowerCase() == 'helical') 
    {
        backlashPitchValue = $('cgTDP').value;
        gear[CGN].editingNDP = true;
        gear[CGN].editingTDP = false;
        
        
        if (elId == 'cgPitch') 
        {
            gear[CGN].editingNDP = true;
        }
        if (elId == 'cgTDP') 
        {
            gear[CGN].editingTDP = true;
            gear[CGN].editingNDP = false;
        }
        if (elId == 'cgHA') 
        {
            gear[CGN].editingTDP = true;
            gear[CGN].editingNDP = false;
        }
        
        if (gear[CGN].editingNDP) 
        {
            $('cgTDP').value = gear[CGN].getTDP();
            gear[CGN].tdp = $('cgTDP').value;
        }
        if (gear[CGN].editingTDP) 
        {
            $('cgPitch').value = gear[CGN].getPitch();
            gear[CGN].pitch = $('cgPitch').value;
        }
        
        //$('cgPitch').value = gear[CGN].getPitch();
        //$('cgTDP').value = gear[CGN].getTDP();
        
        var tdpError = gear[CGN].checkTDP('cgTDP');
        errorItems[tdpError[0]] = tdpError[1];
        errorReasons[tdpError[0]] = tdpError[2];
        
        var haError = gear[CGN].checkHA('cgHA');
        errorItems[haError[0]] = haError[1];
        errorReasons[haError[0]] = haError[2];
    }
    
    var pitchError = gear[CGN].checkPitch('cgPitch');
    errorItems[pitchError[0]] = pitchError[1];
    errorReasons[pitchError[0]] = pitchError[2];
    
    var boreError = gear[CGN].checkBore('cgBore');
    errorItems[boreError[0]] = boreError[1];
    errorReasons[boreError[0]] = boreError[2];
    //$(boreError[0]).value = boreError[3];
    
    var teethError = gear[CGN].checkTeeth('cgTeeth');
    errorItems[teethError[0]] = teethError[1];
    errorReasons[teethError[0]] = teethError[2];
    //$(teethError[0]).value = teethError[3];
    
    var faceError = gear[CGN].checkFace('cgFace');
    errorItems[faceError[0]] = faceError[1];
    errorReasons[faceError[0]] = faceError[2];
    //$(faceError[0]).value = faceError[3];
    
    var hubStyleError = gear[CGN].checkHubStyle('cgHubStyle');
    errorItems[hubStyleError[0]] = hubStyleError[1];
    errorReasons[hubStyleError[0]] = hubStyleError[2];
    $(hubStyleError[0]).value = hubStyleError[3];
    
    var hub1Error = gear[CGN].checkHubDiameter('cgHD1');
    errorItems[hub1Error[0]] = hub1Error[1];
    errorReasons[hub1Error[0]] = hub1Error[2];
    //$(hub1Error[0]).value = hub1Error[3];
    
    var hub2Error = gear[CGN].checkHubDiameter('cgHD2');
    errorItems[hub2Error[0]] = hub2Error[1];
    errorReasons[hub2Error[0]] = hub2Error[2];
    //$(hub2Error[0]).value = hub2Error[3];
    
    var hub1ProjError = gear[CGN].checkHubProjection('cgHP1');
    errorItems[hub1ProjError[0]] = hub1ProjError[1];
    errorReasons[hub1ProjError[0]] = hub1ProjError[2];
    //$(hub1ProjError[0]).value = hub1ProjError[3];
    
    var hub2ProjError = gear[CGN].checkHubProjection('cgHP2');
    errorItems[hub2ProjError[0]] = hub2ProjError[1];
    errorReasons[hub2ProjError[0]] = hub2ProjError[2];
    //$(hub2ProjError[0]).value = hub2ProjError[3];
    
    var cbNumError = gear[CGN].checkCBnum('cgCBnum');
    errorItems[cbNumError[0]] = cbNumError[1];
    errorReasons[cbNumError[0]] = cbNumError[2];
    $(cbNumError[0]).value = cbNumError[3];
    
    var cbDiameterError1 = gear[CGN].checkCounterBoreDiameter('cgCBdiameter1');
    errorItems[cbDiameterError1[0]] = cbDiameterError1[1];
    errorReasons[cbDiameterError1[0]] = cbDiameterError1[2];
    //$(cbDiameterError1[0]).value = cbDiameterError1[3];
    
    var cbDiameterError2 = gear[CGN].checkCounterBoreDiameter('cgCBdiameter2');
    errorItems[cbDiameterError2[0]] = cbDiameterError2[1];
    errorReasons[cbDiameterError2[0]] = cbDiameterError2[2];
    //$(cbDiameterError2[0]).value = cbDiameterError2[3];
    
    var cbDepthError1 = gear[CGN].checkCounterBoreDepth('cgCBdepth1');
    errorItems[cbDepthError1[0]] = cbDepthError1[1];
    errorReasons[cbDepthError1[0]] = cbDepthError1[2];
    //$(cbDepthError1[0]).value = cbDepthError1[3];
    
    var cbDepthError2 = gear[CGN].checkCounterBoreDepth('cgCBdepth2');
    errorItems[cbDepthError2[0]] = cbDepthError2[1];
    errorReasons[cbDepthError2[0]] = cbDepthError2[2];
    //$(cbDepthError2[0]).value = cbDepthError2[3];
    
    var keyWidthError = gear[CGN].checkKeyWidth('cgKeyWidth');
    errorItems[keyWidthError[0]] = keyWidthError[1];
    errorReasons[keyWidthError[0]] = keyWidthError[2];
    //$(keyWidthError[0]).value = keyWidthError[3];
    
    var keyDepthError = gear[CGN].checkKeyDepth('cgKeyDepth');
    errorItems[keyDepthError[0]] = keyDepthError[1];
    errorReasons[keyDepthError[0]] = keyDepthError[2];
    //$(keyDepthError[0]).value = keyDepthError[3];
    
    
    
    setBacklash(backlashPitchValue);
    gear[CGN].backlash = $('cgBacklash').value;
    
    var val = '';
    
    clearErrorMsg($(elId));
    
    if (elId == 'error') 
    {
        setupErrorMsg('none');
    }
    else 
    {
        setupErrorMsg($(elId));
    }
    
    bcm2 = '';
    for (errorID in errorItems) 
    {
        bcm2 += errorID + '\r\n';
    }
    
    //set passive form fields to the objects function values
    if (gear[CGN].geartype.toLowerCase() == 'helical') 
    {
        $('cgKeyLoc').value = 'any';
        $('cgKeyLoc').setAttribute('disabled', 'disabled');
        $('helicalKwyLocLabel').show();
        $('haDiv').show();
        $('tdpDiv').show();
        $('handDiv').show();
        $('normPitchLabel').show();
    }
    else 
    {
        $('cgKeyLoc').removeAttribute('disabled');
        $('helicalKwyLocLabel').hide();
        $('haDiv').hide();
        $('tdpDiv').hide();
        $('handDiv').hide();
        $('normPitchLabel').hide();
    }
    
    $('cgPD').value = gear[CGN].pd();
    $('cgOD').value = gear[CGN].od();
    
    switch (gear[CGN].material)
    {
        case "STEEL":
            gear[CGN].matl = '10';
            break;
        case "HARD TEETH":
            gear[CGN].matl = '20';
            gear[CGN].hardness = '48-52 Rc';
            break;
        case "HARDTEETH":
            gear[CGN].matl = '20';
            gear[CGN].hardness = '48-52 Rc';
            break;
        case "STAINLESS STEEL":
            gear[CGN].matl = '30';
            break;
        case "STAINLESSSTEEL":
            gear[CGN].matl = '30';
            break;
        case "17-4 PH COND 1150":
            gear[CGN].matl = '35';
            gear[CGN].hardness = '35Rc';
            break;
        case "17-4PHCOND1150":
            gear[CGN].matl = '35';
            gear[CGN].hardness = '35Rc';
            break;
        case "CAST IRON":
            gear[CGN].matl = '40';
            break;
        case "CASTIRON":
            gear[CGN].matl = '40';
            break;
        case "BRONZE":
            gear[CGN].matl = '50';
            break;
        case "ALUMINUM":
            gear[CGN].matl = '60';
            break;
        case "DELRIN":
            gear[CGN].matl = '70';
            break;
        case "PHENOLIC":
            gear[CGN].matl = '80';
            break;
        default:
            gear[CGN].matl = '10';
    }
}

function setBacklash(p)
{
    var pitch = parseFloat(p);
    pitch = Math.round(pitch);
    var id = '';
    var idNum = '';
    
    //backlashID is assigned in xmlResults.js in function getBacklash
    for (id in backlashID) 
    {
        if (id == pitch) 
        {
            $('cgBacklash').value = backlashID[id];
            return;
        }
        else 
        {
            idNum = Math.round(parseFloat(id));
            
            if (idNum > pitch) 
            {
                $('cgBacklash').value = backlashID[id];
                return;
            }
        }
    }
}

function checkErrors(e)
{
    var elId = getElemID(e) == 'error' ? e : getElemID(e);
    if (elId == 'error') 
    {
        setupErrorMsg('none');
    }
    else 
    {
        setupErrorMsg($(elId));
    }
}

function showGear(id, getPartno)
{
    //add setscrews and keyways
    var bcm3 = '';
    if ($('cgPart' + id)) 
    {
        var newId = '';
        CGN = id;
        var val = true;
        $('cgCurrentPart').innerHTML = 'Current Item: Item ' + CGN;
        $('cgCurrentPart2').innerHTML = 'Current Item: Item ' + CGN;
        
        
        $$('input.cgGearSpec', 'select.cgGearSpec').each(function(s)
        {
            var newID = s.id.substr(2).toLowerCase();
            
            if (typeof gear[CGN][newID] == 'function') 
            {
                s.value = gear[CGN][newID]();
            }
            else 
            {
                if ($(s.id).type == 'checkbox') 
                {
                    $(s.id).checked = gear[CGN][newID].toBoolean();
                }
                else 
                {
                    s.value = gear[CGN][newID];
                }
            }
        });
        
        $$('#customTabs a').each(function(s)
        {
            id = s.id;
        })
    }
    highlightCurrentGear(CGN);
    updateGear();
}

function reportBugs(pEmail)
{
    var args = arguments.callee;
    if (!args.uid) 
    {
        args.uid = 0;
    }
    args.uid++;
    var report = $('betaBugs').value;
    var encodedReport = encodeURI($('betaBugs').value);
    var emailCookie = readCookie('cgID');
    ;
    var wantsReply = readCookie('bugReportReply') ? true : false;
    var parts = '';
    var email = pEmail;
    
    if (report.length > 1000) 
    {
        alert('What you have typed is too long. Limit it to under 1000 characters');
        return;
    }
    
    $$('label.cgListPart').each(function(s)
    {
        parts += $(s.id).innerHTML + ',';
    })
    
    if (args.uid < 6) 
    {
        if ($('betaBugs').value.length == 0) 
        {
            alert('You left the bug report blank.');
            return;
        }
        
        //var email = window.prompt('If you would like a reply please provide your email address or \r\npress cancel to submit without your email address.',emailCookie);
        if (email) 
        {
            var isEmailOK = testEmail(email);
            if (isEmailOK) 
            {
                setEmail(email);
            }
            else 
            {
                if (email) 
                {
                    alert('Please enter a valid email address or click cancel.');
                    launchFunctions('betaBugsBtn');
                    return;
                }
            }
            wantsReply = true;
            createCookie('bugReportReply', wantsReply, 2);
        }
        
        
        $('betaBugsBtn').value = 'Sending...';
        getPage('Tech_Tools/' + folder + '/bugReport.php?report=' + encodedReport + '&e=' + email + '&wantsReply=' + wantsReply + '&emailFromCookie=' + emailCookie + '&parts=' + parts, 'bugReportOK');
    }
    else 
    {
        $('betaBugsBtn').disabled = true;
        alert('You have sent 5 bug reports. Send us an email if you require additional help.');
    }
}

function getNewPartno(e)
{
    var elId = getElemID(e) == 'error' ? e : getElemID(e);
    var similarGears = '';
    var showWarning = false;
    var warnErrors = '';
    
    ////////check gears array for duplicate gears
    var testVal = 0;
    var isEqualGear = new Array();
    var notEqualGear = new Array();
    var saveEmail = $('savePartEmail').value;
    
    if (elId) 
    {
        if (elId.substr(0, 13) == 'savePartEmail') 
        {
            elId = 'noCad';
            var isEmailOK = testEmail($('savePartEmail').value);
            if (isEmailOK) 
            {
                setEmail($('savePartEmail').value);
                $('savePartEmailBtn').innerHTML = '<img src="/images/loading_16.gif" id="savingGif" />Saving...';
                $('savePartEmailBtn1').value = '<img src="/images/cgSave.gif" alt="" class="cgSaveButton" /> Saving';
                $('savePartEmailBtn1').innerHTML = '<img src="/images/cgSave.gif" alt="" class="cgSaveButton" /> Saving';
            }
            else 
            {
                alert('Please enter a valid email address.');
                return;
            }
        }
    }
    
    if (gear.length > 2) 
    {
        var compGears = compareGears();
        if (compGears != 'none') 
        {
            similarGears = compGears;//.split(',');
            alert('This item is identical to item(s): ' + similarGears + '\r\n\r\n Do one of the following:\r\n 1. Make changes to this item or the other item(s)\r\n 2. Remove the other items\r\n');
            $('cgPartBox' + CGN).checked = false;
            $('savePartEmailBtn1').innerHTML = '<img src="/images/cgSave.gif" alt="" class="cgSaveButton" /> Save Selected Item';
            return;
        }
    }
    
    var cgGearSpecs = '';
    var zzz = 'bore';
    var bcm1 = 0;
    var skipFuncs = new Array('decimalCheck', 'fractionCheck', 'decFracCheck');
    for (zz in gear[CGN]) 
    {
        if (typeof gear[CGN][zz] == 'string' || typeof gear[CGN][zz] == 'number') 
        {
            cgGearSpecs += '&' + zz + '=' + gear[CGN][zz];
        }
        else 
        {
            if (typeof gear[CGN][zz] == 'function') 
            {
                //need this if statement because older browsers see "this.deicmalCheck" in spur.js as a function
                if (skipFuncs.indexOf(zz) == '-1') 
                {
                    if (gear[CGN][zz]().length > 0 && gear[CGN][zz]() != 'error') 
                    {
                        cgGearSpecs += '&' + zz + '=' + gear[CGN][zz]();
                    }
                }
            }
        }
    }
    
    cgGearSpecs += '&email=' + saveEmail;
    
    for (var zz in errorItems) 
    {
        if (typeof errorItems[zz] == 'boolean') 
        {
            if (errorItems[zz]) 
            {
                showWarning = true;
                warnErrors += errorReasons[zz] + '\r\n';
                warnErrors = warnErrors.replaceWith("<br />", "\r\n");
            }
        }
    }
    
    if (showWarning) 
    {
        $('cgPartBox' + CGN).checked = false;
        alert(warnErrors + '\r\n');
    }
    else 
    {
        cgGearSpecs = cgGearSpecs.split('&');
        cgGearSpecs.sort();
        newCGgearSpecs = cgGearSpecs.join('&');
        newCGgearSpecs = encodeURI(newCGgearSpecs) + "&library=" + gear[CGN].library;
        $('cgMainPN' + CGN).innerHTML = 'loading...';
        $('lock' + CGN).src = '/images/loading_16.gif';
        
        if (elId == 'getCAD') 
        {
            getPage('Tech_Tools/' + folder + '/getNewPartno.php?index=' + CGN + newCGgearSpecs, 'getCustomGear');
        }
        else 
        {
            getPage('Tech_Tools/' + folder + '/getNewPartno.php?index=' + CGN + newCGgearSpecs, 'fillInPartnos');
        }
    }
}

function changeChildNodeID(tree)
{
    var nodeLen = tree.length;
    for (var x = 0; x < nodeLen; x++) 
    {
        var theID = tree[x].id;
        if (theID) 
        {
            tree[x].id += 'a';
            if (tree[x].hasChildNodes) 
            {
                changeChildNodeID(tree[x].childNodes);
            }
        }
    }
    return;
}

function slideOpenParts(e)
{
    var elId = getElemID(e) == 'error' ? e : getElemID(e);
    
    if (elId.substr(0, 6) == 'myPart') 
    {
        if ($('myPartsOuterDiv').visible()) 
        {
            Effect.SlideUp('myPartsOuterDiv');
            $('myPartsArrowUp').hide();
        }
        else 
        {
            if ($('myParts')) 
            {
                Effect.SlideDown('myPartsOuterDiv');
                $('myPartsArrowUp').show();
            }
            else 
            {
                showLogin('myPartsArrowDown');
            }
        }
    }
}

function justOpenCG()
{
    if ($('startHere').visible()) 
    {
        switch ($('mainGearType').value)
        {
            case "HELICAL":
                $('cgGearType').value = 'HELICAL';
                break;
            case "SPUR":
                $('cgGearType').value = 'SPUR';
                break;
        }
    }
    
    if ($('cgMinimized').visible()) 
    {
        maximizeCG();
    }
    $('opaqBack').show();
    $('cgNewPartBtn').value = 'Create A New Item';
    $('startCustom').value = "Open";
    $('customGearDiv').style.top = 120 + findScrollY($(window)) + 'px';
    $('customGearDiv').show();
    $('startHere').shake();
    if (!gear[1]) 
    {
        $('cgCover').show();
        $('cgCover').style.top = $('cgTopLeftCell').offsetTop + 'px';
        $('cgCover').style.left = $('cgTopLeftCell').offsetLeft + 'px';
        $('cgCover').style.width = parseInt($('cgBottomCell').offsetWidth) - 3 + 'px';
        $('cgCover').style.height = parseInt($('cgTopLeftCell').offsetHeight) + parseInt($('cgBottomCell').offsetHeight) - 5 + 'px';
    }
    
    //createGear();
    $('customGearDiv').style.top = 120 + 'px';//findScrollY(newGear) + 'px';
    $('customGearDiv').style.left = 12 + 'px';
    if (gear[CGN]) 
    {
        if (gear[CGN].partno.length > 0) 
        {
            $('lockInfo').show();
            clearCover('show');
        }
    }
}

function closeCG()
{
    $('customGearDiv').hide();
    $('opaqBack').hide();
    clearCover('hide');
}

function minimizeCG()
{
    if ($('cgCover').visible()) 
    {
        $('opaqBack').hide();
        $('customGearDiv').hide();
        return;
    }
    $('subTabDiv').hide();
    $('cgMinimized').style.top = parseInt(findPosY($('customGearDiv'))) - parseInt(findScrollY($('customGearDiv'))) + 'px';
    $('lockInfo').hide();
    $('myPartsWrapper').hide();
    $('cgContainer').visualEffect('fold', 
    {
        afterFinish: function()
        {
            setTimeout("$('cgMinimized').show()", 500);
            $('opaqBack').hide();
            clearCover('hide');
            
        }
    });
}

function maximizeCG()
{
    $('subTabDiv').show();
    $('customGearDiv').style.top = 120 + findScrollY($('cgMinimized')) + 'px';
    $('opaqBack').show();
    $('myPartsWrapper').show();
    
    
    $('cgContainer').visualEffect('Grow', 
    {
        direction: 'top-left',
        afterSetup: function()
        {
            if (gear[CGN].partno.length > 0) 
            {
                $('lockInfo').show();
                clearCover('show');
            }
            
            $('cgMinimized').hide();
            //modifyGear(CGN, false);
        }
    });
}

function showHideKey(e)
{
    var elId = getElemID(e) == 'error' ? e : getElemID(e); 
    var keynum = elId.substr(3, 1);	
	
    if ($('key' + keynum + 'cover').visible()) 
    {
        $('key' + keynum + 'cover').hide();
        $('key1cover').hide();
		gear[CGN]['key' + keynum] = 'on';
		gear[CGN]['key1'] = 'on';
    }
    else 
    {
        $('key' + keynum + 'cover').show();
		gear[CGN]['key' + keynum] = 'off'

		//if you cover the default key cover the rest
        if (keynum == 1) 
        {
            $$('div.keyCovers').each(function(s)
            {
                $(s.id).show()
				var keyNum = s.id.substr(3,1);
				gear[CGN]['key' + keyNum] = 'off';
            });
        }
    }
	
	var keyCount = 0;
    for (var x = 1; x < 9; x++) 
    {
        if (gear[CGN]['key' + x] == 'on') 
        {
            keyCount++;
        }
    }
    
    $('cgKeyNum').value = keyCount;
    updateGear()
}

function addKey(pos, skipIt)
{
    var keyON = $('cgkeyON' + pos);
    var keyOFF = $('cgkeyOFF' + pos);
    var keyPos = [1, 45, 90, 135, 180, 225, 270, 315];
    var skipOne = false;
    
    if (!keyON.visible()) 
    {
        keyON.show();
        keyOFF.hide();
        gear[CGN]['key' + pos] = 'on';
        if (!$('cgkeyON1').visible()) 
        {
            $('cgkeyON1').show();
            $('cgkeyOFF1').hide();
            gear[CGN]['key1'] = 'on';
        }
    }
    else 
    {
        /// used to keep the default kwy if other keyways are selected
        for (var x = 2; x < 9; x++) 
        {
            if (gear[CGN]['key' + x] == 'on') 
            {
                if (pos == 1) 
                {
                    $('cgkeyON1').show();
                    $('cgkeyOFF1').hide();
                    gear[CGN]['key1'] = "on";
                    var skipOne = true;
                }
            }
        }
        
        if (!skipOne) 
        {
            keyON.hide();
            keyOFF.show();
            gear[CGN]['key' + pos] = 'OFF';
            if (pos == 1) 
            {
                $('cgKeyWidth').value = '';
                $('cgKeyDepth').value = '';
            }
        }
    }
    
    var keyCount = 0;
    for (var x = 1; x < 9; x++) 
    {
        if (gear[CGN]['key' + x] == 'on') 
        {
            keyCount++;
        }
    }
    
    $('cgKeyNum').value = keyCount;
    updateGear();
    return;
}

function addSetscrew(pos)
{
    var ssSpace = $('cgsss' + pos);
    var ss = $('cgss' + pos);
    var ssCount = 0;
    bcm2 = '';
    ssSpace.toggle();
    ss.toggle();
    for (var ct = 1; ct < 9; ct++) 
    {
        $('cgss' + ct).visible() ? ssCount++ : '';
        $('cgss' + ct).visible() ? gear[CGN]['ss' + ct] = 'on' : gear[CGN]['ss' + ct] = 'off';
    }
    
    $('cgSSnum').value = ssCount;
    updateGear();
    return;
}

function HandlePartnos(e)
{
    this.email = '';
    this.emailTest = '';
    this.dontPrompt = $('dontPromptCad').checked;
}

HandlePartnos.prototype = 
{
    checkEmail: function()
    {
        return this.emailTest = testEmail(this.email);
    }
}

function GearRemoval()
{
    this.yes = false;
    this.no = false;
    this.gearID = 'test';
    self = this;
}

GearRemoval.prototype = 
{
    removeGear: function()
    {
        var itemNum = self.gearID.substr(12);
        $('removePrompt').hide();
        var item = $('cgPart' + itemNum);
        var partsList = $('cgPartsList');
        var index = '';
        var bcm = '';
        var idLen = 0;
        var startFrom = 0;
        item.parentNode.removeChild(item);
        if (partsList.lastChild) 
        {
            if (partsList.lastChild.id) 
            {
            
                index = partsList.lastChild.id.substr(6);
            }
        }
        
        if (index) 
        {
            //select the last item in the list and remove the part from the gears array
            gear.splice(itemNum, 1);
            ct = 0;
            ct1 = 0;
            newLen = 0;
            
            $$('#cgPartsList > *').each(function(s)
            {
                ct++;
                ct1 = ct;
                
                //the the partnumber if it has been assigned
                for (var x = 0; x < $(s.id).childNodes.length; x++) 
                {
                    if ($(s.id).childNodes[x].id) 
                    {
                        if ($(s.id).childNodes[x].id.substr(0, 8) == 'cgMainPN') 
                        {
                            pn = $(s.id).childNodes[x].innerHTML;
                        }
                    }
                }
                
                //remove the list item containing the part info
                $(s.id).parentNode.removeChild($(s.id));
                
                //re-create the part list
                createCGpartList('Item ' + ct, 'cgPart' + ct, ct, pn);
                $('cadButton' + ct).value = 'get CAD';
                //$('cgPartBox' + ct).checked = gear[ct].quoteCheckBox; //maintains the checkbox state
                $('cgMainPN' + ct).innerHTML != 'none' ? $('lock' + ct).src = '/images/locked.gif' : $('lock' + ct).src = '/images/lockSpace.gif';
                gear[ct].saved = true ? $('savedLabel' + ct).innerHTML = 'saved' : $('savedLabel' + ct).innerHTML = 'not saved';
            })
            nnum = parseInt(ct) + 1;
            
            if (itemNum != parseInt(ct) + 1) 
            {
            
                startFrom = itemNum;
                for (var x = startFrom; x < gearCounter; x++) 
                {
                    for (var i in gear[parseInt(x) + 1]) 
                    {
                        gear[x][i] = gear[parseInt(x) + 1][i];
                    }
                }
            }
            gearCounter--;
            showGear(ct);
            CGN = ct;
        }
        else 
        {
            //global vars --  if there are no more items in the list start over with a new gears array and set everything to zero
            gear = null;
            gear = new Array();
            gear[0] = 'none';
            CGN = 0;
            currentPartNum = 0;
            gearCounter = 0;
        }
        
        return;
        
    },
    
    doNotPrompt: function(e)
    {
        var elId = getElemID(e) == 'error' ? e : getElemID(e);
        if (e == 'dontPromptRemoveLabel') 
        {
            elId = 'dontPromptRemove';
        }
        if ($(elId).checked) 
        {
            rmGear.dontPrompt = true;
        }
        else 
        {
            rmGear.dontPrompt = false;
        }
        
        return;
    },
    
    openPrompt: function(id)
    {
        self.gearID = id;
        
        if (rmGear.dontPrompt) 
        {
            this.removeGear();
        }
        else 
        {
            var posX = findPosX($('allCGparts'));
            var posY = findPosY($('allCGparts'));
            $('removePrompt').style.left = parseInt(posX) + 200 + 'px';
            $('removePrompt').style.top = parseInt(posY) + 'px';
            $('removePrompt').show();
            $('removePrompt').style.zIndex = '300';
        }
        return;
    },
    
    closePrompt: function(id)
    {
        $('removePrompt').hide();
        return;
    }
}


