
/* 
(c)2010  GMG Net - Klaus

Klasse, der ein DOM-Element angegeben werden kann. Über zwei Methoden kann dann die Schriftgrösse
verkleinert oder vergrössert werden. 

*/

var mooFontChanger = new Class({
    Implements: Options,
    options: {
        targetElem: null,        // das element, dessen p-tags verkleinert werden
        stepSize: 2,             // grösse die pro klick die schrift verkleinert wird
        minSize: 11,             // minimale schriftgrösse
        maxSize: 17,             // maximale schriftgrösse
        maxLevel: 2,
        level: 0
    },


    /* constructor */
    initialize: function (elemID, options) {
        this.elemID = elemID;

    },

    /* returns the root-element */
    getTargetElement: function () {

        if (this.options.targetElem == null) {
            this.options.targetElem = $(this.elemID);
        }

        return this.options.targetElem;
    },

    /* increases the font-size of all relevant elements */
    increase: function () {
        if (this.options.level >= this.options.maxLevel) { return; } else { iCounter++; }

        var p = this.getTargetElement().getElements('p');

        if (p.length == 0) {
            p = this.getTargetElement().getElements('div');
        }

        for (i = 0; i < p.length; i++) {
            if (p[i].className == "text") {
                this.changeProperty(p[i], "font-size", true, 0);
                this.changeProperty(p[i], "line-height", true, 6);
            }
        }

        this.options.level++;
        this.saveLevel();

        setFontButtons();
    },

    /* decreases the font-size of all relevant elements */
    decrease: function () {
        if (this.options.level <= 0) { return; } else { iCounter--; }

        var p = this.getTargetElement().getElements('p');

        if (p.length == 0) {
            p = this.getTargetElement().getElements('div');
        }

        for (i = 0; i < p.length; i++) {
            if (p[i].className == "text") {
                this.changeProperty(p[i], "font-size", false, 0);
                this.changeProperty(p[i], "line-height", false, 6);
            }
        }

        this.options.level--;
        this.saveLevel();
        
        setFontButtons();
    },

    changeProperty: function (elem, propertyName, doIncrease, offset) {

        var x = elem.getStyle(propertyName).toInt();

        if (x == null || x == "" || x == 0 || x + "" == "NaN")
            return;

        if (!doIncrease) {

            x -= this.options.stepSize;
            if (x < (this.options.minSize + offset))
                x = this.options.minSize + offset;

        } else {

            x += this.options.stepSize;
            if (x > (this.options.maxSize + offset))
                x = this.options.maxSize + offset;
        }

        elem.setStyle(propertyName, x);
    },

    saveLevel: function () {
        if (this.options.level < 0)
            this.options.level = 0;
        var c = Cookie.write('fontsizelevel', this.options.level);


    },

    loadLevel: function () {

        var c = Cookie.read('fontsizelevel');

        if (c != null && c > 0) {
            for (var i = 0; i < c; i++)
                this.increase();
        }
    }

});
