/*
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;
		}
	},

	page:
	function(extension, args) {
		args = jQuery.extend({
			win: window
		},
					args);
		var urlCleaned = jQuery.jqURL.url({ win: args.win }).split('?')[0];
		urlCleaned = urlCleaned.split('#')[0];
		urlCleaned = urlCleaned.substring(urlCleaned.lastIndexOf("/") + 1, urlCleaned.lenght);
		if (extension == null) extension = true;
		if (extension == true) return urlCleaned;
		else return urlCleaned.substring(0, urlCleaned.lastIndexOf("."));

		//		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;
	}

};

