﻿/// <reference path="jquery-1.3.js"/>

(function() {
	var 
		// Will speed up references to undefined, and allows munging its name.
		undefined,
		// Имя атрибута, в котором хранится счетчик (уровень) деактивации элемента.
		nbtDisableAttrName = "nbt-disable-level",
		// Имя атрибута для деактивации элемента.
		disabledAttrName = "disabled";

	// Деактивация или активация элемента.
	// context - DOM-элемент;
	// disable - true - деактивировать, false - активировать.
	var internalDisable = function(context, disable) {
		var nbtDisableLevel = parseInt(context.getAttribute(nbtDisableAttrName));
		if (isNaN(nbtDisableLevel)) nbtDisableLevel = 0;
		if (disable) nbtDisableLevel++; else nbtDisableLevel--;
		if (nbtDisableLevel <= 0) {
			context.removeAttribute(nbtDisableAttrName);
			context.removeAttribute(disabledAttrName);
		} else {
			context.setAttribute(nbtDisableAttrName, nbtDisableLevel);
			context.setAttribute(disabledAttrName, disabledAttrName);
		}
	};

	// Деактивация или активация выбранных элементов.
	// disable - true - деактивировать, false - активировать.
	jQuery.fn.nbtDisable = function(disable) {
		if (disable === undefined) disable = true;
		this.each(function() { internalDisable(this, disable); });
		return this;
	};

	// Активация или деактивация выбранных элементов.
	// enable - true - активировать, false - деактивировать.
	jQuery.fn.nbtEnable = function(enable) {
		if (enable === undefined) enable = true;
		return this.nbtDisable(!enable);
	};
})();