dojo.addOnLoad(function() {

	dojo.doc.isGvtMultipleSelectClick = true;
	dojo.connect(dojo.doc, 'onclick', function() {
		if (!dojo.doc.isGvtMultipleSelectClick) {
			dojo.query(".gvtMultipleSelect .content").style('display', 'none');
		}

		dojo.doc.isGvtMultipleSelectClick = false;
	});

	dojo.query(".gvtMultipleSelect").forEach(function(widget) {

		/* Open event */
		dojo.query('#' + widget.id + ' input[type="text"]').connect('onclick', function() {
			dojo.query(".gvtMultipleSelect .content").style('display', 'none');
			dojo.query('#' + widget.id + ' .content').style('display', 'block');
		});

		dojo.query('#' + widget.id + ' input[type="checkbox"]').forEach(function(checkbox) {
			checkbox.checked ? dojo.addClass(checkbox, 'checked') : dojo.removeClass(checkbox, 'checked');
		});

		dojo.query('#' + widget.id + ' input[type="checkbox"]').connect('onclick', function() {
			this.checked ? dojo.addClass(this, 'checked') : dojo.removeClass(this, 'checked');
		});

		/* Inner click event */
		dojo.connect(widget, 'onclick', function() {

			/* close when clicking somewhere else */
			dojo.doc.isGvtMultipleSelectClick = true;

			var max = dojo.query('#' + widget.id + ' input.max')[0].value;
			var checkedElementsCount = dojo.query('#' + widget.id + ' input[type="checkbox"].checked').length;
			var input = dojo.query('#' + widget.id + ' input[type="text"]')[0];
			input.value = input.value.replace(/[0-9]+/, checkedElementsCount);
			
			/* Disable checkboxes if maximum allowed exceeded */
			if (checkedElementsCount >= max) {
				dojo.query('#' + widget.id + ' input[type="checkbox"]').forEach(function(checkbox) { checkbox.disabled = true; });
				dojo.query('#' + widget.id + ' input[type="checkbox"].checked').forEach(function(checkbox) { checkbox.disabled = false; });
			} else {
				dojo.query('#' + widget.id + ' input[type="checkbox"]').forEach(function(checkbox) { checkbox.disabled = false; });
			}

		});
	});
});
