﻿function W2Summary(label1, label2, label3, label4, wages, withholding, EIC, combat, boldHeadings) {
    var boldStart = "";
    var boldEnd = "";
    if(boldHeadings) {
        boldStart = "<b>";
        boldEnd = "</b>";
    }
    setElement(label1, boldStart + "Wages:" + boldEnd);
    setElement(label2, wages);
    if(withholding > 0 || ((EIC + combat) == 0)) {
        setElement(label3, boldStart + "Withholding:" + boldEnd);
        setElement(label4, withholding);
    } else if (EIC > 0) {
        setElement(label3, boldStart + "Advanced EIC Payment:" + boldEnd);
        setElement(label4, EIC);
    } else if (combat > 0) {
        setElement(label3, boldStart + "Combat Pay:" + boldEnd);
        setElement(label4, combat);
    }
}
function cellSaveW2(cell, keepDisplay) {
    var cellNum = cell.substr(cell.length - 2);
    if(cellNum.substr(0, 1) == "0") cellNum = "1" + cellNum;
    var tabNum = parseInt(cellNum.substr(0, 1));
    if(tabNum == 0) tabNum = 10;
    var cellMin = tabNum * 10;
    var employer = getElement("n" + cellNum + "name");
    var wages = parseFloat(getElement("n" + cellNum + W2Line[0]));
    if(employer == "") {
        employer = "Unnamed employer";
        if(getElement("maritalStatus") == "married1") {
            employer = getElement("n" + cellNum + "earner", true) + "'s W2";
        }
        if(isNaN(wages) || wages == 0) employer = "New W-2";
    }
    if(employer != "New W-2") {
        var withholding = parseFloat(getElement("n" + cellNum + withholdLine[0]));
        var EIC;
        var combat = parseFloat(getElement("n" + cellNum + combatLine[0]));
        setElement("Label" + cellNum + "a", "<a href='javascript:cellDisplay(\"Container" + cellNum + "\", true);'>" + employer + "</a>");
        W2Summary("Label" + cellNum + "b", "Label" + cellNum + "c", "Label" + cellNum + "d", "Label" + cellNum + "e", wages, withholding, EIC, combat, true);
        cellDisplay("Filled" + cellNum, true);
        cellDisplay("Empty" + cellNum, false);
    } else {
        cellDisplay("Filled" + cellNum, false);
        cellDisplay("Empty" + cellNum, true);
    }
    var totalWages = 0;
    var totalWithholding = 0;
    var totalEIC = 0;
    var totalCombat = 0;
    var totalW2s = 0;
    var w;
    for (var i = cellMin; i < cellMin + 10; i++) {
        if (document.getElementById("n" + i + "name")) {
            totalW2s++;
            w = getElement("n" + i + W2Line[0]);
            if(w != "") totalWages += parseMoney(w);
            w = getElement("n" + i + withholdLine[0]);
            if(w != "") totalWithholding += parseMoney(w);
            w = getElement("n" + i + combatLine[0]);
            if(w != "") totalCombat += parseMoney(w);
        }
    }
    setElement("Tab" + (cellMin / 10) + "Num", "Totals for " + totalW2s + " W2" + (totalW2s > 1 ? "s " : " "));
    W2Summary("Tab" + tabNum + "Label1", "Tab" + tabNum + "Total1", "Tab" + tabNum + "Label2", "Tab" + tabNum + "Total2", totalWages, totalWithholding, totalEIC, totalCombat, false);
    cellDisplay("Tab" + tabNum + "Num", true);
    cellDisplay(cell, keepDisplay);
}
function intSummary(label1, label2, label3, label4, wages, exempt, withholding, boldHeadings) {
    var boldStart = "";
    var boldEnd = "";
    var h1 = "";
    var a1 = "";
    var h2 = "";
    var a2 = "";
    if(boldHeadings) {
        boldStart = "<b>";
        boldEnd = "</b>";
    }
    if(wages > 0) {
        h1 = boldStart + "Interest:" + boldEnd;
        a1 = wages;
    }
    if(exempt > 0) {
        if(h1 == "") {
            h1 = boldStart + "Exempt Interest:" + boldEnd;
            a1 = exempt;
        } else {
            h2 = boldStart + "Exempt Interest:" + boldEnd;
            a2 = exempt;
        }
    }
    if(h2 == "" && withholding > 0) {
        h2 = boldStart + "Withholding:" + boldEnd;
        a2 = withholding;
    }
    setElement(label1, h1);
    setElement(label2, a1);
    setElement(label3, h2);
    setElement(label4, a2);
}
function cellSaveInt(cell, keepDisplay) {
    var cellNum = cell.substr(cell.length - 2);
    if(cellNum.substr(0, 1) == "0") cellNum = "1" + cellNum;
    var tabNum = parseInt(cellNum.substr(0, 1));
    if(tabNum == 0) tabNum = 10;
    var cellMin = tabNum * 10;
    var bank = getElement("n" + cellNum + "name");
    var wages = getElement("n" + cellNum + intLine[0]);
    if(bank == "") {
        bank = "Bank not named";
        if(isNaN(wages) || wages == 0) bank = "New Interest item";
    }
    if(bank != "New Interest item") {
        var exempt = getElement("n" + cellNum + exemptIntLine[0]);
        var withholding = getElement("n" + cellNum + withholdLine[0]);
        setElement("Label" + cellNum + "a", "<a href='javascript:cellDisplay(\"Container" + cellNum + "\", true);'>" + bank + "</a>");
        intSummary("Label" + cellNum + "b", "Label" + cellNum + "c", "Label" + cellNum + "d", "Label" + cellNum + "e", wages, exempt, withholding, true);
        cellDisplay("Filled" + cellNum, true);
        cellDisplay("Empty" + cellNum, false);
    } else {
        cellDisplay("Filled" + cellNum, false);
        cellDisplay("Empty" + cellNum, true);
    }
    var totalInt = 0;
    var totalExempt = 0;
    var totalWithholding = 0;
    var total1099 = 0;
    var w;
    for (var i = cellMin; i < cellMin + 10; i++) {
        if (document.getElementById("n" + i + "name")) {
            total1099++;
            w = getElement("n" + i + intLine[0]);
            if(w != "") totalInt += parseMoney(w);
            w = getElement("n" + i + exemptIntLine[0]);
            if(w != "") totalExempt += parseMoney(w);
            w = getElement("n" + i + withholdLine[0]);
            if(w != "") totalWithholding += parseMoney(w);
        }
    }
    setElement("Tab" + (cellMin / 10) + "Num", "Totals for " + total1099 + " Interest item" + (total1099 > 1 ? "s " : " "));
    intSummary("Tab" + tabNum + "Label1", "Tab" + tabNum + "Total1", "Tab" + tabNum + "Label2", "Tab" + tabNum + "Total2", totalInt, totalExempt, totalWithholding, false);
    cellDisplay("Tab" + tabNum + "Num", true);
    cellDisplay(cell, keepDisplay);
}
function UESummary(label1, label2, label3, label4, wages, withholding, boldHeadings) {
    var boldStart = "";
    var boldEnd = "";
    if(boldHeadings) {
        boldStart = "<b>";
        boldEnd = "</b>";
    }
    setElement(label1, boldStart + "Unemployment:" + boldEnd);
    setElement(label2, wages);
    if(!isNaN(withholding)) {
        setElement(label3, boldStart + "Withholding:" + boldEnd);
        setElement(label4, withholding);
    }
}
function cellSaveUE(cell, keepDisplay) {
    var cellNum = cell.substr(cell.length - 2);
    if(cellNum.substr(0, 1) == "0") cellNum = "1" + cellNum;
    var tabNum = parseInt(cellNum.substr(0, 1));
    if(tabNum == 0) tabNum = 10;
    var cellMin = tabNum * 10;
    var state = getElement("n" + cellNum + "name");
    var wages = getElement("n" + cellNum + ueLine[0]);
    if(state == "") {
        state = "State not named";
        if(isNaN(wages) || wages == 0) state = "New Unemployment item";
    }
    if(state != "New Unemployment item") {
        var withholding = parseFloat(getElement("n" + cellNum + withholdLine[0]));
        setElement("Label" + cellNum + "a", "<a href='javascript:cellDisplay(\"Container" + cellNum + "\", true);'>" + state + "</a>");
        UESummary("Label" + cellNum + "b", "Label" + cellNum + "c", "Label" + cellNum + "d", "Label" + cellNum + "e", wages, withholding, true);
        cellDisplay("Filled" + cellNum, true);
        cellDisplay("Empty" + cellNum, false);
    } else {
        cellDisplay("Filled" + cellNum, false);
        cellDisplay("Empty" + cellNum, true);
    }
    var totalUE = 0;
    var totalWithholding = 0;
    var total1099 = 0;
    var w;
    for (var i = cellMin; i < cellMin + 10; i++) {
        if (document.getElementById("n" + i + "name")) {
            total1099++;
            w = getElement("n" + i + ueLine[0]);
            if(w != "") totalUE += parseMoney(w);
            w = getElement("n" + i + withholdLine[0]);
            if(w != "") totalWithholding += parseMoney(w);
        }
    }
    setElement("Tab" + (cellMin / 10) + "Num", "Totals for " + total1099 + " Unemployment item" + (total1099 > 1 ? "s " : " "));
    UESummary("Tab" + tabNum + "Label1", "Tab" + tabNum + "Total1", "Tab" + tabNum + "Label2", "Tab" + tabNum + "Total2", totalUE, totalWithholding, false);
    cellDisplay("Tab" + tabNum + "Num", true);
    cellDisplay(cell, keepDisplay);
}
function SSSummary(label1, label2, label3, label4, SS, RRB, withholding, boldHeadings) {
    var boldStart = "";
    var boldEnd = "";
    var h1 = "";
    var a1 = "";
    var h2 = "";
    var a2 = "";
    if(boldHeadings) {
        boldStart = "<b>";
        boldEnd = "</b>";
    }
    if(SS > 0) {
        h1 = boldStart + "Social Security:" + boldEnd;
        a1 = SS;
    }
    if(RRB > 0) {
        if(h1 == "") {
            h1 = boldStart + "Railroad Retirement:" + boldEnd;
            a1 = RRB;
        } else {
            h2 = boldStart + "Railroad Retirement:" + boldEnd;
            a2 = RRB;
        }
    }
    if(h2 == "" && withholding > 0) {
        h2 = boldStart + "Withholding:" + boldEnd;
        a2 = withholding;
    }
    setElement(label1, h1);
    setElement(label2, a1);
    setElement(label3, h2);
    setElement(label4, a2);
}
function cellSaveSS(cell, keepDisplay) {
    var cellNum = cell.substr(cell.length - 2);
    if(cellNum.substr(0, 1) == "0") cellNum = "1" + cellNum;
    var tabNum = parseInt(cellNum.substr(0, 1));
    if(tabNum == 0) tabNum = 10;
    var cellMin = tabNum * 10;
    var payer = getElement("n" + cellNum + "type");
    var wages = getElement("n" + cellNum + ssLine[0]);
    if(getElement("maritalStatus") == "married1") payer = getElement("n" + cellNum + "earner", true) + "'s " + payer;
    if(isNaN(wages) || wages == 0) payer = "New Social Security/Railroad Retirement item";

    if(payer != "New Social Security/Railroad Retirement item") {
        var withholding = parseFloat(getElement("n" + cellNum + withholdLine[0]));
        setElement("Label" + cellNum + "a", "<a href='javascript:cellDisplay(\"Container" + cellNum + "\", true);'>" + payer + "</a>");
        if(getElement("n" + cellNum + "type") == "RR") SSSummary("Label" + cellNum + "b", "Label" + cellNum + "c", "Label" + cellNum + "d", "Label" + cellNum + "e", 0, wages, withholding, true);
        else SSSummary("Label" + cellNum + "b", "Label" + cellNum + "c", "Label" + cellNum + "d", "Label" + cellNum + "e", wages, 0, withholding, true);
        cellDisplay("Filled" + cellNum, true);
        cellDisplay("Empty" + cellNum, false);
    } else {
        cellDisplay("Filled" + cellNum, false);
        cellDisplay("Empty" + cellNum, true);
    }
    var totalSS = 0;
    var totalRR = 0;
    var totalWithholding = 0;
    var total1099 = 0;
    var w;
    for (var i = cellMin; i < cellMin + 10; i++) {
        if (document.getElementById("n" + i + "type")) {
            total1099++;
            w = getElement("n" + i + ssLine[0]);
            if(w != "") {
                if(getElement("n" + i + "type") == "RR") totalRR += parseMoney(w);
                else totalSS += parseMoney(w);
            }
            w = getElement("n" + i + withholdLine[0]);
            if(w != "") totalWithholding += parseMoney(w);
        }
    }
    setElement("Tab" + (cellMin / 10) + "Num", "Totals for " + total1099 + " Social Security item" + (total1099 > 1 ? "s " : " "));
    SSSummary("Tab" + tabNum + "Label1", "Tab" + tabNum + "Total1", "Tab" + tabNum + "Label2", "Tab" + tabNum + "Total2", totalSS, totalRR, totalWithholding, false);
    cellDisplay("Tab" + tabNum + "Num", true);
    cellDisplay(cell, keepDisplay);
}
function divSummary(label1, label2, label3, label4, dividend, qualified, withholding, boldHeadings) {
    var boldStart = "";
    var boldEnd = "";
    var h1 = "";
    var a1 = "";
    var h2 = "";
    var a2 = "";
    if(boldHeadings) {
        boldStart = "<b>";
        boldEnd = "</b>";
    }
    if(dividend > 0) {
        h1 = boldStart + "Dividend:" + boldEnd;
        a1 = dividend;
    }
    if(qualified > 0) {
        if(h1 == "") {
            h1 = boldStart + "Qualified Dividends:" + boldEnd;
            a1 = qualified;
        } else {
            h2 = boldStart + "Qualified Dividends:" + boldEnd;
            a2 = qualified;
        }
    }
    if(h2 == "" && withholding > 0) {
        h2 = boldStart + "Withholding:" + boldEnd;
        a2 = withholding;
    }
    setElement(label1, h1);
    setElement(label2, a1);
    setElement(label3, h2);
    setElement(label4, a2);
}
function cellSaveDiv(cell, keepDisplay) {
    var cellNum = cell.substr(cell.length - 2);
    if(cellNum.substr(0, 1) == "0") cellNum = "1" + cellNum;
    var tabNum = parseInt(cellNum.substr(0, 1));
    if(tabNum == 0) tabNum = 10;
    var cellMin = tabNum * 10;
    var payer = getElement("n" + cellNum + "name");
    var wages = getElement("n" + cellNum + dividendLine[0]);
    if(payer == "") {
        payer = "Payer not named";
        if(isNaN(wages) || wages == 0) bank = "New Dividend item";
    }
    if(payer != "New Dividend item") {
        var qualified = getElement("n" + cellNum + qualDividendLine[0]);
        var withholding = getElement("n" + cellNum + withholdLine[0]);
        setElement("Label" + cellNum + "a", "<a href='javascript:cellDisplay(\"Container" + cellNum + "\", true);'>" + payer + "</a>");
        divSummary("Label" + cellNum + "b", "Label" + cellNum + "c", "Label" + cellNum + "d", "Label" + cellNum + "e", wages, qualified, withholding, true);
        if (parseFloat(qualified) > 0 && getElement("n" + cellNum + "ownership") > "1") {
            cellDisplay("qualDivWarn" + cellNum, true);
            qualified = 0;
        } else cellDisplay("qualDivWarn" + cellNum, false);
        cellDisplay("Filled" + cellNum, true);
        cellDisplay("Empty" + cellNum, false);
    } else {
        cellDisplay("Filled" + cellNum, false);
        cellDisplay("Empty" + cellNum, true);
    }
    var totalDiv = 0;
    var totalExempt = 0;
    var totalWithholding = 0;
    var total1099 = 0;
    var w;
    for (var i = cellMin; i < cellMin + 10; i++) {
        if (document.getElementById("n" + i + "name")) {
            total1099++;
            w = getElement("n" + i + dividendLine[0]);
            if(w != "") totalDiv += parseMoney(w);
            w = getElement("n" + i + qualDividendLine[0]);
            if(w != "") totalExempt += parseMoney(w);
            w = getElement("n" + i + withholdLine[0]);
            if(w != "") totalWithholding += parseMoney(w);
        }
    }
    setElement("Tab" + (cellMin / 10) + "Num", "Totals for " + total1099 + " Dividend item" + (total1099 > 1 ? "s " : " "));
    divSummary("Tab" + tabNum + "Label1", "Tab" + tabNum + "Total1", "Tab" + tabNum + "Label2", "Tab" + tabNum + "Total2", totalDiv, totalExempt, totalWithholding, false);
    cellDisplay("Tab" + tabNum + "Num", true);
    cellDisplay(cell, keepDisplay);
}
function deductionSummary(label1, label2, type, wages, boldHeadings) {
    var boldStart = "";
    var boldEnd = "";
    if(boldHeadings) {
        boldStart = "<b>";
        boldEnd = "</b>";
    }
    setElement(label1, boldStart + type + " Deduction:" + boldEnd);
    setElement(label2, wages);
}
function cellSaveIRA(cell, keepDisplay) {
    cellSaveDeduct(cell, keepDisplay, "IRA", "IRA", IRALine[0], IRALimit[1], "based on the selections you made.");
}
function cellSaveEducator(cell, keepDisplay) {
    cellSaveDeduct(cell, keepDisplay, "Educator Expense", "Educator", educatorLine[0], educatorLimit, "based on the selections you made.");
}
function cellSaveStudent(cell, keepDisplay) {
    cellSaveDeduct(cell, keepDisplay, "Student Loan Interest", "Student", studentLine[0], studentLimit, "based on the selections you made.");
}
function cellSaveTuition(cell, keepDisplay) {
    cellSaveDeduct(cell, keepDisplay, "Tuition", "Tuition", tuitionLine[0], tuitionLimit, "because the course did not begin within the proper time period.");
}
function checkDeductionConditions(cell, deductionLine) {
    if(deductionLine == IRALine[0]) return (getElement("n" + cell + "IRADeductible") == "true")

    if(deductionLine == tuitionLine[0]) return (getElement("n" + cell + "courseStart") == "Deductible");

    if(deductionLine == educatorLine[0])
        return (getElement("n" + cell + "educatorGrade") == "Yes" && getElement("n" + cell + "educatorHours") == "Yes");
    if(deductionLine == studentLine[0])
        return (getElement("n" + cell + "studentLoad") == "Yes" && getElement("n" + cell + "studentCover") == "Yes" && getElement("n" + cell + "studentDependent") > "0" && getElement("n" + cell + "studentProgram") > "0");
}
function cellSaveDeduct(cell, keepDisplay, deductionLongText, deductionShortText, deductionLine, deductionLimit, failureReason) {
    var cellNum = cell.substr(cell.length - 2);
    if(cellNum.substr(0, 1) == "0") cellNum = "1" + cellNum;
    var tabNum = parseInt(cellNum.substr(0, 1));
    if(tabNum == 0) tabNum = 10;
    var cellMin = tabNum * 10;
    var earner, entry, warnCell;
    if(getElement("maritalStatus") == "married1") earner = getElement("n" + cellNum + "earner", true) + "'s " + deductionLongText + " Deduction";
    else earner = deductionLongText + " Deduction";
    var wages = getElement("n" + cellNum + deductionLine);
    if(isNaN(wages) || wages == "" || parseFloat(wages) == 0) earner = "New " + deductionLongText + " Deduction";

    if(earner != "New " + deductionLongText + " Deduction") {
        setElement("Label" + cellNum + "a", "<a href='javascript:cellDisplay(\"Container" + cellNum + "\", true);'>" + earner + "</a>");
        warnCell = deductionShortText + "Warn" + cellNum;
        cellDisplay(warnCell, false);
        entry = getElement("n" + cellNum + deductionLine);
        if(checkDeductionConditions(cellNum, deductionLine)) {
            wages = Math.min(parseMoney(entry), deductionLimit);
            setElement(warnCell, "This " + deductionLongText + " deduction exceeds the maximum deductible amount allowed by the IRS.");
            cellDisplay(warnCell, parseMoney(entry) > deductionLimit);
        } else {
            wages = "0";
            setElement(warnCell, "You do not qualify for the " + deductionLongText + " deduction " + failureReason);
            cellDisplay(warnCell, true);
        }
        deductionSummary("Label" + cellNum + "b", "Label" + cellNum + "c", deductionLongText, wages, true);
        cellDisplay("Filled" + cellNum, true);
        cellDisplay("Empty" + cellNum, false);
    } else {
        cellDisplay("Filled" + cellNum, false);
        cellDisplay("Empty" + cellNum, true);
    }
    var totalDeduct = 0;
    var totalAmount = 0;
    var w;
    for (var i = cellMin; i < cellMin + 10; i++) {
        if(document.getElementById("n" + i + deductionLine)) {
            totalDeduct++;
            w = Math.min(parseMoney(getElement("n" + i + deductionLine)), deductionLimit);
            if(w != "") {
                if(checkDeductionConditions(i, deductionLine)) totalAmount += parseMoney(w);
            }
        }
    }
    setElement("Tab" + (cellMin / 10) + "Num", "Totals for " + totalDeduct + " " + deductionLongText + " deduction" + (totalDeduct > 1 ? "s " : " "));
    deductionSummary("Tab" + tabNum + "Label1", "Tab" + tabNum + "Total1", deductionLongText, totalAmount, false);
    cellDisplay("Tab" + tabNum + "Num", true);
    cellDisplay(cell, keepDisplay);
}
function translateAge(age) {
    age = age.replace("<", "Less than ");
    age = age.replace(">", "Greater than ");
    if(age.indexOf("to") != -1)
        age = "Between " + age.replace("to", " and ");
    return age;
}
function cellSaveFiler(cell, keepDisplay) {
    var cellNum = (cell == "primary") ? 0 : 1;
    var filerName = getElement("filerNameInput" + cellNum);
    var infoCell = 0;
    if(filerName == "")
        filerName = (cellNum == 0) ? "Primary Taxpayer" : "Spouse";
    if(cellNum == 0)
        setElement("filerName" + cellNum, "<a href='javascript:cellDisplay(\"primary\", true);'>" + filerName + "</a>");
    else
        setElement("filerName" + cellNum, "<a href='javascript:cellDisplay(\"spouse\", true);'>" + filerName + "</a>");
    cellDisplay(cell, keepDisplay);
}
function dependentSummary(label1, label2, label3, label4, errMsg, displayName, name, SSN, relation, age) {
    var h1 = "";
    var a1 = "";
    var h2 = "";
    var a2 = "";
    if(errMsg != "") h1 = errMsg;

    if(SSN.length == 9) SSN = "XXXXX" + SSN.substring(5);
    else if(SSN.length == 11) SSN = "XXX-XX-" + SSN.substring(7);
    else if(SSN != "") SSN = "Please check SSN for accuracy and format.";
    if(SSN != "" && SSN != displayName) {
        if(h1 == "") {
            h1 = "SSN:";
            a1 = SSN;
        } else {
            h2 = "SSN:";
            a2 = SSN;
        }
    }
    if(h2 == "" && relation != displayName) {
        if(h1 == "") {
            h1 = "Relationship:";
            a1 = relation;
        } else {
            h2 = "Relationship:";
            a2 = relation;
        }
    }
    if(h2 == "") {
        h2 = "Age:";
        a2 = age;
    }
    setElement(label1, h1);
    setElement(label2, a1);
    setElement(label3, h2);
    setElement(label4, a2);
}
function dependentSummary2(label1, label2, label3, label4, totalDependents, dependentList, nonDependents, nonDependentList) {
    if(totalDependents > 0) {
        setElement(label1, "<b>" + totalDependents + " Dependent" + (totalDependents>1?"s":"") + "</b>");
        setElement(label2, dependentList);
    }
    if(nonDependents > 0) {
        setElement(label3, "<b>" + nonDependents + " Non-Dependent" + (nonDependents>1?"s":"") + "</b>");
        setElement(label4, nonDependentList);
    }
}
function dependentQualifies(relationType, cellNum, dependentName) {
    if(relationType == "") return "You must select the appropriate relationship type.";
    var age = getElement("n" + cellNum + "DCOB");
    age = getElement("n" + cellNum + "DYOB" + age);
    if(age == "") return "You must select the appropriate age range.";
    if(relationType == "no") return "Not a dependent since " + dependentName + " is not a relative";
    if(getElement("n" + cellNum + "support") == "0") return "Not a dependent since " + dependentName + " was not supported by you";

    var decree = getElement("n" + cellNum + "decree");
    var months = parseInt(getElement("n" + cellNum + "months"));
    if(months < 7 && decree != "canClaim") return "Not a dependent since " + dependentName + " fails the residency test";
    if(getElement("n" + cellNum + "nationality") == "0") return "Not a dependent since " + dependentName + " fails the nationality test";
    if(getElement("n" + cellNum + "filing") == "0") return "Not a dependent since " + dependentName + " filed a joint return with a spouse";

    if(relationType.substr(0, 8) == "relative" || (relationType.substr(0, 5) == "child" && getElement("adultClaim" + cellNum) == "No")) {
        if(months < 12) return "Not a dependent since " + dependentName + " did not live with you for the full year";
        if(getElement("n" + cellNum + "dependentIncome") == "No") return "Not a dependent since " + dependentName + " earned more than $" + dependentAmt;
    }
    return "";
}
function cellSaveDependent(cell, keepDisplay) {
    var cellNum = cell.substr(cell.length - 2);
    if(cellNum.substr(0, 1) == "0") cellNum = "1" + cellNum;
    var tabNum = parseInt(cellNum.substr(0, 1));
    if(tabNum == 0) tabNum = 10;
    var cellMin = tabNum * 10;
    var namesDependent = "";
    var namesNonDependent = "";
    var dependentName = getElement("n" + cellNum + "name");
    var displayName = dependentName;
    var relationVal = getElement("n" + cellNum + "relation");
    var relationType = getElement("n" + cellNum + "relation", true);
    var gender = document.getElementById("n" + cellNum + "gender").selectedIndex;
    var dependentTotal = 0;
    var disallowedTotal = 0;
    var errMsg = "";
    var errAddition = "";
    var age = getElement("n" + cellNum + "DCOB");
    var SSN = getElement("n" + cellNum + "SSN");
    var startPos = 0;
    age = getElement("n" + cellNum + "DYOB" + age);
    //age = age.replace("<", "Less than ");
    age = age.replace(">", "Greater than ");
    if(age.indexOf("to") != -1) age = "Between " + age.replace("to", " and ");

    if(relationType.indexOf("/") != -1) {
        var relations = relationType.split("/");
        if(relations.length != gender)
            relationType = relations[gender];
    }
    if(displayName == "") displayName = getElement("n" + cellNum + "SSN");

    if(displayName == "") displayName = relationType;

    if(dependentName == "") dependentName = "(s)he";

    if(displayName != "") {
        errMsg = dependentQualifies(relationVal, cellNum, dependentName);

        if(getElement("maritalStatus") == "single") errAddition = "<br/>However, this person might qualify you for Head of Household status."
        setElement("dependentWarn" + cellNum, (errMsg == "" ? "" : errMsg + errAddition));

        cellDisplay("dependentWarn" + cellNum, (errMsg != ""));
        setElement("Label" + cellNum + "a", "<a href='javascript:cellDisplay(\"Container" + cellNum + "\", true);'>" + displayName + "</a>");
        dependentSummary("Label" + cellNum + "b", "Label" + cellNum + "c", "Label" + cellNum + "d", "Label" + cellNum + "e", errMsg, displayName, dependentName, SSN, relationType, age, true);
        cellDisplay("Filled" + cellNum, true);
        cellDisplay("Empty" + cellNum, false);
    } else {
        cellDisplay("Filled" + cellNum, false);
        cellDisplay("Empty" + cellNum, true);
    }
    for (var i = cellMin; i < cellMin + 10; i++) {
        if(document.getElementById("n" + i + "name")) {
            dependentName = getElement("Label" + i + "a");
            dependentName = dependentName.substr(0, dependentName.length - 4); //strips off </a>
            startPos = dependentName.indexOf(", true);'>");
            dependentName = dependentName.substr(startPos + 10);
            if(getElement("Label" + i + "b").indexOf("Not a dependent") == -1 && getElement("Label" + i + "b").indexOf("You must select") == -1) {
                dependentTotal++;
                if(namesDependent == "") namesDependent = dependentName;
                else namesDependent += ("," + dependentName);
            } else {
                disallowedTotal++;
                if(namesNonDependent == "") namesNonDependent = dependentName;
                else namesNonDependent += ("," + dependentName);
            }
        }
        dependentSummary2("Tab" + tabNum + "Label1", "Tab" + tabNum + "Total1", "Tab" + tabNum + "Label2", "Tab" + tabNum + "Total2", dependentTotal, namesDependent, disallowedTotal, namesNonDependent);
    }
    setElement("Tab" + tabNum + "Num", "");
    cellDisplay(cell, keepDisplay);
}
cellSaveLoaded = 1;
