(function($){
	$.Buffer = new Array();
	$.Buffer.getBuffer = function(){
		var str = $.Buffer.join('');
		$.Buffer.length = 0;
		return str;
	};
	$.getBuffer = function(){
		var str = $.Buffer.join('');
		$.Buffer.length = 0;
		return str;
	};
	
	$.Buffers = function(){
		this._s = new Array;
	};
	$.Buffers.prototype = {
		append: function(str){
			this._s.push(str);
		},
		toString: function(){
			var str = this._s.join("");
			this._s.length = 0;
			return str;
		}
	};
	
	
	$.cookie = function(name, value, options){
		if (typeof value != 'undefined') {
			options = options ||
			{};
			if (value === null) {
				value = '';
				options.expires = -1;
			}
			var expires = '';
			if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
				var date;
				if (typeof options.expires == 'number') {
					date = new Date();
					date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
				} else {
					date = options.expires;
				}
				expires = '; expires=' + date.toUTCString();
			}
			var path = options.path ? '; path=' + (options.path) : '';
			var domain = options.domain ? '; domain=' + (options.domain) : '';
			var secure = options.secure ? '; secure' : '';
			document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
		} else {
			var cookieValue = null;
			if (document.cookie && document.cookie != '') {
				var cookies = document.cookie.split(';');
				for (var i = 0; i < cookies.length; i++) {
					var cookie = jQuery.trim(cookies[i]);
					if (cookie.substring(0, name.length + 1) == (name + '=')) {
						cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
						break;
					}
				}
			}
			return cookieValue;
		}
	};
	
	$.getScript = function(url, callback, cache){
		$.ajax({
			type: "GET",
			url: url,
			success: callback,
			//dataType: "script",
			dataType: "text",
			cache: cache
		});
	};
	$.unserialise = function(Data){
		var Data = Data.split("&");
		var Serialised = new Array();
		$.each(Data, function(){
			var Properties = this.split("=");
			Serialised[Properties[0]] = Properties[1];
		});
		return Serialised;
	};
	$.getAllQueryStrings = function(Option){
		Option = $.extend({
			URL: location.href,
			callback: function(Options, Result){
			}
		}, Option);
		var Result = new Array();
		try {
			var QS = Option.URL.split("?")[1].split("#")[0];
		} catch (e) {
			Option.callback(Option, Result);
			return Result;
		}
		Result = $.unserialise(QS);
		Option.callback(Option, Result);
		return Result;
	}
	$.QueryStringExist = function(Option){
		Option = $.extend({
			URL: location.href,
			callback: function(Option, Result){
			}
		}, Option);
		var Result = (typeof($.getAllQueryStrings({
			URL: Option.URL
		})[Option.ID]) !=
		"undefined");
		Option.callback(Option, Result);
		return Result;
	}
	$.getQueryString = function(Option){
		Option = $.extend({
			URL: location.href,
			onStart: function(Option){
			},
			onError: function(Option){
			},
			onSuccess: function(Option, Result){
			},
			callback: function(Option, Result){
			}
		}, Option);
		var Result = Option.DefaultValue;
		Option.onStart(Option);
		if ($.QueryStringExist({
			ID: Option.ID,
			URL: Option.URL
		})) {
			Result = $.getAllQueryStrings({
				URL: Option.URL
			})[Option.ID];
			Option.onSuccess(Option, Result);
		} else {
			Option.onError(Option);
		};
		Option.callback(Option, Result);
		return Result;
	};
	
})(jQuery);
