// $Id: genderSpecific.js 1309 2008-06-25 08:29:32Z dmf $
// Functions to support gender specific options

// Check for both genders and warn about same-sex sites
function checkGenders (formObject) {
	if (checkBothGenders) {
		var femaleIndex = formElementIndex['mGender[]'];
		if (!femaleIndex) {
			return true; // If we can't find it, we must be on a Q site
		}
		var maleIndex = femaleIndex + 1;
		if (formObject.elements[femaleIndex].checked && formObject.elements[maleIndex].checked) {
			formObject.elements[femaleIndex-1].focus();
			formObject.elements[femaleIndex].focus();
			userConfirm = confirm (valStrings["confirmBothGenders"]);
			if (!userConfirm) {
				formObject.elements[femaleIndex].checked = false;
				formObject.elements[maleIndex].checked = false;
			}
			return userConfirm;
		} else {
			return true;
		}
	} else {
		return true;
	}
}

// Implement a JS version of PHP's in_array
function in_array (needle, haystack) {
	if (typeof haystack == 'undefined') {
		return false;
	}
	for (var i=0; i < haystack.length; i++) {
		if (needle == haystack[i]) {
			return true;
		}
	}
	return false;
}

// Handle changes in content for gender-specific fields
function updateGenderSpecificFields (formObjectOrGenderCheckbox) {
	if (typeof genderSpecificFields == 'undefined') {
		return true; // If the array doesn't exist, bail out immediately
	}
	// First work out what we were passed
	var formObject, clickedValue = 0;
	if (formObjectOrGenderCheckbox.name == "frmMM") {
		formObject = formObjectOrGenderCheckbox;
	} else {
		formObject = formObjectOrGenderCheckbox.form;
		clickedValue = formObjectOrGenderCheckbox.value;
		if (formObjectOrGenderCheckbox.checked) {
			previousValue = clickedValue == 1 ? 2 : 1;
		} else {
			previousValue = clickedValue;
		}
	}
	// Work out what's currently selected
	var femaleIndex = formElementIndex['mGender[]'];
	if (!femaleIndex) {
		// Try again in case we are on advanced search page
		femaleIndex = formElementIndex['mGender'];
		if (!femaleIndex) {
			return true; // If we can't find it, we must be on a Q site
		}
	}
	var maleIndex = femaleIndex + 1;
	var selectedGender = 0, otherGender = 0;
	// Is female checkbox on profile match page checked?
	if (formObject.elements[femaleIndex].checked) {
		if (!formObject.elements[maleIndex].checked) {
			selectedGender = 1;
			otherGender = 2;
		}
	} else if (formObject.elements[maleIndex].checked) {
		selectedGender = 2;
		otherGender = 1;
	} else if (typeof formObject.elements[femaleIndex].options != 'undefined') {
		// If the gender is chosen through a select box then we're probably on the find_search page
		if (formObject.elements[femaleIndex].options[0].selected) {
			selectedGender = 1;
			otherGender = 2;
		} else if (formObject.elements[femaleIndex].options[1].selected) {
			selectedGender = 2;
			otherGender = 1;
		}
	}
	//alert('selectedGender = '+selectedGender+'; otherGender = '+otherGender);
	// Now disable and/or hide options that aren't available and show those that are
	for (fieldCounter = 0; fieldCounter < genderSpecificFields.length; fieldCounter++) {
		var firstElement = 0;
		var gotAnother = false;
		for (var i = formElementIndex[genderSpecificFields[fieldCounter]]; i < formObject.elements.length; i++) {
			if (formObject.elements[i].name == genderSpecificFields[fieldCounter]) {
				if (firstElement) {
					// Make sure the box is only checked if it's allowed to be checked for the currently selected gender(s)
					formObject.elements[i].checked = formObject.elements[i].checked && in_array(formObject.elements[i].value, genderSpecificOptions[fieldCounter][selectedGender]);
					// Update gotAnother regardless of whether there's a change in visibility required for this checkbox
					gotAnother = (gotAnother || formObject.elements[i].checked);
					// Now decide if the box needs to change visibility
					if (in_array(formObject.elements[i].value, genderSpecificOptions[fieldCounter][selectedGender]) && !in_array(formObject.elements[i].value, genderSpecificOptions[fieldCounter][otherGender])
					 || clickedValue && !selectedGender && in_array(formObject.elements[i].value, genderSpecificOptions[fieldCounter][selectedGender]) && !in_array(formObject.elements[i].value, genderSpecificOptions[fieldCounter][previousValue])) {
						// The box is newly visible if (it's visible in the current gender but wasn't in the previous) or if (we've just arrived at gender==0  and this option is valid for gender==0, but wasn't valid for the previous gender) 
						formObject.elements[i].disabled = false;
						if (typeof Prototype != 'undefined') {
							parentCell = $(formObject.elements[i]).up();
							if (!parentCell.visible()) {
								parentCell.show();
								// We are in the advanced search form not the profile match form
								if (typeof parentCell.next('td') == 'undefined') {
									if (typeof parentCell.next('li') != 'undefined') {
										parentCell.next('li').show();
									}
								} else {
								// We are in the profile match form
									parentCell.next('td').show();
								}
							}
						}
					} else if (!in_array(formObject.elements[i].value, genderSpecificOptions[fieldCounter][selectedGender]) && in_array(formObject.elements[i].value, genderSpecificOptions[fieldCounter][otherGender])){
						// The box is newly hidden if it's unavailable for the current gender, but was available for the previously selected gender.
						formObject.elements[i].checked = false;
						formObject.elements[i].disabled = true;
						if (typeof Prototype != 'undefined') {
							parentCell = $(formObject.elements[i]).up();
							if (parentCell.visible()) {
								parentCell.hide();
								// We are in the profile match form (we don't do anything for the advanced search or the 'Other' option will become hidden)
								if (typeof parentCell.next('td') != 'undefined') {
									parentCell.next('td').hide();
								}
							}
						}
					}
				} else {
					firstElement = i;
				}
			} else if (firstElement) {
				break;  // terminate the loop when we go on to another form element.
			}
		}
		//alert ('gotAnother = '+gotAnother);
		if (!gotAnother) {
			formObject.elements[firstElement].checked = true;
			weightingName = 'w' + genderSpecificFields[fieldCounter].substr(1, genderSpecificFields[fieldCounter].length - 3);
			// Weightings exist on the profile match page but not on the advanced search page
			if (typeof formObject.elements[formElementIndex[weightingName]] != 'undefined') {
				formObject.elements[formElementIndex[weightingName]].options[0].selected = true;
			}
		}
	}
	return true;
}

