var PAGE_CURRENT = 1;
var PAGE_TOTAL = 1;
var RESULTS_PER_PAGE = 3;
var SLIDER;
var SLIDER_DOWN = false;
var SERVICERESULTS = new Object();
var GSASERVICE = location.protocol + '//' + location.hostname + '/App_Services/unsecure/nocache/gsaservice.asmx';
var KEYWORDS = 5;

if (window.attachEvent) {
	window.attachEvent('onload',setup);
} else {
	window.addEventListener('load', setup, false);
}

function setup() {
	if (navigator.userAgent.indexOf('Chrome') < 0) {	//Chrome has issues with scrollbars in transparent layers
		var trans = .95;
		$('searchBG').setOpacity(trans);
		$('searchresults_bottom').setOpacity(trans);
	}
	$('searchresults_holder').setStyle({'top':0-$('searchresults_holder').getHeight()+'px'});
}

function objectify(xmlObj) {
	var retObj = new Object();

	if (xmlObj.nodeType == 1) { //element node
		//check for attributes
		if (xmlObj.attributes.length > 0) {
			for (var a=0;a<xmlObj.attributes.length;a++) {
				var att = xmlObj.attributes[a];
				retObj[att.nodeName] = att.nodeValue;
			}
		}
	} else if (xmlObj.nodeType == 3) { //text only
		retObj = xmlObj.nodeValue;
	}

	//check for children
	if (xmlObj.hasChildNodes()) {
		for(var c=0;c<xmlObj.childNodes.length;c++) {
			var cN = xmlObj.childNodes[c];
			if (!cN.isElementContentWhitespace) {
				if (typeof(retObj[cN.nodeName]) == 'undefined') {
					if (cN.hasChildNodes() && cN.childNodes.length == 1 && cN.childNodes[0].nodeName.toLowerCase()=='#text') {
						retObj[cN.nodeName] = cN.childNodes[0].nodeValue;
					} else {
						retObj[cN.nodeName] = objectify(cN);
					}
				} else {
					if (cN.nodeName!='#text') {
						if (typeof(retObj[cN.nodeName].length) == 'undefined') {
							var old = retObj[cN.nodeName];
							retObj[cN.nodeName] = [];
							retObj[cN.nodeName].push(old);
						}
						retObj[cN.nodeName].push(objectify(cN));
					}
				}
			}
		}
	}

	return retObj;
}

function parseResp(XMLResponse) {
	SLIDER = clearInterval(SLIDER);
	SERVICERESULTS = objectify(XMLResponse).ServiceResponseOfXElement;

	if (SERVICERESULTS.StatusCode != '1000') {
		noResults();
	} else {
		SERVICERESULTS = SERVICERESULTS.ResponseData.toplevel;
		var resultsCnt = SERVICERESULTS.document.length;

		$('results').update();
		$('related').update();
		var WT_result_params = [
			'WT.oss', $('searchbox').value.strip(),
			'WT.oss_r', (resultsCnt > 0) ? resultsCnt : '0'
			];
		globalWT.dcsMultiTrack.apply(globalWT, WT_result_params);
		if (resultsCnt > 0) {
			for (var r=0;r<resultsCnt;r++) {
				var result = SERVICERESULTS.document[r];

				result.url = result.url.data;
				result.title = result.title.data;
				result.snippet = result.snippet.data;

				var url = result.url;
				var urlSplit = url.split('.');
				var ext = urlSplit[urlSplit.length-1];
				switch (ext) {
					case 'pdf':
						result.icon = 'pdf';
						result.target = '_blank';
						break;
					case 'flv':
						result.icon = 'movie';
						result.target = '_top';
						break;
					case 'tool':
						result.icon = 'tool';
						result.target = '_top';
						break;
					case 'link':
						result.icon = 'link';
						result.target = '_top';
						break;
					default:
						result.icon = 'web';
						result.target = '_top';
						break;
				}
			}

			PAGE_TOTAL = Math.ceil(resultsCnt/RESULTS_PER_PAGE);
			$('more_current').innerHTML = PAGE_CURRENT;
			$('more_total').innerHTML = PAGE_TOTAL;
			$('btn_back').hide();
			$('btn_forward').show();
			populateResults(0,RESULTS_PER_PAGE-1);
			if (resultsCnt > 3) {
				$('more_toggle').show();
			}
			$('close_bar').show();
		} else {
			noResults();
		}
	}

	$('progress').hide();
	SLIDER = setInterval(slideIt,1);
}

function submitIt() {
	trackWT({cgp:'search',cgs:globalWT.WT.cg_s,lpss:'internal',ti:'search go',dl:'21'});
	if ($('searchbox').value.strip() != '') {
		$('progress').show();
		PAGE_CURRENT = 1;
		PAGE_TOTAL = 1;
		SERVICERESULTS = new Object();

		var searchterm = $('searchbox').value;
		var language = 'en_us';

		var params = 'q='+searchterm+'&language='+language+'&numrelatedKeyWordsToreturn='+KEYWORDS;
		var request = new Ajax.Request(GSASERVICE+'/Search', {
			method: 'get',
			asynchronous: true,
			parameters: params,
			onFailure: function() {
//				alert('xml fail');
			},
			onComplete: function() {
//				alert('complete');
			},
			onSuccess: function(response) {
//				alert('success');
				var XMLresponse = response.responseXML;
				parseResp(XMLresponse);
			}
		});
	} else {
		alert('Please enter a phrase to search on');
	}
}

function populateResults(start,stop) {
	$('results').removeClassName('noresults');
	if (stop >= SERVICERESULTS.document.length) {stop=SERVICERESULTS.document.length-1;}
	$('results').update();
	var tmpResults = new Template('<div class="result"><img class="icon" src="/assets/images/gsa/icon_#{icon}.gif" alt="#{icon}" /><div class="text"><p class="title">#{title}</p><p class="snippet">#{snippet}</p><p class="url">#{url}</p></div><a href="#{url}" target="#{target}" class="link" onclick="trackWT({cgp:\'search\',cgs:globalWT.WT.cg_s,lpss:\'internal\',ti:\'search results\',dl:\'21\'});"><img src="/assets/images/gsa/spacer.gif" class="link" /></a></div><hr />');
	for (var r=start;r<=stop;r++) {
		SERVICERESULTS.document[r].snippet=SERVICERESULTS.document[r].snippet.replace('<br>','');
		$('results').insert(tmpResults.evaluate(SERVICERESULTS.document[r]));
	}
	buildRelated();
}

function buildRelated() {
	$('related').update();
	if (SERVICERESULTS.related != undefined) {
		var kwString = SERVICERESULTS.related[0].keywords;
		var relatedResults = kwString.split(',');
		if (kwString != '') {
			for (var r=0;r<relatedResults.length;r++) {
				var odd_even = (r % 2 == 0) ? 'odd' : 'even';
				$('related').insert('<div class="'+odd_even+' text"><a href="javascript:research(\''+relatedResults[r].strip()+'\');" onclick="trackWT({cgp:\'search\',cgs:globalWT.WT.cg_s,lpss:\'internal\',ti:\'related search\',dl:\'21\'});"><img src="/assets/images/gsa/spacer.gif" class="overlay" />'+relatedResults[r].strip()+'</a></div>');
			}
		} else {
			$('related').update('<p class="text">There are no related searches.</p>');
		}
	} else {
		$('related').update('<p class="text">There are no related searches.</p>');
	}
}

function research(term) {
	$('searchbox').value = term;
	submitIt();
}

function noResults() {
	var resultsText = '';
	var relatedText = '';
	$('more_toggle').hide();
	$('close_bar').show();
	if (SERVICERESULTS.StatusCode == '2010') {
		resultsText = '<div class="result"><div class="text"><p class="title">No results matched your search criteria.  Please try again.</p></div></div><hr />';
		relatedText = '<p class="text">There are no related searches.</p>';
	} else {
		resultsText = '<div class="result"><div class="text"><p class="title">There was an error processing your request.  Please try again later.</p></div></div><hr />';
		relatedText = '<p class="text">There are no related searches.</p>';
	}
	$('results').update(resultsText);
	$('related').update(relatedText);
	$('results').addClassName('noresults');
}

function pgForward() {
	trackWT({cgp:'search',cgs:globalWT.WT.cg_s,lpss:'internal',ti:'more results - next',dl:'21'});
	var itemStart = PAGE_CURRENT*RESULTS_PER_PAGE;
	++PAGE_CURRENT;
	var itemStop = (PAGE_CURRENT*RESULTS_PER_PAGE)-1;
	itemStop = (itemStop >= SERVICERESULTS.document.length) ? SERVICERESULTS.document.length-1 : itemStop;
	populateResults(itemStart,itemStop);
	$('more_current').innerHTML = parseInt($('more_current').innerHTML)+1;
	$('btn_back').show();
	if (PAGE_CURRENT == PAGE_TOTAL) {
		$('btn_forward').hide();
	}
}

function pgBack() {
	trackWT({cgp:'search',cgs:globalWT.WT.cg_s,lpss:'internal',ti:'more results - previous',dl:'21'});
	PAGE_CURRENT = PAGE_CURRENT-2;
	var itemStart = PAGE_CURRENT*RESULTS_PER_PAGE;
	++PAGE_CURRENT;
	var itemStop = (PAGE_CURRENT*RESULTS_PER_PAGE)-1;
	populateResults(itemStart,itemStop);
	$('more_current').innerHTML = parseInt($('more_current').innerHTML)-1;
	$('btn_forward').show();
	if (PAGE_CURRENT == 1) {
		$('btn_back').hide();
	}
}

function slideIt() {
	$('searchresults_holder').show();
	var srh_top = parseInt($('searchresults_holder').getStyle('top').replace('px',''));

	if (!SLIDER_DOWN) {
		if (srh_top < 31) {
			$('searchresults_holder').setStyle({'top':srh_top+6+'px'});
		} else {
			$('searchresults_holder').setStyle({'top':'37px'});
			SLIDER_DOWN = true;
			SLIDER = clearInterval(SLIDER);
		}
	} else {
		SLIDER = clearInterval(SLIDER);
	}
}

function hideIt() {
	var srh_top = parseInt($('searchresults_holder').getStyle('top').replace('px',''));
	var stopPt = 0-$('searchresults_holder').getHeight();

	if (srh_top > stopPt) {
		$('searchresults_holder').setStyle({'top':srh_top-12+'px'});
	} else {
		$('searchresults_holder').setStyle({'top':0-$('searchresults_holder').getHeight()+'px'});
		SLIDER = clearInterval(SLIDER);
		$('more_toggle').hide();
		$('close_bar').hide();
		$('searchresults_holder').hide();
	}
}

function closeGSA() {
	trackWT({cgp:'search',cgs:globalWT.WT.cg_s,lpss:'internal',ti:'search close',dl:'21'});
	SLIDER = clearInterval(SLIDER);
	SLIDER = setInterval(hideIt,1);
	SLIDER_DOWN = false;
}

function getText(node) {
	if (node.text != undefined) {		//IE
		return node.text.replace(/&amp;/g, '&');
	} else if (node.textContent != undefined) {		//FireFox
		return node.textContent.replace(/&amp;/g, '&');
	}
}

