var TWorx_fontSizerDX = {
sizeUnit: "px",
defaultSize: 13,
maxSize: 16,
minSize: 10,
sizerDivId: 'sizer',
queryName: "TWorx_fsz",
cookieLifetime: 180,
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;
}
},
addHandlers: function () {
var sizerEl = document.getElementById( TWorx_fontSizerDX.sizerDivId );
if ( !TWorx_fontSizerDX.sizeIncrement ) { TWorx_fontSizerDX.getSizeIncrement(); }
var links = sizerEl.getElementsByTagName('span');
for (var i=0; links[i]; i++) {
if ( TWorx_hasClass( links[i], 'increase') ) {
links[i].onclick = function () { TWorx_fontSizerDX.adjust( TWorx_fontSizerDX.sizeIncrement ); return false }
} else if ( TWorx_hasClass( links[i], 'decrease') ) {
links[i].onclick = function () { TWorx_fontSizerDX.adjust( -TWorx_fontSizerDX.sizeIncrement ); return false }
} else if ( TWorx_hasClass( links[i], 'reset')  ) {
links[i].onclick = function () { TWorx_fontSizerDX.reset(); return false }
}
}
if (sizerEl) sizerEl.style.display = "block";
},
getSizeIncrement: function () {
var val = 10;
switch ( TWorx_fontSizerDX.sizeUnit ) {
case 'px' : val = 10; break;
case 'em' : val = .2; break;
case '%' : val = 10; break;
}
TWorx_fontSizerDX.sizeIncrement = val;
},
init: function() {
if ( !document.getElementById || !document.getElementsByTagName || !document.createElement ) return;
var _this = TWorx_fontSizerDX;
if ( !_this.doControlsSetup ) {
_this.addHandlers();
} else {
_this.setupControls();
}
var size;
size = TWorx_getValueFromQueryString( _this.queryName );
if ( isNaN( parseFloat(size) ) || size > _this.maxSize || size < _this.minSize ) {
size = TWorx_getCookie("fontSize");
if ( isNaN( parseFloat(size) ) || size > _this.maxSize || size < _this.minSize ) {
size = _this.defaultSize;
}
} 
if (_this.adjustList.length == 0) _this.set(  _this.defaultSize, _this.minSize, _this.maxSize, ['body', 'td'] ); 
_this.curSize = _this.defaultSize;
if ( size != _this.defaultSize ) _this.adjust( size - _this.defaultSize );
},
adjust: function(n) {
if ( !this.curSize ) return; 
var alist, size, list, i, j;
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;
alist = this.adjustList;
for (i=0; alist[i]; i++) {
size = this.curSize * alist[i]['ratio'];
size = Math.max(alist[i]['min'], size); size = Math.min(alist[i]['max'], size);
list = TWorx_getElementsBySelector( alist[i]['sel'] );
for (j=0; list[j]; j++) { list[j].style.fontSize = size + this.sizeUnit; }
}
TWorx_setCookie( "fontSize", this.curSize, this.cookieLifetime, "/" );
},
reset: function() {
if ( !this.curSize ) return; 
var alist = this.adjustList, list, i, j;
for (i=0; alist[i]; i++) {
list = TWorx_getElementsBySelector( alist[i]['sel'] );
for (j=0; list[j]; j++) { 
list[j].style.fontSize = ''; 
} 
}
this.curSize = this.defaultSize;
TWorx_deleteCookie("fontSize", "/");
}
};
function TWorx_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 ) {
bits = tokens[i].split('#'); 
var el = document.getElementById( bits[1] );
if (!el) return []; 
if ( bits[0] ) {
if ( el.tagName.toLowerCase() != bits[0].toLowerCase() ) return [];
}
for (j=0; nodeList[j]; j++) {
if ( nodeList[j] == document || TWorx_contained(el, nodeList[j]) ) 
nodeList = [el];
else return [];
}
} else if ( tokens[i].indexOf('.') != -1 ) {
bits = tokens[i].split('.'); col = [];
for (j=0; nodeList[j]; j++) {
els = TWorx_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]); }
} else {
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 TWorx_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;
};
function TWorx_getValueFromQueryString(name, obj) {
obj = obj? obj: window.location; 
if (obj.search && obj.search.indexOf(name != -1) ) {
var pairs = obj.search.slice(1).split("&");
var set;
for (var i=0; pairs[i]; i++) {
set = pairs[i].split("="); 
if ( set[0] == name && set[1] ) {
return set[1];
}
}
}
return '';
}
function TWorx_hasClass(el, cl) {
var re = new RegExp("\\b" + cl + "\\b", "i");
if ( re.test( el.className ) ) {
return true;
}
return false;
}
function TWorx_contained(oNode, oCont) {
if (!oNode) return; 
while ( oNode = oNode.parentNode ) if ( oNode == oCont ) return true;
return false;
};
if (!Array.prototype.push) {
Array.prototype.push =  function() {
for (var i=0; arguments[i]; i++) this[this.length] = arguments[i];
return this[this.length-1];
}
};
String.prototype.normalize = function() {
var re = /\s\s+/g;
return this.trim().replace(re, " ");
};
String.prototype.trim = function() {
var re = /^\s+|\s+$/g;
return this.replace(re, "");
};
function addLoadEvent(func) {
var oldonload = window.onload;
if (typeof window.onload != 'function') {
window.onload = function() { func(); }
} else {
window.onload = function() {
if (oldonload) {
oldonload();
}
func();
}
}
}
function TWorx_setCookie(name,value,days,path,domain,secure) {
var expires, date;
if (typeof days == "number") {
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 TWorx_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 TWorx_deleteCookie(name,path,domain) {
if ( TWorx_getCookie(name) ) {
document.cookie = name + "=" +
((path) ? "; path=" + path : "") +
((domain) ? "; domain=" + domain : "") +
"; expires=Thu, 01-Jan-70 00:00:01 GMT";
}
}
TWorx_fontSizerDX.setDefaults( "px", 13, 10, 16, ['body', 'td', 'html', 'ol', 'ul', 'li', 'th', 'div', 'p', 'a', 'span'] );
addLoadEvent( TWorx_fontSizerDX.init );
