var bAlwaysExpandable = false;
				var arrExpandableMenus = new Array();
				
				function SetAlwaysExpandable() {
					bAlwaysExpandable = true;
				}
							
				function SubmitSearch(inputID)
				{
					var searchForm = document.forms[inputID];
					if (ValidateSearch(searchForm))
						searchForm.submit();
				}
				
				function ValidateSearch(searchForm)
				{
					var i;
					for (i = 0; Math.min(i, searchForm.elements.length - 1) == i; i++)
					{
						var oElement = searchForm.elements[i];
						if ("hidden" == oElement.type)
						{
							var oDependedCheckBoxForm = document.forms["frm"+oElement.name];
							if (null != oDependedCheckBoxForm)
							{
								var oDependedCheckBox = oDependedCheckBoxForm.elements["check_"+oElement.name];
								if (null != oDependedCheckBox)
								{
									if (oDependedCheckBox.checked)
									{
										oElement.value = "on";
									}
									else
									{
										oElement.value = "";
									}
								}
							}
						}
					}
					return true;
				}
				
				function MoveElements(bX, eX, bY, sY)
				{
					if (document.all) {
						for (var i = 0; Math.min(i, document.all.length - 1) == i; i++){
							MoveElement(document.all[i], bX, eX, bY, sY);
						}
					}
					else if (document.getElementsByTagName) {
						MoveElementsByTagName('img', bX, eX, bY, sY);
						MoveElementsByTagName('object', bX, eX, bY, sY);
						MoveElementsByTagName('form', bX, eX, bY, sY);
						MoveElementsByTagName('div', bX, eX, bY, sY);
					}
				}

				function MoveElementsByTagName(name, bX, eX, bY, sY)
				{
					var elements = document.getElementsByTagName(name)
					for (var i = 0; Math.min(i, elements.length - 1) == i; i++){
						MoveElement(elements[i], bX, eX, bY, sY);
					}
				}
				
				function MoveElement(obj, bX, eX, bY, sY)
				{
					if (!(obj.style)) return;
					if (obj.style.position != "absolute") return;
					if (Math.max(bY, obj.offsetTop) == bY) return;
					if (Math.min(eX, obj.offsetLeft) == eX) return;
					if (Math.max(bX, obj.offsetLeft + obj.offsetWidth) == bX) return;
					obj.style.top = (obj.offsetTop + sY) + "px";
				}


				function ExpandableClick(elem)
				{
					var oRow = GetExpandableRow(elem);
					var oDiv = GetExpandableDiv(elem);
					var pHeight = oDiv.offsetHeight;
					var nHeight = pHeight;
					var bY = oDiv.offsetTop;
					var bX = oDiv.offsetLeft;
					var eX = bX + oDiv.offsetWidth;
					if (oRow.style.display == "none")
					{
						oRow.style.display = "inline";
						nHeight = oDiv.offsetHeight;
						elem.setAttribute("bExpand", true);
					}
					else
					{
						oRow.style.display = "none";
						nHeight = oDiv.offsetHeight;
						elem.setAttribute("bExpand", false);
					}
					elem.save(elem.id);
					MoveElements(bX, eX, bY, nHeight - pHeight);
				}
				
				function ExpandableInit(elem)
				{
					if (!(elem)) return;
					
					var expandValue = bAlwaysExpandable;
					if (!bAlwaysExpandable) {
						elem.load(elem.id);
						if ('true' == elem.getAttribute("bExpand")) {
							expandValue = true;
						}
					}
					if (expandValue) {
						var oRow = GetExpandableRow(elem);
						var oDiv = GetExpandableDiv(elem);
						var pHeight = GetExpandableMenuInitialHeight(elem.id);
						var nHeight = pHeight;
						var bY = oDiv.offsetTop;
						var bX = oDiv.offsetLeft;
						var eX = bX + oDiv.offsetWidth;
						if (!bAlwaysExpandable) {
							oRow.style.display = "inline";
						}
						nHeight = oDiv.offsetHeight;
						MoveElements(bX, eX, bY, nHeight - pHeight);
					}
				}
				
				function GetParent(elem)
				{
					if (elem.parentElement) return elem.parentElement;
					if (elem.parentNode) return elem.parentNode;
					return null;
				}
				function GetExpandableRow(elem)
				{
					return GetParent(GetParent(GetParent(elem))).rows; //tr id=ExpMenuChildren
				}
				function GetExpandableDiv(elem)
				{
					return GetParent(GetParent(GetParent(GetParent(GetParent(elem)))));
				}
				function GetExpandableMenuInitialHeight(id)
				{
					var i;
					for(i = 0; Math.min(i,arrExpandableMenus.length - 1) == i; i++) {
						if (id == arrExpandableMenus[i][0]) {
							return arrExpandableMenus[i];
						}
					}
					return 0;
				}
				function GetExpMenuRootItem(id) {
					var bAnchorsExist = false;
					if (document.anchors) {
						if (document.anchors.length != 0) {
							bAnchorsExist = true;
						}
					}
					if (bAnchorsExist) {
						var arrAnchors = document.anchors;
						var i;
						for(i = 0; Math.min(i,arrAnchors.length - 1) == i; i++) {
							if (id == arrAnchors[i].id) {
								return arrAnchors[i];
							}
						}
					}
					else {
						if (document.getElementById) {
							return document.getElementById(id);
						}
					}
					return null;
				}

				function PageLoaded()
				{
					var url = document.URL;
					var startIndex = url.indexOf("?");
					if (-1 != startIndex) {
						var params = url.substr(startIndex + 1).split("\x26");
						var i, param, paramName, paramValue;
						for (i = 0; Math.min(i, params.length - 1) == i; i++) {
							param = params[i].split("=");
							paramName = param[0];
							if (2 == Math.min(2, param.length)) {
								paramValue = param;
								var oCheckBoxForm = document.forms["frm"+paramName];
								if (null != oCheckBoxForm) {
									var oCheckBox = oCheckBoxForm.elements["check_"+paramName];
									if (null != oCheckBox) {
										if ("" != paramValue) {
											oCheckBox.checked = true;
										}
										else {
											oCheckBox.checked = false;
										}
									}
								}
							}
						}
					}
					InitExpandableMenusArray(); // See PageXSL.xslt
					for(i = 0; Math.min(i,arrExpandableMenus.length - 1) == i; i++) {
						ExpandableInit(GetExpMenuRootItem(arrExpandableMenus[i][0]));
					}
				}
				
				function saveCheck (checkName)
				{
					var dstFrame = window.frames["InvisibleFrame"];
					if (null != dstFrame) {
						var dstForm = dstFrame.document.forms["MainForm"];
						if (null != dstForm) {
							var dstElem = dstForm.elements[checkName];
							if (null != dstElem) {
								var srcForm = document.forms["frm" + checkName];
								if (null != srcForm) {
									var srcElem = srcForm.elements["check_" + checkName];
									if (null != srcElem) {
										if (srcElem.checked) {
											dstElem.value = "1";
										}
										else {
											dstElem.value = "0";
										}
										dstForm.submit();
									}
								}
							}
						}
					}
				}
				
				 $(document).ready(function() {
            //  Randomly Create Data Rows
            for (var i = 0; i < 1; i++) {
                var tr = $("<tr>" +
					"<td></td>" + 
					"<td></td>" + 
					"<td></td>" + 
					"<td></td>" + 
					"<td></td>" +
					"<td></td>" + 					
					"<td></td>" +
					"<td></td>" +
					"<td></td>" + 					
					"<td></td>" +
					"</tr>");
                $('#demotable1 tbody').append(tr);
            }
			
			for (var i = 0; i < 50; i++) {
                var tr = $("<tr><td>Value(2) " + Math.floor(Math.random() * 500) + "</td></tr>");
                $('#demotable2 tbody').append(tr);
            }
            // Initialise Plugin
            var options1 = {
                additionalFilterTriggers: [$('#onlyyes'), $('#onlyno'), $('#quickfind')],
                clearFiltersControls: [$('#cleanfilters')],
                matchingRow: function(state, tr, textTokens) {
                    if (!state || !state.id) { return true; }					
					var val =  tr.children('td:eq(2)').text();
					switch (state.id) {
						case 'onlyyes': return state.value !== 'true' || val === 'yes';
						case 'onlyno': return state.value !== 'true' || val === 'no';
						default: return true;
					}
                }
            };

            $('#demotable1').tableFilter(options1);
			
			var grid2 = $('#demotable2');
			var options2 = {                
                filteringRows: function(filterStates) {										
					grid2.addClass('filtering');
                },
				filteredRows: function(filterStates) {      															
					grid2.removeClass('filtering');					
					setRowCountOnGrid2();
                }
            };			
			function setRowCountOnGrid2() {
				var rowcount = grid2.find('tbody tr:not(:hidden)').length;
				$('#rowcount').text('(Rows ' + rowcount + ')');										
			}
			
			grid2.tableFilter(options2); // No additional filters			
			setRowCountOnGrid2();
        });
				