	function JSON_request(options) {
			var _ref = this;
			
			// OPTIONS
			var requestURL = 	options.requestURL;
			var method = 		options.method 			|| "GET";
			var data = 			options.data;
			var reference = 	options.reference		|| this;
			var callback = 		options.callback 		|| false;
			var errorCallback =	options.errorCallback 	|| false;
			var param1 =		options.param1;
			var param2 = 		options.param2;
			
			// MAKE REQUEST
			try {
				var request = $.ajax({
					type: 		method,
					url: 		requestURL,
					dataType: 	"json",
					data: 		data,
					success: function(json) {
						var jsonCheck = JSON_validate(json, errorCallback);
						if(jsonCheck) {
							if (callback !== false) {
								callback.call(reference, json[1]["@data"], param1, param2);
							}
						}
						else {
							if (errorCallback) {
								var ret;
								if(json[1]["@error"])	ret = json[1]["@error"];
								else					ret = json[0]["@status"];
								errorCallback.call(reference, ret, param1, param2);
							}
							else {
								JSON_defaultErrorMessage();
							}
						}
					},
					error: function(a1,a2,a3) {
						if (errorCallback) {
							errorCallback.call(reference, false, param1, param2);
						}
						JSON_defaultErrorMessage();
					},
					complete: function() {
						
					}
				});
				if (clearStack) {
					this.addRequest(request);
				}
				else {
					return request;
				}
			}
			catch(e) {
				
			}
		}
		
		function JSON_validate(json,errorCallback) {
			try {
				var status = json[0]["@status"];
				if(status.success) {
					return true;
				}
				else {
					var error = json[0]["@error"];
					
					JSON_defaultErrorMessage();
					return false;
				}
			}
			catch(e) {
				return false;
			}
			return false;

		}
		
		function JSON_defaultErrorMessage() {
			// ...
		}
