// fontmagic --------------------------------------------------------------------------
// js helpers

/* generic functions to add and remove events */
function addEvent(obj, evType, fn, useCapture) {
    if (obj.addEventListener) {
        obj.addEventListener(evType, fn, useCapture);
        return true;
    } else if (obj.attachEvent) {
        var r = obj.attachEvent("on"+evType, fn);
        return r;
    } else {
        return false;
    }
}

function removeEvent(obj, evType, fn, useCapture) {
    if (obj.removeEventListener) {
        obj.removeEventListener(evType, fn, useCapture);
        return true;
    } else if (obj.detachEvent) {
        var r = obj.detachEvent("on"+evType, fn);
        return r;
    } else {
        return false;
    }
}


/* prevent browser from processing with the href attribute */
function cancelClick(e) {
    e = e || event; 
    e.preventDefault? e.preventDefault() : e.returnValue = false; 
}


/* create text element for a given tag */
function createTextElm(text, elmType) {
    var elm = null;

    if (text) {
        elm = document.createElement(elmType);
        var elmText = document.createTextNode(text);
        elm.appendChild(elmText);
    }
    
    return elm;
}


/* enhace DOM method "appendChild" */
Object.prototype.appChild = function(parent, child) {
    if (child) {
        parent.appendChild(child);
    }
};


var fm = new Object();  // FontMagic

/* get pos in the doc and place FontMagic */
function insertFontMagic() {
    // get the parent Element
    var parent = document.getElementById(fm.parentId);
    var contentTextSize = initTextSize();

    if (parent) {
        parent.insertBefore(createFontMagic(), parent.firstChild);
        setContentSzenario(contentTextSize);
    }
}


/* P FontMagic content */
function createFontMagic() {
    // paragraph
    var fmPara  = document.createElement('div');
    fmPara .className = fm.pClass;
    
    // description
    var icon_img = document.createElement('img');
    icon_img.id = 'ftszid';
    icon_img.border = '0';
    icon_img.align='middle';
    icon_img.alt = 'Fontsize';
    icon_img.src = 'images/sign_fontsize.gif';
    fmPara .appendChild(icon_img); 
     
    var fsText = document.createTextNode(fm.text);
    fmPara .appendChild(fsText); 
    // link: small
    fmPara .appendChild(createLink(fm.linkSmall));
    // separator
    fmPara .appendChild(createSeparator(fm.separator));
    // current
    fmPara .appendChild(createCurrent(fm.linkReset));
    // separator
    fmPara .appendChild(createSeparator(fm.separator));
    //link med
    fmPara .appendChild(createLink(fm.linkMed));
        // separator
    fmPara .appendChild(createSeparator(fm.separator));    
    // link: big
    fmPara .appendChild(createLink(fm.linkBig));

    return fmPara ;
}


/* create links in FontMagic */
function createLink(cfg) {
    var obj = new Object();
    obj.elm = document.createElement('a');
    obj.elm.id = cfg.id;
    obj.elm.title = cfg.title;
    obj.elm.href = '#' + cfg.id;
    
   

    
    obj.appChild(obj.elm, createTextElm(cfg.text, 'span'));
    obj.appChild(obj.elm, createTextElm(cfg.icon, 'sup'));

    obj.elm2 = document.createElement('span');
    obj.elm2.className = fm.hiddenClass;

    obj.tn = document.createTextNode(' ' + cfg.title);
    obj.appChild(obj.elm2, obj.tn);
    obj.appChild(obj.elm, obj.elm2);
    
    

    addEvent(obj.elm, 'click', function(evt) {
        changeTextSize(this, evt);
    }, false);

    addEvent(obj.elm, 'click', cancelClick, false);

    return obj.elm;
}


/* enhanced link in FontMagic */
function enhanceLink(cfg) {
    var parent = document.getElementById(cfg.id);
    parent.replaceChild(createTextElm(cfg.text, 'em'), parent.firstChild);
}


/* reset link in FontMagic */
function resetLink(cfg) {
    var parent = document.getElementById(cfg.id);
    parent.replaceChild(createTextElm(cfg.text, 'span'), parent.firstChild);
}


/* current element in FontMagic */
function createCurrent(cfg) {
    var obj = new Object();
    obj.elm = document.createElement('em');
    obj.elm.id = cfg.id;

    obj.appChild(obj.elm, createTextElm(cfg.text, 'span'));
    obj.appChild(obj.elm, createTextElm(cfg.icon, 'sup'));

    obj.elm2 = document.createElement('span');
    obj.elm2.className = fm.hiddenClass;

    obj.tn = document.createTextNode(' ' + cfg.title);
    obj.appChild(obj.elm2, obj.tn);
    obj.appChild(obj.elm, obj.elm2);

    return obj.elm;
}


/* enhance current element in FontMagic */
function enhanceCurrent(cfg) {
    var obj = document.getElementById(cfg.id);
    var parent = obj.parentNode;

    parent.replaceChild(createLink(cfg), obj);
}


/* reset current element in FontMagic */
function resetCurrent(cfg) {
    var obj = document.getElementById(cfg.id);
    var parent = obj.parentNode;

    parent.replaceChild(createCurrent(cfg), obj);
}


/* separator in FontMagic */
function createSeparator(text) {
    var fsSeparator = document.createTextNode(text);

    return fsSeparator;
}


/* set status for elements in FontMagic */
function setContentSzenario(size) {
    var ratio = size;

    if (ratio == 'xx-small') {
        resetLink(fm.linkSmall);
        enhanceCurrent(fm.linkReset);
        enhanceLink(fm.linkBig);
    }
    else if (ratio == 'x-small') {
        resetLink(fm.linkSmall);
        enhanceCurrent(fm.linkReset);
        enhanceLink(fm.linkBig);
    }    
     else if (ratio == 'medium') {
        enhanceLink(fm.linkSmall);
        enhanceCurrent(fm.linkReset);
        resetLink(fm.linkMed);              
        
    } 
     else if (ratio == 'large') {
        enhanceLink(fm.linkSmall);
        enhanceCurrent(fm.linkReset);
        resetLink(fm.linkBig);              
        
    }    
    else {
        resetLink(fm.linkSmall);
        resetCurrent(fm.linkReset);
        resetLink(fm.linkBig);
    }
}


/* get text from cookie size for FontMagic */
function initTextSize() {

    fm.actualSize = getCookie('FontMagic');	
	
    if (fm.actualSize) {
        getDocumentBody(fm.actualSize);
    }
    else {
        fm.actualSize = fm.initialSize;
    }

    return fm.actualSize;
}


/* change textsize */
function changeTextSize(obj, evt) {
    var newSize, trigger;

    if (!evt.srcElement) {
        trigger = obj.id;
    } else {
        trigger = evt.srcElement.parentNode.id;  
    }

    switch (trigger) {
        case fm.linkBig.id:
            newSize = 'large';
            break;
        case fm.linkMed.id:
            newSize = 'medium';
            break;                                    
        case fm.linkSmall.id:
            newSize = 'xx-small';
            break;
        case fm.linkReset.id:
            newSize = '12px';
            break;
        default:
            newSize = 'x-small';
    }

    if (newSize < fm.minSize) {
        newSize = fm.minSize;
        alert(fm.hint);
    }

    setContentSzenario(newSize);
    getDocumentBody(newSize);
    return false;
}


/* get body element  */
function getDocumentBody(newTextSize) {
	// alert(newTextSize);
    var bodyInit = document.getElementsByTagName('body')[0];
    setTextSize(bodyInit, newTextSize);
    fm.actualSize = newTextSize;
}


/* set new text size on body element */
function setTextSize(obj, newTextSize) {
 
       
        obj.style.fontSize = newTextSize;
        setCookie(FontMagic, newTextSize, 356);
  
     //alert(newTextSize);
  //  document.all.mediaz_body.style.fontSize = 'small';
}
// ----------------------------------------------------------------------------------------------------------------------

/* Config Data */
fm.text = ' ';
btext = 'Schrift: ';
fm.linkSmall = {
    icon: '',
    text: '-',
    title: btext + '- klein'
};
fm.linkReset = {
    icon: '',
    text: 'o',
    title: btext + 'normal'
};
fm.linkMed  = {
    icon: '',
    text: '+',
    title: btext + '+ mittel'
};
fm.linkBig = {
    icon: '',
    text: '++',
    title: btext + '++ gross'
};
fm.separator = ' | ';
fm.hint = 'Info: geringste Schriftgröße erreicht.';


/* "fontSizer": variables for calculation */
fm.initialSize = 16;          // value must match (in px) to body default font-size for css2 capable browsers
fm.step = 1;                  // in-/decrement value (in px)
fm.minSize = 12;              // value (in px) sets minimal font-size


/* "fontSizer": CSS IDs and class names */
fm.parentId = 'FontMagic';
fm.pClass = 'fontMagic';
fm.hiddenClass = 'fontMagichd';
fm.linkSmall.id = 'fsSmall';
fm.linkReset.id = 'fsReset';
fm.linkMed.id = 'fsMed';
fm.linkBig.id = 'fsBig';