var levelListContainerId;
var savedSearchListContainerId;
var optionSpecificLevelsRadioId;
var optionSavedSearchRadioId;
var optionAllMembersRadioId;
var savedSearchListId;
var defaultTabContainerId;
var mainContainerId = 'preferencesHolder';
var searchOptionsObject, browsingOptionsObject;
var advancedSearchRadioOptionId, simpleSearchRadioOptionId;

function initializeSearchOptions(searchOptionsContainerId, enableAdvancedSearchCheckboxId, selectSearchFieldsLinkId, searchFieldsContainerId, searchFieldsHiddenId, searchOptionsValidatorId, searchFieldsAllOptionId, searchFieldsSpecificOptionId, browsingOptionsContainerId, enableQuickBrowsingCheckboxId, browsingFieldsContainerId, browsingFieldsHiddenId, browsingOptionsValidatorId)
{
  searchOptionsObject = new Object();
  searchOptionsObject.container = document.getElementById(searchOptionsContainerId);
  searchOptionsObject.checkbox = document.getElementById(enableAdvancedSearchCheckboxId);
  searchOptionsObject.link = document.getElementById(selectSearchFieldsLinkId);
  searchOptionsObject.fieldsContainer = document.getElementById(searchFieldsContainerId);
  searchOptionsObject.hidden = document.getElementById(searchFieldsHiddenId);
  searchOptionsObject.searchFieldsAllOption = document.getElementById(searchFieldsAllOptionId);
  searchOptionsObject.searchFieldsSpecificOption = document.getElementById(searchFieldsSpecificOptionId);
  searchOptionsObject.validator = document.getElementById(searchOptionsValidatorId);
    
  browsingOptionsObject = new Object();
  browsingOptionsObject.container = document.getElementById(browsingOptionsContainerId);
  browsingOptionsObject.checkbox = document.getElementById(enableQuickBrowsingCheckboxId);
  browsingOptionsObject.fieldsContainer = document.getElementById(browsingFieldsContainerId);
  browsingOptionsObject.hidden = document.getElementById(browsingFieldsHiddenId);
  browsingOptionsObject.validator = document.getElementById(browsingOptionsValidatorId);
}
function refreshFieldsList(hiddenId)
{
  var ids = document.getElementById(hiddenId).value.split(',');
  var titles = getFieldsTitles(ids);
  
  if (hiddenId == searchOptionsObject.hidden.id)
  {
    searchOptionsObject.fieldsContainer.innerHTML = titles;
  }
  else if (hiddenId == browsingOptionsObject.hidden.id)
  {
    browsingOptionsObject.fieldsContainer.innerHTML = titles;
  }
}
function getFieldsTitles(idsArray)
{
  var result = '';
  
  for (var i = 0; i < idsArray.length; i++)
  {
    for (var j = 0; j < allFields.length; j++)
    {
      if (idsArray[i] == allFields[j][0])
      {
        result += allFields[j][1] + '<br/>';
      }
    }
  }
  
  return result;
}
function adjustSearchOptionsControls()
{
  searchOptionsObject.container.style.display = (searchOptionsObject.checkbox.checked) ? '' : 'none';
  searchOptionsObject.link.style.display = (searchOptionsObject.searchFieldsSpecificOption.checked) ? '' : 'none';
  searchOptionsObject.fieldsContainer.style.display = (searchOptionsObject.searchFieldsSpecificOption.checked) ? '' : 'none';
  ValidatorValidate(searchOptionsObject.validator);
  
  var defaultTabContainer = document.getElementById(defaultTabContainerId);
  var selects = defaultTabContainer.getElementsByTagName('INPUT');
  var labels = defaultTabContainer.getElementsByTagName('LABEL');
  var disableAdvSearch = !searchOptionsObject.checkbox.checked;
		
  for (var i = 0; i < selects.length; i++)
  {
    if (selects[i].value == '0')
    {
	  if (disableAdvSearch)
	  {
	    selects[i].checked = true;
	  }
    } 
	else if (selects[i].value == '1')
	{
      selects[i].disabled = disableAdvSearch;
      labels[i].className = disableAdvSearch ? 'disabled' : '#000000';
	  
	    if (disableAdvSearch)
	    {
	      selects[i].checked = false;
	    }      
    }
  }
}
function ValidateValidators()
{
  ValidatorValidate(searchOptionsObject.validator);
  ValidatorValidate(browsingOptionsObject.validator);
}
function adjustBrowsingOptionsControls()
{
  browsingOptionsObject.container.style.display = (browsingOptionsObject.checkbox.checked) ? '' : 'none';
  ValidatorValidate(browsingOptionsObject.validator);
}
function validateSavedSearchSelected(source, args)
{
  var optionSavedSearchRadio = document.getElementById(optionSavedSearchRadioId);
  var savedSearchList = document.getElementById(savedSearchListId);
  args.IsValid = !optionSavedSearchRadio.checked || savedSearchList.value != 0;
}
function validateSearchOptions(source, args)
{
  args.IsValid = !searchOptionsObject.checkbox.checked || !searchOptionsObject.searchFieldsSpecificOption.checked || searchOptionsObject.hidden.value.length > 0;
}
function validateMembersToIncludeSelected(source, args)
{
    var allRadio = document.getElementById(optionAllMembersRadioId);
    var levelsRadio = document.getElementById(optionSpecificLevelsRadioId);
    var searchedRadio = document.getElementById(optionSavedSearchRadioId);
    
    if ((allRadio && allRadio.checked) ||
        (levelsRadio && levelsRadio.checked) ||
        (searchedRadio && searchedRadio.checked))
    {
        args.IsValid = true;
    }
    else
    {    
        args.IsValid = false
    }
}
function validateBrowsingOptions(source, args)
{
  args.IsValid = !browsingOptionsObject.checkbox.checked || browsingOptionsObject.hidden.value.length > 0;
}
function adjustLevelListVisibility()
{
  var optionSpecificLevelsRadio = document.getElementById(optionSpecificLevelsRadioId);
  var levelListContainer = document.getElementById(levelListContainerId);
  levelListContainer.style.display = (optionSpecificLevelsRadio.checked) ? 'block' : 'none';
}
function adjustSavedSearchListVisibility()
{
  var optionSavedSearchRadio = document.getElementById(optionSavedSearchRadioId);
  var savedSearchListContainer = document.getElementById(savedSearchListContainerId);
  
  if (savedSearchListContainer)
  { 
    savedSearchListContainer.style.display = (optionSavedSearchRadio.checked) ? 'block' : 'none';
  }
}

function validateWholePage(src, args)
{
  validateStateChanged(args, mainContainerId);
}

function validateStateChanged(args, containerId)
{
  var state = '';
  var control = document.getElementById(containerId);
  
  if (!control)
  {
    return;
  }
  
  var inputs = control.getElementsByTagName('INPUT');
  
  for (var i = 0; i < inputs.length; i++)
  {
    var input = inputs[i];
    
    if ((input.type == 'checkbox' || input.type == 'radio') && input.checked)
    {
      state += input.value;
    }
    else if (input.type == 'text' || input.type == 'hidden')
    {
      state += input.value;    
    }
  }
  
  var textAreas = control.getElementsByTagName('TEXTAREA');
  
  for (var i = 0; i < textAreas.length; i++)
  {
     state += textAreas[i].value;
  }

  var selects = control.getElementsByTagName('SELECT');
    
  for (var i = 0; i < selects.length; i++)
  {
     state += selects[i].selectedIndex;
  }
  
  DataChangeWatcher.changeValidatorCustom(containerId, state, args);
}
function validateHeaderLength(sender, args)
{
  args.IsValid = args.Value.length < 50;
}
function widthValidate(sender, args)
{
  if (document.getElementById(sender.controltovalidate))
  {
    args.IsValid = /^\d*$/.test(args.Value) && args.Value > 0;
  }
  else
  {
    args.IsValid = true;
  }
}
function setContainerAvalability(checkboxId, containerId)
{
  var container = document.getElementById(containerId);
  var checkbox = document.getElementById(checkboxId);
  
  if (!container || !checkbox)
  {
    return;
  }
  
  var inputs = container.getElementsByTagName('input');
  var selects = container.getElementsByTagName('select');
  var i;  
  
  if (checkbox.checked)
  {
    container.className = '';
    setDisabledTo(false, inputs);
    
    for(var i = 0; i < selects.length; i++)
    {
      if (selects[i].getAttribute('disabledBySelectorAbove', 0) != 'true')
      {
        selects[i].disabled = false;
      }    
    }
  }
  else
  {
    container.className = 'disabled';  
    setDisabledTo(true, inputs);    
    setDisabledTo(true, selects);        
  }
}
function setDisabledTo(value, collection)
{
  for(var i = 0; i < collection.length; i++)
  {
    collection[i].disabled = value;
  }
}
if(typeof(Sys) !== "undefined")
  Sys.Application.notifyScriptLoaded();