var aPS_InputTypes = Array("Countries","Cities","Accomms","Subcats","Maincats");
var aPS_HolderIds = new Array();
var aPS_HolderObject = new Array();
var aPS_InputNames = new Array();
var aPS_InputId = new Array();
var aPS_ActualArray = new Array();
var aPS_Checkeds = new Array();
var bPS_DoNotHideAny = false;
var aPS_ChildrenOfParents = new Array();
var aPS_Pairs = new Array();
aPS_Pairs["Countries"] = "Continents";
aPS_Pairs["Cities"] = "Countries";
aPS_Pairs["Accomms"] = "Countries";
aPS_Pairs["Subcats"] = "Maincats";

function PS_Init(sCountriesId, sCitiesId, sAccommsId, sSubcatsId, sMaincatsId, sCountriesInputName, sCitiesInputName, sAccommsInputName, sSubcatsInputName, sMaincatsInputName) {
	for(var i in aPS_InputTypes) {
		eval("aPS_HolderIds[\"" + aPS_InputTypes[i] + "\"] = s" + aPS_InputTypes[i] + "Id;");
		eval("aPS_HolderObject[\"" + aPS_InputTypes[i] + "\"] = document.getElementById('" + aPS_HolderIds[aPS_InputTypes[i]] + "');");
		eval("aPS_InputNames[\"" + aPS_InputTypes[i] + "\"] = s" + aPS_InputTypes[i] + "InputName;");
		
		aPS_ActualArray[aPS_InputTypes[i]] = new Array();
		try {
			eval("var aArray = aPS_" + aPS_InputTypes[i] + ";");
		}
		catch(err) {
			var aArray = new Array();
		}
		if(aArray && aArray.length) for(var j in aArray) aPS_ActualArray[aPS_InputTypes[i]][j] = aArray[j];
		
		aPS_Checkeds[aPS_InputTypes[i]] = new Array();
		if(aPS_InputTypes[i]!="Maincats") {
			try {
				eval("var aArray = aPS_Checked" + aPS_InputTypes[i] + " ? aPS_Checked" + aPS_InputTypes[i] + " : new Array();");
			}
			catch(err) {
				var aArray = new Array();
			}
			if(aArray && aArray.length) for(var j in aArray) aPS_Checkeds[aPS_InputTypes[i]][j] = aArray[j];
		}
		
		if(!PS_FillHolder(aPS_InputTypes[i])) {
			setTimeout("PS_FillHolder('" + aPS_InputTypes[i] + "')", 100);
		}
	}
	
	for(var i in aPS_InputTypes) {
		PS_OnClickHandler(aPS_InputTypes[i]);
		break;
	}

}
function PS_FillHolder(sItemName) {
	if(sItemName=="Maincats") return true;
	if(!aPS_HolderObject[sItemName]) {
		setTimeout("PS_FillHolder('"+sItemName+"')",100);
		return false;
	}
	PS_ClearAllFromHolder(aPS_HolderObject[sItemName]);
	var aArray = aPS_ActualArray[sItemName];
	try {
		eval("var aArray_ordered = aPS_" + sItemName + "_ordered;");
	}
	catch(err) {
		var aArray_ordered = new Array();
	}
	var sMarginLeft = "";
	var sPreParam = "";
	var bIsPair = false;
	if(aPS_Pairs[sItemName]) {
		try {
			eval("bIsPair = aPS_" + aPS_Pairs[sItemName] + " && aPS_" + aPS_Pairs[sItemName] + ".length>1 ? true : false");
		}
		catch(err) {
			bIsPair = false;
		}
	}
	if(bIsPair) {
		sMarginLeft = "20px";
	}
	var iParentId = "";
	var oInputParent = null;
	var bAllChecked = false;
	var oPreDivRow = null;
	var iIndex = 0;
	//aPS_ChildrenOfParents = new Array();
	var aChildren = new Array();
	for(var i in aArray_ordered) {
		iId = aArray_ordered[i];
		if(!aArray[iId]) continue;
		if(bIsPair) {
			eval("pair = aPS_" + sItemName + "By" + aPS_Pairs[sItemName] + ";");
			if(sPreParam!=pair[iId]) {
				if(!aPS_ChildrenOfParents[sItemName]) aPS_ChildrenOfParents[sItemName] = new Array();
				if(oInputParent) aPS_ChildrenOfParents[sItemName][oInputParent.id] = aChildren;
				aChildren = new Array();
				oDivRow = document.createElement("DIV");
				oDivRow.className = "psdivtitle";
				iIndex++;
				if(iIndex==1) oDivRow.style.paddingTop = "1px";
				oDivInput = document.createElement("DIV");
				oDivInput.className = "psdivtitleinput";
				if(bAllChecked && oInputParent) {
					oInputParent.checked = true;
					if(oPreDivRow) oPreDivRow.className = "psdivtitle psdivtitlesel";
				}
				bAllChecked = true;
				eval("iParentId = aPS_" + sItemName + "By" + aPS_Pairs[sItemName] + "["+iId+"];");
				oInputParent = PS_CreateCheckBox(PS_CreateParentName(aPS_InputNames[sItemName]), iParentId, false);
				eval("oInputParent.onclick = function() { PS_SelectSubgroup('"+sItemName+"',"+iParentId+"); };");
				oDivInput.appendChild(oInputParent);
				eval("oLabel = PS_CreateLabel(aPS_" + aPS_Pairs[sItemName] + "[" + iParentId + "], oInputParent.id);");
				oLabel.style.fontWeight = "bold";
				oDivLabel = document.createElement("DIV");
				oDivLabel.className = "psdivtitlelabel";
				oDivLabel.appendChild(oLabel);
				oDivRow.appendChild(oDivInput);
				oDivRow.appendChild(oDivLabel);
				aPS_HolderObject[sItemName].appendChild(oDivRow);
				sPreParam = pair[iId];
				oPreDivRow = oDivRow;
			}
		}
		oDivRow = document.createElement("DIV");
		oDivRow.className = "psdivrow" + (aPS_Checkeds[sItemName][iId] ? " psdivrowsel" : "");
		oDivRow.onmouseover = function() {
			if(this.children && this.children[0].children && this.children[0].children[0].id) {
				var oInput = document.getElementById(this.children[0].children[0].id);
				this.className = "psdivrow psdivrowover" + (oInput.checked ? "sel" : "");
			}
		};
		oDivRow.onmouseout = function() {
			if(this.children && this.children[0].children && this.children[0].children[0].id) {
				var oInput = document.getElementById(this.children[0].children[0].id);
				this.className = "psdivrow" + (oInput.checked ? " psdivrowsel" : "");
			}
		};
		var sOnclick = "oDivRow.onclick = function() { ";
		sOnclick += "  if(this.children && this.children[0].children && this.children[0].children[0].id) { ";
		sOnclick += "    var oInput = document.getElementById(this.children[0].children[0].id); ";
		sOnclick += "    oInput.checked = !oInput.checked; ";
		sOnclick += "    PS_OnClickHandler('"+sItemName+"','"+iParentId+"',oInput); ";
		sOnclick += "  } ";
		sOnclick += " };";
		eval(sOnclick);
		oDivInput = document.createElement("DIV");
		oDivInput.className = "psdivrowinput";
		oInput = PS_CreateCheckBox(aPS_InputNames[sItemName], iId, aPS_Checkeds[sItemName][iId] ? true : false);
		aChildren[aChildren.length] = oInput.id;
		oInput.style.visibility = "hidden";
		if(!aPS_Checkeds[sItemName][iId]) bAllChecked = false; 
		if(sMarginLeft) oInput.style.marginLeft = sMarginLeft;
		//eval("oInput.onclick = function() { PS_OnClickHandler('"+sItemName+"','"+iParentId+"',this); };");
		oDivInput.appendChild(oInput);
		oDivLabel = document.createElement("DIV");
		oDivLabel.className = "psdivrowlabel";
		oLabel = PS_CreateLabel(aArray[iId], oInput.id)
		oDivLabel.appendChild(oLabel);
		oDivRow.appendChild(oDivInput);
		oDivRow.appendChild(oDivLabel);
		aPS_HolderObject[sItemName].appendChild(oDivRow);
	}
	
	if(bIsPair && oInputParent) { // a cikluson kívülre maradt
		if(bAllChecked) {
			oInputParent.checked = true;
			if(oPreDivRow) oPreDivRow.className = "psdivtitle psdivtitlesel";
		}
		if(!aPS_ChildrenOfParents[sItemName]) aPS_ChildrenOfParents[sItemName] = new Array();
		aPS_ChildrenOfParents[sItemName][oInputParent.id] = aChildren;
	}
	
	if(typeof oDivRow != "undefined" && oDivRow) { // az utolsónál lenullázom a margin bottom-t
		oDivRow.style.marginBottom = "0px";
	}
	return true;
}
function PS_ClearAllFromHolder(oHolder) {
	for(var i=oHolder.children.length-1; i>=0; i--) {
		oHolder.removeChild(oHolder.children[i]);
	}
}
function PS_Reset(sItemName, bDoNotCallOnClickHandler) {
	if(!aPS_HolderObject[sItemName]) return;
	var a = document.getElementsByTagName("INPUT");
	if(a && a.length) for(var i=0; i<a.length; i++) {
		if(a[i] && a[i].type=="checkbox" && a[i].id) {
			eval("p = a[i].id.search(/^" + aPS_InputNames[sItemName].replace(/\[/g,"_").replace(/\]/g,"_") + "\_/);");
			if(p!=-1 && a[i].checked) {
				a[i].checked = false;
				if(document.all) a[i].removeAttribute('checked');
				if(a[i].id.search(/\^*._parent.*$/)==-1) {
					a[i].parentNode.parentNode.className = "psdivrow";
				}
				else {
					a[i].parentNode.parentNode.className = "psdivtitle";
				} 
			}
		}
	}
	//if(!bDoNotCallOnClickHandler) PS_OnClickHandler("");
	if(!bDoNotCallOnClickHandler) PS_OnClickHandler(sItemName);
}
function PS_ResetPanel(sItemName, oAhref) {
	PS_Reset(sItemName);
	bCallHandler = false;
	for(var i in aPS_InputTypes) {
		if(sItemName==aPS_InputTypes[i]) bCallHandler = true;
		if(bCallHandler) {
			PS_OnClickHandler(aPS_InputTypes[i]);
			break;
		}
	}
	if(oAhref) oAhref.blur();
	return false;
}
function PS_ResetAll() {
	PS_HideAll();
	for(var i in aPS_InputTypes) PS_Reset(aPS_InputTypes[i]);
	for(var i in aPS_InputTypes) { PS_OnClickHandler(aPS_InputTypes[i]); break; }
	return false;
}
function PS_SelectSubgroup(sItemName, iParentId) {
	if(!sItemName || !iParentId) return;
	bPS_DoNotHideAny = true;
	eval("var aArray = aPS_" + sItemName + "By" + aPS_Pairs[sItemName] + ";");
	var aIds = new Array();
	if(aArray && aArray.length) for(var i in aArray) {
		if(aArray[i]==iParentId) aIds[aIds.length] = i;
	}
	var oParentSelector = document.getElementById(aPS_InputId[PS_CreateParentName(aPS_InputNames[sItemName])][iParentId]);
	var bChecked = oParentSelector && oParentSelector.checked ? true : false;
	if(aIds && aIds.length) for(var i in aIds) {
		oInput = document.getElementById(aPS_InputId[aPS_InputNames[sItemName]][aIds[i]]);
		if(oInput) {
			oInput.checked = bChecked;
			if(oInput && oInput.parentNode && oInput.parentNode.parentNode) {
				oInput.parentNode.parentNode.className = "psdivrow" + (oInput.checked ? " psdivrowsel" : "");
			}
		}
	}
	bCallHandler = false;
	for(var i in aPS_InputTypes) {
		if(sItemName==aPS_InputTypes[i]) bCallHandler = true;
		if(bCallHandler) {
			PS_OnClickHandler(aPS_InputTypes[i]);
			break;
		}
	}
	oParentSelector.checked = bChecked;
	oParentSelector.parentNode.parentNode.className = "psdivtitle" + (bChecked ? " psdivtitlesel" : ""); 
}
function PS_CreateCheckBox(sName, sValue, bChecked) {
	var oInput = document.createElement("INPUT");
	oInput.type = "checkbox";
	oInput.name = sName + "[" + sValue + "]";
	oInput.value = sValue;
	oInput.checked = bChecked;
	if(!aPS_InputId[sName]) aPS_InputId[sName] = new Array();
	aPS_InputId[sName][sValue] = sName.replace(/\[/g,"_").replace(/\]/g,"_") + "_" + sValue;
	oInput.id = aPS_InputId[sName][sValue];
	return oInput;
}
function PS_CreateLabel(sText, sRelatedDhtmlId) {
	var oLabel = document.createElement("LABEL");
	oLabel.innerHTML = sText;
	oLabel.setAttribute("for", sRelatedDhtmlId);
	oLabel.onclick = function() {bPS_DoNotHideAny = true; };
	oLabel.id = sRelatedDhtmlId + "_label";
	return oLabel;
}
function PS_OnClickHandler(sItemName, iParentId, oCheckbox) {
	bPS_DoNotHideAny = true;
	if(iParentId && iParentId>"" && aPS_InputId[PS_CreateParentName(aPS_InputNames[sItemName])]) {
		var oParentSelector = document.getElementById(aPS_InputId[PS_CreateParentName(aPS_InputNames[sItemName])][iParentId]);
		var bAllChecked = true;
		eval("var aArray = aPS_" + sItemName + "By" + aPS_Pairs[sItemName] + ";");
		if(aArray && aArray.length) for(var i in aArray) {
			if(aArray[i]==iParentId) {
				oInput = document.getElementById(aPS_InputId[aPS_InputNames[sItemName]][i]);
				if(oInput && !oInput.checked) {
					bAllChecked = false;
					break;
				}
			}
		}
		if(oParentSelector) {
			oParentSelector.checked = bAllChecked;
			oParentSelector.parentNode.parentNode.className = "psdivtitle" + (bAllChecked ? " psdivtitlesel" : "");
		}
	}
	if(oCheckbox && oCheckbox.parentNode && oCheckbox.parentNode.parentNode) {
		oCheckbox.parentNode.parentNode.className = "psdivrow" + (oCheckbox.checked ? " psdivrowsel" : "");
	}
	
	var aValidIds = new Array();
	var bDoReset = false;
	for(var i in aPS_InputTypes) {
		aPS_Checkeds[aPS_InputTypes[i]] = new Array();
		if(aPS_InputTypes[i]!="Maincats") {
			for(var j in aPS_ActualArray[aPS_InputTypes[i]]) {
				if(aPS_InputId[aPS_InputNames[aPS_InputTypes[i]]] && aPS_InputId[aPS_InputNames[aPS_InputTypes[i]]][j]) {
					var oInput = document.getElementById(aPS_InputId[aPS_InputNames[aPS_InputTypes[i]]][j]);
					if(oInput && oInput.checked) {
						aPS_Checkeds[aPS_InputTypes[i]][j] = true;
					}
				}
			}
		}
		aPS_ActualArray[aPS_InputTypes[i]] = new Array();
		aValidIds[aPS_InputTypes[i]] = new Array();
	}
	var aSelectedIds = new Array();
	for(var i in aPS_InputTypes) aSelectedIds[aPS_InputTypes[i]] = new Array();
	var a = document.getElementsByTagName("INPUT");
	if(a && a.length) for(var i in a) {
		oInput = a[i];
		if(oInput && oInput.type=="checkbox" && oInput.id) {
			for(var i in aPS_InputTypes) {
				eval("var p = oInput.id.search(/^" + aPS_InputNames[aPS_InputTypes[i]].replace(/\[/g,"_").replace(/\]/g,"_") + "*./);");
				if(p!=-1 && oInput.checked) {
					aSelectedIds[aPS_InputTypes[i]][aSelectedIds[aPS_InputTypes[i]].length] = oInput.value;
				}
			}
		}
	}
	
	var bUseFilter = false;
	var sPrevInputType = "";
	var aMatrix = null;
	for(var i in aPS_InputTypes) {
		try {
			eval("var aArray = aPS_" + aPS_InputTypes[i] + ";");
		}
		catch(err) {
			var aArray = new Array();
		}
		if(bUseFilter) {
			try {
				eval("aMatrix = aPS_" + aPS_InputTypes[i] + sPrevInputType + ";");
			}
			catch(err) {
				aMatrix = new Array();
			}
			if(aMatrix && aMatrix.length) for(var iSqlId in aMatrix) for(var iParentSqlId in aMatrix[iSqlId]) {
				if(PS_IsIn(aValidIds[sPrevInputType], iParentSqlId) && (aSelectedIds[sPrevInputType].length==0 || PS_IsIn(aSelectedIds[sPrevInputType], iParentSqlId))) {
					aValidIds[aPS_InputTypes[i]][aValidIds[aPS_InputTypes[i]].length] = iSqlId;
				}
			}
		}
		else {
			for(var j in aArray) {
				if(aPS_InputNames[aPS_InputTypes[i]] && aPS_InputId[aPS_InputNames[aPS_InputTypes[i]]] && aPS_InputId[aPS_InputNames[aPS_InputTypes[i]]][j]) {
					oInput = document.getElementById(aPS_InputId[aPS_InputNames[aPS_InputTypes[i]]][j]);
					if(oInput) { // checkbox exists; it is visible
						aValidIds[aPS_InputTypes[i]][aValidIds[aPS_InputTypes[i]].length] = j;
						aPS_ActualArray[aPS_InputTypes[i]][j] = aArray[j];
					}
				}
			}
		}
		if(sItemName==aPS_InputTypes[i]) bUseFilter = true;
		sPrevInputType = aPS_InputTypes[i];
	}

	bNextCan = sItemName ? false : true;
	bFill = false;
	for(var i in aPS_InputTypes) {
		try {
			eval("var aArray = aPS_" + aPS_InputTypes[i] + ";");
		}
		catch(err) {
			var aArray = new Array();
		}
		for(var sId in aArray) {
			if(sItemName && sItemName==aPS_InputTypes[i]) {
				bNextCan = true;
			}
			else if(bNextCan) {
				if(PS_IsIn(aValidIds[aPS_InputTypes[i]],sId)) {
					aPS_ActualArray[aPS_InputTypes[i]][sId] = aArray[sId];
				}
			}
		}
		if(sItemName==aPS_InputTypes[i]) bFill = true;
		else if(bFill) PS_FillHolder(aPS_InputTypes[i]);
	}
	
	var aTexts = new Array();
	for(var i in aPS_InputTypes) {
		aTexts[aPS_InputTypes[i]] = "";
		if(aPS_Checkeds[aPS_InputTypes[i]] && aPS_Checkeds[aPS_InputTypes[i]].length) {
			for(var j in aPS_Checkeds[aPS_InputTypes[i]]) {
				var oInput = document.getElementById(aPS_InputId[aPS_InputNames[aPS_InputTypes[i]]][j]);
				if(oInput) {
					oInput.checked = true;
					sText = "";
					eval("sText = aPS_" + aPS_InputTypes[i] + "[" + oInput.value + "];");
					if(sText) {
						sText = sText.replace(/Danubius Health Spa Resort/, "DHSR");
						sText = sText.replace(/[\*]{2,999}.*$/i, "");
						aTexts[aPS_InputTypes[i]] += aTexts[aPS_InputTypes[i]] ? ", " : "";
						aTexts[aPS_InputTypes[i]] += sText;
					}
				}
			}
		}
	}
	for(var i in aPS_InputTypes) {
		if(aPS_InputTypes[i]=="Maincats") continue;
		if(!aTexts[aPS_InputTypes[i]] && typeof sPS_TextNone != "undefined") aTexts[aPS_InputTypes[i]] = sPS_TextNone;
		else if(aTexts[aPS_InputTypes[i]].length>50) {
			aTexts[aPS_InputTypes[i]] = aTexts[aPS_InputTypes[i]].substr(0,50) + "...";
		}
		var oSelector = document.getElementById("selector" + aPS_InputTypes[i]);
		if(oSelector) {
			iNumOfCheckboxes = 0;
			bSelectAll = true;
			var a = document.getElementsByTagName("INPUT");
			if(a && a.length) for(var j in a) {
				oInput = a[j];
				if(oInput && oInput.type=="checkbox" && oInput.id) {
					eval("var p = oInput.id.search(/^" + aPS_InputNames[aPS_InputTypes[i]].replace(/\[/g,"_").replace(/\]/g,"_") + "*/);");
					if(p!=-1) {
						iNumOfCheckboxes++;
						if(!oInput.checked) bSelectAll = false;
					}
				}
			}
			oSelector.innerHTML = bSelectAll && iNumOfCheckboxes>1 ? sPS_TextAll : aTexts[aPS_InputTypes[i]];
		}
	}
	
	// verify states of all 'parent checkboxes' in current panel
	if(aPS_ChildrenOfParents[sItemName]) {
		for(var sParentId in aPS_ChildrenOfParents[sItemName]) {
			oParentInput = document.getElementById(sParentId);
			if(!oParentInput) continue;
			bSelectAll = true;
			if(aPS_ChildrenOfParents[sItemName][sParentId]) for(var j in aPS_ChildrenOfParents[sItemName][sParentId]) {
				oInput = document.getElementById(aPS_ChildrenOfParents[sItemName][sParentId][j]);
				if(oInput && !oInput.checked) { bSelectAll = false; }
			}
			oParentInput.checked = bSelectAll;
			if(oParentInput.parentNode && oParentInput.parentNode.parentNode) {
				oParentInput.parentNode.parentNode.className = "psdivtitle" + (bSelectAll ? " psdivtitlesel" : "");
			}
		}
	}
}
function PS_CheckPanel(sItemName, oAhref) {
	bPS_DoNotHideAny = true;
	var a = document.getElementsByTagName("INPUT");
	if(a && a.length) for(var i in a) {
		oInput = a[i];
		if(oInput && oInput.type=="checkbox" && oInput.id) {
			eval("var p = oInput.id.search(/^" + aPS_InputNames[sItemName].replace(/\[/g,"_").replace(/\]/g,"_") + "*/);");
			if(p!=-1) {
				oInput.checked = true;
				if(oInput.id.search(/\^*._parent.*$/)==-1) {
					oInput.parentNode.parentNode.className = "psdivrow psdivrowsel";
				}
				else {
					oInput.parentNode.parentNode.className = "psdivtitle psdivtitlesel";
				}
			}
		}
	}
	PS_OnClickHandler(sItemName);
	if(oAhref) oAhref.blur();
	return false;
}
function PS_IsIn(aArray, sElement) {
  for(var i=0; i<aArray.length; i++) {
    if(aArray[i]==sElement) return true;
  }
  return false;
}
function PS_ShowHide(sPanelId) {
	bPS_DoNotHideAny = true;
	for(var i in aPS_InputTypes) {
		sId = "ps" + aPS_InputTypes[i].toLowerCase();
		oPanel = document.getElementById(sId);
		if(oPanel) {
			if(sId==sPanelId) oPanel.style.display = oPanel.style.display=="block" ? "none" : "block";
			else oPanel.style.display = "none";
		}
	}
	return false;
}
function PS_HideAll() {
	if(bPS_DoNotHideAny) { bPS_DoNotHideAny = false; return false; }
	for(var i in aPS_InputTypes) {
		sId = "ps" + aPS_InputTypes[i].toLowerCase();
		oPanel = document.getElementById(sId);
		if(oPanel && oPanel.style.display=="block") oPanel.style.display = "none";
	}
	return false;
}
function PS_HideAllModified() {
	bPS_DoNotHideAny = false;
	return PS_HideAll();
}
function PS_StartSearch(oAhref, sFormId) {
	PS_HideAll();
	oAhref.blur();
	var oForm = document.getElementById(sFormId);
	if(oForm) oForm.submit();
	return false;
}
function PS_CreateParentName(sInputName) {
	return sInputName.replace(/^\_ufh/, "_ufh_parent");
}

