

	// Shortcuts
	d = document;	
	function $id(_i) { return d.getElementById(_i); }			
	function $t(_t) { return d.getElementsByTagName(_t); }
		

	BBNCFontResizer =
	{
		_tags: ['div','td','p','a','h1','h2','h3','h4'],
		_ids: ['head-intro','copy','copy1','copy2','copy3','spotlight','news-calendar'],
		_cookie_name: 'BBNCFontBase',
		_cookie_days_to_expire: 365,
		
		
		_elements: [],
		_diff: 0,
		_em_to_px: null,
		
		init: function ()
		{
			this._diff = parseInt(this.get_cookie(this._cookie_name)?this.get_cookie(this._cookie_name):0);
			this.set_em_to_px();
			this.add_elements_from_ids();
			this.set_fsize();
			
			window.setTimeout(function() { BBNCFontResizer.init_sizes(); },300);
		},
		
		add_elements_from_ids: function ()
		{
			for (var _i=0;_i<this._ids.length;_i++)
				{
					if ($id(this._ids[_i]))
						this.add_elements($id(this._ids[_i]));
				}
		},
		
		create_element: function (_t,_d)
		{
			// Creates element and allows passing of object variables
			// 12/1/2007 10:38:45 AM
						
			var _el = d.createElement(_t);
			for (_k in _d)
			{
				if (_k == 'style')
					for (_kk in _d[_k]) _el.style[_kk] = _d.style[_kk];
				else
					_el[_k] = _d[_k];
			}
		
			return(_el);
		},
		

		set_em_to_px: function ()
		{
			// How many px in an em?
			// 12/1/2007 11:02:03 AM
						
			var _div = this.create_element('div',{id:'test',style:{position:'absolute',left:'1em',top:'1em',borderWidth:'0',visibility:'hidden'}});
			$t('body')[0].appendChild(_div);
			this._em_to_px = _div.offsetLeft;
			$t('body')[0].removeChild(_div);
		},
		

		get_computed_style: function (_el)
		{
			// Get computed style
			// 12/1/2007 11:38:59 AM
						
			if (d.defaultView && d.defaultView.getComputedStyle)
				return d.defaultView.getComputedStyle(_el,'');
							
			else if (_el.currentStyle)
				return _el.currentStyle;
						
			else
				return _el.style;
		},
		
		convert_font_sizes: function (_v)
		{
			// Converts font sizes
			// 01/09/2008 2:35:31 PM
			
			var _in_px = null;
			var _in_pt = null;
			var _in_em = null;
						
			if (_v.match(/px/i))
				{
					_in_px = parseInt(_v.split('px')[0]);
					_in_pt = parseInt(_in_px / 1.3333);
					_in_em = parseInt(_in_px / this._em_to_px);
				}
			else if (_v.match(/em/i))
				{
					_in_em = parseInt(_v.split('em')[0]);
					_in_px = parseInt(_in_em * this._em_to_px);
					_in_pt = parseInt(_in_px / 1.3333);
				}
			else if (_v.match(/pt/i))
				{
					_in_pt = parseInt(_v.split('pt')[0]);
					_in_px = parseInt(_in_pt * 1.3333);
					_in_em = parseInt(_in_px / this._em_to_px);
				}
		
			return { px:_in_px, pt:_in_pt, em:_in_em };
		},

		set_fsize: function ()
		{
			var _els = this._elements;
		
			for (var _i=0;_i<_els.length;_i++)
			{
				var _el = _els[_i];
				var _style = this.get_computed_style(_el);
				
				if (_style.fontSize)
					_el.setAttribute('fsize',this.convert_font_sizes(_style.fontSize).px);
			}
		},
		
		init_sizes: function ()
		{
			var _els = this._elements;
			
			for (var _i=0;_i<_els.length;_i++)
			{
				var _el = _els[_i];
				
				if (_el.getAttribute('fsize'))
					_el.style.fontSize = (parseInt(_el.getAttribute('fsize')) + this._diff) + 'px';
			}
		},
		
		change_size: function (_diff)
		{
			if ((this._diff + _diff) < 0)
				_diff = _diff - (this._diff + _diff);
			
			var _els = this._elements;
			
			for (var _i=0;_i<_els.length;_i++)
			{
				var _el = _els[_i];
				
				if (_el.getAttribute('fsize'))
					_el.style.fontSize = (parseInt(_el.getAttribute('fsize')) + this._diff + _diff) + 'px';
			}
			
			this._diff = this._diff + _diff;
			this.set_cookie(this._cookie_name,this._diff,this._cookie_days_to_expire);
		},
		
		reset_size: function ()
		{
			var _els = this._elements;
			
			for (var _i=0;_i<_els.length;_i++)
				{
					var _el = _els[_i];
					
					if (_el.getAttribute('fsize'))
						_el.style.fontSize = (parseInt(_el.getAttribute('fsize'))) + 'px';
				}
			
			this._diff = 0;
			this.set_cookie(this._cookie_name,0,this._cookie_days_to_expire);
		},
		
		add_elements: function (_root_el)
		{
			this._elements.push(_root_el);
			
			for (var _i=0;_i<this._tags.length;_i++)
				{
					var _els = _root_el.getElementsByTagName(this._tags[_i]);
					
					for (var _ii=0;_ii<_els.length;_ii++)
						this._elements.push(_els[_ii]);
				}
		},
		
		get_cookie: function(_name)
		{
			var _cookies = document.cookie.split(';');
							
			for (var _i=0;_i<_cookies.length;_i++)
				{
					var _set = _cookies[_i].split('=');
					
					if (_set[0] == _name)
						return(_set[1]);
				}
		},
		
		set_cookie: function(_name,_value,_days)
		{
			var _now = new Date();
			var _expires = new Date();
			
			_days = _days?_days:1;
			_expires.setTime(_now.getTime() + (86400000 * _days));
			
			document.cookie = _name + '=' + escape(_value) + ';expires=' + _expires.toGMTString();
		}
	
	};




// -------------------------------------------------------------------
// Initialize Custom Onload Functions
// Josh Skidmore <josh.skidmore@blackbaud.com>
// -------------------------------------------------------------------

	alternativeOnload();


// -------------------------------------------------------------------
// Onload Function Wrapper
// Josh Skidmore <josh.skidmore@blackbaud.com>
// -------------------------------------------------------------------

	function jsInit()
	{
		BBNCFontResizer.init();
	}


// -------------------------------------------------------------------
// Alternative Onload Handler (if MicrosoftAjax framework missing)
// Josh Skidmore <josh.skidmore@blackbaud.com>
// -------------------------------------------------------------------

	function alternativeOnload()
	{
		// Mozilla + Opera
			if (document.addEventListener)
				{
					document.addEventListener("DOMContentLoaded", jsInit, false);
				}
			
		// MSIE
			/*@cc_on @*/
			/*@if (@_win32)
				document.write('<script id=__ie_onload defer src="/NetCommunity/null"><\/script>');
				var script = document.getElementById("__ie_onload");
				script.onreadystatechange = function()
					{
						if (this.readyState == "complete")
							{
								jsInit();
							}
					};
			/*@end @*/
			
		// Safari + WebKit
			if (/WebKit/i.test(navigator.userAgent))
				{
					var _timer = setInterval(function(){if (/loaded|complete/.test(document.readyState)){jsInit();}},10);
				}
			
		// Everything else
			window.onload = jsInit;
	}
	

// -------------------------------------------------------------------
// Calls OS print page dialog
// -------------------------------------------------------------------
	function printPage()
	{
		window.print();
	}
