﻿// Function matrix_recalc()
function matrix_recalc(lDisplay)
{
	var frmMatrix = window.document.forms["matrix"];
	var frmMain = window.document.forms["mainform"];
	var frmDel = window.document.forms["delcosts"];

	var nCols = frmMatrix["numW"].value - 0;
	var nRows = frmMatrix["numH"].value - 0;
	
	var nMaxWdith = frmMatrix["maxW"].value - 0;
	var nMaxHeight = frmMatrix["maxH"].value - 0;
	var nMinWdith = frmMatrix["minW"].value - 0;
	var nMinHeight = frmMatrix["minH"].value - 0;
	var nWidth = frmMain["nW"].value - 0;
	var nHeight = frmMain["nH"].value - 0;

	var i = 1;
	var nLastVal = 0;
	var nCurVal = 0;
	var nMyCol = 0;
	
	var lReturn = true;
	var cError = "";
	var nCost = 0; 
	
	/*
	**********************
	* Pre Calc Validation
	**********************
	*/
	
	// validate entries. If either entry is 0 or over max val dont calculate

	// Height & Width Validation

	
	if ((nWidth > nMaxWdith || nWidth < nMinWdith) || (nHeight > nMaxHeight || nHeight < nMinHeight)) 
	{
	
		frmMain.Cost.value = "0";
		// one or more values are zero
		
		if ((nWidth > nMaxWdith || nWidth < nMinWdith) && nWidth != 0)
		{
			cError = cError + "Width cannot be less than  " + nMinWdith + " or exceed " + nMaxWdith + "\n";
			change('nW','badbox');		
			lReturn = false;
		}
		else
		{
			change('nW','goodbox');
		}	

		if ((nHeight > nMaxHeight || nHeight < nMinHeight) && nHeight != 0)
		{
			cError = cError + "Height cannot be less than  " + nMinHeight + " or exceed " + nMaxHeight + "\n";
			change('nH','badbox');		
			lReturn = false;
		}
		else
		{
			change('nH','goodbox');
		}	
	}
	else
	{
		change('nH','goodbox');
		change('nW','goodbox');
	}
	
	if (lDisplay && (nWidth ===0 || nHeight === 0))
	{
		if (nWidth === 0)
		{
			cError = cError + "Width cannot be 0\n";
			change('nW','badbox');		
			lReturn = false;
		}
		
		if (nHeight === 0)
		{
			cError = cError + "Height cannot be 0\n";
			change('nH','badbox');		
			lReturn = false;
		}
	}

	// furniture colour validation
	if ((frmMain.colour.selectedIndex == 1 || frmMain.colour.selectedIndex == 2) && frmMain.furniture.selectedIndex === 0)
	{
		cError = cError + "White handles not available with Rosewood or Cherrywood\n";
		change('furniture','badbox');		
		lReturn = false;
	}
	else
	{
		change('furniture','goodbox');
	}	

	// delivery validation
	if (frmMain.delivery.selectedIndex === 0)
	{
		if (lDisplay) 
		{			
		cError = cError + "Select a delivery region\n";
		change('delivery','badbox');		
		lReturn = false;
		}			
	}
	else
	{
		change('delivery','goodbox');
	}		
	
	if (!lReturn)
	{
		alert(cError);
		return lReturn;
	}

	if (nWidth === 0 || nHeight === 0)
	{
		return false;
	}


	/*
	**********************
	* Price Calculation
	**********************
	*/

	// Calc Base price based on matrix
	while (i < nCols)
	{
		
		nCurVal = frmMatrix.elements[i].value - 0
		
//		alert("nWidth : " + nWidth + " nLastVal : " + nLastVal + " nCurVal : " + nCurVal);
		
		if (nWidth > nLastVal && nWidth <= nCurVal)		
		{
			nMyCol = i;		// save Col number
			i = nCols; 		// finish the loop
		}
		else
		{
			nLastVal = frmMatrix.elements[i].value - 0;
			i = i + 1;
		}
	}
	
	nLastVal = 0;
	nCurVal = 0;
	i = 1;
	
	var nMyRow = 0;
	
	while (i < nRows)
	{
		
		nCurVal = frmMatrix.elements[i*nCols].value - 0
		
//		alert("nHeight : " + nHeight + " nLastVal : " + nLastVal + " nCurVal : " + nCurVal);
		
		if (nHeight > nLastVal && nHeight <= nCurVal)		
		{
			nMyRow = i;		// save row number
			i = nRows; 		// finish the loop
		}
		else
		{
			nLastVal = frmMatrix.elements[i*nCols].value - 0;
			i = i + 1;
		}
	}
	
	var nEl = (nMyRow*nCols) + nMyCol;
	
	nCost = frmMatrix.elements[nEl].value - 0;		// force type to be numeric
	
	// Add Sill values
	var nIndex = 0;
	nIndex = frmMain.sill.selectedIndex;
	
	if (nIndex >= 2)
	{
		var nMtrCost = 0;
	
		switch(nIndex)
		{
			case 2:
				nMtrCost = frmMatrix["sill1"].value;
				break;
			case 3:
				nMtrCost = frmMatrix["sill2"].value;
				break;
			case 4:
				nMtrCost = frmMatrix["sill3"].value;
				break;
			case 5:
				nMtrCost = frmMatrix["sill4"].value;
				break;
			default:
				alert("Invalid case value " + nIndex);
		}
		
		if (nMtrCost == 0) return false;
		
		var nSillCost = 0;
	
		nSillCost = (((nWidth + 100)/1000) * nMtrCost) + 1.00;
		nCost = nCost +  nSillCost;
	}
	
	// Add colour percentage
	nIndex = frmMain.colour.selectedIndex;
	
	switch(nIndex)
	{
		case 1:
			nCost = nCost * 1.45;
			break;
		case 2:
			nCost = nCost * 1.25;
			break;
		case 3:
			nCost = nCost * 1.45;
			break;
		case 4:
			nCost = nCost * 1.25;
			break;
	}
	
	// Add Furniture
	var nH = frmMatrix.furnH.value - 0;
	var nFurnCost = 0; 
	
	nIndex = frmMain.furniture.selectedIndex;
	
	if (nIndex == 1) 
	{
		nFurnCost = frmMatrix.furn1.value - 0;
	}
	else if (nIndex == 2)
	{
		nFurnCost = frmMatrix.furn2.value - 0;
	}
	
	nCost = nCost + (nH * nFurnCost);

	// Add Glass Cost 
	nIndex = frmMain.glass.selectedIndex;
	
	switch(nIndex)
	{
		case 0:
			i = 0;
			break;
		case 1:
			i =  frmMatrix.glass1.value - 0 ;
			break;
		case 2:
			i =  frmMatrix.glass2.value - 0 ;
			break;
	}
	
	nCost = nCost + (((nWidth / 1000) * (nHeight / 1000)) * i);		// add glass cost
	
	// Add Blinds Cost
	if (nIndex > 0 && frmMain.Blinds[1].checked)
	{
		nCost = nCost + ((frmMatrix.nBlinds.value - 0) * (frmMatrix.BlindsCost.value - 0));
	}
	
	// Add Delivery Cost
	nEl = frmMain.delivery.selectedIndex - 0;
	if (nEl > 0) nCost = nCost + (frmDel.elements[nEl-1].value - 0);
	
	nCost = nCost * 1.175
	
	frmMain["Cost"].value = nCost.toFixed(2); // round to 2 decimal points

	return true;
}

// validate main order form
function validate_mainform()
{
	var lReturn = true;

	if (!matrix_recalc(true)) lReturn = false;
	
//	alert("lReturn : " + lReturn);
	
	return lReturn
}

// validate customer details form
function validate_customer_form()
{

	var lReturn = true;
	
	var cError = generic_name_addr_check();
	
	if (trim(cError) != '') lReturn = false;

	if (!lReturn)
	{
		alert("The following fields are mandatory : \n"+cError);
		return lReturn;
	}

}

// Show Hide Accidents Details Box
function Accidents_Click()
{
	document.getElementById("AccidentTable").style.display = window.document.hbquote_form.Accidents[0].checked ? 'block'	: 'none';
}

// Function Glass_Change Fires on change of glass drop down
function Glass_Change()
{
	var cVal = window.document.getElementById("mainform").glass.selectedIndex == 2 ? 'block' : 'none';
	document.getElementById("Pattext").style.display = cVal;
	document.getElementById("Pat").style.display = cVal;
	cVal = window.document.getElementById("mainform").glass.selectedIndex > 0 ? 'block' : 'none';
	document.getElementById("Blindtext").style.display = cVal;
	document.getElementById("Blind").style.display = cVal;	
	matrix_recalc(false);
}

// Function generic_name_addr_check()
function generic_name_addr_check()
{
	var cError = '';

    with(window.document.forms[0])
    {

		// Name Validation
		if(trim(Forename.value) == '')
		{
			cError = cError + 'Forename, ';
			change('Forename','badbox');
			lReturn = false;
		}
		else
		{
			change('Forename','goodbox');
		}
	
		if(trim(Surname.value) == '')
		{
			cError = cError + 'Surname, ';
			change('Surname','badbox');
			lReturn = false;
		}
		else
		{
			change('Surname','goodbox');
		}

		// Address Validation
		if(trim(addr1.value) == '')
		{
			cError = cError + 'Building Name/Number, ';
			change('addr1','badbox');
			lReturn = false;
		}
		else
		{
			change('addr1','goodbox');
		}
	
		if(trim(Street.value) == '')
		{
			cError = cError + 'Street Address, ';
			change('Street','badbox');
			lReturn = false;
		}
		else
		{
			change('Street','goodbox');
		}
	
		if(trim(Town.value) == '')
		{
			cError = cError + 'Town, ';
			change('Town','badbox');
			lReturn = false;
		}
		else
		{
			change('Town','goodbox');
		}

		if(trim(County.value) == '')
		{
			cError = cError + 'County, ';
			change('County','badbox');
			lReturn = false;
		}
		else
		{
			change('County','goodbox');
		}

		if(trim(Postcode.value) == '')
		{
			cError = cError + 'Postcode, ';
			change('Postcode','badbox');
			lReturn = false;
		}
		else
		{
			change('Postcode','goodbox');
		}

		// E-Mail Validation
		if(trim(Email.value) == '')
		{
			cError = cError + 'E-Mail, ';
			change('Email','badbox');
			lReturn = false;
		}
		else if(!isEmail(trim(Email.value)))
		{
			alert('Invalid e-mail');
			change('Email','badbox');
			lReturn = false;
		}
		else
		{
			change('Email','goodbox');
		}
		
		// Telephone Validation
		if(trim(Telno.value) == '')
		{
			cError = cError + 'Telephone, ';
			change('Telno','badbox');
			lReturn = false;
		}
		else
		{
			change('Telno','goodbox');
		}
	}

    return cError;
}

// Function Trim()
function trim(str)
{
   return str.replace(/^\s+|\s+$/g,'');
}

//
// Mega Fast Trim
//
function trim12 (str) 
{
//	alert("trim12 called");
	var	str = str.replace(/^\s\s*/, ''),
		ws = /\s/,
		i = str.length;
	while (ws.test(str.charAt(--i)));
	return str.slice(0, i + 1);
}

// Function Change()
function change(id, newClass)
{
	identity=document.getElementById(id);
	identity.className=newClass;
}

// Function IsEmail()
function isEmail(str)
{
	var regex = /^[-_.a-z0-9]+@(([-_a-z0-9]+\.)+(ad|ae|aero|af|ag|ai|al|am|an|ao|aq|ar|arpa|as|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|bi|biz|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|com|coop|cr|cs|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|in|info|int|io|iq|ir|is|it|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|mg|mh|mil|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|museum|mv|mw|mx|my|mz|na|name|nc|ne|net|nf|ng|ni|nl|no|np|nr|nt|nu|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|pro|ps|pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)|(([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5])\.){3}([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5]))$/i;
	return regex.test(str);
}

// function disableIt() - Toggle the disabled status
function disableIt(obj)
{
	obj.hidden = !(obj.hidden);
}

// function hideID() - Toggle the disabled status
function hideID(objID)
{
    if (document.getElementById(objID).style.display == 'none')
    {
         document.getElementById(objID).style.display = 'block';
    }
    else
    {
         document.getElementById(objID).style.display = 'none';
    }
}

// Function ValidNumber - Validate text box number only entry
function ValidNumber(thecontrol, lAlert)
{
	var thestring = thecontrol.value;
	
	if (trim(thestring) == '')
	{
		return true;
	}
	
	var i, ch;

	if (typeof(lAlert) !="boolean")
	{
		lAlert = true;
	}
	
    for (i = 0; i < thestring.length; i++) {
        ch = thestring.substring(i, i+1);
        if (ch < "0" || ch > "9")
          {
          if (lAlert) alert("Numbers must contain digits 0 thru 9 only!");
          return false;
          }
    }
    return true;
}

// Function ValidCurrency - Validate text box currency only entry
function ValidCurrency(thecontrol, lAlert)
{
	var thestring = thecontrol.value;
	var lDecimal = false;
	
	if (trim(thestring) == '')
	{
		return true;
	}
	
	var i, ch;

	if (typeof(lAlert) !="boolean")
	{
		lAlert = true;
	}
	
    for (i = 0; i < thestring.length; i++) 
	{
        ch = thestring.substring(i, i+1);
        if (ch < "0" || ch > "9")
        {
			if (ch != ".")
			{
			if (lAlert)	alert("Currency values must contain digits 0 thru 9 and . only!");
			return false;
			}
        }
		
		if (ch == ".")  // When we have a decimal point it must be the only one
		{
			if (lDecimal == true)
			{
				if (lAlert) alert("Too Many Decimal Points");
				return false;
			}
			else
			{
				lDecimal = true;
			}
		}
	}
    return true;
}

function check_email_form()
{
	var cName, cEmail, cEnquiry;
	var cError, lReturn;	lReturn = true;
	cError = 'The following fields are mandatory:\n\n';    with(window.document.email_form)
    {
		cName = Name;
 		cEmail = Email;
 		cEnquiry = Enquiry;
   }	// Name Validation
	if(trim(cName.value) == '')
	{
		cError = cError + 'Name\n';
//		cName.focus();
		change('Name','badbox');
		lReturn = false;
	}
	else
	{
		change('Name','');
	}	if(trim(cEnquiry.value) == '')
	{
		cError = cError + 'Enquiry\n';
//		cEnquiry.focus();
		change('Enquiry','badbox');
		lReturn = false;
	}
	else
	{
		change('Enquiry','');
	}	if(trim(cEmail.value) == '')
	{
		cError = cError + 'E-Mail Address\n';
		change('Email','badbox');
		lReturn = false;
	}
	else if(!isEmail(trim(cEmail.value)))
	{
		alert('Invalid e-mail address');
		change('Email','badbox');
		lReturn = false;
	}
	else
	{
		change('Email','');
	}
	
	if (!lReturn) alert(cError);    return lReturn;
}
function trim(str)
{
   return str.replace(/^\s+|\s+$/g,'');
}function change(id, newClass)
{
	identity=document.getElementById(id);
	identity.className=newClass;
}function isEmail(str)
{
	var regex = /^[-_.a-z0-9]+@(([-_a-z0-9]+\.)+(ad|ae|aero|af|ag|ai|al|am|an|ao|aq|ar|arpa|as|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|bi|biz|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|com|coop|cr|cs|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|in|info|int|io|iq|ir|is|it|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|mg|mh|mil|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|museum|mv|mw|mx|my|mz|na|name|nc|ne|net|nf|ng|ni|nl|no|np|nr|nt|nu|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|pro|ps|pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)|(([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5])\.){3}([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5]))$/i;
	return regex.test(str);
}
