var SEARCH_BOX_DEFAULT_TEXT = 'Enter the keywords to search the KnowledgeBase:';

var AJAX_PENDING_TIMER;
var CURRENT_PAGE = 1;
var CURRENT_LIMIT = 5;
function init() {
	if( !$("#kb_search_form").length ) {
		return;
	}

	var sTextBox   = $("#kb_search_val");
	var radios     = $("#kb_search_form [name=applies_to2]");
	var subradios  = $("#kb_search_form [name=subfilter]");
	var submitLink = $("#kbs_submit_link");

	var prevQuery     = $("#prev_kb_search_val").attr('value');
	var prevAppliesTo = $("#prev_kb_applies_to").attr('value');


	// set form defaults
	radios.each(function() {
		if(this.value == prevAppliesTo) {
			$("#kb_search_form [name=applies_to]").get(0).value = this.value;
			this.checked = true;
		}
	});

	sTextBox.attr('value',prevQuery);
	if(!sTextBox.attr('value')) {
		sTextBox.attr('value',SEARCH_BOX_DEFAULT_TEXT);
	}

	// set up form element handlers and properties
	sTextBox.focus(function() {
		if(this.value == SEARCH_BOX_DEFAULT_TEXT) {
			this.value = '';
		}
	});
	sTextBox.blur(function() {
		if(this.value == '') {
			this.value = SEARCH_BOX_DEFAULT_TEXT;
		}
	});

	submitLink.click(function() {
		if(sTextBox.val() == SEARCH_BOX_DEFAULT_TEXT) {
			sTextBox.val('');
		}
		$('#kb_search_form').submit();
	});



	sTextBox.keyup(function() {
		var q    = $("#kb_search_val").val();
		if( q == SEARCH_BOX_DEFAULT_TEXT || q == '' || q == undefined ) {
			HideLiveSearch();
		}
		else {
			clearTimeout(AJAX_PENDING_TIMER);
			CURRENT_PAGE = 1;
			AJAX_PENDING_TIMER = setTimeout("PerformLiveSearch()",300);
		}
		
	});

	radios.click(function(el) {
		$("#kb_search_form [name=applies_to]").get(0).value = this.value;
		PerformLiveSearch();	
		SubFilterOptions(this);
	});

	subradios.click(function(el) {
		$("#kb_search_form [name=applies_to]").get(0).value = this.value;
		PerformLiveSearch();	
	});

	// set up live search result handlers and properies
	$("#kbs_result_close_link").click(function() {
		HideLiveSearch();
	});

}

function SubFilterOptions(el) {
	// dv option
	if(el.id == 'kbs_filter_02' ) {
		$('#kb_livesearch dt').css('height','auto');
		$('div.kbls_subnav').animate({width: '623px'}, 300);
		$('#subnavclear').show();
		$('div.kbls_subfilters').show();	
	}
	else {
		$('div.kbls_subnav').animate({width: '120px'}, 300);
		$('#subnavclear').show();
		$('div.kbls_subfilters').hide();	
	}

}

function NextPage(p) {
	if(p['has_next']) {
		AJAX_IS_RUNNING = false;
		CURRENT_PAGE++;
		PerformLiveSearch();
	}
}
function PrevPage(p) {
	if(p['has_prev']) {
		AJAX_IS_RUNNING = false;
		CURRENT_PAGE--;
		PerformLiveSearch();
	}
}

function ShowLoaders() {
	$('#searchspinner2').fadeIn('fast');

	if( $('#kb_livesearch').css('display') == 'block' ) {
		var h = $('#kb_livesearch').height() - 5;
		var w = $('#kb_livesearch').width() - 45;
		$('#kbls_loader_div').width(w);
		$('#kbls_loader_div').height(h);
		$('#kbls_loader_div p').css('margin-top',(h/2)+20);
		$('#kbls_loader_div').fadeIn('fast');
	}
}

function HideLoaders() {
	$('#searchspinner2').fadeOut('fast');
	$('#kbls_loader_div').hide();
}

var AJAX_IS_RUNNING = false;
function PerformLiveSearch() {

	if(AJAX_IS_RUNNING == true) {
		return;
	}

	var query      = $("#kb_search_val");
	var applies_to = $("#kb_search_form [name=applies_to]");
	var q_val      = (query.val() && query.val() != SEARCH_BOX_DEFAULT_TEXT) ? query.val() : '';	
	var a2_val     = (applies_to.val()) ? applies_to.val() : '';

	if(q_val == '') {
		return;
	}
	AJAX_IS_RUNNING = true;

	$.ajax({
		url:        '/search.php',
		data: {
			Query: q_val,
			applies_to: a2_val,
			output: 'json',
			limit: '5',
			page: CURRENT_PAGE,
			limit: CURRENT_LIMIT
		},
		type:       'GET',
		timeout:    '5000',
		dataType:   'json',
		beforeSend: function() {
			// TODO: start spinners
			AJAX_IS_RUNNING = true;
			ShowLoaders();
		},
		complete: function() {
			// TODO: stop spinners
			AJAX_IS_RUNNING = false;
			HideLoaders();
		},
		success: function(data, textStatus) {
			AJAX_IS_RUNNING = false;
			HideLoaders();
			$('#kb_livesearch').slideDown();

			// clear the results
			$(".kbls_results dd").remove();
			var resultsNav = $('.kbls_results dt');

			if( data['results'].length ) {

				// add the new results (in reverse since the
				// append inserts right after the header and not
				// at the end of the result list
				var current = resultsNav;
				for(i=data['results'].length;i>0;i--) {
					current.after(
						ResultRowHTML(data['results'][i-1])
					);
				}
			}
			else {
				resultsNav.after('<dd id=""><p>No articles found with these search terms</p></dd>');
			}
			UpdateResultFooter(data['paging'],".kbls_navbody");

		},
		error: function(XMLHttpRequest, textStatus, errorThrown) {
			AJAX_IS_RUNNING = false;
			HideLoaders();
//			console.log('error: ' + textStatus);
//			console.log('error: ' + errorThrown);
			HideLiveSearch();
		}
	});

}

function ResultRowHTML(row) {
	var output = '<dd id="">';
	output += '<a href="' + row['href'] + '">';
	output += '<span class="kb_ico ' + row['ArticleTypeClass'] + '"><em>Launch</em></span><p>';
	output += '<b>' + row['title'] + '</b>';
	output += row['summary'];
	output += '<span class="kb_em">Applies To: ' + row['AppliesTo'] + '</span>';
	output += '</p></a></dd>';
	return output;
}
function UpdateResultFooter(p,selector) {

	$(selector + " *").remove();

	if(p['start_idx'] != undefined) {
		var html = '<span class="kbls_legend">' + p['start_idx'] + ' - ' + p['end_idx'] + ' of ' + p['total'] + ' Results</span>';
		html += '<a class="kbls_next" href="javascript:void(0);" title="Next 5 Results"><em>Next</em></a>';
		html += '<a class="kbls_prev" href="javascript:void(0);" title="Previous 5 Results"><em>Previous</em></a>';
		html += '<div class="clearfix">&nbsp;</div>';

		$(selector).append(html);
	}
	else {
		var html = '<span class="kbls_legend">0 Results</span>';
		html += '<a class="kbls_next" href="javascript:void(0);" title="Next 5 Results"><em>Next</em></a>';
		html += '<a class="kbls_prev" href="javascript:void(0);" title="Previous 5 Results"><em>Previous</em></a>';
		html += '<div class="clearfix">&nbsp;</div>';

		$(selector).append(html);
	}

	$(selector + " .kbls_next").click(function() {
		NextPage(p);
	});
	$(selector + " .kbls_prev").click(function() {
		PrevPage(p);
	});

}

function HideLiveSearch() {
	$('#kb_livesearch').slideUp();
	$('#searchspinner2').fadeOut('fast');
}

$(document).ready(function() {
	init();
});
