function populateDaysInMonth(daysElement, monthElement, yearsElement) {
	var i;
	var leadingZero;
	var numElements = monthElement.length;

	var year = yearsElement.options[yearsElement.selectedIndex].value;
			
	var currentDaySelection = daysElement.selectedIndex;

	var numDays = (32 - new Date(year, monthElement.options[monthElement.selectedIndex].value-1, 32).getDate());
	for (i=0; i < numElements; i++) {
		daysElement.options[i] = null;
	}

	for(i=0 ; i < numDays ;i++) {
		if(i<9) {
			leadingZero = '0';
		} else {
			leadingZero = '';
		}
		daysElement.options[i] = new Option(String(leadingZero+(i+1)), i+1);
	}
	
	if(currentDaySelection > (numDays -1)){
		currentDaySelection = numDays - 1;
	}
	daysElement.selectedIndex = currentDaySelection;
}


function openMinimalWindow(url){
	window.open(url,"mywindow","resizable=1");
}

function checkEmailsMatch(inputOne, inputTwo, outputBox){
	var textOne = inputOne.value;
	var textTwo = inputTwo.value;
	var message = "";
	
	if(textOne != textTwo){
		message = "The E-mail addresses you have entered do not match.";
	}
	
	outputBox.innerHTML = message;
	
}

function inArray(value, array){
	for(arrayIndex = 0; arrayIndex < array.length; arrayIndex++){
		if(array[arrayIndex] == value){
			return arrayIndex;
		}
	}
	return false;
}

function compareOptions(a, b){
	var aValue = a['text'].toLowerCase();
	var bValue = b['text'].toLowerCase();
	
	return (aValue < bValue) ? -1 : 1;
} 

function sortOptionsAlphabetically(id){
	var box = document.getElementById(id);
	var newOrder = Array();
	
	for(i = 0; i < box.options.length; i++){
		newOrder[newOrder.length] = {'text': box.options[i].text, 'value': box.options[i].value, 'class': box.options[i].className};
	}
	
	newOrder.sort(compareOptions);
	
	box.options.length = 0;
	for(i = 0; i < newOrder.length; i++){
		var newOption = new Option(newOrder[i]['text'], newOrder[i]['value']);
		newOption.className = newOrder[i]['class'];
		box.options[box.options.length] = newOption;
	}
} 

function multiBoxSelect(fromID, toID, deleteFrom, sortTo){
	var fromBox = document.getElementById(fromID);
	var toBox = document.getElementById(toID);
	
	for(i = fromBox.options.length - 1; i >= 0; i--){
		if(fromBox.options[i].selected){
			var newOption = new Option(fromBox.options[i].text, fromBox.options[i].value);
			if(fromBox.options[i].className){ newOption.className = fromBox.options[i].className; }
			toBox.options[toBox.options.length] = newOption;
			if(deleteFrom){
				fromBox.options[i] = null;
			}
		}
	}
	
	if(sortTo){
		sortOptionsAlphabetically(toID);
	}
}

function cleanString(string){
	string = string.toLowerCase();
	string = string.replace(/&/g, 'and');
	string = string.replace(/[^a-z0-9]/g, '');
	return string;
}

function removeFromOtherBox(selectionBoxID, removeFromBoxID, removeOnlySelected, removeOnlyClassMatching){
	var selectionBox = document.getElementById(selectionBoxID);
	var removeFromBox = document.getElementById(removeFromBoxID);
	
	if(removeOnlySelected){
		var selectedValues = getSelectedValues(selectionBox, false);
	} else {
		var selectedValues = Array();
		for(i = 0; i < selectionBox.options.length; i++){
			selectedValues[selectedValues.length] = selectionBox.options[i].value;
		}
	}
		
	for(i = removeFromBox.options.length - 1; i >= 0; i--){
		key = inArray(removeFromBox.options[i].value, selectedValues);
		if(key !== false){
			if(removeOnlyClassMatching === false || (removeOnlyClassMatching !== false && removeFromBox.options[i].className == removeOnlyClassMatching)){
				removeFromBox.options[i] = null;
			}
		}
	}
}

function copyItemsToOtherBox(selectionBoxID, copyToBoxID, copyOnlySelected, sortTo){
	var selectionBox = document.getElementById(selectionBoxID);
	var copyToBox = document.getElementById(copyToBoxID);
	
	if(copyOnlySelected){
		var selectedValues = getSelectedValues(selectionBox, true);
	} else {
		var selectedValues = Array();
		for(i = 0; i < selectionBox.options.length; i++){
			selectedValues[selectedValues.length] = Array(selectionBox.options[i].value, selectionBox.options[i].text, selectionBox.options[i].className);
		}
	}
	
	for(i = 0; i < selectedValues.length; i++){
		var newOption = new Option(selectedValues[i][1], selectedValues[i][0]);
		newOption.className = selectedValues[i][2];
		copyToBox.options[copyToBox.options.length] = newOption;
	}
	
	if(sortTo){
		sortOptionsAlphabetically(copyToBoxID);
	}
}

function getSelectedValues(selectionBox, getTextToo){
	var selectedValues = Array();
	
	for(i = 0; i < selectionBox.options.length; i++){
		if(selectionBox.options[i].selected){
			if(getTextToo){
				selectedValues[selectedValues.length] = Array(selectionBox.options[i].value, selectionBox.options[i].text, selectionBox.options[i].className);
			} else {
				selectedValues[selectedValues.length] = selectionBox.options[i].value;
			}
		}
	}
	return selectedValues;
}

function selectAllItemsFromArray(array, arrayKey, mustBeSelectedToo, selectFromID, selectToID, deleteFrom, sortTo, fromClassMustBe){
	var selectFrom = document.getElementById(selectFromID);
	var selectTo = document.getElementById(selectToID);
	
	if(arrayKey === false){
		var selectionArray = array;
	} else {
		var selectionArray = array[arrayKey]
	}
	
	for(i = selectFrom.options.length - 1; i >= 0; i--){
		if((mustBeSelectedToo && selectFrom.options[i].selected) || !mustBeSelectedToo){
			if(inArray(selectFrom.options[i].value, selectionArray) !== false){
				if(fromClassMustBe === false || (fromClassMustBe !== false && selectFrom.options[i].className == fromClassMustBe)){
					var newOption = new Option(selectFrom.options[i].text, selectFrom.options[i].value);
					newOption.className = fromClassMustBe;
					selectTo.options[selectTo.options.length] = newOption;
					if(deleteFrom){
						selectFrom.options[i] = null;
					}
				}
			}
		}
	}
	if(sortTo){
		sortOptionsAlphabetically(selectToID);
	}
}



function sortGroupedOptionsAlphabetically(id, groupClassOrder){
	var box = document.getElementById(id);
	var newOrder = Array();
	var groupedOrders = Array();
	for(i = 0; i < groupClassOrder.length; i++){
		groupedOrders[groupClassOrder[i]] = Array();
	}
	
	for(i = 0; i < box.options.length; i++){
		if(groupedOrders[box.options[i].className]){
			groupedOrders[box.options[i].className].push({'text': box.options[i].text, 'value': box.options[i].value});
		}
	}
	
	for(i = 0; i < groupClassOrder.length; i++){
		groupedOrders[groupClassOrder[i]].sort(compareOptions);
	}
	
	box.options.length = 0;
	for(i = 0; i < groupClassOrder.length; i++){
		var subGroup = groupedOrders[groupClassOrder[i]];
		for(j = 0; j < subGroup.length; j++){
			var newOption = new Option(subGroup[j]['text'], subGroup[j]['value']);
			newOption.className = groupClassOrder[i];
			box.options[box.options.length] = newOption;			
		}
	}
} 
