var Entry = function() {
    return {
        stage: '',
        analyticsTagUrl: '',
        distanceOptions: false,
        distanceOptionsWidth: false,
        how_long_val: '',
        loader: function(mode) {
            var LoaderElement = $('#entry_loader');
            if(Entry.stage) {
                LoaderElement = $('#'+Entry.stage+'_loader');
            }
            if('show' == mode) {
                LoaderElement.show();
                $('.button').addClass('disabled');
            } else {
                LoaderElement.hide();
                $('.button').removeClass('disabled');
            }
        },
        submit: function(StageId) {
            this.stage = StageId;
            var Url = $('#frm_entry').attr('action') + '/ajax/1';
            var Data = $('#frm_entry').serialize();
            this.analyticsTagUrl = Url;
            switch(StageId) {
                case 'postcode-lookup':
                    Data += '&postcode_lookup=1';
                    break;
                case 'choose-address':
                case 'not-uk':
                    Data += '&choose_address=1';
                    break;
                    
            }

            this.loader('show');
            $.ajax({
                  url: Url,
                  type: 'post',
                  timeout: '50000',
                  data: Data,
                  dataType: 'json',
                  error: this.onError,
                  success: this.onSuccess
              });
            return false;
        },
      onError: function() {
          Entry.loader('hide');
      },
      onSuccess: function(Response) {
          Entry.loader('hide');
          if(Response.Status && 'ok' == Response.Status ) {
              if(Response.Form) {
                  $('#content').html(Response.Form);
                  Defaults.init();
                  Entry.updateView();
                  trackView(Entry.analyticsTagUrl);
                  if($.browser.msie && $.browser.version=="6.0") {
                     $("#fundforie, #topforie, #disforie").css("zoom", 1);
                  }
              } else if (Response.Redirect) {
                  window.location.href = Response.Redirect;
              }
          }
      },
      countryOnChange: function() {
        //if it's uk, show find button and uncheck the nouk
        var CountryName = $('#country').val();
        if('-1' == CountryName) {
            CountryName = $('#country_other').val();
            //rely on the check
            if('' == CountryName && true === $('#noUK').attr('checked')) {
                CountryName = 'tmp';
            }
        }
        if('' == CountryName
            || 'United Kingdom' == CountryName) {

            Entry.checkUk(true);
        } else {
            Entry.checkUk(false);
        }
      },
      checkUk: function(IsUk) {
        if(IsUk) {
            //show find button
            //uncheck the tick box
            $('#noUK').attr('checked', false);
            $('#findbutton').show();
            $('#country').val('United Kingdom');
            $('#country_other').val('');
            toggleOtherField('country');
            //check that there is no text in addressfields
            var isVal = false;
            $('#addressfields input').each(function() {
                if('' != $(this).val()) {
                    isVal = true;
                }
            });
            if(!isVal) {
                $('#addressfields').hide();
            }
        } else {
            $('#noUK').attr('checked', true);
            $('#findbutton').hide();
            $('#addressfields').show();
            if('United Kingdom' == $('#country').val()) {
                $('#country').val('');
                toggleOtherField('country');
            }
        }
      },
      updateView: function() {
        Defaults.addHover();
      },
      toggleConfirmEntrant: function(EntrantId) {
          //if details are visible - hde details, show summary,
          if($('#entrant_details_'+EntrantId).is(':visible')) {
            $('#entrant_details_'+EntrantId).hide();
            $('#entrant_summary_'+EntrantId).show();
          } else {
            $('#entrant_details_'+EntrantId).show();
            $('#entrant_summary_'+EntrantId).hide();
          }
          return false;
      },
      distanceOnChange: function() {
          //by default disable all groups
          Entry.how_long_val = $('#how_long').val();
          if(false == Entry.distanceOptions) {
              Entry.distanceOptions = {};
              var AllGroups = $('#how_long optgroup');
              for(var i = 0; i < AllGroups.length; i++) {
                  Entry.distanceOptions[$(AllGroups[i]).attr('label')] = [];
                  for(var j = 0; j < AllGroups[i].childNodes.length; j++) {
                      if('option' == AllGroups[i].childNodes[j].nodeName.toLowerCase()) {
                          Entry.distanceOptions[$(AllGroups[i]).attr('label')].push(AllGroups[i].childNodes[j]);
                      }
                  }
              }
              Entry.distanceOptionsWidth = $('#how_long').width();
          }
          //console.log(Entry.distanceOptions);
          $('#how_long').html('');
          //always add the please select option
          var PleaseSelect = $(document.createElement('option'));
          PleaseSelect.attr('value', '');
          PleaseSelect.html('Please select...');
          PleaseSelect.attr('selected', true);
          $('#how_long').append(PleaseSelect);
          
          var Distance = $('#running_distance').val();
          switch(Distance) {
              case 'half':
                  //var OptGroup = $(document.createElement('optgroup'));
                  //OptGroup.attr('label', 'Half');
                  if(Entry.distanceOptions['Half'] && 0 < Entry.distanceOptions['Half'].length) {
                      for(var i = 0; i < Entry.distanceOptions['Half'].length; i++) {
                          $('#how_long').append(Entry.distanceOptions['Half'][i]);
                      }
                  } 
                  //$('#how_long').append(OptGroup);
                  /*var AllGroups = $('#how_long optgroup');
                  for(var i = 0; i < AllGroups.length; i++) {
                      if('Half' == $(AllGroups[i]).attr('label')) {
                          $(AllGroups[i]).attr('disabled', false);
                          break;
                      }
                  }
                  for(var i = 0; i < AllGroups.length; i++) {
                      if(true == $(AllGroups[i]).attr('disabled')) {
                          for(var j = 0; j < AllGroups[i].childNodes.length; j++) {
                              if('option' == AllGroups[i].childNodes[j].nodeName.toLowerCase()) {
                                  $(AllGroups[i].childNodes[j]).attr('selected', null);
                              }
                          }
                      }
                  }*/
                  break;
              case 'full':
                /*var AllGroups = $('#how_long optgroup');
                for(var i = 0; i < AllGroups.length; i++) {
                    if('Full' == $(AllGroups[i]).attr('label')) {
                        $(AllGroups[i]).attr('disabled', false);
                        break;
                    }
                }
                for(var i = 0; i < AllGroups.length; i++) {
                      if(true == $(AllGroups[i]).attr('disabled')) {
                          for(var j = 0; j < AllGroups[i].childNodes.length; j++) {
                              if('option' == AllGroups[i].childNodes[j].nodeName.toLowerCase()) {
                                  $(AllGroups[i].childNodes[j]).attr('selected', null);
                              }
                          }
                      }
                  }*/
                  //var OptGroup = $(document.createElement('optgroup'));
                  //OptGroup.attr('label', 'Full');
                  if(Entry.distanceOptions['Full'] && 0 < Entry.distanceOptions['Full'].length) {
                      for(var i = 0; i < Entry.distanceOptions['Full'].length; i++) {
                          $('#how_long').append(Entry.distanceOptions['Full'][i]);
                      }
                  }
                  //$('#how_long').append(OptGroup);
                break;
          }
          $('#how_long').width(Entry.distanceOptionsWidth);
          var focusFunc = Defaults.generateFocusFunction('how_long');
          $('#how_long').focus(Defaults.generateFocusFunction('how_long'));
          $('#how_long').val(Entry.how_long_val);
      }
    };
}();

