//-------------------------------------------------
// script for common functions used in the Search controls
// There are 3 search user controls:
//
//	User Search
//	Session Search
//	Vendor Search
//-------------------------------------------------

/// common search control names

var divAdvancedSearchName = 'divAdvancedSearch';
var hiddenBasicSearch = 'searchControl_hiddenBasicSearch';
var hiddenAdvancedSearch = 'searchControl_hiddenAdvancedSearch';
var hiddenTextRequiredFieldMessage = 'searchControl_hiddenMissingRequiredTextField';
var hiddenMissingSearchCriteriaMessage = 'searchControl_hiddenMissingCheckBoxField';
var lblErrorName = 'searchControl_lblError';
var linkName = 'searchControl_linkBasicSearch';
var optSearchAllValue = 'optAllCriteria';
var optSearchOnlyValue = 'optRestrictedCriteria';
var optSearchAllName = 'searchControl_optAllCriteria';
var optSearchOnlyName = 'searchControl_optRestrictedCriteria';
var txtSearchTextName = 'searchControl_txtSearchText';
var btnSearchName = 'searchControl_btnSearch';
var listTopicsName = 'searchControl_listTopics';
var txtShowBasicSearch = 'searchControl_txtShowBasicSearch';
var txtSearchName = 'txtSearch';
//var lnkSearchName = 'lnkSearch';
var btnSearchButtonName = 'btnSearch';
var hidSearchName = 'hidSearch';

var ENTER_KEY = 13;
var CRITERIA_CHECK_NAME_PREFIX = 'chkCriteria';
var QUERYSTRING_SEARCH_TEXT = 'searchText';


// Advanced search Div toggles between show and hide
function ShowAdvancedSearch()
{
	var VISIBLE = 'visible';
	var NONE = 'none';
	var HIDDEN = 'hidden';
	
	try
	{
	    var divAdvancedElement = getElementByPartialName(divAdvancedSearchName);
        var linkElement = getElementByPartialName(linkName);
		if (divAdvancedElement.style.visibility == VISIBLE)
		{
		    var hiddenAdvancedElement = getElementByPartialName(hiddenAdvancedSearch);
			linkElement.innerHTML = hiddenAdvancedElement.value;
			// hide table
			divAdvancedElement.style.display = NONE;
			divAdvancedElement.style.visibility = HIDDEN;
			
			// make sure the search all option button is selected and the criteria is unchecked
		    var searchAllElement = getElementByPartialName(optSearchAllName);
			searchAllElement.checked = true;
			enableAdvanceSearchControls(true);
		}
		else
		{
		    var hiddenBasicElement = getElementByPartialName(hiddenBasicSearch);
			linkElement.innerHTML = hiddenBasicElement.value;
			// show table
			divAdvancedElement.style.display = '';
			divAdvancedElement.style.visibility = VISIBLE;
		
		}
	}
	catch (exception)
	{
		alert(exception.message);
	}
}


function setAdvanceSearchControls()
{
    var element = getElementByPartialName(optSearchAllName);
    if (element && element.checked)
	{
		enableAdvanceSearchControls(true);
	}
	else
	{
		enableAdvanceSearchControls(false);
		ShowAdvancedSearch();
	}
	//This addresses AB162. Set back to Basic search
	element = getElementByPartialName(txtShowBasicSearch);
	if (element && element.value == "1")
	{
    	ShowAdvancedSearch();			
	}
	
}


function AdvancedSearchOptionButtonSelected(optionButton)
{
	try
	{
		if (optionButton.value == optSearchAllValue)
		{
			enableAdvanceSearchControls(true);		
		}
		else if (optionButton.value == optSearchOnlyValue)
		{
			enableAdvanceSearchControls(false);	
		}
	}
	catch (exception)
	{
		alert(exception.message);		
	}

}


function SetFocusInEmailSearchBox()
{
    var element = getElementByPartialName(txtSearchTextName);
	if (element)
	{
	    element.focus();
	}
}

// attach this
// onkeypress="return noenter()"
// when you do not want enter to trigger a form submit
function noenter() 
{
  return !(window.event && window.event.keyCode == ENTER_KEY); 
}

// attach this function to the search text box so when the user presses the enter key
// the search happens
// onkeypress="return ifEnterDoSearch()"
function ifEnterDoSearch() 
{
	if (window.event && window.event.keyCode == ENTER_KEY)
	{
    	var searchButton = getElementByPartialName(btnSearchName);
    	if (searchButton)
    	{
		    searchButton.focus();
		    searchButton.click();
		}
		return false;
	}
	else
		return true;
}

// check for required fields
function ValidateUserSearchRequiredFields()
{
	var optOnlyThese;

	try
	{
		var optSearchAll = getElementByPartialName(optSearchAllName);
		var searchTextBox = getElementByPartialName(txtSearchTextName);
		var lblError = getElementByPartialName(lblErrorName);
		var textRequiredElement;
		
		lblError.innerHTML = '';

		// if option button "search all" is selected, then text is required
		if (optSearchAll.checked)
		{
			// may need to trim before this
			if (searchTextBox.value.length == 0)
			{
				// display error message
				textRequiredElement = getElementByPartialName(hiddenTextRequiredFieldMessage);
				lblError.innerHTML = textRequiredElement.value;
				return false;
			}
		}
		else  // if option button "only these" is selected
		{

			// if at least on check box is checked, text is required
			if (atLeastOneSearchCriteriaIsChecked())
			{
				// text is required
				if (searchTextBox.value.length == 0)
				{
					// display error message
					textRequiredElement = getElementByPartialName(hiddenTextRequiredFieldMessage);
					lblError.innerHTML = textRequiredElement.value;
					return false;
				}
			}
		
			// if no topics are selected
			if (!filterIsSelected())
			{
				// if no search criteria is checked	
				if (!atLeastOneSearchCriteriaIsChecked())
				{
					// display error message
					var missingCriteriaElement = getElementByPartialName(hiddenMissingSearchCriteriaMessage);
					lblError.innerHTML = missingCriteriaElement.value;
					return false;
				}

				// text is required
				if (searchTextBox.value.length == 0)
				{
					// display error message
					textRequiredElement = getElementByPartialName(hiddenTextRequiredFieldMessage);
					lblError.innerHTML = textRequiredElement.value;
					return false;
				}

			}
			
		}
		
	}
	catch (exception)
	{
		alert(exception.message);		
	}	
	
	return true;
	
}


// enable or disable the advance search criteria controls
function enableAdvanceSearchControls(disabled)
{
	try
	{
	    var searchAllElement = getElementByPartialName(optSearchAllName);
	    var searchOnlyElement = getElementByPartialName(optSearchOnlyName);
		if (disabled)
		{
			clearAdvancedSearchRestrictedCriteriaControls();
			
			optSearchAllName.checked = true;
			optSearchOnlyName.checked = false;
		}
		else
		{
			optSearchAllName.checked = false;
			optSearchOnlyName.checked = true;		
		}
		
		enableAdvancedSearchRestrictedCriteriaControls(disabled);
	}
	catch (exception)
	{
		alert(exception.message);	
	}
}




//------------------------------------------------------------------
// User Search Specific functions with different control names
//------------------------------------------------------------------

// return true if at least one search criteria check box is checked
function atLeastOneSearchCriteriaIsChecked()
{
	var isChecked = false;
	var frm = document.forms[0];
	
	if (frm.length)
	{
        for (var i=0; i < frm.length ; i++)
        {
            if (frm.elements[i].type == 'checkbox' && frm.elements[i].id.indexOf(CRITERIA_CHECK_NAME_PREFIX) != -1)
            {
				// if at least on check box is checked , return true
				if ( frm.elements[i].checked )
				{
					isChecked = true;
					break;
				}
			}
		}
	}

	return isChecked;
}


// for user search , the list of topics is the filter
function filterIsSelected()
{
	var listTopics = getElementByPartialName(listTopicsName);
			
	// if no topics are selected
	if (listTopics.selectedIndex == -1)
		return false;
	else
		return true;
	
}

// clear (uncheck) check boxes, clear list selection
function clearAdvancedSearchRestrictedCriteriaControls()
{
	var frm = document.forms[0];
	
	if (frm.length)
	{
        for (var i=0; i < frm.length ; i++)
        {
            if (frm.elements[i].type == 'checkbox' && frm.elements[i].id.indexOf(CRITERIA_CHECK_NAME_PREFIX) != -1)
            {
				frm.elements[i].checked = false;
			}
		}
	}
	
	var listTopics = getElementByPartialName(listTopicsName);
	listTopics.value = '';
	listTopics.selectedIndex = -1;

}

function enableAdvancedSearchRestrictedCriteriaControls(disabled)
{
	var frm = document.forms[0];

	if (frm.length)
	{
        for (var i=0; i < frm.length ; i++)
        {
            if (frm.elements[i].type == 'checkbox' && frm.elements[i].id.indexOf(CRITERIA_CHECK_NAME_PREFIX) != -1)
            {
				frm.elements[i].disabled = disabled;
			}
		}
	}

	var listTopics = getElementByPartialName(listTopicsName);
	listTopics.disabled = disabled;
}

//function SearchFromTopBar()
//{
//    var txtSearch = getElementByPartialName(txtSearchName);
//    if (txtSearch)
//    {
//        if (txtSearch.value.length > 0)
//        {
//            var lnkSearch = getElementByPartialName(lnkSearchName);
//            if (lnkSearch)
//            {
//                if (lnkSearch.href.length > 0)
//                {
//                    window.location.href = appendToQuerystring(lnkSearch.href, QUERYSTRING_SEARCH_TEXT, txtSearch.value);
//                }
//            }
//        }
//    }
//    
//    return false;
//}

function SearchFromTopBar()
{
    var txtSearch = getElementByPartialName(txtSearchName);
    if (txtSearch)
    {
        if (txtSearch.value.length > 0)
        {
            var btnSearch = getElementByPartialName(btnSearchButtonName);
            if (btnSearch)
            {
                var hidSearch = getElementByPartialName(hidSearchName);
                if (hidSearch && (hidSearch.value.length > 0))
                {
                    window.location.href = appendToQuerystring(hidSearch.value, QUERYSTRING_SEARCH_TEXT, txtSearch.value);
                }
            }
        }
    }
    
    return false;
}

function SearchUsingQueryString(queryString)
{
    if (queryString.length > 0)
    {
        var txtSearchText = getElementByPartialName(txtSearchTextName);
        if (txtSearchText)
        {
            txtSearchText.value = queryString;
            
            var btnSearch = getElementByPartialName(btnSearchName);
            if (btnSearch)
            {
                btnSearch.focus();
                btnSearch.click();
            }
        }
    }
    
    return false;
}