
function cDependenciesChecker(evenClass, unevenClass, invisibleClass) {

	this.evenClass = evenClass;
	this.unevenClass = unevenClass;
	this.invisibleClass = invisibleClass;

	this.idElements = [];

}

cDependenciesChecker.prototype.check = function(element, dep, dep_values) {

	var value = 0;

	if ( element.type == 'radio' || element.type == 'checkbox' ) {
		elements = document.getElementsByName(element.name);
		for ( var idx = 0; idx < elements.length; idx++ ) {
			if ( elements[idx].checked ) {
				if ( element.type == 'radio' ) {
					value = elements[idx].value;
					break;
				} else {
					value = value | elements[idx].value;
				}
			}
		}

		for ( var idx2 = 0; idx2 < dep.length; idx2++ ) {
			var item;
			if ( item = document.getElementById('q_' + dep[idx2]) ) {

				var cls = item.className.split(" ");
				var nls = new Array();

				for ( var cnt = 0; cnt < cls.length; cnt++ ) {
					if ( cls[cnt] != this.invisibleClass ) nls.push(cls[cnt]);
				}

				if ( dep_values[idx2] == null || ( ( element.type == 'radio' && value != dep_values[idx2] ) || ( element.type == 'checkbox' && (value & dep_values[idx2]) == 0 )) ) {
					nls.push(this.invisibleClass);
				}

				item.className = nls.join(" ");
			}
		}
	}

	this.colorize();
	return false;
}

cDependenciesChecker.prototype.colorize = function() {

	var evenrow = new Boolean();
	evenrow = false;

	for ( var idx = 0; idx < this.idElements.length; idx++ ) {
		if ( this.idElements[idx] ) {
			var item = document.getElementById('q_' + this.idElements[idx]);

			var cls = item.className.split(" ");
			var nls = new Array();
			var invisible = false;

			for ( var cnt = 0; cnt < cls.length; cnt++ ) {
				if ( cls[cnt] == this.invisibleClass ) {
					invisible = true;
				} else if ( cls[cnt] != this.evenClass && cls[cnt] != this.unevenClass ) {
					nls.push(cls[cnt]);
				}
			}

			if ( evenrow == true && this.evenClass != '' ) nls.push(this.evenClass);
			if ( evenrow == false && this.unevenClass != '' ) nls.push(this.unevenClass);

			if ( invisible ) nls.push(this.invisibleClass);

			if ( !invisible ) evenrow = !evenrow;

			item.className = nls.join(" ");
		}
	}
}

cDependenciesChecker.prototype.register = function(idElements) {
	this.idElements = idElements;
	this.colorize();
}
