/*******************************************************
    by Patrick Dent
    Copyright Circleline Design 05/10/2006
    <patrick@circlelinedesign.co.uk>

    JavaScript that changes the style of windows contents to required accessibility settings
    will create a plain text page and allow font resizes
********************************************************/

//note: EDITABLE list of font sizes that JSAccessibilityCurrSize uses
var JSAccessibilitySizeList = new Array('8','10','12','14','16','18','20');

//id prefix to identify control
var ID_STRING = 'AccessibilityToolbar';

//---------------------------------------------START MAIN------------------------------------------------------//

//note: name of the font size cookie name
var JSAccessibilityFontSizeCookieName = 'JSAccessibilityFontSizeCookie';

//note: starting position in the JSAccessibilitySizeList array (before it is stored to a cookie)
var JSAccessibilityInitSize = 3;

//note: current position in the JSAccessibilitySizeList array
var JSAccessibilityCurrSize = 0;

if(JSAccessibilityGetFontSizeCookie() != null) {
    JSAccessibilityCurrSize = parseInt('' + JSAccessibilityGetFontSizeCookie());
} else {//if it does not exist set it to the initial JSAccessibilityInitSize size
    JSAccessibilityCurrSize = JSAccessibilityInitSize;
}

//note: internal variable to hold Node value of valid tags
var JS_NODE_TYPE = null;
if(DOM && !IE) {//mozilla
    if(Node.ELEMENT_NODE) {
        JS_NODE_TYPE = Node.ELEMENT_NODE;
    } else {
        JS_NODE_TYPE = 1;
    }
} else {
    JS_NODE_TYPE = 1;
}

//note: validate browser supports operation
function JSAccessibilityBrowserChk()
{
    if(!DOM) {
        window.alert('Your Browser is out of date and needs Updating!\nTry www.mozilla.org');
        return(false);
    }

    return(true);
}

//note: get the cookies value
function JSAccessibilityGetFontSizeCookie()
{
    return(JSGetCookie(JSAccessibilityFontSizeCookieName));
}

//validate JSAccessibilityCurrSize is NOT out of range
function JSAccessibilityChkCurrSize()
{
    var curr = JSAccessibilityCurrSize;

    if(curr < 0) {
        curr = 0;
    } else if(curr > (JSAccessibilitySizeList.length - 1)) {
        curr = (JSAccessibilitySizeList.length - 1);
    }

    JSAccessibilityCurrSize = curr;
}

//note: decrease the font size
function JSAccessibilityDecreaseFontSize()
{
    if(!JSAccessibilityBrowserChk()) {
        return;
    }

    JSAccessibilityCurrSize -= 1;
    JSAccessibilityChkCurrSize();
    JSAccessibilitySetFont(true);
}

//note: increase the font size
function JSAccessibilityIncreaseFontSize()
{
    if(!JSAccessibilityBrowserChk()) {
        return;
    }

    JSAccessibilityCurrSize += 1;
    JSAccessibilityChkCurrSize();
    JSAccessibilitySetFont(true);
}

//actually set the font size here
function JSAccessibilitySetFont(forceSet)
{
    if(JSAccessibilityGetFontSizeCookie() != null || forceSet == true) {
        if(top.frames.length > 0) {//frames exist
            for(var i = 0; i < top.frames.length; i++) {
                JSAccessibilityWalkDom(top.frames[i].window.document.getElementsByTagName('body')[0]);
            }
        } else {//no frames
            JSAccessibilityWalkDom(window.document.getElementsByTagName('body')[0]);
        }

        JSCreateCookie(JSAccessibilityFontSizeCookieName, JSAccessibilityCurrSize + '', 180, "/");//set cookie

        //handles IE bug
        if(IE) {
            window.location.reload(false);
        }
    }
}

//function to actually walk the DOM tree recursively
//notes:-
//		pass objRef as the DOM element within the HTML page where you want to start
//		pass level as an int, stores current depth within the page Node structure [OPTIONAL]
function JSAccessibilityWalkDom(objRef, level)
{
    //optional argument is 0 by default
    if(level == null || typeof(level) != 'number') {
        level = 1;
    }

    if(objRef) {
        JSAccessibilitySetStyle(objRef);//set root node

        if(objRef.tagName && objRef.nodeType == JS_NODE_TYPE) {
            JSAccessibilitySetStyle(objRef.tagName);
        }

        //start walking the DOM tree
        var i = 0;
        var objRefChild = objRef.childNodes[i];

        while(objRefChild) {
            JSAccessibilityWalkDom(objRefChild, (level + 1));
            i++;
            objRefChild = objRef.childNodes[i];
        }
    }
}

//function to set the required style
//notes:-
//		pass objRef as the DOM element within the HTML page
function JSAccessibilitySetStyle(objRef)
{
    if(objRef.id) {
        if(objRef.id.substring(0, ID_STRING.length) == ID_STRING)
            return;
    }

    if(objRef.style)
        objRef.style.fontSize = JSAccessibilitySizeList[JSAccessibilityCurrSize] + 'px';
}

//note: function to output the control to the page
function JSAccessibilityOutputControl()
{
    document.write('<div id="' + ID_STRING + 'Div" align="right" style="background-color: #FFFFFF; color: #000000; border-style: none; padding: 2px;">' +
                   '     <table id="' + ID_STRING + 'Table" align="right" valign="middle" border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF" bordercolor="#FFFFFF">' +
                   '         <tr id="' + ID_STRING + 'TR" align="center" valign="middle" height="40" bgcolor="#FFFFFF" bordercolor="#000000">' +
                   '             <td id="' + ID_STRING + 'TDLittleA" align="center" valign="middle" height="40" bgcolor="#FFFFFF" bordercolor="#000000" nowrap>' +
                   '                 <a id="' + ID_STRING + 'LittleA" href="JavaScript:JSAccessibilityDecreaseFontSize();" title="Decrease Font Size" style="text-decoration: none; font-family: Arial, Verdana; font-size: small; font-style: normal; font-weight: 100; background-color: #FFFFFF; color: #000000; border-style: none;">&nbsp;&nbsp;&#45;A&nbsp;&nbsp;</a>&nbsp;' +
                   '             </td>' +
                   '             <td id="' + ID_STRING + 'TDBigA" align="center" valign="middle" height="40" bgcolor="#FFFFFF" bordercolor="#000000" nowrap>' +
                   '                 &nbsp;<a id="' + ID_STRING + 'BigA" href="JavaScript:JSAccessibilityIncreaseFontSize();" title="Increase Font Size" style="text-decoration: none; font-family: Arial, Verdana; font-size: large; font-style: normal; font-weight: 900; background-color: #FFFFFF; color: #000000; border-style: none;">&nbsp;&nbsp;A&#43;&nbsp;&nbsp;</a>&nbsp;' +
                   '             </td>' +
                   '             <td id="' + ID_STRING + 'TDRestore" align="center" valign="middle" height="40" bgcolor="#FFFFFF" bordercolor="#000000" nowrap>' +
                   '                 &nbsp;<a id="' + ID_STRING + 'Restore" href="JavaScript:JSAccessibilityRestoreFontSize();" title="Restore the page to its original state" style="text-decoration: none; font-family: Arial, Verdana; font-size: normal; font-style: normal; font-weight: 900; background-color: #FFFFFF; color: #000000; border-style: none;">&nbsp;&nbsp;Reset&nbsp;&nbsp;</a>&nbsp;' +
                   '             </td>' +
                   '         </tr>' +
                   '     </table>' +
                   '</div>');
}

//note:- resets the page
function JSAccessibilityRestoreFontSize()
{
    JSDestroyCookie(JSAccessibilityFontSizeCookieName);

    window.location.reload(true);
}

JSAccessibilityBrowserChk();

//----------------------------------------------END MAIN-------------------------------------------------------//

