var MAX_SELECTIONS = 20;
var DELAY_TIME = 500;
var CBOX_CLASSNAME = "compareCbox";
var compareForm;


function doCompareSubmitForm(partCompareForm)  {
	var checkBoxes;
	var checkedCount;
	var i;

	compareForm = dojo.byId(partCompareForm);
	checkBoxes = getCompareCheckboxes();
	checkedCount = countCheckedBoxes(checkBoxes);
	
	if (checkedCount <= 1) {
		for (i = 0; i < checkBoxes.length && i < MAX_SELECTIONS; i++) {
			checkBoxes[i].checked = true;
		}
		
		setTimeout(submitForm, DELAY_TIME);
	} else {
		submitForm();
	}

}

function doCompareSubmit(partCboxId)  {
	var partCbox = dojo.byId(partCboxId);
	var checkBoxes;
	var checkedCount;
	var partCboxIndex;
	var i;

	compareForm = partCbox.form;
	checkBoxes = getCompareCheckboxes();
	checkedCount = countCheckedBoxes(checkBoxes);
	
	if (checkedCount == 0) {
		partCboxIndex = getPartCboxIndexInList(checkBoxes, partCboxId);
		
		if (partCboxIndex >= MAX_SELECTIONS) {
			partCbox.checked = true;
			for (i = 0; i < (MAX_SELECTIONS - 1); i++) {
				checkBoxes[i].checked = true;
			}
		} else {
			for (i = 0; i < checkBoxes.length && i < MAX_SELECTIONS; i++) {
				checkBoxes[i].checked = true;
			}
		}
		
		setTimeout(submitForm, DELAY_TIME);
	} else {
		if (checkedCount == 1) {
			if (partCbox.checked == false) {
				partCbox.checked = true;
			} else {
				partCboxIndex = getPartCboxIndexInList(checkBoxes, partCboxId);
				
				if (partCboxIndex >= MAX_SELECTIONS) {
					for (i = 0; i < (MAX_SELECTIONS - 1); i++) {
						checkBoxes[i].checked = true;
					}
				} else {
					for (i = 0; i < checkBoxes.length && i < MAX_SELECTIONS; i++) {
						checkBoxes[i].checked = true;
					}
				}
			}
			
			setTimeout(submitForm, DELAY_TIME);
		} else {
			submitForm();
		}
	}

}

function submitForm() {
	compareForm.submit();
}


function countCheckedBoxes(checkBoxes) {
	var checkedCtr = 0;
	var i;
	
	for (i = 0; i < checkBoxes.length; i++) {
		if (checkBoxes[i].checked == true) {
			checkedCtr++;
		}
	}

	return checkedCtr;
}

function getCompareCheckboxes() {
	var inputElements;
	var inputClass;
	var checkBoxes = new Array();
	var i, j = 0;
	
	inputElements = compareForm.getElementsByTagName("input");
	
	for (i = 0; i < inputElements.length; i++) {
		if (dojo.hasClass(inputElements[i], CBOX_CLASSNAME)) {
			checkBoxes[j] = inputElements[i];
			j++;
		}
	}

	return checkBoxes;
}


function getPartCboxIndexInList(checkBoxes, partCboxId) {
	var partCboxIndex;
	var i;
	
	for (i = 0; i < checkBoxes.length; i++) {
		if (checkBoxes[i].getAttribute("id") == partCboxId) {
			partCboxIndex = i;
			break;
		}
	}

	return partCboxIndex;
}

function doCheck(partCbox) {
	var checkBoxes;
	var checkedCount;	

	compareForm = partCbox.form;
	checkBoxes = getCompareCheckboxes();
	checkedCount = countCheckedBoxes(checkBoxes);
	
	if (checkedCount > MAX_SELECTIONS) {
		alert('A maximum of ' + MAX_SELECTIONS + ' products may be selected for comparison!');
		partCbox.checked = false;
	}
	
}
