
var searchEngine = {
	init: function() {
		searchEngine.grade = new Array();
		searchEngine.subject = new Array();
		searchEngine.productType = new Array();
		searchEngine.freetext = new Array();
		searchEngine.product = new Array();

	},

	prepareResultsPage: function(term){
		$('#search').remove();
		$('#header #search_header').remove();
		$('#fundingLogo').css('display','none');
		$('#schlMoreInfo').css('display','none');
		$('#nav_head').css('display','none');
		$('.accordion').css('display','none');
		$('.fundingPrograms').css('display','none');
		$('#content').css('display','none');
		$('#header').children().css('display','none');
		$('#content').before('<div id="search">'+(term ? 'search results for <span id="search_term">"'+term+'"</span>' : '') + '<div id="paginate"></div><div id="results"></div><div class="paginate"></div></div>');
		$('#header').append('<img id="search_header" src="/products/fundingconnection/images/search_results.jpg" />');
		$('#header').css('height',105);
	},

	prepareRegularPage: function(){
		$('#search').remove();
		$('#header #search_header').remove();
		$('#header').css('height',135);
		$('#content').css('display','block');
		$('#header').children().css('display','block');
		$('#fundingLogo').css('display','block');
		$('#schlMoreInfo').css('display','block');
  		$('#nav_head').css('display','block');
		$('.accordion').css('display','block');
		$('.fundingPrograms').css('display','block');

	},


	performDropdownSearch: function(e){
		searchEngine.results = new Array();
		e.preventDefault();
		var ids = new Array();
		if($('#productType')[0].value != ""){
			ids = searchEngine.productType[$('#productType')[0].value];
		}
		if($('#grade')[0].value != ""){
			if(ids.length > 0){
				ids = ids.intersect(searchEngine.grade[$('#grade')[0].value]);
			}else{
				ids = searchEngine.grade[$('#grade')[0].value];
			}
		}
		if($('#subject')[0].value != ""){
			if(ids.length > 0){
				ids = ids.intersect(searchEngine.subject[$('#subject')[0].value]);
			}else{
				if($('#grade')[0].value == ""){
					ids = searchEngine.subject[$('#subject')[0].value];
				}
			}
		}
		for(var i=0; i<ids.length; i++){
			searchEngine.results.push(searchEngine.buildProduct(searchEngine.product[ids[i]]));
		}
		searchEngine.prepareResultsPage();
		if(ids.length>0){
			initPagination();
		}else{
			$('#search #results').append("<strong>No results matching given criteria</strong>");
		}
		e.preventDefault();

	},

	performFreetextSearch: function(e){
		searchEngine.results = new Array();
		ids = searchEngine.freetext[$('#freetext')[0].value.toLowerCase()];
		searchEngine.prepareResultsPage($('#freetext')[0].value);
		if(ids){
			for(var i=0; i<ids.length; i++){
				searchEngine.results.push(searchEngine.buildProduct(searchEngine.product[ids[i]]));
			}
			initPagination();
		}else{
			$('#search #results').append("No results matching given criteria");
		}
		e.preventDefault();
	},

	buildProduct: function(prod){
		return '<div class="result"><a onClick="searchEngine.prepareRegularPage();" href="'+prod.link+'">'+prod.name+'</a><p>' + prod.message + '</p></div>';
	},

	mergeArrays: function(a,b){
		for(var i=0;i<b.length;i++){
			if(!searchEngine.contains(a,b[i])){
				a.push(b[i]);
			}
		}
		return a;
	},

	contains: function(arr,elem){
		var found = false;
		for (var i = 0; i < arr.length; i++) {
			if (arr[i] == elem) {
				found = true;
				break;
			}
		}
		return found;
	}
}

function pageselectCallback(page_index, jq){
		var res = $("#results");
		res.empty();
		for(var i=page_index*10; i<Math.min(searchEngine.results.length,(page_index+1)*10); i++){
			res.append(searchEngine.results[i]);
		}
		$("#paginate .num_results").remove();
		$("#paginate").prepend('<div class="num_results">SHOWING ' + (1 + page_index*10) + '-' + Math.min(searchEngine.results.length,(page_index+1)*10) + ' of ' + searchEngine.results.length+'</div>');
		return false;
	}

function initPagination() {
	var num_entries = searchEngine.results.length;
	// Create pagination element
	$("#paginate").pagination(num_entries, {
		num_edge_entries: 2,
		num_display_entries: 10,
		callback: pageselectCallback,
		items_per_page:10,
		prev_show_always: false,
		next_show_always: false
	});
 }

$(function(){
	searchEngine.init();
	populateProductType();
	populateSubject();
	populateGrade();
	populateFreetext();
	populateProduct();
	$("#findDropdown").click(searchEngine.performDropdownSearch);
	$("#findFreetext").click(searchEngine.performFreetextSearch);
});

