
// search form tools

var defaultGeoHierarchy = '';
var nextGeoLevel = 0;

function initSearchForm()
{
	if (defaultValues['gh'].length > 0)
	{
		defaultGeoHierarchy = defaultValues['gh'][0];
		initDefaultGeoHierarchy();
	}

	if (defaultValues['th'].length > 0)
	{
		initDefaultTypeHierarchy('SBT', 0);
		initDefaultTypeHierarchy('SBT', 1);

		initDefaultTypeHierarchy('SIP', 0);
		initDefaultTypeHierarchy('SIP', 1);
	}

	if (defaultValues['fh'] != '')
	{
		loadPTHttpData(defaultValues['fh']);
	}
/*
	genBodies = document.getElementById('searchContainer');
	tabList = genBodies.childNodes;
	setDisableUnder(tabList[i], 'INPUT', false);
	setDisableUnder(tabList[i], 'SELECT', false);
*/
}

function initDefaultGeoHierarchy()
{
	selectIDList = ['SBHreg', 'SBHmreg', 'SBHlscp', 'SBHsetl'];

	levelNumber = nextGeoLevel;
	geoLevels = defaultGeoHierarchy.split('.');

	if (geoLevels.count < (levelNumber + 2))
	{
		return;
	}

	levelSelect = document.getElementById(selectIDList[levelNumber]);

	if (!levelSelect)
	{
		return;
	}

	defaultLevelHierarchy = geoLevels[0];
	for(var i = 1; i < levelNumber + 2; i++)
	{
		defaultLevelHierarchy += '.' + geoLevels[i];
	}

	numOfItems = levelSelect.options.length;

	for(var i = 0; i < numOfItems; i++)
	{
		if (defaultLevelHierarchy == levelSelect.options[i].value)
		{
			levelSelect.options[i].selected = true;
			nextGeoLevel = levelNumber + 1;

			geoItemChanged(levelSelect);
			break;
		}
	}
}

function initDefaultTypeHierarchy(typePrefix, levelNumber)
{
	var levels = ['mt', 'st']
	var selectID = typePrefix + levels[levelNumber];

	var typeSelect = document.getElementById(selectID);

	if (typeSelect)
	{
		setOptionSelection(typeSelect, false)

		var numOfDefaults = defaultValues['th'].length;
		var numOfItems = typeSelect.options.length;
		var numOfSelections = 0;

		for(var i = 0; i < numOfDefaults; i++)
		{
			var defaultParts = (defaultValues['th'][i]).split('.');
			var relevantPart = ((levelNumber == 0) ? defaultParts[0] : defaultValues['th'][i]);

			for(var j = 0; j < numOfItems; j++)
			{
				if (typeSelect.options[j].value == relevantPart)
				{
					numOfSelections++;
					typeSelect.options[j].selected = true;
					break;
				}
			}
		}

		if ((numOfSelections == 0) && (typeSelect.options.length > 0))
		{
			typeSelect.options[0].selected = true;
		}

		if (levelNumber == 0)
		{
			if (typePrefix == 'SIP')
			{
				setSubTopics(typeSelect, pSubTopics, currentPSubTopics, typePrefix + 'pt');
			}
			else
			{
				setSubTopics(typeSelect, gSubTopics, currentGSubTopics, typePrefix + 'pt');
			}
		}
	}
}

function setOptionSelection(selectObj, selectStatus)
{
	var numOfOptions = selectObj.options.length;

	for(var i = 0; i < numOfOptions; i++)
	{
		selectObj.options[i].selected = selectStatus;
	}
}

function startSearch(targetForm)
{
	genBodies = document.getElementById('genSearchBody');

	tabList = genBodies.childNodes;
	for(i = 0; i < tabList.length; i++)
	{
		if ((tabList[i].nodeName == 'DIV') && (tabList[i].className == 'tabOff'))
		{
			setDisableUnder(tabList[i], 'INPUT', true);
			setDisableUnder(tabList[i], 'SELECT', true);
		}
		else
		{
			if ((tabList[i].nodeName == 'DIV') && (tabList[i].className == 'tabOn'))
			{
				targetForm.agenst.value = i;
			}
		}
	}

	geoBodies = document.getElementById('geoSearchBody');

	tabList = geoBodies.childNodes;
	for(i = 0; i < tabList.length; i++)
	{
		if ((tabList[i].nodeName == 'DIV') && (tabList[i].className == 'tabOff'))
		{
			setDisableUnder(tabList[i], 'INPUT', true);
			setDisableUnder(tabList[i], 'SELECT', true);
		}
		else
		{
			if ((tabList[i].nodeName == 'DIV') && (tabList[i].className == 'tabOn'))
			{
				targetForm.ageost.value = i;
			}
		}
	}

	itemList = document.getElementsByName('fh');
	numOfItems = itemList.length;
	for(i = 0; i < numOfItems; i++)
	{
		if ((itemList[i].form.name == targetForm.name) && (!itemList[i].disabled))
		{
			setOptionSelection(itemList[i], true);
		}
	}

	var dateStart = targetForm.ps;
	var dateEnd = targetForm.pe;

	if (dateStart.disabled == false)
	{
		var datePattern = /^20[0-9][0-9]\-[0-9][0-9]\-[0-9][0-9]$/;

		var sdVal = dateStart.value;
		var edVal = dateEnd.value;

		if ((!datePattern.test(sdVal)) || (!datePattern.test(edVal)) || (sdVal > edVal))
		{
			alert(globalItems['dateerror']);
			dateStart.select();
			return false;
		}
	}

	var geoContentFilter = targetForm.smMod[0];

	if (geoContentFilter.disabled == false)
	{
		if ((geoContentFilter.checked && (geoContentFilter.value == 0)) || (!geoContentFilter.checked && (geoContentFilter.value == 1)))
		{
			targetForm.sm.value = 0;
		}
	}

	targetForm.submit();
	return true;
}

function setDisableUnder(containerObj, tagName, disableStatus)
{
	itemList = containerObj.getElementsByTagName(tagName);

	for(var j = 0; j < itemList.length; j++)
	{
		itemList[j].disabled = disableStatus;
	}
}

function resetSearchForm()
{
	targetForm = document.advSearchForm;

	targetForm.gn.value = '';
	targetForm.cs.value = '';

	setOptionSelection(document.getElementById('SBTmt'), false)
	removeOptionsAfter(document.getElementById('SBTst'), 0);
	removeOptionsAfter(document.getElementById('SBTpt'), -1);

	setOptionSelection(document.getElementById('SIPmt'), false)
	removeOptionsAfter(document.getElementById('SIPst'), 0);
	removeOptionsAfter(document.getElementById('SIPpt'), -1);

	targetForm.ps.value = '';
	targetForm.pe.value = '';

	document.getElementById('SBHreg').selectedIndex = 0;
	removeOptionsAfter(document.getElementById('SBHmreg'), 0);
	removeOptionsAfter(document.getElementById('SBHlscp'), 0);
	removeOptionsAfter(document.getElementById('SBHsetl'), 0);

	targetForm.cid.selectedIndex = 0;

	targetForm.ssn.value = '';
	removeOptionsAfter(document.getElementById('SBSsn'), 0);
}

function setSubTopics(mainTopicsSelect, subTopicList, arrayToInit, ptSelectObjID)
{
	showSubTopics = false;

	if (mainTopicsSelect.selectedIndex > 0)				// 0: all topics - no subtopics
	{
		numOfOptions = mainTopicsSelect.options.length;

		doubleSelected = false;
		for(i = mainTopicsSelect.selectedIndex + 1; i < numOfOptions; i++)
		{
			if (mainTopicsSelect.options[i].selected == true)
			{
				doubleSelected = true;
				break;
			}
		}

		if (!doubleSelected)
		{
			showSubTopics = true;
		}
	}

	subTopicsSelect = mainTopicsSelect.nextSibling;
	removeOptionsAfter(subTopicsSelect, 0);

	if (showSubTopics)
	{
		currentSubTopics = new Array();

		hValue = mainTopicsSelect.options[mainTopicsSelect.selectedIndex].value;
		optionList = subTopicList[hValue];

		for(i = 0; i < optionList.length; i++)
		{
			temp = optionList[i].split('|');
			subTopicsSelect.options[i + 1] = new Option(temp[2], temp[1]);
			arrayToInit[i] = temp[0];
		}

		subTopicsSelect.options[0].selected = true;
	}

	removeOptionsAfter(document.getElementById(ptSelectObjID), -1);
}

function initPTSelect(prefix, mainTopicsArray, subTopicsArray)
{
	var mainTypes = document.getElementById(prefix + 'mt');
	var subTypes = document.getElementById(prefix + 'st');

	var paramList = '';
	var targetSelect = null;
	var idList = null;

	if (subTypes.selectedIndex > 0)
	{
		targetSelect = subTypes;
		idList = subTopicsArray;
	}
	else
	{
		if (mainTypes.selectedIndex > 0)
		{
			targetSelect = mainTypes;
			idList = mainTopicsArray;
		}
	}

	if (targetSelect == null)
	{
		alert(globalItems['notypes']);
		return false;
	}

	for(i = targetSelect.selectedIndex; i < targetSelect.length; i++)
	{
		if (targetSelect.options[i].selected)
		{
			paramList += '&typeid=' + idList[i - 1];
		}
	}

	openWindow('/ptselect?parentstore=' + prefix + "pt" + paramList + '&hierarchy=true', 600, 400);
}

function removePTOption(ptObjID)
{
	ptSelectObj = document.getElementById(ptObjID);
	
	if (ptSelectObj.selectedIndex > -1)
	{
		ptSelectObj.options[ptSelectObj.selectedIndex] = null;
	}
}

function removeOptionsAfter(selectObj, index)
{
	numOfOptions = selectObj.options.length;

	for(i = numOfOptions - 1; i > index ; i--)
	{
		selectObj.options[i] = null;
	}
}

function geoItemChanged(sourceSelect)
{
	var selectContainer = sourceSelect.parentNode;
	var geoSelectList = selectContainer.childNodes;
	var numOfSelects = geoSelectList.length;

	var foundAt = -1;
	for(var i = 0; i < numOfSelects; i++)
	{
		if (foundAt > -1)
		{
			removeOptionsAfter(geoSelectList[i], 0);
		}
		else
		{
			if (geoSelectList[i] == sourceSelect)
			{
				foundAt = i;
			}
		}
	}

	selectGeoObjIDToUpdate = geoSelectList[foundAt + 1].id;

	if (sourceSelect.selectedIndex > 0)				// 0: all items - no subitems
	{
		gh = sourceSelect.options[sourceSelect.selectedIndex].value;
		loadGeoHttpData('/geodata', gh, 1);
	}
}

function initGeoNameSelect(targetForm, silent)
{
	searchString = targetForm.ssn.value;

	if (searchString.length > 1)
	{
		loadGeoHttpData('/geodata', searchString, 0);
	}
	else
	{
		if (!silent)
		{
			alert(globalItems['minlength']);
		}
	}
}

// search http communication

function loadGeoHttpData(url, param, mode)
{
	var pars;
	if (mode == 1)
	{
		pars = "gh=" + param;
	}
	else
	{
		param = escape(param);
		selectGeoObjIDToUpdate = 'SBSsn';
		pars = "gn=" + param;
	}

	var myAjax = new Ajax.Request( url, 
										{
											method: "get",
											parameters: pars,
											onComplete: processGeoHttpResponse
										}
								);
}

function processGeoHttpResponse(originalRequest) 
{
	resultText = originalRequest.responseText;

	if (resultText.substring(0, 2) == "++")
	{
		items = resultText.substring(2, resultText.length).split('||');
		numOfItems = items.length - 1;

		geoSelectObj = document.getElementById(selectGeoObjIDToUpdate);

		removeOptionsAfter(geoSelectObj, 0)

		for(i = 0; i < numOfItems; i++)
		{
			data = items[i].split('|');
			geoSelectObj.options[i + 1] = new Option(data[1], data[0]);
		}

		if (selectGeoObjIDToUpdate == 'SBSsn')
		{
			if (geoSelectObj.options.length > 0)
			{
				geoSelectObj.selectedIndex = 1;
			}
		}
	}

	if (defaultGeoHierarchy != '')
	{
		initDefaultGeoHierarchy();
	}
}


function loadPTHttpData(paramString)
{
	var myAjax = new Ajax.Request( '/ptdata', 
										{
											method: "get",
											parameters: paramString,
											onComplete: processPTHttpResponse
										}
								);
}

function processPTHttpResponse(originalRequest) 
{
	resultText = originalRequest.responseText;

	if (resultText.substring(0, 2) == "++")
	{
		items = resultText.substring(2, resultText.length).split('||');
		numOfItems = items.length - 1;

		ptA = document.getElementById('SIPpt');
		ptB = document.getElementById('SBTpt');

		removeOptionsAfter(ptA, -1);
		removeOptionsAfter(ptB, -1);

		for(i = 0; i < numOfItems; i++)
		{
			data = items[i].split('|');
			ptA.options[i] = new Option(data[1], data[0]);
			ptB.options[i] = new Option(data[1], data[0]);
		}
	}
}
