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