var selected_options = new Array();
var ajax_manager = $.manageAjax({ manageType:'abortOld', maxReq:1 });
var selected_colours = new Array();
var selected_brands = new Array();

var last_query = '';
var first_time_loaded = true;

$(document).ready(function() {
	options_from_cookie = $.cookie('shoe_finder_options');
	last_query = options_from_cookie || '';
	if (options_from_cookie != '' && options_from_cookie != null) {
		load_options_from_cookie(options_from_cookie);
	}

	$('#finder-options-for-department a').click(function() {
		if (!$(this).hasClass('selected')) {
			$('#finder-options-for-department a').removeClass('selected');
			$('#finder-size')[0].set_department($(this).siblings('input').val());
		}
	});

	$('#finder-options-for-colour a').click(function() {
		if (!$(this).hasClass('selected')) {
			this_colour = $(this).siblings('input').val();
			
			if (array_index(selected_colours, this_colour) == -1) {
				selected_colours.push(this_colour);
			}
			while (selected_colours.length > 5) {
				colour_to_remove = selected_colours.shift();
				$('#finder-option-colour-' + colour_to_remove).removeClass('selected');
			}
		}
	});
	
	$('.finder-options a').click(function() {
		$(this).toggleClass('selected');
		update_selected_options();
		return false;
	});

	$('#panel-brand input[type=checkbox]').click(function() {
		if (array_index(selected_brands, this.id) == -1) {
			selected_brands.push(this.id);
		}
		while (selected_brands.length > 5) {
			brand_to_remove = selected_brands.shift();
			$('#'+brand_to_remove).each(function() { this.checked = false; });
		}
		update_selected_options();
	});

	$('#finder-size').change(function() {
		update_selected_options();
	});

	$('#approximate-sizing, #panel-size .sizing-type').click(function() {
		update_selected_options();
	});

	$('#finder-tags li').click(function() {
		select_panel(this.id.replace(/^tag-/, ''));
	});

	panel = $.cookie('shoe_finder_panel');
	if (panel == '' || panel == null) { panel = 'department'; }
	select_panel(panel);
});

function select_panel(panel) {
	$('#finder-tags li').removeClass('active');
	$('#finder-panels .panel').hide();
	$('#finder-tags #tag-' + panel).addClass('active');
	$('#finder-panels #panel-' + panel).show();
	$.cookie('shoe_finder_panel', panel);
}

function update_selected_options() {
  selected_options = {};

	if ($('#finder-option-department-men').hasClass('selected')) {
		$('#panel-brand .check-box-list .women').hide();
		$('#panel-brand .check-box-list .men').show();
		$('#panel-brand .mens-only').show();
	} else {
		$('#panel-brand .check-box-list .women').show();
		$('#panel-brand .mens-only').hide();
	}
	
	if ($('#finder-option-department-women').hasClass('selected')) {
		$('#panel-brand .check-box-list .men').hide();
		$('#panel-brand .check-box-list .women').show();
		$('#panel-brand .womens-only').show();
	} else {
		$('#panel-brand .check-box-list .men').show();
		$('#panel-brand .womens-only').hide();
	}
	
	$('#panel-brand .check-box-list li:visible').each(function(i) {
		$(this).removeClass('even').removeClass('odd').addClass(i % 2 ? 'odd' : 'even');
	});

  $('.finder-options').each(function() {
    selected = $(this).find('a.selected');
    option_name = this.id.replace('finder-options-for-', '');
    if (selected.length > 0) {
      selected_options[option_name] = selected.map(function() {
        return $(this).siblings('input').val();
      });
		selections = jQuery.makeArray(selected.find('.caption').map(function() { return $(this).text(); }));
		joined = "";
		switch (option_name) {
		case 'requirement':
			joined = selections.join(', ');
			break;
		default:
			joined = selections.join(' or ');
			break;
		}
		$('#tag-' + option_name + ' .answer').html(joined).addClass('selected');
    } else {
      selected_options[option_name] = [];
		$('#tag-' + option_name + ' .answer').html(option_name == 'requirement' ? '(None)' : '(Any)').removeClass('selected');
    }
  });

	selected_size = $('#finder-size').val();
	if (selected_size != "") {
		size_text = $('#finder-size').map(function() { return this.selectedIndex >= 0 ? this.options[this.selectedIndex].text : ''; })[0].replace(/ \(.*$/, '');
		
		if ($('#approximate-sizing')[0].checked) {
			s = selected_size.split(',')
			s1 = parseInt(s[0]);
			s2 = parseInt(s[1]);
			s = (s1 == s2) ? [ s1-2, s1-1, s1, s1+1, s1+2 ] : [ s1-2, s1-1, s1, s2, s2+1, s2+2 ];
			selected_options['size'] = jQuery.grep(s, function(n) { return n > 0 && n < 23; });
			$('#tag-size .answer').html(size_text + ' (approx)').addClass('selected');
		} else {
			selected_options['size'] = [ selected_size ];
			$('#tag-size .answer').html(size_text).addClass('selected');
		}
	} else {
		$('#tag-size .answer').html('(Any)').removeClass('selected');
	}
	
	selected_options['brand'] = [];
	var brand_names = [];
	$('#panel-brand .check-box-list :checked').each(function() {
		selected_options['brand'].push(this.value);
		brand_names.push(this.title);
	});
	if (brand_names.length == 0) {
		$('#tag-brand .answer').html('(Any)').removeClass('selected');
	} else {
		$('#tag-brand .answer').html(brand_names.join(' or ')).addClass('selected');
	}
  
  get_params = new Array();
  for (k in selected_options) {
    for (i = 0; i < selected_options[k].length; i++) {
      get_params.push(k + '[]=' + escape(selected_options[k][i]));
    }
  }
	if (selected_options['size']) {
		get_params.push('sizing_type=' + $('#panel-size input.sizing-type:checked').val());
	}

	var query = get_params.join('&');
	$.cookie('shoe_finder_options', query);
	
	if (first_time_loaded || query != last_query) {
		$('#finder-count').html('<img src="/facebox/loading.gif" />').show();
	  ajax_manager.add({
	    type:'GET',
	    url:'?' + query,
	    success: function(html) { 
	      $('#results-preview').html(html);
	    }
	  });
		last_query = query;
		first_time_loaded = false;
	}
}

function load_options_from_cookie(str) {
	all_options = str.split('&');
	values = {};
	for (i in all_options) {
		kv = all_options[i].split('=');
		key = kv.shift().replace(/\[\]$/, '');
		value = kv.join('=').replace('%2C', ',');;
		if (values[key] == null) {
			values[key] = [ value ];
		} else {
			values[key].push(value);
		}
	}
	
	if (values['department']) {
		$('#finder-size')[0].set_department(values['department']);
	}
	
	for (key in values) {
		switch (key) {
		case 'size':
			var sizes = values[key];
			$('#approximate-sizing')[0].checked = (sizes.length > 1);
			$('#finder-size').val('');
			var size = sizes[Math.floor(sizes.length / 2)];
			if (values['sizing_type']) {
				$('#panel-size input.sizing-type[value='+values['sizing_type'][0]+']').each(function() { this.checked = true; });
				$('#finder-size')[0].set_sizing_type(values['sizing_type'][0]);
				$('#finder-size').find('option[value='+size+']:visible, option[value$=,'+size+']:visible').attr('selected', 'selected');
			}
			break;
		case 'brand':
			brands = values[key];
			$(brands).each(function() {
				$('#panel-brand input[value='+this+']').each(function() { this.checked = true; });
			});
			break;
		default:
			$('#finder-options-for-' + key + 'a').removeClass('selected');
			for (j in values[key]) {
				$('#finder-option-' + key + '-' + values[key][j]).addClass('selected');
			}
		}
		
		if (key == 'colour') {
			selected_colours = values[key];
		}
	}
	
	update_selected_options();
}

function clear_selection() {
	$('#approximate-sizing')[0].checked = 0;
	$('#finder-size').val('');
	$('.finder-options a').removeClass('selected');
	$('#panel-brand input').removeAttr('checked');
	update_selected_options();
}

function array_index(a, v) {
	for (var i = 0; i < a.length; i++) {
		if (a[i] == v) {
			return i;
		}
	}
	return -1;
}
