/**
 * Copyright (c) 2009 Sergiy Kovalchuk (serg472@gmail.com)
 * 
 * Dual licensed under the MIT
 * (http://www.opensource.org/licenses/mit-license.php) and GPL
 * (http://www.opensource.org/licenses/gpl-license.php) licenses.
 * 
 * Following code is based on Element.mask() implementation from ExtJS framework
 * (http://extjs.com/)
 * 
 */
(function(a) {
	a.fn.mask = function(c, b) {
		a(this).each(function() {
			if (b !== undefined && b > 0) {
				var d = a(this);
				d.data("_mask_timeout", setTimeout(function() {
					a.maskElement(d, c)
				}, b))
			} else {
				a.maskElement(a(this), c)
			}
		})
	};
	a.fn.unmask = function() {
		a(this).each(function() {
			a.unmaskElement(a(this))
		})
	};
	a.fn.isMasked = function() {
		return this.hasClass("masked")
	};
	a.maskElement = function(d, c) {
		if (d.data("_mask_timeout") !== undefined) {
			clearTimeout(d.data("_mask_timeout"));
			d.removeData("_mask_timeout")
		}
		if (d.isMasked()) {
			a.unmaskElement(d)
		}
		if (d.css("position") == "static") {
			d.addClass("masked-relative")
		}
		d.addClass("masked");
		var e = a('<div class="loadmask"></div>');
		if (navigator.userAgent.toLowerCase().indexOf("msie") > -1) {
			e.height(d.height() + parseInt(d.css("padding-top"))
					+ parseInt(d.css("padding-bottom")));
			e.width(d.width() + parseInt(d.css("padding-left"))
					+ parseInt(d.css("padding-right")))
		}
		if (navigator.userAgent.toLowerCase().indexOf("msie 6") > -1) {
			d.find("select").addClass("masked-hidden")
		}
		d.append(e);
		if (c !== undefined) {
			var w = $(window);
			
			var b = a('<div class="contentBox loadmask-msg" style="display:none;"><div class="lt">&nbsp;</div><div class="lb">&nbsp;</div><div class="rt">&nbsp;</div><div class="rb">&nbsp;</div><div class="load-message">' + c + '</div></div>');
			d.append(b);
			b.css("top", Math.round(w.height() / 2 - (b.height() - parseInt(b.css("padding-top")) - parseInt(b.css("padding-bottom"))) / 2)	+ "px");
			b.css("left", Math.round(w.width() / 2 - (b.width() - parseInt(b.css("padding-left")) - parseInt(b.css("padding-right"))) / 2) + "px");
			b.show();
		}
	};
	a.unmaskElement = function(b) {
		if (b.data("_mask_timeout") !== undefined) {
			clearTimeout(b.data("_mask_timeout"));
			b.removeData("_mask_timeout")
		}
		b.find(".loadmask-msg,.loadmask").remove();
		b.removeClass("masked");
		b.removeClass("masked-relative");
		b.find("select").removeClass("masked-hidden")
	}
})(jQuery);
