/* Common Small jQuery Plugins tailored to InterNations */

(function ($) {

	/* Highlight: Backwards-compatibility for old browsers lacking support for p:hover, namely IE 6 */

	$.fn.highlightClass = function (className) {
		return this.each(function () {
			var elem = $(this), handler = function () {
				if (elem.hasClass(className)) {
					elem.removeClass(className);
				} else {
					elem.addClass(className);
				}
			};
			elem.bind("mouseenter", handler).bind("mouseleave", handler);
		});
	};


	/* jQuery Plugin for embedded labels */

	$.fn.embeddedLabels = function () {
		return this.each($.embeddedLabels.setup);
	};

	$.embeddedLabels = {};
	
	$.embeddedLabels.setup = function () {
		
		var field = $(this),
			
			currentValue = field.val(),
			
			hasEmbeddedTitle = field.hasClass("embed_title"),
			hasEmbeddedLabel = field.hasClass("embed_label"),
			
			embeddedText = false;
		
		if (hasEmbeddedTitle) {
			embeddedText = field.attr("title");
		} else if (hasEmbeddedLabel) {
			embeddedText = $("label[for='" + field.attr("id") + "']").hide().eq(0).text();
			field.data('labelText', embeddedText);
		}
		
		field.removeClass("text-entered");
		if (currentValue == "") {
			if (embeddedText) {
				field.val(embeddedText);
			}
		} else if (currentValue != embeddedText) {
			field.addClass("text-entered");
		}
		
		field
			.data("hasEmbeddedLabel", hasEmbeddedLabel)
			.data("hasEmbeddedTitle", hasEmbeddedTitle)
			.data("hasEmbeddedLabelOrTitle", hasEmbeddedLabel || hasEmbeddedTitle)

			.unbind("focus", $.embeddedLabels.focusHandler)
			.focus($.embeddedLabels.focusHandler)

			.unbind("blur", $.embeddedLabels.blurHandler)
			.blur($.embeddedLabels.blurHandler)
			;
		
		// clear the embedded text when the form is submitted
		$(field.attr("form"))
			.unbind('submit', $.embeddedLabels.clearEmbeddedTexts)
			.submit($.embeddedLabels.clearEmbeddedTexts);
	};
	
	$.embeddedLabels.valueEqualsEmbedded = function (field) {
		var fieldValue = field.val();
		return field.data("hasEmbeddedLabel") && fieldValue == field.data("labelText") ||
			field.data("hasEmbeddedTitle") && fieldValue == field.attr("title");
	};
		
	$.embeddedLabels.focusHandler = function () {
		var field = $(this).addClass("focussed").addClass("text-entered");
		// The value can't be the same as the label or title
		if ($.embeddedLabels.valueEqualsEmbedded(field)) {
			field.val("");
		}
	};
	
	$.embeddedLabels.blurHandler = function () {
		var field = $(this).removeClass("focussed");
		if (field.data("hasEmbeddedLabelOrTitle")) {
			if (field.val() == "") {
				field
					.removeClass("text-entered")
					.val(field.data("hasEmbeddedLabel") ? field.data("labelText") : field.attr("title"));
			} else if ($.embeddedLabels.valueEqualsEmbedded(field)) {
				field
					.removeClass("text-entered");
			}
		}
	};
	
	$.embeddedLabels.clearEmbeddedTexts = function () {
		$.each(this.elements, function () {
			var field = $(this);
			if ($.embeddedLabels.valueEqualsEmbedded(field)) {
				field.val("");
			}
		});
	};

	
	/* jQuery Plugin for Dropdown Navigation (select form element) */

	$.fn.dropdownNavigation = function () {
		return this.each(function () {
			$(this).change(function () {
				location.href = this.options[this.selectedIndex].value;
			});
		});
	};

	/* jQuery Plugin for Radio Button Navigation (input type=radio) */

	$.fn.radioNavigation = function () {
		return this.each(function () {
			var el = $(this),
				tabNavigation = el.hasClass("radio-tab-navigation");
			if (tabNavigation) {
				var tabs = jQuery(".radio-tab");
			}
			el.find(":radio").each(function () {
				$(this).click(function () {
					if (tabNavigation) {
						var newTab = $("#" + this.value);
						newTab.show();
						tabs.not(newTab).hide();
					} else  {
						location.href = this.value;
					}
				});
			});
		});
	};

})(jQuery);
