/// <summary>
        /// Begins an asynchronous request for searching images.
        /// </summary>
        /// <param name="keyword">The keyword.</param>
        /// <param name="resultCount">The count of result itmes.</param>
        /// <param name="safeLevel">The search safety level.</param>
        /// <param name="imageSize">The size of image.</param>
        /// <param name="colorization">The specified colorization of image.</param>
        /// <param name="color">The specified color of image.</param>
        /// <param name="imageType">The special type of image.</param>
        /// <param name="fileType">The specified file type of image.</param>
        /// <param name="site">The specified domain. It will restrict the search to images within this domain.e.g., <c>photobucket.com</c>.</param>
        /// <param name="callback">The <see cref="AsyncCallback"/> delegate.</param>
        /// <param name="state">An object containing state information for this asynchronous request.</param>
        /// <returns>An <see cref="IAsyncResult"/> that references the asynchronous request.</returns>
        public IAsyncResult BeginSearch(
            string keyword,
            int resultCount,
            string safeLevel,
            string imageSize,
            string colorization,
            string color,
            string imageType,
            string fileType,
            string site,
            AsyncCallback callback,
            object state)
        {
            if (keyword == null)
            {
                throw new ArgumentNullException("keyword");
            }

            var request = new GimageSearchRequest
            {
                Query        = keyword,
                SafeLevel    = safeLevel,
                ImageSize    = imageSize,
                Colorization = colorization,
                ImageColor   = color,
                ImageType    = imageType,
                FileType     = fileType,
                Site         = site
            };

            return(this.BeginSearch <GimageResult>(request, resultCount, callback, state));
        }
        /// <summary>
        /// Search images.
        /// </summary>
        /// <param name="keyword">The keyword.</param>
        /// <param name="resultCount">The count of result itmes.</param>
        /// <param name="safeLevel">The search safety level.</param>
        /// <param name="imageSize">The size of image.</param>
        /// <param name="colorization">The specified colorization of image.</param>
        /// <param name="color">The specified color of image.</param>
        /// <param name="imageType">The special type of image.</param>
        /// <param name="fileType">The specified file type of image.</param>
        /// <param name="site">The specified domain. It will restrict the search to images within this domain.e.g., <c>photobucket.com</c>.</param>
        /// <returns>The result itmes.</returns>
        /// <remarks>Now, the max count of items Google given is <b>64</b>.</remarks>
        public IList <IImageResult> Search(
            string keyword,
            int resultCount,
            string safeLevel,
            string imageSize,
            string colorization,
            string color,
            string imageType,
            string fileType,
            string site)
        {
            if (keyword == null)
            {
                throw new ArgumentNullException("keyword");
            }

            var request = new GimageSearchRequest
            {
                Query        = keyword,
                SafeLevel    = safeLevel,
                ImageSize    = imageSize,
                Colorization = colorization,
                ImageColor   = color,
                ImageType    = imageType,
                FileType     = fileType,
                Site         = site
            };

            return(this.Search <GimageResult, IImageResult>(request, resultCount));
        }
        /// <summary>
        /// Begins an asynchronous request for searching images.
        /// </summary>
        /// <param name="keyword">The keyword.</param>
        /// <param name="resultCount">The count of result itmes.</param>
        /// <param name="safeLevel">The search safety level.</param>
        /// <param name="imageSize">The size of image.</param>
        /// <param name="colorization">The specified colorization of image.</param>
        /// <param name="color">The specified color of image.</param>
        /// <param name="imageType">The special type of image.</param>
        /// <param name="fileType">The specified file type of image.</param>
        /// <param name="site">The specified domain. It will restrict the search to images within this domain.e.g., <c>photobucket.com</c>.</param>
        /// <param name="callback">The <see cref="AsyncCallback"/> delegate.</param>
        /// <param name="state">An object containing state information for this asynchronous request.</param>
        /// <returns>An <see cref="IAsyncResult"/> that references the asynchronous request.</returns>
        public IAsyncResult BeginSearch(
            string keyword,
            int resultCount,
            string safeLevel,
            string imageSize,
            string colorization,
            string color,
            string imageType,
            string fileType,
            string site,
            AsyncCallback callback,
            object state)
        {
            if (keyword == null)
            {
                throw new ArgumentNullException("keyword");
            }

            var request = new GimageSearchRequest
            {
                Query = keyword,
                SafeLevel = safeLevel,
                ImageSize = imageSize,
                Colorization = colorization,
                ImageColor = color,
                ImageType = imageType,
                FileType = fileType,
                Site = site
            };
            return this.BeginSearch<GimageResult>(request, resultCount, callback, state);
        }
        /// <summary>
        /// Search images.
        /// </summary>
        /// <param name="keyword">The keyword.</param>
        /// <param name="resultCount">The count of result itmes.</param>
        /// <param name="safeLevel">The search safety level.</param>
        /// <param name="imageSize">The size of image.</param>
        /// <param name="colorization">The specified colorization of image.</param>
        /// <param name="color">The specified color of image.</param>
        /// <param name="imageType">The special type of image.</param>
        /// <param name="fileType">The specified file type of image.</param>
        /// <param name="site">The specified domain. It will restrict the search to images within this domain.e.g., <c>photobucket.com</c>.</param>
        /// <returns>The result itmes.</returns>
        /// <remarks>Now, the max count of items Google given is <b>64</b>.</remarks>
        public IList<IImageResult> Search(
            string keyword,
            int resultCount,
            string safeLevel,
            string imageSize,
            string colorization,
            string color,
            string imageType,
            string fileType,
            string site)
        {
            if (keyword == null)
            {
                throw new ArgumentNullException("keyword");
            }

            var request = new GimageSearchRequest
                {
                    Query = keyword,
                    SafeLevel = safeLevel,
                    ImageSize = imageSize,
                    Colorization = colorization,
                    ImageColor = color,
                    ImageType = imageType,
                    FileType = fileType,
                    Site = site
                };
            return this.Search<GimageResult, IImageResult>(request, resultCount);
        }