//Grab the query string on first load
var $_GET = urlToArray();

$(document).ready(function ()
{
	$('.pass_query_string').click(function(){
		
		//Get the link url
		var href = $(this).attr('href');
		
		//Grab the query and hash parameters from the url
		var url_query = urlQueryArray();
		var url_hash = urlHashArray();
		
		//Compile the params into a string
		var url_params = urlToString(url_hash, url_query);
		
		if (url_params == '#') {url_params = '';}
		
		//Set the new url
		$(this).attr('href', href + url_params);
		
	});	
});

/*
// urlToArray - Convert the browser url to an array
// RETURNS ( array url_array )
// DETAILS
//   href: The array of key=>value
//   If 'value' is a '|' delimited array it will return ('key'=> array('value','value','value'))
*/
function urlToArray()
{
	var params = urlParamNames(window.location.href);
	
	var url_array = new Array();
	
	for (var key in params)
	{
		var param = params[key];
	
		url_array[param] = urlParam(param);
	
		if (urlParamIsArray(url_array[param]))
		{
			url_array[param] = urlParamSplit(url_array[param]);
		}
	}
	return url_array;
}

function urlHashArray()
{
	var href = window.location.href;
	var href = href.split("#",2);
	
	var hash_string = href[1];
	
	var hash_params = urlParamNames(hash_string);
	var hash_array = new Array();
	for (var key in hash_params)
	{
		var param = hash_params[key];
	
		hash_array[param] = urlParam(param);
	
		if (urlParamIsArray(hash_array[param]))
		{
			hash_array[param] = urlParamSplit(hash_array[param]);
		}
	}
	return hash_array;
}

function urlQueryArray()
{
	var href = window.location.href;
	var href = href.split("#",2);
	
	var query_string = href[0];	
	
	var query_params = urlParamNames(query_string);
	
	var query_array = new Array();
	for (var key in query_params)
	{
		var param = query_params[key];
	
		query_array[param] = urlParam(param);
	
		if (urlParamIsArray(query_array[param]))
		{
			query_array[param] = urlParamSplit(query_array[param]);
		}
	}
	return query_array;
}

/*
// urlParam - Returns the value of a passed url key name
// RETURNS ( string results )
*/
function urlParam(name)
{
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return results[1];
}

/*
// urlParamNames - Returns an array of url key names
// RETURNS ( array params )
*/
function urlParamNames(href_string)
{
	var params = new Array( );
	var regex = /[\?&]([^=]+)=/g;
	while( ( results = regex.exec( href_string ) ) != null )
		params.push( results[1] );
	return params;
}

/*
// urlParamIsArray - Finds whether a variable contains '|'
// PASSES var - The variable being evaluated. 
// RETURNS TRUE if var contains '|' , FALSE otherwise. 
*/
function urlParamIsArray(param)
{
	var regex = /\|+/;	
	
	if (regex.test(param))
	{
		return true;
	}
	return false;
}

/*
// urlParamSplit - Split a string by '|'
// PASSES ( string param )
// DETAILS
//   param: The string to be split
// RETURNS
//   params: An array of strings split by string
*/
function urlParamSplit(param)
{
	if (param)
	{
		var params = new Array();
				
		//Select elements inbetween |
		var regex = /\|+/;
		
		params = param.split(regex);
		
		delete params.index;
		delete params.input;
	
		return params;
	}	
	return false;
}

/*
// urlToString - Passes two arrays and returns a string.
// PASSES ( array url_hash ), ( array url_query )
// DETAILS
//   url_hash: The params passed in this array will be led by a # in the returned string.
//   url_query: These params will be led by a ?
// RETURNS
//   url_string: The url query string
*/
function urlToString( url_hash, url_query )
{
	url_string = '';
	//if url_query isn't empty loop through and compile the string
	if ((empty(url_query)) == false)
	{
		url_string += '?';
		
		for (var param_key in url_query)
		{
			var param = url_query[param_key];
			
			if (isArray(param))
			{
				var param_array = '';
				for (var param_array_key in param)
				{
					var param_array_value = param[param_array_key];

					param_array += param_array_value + '|' ;
				}
				param_array = param_array.slice(0, -1); //remove extra |
				url_string += param_key + '=' + param_array + '&';
			}
			else
			{
				url_string += param_key + '=' + param + '&';
			}
		}
		url_string = url_string.slice(0, -1); //remove extra &
	}
	
	//if url_hash isn't empty loop through and compile the string
	if ((empty(url_hash)) == false)
	{
		url_string += '#?';
		
		for (var param_key in url_hash)
		{
			var param = url_hash[param_key];

			if (isArray(param))
			{
				var param_array = '';
				for (var param_array_key in param)
				{
					var param_array_value = param[param_array_key];
				
					param_array += param_array_value + '|' ;
				}
	
				param_array = param_array.slice(0, -1); //remove extra |
				url_string += param_key + '=' + param_array + '&';
			}
			else
			{
				url_string += param_key + '=' + param + '&';
			}
		}
		url_string = url_string.slice(0, -1); //remove extra &
	}
	return url_string;
}



