
function getSearchFormId() {
  var searchFormTop = xGetElementById('searchForm_top');
  return (searchFormTop != null) ? 'searchForm_top' : 'searchForm_main';
}

function showAdvancedPanel() {
  	xShow(advancedPanel);
	xStyle('display', 'block', advancedPanel);
	advancedPanelToggler.value = 'yes';
	setAdvSearchLinksLabel('Simple Search');
	imgOptions.src=imgOptions.src.replace('bt_more_options','bt_less_options');
}

function hideAdvancedPanel() {
  	xHide(advancedPanel);
	xStyle('display', 'none', advancedPanel);
	advancedPanelToggler.value = 'no';
	setAdvSearchLinksLabel('Advanced Search');
	imgOptions.src=imgOptions.src.replace('bt_less_options','bt_more_options');
}

function showForumIdsPanel(lngCode) {
	if (lngCode != 'de') {
	  	xHide(forumIdsDePanel);
		xStyle('display', 'none', forumIdsDePanel);
	  	xShow(forumIdsEnPanel);
		xStyle('display', 'block', forumIdsEnPanel);
    } else {
	  	xHide(forumIdsEnPanel);
		xStyle('display', 'none', forumIdsEnPanel);
	  	xShow(forumIdsDePanel);
		xStyle('display', 'block', forumIdsDePanel);
 	}
}

function setAdvSearchLinksLabel(lbl) {
	if (advSearchLinkMain == null) {
		advSearchLinkTop.innerHTML = lbl;
		if (advSearchLinkBottom != null) {
   		advSearchLinkBottom.innerHTML = lbl;
	  }  
	} else {
		advSearchLinkMain.innerHTML = lbl;
	}
}

function setAdvancedPanelFlagToTrue() {
	advancedPanelFlag = true;
	xSetCookie("nsAdvancedPanelFlag", "yes", new Date(new Date().getTime() + (365*24*60*60*1000)));
}

function setAdvancedPanelFlagToFalse() {
	advancedPanelFlag = false;
	xSetCookie("nsAdvancedPanelFlag", "no", new Date(new Date().getTime() + (365*24*60*60*1000)));
}

function isAdvancedPanelFlagPresent() {
  return advancedPanelFlag;
}

function advancedPanelShouldBeShown() {
  return isAdvancedPanelFlagPresent() && searchContext.value == 'forum messages';
}

function refreshAdvancedPanelVisibility() {
  if (advancedPanelShouldBeShown()) {  	
    showAdvancedPanel();
  } else {
    hideAdvancedPanel();
  }
}

function setSearchLanguageCookie() {
	xSetCookie("nsSearchLanguageValue", searchLanguage.value, new Date(new Date().getTime() + (365*24*60*60*1000)));
}

function setSearchLanguageToValue(val) {
	if (val == null || val == "") {
		return;
	}
	searchLanguage.value = val; 
}

/* ---------------------------------------- */

function searchContextChanged() {
  refreshAdvancedPanelVisibility();
}

function searchLanguageChanged() {
  setSearchLanguageCookie();
  toggleForumIdsIfNeccessary();  	
}

function toggleAdvancedPanel() {
  if (searchContext.value != 'forum messages') {
      searchContext.value = 'forum messages';
      setAdvancedPanelFlagToTrue();
  } else {
      if (isAdvancedPanelFlagPresent()) {
          setAdvancedPanelFlagToFalse();
    	} else {
          setAdvancedPanelFlagToTrue();
    	}
  }
  refreshAdvancedPanelVisibility();
}

function toggleForumIdsIfNeccessary() {
	if (advancedPanelFlag) {
		showForumIdsPanel(searchLanguage.value);
		synchroMultiselect2ForumIds(getForumIdsMultiSelect());
	}
}

function synchroMultiselect2ForumIds(multiSelect) {
	var selectedIds = '';
	for (var i = 1; i < multiSelect.options.length; i++) {
		if (multiSelect.options[i].selected) {
			selectedIds += multiSelect.options[i].value + ",";
		}
	}
	if (selectedIds != '') {
		selectedIds = selectedIds.substring(0, selectedIds.length - 1);
	}
	forumIds.value = selectedIds;
}

function synchroForumIds2Multiselect() {
	var ids = forumIds.value;
	if (ids == null || ids == '') {
		return;
	}
	ids = ids.trim().split(",");
	var multiSelect = getForumIdsMultiSelect() 
	for (var i = 0; i < multiSelect.options.length; i++) {
		if (contains(multiSelect.options[i].value, ids)) {
			multiSelect.options[i].selected = true;
		}
	}
}

function getForumIdsMultiSelect() {
	return searchLanguage.value == 'de' ? forumIdsDe : forumIdsEn; 
}

function contains(elem, list) {
 	if (list == null) {
		return;
	}
	for (var i = 0; i < list.length; i++) {
		if (list[i] == elem) {
			return true;
		}
	}
	return false;
}

/* ---------------------------------------- */

function validateForm(form) {
	var isValid = true;
	if (advancedPanelToggler.value == 'no') {
		isValid = !queryString.value.hasNullValue();
	} else {
		isValid = !queryString.value.hasNullValue() 
			|| !forumPostedOn.value.hasNullValue() 
			|| !forumPostedBy.value.hasNullValue()
			|| !forumArchived.value.hasNullValue()
			|| !forumIds.value.hasNullValue();
	}
	return isValid;
}

/* ---------------------------------------- */

var searchContext;
var searchLanguage;
var queryString;
var forumPostedOn;
var forumArchived;
var forumPostedBy;
var forumIds;
var forumIdsEn;
var forumIdsDe;
var forumIdsEnPanel;
var forumIdsDePanel;

var advancedPanel;
var advancedPanelToggler;
var advancedPanelFlag;

var advSearchLinkMain;
var advSearchLinkTop;
var advSearchLinkBottom;

var imgOptions; // 'more options' / 'less options' image

function initSearchBox() {
	// 
	imgOptions = xGetElementById('imgOptions');
	//
	searchContext = xGetElementById(getSearchFormId() + ':searchContext');
	searchLanguage = xGetElementById(getSearchFormId() + ':searchLanguage');
    queryString = xGetElementById(getSearchFormId() + ':queryString');
	forumPostedOn = xGetElementById(getSearchFormId() + ':forumPostedOn');
	forumPostedBy = xGetElementById(getSearchFormId() + ':forumPostedBy');
	forumArchived = xGetElementById(getSearchFormId() + ':forumArchived');
	forumIds = xGetElementById(getSearchFormId() + ':forumIds');
	forumIdsEn = xGetElementById('forumIdsEn');
	forumIdsDe = xGetElementById('forumIdsDe');
	forumIdsEnPanel = xGetElementById('forumIdsEnPanel');
	forumIdsDePanel = xGetElementById('forumIdsDePanel');
	//
  	advancedPanel = xGetElementById(getSearchFormId() + ':divAdvancedSearchBox');
  	advancedPanelToggler = xGetElementById(getSearchFormId() + ':advancedSearchToggler');
	//
	advSearchLinkMain = xGetElementById('advancedSearchLink_main');
	advSearchLinkTop = xGetElementById('advancedSearchLink_top');
	advSearchLinkBottom = xGetElementById('advancedSearchLink_bottom');

	if (advancedPanelToggler.value == 'yes') {
      setAdvancedPanelFlagToTrue();
	} else {
      if (xGetCookie("nsAdvancedPanelFlag") == "yes") {
          setAdvancedPanelFlagToTrue();
      } else {
          setAdvancedPanelFlagToFalse();
      }      	  
	}
	//
   	setSearchLanguageToValue(xGetCookie("nsSearchLanguageValue"));
	synchroForumIds2Multiselect();
	toggleForumIdsIfNeccessary();
	//
  	refreshAdvancedPanelVisibility();
}

xAddEventListener(window,'load',initSearchBox,false);


