/*#######################################*/
/*			Beta FONT SIZER				 */
/*#######################################*/
window.onload = function() {
	_LSfontSizer.init(null);
}

origSize = new Array();

var _LSfontSizer = {
    contentID: 'resizeFontArea', // 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: '11', // NA - default font size
    maxSize: '24', 	// 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($(fntSizeIncClientID), 'mouseup', function() { _LSfontSizer.init('add'); });
                Event.add($(fntSizeDecClientID), 'mouseup', function() { _LSfontSizer.init('dec'); });
                Event.add($(fntSizeResetClientID), 'mouseup', function() { _LSfontSizer.subSetFunc('get'); });
                if (document.all) {
                    $(fntSizeIncClientID).style.cursor = "hand";
                    $(fntSizeDecClientID).style.cursor = "hand";
                    $(fntSizeResetClientID).style.cursor = "hand";
                } else {
                    $(fntSizeIncClientID).style.cursor = "pointer";
                    $(fntSizeDecClientID).style.cursor = "pointer";
                    $(fntSizeResetClientID).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) {
    if (obj != undefined && obj.parentNode != undefined) {
        
            this.echo += " set(" + obj.parentNode.nodeName + ", " + obj.nodeName + ") ";
        
            this.curSize = getStyle(obj.parentNode, 'font-size');

            if (this.curSize != 'undefined' && (obj.nodeName == "#text" && obj.parentNode.nodeName != "DIV" || obj.parentNode.nodeName == "P")) {
                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" || obj.parentNode.nodeName == "P")) {
            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) {
        if (obj != undefined) {
            this.curSize = getStyle(obj.parentNode, 'font-size');

            if (this.curSize != 'undefined' && (obj.nodeName == "#text" && obj.parentNode.nodeName != "DIV" || obj.parentNode.nodeName == "P")) {
                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) {
        if (obj != undefined) {
            this.curSize = getStyle(obj.parentNode, 'font-size');

            if (this.curSize != 'undefined' && (obj.nodeName == "#text" && obj.parentNode.nodeName != "DIV" || obj.parentNode.nodeName == "P")) {
                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;
        this.echo += " traversing(" + tree.nodeName + ", " + tree.childNodes.length + ") ";
        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);
	}
}