// requires common.js

function Controls() {}

/**
 * Sets element state to enabled|disabled
 *
 * @param	DOMElement|string	element		Eiter object or id of the element.
 * @param	bool				state		New state: TRUE means 'Enabled', FALSE = 'Disabled'.
 * @param	object				options		Extra options.
 * @return	int								Returns amount of elements affected by the operation.
 */
Controls.setElementState = function(element, state, options) {

	if (typeof element != "object") {
		element = document.getElementById(element);
	}

	var elementsAffected = 0;

	if (!element.tagName) return false;

	element.className = state ? element.className.replace(/\s?\bdisabled\b/, "") : element.className + " disabled";
	element.disabled = !state;
	elementsAffected++;

	if (options && options.affectLabels) {

		var id = element.id;

		//var labels = getElementsByTagNameEx("label", {"attributes.for": id});
		//var labels = getElementsByTagNameExCallback("label", function(el){ return el.attributes.for == id; });
		//var labels = getElementsByTagNameExCallback("label", function(el){ return el.attributes.for == id; });

	
		var callback = function(tid){
			return function(el){
				//alert("el=" + el + "; el.attributes.for=" + el.attributes["for"].nodeValue + "; for=" + el.getAttribute("for") + "; tid=" + tid);
				//var res = (el.getAttribute("for") == tid);
				var res = el.attributes["for"].nodeValue == tid;
				//alert(el.attributes.for.nodeValue);
				//var res = (el.attributes.for.nodeValue == tid);
				return res;
			}
		}(id);


		var labels = getElementsByTagNameExCallback("label", function(el){ var res = el.attributes["for"].nodeValue == id; return res; });

//		alert("labels.length: " + labels.length);

		if (labels.length) {
			for (var i in labels) {
				var labelsAffected = Controls.setElementState(labels[i], state);
				//alert("labelsAffected: " + labelsAffected);
				elementsAffected += labelsAffected;
			}
		}
	}

	return elementsAffected;
}

Controls.disableElement = function(element, options) {
	return Controls.setElementState(element, false, options);
}

Controls.enableElement = function(element, options) {
	return Controls.setElementState(element, true, options);
}


/**
 * Disables all controls within specified container element
 *
 * @param	mixed	container	Eiter element id or object
 * @return	int|bool			Returns disabled controls count	or false if any error occurs.
 */
 /**
Controls.disable = function(container) {

	if (typeof container != "object") {
		container = document.getElementById(container);
	}

	if (!container) return false;

	getElementsByTagName();
}
/**/
