//**Validate Execution Date and select Functionality**		
			
		function dutyOld(dutiableAmount)
		{
			var v = dutiableAmount/1000;
		
			if(dutiableAmount<=0)
				return 0;
			else if(dutiableAmount<=500000)
				return (0.065*v*v)+21*v;  
			else
				return 0.054*dutiableAmount;
		}
		
		function dutyNew(dutiableAmount)
		{
			var v = dutiableAmount/1000;
		
			if(dutiableAmount<=0)
				return 0;
			else if(dutiableAmount<=525000)
				return (0.06571441*v*v)+15*v;  
			else
				return 0.0495*dutiableAmount;
		}


//**Function to Calculate Stamp Duty on Normal Conveyance (CONV)**


		function sdCONV(form)
		{
			var date      = auDate(form.date.value);
			var budgdate  = new Date("05/06/2008");
		    
			var price     = form.pv.value;
			
			if (price.indexOf(',')!=-1||price.indexOf('.')!=-1)
			{
				alert("Please enter a property value without commas or full stops.");
			}
			else
			{
				if (date < budgdate)
				{
					sdConvOld(form);		
				}
				else 
				{			
					sdConvNew(form);
				}
			}
		}
		
		function sdConvNew(form)
		{
			var price     = parseFloat(form.pv.value);
			var date      = auDate(form.date.value);
			var result;
		
			if(isNaN(price) || price<0)
				alert("The 'Value of Property' entered is invalid. Please re-enter value.");
			else if(!((form.date.value).match(/\d\d\/\d\d\/\d\d\d\d/)))
				alert("The 'Date of Purchase' entered is invalid. Please re-enter in the format dd/mm/yyyy.");
			else
			{
				result = flr( dutyNew(price));
		
				if(result<0)
					result = 0;
		
				form.sdp.value = result.toFixed(2);
			}
		}
		
		function sdConvOld(form)
		{
			var price     = parseFloat(form.pv.value);
			var date      = auDate(form.date.value);
			var result;
		
			if(isNaN(price) || price<0)
				alert("The 'Value of Property' entered is invalid. Please re-enter value.");
			else if(!((form.date.value).match(/\d\d\/\d\d\/\d\d\d\d/)))
				alert("The 'Date of Purchase' entered is invalid. Please re-enter in the format dd/mm/yyyy.");
			else
			{
				result = flr( dutyOld(price));
		
				if(result<0)
					result = 0;
		
				form.sdp.value = result.toFixed(2);
			}
		}


//**Function to Calculate Stamp Duty with the First Home Owners Concession (FHOC)**
		
		function sdFHOC(form)
		{
			var date      = auDate(form.date.value);
			var budgdate  = new Date("05/06/2008");
			
			var price     = form.pv.value;
			
			if (price.indexOf(',')!=-1||price.indexOf('.')!=-1)
			{
				alert("Please enter a property value without commas or full stops.");
			}
			else
			{
				if (date < budgdate)
				{
					sdFHOCOld(form);		
				}
					else 
				{
					sdFHOCNew(form);
				}
			}
		}
		
		function sdFHOCOld(form)
		{
			var price     = parseFloat(form.pv.value);
			var date      = auDate(form.date.value);
			var result;
		
			if(isNaN(price) || price<0)
				alert("The 'Value of Property' entered is invalid. Please re-enter value.");
			else if(!((form.date.value).match(/\d\d\/\d\d\/\d\d\d\d/)))
				alert("The 'Date of Purchase' entered is invalid. Please re-enter in the format dd/mm/yyyy.");
			else
			{
				result = flr( dutyOld(price) - flr(dutyOld(fhoc(date))) );
		
				if(result<0)
					result = 0;
		
				form.sdp.value = result.toFixed(2);
			}
		}
		
		function sdFHOCNew(form)
		{
			var price     = parseFloat(form.pv.value);
			var date      = auDate(form.date.value);
			var result;
		
			if(isNaN(price) || price<0)
				alert("The 'Value of Property' entered is invalid. Please re-enter value.");
			else if(!((form.date.value).match(/\d\d\/\d\d\/\d\d\d\d/)))
				alert("The 'Date of Purchase' entered is invalid. Please re-enter in the format dd/mm/yyyy.");
			else
			{
				result = flr( dutyNew(price) - flr(dutyNew(fhoc(date))) );
		
				if(result<0)
					result = 0;
		
				form.sdp.value = result.toFixed(2);
			}
		}

//Function to Calculate Stamp Duty with First Home Owners Concession along with the Home North Scheme (FHOCHS)

	
		function sdFHOCHS(form)
		{
			var date      = auDate(form.date.value);
			var budgdate  = new Date("05/06/2008");
			
			var price     = form.pv.value;
			
			if (price.indexOf(',')!=-1||price.indexOf('.')!=-1)
			{
				alert("Please enter a property value without commas or full stops.");
			}
			else
			{
				if (date < budgdate)
				{
					sdFHOCHSOld(form);		
				}
					else 
				{
					sdFHOCHSNew(form);
				}
			}
		}
		function sdFHOCHSOld(form)
		{
			var price     = parseFloat(form.pv.value);
			var date      = auDate(form.date.value);
			var ownership = parseFloat(form.epp.value);
			var result;
		
			if(isNaN(price) || price<0)  // !((form.pv.value).match(/^\d+(\.\d{2})?$/)) || 
				alert("The 'Value of Property' entered is invalid. Please re-enter value.");
			else if(!((form.date.value).match(/^\d\d\/\d\d\/\d\d\d\d$/)))
				alert("The 'Date of Purchase' entered is invalid. Please re-enter in the format dd/mm/yyyy.");
			else if(isNaN(ownership) || ownership<=0 || ownership>100)
				alert("The 'Interest Purchased' entered is invalid. Please re-enter value.");
			else
			{
				result = flr( dutyOld(price)*ownership/100 - flr(dutyOld(fhoc(date))) );
		
				if(result<0)
					result = 0;
		
				form.sdp.value = result.toFixed(2);
			}
		}
		
		function sdFHOCHSNew(form)
		{
			var price     = parseFloat(form.pv.value);
			var date      = auDate(form.date.value);
			var ownership = parseFloat(form.epp.value);
			var result;
		
			if(isNaN(price) || price<0)  // !((form.pv.value).match(/^\d+(\.\d{2})?$/)) || 
				alert("The 'Value of Property' entered is invalid. Please re-enter value.");
			else if(!((form.date.value).match(/^\d\d\/\d\d\/\d\d\d\d$/)))
				alert("The 'Date of Purchase' entered is invalid. Please re-enter in the format dd/mm/yyyy.");
			else if(isNaN(ownership) || ownership<=0 || ownership>100)
				alert("The 'Interest Purchased' entered is invalid. Please re-enter value.");
			else
			{
				result = flr( dutyNew(price)*ownership/100 - flr(dutyNew(fhoc(date))) );
		
				if(result<0)
					result = 0;
		
				form.sdp.value = result.toFixed(2);
			}
		}


//Function to Calculate Stamp Duty with the Principle Place of Residence Rebate (PPRR)


		function sdPPRR(form)
		{
			var date      = auDate(form.date.value);
			var budgdate  = new Date("05/06/2008");
		    
			var price     = form.pv.value;
			
			if (price.indexOf(',')!=-1||price.indexOf('.')!=-1)
			{
				alert("Please enter a property value without commas or full stops.");
			}
			else
			{
				if (date < budgdate)
				{
					sdPPRROld(form);		
				}
					else 
				{
					sdPPRRNew(form);
				}
			}
			
		}
		
		function pprr(date)
		{
			var oldPPRRdate = new Date("2005/06/19");
		
			if(date<=oldPPRRdate)
				return 1500;	
			
			else
				return	2500;
		}
		
		function sdPPRROld(form)
		{
			var price     = parseFloat(form.pv.value);
			var date      = auDate(form.date.value);
			var result;
		
			if(isNaN(price) || price<0)
				alert("The 'Value of Property' entered is invalid. Please re-enter value.");
			else if(!((form.date.value).match(/\d\d\/\d\d\/\d\d\d\d/)))
				alert("The 'Date of Purchase' entered is invalid. Please re-enter in the format dd/mm/yyyy.");
			else
			{
				result = flr( dutyOld(price))- pprr(date);
		
				if(result<0)
					result = 0;
		
				form.sdp.value = result.toFixed(2);
			}
		}


		function sdPPRRNew(form)
		{
			var price     = parseFloat(form.pv.value);
			var date      = auDate(form.date.value);
			var result;
		
			if(isNaN(price) || price<0)
				alert("The 'Value of Property' entered is invalid. Please re-enter value.");
			else if(!((form.date.value).match(/\d\d\/\d\d\/\d\d\d\d/)))
				alert("The 'Date of Purchase' entered is invalid. Please re-enter in the format dd/mm/yyyy.");
			else
			{
				result = flr( dutyNew(price))- pprr(date);
		
				if(result<0)
					result = 0;
		
				form.sdp.value = result.toFixed(2);
			}
		}


		
//Function to Calculate Stamp Duty on the Motor Vehicles (MVR)

		function sdMVR(form)
		{
			var av = parseFloat(form.pv.value, 10);
			var c = 0;
			var test = 0;
			
			var price     = form.pv.value;
			
			if (price.indexOf(',')!=-1||price.indexOf('.')!=-1)
			{
				alert("Please enter a property value without commas or full stops.");
			}
			else
			{
				if (av <= 0)
				{
					form.sdp.value = "0.00";
				}
				else
				{
					c = (Math.ceil(av/100))*3;
					r = c.toFixed(2);
					strCents = "" + r;
					len = strCents.length; 
					roundCents= strCents.substring(len - 1, len);
			  
					if (roundCents < 5)
					{
						roundCents=0;
					}
					else
					{
						roundCents=5;
					}
			    
					form.sdp.value = strCents.substring(0, len - 1)+roundCents;
				}
			
				if (av < 0)
				{
					form.sdp.value = "0.00";
				}
			}
		}


//Common Functions used throughout script
		
	// FHOC Date
	
		function fhoc(date)
			{
			var aFHOCdate = new Date("2005/05/02");
			var bFHOCdate = new Date("2005/06/19");
			var cFHOCdate = new Date("2007/04/30");
		    var dFHOCdate = new Date("2008/05/05");
			var eFHOCdate = new Date("2008/05/06");
		
			if(date<=aFHOCdate)
				return 125000;
				
		
			else if(date<=bFHOCdate)
				return 200000;	
		
		
			else if(date<=cFHOCdate)
				return 225000;
		
			else if (date<=dFHOCdate)
				return 350000;
				
			else
				return 385000;
		}

//Rounding to the nearest 5cents
	
		function flr(num)
		{
			var x = num*100;
			var y = (x-(x % 5))/100;
			return y;
		}
	
//Date String
		
		function auDate(dateStr)
		{
			var date  = dateStr.substr(0,2);
			var month = dateStr.substr(3,2);
			var year  = dateStr.substr(6,4);
			return new Date(year + "/" + month + "/" + date);
		}
		
//Function reading for TRO Calculators

		function sdConvTRO(duty,execDate)
		{

			var budgdate  = new Date("2008/05/06");
			var duty1; 
		   
			if (execDate < budgdate)
			{
				duty1 = dutyOld(duty);		
			}
				else 
			{
				duty1 = dutyNew(duty);
			}

			return duty1;
			
			
		}
