/*******************************************************
 * Array must have (id, name, ...) objects
 */
function fillSelectWithArray(selObj, itemArray) {
	for(var idx=0; idx<itemArray.length; idx++) {
		addOption(selObj, new Option(itemArray[idx].name, itemArray[idx].id));
	}
}

/*******************************************************
 * Array must have (id, name, ...) objects
 */
function fillSelectWithArray(selObj, itemArray, selected) {
	for(var idx=0; idx<itemArray.length; idx++) {
		var opt = new Option(itemArray[idx].name, itemArray[idx].id);
		addOption(selObj, opt);
		if(opt.value == selected) opt.selected = true;
	}
}

/*******************************************************
 * Array must have (id, name, ...) objects
 */
function refillSelectWithArray(selObj, itemArray, selected) {
	removeAllOptions(selObj);
    fillSelectWithArray(selObj, itemArray, selected);
}

/*******************************************************
 * Array must have (id, name, ...) objects
 */
function refillSelectWithArray(selObj, itemArray) {
	removeAllOptions(selObj);
    fillSelectWithArray(selObj, itemArray);
}

/*******************************************************
 * Array must have (id, name, ...) objects
 */
function addArrayToSelect(selObj, itemArray) {
     for(var idx=0; idx<itemArray.length; idx++) {
        if (!containsOption(itemArray[idx].id, itemArray)) {
			var opt = new Option(itemArray[idx].name, itemArray[idx].id);
			addOption(selObj, opt);
			if(opt.value == selected) opt.selected = true;
		}
	}
}


/*******************************************************
 *
 */
function addOption(selObj, optObj) {
	var len = selObj.options.length;
	selObj.options[len] = optObj;
}

/*******************************************************
 *
 */
function removeOption(selObj, optObj) {
	selObj.options[optObj.index] = null;
}

/*******************************************************
 *
 */
function removeAllOptions(selObj) {
	var len = selObj.options.length
	while(len > 0) {
		removeOption(selObj, selObj.options[0]);
		len = selObj.options.length;
	}
}

/*******************************************************
 *
 */
function moveOption(selOrig, selDest, optObj) {
	removeOption(selOrig, optObj);
	addOption(selDest, optObj);
}

/*******************************************************
 *
 */
function copyOption(selOrig, selDest, optObj) {
	addOption(selDest, optObj);
}

/*******************************************************
 *
 */
function selectOption(selObj, idObj) {
	var len = selObj.options.length;
	for(var idx=0; idx<len; idx++) {
		if(selObj.options[idx].value == idObj) {
			selObj.options[idx].selected = true;
			break;
		}
	}
}

/*******************************************************
 *
 */
function selectIdxOption(selObj, idx) {
	var len = selObj.options.length;
	
	if(idx < len)
		selObj.options[idx].selected = true;
}
/*******************************************************
 *
 */
function selectOptions(selObj, idArray) {
	var arrLen = idArray.length;
	for(var idx=0; idx<arrLen; idx++) {
		selectOption(selObj, idArray[idx]);
	}
}

/*******************************************************
 *
 */
function unSelectAllOptions(selObj) {
	var len = selObj.options.length;
	for(var idx=0; idx<len; idx++) {
		selObj.options[idx].selected = false;
	}
}


/*******************************************************
 *
 */
function selectAllOptions(selObj) {
	var len = selObj.options.length;
	for(var idx=0; idx<len; idx++) {
		selObj.options[idx].selected = true;
	}
}


/*******************************************************
 *
 */
function moveSelectedOptions(selOrig, selDest) {
	var sel = selOrig.selectedIndex;
	while(sel != -1) {
		var opt = selOrig.options[sel];
		removeOption(selOrig, opt);
		addOption(selDest, opt);
		sel = selOrig.selectedIndex;
	}
}

/*******************************************************
 *
 */
function removeSelectedOptions(selOrig) {
	var sel = selOrig.selectedIndex;
	while(sel != -1) {
		var opt = selOrig.options[sel];
		removeOption(selOrig, opt);
		sel = selOrig.selectedIndex;
	}
}


/*******************************************************
 *
 */
function moveAllOptions(selOrig, selDest) {
	var len = selOrig.options.length;
	while(len > 0) {
		var opt = selOrig.options[0];
		removeOption(selOrig, opt);
		addOption(selDest, opt);
		len = selOrig.options.length;
	}
}

/*******************************************************
 *
 */
function getSelectedOption(selObj) {
	if(selObj.selectedIndex != -1)
		return selObj.options[selObj.selectedIndex];
	else
		return null;
}

function containsValue(selObj, value) {
	var len = selObj.options.length;
	for(var idx=0; idx<len; idx++) {
		if(selObj.options[idx].value == value){
			return true;
		}
	}
	return false;
}

function containsOption(id, idArray) {
    var arrLen = idArray.length;
	for(var idx=0; idx<arrLen; idx++) {
		if (id == idArray[idx].id) {
			return true;
		}
	}
	return false;
}

function getContainedOption(id, idArray) {
    var arrLen = idArray.length;
	for(var idx=0; idx<arrLen; idx++) {
		if (id == idArray[idx].id) {
			return idArray[idx];
		}
	}
	return null;
}