	// Add the resize function to the page load event
	function smt_fontsizeAddEvent(obj, evType, fn){
		if (obj.addEventListener){
			obj.addEventListener(evType, fn, false);
			return true;
		} else if (obj.attachEvent){
			var r = obj.attachEvent("on"+evType, fn);
			return r;
		} else {
			return false;
		}
	}
	// Triggers a resize on page load 
	smt_fontsizeAddEvent(window, 'load', smt_fontsizeInit);
	// Enables/disables buttons
	function smt_fontsizeBtnStatus(btnId,status){
		btnId = "smt_fontsize_" + btnId;
		if(smt_fontsize_boluseimages){
			if(document.getElementById(btnId)){
				document.getElementById(btnId).src=smt_fontsize_theme + "/" + status;
			}
		} else {
			if(document.getElementById(btnId)){
				document.getElementById(btnId).disabled=status;
			}
		}
	}
	// Initialize the page
	function smt_fontsizeInit(){
		// Compute the font sizes for all tags whose style.fontSize is undefined.
		for(var i=0; element = document.getElementsByTagName("*")[i]; i++){
			try{
				element.style.fontSize = smt_fontsizeGetCurrentFontSize(element);
			} catch(err) {
				// can't set fontSize of this element
			}
		}
		if(smt_fontsize_reset){ // If reset, then set the default size and update the cookie value.
			smt_fontsizeIncrement(smt_fontsize_default);
			smt_fontsizeSetCookie(smt_fontsize_default);
			if(smt_fontsize_boluseimages){
				smt_fontsizeBtnStatus('increase',smt_fontsize_increasebtnimgoff);
				smt_fontsizeBtnStatus('decrease',smt_fontsize_decreasebtnimgoff);
			} else {
				smt_fontsizeBtnStatus('increase','');
				smt_fontsizeBtnStatus('decrease','');
			}
		} else { // Set the font to the last saved value (in the cookie.)
			if(smt_fontsizeGetCookie() != ""){
				smt_fontsizeIncrement(smt_fontsizeGetCookie(),true);
			} else { // Cookie doesn't exist. Create it and set the font size.
				smt_fontsizeIncrement(smt_fontsize_default,true);
				smt_fontsizeSetCookie(smt_fontsize_default);
			}
		}
		if(smt_fontsize_boluseimages){
			if(smt_fontsizeGetCookie() == smt_fontsize_max){
				smt_fontsizeBtnStatus('increase',smt_fontsize_increasebtnimgmaxed);
			}
			if(smt_fontsizeGetCookie() == smt_fontsize_min){
				smt_fontsizeBtnStatus('decrease',smt_fontsize_decreasebtnimgmaxed);
			}
		} else {
			if(smt_fontsizeGetCookie() == smt_fontsize_max){
				smt_fontsizeBtnStatus('increase','true');
			}
			if(smt_fontsizeGetCookie() == smt_fontsize_min){
				smt_fontsizeBtnStatus('decrease','true');
			}
		}
	}
	// function to set the value of the cookie.
	function smt_fontsizeSetCookie(value) { 
		var name = smt_fontsize_cookiename;
		if(smt_fontsize_expiredays > 0){
			var expd = new Date();
			expd.setTime(expd.getTime()+(smt_fontsize_expiredays*86400000));
			var curCookie = name + "=" + escape(value) + "; expires=" + expd.toGMTString();
		} else {
			var curCookie = name + "=" + escape(value);
		}
		document.cookie = curCookie;
	}
	// function to get the cookie value.
	function smt_fontsizeGetCookie(){
		var name = smt_fontsize_cookiename;
		if (document.cookie.indexOf(name) != -1) {
			cs=document.cookie.indexOf(name+"=");
			if(cs!=-1){
				cs=cs + name.length+1;
				ce=document.cookie.indexOf(";",cs);
				if(ce==-1) ce=document.cookie.length
				return parseInt(unescape(document.cookie.substring(cs,ce)));
			} else {
				return "";
			}
		} else {
			return "";
		} 
	}
	// A function to compute the current font size as rendered by the browser.
	function smt_fontsizeGetCurrentFontSize(elem){
		var ieFontScale	=	new Array ("10","11","12","14","18","24","30","36","48","60","72");
		if ( elem == null )
			return null;
		
		// if the style isn't defined inline, then ask the browser to compute the current size	
		if ( elem.style.fontSize == "")
		{
			var browserName=navigator.appName; 
			var browserVer=parseInt(navigator.appVersion); 
			if (browserName=="Microsoft Internet Explorer" && browserVer>=4) 
				//font element was deprecated in HTML 4.01
				//IE does not handle the increments well without this
				if(elem.tagName == "FONT"){
					var ieFontIndex = elem.getAttribute("size");
					if(ieFontIndex == "" || ieFontIndex < 0){
						return smt_fontsize_defaultie;
					} else {
						return ieFontScale[ieFontIndex];
					}
				} else {
					return elem.currentStyle.fontSize;
				}
			else
				if(navigator.vendor.indexOf('Apple') != 0){
					return document.defaultView.getComputedStyle(elem, '').getPropertyValue("font-size");
				} else {
					return smt_fontsize_defaultsafari;
				}
		}
		// else return the current fontsize.
		else
		{
			return elem.style.fontSize;
		} 
	}
	// Checks if an element is a child of a filtered node (one that should be resized.)
	function smt_fontsizeParentIsFiltered(elem_temp){
		var elem = elem_temp;
		var classname;
		while ( elem.parentNode != null && elem.parentNode.tagName != "HTML")
		{
			elem = elem.parentNode;
			try
			{
				if ( elem.getAttribute('class') != null )
					classname = elem.getAttribute('class');
				else
					classname = elem.className;
			
				var isResizable = classname.indexOf(smt_fontsize_filter) >= 0;
			
				if (classname == smt_fontsize_filter | isResizable)
					return true;
			} catch(err) {/*alert(elem + ": " + err.description + " ");*/}
		}
	
		return false;
	}
	// Increments the fontsize of an element.
	function smt_fontsizeIncrementElement(elem,size){
		var currentSize;
		var currentVal;
		var currentUnit;
		var unitPattern = /[A-Z]+$/i;
		
		if(smt_fontsize_filter == '' || smt_fontsizeParentIsFiltered(elem) ){
			currentSize = smt_fontsizeGetCurrentFontSize(elem);
			if(currentSize != undefined){
				currentVal = currentSize.substring(0,currentSize.search(unitPattern));
				currentUnit = currentSize.substring(currentSize.search(unitPattern),currentSize.length);
	
				if ( size + parseFloat(currentVal) > 0)
					try {
						elem.style.fontSize = (size + parseFloat(currentVal)) + currentUnit;
					} catch(err) {
						// can't set fontSize of this element
					}
			}
		}
	}
	// Increments the font size of every element on the page by "size."
	// Size can be either +,-,default, or an integer value between the max and min allowed.
	// the dontUpdateCookie flag prevents the function from updating the cookie after the font resize.
	function smt_fontsizeIncrement(size,dontUpdateCookie){
		if( size == "+" )
			size = smt_fontsize_step;	
		else if ( size == "-" )
			size = -smt_fontsize_step;
		else if ( size == "default" ){
			size = -smt_fontsizeGetCookie();
			if(smt_fontsize_boluseimages){
				smt_fontsizeBtnStatus('increase',smt_fontsize_increasebtnimgoff);
				smt_fontsizeBtnStatus('decrease',smt_fontsize_decreasebtnimgoff);
			} else {
				smt_fontsizeBtnStatus('increase','');
				smt_fontsizeBtnStatus('decrease','');
			}
		}
		else
			size = parseInt(size);
			
		if ( dontUpdateCookie == null )
			smt_fontsizeSetCookie( size + smt_fontsizeGetCookie() );
			
		for ( var i=0; element = document.getElementsByTagName("*")[i]; i++ )
			smt_fontsizeIncrementElement(element,size);
		
		if(smt_fontsize_boluseimages){
			if(smt_fontsizeGetCookie() <= smt_fontsize_min){
				smt_fontsizeBtnStatus('decrease',smt_fontsize_decreasebtnimgmaxed);
			}
			if(smt_fontsizeGetCookie() >= smt_fontsize_max){
				smt_fontsizeBtnStatus('increase',smt_fontsize_increasebtnimgmaxed);
			}
		} else {
			if(smt_fontsizeGetCookie() <= smt_fontsize_min){
				smt_fontsizeBtnStatus('decrease','true');
			}
			if(smt_fontsizeGetCookie() >= smt_fontsize_max){
				smt_fontsizeBtnStatus('increase','true');
			}
		}
	}

