// This is a Greasemonkey user script.
//
// To install, you need Greasemonkey: http://greasemonkey.mozdev.org/
// Then restart Firefox and revisit this script.
// Under Tools, there will be a new menu item to "Install User Script".
// Accept the default configuration and install.
//
// To uninstall, go to Tools/Manage User Scripts,
// select "Hello World", and click Uninstall.
//
// --------------------------------------------------------------------
//
// ==UserScript==
// @name          jqURL
// @namespace     http://www.oakcitygraphics.com/jquery/jqURL/jqURLdemo.html?var1=1&var2=2&var3=3
// @description   jqURL for Greasemonkey
// @include       
// ==/UserScript==

// Check if jQuery's loaded
function jqURL_wait() {
  if (typeof window.jQuery == 'undefined') {
    window.setTimeout(jqURL_wait, 100);
  }
  else {
/*
jqURL
by Josh Nathanson

various manipulations on url strings and windows.  
all functions can also take a window object as an argument,
for example {win:opener}
but will default to current window if none is passed.

public functions:

-------------------------
.url({ 
   win:window object 
   })
-------------------------
returns the whole url string
like win.location.href

  so if the current window href is "http://www.mysite.com?var1=1&var2=2&var3=3"
  
  $.jqURL.url() returns "http://www.mysite.com?var1=1&var2=2&var3=3"
  
  
------------------------------
.loc(urlstr:string, 
   { 
   win:window object, 
   w:integer, 
   h:integer, 
   t:integer,
   l:integer,
   wintype:string('_top'[default],'_blank','_parent') )
  })
------------------------------                                       
- directs passed in window to urlstr, which is required
- works like window.location.href = 'myurl'
- but you can also use it to pop open a new window by passing in "_blank" as the wintype
- if popping open a window, defaults to center of screen

  so
  $.jqURL.loc('http://www.google.com',
        {w:200,h:200,wintype:'_blank'});
  would open Google in a new centered 200x200 window
  
  or, locate an url to any named window:
  $.jqURL.loc('http://www.google.com',{ win:mywindow });
  opens Google in mywindow


------------------------------
.qs({ 
  ret:string('string'[default],'object'), 
  win:window object })
------------------------------
returns querystring, either string (pass ret:'string' [default])
or object (pass ret:'object') 

  so if the current window href is "http://www.mysite.com?var1=1&var2=2&var3=3"

  $.jqURL.qs();
  returns "var1=1&var2=2&var3=3"
  
  $.jqURL.qs({ ret:'object' });
  returns Object var1=1,var2=2,var3=3


------------------------------
.strip({ keys:string(list of keys to strip), win:window object })
------------------------------
if passed with no arguments, returns url with '?' and query string removed
if you pass in list of keys, it returns url with the specified key-value pairs removed

  so if the current window href is "http://www.mysite.com?var1=1&var2=2&var3=3"

  $.jqURL.strip();
  will return
  "http://www.mysite.com"
  
  $.jqURL.strip({ keys:'var1,var2' });
  will return
  "http://www.mysite.com?var3=3"
  
  
-------------------------------------
.get(key, {win:window object})
-------------------------------------
returns value of passed in querystring key

  so if the current window href is "http://www.mysite.com?var1=1&var2=2&var3=3"
  $.jqURL.get('var2');
  will return 2

--------------------------------------
.set(hash, {win:window object})
--------------------------------------
returns the window's url, but with the keys/values set in the query string
if the keys already exist, re-sets the value
if they don't exist, they're appended onto the query string

*/
jQuery.jqURL = {

  url : // returns a string
  function(args) {
    args = 
      jQuery.extend({
        win : window
      },
      args);
    return args.win.location.href;
  },
  
  loc : 
  function(urlstr, args) {
    args = 
      jQuery.extend({
        win : window,
        w : 500,
        h : 500,
        wintype : '_top'
      },
      args);
      
    if (!args.t) {
      args.t = screen.height / 2 - args.h / 2;
    }
    if (!args.l) {
      args.l = screen.width / 2 - args.w / 2;
    }
    if (args['wintype'] == '_top') {
      args.win.location.href = urlstr;
    }
    else {      
      open(
      urlstr,
      args['wintype'],
      'width=' + args.w + ',height=' + args.h + ',top=' + args.t + ',left=' + args.l + ',scrollbars,resizable'
      );
    
    }
    return;
  },
  
  qs :
  function(args) {
    args = jQuery.extend({
      ret : 'string',
      win : window
    },
    args);
    
    if (args['ret'] == 'string') {
      return jQuery.jqURL.url({ win:args.win }).split('?')[1];
      }

    else if (args['ret'] == 'object') {
      
      var qsobj = {};
      var thisqs = jQuery.jqURL.url({ win:args.win }).split('?')[1];
      
      if ( thisqs ) {
        var pairs = thisqs.split('&');
        for ( i=0;i<pairs.length;i++ ) {
          var pair = pairs[i].split('=');
          qsobj[pair[0]] = pair[1];
        }
      }
      return qsobj;
    }
  },
  
  strip :
  function(args) {
    args = jQuery.extend({
      keys : '',
      win : window
      },
      args);
    
    if (jQuery.jqURL.url().indexOf('?') == -1) { // no query string found
      return jQuery.jqURL.url({ win:args.win });
    }
    // if no keys passed in, just return url with no querystring
    else if (!args.keys) {
      return jQuery.jqURL.url({ win:args.win }).split('?')[0];
    }
    else { //return stripped url

      var qsobj = jQuery.jqURL.qs({ ret:'object',win:args.win });  // object with key/value pairs   
      var counter = 0;
      var url = jQuery.jqURL.url({ win:args.win }).split('?')[0] + '?';
      var amp = '';
      
      for (var key in qsobj) {
        if (args.keys.indexOf(key) == -1) { 
          // pass test, add this key/value to string
          amp = (counter) ? '&' : '';
          url = url + amp + key + '=' + qsobj[key];
          counter++;
        }
      }
      return url;
    }     
  },
  
  get :
  function(key,args) {
    args = jQuery.extend({
      win : window
      },args);
  
  qsobj =  jQuery.jqURL.qs({ ret:'object', win:args.win });
  return qsobj[key];
  },
  
  set :
  function(hash,args) {
    args = jQuery.extend({
      win : window
      },args);
    
    // get current querystring
    var qsobj =  jQuery.jqURL.qs({ ret:'object',win:args.win });
    
    // add/set values from hash
    for (var i in hash) {
      qsobj[i] = hash[i];
    }
    
    var qstring = '';
    var counter = 0;
    var amp = '';
    
    // turn qsobj into string
    for (var k in qsobj) {
      amp = (counter) ? '&' : '';
      qstring = qstring + amp + k + '=' + qsobj[k];
      counter++;
    }
    return jQuery.jqURL.strip({ win: args.win }) + '?' + qstring;
  }
  
};
  }
}

// Wait for jQuery to load
jqURL_wait();

