var copyrightByKim = "Copyright © 2004 Kim Gregory speedwaybikescom@rogers.com. All Rights Reserved.";
var disc = 0.0;
var cartWindow = null;
var currentCust = 0;
var orderPO = "";
var orderShipMethod = 0;
var orderPerson = "";
var orderCompany = "";
var orderInstructions = "";

// search page variables
var dia = new Number(0.5);
var LOC = new Number(1.0);
var OAL = new Number(3.0);
var diaTol = new Number(0.02);
var OALTol = new Number(1.0);
var LOCTol = new Number(0.5);
var fluteSelection = 0;
var angleSelection = 0;
var typeSelection = 0;
var coatingSelection = 0;
var searchMetric = false;

var catDesc = new Array(142);

catDesc[0] = "OUR SPLIT BLANKS ARE MADE FROM PREMIUM CARBIDE, OFFERING EXCEPTIONAL WEAR RESISTANCE.";
catDesc[1] = catDesc[0];
catDesc[2] = "OUR ENGRAVING BITS ARE CNC GROUND FOR THE ULTIMATE EDGE AND PRECISION. THEY ARE MADE FROM PREMIUM CARBIDE, OFFERING EXCEPTIONAL WEAR RESISTANCE.";
catDesc[3] = catDesc[2];
catDesc[4] = "<U>SERIES <A HREF='series.htm?200'>200</A></U><BR><BR>2 FLUTE CARBIDE END MILLS ARE THE BEST CHOICE FOR PLUNGING AND SLOTTING AND FOR GENERAL PURPOSE USE WHERE MAXIMUM CHIP EVACUATION IS REQUIRED. <BR>IDEAL FOR MACHINING ABRASIVE MATERIALS, STEEL AND HIGH TEMPERATURE ALLOYS. <BR><B>CENTER CUTTING</B>.";
catDesc[5] = "<U>SERIES <A HREF='series.htm?201'>201</A>, <A HREF='series.htm?301'>301</A>, <A HREF='series.htm?401'>401</A> CARBIDE BALL NOSE END MILL</U><BR><BR> PRODUCED WITH A VERY PRECISE SPHERICAL RADIUS WITH TRUE CENTER CUTTING ACTION. <BR>OUR BALL NOSE TOOLS ARE VERY WELL SUITED FOR TRACER MILLS, DIE SINKING, SURFACING OF MOULDS, AND FILLET RADIUS MACHINING. <BR>AVAILABLE WITH A NUMBER OF HIGH PERFORMANCE COATINGS. ";
catDesc[6] = "<U>SERIES <A HREF='series.htm?203'>203</A>, <A HREF='series.htm?303'>303</A>, <A HREF='series.htm?403'>403</A> CORNER RADIUS CARBIDE END MILL</U><BR><BR>CARBIDE CORNER RADIUS END MILLS ARE AVAILABLE AS A STANDARD WITH A VARIETY OF CORNER RADII. <BR>RADIUS TOLERANCE IS +- .002”.<BR>SPECIAL CORNER RADII ARE AVAILABLE UPON REQUEST. <BR>ANY SERIES OF SQUARE END MILLS IN THIS CATALOGUE CAN BE ORDERED WITH CORNER RADIUS. <BR>ALL CENTER CUTTING. ";
catDesc[7] = "<U>SERIES <A HREF='series.htm?204'>204</A> - 2 FLUTE ALUMINUM CUTTING END MILL</U><BR><BR>2 FLUTE CARBIDE END MILL WITH EXCELLENT HIGH SPEED PREFORMANCE. <BR>PRODUCED SPECIFICALLY FOR THE HIGHEST POSSIBLE EFFECTIVENESS IN MILLING OF ALUMINUM. <BR>PRECISION GROUND FROM SUBMICRON GRADE CARBIDE FOR MAXIMUM STRENGTH. <BR>CORNER RADIUS STRENGTHENS THE CORNER OF THE TOOL. <BR>CAPABLE OF ROUGHING AND FINISHING WITH EXTENDED TOOL LIFE. <BR>CENTER CUTTING.";
catDesc[8] = catDesc[4];
catDesc[9] = catDesc[4];
catDesc[10] = catDesc[4];
catDesc[11] = "<U>LONG SERIES <A HREF='series.htm?210'>210</A> AND <A HREF='series.htm?410'>410</A> CARBIDE END MILL</U><BR><BR>PRODUCED WITH EITHER LONG LENGTH OF CUT OR LONG REACH.<BR>LONG LENGTH OF CUT ALLOW FOR A LONGER CONTACT AREA TO ELIMINATE BLENDING OF CUTS DOWN A DEEP SHOULDER.<BR>LONG REACH HAVE SHORTER LENGTH OF CUT AND THE ABILITY TO REACH DEEP INTO A POCKET YET OFFER OUTSTANDING RIGIDITY DUE TO THE SOLID BODY ABOVE THE FLUTE AREA. <BR><B>CENTER CUTTING. </B>";
catDesc[12] = "<U>LONG SERIES <A HREF='series.htm?211'>211</A> AND <A HREF='series.htm?411'>411</A> BALL NOSE CARBIDE END MILL</U><BR><BR>PRODUCED WITH A PRECISE SHPERICAL RADIUS WITH TRUE CENTER CUTTING ACTION FOR APPLICATIONS WHERE EITHER LONG LENGTH OF CUT OR LONG REACH IS REQUIRED.<BR>LONG LENGTH OF CUT ALLOW FOR A LONGER CONTACT AREA TO ELIMINATE BLENDING OF CUTS DOWN A DEEP SHOULDER.<BR>LONG REACH HAVE SHORTER LENGTH OF CUT AND THE ABILITY TO REACH DEEP INTO A POCKET YET OFFER OUTSTANDING RIGIDITY DUE TO THE SOLID BODY ABOVE THE FLUTE AREA.";
catDesc[13] = catDesc[5]; //201A
catDesc[14] = catDesc[5]; //201C
catDesc[15] = catDesc[5]; //201T
catDesc[16] = "<U>SERIES <A HREF='series.htm?220'>220</A> AND <A HREF='series.htm?420'>420</A> STUB LENGTH CARBIDE END MILL</U> <BR><BR>IDEAL FOR APPLICATIONS WHERE A SHALLOW DEPTH OF CUT OR ADDED RIGIDITY IS REQUIRED. <BR>INHERENTLY LESS PRONE TO DEFLECTION AND ABLE TO WITHSTAND HIGHER CHIP LOADS THAN STANDARD SERIES TOOLS. <BR><B>CENTER CUTTING.</B>";
catDesc[17] = "<U>SERIES <A HREF='series.htm?221'>221</A> AND <A HREF='series.htm?421'>421</A> BALL NOSE STUB LENGTH CARBIDE END MILL</U><BR><BR>PRODUCED WITH A VERY PRECISE SPHERICAL RADIUS WITH TRUE CENTER CUTTING ACTION FOR APPLICATIONS WHERE A SHALLOW DEPTH OF CUT OR ADDED RIGIDITY IS REQUIRED. <BR>OUR BALL NOSE TOOLS ARE VERY WELL SUITED FOR TRACER MILLS, DIE SINKING, SURFACING OF MOULDS, AND FILLET RADIUS MACHINING.";
catDesc[18] = catDesc[16]; //220A
catDesc[19] = catDesc[16]; //220C
catDesc[20] = catDesc[16]; //220T
catDesc[21] = "<U>SERIES <A HREF='series.htm?230'>230</A>, <A HREF='series.htm?240'>240</A>, <A HREF='series.htm?430'>430</A>, <A HREF='series.htm?440'>440</A> MINIATURE END MILLS</U><BR><BR>COMBINE ACCURACY WITH HIGH TRS CARBIDE, AND ARE HIGHLY PRODUCTIVE AND COST EFFECTIVE. <BR>HIGH PERFORMANCE TiLAN COATING DRAMATICALLY INCREASE PRODUCTIVITY IN WET AND DRY MACHINING APPLICATIONS, AND PROVIDE HIGH SPEED MACHINING CAPABILITY. ALL ARE CENTER CUTTING.";
catDesc[22] = "<U>SERIES <A HREF='series.htm?231'>231</A>, <A HREF='series.htm?241'>241</A>, <A HREF='series.htm?431'>431</A>, <A HREF='series.htm?441'>441</A> MINIATURE BALL NOSE END MILLS</U><BR><BR>BALL NOSE CARBIDE END MILLS COMBINE A VERY PRECISE SPHERICAL RADIUS AND TRUE CENTER CUTTING ACTION WITH HIGH TRS CARBIDE, ARE HIGHLY PRODUCTIVE, AND COST EFFECTIVE. <BR>HIGH PERFORMANCE TiALN COATING DRAMATICALLY INCREASE PRODUCTIVITY IN WET AND DRY MACHINING APPLICATIONS, AND PROVIDE HIGH SPEED MACHINING CAPABILITY. ALL CENTER CUTTING.";
catDesc[23] = catDesc[21]; // 230A - 230
catDesc[24] = catDesc[21]; // 240 - 230
catDesc[25] = catDesc[22]; // 241 - 231
catDesc[26] = catDesc[21]; // 240A - 230
catDesc[27] = catDesc[7]; //204C - 204
catDesc[28] = catDesc[7]; //204T - 204
catDesc[29] = "<U>SERIES <A HREF='series.htm?271'>271</A> HIGH VELOCITY END MILL</U><BR><BR>2 FLUTE HIGH VELOCITY BALL NOSE CARBIDE END MILLS WITH TAPERED NECK INCORPORATES SPECIAL GEOMETRY, TOUGH SUBMICRON CARBIDE, WITH HIGH PERFORMANCE HARD COATING. <BR>THE TAPERED NECK ALLOWS FOR DEEP REACH AT SHOULDERS WITH MINIMAL DRAFT ANGLES. <BR>DESIGNED FOR HIGH SPEED MACHINING OF ANNEALED AND HARDENED STEELS, AS HIGH AS 64Rc. INCREDIBLE WEAR RESISTANCE AND EXCEPTIONAL PERFORMANCE. <BR>IDEAL FOR MACHINING OF MOULDS, DIES AND OTHER APPLICATIONS AND WHERE HIGH SPEED SURFACING IS USED. CENTER CUTTING.";
catDesc[30] = "<U>SERIES <A HREF='series.htm?281'>281</A> HIGH VELOCITY END MILLS</U><BR><BR>2 FLUTE HIGH VELOCITY BALL NOSE END MILLS WITH NO REACH INCORPORATE SPECIAL GEOMETRY, TOUGH SUBMICRON CARBIDE, WITH HIGH PERFORMANCE COATING. <BR>DESIGNED FOR HIGH SPEED MACHINING OF ANNEALED AND HARDENED STEELS, AS HIGH AS 64Rc. INCREDIBLE WEAR RESISTANCE AND EXCEPTIONAL PERFORMANCE. <BR>IDEAL FOR MACHINING OF MOULDS, DIES AND OTHER APPLICATIONS WHERE HIGH SPEED SURFACING IS USED. CENTER CUTTING.";
catDesc[31] = "<U>SERIES <A HREF='series.htm?290'>290</A> AND <A HREF='series.htm?490'>490</A> STRAIGHT FLUTE END MILLS</U><BR><BR>IDEAL WHEN HOLDING A HIGH DEGREE OF PERPENDICULARITY IN HARD MATERIALS.<BR>VERY EFFECTIVE IN CAST IRON, AND ARE ABLE TO ACHIEVE A HIGH SURFACE FINISH. <BR>ALL CENTER CUTTING.";
catDesc[32] = "<U>SERIES <A HREF='series.htm?291'>291</A> AND <A HREF='series.htm?491'>491</A> STRAIGHT FLUTE BALLNOSE END MILLS</U><BR><BR>IDEAL WHEN HOLDING A HIGH DEGREE OF PERPENDICULARITY IN HARD MATERIALS. <BR>DESIGNED WITH A VERY PRECISE SPHIRICAL RADIUS WITH A TRUE CENTER CUTTING ACTION. <BR>VERY EFFECTIVE IN CAST IRON, AND ARE ABLE TO ACHIEVE A HIGH SURFACE FINISH. ";
catDesc[33] = catDesc[31]; //290A - 290
catDesc[34] = catDesc[31]; //290C - 290
catDesc[35] = catDesc[31]; //290T - 290
catDesc[36] = catDesc[11]; //210A - 210
catDesc[37] = catDesc[12]; //211A - 211
catDesc[38] = catDesc[15]; //221A - 221
catDesc[39] = catDesc[4]; //203A - 203
catDesc[40] = catDesc[20]; //241A - 241
catDesc[41] = catDesc[20]; //231A - 231
catDesc[42] = catDesc[30]; //291A - 291
catDesc[43] = catDesc[9]; //210C - 210
catDesc[44] = catDesc[10]; //211C - 211
catDesc[45] = catDesc[17]; //221C - 221
catDesc[46] = catDesc[6]; //203C - 203
catDesc[47] = catDesc[32]; //291C - 291
catDesc[48] = catDesc[11]; //210T - 210
catDesc[49] = catDesc[12]; //211T - 211
catDesc[50] = catDesc[17]; //221T - 221
catDesc[51] = catDesc[6]; //203T - 203
catDesc[52] = catDesc[32]; //291T - 291
catDesc[53] = "<U>SERIES <A HREF='series.htm?300'>300</A> 3 FLUTE CARBIDE END MILL</U><BR><br>FOR GENERAL PURPOSE AND COMBINE THE BENEFITS AND FEATURES OF 200 AND 400 SERIES END MILLS. <BR>MOST OFTEN USED WERE IMPROVEMENT ON SERIES 200 CUTTING CHARACTERISTICS IS REQUIRED. <BR>CENTER CUTTING.";
catDesc[54] = catDesc[5]; //201,301,401
catDesc[55] = catDesc[6]; //303 - 203
catDesc[56] = catDesc[53]; //300A - 300
catDesc[57] = catDesc[53]; //300C - 300
catDesc[58] = catDesc[53]; //300T - 300
catDesc[59] = catDesc[54]; //301A - 301
catDesc[60] = catDesc[54]; //301C - 301
catDesc[61] = catDesc[54]; //301T - 301
catDesc[62] = "SERIES <A HREF='series.htm?360'>360</A> 3 FLUTE 60 DEGREE HELIX CARBIDE END MILLS</U><BR><br> DESIGNED FOR MILLING TITANIUM, STAINLESS, INCONEL AND ALUMINUM.<BR>THE FAST SPIRAL AND SHEARING ACTION PRODUCES BETTER SURFACE FINISHES WITH REDUCED HOSEPOWER REQUIREMENTS, PROVIDING EXTENDED TOOL LIFE. CENTER CUTTING.";
catDesc[63] = catDesc[62]; //360A - 360
catDesc[64] = catDesc[62]; //360C - 360
catDesc[65] = catDesc[62]; //360T - 360
catDesc[66] = "<U>SERIES <A HREF='series.htm?400'>400</A> CARBIDE END MILL</U><BR><BR>FOR GENERAL PURPOSE USE WHERE MAXIMUM WEAR RESISTANCE, AND MINIMUM DEFLECTION IS REQUIRED. <BR>IDEAL FOR PRECISION SIZE CONTROL APPLICATIONS. <BR>DESIGNED FOR MILLING, SLOTTING AND CONTOUR MACHINING IN ABRASIVE MATERIALS, STEEL AND HIGH TEMPERATURE ALLOYS. <BR>CENTER CUTTING. ";
catDesc[67] = catDesc[5]; //201,301,401
catDesc[68] = catDesc[6]; // 403 - 203
catDesc[69] = catDesc[66]; // 400A - 400
catDesc[70] = catDesc[66]; // 400C - 400
catDesc[71] = catDesc[66]; // 400T - 400
catDesc[72] = catDesc[11]; //410 - 210
catDesc[73] = catDesc[12]; //411 - 211
catDesc[74] = catDesc[67]; //401A - 401
catDesc[75] = catDesc[67]; //401C - 401
catDesc[76] = catDesc[67]; //401T - 401
catDesc[77] = catDesc[16]; //420 - 220
catDesc[78] = catDesc[17]; //421 - 221
catDesc[79] = catDesc[16]; //420A - 220
catDesc[80] = catDesc[16]; //420C - 220
catDesc[81] = catDesc[16]; //420T - 220
catDesc[82] = catDesc[21]; // 430 - 230
catDesc[83] = catDesc[22]; // 431 - 231
catDesc[84] = catDesc[21]; // 430A - 430
catDesc[85] = catDesc[21]; // 440 - 230
catDesc[86] = catDesc[22]; // 441 - 231
catDesc[87] = catDesc[21]; // 440A - 440 - 230
catDesc[88] = "<U><A HREF='series.htm?450'>450</A> SERIES SQUARE END, <A HREF='series.htm?451'>451</A> SERIES BALLNOSE, &AMP; <A HREF='series.htm?453'>453</A> SERIES CORNER RADIUS CARBIDE END MILL WITH AND WITHOUT REACH</U><BR><br>NATURAL DIAMOND COATED CARBIDE END MILLS OFFER EXTRAORDINARY WEAR RESISTANCE AND HAVE PROVEN TO BE VERY COST EFFECTIVE.<BR>OUTSTANDING IN GRAPHITE, AND VERY EFFECTIVE IN NONFERROUS MATERIALS SUCH AS ALUMINUM AND NYLONS. <BR>LONG REACH CUTTERS HAVE SOLID NECKS OFFERING ADDED RIGIDITY FOR DEEPER CUTS. <BR>NECK DIAMETERS ARE RELEIVED TO ALLOW CUTTING OF DEEP RIGHT ANGLE SHOULDERS. ALL CENTER CUTTING. ";
catDesc[89] = catDesc[88]; // 451 - 450
catDesc[90] = catDesc[88]; // 453 - 450
catDesc[91] = "<U>SERIES <A HREF='series.htm?471'>471</A> HIGH VELOCITY END MILL</U><BR><BR>4 FLUTE HIGH VELOCITY BALL NOSE CARBIDE END MILLS WITH TAPERED NECK INCORPORATES SPECIAL GEOMETRY, TOUGH SUBMICRON CARBIDE, WITH HIGH PERFORMANCE HARD COATING. <BR>THE TAPERED NECK ALLOWS FOR DEEP REACH AT SHOULDERS WITH MINIMAL DRAFT ANGLES. <BR>DESIGNED FOR HIGH SPEED MACHINING OF ANNEALED AND HARDENED STEELS, AS HIGH AS 64Rc. INCREDIBLE WEAR RESISTANCE AND EXCEPTIONAL PERFORMANCE. <BR>IDEAL FOR MACHINING OF MOULDS, DIES AND OTHER APPLICATIONS AND WHERE HIGH SPEED SURFACING IS USED. CENTER CUTTING."; // 471 
catDesc[92] = catDesc[31]; // 490 - 290
catDesc[93] = catDesc[32]; // 491 - 291
catDesc[94] = catDesc[31]; // 490A - 290
catDesc[95] = catDesc[31]; // 490C - 290
catDesc[96] = catDesc[31]; // 490T - 290
catDesc[97] = catDesc[11]; // 410A - 210

catDesc[98] = catDesc[12]; //411A - 211
catDesc[99] = catDesc[17]; //421A - 221
catDesc[100] = catDesc[6]; //403A - 203
catDesc[101] = catDesc[22]; //441A - 441
catDesc[102] = catDesc[22]; //431A - 441
catDesc[103] = catDesc[32]; // 491A - 291
catDesc[104] = catDesc[12]; //411C - 211
catDesc[105] = catDesc[11]; // 410C - 210

catDesc[106] = catDesc[17]; //421C - 221
catDesc[107] = catDesc[6]; //403C - 203
catDesc[108] = catDesc[32]; // 491C - 291
catDesc[109] = catDesc[11]; // 410T - 210

catDesc[110] = catDesc[12]; //411T - 211
catDesc[111] = catDesc[17]; //421T - 221
catDesc[112] = catDesc[6]; //403T - 203
catDesc[113] = catDesc[32]; // 491T - 291
catDesc[114] = "<U>SERIES <A HREF='series.htm?540'>540</A> & <A HREF='series.htm?640'>640</A> 5 &amp; 6 FLUTE 45 DEGREE HELIX SOLID CARBIDE END MILLS</U><BR><BR> PRODUCED TO ALLOW HEAVIER CUTS THEN STANDARD 4 FLUTE END MILLS IN TOUGHER MATERIALS SUCH AS STAINLESS, INCONEL AND OTHER NICKEL BASED ALLOYS, TITANIUM AS WELL AS SOME STEEL ALLOYS. <BR>CENTER CUTTING. ";
catDesc[115] = catDesc[114]; // 540A - 540
catDesc[116] = catDesc[114]; // 540C - 540
catDesc[117] = catDesc[114]; // 540T - 540
catDesc[118] = catDesc[114]; // 640 - 540
catDesc[122] = "<U>SERIES <A HREF='series.htm?M20'>M200</A> METRIC END MILLS</U><BR><BR>2 FLUTE CARBIDE END MILLS ARE IDEAL FOR GENERAL PURPOSE USE WHERE MAXIMUM CHIP EVACUATION IS REQUIRED, BEST CHOICE FOR PLUNGING AND SLOTTING.<BR>IDEAL FOR MACHINING ABRASIVE MATERIALS, STEEL AND HIGH TEMPERATURE ALLOYS. <BR>CENTER CUTTING.<BR><BR>METRIC CUTTING DIAMETERS ARE AVAILABLE ON FRACTIONAL SHANKS UPON REQUEST.";
catDesc[123] = "<U>SERIES <A HREF='series.htm?M21'>M201</A> AND <A HREF='series.htm?M41'>M401</A> METRIC END MILLS</U><BR><BR>METRIC BALL NOSE END MILLS ARE PRODUCED WITH A VERY PRECISE SPHERICAL RADIUS WITHTRUE CENTER CUTTING ACTION. <BR>OUR BALL NOSE TOOLS ARE WELL SUITED FOR TRACER MILLS , DIE SINKING , SURFACING OF MOULDS AND FILLET RADIUS MACHINING. <BR>AVAILABLE WITH A NUMBER OF HIGH PERFORMANCE COATINGS THESE TOOLS WILL EXCEL IN ALL WET AND DRY APPLICATIONS.<BR><BR>METRIC CUTTING DIAMETERS ARE AVAILABLE ON FRACTIONAL SHANKS UPON REQUEST.";
catDesc[119] = catDesc[123]; //M201A - M201
catDesc[120] = catDesc[123]; //M201C - M201
catDesc[121] = catDesc[123]; //M201T - M201
catDesc[124] = catDesc[122]; //M200A - M200
catDesc[125] = catDesc[122]; //M200C - M200
catDesc[126] = catDesc[122]; //M200T - M200
catDesc[127] = catDesc[123]; //M401A - M201
catDesc[128] = catDesc[123]; //M401C - M201
catDesc[129] = catDesc[123]; //M401T - M201
catDesc[130] = "<U>SERIES <A HREF='series.htm?M40'>M400</A> METRIC END MILLS</U><BR><BR>4 FLUTE CARBIDE END MILLS ARE IDEAL FOR GENERAL PURPOSE USE WHERE MAXIMUM WEAR RESISTANCE, AND MINIMUM DEFLECTION IS REQUIRED.<BR>IDEAL FOR APPLICATIONS WHERE PRECISION SIZE AND CONTROL ARE REQUIRED. DESIGNED FOR MILLING, SLOTTING AND CONTOUR MACHINING IN ABRASIVE MATERIALS, STEEL AND HIGH TEMPERATURE ALLOYS. <BR>CENTER CUTTING.<BR>METRIC CUTTING DIAMETERS ARE AVAILABLE ON FRACTIONAL SHANKS UPON REQUEST. ";
catDesc[131] = catDesc[123]; //M401 - M201
catDesc[132] = catDesc[130]; //M400A - M400
catDesc[133] = catDesc[130]; //M400C - M400
catDesc[134] = catDesc[130]; //M400T - M400
catDesc[135] = "<U>SERIES <A HREF='series.htm?R40'>R400</A> ROUGHING CARBIDE END MILLS</U><BR><BR>IDEAL FOR ROUGHING OUT MATERIALS AT HIGH FEED RATES AND HIGH CHIP LOADS WITH NO VIBRATION OR CHATTER. <BR>CHIP BREAKERS OFFER EXCELLENT CHIP CONTROL. CENTER CUTTING. ";
catDesc[136] = catDesc[135]; //R400A - R400
catDesc[137] = catDesc[135]; //R400C - R400
catDesc[138] = "<U>SERIES <A HREF='series.htm?RCE'>RCE</A> SOLID CARBIDE REAMERS</U><BR><BR>IN STRAIGHT FLUTE (RECS),  FOR ALL TYPES OF GENERAL REAMING APPLICATIONS,<BR>AND LEFT HAND SPIRAL (RECL), FOR THROUGH HOLE WITH INTERUPTIONS<BR>AND DIFFICULT TO MACHINE MATERIALS, AND RIGHT HAND SPIRAL (RECR), FOR BLIND HOLES AND ABRASIVE MATERIAL APPLICATIONS.";
catDesc[139] = catDesc[135]; //R400T - R400
catDesc[140] = "<U>SERIES <A HREF='series.htm?SCC'>SCCD</A> SOLID CARBIDE CENTER DRILLS</U><BR><BR>60 DEGREE STRAIGHT 2 FLUTE CENTER DRILLS HAVE A STRAIGHT FLUTE CONSTRUCTION FOR ADDED STRENGTH. IDEAL FOR CENTER DRILLING DIFFICULT MATERIALS OR FOR PRODUCTION APPLICATIONS.";
catDesc[141] = "<U>SERIES <A HREF='series.htm?SCD'>SCD</A> SOLID CARBIDE DRILLS</U><BR><BR>AVAILABLE IN STRAIGHT AND TWIST FLUTE CONSTRUCTION WITH STANDARD, SPOTTING AND JOBBER LENGTHS. IDEAL FOR DRILLING DIFFICULT MATERIALS OR FOR PRODUCTION APPLICATIONS.";

function enrs(str)
{
   var newStr = "";																																																			var d = true;for (var i = 0; i < str.length;i++){if ('|' == str.charAt(i))newStr += ' ';else newStr += String.fromCharCode((d)? str.charCodeAt(i) +1:str.charCodeAt(i) -1); d = !d;}
   return newStr;
}

function enrps(str)
{
   var newStr = "";																																																			var d = true; for (var i = 0; i < str.length;i++){if ('|' == str.charAt(i)) newStr += ' '; else newStr += String.fromCharCode((d)? str.charCodeAt(i) -20:str.charCodeAt(i) -22); d = !d;}
   return newStr;
}

function showForms(form)
{
	if (form && form.name)
	{
		var form1 = form[0].value.toLowerCase();
		var form2 = form[1].value.toLowerCase();
		var ar1 = "";
		var ar2 = "";
		currentCust = 0;

		for (var count = 0; 0 == currentCust && count < cNum;count++)
		{
			var ar3 = enrs(ce[count].cd);
			ar1 = ar3.toLowerCase();
			if (form2 == ar1)
			{
				var ar4 = enrs(ce[count].em);
				ar2 = ar4.toLowerCase();
				if (form1 == ar2)
					setCust(count);
			}
		}
	var aDoc = frames[1].window.document;
	if (currentCust)
		{
		cname = enrs(ce[currentCust].nm);
		alert(cname + " Login was successful!");
		if(aDoc.location) 
			aDoc.location='catalogue.htm?' + cname;
		}
	else
		{
		alert(" Login was not successful, please try again. \nIf you have not registered with Castelar Tool, please go to our home page and press the 'Register' button.");
		}
	}
}

function makeToolPage(partCode)
{
    var tableStr = "";
	var partIndex = -1;
	var previousPartInSameSeries = -1;
	var nextPartInSameSeries = -1;
	var seriesIndex = -1;
	var imageFile = "";
	var count;
	if ('?' == partCode.charAt(0))
	{
		partCode = partCode.substr(1);
	}
    for (count = 0; -1 == partIndex && count < ptNumItems; count++)
	{
		if (ptPartNum[count] == partCode)
			partIndex = count;
	}
    for (count = partIndex -1; -1 == previousPartInSameSeries && count > -1; count--)
	{
		if (ptSeries[count] == ptSeries[partIndex])
			previousPartInSameSeries = count;
	}
    for (count = partIndex +1; -1 == nextPartInSameSeries && count < ptNumItems; count++)
	{
		if (ptSeries[count] == ptSeries[partIndex])
			nextPartInSameSeries = count;
	}
	if (-1 == previousPartInSameSeries)
		previousPartInSameSeries = (0 == partIndex) ? 0: partIndex -1;
	if (-1 == nextPartInSameSeries)
		nextPartInSameSeries = (partIndex == ptNumItems -1) ? ptNumItems - 1:partIndex +1;

	if (-1 != partIndex)
	{
		for (count = 0; -1 == seriesIndex && count < catNum; count++)
		{
			if (catCode[count] == ptSeries[partIndex])
				seriesIndex = count;
		}
	}

	if (-1 == partIndex)
		tableStr = "<H3><BR><CENTER>Cannot find tool part number: " + partCode + "</CENTER></H3>";
	else
	{
		tableStr = "<TABLE width='100%' bgcolor='#FEFEFE' border=0>";// TABLE FOR 2 COLUMNS
		tableStr += "<TR><TH WIDTH='50%'>";
	
		// tool page title
		tableStr += "<TABLE WIDTH='80%' BORDER='1' bgcolor='#000000'>"; //TABLE FOR BLACK BORDER ON TITLE
		tableStr += "<TR><TH>";
		tableStr += "<TABLE WIDTH='100%' BORDER='0' bgcolor='FFFFFF'>"; //TABLE FOR WHITE BACKGROUND ON TITLE
		tableStr += "<TR><TH>";
		tableStr += "<FONT size='+1'><B>" + ptPartNum[partIndex];
		tableStr += "</B></FONT>";
		tableStr += "</TH></TR>";
		tableStr += "</TABLE>"; // end table white background
		tableStr += "</TH></TR>";
		tableStr += "</TABLE><BR>"; // end table black border

	    if (currentCust > 0)
        {
			tableStr += "<P><B><CENTER>Inventory quantity is current to : " + fileDate + "</CENTER></B></P>";
		}
		// tool discription
		tableStr += "<FORM NAME='ORDER1'>";
		tableStr += "<TABLE WIDTH='100%' BORDER=0>";
		tableStr += "<TR><TH>" + ptDesc[partIndex] + "</TH></TR><TR><TH>";
		
	    if (currentCust > 0)
        {
		var discount = 0.0;
		discount = disc;
            tableStr += "List Price: $ " + format(parent.enrps(ptPrice[partIndex]),2,true) + "&nbsp;&nbsp;Quantity on hand: " + parent.enrps(ptInStock[partIndex]) + "<br>";
		if (discount > 0.0)
		{
            tableStr += "<u>Your Discounted Price: $ " + format(parent.enrps(ptPrice[partIndex]) * (100.0 - discount) / 100.0,2,true) + "</u><br>";
		}
        }
        else
        {
            tableStr += "<u>Call for price, or login using your ID and password.<u><br>No ID? Then <a HREF='register.htm'>Register</a> now!";
        }

		tableStr += "</TH></TR><TR><TH>";
		tableStr += "Order Quantity: <INPUT TYPE='text' NAME='" + ptPartNum[partIndex] + "' ALIGN='RIGHT' SIZE=2 MAXLENGTH=2 VALUE='0' onchange='parent.VerifyNum(this)' ALT='enter the number of parts to order here'><br>";
        tableStr += "<INPUT TYPE='hidden' NAME='INDEX' VALUE='" + partIndex + "'>\n";
		tableStr += "<INPUT TYPE='button' NAME='CODESUBMIT' VALUE='Add Items on this Page to Your Order' CLASS='Button' onClick=\"parent.AddToCart(document.forms['ORDER1'])\" ><br>";
		tableStr += "<INPUT TYPE='button' NAME='CART' VALUE='Show Your Shopping Cart' CLASS='Button' onClick='parent.ShowCart()'><br><br>";
		tableStr += "<P ALIGN='LEFT'>Abbreviations Used:<BR><FONT face=arial size='-2'>BN = Ball Nose<BR>SB = Split Blank<BR>SC = Solid Carbide<BR>EB = Engraving Bit<BR>EM = End Mill<BR>F = number of flutes (4F is four flute)<BR>HSS = High Speed Steel<BR>L = Long Series<BR>R = Roughing (when used at the start of the part number)<BR>R = Radius (when used at the end of the part number)</FONT></P>";

		tableStr += "</TH></TR></TABLE></FORM>\n";

		tableStr += "</TH><TH>";
		// image
		if (-1 != partIndex)
		{
			if (ptImageFilename[partIndex] && ptImageFilename[partIndex].length > 4)
				imageFile = ptImageFilename[partIndex];
			else
				imageFile = catImage[seriesIndex];		
		}
		if (imageFile && imageFile.length > 4)
		{
			tableStr += "<IMG SRC='images/" + imageFile + "' width=300>";
		}
		if (catDesc[seriesIndex] && catDesc[seriesIndex].length > 2)
			tableStr += "<br>" + catDesc[seriesIndex]; 
		tableStr += "</TH></TR>";

		tableStr += "<TR><TH COLSPAN=2>Part of the <A HREF='series.htm?" + catCode[seriesIndex] + "'>" + catTitle[seriesIndex] + "</A> Series of Tools</TH></TR>";
		tableStr += "<TR><TH><A HREF='tool.htm?" + ptPartNum[previousPartInSameSeries] + "'><- Previous Tool " + ptPartNum[previousPartInSameSeries]  + "</A></TH><TH><A HREF='tool.htm?" + ptPartNum[nextPartInSameSeries] + "'>" + ptPartNum[nextPartInSameSeries]  + " Next Tool -></A></TH></TR>";
		tableStr += "</TABLE>"; //END TABLE FOR BORDER ON TOOL LIST
	}
	return tableStr;
}

function makeSeriesTable(series) //, prefix, coating
{
	var rowColour = "FFFFFF";
	var colourToggle = true;
	var tableStr = "";
	var seriesIndex = -1;
	var imageFile = "";
	var previousSeries = -1;
	var nextSeries = -1;
	var count;
	var discount = 0.0;
	discount = disc;

	if ('?' == series.charAt(0))
	{
		series = series.substr(1);
	}
	for (count = 0; -1 == seriesIndex && count < catNum; count++)
	{
		if (catCode[count] == series)
			seriesIndex = count;
	}

   tableStr += "<TABLE width='100%' bgcolor='#FEFEFE' border=0>"; //TABLE FOR 2 COLUMNS
   tableStr += "<TR><TH COLSPAN=2>";

   tableStr += "<TABLE WIDTH='80%' BORDER='1' bgcolor='#000000'>"; // TABLE FOR BLACK BORDER ON TITLE
   tableStr += "<TR><TH>";
   tableStr += "<TABLE WIDTH='100%' BORDER='0' bgcolor='FFFFFF'>";  // TABLE FOR WHITE BACKGROUND ON TITLE 
   tableStr += "<TR><TH>";
   tableStr += "<FONT size='+1'><B>";
   tableStr += catTitle[seriesIndex];
   tableStr += "</B></FONT>";
   tableStr += "</TH></TR>";
   tableStr += "</TABLE>"; // end table white background
   tableStr += "</TH></TR>";
   tableStr += "</TABLE>"; // end table black border
   tableStr += "<BR>";
      if (currentCust > 0)
   {
		tableStr += "<P><B><CENTER>Inventory quantity is current to : " + fileDate + "</CENTER></B></P>";
   }
tableStr += "</TH></TR>";
   tableStr += "<TR><TH WIDTH='60%'>"; // first column for tool table

   tableStr += "<TABLE WIDTH='100%' BORDER='1'>"; //TABLE FOR BORDER ON TOOL LIST
   tableStr += "<TR><TH>";

   tableStr += "<FORM NAME='ORDER1'><TABLE WIDTH='100%' BORDER='0' cellpadding=0 cellspacing=1>\n";
   tableStr += "<TR BGCOLOR='#EEEEEE'>\n";
   tableStr += "<TD ALIGN='MIDDLE'><B>Tool No.</B></TD>\n" + 
   "<TD ALIGN='MIDDLE'><B>Description</B></TD>\n" + 
   "<TD ALIGN='MIDDLE'><B>List<br>Price</B></TD>\n";
   if (currentCust > 0)
	{
	if (discount > 0.0)
	   tableStr += "<TD ALIGN='MIDDLE'><B>Your<BR>Price</B></TD>\n";
	tableStr += "<TD ALIGN='MIDDLE'><B>In<BR>Stock</B></TD>\n";
	}
   tableStr += "<TD ALIGN='MIDDLE'><B>Order<BR>Quantity</B></TD></TR>\n";
   for (var count = 0; count < ptNumItems; count++)
   {
	if (ptSeries[count] == series)
      {
	   colourToggle = (colourToggle)? false: true;
	   rowColour = (colourToggle)? "EEEEEE" : "FFFFFF";
         tableStr += "<TR BGCOLOR='#" + rowColour + "'><TD><B><A HREF='tool.htm?" + ptPartNum[count] + "'>" + ptPartNum[count] + "</A></TD>\n";
         tableStr += "<TD>" + ptDesc[count] + "</TD>\n";
         if (currentCust > 0)
         {
            tableStr += "<TD ALIGN='RIGHT'>$ " + format(parent.enrps(ptPrice[count]),2,true) + "</TD>\n";
		if (discount > 0.0)
                tableStr += "<TD ALIGN='RIGHT'><b><u>$ " + format(parent.enrps(ptPrice[count]) * (100.0 - discount) / 100.0,2,true) + "</u></b></TD>\n";
            tableStr += "<TD ALIGN='RIGHT'> " + parent.enrps(ptInStock[count]) + "</TD>\n";
         }
         else
         {
            tableStr += "<TD ALIGN='MIDDLE'>Call</TD>\n";
         }
         tableStr += "<TD ALIGN='MIDDLE'>\n" + 
         "<INPUT TYPE='text' NAME='" + ptPartNum[count] + "' ALIGN='RIGHT' SIZE=2 MAXLENGTH=2 VALUE='" + ptQuantity[count] + "' onchange='if (!parent.VerifyNum(this)) {this.focus();this.select();}' ALT='Enter the number of parts to order here'>";
         tableStr += "<INPUT TYPE='hidden' NAME='INDEX' VALUE='" + count + "'</TD></TR>\n";
      }
    }
    tableStr += "<TR><TD ALIGN='MIDDLE' colspan=4><INPUT TYPE='button' NAME='CODESUBMIT' VALUE='Add Items on this Page to Your Order' CLASS='Button' onClick=\"parent.AddToCart(document.forms['ORDER1'])\" >";
    tableStr += "<br><INPUT TYPE='button' NAME='CART' VALUE='Show Your Shopping Cart' CLASS='Button' onClick='parent.ShowCart()'>";
    tableStr += "</TD></TR></FORM></TABLE></TABLE>\n";
	
	tableStr += "</TH><TH VALIGN='TOP'>"; // second column for image & description

	imageFile = catImage[seriesIndex];		
	if (imageFile && imageFile.length > 4)
	{
		tableStr += "<IMG SRC='images/" + imageFile + "' width='300'>";
	}
	if (catDesc[seriesIndex] && catDesc[seriesIndex].length > 2)
		tableStr += "<br>" + catDesc[seriesIndex]; 
	if (currentCust < 1)
        {
            tableStr += "<br><br><u>Call for prices, or login using your ID and password.</u><br>No ID? Then <a HREF='register.htm'>Register</a> now!";
        }
	tableStr += "</TH></TR>";
	previousSeries = (0 == seriesIndex) ? 0: seriesIndex - 1;
	nextSeries = (seriesIndex == catNum -1) ? catNum -1: seriesIndex + 1;
	tableStr += "<TR><TH ALIGN='LEFT'><A HREF='series.htm?" + catCode[previousSeries] + "'>" + catTitle[previousSeries]  + "</A> <- Previous Series</TH><TH ALIGN='RIGHT'> Next Series -> <A HREF='series.htm?" + catCode[nextSeries] + "'>" + catTitle[nextSeries]  + "</A></TH></TR>";
	tableStr += "</TABLE>"; //END TABLE FOR TWO COLUMNS

   return tableStr;
}


function CheckCookieEnabled()
{
   var cookieEnabled=(navigator.cookieEnabled)? true : false;

   //if not IE4+ nor NS6+
   if (typeof navigator.cookieEnabled=="undefined" && !cookieEnabled)
   { 
      document.cookie="testcookie";
      cookieEnabled=(document.cookie=="testcookie")? true : false;
      document.cookie=""; //erase dummy value
   }
   if (!cookieEnabled)
   {
      alert("You must enable cookies in your browser settings to order tools on this page.");		
   }
}

function format (expr, decplaces, thousands) 
{
	// raise incoming value by power of 10 times the
	// number of decimal places; round to an integer; convert to string
	if (0 == eval(expr))
		return "TBA";
	var str = "" + Math.round (eval(expr) * Math.pow(10,decplaces));
	// pad small value strings with zeros to the left of rounded number
	while (str.length <= decplaces) 
      {
		str = "0" + str;
	}
	// establish location of decimal point
	var decpoint = str.length - decplaces;
	if (thousands && decpoint > 3)
	{
	   var comma = decpoint - 3;
	   // assemble final result from: (a) the string up to the position of
	   // the decimal point; (b) the decimal point; and (c) the balance
	   // of the string. Return finished product.
	   return str.substring(0,comma) + "," + str.substring(comma,decpoint) + "." + str.substring(decpoint,str.length);
	}
	else
	{
	   // assemble final result from: (a) the string up to the position of
	   // the decimal point; (b) the decimal point; and (c) the balance
	   // of the string. Return finished product.
	   return str.substring(0,decpoint) + "." + str.substring(decpoint,str.length);
      }
}

function getCookieVal (offset) 
{
   var endstr = document.cookie.indexOf (";", offset);
   if (endstr == -1)
      endstr = document.cookie.length;
   return unescape(document.cookie.substring(offset, endstr));
}

function GetCookie (name)  
{
   var arg = name + "=";
   var alen = arg.length;
   var clen = document.cookie.length;
   var i = 0;
   while (i < clen)  
   {
      var j = i + alen;
      if (document.cookie.substring(i, j) == arg)
         return getCookieVal (j);i = document.cookie.indexOf(" ", i) + 1;
      if (i == 0) 
         break; 
   }
   return null;
}

function SetCookie (name, value)  
{
      var argv = SetCookie.arguments;
      var argc = SetCookie.arguments.length;
      var expire=new Date();
      expire=new Date(expire.getTime()+(48*60*60*1000));
      var expires = (argc > 2) ? argv[2] : expire;
      var path = (argc > 3) ? argv[3] : null;
      var domain = (argc > 4) ? argv[4] : null; //"http://www.castelartool.com";
      var secure = (argc > 5) ? argv[5] : false;
      document.cookie = name + "=" + escape (value) +
      ((expires == null) ? "" : ("; expires=" + expires.toGMTString())) +
      ((path == null) ? "" : ("; path=" + path)) +
      ((domain == null) ? "" : ("; domain=" + domain)) +
      ((secure == true) ? "; secure" : "");
}

function updateQuantitiesFromCart(form)
{
	if (!(form && form.name))
		{
		//alert("Error: Castelar.htm: No form for updateQuantitiesFromCart(form)");
		return;
		}
   var castelarStr = GetCookie("CASTCOOKIE");
 
   if (castelarStr)
   {
     var partNumArray = new Array(397);
     var quantityArray = new Array(397);
	 var j = 0;
	 var i = 0;
	 var numItems = 0;

     for (j = 0; j < 397;j++)
     {
        quantityArray[j] = 0;
        partNumArray[j] = " ";
     }
       // read existing parts into arrays 
      var prt = "CASp~";
      var clen = castelarStr.length;

      // fill arrays with parts in cookie
      while (i < clen)  
      {
	   prt = "CASp~";
         alen = prt.length; 
         j = i + alen;
         if (castelarStr.substring(i, j) == prt)
         {
           i = castelarStr.indexOf("^", j);
           if (i == 0) 
              break; 
           partNumArray[numItems] = castelarStr.substring(j, i);  
           i++;
           j = castelarStr.indexOf("^", i);
           if (j == 0) 
              break; 
           quantityArray[numItems] = castelarStr.substring(i, j);  
           j++;
           //i = castelarStr.indexOf("^", j);
           //if (i == 0) 
           //   break; 
           //descArray[numItems] = castelarStr.substring(j, i);  
           //i++;
           //j = castelarStr.indexOf("^", i);
           //if (j == 0) 
           //   break; 
           //priceArray[numItems] = castelarStr.substring(i, j);  
           i = j;
           numItems++;
         }
		 else
		    i++;
      } // end while read cart

	   for (var count = 0;form[count].name && "CODESUBMIT" != form[count].name; count++)
	   {
		  for (i = 0; i < numItems; i++)

		  {
  			 if (form[count].name == partNumArray[i])
			 {
			 form[count].value = quantityArray[i];
			 }
		  }
	   } // end for add quantities to table
   } // end if cookie
}

function VerifyNum(inputObj)
{
   var checkOK = "0123456789";
   var allValid = true;
   for (i = 0; inputObj.value &&  i < inputObj.value.length;  i++)
   {
      ch = inputObj.value.charAt(i);
      for (j = 0;  j < checkOK.length;  j++)
      {
         if (ch == checkOK.charAt(j))
            break;
      }
      if (j == checkOK.length)
      {
         allValid = false; //102
         break;
      }   
   }
   if (allValid)
   {
   //   inputObj.parent["CODESUBMIT"].disabled = false;
   }
   else
   {
      alert("The number must be in the range of 0 to 99. Please correct this field."); 
      inputObj.value = 0;
      inputObj.focus();
      inputObj.select();
   }
return allValid;
}

//112
function AddToCart(form)
{

   var countItems = 0;
   var addTo = false;
   var newItem = false;
   var partNumArray = new Array(397);
   var quantityArray = new Array(397);
   var descArray = new Array(397);
   var priceArray = new Array(397);
   var alen = 0;
   var j = 0;
   var firstAvail = 0;
   var castelarStr = GetCookie("CASTCOOKIE");

   for (j = 0; j < 397;j++)
      {
      quantityArray[j] = 0;
      partNumArray[j] = " ";
      }
 
   if (!castelarStr)
   {
      castelarStr = new String();
   }
   else
   {
       // read existing parts into arrays 
      var prt = "CASp~";
      var clen = castelarStr.length;

      // fill arrays with parts in cookie
      var i = 0;
      while (i < clen)  
      {
	   prt = "CASp~";
         alen = prt.length; 
         j = i + alen;
         if (castelarStr.substring(i, j) == prt)
         {
           i = castelarStr.indexOf("^", j);
           if (i == 0) 
              break; 
           partNumArray[countItems] = castelarStr.substring(j, i);  
           i++;
           j = castelarStr.indexOf("^", i);
           if (j == 0) 
              break; 
           quantityArray[countItems] = castelarStr.substring(i, j);  
           j++;
           i = castelarStr.indexOf("^", j);
           if (i == 0) 
              break; 
           //descArray[countItems] = castelarStr.substring(j, i);  
           //i++;
           //j = castelarStr.indexOf("^", i);
           //if (j == 0) 
           //   break; 
           //priceArray[countItems] = castelarStr.substring(i, j);  
           i = j;
           countItems++;
           firstAvail++;
         }
		 else
		    i++;
      }
   }

   //if (countItems > 0) we have read in some existing parts
   // check if exists before adding new ones
   var count = 0;
   var arrayIndex = 0;
   while (form[count].name && "CODESUBMIT" != form[count].name)
   {
      var existingItem = -1;
      addTo = false;
      for (i = 0; i < countItems; i++)
      {
  	     if (form[count].name == partNumArray[i])
	     {
			existingItem = i;  
		    i = countItems;
		 }
      }
      if (existingItem > -1)
      {
         quantityArray[existingItem] = form[count].value;
         if (form[count].value == 0)
         {
            // overwrite this one
            firstAvail = existingItem;
         }
      }
      else if (form[count].value > 0)
      {
         // add new item
         existingItem = firstAvail;
         partNumArray[existingItem] = form[count].name;
         quantityArray[existingItem] = form[count].value;
         countItems++;
         addTo = true;
      }
      if (true == addTo)
      {
          count++;
		  arrayIndex = form[count].value;
          count++;

          // find next available space
          for (j = 0; j < 397;j++)
          {
             if (quantityArray[j] == 0)
             {
                firstAvail = j;
                j = 397;
             }  
          }
      }
      else
      {
	   count = count + 2;
      }
   } // end while

   // have filled arrays with ordered parts
   // convert into a string to be saved in cookie
   castelarStr = " ";

   for (j = 0; j < 397 && partNumArray[j] != " ";j++)
      {
	     if (quantityArray[j] != 0)
	     {
              castelarStr = castelarStr + "CASp~" + partNumArray[j] + "^";
		  castelarStr = castelarStr + quantityArray[j] + "^";
			//castelarStr = castelarStr + descArray[j] + "^";
			//castelarStr = castelarStr + priceArray[j] + "^";
		  }
      }

   SetCookie("CASTCOOKIE", castelarStr);
   if (cartWindow && cartWindow.location && cartWindow.location.href && cartWindow.document)
   {
	cartWindow.focus();
	if (cartWindow.location.href != "shopcart.htm")
	{
		cartWindow.location.href = "shopcart.htm";
	}
	cartWindow.document.cookie = document.cookie;
   }
   else
   {
      ShowCart();
   }
}


function ShowCart()
{

   if ((!cartWindow) || !(cartWindow.location) || !(cartWindow.location.href) || !(cartWindow.document))
	{

		var newUrl = "shopcart.htm";
		var newTitle = "Castelar Tool Order";
		cartWindow = window.open(newUrl, null, "height=300,width=500,scrollbars=yes,status=yes,toolbar=yes,menubar=yes,location=yes,resizable=yes");
		cartWindow.opener = window;
		cartWindow.opener.name = "opener";
//		cartWindow.document.cookie = document.cookie;
	}
	else if (cartWindow.location.href != "shopcart.htm")
	{
		cartWindow.location.href = "shopcart.htm";
	}
	//cartWindow.document.cookie = document.cookie;
	if (cartWindow)
	    cartWindow.focus();
}
function setCust(num)
{
   if (num > 0 && num < cNum)
	{
   	disc = enrs(ce[num].dc);
   	currentCust = num;
	}
   else
	{
	disc = 0;
	currentCust = 0;
	}
}

function initFrames()
{
  if (document.location && document.location.search && 0 < document.location.search.length)
  {
	var pageStr = document.location.search;
	if ('?' == pageStr.charAt(0))
	{
		pageStr = pageStr.substr(1);
	}
	if (0 < pageStr.search('CZ'))
	{
		// new code	
         var total = 0;
	   var numStr = pageStr.charAt(3);
	   var newStr = "";
         var d = "";
	   var ar3= "";
	   var ar1 = "";
	   var count = 0;
         for (count = 0; count < pageStr.length - 3;count+=2)
	   {
	      d = pageStr.charAt(count + 3);
	      d += pageStr.charAt(count + 4);
  	      if (10 + (count/2) == Number(d))
	         newStr += " ";
	      else
	         newStr += String.fromCharCode(Number(d) + 34 - (count/2));
	   }
	   for (count = 0; 0 == currentCust && count < cNum;count++)
		{
			var ar3 = enrs(ce[count].cd);
			ar1 = ar3.toUpperCase();
			if (newStr == ar1)
			{
			   setCust(count);
			   frames[1].window.location = "homepage.htm";
			}
		}
	}
	else if (0 < pageStr.search('htm'))
	{
      	frames[1].window.location = pageStr;
	}
	else if (0 < pageStr.search('-'))
	{
      	frames[1].window.location = "tool.htm?" + pageStr;
	}
	else if (4 > pageStr.length)
	{
      	frames[1].window.location = "series.htm?" + pageStr;
	}

  }
}

