/*
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;
}

};
