﻿function enlargeFontSize(fontSizeChange, framesID) {
    fontSizeChange = 1;
    changeFontSize(1, fontSizeChange, framesID);
}

function reduceFontSize(fontSizeChange, framesID) {
    fontSizeChange = 1;
    changeFontSize(-1, fontSizeChange, framesID);
}

function changeFontSize(fontSizeMode, fontSizeChange, framesID) {
    var tagsToChange = new Array("P", "DIV", "SPAN", "TD", "H1", "H2", "H3", "H4", "H5", "H6", "PRE", "FONT", "B", "STRONG", "A");

    framesID = getFramesArrayID(framesID);

    for (var j = 0; j < framesID.length; j++) {
        for (var i = 0; i < tagsToChange.length; i++) {
            changeFontSizeByTagName(fontSizeMode, fontSizeChange, tagsToChange[i], framesID[j]);
        }
    }
}

function changeFontSizeByTagName(fontSizeMode, fontSizeChange, tagToChange, frameID) {
    var elmentsToCahnge, currentElement, currentFontSize, fontSizeValue, fontSizeType;
    var currentFrame = document;

    if (frameID.toLowerCase() != "self" && document.getElementById(frameID) != null)
        currentFrame = document.getElementById(frameID).contentWindow.document;

    if (currentFrame == null) return;

    elmentsToCahnge = currentFrame.getElementsByTagName(tagToChange);

    for (var i = 0; i < elmentsToCahnge.length; i++) {
        currentElement = elmentsToCahnge[i];
        currentFontSize = getCssPropertyValue(currentFrame, currentElement, "fontSize");
        fontSizeType = getFontSizeType(currentFontSize);

        if (fontSizeType.toLowerCase() == "em")
            fontSizeValue = "0";
        else if (fontSizeType.indexOf("%") > -1)
            fontSizeValue = "0";
        else
            fontSizeValue = parseInt(currentFontSize) + fontSizeChange * fontSizeMode;

        if (fontSizeValue <= 0) continue;
        if (currentElement.getAttribute("changeFontSize") == "false") continue;
        if (getCssPropertyValue(currentFrame, currentElement, "display") == "none") continue;
        if (getCssPropertyValue(currentFrame, currentElement, "visibility") == "hidden") continue;

        if (tagToChange.toLowerCase() == "input") {
            currentElement.style.width = "auto";
            currentElement.style.height = "auto";
        }

        currentElement.style.cssText += ";font-size:" + fontSizeValue + getFontSizeType(currentFontSize) + " !important;";
    }
}

function getFontSizeType(fontSize) {
    if (fontSize.length - 2 <= 0) return "px";
    return fontSize.substr(fontSize.length - 2, 2);
}

function getCssPropertyValue(currentFrame, currentElement, cssPropertyName) {
    if (currentFrame.defaultView != null) {
        if (cssPropertyName == "fontSize") cssPropertyName = "font-size";
    }

    if (currentFrame.defaultView != null) return currentFrame.defaultView.getComputedStyle(currentElement, null).getPropertyValue(cssPropertyName);
    return currentFontSize = currentElement.currentStyle[cssPropertyName];
}

function getFramesArrayID(framesID) {
    return ("self|" + framesID).split("|");
}
