//   ==UserScript==
//   @name          Multi PTC Cryptorotator
//   @namespace     Multi PTC Cryptorotator
//   @version       0.9
//   @description Multi PTC Cryptorotator (All Ad Faucets Included)
//   @author        engageub
//   @match         https://www.coinpayu.com/*
//   @connect       www.coinpayu.com
//   @noframes
//   @grant         GM_xmlhttpRequest
//   @grant         GM_setValue
//   @grant         GM_getValue
// ==/UserScript==
(function() {
     'use strict';
     window.alert = function() {};
     window.confirm = function() {};
     //Do not execute if window is a pop up
     if(window.name){
         return;
     }
     var count = 0;
     var clicked = false;
    //Enter your login and password below, if you like to Autologin. Be careful
while providing passwords,
    //else you may get your accounts locked
   var websiteData = [
          {url   :   "https://adbtc.top/index/earn", login: "", password: ""},
          {url   :   "https://adbch.top/surf/browse", login: "", password: ""},
          {url   :   "https://adltc.cc/surf", login: "", password: ""},
          {url   :   "https://adeth.cc/surf", login: "", password: ""},
          {url   :   "https://addoge.cc/surf", login: "", password: ""},
          {url   :   "https://adzec.cc/surf", login: "", password: ""},
          {url   :   "https://adxrp.cc/surf", login: "", password: ""},
          {url   :   "https://addash.cc/surf", login: "", password: ""},
          {url   :   "https://www.adbch.cc/surf", login: "", password: ""},
          {url   :   "https://adsdgb.com/surf", login: "", password: ""},
          {url   :   "https://surf-trx.com/surf", login: "", password: ""},
          {url   :   "https://faucetpay.io/ptc", login: "", password: ""},
          {url   :   "https://www.coinpayu.com/dashboard/ads_surf", login: "", password:
""},
          {url : "https://everve.net/tasks/traffic-exchange/", login: "", password:
""},
     ];
    var websiteMap = [{
            website: ["adltc.cc", "adeth.cc", "addoge.cc", "adzec.cc", "adxrp.cc",
"adbch.cc", "addash.cc", "adsdgb.com", "surf-trx"],
            defaultButtonSelectors: ["#index-banner .btn-large", ".btn.btn-
primary.btn-large"],
            loginSelectors: ["input[type=text]", "input[type=password]", ".btn.btn-
default"],
            captchaButtonSubmitSelector: [".btn.btn-default"],
            allMessageSelectors: ["h3", "#pre > p", "#cf-error-details"],
            additionalFunctions: closeRepeatingAds,
            messagesToCheckBeforeMovingToNextUrl: ["No ads", "Links in surfing are
over", "Error 520"]
        },
        {
            website: "adbtc.top",
            defaultButtonSelectors: [".btn.btn-primary.btn-large"],
            loginSelectors: ["input[type=text]", "input[type=password]",
"input[type=submit]"],
            captchaButtonSubmitSelector: [".btn.btn-default",
"input[type=submit]"],
            allMessageSelectors: ["p.flow-text", "#pre > p"],
            additionalFunctions: adbtcTop,
            messagesToCheckBeforeMovingToNextUrl: ["You have watched", "Links in
surfing are over"]
        },
        {
            website: "adbch.top",
            defaultButtonSelectors: ["#btstart"],
            loginSelectors: ["#mail", "#password", ".btn-large"],
            captchaButtonSubmitSelector: [".btn.btn-default", ".btn-large"],
            allMessageSelectors: ["h5"],
            additionalFunctions: adbtcTop,
            messagesToCheckBeforeMovingToNextUrl: ["You have looked at all the
sites at the moment"]
        },
        {
            website: "faucetpay.io",
            defaultButtonSelectors: [".card-body .btn.btn-primary.btn-block"],
            loginSelectors: ["input[type=text]", "input[type=password]",
"button[type=submit]"],
            captchaButtonSubmitSelector: [".btn.btn-lg.btn-danger", ".btn.btn-
primary.btn-block"],
            allMessageSelectors: [".alert.alert-info"],
            messagesToCheckBeforeMovingToNextUrl: ["There are no ads available"],
            additionalFunctions: faucetpay,
            timeoutbeforeMovingToNextUrl: 380000
        },
        {
            website: "coinpayu.com",
            defaultButtonSelectors: [".btn.btn-primary.btn-large"],
            loginSelectors: ["input[type=email]", "input[type=password]", "body >
div:nth-child(1) > div > main > div > button"],
            captchaButtonSubmitSelector: [".btn.btn-default",
"input[type=submit]"],
            allMessageSelectors: ["p.flow-text", "#pre > p"],
            additionalFunctions: coinpayu,
            messagesToCheckBeforeMovingToNextUrl: ["You have watched", "Links in
surfing are over"],
            timeoutbeforeMovingToNextUrl: 500000
        },
        {
             website: "everve.net",
             additionalFunctions: everve,
             timeoutbeforeMovingToNextUrl: 120000
        },
        ];
    //Check if a string is present in Array
    String.prototype.includesOneOf = function(arrayOfStrings) {
        //If this is not an Array, compare it as a String
        if (!Array.isArray(arrayOfStrings)) {
            return this.toLowerCase().includes(arrayOfStrings.toLowerCase());
        }
        for (var i = 0; i < arrayOfStrings.length; i++) {
            if (this.toLowerCase().includes(arrayOfStrings[i].toLowerCase())) {
                return true;
            }
        }
        return false;
    }
    var websiteDataValues = {};
    //Get selector details from the websiteMap
    for (let value of Object.values(websiteMap)) {
        if (window.location.href.includesOneOf(value.website)) {
            websiteDataValues.inputTextSelector = value.inputTextSelector;
            websiteDataValues.inputTextSelectorButton =
value.inputTextSelectorButton;
            websiteDataValues.defaultButtonSelectors =
value.defaultButtonSelectors;
            websiteDataValues.claimButtonSelector = value.claimButtonSelector;
            websiteDataValues.captchaButtonSubmitSelector =
value.captchaButtonSubmitSelector;
            websiteDataValues.loginSelectors = value.loginSelectors;
            websiteDataValues.loginCaptcha = value.loginCaptcha;
            websiteDataValues.allMessageSelectors = value.allMessageSelectors;
            websiteDataValues.messagesToCheckBeforeMovingToNextUrl =
value.messagesToCheckBeforeMovingToNextUrl;
            websiteDataValues.withdrawPageUrl = value.withdrawPageUrl;
            websiteDataValues.withdrawEnabled = value.withdrawEnabled;
            websiteDataValues.balanceSelector = value.balanceSelector;
            websiteDataValues.withdrawMinAmount = value.withdrawMinAmount;
            websiteDataValues.successMessageSelectors =
value.successMessageSelectors;
            websiteDataValues.additionalFunctions = value.additionalFunctions;
            websiteDataValues.timeoutbeforeMovingToNextUrl =
value.timeoutbeforeMovingToNextUrl;
            break;
        }
}
var login = "";
var password = "";
for (let value of Object.values(websiteData)) {
    count = count + 1;
    if (value.url.includes(window.location.hostname)) {
        websiteDataValues.url = value.url;
        login = value.login;
        password = value.password;
        break;
    }
}
//Get the next Url from the website data map
async function getNextUrl() {
    //Go to the beginning if the end of the array is reached
    if (count >= websiteData.length) {
        websiteDataValues.nextUrl = websiteData[0].url;
    } else {
        websiteDataValues.nextUrl = websiteData[count].url;
    }
    //Use case for overrding next Url
    if (websiteDataValues.overrideNextUrl) {
        websiteDataValues.nextUrl = websiteDataValues.overrideNextUrl;
    }
    //Ping Test to check if a website is up before proceeding to next url
    pingTest(websiteDataValues.nextUrl);
}
var isNextUrlReachable = false;
//Get the next Url from the website
function pingTest(websiteUrl) {
    console.log(websiteUrl);
    GM_xmlhttpRequest({
        method: "GET",
        url: websiteUrl,
        headers: {
            "Content-Type": "application/x-www-form-urlencoded"
        },
        timeout: 5000,
        onload: function(response) {
            //Website is reachable
            isNextUrlReachable = true;
        },
        onerror: function(e) {
            count = count + 1;
            getNextUrl();
        },
        ontimeout: function() {
            count = count + 1;
            getNextUrl();
        },
        });
    async function delay(ms) {
        return new Promise(resolve => setTimeout(resolve, ms))
    }
    var movingToNextUrl = false;
    async function goToNextUrl() {
        if (!movingToNextUrl) {
            movingToNextUrl = true;
            getNextUrl();
            while (!isNextUrlReachable) {
                await delay(3000);
            }
            window.location.href = websiteDataValues.nextUrl;
        }
    }
    //Default Setting: After 180 seconds go to next Url
    var delayBeforeMovingToNextUrl = 180000;
    if (websiteDataValues.timeoutbeforeMovingToNextUrl) {
        delayBeforeMovingToNextUrl =
websiteDataValues.timeoutbeforeMovingToNextUrl;
    }
    setTimeout(function() {
        goToNextUrl();
    }, delayBeforeMovingToNextUrl);
    //Wait for 5 seconds if it's in dashboard,
    if ((!window.location.href.includes("coinpayu")) &&
(window.location.href.includes("dashboard") ||
window.location.href.includes("page/user-admin"))) {
        setTimeout(function() {
            if (websiteDataValues.url) {
                window.location.href = websiteDataValues.url;
            }
        }, 5000);
    }
    //Returns true if message selectors are present
    function messageSelectorsPresent() {
        if (websiteDataValues.allMessageSelectors) {
            for (var j = 0; j < websiteDataValues.allMessageSelectors.length; j++)
{
                for (var k = 0; k <
document.querySelectorAll(websiteDataValues.allMessageSelectors[j]).length; k++) {
                    if
(document.querySelectorAll(websiteDataValues.allMessageSelectors[j])[k] &&
(document.querySelectorAll(websiteDataValues.allMessageSelectors[j])
[k].innerText.includesOneOf(websiteDataValues.messagesToCheckBeforeMovingToNextUrl)
||
(document.querySelectorAll(websiteDataValues.allMessageSelectors[j])[k].value &&
document.querySelectorAll(websiteDataValues.allMessageSelectors[j])
[k].value.includesOneOf(websiteDataValues.messagesToCheckBeforeMovingToNextUrl))))
{
                        return true;
                    }
                }
            }
        }
        return false;
    }
     function closeRepeatingAds() {
        //Check if previous Ad is Same as Current Ad and Skip the Ad
        if (unsafeWindow.viewurl) {
            if (GM_getValue("adUrl") && GM_getValue("adUrl") ==
unsafeWindow.viewurl) {
                //Skip the Ad
                document.querySelector(".card > a").click();
                movingToNextUrl = true;
            } else {
                GM_setValue("adUrl", unsafeWindow.viewurl);
            }
     function adbtcTop() {
        // For adbtc, special use case
        if (document.querySelector(".collection-item.hoverable") &&
document.querySelector(".collection-item.hoverable").innerText.includes("Sign in"))
{
            document.querySelector(".collection-item.hoverable").click();
        }
        for(let j=0; j<document.querySelectorAll(".dropdown-content.select-
dropdown").length; j++){
            for(let i=0; i<document.querySelectorAll(".dropdown-content.select-
dropdown")[j].getElementsByTagName("li").length; i++){
                if( document.querySelectorAll(".dropdown-content.select-dropdown")
[j].getElementsByTagName("li")[i].innerText.includes("hCaptcha") &&
                   !(document.querySelectorAll(".dropdown-content.select-dropdown")
[j].getElementsByTagName("li")[i].getAttribute("class") &&
                     document.querySelectorAll(".dropdown-content.select-dropdown")
[j].getElementsByTagName("li")[i].getAttribute("class").includes("selected"))){
                    document.querySelectorAll(".dropdown-content.select-dropdown")
[j].getElementsByTagName("li")[i].click();
                    break;
                }
            }
        }
        if (document.querySelector("div.col.s4> a") && !
document.querySelector("div.col.s4> a").className.includes("hide")) {
            document.querySelector("div.col.s4> a").click();
        }
        if (window.location.href == "https://adbtc.top/index/" ||
window.location.href == "https://adbtc.top/index") {
            window.location.href = "https://adbtc.top/index/earn";
        }
        if (window.location.href == "https://adbtc.top/index/earn" ||
window.location.href == "https://adbtc.top/index/earn/") {
            window.location.href =
document.querySelectorAll(".collection.menu.colmen.nomarg > a")[0].href;
        }
        //Use case for adbtc
        if (window.location.href.includes("adbtc.top/surf/browse")) {
            websiteDataValues.overrideNextUrl =
document.querySelectorAll(".collection.menu.colmen.nomarg > a")[1].href;
        }
        setInterval(function() {
            //Skip the Ad if the Ad closes on it's own for adbtc due to Adblocker
or the script itself
            if (document.querySelector("#nenado") && !
document.querySelector("#nenado").className.includes("hide") &&
                document.querySelector("#nenado").innerText.includes("You closed
page")) {
                document.querySelector("#nenado > a").click();
            }
        }, 10000);
    function faucetpay() {
        //Block Pop Ups
        unsafeWindow.open = function(){};
        if(document.querySelector("body").innerText.includes("This ad does not
exist or has expired")){
            window.location.href = "https://faucetpay.io/ptc/";
        }
    function everve() {
        var oldfunction = unsafeWindow.open;
        var windowName = "";
        function newFunction(params1, params2) {
            console.log(params1 + params2);
            if (!params2 || params2 == "_blank") {
                windowName = "EvervepopUpWindow";
            } else {
                 windowName = params2;
             }
             return oldfunction(params1, windowName);
        };
        unsafeWindow.open = newFunction;
        unsafeWindow.onbeforeunload = function() {
            unsafeWindow.open('', windowName).close();
        };
        var clicked = false;
        var interval = setInterval(function(){
             if(document.querySelectorAll(".table_row[role=row]").length == 0){
                 clearInterval(interval);
                 goToNextUrl();
                 return;
             }
            if(!clicked){
                for(let i=0; i<
document.querySelectorAll(".table_row[role=row]").length;i++){
                    if(document.querySelectorAll(".table_row[role=row]")
[i].style.display != "none"){
                        document.querySelectorAll(".table_row[role=row] .btn-
group")[i].querySelector("a").click();
                        clicked = true;
                        break;
                    }
                }
            }else{
                 if( document.querySelector("#next_button").style.display != "none")
{
                     document.querySelector("#next_button > button").click();
                     clicked = false;
                 }
             }
        },5000);
    function coinpayu() {
        var oldfunction = unsafeWindow.open;
        var windowName = "";
        function newFunction(params1, params2) {
             console.log(params1 + params2);
             if (!params2 || params2 == "_blank") {
                windowName = "popUpWindow";
            } else {
                windowName = params2;
            }
            if (window.location.href ==
"https://www.coinpayu.com/dashboard/ads_active") {
                // opts = "height=800,width=800";
            }
             console.log("WindowName is::" + windowName);
             return oldfunction(params1, windowName);
        };
        unsafeWindow.open = newFunction;
        unsafeWindow.onbeforeunload = function() {
            unsafeWindow.open('', windowName).close();
        };
        var viewingAd = false;
        var i = 0;
        setInterval(function() {
             //Check if recaptcha or Hcaptcha is selected
            if (document.querySelector(".form-group.form-code.captcha-type > div
span.recaptcha-checked") &&
                (document.querySelector(".form-group.form-code.captcha-type > div
span.recaptcha-checked").innerText.includes("Hcaptcha") ||
                 document.querySelector(".form-group.form-code.captcha-type > div
span.recaptcha-checked").innerText.includes("GoogleRecaptcha"))) {
             } else {
                 //Select either of Hcaptcha or Recaptcha
                for (let i = 0; i < document.querySelectorAll(".form-group.form-
code.captcha-type > div span").length; i++) {
                    if (document.querySelectorAll(".form-group.form-code.captcha-
type > div span")[i].innerText.includes("Hcaptcha") ||
                        document.querySelectorAll(".form-group.form-code.captcha-
type > div span")[i].innerText.includes("GoogleRecaptcha")) {
                        document.querySelectorAll(".form-group.form-code.captcha-
type > div span")[i].click();
                        break;
                    }
            let count = document.querySelectorAll("[class='clearfix container-fluid
bgwhite'] [title] span").length;
            if (i < count && count > 0 && !viewingAd) {
                viewingAd = true;
                //Click
                document.querySelectorAll("[class='clearfix container-fluid
bgwhite'] [title] span")[i].click();
                setTimeout(function() {
                    //Wait for completion
                    var waitForCompletionInterval = setInterval(function() {
                        // ads has already been clicked
                        if (document.querySelector(".alert-div.alert-red") &&
(document.querySelector(".alert-div.alert-red").innerText.includes("advertisement
does not") ||
document.querySelector(".alert-div.alert-red").innerText.includes("ads has already
been clicked"))) {
                            var tmp = document.querySelector(".alert-div.alert-
red").innerHTML;
                            document.querySelector(".alert-div.alert-
red").innerHTML = tmp.replaceAll("advertisement does not", "")
                            document.querySelector(".alert-div.alert-
red").innerHTML = tmp.replaceAll("ads has already been clicked", "")
                            i = i + 1;
                            unsafeWindow.open('', windowName).close();
                            viewingAd = false;
                            clearInterval(waitForCompletionInterval);
                        }
                        if (document.querySelector("div.warning-ags") &&
                            (document.querySelector("div.warning-
ags").innerText.includes("You closed the advertisement too soon") ||
                             document.querySelector("div.warning-
ags").innerText.includes("The advertisement is not opened correctly"))){
                            i = i + 1;
                            unsafeWindow.open('', windowName).close();
                            viewingAd = false;
                            clearInterval(waitForCompletionInterval);
                        }
                        if (count != document.querySelectorAll("[class='clearfix
container-fluid bgwhite'] [title] span").length) {
                            //Ad viewed
                            //Close the window
                            setTimeout(function() {
                                unsafeWindow.open('', windowName).close();
                                viewingAd = false;
                                clearInterval(waitForCompletionInterval);
                            }, 3000);
                        }
                    }, 5000);
                }, 7000);
            }
            if ((count == 0 || count == i) && !viewingAd) {
                //Go to next page
                i = 0;
                var pageCount = document.querySelectorAll("div.coinpayu-pagination
> ul > li").length;
                if (pageCount >= 1 && document.querySelectorAll("div.coinpayu-
pagination > ul > li")[pageCount - 1].className == "active") {
                    //Stop or go to next url
                    console.log("Ads End");
                    goToNextUrl();
                } else if (pageCount >= 1) {
                    //go to next page
                    document.querySelectorAll("div.coinpayu-pagination > ul > li")
[pageCount - 1].click();
                }
        }, 5000);
    var stopSolvingCaptcha = false;
    function checkLoginSelectors() {
        if (websiteDataValues.loginSelectors) {
            //Check if all login selectors are present
            let count = 0;
            for (let i = 0; i < websiteDataValues.loginSelectors.length; i++) {
                if (document.querySelector(websiteDataValues.loginSelectors[i])) {
                    count++;
                }
            if (count == websiteDataValues.loginSelectors.length) {
                if (login.length > 0 && password.length > 0) {
                    //Input Login
document.querySelector(websiteDataValues.loginSelectors[0]).value = login;
                    //Input Password
document.querySelector(websiteDataValues.loginSelectors[1]).value = password;
                } else {
                    stopSolvingCaptcha = true;
                }
            } else {
                stopSolvingCaptcha = true;
            }
        } else {
            stopSolvingCaptcha = true;
        }
    setTimeout(function() {
        checkLoginSelectors();
        if (websiteDataValues.additionalFunctions) {
            websiteDataValues.additionalFunctions();
        }
        //Look for all the default messages or errors before proceeding to next url
        //For other languages difference in the length of the strings can be
compared or visibility of the style element
        if (!movingToNextUrl && messageSelectorsPresent()) {
            goToNextUrl();
        }
        //Check for all the default button selectors and click
        //This will only click the first selector found, so mention the selectors
with parent element wherever required
        if (!movingToNextUrl && websiteDataValues.defaultButtonSelectors) {
            for (var i = 0; i < websiteDataValues.defaultButtonSelectors.length; i+
+) {
                if
(document.querySelector(websiteDataValues.defaultButtonSelectors[i])) {
document.querySelector(websiteDataValues.defaultButtonSelectors[i]).click();
                    break;
                }
            }
        }
        //Input the address and click the login button
        if (!movingToNextUrl &&
document.querySelector(websiteDataValues.inputTextSelector)) {
            document.querySelector(websiteDataValues.inputTextSelector).value =
websiteDataValues.address;
            setTimeout(function() {
                if (websiteDataValues.inputTextSelectorButton &&
document.querySelector(websiteDataValues.inputTextSelectorButton)) {
document.querySelector(websiteDataValues.inputTextSelectorButton).click();
                }
            }, 5000);
        }
        //Click the form button after solving captcha
        //Works for both recaptcha and hcaptcha
        var clicked = false;
        var captchaInterval = setInterval(function() {
            if (!stopSolvingCaptcha || !window.location.href.includes("login")) {
                try {
                    if (!clicked && unsafeWindow.grecaptcha &&
unsafeWindow.grecaptcha.getResponse().length > 0) {
                        for (let i = 0; i <
websiteDataValues.captchaButtonSubmitSelector.length; i++) {
                             if
(document.querySelector(websiteDataValues.captchaButtonSubmitSelector[i])) {
document.querySelector(websiteDataValues.captchaButtonSubmitSelector[i]).click();
                              }
                          }
                          clicked = true;
                          clearInterval(captchaInterval);
                          setTimeout(function() {
                              if (messageSelectorsPresent()) {
                                  goToNextUrl();
                              }
                          }, 5000);
                      }
                  } catch (e) {
                  for (var hc = 0; hc < document.querySelectorAll("iframe").length;
hc++) {
                    if (!clicked && document.querySelectorAll("iframe")[hc] &&
                        document.querySelectorAll("iframe")[hc].getAttribute("data-
hcaptcha-response") &&
                        document.querySelectorAll("iframe")[hc].getAttribute("data-
hcaptcha-response").length > 0) {
                        for (let i = 0; i <
websiteDataValues.captchaButtonSubmitSelector.length; i++) {
                            if
(document.querySelector(websiteDataValues.captchaButtonSubmitSelector[i])) {
document.querySelector(websiteDataValues.captchaButtonSubmitSelector[i]).click();
                            }
                        }
                        clicked = true;
                        clearInterval(captchaInterval);
                        setTimeout(function() {
                            if (messageSelectorsPresent()) {
                                goToNextUrl();
                            }
                        }, 5000);
                    }
                }
            }
          }, 5000);
    }, 5000);
    window.onbeforeunload = function() {
        if (unsafeWindow.myWindow) {
            unsafeWindow.myWindow.close();
        }
        if (unsafeWindow.coinwin) {
            var tmp = unsafeWindow.coinwin;
            unsafeWindow.coinwin = {};
            tmp.close();
        }
    };
})();