Skip to content
Snippets Groups Projects
Forked from Digital Experience Group / UNL_Search
211 commits behind the upstream repository.
searchFunc.js 5.31 KiB

// Load the Google Search AJAX API
google.load("search", "1");

function searchInit() {
	UNL_Search.peoplefinderCache = new UNL_Search.Cache();

	//Parse the querystring for q
	var qs = location.search.substring(1,location.search.length);
	qs = qs.replace(/\+/g, ' ');
	var args = qs.split('&');
	UNL_Search.query = "";
	for (var i=0;i<args.length;i++) {
		var pair = args[i].split('=');
		var name = unescape(pair[0]);
		if (name == "q") {
			if (pair.length == 2) {
				UNL_Search.query = unescape(pair[1])
			}
			break;
		}
	}
	
	UNL_Search.unl_search = new google.search.CustomSearchControl("015236299699564929946:nk1siew10ie");
	
	UNL_Search.unl_search.draw('unl_results');

	if (UNL_Search.do_local_search) {
		UNL_Search.local_search = new google.search.CustomSearchControl(UNL_Search.local_search_context);
		UNL_Search.local_search.setResultSetSize('small');
		UNL_Search.local_search.draw('local_results');
	}

	var gSearchForm = new GSearchForm(false, document.getElementById("searchform"));
	gSearchForm.setOnSubmitCallback(UNL_Search, UNL_Search.doQuery);
	gSearchForm.input.value = (UNL_Search.query ? UNL_Search.query : "");

	// Execute an inital search
	if (UNL_Search.query && UNL_Search.query != "") {
		UNL_Search.unl_search.execute(UNL_Search.query);
		if (UNL_Search.do_local_search) {
			UNL_Search.local_search.execute(UNL_Search.query);
		}
		UNL_Search.doPeoplefinderQuery(UNL_Search.query);
	}
}

//Attach search initializer to onLoad
google.setOnLoadCallback(searchInit, true);


//
// UNL_Search Namespace
//
if (typeof(UNL_Search) == "undefined")
	UNL_Search = {};

UNL_Search.query              	 = null;
UNL_Search.do_local_search    	 = false;
UNL_Search.unl_search         	 = null;
UNL_Search.local_search       	 = null;
UNL_Search.local_search_context  = null;
UNL_Search.scrolldelay        	 = null;
UNL_Search.peoplefinderCache  	 = null;

//Caching Class
//
UNL_Search.Cache = {};
UNL_Search.Cache = function() {
	this.storage = new Object();
};

UNL_Search.Cache.prototype.save = function(key, data) {
	this.storage[key] = data;
};

UNL_Search.Cache.prototype.get = function (key) {
	var val = null;
	
	if (this.storage[key] != null) {
		val = this.storage[key];
	}
	
	return val;
};

UNL_Search.handleUNLResults = function () {
	UNL_Search.handleResults('unl_results', UNL_Search.unl_search);
};

UNL_Search.handleLocalResults = function () {
	UNL_Search.handleResults('local_results', UNL_Search.local_search);
};

UNL_Search.handleResults = function (result_div, searchobj) {
	var resultsDIV = document.getElementById(result_div);
	
	if (searchobj.results && searchobj.results.length > 0) {
		resultsDIV.innerHTML = '';
		WDN.jQuery(resultsDIV).css('background', 'none');
		//var resultHead = '<p>Results <strong>' + (1 + 8 * searchobj.cursor.currentPageIndex) + '</strong> - <strong>' + (8 + 8 * searchobj.cursor.currentPageIndex) + '</strong> of about <strong>' + searchobj.cursor.estimatedResultCount + '</strong> for <em>' + query + '</em></p>';
		//resultsDIV.innerHTML += resultHead;
		for (var i = 0; i < searchobj.results.length; i++) {
			if (i % 2 != 0) {
				searchobj.results[i].html.className += " alt";
			}
			resultsDIV.appendChild(searchobj.results[i].html);
		}
		if (mobileSearch) { //if we're doing a mobile search, rewrite link URLs to use mobile proxy
			WDN.jQuery(resultsDIV).find('a.gs-title').each(function(){
				//href= WDN.jQuery(this).attr('href');
				WDN.jQuery(this).attr('href', function(i, val){
					return 'http://m.unl.edu/?view=proxy&u='+val;
				});
			});
		}
		var nav = document.createElement("ul");
		nav.className = "wdn_pagination";
		var search_name = 'unl_search';
		if (result_div.substring(0,5) == 'local') {
			search_name = 'local_search';
		}
		for (var i = 0; i < searchobj.cursor.pages.length; i++) {
			WDN.loadCSS('/wdn/templates_3.0/css/content/pagination.css');
			var pageText = '';
			if (searchobj.cursor.currentPageIndex != i) {
				pageText += '<li><a onclick="UNL_Search.'+search_name+'.gotoPage(' + i + '); return false;" href="#">' + searchobj.cursor.pages[i].label + '</a></li>';
			} else {
				pageText += '<li class="selected">'+searchobj.cursor.pages[i].label + '</li>';
			}
			nav.innerHTML += pageText;
		}
		if (searchobj.cursor.pages.length >= 8) {
			nav.innerHTML += '<li><a href="' + searchobj.cursor.moreResultsUrl + '">More Results &gt;&gt;</a></li>';
		}
		resultsDIV.appendChild(nav);
	} else {
		WDN.jQuery(resultsDIV).html('<p>No results found.</p>');
	}
};


UNL_Search.doPeoplefinderQuery = function (val) {
	var cacheData = this.peoplefinderCache.get(val)
	if (cacheData) {
		this.handlePeoplefinderResults(cacheData);
	} else {
		var pointer = this;
		WDN.get("http://directory.unl.edu/service.php?q=" + val, null, function(data, textStatus) {
			pointer.peoplefinderCache.save(val, data);
			UNL_Search.handlePeoplefinderResults(data);
		});
	}
};

UNL_Search.handlePeoplefinderResults = function (peoplefinderText) {
	WDN.jQuery('#ppl_results').html(peoplefinderText);
};

UNL_Search.doQuery = function (form) {
	if (form.input.value != "") {
		this.query = form.input.value;
		if (this.do_local_search) {
			this.local_search.execute(form.input.value);
		}
		this.unl_search.execute(form.input.value);
		this.doPeoplefinderQuery(form.input.value);
	} else {
		document.getElementById("searchcontrol").innerHTML = '';
		document.getElementById("ppl_results").innerHTML = '';
	}
	
	return false;
};