/* Javascript by Daniel Cohen Gindi (c) danielgindi@gmail.com 054-5655765 */
/* Version: 2009-12-19 */

TwiceCalc = {
    params: {
        savePerYear: 24,
        defaultCube: 12,
        defaultPeople: 1,
        defaultYears: 1
    },

    _setLoadedEvent: function() {
        if (this._loadedEvent) return;
        else {
            this._loadedEvent = true;
            var obj = this;
            ajax.events.register(document, 'dom:onLoad', function() { obj.onLoad(); });
        }
    },
    setParams: function(params) {
        params = params || this.params;
        this.params.savePerYear = parseInt(params.savePerYear || this.params.savePerYear);
        this.params.defaultCube = parseInt(params.defaultCube || this.params.defaultCube);
        this.params.defaultPeople = parseInt(params.defaultPeople || this.params.defaultPeople);
        this.params.defaultYears = parseInt(params.defaultYears || this.params.defaultYears);
        this.params.people = parseInt(params.people || params.defaultPeople || this.params.people);
        this.params.years = parseInt(params.years || params.defaultYears || this.params.years);
        this.params.elAvatars = params.elAvatars || this.params.elAvatars;
        this.params.elAvatarsCount = params.elAvatarsCount || this.params.elAvatarsCount;
        this.params.elYears = params.elYears || this.params.elYears;
        this.params.elYearsCount = params.elYearsCount || this.params.elYearsCount;
        this.params.elSum = params.elSum || this.params.elSum;
        if (this.params.elCube && typeof(this.params.elCube) != 'string') 
        {
        	ajax.events.unregister(this.params.elCube, 'change', this.cubeOnChange);
        	ajax.events.unregister(this.params.elCube, 'keypress', this.cubeOnKeypress);
        }
        this.params.elCube = params.elCube || this.params.elCube;

        if (!document.isDomLoaded) this._setLoadedEvent();
        else {
            this.params.elAvatars = ajax.$(this.params.elAvatars);
            this.params.elAvatarsCount = ajax.$(this.params.elAvatarsCount);
            this.params.elYears = ajax.$(this.params.elYears);
            this.params.elYearsCount = ajax.$(this.params.elYearsCount);
            this.params.elSum = ajax.$(this.params.elSum);
            this.params.elCube = ajax.$(this.params.elCube);
            if (this.params.elCube && this.params.elCube.value == '') this.params.elCube.value = this.params.defaultCube;
            ajax.events.register(this.params.elCube, 'change', this.cubeOnChange);
            ajax.events.register(this.params.elCube, 'keypress', this.cubeOnKeypress);
            this.setPeople(this.params.people);
            this.setYears(this.params.years);
        }
    },
    onLoad: function() {
        this.setParams();
    },
    getPeople: function() {
        return this.params.people || this.params.defaultPeople;
    },
    getYears: function() {
        return this.params.years || this.params.defaultYears;
    },
    setPeople: function(value) {
        value = parseInt(value, 10);
        if (isNaN(value)) return;
        if (value < 0) value = 0;
        var arrItems = [];
        if (value <= 12) {
            for (var i = 0; i < value; i++) {
                var el = document.createElement('img');
                el.src = 'images/blank.gif';
                el.className = 'Avatar' + (value > 4 ? '12' : '4');
                arrItems.push(el);
            }
        } else {
            var el = document.createElement('img');
            el.src = 'images/blank.gif';
            el.className = 'Avatar';
            arrItems.push(el);
        }
        while (this.params.elAvatars.childNodes.length) this.params.elAvatars.removeChild(this.params.elAvatars.firstChild);
        for (var i = 0; i < arrItems.length; i++)
            this.params.elAvatars.appendChild(arrItems[i]);
        ajax.layout.setText(this.params.elAvatarsCount, '(' + value + ')');
        this.params.people = value;
        this.calculate();
    },
    setYears: function(value) {
        value = parseInt(value, 10);
        if (isNaN(value)) return;
        if (value < 0) value = 0;
        var arrItems = [];
        if (value <= 10) {
            for (var i = 0; i < value; i++) {
                var el = document.createElement('img');
                el.src = 'images/blank.gif';
                el.className = 'Year' + (value > 2 ? '10' : '2');
                arrItems.push(el);
            }
        } else {
            var el = document.createElement('img');
            el.src = 'images/blank.gif';
            el.className = 'Year';
            arrItems.push(el);
        }
        while (this.params.elYears.childNodes.length) this.params.elYears.removeChild(this.params.elYears.firstChild);
        for (var i = 0; i < arrItems.length; i++)
            this.params.elYears.appendChild(arrItems[i]);
        ajax.layout.setText(this.params.elYearsCount, '(' + value + ')');
        this.params.years = value;
        this.calculate();
    },
    increasePeople: function(value) {
        if (value) {
            value = parseInt(value, 10);
            if (isNaN(value)) return;
        } else value = 1;
        this.setPeople(this.getPeople() + value);
    },
    decreasePeople: function(value) {
        if (value) {
            value = parseInt(value, 10);
            if (isNaN(value)) return;
        } else value = 1;
        this.setPeople(this.getPeople() - value);
    },
    increaseYears: function(value) {
        if (value) {
            value = parseInt(value, 10);
            if (isNaN(value)) return;
        } else value = 1;
        this.setYears(this.getYears() + value);
    },
    decreaseYears: function(value) {
        if (value) {
            value = parseInt(value, 10);
            if (isNaN(value)) return;
        } else value = 1;
        this.setYears(this.getYears() - value);
    },
    resetCube: function() {
        if (this.params.elCube && this.params.defaultCube) this.params.elCube.value = this.params.defaultCube;
    },
    reset: function() {
        this.setPeople(this.params.defaultPeople);
        this.setYears(this.params.defaultYears);
    },
    calculate: function() {
        var value = this.params.savePerYear * this.params.elCube.value;
        value = value * this.getPeople() * this.getYears();
        ajax.layout.setText(this.params.elSum, value);
    },
    cubeOnChange: function(ev) {
        var evt = new ajax.events.Event(event || ev);
        var f = parseFloat(evt.target.value);
        if (isNaN(f)) {
            evt.stop();
            if (evt.target.value == '.' || evt.target.value == '') return;
            else this.resetCube();
            return;
        } else {
            if (evt.target.value != f) evt.target.value = f;
        }
    },
    cubeOnKeypress: function(ev) {
        var evt = new ajax.events.Event(event || ev);
        if ((evt.key >= '0' && evt.key <= '9') || evt.key == '.') return;
        evt.stop();
    }
};
