if (!window.fio) {
	window.fio = {};
}
//var fio = new Object();

(function() {
	var self = fio.ToolTipSet = Class.create({
		initialize: function(selector, options) {
			var options = Object.extend(Object.clone(self.defaultOptions), options || {});
			
			var hideTip = function() {
				this.tip.hide();
			};
			var showTip = function() {
				this.tip.show();
				var offset = this.viewportOffset();
				var size = this.tip.getDimensions();
				var hiddenHeight = (offset[1] + size.height + options.offsetY - viewportDim.height);
				if (hiddenHeight > 0) {
					this.tip.style.top = -1 * (size.height + options.offsetX - 25) + 'px';
				} else {
					this.tip.style.top = options.offsetY + 'px';
				}
				var hiddenWidth = (offset[0] + size.width + options.offsetX - viewportDim.width);						
				if (hiddenWidth > 0) {
					this.tip.style.left = -1 * (size.width + options.offsetX - 25) + 'px';
				} else {
					this.tip.style.left = options.offsetX + 'px';
				}
			};
			var showTipEnter = function(e) {
				try {
					if (e.relatedTarget && e.relatedTarget != this && !e.relatedTarget.descendantOf(this)) {
						showTip.call(this);
					}
				} catch(e) {}
			};
			var hideTipLeave = function(e) {
				try {
					if (e.relatedTarget && e.relatedTarget != this && !e.relatedTarget.descendantOf(this)) {
						hideTip.call(this);
					}
				} catch(e) {}
			};
			var viewportDim;
			var loadViewportDim = function() {
				viewportDim = document.viewport.getDimensions();
			}
			Element.observe(window, 'resize', loadViewportDim);
			loadViewportDim();
			var tipEls = (Object.isArray(selector) ? selector : $$(selector));
			tipEls.each(function(el) {
				el.style.position = 'relative';
				// TODO: use a 3x3 table to allow css for the tooltip callout nub; change class based on which corner should have the nub
				var tip = $(document.createElement('div'));
				tip.setStyle({
					position: 'absolute',
					display: 'none'
				});
				tip.className = 'tooltip';
				var tipTitle, tipText = el.getAttribute(options.tipAttr);
				if (options.titleAttr == 'innerHTML') {
					tipTitle = el.innerHTML.stripTags();
				}
				else if (typeof options.titleAttr == 'string' && options.titleAttr.length > 0) {
					tipTitle = el.getAttribute(options.titleAttr);
				}
				if (tipTitle) {
					tipText = '<h3>' + tipTitle + '</h3>' + tipText;
				}
				tip.innerHTML = tipText;
				el.tip = tip;
				el.appendChild(tip);
				if (Prototype.Browser.IE) {
					el.observe('mouseenter', showTip);
					el.observe('mouseleave', hideTip);
				}
				else {
					el.observe('mouseover', showTipEnter);							
					el.observe('mouseout', hideTipLeave);
				}
			});
		}
	});
	self.defaultOptions = {
		offsetY: 20,
		offsetX: 20,
		tipAttr: 'fio:tip',
		titleAttr: 'fio:word'
	};
})();

fio.fx = {
	fadeAppear: function(fade, appear, queue) {
		fade.hide();
		appear.show();
		/*
		new Effect.Parallel([
			new Effect.BlindUp(fade),
			new Effect.BlindDown(appear)
		], {duration: 0.4});
		*/
	}
};

fio.sform = {
	search: function(){
		if($('q').value && $('q').value != 'Search'){
			$('sform').submit();
		}
		return false;
	},
	searchTerm: function(){
		if($('q').value=='Search'){
			$('q').value='';
		}else if($('q').value==''){
			$('q').value='Search';
		}
	}
};

fio.generalForm = {
	setState: function(){
		new Ajax.Updater('state-wrapper', '/form-load-state/', {
		  parameters: { country: $F('country') }
		});
	}
};

// google analytics tracker
fio.gat = {
	tracker: null,
	track: function(url,checkDest) {
		try {
			if (!fio.gat.tracker) {
				return false;
			}
			if (checkDest) {
				var currUrl = window.location.protocol + '//' + window.location.host;
				if (url.indexOf(currUrl) == 0) {
					// same domain
					return false;
				}
			}
			fio.gat.tracker._trackPageview(url);
			return true;
		}
		catch (e) {
			return false;
		}
	}
};