	
	function change_material()
	{
        var xmlHttp;

        try
        {
        	xmlHttp = new XMLHttpRequest();
        }
        catch(e)
        {
        	try
        	{
        		xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
        	}
        	catch(e)
        	{
	        	try
	        	{
	        		xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
	        	}
	        	catch(e)
	        	{
		        	alert("Your browser does not support AJAX!");
		        	return false;
	        	}
        	}
        }

        xmlHttp.onreadystatechange = function()
        {
        	if(xmlHttp.readyState == 4)
        	{
            	response_array = xmlHttp.responseText;

            	//alert(response_array);

            	response_array = response_array.split('|');

				//******************************************
				//******************************************
				// get all the current values
				//******************************************
				//******************************************

				selected_width = document.getElementById("calculator_width").value;

				selected_length = document.getElementById("calculator_length").value;

				selected_colour = false;
				selected_index = document.calculator.elements["calculator_colour"].selectedIndex;
				if(selected_index >= 0)
				{
					selected_colour = selected_index = document.calculator.elements["calculator_colour"].options[selected_index].text;
				}

				selected_thickness = false;
				selected_index = document.calculator.elements["calculator_thickness"].selectedIndex;
				if(selected_index >= 0)
				{
					selected_thickness = selected_index = document.calculator.elements["calculator_thickness"].options[selected_index].text;
				}

				//******************************************
				//******************************************
				// lookup details based on selected material and colour
				//******************************************
				//******************************************
				
				// 0 - width
				// 1 - length
				
				if(document.calculator.elements["calculator_shape"].options[document.calculator.elements["calculator_shape"].selectedIndex].value == "Circle")
				{
					// can use this for diameter too
					document.getElementById("calculator_diameter_tip").innerHTML = response_array[0];
			
					document.getElementById("calculator_width_tip").innerHTML = "";

					document.getElementById("calculator_length_tip").innerHTML = "";
				}
				else
				{
					document.getElementById("calculator_diameter_tip").innerHTML = "";
					
					document.getElementById("calculator_width_tip").innerHTML = response_array[0];
					
					document.getElementById("calculator_length_tip").innerHTML = response_array[1];
				}

				//******************************************
				// 2 - colours
				new_colours_array = response_array[2].split(",");

				colours_select_length = document.calculator.elements["calculator_colour"].options.length;

				// clear the current colours array and re-populate, backwards to keep indexes
				for(i = (colours_select_length - 1); i >= 0; i--)
 				{
 					document.calculator.elements["calculator_colour"].remove(i);
 				}

 				// re populate the colours array

				if(response_array[2] == "")
				{
				}
				else
				{
					// enter a please select blank option to force the thicknesses to be populated
 					document.calculator.elements["calculator_colour"].options[0] = new Option("Please Select", "");

	 				for(i=0; i < new_colours_array.length; i++)
	 				{
	 					colours_select_length = document.calculator.elements["calculator_colour"].options.length;

	 					document.calculator.elements["calculator_colour"].options[colours_select_length] = new Option(new_colours_array[i], new_colours_array[i]);
	 				}
 				}

				//******************************************
				// 3 - thicknesses
				new_thickness_array = response_array[3].split(",");

				thicknesses_select_length = document.calculator.elements["calculator_thickness"].options.length;

				// clear the current thicknesses array and re-populate, backwards to keep indexes
				for(i = (thicknesses_select_length - 1); i >= 0; i--)
 				{
 					document.calculator.elements["calculator_thickness"].remove(i);
 				}

 				// re populate the colours array

				if(response_array[3] == "")
				{
				}
				else
				{
					// enter a please select blank option to force the thicknesses to be populated
 					document.calculator.elements["calculator_thickness"].options[0] = new Option("Please Select", "");

	 				for(i=0; i < new_thickness_array.length; i++)
	 				{
	 					thicknesses_select_length = document.calculator.elements["calculator_thickness"].options.length;

	 					document.calculator.elements["calculator_thickness"].options[thicknesses_select_length] = new Option(new_thickness_array[i], new_thickness_array[i]);
	 				}
	 			}

	 			//******************************************
				// 4 - thicknesses price
				document.getElementById("price_mm").innerHTML = strip_trailing_zeros(response_array[4]);

				//******************************************
				// 5 - hole price
				document.getElementById("price_hole").innerHTML = strip_trailing_zeros(response_array[5]);

				//******************************************
				// 6 - corner price
				document.getElementById("price_corner").innerHTML = strip_trailing_zeros(response_array[6]);

				//******************************************
				// 7 - polishing price
				document.getElementById("price_polished").innerHTML = strip_trailing_zeros(response_array[7]);

				//******************************************
				//******************************************
				// set everything to what it was
				//******************************************
				//******************************************
				// if colours/thicknesses have disappeared etc this may not work, but thats intended as they no longer exist

				// colour
				if(selected_colour)
				{
					colours_select_length = document.calculator.elements["calculator_colour"].options.length;
					for(i = (colours_select_length - 1); i >= 0; i--)
	 				{
	 					if(document.calculator.elements["calculator_colour"].options[i].text == selected_colour)
	 					{
	 						document.calculator.elements["calculator_colour"].options[i].selected = true;
	 					}
	 				}
 				}

 				// thickness
 				if(selected_thickness)
				{
					thicknesses_select_length = document.calculator.elements["calculator_thickness"].options.length;
					for(i = (thicknesses_select_length - 1); i >= 0; i--)
	 				{
	 					if(document.calculator.elements["calculator_thickness"].options[i].text == selected_thickness)
	 					{
	 						document.calculator.elements["calculator_thickness"].options[i].selected = true;
	 					}
	 				}
	 			}

				//******************************************
				//******************************************
				// show / hide elements and reset values depending on shape
				//******************************************
				//******************************************

				if(document.calculator.elements["calculator_shape"].options[document.calculator.elements["calculator_shape"].selectedIndex].value == "Circle")
				{
					//alert("1");
					document.getElementById("calculator_diameter_div").style.display = 'inline';
					
					// set the width and length to be the diameter

					document.calculator.elements["calculator_width"].readOnly = true;
					document.calculator.elements["calculator_length"].readOnly = true;

					document.calculator.elements["calculator_width"].value = document.calculator.elements["calculator_diameter"].value;
					document.calculator.elements["calculator_length"].value = document.calculator.elements["calculator_diameter"].value;

					// set curved corners to 4 and prevent edit
					document.calculator.elements["calculator_corners"].value = 4;
					document.calculator.elements["calculator_corners"].readOnly = true;
					
					// set polished edges to no and show
					// 0 = no
					document.calculator.elements["calculator_polished"].options[0].selected = true;
					document.getElementById("calculator_polished_div").style.display = 'none';
					document.getElementById("calculator_polished_text_div").style.display = 'inline';	
					
					// hide rows in the pricing table	
					document.getElementById("price_table_polishing").style.display = 'none';
				}
				else
				{
					//alert("2");
					document.calculator.elements["calculator_diameter"].value = 0;
					document.getElementById("calculator_diameter_div").style.display = 'none';
					
					// set the width and length to be empty again
					document.calculator.elements["calculator_width"].readOnly = false;
					document.calculator.elements["calculator_length"].readOnly = false;
					
					// set curved corners to 0 and allow edit
					document.calculator.elements["calculator_corners"].readOnly = false;
					
					// set polished edges to no and show
					// 0 = no
					document.getElementById("calculator_polished_div").style.display = 'inline';
					document.getElementById("calculator_polished_text_div").style.display = 'none';
					
					// show rows in the pricing table	
					document.getElementById("price_table_polishing").style.display = '';
				}

	 			//******************************************
				//******************************************
				// recalculate the price
				//******************************************
				//******************************************

	 			calculatePrice()

	 			//******************************************
            }
        }

        material = document.getElementById("calculator_material").value;

       	var url = "calculatorajax.php?material=" + material;

      	//******************************************
       	// if a colour has been selected pass this so we can get the thicknesses
       	colour_index = document.calculator.elements["calculator_colour"].selectedIndex;
		// greater than 0 as the first entry will be please choose if one existed
       	if(colour_index > 0)
       	{
       		colour_text = document.calculator.elements["calculator_colour"].options[colour_index].text;
       		colourtype = "Clear";
       		if(colour_text != "Clear")
       		{
       			colourtype = "coloured";
       		}
       		url = url + "&colourtype=" + colourtype;
       	}
       	//******************************************
       	// if a thickness has been selected pass this so we can get the prices
       	thickness_index = document.calculator.elements["calculator_thickness"].selectedIndex;
		// greater than 0 as the first entry will be please choose if one existed
       	if(thickness_index > 0)
       	{
       		thickness_text = document.calculator.elements["calculator_thickness"].options[thickness_index].text;
       		url = url + "&thickness=" + thickness_text;
       	}
       	//******************************************

		//alert(url);

        xmlHttp.open("GET",url,true);
        xmlHttp.send(null);
	}

	function calculatePrice()
	{
		//************************************************************
		// this is mm2 (squared) but we still need width, height and thickness
		var mm_price = 0.00;
		var mm_units = 0;
		var mm_total = 0.00;

		if(document.getElementById("price_mm").innerHTML)
		{
			mm_price = parseFloat(document.getElementById("price_mm").innerHTML);
		}

		var entered_width = 0;
		var entered_length = 0;

		entered_width = Number(document.calculator.elements["calculator_width"].value);
		entered_length = Number(document.calculator.elements["calculator_length"].value);

		if(entered_width && entered_length)
		{
			mm_units = (entered_width * entered_length);
			mm_total = mm_price * mm_units;
		}

		document.getElementById("price_mm_units").innerHTML = mm_units;
		document.getElementById("price_mm_total").innerHTML = strip_trailing_zeros(round_number(mm_total, 2));
		//************************************************************
		var hole_price = 0.00;
		var holes = 0.00;
		var holes_total = 0.00;

		if(document.getElementById("price_hole").innerHTML)
		{
			hole_price = parseFloat(document.getElementById("price_hole").innerHTML);
		}

		if(document.calculator.elements["calculator_holes"].value)
		{
			holes = parseFloat(document.calculator.elements["calculator_holes"].value);
		}

		if(hole_price && holes)
		{
			holes_total = (hole_price * holes);
		}
		document.getElementById("price_hole_units").innerHTML = holes;
		document.getElementById("price_hole_total").innerHTML = strip_trailing_zeros(round_number(holes_total, 2));
		//************************************************************
		var corner_price = 0.00;
		var corners = 0.00;
		var corners_total = 0.00;

		if(document.getElementById("price_corner").innerHTML)
		{
			corner_price = parseFloat(document.getElementById("price_corner").innerHTML);
		}

		if(document.calculator.elements["calculator_corners"].value)
		{
			corners = parseFloat(document.calculator.elements["calculator_corners"].value);
		}

		if(corner_price && corners)
		{
			corners_total = (corner_price * corners);
		}
		document.getElementById("price_corner_units").innerHTML = corners;
		document.getElementById("price_corner_total").innerHTML = strip_trailing_zeros(round_number(corners_total, 2));
		//************************************************************
		var polished_price = 0.00;
		var polished = false;
		var polished_units = 0;
		var polished_total = 0.00;

		if(document.getElementById("price_polished").innerHTML)
		{
			polished_price = parseFloat(document.getElementById("price_polished").innerHTML);
		}

		if(document.calculator.elements["calculator_polished"].value == "Yes")
		{
			polished = true;
		}

		if(polished == true)
		{
			var entered_width = 0;
			var entered_length = 0;

			entered_width = Number(document.calculator.elements["calculator_width"].value);
			entered_length = Number(document.calculator.elements["calculator_length"].value);

			if(entered_width && entered_length)
			{
				polished_units = ((entered_width + entered_length) * 2);
				polished_total = polished_price * polished_units;
			}
		}

		document.getElementById("price_polished_units").innerHTML = polished_units;
		document.getElementById("price_polished_total").innerHTML = strip_trailing_zeros(round_number(polished_total, 2));
		//************************************************************
		var mm_total = parseFloat(document.getElementById("price_mm_total").innerHTML);
		var holes_total = parseFloat(document.getElementById("price_hole_total").innerHTML);
		var corners_total = parseFloat(document.getElementById("price_corner_total").innerHTML);
		var polished_total = parseFloat(document.getElementById("price_polished_total").innerHTML);

		var total_total = 0.00;

		total_total = (mm_total + holes_total + corners_total + polished_total);

		document.getElementById("price_total").innerHTML = round_number(total_total, 2);
		
		update_gross();
		
		//************************************************************
	}
	
	
	// in addition to resetting all values we also need to clear the
	// colour and thickness selects and retain the shape
	function form_reset()
	{
		selected_shape = document.calculator.elements["calculator_shape"].selectedIndex;
	
		document.calculator.reset();
		
		document.calculator.elements["calculator_shape"].selectedIndex = selected_shape;
		
		colours_select_length = document.calculator.elements["calculator_colour"].options.length;
		for(i = (colours_select_length - 1); i >= 0; i--)
 		{
 			document.calculator.elements["calculator_colour"].remove(i);
 		}

 		thicknesses_select_length = document.calculator.elements["calculator_thickness"].options.length;
		for(i = (thicknesses_select_length - 1); i >= 0; i--)
 		{
 			document.calculator.elements["calculator_thickness"].remove(i);
 		}
 		
 		document.getElementById("calculator_diameter_tip").innerHTML = "";
 		
 		document.getElementById("calculator_width_tip").innerHTML = "";

		document.getElementById("calculator_length_tip").innerHTML = "";
	}

	// ahh toFixed doesnt round properly
	function bla(number, precision)
	{
		//number = parseFloat(number) + 0.001
	
		var result = Math.round(number * Math.pow(10, precision)).toString();
		result = result.substring(0, result.length - precision) + '.' +
		result.substring(result.length - precision, result.length);
	
		return result;
	}
	
	function round_number(number, precision)
	{	
		var result = Math.round(number * Math.pow(10, precision)) / Math.pow(10, precision);
		
		var tofixedtest = 123.456;
		if(tofixedtest.toFixed)
		{
			result = result.toFixed(precision);
		}

		return result;
	}
	
	function round_number1(number, precision)
	{	
		var result = Math.round((number + 0.0000001) * Math.pow(10, precision)) / Math.pow(10, precision);
		
		var tofixedtest = 123.456;
		if(tofixedtest.toFixed)
		{
			result = result.toFixed(precision);
		}

		return result;
	}

    // use dec_sep for internationalization
	function decimals(x, dec_sep)
	{
		var tmp = new String();
		tmp = x;
		if(tmp.indexOf(dec_sep) >- 1)
		{ 
			return tmp.length - tmp.indexOf(dec_sep) - 1;
		} 
		else
		{
			return 0;
		}
	} 
	function strip_trailing_zeros(number)
	{
		var result = "";

		var end_found = false;
		var i = number.length;

		// must have at least 1 character
		if(i > 0)
		{
			while(end_found == false && i >= 0)
			{
				i--;

				if(number.charAt(i) != "0")
				{
					i++;
					end_found = true;
				}
			}
			result = number.substring(0, i);
			var dot_index = result.indexOf(".");

			// do we need to add decimal places?
			if((dot_index == -1) || ((result.length - dot_index) < 3))
			{
				result = round_number(number, 2);
			}
		}
		else
		{
			result = number;
		}

		return result;
	}