FilterHandler = { } var currQueryString = Common.getQueryString(); var LEFT_PAREN = "(", RIGHT_PAREN = ")", COMMA = ","; /************** * The removeRangeFilter function removes the Nf and eT (Tab selection) parameter from the current querystring */ FilterHandler.removeRangeFilter = function() { var newString = FilterHandler.removeQueryParameter(currQueryString, "Nf"); newString = FilterHandler.removeQueryParameter(newString, "eT"); return newString; } /*********** * The removeQueryParameter function removes a specific parameter from a querystring * and returns the resulting new querystring */ FilterHandler.removeQueryParameter = function(querystring, param) { var qString = (querystring == "" ? currQueryString : querystring); var tmpString; var start = qString.indexOf(param + '='); if (start > -1) { var end = qString.indexOf('&', start); if (end > -1) { tmpString = qString.substring(0, start-1) + qString.substring(end); } else { tmpString = qString.substring(0, start-1); } return tmpString; } else { return qString; } } FilterHandler.addQueryParameter = function (querystring, param, value) { var qString = (querystring == "" ? currQueryString : querystring); var tmpString; var start = qString.indexOf(param + '='); if (start > -1) { var end = qString.indexOf('&', start); if (end > -1) { tmpString = qString.substring(0, start-1) + qString.substring(end); } else { tmpString = qString.substring(0, start-1); } return (tmpString == "" ? "?" : "&") + tmpString + param + "=" + value; } else { return (qString == "" ? "?" : "&") + qString + param + "=" + value; } } /************** * The setRangeFilter function adds or appends the Nf parameter to the current querystring * It takes the field name, range operator, and one or two numbers space separated */ FilterHandler.setRangeFilter = function(field, operator, number) { var newQuerystring; if (currQueryString.indexOf('Nf=') > -1) { newQueryString = FilterHandler.appendRangeFilter(field, operator, number); } else { newQueryString = FilterHandler.addRangeFilter(field, operator, number); } return newQueryString; } /************** * The updateRangeFilter function adds/replaces the Nf parameter in the current querystring * It takes the field name, range operator, and one or two numbers space separated */ FilterHandler.updateRangeFilter = function(field, operator, number) { var newQueryString = FilterHandler.removeRangeFilter(); var separator = (newQueryString == '' ? '?' : '&'); newQueryString = newQueryString + separator + "Nf=" + field + "|" + operator + " " + number; return newQueryString; } /************* * The addRangeFilter function adds a new Nf parameter to the current querystring */ FilterHandler.addRangeFilter = function(field, operator, number) { var separator = (currQueryString == '' ? '?' : '&'); var newQueryString = currQueryString + separator + "Nf=" + field + "|" + operator + " " + number; return newQueryString; } /************ * The addRangeFilter function appends to the existing Nf parameter in the current querystring */ FilterHandler.appendRangeFilter = function(field, operator, number) { var currFilter, newFilter; var start = currQueryString.indexOf('Nf=') + 3; var end = currQueryString.indexOf('&', start); if (end == -1) { end = currQueryString.length; } currFilter = currQueryString.substring(start, end); newFilter = currFilter + "|" + field + "|" + operator + " " + number; var newQueryString = currQueryString.substring(1, start) + newFilter + currQueryString.substring(end); return newQueryString; } /******* * The updateItemFilter function adds a single filter parameter to the querystring using the specified field, operator */ FilterHandler.updateRecordFilter = function(field, operand, value, querystring) { var newFilter = FilterHandler.addRecordFilter(field, operand, value, querystring); var newString = FilterHandler.removeQueryParameter(querystring, "Nr"); var separator = (newString == '' ? '?' : '&'); return newString + separator + "Nr=" + newFilter; } /******* * The addItemFilter function adds a single filter parameter to the querystring using the specified field, operator * If no querystring parameter is passed in, it will use the current page querystring */ FilterHandler.addRecordFilter = function(field, operand, value, querystring) { var newFilter = ""; var filter = field + ":" + value; var recordFilter = Common.getKeyValue((querystring == "" ? currQueryString : querystring), "Nr"); // If a filter already exists, add the new value to existing string. Otherwise, set the value. if (!FilterHandler.isFilterApplied(filter)) { if (recordFilter != null ? recordFilter !="" : false) { newFilter = recordFilter.substring(0,recordFilter.lastIndexOf(RIGHT_PAREN)) + COMMA + filter + RIGHT_PAREN; } else { newFilter = operand + LEFT_PAREN + filter + RIGHT_PAREN; } } else { newFilter = recordFilter; } return newFilter; } /***** * The removeItemFilter function removes the specified filterkey (value) and ensures syntax is valid */ FilterHandler.removeRecordFilter = function(value) { var recordFilter = Common.getKeyValue(currQueryString, "Nr"); if (recordFilter != "") { var newFilter = recordFilter.replace(value, ""); newFilter = newFilter.replace("AND()", ""); newFilter = newFilter.replace(",)", ")"); newFilter = newFilter.replace("(,", "("); return newFilter; } else { return ""; } } /******* * The isFilterApplied function returns a boolean indicating if the specified filter is already applied */ FilterHandler.isFilterApplied = function(filter) { var recordFilter = Common.getKeyValue(currQueryString, "Nr"); return (recordFilter.indexOf(filter) > -1 ? true : false); }