
var FontSizerTool = {
	sizeUnit : "px",
	defaultSize : 14,
	maxSize : 18,
	minSize : 12,
	queryName : "dw_fsz",
	queryNum : false,
	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 () {
		this.ready = true;
		if (!document.getElementById || !document.getElementsByTagName || !FontSizerTool.ready)
			return;
		var size,
		sizerEl,
		i;
		size = getValueFromQueryString(this.queryName, this.queryNum);
		if (isNaN(parseFloat(size)) || size > this.maxSize || size < this.minSize) {
			size = getCookie("fontSize");
			if (isNaN(parseFloat(size)) || size > this.maxSize || size < this.minSize) {
				size = this.defaultSize;
			}
		}
		this.curSize = this.defaultSize;
		sizerEl = document.getElementById('sizer');
		if (sizerEl)
			sizerEl.style.display = "block";
		if (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) {
		if (!this.curSize || !FontSizerTool.ready)
			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 = dw_getElementsBySelector(alist[i]['sel']);
			for (j = 0; list[j]; j++) {
				if(list[j].tagName != 'H2' && list[j].tagName != 'h2')
					list[j].style.fontSize = size + this.sizeUnit;
			}
		}
		setCookie("fontSize", this.curSize, 180, "/");
	},
	reset : function () {
		if (!this.curSize || !FontSizerTool.ready)
			return;
		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++) {
				list[j].style.fontSize = '';
			}
		}
		this.curSize = this.defaultSize;
		deleteCookie("fontSize", "/");
	}
};
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) {
			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 || dw_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 = 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]);
			}
		} 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 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;
};
function getValueFromQueryString(varName, bReturn) {
	var val = "";
	if (window.location.search) {
		var qStr = window.location.search.slice(1);
		var ar = qStr.split("&");
		var get = [],
		ar2;
		for (var i = 0; ar[i]; i++) {
			if (ar[i].indexOf("=") != -1) {
				ar2 = ar[i].split("=");
				get[ar2[0]] = ar2[1];
			}
		}
		val = get[varName];
		if (!val && bReturn) {
			val = qStr;
		}
	}
	return val;
};
function dw_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, "");
};
 
