public override HTTPParams Prepare(string token, HTTPParams parameters, Dictionary<string, string> values = null) {

			parameters = base.Prepare(token, parameters, values);

			foreach (var item in parameters.items) {
				
				if (item.key.ToLower() == "display") {
					
					item.value = this.display.ToString().ToLower();
					
				}
				
				if (item.key.ToLower() == "access_token") {
					
					item.value = token;
					
				}
				
				if (item.key.ToLower() == "auth_type") {

					if (this.authType != AuthType.None) {

						item.value = this.authType.ToString().ToLower();

					}

				}

				if (item.key.ToLower() == "response_type") {

					var responseType = this.responseType.ToString().ToLower();

					if (this.responseType == ResponseType.code_token) {

						responseType = "code%20token";

					}

					item.value = responseType;
					
				}

			}
			
			return parameters;
			
		}
		public override HTTPParams Prepare(string token, HTTPParams parameters, Dictionary<string, string> values = null) {

			parameters = base.Prepare(token, parameters, values);

			foreach (var item in parameters.items) {
				
				if (item.key.ToLower() == "display") {
					
					item.value = this.display.ToString().ToLower();
					
				}
				
				if (item.key.ToLower() == "access_token") {
					
					item.value = token;
					
				}

			}
			
			return parameters;
			
		}
        public SocialHttp(ModuleSettings settings, string url, HTTPParams parameters, HTTPType httpType, System.Action <string, bool> onCompleted)
        {
                        #if USE_WWW
            if (httpType == HTTPType.Post)
            {
                var form = new WWWForm();
                foreach (var param in parameters.items)
                {
                    form.AddField(param.key, param.GetValue(settings));
                }

                this.www = new WWW(url, form);
            }
            else if (httpType == HTTPType.Get)
            {
                foreach (var param in parameters.items)
                {
                    url = url.Replace("{" + param.key + "}", param.GetValue(settings));
                }

                this.www = new WWW(url);
            }

            SocialSystem.WaitFor(this.Wait(() => {
                if (string.IsNullOrEmpty(this.www.error) == false)
                {
                    Debug.LogError(this.www.error);

                    // error
                    onCompleted(this.www.error, false);
                }
                else
                {
                    // success
                    onCompleted(this.www.text, true);
                }
            }));
                        #else
            if (httpType == HTTPType.Post)
            {
                var form = new WWWForm();
                foreach (var param in parameters.items)
                {
                    form.AddField(param.key, param.GetValue(settings));
                }

                this.www = new WWW(url, form);
            }
            else if (httpType == HTTPType.Get)
            {
                foreach (var param in parameters.items)
                {
                    url = url.Replace("{" + param.key + "}", param.GetValue(settings));
                }

                ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(delegate { return(true); });

                var uri = new Uri(url.Trim() + "/");                    // I don't know about last `/` but it works only with it ;(

                WebRequest request = WebRequest.Create(uri);
                // If required by the server, set the credentials.
                request.Credentials = CredentialCache.DefaultCredentials;
                // Get the response.
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();

                // Get the stream containing content returned by the server.
                Stream dataStream = response.GetResponseStream();
                // Open the stream using a StreamReader for easy access.
                StreamReader reader = new StreamReader(dataStream);
                // Read the content.
                string responseFromServer = reader.ReadToEnd();

                // Cleanup the streams and the response.
                reader.Close();
                dataStream.Close();
                response.Close();

                onCompleted(responseFromServer, response.StatusCode == HttpStatusCode.OK);
            }
                        #endif

            Debug.Log(url);
        }
		public SocialHttp(ModuleSettings settings, string url, HTTPParams parameters, HTTPType httpType, System.Action<string, bool> onCompleted) {

			#if USE_WWW
			if (httpType == HTTPType.Post) {

				var form = new WWWForm();
				foreach (var param in parameters.items) {

					form.AddField(param.key, param.GetValue(settings));

				}

				this.www = new WWW(url, form);

			} else if (httpType == HTTPType.Get) {

				foreach (var param in parameters.items) {

					url = url.Replace("{" + param.key + "}", param.GetValue(settings));

				}
				
				this.www = new WWW(url);

			}

			SocialSystem.WaitFor(this.Wait(() => {

				if (string.IsNullOrEmpty(this.www.error) == false) {
					
					Debug.LogError(this.www.error);

					// error
					onCompleted(this.www.error, false);

				} else {

					// success
					onCompleted(this.www.text, true);

				}

			}));
			#else
			if (httpType == HTTPType.Post) {
				
				var form = new WWWForm();
				foreach (var param in parameters.items) {
					
					form.AddField(param.key, param.GetValue(settings));
					
				}
				
				this.www = new WWW(url, form);
				
			} else if (httpType == HTTPType.Get) {
				
				foreach (var param in parameters.items) {
					
					url = url.Replace("{" + param.key + "}", param.GetValue(settings));
					
				}

				ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(delegate { return true; });

				var uri = new Uri(url.Trim() + "/");	// I don't know about last `/` but it works only with it ;(

				WebRequest request = WebRequest.Create (uri);
				// If required by the server, set the credentials.
				request.Credentials = CredentialCache.DefaultCredentials;
				// Get the response.
				HttpWebResponse response = (HttpWebResponse)request.GetResponse ();

				// Get the stream containing content returned by the server.
				Stream dataStream = response.GetResponseStream ();
				// Open the stream using a StreamReader for easy access.
				StreamReader reader = new StreamReader (dataStream);
				// Read the content.
				string responseFromServer = reader.ReadToEnd ();

				// Cleanup the streams and the response.
				reader.Close ();
				dataStream.Close ();
				response.Close ();
				
				onCompleted(responseFromServer, response.StatusCode == HttpStatusCode.OK);

			}
			#endif
			
			Debug.Log(url);

		}