(function($){
	$.UtilityBar = function(options) {
		var settings = $.extend({
			container: $("#utilityBar"),
			emailBtn: $("#utilityBar-Email"),
			emailOverlay: $("#emailAFriend"),
			id: "emailAFriend"
		},options);
		
		var $mainLIs = $("#utilityBar > li");
		var $mainAs = $("#utilityBar > li > a");
		var _locked = false;
		var $shareListLIs = settings.container.find("ul.util-share a");
		var bodyHTML =  $("#emailAFriend").find(".overlay-body").html();
		
		$shareListLIs.each(function(index, itm) {
			var 
				metas = document.getElementsByTagName("meta"),
				description = "",
				href = $(itm).attr("href");
			
			for (var i = 0; i < metas.length; i++){
				if (metas[i].getAttribute("name") == "description"){
					description = metas[i].getAttribute("content");
					break;
				}
			}
			
			href = href.replace("@@@PAGEHREF@@@", window.location.href);
			href = href.replace("@@@PAGETITLE@@@", document.title);
			href = href.replace("@@@BODYTEXT@@@", description);
			$(itm).attr("href", href);
		});

		$('a.utilPartnerLocatorLink').live('click',function(e){
			e.preventDefault();
			var url = ($(e.target).is('a')) ? e.target.href : $(e.target).parent().attr('href');
			
			window.open(url,'PartnerLocator','width=639,height=450,top=250,left=300,scrollbars=yes,resizable=yes');
		});
	
		// EVENTS 
		$mainLIs.hover(function(){
			_show(this);
		},function(){
			_hide(this);
		});
		
		$mainAs.focus(function() {
			$mainAs.each(function() {
				_hide(this);					  
			});
			_show($(this).parents("li"));					   
		});
		
		settings.container.find("a.print").click(_print);
		
		function initEmailActions() {
			settings.emailBtn.click(_showEmailPopup);
			settings.emailOverlay.find("a.overlay-close").click(_hideEmailPopup);
			settings.emailOverlay.find("form").submit(_validate);
		}
		initEmailActions();
		
		// PRIVATE
		function _show(tar) {
			if(!_locked) {					
				var $target = $(tar);
				
				$target.addClass("on");
				
				var index = $('#utilityBar li').index($target);
			}

		}
		function _hide(tar) {

			if(!_locked) {
				$mainLIs.removeClass("on");
			}

		}
		function _addBookmark(e) {
			e.preventDefault(e);
		}
		function _showEmailPopup() {
			_locked = true;
			settings.emailOverlay.show();
			
			$("#"+settings.id).find("#msg").maxLength(1014);
		}
		function _hideEmailPopup() {
			_locked = false;
			
			var $overlayBody = $("#"+settings.id + " .overlay-body");
			if($overlayBody) {
				$("#"+settings.id).removeClass("thankYou");
				$overlayBody.html(bodyHTML);
				initEmailActions();
			}
			
			settings.emailOverlay.hide();
			var fields = $("#emailAFriend input, #emailAFriend textarea");
			$("#emailAFriend label").removeClass("red");
			fields.val("");
			
			_hide();
		}
		function _print() {
			window.print();	
		}
		function _validate(e) {
			e.preventDefault(e);
			var fields = $("#emailAFriend input, #emailAFriend textarea");
			$("#emailAFriend label").removeClass("red");
			
			isValid = true;
			fields.each(function(index, itm) {
				itm.value = itm.value.split("<").join("");
				itm.value = itm.value.split(">").join("");
				if(($(itm).hasClass("required") && $(itm).val() == "") || ($(itm).hasClass("email") && ! _validateEmail($(itm).val()))) { 
					isValid = false;
					$(itm).parents("tr").find("label").addClass("red");
				}
			});
			
			if(isValid) {
				var closeBtn = '<div class="overlay-actions"><button class="button" id="close_'+settings.id+'" type="submit">close</button></div>';
				
				$("#"+settings.id).addClass("thankYou");
				var $overlayBody = $("#"+settings.id + " .overlay-body");
				var height = $overlayBody.height();
				$overlayBody.data("html", $overlayBody.html());
				$overlayBody.html('<h2>Thank You.</h2><h3>A message has been sent</h3>' + closeBtn);
				
				$overlayBody.height(height);
				
				$('#close_'+settings.id).click(function(e) {
					_hideEmailPopup();
				});
			}
		}
		function _validateEmail(address) {
			var email = /^([a-zA-Z0-9])+([\.a-zA-Z0-9_-])*@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-]+)+$/;
			if(!email.test(address)) {
				return false;
			}
			return true;
		}
	}
})(jQuery);

