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 = FormatDecimalCurrency(ComparePerPayType(AnnualSalary, ComparedPay));
	NewSalary = FormatDecimalCurrency(ComparePerPayType(NewAnnualSalary, ComparedPay));

	//calculate super
    SuperRate = $F("CurrSuperText");
	NewSuperRate = $F("NewSuperText");
	
	AnnualSuperAmount = AnnualSalary - (AnnualSalary/(1 + (SuperRate / 100)));
	NewAnnualSuperAmount = NewAnnualSalary - (NewAnnualSalary/(1 + (NewSuperRate / 100)));
			
	SuperAmount = FormatDecimalCurrency(ComparePerPayType(AnnualSuperAmount, ComparedPay));
	NewSuperAmount = FormatDecimalCurrency(ComparePerPayType(NewAnnualSuperAmount, ComparedPay));
	
	//calculate taxable income based on annual salary
	AnnualTaxableIncome = AnnualSalary - AnnualSuperAmount;
	NewAnnualTaxableIncome = NewAnnualSalary - NewAnnualSuperAmount;
	
	//calculate tax
	TaxAmount = FormatDecimalCurrency(ComparePerPayType(CalculateTax(AnnualTaxableIncome), ComparedPay));
	NewTaxAmount = FormatDecimalCurrency(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(FormatDecimalCurrency(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(FormatDecimalCurrency(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;
	} else if (PayType == "Month") {
		DisplayCompareText("(per month)");
		return AnnualSalary / 12;	
	} else if (PayType == "Fortnight") {
		DisplayCompareText("(per fortnight)");
		return AnnualSalary / 26;	
	} else if (PayType == "Week") {
		DisplayCompareText("(per week)");
		return AnnualSalary / 52;	
	} 	
}

function DisplayCompareText(perCompareText)
{
	$("ComparePayText").innerHTML = perCompareText;
}

// SiteCatalyst tracking for Frequency buttons
function FreqTracking(PayType)
{
 	if (PayType == "Year") { // If year link selected set stats for year
		s_objectID="salaryyear";	
		s_linkName="salaryyear";		
	} else if (PayType == "Month") { // If month link selected set stats for month
		s_objectID="salarymonth";	
		s_linkName="salarymonth";
	} else if (PayType == "Fortnight") { // If fortnight link selected set stats for fortnight
		s_objectID="salaryfortnight";	
		s_linkName="salaryfortnight";
	} else 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;
	} else if (PayType == "Month") {
		return Salary * 12;	
	} else if (PayType == "Fortnight") {
		return Salary * 26;	
	} else if (PayType == "Week") {
		return Salary * 52;	
	} else 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);
    } else {
		Element.hide(DivName);
	}
}

function DisplayCompareLink(PayType)
{
	$("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");
		
	//set the default paytype value
	$("SelectedPayType").innerHTML = "Year";
	CalculateSalary($("SelectedPayType").innerHTML);
		
	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");
}

function ManageSuperBox(checkBoxType)
{
    var superPercent = "9";
    
    if (checkBoxType == "current") {
        if ($("IncCurrSuperCB").checked) {
            $("CurrSuperText").value = superPercent;
            $("CurrSuperText").disabled = false;
        } else {
            $("CurrSuperText").value = "0";
            $("CurrSuperText").disabled = true;
        }
    } else if (checkBoxType == "new") {
        if ($("IncNewSuperCB").checked) {
            $("NewSuperText").value = superPercent;
            $("NewSuperText").disabled = false;
        } else {
            $("NewSuperText").value = "0";
            $("NewSuperText").disabled = true;
        }
    } else if (checkBoxType == "all") {
        // this is for reset all checkboxes
        $("CurrSuperText").value = superPercent;
        $("NewSuperText").value = superPercent;
        $("CurrSuperText").disabled = false;
        $("NewSuperText").disabled = false;
    }
}

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("IncCurrSuperCB", "click", function() { ManageSuperBox("current"); });
	Event.observe("IncNewSuperCB", "click", function() { ManageSuperBox("new"); });

    Event.observe("rdoYear", "click", function() {
        DisplayCompareLink("Year");
    });
    
    Event.observe("rdoMonth", "click", function() {
        DisplayCompareLink("Month");
    });
    
    Event.observe("rdoFortNight", "click", function() {
        DisplayCompareLink("Fortnight");
    });
    
    Event.observe("rdoWeek", "click", function() {
        DisplayCompareLink("Week");
    });

	//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");
		ManageSuperBox("all");
	});
	
	//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");
	}
});
