function CleanseDollar(DollarAmount)
{
	//replace comma and dollar sign if found
	//g=global replace
	var DollarSignRegex =  /[$]/g;
	var CommaSignRegex = /,/g;
	
	if (DollarSignRegex.test(DollarAmount))
	{
		DollarAmount = DollarAmount.replace(DollarSignRegex,"");
	}
	
	if (CommaSignRegex.test(DollarAmount))
	{
		DollarAmount = DollarAmount.replace(CommaSignRegex,"");
	}

	return DollarAmount;
}

function CalculateSalary(ComparedPay) 
{ 
	//convert to annual salary based on selected paytype for initial view
	AnnualSalary = ConvertToAnnualSalary(CleanseDollar($F("CurrentSalary")), "PayType");
	NewAnnualSalary = ConvertToAnnualSalary(CleanseDollar($F("NewSalary")), "NewPayType");
	
	//display the salary based on selected comparison
	Salary = ConvertToMoney(ComparePerPayType(AnnualSalary, ComparedPay));
	NewSalary = ConvertToMoney(ComparePerPayType(NewAnnualSalary, ComparedPay));

	//calculate super
	SuperRate = $F("SuperRate");
	NewSuperRate = $F("NewSuperRate");
	
	AnnualSuperAmount = AnnualSalary - (AnnualSalary/(1 + (SuperRate / 100)));
	NewAnnualSuperAmount = NewAnnualSalary - (NewAnnualSalary/(1 + (NewSuperRate / 100)));
			
	SuperAmount = ConvertToMoney(ComparePerPayType(AnnualSuperAmount, ComparedPay));
	NewSuperAmount = ConvertToMoney(ComparePerPayType(NewAnnualSuperAmount, ComparedPay));
	
	//calculate taxable income based on annual salary
	AnnualTaxableIncome = AnnualSalary - AnnualSuperAmount;
	NewAnnualTaxableIncome = NewAnnualSalary - NewAnnualSuperAmount;
	
	//calculate tax
	TaxAmount = ConvertToMoney(ComparePerPayType(CalculateTax(AnnualTaxableIncome), ComparedPay));
	NewTaxAmount = ConvertToMoney(ComparePerPayType(CalculateTax(NewAnnualTaxableIncome), ComparedPay));
	
	//Taxable Income
	TaxableIncomeAmount = Salary - SuperAmount;
	NewTaxableIncomeAmount = NewSalary - NewSuperAmount;
	
	//display the calculated current salary
	$("GrossIncome").innerHTML = formatCurrency(Salary);
	$("Tax").innerHTML = formatCurrency(TaxAmount);
	$("Super").innerHTML = formatCurrency(SuperAmount);
	$("TaxableIncome").innerHTML = formatCurrency(TaxableIncomeAmount);
	var NetIncome = Salary - TaxAmount - SuperAmount;
	$("NetIncome").innerHTML = formatCurrency(NetIncome);
	
	//display the calculated new salary
	$("NewGrossIncome").innerHTML = formatCurrency(NewSalary);
	$("NewTax").innerHTML = formatCurrency(NewTaxAmount);
	$("NewSuper").innerHTML = formatCurrency(NewSuperAmount);
	$("NewTaxableIncome").innerHTML = formatCurrency(NewTaxableIncomeAmount);
	var NewNetIncome = NewSalary - NewTaxAmount - NewSuperAmount;
	$("NewNetIncome").innerHTML = formatCurrency(NewNetIncome);
	
	//display the difference
	$("DiffGrossIncome").innerHTML = formatCurrency(NewSalary - Salary);
	$("DiffTax").innerHTML = formatCurrency(NewTaxAmount - TaxAmount);
	$("DiffSuper").innerHTML = formatCurrency(NewSuperAmount - SuperAmount);
	$("DiffNetIncome").innerHTML = formatCurrency(NewNetIncome - NetIncome);
	$("DiffTaxableIncome").innerHTML = formatCurrency(NewTaxableIncomeAmount - TaxableIncomeAmount);
	
	//set the style for the difference
	Element.removeClassName("DiffGrossIncomeRow", Element.classNames("DiffGrossIncomeRow"));
	Element.removeClassName("DiffTaxRow", Element.classNames("DiffTaxRow"));
	Element.removeClassName("DiffSuperRow", Element.classNames("DiffSuperRow"));
	Element.removeClassName("DiffNetIncomeRow", Element.classNames("DiffNetIncomeRow"));
	Element.removeClassName("DiffTaxableIncomeRow", Element.classNames("DiffTaxableIncomeRow"));
	
	Element.addClassName("DiffGrossIncomeRow", GetStyle(NewSalary, Salary));
	Element.addClassName("DiffTaxRow", GetStyle(NewTaxAmount, TaxAmount));
	Element.addClassName("DiffSuperRow", GetStyle(NewSuperAmount, SuperAmount));
	Element.addClassName("DiffNetIncomeRow", GetStyle(NewNetIncome, NetIncome));	
	Element.addClassName("DiffTaxableIncomeRow", GetStyle(NewSalary - NewSuperAmount, Salary - SuperAmount));	
 }
 
 function GetStyle(NewAmount, OldAmount)
 {
	var increasedClassName = "table_right_green";
	var decreasedClassName = "table_right_red";
	var sameClassName = "table_right_black";
	
	//convert to dollar then only set new amount with 2 decimal point
	var newAmt = new String(ConvertToMoney(NewAmount));
	newAmt = parseFloat(newAmt.substr(0, newAmt.lastIndexOf(".") + 3));
	
	//convert to dollar then only set old amount with 2 decimal point
	var oldAmt = new String(ConvertToMoney(OldAmount));
	oldAmt = parseFloat(oldAmt.substr(0, oldAmt.lastIndexOf(".") + 3));

	if (newAmt > oldAmt)
	{
		className = increasedClassName;
	}
	else if (newAmt == oldAmt)
	{
		className = sameClassName;
	}
	else if (newAmt < oldAmt)
	{
		className = decreasedClassName;
	}
	return className;
 }
 
 function ComparePerPayType(AnnualSalary, PayType)
 {
	if (PayType == "Year")
	{
		DisplayCompareText("(per annum)");
		return AnnualSalary;
	}	
	if (PayType == "Month")
	{
		DisplayCompareText("(per month)");
		return AnnualSalary / 12;	
	}
	if (PayType == "Fortnight")
	{
		DisplayCompareText("(per fortnight)");
		return AnnualSalary / 26;	
	}
	if (PayType == "Week")
	{
		DisplayCompareText("(per week)");
		return AnnualSalary / 52;	
	} 	
}

function DisplayCompareText(perCompareText)
{
	$("ComparePayText").innerHTML = perCompareText;
}

function ResetLink()
{
    Element.hide("perYear");
    Element.hide("perMonth");
    Element.hide("perFortnight");
    Element.hide("perWeek");
 	
	Element.hide("YearText");
    Element.hide("MonthText");
    Element.hide("FortnightText");
    Element.hide("WeekText");
}

function FreqTracking(PayType)
{
// SiteCatalyst tracking for Frequency buttons

 	if (PayType == "Year") // If year link selected set stats for year
	{
		s_objectID="salaryyear";	
		s_linkName="salaryyear";		
	}	
	if (PayType == "Month") // If month link selected set stats for month
	{
		s_objectID="salarymonth";	
		s_linkName="salarymonth";
	}
	if (PayType == "Fortnight") // If fortnight link selected set stats for fortnight
	{
		s_objectID="salaryfortnight";	
		s_linkName="salaryfortnight";
	}
	if (PayType == "Week") // If week link selected set stats for week
	{
		s_objectID="salaryweek";	
		s_linkName="salaryweek";
	}

	// Set general info for stats
	s_linkType="o";
	s_lnk=s_co(PayType);
	s_gs("f2nmycareer");
 
 
}


function ConvertToAnnualSalary(Salary, PayTypeName)
{
	PayType = $F(PayTypeName);
	if (PayType == "Year")
	{
		return Salary;
	}	
	if (PayType == "Month")
	{
		return Salary * 12;	
	}
	if (PayType == "Fortnight")
	{
		return Salary * 26;	
	}
	if (PayType == "Week")
	{
		return Salary * 52;	
	}
	if (PayType == "Hour")
	{
		var Hours = 0;
		if (PayTypeName == "NewPayType")
		{
			Hours = $F("NewHoursPerWeek"); 
		}
		else
		{
			Hours = $F("HoursPerWeek"); 
		}
		return Salary * Hours * 52;	
	}
}

function CalculateTax(Salary)
{
	//Tax Bracket(MinSalary, MaxSalary, TaxAmount, TaxPercentage)
	//Based on tax rates 2008-2009
	//http://ato.gov.au/individuals/content.asp?doc=/content/12333.htm&mnu=5053&mfp=001
	var TaxBracket = new Array(
		new Array(0, 6000, 0, 0),
		new Array(6000, 34000, 0, 0.15),
		new Array(34000, 80000, 4200, 0.3),
		new Array(80000, 180000, 18000, 0.4),
		new Array(180000, 999999999999999999999, 58000, 0.45)
		);
	
 	var TaxAmount = 0;
	
	TaxBracket.each( 
		function(taxItem, index)
		{ 
			minIncome = taxItem[0];
			maxIncome = taxItem[1];
			taxOnIncome = taxItem[2];
			taxPercentage = taxItem[3]; 
			
			//get the tax bracket range to calculate the tax amount
			if (Salary > minIncome && Salary <= maxIncome)
			{
				TaxAmount = taxOnIncome + taxPercentage * (Salary - minIncome);
			}
		}
	)

	return TaxAmount;	
}



function DisplayHoursPerWeek(SelectName, DivName, IsNew)
{
	if ($F(SelectName) == "Hour" )
	{
		Element.show(DivName);
		
		//display no superannuation if hour is selected
		if (IsNew)
		{
			$("NewSuperRate").value = 0;
			UpdateSuper("NewEnteredSuperText","NewSuperRate");
		}
		else
		{
			$("SuperRate").value = 0;
			UpdateSuper("EnteredSuperText","SuperRate");
		}
	}
	else
	{
		Element.hide(DivName);
	}
}

function UpdateSuper(EnteredSuperTextName, SuperRateName)
{
	if($F(SuperRateName) > 0)
	{
		$(EnteredSuperTextName).innerHTML = "Inclusive of " + $F(SuperRateName) + "% superannuation ";
	}
	else
	{
		$(EnteredSuperTextName).innerHTML = "No superannuation";
	}
}

function ConvertToMoney(num)
{
	num = num.toString().replace(/\$|\,/g,'');
	if (isNaN(num)) {
		num = "0";
	}
	
	sign = (num == (num = Math.abs(num)));
	num = Math.floor(num * 100 + 0.50000000001);
	cents = num % 100;
	num = Math.floor(num / 100).toString();
	
	if (cents < 10) {
		cents = "0" + cents;
	}
	
	for (var i = 0; i < Math.floor((num.length - (1 + i)) / 3); i++) {
		num = num.substring(0, num.length - (4 * i + 3)) + num.substring(num.length - (4 * i + 3));
	}
	
	return (((sign) ? '' : '') + num + '.' + cents);
}

function formatCurrency(num)
{
	num = num.toString().replace(/\$|\,/g,'');
	if (isNaN(num)) {
		num = "0";
	}
	
	sign = (num == (num = Math.abs(num)));
	num = Math.floor(num * 100 + 0.50000000001);
	cents = num % 100;
	num = Math.floor(num / 100).toString();
	
	if (cents < 10) {
		cents = "0" + cents;
	}
	
	for (var i = 0; i < Math.floor((num.length - (1 + i)) / 3); i++) {
		num = num.substring(0, num.length - (4 * i + 3)) + ',' + num.substring(num.length - (4 * i + 3));
	}
	
	return (((sign) ? '' : '') + '$' + num + '.' + cents);
}

function DisplayCompareLink(PayType)
{
	ResetLink();
	$("SelectedPayType").innerHTML = PayType;
	FreqTracking(PayType);
	CalculateSalary(PayType); 
}

function SetInitialView()
{
	//by default the form hide the calculator, if browser javascript is enabled, show the calculator
	Element.show("calc_layout");
	Element.show("legaltext");
	
	//hide the result
	Element.hide("calc_results");
	
	//reset the compare links
	ResetLink();
	
	//display the default links
	Element.show("YearText");
	Element.show("perMonth");
	Element.show("perFortnight");
	Element.show("perWeek");
	
	//set the default paytype value
	$("SelectedPayType").innerHTML = "Year";
	CalculateSalary($("SelectedPayType").innerHTML);
	
	//reset super
	UpdateSuper("EnteredSuperText", "SuperRate");
	UpdateSuper("NewEnteredSuperText", "NewSuperRate");
	Element.hide("SuperannuationBox");
	
	//fixed height for non IE browser
	if (getBrowserInfo() != "Internet Explorer")
	{
			$("current_salary").removeClassName("current_salary");
			$("current_salary").addClassName("current_salary_nonIE");
	}
}



function ShowResult(valid, btn)
{ 
	var result = valid.validate();
	if (result)
	{
		Element.show("calc_results");
		CalculateSalary($("SelectedPayType").innerHTML); 
	}
	
	// SiteCatalyst tracking
	s_objectID="salarycalculate";
	s_linkType="o";
	s_linkName="salarycalculate";
	s_lnk=s_co(btn);
	s_gs("f2nmycareer");
}



Event.observe(window, "load", function() {
	var valid = new Validation(document.forms[0], {immediate : true, onSubmit : false});
 
	//set initial view
	SetInitialView();
	
	Event.observe("PayType", "change", function() { DisplayHoursPerWeek("PayType", "DivHour", false); });
	Event.observe("NewPayType", "change", function() { DisplayHoursPerWeek("NewPayType", "NewDivHour", true); });
	
	Event.observe("btnCalculate", "click", function() { ShowResult(valid, $("btnCalculate")); });

	Event.observe("SuperRate", "change", function() { UpdateSuper("EnteredSuperText", "SuperRate"); });
	Event.observe("NewSuperRate", "change", function() { UpdateSuper("NewEnteredSuperText", "NewSuperRate"); });
	
	Event.observe("EditNew", "click", function() { 
		// SiteCatalyst tracking on edit new salary superannuation link
		s_objectID="salaryeditnew";
		s_linkType="o";
		s_linkName="salaryeditnew";
		s_lnk=s_co("EditNew");
		s_gs("f2nmycareer"); });
	
	Event.observe("Edit", "click", function() { 
		// SiteCatalyst tracking on edit superannuation link
		s_objectID="salaryedit";
		s_linkType="o";
		s_linkName="salaryedit";
		s_lnk=s_co("Edit");
		s_gs("f2nmycareer");});
	
	Event.observe("perYear", "click", function() { 
		DisplayCompareLink("Year");
		Element.show("YearText");
		Element.show("perMonth");
		Element.show("perFortnight");
		Element.show("perWeek");
		});
		
	Event.observe("perMonth", "click", function() { 
		DisplayCompareLink("Month");
		Element.show("perYear");
		Element.show("MonthText");
		Element.show("perFortnight");
		Element.show("perWeek");
		});
		
	Event.observe("perFortnight", "click", function() { 
		DisplayCompareLink("Fortnight");
		Element.show("perYear");
		Element.show("perMonth");
		Element.show("FortnightText");
		Element.show("perWeek");
		});
		
	Event.observe("perWeek", "click", function() { 
		DisplayCompareLink("Week");
		Element.show("perYear");
		Element.show("perMonth");
		Element.show("perFortnight");
		Element.show("WeekText");
		});
	
	//reset the form
	Event.observe("startAgain", "click", function() { 
		valid.reset();
		SetInitialView();
		$(document.forms[0]).reset(); 
		
		Element.hide("DivHour");
		Element.hide("NewDivHour");
		Element.hide("calc_results");
		Element.hide("SuperannuationBox");
	});
	
	//if coming from flash banner
	//then process the query string, assign value to controls and validate
	//if querystring values are valid, show the result otherwise show error message
		
	var url = window.location.search;
	var querystring = url.parseQuery();

	if (querystring.curr_amt != null
		&& querystring.new_amt != null
		&& querystring.curr_paytype != null
		&& querystring.new_paytype != null)
	{
		$("CurrentSalary").value = querystring.curr_amt;
		$("NewSalary").value = querystring.new_amt;
		$("PayType").value = querystring.curr_paytype;
		$("NewPayType").value = querystring.new_paytype;
		//scroll the window to the salcal anchor
		Element.scrollTo("salcal");
		ShowResult(valid, $("btnCalculate"));
		
		//scroll the window to the salcal anchor
		Element.scrollTo("salcal");
		
	}
});
