﻿

EndecaSearch = {}

// parameter keys; these must correspond with parameter names in EndecaQueryParameterMap
EndecaSearch.ENDECA_PARAM_NAV_DESCRIPTORS = "N";
EndecaSearch.ENDECA_PARAM_SEARCH_WITHIN_NAV_DESCRIPTOR = "Ewn";
EndecaSearch.ENDECA_PARAM_SEARCH_TERMS = "Ntt";
EndecaSearch.ENDECA_PARAM_RECORD_SEARCH = "R";

// form element names; these must correpond with element names in search forms
EndecaSearch.ENDECA_ELEMENT_SEARCH_TERMS = "endecaSearchTerms";
EndecaSearch.ENDECA_ELEMENT_RESULTS_PAGE_NAME = "endecaResultsPageName";
EndecaSearch.ENDECA_ELEMENT_SEARCH_WITHIN = "endecaSearchWithin";
EndecaSearch.ENDECA_ELEMENT_SEARCH_QUERYSTRING = "endecaSearchQueryString";
EndecaSearch.ENDECA_ELEMENT_SEARCH_WITHIN_QUERYSTRING = "endecaSearchWithinQueryString";
EndecaSearch.ENDECA_ELEMENT_SCOPED_SEARCH_DIMVALID = "endecaScopedSearchDimValId"

EndecaSearch.ENDECA_ELEMENT_RECORD_COMPARE_PAGE = "endecaRecordComparePageName";

function redirect(url)
{
	//alert("redirect");
	if (url != '')
	{
		window.location.href = url;
	}
};

EndecaSearch.redirect = function(url)
{
	//alert("namespaced redirect");
	if (url != '')
	{
		window.location.href = url;
	}
};

EndecaSearch.validateSearch = function(frm)
{

//alert("validateSearch");
//alert("gather parms");

	var searchBox = frm.elements[EndecaSearch.ENDECA_ELEMENT_SEARCH_TERMS];
	var searchQueryString = frm.elements[EndecaSearch.ENDECA_ELEMENT_SEARCH_QUERYSTRING]; 
	//var resultsPageName = frm.elements[EndecaSearch.ENDECA_ELEMENT_RESULTS_PAGE_NAME];
	var resultsPageName = "results.cfm";
	var searchWithinQueryString = frm.elements[EndecaSearch.ENDECA_ELEMENT_SEARCH_WITHIN_QUERYSTRING];
	var searchWithinDimValId = frm.elements[EndecaSearch.ENDECA_ELEMENT_SCOPED_SEARCH_DIMVALID];

//alert("searchBox = " + searchBox);
//alert("value = " + searchBox.value);
//alert("resultsPageName = " + resultsPageName);
	
	// get searchWithin value; this may be taken from a radio button group or from a 
	// hidden text field.  Value must be 'true' for searchWithin to engeage.
	var searchWithinElement = frm.elements[EndecaSearch.ENDECA_ELEMENT_SEARCH_WITHIN];

//alert("parms gathered");
	
	var searchWithin = searchWithinElement ? EndecaSearch.getSearchWithinValue(searchWithinElement) : 'false';
	
	if (searchBox && resultsPageName && EndecaSearch.trim(searchBox.value) != '')
	{
		var url = resultsPageName.value + "?" + EndecaSearch.ENDECA_PARAM_SEARCH_TERMS + "=" + EndecaSearch.trim(searchBox.value);
		
		if (searchWithinDimValId)
		{
			url +=  "&" + EndecaSearch.ENDECA_PARAM_SEARCH_WITHIN_NAV_DESCRIPTOR + "=" + searchWithinDimValId.value;
			url +=  "&" + EndecaSearch.ENDECA_PARAM_NAV_DESCRIPTORS + "=" + searchWithinDimValId.value;
		}
		else
		{
			url +=  "&" + EndecaSearch.ENDECA_PARAM_NAV_DESCRIPTORS + "=0";
		}
		
		if (searchWithinQueryString && searchWithinQueryString.value != '' && searchWithin == 'true')
		{
			url +=	"&" + searchWithinQueryString.value;
		}
		else if (searchQueryString && searchQueryString.value != '')
		{
			url +=	"&" + searchQueryString.value;
		}
		//alert("redirect");
		//alert("url = " + url);
		EndecaSearch.redirect(url);
	} else {
		//alert("can't retrieve value");
	}
};

EndecaSearch.validateScopedSearch = function(frm, endecaSearchCategoryForm)
{
	var searchBox = frm.elements[EndecaSearch.ENDECA_ELEMENT_SEARCH_TERMS];
	var resultsPageName = frm.elements[EndecaSearch.ENDECA_ELEMENT_RESULTS_PAGE_NAME];
	var searchQueryString = frm.elements[EndecaSearch.ENDECA_ELEMENT_SEARCH_QUERYSTRING]; 
	var searchWithinQueryString = frm.elements[EndecaSearch.ENDECA_ELEMENT_SEARCH_WITHIN_QUERYSTRING];
	
	// set form variable for the scoped search 
	var scopedSearchForm = document.forms[endecaSearchCategoryForm];
	
	
	// get searchWithin value; this may be taken from a radio button group or from a 
	// hidden text field.  Value must be 'true' for searchWithin to engeage.
	var searchWithinElement = frm.elements[EndecaSearch.ENDECA_ELEMENT_SEARCH_WITHIN];
	
	var searchWithin = searchWithinElement ? EndecaSearch.getSearchWithinValue(searchWithinElement) : 'false';
		
	if (searchBox && resultsPageName && EndecaSearch.trim(searchBox.value) != '')
	{
		
		if (scopedSearchForm 
			&& scopedSearchForm.elements[EndecaSearch.ENDECA_ELEMENT_SCOPED_SEARCH_DIMVALID] 
			&& searchWithin != 'true')
		{
			var scopedSearchListBox = scopedSearchForm.elements[EndecaSearch.ENDECA_ELEMENT_SCOPED_SEARCH_DIMVALID];
			var scopedSearchResultsPageName = scopedSearchForm.elements[EndecaSearch.ENDECA_ELEMENT_RESULTS_PAGE_NAME];
			
			if (scopedSearchListBox.options[scopedSearchListBox.selectedIndex].value != '0' 
				&& scopedSearchResultsPageName 
				&& scopedSearchResultsPageName.value != '')
			{
				var url = scopedSearchResultsPageName.value + "?";
			}
			else
			{
				var url = resultsPageName.value + "?";
			}
			
			
			
			url +=  EndecaSearch.ENDECA_PARAM_SEARCH_WITHIN_NAV_DESCRIPTOR + "=" + scopedSearchListBox.options[scopedSearchListBox.selectedIndex].value;
			url +=  "&" + EndecaSearch.ENDECA_PARAM_NAV_DESCRIPTORS + "=" + scopedSearchListBox.options[scopedSearchListBox.selectedIndex].value;
		}
		else
		{
			var url = resultsPageName.value + "?" + EndecaSearch.ENDECA_PARAM_NAV_DESCRIPTORS + "=0";
		}
		
		url += "&"  + EndecaSearch.ENDECA_PARAM_SEARCH_TERMS + "=" + EndecaSearch.trim(searchBox.value);
		
		if (searchWithinQueryString && searchWithinQueryString.value != '' && searchWithin == 'true')
		{
			url +=	"&" + searchWithinQueryString.value;
		}
		else if (searchQueryString && searchQueryString.value != '')
		{
			url +=	"&" + searchQueryString.value;
		}
		
		EndecaSearch.redirect(url);
	}
};

EndecaSearch.validateScopedSearchWithin = function(frm, endecaSearchCategoryForm, radioObj)
{
	var searchWithin = EndecaSearch.getRadioValue(radioObj);
	var searchCategoryForm = document.forms[endecaSearchCategoryForm];
	
	if (searchCategoryForm && searchCategoryForm.elements[EndecaSearch.ENDECA_ELEMENT_SCOPED_SEARCH_DIMVALID])
	{
		var endecaSearchCategoryListBox = searchCategoryForm.elements[EndecaSearch.ENDECA_ELEMENT_SCOPED_SEARCH_DIMVALID];
		
		if (searchWithin == 'true')
		{
			searchCategoryForm.reset();
			endecaSearchCategoryListBox.disabled = true;
		}
		else
		{
			searchCategoryForm.reset();
			endecaSearchCategoryListBox.disabled = false;
		}
	}
	
	
};

EndecaSearch.getSearchWithinValue = function(searchWithinElement)
{
	var searchWithin = "false";
	
	
	if (searchWithinElement)
	{
		if (searchWithinElement.length && searchWithinElement[0].type == 'radio')
		{
			searchWithin = EndecaSearch.getRadioValue(searchWithinElement);
		}
		else
		{
			searchWithin = searchWithinElement.value;
		}
	}
	
	return searchWithin;
};


// return the value of the radio button that is checked
// return an empty string if none are checked, or
// there are no radio buttons
EndecaSearch.getRadioValue = function (radioObj) 
{
	if(!radioObj)
	{
		return "";
	}
	var radioLength = radioObj.length;
	if(radioLength == undefined)
	{
		if(radioObj.checked)
		{
			return radioObj.value;
		}
		else
		{
			return "";
		}
	}
	
	for(var i = 0; i < radioLength; i++) 
	{
		if(radioObj[i].checked) 
		{
			return radioObj[i].value;
		}
	}

	return "";
};

EndecaSearch.trim = function(str)
{
	return str.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
};

EndecaSearch.compareRecords = function(frm)
{
	var numChecked = 0;
	var recordsSelected = [];
	var recordComparePageName = frm.elements[EndecaSearch.ENDECA_ELEMENT_RECORD_COMPARE_PAGE];
	
	if (recordComparePageName) 
	{
		for(var i = 0; i < frm.length; i++) {
			var checkbox = frm[i];
			if(checkbox.checked) {
				recordsSelected.push(checkbox.value);
			}
		}
		
		if (recordsSelected.length < 2)
		{
			alert("Please select at least 2 products to compare");
		}
		else
		{
			var url = recordComparePageName.value + "?" + EndecaSearch.ENDECA_PARAM_RECORD_SEARCH + "=";
			
			for (var i=0; i < recordsSelected.length; i++){
				url += recordsSelected[i];
				if (i != recordsSelected.length - 1)
				{
					url += "+";
				}
			}
			EndecaSearch.redirect(url);
		}
	}
	
};



