
var lb;
var currentGroup;
var currentGroupName;

var youthTemplate = 'youthTemplate';
var adultTemplate = 'adultTemplate';
var otherTemplate = 'otherTemplate';

var youthHolder = 'youthHolder';
var adultHolder = 'adultHolder';
var otherHolder = 'otherHolder';

var hasSearched = false;

var obj = false;

var isedit = false;

function removeSavedGroup(e) {
   Event.stop(e);
   if(confirm('Are you sure you want to remove yourself from this group?')) {
      e = Event.element(e);

      var opt = {
         method: 'get',
         onFailure: function(t){
            alert('Error ' + t.status + ' -- ' + t.statusText);
         },
         on404: function(t){
            alert('Error 404: location "' + t.statusText + '" was not found.');
         }
      };

      var loc = '/callback/Membership_Delete.asp?iMembershipID=' + e.id;
      var ajax = new Ajax.Request(loc, opt);
      
      e.parentNode.parentNode.parentNode.removeChild(e.parentNode.parentNode);
   }
}

function destroyGroup(e) {
   if(confirm('Are you sure you want to remove yourself from this group?')) Element.remove(Event.element(e).group);
}

function newGroup(type) {
   if(type == 'youth') { 
      var newGroup = youthTemplate.cloneNode(true);
      $('youthHolder').appendChild(newGroup);
      setupGroup(newGroup, true);
      registerSectionEvents(newGroup);
   } else if(type == 'adult') {
      var newGroup = adultTemplate.cloneNode(true);
      $('adultHolder').appendChild(newGroup);
      setupGroup(newGroup, true);
   } else {
      var newGroup = otherTemplate.cloneNode(true);
      $('otherHolder').appendChild(newGroup);
      setupGroup(newGroup, true);
   }
};

function registerinit() {

   isedit = ($('pre_sections')) ? true : false;

   var tempYouth = $(youthTemplate); 
   var tempAdult = $(adultTemplate); 
   var tempOther = $(otherTemplate); 

   youthTemplate = tempYouth.cloneNode(true);
   adultTemplate = tempAdult.cloneNode(true);
   otherTemplate = tempOther.cloneNode(true);

   youthHolder = $(youthHolder);
   adultHolder = $(adultHolder);
   otherHolder = $(otherHolder);
   
   setupGroup(tempYouth, !isedit);
   setupGroup(tempAdult, !isedit);
   setupGroup(tempOther, !isedit);

   //Date of Birth stuff---required for validation section years.

   if (!isedit) {
      var dobSelectors = document.getElementsByClassName('dobSelector', 'dateOfBirthRow');
      var n = dobSelectors.length;
      for(i=0;i<n;i++) {
         Event.observe(dobSelectors[i], 'change', prepareValidation);
      }
      
      var genderRadio = document.getElementsByClassName('genderRadio', 'genderRow');
      var b = genderRadio.length;
      for(i=0;i<b;i++) {
         Event.observe(genderRadio[i], 'change', prepareValidation);
      }

      if($('origState')){
         Event.observe('origState', 'change', function(e) {
            e = Event.element(e);
            if(e.value == 'other')
               Element.show('stateText');
            else
               Element.hide('stateText');
         });
      }
      
   } else {
      setupSaved();
      hasSearched = true;
      
      Element.hide(tempYouth);
      Element.hide(tempAdult);
      Element.hide(tempOther);
   }

   Event.observe('registerButton', 'click', validateThisPage);
   
   $('otherInfoBox').style.width = '100%'
//   = (browser == 'Internet Explorer') ? 45 : 40; 

   $('popupSearchInput').value = '';
   $('popupSubmitInput').value = '';

};

function validateThisPage(e) {

   Event.stop(e);
   
   if (!isedit) {
      forceError($('sConfirmEmail'), function(e) {
          if ($('sEmail').value != $('sConfirmEmail').value)
            return 'Your emails do not match.'
          else
            return true;
      });
      
      forceError($('password2'), function(e) {
          if ($('password1').value != $('password2').value)
            return 'Your passwords do not match.'
          else
            return true;
      });
   
      forceError($('youthToggle'), function(e) {
          if((!$('youthToggle').checked && !$('adultToggle').checked && !$('otherToggle').checked) || !hasSearched) 
            return 'You need to be part of at least 1 section.'
          else
            return true;
      });
   }
   
   var adultGroups;
   var youthGroups;
   var otherGroups;
   
   if(hasSearched){
   
      youthGroups = youthHolder.getElementsByTagName('div');
      var yl = youthGroups.length;

      for(i=0;i<yl;i++){
         var grp = youthGroups[i];
         if(grp.readyToValidate && Element.hasClassName(grp, 'group')) {
            var sections = Form.getInputs(grp, 'checkbox');
            var isChecked = false;
            
            var sl = sections.length;
            for(j=0;j<sl;j++){
               var inp = sections[j];
               if(inp.checked && !isChecked){
                  isChecked = true;
                  break;
               }
            }
            
            grp.jsonform = Form.serialize(grp).parseQuery();
            

            Element.removeClassName(sections[0], 'fieldCheckError');
            sections[0].groupname = grp.groupname;
            if(!isChecked){
               forceError(sections[0], function(e) {return 'You need to select the section you were with when you were at "' + e.groupname + '".' });
            }
            
            var surname = grp.jsonform.surname;
            if(!surname && !grp.savedOne) {
               var surnameInput = Form.getInputs(grp, 'text', 'surname')[0];
               Element.removeClassName(surnameInput, 'fieldError');
               surnameInput.groupname = grp.groupname;
               forceError(surnameInput, function(e) {return 'Your surname is required for when you were at "' + e.groupname + '".' });
            }
         }
      }
      
      
      
      adultGroups = adultHolder.getElementsByTagName('div');
      var al = adultGroups.length;
      
      for(i=0;i<al;i++){
         var grp = adultGroups[i];

         if(grp.readyToValidate && Element.hasClassName(grp, 'group')) {
         
            var groupServeType;

            var selects = grp.getElementsByTagName('select');
            $A(selects).each(function(el) {
               if(el.name=='leaderType') {
                  groupServeType = el;
                  return;
               }
            });

            var serveFrom = Form.getInputs(grp, 'text', 'serveFrom')[0];
            var serveTo = Form.getInputs(grp, 'text', 'serveTo')[0];
            
            Element.removeClassName(groupServeType, 'fieldError');
            Element.removeClassName(serveFrom, 'fieldError');
            Element.removeClassName(serveTo, 'fieldError');
            
            var serveFromVal = ((serveFrom.value) != '') ? Number(serveFrom.value) : 'yyyy';
            var serveToVal = ((serveTo.value) != '') ? Number(serveTo.value) : 'yyyy';
            
            if (!grp.savedOne) {
               var surname = Form.getInputs(grp, 'text', 'surname')[0];
               Element.removeClassName(surname, 'fieldError');
               if(surname.value == '') {
                  surname.groupname = grp.groupname;
                  forceError(surname, function(e) {return 'Your surname is required for when you were at "' + e.groupname + '".' });
               }
            }

            if(groupServeType.value == -1) {
               groupServeType.groupname = grp.groupname;
               forceError(groupServeType, function(e) {return 'Please select your service type for when you served at "' + e.groupname + '".' });
            }
 
            var yearError = false;
            serveFrom.groupname = grp.groupname;
            serveTo.groupname = grp.groupname;
            
            if(!isFinite(serveFromVal) || serveFrom.value.length != 4){
               forceError(serveFrom, function(e) {return 'The year you served from must be a valid year for when you were at "' + e.groupname + '".' });
               yearError = true;
            }
            
            if($F(serveTo) != '')
               if(!isFinite(serveToVal) || $F(serveTo).length != 4){
                  forceError(serveTo, function(e) {return 'The year you served to must be a valid year for when you were at "' + e.groupname + '".' });
                  yearError = true;
               }
               
            if(isFinite(serveToVal) && isFinite(serveFromVal) && !yearError){
               if(serveToVal < serveFromVal) {
                  forceError(serveTo, function(e) {return 'The year you left cannot be lesser than the year you to served to when you were at "' + e.groupname + '".' });
               }
            }
         }
      }
      otherGroups = otherHolder.getElementsByTagName('div');
      var yl = otherGroups.length;

      for(i=0;i<yl;i++){
         var grp = otherGroups[i];
         if(grp.readyToValidate && Element.hasClassName(grp, 'group')) {
            var sections = Form.getInputs(grp, 'checkbox');
            var isChecked = false;
            
            var sl = sections.length;
            for(j=0;j<sl;j++){
               var inp = sections[j];
               if(inp.checked && !isChecked){
                  isChecked = true;
                  break;
               }
            }
            
            grp.jsonform = Form.serialize(grp).parseQuery();
            

            Element.removeClassName(sections[0], 'fieldCheckError');
            
            var surname = grp.jsonform.surname;
            if(!surname && !grp.savedOne) {
               var surnameInput = Form.getInputs(grp, 'text', 'surname')[0];
               Element.removeClassName(surnameInput, 'fieldError');
               surnameInput.groupname = grp.groupname;
               forceError(surnameInput, function(e) {return 'Your surname is required for when you were at "' + e.groupname + '".' });
            }
         }
      }
   
   }
   
   var formToValidate = $('mainForm');
   if (validateForm(formToValidate)) {
      var serialYouth = youthHolder.getElementsByTagName('div');
      var syl = serialYouth.length;
      var youthJSON = '';
      
      for(x=0;x<syl;x++){
         var grp = serialYouth[x];
         if(grp.readyToValidate) {
            youthJSON = youthJSON + Form.serialize(grp).parseQuery().toJSONString() + '%%mvi||mvi%%';
         }
      }
      
      $('sSectionString').value = youthJSON;
      
      var serialAdult = adultHolder.getElementsByTagName('div');
      var sal = serialAdult.length;
      var adultJSON = '';
      
      for(x=0;x<sal;x++){
         var grp = serialAdult[x];
         if(grp.readyToValidate) {
            adultJSON = adultJSON + Form.serialize(grp).parseQuery().toJSONString() + '%%mvi||mvi%%';
         }
      }
      
      $('sSectionString').value += adultJSON;
      
      var serialOther = otherHolder.getElementsByTagName('div');
      var syl = serialOther.length;
      var otherJSON = '';
      
      for(x=0;x<syl;x++){
         var grp = serialOther[x];
         if(grp.readyToValidate) {
            otherJSON = otherJSON + Form.serialize(grp).parseQuery().toJSONString() + '%%mvi||mvi%%';
         }
      }
      
      $('sSectionString').value += otherJSON;
      
      document.forms[0].submit();
      
      return true;
   } else {
      window.scrollTo(0, 0); 
   }
      
   return false;
}
function setupSaved() {
   var savedyouths = youthHolder.getElementsByTagName('div');
   
   if(savedyouths.length >= 1) {
      var l=savedyouths.length;
      for(i=0;i<l;i++){
         var grp = savedyouths[i];
         if(Element.hasClassName(grp, 'savedyouth')) {
            var removeButton = Form.getInputs(grp, 'image', 'removeButton')[0];
            removeButton.group = grp;
            Event.observe(removeButton, 'click', removeSavedGroup);
            grp.readyToValidate = true;
            grp.savedOne = true;
            grp.groupname = Form.getInputs(grp, 'hidden', 'groupname')[0].value;
         }
      }
   }
   
   var savedothers = otherHolder.getElementsByTagName('div');
   
   if(savedothers.length >= 1) {
      var l=savedothers.length;
      for(i=0;i<l;i++){
         var grp = savedothers[i];
         if(Element.hasClassName(grp, 'savedother')) {
            var removeButton = Form.getInputs(grp, 'image', 'removeButton')[0];
            removeButton.group = grp;
            Event.observe(removeButton, 'click', removeSavedGroup);
            grp.readyToValidate = true;
            grp.savedOne = true;
            grp.groupname = Form.getInputs(grp, 'hidden', 'groupname')[0].value;
         }
      }
   }

   var savedadults = adultHolder.getElementsByTagName('div');
   
   if(savedadults.length >= 1) {
      var l=savedadults.length;
      for(i=0;i<l;i++){
         var grp = savedadults[i];
         if(Element.hasClassName(grp, 'savedadult')) {
            var removeButton = Form.getInputs(grp, 'image', 'removeButton')[0];
            removeButton.group = grp;
            Event.observe(removeButton, 'click', removeSavedGroup);
            grp.readyToValidate = true;
            grp.savedOne = true;
            grp.groupname = Form.getInputs(grp, 'hidden', 'groupname')[0].value;
         }
      }
   }
   
   doPrepareValidation(); //i can pass nothing because i have the saved obj in a hidden input
}

function registerSearchInputs(parent) {
   var searchInputs = document.getElementsByClassName('searchInput', parent);
   var x = searchInputs.length;
   for(i=0;i<x;i++) {
      searchInputs[i].initialSearchValue = searchInputs[i].value;
      Event.observe(searchInputs[i], 'click', function(e) {
         el = Event.element(e);
         el.value = (el.value == el.initialSearchValue) ? '' : el.value;
      });   
      Event.observe(searchInputs[i], 'change', function(e) {
         el = Event.element(e);
         el.value = (el.value == '') ? el.initialSearchValue : el.value;
      });
   }
}

function popupSwitch(switchTo) {
   if(switchTo == 'newgroup') {
      $('popupSubmitInput').value = $F('popupSearchInput');
      Element.hide('cantFindBox');
      Element.hide('cantFindButton');
      
      $('groupPopupID').youthSubmit.checked = false;
      $('groupPopupID').adultSubmit.checked = false;
      $('groupPopupID').otherSubmit.checked = false;
      $('groupPopupID').youthSubmit.disabled = false;
      $('groupPopupID').adultSubmit.disabled = false;
      $('groupPopupID').otherSubmit.disabled = false;
      
      Element.show('searchAgainButton');
      Element.show('newGroupBox');
   } else {
      Element.show('cantFindBox');
      Element.show('cantFindButton');
      
      Element.hide('searchAgainButton');
      Element.hide('newGroupBox');
   }   
}

function stopOnEnter(e) {
   var keyCode = (e.keyCode) ? e.keyCode : e.which;
   if(keyCode == Event.KEY_RETURN) {
      Event.stop(e);
      return false;
   }
};

function startSearch(showNone) {
   popupSwitch('search');
   var groupPopup = $(lb.content);
   
   if(showNone !== false) {
      Element.show('groupSelectLoader');
      Element.hide('groupLisitng');
   } else
      Element.show('groupLisitng');
   
   Element.hide('noResultsFound');

   var opt = {
      method: 'get',
      onSuccess: function(t){
         if(t.responseText == '') {
            Element.hide('groupSelectLoader');
            Element.show('noResultsFound');
            Element.hide('groupLisitng');
         } else {
            Element.hide('groupSelectLoader');
            Element.hide('noResultsFound');
            Element.show('groupLisitng');
            $('groupLisitng').innerHTML = t.responseText;
         }
      }
   }
   
   if(showNone !== false)
      var ajax = new Ajax.Request('/callback/Group_Search.asp?iRegionID=' + $F(groupPopup.regionSearchInput) + '&sGroupName=' + $F(groupPopup.nameSearchInput), opt);
};

function regNewGroup() {
   var groupPopup = $(lb.content);
   
   Element.show(groupPopup.submitLoadingText);
   Element.hide(groupPopup.submitButton);
   Form.disable('newGroupBox');

   var opt = {
      method: 'get',
      onSuccess: function(t){
         Form.enable('newGroupBox');
         completeSearch(t.responseText, $F(groupPopup.nameSubmitInput))
      }
   }
   
   var youthValue;
  
   if (groupPopup.youthSubmit.checked) youthValue = 'Youth';
   if (groupPopup.adultSubmit.checked) youthValue = 'Adult';
   if (groupPopup.otherSubmit.checked) youthValue = 'Other';
   
   var loc = '/callback/New_Group.asp?sGroupName=' + $F(groupPopup.nameSubmitInput) + '&iRegionID=' + $F(groupPopup.regionSubmitInput) + '&sExtraInfo=' + $F(groupPopup.otherInfoBox) + '&bHasYouth=' + youthValue;
   var ajax = new Ajax.Request(loc, opt);
   
}

function groupSearch(name, state) {

   hasSearched = true;

   lb = new lightbox('groupPopupID');
   lb.activate();
   
   var groupPopup = $(lb.content);
   
   groupPopup.otherInfoBox = $('otherInfoBox');
   
   groupPopup.nameSearchInput = $('popupSearchInput');
   groupPopup.nameSubmitInput = $('popupSubmitInput');
   
   groupPopup.nameSearchInput.initialSearchValue = '';
   groupPopup.nameSubmitInput.initialSearchValue = '';
   
   groupPopup.regionSearchInput = document.getElementsByClassName('popupSearchRegion', groupPopup)[0];
   groupPopup.regionSubmitInput = document.getElementsByClassName('popupSubmitRegion', groupPopup)[0];
   
   var youthRadios = document.getElementsByClassName('popupSubmitYouth', groupPopup);
   
   groupPopup.youthSubmit = youthRadios[0];
   groupPopup.adultSubmit = youthRadios[1];
   groupPopup.otherSubmit = youthRadios[1];
   
   groupPopup.searchButton = $('popupSearchButton');
   groupPopup.submitButton = $('popupSubmitButton');
   groupPopup.submitLoadingText = $('submitLoadingText');
   
   Element.hide(groupPopup.submitLoadingText);
   Element.show(groupPopup.submitButton);

   if(!groupPopup.setupDone) {
   
      var searchButtonCheck = function(){
         enableSearchButton(groupPopup.nameSearchInput, groupPopup.regionSearchInput, groupPopup.searchButton, '/images/public/search_button.jpg');
      }
      var submitButtonCheck = function(){
         enableSearchButton(groupPopup.nameSubmitInput, groupPopup.regionSubmitInput, groupPopup.submitButton, '/images/public/submit-group.jpg');
      }
      
      Event.observe(groupPopup.nameSearchInput, 'keydown', stopOnEnter, false);
      Event.observe(groupPopup.nameSearchInput, 'keyup', searchButtonCheck);
      Event.observe(groupPopup.regionSearchInput, 'change', searchButtonCheck);
      Event.observe(groupPopup.searchButton, 'click', startSearch);

      Event.observe(groupPopup.nameSubmitInput, 'keydown', stopOnEnter, false);
      Event.observe(groupPopup.regionSubmitInput, 'change', submitButtonCheck);
      Event.observe(groupPopup.submitButton, 'click', regNewGroup);
      
      groupPopup.setupDone = true;
   }
   
   if(name !== false) {
      groupPopup.nameSearchInput.value = name;
      groupPopup.nameSubmitInput.value = name;
   }
   
   if(state !== false) {
      groupPopup.regionSearchInput.value = state;
      groupPopup.regionSubmitInput.value = state;
   }
   
   $('otherInfoBox').value = '';
  
   enableSearchButton(groupPopup.nameSearchInput, groupPopup.regionSearchInput, groupPopup.searchButton, '/images/public/search_button.jpg');
   enableSearchButton(groupPopup.nameSubmitInput, groupPopup.regionSubmitInput, groupPopup.submitButton, '/images/public/submit-group.jpg');
   
};

function completeSearch(groupid, groupname) {
   currentGroup.groupid = groupid;
   currentGroup.groupname = groupname;
   currentGroup.readyToValidate = true;
   
   Element.hide(document.getElementsByClassName('searchArea', currentGroup)[0]);
   
   var introText = document.getElementsByClassName('introText', currentGroup)[0];
   Element.show(introText);
   
   var groupText = document.getElementsByClassName('groupText', introText)[0];
   groupText.appendChild(document.createTextNode(groupname));
   
   var groupID = document.getElementsByClassName('iGroupID', currentGroup)[0];
   groupID.value = groupid;

   Form.enable(currentGroup.groupForm);
   Element.removeClassName(currentGroup.groupForm, 'lighttext');
   
   closePopup();
};

function closePopup() {
   lb.deactivate();
   currentGroup = false;
   
   return false;
}

function enableSearchButton(nameSearchInput, regionSearchInput, searchButton, normalGraphic) {
   if(!searchButton.origSrc) {
      searchButton.origSrc = searchButton.src;
   }
   if($F(nameSearchInput) != '' && $F(nameSearchInput) != nameSearchInput.initialSearchValue && $F(regionSearchInput) != -1) {
      searchButton.disabled = false;
      searchButton.src = normalGraphic;
   } else {
      searchButton.disabled = true;
      searchButton.src = searchButton.origSrc;
   }
}

function setupGroup(group, forceShow) {

   group.id = '';
   
   if(forceShow) {
      Element.show(group);
   }
   
   var searchButton = document.getElementsByClassName('searchButton', group)[0];
   var surname = document.getElementsByClassName('surname', group)[0];

   group.groupForm = document.getElementsByClassName('groupForm', group)[0];
   
   Event.observe(searchButton, 'click', function(e) {
      Event.stop(e);
      groupSearch(false, false);
      startSearch(false);
      currentGroup = group;
   });
   
   NiftySingle(group,'');
   
   var removeButton = document.getElementsByClassName('removeButton', group)[0];
   removeButton.group = group;
   Event.observe(removeButton, 'click', destroyGroup);
      
   registerSearchInputs(group);
   
   if ($('pre_day') && obj) { //this field will only be present when we are editing groups
      loadSectionDates(obj, group);
   }
}

function validateDates(e) {
   e = Event.element(e);
   if(e.value == '' || e.likleyValue == '') return;
   if(!e.warningArea.hasGenderWarning){
      ageError = false;
      if(e.name.indexOf('ageFrom') == 0){
         ageError = Number(e.value) < Number(e.likleyValue);
      }
      if(ageError || !isFinite(Number(e.value))) {
         e.warningArea.innerHTML = 'It is unlikley you were not part of this section because of the age range you\'ve entered.';
         Element.show(e.warningArea.parentNode);
         e.warningArea.hasDateWarning = true;
      } else {
         e.warningArea.innerHTML = '';
         Element.hide(e.warningArea.parentNode);
         e.warningArea.hasDateWarning = false;
      }
   }
   
}

function validateGender(e) {
   e = Event.element(e);
   Element.show
   if(!e.warningArea.hasDateWarning){
      if(e.checked && e.gender == 'false') {
         e.warningArea.innerHTML = 'It is unlikley you were part of this section because your sex wasnt accepted into this section.';
         Element.show(e.warningArea.parentNode);
         e.warningArea.hasGenderWarning = true;
      } else {
         e.warningArea.innerHTML = '';
         Element.hide(e.warningArea.parentNode);
         e.warningArea.hasGenderWarning = false;
      }
   }
}

function loadSectionDates(obj, parent) {

   var sectionRows = document.getElementsByClassName('sectionRow', parent);
   var d = sectionRows.length;
   for(i=0;i<d;i++) {
      var sectionRow = sectionRows[i];
   
      var sectionValue = document.getElementsByClassName('section', sectionRow)[0];
      var sectionName = document.getElementsByClassName('sectionName', sectionRow)[0];
      var ageFrom = document.getElementsByClassName('ageFrom', sectionRow)[0];
      var ageTo = document.getElementsByClassName('ageTo', sectionRow)[0];
      
      var c = obj.children.length;
      for(j=0;j<c;j++) {
         var storedSection = obj.children[j];
         if (storedSection.id == sectionValue.value) {
            if (storedSection.bAround == 'true') {
               sectionRow.style.display = '';   
               sectionName.innerHTML = storedSection.name;
               
               if (ageFrom.value == '') {
                  ageFrom.value = storedSection.ageFrom;
                  ageTo.value = storedSection.ageTo;
               }
                  
               ageFrom.likleyValue = storedSection.ageFrom;
               ageTo.likleyValue = storedSection.ageTo;
               
            } else {
               sectionRow.style.display = 'none';
            }
            sectionValue.gender = storedSection.bGender;
         }
      }
   }

   registerSectionEvents(parent);
}

function registerSectionEvents(parent) {
   var sectionRows = document.getElementsByClassName('sectionRow', parent);
   var d = sectionRows.length;
   for(f=0;f<d;f++) {
      var sectionRow = sectionRows[f];
      var sectionValue = document.getElementsByClassName('section', sectionRow)[0];
      var ageFrom = document.getElementsByClassName('ageFrom', sectionRow)[0];
      var ageTo = document.getElementsByClassName('ageTo', sectionRow)[0];
      var warningArea = document.getElementsByClassName('warningArea', sectionRow)[0].childNodes[0];
      sectionValue.warningArea = warningArea;
      ageFrom.warningArea = warningArea;
      ageTo.warningArea = warningArea;
            
      Event.observe(ageTo, 'blur', validateDates);
      Event.observe(ageFrom, 'blur', validateDates);
      Event.observe(sectionValue, 'click', validateGender);
   }
}

function prepareValidation(e) {
   var dobSelectors = document.getElementsByClassName('dobSelector', 'dateOfBirthRow');
   
   var genderValue = -1;
   var genders = document.main_form.enumGender;
   var g = genders.length;
   for(i=0;i<g;i++) {
      if(genders[i].checked)
         genderValue = genders[i].value;
   }
   
   //Only go forward if we have enough data to complete the callback
   if (!Field.present(dobSelectors[0], dobSelectors[1], dobSelectors[2]) || genderValue == -1) return;
   
   var errored = false;
   
   if (!isFinite($F(dobSelectors[0])) || Number($F(dobSelectors[0])) > 31) {
      errored = true;
      Element.addClassName(dobSelectors[0], 'fieldError'); 
   } else Element.removeClassName(dobSelectors[0], 'fieldError'); 
   
   if (!isFinite($F(dobSelectors[1])) || Number($F(dobSelectors[1])) > 12) {
      errored = true;
      Element.addClassName(dobSelectors[1], 'fieldError'); 
   } else Element.removeClassName(dobSelectors[1], 'fieldError'); 
   
   if (!isFinite($F(dobSelectors[2])) || $F(dobSelectors[2]).length == 0 || $F(dobSelectors[2]).length == 1 || $F(dobSelectors[2]).length == 3) {
      errored = true;
      Element.addClassName(dobSelectors[2], 'fieldError'); 
   } else Element.removeClassName(dobSelectors[2], 'fieldError'); 
   
   if ($F(dobSelectors[2]).length == 2) {
      if(parseInt($F(dobSelectors[2])) < 15)
         dobSelectors[2].value = '20' + dobSelectors[2].value;
      else
         dobSelectors[2].value = '19' + dobSelectors[2].value;
   }
   
   if (errored) return;
   
   doPrepareValidation(dobSelectors[1].value, dobSelectors[0].value, dobSelectors[2].value, genderValue);
}

function doPrepareValidation(day, month, year, gender) {

   var presections = $('pre_sections');
   
   if(presections) {
   
      obj = presections.value.parseJSON();
      loadSectionDates(obj, 'youthMemeberGroups');
      loadSectionDates(obj, youthTemplate);
               
   } else {
      var niceDate = month + '/' + day + '/' + year;

      //Lets do the callback and load our validation stuff into a var
      //Set options for the request
      var opt = {
         onSuccess: function(t) {
               obj = t.responseText.parseJSON();

               loadSectionDates(obj, 'youthMemeberGroups');
               loadSectionDates(obj, youthTemplate);
               
               var surnames = document.getElementsByClassName('surname');
               $A(surnames).each(function(input){
                  input.value = $F('sLastNameID');
               });
               
               var regions = document.getElementsByClassName('regionSearchInput');
               $A(regions).each(function(input){
                  input.value = $F('origState');
               });

               document.getElementsByClassName('surname', youthTemplate)[0].value = $F('sLastNameID');
               document.getElementsByClassName('surname', adultTemplate)[0].value = $F('sLastNameID');
               document.getElementsByClassName('surname', otherTemplate)[0].value = $F('sLastNameID');
               
               Element.hide('dateGenderReminder');
               
               $('youthToggle').disabled = false;
               $('adultToggle').disabled = false;
               $('otherToggle').disabled = false;
         }
      }
         
      var loc = '/callback/Year_Validation.asp?iGender=' + gender + '&sDOB=' + niceDate;
      new Ajax.Request(loc, opt);
   }
}
