/*<Summary>
         * Builds an admob ad
         * </Summery>*/
        private void BuildAd(string adUnit, AD_FORMATS format, HORIZONTAL_ALIGNMENT horizontalAlign, VERTICAL_ALIGNMENT vertAlign, double width, double height, bool testAd)
        {
#if WINDOWS_PHONE
            if (_ad_Google != null)
            {
                return;
            }

            if (!HasGrid())
            {
                _isBuilt      = false;
                _errorMessage = "Missing grid to attach ad to";
            }

            try
            {
                _ad_Google = new AdView
                {
                    Format   = ConvertAdFormat(format),
                    AdUnitID = adUnit
                };

                if (format != AD_FORMATS.SMART_BANNER)
                {
                    _ad_Google.Width  = width;
                    _ad_Google.Height = height;
                    _ad_Google.HorizontalAlignment = ConvertHorizontalAlignment(horizontalAlign);
                }

                _ad_Google.VerticalAlignment = ConvertVerticalAlignment(vertAlign);

                _ad_Google.ReceivedAd        += OnAdReceived;
                _ad_Google.FailedToReceiveAd += OnFailedToReceiveAd;


                baseGrid.Children.Add(_ad_Google);
                if (baseGrid.Children.Count > 0)
                {
                    _adIndex = baseGrid.Children.Count - 1;
                }

                if (testAd)
                {
                    AdRequest adRequest = new AdRequest();
                    adRequest.ForceTesting = true;
                    _ad_Google.LoadAd(adRequest);
                }

                _isBuilt = true;
            }
            catch (Exception e)
            {
                _errorMessage = "AdMob Error: " + e.Message;
                _isBuilt      = false;
            }
#endif
        }
        /*<Summary>
         * AdMob overload
         * </Summery>*/
        public void CreateAd(string adUnit, AD_FORMATS format, HORIZONTAL_ALIGNMENT horizontalAlign, VERTICAL_ALIGNMENT vertAlign, double width, double height, bool testAd)
        {
#if WINDOWS_PHONE
            Dispatcher.InvokeOnUIThread(() =>
            {
                BuildAd(adUnit, format, horizontalAlign, vertAlign, width, height, testAd);
            });
#endif
        }
        /*<Summary>
         * Just our own converter for the enumerations
         * </Summery>*/
        private GoogleAds.AdFormats ConvertAdFormat(AD_FORMATS f)
        {
            switch (f)
            {
            case AD_FORMATS.BANNER:
                return(AdFormats.Banner);

            case AD_FORMATS.SMART_BANNER:
                return(AdFormats.SmartBanner);

            default:
                return(AdFormats.Banner);
            }
        }
        /// <summary>
        /// Used to create an AdMob ad
        /// Pass in your ad mob unit id, the format, height/width, position and whether its a test ad or not
        /// The testAd bool is important, it allows us to test an admob ad
        /// </summary>
        public void CreateAd(string adUnit, AD_FORMATS format, HORIZONTAL_ALIGNMENT hAlign, VERTICAL_ALIGNMENT vAlign, bool testAd)
        {
#if WINDOWS_PHONE
            if (Dispatcher.InvokeOnUIThread == null && Messenger != null)
            {
                Messenger("Dispatcher Error: UI Thread not set up");
                return;
            }

            Dispatcher.InvokeOnUIThread(() =>
            {
                BuildAd(adUnit, format, hAlign, vAlign, testAd);
            });
#endif
        }
        private void BuildAd(string adUnit, AD_FORMATS format, HORIZONTAL_ALIGNMENT hAlign, VERTICAL_ALIGNMENT vAlign, bool testAd)
        {
#if WINDOWS_PHONE
            //Check if an AdMob ad has already been created
            //If so we return, and display a message to the user
            if (_AdMobAd != null)
            {
                if (Messenger != null)
                {
                    Messenger("AdMob Ad already present");
                }
                return;
            }

            //Next we check if we have a grid
            if (_baseGrid == null)
            {
                _isAMAd = false;
                if (Messenger != null)
                {
                    Messenger("Missing grid");
                }
                return;
            }

            try
            {
                _AdMobAd = new AdView
                {
                    Format   = ConvertAdFormat(format),
                    AdUnitID = adUnit
                };

                if (format != AD_FORMATS.SMART_BANNER)
                {
                }

                _AdMobAd.VerticalAlignment = ConvertVerticalAlignment(vAlign);

                _AdMobAd.ReceivedAd        += OnAdReceived;
                _AdMobAd.FailedToReceiveAd += OnError;


                _baseGrid.Children.Add(_AdMobAd);
                //if (_baseGrid.Children.Count > 0)
                //    _adIndex = _baseGrid.Children.Count - 1;

                if (testAd)
                {
                    AdRequest adRequest = new AdRequest();
                    adRequest.ForceTesting = true;
                    _AdMobAd.LoadAd(adRequest);
                }


                //Finally add it to our grid
                _baseGrid.Children.Add(_AdMobAd);

                _isAMAd = true;
            }
            catch (Exception e)
            {
                if (Messenger != null)
                {
                    Messenger("AdMob Error: " + e.Message);
                }
                _isAMAd = false;
            }
#endif
        }
 /*<Summary>
  * Just our own converter for the enumerations
 </Summery>*/
 private GoogleAds.AdFormats ConvertAdFormat(AD_FORMATS f)
 {
     switch(f)
     {
         case AD_FORMATS.BANNER:
             return AdFormats.Banner;
             break;
         case AD_FORMATS.SMART_BANNER:
             return AdFormats.SmartBanner;
             break;
         default:
             return AdFormats.Banner;
     }
 }
        /*<Summary>
         * Builds an admob ad
        </Summery>*/
        private void BuildAd(string adUnit, AD_FORMATS format, HORIZONTAL_ALIGNMENT horizontalAlign, VERTICAL_ALIGNMENT vertAlign, double width, double height, bool testAd)
        {
#if WINDOWS_PHONE
           if(_ad_Google != null)
            return;

           if (!HasGrid())
           {
               _isBuilt = false;
               _errorMessage = "Missing grid to attach ad to";
           }

            try
            {
                _ad_Google = new AdView
                {
                    Format = ConvertAdFormat(format),
                    AdUnitID = adUnit
                };
                
                if (format != AD_FORMATS.SMART_BANNER)
                {
                    _ad_Google.Width = width;
                    _ad_Google.Height = height;
                    _ad_Google.HorizontalAlignment = ConvertHorizontalAlignment(horizontalAlign);
                }
   
                _ad_Google.VerticalAlignment = ConvertVerticalAlignment(vertAlign);
            
                _ad_Google.ReceivedAd += OnAdReceived;
                _ad_Google.FailedToReceiveAd += OnFailedToReceiveAd;


                baseGrid.Children.Add(_ad_Google);
                if (baseGrid.Children.Count > 0)
                    _adIndex = baseGrid.Children.Count - 1;

                if (testAd)
                {
                    AdRequest adRequest = new AdRequest();
                    adRequest.ForceTesting = true;
                    _ad_Google.LoadAd(adRequest);
                }
                
                _isBuilt = true;
            }
            catch(Exception e)
            {
                _errorMessage = "AdMob Error: " + e.Message;
                _isBuilt = false;
            }
#endif
        }
        /*<Summary>
         * AdMob overload
        </Summery>*/
        public void CreateAd(string adUnit, AD_FORMATS format, HORIZONTAL_ALIGNMENT horizontalAlign, VERTICAL_ALIGNMENT vertAlign, double width, double height, bool testAd)
        {
#if WINDOWS_PHONE
            Dispatcher.InvokeOnUIThread(() =>
            {
                BuildAd(adUnit, format,horizontalAlign,vertAlign,width,height,testAd);
            });
#endif
        }