function dspFilter_FillDimension(xRS, xCFRS, oTable, sDropDownFunction, sWPR, bVertical, sToolTip, sWPQ) {
	var bHidden = false, bLocked = false, oRowDim=null, oRowMember=null, oNodes,oOption,oCell,s,sCaption,sUniqueName,aDimensions = null,aSelectedMembers = null;	
	oNodes = xRS.selectNodes("/DSPWebPart/Dimensions/Dimension[@Type!='2' and @Type!='4']");
	if (oNodes.length > 0) {
		aDimensions = new Array(oNodes.length);
		aSelectedMembers = new Array(oNodes.length);
		for (var iCnt=0; iCnt < oNodes.length; iCnt++) {
			sCaption = oNodes[iCnt].getAttribute("Caption");
			var arr = sCaption.split(":");
			if (arr.length == 3)
				sCaption = arr[0];
			
			bHidden = (oNodes[iCnt].getAttribute("HideFilterValue") == "1");
			bLocked = (oNodes[iCnt].getAttribute("Locked") == "1");
			
			sUniqueName = oNodes[iCnt].getAttribute("UniqueName");
			aDimensions[iCnt] = sUniqueName;
			if (bVertical || oRowDim==null) {
				oRowDim = oTable.insertRow();
				oRowMember = oTable.insertRow();
			}
			oCell = oRowDim.insertCell();
			oCell.className = "ms-SPLink ms-underline dsp-filterselector-dim";
			oCell.noWrap = true;
			oCell.style.padding = "3px";
			oCell.innerText = sCaption;
			oCell.style.display = (bHidden)?"none":"block";
			
			oCell = oRowDim.insertCell();
			oCell.align="right";
			oCell.className = "ms-underline";
			oCell.style.padding = "3px";
			oCell.setAttribute("colindex", iCnt);
			oCell.setAttribute("dimid", oNodes[iCnt].getAttribute("Id"));
			if (!bLocked)
				oCell.innerHTML = "<img title='" + sToolTip + "' style='cursor:hand' src='" + sWPR + "/dsp_down.gif' tabindex='0' class='ms-HoverCellInActive' onclick=\"" + sDropDownFunction + "\" onmouseout=\"this.className='ms-HoverCellInActive'\" onmouseover=\"this.className='ms-HoverCellActiveDark'\" border='0'/>";
			oCell.style.display = (bHidden)?"none":"block";

			oCell = oRowMember.insertCell();
			oCell.noWrap = true;
			oCell.colSpan = 2;
			oCell.style.padding = "3px";
			oCell.className = "dsp-filterselector-member";
			var oSelMember = dspFilter_GetMember(xCFRS, xRS, sUniqueName, oNodes[iCnt].getAttribute("Id"));
			if (oSelMember != null) {
				oCell.innerText = oSelMember.getAttribute("Caption");
				aSelectedMembers[iCnt] = oSelMember.getAttribute("UniqueName");
			}
			else
				oCell.innerText = "";
			oCell.style.display = (bHidden)?"none":"block";

		}
	}
	return Array(aDimensions, aSelectedMembers);
}

function dspFilter_GetMember(xCFRS, xRS, sUniqueName, sId) {
	var oSelMember = null;
	if (xCFRS.xml != "") {
		var oMember = xCFRS.selectSingleNode("/ClientFilters/Filter[@Dimension='" + sUniqueName + "']");
		if(oMember != null) {
			var query = oMember.text.indexOf("'") > -1 ? '/DSPWebPart/Members/Member[@UniqueName="' + oMember.text + '"]' : "/DSPWebPart/Members/Member[@UniqueName='" + oMember.text + "']";
			oSelMember = xRS.selectSingleNode(query);
		}
	}
	if(oSelMember == null)  {
		var oNode = xRS.selectSingleNode("/DSPWebPart/Dimensions/Dimension[@Id='" + sId + "']");
		var sDef = oNode.getAttribute("DefaultMember");
		if (sDef != "")
			oSelMember = xRS.selectSingleNode("/DSPWebPart/Members/Member[@UniqueName='" + sDef + "']");
		else
			oSelMember = xRS.selectSingleNode("/DSPWebPart/Members/Member[@Dim='" + sId + "']");
	}
	return oSelMember;
}

function dspFilter_GetFilters(iIndex, aSelected, aDimensions) {
	var oXML = new ActiveXObject("Microsoft.XMLDOM");
	oXML.async = false;
	var oFilters = oXML.createElement("ClientFilters");
	oFilters.setAttribute("SelectedDimension", aDimensions[iIndex]);		
	for(var iCnt=0;iCnt<aSelected.length;iCnt++) {
		oFilter = oXML.createElement("Filter");
		oFilter.setAttribute("Dimension", aDimensions[iCnt]);
		oFilter.text = (aSelected[iCnt]==null)?"":aSelected[iCnt];
		oFilters.appendChild(oFilter);
	}
	oXML.appendChild(oFilters);
	return oXML.xml;
}

function dspFilter_GetCFXml(sQualifier) {
    return (sQualifier!="")?eval("oDSP" + sQualifier + "CFXml"):null;
}

function dspFilter_RaiseFilterChange(sQualifier) {
	eval("fDSP" + sQualifier + "RaiseFilterChangedEvent(oDSP" + sQualifier + "CFXml.XMLDocument.xml)");
}
function dspFilter_GetCurrentFilter(sQualifier) {
    var sFilter = "", oXml = dspFilter_GetCFXml(sQualifier);
    if (oXml != null) {
		var oFilters = oXml.selectNodes("/ClientFilters/Filter");
		for(var i=0;i<oFilters.length;i++) {
			sFilter += oFilters(i).getAttribute("Dimension") + "=";
		    sFilter += (oFilters(i).text==null)?"":dspUtil_EncodeUniqueName(oFilters(i).text,1) + ";";
		}		
		sFilter = sFilter.substr(0,sFilter.length-1);
	}
	return sFilter;
}

function dspFilter_SetCurrentFilter(sQualifier, aFilter, bRaiseFilterChangeEvent) {
	var oXml = dspFilter_GetCFXml(sQualifier);
	for (var i=0;i<aFilter.length;i++) {
		var oNode = oXml.selectSingleNode("/ClientFilters/Filter[@Dimension='" + aFilter[i] + "']");
		if (oNode != null) {
			oNode.text = aFilter[i].Member;
		}
	}	
	if (bRaiseFilterChangeEvent)
		dspFilter_RaiseFilterChange(sQualifier);
}

