// ==UserScript==

// @name           Google direct Link

// @namespace      http://userscripts.org/users/tommy

// @author         .

// @description    remove google search and image link redirection to speed up your browsing and hide referrer

// @include        *.google.*/*

// @version        0.0.5

// @run-at         document-start

// ==/UserScript==



var hideReferer = true,

    newTab = true,

    showCache = false;


var ua = navigator.userAgent,

    wK = ua.toLowerCase().indexOf('webkit') > -1,

    S = location.protocol === 'https:';


function addEvent(a, b, c) {

    if (a.addEventListener) {

        a.addEventListener(b, c, false);

    }

}


function removeEvent(a, b, c) {

    if (a.removeEventListener) {

        a.removeEventListener(b, c, false);

    }

}


if (Object.defineProperty) {

    Object.defineProperty(window, 'rwt', {

        value: function() {},

        writable: false,

        configurable: false

    })

} else {

    window.__defineGetter__('rwt', function() {

        return function() {}

    })

}


if (showCache) {

    addEvent(window, 'DOMNodeInserted', cache);

}


function cache() {

    var cc = document.querySelectorAll('.vshid');

    if (cc) {

        for (var i = 0; i < cc.length; ++i) {

            cc[i].style.display = 'inline';

        }

    }

}


function proxy(e) {

    if (e && e.localName == 'a' && (e.className == 'l' || e.className == 'rg_l' || e.parentNode.className == 'vshid' || e.parentNode.className == 'gl')) {

        var m = /&imgurl=([^&]+)/.exec(e.href);

        if (m) e.href = m[1];

        if (newTab) e.target = "_blank";

        if (hideReferer) {

            if (wK) {

                e.rel = "noreferrer";

            } else if (!S && e.href.indexOf('http-equiv="refresh"') == -1) {

                e.href = 'data:text/html, <meta http-equiv="refresh" content="0;URL=' + encodeURIComponent(e.href) + '" charset="utf-8">';

            }

        }

    }

}


function doStuff(e) {

    var a = e.target;

    if (a.localName != 'a') {

        for (; a; a = a.parentNode){

            proxy(a);

        }

    } else {

        proxy(a);

    }

}


addEvent(window, "mousedown", doStuff);