/* Definitions of default values */
var states_AU = new Array();
states_AU["VIC"] = new Array();
	states_AU["VIC"]["duty"]= 0;
	states_AU["VIC"]["loanduty"] = 0;
	states_AU["VIC"]["mortgage"] = 45;
	states_AU["VIC"]["transfer"] = 1320;
	states_AU["VIC"]["total"] = 0;
	states_AU["VIC"]["notes"] = "First Home Bonus\n- First home buyers are eligible for a $5,000 bonus if consideration of the property does not exceed $500,000 and if transaction takes place between 1st May 2004 and 30th June 2005.\n\nFirst Home Buyers with Families\n- Must have at least 1 dependant child (under 18 and under control of applicant).\n- Full stamp duty exemption for properties valued up to $150,000.\n- Stamp duty concessions on a reducing scale for properties between $150,000 to $200,000.\n- Exemption from mortgage duty where the value of the mortgage is up to the value of property being purchased.\n- All applicants have not previously owned a home.\n\nHome Buyers with Concession Cards\n- Full stamp duty exemption for properties valued up to $250,000\n- Stamp duty concessions on a reducing scale for properties between $250,000 to $350,000\n- Have a Pensioner Concession Card (Department of Social Security or Department of Veterans' Affairs), Veterans' Affairs Gold Card, Health Benefits Card, or Health Care Card.";
	states_AU["VIC"]["dutycalc"] = new Array();
		states_AU["VIC"]["dutycalc"]["lowend"] 		= new Array(0, 20000, 115000, 870000);
		states_AU["VIC"]["dutycalc"]["highend"] 	= new Array(20000, 115000, 870000, -1);
		states_AU["VIC"]["dutycalc"]["multiplier"] 	= new Array(1.4,2.4,6,5.5);
		states_AU["VIC"]["dutycalc"]["addon"] 		= new Array(0,280,2560,0);
		
states_AU["NSW"] = new Array();
	states_AU["NSW"]["duty"]= 0;
	states_AU["NSW"]["loanduty"] = 0;
	states_AU["NSW"]["mortgage"] = 75;
	states_AU["NSW"]["transfer"] = 75;
	states_AU["NSW"]["total"] = 0;
	states_AU["NSW"]["notes"] = "First Home Plus Scheme\n- Full stamp and mortgage duty exemption for homes valued up to $500,000 in NSW\n- Stamp and mortgage duty concessions on a reducing scale for homes between $500,000 and $600,000 in NSW.\n- First home buyers purchasing vacant block of residential land will pay no stamp duty on land valued up to $300,000.\n- Discounts are available on stamp duty between $300,000 and $450,000.";
	states_AU["NSW"]["dutycalc"] = new Array();
		states_AU["NSW"]["dutycalc"]["lowend"] 		= new Array(0, 14000, 30000, 80000, 300000, 1000000);
		states_AU["NSW"]["dutycalc"]["highend"] 	= new Array(14000, 30000, 80000, 300000, 1000000, -1);
		states_AU["NSW"]["dutycalc"]["multiplier"] 	= new Array(1.25, 1.5,1.75, 3.5, 4.5, 5.5);
		states_AU["NSW"]["dutycalc"]["addon"] 		= new Array(0, 175, 415, 1290, 8990, 40490);		

states_AU["ACT"] = new Array();
	states_AU["ACT"]["duty"]= 0;
	states_AU["ACT"]["loanduty"] = 0;
	states_AU["ACT"]["mortgage"] = 82;
	states_AU["ACT"]["transfer"] = 160;
	states_AU["ACT"]["total"] = 0;
	states_AU["ACT"]["notes"] = "Home Buyer Concession\n- Eligibility is determined by income and the number of dependent children.\n- Minimum duty ($20) payable on properties valued less than $273,000. Concessional duty payable for properties valued between $273,000 and $375,000.\n- Minimum duty ($20) payable on vacant block valued less than $107,000. Concessional duty payable for vacant block valued between $107,000 and $158,000.";
	states_AU["ACT"]["dutycalc"] = new Array();
		states_AU["ACT"]["dutycalc"]["lowend"] 		= new Array(0, 100000, 200000, 300000, 500000, 1000000);
		states_AU["ACT"]["dutycalc"]["highend"] 	= new Array(100000, 200000, 300000, 500000, 1000000, -1);
		states_AU["ACT"]["dutycalc"]["multiplier"] 	= new Array(2, 3.5, 4, 5.5, 5.75, 6.75);
		states_AU["ACT"]["dutycalc"]["addon"] 		= new Array(0, 2000, 5500, 9500, 20500, 49250);

states_AU["QLD"] = new Array();
	states_AU["QLD"]["duty"]= 0;
	states_AU["QLD"]["loanduty"] = 0;
	states_AU["QLD"]["mortgage"] = 105.6;
	states_AU["QLD"]["transfer"] = 105.6;
	states_AU["QLD"]["total"] = 0;
	states_AU["QLD"]["notes"] = "First Home Buyers' Rebate\n- Full stamp and mortgage duty exemption for properties valued up to $250,000.\n- Stamp duty rebate applies on a reducing scale for properties valued between $250,000 and $500,000.";
	states_AU["QLD"]["dutycalc_oo"] = new Array();
		states_AU["QLD"]["dutycalc_oo"]["lowend"] 		= new Array(0, 250000, 300000, 500000);
		states_AU["QLD"]["dutycalc_oo"]["highend"] 		= new Array(250000, 300000, 500000, -1);
		states_AU["QLD"]["dutycalc_oo"]["multiplier"] 	= new Array(0, 1, 3.5, 3.75);
		states_AU["QLD"]["dutycalc_oo"]["addon"] 		= new Array(2500, 2500, 3000, 10000);
	states_AU["QLD"]["dutycalc_in"] = new Array();
		states_AU["QLD"]["dutycalc_in"]["lowend"] 		= new Array(0, 20000, 50000, 100000, 250000, 500000);
		states_AU["QLD"]["dutycalc_in"]["highend"] 		= new Array(20000, 50000, 100000, 250000, 500000, -1);
		states_AU["QLD"]["dutycalc_in"]["multiplier"] 	= new Array(1.5, 2.25, 2.75, 3.25, 3.5, 3.75);
		states_AU["QLD"]["dutycalc_in"]["addon"] 		= new Array(0, 300, 975, 2350, 7225, 15975);
		
states_AU["SAN"] = new Array();
	states_AU["SAN"]["duty"]= 0;
	states_AU["SAN"]["loanduty"] = 0;
	states_AU["SAN"]["mortgage"] = 98;
	states_AU["SAN"]["transfer"] = 98;
	states_AU["SAN"]["total"] = 0;
	states_AU["SAN"]["notes"] = "First Home Buyers' Concession\n- Full stamp duty exemption for properties valued up to $80,000.\n- Stamp duty concessions on a reducing scale for properties between $80,000 and $250,000.\n- Property must be first home and intended as principal residence.\n\nMortgage Duty Exemption for first home buyers\n- An exemption from stamp duty on mortgages will be provided to an eligible first home owner entered into on or after 27th May 2004.\n- No limit on the value of first home loans eligible for the exemption from stamp duty on mortgages.";
	states_AU["SAN"]["dutycalc"] = new Array();
		states_AU["SAN"]["dutycalc"]["lowend"] 		= new Array(0, 12000, 30000, 50000, 100000, 200000, 250000, 300000, 500000);
		states_AU["SAN"]["dutycalc"]["highend"] 	= new Array(12000, 30000, 50000, 100000, 200000, 250000, 300000, 500000, -1);
		states_AU["SAN"]["dutycalc"]["multiplier"] 	= new Array(1, 2, 3, 3.5, 4, 4.25, 4.75, 5, 5.5);
		states_AU["SAN"]["dutycalc"]["addon"] 		= new Array(0, 120, 480, 1080, 2830, 6830, 8955, 11330, 21330);										

states_AU["TAS"] = new Array();
	states_AU["TAS"]["duty"]= 0;
	states_AU["TAS"]["loanduty"] = 0;
	states_AU["TAS"]["mortgage"] = 85.50;
	states_AU["TAS"]["transfer"] = 131;
	states_AU["TAS"]["total"] = 0;
	states_AU["TAS"]["notes"] = "First Home Owner's Rebate\n- Homes purchased between 20th May 2004 and 30th June 2005 will receive up to $4,000 stamp duty relief for homes purchased for less than $350,000.\n- Concessional rate of duty does not apply to the purchase of land unless it is part of a house and land package.\n- Property must be first home and intended as principal residence.";
	states_AU["TAS"]["dutycalc"] = new Array();
		states_AU["TAS"]["dutycalc"]["lowend"] 		= new Array(0, 1300, 10000, 30000, 75000, 150000, 225000);
		states_AU["TAS"]["dutycalc"]["highend"] 	= new Array(1300, 10000, 30000, 75000, 150000, 225000, -1);
		states_AU["TAS"]["dutycalc"]["multiplier"] 	= new Array(0, 1.5, 2, 2.5, 3.0, 3.5, 4);
		states_AU["TAS"]["dutycalc"]["addon"] 		= new Array(20, 0, 150, 550, 1675, 3925, 6550);
		
states_AU["WAN"] = new Array();
	states_AU["WAN"]["duty"]= 0;
	states_AU["WAN"]["loanduty"] = 20;
	states_AU["WAN"]["mortgage"] = 79;
	states_AU["WAN"]["transfer"] = 79;
	states_AU["WAN"]["total"] = 0;
	states_AU["WAN"]["notes"] = "Concessional Rate\n-Applies to purchase of principal place of residence or business undertaking with a dutiable value not exceeding $200,000.\nThe concessional rate is $1.50 per $100 (or part thereof) up to $100,000 and $4.70 per $100 (or part thereof) for that amount between $100,001 and $200,000.\n\nFirst Home Owner's Rebate\n- Property must be first home and intended as principal residence.\n- First home buyers will get a full exemption from conveyance duty on homes up to $250,000\n- Homes valued between $250,000 and $350,000 will receive a partial exemption.\n- First home purchasers buying vacant land and building a home will receive full rebate on land values to $150,000 and a partial rebate on land values to $200,000.";
	states_AU["WAN"]["dutycalc_oo"] = new Array();
		states_AU["WAN"]["dutycalc_oo"]["lowend"] 		= new Array(0, 100000);
		states_AU["WAN"]["dutycalc_oo"]["highend"] 		= new Array(100000, -1);
		states_AU["WAN"]["dutycalc_oo"]["multiplier"] 	= new Array(1.5, 4.7);
		states_AU["WAN"]["dutycalc_oo"]["addon"] 		= new Array(0, 1500);
	states_AU["WAN"]["dutycalc_in"] = new Array();
		states_AU["WAN"]["dutycalc_in"]["lowend"] 		= new Array(0, 80000, 100000, 250000, 500000);
		states_AU["WAN"]["dutycalc_in"]["highend"] 		= new Array(80000, 100000, 250000, 500000, -1);
		states_AU["WAN"]["dutycalc_in"]["multiplier"] 	= new Array(2, 3, 4, 5, 5.4);
		states_AU["WAN"]["dutycalc_in"]["addon"] 		= new Array(0, 1600, 2200, 8200, 20700);				
		
		
states_AU["NT"] = new Array();
	states_AU["NT"]["duty"]= 0;
	states_AU["NT"]["loanduty"] = 0;
	states_AU["NT"]["mortgage"] = 90;
	states_AU["NT"]["transfer"] = 90;
	states_AU["NT"]["total"] = 0;
	states_AU["NT"]["notes"] = "First Home Owner's Concession\n- If property is your first home anywhere in Australia, then you may be eligible for a concession of up to $3,640.60 on the total stamp duty payable.\n- Property may be an existing home or land to build a new home.\n\nPrincipal Place of Residence Rebate\n- If property is your principal place of residence you may be eligible for a stamp duty rebate of up to $1,500.";				

/*End Default Value Defs*/	


function select_item(name, value) {
	this.name = name;
	this.value = value;
}

function get_selection(select_object) {
	contents = new select_item();
	for(var i=0;i<select_object.options.length;i++) {
		if(select_object.options[i].selected == true) {
			contents.name = select_object.options[i].text;
			contents.value = select_object.options[i].value;
		}
	}
	return contents;
}

function StripChars(strIn) {
	var newstr = "";
	var Chars = "0123456789.";
    for (var i = 0; i < strIn.length; i++) {
       if (Chars.indexOf(strIn.charAt(i)) == -1) {}
	   else {
	   	newstr = newstr + strIn.charAt(i);
	   }
    }
	return newstr;
}	

function GetDutyData()
{
	var l_State = GetDutyData.arguments[0];
	var l_Amount = GetDutyData.arguments[1];
	var l_LoanAmount = GetDutyData.arguments[2];
	var l_Type = GetDutyData.arguments[3];

	var duties = states_AU[l_State];
	
	if(l_State=='VIC')
	{
		var amount_temp = l_Amount;
		
		amount_temp = AmountRound(amount_temp, 1000);

		if ((amount_temp > 0) && (amount_temp <= 500000)) {
			duties["transfer"] = (amount_temp / 1000) * 2.46 + 90;
		}
		
		duties["duty"] = CalculateDutyValue(duties["dutycalc"], l_Amount);
		
		l_LoanAmount = AmountRound(l_LoanAmount, 200);
		
	}
		
	if(l_State=='NSW')
	{
		duties["duty"] = CalculateDutyValue(duties["dutycalc"], l_Amount);

		l_LoanAmount = AmountRound(l_LoanAmount, 1000);
		
		if (l_LoanAmount <= 16000) {
			duties["loanduty"] = 5;
		}
		else {
			duties["loanduty"] = eval((((l_LoanAmount - 16000)/1000)*4) + 5);
		}

	}
	
	if(l_State=='ACT')
	{
		duties["duty"] = CalculateDutyValue(duties["dutycalc"], l_Amount, "ceil");
		
		if(l_Amount <= duties["dutycalc"]["highend"][0]) duties["duty"] = Math.max(duties["duty"], 20);

	}
	
	if(l_State=='QLD')
	{
		var amount_temp = l_Amount;
		
		amount_temp = AmountRound(amount_temp, 10000);
		
		if (amount_temp > 180000) duties["transfer"] += Math.ceil(eval((amount_temp-180000)/10000))*22.6;
		
		if(l_Type=='OO')
		{
			if(l_LoanAmount > 70000) duties["loanduty"] = Math.ceil(eval((l_LoanAmount - 70000)/100)) * 0.40;
			
			duties["duty"] = CalculateDutyValue(duties["dutycalc_oo"], l_Amount, "ceil");
		}
		else
		{	
			duties["notes"] = "";
			
			duties["loanduty"] = Math.ceil(eval(l_LoanAmount/100)) * 0.40;
			
			duties["duty"] = CalculateDutyValue(duties["dutycalc_in"], l_Amount, "ceil");
		}
	}
	
	if (l_State=="SAN")
	{
		l_Amount = Math.ceil(l_Amount/100.0)*100;
		
	    if (l_Amount > 5000 && l_Amount <= 20000)
	        duties["transfer"] = 109;
	    if (l_Amount > 20000 && l_Amount <= 40000)
	        duties["transfer"] = 121;
	    if (l_Amount > 40000)
	    { 
			duties["transfer"] = Math.ceil(eval((l_Amount - 50000)/10000)*54) + 174;
		}
		
		duties["duty"] = CalculateDutyValue(duties["dutycalc"], l_Amount);
		
		l_LoanAmount = Math.ceil(l_LoanAmount/100)*100;
		
		if ((l_LoanAmount > 400) && (l_LoanAmount <= 6000)) {
			duties["loanduty"] = 10;
		}
		else {
			if (l_Type == "OO") duties["loanduty"] = eval((((l_LoanAmount - 6000)/100)*0.35) + 10);
			else duties["loanduty"] = eval((((l_LoanAmount - 6000)/100)*0.45) + 10);
		}		
	}
	
	if (l_State == "TAS") 
	{

		duties["duty"] = CalculateDutyValue(duties["dutycalc"], l_Amount);
		
		if (l_LoanAmount <= 8000) {
			duties["loanduty"] = 20;
		}
		else if ((l_LoanAmount > 8000) && (l_LoanAmount <= 10000)) {
			duties["loanduty"] = eval((((l_LoanAmount - 8000)/100)*0.25) + 20);
		}
		else {
			duties["loanduty"] = eval((((l_LoanAmount - 10000)/100)*0.35) + 25);
		}
	}
	
	if (l_State == "WAN") 
	{

		if ((l_Amount > 85000) && (l_Amount <= 120000)) {
			duties["transfer"] = 89;
		}
		else if ((l_Amount > 120000) && (l_Amount <= 200000)) {
			duties["transfer"] = 109;
		}
		else if ((l_Amount > 200000) && (l_Amount <= 3000000)) {
			duties["transfer"] = Math.ceil((l_Amount-200000) / 100000) * 20 + 109;
		}
		else if (l_Amount > 3000000) {
			duties["transfer"] = Math.ceil((l_Amount-200000) / 100000) * 20 + 109 + 669;
		}

		if (l_Type == 'OO' && l_Amount <= 200000) {
			duties["duty"] = CalculateDutyValue(duties["dutycalc_oo"], l_Amount);
		}
		else
		{
			duties["duty"] = CalculateDutyValue(duties["dutycalc_in"], l_Amount);	
		}
		
		if (l_Type =="OO") {
		    if (l_LoanAmount > 8000) duties["loanduty"] += Math.ceil(eval((l_LoanAmount-8000)/100)) * 0.25;
		}
		else {
			if (l_LoanAmount > 5000) duties["loanduty"] += Math.ceil(eval((l_LoanAmount-5000)/100)) * 0.40;
		}
	}
	
	if (l_State == "NT") 
	{
		if (l_Amount <=500000) {
			newamount = eval(l_Amount / 1000);
			duties["duty"] = eval((0.065 * Math.pow(newamount,2)) + (21 * newamount));
		}
	
		else {
			duties["duty"] = eval(0.054 * l_Amount);
		}
		if (l_Type =="OO") {
			duties["duty"] -= 1500;
			if (duties["duty"] < 0) duties["duty"] = 0;
		}		
	}					

	duties["total"] = duties["duty"] + duties["loanduty"] + duties["transfer"] + duties["mortgage"];
	
	return duties;	
}

function stampduty(formname)
{
	var amount = StripChars(formname.amount.value);
	var loanamount = StripChars(formname.loanamount.value);
	var state = formname.state.value;
	
	var type = "OO";
	for (i=0; i< formname.elements.length; i++) {
		if (formname.elements[i].name == 'Type') {
			for (s=0;s < 2; s++) {
				if (formname.Type[s].checked == true) {
					type = formname.Type[s].value;
				}
			}
		}
	}
	
	t_amount = amount;

	amount = AmountRound(amount, 100);
	loanamount = AmountRound(loanamount, 100);
	
	var results = GetDutyData(state, amount, loanamount, type);
	
	formname.duty.value = rounding(results["duty"]);
	formname.loanduty.value = rounding(results["loanduty"]);
	formname.mortgage.value = rounding(results["mortgage"]);
	formname.transfer.value = rounding(results["transfer"]);
	formname.total.value = rounding(results["total"]);
	formname.notes.value = results["notes"];
}

function AmountRound()
{
	var amount = AmountRound.arguments[0];
	var nearest = AmountRound.arguments[1];
	
	if ((amount % nearest) != 0 ) {
			var mod = eval(nearest-(amount % nearest));
			amount = -(-amount - mod);
	}
	return amount;		
}

function CalculateDutyValue()
{
	var item = CalculateDutyValue.arguments[0];
	var amt = CalculateDutyValue.arguments[1];
	var ctype = CalculateDutyValue.arguments[2];
	
	for(i=0;i< item["lowend"].length;i++)
	{
		if (amt > item["lowend"][i] && amt <= (item["highend"][i]==-1?amt+1:item["highend"][i]))
		{
			if (ctype=="ceil")
			{
				var x = Math.ceil(eval(((amt - item["lowend"][i])/100)))*item["multiplier"][i] + item["addon"][i];		
			}
			else
			{
				var x = eval(((amt - item["lowend"][i])/100)*item["multiplier"][i] + item["addon"][i]);		
			}
			
		}
	}
	
	return x;	
}

function rounding(n) {
	pennies = n * 100;
	pennies = Math.round(pennies);
	strPennies = "" + pennies;
	len = strPennies.length;
	return strPennies.substring(0, len - 2) + "." + strPennies.substring((len - 2), len);
}
	