﻿$.fn.ready(function () {
	$(".BubbleJax").each(function (i, val) {
		$(this).BubbleJax();
	});
});

function CheckAvailiability(id) {
	document.title = document.title + ".";
	var container = $("#" + id);
	var original = container.attr("data-original");
	var companion = $("#" + container.attr("data-companion"));
	var action = container.attr("data-action");
	if (($.trim(container.val()) === "") || ($.trim(container.val()).toLowerCase() === original.toLowerCase())) {
		companion.stop().fadeOut();
	} else {
		$.ajax({
			url: "/bubblejax/?action=" + action + "&value=" + container.val(),
			success: function (data) {
				if (parseInt(data) === 0) {
					companion.html("&nbsp; <strong style='color:green;'>" + container.val() + "</strong> is available!");
				} else if (parseInt(data) === 1) {
					companion.html("&nbsp; <strong style='color:red;'>" + container.val() + "</strong> is not available. Try something else!");
				}
				companion.stop().fadeIn();
			}
		});
	}
}

function ValidEmail(id) {
	document.title = document.title + ".";
	var container = $("#" + id);
	var companion = $("#" + container.attr("data-companion"));
	if ($.trim(container.val()) === "") {
		companion.stop().fadeOut();
	} else {
		var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
		if (reg.test($.trim(container.val())) === false) {
			companion.html("&nbsp; <strong style='color:red;'>Invalid email address</strong>").stop().fadeIn();
		} else {
			companion.fadeOut();
		}
	}
}

// http://unscriptable.com/index.php/2009/03/20/debouncing-javascript-methods/
(function ($, sr) { var debounce = function (func, threshold, execAsap) { var timeout; return function debounced() { var obj = this, args = arguments; function delayed() { if (!execAsap) { func.apply(obj, args) } timeout = null } if (timeout) { clearTimeout(timeout) } else if (execAsap) { func.apply(obj, args) } timeout = setTimeout(delayed, threshold || 500) } }; jQuery.fn[sr] = function (fn) { return fn ? this.bind('keyup change', debounce(fn)) : this.trigger(sr) } })(jQuery, 'smartchange');

//	Name:		BubbleJax
//	Purpose:	Handshaker for Ajax.ashx requests

jQuery.fn.BubbleJax = function () {
	var id = $(this).attr("id");
	switch ($(this).attr("data-function")) {
		case "CheckAvailiability":
			$(this).after("<span id='" + this.attr("data-companion") + "'></span>");
			$(this).smartchange(function () {
				CheckAvailiability(id);
			}).change();
			break;
		case "ValidEmail":
			$(this).after("<span id='" + this.attr("data-companion") + "'></span>");
			$(this).smartchange(function () {
				ValidEmail(id);
			}).change();
			break;
		default:
			break;
	}
};
