/*#######################################*/
/*			Beta FONT SIZER				 */
/*#######################################*/
window.onload = function() {
	_LSfontSizer.init(null);
}

origSize = new Array();

var _LSfontSizer = {
	contentID:'content',// The outer most element of the text you want to resize
	debug: false,		// Allow alert of tracking values
	enabeled: true,		// Enable the fontsize tool to function single point to disable
	maxChange: 5, 		// Max number of increase/decreases in font size
	changeCnt: 0, 		// Track change counts
	defaultSize: '12',	// NA - default font size
	maxSize: '16',		// NA - max font size
	minSize: '8',		// NA - minimum font size
	curSize: null,		// loop container for current size and manipulation
	origSizeCnt: 0,		// Track the item change count for reset value mapping
	echo: '',			// debug value outputs
	activeFunc: null,	// Store the active function that was called
	init: function(call){
			this.echo='';
			this.activeFunc = call;
			if(this.activeFunc == null) { // Setup Listeners onload
				try {
					Event.add($('fntSizeInc'),'mouseup',function() { _LSfontSizer.init('add'); });
					Event.add($('fntSizeDec'),'mouseup',function() { _LSfontSizer.init('dec'); });
					Event.add($('fntSizeReset'),'mouseup',function() { _LSfontSizer.subSetFunc('get'); });
					if(document.all) {
						$('fntSizeInc').style.cursor = "hand";
						$('fntSizeDec').style.cursor = "hand";
						$('fntSizeReset').style.cursor = "hand";
					} else {
						$('fntSizeInc').style.cursor = "pointer";
						$('fntSizeDec').style.cursor = "pointer";
						$('fntSizeReset').style.cursor = "pointer";
					}
				} catch(e) { 
					//do nothing since the fontSizer interface is not present
				}
				//return; //End
			}
			
			if(this.activeFunc=='add') {
				if(this.changeCnt+1>this.maxChange)
					this.enabeled = false;
				else {
					this.changeCnt++; this.enabeled = true;
				}
			} else if (this.activeFunc=='dec') {
				if(this.changeCnt-1<(0-this.maxChange))
					this.enabeled = false;
				else {
					this.changeCnt--; this.enabeled = true;
				}
			}
			if(this.enabeled) {
				bodyObjs = $(this.contentID).childNodes;
				for(var i=0;i<bodyObjs.length;i++){
					if(bodyObjs[i].nodeType == 1)  // IE 
						this.traverseTree(bodyObjs[i])
					// END nodeType
				} // END for loop
				if(this.debug) alert(this.echo);
			}
		},
	set: function(obj) {
			this.curSize = getStyle(obj.parentNode,'font-size');
			if( this.curSize != 'undefined' && obj.nodeName=="#text" && obj.parentNode.nodeName != "DIV") {
				origSize.push(this.curSize);
				this.echo += "\n\rSET DEFAULT = " + this.curSize;
			}
		},
	get: function(obj) {
			this.curSize = origSize[this.origSizeCnt];
			if( this.curSize != 'undefined' && obj.nodeName=="#text" && obj.parentNode.nodeName != "DIV") {
					var newSize = parseInt((this.curSize.substring(0,this.curSize.length-2))) + 1;
					obj.parentNode.style.fontSize = newSize + this.curSize.substring(this.curSize.length-2,this.curSize.length);
					this.echo += "\n\rRESET TO DEFAULT:: "+this.curSize+" >> Parent = "+obj.parentNode.nodeName+" >> This = "+obj.nodeName;//+" :: nodeValue "+obj.nodeValue;
					this.origSizeCnt++;
			}
	},
	add: function(obj) {
			this.curSize = getStyle(obj.parentNode,'font-size');
			if( this.curSize != 'undefined' && obj.nodeName=="#text" && obj.parentNode.nodeName != "DIV") {
					var newSize = parseInt((this.curSize.substring(0,this.curSize.length-2))) + 1;
					obj.parentNode.style.fontSize = newSize + this.curSize.substring(this.curSize.length-2,this.curSize.length);
					this.echo += "\n\rADD:: "+this.curSize+" >> Parent = "+obj.parentNode.nodeName+" >> This = "+obj.nodeName;//+" :: nodeValue "+obj.nodeValue;
					this.origSizeCnt++;
			}
		},
	dec: function(obj) {
			this.curSize = getStyle(obj.parentNode,'font-size');
			if( this.curSize != 'undefined' && obj.nodeName=="#text" && obj.parentNode.nodeName != "DIV") {
					var newSize = parseInt((this.curSize.substring(0,this.curSize.length-2))) - 1;
					obj.parentNode.style.fontSize = newSize + this.curSize.substring(this.curSize.length-2,this.curSize.length);
					this.echo += "\n\rDEC:: "+this.curSize+" >> Parent = "+obj.parentNode.nodeName+" >> This = "+obj.nodeName;//+" :: nodeValue "+obj.nodeValue;
					this.origSizeCnt++;
			}
		},
	traverseTree: function(tree){
			var cnt = null;
			if(tree.hasChildNodes() && tree.nodeName != "P") { // Don't process paragraph sub elements
				var nodes = tree.childNodes.length;
				for(var i=0; i<tree.childNodes.length; i++) {
					if(tree.childNodes[i].nodeName != "A"){
						this.traverseTree(tree.childNodes[i]);
						cnt++;
					}
					this.echo += " :: "+cnt+" :: ";
				} 
			} else if (tree.nodeName == "P") { // Only pass the outer paragraph tag once to limit is change occurance to one
				if(this.activeFunc == 'add') 
					this.add(tree.childNodes[0]);
				else if (this.activeFunc == 'dec')
					this.dec(tree.childNodes[0]);
				else if (this.activeFunc == 'get')
					this.get(tree.childNodes[0]);
				else 
					this.set(tree.childNodes[0]);
			} else {
				if(this.activeFunc == 'add') 
					this.add(tree);
				else if (this.activeFunc == 'dec')
					this.dec(tree);
				else if (this.activeFunc == 'get')
					this.get(tree);
				else 
					this.set(tree);
			}
		},
		subSetFunc: function(val) {
			this.origSizeCnt = 0;
			this.echo += "\n\rOrigSize Length = "+ origSize.length;
			for(i=0;i<origSize.length;i++) {
				this.echo += "\n\rOrigSize["+ i + "] = "+origSize[i];
			}
			this.enabeled = true;
			this.changeCnt = 0;
			this.init(val);
		}
}

function $(element) {
	var elements = new Array();
	for (var i=0;i<arguments.length;i++) {
		var element = arguments[i];
		if (typeof element == 'string') element = document.getElementById(element);
		if (arguments.length == 1) return element;
		elements.push(element);
	}
	return elements;
}

function getStyle(el,styleProp)
{
	var x = el;
	if (x.currentStyle)
		var y = x.currentStyle['fontSize'];
	else if (window.getComputedStyle)
		try { var y = document.defaultView.getComputedStyle(x,null).getPropertyValue('font-size'); }
		catch(e) {
			//donothing
		}
	return y;
}

var Event = {
	add: function(obj,type,fn) {
		if (obj.attachEvent) {
			obj['e'+type+fn] = fn;
			obj[type+fn] = function() { obj['e'+type+fn](window.event); }
			obj.attachEvent('on'+type,obj[type+fn]);
		} else
		obj.addEventListener(type,fn,false);
	},
	remove: function(obj,type,fn) {
		if (obj.detachEvent) {
			obj.detachEvent('on'+type,obj[type+fn]);
			obj[type+fn] = null;
		} else
		obj.removeEventListener(type,fn,false);
	}
}