﻿var min = 8;
var max = 180;
var cookieName = 'SanaCookie_CurrentFontSize';
var cookieRefreshName = 'SanaCookie_BeforeRefresh';
var increase = 1;
var decrease = 2;
var defaultClick = 3;
var days = 5;

function TextSizeButtonClick(minValue, maxValue, divName, decreasePersents, increasePersents, ClickMode, inCookieName, isStartUp, decreasePoints, increasePoints)
{
    //TO DELETE
    //eraseCookie(cookieName);
    cookieName = inCookieName;
    min = minValue;
    max = maxValue;
    var IsIncrease = false;
    var ChangeSizeByValue = 0;
    RefreshManager(ClickMode);
    var cookieValue = readCookie(cookieName);
    if (cookieValue == null)
    {
        createCookie(cookieName, defaultClick, days)
        cookieValue = readCookie(cookieName);
    }
    createCookie('Sana_decreasePersents', decreasePersents, days)
    createCookie('Sana_increasePersents', increasePersents, days)
    cookieValue = parseInt(cookieValue);
    var fontPoints = 0;
    var simplePercents = 0;
    if (isStartUp == true)
    {
        cookieValue = defaultClick;
    }
    if (cookieValue != ClickMode || isStartUp == true)
    {
        if (ClickMode == increase)
        {
            simplePercents = increasePersents;
            if (cookieValue == defaultClick)
            {
                fontPoints = +increasePoints;
                ChangeSizeByValue = increasePersents - 100;
            }
            else if (cookieValue == decrease)
            {
                fontPoints = decreasePoints + increasePoints;
                ChangeSizeByValue = (100 - decreasePersents) + (increasePersents - 100);
            }
        }
        else if (ClickMode == decrease)
        {
            simplePercents = decreasePersents;
            if (cookieValue == defaultClick)
            {
                fontPoints = (-1) * decreasePoints;
                ChangeSizeByValue = 0 - (100 - decreasePersents);
            }
            else if (cookieValue == increase)
            {
                fontPoints = (-1) * (increasePoints + decreasePoints);
                ChangeSizeByValue = 0 - ((100 - decreasePersents) + (increasePersents - 100));
            }
        }
        else if (ClickMode == defaultClick)
        {
            simplePercents = 100;
            if (cookieValue == increase)
            {
                fontPoints = -increasePoints;
                ChangeSizeByValue = 0 - (increasePersents - 100);
            }
            else if (cookieValue == decrease)
            {
                fontPoints = +decreasePoints;
                ChangeSizeByValue = (100 - decreasePersents);
            }
        }
        else
        {
            return;
        }
        createCookie(cookieName, ClickMode, days)
        var splitedDiv = divName.split(';');
        for (i = 0; i < splitedDiv.length; i = i + 1)
        {
            if (splitedDiv[i] != '')
            {
                var selectedDiv = document.getElementById(splitedDiv[i]);
                if (selectedDiv != null)
                {
                    SetStyle(selectedDiv, ChangeSizeByValue, fontPoints, simplePercents, true)
                    SetStyleToChildrens(selectedDiv, ChangeSizeByValue, fontPoints, simplePercents);
                }
            }
        }
        resize();

    }
}

function SetStyleToChildrens(element, pxPercents, fontPoints, simplePercents)
{
    if (element.hasChildNodes())
    {
        var children = element.childNodes;
        if (children.length != 0)
        {
            for (var i = children.length - 1; i >= 0; i--)
            {
                SetStyle(children[i], pxPercents, fontPoints, simplePercents, false)
                SetStyleToChildrens(children[i], pxPercents, fontPoints, simplePercents);
            }
        }
    }
}
//will refresh page for proportional scale
function RefreshManager(ClickMode)
{
    var refreshState = readCookie(cookieRefreshName);
    if (refreshState == null || refreshState.toString() == 'NaN')
    {
        createCookie(cookieRefreshName, 1, 1);
    }
    else
    {
        refreshState = parseInt(refreshState);
        if (refreshState >= 4)
        {
            Refresh(ClickMode);
        }
        else
        {
            var cookieValue = readCookie(cookieName);
            var allow = true;
            if (cookieValue != null)
            {
                cookieValue = parseInt(cookieValue);
                if (ClickMode == cookieValue)
                {
                    allow = false; //Same btn cliked.Refresh is not needed.
                }
                else if (ClickMode == defaultClick)
                {
                    Refresh(ClickMode);
                }
            }
            if (allow == true)
            {
                refreshState = refreshState + 1;
                createCookie(cookieRefreshName, refreshState, 1);
            }
        }
    }
}

function Refresh(ClickMode)
{
    createCookie(cookieName, ClickMode, days)
    eraseCookie(cookieRefreshName);
    window.location.reload();
}

function SetStyle(element, percents, fontPoints, simplePercents, usePercents)
{
    if (element == null)
    {
        return;
    }

    if (IsElement(element, 'font') && usePercents == false)
    {
        if (IsNotNull(element.size))
        {
            var fontSizeValue = parseInt(element.size);
            fontSizeValue = fontSizeValue + fontPoints;
            element.size = fontSizeValue;
        }
    }
    else
    {
        //increase first node with 
        if (IsNotNull(element.style))
        {
            if (IsNotNull(element.style.fontSize))
            {
                //Сайт наверстан так, что нужно увеличить размер в "%"
                //только первого тега. Если же мы найдем pt, px это ошибка в верстке
                //или был использован html control.
                if (usePercents == true)
                {
                    if (element.style.fontSize.match("%"))
                    {
                        if (element.nodeName.toLowerCase() == 'span')
                        {
                            element.style.fontSize = " ";
                        }
                        else
                        {
                            element.style.fontSize = simplePercents + "%";
                        }
                    }
                }
                else
                {
                    //hack for html editor. Now font points not used in html editor.
                    //we will scale pt and px font size.
                    if (IsElement(element, 'font') || IsElement(element, 'div') || IsElement(element, 'p') || IsElement(element, 'span'))
                    {
                        ScaleFontSizeWithPoints(element, "pt", simplePercents);
                        ScaleFontSizeWithPoints(element, "px", simplePercents);
                    }
                }
            }
        }
    }
}
function IsElement(element, nodeName)
{
    if (element == null || !IsNotNull(element.nodeName))
    {
        return false;
    }
    return element.nodeName.toLowerCase() == nodeName.toLowerCase();
}
function ScaleFontSizeWithPoints(element, points, simplePercents)
{
    if (element.style.fontSize.match(points))
    {
        var parsed = Parse(element.style.fontSize, points);
        element.style.fontSize = GetPersentsOf(parsed, simplePercents) + points;
        //element.style.fontSize = (parsed + fontPoints).toString() + pt;
    }
}
function Parse(fontSize, text)
{
    var knownValue = NaN;
    if (IsNotNull(fontSize))
    {
        var valueToParce = fontSize.replace(text, "");
        knownValue = parseFloat(valueToParce);
    }
    return knownValue;
}

function IsStringContains(input, whatContains)
{
    return input.toString().length != whatContains.toString().replace(".", "").replace(",", "").length;
}

function IsNotNull(value)
{
    return !(value == null || value == NaN || value == 'NaN' || value == " " || value == "");
}

function GetPersentsOf(knownValue, percents)
{
    return ((knownValue * percents) / 100);
}

function createCookie(name, value, days)
{
    if (days)
    {
        var date = new Date();
        date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
        var expires = "; expires=" + date.toGMTString();
    }
    else var expires = "";
    document.cookie = name + "=" + value + expires + "; path=/";
}

function readCookie(name)
{
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for (var i = 0; i < ca.length; i++)
    {
        var c = ca[i];
        while (c.charAt(0) == ' ') c = c.substring(1, c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
    }
    return null;
}

function eraseCookie(name)
{
    createCookie(name, "", -1);
}
