// $Revision: 1.5 $:
var queryString = null;

function QueryHandler(queryString) {
  if(queryString != null && trim(queryString) != "") {
    this.queryString = queryString;
    if(!endsWith(this.queryString, "?") && !endsWith(this.queryString, "&")) {
      this.queryString += "&";
    }
  }
  else {
    this.queryString = "";
  }
  this.getQueryString = getQueryString;
  this.setEventHandler = setEventHandler;
  this.getEventHandler = getEventHandler;
  this.append = append;
  this.appendRaw = appendRaw;
  this.setParameter = setParameter;
  this.getParameter = getParameter;
  this.setParameterName = setParameterName;
  this.filterQueryString = filterQueryString;
}

function getQueryString() {
  return this.queryString;
}

function setEventHandler(eventHandler) {
  if(!endsWith(eventHandler, "?"))
    eventHandler += "?";
  if(this.queryString == "")
    this.queryString = eventHandler;
  else if(this.queryString.lastIndexOf("?") == -1)
    this.queryString = eventHandler + this.queryString;
  else {
    // replace current eventHandler
    var index = this.queryString.lastIndexOf("?");
    this.queryString = eventHandler + this.queryString.slice(index + 1);
  }
}

function getEventHandler() {
  return getEventHandlerFromQuery(this.queryString);
}

function append(name, value) {
  if(name == null || trim(name) == "") {
    alert("Error: < name > is NULL");
    return;
  }
  this.queryString += name + "=" + value + "&";

}

function appendRaw(queryValue) {
  if(startsWith(queryValue, "&"))
    queryValue = queryValue.slice(1);
  this.queryString += queryValue;
  if(!endsWith(this.queryString, "&"))
    this.queryString += "&";
}

/**
 * Resets the value of an existing parameter.  If parameter name doesn't exist, QUERY_STRING remains
 * unchanged.
**/
function setParameter(name, value) {
  // store current eventHandler
  var eventHandler = getEventHandlerFromQuery(this.queryString);
  // seperate eventHandler from queryString
  var temp = getQueryStringFromQuery(this.queryString);
  var tokens = getTokens(temp, "&");
  // make new queryString
  this.queryString = eventHandler == null ? "" : eventHandler + "?";
  for(var i=0; i < tokens.length; i++) {
    var token = tokens[i];
    var currentName = getFlagName(token);
    var currentValue = getFlagValue(token);
    if(currentName == name) {
     this.append(name, value);
    }
    else {
     this.append(currentName, currentValue);
    }
  }
}

/**
 * Resets the name of an existing parameter (value remains unchanged).  If parameter name doesn't exist,
 * QUERY_STRING remains unchanged.
**/
function setParameterName(oldName, newName) {
  // store current eventHandler
  var eventHandler = getEventHandlerFromQuery(this.queryString);
  // seperate eventHandler from queryString
  var temp = getQueryStringFromQuery(this.queryString);
  var tokens = getTokens(temp, "&");
  // make new queryString
  this.queryString = eventHandler == null ? "" : eventHandler + "?";
  for(var i=0; i < tokens.length; i++) {
    var token = tokens[i];
    var currentName = getFlagName(token);
    var currentValue = getFlagValue(token);
    if(currentName == oldName) {
     this.append(newName, currentValue);
    }
    else {
     this.append(currentName, currentValue);
    }
  }
}

function getParameter(name) {
  // seperate eventHandler from queryString
  var temp = getQueryStringFromQuery(this.queryString);
  var tokens = getTokens(temp, "&");
  for(var i=0; i < tokens.length; i++) {
    var token = tokens[i];
    var currentName = getFlagName(token);
    if(currentName == name)
      return getFlagValue(token);
  }
  return null;
}

function getEventHandlerFromQuery(queryString) {
  if(queryString == null)
    return null;
  var index = queryString.lastIndexOf("?");
  if(index == -1)
    return null;
  return queryString.slice(0, index);
}

function getQueryStringFromQuery(queryString) {
  if(getEventHandlerFromQuery(queryString) == null)
    return queryString;
  var index = queryString.lastIndexOf("?");
  return queryString.slice(index + 1);
}

function filterQueryString() {

	var FILTER_ARRAY = new Array("IBIMR_folder", "IBIMR_fex", "IBIMR_domain", "IBIMR_sub_action", "IBIMR_proxy_id", "WORP_RETURN_TYPE");
 
	var newQuery = "";
	var queryArray = this.queryString.split("&");
	
	for (i = 0; i < queryArray.length; i++) {
		// search thru filter_array
		for (j = 0; j < FILTER_ARRAY.length; j++) {
			if (queryArray[i].indexOf(FILTER_ARRAY[j]) != -1) {
				  newQuery += queryArray[i] + "&";
				  break;
			}
		}
	}
	this.queryString = newQuery;	  
}
