/**
 * Klassendefinition für Geburtstagsfunktion
 *
 * http://www.free.pages.at/casandra/jsbday/
 *
 * History:
 *   2005-03-28: erste Version veröffentlicht
 */

/**
 * class User
 */
function User (name, birthDate) {
    this.name = name;
    this.birthDate = birthDate;

    /**
     * Vergleicht Geburtstag mit heutigem Tag.
     *   -1 : hatte dieses Jahr schon Geburtstag
     *    0 : hat heute Geburtstag
     *    1 : hatte dieses Jahr noch nicht Geburtstag
     */
    this.isBdayChild = function () {
        var t = new Date();
        // heutiger Tag und Monat, aber Geburtsjahr!
        var today = new Date(this.birthDate.getFullYear(), t.getMonth(), t.getDate());

        if (today.getTime() > this.birthDate.getTime())
            return -1;
        else if (today.getTime() < this.birthDate.getTime())
            return 1;
        else
            return 0;
    }

    /**
     * Liefert das Alter unter Berücksichtigung des Geburtstages.
     */
    this.getAge = function () {
        var today = new Date();
        var year = today.getFullYear();
        var bYear = this.birthDate.getFullYear();

        if (this.isBdayChild() <= 0)
            return (year - bYear);
        else
            return (year - bYear - 1);
    }
}

/**
 * class UserList
 */
function UserList () {
    this.users = new Array();

    this.addUser = function (name, bDay, bMon, bYear) {
        this.users[this.users.length] = new User(name, new Date(bYear, bMon-1, bDay));
    }

    /**
     * Liefert eine kommaseparierte Liste aller Geburtstagskinder.
     * Wenn showAge TRUE ist, wird in Klammern jeweils das Alter
     * des Geburtstagskindes angehängt.
     */
    this.getBdayChilds = function (showAge) {
        var list = '';
        for (var i=0; i < this.users.length; i++) {
            if (this.users[i].isBdayChild() == 0) {
                if (list != '') list += ', ';
                list += this.users[i].name;
                if (showAge) list += ' (' + this.users[i].getAge() + ')';
            }
        }
        return (list == '') ? '' : list;
    }
}

