function curtain(frm)
{
/*****************************************************************************************************************************************


				Retrieve variables


******************************************************************************************************************************************/

	curtainlabour = 0;
	curtainmaterial = 0;
	liningmaterial = 0;
	valancelabour = 0;
	valancematerial = 0;
	valanceliningmaterial = 0;
	headingcost = 0;
	tiebackcost = 0;
	
	total_cost_curtain = 0.00;
	total_cost_valance = 0.00;
	total_cost_tieback = 0.00;
	
	
	qdrop = document.forms[frm].dropc.value;
	qwidth = document.forms[frm].widthc.value;
	qvheight = document.forms[frm].valanceheightc.value;

	//Get details of curtain material
	curtain_material_repeat = document.forms[frm].fabricRepeat_curtain.value;

	//curtain_material_repeat is coming in as NaN because cm text added to specs., so remove
	curtain_material_repeat = parseInt(curtain_material_repeat);
	
	curtain_material_pricePerM = document.forms[frm].fabricCostPerM_curtain.value;
	curtain_material_description = document.forms[frm].fabricName_curtain.value;

	//Get lining details
	liningDetails = (document.forms[frm].liningc.value).split(",");
	lining_price = liningDetails[0];
	lining_code = liningDetails[1];
	lining_description = liningDetails[2];

	//Get style details
	style_price_unlined = document.forms[frm].headingPriceUnlined.value;
	style_price_lined = document.forms[frm].headingPriceLined.value;
	style_code = document.forms[frm].headingCode.value;
	style_description = document.forms[frm].headingName.value;

	//Get valance details
	valance_material_repeat =document.forms[frm].fabricRepeat_valance.value;
	valance_material_pricePerM = document.forms[frm].fabricCostPerM_valance.value;
	valance_material_description = document.forms[frm].fabricName_valance.value;
	valance_required = document.forms[frm].add_valance.checked;
	valance_fabric_image = document.forms[frm].fabricImage_valance.src;

	

	//Tiebacks
	tieback_material_pricePerM = document.forms[frm].fabricCostPerM_tiebacks.value;
	tieback_material_description = document.forms[frm].fabricName_tiebacks.value;

	tieback_required = document.forms[frm].add_tiebacks.checked;

	tieback_fabric_image = document.forms[frm].fabricImage_tiebacks.src;
		

	var tieback_details = (document.forms[frm].tieback_type.value).split(",");;
	tieback_basic_price = parseFloat(tieback_details[0]);
	tieback_code = tieback_details[1];
	tieback_description = tieback_details[2];




/*****************************************************************************************************************************************


				Calculate Valance


******************************************************************************************************************************************/
	
	//If a valance has not been selected, reset everything valance related to default and disable
	if (valance_required &&  valance_material_pricePerM > 0.00)
	{

		var suggestedValanceHeight = Math.ceil(qdrop / 6);
	

		//If valance has only just been turned on, prefill the height with the suggested value...
		if (document.forms[frm].valanceheightc.disabled == true)
		{
			document.forms[frm].valanceheightc.value =  suggestedValanceHeight;
//			document.forms[frm].materialcv.selectedIndex = document.forms[frm].materialc.selectedIndex;

		
		}

		//Enable material and height selection for valance
	//	document.forms[frm].valanceheightc.disabled = false;	
//		document.forms[frm].materialcv.disabled = false;
		


		minval = parseInt(document.form1.valance_minimum_height.value);
		maxval = suggestedValanceHeight + 10;
		cvalerror = "Valance height must be between " + minval + " and " + maxval + " centimetres - value corrected.";

		qvheight = document.forms[frm].valanceheightc.value;

		if (qvheight < minval || qvheight > maxval || isNaN(qvheight))
		{
			document.forms[frm].valanceheightc.value = suggestedValanceHeight;  
			qvheight = suggestedValanceHeight;
			alert(cvalerror);
			
//			alert(suggestedValanceHeight);
		}
		
		
		
		// calculate valance labour cost
		var valance_standard_width = document.form1.valance_standard_width.value;
		var valance_widths_required = Math.ceil(qwidth / document.form1.valance_standard_width.value);
		
		
		//Calcualte labour costs
		if (lining_code == "no")
			valanceLabourPerWidth = document.form1.valance_labour_per_width_unlined.value;
		else
			valanceLabourPerWidth = document.form1.valance_labour_per_width_lined.value;
			
		valancelabour = parseInt(valance_widths_required) * parseFloat(valanceLabourPerWidth); 
		

		//Calcualte material costs
		vrepeats = Math.ceil((parseFloat(qvheight) + parseFloat(document.form1.valance_material_allowance.value)) / parseFloat(valance_material_repeat));
		valancematerial = ((vrepeats * parseFloat(valance_material_repeat) * parseFloat(valance_widths_required)) / 100) * parseFloat(valance_material_pricePerM);
		
		// calculate valance lining material cost
		if (lining_code != "no")
		{
			valanceliningmaterial = (((parseFloat(qvheight) + parseFloat(document.form1.valance_lining_allowance.value)) * valance_widths_required) / 100) * lining_price;
		}
	


		

		total_cost_valance = valancelabour + valancematerial + valanceliningmaterial;

	}
	else
		total_cost_valance = 0.00;
	


/*****************************************************************************************************************************************


				calculate Curtain


******************************************************************************************************************************************/



dontCalculateCurtain = false;

	minDrop = parseInt(document.form1.curtain_min_drop.value);
	maxDrop = parseInt(document.form1.curtain_max_drop.value);
	minWidth = parseInt(document.form1.curtain_min_width.value);
	maxWidth = parseInt(document.form1.curtain_max_width.value);

	dropInt = parseInt(qdrop);
	widthInt = parseInt(qwidth);

	if (qdrop == "" || isNaN(dropInt))
	{
		dontCalculateCurtain = true;
	}
	else if ((qdrop >= minDrop && qdrop <= maxDrop) == false)
	{
		alert("The curtain drop size must be between " + minDrop + "cm and " + maxDrop + "cm.");
		dontCalculateCurtain = true;
	}

	if (qwidth == "" || isNaN(widthInt))
	{
		dontCalculateCurtain = true;
	}
	else if ((qwidth >= minWidth && qwidth <= maxWidth) == false)
	{
		alert("The curtain width must be between " + minWidth + "cm and " + maxWidth + "cm.");
		dontCalculateCurtain = true;
	}

 
	
	if (style_code != "none" && curtain_material_pricePerM != 0 && dontCalculateCurtain == false)
	{
	//	alert("calculating full");
		material_widths_required = calculatematerialWidths(qwidth, style_code);

		var multiplier = 2.0;
		/*
//		alert(style_code);	
		if (style_code == "pinchpleat")
			multiplier = 2.5;
*/

		//Curtain Labour Cost
		if (lining_code == "no") //Price without lining
			curtainLabourRatePerWidth = style_price_unlined;
		else //Price with lining
			curtainLabourRatePerWidth = style_price_lined;
			
	//	alert("curtain_material_pricePerM = " + curtain_material_pricePerM);
	
		
		curtainlabour = Math.ceil(material_widths_required) * multiplier * curtainLabourRatePerWidth;

		//alert("curtainlabour = " + curtainlabour);


		// calculate curtain material cost
		curtain_material_allowance = document.form1.curtain_material_allowance.value;
		
		repeats = Math.ceil((parseFloat(qdrop) + parseFloat(curtain_material_allowance)) / parseFloat(curtain_material_repeat));

		//alert("repeats = " + repeats);

		

		curtainmaterial = ((repeats * curtain_material_repeat * material_widths_required * multiplier) / 100) * parseFloat(curtain_material_pricePerM);

//		alert("material_widths_required = " + material_widths_required);
	//	alert("curtain_material_repeat = " + curtain_material_repeat);

		

		//If tabtop has been chosen, add an extra half metre of fabric
		if (style_code == "tabtop")
			curtainmaterial = curtainmaterial + (0.5 * parseFloat(curtain_material_pricePerM));
	
	
		// calculate the lining material cost
		if (lining_code != "no")                                                                                      
		{
			curtainLiningAllowance = document.form1.lining_material_allowance.value;
			liningPricePer = lining_price;
			
			liningMaterialPrice = (((parseFloat(qdrop) + parseFloat(curtainLiningAllowance)) * material_widths_required * 2) / 100) * liningPricePer;
		}
		else liningMaterialPrice = 0;
	
	
		
		// Calculate the cost of the heading
		price_curtain_tape_per_width = document.form1.price_curtain_tape_per_width.value;
		price_eyelets_per_width = document.form1.price_eyelets_per_width.value;
		
		if (style_code == "pencilpleat")
			headingcost = parseFloat(price_curtain_tape_per_width) * (material_widths_required * multiplier); 
		else if (style_code == "eyelet")
			headingcost = parseFloat(price_eyelets_per_width) * (material_widths_required * multiplier); 
		
		
		total_cost_curtain = curtainlabour + curtainmaterial + liningMaterialPrice + headingcost;
		
		if (isNaN(total_cost_curtain))
			total_cost_curtain = 0.00;
		
		
	//	alert(total_cost_curtain);
		
	}
	else
	{
		total_cost_curtain = 0.00;
	}


/*****************************************************************************************************************************************


				Calculate tiebacks


******************************************************************************************************************************************/

	if (tieback_required && tieback_material_pricePerM > 0)
	{
		//Add cost of required amount of material for tiebacks to basic cost
		total_cost_tieback = tieback_basic_price + (parseFloat(tieback_material_pricePerM) * parseFloat(document.form1.tieback_material_requried.value));
		
	}
	else total_cost_tieback = 0.00;




/*****************************************************************************************************************************************


				Present Information


******************************************************************************************************************************************/



	if (qdrop == "")
		qdrop = 0;

	if (qwidth == "")
		qwidth = 0;


	var description = "<table>\n";


	  


	description += "<tr><th>Curtain Material</th><td>" + curtain_material_description + "</td></tr>\n";
	MM_findObj("optionTypeID_1").value = curtain_material_description + ",0.00,Curtain Material,0";

	description += "<tr><th>Curtain Dimensions</th><td>Drop: " + qdrop + "cm, Width: " + qwidth + "cm</td></tr>\n";
	MM_findObj("optionTypeID_2").value = "Drop: " + qdrop + "cm / Width: " + qwidth + "cm,0.00,Curtain Dimensions,0";

	description += "<tr><th>Curtain Style</th><td>" + style_description + "</td></tr>\n";
	MM_findObj("optionTypeID_3").value = style_description + ",0.00,Heading Style,0";

	description += "<tr><th>Lining</th><td>" + lining_description + "</td></tr>\n";
	MM_findObj("optionTypeID_4").value = lining_description + ",0.00,Lining,0";




	if (tieback_required && tieback_material_pricePerM > 0.00)
	{
		description +=	"<tr><th>Tie backs</th><td>" + tieback_description  + " - " + tieback_material_description + "</td></tr>\n";
		MM_findObj("optionTypeID_5").value = tieback_description  + " - " + tieback_material_description + ",0.00,Tiebacks,0";
	}
	else
	{
		description +=	"<tr><th>Tie backs</th><td>None</td></tr>\n";
		MM_findObj("optionTypeID_5").value = "None,0.00,Tiebacks,0";
	}
		
		


	if (valance_required && valance_material_pricePerM > 0.00)
	{
		description += "<tr><th>Valance</th><td>" + qvheight + "cm high - " + valance_material_description + "</td></tr>\n";
		MM_findObj("optionTypeID_6").value = qvheight + "cm high - " + valance_material_description + ",0.00,Valance,0";
	}
	else
	{
		description += "<tr><th>Valance</th><td>None</td></tr>\n";
		MM_findObj("optionTypeID_6").value = "None,0.00,Valance,0";
	}

	description += "</table>\n\n";

	document.getElementById("build_summary_description").innerHTML = description;


	total_cost = (total_cost_curtain + total_cost_valance + total_cost_tieback).toFixed(2);


	var obj_totalPrice = MM_findObj("build_total_price");
	obj_totalPrice.innerHTML = "£" + total_cost;
	document.forms[frm].rrp.value = total_cost;

	var obj_buildRight = MM_findObj("build_right");
	obj_buildRight.style.display = "block";

	var obj_buildBuy = MM_findObj("build_buy");




	if (total_cost > 0.00)
		obj_buildBuy.style.display = "block";
	else
		obj_buildBuy.style.display = "none";
	
	//Store technical details for later order management processes
	tieback_fabric_image = tieback_fabric_image.replace("&", "<<@IWA_AND@>>");
	valance_fabric_image = valance_fabric_image.replace("&", "<<@IWA_AND@>>");
	document.form1.technical_options.value = "&curtain_material_repeat=" + curtain_material_repeat + "&style=" + style_code + "&valance_material_repeat=" + valance_material_repeat + "&valance_material_description=" + valance_material_description + "&tieback_material_description=" + tieback_material_description + "&material_widths_required=" + material_widths_required + "&tieback_required=" + tieback_required + "&valance_required=" + valance_required + "&tieback_fabric_image=" + tieback_fabric_image + "&valance_fabric_image=" + valance_fabric_image + "&tieback_code=" + tieback_code + "&valance_drop=" + qvheight + "&heading_code=" + style_code; 


}
