
CPN.MachiningForm=function(params)
{CPN.MachiningForm.superclass.constructor.call(this,params);};YAHOO.lang.extend(CPN.MachiningForm,CPN.FeatureBasedForm,{onMaterialChange:function(material)
{if(this.isPrimaryProcess())
{$('materialname').innerHTML=material.name;$('machMaterialPrice').value=material.price;$('machMaterialDensity').value=material.density;Machining.updateWorkpiece();}}});CPN.EstimateFormFactory.addType(ProcessIds.Machining,CPN.MachiningForm);var Machining={WEB_SERVICE:URL_BASE+'ws/parts/machining.php',TOOL_BROWSE_URL:URL_BASE+'tools/toolbrowse.php',LOADING_IMG:URL_BASE+'images/loading.gif',GLOSSARY_IMG:URL_BASE+'images/icons/book.gif',MachineTypes:{CNCMilling:1,CNCTurning:2},Workpieces:{FlatSheet:1,SolidBarRound:3,SolidBarRect:4,SolidBarHex:5,HollowTubeRound:7,HollowTubeRect:8,ShapedBeamI:10,ShapedBeamL:11,ShapedBeamT:12,ShapedBeamU:13,ShapedBeamZ:14,CustomExtrusion:15,PrefabPart:16},Operations:{Idle:1,ChamferMilling:2,Drilling:3,FaceMilling:4,SlotMilling:5,PocketMilling:6,ProfileMilling:7,Boring:8,Counterboring:9,Reaming:10,Tapping:11,EndMilling:12,Turning:13,Grooving:14,Cutoff:15,Facing:16,ThreadCutting:17},FixturePresets:{1:{'1':[0.5,0.5],'2':[0.6,0.75],'3':[1.2,1.25],'4':[1,1.5],'5':['','']},2:{'1':[0.3,1.25],'5':['',''],'6':[.1,0.75],'7':[0.25,0.5],'8':[0.3,0.75],'9':[0.5,1.5],'10':[1.25,2.5]}},processParams:{},operations:[],machineTypes:[],toolBrowseDialog:null,operationTabViews:{},addOpBtns:{},tabViewQueue:[],operationTooltip:null,init:function()
{var createTooltips=!(Prototype.Browser.IE&&Object.isUndefined(document.body.style.maxHeight));if(createTooltips)
{this.operationTooltip=new YAHOO.widget.Tooltip('operationTooltip',{container:$('tooltipContainer'),monitorresize:true,zIndex:3});this.operationTooltip.contextTriggerEvent.subscribe(this.onShowOperationTooltip);}
for(var i=0;i<this.tabViewQueue.length;i++)
{Perf.start('machiningTabViews'+i);processOrder=this.tabViewQueue[i];var tv=new YAHOO.widget.TabView('operations_'+processOrder,{'orientation':'left'});var numTabs=tv.get('tabs').length;if(numTabs>0)
{tv.set('activeIndex',0);}
Perf.end('machiningTabViews'+i);this.operationTabViews[processOrder]=tv;if(createTooltips)
{for(var j=0;j<numTabs;j++)
{this.addOperationTooltip(processOrder,j);}}
this.updateOpButtons(processOrder);}
Perf.start('initWorkpiece');this.initWorkpiece();Perf.end('initWorkpiece');Perf.start('initMachines');this.initMachines();Perf.end('initMachines');Perf.start('initOperations');this.initOperations();Perf.end('initOperations');},initWorkpiece:function()
{var workpieceId=Dom.get('workpiece:id');if(workpieceId)
{PartSubmit.addFieldListener(workpieceId,this.workpieceChange,this);this.observeWorkpieceFieldChanges();var workpieceType=workpieceId.value;if(workpieceType==Machining.Workpieces.FlatSheet)
{if($F('workpiece:sheet_cost')=='')
{this.updateWorkpiece();}}
else if(workpieceType!=Machining.Workpieces.PrefabPart&&workpieceType!='')
{if($('workpiece:bar_cost')&&$F('workpiece:bar_cost')=='')
{this.updateWorkpiece();}}}
PartSubmit.addFieldListener(['workpiece:defect_rate','selprodquant'],this.updateWorkpiece,this);},initMachines:function()
{for(var i=0;i<processes.length;i++)
{var e=$('mach:'+i+':machine_type_id');if(e)
{PartSubmit.addFieldListener(e,this.machineTypeChange,this);this.machineTypes[i]=e.value;this.addGlossaryBtn(e);this.initSubMachineType(i);}}},initSubMachineType:function(i)
{var e=$('mach:'+i+':sub_machine_type_id');if(!e)return;PartSubmit.addFieldListener(e,this.onSubMachineTypeChange,this);var btn=new Element('input',{'type':'button','value':'Customize'});e.insert({after:btn});Evt.addListener(btn,'click',this.showProcessParams,this,true);},initOperations:function()
{for(var i=0;i<processes.length;i++)
{for(var j=0,e;e=$('mach:'+i+':operations:'+j+':id');j++)
{PartSubmit.addFieldListener(e,this.onOperationChange,this);this.addOpGlossaryBtn(i,j);}}},initOpsTabView:function(processOrder)
{Machining.tabViewQueue.push(processOrder);},initOpsButtons:function(processOrder)
{var html='<div class="mach-op-btns-cont"><div class="mach-op-btns">'+'<button id="add_op_'+processOrder+'" type="button">Insert operation</button>&nbsp;'+'<button id="rem_op_'+processOrder+'" type="button" onclick="Machining.removeOperation();">Remove operation</button>&nbsp;'+'<button id="move_op_up_'+processOrder+'" type="button" onclick="Machining.moveOperationUp();">Move up</button>&nbsp;'+'<button id="move_op_down_'+processOrder+'" type="button" onclick="Machining.moveOperationDown();">Move down</button>'+'</div></div>';$('operations_'+processOrder).insert({'before':html});var addOpId='add_op_'+processOrder,addOpMenu=new YAHOO.widget.Menu('add_op_menu_'+processOrder);addOpBtn=new YAHOO.widget.Button
(addOpId,{type:'menu',menu:addOpMenu});Machining.updateOpButtons(processOrder);Machining.addOpBtns[processOrder]=addOpBtn;addOpMenu.cfg.setProperty('zIndex',3);Machining.setOperationsMenu(processOrder,Machining.operations[processOrder]);},updateOpButtons:function(processOrder)
{var container=$('add_op_'+processOrder).up('div');if(Machining.getMachineTypeId(processOrder)=='')
{container.hide();return;}
else
{container.show();}
var tv=Machining.operationTabViews[processOrder];var btns=['rem_op_'+processOrder,'move_op_up_'+processOrder,'move_op_down_'+processOrder];if(tv&&tv.get('tabs').length>1)
{btns.each(Element.show);}
else
{btns.each(Element.hide);}},getOperationOrder:function(processOrder)
{if(Machining.operationTabViews[processOrder])
{return Machining.operationTabViews[processOrder].get('activeIndex');}
return-1;},getNumOperations:function(processOrder)
{if(this.operationTabViews[processOrder])
{return this.operationTabViews[processOrder].get('tabs').length;}
return-1;},getMachineTypeId:function(processOrder)
{return $F('mach:'+processOrder+':machine_type_id');},getSubMachineTypeId:function(processOrder)
{return $F('mach:'+processOrder+':sub_machine_type_id');},setOperationsMenu:function(processOrder,operations)
{var menu=Machining.addOpBtns[processOrder].getMenu();menu.clearContent();if(!operations){return;}
$H(operations).each(function(op)
{menu.addItem
({text:op[1],url:'javascript:void(0)',onclick:{fn:Machining.onInsertOperation,obj:{'processOrder':processOrder,'operationId':op[0],'operationName':op[1]}}});});menu.render(document.body);},ajaxRequest:function(params,callback,evalScripts)
{return new Ajax.Request
(this.WEB_SERVICE,{method:'get',parameters:$H(params).toQueryString(),onSuccess:callback});},workpieceChange:function(e)
{var element=Event.element(e),processOrder=PartSubmit.getProcessOrder(),params={type:'workpiece_forms',workpiece_id:element.value,machine_type_id:Machining.getMachineTypeId(processOrder),process_order:processOrder},workpieceForm=$('workpieceFields'),processParamsForm=$('proc_material_'+processOrder);workpieceForm.update('<table><tr><td><img src="'+this.LOADING_IMG+'"></td><td style="font-weight:bold">Loading...</td></tr></table>');var callbackVars={'workpieceForm':workpieceForm,'processParamsForm':processParamsForm};this.ajaxRequest(params,Machining.finishWorkpieceChange.bindAsEventListener(callbackVars));},finishWorkpieceChange:function(transport)
{try
{var response=transport.responseJSON;this.workpieceForm.update(response.workpiece_form);Machining.observeWorkpieceFieldChanges();Machining.updateWorkpiece();}
catch(e)
{handleError('Exception in finishWorkpieceChange',e);}},observeWorkpieceFieldChanges:function()
{try
{if(!$('workpieceFields'))
{return;}
var workpieceFields=$('workpieceFields').getElementsByTagName('input');var excludeFields=[];var listener=this.updateWorkpiece.bindAsEventListener(this);for(var i=0,len=workpieceFields.length;i<len;i++)
{var elem=$(workpieceFields[i]);if(excludeFields.indexOf(elem.id)==-1)
{elem.observe('change',listener);}}}
catch(e)
{handleError('Exception in observeWorkpieceFieldChanges',e);}},updateWorkpiece:function(e,a,b)
{var srcElementId=e?Evt.getTarget(e).id:null;try
{var quantityParts=$float('selprodquant'),defectRate=$float('workpiece:defect_rate'),quantityRun=Math.ceil(quantityParts/(1-defectRate/100)),quantityDefects=quantityRun-quantityParts,materialPrice=$float('machMaterialPrice'),density=$float('machMaterialDensity');if(!isNaN(quantityRun))
$('workpiece:quantity_run').innerHTML=Math.ceil(quantityRun);var workpieceType=$F('workpiece:id');if(workpieceType=='')
{return;}
var cutCharge=$float('workpiece:cut_charge'),markupMaterial=$float('workpiece:material_markup');if(workpieceType==Machining.Workpieces.FlatSheet)
{if(srcElementId=='workpiece:sheet_length'||srcElementId=='workpiece:length'||srcElementId=='workpiece:sheet_width'||srcElementId=='workpiece:width')
{this.fixSheetDefaults();}
var sheetCostChange=(srcElementId=='workpiece:sheet_cost'),workpieceLength=$float('workpiece:length'),workpieceWidth=$float('workpiece:width'),workpieceThickness=$float('workpiece:thickness'),sheetLength=$float('workpiece:sheet_length'),sheetWidth=$float('workpiece:sheet_width'),sheetBorder=$float('workpiece:sheet_border'),sheetCutoff=$float('workpiece:sheet_cutoff');if(sheetLength==workpieceLength&&sheetWidth==workpieceWidth)
cutCharge=0;var workpieceVolume=workpieceLength*workpieceWidth*workpieceThickness,workpieceWeight=workpieceVolume*density,sheetVolume=sheetLength*sheetWidth*workpieceThickness,sheetWeight=sheetVolume*density,partsPerLength=Math.floor((sheetLength-2*sheetBorder+sheetCutoff)/(workpieceLength+sheetCutoff)),partsPerWidth=Math.floor((sheetWidth-2*sheetBorder+sheetCutoff)/(workpieceWidth+sheetCutoff)),partsPerSheet=partsPerLength*partsPerWidth,numSheets=Math.ceil(quantityRun/partsPerSheet),weightTotal=sheetWeight*numSheets,sheetCost=sheetCostChange?$float('workpiece:sheet_cost'):(sheetWeight*materialPrice),materialCost=sheetCost*numSheets,costMaterial=(materialCost+(cutCharge*quantityRun))*(1+markupMaterial/100);if(!isNaN(partsPerSheet))
$('workpiece:parts_per_sheet').innerHTML=partsPerSheet;if(!isNaN(numSheets))
$('workpiece:num_sheets').innerHTML=numSheets;if(!isNaN(sheetCost)&&!sheetCostChange)
$('workpiece:sheet_cost').value=sheetCost.toFixed(2);if(!isNaN(costMaterial))
$('mach:0:cost_material').innerHTML=costMaterial.toFixed(2);}
else
{if(srcElementId=='workpiece:bar_length'||srcElementId=='workpiece:length')
{this.fixBarDefaults();}
var barCostChange=(srcElementId=='workpiece:bar_cost'),barLength=$float('workpiece:bar_length'),barEnd=$float('workpiece:bar_end'),workpieceLength=parseFloat(this.getWorkpieceLength()),workpieceArea=this.getWorkpieceArea(),barCutoff=$float('workpiece:bar_cutoff'),barFacing=$float('workpiece:facing_stock');if(barLength==workpieceLength)
cutCharge=0;if(barEnd==0&&(barLength-workpieceLength)==barFacing)
barCutoff=0;var workpieceVolume=workpieceArea*workpieceLength,workpieceWeight=workpieceVolume*density,barVolume=workpieceArea*barLength,barWeight=barVolume*density,partsPerBar=Math.floor((barLength-barEnd)/(workpieceLength+barCutoff+barFacing)),numBars=Math.ceil(quantityRun/partsPerBar),barCost=barCostChange?$float('workpiece:bar_cost'):(barWeight*materialPrice),materialCost=barCost*numBars,costMaterial=(materialCost+(cutCharge*quantityRun))*(1+markupMaterial/100);if(!isNaN(partsPerBar))
$('workpiece:parts_per_bar').innerHTML=partsPerBar;if(!isNaN(numBars))
$('workpiece:num_bars').innerHTML=numBars;if(!isNaN(barCost)&&!barCostChange)
$('workpiece:bar_cost').value=barCost.toFixed(2);if(!isNaN(costMaterial))
$('mach:0:cost_material').innerHTML=costMaterial.toFixed(2);}}
catch(e)
{}},fixSheetDefaults:function()
{var workpieceLength=$float('workpiece:length'),sheetLength=$float('workpiece:sheet_length'),workpieceWidth=$float('workpiece:width'),sheetWidth=$float('workpiece:sheet_width'),border=$float('workpiece:sheet_border');var diffLength=sheetLength-workpieceLength,diffWidth=sheetWidth-workpieceWidth;if(isNaN(diffLength)||isNaN(diffWidth)||diffLength<0||diffWidth<0)
{return;}
if((sheetLength-workpieceLength)<(border*2)||(sheetWidth-workpieceWidth)<(border*2))
{$('workpiece:sheet_border').value=Math.min((sheetLength-workpieceLength)/2,(sheetWidth-workpieceWidth)/2);}},fixBarDefaults:function()
{var barLength=$float('workpiece:bar_length'),barEnd=$float('workpiece:bar_end'),workpieceLength=parseFloat(this.getWorkpieceLength()),barCutoff=$float('workpiece:bar_cutoff'),barFacing=$float('workpiece:facing_stock');var diffLength=barLength-workpieceLength;if(diffLength<0)
{return;}
else if(diffLength<=barFacing)
{barEnd=0;barFacing=barLength-workpieceLength;}
else if(diffLength<=(barFacing+barCutoff))
{barEnd=0;barCutoff=diffLength-barFacing;}
else if(diffLength<=(barEnd+barFacing+barCutoff))
{barEnd=diffLength-(barFacing+barCutoff);}
else
{return;}
$('workpiece:bar_end').value=roundFloat(barEnd,3);$('workpiece:bar_cutoff').value=roundFloat(barCutoff,3);$('workpiece:facing_stock').value=roundFloat(barFacing,3);},machineTypeChange:function(e)
{var machineTypeElem=Evt.getTarget(e),machineType=machineTypeElem.value,processOrder=PartSubmit.getProcessOrder(),target=$('operations_'+processOrder);var firstOperationId='operation_fields_'+processOrder+'_0';if($(firstOperationId))
{if(!confirm('Changing the machine type will remove all existing operations.  Would you like to continue?'))
{machineTypeElem.value=this.machineTypes[processOrder];return false;}
while($(firstOperationId))
{this.removeLastOperation(processOrder);}}
this.machineTypes[processOrder]=machineType;var cont=$('add_op_'+processOrder).up('div').hide();if(machineType=='')
{var table=$('production'+processOrder+'_content');removeTableRows(table,1);$('operations_'+processOrder).hide();return;}
var params={'type':'machine_type_info','workpiece_id':$F('workpiece:id'),'machine_type_id':machineType,'process_order':processOrder};Dom.addClass('doc','machine-loading');var callback=this.finishMachineTypeChange.bindAsEventListener(Machining,{'processOrder':processOrder});this.ajaxRequest(params,callback);},finishMachineTypeChange:function(transport,params)
{var response=transport.responseJSON,processOrder=params.processOrder;this.operations[processOrder]=response.operations;this.setOperationsMenu(processOrder,response.operations);this.updateOpButtons(processOrder);var table=$('production'+processOrder+'_content');removeTableRows(table,1);table.insert(response.machine_form);$('proc_production_'+processOrder).update(response.process_params_form);this.initSubMachineType(processOrder);if(response.init_operation!==null)
{var initOp=response.init_operation;this.addOperation(processOrder,initOp.id,initOp.name,0,initOp.html);}
this.onFixtureChange(getMachField(processOrder,'fixture_type'));Dom.removeClass('doc','machine-loading');},onSubMachineTypeChange:function(e)
{var processOrder=PartSubmit.getProcessOrder(),machineType=this.getMachineTypeId(processOrder),subMachineType=this.getSubMachineTypeId(processOrder),pre='mach:'+processOrder+':';var params=Machining.processParams[machineType][subMachineType];for(var id in params)
{var elem=Dom.get(pre+id);if(elem)
{elem.value=params[id];}
else if(elem=Dom.get(pre+id+'_'+params[id]))
{elem.checked=true;}}},onOperationChange:function(evt,element,operationIndex)
{if(!element||element==this)
{element=Evt.getTarget(evt);}
var idFields=element.id.split(':'),processOrder=idFields[1],operationNum=idFields[3],prefix='mach:'+processOrder+':operations:'+operationNum+':',machineTypeId=Machining.getMachineTypeId(processOrder),operationId=$F(prefix+'id'),targetElem=$('operation_content_'+processOrder+'_'+operationNum);var params={type:'operation_form',machine_type_id:machineTypeId,operation_id:operationId,process_order:processOrder,operation_order:operationNum};var operationParams={};if(operationId==Machining.Operations.EndMilling||operationId==Machining.Operations.Turning||(operationId==Machining.Operations.Boring&&machineTypeId==2))
{var shape;if(shape=$(prefix+'shape'))
{params.shape=shape.value;}}
targetElem.update('<table><tr><td><img src="'+this.LOADING_IMG+'"></td><td><b>Loading...</b></td></tr></table>');var operationIdElem=$(prefix+'id'),tabLabel=operationIdElem.options[operationIdElem.selectedIndex].text;if(tabLabel=='')tabLabel='&nbsp;';this.operationTabViews[processOrder].getTab(operationNum).set('label',tabLabel);this.operationFormUpdate($H(params),targetElem,operationIndex,processOrder);},operationFormUpdate:function(params,target,operationIndex,processOrder)
{var callbackObj={'target':target};if(operationIndex)
{callbackObj.operationIndex=operationIndex;callbackObj.processOrder=processOrder;}
var callbackFn=Machining.finishOperationFormUpdate.bindAsEventListener(callbackObj);this.ajaxRequest(params,callbackFn);},finishOperationFormUpdate:function(transport)
{var html=transport.responseText,scripts=html.extractScripts();this.target.update(html);if(Prototype.Browser.Gecko)
{var e=this.target.up('div');e.hide();e.show();}},showProcessParams:function()
{var id='procParamsDialog'+PartSubmit.getProcessOrder();var elem=Dom.showElement(id);if(!elem._dialog)
{$('formDialogs').insert({'bottom':elem});elem._dialog=createDialog(id,375,250,closeDialog);elem._dialog.render();var bd=elem._dialog.body;bd.style.overflow='auto';bd.style.height='330px';}
elem._dialog.show();},handleEstimateResponse:function(values)
{},createToolsTable:function(opNum,tools)
{var html='<tr style="font-weight: bold;"><td>Tool</td><td>Price</td><td>Quantity</td></tr>';for(var i=0;i<tools.length;i++)
{var desc=Dom.get('mach:'+opNum+':operations:'
+tools[i].operation+':tool_desc').innerHTML;html+='<tr>'+'<td>'+(i+1)+'. '+desc+'</td>'+'<td>$'+tools[i].price+'</td>'+'<td>'+tools[i].replacements+'</td>'+'</tr>';}
return html;},toggleRows:function(link)
{link=$(link);var row=link.up('tr'),icon=link.down('img'),show=icon.src.indexOf('plus')!=-1;icon.src=show?Icons.Minus:Icons.Plus;var rows=row.nextSiblings();for(var i=0,numRows=rows.length;i<numRows&&!rows[i].down('hr');i++)
{rows[i].toggle();}},showLoading:function(table)
{Machining.clearTable(table);$(table.insertRow(0)).update('<td><img src="'+Machining.LOADING_IMG+'"></td><td style="font-weight:bold">Loading...</td>');},clearTable:function(table)
{while(table.rows.length>0)
{table.deleteRow(0);}},toggleStockParams:function(element)
{this.toggleRows(element);},browseTools:function()
{var processOrder=PartSubmit.getProcessOrder(),machineType=Machining.getMachineTypeId(processOrder),operationNum=this.getOperationOrder(processOrder),hd='<div class="tl"></div><span>Select a tool</span><div class="tr"></div>',operationId=$F('mach:'+processOrder+':operations:'+operationNum+':id'),onload='Machining.browseToolsInit('+operationId+')',bd='<div id="toolBrowserFrame">Loading...</div>';var element=$('toolBrowseDialog');if(element)
{element.remove();}
$(document.body).insert('<div id="toolBrowseDialog"></div>');var dlg=new YAHOO.widget.Dialog
('toolBrowseDialog',{width:'425px',fixedcenter:true,visible:false,constraintoviewport:true,postmethod:'none',modal:true,buttons:[{text:'OK',handler:Machining.selectTool},{text:'Cancel',handler:closeDialog}]});dlg.setHeader(hd);dlg.setBody(bd);dlg.render();dlg.show();ToolBrowser.setToolInfo(processOrder,operationNum,operationId);new Ajax.Updater('toolBrowserFrame',this.TOOL_BROWSE_URL,{method:'get',parameters:'op='+operationId+'&mt='+machineType,evalScripts:true,onComplete:ToolBrowser.init});},selectTool:function()
{var tool=ToolBrowser.getSelectedTool(),pf='mach:'+ToolBrowser.processOrder+':operations:'+ToolBrowser.operationNum+':';if(tool===null)
{return;}
$(pf+'tool_desc').innerHTML=tool.description;var p=ToolBrowser.params;for(var i=0;i<p.length;i++)
{if(!YAHOO.lang.isUndefined(tool[p[i]]))
{$(pf+'tool_'+p[i]).value=tool[p[i]];}}
$(pf+'tool_standard').value=tool.standard;$(pf+'tool_diameter').value=tool.diameter;this.cancel();},addHidden:function(container,name,value)
{container.insert({bottom:'<input type="hidden" name="'+name+'" value="'+value+'"/>'});},onInsertOperation:function(event,b,item)
{var tv=Machining.operationTabViews[item.processOrder],numTabs=tv.get('tabs').length,destIndex=tv.get('activeIndex')+1;if(numTabs==0)
{destIndex=0;}
Machining.addOperation(item.processOrder,item.operationId,item.operationName,destIndex);},addOperation:function(processOrder,operationId,operationName,destIndex,operationHtml)
{var hasHtml=Object.isString(operationHtml);operationHtml=hasHtml?operationHtml:'';var table=$('operations_'+processOrder),operationNum=0;$('operations_'+processOrder).show();while($('mach:'+processOrder+':operations:'+operationNum+':id'))
{operationNum++;}
var operations=Machining.operations[processOrder];var select=document.createElement('select');select.options.add(new Option('',''));$H(operations).each(function(p){select.options.add(new Option(p[1],p[0]));});var id='mach:'+processOrder+':operations:'+operationNum+':id';var html='<tr><td><label for="'+id+'" class="lbl">Operation:</label></td>'
+'<td><select id="'+id
+'" name="'+'mach['+processOrder+'][operations]['+operationNum+'][id]'+'">'
+select.innerHTML+'</select></td></tr>';var fieldsId='operation_fields_'+processOrder+'_'+operationNum,contentId='operation_content_'+processOrder+'_'+operationNum;html='<div id="'+fieldsId+'" class="formTable"><table>'+html+'</table><div id="'+contentId+'" class="mach-op-content"></div></div>';var filter=function(e){return e.hasClassName('yui-content');},content=$('operations_'+processOrder).childElements().findAll(filter)[0];new Insertion.Bottom(content,html);var tab=new YAHOO.widget.Tab({label:operationName,contentEl:$(fieldsId),href:'#'+fieldsId});this.operationTabViews[processOrder].addTab(tab,operationNum);this.addOperationTooltip(processOrder,operationNum);this.operationTabViews[processOrder].set('activeTab',tab);if(hasHtml)
{$(contentId).update(operationHtml);}
$(id).observe('change',Machining.onOperationChange.bindAsEventListener(Machining));select=$(id);select.value=operationId;this.addOpGlossaryBtn(processOrder,operationNum);if(destIndex)
{var curIndex=Machining.operationTabViews[processOrder].get('activeIndex');if(curIndex==0)
{return;}
else
{var diff=curIndex-destIndex;for(var i=0;i<diff;i++)
{Machining.moveOperationUp();}}}
if(!hasHtml)
{Machining.onOperationChange(null,select,destIndex);}
Machining.updateOpButtons(processOrder);},moveOperationUp:function()
{var processOrder=PartSubmit.getProcessOrder(),operationOrder=this.getOperationOrder(processOrder);if(operationOrder!=0)
{this.swapOperations(processOrder,operationOrder,operationOrder-1);}},moveOperationDown:function()
{var processOrder=PartSubmit.getProcessOrder(),operationOrder=this.getOperationOrder(processOrder),numTabs=this.operationTabViews[processOrder].get('tabs').length;if(operationOrder!=numTabs-1)
{this.swapOperations(processOrder,operationOrder,operationOrder+1);}},removeOperation:function(opNum)
{var processOrder=PartSubmit.getProcessOrder(),operationOrder=this.getOperationOrder(processOrder),numTabs=this.operationTabViews[processOrder].get('tabs').length;for(var i=operationOrder;i<numTabs-1;i++)
{this.swapOperations(processOrder,i,i+1);}
this.removeLastOperation(processOrder);},removeLastOperation:function(processOrder)
{var tv=this.operationTabViews[processOrder],operationNum=tv.get('tabs').length-1;tv.removeTab(tv.getTab(operationNum));this.updateOpButtons(processOrder);if(operationNum!=0)
{tv.set('activeIndex',0);}},swapOperations:function(processOrder,opOrder1,opOrder2)
{var elements1=this.getOperationFields(processOrder,opOrder1),elements2=this.getOperationFields(processOrder,opOrder2);elements1.each(function(e)
{if(e.id&&e.id.startsWith('mach'))
{if(!YAHOO.lang.isUndefined(fieldRules[e.id]))
{fieldRules['X'+e.id]=fieldRules[e.id];fieldRules[e.id]=undefined;}
e.setAttribute('id','X'+e.id);}});var idPre=':operations:',namePre='[operations][';elements2.each(function(e)
{if(e.id&&e.id.startsWith('mach'))
{var newId=e.id.replace(idPre+opOrder2+':',idPre+opOrder1+':');if(!YAHOO.lang.isUndefined(fieldRules[e.id]))
{fieldRules[newId]=fieldRules[e.id];fieldRules[e.id]=undefined;}
e.setAttribute('id',newId);}
if(e.name)
{e.setAttribute('name',e.name.replace(namePre+opOrder2+']',namePre+opOrder1+']'));}});elements1.each(function(e)
{if(e.id&&e.id.startsWith('Xmach'))
{var oldId=e.id.substring(1);var newId=oldId.replace(idPre+opOrder1+':',idPre+opOrder2+':');if(!YAHOO.lang.isUndefined(fieldRules[e.id]))
{fieldRules[newId]=fieldRules[e.id];fieldRules[e.id]=undefined;}
e.setAttribute('id',newId);}
if(e.name)
{e.setAttribute('name',e.name.replace(namePre+opOrder1+']',namePre+opOrder2+']'));}});elements1.each(function(e)
{if(e.id&&e.id.startsWith('psf_'))
{var oldId=outputFields[e.id].id;outputFields[e.id].id=oldId.replace(idPre+opOrder1+':',idPre+opOrder2+':');}});elements2.each(function(e)
{if(e.id&&e.id.startsWith('psf_'))
{var oldId=outputFields[e.id].id;outputFields[e.id].id=oldId.replace(idPre+opOrder2+':',idPre+opOrder1+':');}});var tbl1=$('operation_fields_'+processOrder+'_'+opOrder1),tbl2=$('operation_fields_'+processOrder+'_'+opOrder2);swapIds(tbl1,tbl2);swapIds(tbl1.down('div'),tbl2.down('div'));var tv=this.operationTabViews[processOrder];tv.setTabIndex(tv.getTab(opOrder1),opOrder2);},getOperationFields:function(processOrder,operationOrder)
{var table=$('operation_fields_'+processOrder+'_'+operationOrder);if(Prototype.BrowserFeatures.XPath)
{return table.select('input','select','span');}
else
{var tags=['input','select','span'],results=[];tags.each(function(tag){results=results.concat($A(table.getElementsByTagName(tag)));});return results;}},addOpGlossaryBtn:function(processOrder,operationOrder)
{this.addGlossaryBtn('mach:'+processOrder+':operations:'+operationOrder+':id');},addMachTypeGlossaryBtn:function(processOrder)
{this.addGlossaryBtn('mach:'+processOrder+':machine_type_id');},addGlossaryBtn:function(element)
{$(element).insert({after:'&nbsp;<img onclick="Machining.glossary(this);"'+' src="'+Machining.GLOSSARY_IMG+'" class="glossaryIcon">'});},glossary:function(element)
{element=$(element).previous('select');var region=YAHOO.util.Dom.getRegion(element);glossaryObj.show({'name':getText(element)},region.left,region.bottom+2,293);},addOperationTooltip:function(processOrder,operationOrder)
{if(!this.operationTooltip)
return;var tv=this.operationTabViews[processOrder],tab=tv.getTab(operationOrder),tabLabel=tab.get('labelEl');tab.ACTIVE_TITLE='';tabLabel._parentTab=tab;var tt=this.operationTooltip;YAHOO.util.Event.on(tabLabel,"mouseover",tt.onContextMouseOver,tt);YAHOO.util.Event.on(tabLabel,"mousemove",tt.onContextMouseMove,tt);YAHOO.util.Event.on(tabLabel,"mouseout",tt.onContextMouseOut,tt);},onShowOperationTooltip:function(type,args)
{var text;try
{var processOrder=PartSubmit.getProcessOrder();var tab=args[0]._parentTab;var operationOrder=Machining.operationTabViews[processOrder].getTabIndex(tab);text=Machining.getOperationDescription(processOrder,operationOrder);}
catch(e)
{text="";}
this.cfg.setProperty('text',text);},initMachiningDetails:function(processOrder)
{var table=$('machSummary_'+processOrder),elements=table.select('.operation-desc');for(var i=0,count=elements.length;i<count;i++)
{var opOrder=elements[i].id.split('_')[2];elements[i].innerHTML=this.getOperationDescription(processOrder,opOrder);}},getOperationDescription:function(processOrder,operationOrder)
{var getField=getOperationField.curry(processOrder,operationOrder);var _get=function(p,o,fieldName){return getText(getOperationField(p,o,fieldName));};var get=_get.curry(processOrder,operationOrder);var operationId=parseInt(getField('id').value),machineType=getMachField(processOrder,'machine_type_id').value,ops=Machining.Operations,desc='';if(operationId==ops.Idle)
{return get('idle_type');}
var pathType=function()
{var p=getField('path_type').value;return(p!=2)?get('path_type').split(' ')[0].toLowerCase():'';};var toolSize='';try
{toolSize=getField('tool_desc').innerHTML.match(/^M?[^A-Z]*/)[0];}catch(e){toolSize='';}
var getQuantity=(function(p,o,fieldName)
{var q=$int(getOperationField(p,o,fieldName));return((q>1)?(' ('+q+'x)'):'');}).curry(processOrder,operationOrder);if(machineType==Machining.MachineTypes.CNCMilling)
{switch(operationId)
{case ops.Drilling:return toolSize+'drilled '+
get('hole_type').toLowerCase()+
getQuantity('hole_quantity');case ops.Boring:return get('hole_diameter')+'" bore'+getQuantity('hole_quantity');case ops.Counterboring:return toolSize+'counterbore'+getQuantity('hole_quantity');case ops.Reaming:return toolSize+
get('finish_type').toLowerCase()+' ream'+getQuantity('hole_quantity');case ops.Tapping:return toolSize+
get('thread_type').toLowerCase()+' tap'+
getQuantity('thread_quantity');case ops.FaceMilling:return get('face_length')+'"x'+get('face_width')+'" face'+getQuantity('face_quantity');case ops.ChamferMilling:var type=get('chamfer_type').toLowerCase().split(' ');type.splice(1,0,'chamfer');return get('chamfer_width')+'" '
+type.join(' ')
+getQuantity('chamfer_quantity');case ops.EndMilling:var shape=getField('shape').value;var shapeLabels=['','complete profile','side profile','side profile with 1 end','side profile with 2 ends','complete slot','slot through 2 sides','slot through 1 side','contained slot','cuboid pocket','pyramid pocket','cylinder pocket','cone pocket','Custom pocket'];if(shape>=1&&shape<=4)
{desc=get('profile_width')+'" ';}
else if(shape>=5&&shape<=8)
{desc=get('slot_width')+'" ';}
else if(shape==9||shape==10)
{desc=get('pocket_top_length')+'"x'+
get('pocket_top_width')+'" ';}
else if(shape==11||shape==12)
{desc=get('pocket_top_length')+'" ';}
return desc+shapeLabels[shape]+''
+getQuantity('feature_quantity');}}
else if(machineType==Machining.MachineTypes.CNCTurning)
{switch(operationId)
{case ops.Facing:return get('face_depth')+'" face';case ops.Turning:var shape=getField('shape').value;if(shape==1)
{return get('turn_diameter_end')+'" turned step';}
else if(shape==2)
{return get('turn_diameter_end')+'" '+pathType()+' turned taper';}
else if(shape==3)
{return get('chamfer_width')+'" turned chamfer';}
else if(shape==4)
{return'Turned contour';}
return'';case ops.Grooving:return get('groove_width')+'" '+pathType()+'groove'+getQuantity('feature_quantity');case ops.Cutoff:return toolSize+'cutoff'+
getQuantity('feature_quantity');case ops.ThreadCutting:return get('thread_diameter')+'"-'+
get('num_threads')+' threads';case ops.Drilling:return toolSize+'drilled hole';case ops.Boring:var shape=getField('shape').value;if(shape==1)
{return get('bore_diameter_end')+'" bored step';}
else if(shape==2)
{return get('bore_diameter_end')+'" '+pathType()+' bored taper';}
else if(shape==3)
{return get('chamfer_width')+'" bored chamfer';}
else if(shape==4)
{return'Bored contour';}
case ops.Reaming:return toolSize+
get('finish_type').toLowerCase()+' ream';case ops.Tapping:return toolSize+'tap';}}
return'';},toggleAvgSpacing:function(element)
{this.toggleField(element,'_','_spacing','1',false);},toggleSurfaceRough:function(element)
{var ROUGH='1';this.toggleField(element,':',':finish_id',ROUGH,false);this.toggleField(element,':',':tool_nose',ROUGH,false);},toggleOverrun:function(element)
{var CONTAINED='3';this.toggleField(element,':',':cut_clearance',CONTAINED,false)},onFixtureChange:function(element)
{var CUSTOM=5,BAR_FEEDER=6;this.toggleField(element,':',':fixture_cost',CUSTOM,true);var fixtureType=$F(element),machineTypeId=this.getMachineType(element),preset=Machining.FixturePresets[machineTypeId][fixtureType],id=element.id,prefix=id.substring(0,id.lastIndexOf(':')),processOrder=id.split(':')[1];if(machineTypeId==Machining.MachineTypes.CNCTurning)
this.toggleField(element,':',':bar_load_time',BAR_FEEDER,true);$(prefix+':fixture_setup_time').value=preset[1];var timeElem=getOperationField(processOrder,0,'time');if(this.getNumOperations(processOrder)==1&&timeElem)
{timeElem.value=preset[0];}},onPalletChange:function(element)
{this.toggleField(element,':',':pallet_time',1,true);},toggleAutoToolTime:function(element)
{Machining.toggleField(element,':',':tool_change_auto','1',true);},toggleDepthType:function(element)
{Machining.toggleField(element,':',':depth_type','1',true);},toggleField:function(element,seperator,fieldName,value,show)
{try
{var id=element.id,prefix=id.substring(0,id.lastIndexOf(seperator));row=$(prefix+fieldName).up('tr'),condition=$F(element)==value;if((condition&&show)||(!condition&&!show))
{row.show();}
else
{row.hide();}}
catch(e){}},getFieldPrefix:function(element)
{return element.id.substr(0,element.id.lastIndexOf(':')+1);},getMachineType:function(element)
{var parts=element.id.split(':');return parseInt($F('mach:'+parts[1]+':machine_type_id'));},getWorkpieceArea:function()
{var Workpieces=Machining.Workpieces;var length=parseFloat(this.getWorkpieceLength()),width=parseFloat(this.getWorkpieceWidth()),height=parseFloat(this.getWorkpieceHeight());var thickness=null;if($('workpiece:thickness'))
thickness=tryParseFloat($F('workpiece:thickness'));switch(parseInt($F('workpiece:id')))
{case Workpieces.SolidBarRound:return Math.PI*Math.pow(width/2,2);case Workpieces.SolidBarRect:return width*height;case Workpieces.SolidBarHex:return 1.5*Math.pow(height,2)/Math.sqrt(3);case Workpieces.HollowTubeRound:return Math.PI*Math.pow(width/2,2)-Math.PI*Math.pow((width-2*thickness)/2,2);case Workpieces.HollowTubeRect:return width*height-(width-2*thickness)*(height-2*thickness);case Workpieces.ShapedBeamI:return 2*width*thickness+(height-2*thickness)*thickness;case Workpieces.ShapedBeamL:return width*thickness+(height-thickness)*thickness;case Workpieces.ShapedBeamT:return width*thickness+(height-thickness)*thickness;case Workpieces.ShapedBeamU:return 2*height*thickness+(width-2*thickness)*thickness;case Workpieces.ShapedBeamZ:return height*thickness+(width-thickness)*thickness;case Workpieces.FlatSheet:return length*width*thickness
default:return length*width;}},getWorkpieceLength:function()
{try
{if(ppid==ProcessIds.Machining)
return $F('workpiece:length');else
return $F('envlengthsel');}
catch(e)
{return'';}},getWorkpieceWidth:function()
{try
{if(ppid==ProcessIds.Machining)
{var Workpieces=Machining.Workpieces;switch(parseInt($F('workpiece:id')))
{case Workpieces.SolidBarRound:case Workpieces.HollowTubeRound:return $F('workpiece:diameter');case Workpieces.SolidBarHex:return 2*$F('workpiece:size')/sqrt(3);default:return $F('workpiece:width');}}
else
{return $F('envwidthsel');}}
catch(e)
{return'';}},getWorkpieceHeight:function()
{if(ppid==ProcessIds.Machining)
{var fieldName,workpieceType=$F('workpiece:id'),Workpieces=Machining.Workpieces;switch(parseInt(workpieceType))
{case Workpieces.FlatSheet:fieldName='thickness';break;case Workpieces.SolidBarRound:case Workpieces.HollowTubeRound:fieldName='diameter';break;case Workpieces.SolidBarHex:fieldName='size';break;default:fieldName='height';}
fieldName='workpiece:'+fieldName;}
else
{fieldName='envheightsel';}
return $F(fieldName);},getMaxWpDim:function()
{var dims=[this.getWorkpieceLength(),this.getWorkpieceHeight(),this.getWorkpieceWidth()];return Math.max(Math.max(dims[0],dims[1]),dims[2]);},validateMin:function(value,min,msgEnd)
{if(min!=''&&parseFloat(value)<parseFloat(min))
{return{valid:false,message:'Value must be greater than '+msgEnd+'.'};}
return{valid:true};},validateMax:function(value,max,msgEnd)
{if(max!=''&&parseFloat(value)>parseFloat(max))
{return{valid:false,message:'Value must be less than '+msgEnd+'.'};}
return{valid:true};},validateAll:function(element,value)
{var numFunctions=arguments.length-2;var res;for(var i=0;i<numFunctions;i++)
{res=arguments[i+2](element,value);if(!res.valid)
{return res;}}
return{valid:true};},valMaxWpDim:function(element,value)
{var mt=this.getMachineType(element),maxWpDim;switch(mt)
{case this.MachineTypes.CNCMilling:maxWpDim=this.getMaxWpDim();break;case this.MachineTypes.CNCTurning:maxWpDim=Math.max(this.getWorkpieceHeight(),this.getWorkpieceWidth());break;default:maxWpDim=this.getMaxWpDim();}
return this.validateMax(value,maxWpDim,'the greatest workpiece dimension');},valMaxWpDimTurning:function(element,value)
{var maxWpDim=Math.max(this.getWorkpieceHeight(),this.getWorkpieceWidth());return this.validateMax(value,maxWpDim,'the greatest workpiece dimension');},valMinWpLength:function(element,value)
{var length=this.getWorkpieceLength();return this.validateMin(value,length,'the workpiece length');},valMinWpWidth:function(element,value)
{var width=this.getWorkpieceWidth();return this.validateMin(value,width,'the workpiece width');},valMaxWpLength:function(element,value)
{var length=this.getWorkpieceLength();return this.validateMax(value,length,'the workpiece length');},valMaxWpWidth:function(element,value)
{var width=this.getWorkpieceWidth();return this.validateMax(value,width,'the workpiece width');},valMaxWpHeight:function(element,value)
{var height=this.getWorkpieceHeight();return this.validateMax(value,$F(fieldName),'the workpiece height');},valMaxHoleDepth:function(element,value)
{var holeDepth=$F(this.getFieldPrefix(element)+'hole_depth');return this.validateMax(value,holeDepth,'the hole depth');},valMinToolDiameter:function(element,value)
{var id=element.id,min=$F(id.substr(0,id.lastIndexOf(':'))+':tool_diameter');return this.validateMin(value,min,'the tool diameter');},valMaxSheetLength:function(element,value)
{return this.validateMax(value,$F('workpiece:sheet_length'),'the sheet length');},valBarEnd:function(element,value)
{return this.validateMax(value,$F('workpiece:bar_length'),'the bar length');},valCutDepth:function(element,value)
{var prefix=this.getFieldPrefix(element),operationId=$F(prefix+'id'),depth='',Ops=Machining.Operations;var fields={};fields[Ops.ProfileMilling]='profile';fields[Ops.FaceMilling]='face';fields[Ops.Facing]='face';fields[Ops.SlotMilling]='slot';fields[Ops.PocketMilling]='pocket';depth=$F(prefix+fields[parseInt(operationId)]+'_depth');return this.validateMax(value,depth,'the depth');},valRadialCutDepth:function(element,value)
{var prefix=this.getFieldPrefix(element),operationId=parseInt($F(prefix+'id')),Ops=Machining.Operations;var mt=this.getMachineType(element);switch(mt)
{case this.MachineTypes.CNCMilling:var toolDiameter=parseFloat($F(prefix+'tool_diameter'));return this.validateMax(value,.25*toolDiameter,'1/4 of the tool diameter');case this.MachineTypes.CNCTurning:var max;if(operationId==Ops.Turning)
max=($F(prefix+'turn_diameter_start')-$F(prefix+'turn_diameter_end'))/2;else if(operationId==Ops.Boring)
max=($F(prefix+'bore_diameter_start')-$F(prefix+'bore_diameter_end'))/2;return this.validateMax(value,max,'1/2 of the start diameter - the end diameter');}},valCutStep:function(element,value)
{var prefix=this.getFieldPrefix(element),operationId=parseInt($F(prefix+'id')),toolDiameter=$F(prefix+'tool_diameter'),Ops=Machining.Operations,msg;if(toolDiameter!='')
{toolDiameter=parseFloat(toolDiameter);if(operationId==Ops.ProfileMilling)
{toolDiameter=toolDiameter/2;msg='half of the tool diameter';}
else
{msg='the tool diameter';}}
return this.validateMax(value,toolDiameter.toString(),msg);},valChamferWidth:function(element,value)
{var prefix=this.getFieldPrefix(element),mt=this.getMachineType(element);switch(mt)
{case this.MachineTypes.CNCMilling:var max=$F(prefix+'tool_diameter')/2;return this.validateMax(value,max,'half of the tool diameter');case this.MachineTypes.CNCTurning:var max=$F(prefix+'tool_diameter');return this.validateMax(value,max,'the tool width');}},valPocketTopLength:function(element,value)
{var res=this.valMaxWpLength(element,value);if(res.valid)
{res=this.valMinToolDiameter(element,value);}
return res;},valPocketTopWidth:function(element,value)
{var res=this.valMaxWpWidth(element,value);if(res.valid)
{res=this.valMinToolDiameter(element,value);}
return res;},valPocketBottomLength:function(element,value)
{var id=element.id,max=$F(id.substr(0,id.lastIndexOf(':'))+':pocket_top_length'),res=this.validateMax(value,max,'the pocket top length');if(res.valid)
{res=this.valMinToolDiameter(element,value);}
return res;},valPocketBottomWidth:function(element,value)
{var id=element.id,max=$F(id.substr(0,id.lastIndexOf(':'))+':pocket_top_width');res=this.validateMax(value,max,'the pocket top width');if(res.valid)
{res=this.valMinToolDiameter(element,value);}
return res;},valDiameterEnd:function(element,value)
{var id=element.id,prefix=id.substr(0,id.lastIndexOf(':')+1),operationId=$F(prefix+'id'),Ops=Machining.Operations;var fields={};fields[Ops.Turning]='turn';fields[Ops.Grooving]='groove';fields[Ops.Cutoff]='cutoff';var diameterStart=$F(prefix+fields[parseInt(operationId)]+'_diameter_start');return this.validateMax(value,diameterStart,'the start diameter');},valBoreDiameterEnd:function(element,value)
{var ret=this.valMaxWpDim(element,value);if(ret.value)
{var id=element.id,prefix=id.substr(0,id.lastIndexOf(':')+1),diameterStart=$F(prefix+'bore_diameter_start');ret=this.validateMin(value,diameterStart,'the start diameter');}
return ret;},valDepth:function(element,value)
{var mt=this.getMachineType(element);switch(mt)
{case this.MachineTypes.CNCMilling:return this.valMaxWpDim(element,value);case this.MachineTypes.CNCTurning:return this.valMaxWpLength(element,value);}
return{valid:true};}};var toolSizeParams;var ToolBrowser={tools:[],browseSelect:null,processOrder:null,operationNum:null,tabView:null,params:['id','standard','material','teeth','price','life','speed','point_angle','type','tpi'],init:function()
{Event.observe('tool_standard','change',ToolBrowser.toolStandardChange);ToolBrowser.loadValues();ToolBrowser.updateToolStandard($F('tool_standard'));},toolStandardChange:function(evt)
{ToolBrowser.updateToolStandard(evt.element().value);},updateToolStandard:function(std)
{$('toolBrowseInputs').select('li.std').invoke('hide');$('toolBrowseInputs').select('li.std'+std).invoke('show');},setToolInfo:function(processOrder,operationNum,operationId)
{ToolBrowser.processOrder=processOrder;ToolBrowser.operationNum=operationNum;ToolBrowser.operationId=operationId;},loadValues:function()
{var pf='mach:'+ToolBrowser.processOrder+':operations:'+ToolBrowser.operationNum+':';var p=ToolBrowser.params;for(var i=0,src,dest;i<p.length;i++)
{if((src=$(pf+'tool_'+p[i]))&&src.value!=""&&(dest=$('tool_'+p[i])))
{dest.value=src.value;}}
var std=$F('tool_standard');var f={3:'English',4:'Metric',5:'Wire',6:'Letter'};if(std==1)
{$('toolDiameterEnglish').value=$F(pf+'tool_diameter');if($('toolTPI'))$('toolTPI').value=$F(pf+'tool_tpi');}
else if(std==2)
{$('toolDiameterMetric').value=tryParseFloat($F(pf+'tool_diameter'))*25.4;if($('toolPitch'))
{var v=tryParseFloat($F(pf+'tool_tpi'));if(v!=0)$('toolPitch').value=(1/v)*25.4;}}
else if(std!='')
{$('toolSize'+f[std]).value=$F(pf+'tool_id');}},finishSetOperation:function(transport)
{var response,tools,toolTypes;response=transport.responseJSON;ToolBrowser.tools=tools=response.tools;toolTypes=response.tool_types;tools.each
(function(tool)
{var name=ToolBrowser.makeDescription(tool.name,tool.material,tool.diameter,tool.teeth);ToolBrowser.browseSelect.options.add(new Option(name,tool.id));});var customToolTypes=$('customToolType');customToolTypes.clear();toolTypes.each
(function(type)
{customToolTypes.options.add(new Option(type.name,type.id));});},getSelectedTool:function()
{var tool={id:''};var p=ToolBrowser.params,sizeDescription;for(var i=0,e;i<p.length;i++)
{if(e=$('tool_'+p[i]))
{tool[p[i]]=e.value;}}
var std=tool.standard;if(std==1)
{tool.id=-1;tool.diameter=$F('toolDiameterEnglish');tool.description=tool.diameter+'"';}
else if(std==2)
{tool.id=-1;tool.diameter=tryParseFloat($F('toolDiameterMetric'))/25.4;tool.description=$F('toolDiameterMetric')+'mm';if($('toolPitch'))
{var v=tryParseFloat($F('toolPitch'));if(v!=0)tool.tpi=1/(v/25.4);}}
else if(std!='')
{var f={3:'English',4:'Metric',5:'Wire',6:'Letter',7:'Pipe'};var toolSize=$('toolSize'+f[std]);tool.id=toolSize.value;var values=toolSizeParams['toolSize'+f[std]][tool.id];if(!Object.isUndefined(values))
{tool.diameter=values.diameter;if(values.tpi)
tool.tpi=values.tpi;}
else
{alert("Please select a tool diameter.");return null;}
tool.description=toolSize.options[toolSize.selectedIndex].text;tool.description=tool.description.replace(/\([\d\.]*\)/,'');}
var toolTypeStr=getText('tool_type'),matStr=(tool.material==1)?'HSS':'Carbide';tool.description+=' '+toolTypeStr+' ('+matStr+')';return tool;}};function machGlossary(entry,element)
{var region=YAHOO.util.Dom.getRegion(element);glossaryObj.show({'name':entry},region.left,region.bottom+2,293);}
function getMachField(processOrder,fieldName)
{return $('mach:'+processOrder+':'+fieldName);}
function getOperationField(processOrder,operationOrder,fieldName)
{return $('mach:'+processOrder+':operations:'+operationOrder+':'+fieldName);}
function tryParseFloat(str)
{try{return parseFloat(str);}
catch(e){return 0;}}
function getText(element)
{element=$(element);switch(element.tagName.toLowerCase())
{case'input':return element.value;case'select':return element.options[element.selectedIndex].text;case'button':return element.textContent;case'a':return element.text;}
return null;}
function swapIds(e1,e2)
{var tmp=e1.id;e1.writeAttribute('id','tmp'+e2.id);e2.writeAttribute('id',tmp);e1.writeAttribute('id',e1.id.substring(3));}
function removeTableRows(table,numRemaining)
{while(table.rows.length>numRemaining)
{table.deleteRow(table.rows.length-1);}}
YAHOO.widget.TabView.prototype.setTabIndex=function(tab,index)
{var Dom=YAHOO.util.Dom,tabs=this.get('tabs'),curIndex=this.getTabIndex(tab);if(index>=tabs.length||curIndex==index)
{return;}
var activeTab=this.get('activeTab');var src=Dom.getAncestorByTagName(tab.get('labelEl'),'li'),dest=Dom.getAncestorByTagName(tabs[index].get('labelEl'),'li');if(curIndex>index)
{Dom.insertBefore(src,dest);}
else
{Dom.insertAfter(src,dest);}
tabs.splice(curIndex,1);tabs.splice(index,0,tab);this.set('activeTab',activeTab);};