/* 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */


;
/*
 * jQuery hashchange event - v1.2 - 2/11/2010
 * http://benalman.com/projects/jquery-hashchange-plugin/
 * 
 * Copyright (c) 2010 "Cowboy" Ben Alman
 * Dual licensed under the MIT and GPL licenses.
 * http://benalman.com/about/license/
 */
(function($,i,b){var j,k=$.event.special,c="location",d="hashchange",l="href",f=$.browser,g=document.documentMode,h=f.msie&&(g===b||g<8),e="on"+d in i&&!h;function a(m){m=m||i[c][l];return m.replace(/^[^#]*#?(.*)$/,"$1")}$[d+"Delay"]=100;k[d]=$.extend(k[d],{setup:function(){if(e){return false}$(j.start)},teardown:function(){if(e){return false}$(j.stop)}});j=(function(){var m={},r,n,o,q;function p(){o=q=function(s){return s};if(h){n=$('<iframe src="javascript:0"/>').hide().insertAfter("body")[0].contentWindow;q=function(){return a(n.document[c][l])};o=function(u,s){if(u!==s){var t=n.document;t.open().close();t[c].hash="#"+u}};o(a())}}m.start=function(){if(r){return}var t=a();o||p();(function s(){var v=a(),u=q(t);if(v!==t){o(t=v,u);$(i).trigger(d)}else{if(u!==t){i[c][l]=i[c][l].replace(/#.*/,"")+"#"+u}}r=setTimeout(s,$[d+"Delay"])})()};m.stop=function(){if(!n){r&&clearTimeout(r);r=0}};return m})()})(jQuery,this);;
;(function($) {

/**
 * Ajaxify plugin - set an element to act like an iframe where links and forms submit via ajax and replace the element's contents
 * @author Ken Snyder, SolutionStream
 * @copyright 2011 USSA
 */
$.fn.ajaxify = function(options) {
	options = $.extend({}, $.ajaxify.defaultOptions, options || {});
	function loadUrl($el, url, ajaxOptions) {
		url += (url.indexOf('?') == -1 ? '?' : '&') + 'ajaxified=1';
		//var oncomplete = $.ajaxify.bindForms($el, url);
		$el.fancyLoad(url, ajaxOptions);
	}
	function go($el, url) {
		if (!options.hashchange) {
			loadUrl($el, url);
			return;
		}
		var loc = window.location;
		url = url.replace(new RegExp('^' + loc.protocol + '//' + loc.host, 'i'), '');
		loc.hash = '#' + url;
	}
	this.each(function(i, parent) {
		if (parent.ajaxified) {
			return;
		}
		parent.ajaxified = true;
		var $parent = $(parent);
		$parent.delegate('a', 'click', function(evt) {
			var href = $(this).attr('href');
			if ((href && href.slice(0,1) == '#') || !!this.target || options.breakoutLinkCallback.call(this, evt) === true) {
				// no need to intercept
				return;
			}
			evt.preventDefault();
			evt.stopPropagation();
			go($parent, href);
		});
		$parent.delegate('input[type=submit], input[type=image]', 'click', function() {
			$parent.$clickedSubmit = $(this);			
		});
		$parent.delegate('form', 'submit', function(evt) {
			if (!!this.target || options.breakoutFormCallback.call(this, evt) === true) {
				// no need to intercept
				delete($parent.$clickedSubmit);
				return;
			}
			evt.preventDefault();
			evt.stopPropagation();
			var $form = $(this);
			var data = $form.serialize();
			var submit = ($parent.$clickedSubmit || $form.find('input[type=submit], input[type=image]'))[0];
			if (submit && submit.name && submit.value) {
				// add parameter as if first submit button was clicked
				data += (data.length > 0 ? '&' : '') + encodeURIComponent(submit.name) + '=' + encodeURIComponent(submit.value);
			}
			if (this.method.toUpperCase() == 'POST') {
				loadUrl($parent, this.action, {type:'post', data:data});
			}
			else {
				go($parent, this.action + '?' + data);
			}
			delete($parent.$clickedSubmit);
		});
	});
	var $first = this.eq(0);
	var $window = $(window);
	if (options.hashchange) {
		$window.bind('hashchange', function() {
			var href = window.location.hash.slice(1);
			if (href) {
				loadUrl($first, href);
			}
		});
	}
	if (options.startUrl) {
		loadUrl($first, options.startUrl);
	}
	else if (options.hashchange && window.location.hash.length > 1) {
		$window.trigger('hashchange');
	}
	return this;
}

$.ajaxify = {
	defaultOptions: {
		startUrl: null,
		hashchange: true,
		breakoutLinkCallback: $.noop,
		breakoutFormCallback: $.noop
	},
	bindForms: function($parent, url) {			
		return function() {
			$parent.find('form').each(function(i, form) {
				if (form.action == '') {
					form.action = url;
				}
			});
		};
	}
}


/**
 * Fancyload plugin - alternative to 1.4.4 $.ajax() for loading ajax content into a container with a fade effect
 * (using jQuery 1.4.4 without deferreds)
 * @author Ken Snyder, SolutionStream
 * @copyright 2011 USSA 
 */
$.fn.fancyLoad = function(url, options) {
	var faded, html;
	function both(incomingHtml, status, jqXhr) {
		if (typeof incomingHtml == 'string') {
			html = incomingHtml;
		}
		if (html && faded) {
			if (!jqXhr || jqXhr.status == 200) {				
				$container.html(html).fadeTo(options.fadeIn, 1.0, options.afterFadeIn);
			}
		}
	}
	function afterFade() {
		faded = true;
		both();
	}
	// the first item in our collection is our container
	var $container = this.length == 1 ? this : $(this[0]);
	// set default options
	options = $.extend({}, $.fancyLoad.defaultOptions, options || {});
	options.complete || (options.complete = function(jqXhr) {		
		if (jqXhr.status == 403) {
			// forbidden
			$container.html(options.loginHtml || '<div class="ajax-error">Login required...</div>').stop().css('opacity', 1);
			window.location.reload();
			return;
		}
		if (jqXhr.status == 302) {
			// forward as in to login page
			var location = jqXhr.getResponseHeader('Location');
			if (location) {
				window.location.href = location;
			}
			else {
				window.location.reload();
			}
			return;
		}
		if (jqXhr.status !== 200) {
			// other error such as 500 server error
			$container.html(options.errorHtml || '<div class="ajax-error">System error. Please try again later.</div>').stop().css('opacity', 1);		
		}
	});
	if ($container.html() == '') {
		// container is empty, so don't fade out
		afterFade();
	}
	else {
		// start our fade out
		$container.fadeTo(options.fadeOut, 0.0, afterFade); 
	}
	// start our ajax request
	options.success = both;
	options.url = url;
	return $.ajax(options);
};
$.fancyLoad = {
	defaultOptions: {
		fadeOut: 800, // ms
		fadeIn: 200, // ms
		afterFadeIn: $.noop // callback
	}
};

})(jQuery);;
/**
 * General USSA functions
 * @author Ken Snyder, SolutionStream
 * @copyright 2011 USSA
 */
;(function($, global) {

var ussa = global.ussa || {};

ussa.Tabs = function(options) {
	var $tabs = $(options.tabs);
	var $content = options.content ? $(options.content) : false;
	var selClass = options.selectedClass || 'selected';
	var $ajaxContainer = options.loadContentTo ? $(options.loadContentTo) : false;
	if (!$content && !$ajaxContainer) {
		throw new Error('ussa.Tabs: must have options.content or options.loadContentTo.');
	}
	$tabs.click(function(evt) {
		evt.preventDefault();
		if ($(this).hasClass(selClass)) {
			return;
		}
		var idx = $.inArray(this, $tabs);
		$tabs.removeClass(selClass).eq(idx).addClass(selClass);
		if ($ajaxContainer) {
			var a = this.tagName.toUpperCase() == 'A' ? this : this.getElementsByTagName('a')[0];
			if (!a || a.href.length == 0) {
				return;
			}
			evt.stopPropagation();
			if (a.href.slice(0,1) == '#') {
				$ajaxContainer.append($(a.href).show());
			}
			else {				
				$ajaxContainer.fancyLoad(a.href);
			}
		}
		else {			
			$content.css('visibility','hidden').slideUp(300)
				.eq(idx).css('visibility','hidden').slideDown(300, function() {
					$(this).css('visibility','visible').fadeIn(300);
				});
		}
	});
}

//
// require attributes:
// options.orientation - vertical or horizontal
// options.prev - selector of previous control
// options.next - selector of next control
// options.viewport - selector of viewing area
// options.slider - selector for sliding tray
// options.sliderItems - selector for itmes in the sliding tray
// options.disabled - css class name for disabled controls
ussa.HoverScroller = function(options) {	
	var $prev = $(options.prev);
	var $next = $(options.next);
	var $viewport = $(options.viewport);
	var $slider = $(options.slider);
	var $sliderItems = $(options.sliderItems);
	var contentSize = 0;
	var dimension, property;
	if (options.orientation == 'vertical') {
		dimension = 'Height';
		property = 'marginTop';
	}
	else {
		dimension = 'Width';
		property = 'marginLeft';
	}
	var viewportSize = $viewport[dimension.toLowerCase()]();
	$sliderItems.each(function() {
		contentSize += $(this)['outer' + dimension]() + 10; // 10 as fudge factor, i don't know why
	});
	$prev.addClass(options.disabled);
	if (contentSize < viewportSize) {
		$next.addClass(options.disabled);
		return;
	}
	var leway = viewportSize - contentSize;
	var duration = 500;
	var pos = 0;
	var props = {};
	function startScrollPrev() {
		$next.removeClass('disabled');
		props[property] = '0px';
//console.log(props);		
		$slider.animate(props, duration, function() {
			$prev.addClass('disabled');
		});
	}
	function stopScrollPrev() {
		$slider.stop();
	}
	function startScrollNext() {
		$prev.removeClass('disabled');
		props[property] = leway + 'px';
//console.log(props);		
		$slider.animate(props, duration, function() {
			$next.addClass('disabled');
		});
	}
	function stopScrollNext() {
		$slider.stop();
	}	
	$prev.hover(startScrollPrev, stopScrollPrev);
	$next.hover(startScrollNext, stopScrollNext);
};

global.ussa = ussa;
	
})(jQuery, this);;
(function($) {

window.SnowConnect = function(options) {
	var $tabs = $(options.tabs);
	var $content = $(options.content);
	// setup tabs
	$tabs.click(function(evt) {
		evt.preventDefault();
		this.blur();
		var idx = $.inArray(this, $tabs);
		$tabs.removeClass('selected').eq(idx).addClass('selected');
		$content.hide().eq(idx).fadeIn(300);
	});
	$content.eq(0).show();
	// setup carousels
	$.each(options.carousels, function(i, options) { new UssaCarousel(options) });
	// setup news more / less
	$(options.rss.container).each(function(i,el) { new UssaVertScroller(el, options.rss) });
}
window.UssaCarousel = function(options) {
	var $controlLeft = $(options.controlLeft);
	var $controlRight = $(options.controlRight);
	var $items = $(options.items);
	// hide left arrow. if only zero or one items, also hide right arrow and abort setup
	$controlLeft.addClass('disabled');
	if ($items.length <= 1) {
		$controlRight.addClass('disabled');
		return;
	}	
	var $carousel = $($items[0].parentNode);
	var itemWidth = $items.eq(0).outerWidth();
	var duration = options.duration || 400;
	var currentOffset = 0;
	// setup left button
	$controlLeft.click(function(evt) {
		evt.preventDefault();
		if ($controlLeft.hasClass('disabled')) {
			return;
		}
		currentOffset--;
		$controlRight.removeClass('disabled');
		$controlLeft[currentOffset == 0 ? 'addClass' : 'removeClass']('disabled');
		$carousel.animate({
			left: (currentOffset * -1 * itemWidth) + 'px'
		});
	}, duration);
	// setup right button
	$controlRight.click(function(evt) {
		evt.preventDefault();
		if ($controlRight.hasClass('disabled')) {
			return;
		}		
		currentOffset++;
		$controlLeft.removeClass('disabled');
		$controlRight[currentOffset == $items.length - 1 ? 'addClass' : 'removeClass']('disabled');
		$carousel.animate({
			left: (currentOffset * -1 * itemWidth) + 'px'
		}, duration);
	});	
}
window.UssaVertScroller = function(container, options) {
	var $container = $(container);
	var $ul = $container.find(options.list);
	var $prev = $container.find(options.prev);
	var $next = $container.find(options.next);
	var listHeight;
	$prev.addClass('disabled');
	$prev.click(function(evt) {
		evt.preventDefault();
		if ($prev.hasClass('disabled')) {
			return;
		}
		var newTop = parseFloat($ul.css('top')) + options.height;
		$next.removeClass('disabled');
		if (newTop > 0) {
			newTop = 0; 
			$prev.addClass('disabled');
		}
		else {
			$prev.removeClass('disabled');
		}
		$ul.animate({top:newTop + 'px'}, options.duration);
	});	
	$next.click(function(evt) {
		evt.preventDefault();
		if ($next.hasClass('disabled')) {
			return;
		}		
		listHeight = listHeight || $ul.height();
		var newTop = parseFloat($ul.css('top')) - options.height;
		$prev.removeClass('disabled');
		if (newTop < -1 * listHeight + options.height - 20) {
			newTop = -1 * listHeight + options.height - 20; 
			$next.addClass('disabled');
		}
		else {
			$next.removeClass('disabled');
		}
		$ul.animate({top:newTop + 'px'}, options.duration);
	});	
}

})(jQuery);;
(function ($) {

  Drupal.behaviors.addthis = {
    attach: function(context, settings) {
      $.getScript(
        Drupal.settings.addthis.widget_url,
        function(data, textStatus) {
          addthis.init();
        }
      );
    }
  };

}(jQuery));
;

