var pageWideModes = new Array(980, 1080, 1120, 1300, 1380, 1540, 3000);
var pageFontMode = 0;

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 getCSSValue(obj_id, css_name) {
    var obj = obj_id;
    var js_name = css_name.replace(/\-(\w)/g, function(all, letter){ return letter.toUpperCase(); });
    var css_name = css_name.replace(/([A-Z])/g, "-$1" ).toLowerCase();

    var prop = (obj.currentStyle ? obj.currentStyle[js_name] : obj.ownerDocument.defaultView.getComputedStyle(obj,"").getPropertyValue(css_name));
    if (prop.match(/^rgb/g, '')) prop = "#"+convertRGB(prop);
    prop = prop.replace(/(\d+)px/g, "$1");
    prop = parseInt(prop) || prop;
    return prop;
}

function setCSSValue(obj_id, css_name, css_value) {
    var obj = obj_id;
    if (typeof obj.style == 'undefined') return false;
    var js_name = css_name.replace(/\-(\w)/g, function(all, letter){ return letter.toUpperCase(); });
    if (obj.style[js_name] != 'undefined') {
        obj.style[js_name] = css_value;
        return true;
    }
    return false;
}

function getScriptTag() {
    var m= window.location.href.match(/\/([^\/]*?)\.php/);
    if (!m) var m= window.location.href.match(/\/([^\/\.]+)\//);
    if (!m) return "index";
    return m[1];
}

function getElsByClass(klass, tag, ctx) {
    var result = [], list;
    var re = new RegExp("\\b" + klass + "\\b", "i");
    ctx = ctx ? ctx : document;
    if (document.getElementsByTagName) {
        if (!tag || tag == "*") { // for ie5
            list = ctx.all ? ctx.all : ctx.getElementsByTagName("*");
        } else {
            list = ctx.getElementsByTagName(tag);
        }
        for (var i=0; i<list.length; i++) {
            if (re.test(list[i].className)) result.push(list[i]);
        }
    }
    return result;
};

function changeWideMode(mod) {
    if (document.getElementById("middle")) return; // main site
    var cont = document.getElementById("content-wrap");
    if (!cont) return false;
    mod = parseInt(mod);
    if (!parseInt(mod)) mod = 1;

    var cur_width = parseInt(cont.clientWidth);
    var new_width = 0;

    for (var i=0; i<pageWideModes.length; i++) {
        if (cur_width == pageWideModes[i]) {
            new_width = (i + mod >= pageWideModes.length) ? pageWideModes[0] : ((i + mod < 0) ? pageWideModes[pageWideModes.length-1] : pageWideModes[i+mod]);
            break;
        }
    }

    if (!new_width || new_width < 0) new_width = pageWideModes[(mod > 0 ? 0 : pageWideModes.length-2)];

    createCookie("widemode", new_width, 365);
    restoreWideMode();
}

function toggleWideMode() {
    return changeWideMode(1);
}

function restoreWideMode() {
    var ck = readCookie("widemode");
    if (!ck) ck = 980;
    var cont = document.getElementById("content-wrap");
    var sidebar = document.getElementById("sidebar");
    var sidebar_hidden = false;
    var screen_width = window.innerWidth || self.innerWidth || (document.documentElement && document.documentElement.clientWidth) || document.body.clientWidth;

    if (sidebar) {
        if (ck < 1300) {
            var scr = getScriptTag();
            if (scr != 'forum' && scr != 'index' && scr != 'forumdisplay' && scr != 'memberlist') {
                sidebar_hidden = true;
            }
        }
        sidebar.style.display = (sidebar_hidden ? "none" : "");
    }

    if (ck > screen_width) {
        cont.style.width = "99%";
    } else {
        cont.style.width = ck+"px";
    }
    restoreFontMode();
}

function changeFontMode(mod, exact) {
    mod = parseInt(mod);
    if (!parseInt(mod)) mod = 0;
    var new_mod = parseInt(mod) + (exact ? 0 : parseInt(pageFontMode));
    if (new_mod < -10 || new_mod > 10) new_mod = 0;

    for (var z=0; z < 2; z++) {
        var elms = getElsByClass(z ?'post' : 'post_message');


        for (var i=0; i < elms.length; i++) {
            if (elms[i] && typeof elms[i].style != 'undefined') {
                var fsize = getCSSValue(elms[i], 'font-size');
                var fheight = getCSSValue(elms[i], 'line-height');
                var pmode = (fsize >= 32) ? true : false;
                if (typeof elms[i].origSize == 'undefined') elms[i].origSize = fsize;
                if (typeof elms[i].origLHeight == 'undefined') elms[i].origLHeight = fheight;

                var nsize = (elms[i].origSize + (pmode ? new_mod * 8 : new_mod));
                if (nsize < 0 || nsize > 200) nsize = elms[i].origSize;
                nsize = nsize + (pmode ? "%" : "px");
                setCSSValue(elms[i], 'font-size', nsize);

                var nheight = (elms[i].origLHeight + (pmode ? new_mod * 8 : new_mod));
                if (nheight < 0 || nheight > 200) nheight = elms[i].origLHeight;
                nheight = nheight + (pmode ? "%" : "px");
                setCSSValue(elms[i], 'line-height', nheight);
            }
        }
    }
    pageFontMode = new_mod;
    createCookie("fontmode", pageFontMode);
}

function restoreFontMode() {
    var fm = readCookie("fontmode");
    if (!fm) fm = 0;
    pageFontMode = fm;
    if (pageFontMode) {
        changeFontMode(pageFontMode, true);
    }
}
