/* Tests to figure out the browser */
var ie4=document.all
var ns6=document.getElementById&&!document.all
var isDisabled=1;




function preload(imgObj,imgSrc) {
	eval(imgObj+' = new Image()')
	eval(imgObj+'.src = "'+imgSrc+'"')
}

preload('j3','newimages/arrow.gif');
preload('j4','newimages/blank.gif');
preload('j5','newimages/bore.gif');
preload('j6','newimages/bore-over.gif');
preload('j7','newimages/cushions.gif');
preload('j8','newimages/cushions-over.gif');
preload('j9','newimages/cylinder.gif');
preload('j10','newimages/cylinder-over.gif');
preload('j11','newimages/loadingimages.gif');
preload('j12','newimages/ME3-Cap.gif');
preload('j13','newimages/ME3-Cap-DRE.gif');
preload('j14','newimages/ME3-Flange.gif');
preload('j15','newimages/ME3-Flange-DRE.gif');
preload('j16','newimages/ME4-Cap.gif');
preload('j17','newimages/ME4-Flange.gif');
preload('j18','newimages/ME5.gif');
preload('j19','newimages/ME5-DRE.gif');
preload('j20','newimages/ME6.gif');
preload('j21','newimages/ME6-DRE.gif');
preload('j22','newimages/MF1.gif');
preload('j23','newimages/MF1-DRE.gif');
preload('j24','newimages/MF2.gif');
preload('j25','newimages/MF5.gif');
preload('j26','newimages/MF5-DRE.gif');
preload('j27','newimages/MF6.gif');
preload('j28','newimages/MF6-DRE.gif');
preload('j29','newimages/MNR1.gif');
preload('j30','newimages/MNR1-DRE.gif');
preload('j31','newimages/mounting.gif');
preload('j32','newimages/mounting-over.gif');
preload('j33','newimages/MP1.gif');
preload('j34','newimages/MP2.gif');
preload('j35','newimages/MP3.gif');
preload('j36','newimages/MP5.gif');
preload('j37','newimages/MS1.gif');
preload('j38','newimages/MS1-DRE.gif');
preload('j39','newimages/MS2.gif');
preload('j40','newimages/MS2-DRE.gif');
preload('j4a','newimages/MS3.gif');
preload('j41','newimages/MS4.gif');
preload('j42','newimages/MS4-DRE.gif');
preload('j43','newimages/MS7.gif');
preload('j44','newimages/MS7-DRE.gif');
preload('j45','newimages/MT1.gif');
preload('j46','newimages/MT1-DRE.gif');
preload('j47','newimages/MT2.gif');
preload('j48','newimages/MT4.gif');
preload('j49','newimages/MT4-DRE.gif');
preload('j50','newimages/MX0.gif');
preload('j51','newimages/MX0-DRE.gif');
preload('j52','newimages/MX1.gif');
preload('j53','newimages/MX1-DRE.gif');
preload('j54','newimages/MX2.gif');
preload('j55','newimages/MX2-DRE.gif');
preload('j56','newimages/MX3.gif');
preload('j57','newimages/MX3-DRE.gif');
preload('j58','newimages/partno.gif');
preload('j59','newimages/rod.gif');
preload('j60','newimages/rodend.gif');
preload('j61','newimages/rodend-over.gif');
preload('j62','newimages/rod-over.gif');
preload('j63','newimages/stroke.gif');
preload('j64','newimages/strokeNote.gif');
preload('j65','newimages/stroke-over.gif');
preload('j66','newimages/typeA.gif');
preload('j67','newimages/typeB.gif');
preload('j68','newimages/typeC.gif');
preload('j69','newimages/typeD.gif');
preload('j70','newimages/typeF.gif');
preload('j71','newimages/typeP.gif');
preload('j72','newimages/bg1.gif');
preload('j73','newimages/top.gif');
preload('j74','newimages/bot.gif');
preload('j75','newimages/header.gif');
preload('j76','newimages/footer.gif');
preload('j77','newimages/bg2.gif');
preload('j78','newimages/bg3.gif');
preload('j79','newimages/fe1.gif');
preload('j80','newimages/fe2.gif');
preload('j81','newimages/fe3.gif');
preload('j82','newimages/portposition.gif');
preload('j83','newimages/download.gif');
preload('j84','newimages/download-over.gif');
preload('j85','newimages/portposition-over.gif');
preload('j86','newimages/partno-over.gif');
preload('j87','newimages/bg4.gif');
preload('j88','newimages/bg.gif');


function buildPartNum() {
	
   if(isDisabled) return false;
   
   form = document.partbuilderform;
   setPartNum();
   result = form.partno.value;

   corpID = "3525";

   //   alert("partnum: " + result);
   VirtualCAD(corpID,result);
}

menuImages = ['cylinder', 'bore', 'rod', 'stroke', 'rodend', 'cushions', 'mounting','portposition']

/* builds part num from form fields merged together - although if the 'lehigh_prefix' global variable is set this will use the alternate Lehigh code instead of the value for field 1 */
function setPartNum() {
   form = document.partbuilderform;

   // using a separate function for calculating the part number so things are more modular and easier to test
   partnos = [form.partno1.value, form.partno2.value, form.partno3.value, form.partno4.value, form.partno5.value, form.partno6.value, form.partno7.value]
   document.partbuilderform.partno.value = calculatePartNum(partnos);   
}

function calculatePartNum(partnos) {
   // *** figure out if this is a Higginson-only part or a Lehigh part, and build the part number appropriately
    

   is_higginson_part = true;


   if(partnos[0]=='HD' && (partnos[1] > 80 || partnos[1] == 10)){
      is_higginson_part = false;   		   		
   	}   	

   if((partnos[0]=='AA' || partnos[0]=='MH') && partnos[1] < 80 && partnos[1] != 10 && (partnos[6]=="03 S" || partnos[6]=="03 D")){
      is_higginson_part = false;   		   		
   	}   	
   	


   if (partnos[0] == 'L' || partnos[0] == 'E' || partnos[0] == 'W' || partnos[0] == 'V' || partnos[1] == '01'){
      is_higginson_part = false;
   } else if (partnos[0] == 'HD' && (partnos[1] == '10' || partnos[1] == '12')) {
      is_higginson_part = false;
   } else if (partnos[0] == 'AA' && (partnos[1] == '01' || partnos[1] == '12' || partnos[1] == '14' || partnos[1] == '16' || partnos[1] == '18' || partnos[1] == '02')) {
      is_higginson_part = false;
   }

   if (partnos[6] == '37 00' || partnos[6] == '36 00' || partnos[6] == '36 D') {
      is_higginson_part = false;
   }
   

   if  (partnos[6] == '10 00' || partnos[6] == '10 D') {
      is_higginson_part = false;
   }


   if (partnos[0] == 'HD' && partnos[1] == '70') {
      is_higginson_part = false;
   }

   
   if (partnos[6] == '13 S' || partnos[6] == '13 D') {
      is_higginson_part = true;
   }

   if (is_higginson_part == true) {
      port_code = 'N';
      if (partnos[0] == 'HD') {
		 port_code = 'S';
      }
      result = "Higginson - " + partnos[0] + partnos[1] + partnos[2] + partnos[3] + partnos[4] + port_code + partnos[5] + (partnos[6].replace(' ', ''));
   } else {
   	  


	
   if(partnos[0]=="HD")partnos[0]="X";
   if(partnos[0]=="AA")partnos[0]="J";
   if(partnos[0]=="MH")partnos[0]="H";
   	  
   code=partnos[6];
   i1=-1;
   j1=-1;
      
   menus = ['a', 'b', 'c', 'd', 'e'];
   for (i=0; i<menus.length; i++) {
      menuvals = eval("mounts_" + menus[i]);

      for (j=0; j<menuvals.length; j++) {
		 	if(menuvals[j][2]==code){
		 		i1=i;
		 		j1=j;
			}
    	}
   }

   
   if(i1!=-1){
		eval("menuvals = l_mounts_" + menus[i1]);		  
   		partnos[6] = menuvals[j1][1]; 

   	}
   
   	     	  
   	  
   	
      result = "Lehigh - " + partnos[0] + partnos[1] + partnos[2] + partnos[3] + partnos[4] + partnos[5] + (partnos[6].replace(' ', ''));
   }
   return result;
}

function clearPartNum() {
   document.partbuilderform.partno.value = '';
}

/* Set menu values and swap images etc. */

function setupNextSelection(source_number) {
      for (i=0; i<menuImages.length; i++) {
	 if (i == (source_number - 1)) {
	    imgAct(menuImages[i]);
	 } else {
	    imgInact(menuImages[i]);
	 }
      }

      menuItemActive = (source_number - 1);

      isDisabled=1;
      document.download.src='newimages/download.gif';
	  document.partn.src = 'newimages/partno.gif';
      

      for (i=source_number; i<=8; i++) {
	 eval("document.partbuilderform.partno" + i + ".value = '';");
	 eval("document.partbuilderform.fieldno" + i + ".value = '';");
      }
      clearPartNum();
   }

   /* *** SET VALUES FROM MENU SELETIONS *** */
   function setSeries(newcode, newval) {
      // passed value is series name, like 'JHD', 'VAC', etc.
      document.partbuilderform.fieldno1.value = newval;
      buildBoreMenu(newcode);
      setupNextSelection(2);
   }

function setBore(newval) {
   non_lehigh = false;
   if (newval.substring(0, 1) == 'x') {
      newval = newval.substring(1);
   }
   document.partbuilderform.fieldno2.value = newval + "\"";
   buildRodMenu(newval);
   buildRodEndMenu();
   buildCushionMenu(newval);
   buildMountingTopMenu();
   buildMountingSubMenus();
   buildPortPosition();
   setupNextSelection(3);
}

function setRodDiameter(number) {
   numRodDiameter = number;
   document.partbuilderform.fieldno3.value = numRodDiameter + "\"";
   //enableButtonIfFormComplete();
   setupNextSelection(4);
   document.partbuilderform.fieldno4.readOnly = false;
   document.part_graphic.src = 'newimages/strokeNote.gif'
   document.partbuilderform.fieldno4.focus();
}

/* If you've finished selecting but accidentally mouseover and then mousout of the stroke field, everything resets.
 * To keep this from happening, we store the value on mouseover with this function and see if it's changed on mouseout in setStrokeValue.
 */
function storeStrokeValue() {   
   cleanStroke();
   prevStrokeValue = document.partbuilderform.fieldno4.value;
}

function cleanStroke() {
   newval = document.partbuilderform.fieldno4.value;
   newval = newval.replace("\"", "");
   allcharsRegExp = /[^\.\d]/g
   newval = newval.replace(allcharsRegExp, "");
   if (newval != '') {
      fieldval = newval + "\"";
   } else {
      fieldval = newval;
   }
   document.partbuilderform.fieldno4.value = fieldval;
   return newval;
}

function setStrokeValue() {   
   newval = cleanStroke();
     
   if ((newval > 0) && (newval < 100)) {
      strokepartno = 100*newval;
      strokepartno2 = strokepartno.toFixed(0);
      if ((strokepartno2 <= 999) && (strokepartno2 >= 100)) {
	 strokepartno2 = "0" + strokepartno2;
      }
      else if ((strokepartno2 <= 99) && (strokepartno2 >= 1)){
         strokepartno2 = "00" + strokepartno2;
      }
      
      //strokepartno = 100*newval;
      document.partbuilderform.partno4.value = strokepartno2;
      //enableButtonIfFormComplete();
		
		p0=document.partbuilderform.fieldno4.value;      
      if (p0.substr(p0.length-1,1) == "\"" ){
		 setupNextSelection(5);
		 this.focus();
		 document.part_graphic.src = 'newimages/blank.gif'
      }

   } else if (newval >= 100) {
      newval = '';
      document.partbuilderform.fieldno4.value = '';
      alert ("Note that 99.99 inches is the max value.\nFor custom requirements, contact Lehigh at (800) 257-9515.");
      
   } else if (newval == '') {
      document.partbuilderform.fieldno4.value = prevStrokeValue;
   } else {
      newval = '';
      document.partbuilderform.fieldno4.value = '';
      alert ("You have entered an invalid Stroke Length.  Please do not use letters or more than one decimal point.  Example, 14.50.");      
   }
   //   } 
}

function setRodEnd(newval) {
   document.partbuilderform.fieldno5.value = newval;
   //enableButtonIfFormComplete();
   setupNextSelection(6);
}

function setCushion(newval) {
   document.partbuilderform.fieldno6.value = newval;
   setupNextSelection(7);
}

function setPortPosition(newval) {
   	document.partbuilderform.fieldno8.value = newval;
   	setupNextSelection(9);
   	setPartNum();
    isDisabled=0;
    document.download.src='newimages/download-over.gif';
	document.partn.src='newimages/partno-over.gif';
}

function setMounting(newval) {
   document.partbuilderform.fieldno7.value = newval;
   setupNextSelection(8);


}

/* Set up the menu divs */
   /* Normal single-level menus */
   if (ie4||ns6) {
      document.write('<div id="dropmenudiv" class="menustyle" style="visibility:hidden;width: 160px" ')
      document.write(' onmouseover="clearhidemenu(\'dropmenudiv\')" onmouseout="delayhidemenu(\'dropmenudiv\')"></div>')
   }

/* Menus that have cascading children */
   if (ie4||ns6) {
      document.write('<div id="dropmenudiv-top" class="menustyle" style="visibility:hidden;width: 160px" ')
      document.write(' onmouseover="clearhidemenu(\'dropmenudiv-top\'); clearhidemenu2(\'dropmenudiv-sub\')" onmouseout="delayhidemenu(\'dropmenudiv-top\'); delayhidemenu2(\'dropmenudiv-sub\')"></div>')
   }

/* Child menus of dropmenudiv-top menus */
   if (ie4||ns6) {
      document.write('<div id="dropmenudiv-sub" class="menustyle" style="visibility:hidden;width: 160px" ')
      document.write(' onmouseover="clearhidemenu(\'dropmenudiv-top\'); clearhidemenu2(\'dropmenudiv-sub\')" onmouseout="delayhidemenu(\'dropmenudiv-top\'); delayhidemenu2(\'dropmenudiv-sub\')"></div>')
   }

/* Makes it easier to build menus */
   function build_menu_link(functionName, builderfieldname, builderval, label, graphic) {
      result = "<A HREF=";
      result = result + '"javascript:';
      result = result + "document.partbuilderform." + builderfieldname + ".value = '" + builderval + "'; ";
      result = result + functionName + "; "; 
      result = result + 'hidemenu(' + "'dropmenudiv'" + '); "' 
      if (graphic != undefined) {
	 result = result + ' onmouseover="swapimage(\'' + graphic + '\')" '
      }
      result = result + '>' + label + "</a>";
      return result;
   }

/* Makes it easier to build menus that have sub-menus */
   function build_top_menu_link(submenuname, label, graphic) {
      result = "<A HREF='#' onclick='return false;' "
      result = result + 'onMouseover="clearhidemenu(); clearhidemenu2(); return dropdownmenu(this, event, ' + submenuname + ', \'165px\', \'dropmenudiv-sub\', \'sub\')">' + label + "<img src=newimages/arrow.gif width=9 height=7 border=0 align=absmiddle></a>";
      return result;
   }

/* Makes it easier to build menus that extend from other menus */
   function build_sub_menu_link(functionName, builderfieldname, builderval, label, graphic) {
      result = "<A HREF=";
      result = result + '"javascript: '; 
      result = result + "document.partbuilderform." + builderfieldname + ".value = '" + builderval + "'; ";
      result = result + ' ' + functionName + '; ';
      result = result + "hidemenu('dropmenudiv-sub'); hidemenu('dropmenudiv-top'); ";
      result = result + "\" ";
      if (graphic != undefined) {
	 result = result + ' onmouseover="swapimage(\'' + graphic + '\')" ';
      }
      result = result + '>' + label + "</a>";
      return result;
   }

function swapimage(imgName) {
   document.part_graphic.src = imgName;
}

function imgAct(imgName) {
   document[imgName].src = "newimages/" + imgName + "-over.gif";
}

function imgInact(imgName) {
   document[imgName].src = "newimages/" + imgName + ".gif";
}



/***********************************************
* AnyLink Vertical Menu- © Dynamic Drive (www.dynamicdrive.com)
* This notice MUST stay intact for legal use
* Visit http://www.dynamicdrive.com/ for full source code
***********************************************
* Heavily modified by Andrew Burke for cascading menus and 'clarity'
* http://www.andrewburke.ca
***********************************************/
   var disappeardelay=150  //menu disappear speed onMouseout (in miliseconds)
   var horizontaloffset=3 //horizontal offset of menu from default location. (0-5 is a good value)

/* Climbs back up the collection of offset parents for the passed 'what' to get the absolute page position - either 'left' or 'top'*/
   function getposOffset(what, offsettype){
      var totaloffset=(offsettype=="left")? what.offsetLeft : what.offsetTop;
      var parentEl=what.offsetParent;
      while (parentEl!=null){
	 if (offsettype=="left") {
	    totaloffset = totaloffset + parentEl.offsetLeft;
	 } else {
	    totaloffset = totaloffset + parentEl.offsetTop;
	 }
	 parentEl=parentEl.offsetParent;
      }
      return totaloffset;
   }

/* sets up the target_menu div style to show correctly or to hide, depending on the passed event */
   function showhide(obj, e, visible, hidden, menuwidth, target_menu){
      if (ie4||ns6)
	 target_menu.style.left=target_menu.style.top=-500
      target_menu.widthobj=target_menu.style
      target_menu.widthobj.width=menuwidth
      if (e.type=="click" && obj.visibility==hidden || e.type=="mouseover")
	 obj.visibility=visible
      else if (e.type=="click")
      obj.visibility=hidden
   }

function iecompattest(){
   return (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body
}

/* Rearranges menu to keep within the browser window */
   function clearbrowseredge(obj, whichedge, target_menu){
      var edgeoffset=0
      if (whichedge=="rightedge"){
	 var windowedge=ie4 && !window.opera? iecompattest().scrollLeft+iecompattest().clientWidth-15 : window.pageXOffset+window.innerWidth-15
	 target_menu.contentmeasure=target_menu.offsetWidth
	 if (windowedge-target_menu.x-obj.offsetWidth < target_menu.contentmeasure)
	    edgeoffset=target_menu.contentmeasure+obj.offsetWidth
      }
      else{
	 var topedge=ie4 && !window.opera? iecompattest().scrollTop : window.pageYOffset
	 var windowedge=ie4 && !window.opera? iecompattest().scrollTop+iecompattest().clientHeight-15 : window.pageYOffset+window.innerHeight-18
	 target_menu.contentmeasure=target_menu.offsetHeight
	 if (windowedge-target_menu.y < target_menu.contentmeasure){ //move menu up?
	    edgeoffset=target_menu.contentmeasure-obj.offsetHeight
	    if ((target_menu.y-topedge)<target_menu.contentmeasure) //up no good either? (position at top of viewable window then)
	       edgeoffset=target_menu.y
	 }
      }
      return edgeoffset
   }

/* builds a menu from the passed menuitems_list array and puts it into the target_menu div */
   function populatemenu(menuitems_list, target_menu){
      if (ie4||ns6) {
	 target_menu.innerHTML=menuitems_list.join("")
      }
   }

/* Wraps up the ugly code and browser-specific conditions for finding the menu with the passed name */
   function getMenuByName(targetMenuName) {
      targetMenu = null;

      // Get the menu DIV by the passed name - if browser doesn't support getElementById, get generic version
      if (document.getElementById) {
	 targetMenu = document.getElementById(targetMenuName) 
      } else {
	 /* this part doesn't seem to do anything */
	    targetMenu = dropmenudiv
      }
      return targetMenu;
   }

/* Builds and displays the menu with the passed contents, width, and name */
function dropdownmenu(obj, e, menucontents, menuwidth, target_menu_name, sub_flag){
   clearhidemenu(target_menu_name);
   target_menu = getMenuByName(target_menu_name);
   hide_other_menus(target_menu_name);
   
   if (window.event) {
      event.cancelBubble=true;
   } else if (e.stopPropagation) {
      e.stopPropagation();
   }
   populatemenu(menucontents, target_menu);
   
   if (ie4||ns6){
      showhide(target_menu.style, e, "visible", "hidden", menuwidth, target_menu);

      target_menu.x=getposOffset(obj, "left");
      target_menu.y=getposOffset(obj, "top");

      // adjust slightly down for sub-menus
      if (sub_flag == 'sub') {
	 target_menu.x -= 3;
	 target_menu.y -= 7;
      } else {
	 target_menu.x -= 1;
	 target_menu.y -= 5;
      }
      
      target_menu.style.left=target_menu.x+obj.offsetWidth+horizontaloffset+"px";
      target_menu.style.top=target_menu.y+"px";
   }
   
   return clickreturnvalue();
}

/* returns false if browser compatible - otherwise return true */
function clickreturnvalue(){
   if (ie4||ns6) return false
   else return true
}

/* Called from dropdownmenu() - makes sure to hide other menus based on the passed name */
function hide_other_menus(menu_name) {
   if (menu_name == 'dropmenudiv') {
      top_menu = getMenuByName('dropmenudiv-top');
      hidemenu(top_menu);
      sub_menu = getMenuByName('dropmenudiv-sub');
      hidemenu(sub_menu);
   }
   if (menu_name == 'dropmenudiv-top') {
      regular_menu = getMenuByName('dropmenudiv');
      hidemenu(regular_menu);
   }
}

/* Starts a timer that calls hidemenu on the passed menu after the specified # of miliseconds.
 * This timer is cancelled by clearhidemenu() */
function delayhidemenu(menu_name){
   if (ie4||ns6) {
      delayhide=setTimeout("hidemenu('" + menu_name + "')", disappeardelay)
   }
}

/* Starts a timer like delayhidemenu but stores it in another variable so we can track more than one menu timeout - handy for cascading menus */
function delayhidemenu2(menu_name){
   if (ie4||ns6) {
      delayhide2=setTimeout("hidemenu('" + menu_name + "')", disappeardelay)
   }
}

/* Clears the timer set in delayhidemenu - which cancels the hide operation */
function clearhidemenu(){
   if (typeof delayhide!="undefined") {
      clearTimeout(delayhide)
   }
}

/* Clears the timer set in delayhidemenu2 - which cancels the other hide operation */
function clearhidemenu2(){
   if (typeof delayhide2!="undefined") {
      clearTimeout(delayhide2)
   }
}

/* Hides the specified menu element - you can pass the actual element or the name of the element */
function hidemenu(target_menu){
   if (typeof target_menu != "undefined"){
      if (typeof target_menu == "string") {
	 target_menu_obj = getMenuByName(target_menu);    
      } else {
	 target_menu_obj = target_menu;
      }
      if (ie4||ns6) {
	 target_menu_obj.style.visibility="hidden"
      }
   }
}
   

/* FireBug logging */
function printfire() {
   if (document.createEvent) {
      printfire.args = arguments;
      var ev = document.createEvent("Events");
      ev.initEvent("printfire", false, true);
      dispatchEvent(ev);
   }
}
