// system to change form submits to be pretty url changes
// ================================================================================================
var changeSearchForms = {

  // sets up the search forms
  // ==========================================================================
  init: function(form_selector, base_uri)
  {
    // don't do anything if there is no form to change
    if ($(form_selector).length <= 0) return;

    // get the base uri
    if (!base_uri) base_uri = $(form_selector)[0].action;
    if (base_uri.match(/[^\/]$/g)) base_uri = base_uri + '/';

    // replace the submit function with a new call
    $(form_selector).submit(function() {

      // get the uri and redirect
      var uri = buildSearchFormToSubmit.init(form_selector, base_uri);
      window.location.href = uri;
      
      // stop the form submitting
      return false;
    });

    // update the sorting if it exists
    this.updateSorting();
  },

  // updates the sorting with the new method of linking through
  // ==========================================================================
  updateSorting: function()
  {
    // init vars
    var a_tags = $('#search_sorting a');
    var current = window.location.href.replace(/sort\/\w+\//g, '');
    var len = a_tags.length;

    // repair the current uri if broken
    if (current.match(/(.*)([^\/])$/))
      current += '/';

    // loop through the a tags
    for (var i = 0; i < len; i ++)
      a_tags[i].href = a_tags[i].href.replace(/^(.*)\&sort\=(\w+)(.*)$/, current + 'sort/$2/');
  },
  
  // set up the main search to save what you typed
  // ==========================================================================
  initMainSearchStore: function()
  {
    // checks main nav search exists
    if ($('.main_nav_search').length > 0)
    {
      $('#main_search').submit(function()
      {
        var val = $('.main_nav_search').get(0).value;
        val = val.replace(/\"|\<|\>\'/gi, '');
        $.cookie('main_search_data', val);
      });
    }
  }
};

// system to build the replacement url
// ================================================================================================
var buildSearchFormToSubmit = {

  // sets up the building process
  // ==========================================================================
  init: function(form_selector, base_uri)
  {
    // get all form elements
    var elements = this.getAllFormElements(form_selector);

    // build in to a uri
    var uri = this.buildUri(elements, base_uri);

    // check for a override function
    if (typeof searchFormUriOverride == 'function')
      uri = searchFormUriOverride(uri);

    // return the uri
    return uri;
  },

  // get all form elements
  // ==========================================================================
  getAllFormElements: function(form_selector)
  {
    // get all of the needed form elements
    var texts = $(form_selector + ' input[type=text]');
    var checkboxes = $(form_selector + ' input[type=checkbox]');
    var selects = $(form_selector + ' select');
    var hidden = $(form_selector + ' input[type=hidden]');

    // move the form elements in to a single array and return
    return this.mergeObjects(texts, checkboxes, selects, hidden);
  },

  // merge the objects in to one array
  // ==========================================================================
  mergeObjects: function()
  {
    // init vars
    var result = new Array();

    // loop through the arguments and store
    for (var i = 0; i < arguments.length; i ++)
      for (var j = 0; j < arguments[i].length; j ++)
        result.push(arguments[i][j]);

    // return the found result
    return result;
  },

  // build the uri to redirect the user to
  // ==========================================================================
  buildUri: function(elements, base_uri)
  {
    // init vars
    var uri = base_uri;
    var len = elements.length;

    // loop through the elements
    for (var i = 0; i < len; i ++)
    {
      // check for a valid name / value pair
      if (!elements[i].name || !elements[i].value || (elements[i].type != 'hidden' && elements[i].type != 'text' && elements[i].checked !== undefined && !elements[i].checked)) continue;

      // add the data to the uri
      uri += elements[i].name + '/' + elements[i].value.replace(/(\s|\*|\/|\\|\?)+/g, '+') + '/';
    }

    // return the uri
    return uri.slice(0, -1);
  }
};

// set up the forms that need setting up
// ================================================================================================
$(document).ready(function () {
  // set up the nav search
  changeSearchForms.initMainSearchStore();
  
  // set up the forms
  changeSearchForms.init('#page_archive');
  changeSearchForms.init('#news_search', '/news/archive/');
  changeSearchForms.init('#faqs_search', '/faqs/search/');
  changeSearchForms.init('#academy_search', '/stadium/academy/news/archive/');
  changeSearchForms.init('#main_search');
  changeSearchForms.init('#tickets_form', '/tickets/latest-ticket-news/search/');
  changeSearchForms.init('#fixture_season_select');
  changeSearchForms.init('#fixture_season_select2');
  changeSearchForms.init('#history_past_players_filter');
  changeSearchForms.init('#first_team_stats_season_select');
  changeSearchForms.init('.kop_search_blogs');
  changeSearchForms.init('.kop_search_fans');
  changeSearchForms.init('.kop_search_videos');
  changeSearchForms.init('.kop_search_photos');
  changeSearchForms.init('#downloads_wallpaper_search','/fans/downloads/search/wallpapers/');
  changeSearchForms.init('#downloads_screensaver_search','/fans/downloads/search/screensavers/');
});