function coalesce(value1, value2) {
    if (value1 == null || value1 == "") {
        return value2;
    } else {
        return value1;
    }
}

function setSelectedValue(objSelect, strValue) {
	for (var i=0; i<objSelect.options.length; i++) {
		if (objSelect.options[i].value == strValue
		 || objSelect.options[i].value == replace(strValue, '\\,', ',')) {
			objSelect.options[i].selected = true;
		}
	}
}

function setRadioValue(objRadioArray, strValue) {
	for (var i=0; i<objRadioArray.length; i++) {
		if (objRadioArray[i].value == strValue
		 || objRadioArray[i].value == replace(strValue, '\\,', ',')) {
			objRadioArray[i].checked = true;
		}
	}
}

function setSingleCheckBoxValue(objCheckbox, strValue) {
	if (objCheckbox.value == strValue
	 || objCheckbox.value == replace(strValue, '\\,', ',')) {
		objCheckbox.checked = true;
	} else {
		objCheckbox.checked = false;
	}
}

function setCheckBoxGroupValue(objCheckboxGroup, strCommaDelimitedValues) {
	var aryValues = split(strCommaDelimitedValues, ',');

	var blnFound;
	for (var i=0; i<objCheckboxGroup.length; i++) {
		blnFound = false;
		for (var j=0; j<aryValues.length; j++) {
			if (objCheckboxGroup[i].value == aryValues[j]) {
				blnFound = true;
				break;
			}
		}
		if (blnFound) {
			objCheckboxGroup[i].checked = true;
		} else {
			objCheckboxGroup[i].checked = false;
		}
	}
}

// splits a string on the delimiter. returns an array of strings
function split(strDelimited, strDelimiter) {
	var splitString = new Array();
	var pos=0, pos2=strDelimited.indexOf(strDelimiter, pos);
	while (pos2 != -1) {
	    // check if the deliter is preceeded by an escape character
	    if (pos2 > 0 && strDelimited.substring(pos2-1, pos2) == '\\') {
			if (pos2+1 >= strDelimited.length) {
				pos2 = -1;
			} else {
				pos2 = strDelimited.indexOf(strDelimiter, pos2+1);
			}
		} else {
			splitString[splitString.length] = replace(strDelimited.substring(pos, pos2), '\\' + strDelimiter, strDelimiter);
			pos = pos2 + strDelimiter.length;
			pos2 = strDelimited.indexOf(strDelimiter, pos);
		}
	}
	splitString[splitString.length] = replace(strDelimited.substr(pos), '\\' + strDelimiter, strDelimiter);
	return splitString;
}

function replace(strText, strSearch, strReplace) {
	var pos=0, pos2=strText.indexOf(strSearch, pos);
	var replaced = '';
	while (pos2 != -1) {
		replaced += strText.substring(pos, pos2) + strReplace;
		pos = pos2 + strSearch.length;
		pos2 = strText.indexOf(strSearch, pos);
	}
	replaced += strText.substr(pos);
	return replaced;
}

function populateYears(objSelect, minYear, maxYear) {
	// clear out existing years
	for (var i=objSelect.length-1 ; i>=0; i--) {
		objSelect.options[i] = null;
	}
	for (var j=0; j<=maxYear-minYear; j++) {
		objSelect.options[j] = new Option('' + (j + minYear), '' + (j + minYear));
	}
}