((w) ->

  w.gl ?= {}
  w.gl.utils ?= {}

  # Returns an array containing the value(s) of the
  # of the key passed as an argument
  w.gl.utils.getParameterValues = (sParam) ->
    sPageURL = decodeURIComponent(window.location.search.substring(1))
    sURLVariables = sPageURL.split('&')
    sParameterName = undefined
    values = []
    i = 0
    while i < sURLVariables.length
      sParameterName = sURLVariables[i].split('=')
      if sParameterName[0] is sParam
        values.push(sParameterName[1])
      i++
    values

  # #
  #  @param {Object} params - url keys and value to merge
  #  @param {String} url
  # #
  w.gl.utils.mergeUrlParams = (params, url) ->
    newUrl = decodeURIComponent(url)
    for paramName, paramValue of params
      pattern = new RegExp "\\b(#{paramName}=).*?(&|$)"
      if not paramValue?
        newUrl = newUrl.replace pattern, ''
      else if url.search(pattern) isnt -1
        newUrl = newUrl.replace pattern, "$1#{paramValue}$2"
      else
        newUrl = "#{newUrl}#{(if newUrl.indexOf('?') > 0 then '&' else '?')}#{paramName}=#{paramValue}"

    # Remove a trailing ampersand
    lastChar = newUrl[newUrl.length - 1]

    if lastChar is '&'
        newUrl = newUrl.slice 0, -1

    newUrl

  # removes parameter query string from url. returns the modified url
  w.gl.utils.removeParamQueryString = (url, param) ->
    url = decodeURIComponent(url)
    urlVariables = url.split('&')
    (
      variables for variables in urlVariables when variables.indexOf(param) is -1
    ).join('&')

) window