/** $Id: jquery.datePicker.js 2036 2007-06-05 22:55:15Z kelvin.luck $ */
(function($){
	$.fn.extend({
		renderCalendar  :   function(s)
		{
			var dc = function(a)
			{
				return document.createElement(a);
			};
			
			s = $.extend(
				{
					month			: null,
					year			: null,
					renderCallback	: null,
					showHeader		: $.dpConst.SHOW_HEADER_SHORT,
					dpController	: null,
					hoverClass		: 'dp-hover'
				}
				, s
			);
			
			if (s.showHeader != $.dpConst.SHOW_HEADER_NONE) {
				var headRow = $(dc('tr'));
				for (var i=Date.firstDayOfWeek; i<Date.firstDayOfWeek+7; i++) {
					var weekday = i%7;
					var day = Date.dayNames[weekday];
					headRow.append(
						jQuery(dc('th')).attr({'scope':'col', 'abbr':day, 'title':day, 'class':(weekday == 0 || weekday == 6 ? 'weekend' : 'weekday')}).html(s.showHeader == $.dpConst.SHOW_HEADER_SHORT ? day.substr(0, 1) : day)
					);
				}
			};
			
			var calendarTable = $(dc('table'))
									.attr(
										{
											'cellspacing':2,
											'className':'jCalendar'
										}
									)
									.append(
										(s.showHeader != $.dpConst.SHOW_HEADER_NONE ? 
											$(dc('thead'))
												.append(headRow)
											:
											dc('thead')
										)
									);
			var tbody = $(dc('tbody'));
			
			var today = (new Date()).zeroTime();
			
			var month = s.month == undefined ? today.getMonth() : s.month;
			var year = s.year || today.getFullYear();
			
			var currentDate = new Date(year, month, 1);
			
			
			var firstDayOffset = Date.firstDayOfWeek - currentDate.getDay() + 1;
			if (firstDayOffset > 1) firstDayOffset -= 7;
			currentDate.addDays(firstDayOffset-1);
			
			var doHover = function()
			{
				if (s.hoverClass) {
					$(this).addClass(s.hoverClass);
				}
			};
			var unHover = function()
			{
				if (s.hoverClass) {
					$(this).removeClass(s.hoverClass);
				}
			};		
			var w = 0;
			while (w++<6) {
				var r = jQuery(dc('tr'));
				for (var i=0; i<7; i++) {
					var thisMonth = currentDate.getMonth() == month;
					var d = $(dc('td'))
								.text(currentDate.getDate() + '')
								.attr('className', (thisMonth ? 'current-month ' : 'other-month ') +
													(currentDate.isWeekend() ? 'weekend ' : 'weekday ') +
													(thisMonth && currentDate.getTime() == today.getTime() ? 'today ' : '')
								)
								.hover(doHover, unHover)
							;
					if (s.renderCallback) {
						s.renderCallback(d, currentDate, month, year);
					}
					r.append(d);
					currentDate.addDays(1);
				}
				tbody.append(r);
			}
			calendarTable.append(tbody);
			
			return this.each(
				function()
				{
					$(this).empty().append(calendarTable);
				}
			);
		},

		datePicker : function(s)
		{			
			if (!$.event._dpCache) $.event._dpCache = [];
			
			
			s = $.extend(
				{
					month				: undefined,
					year				: undefined,
					startDate			: undefined,
					endDate				: undefined,
					renderCallback		: [],
					createButton		: true,
					showYearNavigation	: true,
					closeOnSelect		: true,
					displayClose		: false,
					selectMultiple		: false,
					clickInput			: false,
					verticalPosition	: $.dpConst.POS_TOP,
					horizontalPosition	: $.dpConst.POS_LEFT,
					verticalOffset		: 0,
					horizontalOffset	: 0,
					hoverClass			: 'dp-hover'
				}
				, s
			);
			
			return this.each(
				function()
				{
					var $this = $(this);
					
					if (!this._dpId) {
						this._dpId = $.event.guid++;
						$.event._dpCache[this._dpId] = new DatePicker(this);
					}
					
					var controller = $.event._dpCache[this._dpId];
					
					controller.init(s);
					
					if (s.createButton) {
						
						controller.button = $('<a href="#" class="dp-choose-date" title="' + $.dpText.TEXT_CHOOSE_DATE + '">' + $.dpText.TEXT_CHOOSE_DATE + '</a>')
								.bind(
									'click',
									function()
									{
										$this.dpDisplay(this);
										this.blur();
										return false;
									}
								);
						$this.after(controller.button);
					}
					
					if ($this.is(':text')) {
						$this
							.bind(
								'dateSelected',
								function(e, selectedDate, $td)
								{
									this.value = selectedDate.asString();
								}
							).bind(
								'change',
								function()
								{
									var d = Date.fromString(this.value);
									if (d) {
										controller.setSelected(d, true, true);
									}
								}
							);
						if (s.clickInput) {
							$this.bind(
								'click',
								function()
								{
									$this.dpDisplay();
								}
							);
						}
					}
					
					$this.addClass('dp-applied');
					
				}
			)
		},

		dpSetDisabled : function(s)
		{
			return _w.call(this, 'setDisabled', s);
		},

		dpSetStartDate : function(d)
		{
			return _w.call(this, 'setStartDate', d);
		},

		dpSetEndDate : function(d)
		{
			return _w.call(this, 'setEndDate', d);
		},

		dpGetSelected : function()
		{
			var c = _getController(this[0]);
			if (c) {
				return c.getSelected();
			}
			return null;
		},

		dpSetSelected : function(d, v, m)
		{
			if (v == undefined) v=true;
			if (m == undefined) m=true;
			return _w.call(this, 'setSelected', Date.fromString(d), v, m);
		},

		dpSetDisplayedMonth : function(m, y)
		{
			return _w.call(this, 'setDisplayedMonth', Number(m), Number(y));
		},

		dpDisplay : function(e)
		{
			return _w.call(this, 'display', e);
		},

		dpSetRenderCallback : function(a)
		{
			return _w.call(this, 'setRenderCallback', a);
		},

		dpSetPosition : function(v, h)
		{
			return _w.call(this, 'setPosition', v, h);
		},

		dpSetOffset : function(v, h)
		{
			return _w.call(this, 'setOffset', v, h);
		},
		
		_dpDestroy : function()
		{
			
		}
	});
	
	
	
	var _w = function(f, a1, a2, a3)
	{
		return this.each(
			function()
			{
				var c = _getController(this);
				if (c) {
					c[f](a1, a2, a3);
				}
			}
		);
	};
	
	function DatePicker(ele)
	{
		this.ele = ele;		
		this.displayedMonth		=	null;
		this.displayedYear		=	null;
		this.startDate			=	null;
		this.endDate			=	null;
		this.showYearNavigation	=	null;
		this.closeOnSelect		=	null;
		this.displayClose		=	null;
		this.selectMultiple		=	null;
		this.verticalPosition	=	null;
		this.horizontalPosition	=	null;
		this.verticalOffset		=	null;
		this.horizontalOffset	=	null;
		this.button				=	null;
		this.renderCallback		=	[];
		this.selectedDates		=	{};
	};
	$.extend(
		DatePicker.prototype,
		{	
			init : function(s)
			{
				this.setStartDate(s.startDate);
				this.setEndDate(s.endDate);
				this.setDisplayedMonth(Number(s.month), Number(s.year));
				this.setRenderCallback(s.renderCallback);
				this.showYearNavigation = s.showYearNavigation;
				this.closeOnSelect = s.closeOnSelect;
				this.displayClose = s.displayClose;
				this.selectMultiple = s.selectMultiple;
				this.verticalPosition = s.verticalPosition;
				this.horizontalPosition = s.horizontalPosition;
				this.hoverClass = s.hoverClass;
				this.setOffset(s.verticalOffset, s.horizontalOffset);
			},
			setStartDate : function(d)
			{
				if (d) {
					this.startDate = Date.fromString(d);
				}
				if (!this.startDate) {
					this.startDate = (new Date()).zeroTime();
				}
				this.setDisplayedMonth(this.displayedMonth, this.displayedYear);
			},
			setEndDate : function(d)
			{
				if (d) {
					this.endDate = Date.fromString(d);
				}
				if (!this.endDate) {
					this.endDate = (new Date('12/31/2999')); 
				}
				if (this.endDate.getTime() < this.startDate.getTime()) {
					this.endDate = this.startDate;
				}
				this.setDisplayedMonth(this.displayedMonth, this.displayedYear);
			},
			setPosition : function(v, h)
			{
				this.verticalPosition = v;
				this.horizontalPosition = h;
			},
			setOffset : function(v, h)
			{
				this.verticalOffset = parseInt(v) || 0;
				this.horizontalOffset = parseInt(h) || 0;
			},
			setDisabled : function(s)
			{
				$e = $(this.ele);
				$e[s ? 'addClass' : 'removeClass']('dp-disabled');
				if (this.button) {
					$but = $(this.button);
					$but[s ? 'addClass' : 'removeClass']('dp-disabled');
					$but.attr('title', s ? '' : $.dpText.TEXT_CHOOSE_DATE);
				}
				if ($e.is(':text')) {
					$e.attr('disabled', s ? 'disabled' : '');
				}
			},
			setDisplayedMonth : function(m, y)
			{
				if (this.startDate == undefined || this.endDate == undefined) {
					return;
				}
				var s = new Date(this.startDate.getTime());
				s.setDate(1);
				var e = new Date(this.endDate.getTime());
				e.setDate(1);
				
				var t;
				
				if (isNaN(m) && isNaN(y)) {
					
					t = new Date().zeroTime();
					t.setDate(1);
				} else if (isNaN(m)) {
					
					t = new Date(y, this.displayedMonth, 1);
				} else if (isNaN(y)) {
					
					t = new Date(this.displayedYear, m, 1);
				} else {
					
					t = new Date(y, m, 1)
				}
				
				
				if (t.getTime() < s.getTime()) {
					t = s;
				} else if (t.getTime() > e.getTime()) {
					t = e;
				}
				this.displayedMonth = t.getMonth();
				this.displayedYear = t.getFullYear();
			},
			setSelected : function(d, v, moveToMonth)
			{
				if (this.selectMultiple == false) {
					this.selectedDates = {};
				}
				if (moveToMonth) {
					this.setDisplayedMonth(d.getMonth(), d.getFullYear());
				}
				this.selectedDates[d.getTime()] = v;
			},
			isSelected : function(t)
			{
				return this.selectedDates[t];
			},
			getSelected : function()
			{
				var r = [];
				for(t in this.selectedDates) {
					if (this.selectedDates[t] == true) {
						r.push(new Date(Number(t)));
					}
				}
				return r;
			},
			display : function(eleAlignTo)
			{
				if ($(this.ele).is('.dp-disabled')) return;
				
				eleAlignTo = eleAlignTo || this.ele;
				var c = this;
				var $ele = $(eleAlignTo);
				var eleOffset = $ele.offset();
				
				
				var _checkMouse = function(e)
				{
					var el = e.target;
					var cal = $('#dp-popup')[0];
					while (true){
						if (el == cal) {
							return true;
						} else if (el == document) {
							c._closeCalendar();
							return false;
						} else {
							el = $(el).parent()[0];
						}
					}
				};
				this._checkMouse = _checkMouse;
				
				this._closeCalendar(true);
				
				$('body')
					.append(
						$('<div></div>')
							.attr('id', 'dp-popup')
							.css(
								{
									'top'	:	eleOffset.top + c.verticalOffset,
									'left'	:	eleOffset.left + c.horizontalOffset
								}
							)
							.append(
								$('<h2></h2>'),
								$('<div id="dp-nav-prev"></div>')
									.append(
										$('<a id="dp-nav-prev-year" href="#" title="' + $.dpText.TEXT_PREV_YEAR + '">&lt;&lt;</a>')
											.bind(
												'click',
												function()
												{
													return c._displayNewMonth.call(c, this, 0, -1);
												}
											),
										$('<a id="dp-nav-prev-month" href="#" title="' + $.dpText.TEXT_PREV_MONTH + '">&lt;</a>')
											.bind(
												'click',
												function()
												{
													return c._displayNewMonth.call(c, this, -1, 0);
												}
											)
									),
								$('<div id="dp-nav-next"></div>')
									.append(
										$('<a id="dp-nav-next-year" href="#" title="' + $.dpText.TEXT_NEXT_YEAR + '">&gt;&gt;</a>')
											.bind(
												'click',
												function()
												{
													return c._displayNewMonth.call(c, this, 0, 1);
												}
											),
										$('<a id="dp-nav-next-month" href="#" title="' + $.dpText.TEXT_NEXT_MONTH + '">&gt;</a>')
											.bind(
												'click',
												function()
												{
													return c._displayNewMonth.call(c, this, 1, 0);
												}
											)
									),
								$('<div></div>')
									.attr('id', 'dp-calendar')
							)
							.bgIframe()
						);
					
				var $pop = $('#dp-popup');
				
				if (this.showYearNavigation == false) {
					$('#dp-nav-prev-year, #dp-nav-next-year').css('display', 'none');
				}
				if (this.displayClose) {
					$pop.append(
						$('<a href="#" id="dp-close">' + $.dpText.TEXT_CLOSE + '</a>')
							.bind(
								'click',
								function()
								{
									c._closeCalendar();
									return false;
								}
							)
					);
				}
				c._renderCalendar();
				
				if (this.verticalPosition == $.dpConst.POS_BOTTOM) {
					$pop.css('top', eleOffset.top + $ele.height() - $pop.height() + c.verticalOffset);
				}
				if (this.horizontalPosition == $.dpConst.POS_RIGHT) {
					$pop.css('left', eleOffset.left + $ele.width() - $pop.width() + c.horizontalOffset);
				}
				
				$(this.ele).trigger('dpDisplayed', $pop);
				
				$(document).bind('mousedown', this._checkMouse);
			},
			setRenderCallback : function(a)
			{
				if (a && typeof(a) == 'function') {
					a = [a];
				}
				this.renderCallback = this.renderCallback.concat(a);
			},
			cellRender : function ($td, thisDate, month, year) {
				var c = this.dpController;
				var d = new Date(thisDate.getTime());
				$td.bind(
					'click',
					function()
					{
						var $this = $(this);
						if (!$this.is('.disabled')) {
							c.setSelected(d, !$this.is('.selected') || !c.selectMultiple);
							var s = c.isSelected(d.getTime());
							$(c.ele).trigger('dateSelected', [d, $td, s]);
							if (c.closeOnSelect) {
								c._closeCalendar();
							} else {
								$this[s ? 'addClass' : 'removeClass']('selected');
							}
						}
					}
				);
				
				if (c.isSelected(d.getTime())) {
					$td.addClass('selected');
				}
				for (var i=0; i<c.renderCallback.length; i++) {
					c.renderCallback[i].apply(this, arguments);
				}
			},

			_displayNewMonth : function(ele, m, y) 
			{
				if (!$(ele).is('.disabled')) {
					this.setDisplayedMonth(this.displayedMonth + m, this.displayedYear + y);
					this._clearCalendar();
					this._renderCalendar();
					$(this.ele).trigger('dpMonthChanged', [this.displayedMonth, this.displayedYear]);
				}
				ele.blur();
				return false;
			},
			_renderCalendar : function()
			{
				
				$('#dp-popup h2').html(Date.monthNames[this.displayedMonth] + ' ' + this.displayedYear);
				
				
				$('#dp-calendar').renderCalendar(
					{
						month			: this.displayedMonth,
						year			: this.displayedYear,
						renderCallback	: this.cellRender,
						dpController	: this,
						hoverClass		: this.hoverClass
					}
				);
				if (this.displayedYear == this.startDate.getFullYear() && this.displayedMonth == this.startDate.getMonth()) {
					$('#dp-nav-prev-year').addClass('disabled');
					$('#dp-nav-prev-month').addClass('disabled');
					$('#dp-calendar td.other-month').each(
						function()
						{
							var $this = $(this);
							if (Number($this.text()) > 20) {
								$this.addClass('disabled');
							}
						}
					);
					var d = this.startDate.getDate();
					$('#dp-calendar td.current-month').each(
						function()
						{
							var $this = $(this);
							if (Number($this.text()) < d) {
								$this.addClass('disabled');
							}
						}
					);
				} else {
					$('#dp-nav-prev-year').removeClass('disabled');
					$('#dp-nav-prev-month').removeClass('disabled');
					var d = this.startDate.getDate();
					if (d > 20) {
						
						var sd = new Date(this.startDate.getTime());
						sd.addMonths(1);
						if (this.displayedYear == sd.getFullYear() && this.displayedMonth == sd.getMonth()) {
							$('#dp-calendar td.other-month').each(
								function()
								{
									var $this = $(this);
									if (Number($this.text()) < d) {
										$this.addClass('disabled');
									}
								}
							);
						}
					}
				}
				if (this.displayedYear == this.endDate.getFullYear() && this.displayedMonth == this.endDate.getMonth()) {
					$('#dp-nav-next-year').addClass('disabled');
					$('#dp-nav-next-month').addClass('disabled');
					$('#dp-calendar td.other-month').each(
						function()
						{
							var $this = $(this);
							if (Number($this.text()) < 14) {
								$this.addClass('disabled');
							}
						}
					);
					var d = this.endDate.getDate();
					$('#dp-calendar td.current-month').each(
						function()
						{
							var $this = $(this);
							if (Number($this.text()) > d) {
								$this.addClass('disabled');
							}
						}
					);
				} else {
					$('#dp-nav-next-year').removeClass('disabled');
					$('#dp-nav-next-month').removeClass('disabled');
					var d = this.endDate.getDate();
					if (d < 13) {
						
						var ed = new Date(this.endDate.getTime());
						ed.addMonths(-1);
						if (this.displayedYear == ed.getFullYear() && this.displayedMonth == ed.getMonth()) {
							$('#dp-calendar td.other-month').each(
								function()
								{
									var $this = $(this);
									if (Number($this.text()) > d) {
										$this.addClass('disabled');
									}
								}
							);
						}
					}
				}
			},
			_closeCalendar : function(programatic)
			{
				$(document).unbind('mousedown', this._checkMouse);
				this._clearCalendar();
				$('#dp-popup a').unbind();
				$('#dp-popup').empty().remove();
				if (!programatic) {
					$(this.ele).trigger('dpClosed', [this.getSelected()]);
				}
			},
			_clearCalendar : function()
			{
				$('#dp-calendar td').unbind();
				$('#dp-calendar').empty();
			}
		}
	);
	
	$.dpConst = {
		SHOW_HEADER_NONE	:	0,
		SHOW_HEADER_SHORT	:	1,
		SHOW_HEADER_LONG	:	2,
		POS_TOP				:	0,
		POS_BOTTOM			:	1,
		POS_LEFT			:	0,
		POS_RIGHT			:	1
	};
	
	$.dpText = {
		TEXT_PREV_YEAR		:	'Previous year',
		TEXT_PREV_MONTH		:	'Previous month',
		TEXT_NEXT_YEAR		:	'Next year',
		TEXT_NEXT_MONTH		:	'Next month',
		TEXT_CLOSE			:	'Close',
		TEXT_CHOOSE_DATE	:	'Choose date'
	};
	
	$.dpVersion = '$Id: jquery.datePicker.js 2036 2007-06-05 22:55:15Z kelvin.luck $';
	function _getController(ele)
	{
		if (ele._dpId) return $.event._dpCache[ele._dpId];
		return false;
	};
	
	
	
	if ($.fn.bgIframe == undefined) {
		$.fn.bgIframe = function() {return this; };
	};
	$(window)
		.bind('unload', function() {
			var els = $.event._dpCache || [];
			for (var i in els) {
				$(els[i].ele)._dpDestroy();
			}
		});
})(jQuery);

/* Dimensions --Copyright (c) 2007 Paul Bakaus and Brandon Aaron */
(function($){
var height = $.fn.height,
    width  = $.fn.width;
$.fn.extend({
	height: function() {
		if (!this[0]) error();
		if ( this[0] == window )
			if ( ($.browser.mozilla || $.browser.opera) && $(document).width() > self.innerWidth)
				
				return self.innerHeight - getScrollbarWidth();
			else
				return self.innerHeight ||
					$.boxModel && document.documentElement.clientHeight || 
					document.body.clientHeight;
		
		if ( this[0] == document )
			return Math.max( document.body.scrollHeight, document.body.offsetHeight );
		
		return height.apply(this, arguments);
	},
	width: function() {
		if (!this[0]) error();
		if ( this[0] == window )
			if (($.browser.mozilla || $.browser.opera) && $(document).height() > self.innerHeight)
				
				return self.innerWidth - getScrollbarWidth();
			else
				return self.innerWidth ||
					$.boxModel && document.documentElement.clientWidth ||
					document.body.clientWidth;
		if ( this[0] == document )
			if ($.browser.mozilla) {
				
				var scrollLeft = self.pageXOffset;
				self.scrollTo(99999999, self.pageYOffset);
				var scrollWidth = self.pageXOffset;
				self.scrollTo(scrollLeft, self.pageYOffset);
				return document.body.offsetWidth + scrollWidth;
			}
			else 
				return Math.max( document.body.scrollWidth, document.body.offsetWidth );
		return width.apply(this, arguments);
	},
	
	innerHeight: function() {
		if (!this[0]) error();
		return this[0] == window || this[0] == document ?
			this.height() :
			this.is(':visible') ?
				this[0].offsetHeight - num(this, 'borderTopWidth') - num(this, 'borderBottomWidth') :
				this.height() + num(this, 'paddingTop') + num(this, 'paddingBottom');
	},
	
	innerWidth: function() {
		if (!this[0]) error();
		return this[0] == window || this[0] == document ?
			this.width() :
			this.is(':visible') ?
				this[0].offsetWidth - num(this, 'borderLeftWidth') - num(this, 'borderRightWidth') :
				this.width() + num(this, 'paddingLeft') + num(this, 'paddingRight');
	},
	
	outerHeight: function(options) {
		if (!this[0]) error();
		options = $.extend({ margin: false }, options || {});
		return this[0] == window || this[0] == document ?
			this.height() :
			this.is(':visible') ?
				this[0].offsetHeight + (options.margin ? (num(this, 'marginTop') + num(this, 'marginBottom')) : 0) :
				this.height() 
					+ num(this,'borderTopWidth') + num(this, 'borderBottomWidth') 
					+ num(this, 'paddingTop') + num(this, 'paddingBottom')
					+ (options.margin ? (num(this, 'marginTop') + num(this, 'marginBottom')) : 0);
	},
	
	outerWidth: function(options) {
		if (!this[0]) error();
		options = $.extend({ margin: false }, options || {});
		return this[0] == window || this[0] == document ?
			this.width() :
			this.is(':visible') ?
				this[0].offsetWidth + (options.margin ? (num(this, 'marginLeft') + num(this, 'marginRight')) : 0) :
				this.width() 
					+ num(this, 'borderLeftWidth') + num(this, 'borderRightWidth') 
					+ num(this, 'paddingLeft') + num(this, 'paddingRight')
					+ (options.margin ? (num(this, 'marginLeft') + num(this, 'marginRight')) : 0);
	},
	
	scrollLeft: function(val) {
		if (!this[0]) error();
		if ( val != undefined )
			
			return this.each(function() {
				if (this == window || this == document)
					window.scrollTo( val, $(window).scrollTop() );
				else
					this.scrollLeft = val;
			});
		
		
		if ( this[0] == window || this[0] == document )
			return self.pageXOffset ||
				$.boxModel && document.documentElement.scrollLeft ||
				document.body.scrollLeft;
				
		return this[0].scrollLeft;
	},
	scrollTop: function(val) {
		if (!this[0]) error();
		if ( val != undefined )
			
			return this.each(function() {
				if (this == window || this == document)
					window.scrollTo( $(window).scrollLeft(), val );
				else
					this.scrollTop = val;
			});
		
		
		if ( this[0] == window || this[0] == document )
			return self.pageYOffset ||
				$.boxModel && document.documentElement.scrollTop ||
				document.body.scrollTop;
		return this[0].scrollTop;
	},
	
	position: function(returnObject) {
		return this.offset({ margin: false, scroll: false, relativeTo: this.offsetParent() }, returnObject);
	},
	offset: function(options, returnObject) {
		if (!this[0]) error();
		var x = 0, y = 0, sl = 0, st = 0,
		    elem = this[0], parent = this[0], op, parPos, elemPos = $.css(elem, 'position'),
		    mo = $.browser.mozilla, ie = $.browser.msie, oa = $.browser.opera,
		    sf = $.browser.safari, sf3 = $.browser.safari && parseInt($.browser.version) > 520,
		    absparent = false, relparent = false, 
		    options = $.extend({ margin: true, border: false, padding: false, scroll: true, lite: false, relativeTo: document.body }, options || {});
		if (options.lite) return this.offsetLite(options, returnObject);
		if (options.relativeTo.jquery) options.relativeTo = options.relativeTo[0];
		if (elem.tagName == 'BODY') {
			x = elem.offsetLeft;
			y = elem.offsetTop;
			if (mo) {
				x += num(elem, 'marginLeft') + (num(elem, 'borderLeftWidth')*2);
				y += num(elem, 'marginTop')  + (num(elem, 'borderTopWidth') *2);
			} else
			
			if (oa) {
				x += num(elem, 'marginLeft');
				y += num(elem, 'marginTop');
			} else
			
			if ((ie && jQuery.boxModel)) {
				x += num(elem, 'borderLeftWidth');
				y += num(elem, 'borderTopWidth');
			} else
			
			if (sf3) {
				x += num(elem, 'marginLeft') + num(elem, 'borderLeftWidth');
				y += num(elem, 'marginTop')  + num(elem, 'borderTopWidth');
			}
		} else {
			do {
				parPos = $.css(parent, 'position');
			
				x += parent.offsetLeft;
				y += parent.offsetTop;
				
				if (mo || ie || sf3) {
					
					x += num(parent, 'borderLeftWidth');
					y += num(parent, 'borderTopWidth');
					
					if (mo && parPos == 'absolute') absparent = true;
					
					if (ie && parPos == 'relative') relparent = true;
				}
				op = parent.offsetParent || document.body;
				if (options.scroll || mo) {
					do {
						if (options.scroll) {
							
							sl += parent.scrollLeft;
							st += parent.scrollTop;
						}
						if (oa && ($.css(parent, 'display') || '').match(/table-row|inline/)) {
							sl = sl - ((parent.scrollLeft == parent.offsetLeft) ? parent.scrollLeft : 0);
							st = st - ((parent.scrollTop == parent.offsetTop) ? parent.scrollTop : 0);
						}
						if (mo && parent != elem && $.css(parent, 'overflow') != 'visible') {
							x += num(parent, 'borderLeftWidth');
							y += num(parent, 'borderTopWidth');
						}
				
						parent = parent.parentNode;
					} while (parent != op);
				}
				parent = op;
				if (parent == options.relativeTo && !(parent.tagName == 'BODY' || parent.tagName == 'HTML'))  {
					
					if (mo && parent != elem && $.css(parent, 'overflow') != 'visible') {
						x += num(parent, 'borderLeftWidth');
						y += num(parent, 'borderTopWidth');
					}
					
					if ( ((sf && !sf3) || oa) && parPos != 'static' ) {
						x -= num(op, 'borderLeftWidth');
						y -= num(op, 'borderTopWidth');
					}
					break;
				}
				if (parent.tagName == 'BODY' || parent.tagName == 'HTML') {
					
					if (((sf && !sf3) || (ie && $.boxModel)) && elemPos != 'absolute' && elemPos != 'fixed') {
						x += num(parent, 'marginLeft');
						y += num(parent, 'marginTop');
					}
					if ( sf3 || (mo && !absparent && elemPos != 'fixed') || 
					     (ie && elemPos == 'static' && !relparent) ) {
						x += num(parent, 'borderLeftWidth');
						y += num(parent, 'borderTopWidth');
					}
					break; 
				}
			} while (parent);
		}
		var returnValue = handleOffsetReturn(elem, options, x, y, sl, st);
		if (returnObject) { $.extend(returnObject, returnValue); return this; }
		else              { return returnValue; }
	},
	
	offsetLite: function(options, returnObject) {
		if (!this[0]) error();
		var x = 0, y = 0, sl = 0, st = 0, parent = this[0], offsetParent, 
		    options = $.extend({ margin: true, border: false, padding: false, scroll: true, relativeTo: document.body }, options || {});
		if (options.relativeTo.jquery) options.relativeTo = options.relativeTo[0];
		do {
			x += parent.offsetLeft;
			y += parent.offsetTop;
			offsetParent = parent.offsetParent || document.body;
			if (options.scroll) {
				
				do {
					sl += parent.scrollLeft;
					st += parent.scrollTop;
					parent = parent.parentNode;
				} while(parent != offsetParent);
			}
			parent = offsetParent;
		} while (parent && parent.tagName != 'BODY' && parent.tagName != 'HTML' && parent != options.relativeTo);
		var returnValue = handleOffsetReturn(this[0], options, x, y, sl, st);
		if (returnObject) { $.extend(returnObject, returnValue); return this; }
		else              { return returnValue; }
	},
	
	offsetParent: function() {
		if (!this[0]) error();
		var offsetParent = this[0].offsetParent;
		while ( offsetParent && (offsetParent.tagName != 'BODY' && $.css(offsetParent, 'position') == 'static') )
			offsetParent = offsetParent.offsetParent;
		return $(offsetParent);
	}
});
var error = function() {
	throw "Dimensions: jQuery collection is empty";
};
var num = function(el, prop) {
	return parseInt($.css(el.jquery?el[0]:el,prop))||0;
};
var handleOffsetReturn = function(elem, options, x, y, sl, st) {
	if ( !options.margin ) {
		x -= num(elem, 'marginLeft');
		y -= num(elem, 'marginTop');
	}
	
	if ( options.border && (($.browser.safari && parseInt($.browser.version) < 520) || $.browser.opera) ) {
		x += num(elem, 'borderLeftWidth');
		y += num(elem, 'borderTopWidth');
	} else if ( !options.border && !(($.browser.safari && parseInt($.browser.version) < 520) || $.browser.opera) ) {
		x -= num(elem, 'borderLeftWidth');
		y -= num(elem, 'borderTopWidth');
	}
	if ( options.padding ) {
		x += num(elem, 'paddingLeft');
		y += num(elem, 'paddingTop');
	}
	
	
	if ( options.scroll && (!$.browser.opera || elem.offsetLeft != elem.scrollLeft && elem.offsetTop != elem.scrollLeft) ) {
		sl -= elem.scrollLeft;
		st -= elem.scrollTop;
	}
	return options.scroll ? { top: y - st, left: x - sl, scrollTop:  st, scrollLeft: sl }
	                      : { top: y, left: x };
};
var scrollbarWidth = 0;
var getScrollbarWidth = function() {
	if (!scrollbarWidth) {
		var testEl = $('<div>')
				.css({
					width: 100,
					height: 100,
					overflow: 'auto',
					position: 'absolute',
					top: -1000,
					left: -1000
				})
				.appendTo('body');
		scrollbarWidth = 100 - testEl
			.append('<div>')
			.find('div')
				.css({
					width: '100%',
					height: 200
				})
				.width();
		testEl.remove();
	}
	return scrollbarWidth;
};
})(jQuery);

/* Innerfade */
(function($) {
$.fn.innerfade = function(options) {
	this.each(function(){ 	
		
		var settings = {
			animationtype: 'fade',
			speed: 'normal',
			timeout: 2000,
			type: 'sequence',
			containerheight: 'auto',
			runningclass: 'innerfade'
		};
		
		if(options)
			$.extend(settings, options);
		
		var elements = $(this).children();
	
		if (elements.length > 1) {
		
			$(this).css('position', 'relative');
	
			$(this).css('height', settings.containerheight);
			$(this).addClass(settings.runningclass);
			
			for ( var i = 0; i < elements.length; i++ ) {
				$(elements[i]).css('z-index', String(elements.length-i)).css('position', 'absolute');
				$(elements[i]).hide();
			};
		
			if ( settings.type == 'sequence' ) {
				setTimeout(function(){
					$.innerfade.next(elements, settings, 1, 0);
				}, settings.timeout);
				$(elements[0]).show();
			} else if ( settings.type == 'random' ) {
				setTimeout(function(){
					do { current = Math.floor ( Math.random ( ) * ( elements.length ) ); } while ( current == 0 )
					$.innerfade.next(elements, settings, current, 0);
				}, settings.timeout);
				$(elements[0]).show();
			}	else {
				alert('type must either be \'sequence\' or \'random\'');
			}
			
		}
		
	});
};

$.innerfade = function() {}
$.innerfade.next = function (elements, settings, current, last) {
	if ( settings.animationtype == 'slide' ) {
		$(elements[last]).slideUp(settings.speed, $(elements[current]).slideDown(settings.speed));
	} else if ( settings.animationtype == 'fade' ) {
		$(elements[last]).fadeOut(settings.speed);
		$(elements[current]).fadeIn(settings.speed);
	} else {
		alert('animationtype must either be \'slide\' or \'fade\'');
	};
	
	if ( settings.type == 'sequence' ) {
		if ( ( current + 1 ) < elements.length ) {
			current = current + 1;
			last = current - 1;
		} else {
			current = 0;
			last = elements.length - 1;
		};
	}	else if ( settings.type == 'random' ) {
		last = current;
		while (	current == last ) {
			current = Math.floor ( Math.random ( ) * ( elements.length ) );
		};
	}	else {
		alert('type must either be \'sequence\' or \'random\'');
	};
	setTimeout((function(){$.innerfade.next(elements, settings, current, last);}), settings.timeout);
};
})(jQuery);

/* SMITH CUSTOM FUNCS */
function wordcount(limit,id) {
	var el = document.getElementById(id);
	var val = el.value;
	val.replace(/\s+/," ");
	var words = val.split(" ");
	var wc = words.length;
	var str = '';
	if (wc > limit) {
		for (i = 0; i < limit; i++) {
			str = str + words[i];
			if (i < (limit - 1)) {
				str =  str + " ";
			}
		}
		wc = limit;
		el.value=str + " ";
	}
	var wcel;
	if (wcel = document.getElementById('wordcount')) {
		wcel.innerHTML = wc;
	}
}
/* sharethis code */
//MooTools, My Object Oriented Javascript Tools. Copyright (c) 2006-2007 Valerio Proietti, <http://mad4milk.net>, MIT Style License.

eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('5 1w={1s:\'1.11\'};4 $N(6){2(6!=19)};4 $b(6){7(!$N(6))2 Z;7(6.X)2\'14\';5 b=I 6;7(b==\'q\'&&6.1p){P(6.1d){n 1:2\'14\';n 3:2(/\\S/).1j(6.1c)?\'1k\':\'1v\'}}7(b==\'q\'||b==\'4\'){P(6.1b){n L:2\'1x\';n 1q:2\'1o\';n j:2\'1n\'}7(I 6.D==\'1l\'){7(6.1m)2\'1r\';7(6.15)2\'a\'}}2 b};4 $F(){5 t={};m(5 i=0;i<a.D;i++){m(5 c z a[i]){5 y=a[i][c];5 w=t[c];7(w&&$b(y)==\'q\'&&$b(w)==\'q\')t[c]=$F(w,y);R t[c]=y}}2 t};5 $f=4(){5 k=a;7(!k[1])k=[9,k[0]];m(5 c z k[1])k[0][c]=k[1][c];2 k[0]};5 $x=4(){m(5 i=0,l=a.D;i<l;i++){a[i].f=4(G){m(5 g z G){7(!9.d[g])9.d[g]=G[g];7(!9[g])9[g]=$x.W(g)}}}};$x.W=4(g){2 4(10){2 9.d[g].J(10,L.d.1t.1u(a,1))}};$x(1y,L,1f,1g);4 $1e(6){2!!(6||6===0)};4 $1i(6,1a){2 $N(6)?6:1a};4 $12(M,17){2 16.1h(16.12()*(17-M+1)+M)};4 $1W(){2 r 1X().1V()};4 $1U(O){1Z(O);1S(O);2 v};5 Q=4(6){6=6||{};6.f=$f;2 6};5 1T=r Q(8);5 1Y=r Q(h);h.Y=h.20(\'Y\')[0];8.V=!!(h.24);7(8.25)8.22=8[8.23?\'21\':\'18\']=B;R 7(h.1R&&!h.1P&&!1F.1z)8.C=8[8.V?\'1G\':\'1Q\']=B;R 7(h.1E!=v)8.1D=B;8.1A=8.C;1B.f=$f;7(I A==\'19\'){5 A=4(){};7(8.C)h.1C("1H");A.d=(8.C)?8["[[1I.d]]"]:{}}A.d.X=4(){};7(8.18)1N{h.1O("1M",Z,B)}1L(e){};5 j=4(s){5 u=4(){2(a[0]!==v&&9.T&&$b(9.T)==\'4\')?9.T.J(9,a):9};$f(u,9);u.d=s;u.1b=j;2 u};j.1J=4(){};j.d={f:4(s){5 E=r 9(v);m(5 c z s){5 13=E[c];E[c]=j.U(13,s[c])}2 r j(E)},1K:4(){m(5 i=0,l=a.D;i<l;i++)$f(9.d,a[i])}};j.U=4(p,o){7(p&&p!=o){5 b=$b(o);7(b!=$b(p))2 o;P(b){n\'4\':5 H=4(){9.K=a.15.K;2 o.J(9,a)};H.K=p;2 H;n\'q\':2 $F(p,o)}}2 o};',62,130,'||return||function|var|obj|if|window|this|arguments|type|property|prototype||extend|prop|document||Class|args||for|case|current|previous|object|new|properties|mix|klass|null|mp|native|ap|in|HTMLElement|true|webkit|length|proto|merge|props|merged|typeof|apply|parent|Array|min|defined|timer|switch|Abstract|else||initialize|Merge|xpath|generic|htmlElement|head|false|bind||random|pp|element|callee|Math|max|ie6|undefined|picked|constructor|nodeValue|nodeType|chk|String|Number|floor|pick|test|textnode|number|item|class|regexp|nodeName|RegExp|collection|version|slice|call|whitespace|MooTools|array|Function|taintEnabled|khtml|Object|createElement|gecko|getBoxObjectFor|navigator|webkit420|iframe|DOMElement|empty|implement|catch|BackgroundImageCache|try|execCommand|all|webkit419|childNodes|clearInterval|Window|clear|getTime|time|Date|Document|clearTimeout|getElementsByTagName|ie7|ie|XMLHttpRequest|evaluate|ActiveXObject'.split('|'),0,{}))
if (!window.console || !console.firebug)
{
    var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml",
    "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];

    window.console = {};
    for (var i = 0; i < names.length; ++i)
        window.console[names[i]] = function() {}
}

if (!SHARETHIS) {

/*
 *    Sharelet
 *
 *    The thing being shared. There can be zero or more sharelets per page.
 *    Share buttons can optionally be created here requiring the DOM parent
 *    to exist.
 */

var Sharelet = new Class({
    node:   null,    // DOM parent node.
    button: null,
    properties: {
        type:       '',
        title:      document.title,
        summary:    '',
        content:    '',
        url:        document.URL,
        icon:       '',
        category:   '',
        updated:    document.lastModified,
        published:  '',
        author:     ''
    },
    options: {
        button: true,
        buttonText: 'ShareThis'
    },
    initialize: function(options){
        this.options = $merge(this.options, options);
    },
    bind: function(node){
        if (this.node != null && this.node != node) {
            try {this.node.removeChild(this.button)} catch(err){
                console.error(err);
            };
        }
        if (this.options.button == true) {
            try{node.appendChild(this.button)} catch(err){
                console.error(err);
            };
        }
        this.node = node;
    }
});

/*
 *    ShareThisWidget
 *
 *    Handles creation of the widget, positioning and visibility.
 */
var ShareThisWidget = new Class({
    visible:    0,
    wrapper:    null,
    iframe:     null,
    close:      null,
    sharelet:   null,
    left:       0,
    top:        0,
    hiddenEmbeds: false,
    loaderHTML: '<html><head><style>body{background:#eee url(http://w.sharethis.com/widget/1.15/load.gif) center center no-repeat;color:#bbb;font:bold 18px Arial,Helvetica,sans-serif;padding:50px 20px;text-align:center;height: 120px}</style></head><body>Getting ready to share!</body></html>',
    initialize: function(options){
        this.options = options;
        var d = document.createElement('div');
        d.className = 'stwrapper';
        d.style.visibility = 'hidden';
        this.wrapper = d;
        
        try {
            var f = document.createElement('<iframe name="stframe"></iframe>');
        } catch(err) {
            var f = document.createElement('iframe');
        }
        f.id = 'stframe';
        f.className = 'stframe';
        f.name = 'stframe';
        f.frameBorder = '0';
        f.scrolling = 'no';
        f.width = '354px';
        f.height = '437px';
        d.appendChild(f);
        this.iframe = f;

        var a = document.createElement('a');
        a.href = '#';
        a.title = 'close';
        a.className = 'stclose';
        a.onclick = this.hide;
        var t = document.createTextNode('close');
        a.appendChild(t);
        d.appendChild(a);
        this.close = a;
    },
    show: function(opts){
        SHARETHIS.widget.visible = 1;
        SHARETHIS.widget.wrapper.style.left = this.left+'px';
        SHARETHIS.widget.wrapper.style.top = this.top+'px';
        if (SHARETHIS.widget.wrapper.parentNode == null
            || typeof(SHARETHIS.widget.wrapper.parentNode.tagName) == 'undefined'){
            document.body.appendChild(SHARETHIS.widget.wrapper);
        }
        SHARETHIS.widget.wrapper.style.visibility = 'visible';
        if (opts && Boolean(opts.embeds) != true) {
            SHARETHIS.widget.hiddenEmbeds = true;
            SHARETHIS.widget.hideEmbeds();
        }
        return false;
    },
    hide: function(opts){
        SHARETHIS.widget.visible = 0;
        SHARETHIS.widget.wrapper.style.visibility = 'hidden';
        if (Boolean(SHARETHIS.widget.hiddenEmbeds) == true || (opts && Boolean(opts.embeds) != true)) {
            SHARETHIS.widget.hiddenEmbeds = false;
            SHARETHIS.widget.showEmbeds();
        }
        return false;
    },
    hideEmbeds: function() {
        var embeds = document.getElementsByTagName('embed');
        for (var i=0; i< embeds.length; i++) {
            embeds[i].style.visibility = "hidden";
        }
    },
    showEmbeds: function() {
        var embeds = document.getElementsByTagName('embed');
        for (var i=0; i< embeds.length; i++) {
            embeds[i].style.visibility = "visible";
        }
    },
    loading: function(){
        var w = parent.frames['stframe'];
        try {
        w.window.document.open();
        w.window.document.clear();
        w.window.document.write(this.loaderHTML);
        w.window.document.close();
        } catch(err) {console.error(err);}
    }
});

/*
 *    ShareThis
 *
 *    This global object implements the ShareThis API and binding sharelets and the widget
 *    together.
 */
var ShareThis = new Class({
    version:    '1.16',
    ready:      false,
    readyList:  [],
    toolbar:    false,
    counter:    0,
    widget:     null,
    sharelets:  [],
    page:       {},
    query:      {},
    meta: {
        publisher : '',
        hostname  : location.host,
        location  : location.pathname
    },
    initialize: function(options){
        this.options = options;
        if (options.publisher) {
            this.meta.publisher = options.publisher;
        }
        this.page = new Sharelet($merge(options,{button:false}));
        this.widget = new ShareThisWidget();
        var css = 'http://w.sharethis.com/widget/' + this.version + '/sharethis.css';
        this.load('link', {
            href : (this.options.css ? this.options.css : css),
            rel  : 'stylesheet',
            type : 'text/css'
        });
        if (typeof(window.addEventListener) != 'undefined') {
            window.addEventListener("load", this.onReady, false);
        } else if (typeof(document.addEventListener) != 'undefined') {
            document.addEventListener("load", this.onReady, false);
        } else if (typeof window.attachEvent != 'undefined') {
            window.attachEvent("onload", this.onReady);
        }
    },
    defer: function(f) {
        if (this.ready) {
            f.apply(document, [SHARETHIS]);
        } else {
            this.readyList.push( function() { return f.apply(this, [SHARETHIS]) } );
            //this.readyList.push(f);
        }
    },
    onReady: function() {
        SHARETHIS.ready = true;
        for (var i = 0; i < SHARETHIS.readyList.length; ++i)
            SHARETHIS.readyList[i].apply(document, [SHARETHIS]);

    },
    load: function(t, opts) {
        var e = document.createElement(t);
        for (var i in opts) {
            e.setAttribute(i, opts[i]);
        }
        try {
            document.getElementsByTagName('head')[0].appendChild(e);
        } catch (err) {
            document.body.appendChild(e);
        }
    },
    open: function(url , name, feature) {
		alert('testing');
        window.open(url , name, feature);
    },
    addEntry: function(properties, options){
        var s = new Sharelet($merge(this.options, options));
        s.properties = $merge(s.properties, properties);
        s.idx = this.sharelets.push(s) - 1;
        s.sharethis = this;
        s.widget = this.widget;
        s.popup = function(e){
             if (s.options.onclick) {
                  var res = s.options.onclick.apply(document, [s]);
                  if (res == false) {
                      return false;
                  }
             }
             var p = window.open("http://w.sharethis.com/widget/loading", "stframe","status=1,toolbar=0,width=354,height=437");
             try {
             p.document.open();
             p.document.clear();
             p.window.document.write(SHARETHIS.widget.loaderHTML);
             p.document.close();
             } catch(err) {console.error(err);}
             p.focus();
             var f = SHARETHIS.form([s]);
             document.body.appendChild(f);
             f.submit();
             return false;
        };
        s.attachButton = function(a){
            a.onclick = (Boolean(s.options.popup) == true ? s.popup : s.onClick);
        };
        s.onClick = function(e){
            if (s.options.onclick) {
                 var res = s.options.onclick.apply(document, [s]);
                 if (res == false) {
                     return false;
                 }
            }
            findPos = function(obj) {
                var curleft = curtop = 0;
                if (obj.offsetParent) {
                    curleft = obj.offsetLeft + obj.scrollWidth;
                    curtop = obj.offsetTop + obj.scrollHeight;
                    while (obj = obj.offsetParent) {
                        curleft += obj.offsetLeft;
                        curtop += obj.offsetTop;
                    }
                    if (s.options.offsetLeft) {
                        curleft += parseInt(s.options.offsetLeft);
                    }
                    if (s.options.offsetTop) {
                        curtop += parseInt(s.options.offsetTop);
                    }
                }
                return [curleft,curtop];
            }
            if (!e) var e = window.event;
            var el = e.target || e.srcElement;
            var coords = findPos(el);
            s.widget.left = coords[0];
            s.widget.top = coords[1];
            
            if (s.widget.visible) {
                if (s == s.widget.sharelet) {
                    s.widget.hide(s.options);
                } else {
                    s.widget.loading();
                    s.share();
                }
            } else {
                if (s == s.widget.sharelet) {
                    s.widget.show(s.options);
                } else {
                    s.widget.show(s.options);
                    s.widget.loading();
                    s.share();
                }
            }
            return false;
        };
        s.share = function(){
            return s.sharethis.share(s);
        };
        if (!s.options.button || Boolean(s.options.button) !== false) {
            var a = document.createElement("a");
            a.className = 'stbutton stico_' + (s.options.style ? s.options.style : (SHARETHIS.options.style ? SHARETHIS.options.style : 'default'));
            a.title = "ShareThis via email, AIM, social bookmarking and networking sites, etc.";
            a.href = "#";
            a.onclick = (Boolean(s.options.popup) == true ? s.popup : s.onClick);
            var t = document.createElement("span");
            t.className = 'stbuttontext';
            t.appendChild(document.createTextNode(s.options.buttonText));
            a.appendChild(t);
            s.button = a;
            if (!s.options.bind || Boolean(s.options.bind) !== false) {
                var id = 'sharethis_' + s.idx;
                document.write('<span id="' + id + '"></span>');
                var x = document.getElementById(id);
                if (x) {
                    x.appendChild(a);
                }
            }
        }
        this.defer(function(){SHARETHIS.log('view')});
        return s;
    },
    share: function(sharelet){
        this.widget.sharelet = sharelet;
        this.widget.show(sharelet.options);
        var f = SHARETHIS.form([sharelet]);
        document.body.appendChild(f);
        f.submit();
    },
    form: function(olist) {
        field = function(k, v, brackets) {
            var f   = document.createElement("input");
            f.type  = "hidden";
            f.name  = (brackets == true ? k + "[]" : k);
            f.value = v;
            return f;
        }
        normalize = function(s){
            if (s == null) {
                return '';
            }
            return encodeURIComponent(s);
        }

        var f    = document.createElement("form");
        f.method = "post";
        f.action = "http://sharethis.com/share/lightbox.php";
        f.target = "stframe";
        for (var j in this.options) {
            f.appendChild(field("opts_" + j, normalize(this.options[j])));
        }
        for (var j in this.meta) {
            f.appendChild(field("meta_" + j, normalize(this.meta[j])));
        }
        for (var j in this.page.properties) {
            f.appendChild(field("page_" + j, normalize(this.page.properties[j])));
        }
        for (var j in this.query) {
            f.appendChild(field("query_" + j, normalize(this.query[j])));
        }
        for (var i=0; i < olist.length; i++) {
            obj = olist[i];
            for (var j in obj.properties) {
                f.appendChild(field(j, normalize(obj.properties[j]), true));
            }
        }
        return f;
    },
    log: function(event) {
        var url = "http://r.sharethis.com/log?event=" + event
            + "&publisher=" + encodeURIComponent(SHARETHIS.meta.publisher)
            + "&hostname=" + encodeURIComponent(SHARETHIS.meta.hostname)
            + "&location=" + encodeURIComponent(SHARETHIS.meta.location)
            + "&ts" + (new Date()).getTime() + "." + SHARETHIS.counter++;

        var logger = new Image(1,1);
        logger.src = url;
    }
});

var _query = [];
var _query = [];
_query.tabs = 'web,email';
_query.charset = 'utf-8';
_query.services = 'facebook,digg,stumbleupon,delicious,reddit,blinklist,newsvine,furl,tailrank,magnolia';
_query.style = 'default';
_query.publisher = '0726c60a-d22c-4dfa-a5d8-5d89b963706e';
_query.linkfg = '#000066';

var SHARETHIS = new ShareThis(_query);
SHARETHIS.query = _query;
var st = SHARETHIS;

} // end if !SHARETHIS

// Don't run if called from HEAD, or if toolbar has been run
function writeShareThis() {
var _slist = document.getElementsByTagName('script');
var _s = _slist[_slist.length - 1];
if (_s && _s.parentNode.tagName != "HEAD" && typeof(_sttoolbar) == "undefined") {
    var obj = SHARETHIS.addEntry(null,$merge(_query,{button:true,bind:false}));
    var id = 'sharethis_' + obj.idx;
    document.write('<span id="' + id + '"></span>');
    var x = document.getElementById(id);
    obj.bind(x);
}
}

/* jQuery delegate plug-in v1.0 */
;(function($) {
	$.extend($.event.special, {
		focusin: {
			setup: function() {
				if ($.browser.msie)
					return false;
				this.addEventListener("focus", $.event.special.focusin.handler, true);
			},
			teardown: function() {
				if ($.browser.msie)
					return false;
				this.removeEventListener("focus", $.event.special.focusin.handler, true);
			},
			handler: function(event) {
				var args = Array.prototype.slice.call( arguments, 1 );
				args.unshift($.extend($.event.fix(event), { type: "focusin" }));
				return $.event.handle.apply(this, args);
			}
		},
		focusout: {
			setup: function() {
				if ($.browser.msie)
					return false;
				this.addEventListener("blur", $.event.special.focusout.handler, true);
			},
			teardown: function() {
				if ($.browser.msie)
					return false;
				this.removeEventListener("blur", $.event.special.focusout.handler, true);
			},
			handler: function(event) {
				var args = Array.prototype.slice.call( arguments, 1 );
				args.unshift($.extend($.event.fix(event), { type: "focusout" }));
				return $.event.handle.apply(this, args);
			}
		}
	});
	$.extend($.fn, {
		delegate: function(type, delegate, handler) {
			return this.bind(type, function(event) {
				var target = $(event.target);
				if (target.is(delegate)) {
					return handler.apply(target, arguments);
				}
			});
		},
		triggerEvent: function(type, target) {
			return this.triggerHandler(type, [jQuery.event.fix({ type: type, target: target })]);
		}
	})
})(jQuery);

/* * Metadata - jQuery plugin for parsing metadata from elements*/

(function($) {

$.extend({
	metadata : {
		defaults : {
			type: 'class',
			name: 'metadata',
			cre: /({.*})/,
			single: 'metadata'
		},
		setType: function( type, name ){
			this.defaults.type = type;
			this.defaults.name = name;
		},
		get: function( elem, opts ){
			var settings = $.extend({},this.defaults,opts);
			// check for empty string in single property
			if ( !settings.single.length ) settings.single = 'metadata';
			
			var data = $.data(elem, settings.single);
			// returned cached data if it already exists
			if ( data ) return data;
			
			data = "{}";
			
			if ( settings.type == "class" ) {
				var m = settings.cre.exec( elem.className );
				if ( m )
					data = m[1];
			} else if ( settings.type == "elem" ) {
				if( !elem.getElementsByTagName )
					return undefined;
				var e = elem.getElementsByTagName(settings.name);
				if ( e.length )
					data = $.trim(e[0].innerHTML);
			} else if ( elem.getAttribute != undefined ) {
				var attr = elem.getAttribute( settings.name );
				if ( attr )
					data = attr;
			}
			
			if ( data.indexOf( '{' ) <0 )
			data = "{" + data + "}";
			
			data = eval("(" + data + ")");
			
			$.data( elem, settings.single, data );
			return data;
		}
	}
});

$.fn.metadata = function( opts ){
	return $.metadata.get( this[0], opts );
};

})(jQuery);
