//BEGIN FONT SIZER

//setCookie( "fontSize", this.curSize, -1, "/" );
function setCookie(name, value, days, path, domain, secure) {
	var expires = "";
	if ((typeof days == "number") && (days != -1)) {
		var date = new Date();
		date.setTime(date.getTime() + (days*24*60*60*1000));
		expires = date.toGMTString();
	}
	document.cookie = name + "=" + escape(value) +
		((expires) ? "; expires=" + expires : "") +
		((path) ? "; path=" + path : "") +
		((domain) ? "; domain=" + domain : "") +
		((secure) ? "; secure" : "");
}

function getCookie(name) {
	var nameq = name + "=";
	var c_ar = document.cookie.split(';');
	for (var i=0; i < c_ar.length; i++) {
		var c = c_ar[i];
		while (c.charAt(0)==' ') {
			c = c.substring(1, c.length);
		}
		if (c.indexOf(nameq) == 0) {
			return unescape(c.substring(nameq.length, c.length));
		}
	}
	return null;
}

function deleteCookie(name, path, domain) {
	if (getCookie(name)) {
		document.cookie = name + "=" +
			((path) ? "; path=" + path : "") +
			((domain) ? "; domain=" + domain : "") +
			"; expires=Thu, 01-Jan-70 00:00:01 GMT";
	}
}

var dw_fontSizerDX = {
    sizeUnit:    "px",
    defaultSize: 14,
    maxSize:     20,
    minSize:     10,
    adjustList: [], 

    setDefaults: function(unit, dflt, mn, mx, sels) {
        this.sizeUnit = unit;       this.defaultSize = dflt;
        this.maxSize = mx;          this.minSize = mn;
        if (sels) this.set(dflt, mn, mx, sels);
    },

    set: function (dflt, mn, mx, sels) { 
        var ln = this.adjustList.length;        
        for (var i=0; sels[i]; i++) {
            this.adjustList[ln+i] = [];
            this.adjustList[ln+i]["sel"]  = sels[i];
            this.adjustList[ln+i]["dflt"] = dflt;
            this.adjustList[ln+i]["min"]   = mn || this.minSize;
            this.adjustList[ln+i]["max"]   = mx || this.maxSize;
            this.adjustList[ln+i]["ratio"] = this.adjustList[ln+i]["dflt"] / this.defaultSize;
        }
    },

    init: function() {
        if ( !document.getElementById || !document.getElementsByTagName ) return;
        var size, sizerEl, i;
        size = window.location.search? window.location.search.slice(1): getCookie("fontSize");
        size = !isNaN( parseFloat(size) )? parseFloat(size): this.defaultSize;
        // in case default unit changed or size passed in url out of range
        if ( size > this.maxSize || size < this.minSize ) size = this.defaultSize;
        this.curSize = this.defaultSize;  // create curSize property to use in calculations 
        sizerEl = document.getElementById('sizer');
        if (sizerEl) sizerEl.style.display = "block";
        // if neither set nor setDefaults populates adjustList, apply sizes to body and td's
        if (this.adjustList && this.adjustList.length == 0) {
            this.setDefaults( this.sizeUnit, this.defaultSize, this.minSize, this.maxSize, ['body', 'td'] );
        }
        if ( size != this.defaultSize ) {
    			this.adjust( size - this.defaultSize );
    		}
    },

    adjust: function(n) {
        var viewTextSize = document.getElementById('viewTextSize');
        //MAT: MODIFIED
        if (ctaID != -1) clearTimeout(ctaID);
        //MAT: end
        if ( !this.curSize ) return; // set in init
        var alist, size, list, i, j;
        // check against max/minSize
        if ( n > 0 ) {
            if ( this.curSize + n > this.maxSize ) n = this.maxSize - this.curSize;
        } else if ( n < 0 ) {
            if ( this.curSize + n < this.minSize ) n = this.minSize - this.curSize;
        }
        if ( n == 0 ) return;
        this.curSize += n;
        // loop through adjustList, calculating size, checking max/min
        alist = this.adjustList;
        for (i=0; alist[i]; i++) {
            size = this.curSize * alist[i]['ratio']; // maintain proportion 
            size = Math.max(alist[i]['min'], size);
            size = Math.min(alist[i]['max'], size);
            list = dw_getElementsBySelector( alist[i]['sel'] );
            for (j=0; list[j]; j++) {
				list[j].style.fontSize = size + this.sizeUnit;
            }
        }
        setCookie( "fontSize", this.curSize, -1, "/" );
        //MAT: MODIFIED
        
        viewTextSize.style.fontSize = "medium";
        currTextSize = viewTextSize.offsetHeight;

        if (ctaID != -1) checkTextAdjust();
        //MAT: end
        
       // var submitstring = "/htbin/redirects/global/mrl/redirect.pl?url=/mrl/research/ts.html";
	//	var submitbox = document.getElementById('submitbox');
	//	if (submitbox && submitbox.contentDocument) {submitbox.contentDocument.location.replace(submitstring);}
	//	else if (submitbox) {submitbox.src = submitstring;}
    },

    reset: function() {
        var alist = this.adjustList, list, i, j;
        for (i=0; alist[i]; i++) {
            list = dw_getElementsBySelector( alist[i]['sel'] );
            for (j=0; list[j]; j++) { 
                // Reset adjustList elements to their default sizes
                //list[j].style.fontSize = alist[i]['dflt'] + this.sizeUnit;
                list[j].style.fontSize = '';  // restores original font size
            } 
        }
        this.curSize = this.defaultSize;
        deleteCookie("fontSize", "/");
        
     //   var submitstring = "/htbin/redirects/global/mrl/redirect.pl?url=/mrl/research/ts.html";
	//	var submitbox = document.getElementById('submitbox');
	//	if (submitbox && submitbox.contentDocument) {submitbox.contentDocument.location.replace(submitstring);}
	//	else if (submitbox) {submitbox.src = submitstring;}
    }

}

function dw_getElementsBySelector(selector) {
    if (!document.getElementsByTagName) return [];
    var nodeList = [document], tokens, bits, list, col, els, i, j, k;
    selector = selector.normalize();
    tokens = selector.split(' ');
    for (i=0; tokens[i]; i++) {
        if ( tokens[i].indexOf('#') != -1 ) {  // id
            bits = tokens[i].split('#'); 
            var el = document.getElementById( bits[1] );
            if (!el) return []; 
            if ( bits[0] ) {  // check tag
                if ( el.tagName.toLowerCase() != bits[0].toLowerCase() ) return [];
            }
            for (j=0; nodeList[j]; j++) {  // check containment
                if ( nodeList[j] == document || dw_contained(el, nodeList[j]) ) 
                    nodeList = [el];
                else return [];
            }
            continue; 
        }
        else if ( tokens[i].indexOf('.') != -1 ) {  // class
            bits = tokens[i].split('.'); col = [];
            for (j=0; nodeList[j]; j++) {
                els = dw_getElementsByClassName( bits[1], bits[0], nodeList[j] );
                for (k=0; els[k]; k++) { col[col.length] = els[k]; }
            }
            nodeList = [];
            for (j=0; col[j]; j++) { nodeList.push(col[j]); }
            continue; 
        }
        else {  // element 
            els = []; 
            for (j = 0; nodeList[j]; j++) {
                list = nodeList[j].getElementsByTagName(tokens[i]);
                for (k = 0; list[k]; k++) { els.push(list[k]); }
            }
            nodeList = els;
        }
    }
    return nodeList;
}

function dw_getElementsByClassName(sClass, sTag, oCont) {
	var result = [], list, i;
	var re = new RegExp("\\b" + sClass + "\\b", "i");
	oCont = oCont? oCont: document;
	if (document.getElementsByTagName) {
		if ( !sTag || sTag == "*" ) {
			list = oCont.all ? oCont.all : oCont.getElementsByTagName("*");
		}
		else {
			list = oCont.getElementsByTagName(sTag);
		}
		for (i=0; list[i]; i++) {
			if ( re.test( list[i].className ) ) {
				result.push( list[i] );
			}
		}
	}
	return result;
}

// returns true of oNode is contained by oCont (container)
function dw_contained(oNode, oCont) {
	if (!oNode) {
		return; // in case alt-tab away while hovering (prevent error)
	}
	while ( oNode = oNode.parentNode ) {
		if ( oNode == oCont ) {
			return true;
		}
	}
	return false;
}

if (!Array.prototype.push) {  // ie5.0
	Array.prototype.push =  function() {
		for (var i=0; arguments[i]; i++) {
			this[this.length] = arguments[i];
		}
		return this[this.length-1]; // return last value appended
	}
}

String.prototype.normalize = function() {
	var re = /\s\s+/g;
	return this.trim().replace(re, " ");
}

String.prototype.trim = function() {
	var re = /^\s+|\s+$/;
	return this.replace(re, "");
}

// setDefaults arguments: size unit, default size, minimum, maximum
// optional array of elements or selectors to apply these defaults to
//dw_fontSizerDX.setDefaults("px", 14, 9, 32, ['div#content'] );
//dw_fontSizerDX.setDefaults("em", 1, 1, 1, ['div#viewTextSize'] );
dw_fontSizerDX.setDefaults("px",12,8,20,['td','tr','body','table']);

// set arguments: default size, minimum, maximum
// array of elements or selectors to apply these settings to
//dw_fontSizerDX.set(12, 9, 18, ['div.sidebar'] );
dw_fontSizerDX.set(12, 12, 12, ['.navSection'] );
dw_fontSizerDX.set(12, 8, 20, ['.navSubsection','.navItem1','.navItem1off','.navItem1on','.navItem2','.navItem2off','.navItem2on','.navItem3','.navItem3off','.navItem3on','.navSubsection','.navbgMain','.navItem1selected','.navItem2selected','.navItem3selected']);
dw_fontSizerDX.set(12, 6, 18, ['.ticker','.homeNewsList','.homeFeatureList']);

//save to a cookie for page to page
var ctaID = -1;
var vtsStyle = "font-size: medium; visibility: hidden; position: absolute; left: -50px; top: -50px;";
document.write('<DIV ID="viewTextSize" style="'+vtsStyle+'">M</DIV>');

function showTextSizer() {
  var viewTextSize = document.getElementById('viewTextSize');
	dw_fontSizerDX.init();
	autoStart();
	if (getCookie("fontSize") || (viewTextSize.offsetHeight <= 21) || (viewTextSize.offsetHeight == 19)) {
		currTextSize = viewTextSize.offsetHeight;
		//document.write('<div id="sizer" class="sidebarCopy"><table><tr><td valign="top" width="20"><img src="/site_images/textsize.gif" width="20" height="16" alt="Text Size" border="0" style="padding-right: 2px"/></td><td valign="middle" width="11"><a href="javascript:dw_fontSizerDX.adjust(1);" title="Increase Text Size"><img src="/site_images/increase_textsize.gif" width="11" height="11" alt="Increase Text Size" border="0"/></a></td><td class="sidebarCopy"><a href="javascript:dw_fontSizerDX.reset();" title="Reset Text Size" class="linkNotUnderlined">Text Resize</a></td><td valign="middle" width="11"><a href="javascript:dw_fontSizerDX.adjust(-1);" title="Decrease Text Size"><img src="/site_images/decrease_textsize.gif" width="11" height="11" alt="Decrease Text Size" border="0"/></a></td></tr></table></div>');
		document.write(docText);
		MM_showHideLayers('sizer', '', 'show');
		checkTextAdjust();
	}
	else {
		dw_fontSizerDX.reset();
	}
}


function checkTextAdjust() {
  var viewTextSize = document.getElementById('viewTextSize');
	if ((viewTextSize.offsetHeight < currTextSize-1) || (viewTextSize.offsetHeight > currTextSize+1)) {
		MM_showHideLayers('sizer', '', 'hide');
		dw_fontSizerDX.reset();
	}
	else {
		ctaID = setTimeout('checkTextAdjust()',1000);	
	}
}

//END FONT SIZER

//TEMPORARY FONT SIZER TESTER
function autoStart() {
	//this line should be copied back into showTextSizer
	//document.write('<div id="sizer" class="sidebarCopy"><table><tr><td width="5"><img height="1" alt="" src="/site_images/s.gif" width="1"></td><td valign="top" width="20"><img src="/site_images/textsize.gif" width="20" height="16" alt="Text Size" border="0" style="padding-right: 2px"/></td><td valign="top" width="32"><a href="javascript:dw_fontSizerDX.adjust(2);" title="Increase Text Size"><img src="/site_images/increase_textsize.gif" width="15" height="16" alt="Increase Text Size" border="0"/></a><a href="javascript:dw_fontSizerDX.adjust(-2);" title="Decrease Text Size"><img src="/site_images/decrease_textsize.gif" width="15" height="16" alt="Decrease Text Size" border="0"/></a></td><td class="sidebarCopy"><a href="javascript:dw_fontSizerDX.reset();" title="Reset Text Size" class="linkNotUnderlined">reset</a> text size</td></tr></table></div>');
  if (window.onload)	{
    var loadStr1028 = window.onload.toString();
		var newLoadStr1028 = loadStr1028.substring(loadStr1028.indexOf("{") + 1,loadStr1028.lastIndexOf("}") - 1) + "\r" + ";" + "dw_fontSizerDX.init()";
		window.onload = new Function(newLoadStr1028);
	}
	else {
		//window.onload = showTextSizer;
		window.onload = "dw_fontSizerDX.init();";
	}
}
//autoStart();
//END TESTER
