

function Zoomer(options)
{
    
    var settings = {
        'target'            : 'body',
        'fontSizeFactor'    : 1,
        'cookieName'        : 'zoomFactor',
        'cookieLifeTime'    : 1000 * 60 * 30,
        'maxFactor'         : 3,
        'minFactor'         : -1,
        'factor'            : 0,
        'appendCallback'    : function(param){}
    }

    if (typeof options == 'object'){
        if(options.target && 'string' == typeof(options.target)){
            settings.target = options.target;
        }
        if(options.fontSizeFactor && !isNaN(parseFloat(options.fontSizeFactor))){
            settings.fontSizeFactor = options.fontSizeFactor;
        }        
        if(options.cookieName && 'string' == typeof(options.cookieName)){
            settings.cookieName = options.cookieName;
        }
        if(options.cookieLifeTime && !isNaN(parseInt(options.cookieLifeTime))){
            settings.cookieLifeTime = options.cookieLifeTime;
        }
        if(options.maxFactor && !isNaN(parseInt(options.maxFactor))){
            settings.maxFactor = options.maxFactor;
        }
        if(options.minFactor && !isNaN(parseInt(options.minFactor))){
            settings.minFactor = options.minFactor;
        }
        if(options.factor && !isNaN(parseInt(options.factor))){
            settings.factor = options.factor;
        }
        if('function' == typeof(options.appendCallback)){
            settings.appendCallback = options.appendCallback;
        }        
    }

    this.getTarget = function(){
        return settings.target;
    }

    this.getFontSizeFactor = function(){
        return settings.fontSizeFactor;
    }

    this.getCookieName = function(){
        return settings.cookieName;
    }

    this.getCookieLifeTime = function(){
        return settings.cookieLifeTime;
    }

    this.getMaxFactor = function(){
        return settings.fontSizeFactor;
    }

    this.getMinFactor = function(){
        return settings.minFactor;
    }

    this.getFactor = function(){
        return settings.factor;
    }

    this.callback = function(){
        settings.appendCallback(this.getFactor());
    }

    this.incFactor = function(){        
        if(settings.factor < settings.maxFactor){            
            settings.factor++;
            return true;
        }
        return false;
    }

    this.decFactor = function(){
        if(settings.factor > settings.minFactor){
            settings.factor--;            
            return true;
        }
        return false;
    }

    this.setDefaultFactor = function(){
        if(settings.factor != 0){
            settings.factor = 0;
            return true;
        }
        return false;
        
    }

    settings.factor = this.initFactor();
    if(settings.factor != 0){
        this.setSize();
    }
}

Zoomer.prototype.initFactor = function()
{
	factor = null;
	cookies = document.cookie.split(';');
	for(var i = 0; i < cookies.length; i++){
            name = cookies[i].substring(0,cookies[i].search(/=/));
            name = trim(name);
            if(name == this.getCookieName()){
                factor = cookies[i].substr(cookies[i].search(/=/) + 1, 1);
                if(factor == '-'){
                    factor = cookies[i].substr(cookies[i].search(/=/) + 1, 2);
                }
                break;
            }
	}
        
	if(null == factor){
            return 0;
	}else{
            return factor;
	}
}

Zoomer.prototype.setCookie = function()
{
    expire = new Date();
    expire = new Date(expire.getTime() + this.getCookieLifeTime());
    document.cookie = this.getCookieName() + '=' + this.getFactor() +  '; expires=' + expire.toGMTString() + '; path=/';    
}

Zoomer.prototype.setSize = function()
{    
    var size = (this.getFactor() * this.getFontSizeFactor() / 10) + 1;
    var sizeString = size +  'em';   
    $(this.getTarget()).css('font-size',sizeString);
    this.setCookie();
    this.callback();
}

Zoomer.prototype.zoomIn = function()
{
    if(this.incFactor()){
        this.setSize();        
    }
}

Zoomer.prototype.zoomOut = function()
{
    if(this.decFactor()){
        this.setSize();       
    }
}

Zoomer.prototype.zoomDefault = function()
{
    if(this.setDefaultFactor()){
        this.setSize();        
    }
}

function trim (zeichenkette)
{
    return zeichenkette.replace (/^\s+/, '').replace (/\s+$/, '');
}

$(document).ready(function()
{ 
    var options = {
        'target'            : '#columns-position',
        'fontSizeFactor'    : 1,
        'cookieName'        : 'zoomFactor',
        'cookieLifeTime'    : 1000 * 60 * 30,
        'maxFactor'         : 3,
        'minFactor'         : -1,
        'factor'            : 0,
        'appendCallback'    : function(factor){}
    }
    var zoomer = new Zoomer(options);

    $('#zoomIn').click(function(){
            
            zoomer.zoomIn();
            return false;
    });
    $('#zoomOut').click(function(){
            zoomer.zoomOut();
            return false;
    });
    $('#zoomDefault').click(function(){
            zoomer.zoomDefault();
            return false;
    });
});

