Event.observe(window, 'load', function() { setForm() });

function getReferenceURL(terms, buttonName)  {
	var url;
	switch(buttonName) {
		case 'google': 
			url = makeGoogleURL(terms);
			break;
		
		case 'pubmed': 
			url = makePubMedURL(terms);
			break;
		
		case 'citeseer':
			url = makeCiteSeerURL(terms);
			break;
		default:
			break;
	}
	
	window.open(url,'refWindow')
}

function makeGoogleURL(terms) {
	var url;
	var firstChecked = false;
	url = "http://www.google.com/search?hl=en&q=";
	
	for(var i = 0; i < terms.length; i++) {
		if(terms[i].checked)
			if(!firstChecked) {
				url += terms[i].value;
				firstChecked = true;
			} else {
				url +=  "+" + terms[i].value;
			}
	}
	
	url += "&btnG=Google+Search";
	
	return url;
}

function makePubMedURL(terms) {
	var url;
	var firstChecked = false;
	url = "http://www.ncbi.nlm.nih.gov/sites/entrez?term=";
	
	for(var i = 0; i < terms.length; i++) {
		if(terms[i].checked)
			if(!firstChecked) {
				url += terms[i].value;
				firstChecked = true;
			} else {
				url +=  "%20" + terms[i].value;
			}
	}

	url += "&search=Find%20Articles&db=pmc&cmd=search";
	
	return url;
}

function makeCiteSeerURL(terms) {
	var url;
	var firstChecked = false;
	
	url = "http://citeseer.ist.psu.edu/cs?cs=1&q=";
	
	for(var i = 0; i < terms.length; i++) {
		if(terms[i].checked)
			if(!firstChecked) {
				url += terms[i].value;
				firstChecked = true;
			} else {
				url +=  "+" + terms[i].value;
			}
	}
	
	url += "&submit=Documents&co=Citations&cm=50&cf=Any&ao=Citations&am=20&af=Any";
	
	return url;
}

function getListAndResults(selectedTopic, listName) {
	getList(selectedTopic, listName);
	switch(listName) {
		case 'bioTopics':
		case 'mathTopics':
		case 'csTopics':
			getTopicSearchResults(selectedTopic, listName);
			break;
		case 'textbooks':
			getTextbookSearchResults(selectedTopic);
			break;
		default:
			getSearchResults(selectedTopic, 0, false);
			break;
	}
	
}

function getTextbookSearchResults(selectedTopic) {
	getSearchResults(selectedTopic, 0, false);
}

function getList(selectedTopic, listName) {

			if(selectedTopic != "") { //if there is is a category passed in
			
			//if there are any select boxes after the one that the category came from, remove it
				if($(selectedTopic).up().nextSiblings() != '') { 
					$(selectedTopic).up().nextSiblings().each(function(n) {
						Element.remove(n);
					});
				}
				var boxesToKeep = $(selectedTopic).up().previousSiblings().length + 1;
			} else {
				// if there is no category passed in, we want to start from scratch, 
				// deleting all the select boxes that may be on the screen.
				if($('boxForm').childElements() != '') {
					$('boxForm').childElements().each(function(n) {
						Element.remove(n);
					});
				}
				var boxesToKeep = 0;
			}		
	// Make an ajax requesti asking for an updated list and search results to put on the screen
	new Ajax.Request('../../app/helpers/outlineHelper.php5', 
	{
		method :'get', 
		parameters : {topic: selectedTopic, discipline: listName}, 
		onSuccess: function(transport) {
			var response = transport.responseText;
			if(response != "") {
			//if everything went well, create another select box and put the options 
			// that were returned inside it. Add new box to DOM	
				if(selectedTopic != "") {
					//insert an arrow to help show hiercarchy 
					var arr = new Element('span', {});
					$('boxForm').insert(arr.insert('&rarr;'));
				}
				var box = new Element('select', {id: 'box' + (boxesToKeep + 1), size: '5'});
				box.addClassName('COBoxes');
				box.update(response);
				$('boxForm').insert(box);
			}
		},
		onComplete: function() {
			Event.observe($('box' + (boxesToKeep + 1)), 'click', function() { getListAndResults($F('box' + (boxesToKeep + 1)), listName) });
		},
		onFailure: function() {
			alert('you fail');
		}
	
	});
	
	//If there is a topic, do a topic reference search as well as a simple catalog search
	//arguments: container, params(string if simple, has if advanced), starting point, advanced(boolean), insert(boolean)
}	
function getTopicSearchResults(selectedTopic, listName) {
	var key;
	if(selectedTopic == "")
		return;
	switch(listName) {
		case 'bioTopics':
			key = 'Biology_Topic';
			getTopicSearchResultsHelper($H({Biology_Topic: selectedTopic, Type: 'Reference Material'}) ,'0', key);
			break;
		case 'mathTopics':
			key = 'Math_Topic';
			getTopicSearchResultsHelper($H({Math_Topic: selectedTopic, Type: 'Reference Material'}) ,'0', key);
			break;
		case 'csTopics':
			key = 'CS_Topic';
			getTopicSearchResultsHelper($H({CS_Topic: selectedTopic, Type: 'Reference Material'}) ,'0', key);
			break;
	}
}

function getTopicSearchResultsHelper(param, startFrom, key) {
	if(startFrom == null) {
		startFrom = 0;
	}
	new Ajax.Request('../../app/helpers/ajaxSimpleSearchHelper.php5', 
	{
		method :'get', 
		parameters : {params: $H(param).get(key), advanced: 'false'},
		onSuccess: function(transport) {
			var simple = transport.responseText;
			$('searchContent').update(simple);
			getTopicReference(param);
		},
		onFailure: function() {
			alert('you fail');
		}
	});
	
}

function getTopicReference(param) {
	var Jparam = param.toJSON();
	new Ajax.Request('../../app/helpers/ajaxSimpleSearchHelper.php5', 
	{
		method :'get', 
		parameters : {params: Jparam, advanced: 'true'},
		onSuccess: function(transport) {
			var topic = transport.responseText;
			if(topic.match(/<br \/\>\<b\>No matching results were found\<\/b\>\.\<br\s\/\>/)) {
				topic = '';
			} else {
				topic.replace("style=\"font-size:100%;font-weight:normal;\"", "");
			}
			$('topicRef').update(topic);
		},
		onFailure: function() {
			alert('you fail');
		}
	});
	
}


// displaySearchResults should take in a value and make an ajax request to get back the cserd search results
function getSearchResults(param, startFrom, isAdvanced) {
	if(startFrom == null) {
		startFrom = 0;
	}
	if(isAdvanced) {
		param = param.toJSON();
	}
	
	new Ajax.Request('../../app/helpers/ajaxSimpleSearchHelper.php5', 
	{
		method :'get', 
		parameters : {params: param, sr: startFrom, advanced: isAdvanced },
		onSuccess: function(transport) {
			$('searchContent').update(transport.responseText);
		},
		onFailure: function() {
			alert('you fail');
		}
	});
	
}

