﻿function EICcalculator(earnedIncome, nChildren, isMarried) {
    if(nChildren == 3) {
		if(earnedIncome > maxIncomeEIC[0])
			return 0;
		else if(isMarried == false && earnedIncome > maxIncomeEIC[1])
			return 0;
		else if(earnedIncome >= maxAmountEIC[nChildren+4] && earnedIncome < 16700)
			return maxAmountEIC[nChildren];
		else if(isMarried == true && earnedIncome >= maxAmountEIC[nChildren+4] && earnedIncome <= 21800)
			return maxAmountEIC[nChildren];
		else if(earnedIncome < maxAmountEIC[nChildren+4]) {
		    var n = parseInt(earnedIncome / 200);
		    return Math.ceil(22.5*n) + 11;
	    } else {
	        var n;
	        if(isMarried) {
	            if(earnedIncome >= 49050) return 3;
	            n = parseInt((maxIncomeEIC[0]-earnedIncome)/50);
	            return Math.ceil(10.5301*n);
	        } else {
	            n = parseInt((maxIncomeEIC[1]-earnedIncome)/50);
	            if(n==1) return 15;
	            return Math.ceil(10.3333*n) + Math.floor(n/8) + Math.floor(n/17) + Math.floor(n/89) + 5;
	        }
	    }
    }
	if(nChildren == 2) {
		if(earnedIncome > maxIncomeEIC[2])
			return 0;
		else if(isMarried == false && earnedIncome > maxIncomeEIC[3])
			return 0;
		else if(earnedIncome >= maxAmountEIC[nChildren+4] && earnedIncome < 16700)
			return maxAmountEIC[nChildren];
		else if(isMarried == true && earnedIncome >= maxAmountEIC[nChildren+4] && earnedIncome <= 21500)
			return maxAmountEIC[nChildren];
		else if(earnedIncome < maxAmountEIC[nChildren+4])
			return parseInt(earnedIncome / 50) * 20 + 10;
		else {
	        var n;
	        if(isMarried) {
	            if(earnedIncome >= 46000) return 5;
	            n = parseInt((maxIncomeEIC[2]-earnedIncome)/50);
	            return Math.ceil(10.5309*n) + Math.floor(n/485) + 3;
	        } else {
	            if(earnedIncome >= 40950) return 1;
	            if(earnedIncome >= 40900) return 8;
	            n = parseInt((maxIncomeEIC[3]-earnedIncome)/50);
	            return Math.ceil(10.3333*n) + Math.floor(n/8) + Math.floor(n/19) + Math.floor(n/71);
	        }
		}
	} else if(nChildren == 1) {
		if(earnedIncome > maxIncomeEIC[4])
			return 0;
		else if(isMarried == false && earnedIncome > maxIncomeEIC[5])
			return 0;
		else if(earnedIncome >= maxAmountEIC[nChildren+4] && earnedIncome < 16700)
			return maxAmountEIC[nChildren];
		else if(isMarried == true && earnedIncome >= maxAmountEIC[nChildren+4] && earnedIncome <= 21800)
			return maxAmountEIC[nChildren];
		else if(earnedIncome < maxAmountEIC[nChildren+4])
			return parseInt(earnedIncome / 50) * 17 + 9;
		else {
		    if(isMarried) {
		        if(earnedIncome >= 41100) return 3;
		        var n = parseInt((maxIncomeEIC[4]-earnedIncome)/50);
		        return Math.ceil(7.9833*n) + Math.floor(n/180) + 1;
		    } else {
		        var n = parseInt((maxIncomeEIC[5]-earnedIncome)/50);
		        if(n == 78) return 619;
		        return Math.ceil(7.9873*n) + Math.floor(n/388) + 4;
		    }
		}
	}
									
	if(earnedIncome > 0 && earnedIncome < maxAmountEIC[nChildren+4]) {
	    if(earnedIncome < 50) return 2;
		var n= parseInt(earnedIncome/50);
		if(n == 3) return 13
		return Math.ceil(3.8*n) + Math.floor(n/45) + 2;
	}
	if(earnedIncome >= maxAmountEIC[nChildren+4] && earnedIncome < 7600)
		return maxAmountEIC[nChildren];
	if(isMarried == true && earnedIncome >= maxAmountEIC[nChildren+4] && earnedIncome < 12700)
		return maxAmountEIC[nChildren];
	if(isMarried == false && earnedIncome >= 12700 && earnedIncome < maxIncomeEIC[7]) {
		if(earnedIncome >= maxIncomeEIC[7]-50) return 3;
		if(earnedIncome >= maxIncomeEIC[7]-100) return 7;
		if(earnedIncome >= maxIncomeEIC[7]-150) return 10;
		var n = parseInt((maxIncomeEIC[7]-earnedIncome)/50);
		return Math.ceil(n*3.8285) + 2;
	}
	if(isMarried == true && earnedIncome >= 12700 && earnedIncome < maxIncomeEIC[6]) {
	    if(earnedIncome >= 18700) return 2;
	    if(earnedIncome >= 18650) return 5;
	    var n = parseInt((maxIncomeEIC[6]-earnedIncome)/50);
	    if(n == 4) return 16;
	    return Math.ceil(3.6666*n) + Math.floor(n/12) + Math.floor(n/18) + Math.floor(n/75) + 2;
	}
	return 0;
}

function calculateEIC(wages, combat, interest, unemployment, children) {
	var isMarried = false;
	var wc = wages + combat;
	var wiu = wages + interest + unemployment;

    if(getElement("maritalStatus").substring(0, 7) == "married")
	    isMarried = true;

    if(getElement("canBeClaimed0") == "Yes" || getElement("residency0") == "No" ||
        (getElement("age0") != "25to49" && getElement("age0") != "50to64" && children == 0))
        return 0;

    if(isMarried == true && (getElement("canBeClaimed1") == "Yes" || getElement("residency1") == "No" ||
        (getElement("age1") != "25to49" && getElement("age1") != "50to64" && children == 0)))
        return 0;
        
	if(children >= 3) {
		if(wiu < maxAmountEIC[7])
		    return Math.min(EICcalculator(wages, children, false), EICcalculator(wc, children, false));
		else if(wiu >= maxAmountEIC[7] && (wages < maxIncomeEIC[1] || (isMarried == true && wages < maxIncomeEIC[0])))
		    return Math.min(EICcalculator(wages, children, isMarried), EICcalculator(wiu, children, isMarried));
		else
			return 0;
	} else if(children == 2) {
		if(wiu < maxAmountEIC[6])
		    return Math.min(EICcalculator(wages, children, false), EICcalculator(wc, children, false));
		else if(wiu >= maxAmountEIC[6] && (wages < maxIncomeEIC[3] || (isMarried == true && wages < maxIncomeEIC[2])))
		    return Math.min(EICcalculator(wages, children, isMarried), EICcalculator(wiu, children, isMarried));
		else
			return 0;
	} else if(children == 1) {
		if(wiu < maxAmountEIC[5])
		    return Math.min(EICcalculator(wages, children, false), EICcalculator(wc, children, false));
		else if(wiu >= maxAmountEIC[5] && (wages < maxIncomeEIC[5] || (isMarried == true && wages < maxIncomeEIC[4])))
		    return Math.min(EICcalculator(wages, children, isMarried), EICcalculator(wiu, children, isMarried));
		else
			return 0;
	} else {            //No kiddies
		if(wiu < maxAmountEIC[4])
		    return Math.min(EICcalculator(wages, children, false), EICcalculator(wc, children, false));
		else if(wiu >= maxAmountEIC[4] && (wages < maxIncomeEIC[7] || (isMarried == true && wages < maxIncomeEIC[6])))
		    return Math.min(EICcalculator(wages, children, isMarried), EICcalculator(wiu, children, isMarried));
		else
			return 0;
	}
}
EICLoaded = 1;
