﻿var Sawbuck = window.Sawbuck || {}; Sawbuck.CheckBoxGroup = function(id, values, mustSelectOne, resetFields, arrayValues) {
	this._property = id; this._id = id + "CBGroup"; if (arrayValues) {
		this._values = values
		this._arrayValues = true;
	}
	else { this._values = [values]; this._arrayValues = false; }
	this._eventHandlers = []; this._mustSelectOne = mustSelectOne || false; this._resetFields = resetFields || []; var self = this; this._checkboxes = $j("#" + this._id + " input[type=checkbox]"); this._checkboxes.click(function() {
		if (self.allowUncheck(this)) { self.raise({ property: self._property, value: self.getValue(), resetFields: self._resetFields }); return true; }
		else return false;
	});
}; Sawbuck.CheckBoxGroup.prototype.addHandler = function(eventHandler) { this._eventHandlers.push(eventHandler); }; Sawbuck.CheckBoxGroup.prototype.raise = function(args) { for (var i = 0; i < this._eventHandlers.length; i++) { Sawbuck.Debugger.report('filter: call handler'); Sawbuck.Debugger.report(args); this._eventHandlers[i](args); } }; Sawbuck.CheckBoxGroup.prototype.load = function(args) {
	if (this._arrayValues)
		this.setValue(args.value); else
		this.setValue(args.value[0]);
}
Sawbuck.CheckBoxGroup.prototype.getValue = function() {
	if (this._arrayValues) {
		var values = []; for (var c = 0; c < this._checkboxes.length; c++) {
			if (this._checkboxes[c].checked)
				values.push(parseInt(this._checkboxes[c].value));
		}
		return values;
	}
	else {
		var value = 0; for (var c = 0; c < this._checkboxes.length; c++) {
			if (this._checkboxes[c].checked)
				value += parseInt(this._checkboxes[c].value);
		}; return [value];
	} 
}; Sawbuck.CheckBoxGroup.prototype.setValue = function(value) {
	for (var x = 0; x < this._checkboxes.length; x++) {
		if (this._arrayValues) { this._checkboxes[x].checked = false; for (v in value) { if (this._checkboxes[x].value == value[v]) { this._checkboxes[x].checked = true; break; } } }
		else { var y = Math.pow(2, x); if ((value & y) == y) { this._checkboxes[x].checked = true; } else { this._checkboxes[x].checked = false; } } 
	} 
}; Sawbuck.CheckBoxGroup.prototype.allowUncheck = function(checkBox) {
	if (!this._mustSelectOne)
		return true; else {
		var checked = 0; for (var i = 0; i < this._checkboxes.length; i++) {
			if (this._checkboxes[i] != checkBox && this._checkboxes[i].checked)
				checked++;
		}
		return (checked >= 1);
	} 
}; Sawbuck.CheckBoxGroup.prototype.makeArray = function() { this._arrayValues = true; };