﻿
/* 
(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: 3,             // grösse die pro klick die schrift verkleinert wird
        minSize: 12,             // minimale schriftgrösse
        maxSize: 22,             // 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;

        var p = this.getTargetElement().getElements('p');

        if (p.length == 0) {
            p = this.getTargetElement().getElements('div');
        }

        for (i = 0; i < p.length; i++) {
            this.changeProperty(p[i], "font-size", true, 0);
            this.changeProperty(p[i], "line-height", true, 6);
        }

        //        var divs = this.getTargetElement().getElements('div');

        //        for (i = 0; i < divs.length; i++) {
        //            this.changeProperty(divs[i], "font-size", true, 0);
        //            this.changeProperty(divs[i], "line-height", true, 6);
        //        }

        this.options.level++;
        this.saveLevel();
    },

    /* decreases the font-size of all relevant elements */
    decrease: function() {

        if (this.options.level <= 0)
            return;

        var p = this.getTargetElement().getElements('p');

        if (p.length == 0) {
            p = this.getTargetElement().getElements('div');
        }

        for (i = 0; i < p.length; i++) {
            this.changeProperty(p[i], "font-size", false, 0);
            this.changeProperty(p[i], "line-height", false, 6);
        }

        //        var divs = this.getTargetElement().getElements('div');

        //        for (i = 0; i < divs.length; i++) {
        //            this.changeProperty(divs[i], "font-size", false, 0);
        //            this.changeProperty(divs[i], "line-height", false, 6);
        //        }

        this.options.level--;
        this.saveLevel();
    },

    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();
        }
    }

});
