/**
 * Copyright (c) 2012, Alexander Zaytsev <a.zaytsev@co.wapstart.ru>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *   * Redistributions of source code must retain the above copyright notice,
 *     this list of conditions and the following disclaimer.
 *   * Redistributions in binary form must reproduce the above copyright notice,
 *     this list of conditions and the following disclaimer in the documentation
 *     and/or other materials provided with the distribution.
 *   * Neither the name of the "Wapstart" nor the names
 *     of its contributors may be used to endorse or promote products
 *     derived from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

package ru.wapstart.plus1.sdk;

import android.content.Intent;
import android.content.Context;
import android.content.ActivityNotFoundException;
import android.graphics.Color;
import android.net.Uri;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.util.Log;
import android.view.View;
import android.view.MotionEvent;

public class AdView extends BaseAdView {
	private static final String LOGTAG = "AdView";

	private OnTouchListener mTouchListener = new OnTouchListener() {
		public boolean onTouch(View v, MotionEvent event) {
			return (event.getAction() == MotionEvent.ACTION_MOVE);
		}
	};

	private OnReadyListener mOnReadyListener;
	private OnClickListener mOnClickListener;

	private boolean mOpenInBrowser	= false;

	public AdView(Context context) {
		super(context);

		disableScrollingAndZoom();
		getSettings().setJavaScriptEnabled(true);
		setBackgroundColor(Color.TRANSPARENT);
		setWebViewClient(new AdWebViewClient());
	}

	public void loadHtmlData(String data) {
		data = completeHtml(data);

		loadDataWithBaseURL(null, data, "text/html", "UTF-8", null);
	}

	@Override
	public void pauseAdView() {
		setOnTouchListener(null);

		super.pauseAdView();
	}

	@Override
	public void resumeAdView() {
		setOnTouchListener(mTouchListener);

		super.resumeAdView();
	}

	public void setOnReadyListener(OnReadyListener listener) {
		mOnReadyListener = listener;
	}

	public OnReadyListener getOnReadyListener() {
		return mOnReadyListener;
	}

	public void setOnClickListener(OnClickListener listener) {
		mOnClickListener = listener;
	}

	public OnClickListener getOnClickListener() {
		return mOnClickListener;
	}

	public void setOpenInBrowser(boolean orly) {
		mOpenInBrowser = orly;
	}

	private void disableScrollingAndZoom() {
		setHorizontalScrollBarEnabled(false);
		setHorizontalScrollbarOverlay(false);
		setVerticalScrollBarEnabled(false);
		setVerticalScrollbarOverlay(false);
		getSettings().setSupportZoom(false);
	}

	private class AdWebViewClient extends WebViewClient {
		@Override
		public boolean shouldOverrideUrlLoading(WebView view, String url) {

			if (mOpenInBrowser || Plus1Helper.isIntentUrl(url)) {
				Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
				intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

				try {
					getContext().startActivity(intent);
				} catch (ActivityNotFoundException e) {
					Log.e(LOGTAG, "Could not handle intent with URI: " + url);
					return false;
				}
			} else {
				Intent intent = new Intent(getContext(), ApplicationBrowser.class);
				intent.putExtra(ApplicationBrowser.URL_EXTRA, url);
				intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
				try {
					getContext().startActivity(intent);
				} catch (ActivityNotFoundException e) {
					Log.e(LOGTAG, "Could not start ApplicationBrowser" + url);
					return false;
				}
			}

			if (getOnClickListener() != null)
				getOnClickListener().onClick((AdView)view);

			return true;
		}

		@Override
		public void onPageFinished(WebView view, String url) {
			if (getOnReadyListener() != null)
				getOnReadyListener().onReady((AdView)view);
		}
	}

	public interface OnReadyListener {
		public void onReady(AdView view);
	}

	public interface OnClickListener {
		public void onClick(AdView view);
	}
}

@@ -3775,24 +3775,54 @@
 Url(url)) %7B%0A
+%09%09%09%09Uri uri = Uri.parse(url);%0A
 %09%09%09%09Intent i
@@ -3860,30 +3860,19 @@
 N_VIEW, 
-U
+u
 ri
-.parse(url)
 );%0A%09%09%09%09i
@@ -3962,32 +3962,32 @@
 tivity(intent);%0A
-
 %09%09%09%09%7D catch (Act
@@ -4006,32 +4006,464 @@
 dException e) %7B%0A
+%09%09%09%09%09if (Plus1Helper.isPlayMarketIntentUrl(url)) %7B%0A%09%09%09%09%09%09String playUrl = %22http://play.google.com/store/apps/%22 + uri.getHost() + %22?%22 + uri.getQuery();%0A%09%09%09%09%09%09Log.i(%0A%09%09%09%09%09%09%09LOGTAG,%0A%09%09%09%09%09%09%09String.format(%0A%09%09%09%09%09%09%09%09%22Could not open link '%25s' because Google Play app is not installed, we will open the app store link: '%25s'%22,%0A%09%09%09%09%09%09%09%09url,%0A%09%09%09%09%09%09%09%09playUrl%0A%09%09%09%09%09%09%09)%0A%09%09%09%09%09%09);%0A%0A%09%09%09%09%09%09return this.shouldOverrideUrlLoading(view, playUrl);%0A%09%09%09%09%09%7D%0A%0A
 %09%09%09%09%09Log.e(LOGTA

add Play Market workaround for AdView