var advanced_search = (function() {
	
	if ( $('#advanced_search_form').length ) {
	
		var 
			// misc/temp vars
		temp, options, group, page, ajax_url,
		hash = $.bbq, first_load = true, empty = '',
		// cache DOM elements
		wrapper = $('div#container_gallery'),  
		adv_form = $('#advanced_search_form'),
		browse_option = $('a.browse_option'),
		prev_next = $('a.prev_link, a.next_link'),
		clear_search = $('#clear_search'),
	
		toggle_arrows = function() {
			$('a.prev_link')[ $('#prev_set').exists() ? 'show' : 'hide' ]();
			$('a.next_link')[ $('#next_set').exists() ? 'show' : 'hide' ]();
		},
	
		// one ajax call to rule them all!		
		ajax_req = function( url, data ) {
			first_load = false;		
			wrapper.fadeOut(function() {
				$.ajax({
					url: url,
					type: 'post',
					data: adv_form.serialize(),
					success: callback
				});
			});
		},
	
		// ajax success function
		callback = function( data, status, jqHXR ) {
			if ( status == 'success' ) {
				wrapper.html(data).fadeIn(function() {
					toggle_arrows();
					kwiat.global.tooltip();
					kwiat.global.swap();
				});
			}
		};
	
		// preload the products
		wrapper.preloader();
	
		// show / hide ajax loader
		$('#product_images').ajaxStart(function() {
			$(this).css('background','url("/images/kwiat_loader.gif") center center no-repeat');
		}).ajaxStop(function() {
			$(this).css('background','none');
		});
	
		// hashchange excecutes ajax call and updates
		// checked criteria and results on page load
		$(window).bind( 'hashchange', function( event ) {
			// get params from hash
			page = hash.getState('page');
			options = hash.getState('options');
			temp = false;
		
			adv_form.find('input:checkbox').attr('checked', false);

			// find a better solution to set timeout
			if ( options ) {			
				var checked = options.split('/');
				for ( var i = 0; i < checked.length; i++ ) {
					temp = adv_form.find( 'input[value="' + checked[i] + '"]' );
					temp.attr('checked', true);
					temp.parent('li').find('a').addClass('bold');
				}
			}
		
			// makes ajax request - if no page, load page 1
			ajax_req(  page ? advanced_search_url + '&page=' + page : advanced_search_url + '&page=1' );
		});
	
		// page load - if hash is present
		if ( window.location.hash != '' ) {
			// trigger hashchange
			$(window).trigger('hashchange');
		}
	
		// clear results back to 0
		clear_search.click(function() {
			adv_form.find('input:checkbox').attr('checked', false);
			browse_option.removeClass('bold');
			window.location.hash = '';
			return false;
		});
	
		// handle next previous arrows
		prev_next.click(function() {
			ajax_url = $(this).hasClass('prev_link') ? $('#prev_set').attr('href') : $('#next_set').attr('href');
			hash.pushState({ page: ajax_url.match(/&page=[0-9]+/gi).toString().replace( '&page=', '' ) });
			return false;
		});
	
		// filter option click
		browse_option.click(function() {
			var cb = $(this).toggleClass('bold').parent('span').next('input');
			cb.attr('checked', cb.is(':checked') ? false : true ).trigger('change');
			return false;
		});
	
		// handles options and pushes them
		// to the url as they get clicked
		adv_form.change(function(event) {
	
			// TODO - REWRITE!
			if ( $( $(event.target).parents('div')[0] ).is('#style_options, #setting_options') ) {
				console.log( $(event.target).parent('li').siblings('li').find('input:checkbox').attr('checked',false).parent('li').find('a').removeClass('bold') );
			}
	
			temp = [];
			group = adv_form.find('input:checked');
		
			// if no options remove the 
			// hash value associated
			if ( group.length === 0 ) {
				hash.removeState('options');
				return false;
			}
		
			// concat selected options
			group.each(function(i) {
				temp.push( $(this).val() );
				if ( ( i + 1 ) === group.length ) {
					hash.pushState({ 'options': temp.join('/'), 'page': 1 });
					return false;
				}
			});
		
		});
		
	}
	
});

$(advanced_search);
