/**
 * @author alexander.farkas
 */
/**
* JS-Singelton-Klasse um Pfade und Get-Parameter auselesen zu k�nnen<br> 
* Um die meisten Methoden und Eigenschaften nutzen zu k�nnen muss die createPaths-Methode aufgerufen werden.
* @id locationModule
* @alias $.location
*/
/**
 * Wandlet einen durch & (default) und = (default) getrennten String in ein Object um
 * 
 * @id strToObj
 * @method
 * @alias $.location.strToObj
 * @param {String} [str] String der umgewandelt werden soll. default ist location.search 
 * @return {Object} Gibt Objekt zur�ck
 */
 
/**
 * Pr�ft, ob ein GET-Parameter gesetzt wurde, gibt auch dann true zur�ck, wenn der Parameter einen leeren String als Wert hat
 * 
 * @id issetQuery
 * @method
 * @alias $.location.issetQuery
 * @param {String} name Name des zu untersuchenden Parameters
 * @return {Boolean}
 */
/**
 * Object, welches alle GET-Parameter der aufgerufenen Seite enth�lt
 * @id querys
 * @type Object
 * @alias $.location.querys
 */
(function($){
/**
 * @id locationModule
 */
$.location = (function(){
	/**
	 * @id querys
	 */
	var querys = {};
	
	/**
	 * @id issetQuery
	 */
	function issetQuery(name){
	return (querys[name] || querys[name] === '');
	}
	/**
	 * @id strToObj
	 */
	function strToObj(str, opts){
	var obj = {};
	opts =  $.extend({
		decode: false,
		seperator: /&/g,
		assignator: /\=/
	}, opts);
	if (str) {
		
		if('&'.replace(opts.seperator, '1') === '1'){
		str = str.substr(str.indexOf('?') + 1).replace(/&amp;/g, '&');
		}
		str = str.split(opts.seperator);
		$.each(str, function(i, param){
		var queryPair = param.split(opts.assignator);
		if (opts.decode) {
			obj[decodeURIComponent(queryPair[0]).replace(/\+/g, ' ')] = (queryPair[1]) ? decodeURIComponent(queryPair[1]).replace(/\+/g, ' ') : '';
		}
		else {
			obj[queryPair[0]] = (queryPair[1]) ? queryPair[1] : '';
		}
		});
	}
	return obj;
	}
	
	/**
	 * @id objToStr
	 */
	function objToStr(obj, opts) {
	var strAr = [], str = '';
	opts =  $.extend({
		decode: false,
		seperator: '&',
		assignator: '='
	}, opts);
	if (opts.decode) {
		for (prop in obj) {
		strAr.push((obj[prop]) ? encodeURIComponent(prop).replace(' ', '+') + opts.assignator + encodeURIComponent(obj[prop]).replace(' ', '+') : encodeURIComponent(prop).replace(' ', '+') );
		}
	} else {
		for (prop in obj) {
		strAr.push( (obj[prop]) ? prop + opts.assignator + obj[prop] : prop );
		}
	}
	str = strAr.join(opts.seperator);
	
	return str;
	}
	
	querys = strToObj(location.search);
	
	return {
	querys: querys,
	issetQuery: issetQuery,
	strToObj: strToObj,
	objToStr: objToStr
	};
})();
})(jQuery);
