var done = false;
var current_offset = 0;
var last_offset = 0;
var current_sort_by = 'date';
var current_sort_direction = 'desc';
var current_filter_string = 'none';
var last_filter_string = '';
var last_query;
var last_hash = '';
var current_row = '';
var is_loading = false;

var filtering = false;

var subcat_status = [];

$(document).ready(function() {
	if (document.all) {
       $(".nav li").fixHover();
	}

	var has_nul = false;

	check_hash(true);

	for(var i=0;i<subcats.length;i++) {
		if (subcat_status[i])
			if (subcat_status[i]==0)
				has_nul = true;
	}
	
	if (has_nul) {
		$('#filter2_reset').show();
		filtering = true;
	}

	load_content();
	hash_listener();
		
	$(window).scroll(function(){
		var wh = $(document).height() - $(window).height();
		if  ($(window).scrollTop() >= (wh-400)){
			scroll_handler();
		}
	})
	
});

/* functions */

function set_hash() {
	if (current_sort_direction == 'asc') 
		var hash_direction = 'A';
	else 
		var hash_direction = 'D';
 	
	if (current_sort_by == 'date') 
		var hash_sort_by = 'D';
	
	if (current_sort_by == 'title') 
		var hash_sort_by = 'T';
	
	if (current_sort_by == 'artist') 
		var hash_sort_by = 'N';
	
	if (current_sort_by == 'price') 
		var hash_sort_by = 'P';

		
	var subcat_string = '';
		
	for(var i=0;i<subcats.length;i++) {
		subcat_string += subcat_status[i];
	}
	
	window.location.hash = '#'+hash_sort_by+hash_direction+'/'+current_filter_string+'/'+current_row+'/'+subcat_string;

	$('#sort_options').val(current_sort_by+'_'+current_sort_direction);
	
	current_hash = last_hash = window.location.hash;
}

function check_box(x) {

	var has_nul = false;
		
	if (!filtering) {
		filtering = true;
		$('#filter2_reset').show();

		for(var i=0;i<subcats.length;i++) {
			if (subcat_status[i]==0)
				has_nul = true;
		}

		if (has_nul) {
			if ($('#subcat'+x).get(0).checked) {
				subcat_status[x] = 1;
			} else {
				subcat_status[x] = 0;	
			}
		} else {
			for(var i=0;i<subcats.length;i++) {
				subcat_status[i] = 0;
				$('#subcat'+i).get(0).checked = false;
			}

			$('#subcat'+x).get(0).checked = true;
			subcat_status[x] = 1;			
		}
	} 
	else {
		if ($('#subcat'+x).get(0).checked) {
			subcat_status[x] = 1;
		} else {
			subcat_status[x] = 0;	
		}
	}
	
	var has_one = false;
	
	var subcat_string = '';
		
	for(var i=0;i<subcats.length;i++) {
		if (subcat_status[i] == 1)
			has_one = true;
		subcat_string += subcat_status[i];
	}
	
	if (!has_one) {
		reset_filter2();
		return false;
	}
		
	done = false;
	current_offset = 0;
	last_offset = 0;
	current_row = '';
	load_content();
	set_hash();
}

function reset_filter2() {
	$('#filter2_reset').hide();
	done = false;
	current_offset = 0;
	last_offset = 0;
	filtering = false;
	
	for(var i=0;i<subcats.length;i++) {
		subcat_status[i]=1;
		$('#subcat'+i).get(0).checked = false;
	}
	
	current_row = '';
	load_content();
	set_hash();
}

function check_hash(ready) {
	var current_hash =  window.location.hash.substr(1);
	if (current_hash.length>2) {
		var sort_temp = current_hash.substr(0,1);
		
		if (sort_temp == 'D') 
			current_sort_by = 'date';
		
		if (sort_temp == 'T')
			current_sort_by = 'title';

		if (sort_temp == 'N') 
			current_sort_by = 'artist';
		
		if (sort_temp == 'P')
			current_sort_by = 'price';
		
		if (current_hash.substr(1,1)=='A')
			current_sort_direction = 'asc';
		else
			current_sort_direction = 'desc';
			
		var temp_split = current_hash.substr(3).split('/');
		
		current_filter_string = temp_split[0].replace(/ /g, '_');
		if (current_filter_string != 'none')	
			$('#filter_string').val(current_filter_string);
		else
			$('#filter_string').val('');
			
		if (temp_split.length>1) {
			current_row = temp_split[1];
			if (temp_split.length>2) {
				var has_nul = false;
			
				for(var i=0;i<subcats.length;i++) {
					if (subcat_status[i])
						if (subcat_status[i]==0)
							has_nul = true;
				}
							
				for(var f=0;f<temp_split[2].length; f++) {
					subcat_status[f] = temp_split[2][f];
				}

				for(var i=0;i<subcats.length;i++) {
					if (subcat_status[i])
						if (subcat_status[i]==0)
							has_nul = true;
				}

				for(var f=0;f<temp_split[2].length; f++) {
					if (temp_split[2][f]==1 && has_nul && $('#subcat'+f).length>0) {
						$('#subcat'+f).get(0).checked = true;	
					} else {
						if ($('#subcat'+f).length>0)
						$('#subcat'+f).get(0).checked = false;						
					}
				}
				
			} 
		} else {
			current_row = '';
			for(var i=0; i<subcats.length; i++) {
				if (!subcat_status[i])
					subcat_status[i] = 1;
			}
		}	
		
		last_hash = current_hash;
		load_content();
		
		if (ready) {
			set_hash();
		}
	}
}

function check_filter() {
	var filter_string = $('#filter_string').val();
	if (filter_string.length>2 && filter_string != current_filter_string) {
		current_filter_string = filter_string.replace(/ /g, '_');
		done = false;
		current_offset = 0;
		last_offset = 0;
		current_row = '';
		load_content();
		set_hash();
		$('#filter_reset').show();
	}
	if (filter_string.length==0) {
		current_filter_string = 'none';
		done = false;
		current_offset = 0;
		last_offset = 0;
		current_row = '';
		load_content();
		set_hash();
		$('#filter_reset').hide();
	}
}

function reset_filter() {
	$('#filter_string').val('');
	check_filter();
}

function load_content() {
	var my_id = new Date().getTime();

	is_loading = true;
	$('#wrapper').html('<div class="loading" id="loading'+my_id+'"><span style="font-weight: bold; font-size: 11px">Loading&hellip;</span></div>');
	
	var subcat_string = '';
		
	for(var i=0;i<subcats.length;i++) {
		if (subcat_status[i] == undefined)
			subcat_status[i] = 1;
		subcat_string += subcat_status[i];
	}
		
	$.getJSON("/ajax/query/"+slug+"/"+current_filter_string+"/"+current_sort_by+'_'+current_sort_direction+"/"+"0"+"/"+"4"+'/'+subcat_string+'/'+my_id,
		function(data){
			if(data.count != 4)
				done = true;				
			current_offset = data.count;
			is_loading = false;
			
			if (data.count==0) {
				data.html = '<span style="font-size: 11px; font-weight: bold">No items match your criteria.</span>';
			}
			
			$('#wrapper #loading'+my_id).html(data.html);		
		}
	);
}

function scroll_handler() {
	if (current_offset != last_offset && !done && !is_loading) {
		is_loading = true;
		
		var my_id = new Date().getTime();
		
		$('#wrapper').append('<div class="loading" id="loading'+my_id+'"><span style="font-weight: bold; font-size: 11px">Loading&hellip;</span></div>');
		

		var subcat_string = '';
			
		for(var i=0;i<subcats.length;i++) {
			subcat_string += subcat_status[i];
		}

		$.getJSON("/ajax/query/"+slug+"/"+current_filter_string+"/"+current_sort_by+'_'+current_sort_direction+"/"+current_offset+"/"+"4"+'/'+subcat_string+'/'+my_id,
			function(data){
				is_loading = false;
				if(data.count != 4)
					done = true;

				current_offset += data.count; 
				$('#wrapper #loading'+my_id).html(data.html);
			}
		);
	}
}

function set_sort(sort_by, sort_direction) {
	if (sort_by != current_sort_by || sort_direction != current_sort_direction) {
		current_row = '';
		current_sort_by = sort_by;
		current_sort_direction = sort_direction;
		done = false;
		current_offset = 0;
		last_offset = 0;
		load_content();
		set_hash();
	}
}

var scrolled_to_anchor = true;

function hash_listener() {
	var current_hash =  window.location.hash;
	if (last_hash != current_hash) {
		check_hash();
		last_hash = current_hash;
	}
	
	var found_anchor = false;
	var my_id = new Date().getTime();

	$('#wrapper a').each(function() {
		if (this.name == last_hash.substring(1)) {
			found_anchor = true;
			this.id = 'found_anchor_'+my_id;
		}
	})	


	if (!found_anchor && current_row != '')  {
		scrolled_to_anchor = false;
		if (!done && !is_loading) {
			is_loading = true;
		
			var subcat_string = '';
		
			for(var i=0;i<subcats.length;i++) {
				subcat_string += subcat_status[i];
			}

		
			$.getJSON("/ajax/query/"+slug+"/"+current_filter_string+"/"+current_sort_by+'_'+current_sort_direction+"/"+current_offset+"/"+"4"+'/'+subcat_string+'/'+my_id,
				function(data){
					is_loading = false;

					if(data.count != 4)
						done = true;
					current_offset += 4; // set for # expected
					current_offset += (data.count-4); // correct for # received
					$('#wrapper').append(data.html);
				}
			);
		}
	} else {
		if (found_anchor && !scrolled_to_anchor) {
			$.scrollTo('#found_anchor_'+my_id, 800, {offset:-124});
			scrolled_to_anchor = true;
		}
	}
	
	var filter_string = $('#filter_string').val();
	
	if (filter_string.length>2) {
		$('#filter_reset').show();
	}

	if (filter_string.length==0) {
		$('#filter_reset').hide();
	}
	
	setTimeout('hash_listener()', 500);
}

function click_item(row) {
	current_row = row;
	set_hash();
	return true;
}

function check_select() {
	var v = $('#sort_options').val().split('_');
	set_sort(v[0], v[1]);
}
