//
// library.js - Copyright 2008 Robert E. Kennedy Library
//
// (Requires mootools-core 1.2 or newer.)
//

////////////////////////////////// PAGE-SPECIFIC //////////////////////////////////

// Find span.call-number elements and generate links to the related PolyCat entry
function createCallNumberLinks() {
	var callNums = $$('span.call-number');
	
	callNums.each(function(el) {
		var callStr = el.get('text');
		var newHTML = '<a href=\"http://poetry.lib.calpoly.edu/search/c?SEARCH=';
		newHTML += encodeURIComponent(callStr);
		newHTML += '&SUBMIT=Search\">' + callStr + '</a>';
		el.set('html', newHTML);
	});	
}

//////////////////////////////////// SEARCH BAR ////////////////////////////////////

var services = {
	"article": {
		"action": "http://xerxes.calstate.edu/slo/metasearch",
		"method": "get",
		"hidden": [
			{"name": "action",      "value": "search"},
			{"name": "context",     "value": "Article Databases Quick Search"},
			{"name": "context_url", "value": "http://lib.calpoly.edu/collections/databases/quicksearch/index.html"},
			{"name": "field",       "value": "WRD"},
			{"name": "database",    "value": "CAL02595"}, // Academic Search Elite
			{"name": "database",    "value": "CAL02596"}, // Expanded Academic ASAP
			{"name": "database",    "value": "CAL03580"}, // CQ Researcher
			{"name": "database",    "value": "CAL13673"}  // Opposing Viewpoints
		],
		"inputName": "query",
		"defaultUrl": "http://lib.calpoly.edu/collections/databases/"
	},

	"booksAuthor": {
		"action": "http://poetry.lib.calpoly.edu/search/",
		"method": "get",
		"hidden": [
			{"name": "searchtype", "value": "a"}
		],
		"inputName": "searcharg",
		"defaultUrl": "http://poetry.lib.calpoly.edu/"
	},

	"booksKeyword": {
		"action": "http://poetry.lib.calpoly.edu/search/",
		"method": "get",
		"hidden": [
			{"name": "searchtype", "value": "X"},
			{"name": "SORT",       "value": "DX"}
		],
		"inputName": "searcharg",
		"defaultUrl": "http://poetry.lib.calpoly.edu/"
	},

	"booksTitle": {
		"action": "http://poetry.lib.calpoly.edu/search/",
		"method": "get",
		"hidden": [
			{"name": "searchtype", "value": "t"}
		],
		"inputName": "searcharg",
		"defaultUrl": "http://poetry.lib.calpoly.edu/"
	},

	"googleScholar": {
		"action": "http://scholar.google.com/scholar_setprefs",
		"method": "get",
		"hidden": [
			{"name": "num", "value": "50"},
			{"name": "newwindow", "value": "1"},
			{"name":"inst","value":"sfx-36545ce96ac2a0df505cd35736e99e90"},
			{"name":"inst","value":"cat-oclc"},
			{"name": "submit", "value": "Save+Preferences"}
		],
		"inputName": "q",
		"defaultUrl": "http://scholar.google.com/"
	},

	"journalTitle": {
		"action": "http://poetry.lib.calpoly.edu/search/j",
		"method": "get",
		"inputName": "SEARCH",
		"defaultUrl": "http://poetry.lib.calpoly.edu/screens/opacmenu_journals.html"
	},

	"ejournals": {
		"action": "http://ka3qg8vr6t.search.serialssolutions.com/",
		"method": "get",
		"hidden": [
			{"name": "V", "value": "1.0"},
			{"name": "N", "value": "100"},
			{"name": "L", "value": "KA3QG8VR6T"},
			{"name": "S", "value": "T_W_A"}
		],
		"inputName": "C",
		"defaultUrl": "http://ka3qg8vr6t.search.serialssolutions.com"
	},

	"librarySite": {
		"action": "http://search.calstate.edu/search",
		"method": "get",
		"hidden": [
			{"name": "output",          "value": "xml_no_dtd"},
			{"name": "client",          "value": "slo-library"},
			{"name": "proxystylesheet", "value": "slo-library"},
			{"name": "site",            "value": "slo-library"}
		],
		"inputName": "q",
		"defaultUrl": "http://www.lib.calpoly.edu/"
	},

	"seniorProject": {
		"action": "http://poetry.lib.calpoly.edu/search/X",
		"method": "get",
		"inputName": "SEARCH",
		"inputFirst": "true",
		"hidden": [
			{"name": "m", "value": "s"}
		],
		"defaultUrl": "http://poetry.lib.calpoly.edu/screens/opacmenu_senior.html"
	}
};

// Fixes minor rendering differences between browsers
function fixSearchBarPositions() {
	if ($('searchbar-quicksearch') && (Browser.Engine.trident4 || Browser.Engine.trident5)) { // IE 6 or 7
		$('searchbar-quicksearch').setStyle('position', 'relative');
		$('searchbar-quicksearch').setStyle('top', -1);
	}
}

// Sets up the searchbar
function loadSearchBar() {
	if ($('searchbar')){
		// Attach click event handler to quick search submit button
		$('searchbar-submit').addEvent('click', function() {
			if ($('searchbar-service').selectedIndex === 0) {
				$('searchbar-service').highlight("#ff0");
				return false;
			} else {
				return submitQuickSearch();
			}
		});
		
		// Attach onChange event handler to "I Need..." drop-down
		$('searchbar-ineed-select').addEvent('change', function() {
			return processINeed();
		});
	}
	
	// Focus the searchbar input box
	var searchbarInput = $('searchbar-searchterms');
	if (searchbarInput){
			searchbarInput.focus();
	}
}

// When the service drop-down is changed, modify the form as needed.
function submitQuickSearch() {
	var service = eval("services." + $('searchbar-service').value);
	
	// If no search terms, send them to the default URL
	if ($('searchbar-searchterms').value == "") {
		window.location = service.defaultUrl;
	} else {
		// Build form
		var form = new Element('form');
	
		form.setAttribute('id', 'searchbarForm');
		form.setAttribute('action', service.action);
		form.setAttribute('method', service.method);
		form.setAttribute('style', "position: absolute; top: -1000em;"); // Invisible
		
		var searchTerms = $('searchbar-searchterms').value;
		
		// If searching PolyCat by author, massage input to please Mr. Picky PolyCat
		if ($('searchbar-service').value == "booksAuthor") {
			// If no comma, assume input is in form of "Jane Doe" or "Bob H. Smith"
			if (searchTerms.indexOf(',') == -1 && searchTerms.indexOf(' ') > 1) {
				searchTerms = searchTerms.split(' ');
				var lastName = searchTerms[searchTerms.length - 1];
				
				for (i=searchTerms.length-1; i > 0; i--) {
					searchTerms[i] = searchTerms[i-1];
				}
				searchTerms[0] = lastName + ",";
				
				searchTerms = searchTerms.join(" ");
			}
		}
		
		// Create search input element
		var searchInput = new Element('input', {
			'type': 'hidden',
			'name': service.inputName,
			'value': searchTerms
		});
		
		// Dumb Innovative/WebPAC bug
		if (service.inputFirst) {
			searchInput.inject(form);
		}
		
		// Add hidden inputs, if needed
		if (service.hidden) {
			// Add extra inputs
			
			service.hidden.each(function(el) {
				
				var values = new Element('input', {
					'type': 'hidden',
					'name': el.name,
					'value': el.value
				});
				
				values.inject(form);
			});
		}
		
		// Dumb Innovative/WebPAC bug
		if (!service.inputFirst) {
			searchInput.inject(form);
		}
	
		// Submit form!
		// We have to fake a mouse click because form.submit() doesn't work when there's a hidden input named 'submit'.
		form.inject($('searchbar'));
		new Element('input', {'type': 'submit'}).inject(form).click();
	}
	
	return false;
}

// When the "I Need..." drop-down is changed, navigate to that URL
function processINeed() {
	if ($('searchbar-ineed-select').selectedIndex > 0) {
		var url = $('searchbar-ineed-select').value;
		
		if (url.indexOf("/") === 0) {
			url = location.protocol + "//" + location.host + url;
		}
	
		// Send user to new URL
		location.href = url;
	
		return true;
	} else { // If "I need..." label was selected, do nothing.
		return false;
	}
}

///////////////////////////////////// DOM Ready /////////////////////////////////////

window.addEvent('domready', function() {
	loadSearchBar();
	fixSearchBarPositions();
	
	createCallNumberLinks();
});
