public Objects.JSAvatarImage Load(object a)
        {
            Objects.JSAvatarImage av = new Objects.JSAvatarImage(this.Engine.Object.InstancePrototype);

            if (a is String || a is ConcatenatedString)
            {
                String filename = a.ToString();

                if (filename.Length > 1)
                {
                    if (bad_chars.Count <String>(x => filename.Contains(x)) == 0)
                    {
                        String path = Path.Combine(Server.DataPath, this.Engine.ScriptName, "data", filename);

                        try
                        {
                            if (File.Exists(path))
                            {
                                byte[] data = File.ReadAllBytes(path);

                                using (Bitmap avatar_raw = new Bitmap(new MemoryStream(data)))
                                {
                                    using (Bitmap avatar_sized = new Bitmap(48, 48))
                                    {
                                        using (Graphics g = Graphics.FromImage(avatar_sized))
                                        {
                                            g.InterpolationMode = InterpolationMode.HighQualityBicubic;
                                            g.DrawImage(avatar_raw, new RectangleF(0, 0, 48, 48));

                                            using (MemoryStream ms = new MemoryStream())
                                            {
                                                avatar_sized.Save(ms, ImageFormat.Jpeg);
                                                av.Data = ms.ToArray();
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        catch { }
                    }
                }
            }

            return(av);
        }
        public bool Download(object a)
        {
            if (this.busy)
            {
                return(false);
            }

            Thread thread = new Thread(new ThreadStart(() =>
            {
                this.busy  = true;
                String arg = String.Empty;

                if (!(a is Undefined) && a != null)
                {
                    arg = a.ToString();
                }

                Objects.JSAvatarImage result = new Objects.JSAvatarImage(this.Engine.Object.InstancePrototype)
                {
                    Callback   = this.Callback,
                    Data       = null,
                    ScriptName = this.Engine.ScriptName,
                    Arg        = arg
                };

                try
                {
                    WebRequest request   = WebRequest.Create(this.Source);
                    List <byte> bytes_in = new List <byte>();

                    using (WebResponse response = request.GetResponse())
                    {
                        int received = 0;
                        byte[] buf   = new byte[1024];

                        using (Stream stream = response.GetResponseStream())
                            while ((received = stream.Read(buf, 0, 1024)) > 0)
                            {
                                bytes_in.AddRange(buf.Take(received));
                            }
                    }

                    using (Bitmap avatar_raw = new Bitmap(new MemoryStream(bytes_in.ToArray())))
                    {
                        using (Bitmap avatar_sized = new Bitmap(48, 48))
                        {
                            using (Graphics g = Graphics.FromImage(avatar_sized))
                            {
                                g.InterpolationMode = InterpolationMode.HighQualityBicubic;
                                g.DrawImage(avatar_raw, new RectangleF(0, 0, 48, 48));

                                using (MemoryStream ms = new MemoryStream())
                                {
                                    avatar_sized.Save(ms, ImageFormat.Jpeg);
                                    result.Data = ms.ToArray();
                                    bytes_in.Clear();
                                }
                            }
                        }
                    }
                }
                catch { }

                ScriptManager.Callbacks.Enqueue(result);
                this.busy = false;
            }));

            thread.Start();

            return(true);
        }