//<script type="text/javascript">
"use strict"

if ("undefined" == typeof isPowerLaptopIp) {
    var isPowerLaptopIp = false;
}

if ("undefined" == typeof homepageSlidesObject) {
    var homepageSlidesObject = [
  {
    "url": "https://www.powerlaptop.ro/categories/hdd-laptop/",
    "imgDesktop": "https://www.powerlaptop.ro/assets/images/banner-hdd-caddy-main-page-powerlaptop.jpg",
    "imgMobile": "https://www.powerlaptop.ro/assets/images/banner-hdd-caddy-main-page-powerlaptop.jpg",
    "alt": "Laptop HDD Caddy. Rack pentru montarea HDD in locul unitatii optice"
  },
  {
    "url": "https://www.powerlaptop.ro/categories/pasta-termoconductoare/",
    "imgDesktop": "https://www.powerlaptop.ro/assets/images/banner-pasta-termica-main-page-powerlaptop.jpg",
    "imgMobile": "https://www.powerlaptop.ro/assets/images/banner-pasta-termica-main-page-powerlaptop.jpg",
    "alt": "Pasta termoconductoare pentru procesor si placa video"
  },
  {
    "url": "https://www.powerlaptop.ro/categories/filtre-confidentialitate/",
    "imgDesktop": "https://www.powerlaptop.ro/product_images/uploaded_images/banner-privacy-filter.jpg",
    "imgMobile": "https://www.powerlaptop.ro/product_images/uploaded_images/banner-privacy-filter.jpg",
    "alt": "Filtre Confidentialitate - Folie Privacy pentru laptop diverse dimensiuni"
  },
  {
    "url": "https://www.powerlaptop.ro/categories/baterie-laptop/",
    "imgDesktop": "https://www.powerlaptop.ro/assets/images/banner_baterii.png",
    "imgMobile": "https://www.powerlaptop.ro/assets/images/banner_baterii.png",
    "alt": "Baterii Laptop"
  },
  {
    "url": "https://www.powerlaptop.ro/categories/incarcator-laptop/",
    "imgDesktop": "https://www.powerlaptop.ro/assets/images/banner_incarcatoare.png",
    "imgMobile": "https://www.powerlaptop.ro/assets/images/banner_incarcatoare.png",
    "alt": "Incarcatoare Laptop"
  }
];
}

if ("undefined" == typeof frontendWordsToReplace) {
    var frontendWordsToReplace = {"wordsToReplace":{"wr9149096917576":{"from":"Replacement","to":"Compatibil"},"wr4726997191965":{"from":"replacement","to":"compatibil"},"wr2101731974195":{"from":"REPLACEMENT","to":"COMPATIBIL"},"wr1170729756194":{"from":"High copy","to":"Copie calitate premium"},"wr0175124129729":{"from":"High Copy","to":"Copie Calitate Premium"},"wr8719415737198":{"from":"HIGH COPY","to":"COPIE CALITATE PREMIUM"},"wr9511597921472":{"from":"high copy","to":"copie calitate premium"},"wr5197241924794":{"from":"square shape","to":"forma patrata"},"wr9144373935701":{"from":"Square shape","to":"Forma patrata"},"wr1114571973589":{"from":"Square Shape","to":"Forma Patrata"},"wr4308341597917":{"from":"SQUARE SHAPE","to":"FORMA PATRATA"},"wr1859721198574":{"from":"display","to":"ecran"},"wr2426047173318":{"from":"Display-urile","to":"Ecranele"},"wr7138463231132":{"from":"DISPLAY-URILE","to":"ECRANELE"},"wr1233742187136":{"from":"display-urile","to":"ecranele"},"wr3871815736627":{"from":"Display","to":"Ecran"},"wr1832670635841":{"from":"DISPLAY","to":"ECRAN"},"wr7734128321691":{"from":"display","to":"ecran"}},"googleAdsOnly":true,"desktop":true,"mobile":true};
}



Date.prototype.addDays = function(days) {
    var date = new Date(this.valueOf());
    date.setDate(date.getDate() + days);
    return date;
};

String.prototype.hexEncode = function(){
    var hex, i;

    var result = "";
    for (i=0; i<this.length; i++) {
        hex = this.charCodeAt(i).toString(16);
        result += ("000"+hex).slice(-4);
    }

    return result
};

String.prototype.hexDecode = function(){
    var j;
    var hexes = this.match(/.{1,4}/g) || [];
    var back = "";
    for(j = 0; j<hexes.length; j++) {
        back += String.fromCharCode(parseInt(hexes[j], 16));
    }

    return back;
};

var PowerLaptop = function(){

    var _self = this,
        $2 = jQuery.noConflict(),
        $body = $2("body");
    _self.totalCartProducts = 0;
    _self.waiters = {};
    _self.repeaters = {};
    _self.blueColor = "#109dd7";
    _self.orangeColor = "#ff4800";
    _self.redColor = "#970000";
    _self.scrollAmmount = $2(window).scrollTop();
    _self.apiKey = "Q34t54ohy3mtcpc543j4xjp593835hy653ft5d4";
    _self.root = window.location.protocol+"//"+window.location.host;
    _self.apiUrl = "https://api33t4idth45.powerlaptop.ro";
    _self.api = {
        "categories": _self.apiUrl+"/categories.php",
        "search": _self.apiUrl+"/search.php?keywords=",
        "search2": _self.apiUrl+"/search.php",
        "filters": _self.apiUrl+"/filters.php",
        "footer": _self.apiUrl+"/footerContent.php",
        "product": _self.apiUrl+"/product.php",
        "gift": _self.apiUrl+"/powergift/",
        "fan": _self.apiUrl+"/fan/",
        "localities": _self.apiUrl+"/localities/",
        "powerblacklist": _self.apiUrl+"/powerblacklist/",
        "powersell": _self.apiUrl+"/powersell/",
        "stocuri": _self.apiUrl+"/stocuri/",
        "powernotice": _self.apiUrl+"/powernotice/",
        "cart": _self.root+"/cos.php"
    };
    _self.categoryId = 0;
    _self.categoryFilters = {};
    _self.categoryCategories = [];
    _self.categoryBrands = [];
    _self.categoryGames = [];
    _self.categoryModels = [];
    _self.categoryFiltersActive = false;
    _self.powerLaptopAddress = "Str. Sfantul Niceta, Nr. 6, Bucuresti, Bucuresti, 023744, Romania";
    _self.isPowerLaptopIp = ("undefined" != typeof isPowerLaptopIp) ? isPowerLaptopIp : false;
    _self.navMenuHover = false;

    _self.isHomepage = ('/' == window.location.pathname) ? true : false;
    _self.isCategory = (window.location.pathname.indexOf("/categories") > -1) ? true : false;
    _self.isCheckout = (window.location.pathname.indexOf("checkout.php") > -1) ? true : false;
    _self.isCart= (window.location.pathname.indexOf("cart.php") > -1 || window.location.pathname.indexOf("cos.php") > -1) ? true : false;
    _self.isProduct= (window.location.pathname.indexOf("/products") > -1) ? true : false;
    _self.isPages = (window.location.pathname.indexOf("/pages") > -1) ? true : false;
    _self.isOrderSuccess = (window.location.pathname.indexOf("/finishorder.php") > -1) ? true : false;
    _self.isAccount = (window.location.pathname.indexOf("/account.php") > -1) ? true : false;
    _self.isAccountIndex = (window.location.pathname.indexOf("/account.php") > -1 && $2("body").find("[data-layout='accountIndex']").length > 0) ? true : false;
    _self.isLogin = (window.location.href.indexOf("/login.php") > -1) ? true : false;
    _self.isCreatingAccount = (window.location.href.indexOf("create_account") > -1) ? true : false;
    _self.isSavingNewAccount = (window.location.href.indexOf("save_new_account") > -1) ? true : false;
    _self.isUpdatingAccount = (window.location.href.indexOf("update_account") > -1) ? true : false;

    _self.isViewOrderList = (window.location.href.indexOf("action=order_status") > -1) ? true : false;
    _self.isViewOrderDetails = (window.location.href.indexOf("action=view_order") > -1) ? true : false;
    _self.isViewShippingAddress = (window.location.href.indexOf("action=address_book") > -1) ? true : false;
    _self.isAddShippingAddress = (window.location.href.indexOf("action=add_shipping_address") > -1) ? true : false;
    _self.isEditShippingAddress = (window.location.href.indexOf("action=edit_shipping_address") > -1) ? true : false;
    _self.isSaveNewShippingAddress = (window.location.href.indexOf("action=save_new_shipping_address") > -1) ? true : false;
    _self.isReturnForm = (window.location.href.indexOf("formular-retur.html") > -1) ? true : false;
    _self.isBrands = (window.location.pathname.indexOf("/brands") > -1) ? true : false;
    
    _self.filters = {
        brand: "",
        brandName: "",
        gama: "",
        model: ""
    };


    _self.customerData = {
        isLoggedIn: ("undefined" != typeof isLoggedIn) ? isLoggedIn : false,
        customerId : ("undefined" != typeof customerId ) ? customerId : 0,
        customerData  : ("undefined" != typeof customerData) ? customerData["data"] : {},
        resellerData  : ("undefined" != typeof resellerData) ? resellerData["data"] : {},
        isReseller  : ("undefined" != typeof isReseller) ? isReseller :false,
        resellerConfig : ("undefined" != typeof resellerConfig) ? resellerConfig["data"] : {}
    };

    _self.isLoggedIn = (true == _self.customerData.isLoggedIn) ? true : false;
    _self.isReseller = (true == _self.customerData.isReseller) ? true : false;
    _self.customerId = ("undefined" != typeof _self.customerData.customerId && !isNaN(_self.customerData.customerId) && null !== _self.customerData.customerId && !!_self.customerData.customerId) ? _self.customerData.customerId : 0;


    if ((window.location.pathname.indexOf("/cauta") > -1)
        || (window.location.pathname.indexOf("/search.php") > -1)) {
        _self.isSearch = true;
    } else {
        _self.isSearch = false;
    }
    _self.isJson = function(str) {
        try {
            JSON.parse(str);
        } catch (e) {
            return false;
        }
        return true;
    };
    _self.isBase64 = function (str) {
        try {
            window.atob(str);
        } catch (e) {
            return false;
        }
        return true;
    };
    _self.uuid = function() {
        return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
            var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
            return v.toString(16);
        });
    };
    _self.arrayShuffle = function(arr){
        var j, x, i;
        for (i = arr.length - 1; i > 0; i--) {
            j = Math.floor(Math.random() * (i + 1));
            x = arr[i];
            arr[i] = arr[j];
            arr[j] = x;
        }
        return arr;
    };

    _self.loadImages = function(){
        if ("undefined" != typeof $2.fn.Lazy) {
            console.log("loading images");
            $2("body").find("img.lazy").not(".loaded").Lazy({
                scrollDirection: 'both',
                effect: 'fadeIn',
                effectTime: 500,
                threshold: 0,
                visibleOnly: true,
                // placeholder: "data:image/gif;base64,R0lGODlhIAAgAPMAAP///wAAAMbGxoSEhLa2tpqamjY2NlZWVtjY2OTk5Ly8vB4eHgQEBAAAAAAAAAAAACH+GkNyZWF0ZWQgd2l0aCBhamF4bG9hZC5pbmZvACH5BAAKAAAAIf8LTkVUU0NBUEUyLjADAQAAACwAAAAAIAAgAAAE5xDISWlhperN52JLhSSdRgwVo1ICQZRUsiwHpTJT4iowNS8vyW2icCF6k8HMMBkCEDskxTBDAZwuAkkqIfxIQyhBQBFvAQSDITM5VDW6XNE4KagNh6Bgwe60smQUB3d4Rz1ZBApnFASDd0hihh12BkE9kjAJVlycXIg7CQIFA6SlnJ87paqbSKiKoqusnbMdmDC2tXQlkUhziYtyWTxIfy6BE8WJt5YJvpJivxNaGmLHT0VnOgSYf0dZXS7APdpB309RnHOG5gDqXGLDaC457D1zZ/V/nmOM82XiHRLYKhKP1oZmADdEAAAh+QQACgABACwAAAAAIAAgAAAE6hDISWlZpOrNp1lGNRSdRpDUolIGw5RUYhhHukqFu8DsrEyqnWThGvAmhVlteBvojpTDDBUEIFwMFBRAmBkSgOrBFZogCASwBDEY/CZSg7GSE0gSCjQBMVG023xWBhklAnoEdhQEfyNqMIcKjhRsjEdnezB+A4k8gTwJhFuiW4dokXiloUepBAp5qaKpp6+Ho7aWW54wl7obvEe0kRuoplCGepwSx2jJvqHEmGt6whJpGpfJCHmOoNHKaHx61WiSR92E4lbFoq+B6QDtuetcaBPnW6+O7wDHpIiK9SaVK5GgV543tzjgGcghAgAh+QQACgACACwAAAAAIAAgAAAE7hDISSkxpOrN5zFHNWRdhSiVoVLHspRUMoyUakyEe8PTPCATW9A14E0UvuAKMNAZKYUZCiBMuBakSQKG8G2FzUWox2AUtAQFcBKlVQoLgQReZhQlCIJesQXI5B0CBnUMOxMCenoCfTCEWBsJColTMANldx15BGs8B5wlCZ9Po6OJkwmRpnqkqnuSrayqfKmqpLajoiW5HJq7FL1Gr2mMMcKUMIiJgIemy7xZtJsTmsM4xHiKv5KMCXqfyUCJEonXPN2rAOIAmsfB3uPoAK++G+w48edZPK+M6hLJpQg484enXIdQFSS1u6UhksENEQAAIfkEAAoAAwAsAAAAACAAIAAABOcQyEmpGKLqzWcZRVUQnZYg1aBSh2GUVEIQ2aQOE+G+cD4ntpWkZQj1JIiZIogDFFyHI0UxQwFugMSOFIPJftfVAEoZLBbcLEFhlQiqGp1Vd140AUklUN3eCA51C1EWMzMCezCBBmkxVIVHBWd3HHl9JQOIJSdSnJ0TDKChCwUJjoWMPaGqDKannasMo6WnM562R5YluZRwur0wpgqZE7NKUm+FNRPIhjBJxKZteWuIBMN4zRMIVIhffcgojwCF117i4nlLnY5ztRLsnOk+aV+oJY7V7m76PdkS4trKcdg0Zc0tTcKkRAAAIfkEAAoABAAsAAAAACAAIAAABO4QyEkpKqjqzScpRaVkXZWQEximw1BSCUEIlDohrft6cpKCk5xid5MNJTaAIkekKGQkWyKHkvhKsR7ARmitkAYDYRIbUQRQjWBwJRzChi9CRlBcY1UN4g0/VNB0AlcvcAYHRyZPdEQFYV8ccwR5HWxEJ02YmRMLnJ1xCYp0Y5idpQuhopmmC2KgojKasUQDk5BNAwwMOh2RtRq5uQuPZKGIJQIGwAwGf6I0JXMpC8C7kXWDBINFMxS4DKMAWVWAGYsAdNqW5uaRxkSKJOZKaU3tPOBZ4DuK2LATgJhkPJMgTwKCdFjyPHEnKxFCDhEAACH5BAAKAAUALAAAAAAgACAAAATzEMhJaVKp6s2nIkolIJ2WkBShpkVRWqqQrhLSEu9MZJKK9y1ZrqYK9WiClmvoUaF8gIQSNeF1Er4MNFn4SRSDARWroAIETg1iVwuHjYB1kYc1mwruwXKC9gmsJXliGxc+XiUCby9ydh1sOSdMkpMTBpaXBzsfhoc5l58Gm5yToAaZhaOUqjkDgCWNHAULCwOLaTmzswadEqggQwgHuQsHIoZCHQMMQgQGubVEcxOPFAcMDAYUA85eWARmfSRQCdcMe0zeP1AAygwLlJtPNAAL19DARdPzBOWSm1brJBi45soRAWQAAkrQIykShQ9wVhHCwCQCACH5BAAKAAYALAAAAAAgACAAAATrEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq+E71SRQeyqUToLA7VxF0JDyIQh/MVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiRMDjI0Fd30/iI2UA5GSS5UDj2l6NoqgOgN4gksEBgYFf0FDqKgHnyZ9OX8HrgYHdHpcHQULXAS2qKpENRg7eAMLC7kTBaixUYFkKAzWAAnLC7FLVxLWDBLKCwaKTULgEwbLA4hJtOkSBNqITT3xEgfLpBtzE/jiuL04RGEBgwWhShRgQExHBAAh+QQACgAHACwAAAAAIAAgAAAE7xDISWlSqerNpyJKhWRdlSAVoVLCWk6JKlAqAavhO9UkUHsqlE6CwO1cRdCQ8iEIfzFVTzLdRAmZX3I2SfZiCqGk5dTESJeaOAlClzsJsqwiJwiqnFrb2nS9kmIcgEsjQydLiIlHehhpejaIjzh9eomSjZR+ipslWIRLAgMDOR2DOqKogTB9pCUJBagDBXR6XB0EBkIIsaRsGGMMAxoDBgYHTKJiUYEGDAzHC9EACcUGkIgFzgwZ0QsSBcXHiQvOwgDdEwfFs0sDzt4S6BK4xYjkDOzn0unFeBzOBijIm1Dgmg5YFQwsCMjp1oJ8LyIAACH5BAAKAAgALAAAAAAgACAAAATwEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq+E71SRQeyqUToLA7VxF0JDyIQh/MVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiUd6GGl6NoiPOH16iZKNlH6KmyWFOggHhEEvAwwMA0N9GBsEC6amhnVcEwavDAazGwIDaH1ipaYLBUTCGgQDA8NdHz0FpqgTBwsLqAbWAAnIA4FWKdMLGdYGEgraigbT0OITBcg5QwPT4xLrROZL6AuQAPUS7bxLpoWidY0JtxLHKhwwMJBTHgPKdEQAACH5BAAKAAkALAAAAAAgACAAAATrEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq+E71SRQeyqUToLA7VxF0JDyIQh/MVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiUd6GAULDJCRiXo1CpGXDJOUjY+Yip9DhToJA4RBLwMLCwVDfRgbBAaqqoZ1XBMHswsHtxtFaH1iqaoGNgAIxRpbFAgfPQSqpbgGBqUD1wBXeCYp1AYZ19JJOYgH1KwA4UBvQwXUBxPqVD9L3sbp2BNk2xvvFPJd+MFCN6HAAIKgNggY0KtEBAAh+QQACgAKACwAAAAAIAAgAAAE6BDISWlSqerNpyJKhWRdlSAVoVLCWk6JKlAqAavhO9UkUHsqlE6CwO1cRdCQ8iEIfzFVTzLdRAmZX3I2SfYIDMaAFdTESJeaEDAIMxYFqrOUaNW4E4ObYcCXaiBVEgULe0NJaxxtYksjh2NLkZISgDgJhHthkpU4mW6blRiYmZOlh4JWkDqILwUGBnE6TYEbCgevr0N1gH4At7gHiRpFaLNrrq8HNgAJA70AWxQIH1+vsYMDAzZQPC9VCNkDWUhGkuE5PxJNwiUK4UfLzOlD4WvzAHaoG9nxPi5d+jYUqfAhhykOFwJWiAAAIfkEAAoACwAsAAAAACAAIAAABPAQyElpUqnqzaciSoVkXVUMFaFSwlpOCcMYlErAavhOMnNLNo8KsZsMZItJEIDIFSkLGQoQTNhIsFehRww2CQLKF0tYGKYSg+ygsZIuNqJksKgbfgIGepNo2cIUB3V1B3IvNiBYNQaDSTtfhhx0CwVPI0UJe0+bm4g5VgcGoqOcnjmjqDSdnhgEoamcsZuXO1aWQy8KAwOAuTYYGwi7w5h+Kr0SJ8MFihpNbx+4Erq7BYBuzsdiH1jCAzoSfl0rVirNbRXlBBlLX+BP0XJLAPGzTkAuAOqb0WT5AH7OcdCm5B8TgRwSRKIHQtaLCwg1RAAAOwAAAAAAAAAAADxiciAvPgo8Yj5XYXJuaW5nPC9iPjogIG15c3FsX3F1ZXJ5KCkgWzxhIGhyZWY9J2Z1bmN0aW9uLm15c3FsLXF1ZXJ5Jz5mdW5jdGlvbi5teXNxbC1xdWVyeTwvYT5dOiBDYW4ndCBjb25uZWN0IHRvIGxvY2FsIE15U1FMIHNlcnZlciB0aHJvdWdoIHNvY2tldCAnL3Zhci9ydW4vbXlzcWxkL215c3FsZC5zb2NrJyAoMikgaW4gPGI+L2hvbWUvYWpheGxvYWQvd3d3L2xpYnJhaXJpZXMvY2xhc3MubXlzcWwucGhwPC9iPiBvbiBsaW5lIDxiPjY4PC9iPjxiciAvPgo8YnIgLz4KPGI+V2FybmluZzwvYj46ICBteXNxbF9xdWVyeSgpIFs8YSBocmVmPSdmdW5jdGlvbi5teXNxbC1xdWVyeSc+ZnVuY3Rpb24ubXlzcWwtcXVlcnk8L2E+XTogQSBsaW5rIHRvIHRoZSBzZXJ2ZXIgY291bGQgbm90IGJlIGVzdGFibGlzaGVkIGluIDxiPi9ob21lL2FqYXhsb2FkL3d3dy9saWJyYWlyaWVzL2NsYXNzLm15c3FsLnBocDwvYj4gb24gbGluZSA8Yj42ODwvYj48YnIgLz4KPGJyIC8+CjxiPldhcm5pbmc8L2I+OiAgbXlzcWxfcXVlcnkoKSBbPGEgaHJlZj0nZnVuY3Rpb24ubXlzcWwtcXVlcnknPmZ1bmN0aW9uLm15c3FsLXF1ZXJ5PC9hPl06IENhbid0IGNvbm5lY3QgdG8gbG9jYWwgTXlTUUwgc2VydmVyIHRocm91Z2ggc29ja2V0ICcvdmFyL3J1bi9teXNxbGQvbXlzcWxkLnNvY2snICgyKSBpbiA8Yj4vaG9tZS9hamF4bG9hZC93d3cvbGlicmFpcmllcy9jbGFzcy5teXNxbC5waHA8L2I+IG9uIGxpbmUgPGI+Njg8L2I+PGJyIC8+CjxiciAvPgo8Yj5XYXJuaW5nPC9iPjogIG15c3FsX3F1ZXJ5KCkgWzxhIGhyZWY9J2Z1bmN0aW9uLm15c3FsLXF1ZXJ5Jz5mdW5jdGlvbi5teXNxbC1xdWVyeTwvYT5dOiBBIGxpbmsgdG8gdGhlIHNlcnZlciBjb3VsZCBub3QgYmUgZXN0YWJsaXNoZWQgaW4gPGI+L2hvbWUvYWpheGxvYWQvd3d3L2xpYnJhaXJpZXMvY2xhc3MubXlzcWwucGhwPC9iPiBvbiBsaW5lIDxiPjY4PC9iPjxiciAvPgo8YnIgLz4KPGI+V2FybmluZzwvYj46ICBteXNxbF9xdWVyeSgpIFs8YSBocmVmPSdmdW5jdGlvbi5teXNxbC1xdWVyeSc+ZnVuY3Rpb24ubXlzcWwtcXVlcnk8L2E+XTogQ2FuJ3QgY29ubmVjdCB0byBsb2NhbCBNeVNRTCBzZXJ2ZXIgdGhyb3VnaCBzb2NrZXQgJy92YXIvcnVuL215c3FsZC9teXNxbGQuc29jaycgKDIpIGluIDxiPi9ob21lL2FqYXhsb2FkL3d3dy9saWJyYWlyaWVzL2NsYXNzLm15c3FsLnBocDwvYj4gb24gbGluZSA8Yj42ODwvYj48YnIgLz4KPGJyIC8+CjxiPldhcm5pbmc8L2I+OiAgbXlzcWxfcXVlcnkoKSBbPGEgaHJlZj0nZnVuY3Rpb24ubXlzcWwtcXVlcnknPmZ1bmN0aW9uLm15c3FsLXF1ZXJ5PC9hPl06IEEgbGluayB0byB0aGUgc2VydmVyIGNvdWxkIG5vdCBiZSBlc3RhYmxpc2hlZCBpbiA8Yj4vaG9tZS9hamF4bG9hZC93d3cvbGlicmFpcmllcy9jbGFzcy5teXNxbC5waHA8L2I+IG9uIGxpbmUgPGI+Njg8L2I+PGJyIC8+Cg==",
                onError: function(element) {
                    // console.log('error loading ' + element.data('src'));
                },
                afterLoad: function(element) {
                    $(element).addClass("loaded");
                }
            });
        }

    };

    _self.postForm = function(path, parameters) {
        console.log(parameters);
        var $form = $2('<form></form>');

        $form.attr("method", "post");
        $form.attr("action", path);

        Object.keys(parameters).forEach(function(key, i) {
            var value = parameters[key];
            if (!Array.isArray(value) && typeof value !== "object"){
                var $field = $('<input></input>');

                $field.attr("type", "hidden");
                $field.attr("name", key);
                $field.attr("value", value);

                $form.append($field);
            } else {
                if (typeof value == "object" && null !== value) {
                    Object.keys(value).forEach(function(subkey, i){
                        var subvalue = value[subkey],
                            $subfield = $('<input></input>');

                        $subfield.attr("type", "hidden");
                        $subfield.attr("name", key+"["+subkey+"]");
                        $subfield.attr("value", subvalue);

                        $form.append($subfield);
                    });
                }
            }
        });


        // console.log($form.html(), $form.serialize(), parameters);
        $2("body").append($form);
        $form.submit();
    };
    _self.WebSocketServer = {};
    _self.WebSocketServerIsOnline = function(){
        // if ("undefined" != typeof _self.WebSocketServer.readyState) {
        //     if (_self.WebSocketServer.readyState == 1) {
        //         return true;
        //     }
        // }
        // return false;
    };

    _self.initWebsocketServer = function(callback){
        // if (false == _self.WebSocketServerIsOnline()) {
        //     try {
        //         _self.WebSocketServer = ("undefined" != typeof ReconnectingWebSocket) ? new ReconnectingWebSocket("wss://www.powerlaptop.ro:3337") : new WebSocket("wss://www.powerlaptop.ro:3337");
        //         _self.WebSocketServer.onopen = function (e) {
        //             //console.log("Websocket connection is open");
        //             if ("function" == typeof callback) {
        //                 callback();
        //             }
        //         };
        //         _self.WebSocketServer.onclose = function (e) {
        //             //console.log("Websocket connection closed.");
        //         };
        //         _self.WebSocketServer.onerror = function (e) {
        //             //console.log("Websocket connection error.");
        //         };
        //         _self.WebSocketServer.onmessage = function (e) {
        //             var info = JSON.parse(atob(e.data));
        //         };
        //     } catch (ex) {
        //         //console.log("connection exception:" + ex);
        //     }
        // } else {
        //     //console.log("Websocket server is already opened");
        // }
    };

    _self.registerWSOrder = function(){
        // if (_self.WebSocketServerIsOnline() == true) {
        //     var clientName = "",
        //         orderId = "",
        //         products = [],
        //         action = "";
        //
        //     if ("undefined" != typeof orderDetails){
        //         if (
        //             "undefined" != typeof orderDetails["orderid"]
        //             && "undefined" != typeof orderDetails["ordbillfirstname"]
        //             && "undefined" != typeof orderDetails["ordbilllastname"]
        //             && "undefined" != typeof orderDetails["productsOrdered"]
        //             && "undefined" != typeof orderDetails["total_inc_tax"]
        //         ) {
        //             if (orderDetails["productsOrdered"].length > 0) {
        //                 clientName = [orderDetails["ordbillfirstname"], orderDetails["ordbilllastname"]].join(" ");
        //                 action += " placed order "+orderDetails["orderid"]+" from desktop:";
        //
        //                 orderDetails["productsOrdered"].forEach(function(product, i){
        //                     if (
        //                         "undefined" != typeof product["productCode"]
        //                         && "undefined" != typeof product["productName"]
        //                         && "undefined" != typeof product["productQuantity"]
        //                     ) {
        //                         action += "<br />"+product["productQuantity"]+"x "+product["productName"]+" ["+product["productCode"]+"]";
        //                     }
        //                 });
        //
        //                 action += "<br />Total: "+parseFloat(orderDetails["total_inc_tax"]).toFixed(2)+" RON";
        //             }
        //         }
        //     }
        //     _self.WebSocketServer.send(btoa(JSON.stringify({
        //         "comm": "registeredAction",
        //         "data": {
        //             "action": action,
        //             "user": clientName
        //         }
        //     })));
        //
        //     _self.WebSocketServer.close();
        // }
    };

    _self.judete = [
        {
            "id": 28,
            "name": {
                "ro": "Alba"
            }
        },
        {
            "id": 1,
            "name": {
                "ro": "Arad"
            }
        },
        {
            "id": 11,
            "name": {
                "ro": "Arges"
            }
        },
        {
            "id": 3,
            "name": {
                "ro": "Bacau"
            }
        },
        {
            "id": 19,
            "name": {
                "ro": "Bihor"
            }
        },
        {
            "id": 21,
            "name": {
                "ro": "Bistrita-Nasaud"
            }
        },
        {
            "id": 18,
            "name": {
                "ro": "Botosani"
            }
        },
        {
            "id": 37,
            "name": {
                "ro": "Braila"
            }
        },
        {
            "id": 4,
            "name": {
                "ro": "Brasov"
            }
        },
        {
            "id": 46,
            "name": {
                "ro": "Bucuresti"
            }
        },
        {
            "id": 36,
            "name": {
                "ro": "Buzau"
            }
        },
        {
            "id": 40,
            "name": {
                "ro": "Calarasi"
            }
        },
        {
            "id": 26,
            "name": {
                "ro": "Caras-Severin"
            }
        },
        {
            "id": 2,
            "name": {
                "ro": "Cluj"
            }
        },
        {
            "id": 7,
            "name": {
                "ro": "Constanta"
            }
        },
        {
            "id": 29,
            "name": {
                "ro": "Covasna"
            }
        },
        {
            "id": 35,
            "name": {
                "ro": "Dambovita"
            }
        },
        {
            "id": 8,
            "name": {
                "ro": "Dolj"
            }
        },
        {
            "id": 9,
            "name": {
                "ro": "Galati"
            }
        },
        {
            "id": 41,
            "name": {
                "ro": "Giurgiu"
            }
        },
        {
            "id": 33,
            "name": {
                "ro": "Gorj"
            }
        },
        {
            "id": 23,
            "name": {
                "ro": "Harghita"
            }
        },
        {
            "id": 27,
            "name": {
                "ro": "Hunedoara"
            }
        },
        {
            "id": 39,
            "name": {
                "ro": "Ialomita"
            }
        },
        {
            "id": 10,
            "name": {
                "ro": "Iasi"
            }
        },
        {
            "id": 48,
            "name": {
                "ro": "Ilfov"
            }
        },
        {
            "id": 16,
            "name": {
                "ro": "Maramures"
            }
        },
        {
            "id": 32,
            "name": {
                "ro": "Mehedinti"
            }
        },
        {
            "id": 22,
            "name": {
                "ro": "Mures"
            }
        },
        {
            "id": 24,
            "name": {
                "ro": "Neamt"
            }
        },
        {
            "id": 43,
            "name": {
                "ro": "Olt"
            }
        },
        {
            "id": 6,
            "name": {
                "ro": "Prahova"
            }
        },
        {
            "id": 20,
            "name": {
                "ro": "Salaj"
            }
        },
        {
            "id": 15,
            "name": {
                "ro": "Satu Mare"
            }
        },
        {
            "id": 12,
            "name": {
                "ro": "Sibiu"
            }
        },
        {
            "id": 17,
            "name": {
                "ro": "Suceava"
            }
        },
        {
            "id": 42,
            "name": {
                "ro": "Teleorman"
            }
        },
        {
            "id": 13,
            "name": {
                "ro": "Timis"
            }
        },
        {
            "id": 38,
            "name": {
                "ro": "Tulcea"
            }
        },
        {
            "id": 34,
            "name": {
                "ro": "Valcea"
            }
        },
        {
            "id": 30,
            "name": {
                "ro": "Vaslui"
            }
        },
        {
            "id": 31,
            "name": {
                "ro": "Vrancea"
            }
        }
    ];

    _self.logo = _self.root+"/assets/images/logo-powerlaptop-alb-albastru-optimized-ptc-minimized.png";
    _self.icons = {
        "userIcon": _self.root+"/assets/images/userIconWhite.png",
        "infoIcon": _self.root+"/assets/images/infoIconWhite.png",
        "cartIcon": _self.root+"/assets/images/cartIconWhite.png",
        "searchIcon": _self.root+"/assets/images/searchIcon.png",
        "callPhoneIcon": _self.root+"/assets/images/callPhoneIcon.png",
        "skypeIcon": _self.root+"/assets/images/skypeicon.png",
    };

    _self.setUrlParameter = function(paramName, paramValue){
        const url = new URL(window.location.href);
        url.searchParams.delete(paramName);
        if (Array.isArray(paramValue)) {
            paramValue = decodeURIComponent(paramValue.join(","));
        }
        // console.log(paramValue);
        url.searchParams.set(paramName, paramValue);
        window.history.replaceState(null, null, url); // or pushState
    };

    _self.setUrlParameters = function(params){
        const url = new URL(window.location.href);
        var hostParams = {};
        Object.keys(params).forEach(function(paramName, i) {
            var paramValue = params[paramName];
            url.searchParams.delete(paramName);
            if (Array.isArray(paramValue)) {
                paramValue = decodeURIComponent(paramValue.join(","));
            }
            // console.log(paramValue);
            url.searchParams.set(paramName, paramValue);

            hostParams[paramName] = paramValue;
        });
        window.history.replaceState(null, null, url); // or pushState
    };

    _self.deleteUrlParameter = function(paramName){
        const url = new URL(window.location.href);
        url.searchParams.delete(paramName);
        window.history.replaceState(null, null, url); // or pushState
    };

    _self.deleteUrlParameters = function(params){
        const url = new URL(window.location.href);
        params.forEach(function(paramName, i){
            url.searchParams.delete(paramName);
        });
        window.history.replaceState(null, null, url); // or pushState
    };

    _self.getUrlParameter = function(sParam) {
        const url = new URL(window.location.href);
        var paramVal = "";
        //check if search param contains []
        if (sParam.toString().indexOf("[]") > -1) {
            paramVal = url.searchParams.getAll(sParam);
        } else {
            var foundWithBrackets = false,
                foundWithoutBrackets = false;
            //check if search param doesn't contain [] but url param has []
            url.searchParams.forEach(function(paramValue, paramName){
                if (paramName.indexOf("[]") > -1) {
                    if (paramName.replace("[]", "").trim() == sParam.trim()) {
                        // found param as []
                        foundWithBrackets = true;
                    }
                } else {
                    if (paramName.trim() == sParam.trim()) {
                        foundWithoutBrackets = true;
                    }
                }
            });

            if (foundWithBrackets == true) {
                paramVal = url.searchParams.getAll(sParam.trim()+"[]");
                if (foundWithoutBrackets == true) {
                    paramVal.push(decodeURIComponent(url.searchParams.get(sParam)));
                }
            } else {
                paramVal = decodeURIComponent(url.searchParams.get(sParam));
            }
        }
        if ("string" == typeof paramVal) {
            if (paramVal.indexOf(",") > -1) {
                paramVal = paramVal.split(",");
            }
        }

        if ("null" === paramVal) {
            paramVal = null;
        }
        return paramVal;
    };

    _self.getAllUrlParameters = function(filteredParams, excludedParameters){
        const url = new URL(window.location.href);
        var urlParameters = [];
        if ("undefined" == typeof excludedParameters) {
            var excludedParameters = [];
        }
        url.searchParams.forEach(function(paramValue, paramName){
            if (urlParameters.indexOf(paramName) == -1) {
                if (!!filteredParams && filteredParams.length > 0) {
                    if (filteredParams.indexOf(paramName) > -1 && excludedParameters.indexOf(paramName) == -1) {
                        urlParameters.push(paramName);
                    }
                } else {
                    if (excludedParameters.indexOf(paramName) == -1) {
                        urlParameters.push(paramName);
                    }
                }
            }
        });
        return urlParameters;
    };
    //
    // _self.getUrlParameter = function(sParam) {
    //     var sPageURL = decodeURIComponent(window.location.search.substring(1)),
    //         sURLVariables = sPageURL.split('&'),
    //         sParameterName,
    //         i;
    //
    //     for (i = 0; i < sURLVariables.length; i++) {
    //         sParameterName = sURLVariables[i].split('=');
    //
    //         if (sParameterName[0] === sParam) {
    //             return sParameterName[1] === undefined ? true : sParameterName[1];
    //         }
    //     }
    // };
    _self.homepageSlides = homepageSlidesObject;
    _self.containsCategory = function(catName, array) {
        var res = 0;
        array.forEach(function(item, i){
            if (item["catName"] == catName) {
                res++;
            }
        })
        if (0 < res) {
            return true;
        } else {
            return false;
        }
    };
    _self.loadCSS = function(cssUrl){
        if (!$2("head").find("style[src*='"+cssUrl+"']").length) {
            //console.log("Loading css file "+cssUrl);
            $2("head").append("<link type='text/css' rel='stylesheet' href='"+cssUrl+"' />");
        } else {
            //console.log(cssUrl+" already included");
        }
    };
    _self.searchResultsHTML = "";
    _self.headerHTML = ""+
        "<div class='customDesktopHeader'>"+
        "<div class='customDesktopHeaderInner'>"+
        "<div class='menuTrigger'>"+
        "<a href='javascript:void(0);'><span class='s1'></span><span class='s2'></span><span class='s3'></span></a>"+
        "</div>"+
        "<div class='logoWrapper'><a href='"+_self.root+"' class='siteLogo'><img src='"+_self.logo+"' width='213' height='35' alt='Logo Power Laptop' /></a></div>"+
        "<div class='searchWrapper'><div class='searchInner'><input type='search' autocomplete='nope' placeholder='Cauta..' class='customSearch' / ><a href='javascript:void(0);' class='searchBtn'><img src='"+_self.icons.searchIcon+"' width='27' height='27' alt='Buton Cautare' /></a></div><div class='searchAutocompleteUnderlay'></div></div>"+
        "<div class='actionsWrapper'>"+
        "<div class='actionsWrapperItem infoToggle'>"+
        "<a href='"+_self.root+"/pages/info-clienti.html'>"+
        "<img class='lazy' data-src='"+_self.icons.infoIcon+"' width='24' height='24' alt='Informatii' />"+
        "<span>Informatii</span>"+
        "</a>"+
        "<div class='infoActionsMenuWrapper actionsWrapperSubmenuWrapper'>"+
        "<ul class='infoActionsMenu actionsWrapperSubmenu'></ul>"+
        "</div>"+
        "</div>"+
        "<div class='actionsWrapperItem userProfile'>"+
        "<a href='"+_self.root+"/account.php'>"+
        "<img class='lazy' data-src='"+_self.icons.userIcon+"' width='22' height='24' alt='Contul Meu' />"+
        "<span>Contul meu</span>"+
        "</a>"+
        "<div class='accountActionsMenuWrapper actionsWrapperSubmenuWrapper'>"+
        "<ul class='accountActionsMenu actionsWrapperSubmenu'></ul>"+
        "</div>"+
        "</div>"+
        "<div class='actionsWrapperItem cartToggle'>"+
        "<a href='"+_self.root+"/cos.php'>"+
        "<img src='"+_self.icons.cartIcon+"' width='31' height='24' alt='Cos Cumparaturi' />"+
        "<span>Cosul meu</span>"+
        "</a>"+
        "</div>"+
        "</div>"+
        "</div>"+

        "</div>"+
        "<div class='customDesktopSubheader'>"+
        "<div class='customDesktopSubheaderContainer'>"+
        "<div class='customDesktopCategoriesToggle'><span class='s1'></span><span class='s2'></span><span class='s3'></span></a><strong>Produse</strong><a class='allProductsBtn' href='"+_self.root+"/categories/"+"'>Vezi toate</a>"+
        "<div class='navMenu'>" +
        "<div class='navMenuInner'>"+
        "<div class='navMenuCategories'></div>"+
        "</div>"+
        "</div>"+
        "</div>"+
        "<div class='customDesktopSubheaderInner'>"+
        "<img class='lazy' data-src='"+_self.icons.callPhoneIcon+"' width='16' height='25' alt='Telefon' />"+
        "<a class='phoneBtn ordersPhoneBtn' href='tel:0374811573'><span>Comenzi</span><strong>0374811573</strong></a>"+
        "<a class='phoneBtn' href='tel:0374811575'><span>Reselleri</span><strong>0374811575</strong></a>"+
        "<!-- <img class='skypeIconSeparator' src='"+_self.icons.skypeIcon+"' />"+
        "<a class='phoneBtn' href='skype:power.laptop?chat'><span>Piese Laptop</span><strong>Matei</strong></a>"+
        "<a class='phoneBtn' href='skype:tablete.powerlaptop?chat'><span>Piese GSM</span><strong>Cristi</strong></a>"+
        "<a class='phoneBtn' href='skype:alin_powerlaptop?chat'><span>General</span><strong>Alin</strong></a> -->"+
        "</div>"+
        "</div>"+
        "</div>";

    _self.homepageSliderHtml = "<div class='homepageSlider'></div>";

    _self.search = function(keywords){
        // $2("#SearchForm").find("#search_query").val(keywords).change();
        // $2("#SearchForm").find("form").submit();
        if (!keywords) {
            keywords  = "";
        }
        keywords = keywords.trim().split(" ").join("+").replace(/\/+\/+/g, "+");
        keywords = keywords.replace(".php", "").trim().toLowerCase().replace(/\s/g, "+").replace(/[^0-9a-z\/+_-]/gi, '');
        if (!!keywords) {
            window.location = window.location.protocol+"//"+window.location.host+"/cauta/"+keywords;
        }
    };

    _self.rewriteInterface = function(){
        //console.log("Rewriting interface..");
        _self.check2Performant();
        _self.rewriteHeader();
        _self.rewriteCategoriesBlock();
        if (_self.isHomepage) {
            if ($2("body").find(".Content").length) {
                _self.loader("#Wrapper", "start");
                $2("body").find(".Content").hide();
            }
            _self.rewriteHomepageProducts();
            _self.rewriteHomepageCarousel(_self.homepageSlides);
            _self.renderHomepageBadges();
        }
        if (_self.isCategory) {
            _self.rewriteCategory();
        }

        if (_self.isProduct) {
            _self.rewriteProduct();
            _self.quickOrder();

            var pcode = ("undefined" != typeof productCode) ? productCode : $2("body").find(".VariationProductSKU").text().toString().trim().toUpperCase();
            //console.log("pcode", pcode, "productCode", productCode);
            _self.getProductGifts(pcode, function(data){
                _self.renderGifts(data);
            });
            //get product gifts for related products
            var pcodes = [];
            if ($2("body").find(".ProductList [data-pcode]").length) {
                $2("body").find(".ProductList [data-pcode]").each(function(){
                    var pcodex = $2(this).attr("data-pcode");
                    if (pcodes.indexOf(pcodex) < 0) {
                        pcodes.push(pcodex);
                    }
                });
                if (pcodes.length) {
                    pcodes.forEach(function(pcodex, i){
                        _self.getProductGifts(pcodex, function(data){
                            _self.renderGifts(data);
                        });
                    });
                }
            }
        }

        if (_self.isCheckout) {
            // console.log("is checkout");
            _self.redirectToFinishOrder();
            _self.rewriteCheckout();
        }
        if (_self.isCart) {
            _self.rewriteCart();
        }

        if (_self.isAccount || _self.isLogin){
            _self.rewriteAccount();
        }

        if (_self.isAccount) {
            _self.renderResellerStats();
        }

        if (_self.isSearch){
            _self.rewriteSearch();
        }
        // _self.rewriteLogin();
        // _self.rewriteAccount();
        if (_self.isBrands){
            _self.rewriteBrands();
        }

        if (_self.isPages) {
            _self.rewritePages();
        }

        if (_self.isOrderSuccess) {
            _self.rewriteOrderSuccess();
            // _self.initWebsocketServer(function(){
            //     _self.registerWSOrder();
            // });
        }
        _self.rewriteFooter();
        // _self.rewriteFinishOrder();
        _self.clearfix(".BlockContent");
        clearTimeout(_self.waiters.showPageTimeout);
        _self.waiters.showPageTimeout = setTimeout(function(){
            $2(".customDesktopHeader, .customDesktopSubheader, #Container, .homepageSlider").addClass("show");
        },300);

        if (!_self.isCheckout) {
            _self.consentCookies();
        }

        if (_self.isReturnForm) {
            _self.rewriteReturnForm();
        }
        // _self.specialNoticeMessage();
        // _self.blackFridayMessage();
    };

    _self.rewriteReturnForm = function(){
        $2("body").find("#PageContent .BlockContent").append("<iframe src='"+_self.apiUrl+"/powerreturn/returnform.php' style='width: 100%; height: 1200px; position: relative; overflow: hidden; margin: 20px auto; border: none !important;'></iframe>");
    };


    _self.getCategories = function(callback){
        $2.ajax({
            url: _self.api.categories,
            method: "GET",
            success: function(data){
                if (typeof callback == "function"){
                    callback(data);
                }
            },
            error: function(a,b,c) {
                //console.log(a,b,c);
            }
        });
    };

    _self.getSearchAutocompleteResults = function(keywords, callback){
        keywords = keywords.replace(".php", "");
        if (keywords.replace(/\s/g, "").length) {
            $2.ajax({
                url: _self.api.search2,
                type: "POST",
                data: {
                    key: _self.apiKey,
                    keywords: btoa(keywords)
                },
                success: function (data) {
                    if (typeof callback == "function") {
                        callback(data);
                    }
                },
                error: function (a, b, c) {
                    //console.log(a,b,c);
                }
            });
        }
    };

    _self.rewriteHeader = function(){
        //console.log("Rewriting header..");
        if (_self.isHomepage) {
            $2("html").addClass("homepage");
        }
        $2("body").prepend(_self.headerHTML);
        _self.loadImages();

        $2("body").find(".accountActionsMenu, .infoActionsMenu").empty();
        $2("body").find("#TopMenu a").each(function() {
            var link = $2(this),
                linkName = link.text().replace(/\s/g, "").toLowerCase();
            $2("body").find(".accountActionsMenu").append("<li><a href='" + link.attr("href") + "'>" + link.text() + "</a></li>");
        });
        $2("body").find("#Menu a").filter(function(){
            return $2(this).attr("href").indexOf("info-clienti.html") > -1 || $2(this).attr("href").indexOf("info+clienti.html") > -1;
        }).eq(0).each(function(){
            $2(this).closest("li").find("ul").eq(0).find("a").each(function(){
                var link = $2(this);
                $2("body").find(".infoActionsMenu").append("<li><a href='"+link.attr("href").replace(/\+/g,"-")+"'>"+link.text()+"</a></li>");
            });
        });

        _self.createMiniCart(function(){
            $2("body").find(".cartCounter").removeClass("showFast").removeClass("show");
            clearTimeout(_self.waiters.showCartCounterTimeout);
            _self.waiters.showCartCounterTimeout = setTimeout(function(){
                $2("body").find(".cartToggle").find(".cartCounter").addClass("show");
            },100);
        });
    };

    _self.rewriteCart = function(){

        if (window.location.href.indexOf("/cart.php") > -1 || window.location.href.indexOf("/cos.php") > -1) {
            //console.log("Rewriting cart");
            $2("body").addClass("cartPage");
        }

        $2("body").find("input[type='image']").each(function(){
            var $btn = $2(this);
            _self.replaceImageInput($btn, null, _self.blueColor);
        });

        _self.checkCartGifts();

    };

    _self.rewriteCategoriesBlock = function(){

        $2("body").find(".navMenuCategories").empty();
        _self.getCategories(function(categories){

            var categoriesUl = "<ul class='categories'>";
            if ("string" != typeof categories) {
                if (categories.length) {
                    var newMenuStructure = {
                            "laptop": {
                                "catName": "laptop",
                                "catUrl": "javascript:void(0);",
                                "children": []
                            },
                            "telefon": {
                                "catName": "telefon",
                                "catUrl": "javascript:void(0);",
                                "children": []
                            },
                            "tableta": {
                                "catName": "tableta",
                                "catUrl": "javascript:void(0);",
                                "children": []
                            },
                            "accesorii": {
                                "catName": "accesorii",
                                "catUrl": "javascript:void(0);",
                                "children": []
                            },
                            "promotii": {
                                "catName": "promotii",
                                "catUrl": "javascript:void(0);",
                                "children": []
                            },
                            // "service": {
                            //     "catName": "service",
                            //     "catUrl": "javascript:void(0);",
                            //     "children": []
                            // }
                        },

                        //CUVINTE CATEGORII
                        accesoriiWords = ["conectori", "monitor", "filtre", "pasta", "periferice","cabluri", "acumulatori", "termic", "router"], //CUVINTE PENTRU ACCESORII
                        laptopWords = ["lvds","trackpad"], //CUVINTE PENTRU LAPTOP
                        // serviceWords = ["service"], //CUVINTE PENTRU SERVICE
                        telefonWords = ["iphone"]; //CUVINTE PENTRU TELEFON

                    categories.forEach(function(category, i){
                        Object.keys(newMenuStructure).forEach(function(topCategory, j){
                            if (category["catName"].trim().toLowerCase().indexOf(topCategory.trim().toLowerCase()) > -1) {
                                var obj = {
                                    "catName": category["catName"],
                                    "catUrl": category["catUrl"].replace(/\+/g,"-"),
                                    "children": category["children"]
                                };

                                if (!_self.containsCategory(obj["catName"], newMenuStructure[topCategory]["children"])) {
                                    if (newMenuStructure[topCategory]["children"].indexOf(obj) == -1){
                                        newMenuStructure[topCategory]["children"].push(obj);
                                    }
                                }

                            }  else if (category["catName"].trim().toLowerCase().split(" ").filter(function(name){
                                return laptopWords.indexOf(name) > -1;
                            }).length) {
                                var obj = {
                                    "catName": category["catName"],
                                    "catUrl": category["catUrl"].replace(/\+/g,"-"),
                                    "children": category["children"]
                                };
                                if (!_self.containsCategory(obj["catName"], newMenuStructure["telefon"]["children"])) {
                                    if (newMenuStructure["laptop"]["children"].indexOf(obj) == -1){
                                        newMenuStructure["laptop"]["children"].push(obj);
                                    }
                                }
                            } else if (category["catName"].trim().toLowerCase().split(" ").filter(function(name){
                                return accesoriiWords.indexOf(name) > -1;
                            }).length) {
                                var obj = {
                                    "catName": category["catName"],
                                    "catUrl": category["catUrl"].replace(/\+/g,"-"),
                                    "children": category["children"]
                                };

                                if (!_self.containsCategory(obj["catName"], newMenuStructure["accesorii"]["children"])) {
                                    if (newMenuStructure["accesorii"]["children"].indexOf(obj) == -1){
                                        newMenuStructure["accesorii"]["children"].push(obj);
                                    }
                                }
                            } else if (category["catName"].trim().toLowerCase().split(" ").filter(function(name){
                                return telefonWords.indexOf(name) > -1;
                            }).length) {
                                var obj = {
                                    "catName": category["catName"],
                                    "catUrl": category["catUrl"].replace(/\+/g,"-"),
                                    "children": category["children"]
                                };
                                if (!_self.containsCategory(obj["catName"], newMenuStructure["telefon"]["children"])) {
                                    if (newMenuStructure["telefon"]["children"].indexOf(obj) == -1){
                                        newMenuStructure["telefon"]["children"].push(obj);
                                    }
                                }
                            }
                        });
                    });

                    //console.log(newMenuStructure);

                    Object.keys(newMenuStructure).forEach(function(category0, i){
                        var category1 = newMenuStructure[category0];
                        //console.log(category1);

                        categoriesUl += "<li class='category categoryLvl1'>";
                        categoriesUl += "<a href='"+category1["catUrl"].replace(/\+/g,"-")+"' data-categorylevel='linkCategoryLvl1' class='"+category1["catName"].replace(/\s/g, "").toLowerCase()+"'>"+category1["catName"]+"</a>";
                        if (category1["children"].length) {
                            categoriesUl += "<ul class='categories2 "+category1["catName"].toLowerCase().trim().replace(/\s/g, "-")+"'>";
                            category1["children"].forEach(function(category2, j){
                                categoriesUl += "<li class='category categoryLvl2 "+category1["catName"].toLowerCase().trim().replace(/\s/g, "-")+" "+category2["catName"].toLowerCase().trim().replace(/\s/g, "-")+"'>";
                                categoriesUl += "<a data-categorylevel='linkCategoryLvl2' href='"+category2["catUrl"].replace(/\+/g,"-")+"'>"+category2["catName"]+"</a>";

                                if (category2["children"].length) {
                                    categoriesUl += "<ul class='categories3'>";
                                    // if (category2["children"].filter(function(item){
                                    //     return item["popular"] == true;
                                    // }).length) {
                                    //     category2["children"].forEach(function(category3, k){
                                    //         if (category3["popular"]) {
                                    //             categoriesUl += "<li class='category categoryLvl3'>";
                                    //             categoriesUl += "<a href='"+category3["catUrl"].replace(/\+/g,"-")+"'>"+category3["catName"]+"</a>";
                                    //     //         /}/ if (category3["children"].length) {
                                    //     //         //     categoriesUl += "<ul class='categories4'>";
                                    //     //         //     category3["children"].forEach(function(category4, i){
                                    //     //         //         categoriesUl += "<li class='category categoryLvl4'>";
                                    //     //         //         categoriesUl += "<a href='"+category4["catUrl"].replace(/\+/g,"-")+"'>"+category4["catName"]+"</a>";
                                    //     //         //         categoriesUl += "</li>";
                                    //     //         //     });
                                    //     //         //     categoriesUl += "</ul>";
                                    //             // }
                                    //             categoriesUl += "</li>";
                                    //         }
                                    //     });
                                    //
                                    // } else {
                                    category2["children"].forEach(function(category3, k){
                                        // if (k < 6) {
                                        categoriesUl += "<li class='category categoryLvl3'>";
                                        categoriesUl += "<a data-categorylevel='linkCategoryLvl3' href='"+category3["catUrl"].replace(/\+/g,"-")+"'>"+category3["catName"]+"</a>";
                                        //         /}/ if (category3["children"].length) {
                                        //         //     categoriesUl += "<ul class='categories4'>";
                                        //         //     category3["children"].forEach(function(category4, i){
                                        //         //         categoriesUl += "<li class='category categoryLvl4'>";
                                        //         //         categoriesUl += "<a href='"+category4["catUrl"].replace(/\+/g,"-")+"'>"+category4["catName"]+"</a>";
                                        //         //         categoriesUl += "</li>";
                                        //         //     });
                                        //         //     categoriesUl += "</ul>";
                                        // }
                                        categoriesUl += "</li>";
                                        // }
                                    });
                                    // }
                                    categoriesUl += "</ul>";
                                }
                                categoriesUl += "</li>";
                            });
                            categoriesUl += "</ul>";
                        }
                        categoriesUl += "</li>";
                    });
                    categoriesUl += "</ul>";
                    categoriesUl += "</li>";
                }
                categoriesUl += "</ul>";
            }

            $2("body").find(".navMenuCategories").html(categoriesUl);
            if (_self.isHomepage && 600 >= _self.scrollAmmount) {
                $2("body").find(".navMenuInner").addClass('show');
                if (!$2("body").find(".navMenu .navMenuCategories > .categories .navMenuFiltersSelectors").length) {
                    $2("body").find(".navMenu .navMenuCategories > .categories").append("<li class='navMenuFiltersSelectors'><div class='customLoader'></div></li>");
                }

            }
            $2("body").find("a.laptop").prepend('<i class="fas fa-laptop"></i>');
            $2("body").find("a.tableta").prepend('<i class="fas fa-tablet-alt"></i>');
            $2("body").find("a.telefon").prepend('<i class="fas fa-mobile-alt"></i>');
            $2("body").find("a.accesorii").prepend('<i class="fas fa-memory"></i>');
            $2("body").find("a.promotii").prepend('<i class="fas fa-tags"></i>');
            // $2("body").find("a.service").prepend('<i class="fas fa-tools"></i>');

            _self.removeNavMenuDuplicates();
        });

    };

    _self.removeNavMenuDuplicates = function(){
        //console.log("removing duplicates");
        $2("body").find(".navMenuCategories ul.categories2").each(function(){
            var $ul = $2(this);
            $ul.find("li.categoryLvl2").each(function(){
                var $li = $2(this),
                    link = $li.children("a").attr("href"),
                    iter = 0;
                $ul.children("li").each(function(i){
                    var $li2 = $2(this),
                        link2 = $li2.children("a").attr("href");
                    //console.log("checking "+link+" against "+link2);
                    if (link == link2) {
                        if (0 < iter) {
                            //console.log("found duplicate on "+link2);
                            $li2.remove();
                        }
                        iter++;
                    }
                });
            });
        });
    };

    _self.getEstimationDelivery = function(){
        var freeDay = false,
            currentDate = new Date(),
            weekday = new Array(7),
            monthname = new Array(12),
            firstDeliveryDate = currentDate,
            lastDeliveryDate = currentDate;
        weekday[0] =  "Duminica";
        weekday[1] = "Luni";
        weekday[2] = "Marti";
        weekday[3] = "Miercuri";
        weekday[4] = "Joi";
        weekday[5] = "Vineri";
        weekday[6] = "Sambata";
        monthname[0] = "Ianuarie";
        monthname[1] = "Februarie";
        monthname[2] = "Martie";
        monthname[3] = "Aprilie";
        monthname[4] = "Mai";
        monthname[5] = "Iunie";
        monthname[6] = "Iulie";
        monthname[7] = "August";
        monthname[8] = "Septembrie";
        monthname[9] = "Octombrie";
        monthname[10]= "Noiembrie";
        monthname[11]= "Decembrie";

        var dayName = weekday[currentDate.getDay()],
            currentHour = currentDate.getHours(),
            firstDeliveryDay = "",
            lastDeliveryDay = "";
        // $2.ajax({
        //     url: "https://zilelibere.webventure.ro/api/"+(new Date().getFullYear()),
        //     success: function(data){
        //         if ("string" == typeof data) {
        //             data = JSON.parse(data);
        //         }
        //         data.forEach(function(event, i){
        //             if (!!event.date) {
        //                 if (event.date.length) {
        //                     event.date.forEach(function(date, j){
        //                         if (!!date.date) {
        //                             var thisEventMonth = parseInt(date.date.split("/")[1],10),
        //                                 thisEventDay = parseInt(data.date.split("/")[2],10);
        //                             if (thisEventMonth == parseInt(new Date().getMonth(),10)
        //                             && thisEventDay == parseInt(new Date().getDate(),10)) {
        //                                 freeDay = true;
        //                             }
        //                         }
        //                     });
        //                 }
        //             }
        //         });
        //     }
        // });



        if (16 <= currentHour) {
            //daca este de la ora 16
            //console.log("Este de la ora 16");
            if (1 == currentDate.getDay()) { //luni
                firstDeliveryDate = currentDate.addDays(1);
                lastDeliveryDate = currentDate.addDays(4);
            } else if (2 == currentDate.getDay()) { //marti
                firstDeliveryDate = currentDate.addDays(1);
                lastDeliveryDate = currentDate.addDays(3);
            } else if (3 == currentDate.getDay()) { //miercuri
                firstDeliveryDate = currentDate.addDays(1);
                lastDeliveryDate = currentDate.addDays(5);
            } else if (4 == currentDate.getDay()) { //joi
                firstDeliveryDate = currentDate.addDays(1);
                lastDeliveryDate = currentDate.addDays(4);
            } else if (5 == currentDate.getDay()) { //vineri
                firstDeliveryDate = currentDate.addDays(3);
                lastDeliveryDate = currentDate.addDays(4);
            } else if (6 == currentDate.getDay()) { //sambata
                firstDeliveryDate = currentDate.addDays(2);
                lastDeliveryDate = currentDate.addDays(4);
            } else if (7 == currentDate.getDay()) { //duminica
                firstDeliveryDate = currentDate.addDays(1);
                lastDeliveryDate = currentDate.addDays(4);
            }
        } else {
            //console.log("Este inainte de ora 16");
            //daca este inainte de ora 16
            if (1 == currentDate.getDay()) { //luni
                //console.log("luni");
                firstDeliveryDate = currentDate.addDays(1);
                lastDeliveryDate = currentDate.addDays(4);
            } else if (2 == currentDate.getDay()) { //marti
                //console.log("marti");
                firstDeliveryDate = currentDate.addDays(1);
                lastDeliveryDate = currentDate.addDays(3);
            } else if (3 == currentDate.getDay()) { //miercuri
                //console.log("miercuri");
                firstDeliveryDate = currentDate.addDays(1);
                lastDeliveryDate = currentDate.addDays(5);
            } else if (4 == currentDate.getDay()) { //joi
                //console.log("joi");
                firstDeliveryDate = currentDate.addDays(1);
                lastDeliveryDate = currentDate.addDays(4);
            } else if (5 == currentDate.getDay()) { //vineri
                //console.log("vineri");
                firstDeliveryDate = currentDate.addDays(1);
                lastDeliveryDate = currentDate.addDays(4);
            } else if (6 == currentDate.getDay()) { //sambata
                //console.log("sambata");
                firstDeliveryDate = currentDate.addDays(2);
                lastDeliveryDate = currentDate.addDays(4);
            } else if (7 == currentDate.getDay()) { //duminica
                //console.log("duminica");
                firstDeliveryDate = currentDate.addDays(1);
                lastDeliveryDate = currentDate.addDays(4);
            }
        }

        firstDeliveryDay = weekday[firstDeliveryDate.getDay()];
        lastDeliveryDay = weekday[lastDeliveryDate.getDay()];

        // var deliveryString = "Din cauza volumului mare din aceasta perioada, timpul de livrare al comenzilor poate varia intre 24-72h<br />";
        var deliveryString = "Data estimata de livrare: "+firstDeliveryDay+", "+firstDeliveryDate.getDate()+" "+monthname[firstDeliveryDate.getMonth()]+" - "+lastDeliveryDay+", "+lastDeliveryDate.getDate()+" "+monthname[lastDeliveryDate.getMonth()];
        if ($2("body").find(".customStockInfo").length) {
            var textStoc = $2("body").find(".customStockInfo").text().trim().toLowerCase();
            if (textStoc == "precomanda" || textStoc == "lipsa stoc" || textStoc == "momentan indisponibil") {
                deliveryString = "Puteti plasa o precomanda si va vom anunta in momentul in care produsul revine in stoc. De obicei dureaza intre 10 si 30 zile lucratoare.";
            }
        }

        return deliveryString;

    };

    _self.showCustomFields = function(prodid){
        var customFieltsHtml = "";
        if ("undefined" == typeof prodid) {
            var prodid = null;
        } else {
            $2.ajax({
                url: _self.api["product"]+"?method=getProductFields&prodid="+prodid,
                success: function(data) {
                    if ("string" == typeof data) {
                        data = JSON.parse(data);
                    }
                    if (data.length) {
                        customFieltsHtml += "<div class='productCustomFieldsWrapper'>";
                        customFieltsHtml += "<h2>Detalii Tehnice</h2>";
                        customFieltsHtml += "<div class='productCustomFieldsInner'>";
                        data.forEach(function(field, i){
                            customFieltsHtml += "<div class='customFieldItem'>";
                            customFieltsHtml += "<div class='customFieldItemName'>"+field['fieldname']+"</div>";
                            customFieltsHtml += "<div class='customFieldItemValue'>"+field['fieldvalue']+"</div>";
                            customFieltsHtml += " </div>";
                        });
                        customFieltsHtml += " </div>";
                        customFieltsHtml += " </div>";
                        if ($2(".ProductDescriptionContainer").find("h2").length) {
                            $2(".ProductDescriptionContainer").find("h2").first().after(customFieltsHtml);
                        } else {
                            $2(".ProductDescriptionContainer").first().prepend(customFieltsHtml);
                        }

                    }
                }
            });
        }
    };

    _self.rewriteProduct = function() {
        //console.log("Rewriting product");
        if ($2("body").find(".ProductThumb").length && $2("body").find(".ProductMain").length) {
            $2("body").find(".ProductThumb, .ProductMain").wrapAll("<div class='productMainWrapper'/>");
        }
        _self.replaceImageInput("[type='image'][src*='images/red/adauga.png']", "Adauga in cos", _self.orangeColor, "#fff");

        if ($2("body").find("#ProductBreadcrumb ul").eq(1).length) {
            $2("body").find("#ProductBreadcrumb ul").eq(1).remove();
        }

        //custom product transition

        $2("body").find("[type='image'][src*='images/red/adauga.png']").closest(".fakeBtn").prepend("<div class='addToCartBtnWithTransition'></div>");
        $2("body").find("[type='image'][src*='images/red/adauga.png']").closest(".fakeBtn").addClass("customBtnAddToCart");
        _self.replaceImageInput("img[src*='images/red/comanda-rapida.png']", "Comanda rapid produsul","#fff", "#000", "1px solid #000");

        var $prodName = $2("body").find("h1[itemprop='name']").eq(0),
            prodNameText = $prodName.text().toString().trim();
        $2("body").find(".ProductMain").prepend($prodName.clone());
        $prodName.hide();

        $2("body").find(".productMainWrapper").append("<div class='ProductBadges'></div>");
        $2("body").find(".productMainWrapper .ProductBadges").html($2("body").find("#popup_container").html());
        $2("body").find(".productMainWrapper .ProductBadges").find("br, hr").remove();
        $2("body").find("#popup_container").hide();
        $2("body").find("#ProductDetails").find("br, hr").remove();
        _self.clearfix("#ProductReviews");
        _self.clearfix(".ProductReviewFormContainer");

        if ($2("body").find(".customDesktopHeader").length) {
            $2("body").find(".customDesktopHeader").addClass("isProductHeader");
            if (!$2("body").find(".customDesktopHeader .customDesktopProductHeader").length && !$2("body").find(".ProductDetailsGrid .ValueGreen").filter(function(){
                return $2(this).text().trim().toLowerCase().indexOf("indisponibil") > -1;
            }).length) {
                var $prodImgSrc = $2('body').find('#ProductDetails .ProductThumbImage img').attr('src') || $2('body').find('#ProductDetails .ProductThumbImage img').attr('data-src');
                var $dpheader = "<div class='customDesktopProductHeader'>";
                $dpheader += "<div class='customDesktopProductHeaderInner'>";
                $dpheader += "<div class='customDesktopProductHeaderLogoWrapper'>";
                $dpheader += "<img class='ustomDesktopProductHeaderLogo' src='"+$prodImgSrc+"' />";
                $dpheader += "</div>";
                $dpheader += "<div class='customDesktopProductHeaderTitleWrapper'>";
                $dpheader += "<a href='javascript:void(0);' class='customDesktopProductHeaderTitleContainer'>";
                $dpheader += $2('body').find('#ProductDetails > .BlockContent > h1').text().trim();
                $dpheader += "</a>";
                $dpheader += "</div>";
                $dpheader += "<div class='customDesktopProductHeaderPriceWrapper'>";
                if ($2('body').find('.ProductMain .ProductDetailsGrid .DetailRow .Value strike').length) {
                    $dpheader += "<span class='customDesktopProductHeaderFullPrice'>"+$2('body').find('.ProductMain .ProductDetailsGrid .DetailRow .Value strike').text()+"</span>"; //pret normal
                }
                $dpheader += "<span class='customDesktopProductHeaderVariationPrice'>"+$2('body').find('.ProductMain .VariationProductPrice').text()+"</span>"; //pret redus
                $dpheader += "</div>";
                $dpheader += "<div class='customDesktopProductHeaderAddToCartWrapper'>";
                $dpheader += "<a class='customDesktopProductHeaderAddToCart' href='javascript:void(0);'>Adauga in cos</a>";
                $dpheader += "</div>";
                $dpheader += "</div>";
                $dpheader += "</div>";
                $2("body").find(".customDesktopHeader").prepend($dpheader);
            }
        }


        _self.getProductStock(function(stockStatus){
            // console.log("stockStatus", stockStatus);
            _self.productStockInfoDetails(stockStatus);
            if ($2(".ProductPrice").text().toLowerCase().trim().indexOf("contact") == -1 && !$2("body").find(".ProductDetailsGrid .ValueGreen").filter(function(){
                return $2(this).text().toLowerCase().indexOf("indisponibil") > -1;
            }).length) {
                $2("body").find(".ProductMain ").append("<div class='estimatedDelivery'>"+_self.getEstimationDelivery()+"</div>");
            } else {
                $2(".ProductPrice").html("<a href='"+_self.root+"/pages/contact.html'>"+$2(".ProductPrice").first().text()+"</a>");
            }
            if ("undefined" != typeof stockStatus && ("precomanda" == stockStatus.toLowerCase() || "lipsa stoc" == stockStatus.toLowerCase())) {
                if ($2("body").find(".customBtnAddToCart .fakeSpan").length > 0) {
                    $2("body").find(".customBtnAddToCart .fakeSpan").text("Precomanda");
                }
            }
        });

        if ("undefined" != typeof productId) {
            _self.showCustomFields(productId);
        }

        _self.handleResellerRequest();

        // show reseller notice about price
        if (_self.customerData.isLoggedIn == true) {
            // if (_self.customerData.isReseller == true && (_self.customerData.customerId == 18910 || _self.customerData.customerId == 1)) {
            if (_self.customerData.isReseller == true) {
                var totalValueBoughtLastMonth = (!isNaN(_self.customerData.resellerData["totalOrdersValueLastMonth"])) ? parseFloat(_self.customerData.resellerData["totalOrdersValueLastMonth"]) : 0,
                    // totalQuantityBought = (!isNaN(_self.customerData.resellerData["totalItemsOrdered"])) ? parseInt(_self.customerData.resellerData["totalItemsOrdered"], 10) : 0,
                    totalValueBoughtThisMonth = (!isNaN(_self.customerData.resellerData["totalOrdersValueThisMonth"])) ? parseFloat(_self.customerData.resellerData["totalOrdersValueThisMonth"]) : 0,
                    // totalQuantityBoughtThisMonth = (!isNaN(_self.customerData.resellerData["totalItemsOrdered"])) ? parseInt(_self.customerData.resellerData["totalItemsOrdered"], 10) : 0,
                    totalValueBoughtThisAndLastMonth = totalValueBoughtLastMonth + totalValueBoughtThisMonth,
                    // totalQuantityBought = (!isNaN(_self.customerData.resellerData["totalItemsOrdered"])) ? parseInt(_self.customerData.resellerData["totalItemsOrdered"], 10) : 0,
                    resellerConfig = _self.customerData.resellerConfig,
                    thisResellerIndex = Object.keys(resellerConfig["groups"]).indexOf(_self.customerData.resellerData["resellerGroup"]),
                    thisResellerId = _self.customerData.resellerData["resellerGroup"],
                    nextResellerIndex = ("undefined" != typeof Object.keys(resellerConfig["groups"])[thisResellerIndex + 1]) ? Object.keys(resellerConfig["groups"]).indexOf(Object.keys(resellerConfig["groups"])[thisResellerIndex + 1]) : thisResellerIndex,
                    nextResellerId = ("undefined" != typeof Object.keys(resellerConfig["groups"])[nextResellerIndex]) ? Object.keys(resellerConfig["groups"])[nextResellerIndex] : null,
                    superiorResellerExist = (nextResellerIndex > thisResellerIndex) ? true : false,
                    nextRankType = null,
                    thisRankType = null,
                    thisResellerRankDifference = ("undefined" != typeof resellerConfig["groups"][thisResellerId] && !isNaN(resellerConfig["groups"][thisResellerId]["minAmount"])) ? Math.ceil(resellerConfig["groups"][thisResellerId]["minAmount"] - totalValueBoughtThisAndLastMonth) : 0,
                    // thisResellerRankQuantityDifference = Math.ceil(resellerConfig["groups"][thisResellerId]["minQuantity"] - totalQuantityBoughtThisAndLastMonth),
                    nextResellerRankDifference = 0,
                    // nextResellerRankQuantityDifference = 0,
                    nextResellerRankName = "",
                    thisResellerRankName = _self.customerData.resellerData["resellerTitle"],
                    logX = "a";


                // if (thisResellerRankDifference > 0 && thisResellerRankQuantityDifference <= 0) {
                //     thisRankType = "amount";
                // } else if (thisResellerRankQuantityDifference > 0 && thisResellerRankDifference <= 0) {
                //     thisRankType = "quantity";
                // }
                thisRankType = "amount";

                if (true == superiorResellerExist) {
                    logX += "b";
                    nextResellerRankName = resellerConfig["groups"][nextResellerId]["title"];
                    nextResellerRankDifference = Math.ceil(resellerConfig["groups"][nextResellerId]["minAmount"] - totalValueBoughtThisAndLastMonth);
                    // nextResellerRankQuantityDifference = Math.ceil(resellerConfig["groups"][nextResellerId]["minQuantity"] - totalQuantityBought);


                    // if (nextResellerRankDifference > totalValueBought && nextResellerRankQuantityDifference < totalQuantityBought) {
                    //     nextRankType = "amount";
                    //     logX += "c";
                    // } else if (nextResellerRankQuantityDifference < Math.ceil(resellerConfig["groups"][nextResellerId]["minQuantity"])) {
                    //     nextRankType = "quantity";
                    //     logX += "d";
                    // }
                    nextRankType = "amount";
                }

                // console.log("thisResellerRankQuantityDifference", thisResellerRankQuantityDifference, "nextResellerRankQuantityDifference", nextResellerRankQuantityDifference);

                var $resellerNoticeHtml = "<div class='resellerNoticeContainer'>";
                $resellerNoticeHtml += "<div class='resellerNoticeTitle'>" + _self.customerData.resellerData["resellerTitle"] + "</div>";
                // if ("amount" == thisRankType) {
                //     $resellerNoticeHtml += "<div class='resellerNoticeDescription'>Trebuie sa mai cumparati de " + thisResellerRankDifference + " RON pentru a va pastra rangul si luna viitoare";
                // } else if ("quantity" == thisRankType) {
                //     $resellerNoticeHtml += "<div class='resellerNoticeDescription'>Trebuie sa mai cumparati " + thisResellerRankQuantityDifference + " bucati pentru a va pastra rangul si luna viitoare";
                // }

                // console.log("thisRankType", thisRankType, "nextRankType", nextRankType);

                // check if customer bought enought to get a reseller rank
                var achievedResellerGroupId = null,
                    achievedResellerGroupTitle = null,
                    achievedResellerGroupMinAmount = 0;
                if (totalValueBoughtThisMonth > 0) {
                    Object.keys(resellerConfig["groups"]).forEach(function(groupid, i){
                        if (totalValueBoughtThisMonth >= parseFloat(resellerConfig["groups"][groupid]["minAmount"])){
                            achievedResellerGroupId = groupid;
                            achievedResellerGroupTitle = resellerConfig["groups"][groupid]["title"];
                            achievedResellerGroupMinAmount = parseFloat(resellerConfig["groups"][groupid]["minAmount"]);
                        }
                    });
                }

                if ("amount" == nextRankType) {
                    logX += "e";
                    if (true == _self.customerData.isReseller && achievedResellerGroupTitle != null && 0 < achievedResellerGroupMinAmount) {
                        $resellerNoticeHtml += "<div>Ati cumparat de minim <strong>" + achievedResellerGroupMinAmount + " RON</strong> si ati primit statusul de <strong>" + achievedResellerGroupTitle + "</strong></div>";
                    } else if (true == _self.customerData.isReseller) {
                        if (!isNaN(thisResellerRankDifference) && parseFloat(thisResellerRankDifference) > 0) {
                            $resellerNoticeHtml += "<div>Trebuie sa mai cumparati de <strong>" + thisResellerRankDifference + " RON</strong> pentru a va pastra rangul de reseller <strong>" + thisResellerRankName + "</strong> si luna viitoare</div>";
                        }

                    }
                    if (nextResellerRankDifference > 0) {
                        logX += "f";
                        if (true == superiorResellerExist) {
                            if (!isNaN(nextResellerRankDifference) && parseFloat(nextResellerRankDifference) > 0) {
                                $resellerNoticeHtml += "<div>Trebuie sa mai cumparati de <strong>" + nextResellerRankDifference + " RON</strong> pentru a creste la rangul de <strong>" + nextResellerRankName + "</strong></div>";
                            }
                        }
                        $resellerNoticeHtml += "</div>";
                    }
                } else {
                    if (true == _self.customerData.isReseller) {
                        if (!isNaN(thisResellerRankDifference) && parseFloat(thisResellerRankDifference) > 0) {
                            $resellerNoticeHtml += "<div>Trebuie sa mai cumparati de <strong>" + thisResellerRankDifference + " RON</strong> pentru a va pastra rangul de reseller <strong>" + thisResellerRankName + "</strong> si luna viitoare</div>";
                        }
                    }
                    $resellerNoticeHtml += "</div>";
                }


                $resellerNoticeHtml += "</div>";

                if ($2("body").find(".productDetailsResellerNoticeWrapper").length > 0
                    && $2("body").find(".productDetailsResellerNoticeContainer").length > 0
                ) {
                    logX += "h";
                    $2("body").find(".productDetailsResellerNoticeContainer").html($resellerNoticeHtml);

                    //get standard price for final client
                    var productPrices = _self.getResellerPrices(window.productCode, function(respx){
                        if ("undefined" != typeof respx && "undefined" != typeof respx["baseprice"] && !isNaN(respx["baseprice"])) {
                            $2("body").find(".pretVechiLabel").text("Pret Standard");
                            $2("body").find(".pretVechiValue").html("<s>"+respx["baseprice"]+" Lei</s>");
                            var sPrice = ($2("body").find(".ProductPrice.pretStandard").length > 0) ? parseFloat($2("body").find(".ProductPrice.pretStandard").text().toLowerCase().replace("lei", "").replace(/\s/g, "")) : 0;
                            if (0 == sPrice && $2("body").find(".ProductPrice .SalePrice").length > 0) {
                                sPrice = parseFloat($2("body").find(".ProductPrice .SalePrice").text().toLowerCase().replace("lei", "").replace(/\s/g, ""));
                            }
                            $2("body").find(".pretReducere").html("(Reducere "+(parseFloat(respx["baseprice"]) - sPrice)+" Lei)");
                        }
                    })

                    $2("body").find(".pretRedus").text("Pret Reseller");

                    $2("body").find(".productDetailsResellerNoticeWrapper").addClass("show");
                    if ($2("body").find(".productDetailsResellerWrapper").length > 0 && !_self.checkCpLin()) {
                        $2("body").find(".productDetailsResellerWrapper").remove();
                    }
                    //rsPrc
                    if ($2("body").find(".rsPrc").length > 0 && !_self.checkCpLin()) {
                        $2("body").find(".rsPrc").remove();
                    }

                    if (true == _self.customerData.isReseller) {
                        // var productCode = $2("body").find(".VariationProductSKU").first().text().trim().toUpperCase();
                        _self.checkExcludedFreeShippingProduct(window.productCode, function(respx){
                            if ("undefined" != typeof respx && "undefined" != typeof respx["data"] && "undefined" != typeof respx["data"]["excluded"] && true == respx["data"]["excluded"]) {
                                $2("body").find(".productDetailsResellerNoticeContainer").append("<div class='excludedFreeShippingProductNotice' style='padding: 10px; background: #f7f7f7; margin: 10px 0;'>Produs exclus din calculul pentru transport gratuit</div>");
                            }
                        });
                    }
                }

                // console.log("loxXReseller", logX);
            }
        }

        if ($2("body").find(".ProductAddToCart [style*='display: none']").length > 0) {
            $2("body").find(".ProductAddToCart [style*='display: none']").each(function(){
                var $el = $2(this);
                $el.attr("style", $el.attr("style").replace("display: none" , ""));
            });
            if ($2("body").find(".OutOfStockMessage").length > 0) {
                $2("body").find(".OutOfStockMessage").remove();
            }
        }

        if ("undefined" != typeof window.productVisibility && window.productVisibility == 0) {
            $2("body").find("#Container #Wrapper").html("<h1 class='productNotAvailableAnymore'>Acest produs nu face parte din oferta noastra</h1>");
        }

        if ("undefined" != typeof _self.repeaters.checkProductCodeInterval) {
            clearInterval(_self.repeaters.checkProductCodeInterval);
        }

        _self.repeaters.checkProductCodeInterval = setInterval(function(){
            // console.log("productCode", window.productCode);
            if ("undefined" != typeof window.productCode) {
                clearInterval(_self.repeaters.checkProductCodeInterval);

                if ("undefined" != typeof _self.repeaters.checkAddToCartInterval) {
                    clearInterval(_self.repeaters.checkAddToCartInterval);
                }

                $2.ajax({
                    url: _self.api["powernotice"],
                    data: {
                        method: "getproductnoticesforcode",
                        prodcode: window.productCode
                    },
                    success: function(data){
                        if ("string" == typeof data) {
                            if (_self.isJson(data)) {
                                data = JSON.parse(data);
                            }
                        }

                        if ("undefined" != typeof data
                            && "undefined" != typeof data["data"]
                        ){
                            if ("undefined" != typeof data["data"]["message"]
                            && "string" == typeof data["data"]["message"]
                            && data["data"]["message"].toString().trim().length > 0
                            ){
                                var productNoticeMessage = $2("<div />").text(data["data"]["message"].toString().trim()).text();
                                var $authNotice = $2("<div class='authNoticeWrapper'>"+productNoticeMessage+"</div>");
                                $authNotice.insertBefore($2("body").find(".ProductAddToCart"));
                            }
                            if ("undefined" != typeof data["data"]["customhtml"]) {
                                if ("undefined" != typeof data["data"]["ispopup"] && true == data["data"]["ispopup"]) {
                                    var $authNotice2 = $2("<div class='customPopup show productPowerNoticePopup ProductPowerNotice' data-popup='ProductPowerNotice' id='ProductPowerNotice'><div class='popupHead'><a href='javascript:void(0);' class='btnClosePopup'><span></span><span></span></a></div><div class='popupBody ProductDescriptionContainer'>"+decodeURIComponent(atob(data["data"]["customhtml"]))+"</div></div>");
                                    $2("body").append($authNotice2);
                                }
                                var $authNotice2 = $2("<div class='Block Moveable Panel ProductPowerNotice' id='ProductPowerNotice'><div class='ProductDescriptionContainer'>"+decodeURIComponent(atob(data["data"]["customhtml"]))+"</div></div>");
                                    $authNotice2.insertBefore($2("body").find("#ProductDescription"));
                            }
                        }

                    },
                    error: function(a,b,c){
                        //console.log(a,b,c);
                    }
                });

                // _self.repeaters.checkAddToCartInterval = setInterval(function () {
                //     console.log("notice");
                //     if ((
                //         window.productCode.toString().toLowerCase().indexOf("asbtel") > -1
                //         || window.productCode.toString().toLowerCase().indexOf("acutel") > -1
                //         || window.productCode.toString().toLowerCase().indexOf("backtel") > -1
                //         || window.productCode.toString().toLowerCase().indexOf("homebutton") > -1
                //         )
                //         && $2("body").find(".ProductAddToCart").length > 0 && $2("body").find(".authNoticeWrapper").length == 0) {
                //         clearInterval(_self.repeaters.checkAddToCartInterval);
                //         var $authNotice = $2("<div class='authNoticeWrapper'>Atentie! Acest produs nu este original. Este un produs aftermarket, compatibil cu specificatiile de fabrica.</div>");
                //         $authNotice.insertBefore($2("body").find(".ProductAddToCart"));
                //     }
                // });

                if ("INDISPONIBIL" == window.productCode) {
                    $("body").find(".customBtnAddToCart, .estimatedDelivery").remove();
                }
            }
        },10);
    };

    _self.checkExcludedFreeShippingProduct = function(productCode, callback){
        $2.ajax({
            url: _self.api["powersell"],
            data: {
                method: "checkexcludedfreeshippingproduct",
                productcode: productCode
            },
            success: function(data){
                if ("string" == typeof data) {
                    if (_self.isJson(data)) {
                        data = JSON.parse(data);
                    }
                }
                if ("function" == typeof callback){
                    callback(data);
                }
            },
            error: function(a,b,c){
                //console.log(a,b,c);
            }
        });
    };

    _self.productStockInfoDetails = function(stockStatus){
        // $2("body").find(".customStockInfo").first().text(stockStatus).attr("data-stockinfo", stockStatus);
        stockStatus = stockStatus.toLowerCase();
        $2("body").find(".ProductMain .ProductDetailsGrid .DetailRow").each(function(){
            var $el = $2(this),
                stockStatuses = ["in stoc", "stoc limitat", "precomanda", "momentan indisponibil"],
                found = false;
            stockStatuses.forEach(function(statusMsg, i){
                if ($el.text().trim().toLowerCase().indexOf(statusMsg) > -1 && !found) {
                    $el.addClass("stockInfo");
                    if ("precomanda" == stockStatus) {
                        stockStatus = "momentan indisponibil";
                    }
                    $el.find(".ValueGreen").html("<div class='customStockInfo' data-stockinfo='"+stockStatus.toUpperCase()+"'>"+stockStatus.toUpperCase()+"</div>");

                    // var stockStatuses = {
                    //     "in stoc": "<div><strong>IN STOC</strong> - Produsul se afla in stocul nostru si se poate livra in 24-48h.</div>",
                    //     "stoc limitat": "<div><strong>STOC LIMITAT</strong> - Mai avem putine bucati in stoc. Grabeste-te!</div>",
                    //     "precomanda": "<div><strong>PRECOMANDA</strong> - Nu se afla momentan in stoc, dar ne reaprovizionam, de obicei intre 10 si 30 zile.</div>"
                    // };

                    var stockDetailsMsgs = {
                        "in stoc": "Produsul se poate livra in 24-48h.",
                        "stoc limitat": "Mai avem putine bucati in stoc. Grabeste-te!",
                        "precomanda": "Produsul va reveni in stoc intre 10 si 30 zile.",
                        "momentan indisponibil": "Puteti plasa o precomanda si va vom anunta in momentul in care produsul revine in stoc. De obicei dureaza intre 10 si 30 zile lucratoare."
                    };

                    // $el.find(".ValueGreen").append("<i class='stockInfoIcon'><div class='stockInfoTooltip'>"+stockStatuses[stockInfoText]+"</div></i>");
                    $el.find(".ValueGreen").append("<div class='stocInfoDetails'>"+stockDetailsMsgs[stockStatus]+"</div>");
                    found = true;
                }
            });
        });
    };

    _self.getProductStock = function(callback){
        if ($2("body").find(".VariationProductSKU").length) {
            var productCode = $2("body").find(".VariationProductSKU").first().text().trim().toUpperCase();

            $2.ajax({
                url: _self.apiUrl+"/stocuri/",
                data: {
                    method: "getstockavailability",
                    prodcode: productCode,
                },
                success: function(data){

                },
                error: function(a,b,c){
                    //console.log(a,b,c);
                },
                complete: function(xhr){
                    var resp = JSON.parse(xhr.responseText);
                    if (xhr.status == 200) {
                        if (true == resp["status"]) {
                            if ("function" == typeof callback) {
                                callback(resp["data"]["stock"]);
                            }
                        }
                    }
                }
            });
        }
    };

    _self.checkoutStepsProgress = function(){
        if (!$2("body").find(".checkoutStepsHeader").length) {
            var $checkoutSteps = "<div class='checkoutStepsHeader'>";
            $checkoutSteps += "<div class='checkoutStepsHeaderInner'>";
            $checkoutSteps += "<a class='checkoutStepsHeaderLogoWrapper' href='"+_self.root+"'>";
            $checkoutSteps += "<img src='"+_self.logo+"' class='checkoutStepsHeaderLogo' />";
            $checkoutSteps += "</a>";
            $checkoutSteps += "<div class='checkoutStepsHeaderStepsWrapper' data-step='1'>";
            $checkoutSteps += "<div class='checkoutStepsProgress "+((ExpressCheckout.signedIn) ? "checkoutStepsProgressLoggedIn" : "")+"'></div>";
            $checkoutSteps += "<div class='checkoutStepsHeaderStepsInner'>";
            if (!ExpressCheckout.signedIn) {
                //console.log("IS NOT LOGGED IN");
                $checkoutSteps += "<div class='checkoutStepsHeaderStep'><strong></strong><span>Detaliile Contului</span></div>";
            }
            $checkoutSteps += "<div class='checkoutStepsHeaderStep'><strong></strong><span>Detalii facturare</span></div>";
            $checkoutSteps += "<div class='checkoutStepsHeaderStep'><strong></strong><span>Detalii Livrare</span></div>";
            $checkoutSteps += "<div class='checkoutStepsHeaderStep'><strong></strong><span>Metoda Livrare</span></div>";
            $checkoutSteps += "<div class='checkoutStepsHeaderStep'><strong></strong><span>Confirmare</span></div>";
            $checkoutSteps += "</div>";
            $checkoutSteps += "</div>";
            $checkoutSteps += "<div class='checkoutStepsHeaderCart'>";
            $checkoutSteps +='<div class="actionsWrapperItem cartToggle"><a href="'+_self.root+'/cos.php"><img src="'+_self.root+'/assets/images/cartIconWhite.png"><span>Cosul meu</span></a></div>';
            $checkoutSteps += "</div>";
            $checkoutSteps += "</div>";
            $checkoutSteps += "</div>";
            $2("body").find(".customDesktopHeader, .customDesktopSubheader").hide();
            $2("body").prepend($checkoutSteps);
            _self.loadImages();
            $2("body").find(".checkoutStepsHeaderStep").each(function(){
                var $stp = $2(this),
                    $stpNumber = $stp.index()+1;
                $stp.attr("data-step", $stpNumber).find("strong").text($stpNumber);
            });

            var CheckoutSteps = ExpressCheckout.GetSteps();
            if (CheckoutSteps.indexOf("PaymentDetails") > -1) {
                CheckoutSteps.pop();
            }
            var Steps = CheckoutSteps,
                lastCurrentStep = ("undefined" != typeof ExpressCheckout.currentStep) ? ExpressCheckout.currentStep : "";
            clearInterval(_self.repeaters.checkExpressCheckoutStepInterval);
            _self.repeaters.checkExpressCheckoutStepInterval = setInterval(function(){
                if (lastCurrentStep != ExpressCheckout.currentStep) {
                    //console.log("changed");
                    if ($2("body").find(".checkoutStepsHeaderStepsWrapper").length) {
                        $2("body").find(".checkoutStepsHeaderStepsWrapper").attr("data-step", Steps.indexOf(ExpressCheckout.currentStep) + 1);
                    }
                    lastCurrentStep = ExpressCheckout.currentStep;
                }
            },1000);
        }
    };

    _self.redirectToFinishOrder = function(){
        //goToFinishUrl
        var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
        var eventer = window[eventMethod];
        var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message";
        // console.log("Waiting for redirect");
        // Listen to message from child window
        eventer(messageEvent,function(e) {

            var msgReceived = e.data;
            // console.log('parent received message!', msgReceived);
            if ("undefined" != typeof msgReceived["goToFinishUrl"]){
                // console.log("Received redirect from guest");
                window.location.href = msgReceived["goToFinishUrl"];
            } else if ("undefined" != typeof msgReceived["reloadCheckout"]){
                // console.log("Received reload from guest");

                var IsEreloadable = false, steps = [];
                if ("undefined" != typeof ExpressCheckout) {
                    if ("function" == typeof ExpressCheckout.GetSteps && "function" == typeof ExpressCheckout.ChangeStep) {
                        steps = ExpressCheckout.GetSteps();
                        if (steps.indexOf("PaymentDetails") > -1 && steps.indexOf("Confirmation") > -1) {
                            IsEreloadable = true;
                        }
                    }
                }
                // console.log("IsEreloadable", IsEreloadable);
                if (true == IsEreloadable) {
                    ExpressCheckout.ChangeStep("Confirmation");
                    if ("undefined" != typeof _self.repeaters.reenableSubmitButtonRepeater) {
                        clearInterval(_self.repeaters.reenableSubmitButtonRepeater);
                    }
                    _self.repeaters.reenableSubmitButtonRepeater = setInterval(function(){
                        if ($2("body").find(".btnFinalizareComanda.btnSubmitted").length > 0) {
                            clearInterval(_self.repeaters.reenableSubmitButtonRepeater);
                            $2("body").find(".btnFinalizareComanda.btnSubmitted").removeClass("btnSubmitted");
                        }
                    },100);
                } else {
                    window.location.reload();
                }


            } else if ("undefined" != typeof msgReceived["retryPayment"]) {
                // console.log("Received retry request from guest");
                if ($2("body").find("iframe#paySecureWrapper").length) {
                    var currentIframeUrl = $2("body").find("iframe#paySecureWrapper").attr("src");
                    $2("body").find("iframe#paySecureWrapper").attr("src", currentIframeUrl);
                    // console.log("Retrying payment again.");
                }
            }
        },false);
    };

    _self.rewriteCheckout = function(){
        if ("undefined" != typeof _self.repeaters.checkExpressCheckoutAvailability) {
            clearInterval(_self.repeaters.checkExpressCheckoutAvailability);
        }
        _self.repeaters.checkExpressCheckoutAvailability = setInterval(function(){
            if ("undefined" != typeof ExpressCheckout) {
                clearInterval(_self.repeaters.checkExpressCheckoutAvailability);
                _self.checkoutStepsProgress();
            }
        },100);

        //console.log("Rewriting checkout");
        $2("body").find("input[type='image']").each(function(){
            var $btn = $2(this);
            _self.replaceImageInput($btn, null, _self.blueColor);
        });
        $2("body").find("h2").filter(function(){
            return $2(this).text().indexOf("Finalizare Rapida") > -1;
        }).first().text("Comanda Rapida");
        _self.clearfix(".ExpressCheckoutContent");
        _self.clearfix(".ExpressCheckoutBlock");
        _self.clearfix("form");
        clearTimeout(_self.waiters.checkEmptyLabelTimeout);
        // _self.repeaters.checkEmptyLabelInterval = setInterval(function(){

        var dontTriggerModification = false;

        // $2("body").on('DOMSubtreeModified', "#Wrapper", function() {

        function checkChangesInTheCart(elem){
            if ("undefined" != typeof _self.waiters.checkEmptyLabelTimeout) {
                clearTimeout(_self.waiters.checkEmptyLabelTimeout);
            }
            if (!dontTriggerModification) {
                _self.waiters.checkEmptyLabelTimeout = setTimeout(function() {
                    dontTriggerModification = true;
                    $2("body").find("dt").each(function () {
                        var $dt = $2(this);
                        if (!$dt.closest(".inputField").length) {
                            $dt.next('dd').andSelf().wrapAll("<div class='inputField' />");
                        }
                    });
                    $2("body").find(".FormFieldLabel").filter(function () {
                        return $2(this).text() == ".:" || $2(this).text() == "-:";
                    }).closest("dt").hide().addClass("hideThis");
                    $2("body").find("#ship_to_billing_new").closest("label").removeClass("hideThis");
                    $2("body").find(".hideThis").closest(".inputField").addClass("hideThis");
                    $2("body").find("#save_billing_address").closest(".inputField").addClass("hideThis");
                    // $2("body").find("#bottom_payment_button").text("Trimite comanda").val("Trimite comanda").addClass("btnFinalizareComanda").parent("p").removeClass("PL20").addClass("btnFinalizareComandaWrapper");
                    var hasCardChecked = false;
                    if ($2("body").find("#checkout_provider_checkout_payu").length) {
                        if ($2("body").find("#checkout_provider_checkout_payu").is(":checked")) {
                            hasCardChecked = true;
                        }
                    }
                    if (false == hasCardChecked) {
                        $2("body").find("#bottom_payment_button").text("Trimite comanda").val("Trimite comanda");
                    } else {
                        $2("body").find("#bottom_payment_button").text("Continua catre plata").val("Continua catre plata");
                    }
                    $2("body").find("#bottom_payment_button").addClass("btnFinalizareComanda").parent("p").removeClass("PL20").addClass("btnFinalizareComandaWrapper");
                    $2("body").find("#join_mailing_list").parent("p").removeClass("PL20");
                    $2("body").find("h3").filter(function(){
                        return $2(this).text().indexOf("Hear From Us Via Email") > -1;
                    }).first().text("Doresti sa primesti notificari prin email cu privire la statusul comenzilor precum si promotiile saptamanale?");
                    $2("body").find("label").filter(function(){
                        return $2(this).text().indexOf("I'd like to receive your newsletter") > -1;
                    }).first().text("Ma abonez la newsletter");
                    _self.clearfix(".ExpressCheckoutContent");
                    _self.clearfix(".ExpressCheckoutBlock");
                    _self.clearfix(".Clear");
                    _self.clearfix(".FloatLeft");
                    _self.clearfix(".inputField");
                    _self.clearfix("dl");
                    _self.clearfix("form");


                    $2("body").find("input.inputJudete").filter(function(){
                        return !$2(this).parent().find(".selectorJudete").length
                    }).each(function(){
                        var $inpJudete = $2(this),
                            $inpSelectHtml = "",
                            $inputFieldWrapper =$2(this).closest(".inputField"),
                            $requiredSpan = $inputFieldWrapper.find("span.Required.FormFieldRequired");

                        $requiredSpan.css({"visibility": "visible"});


                        $inpSelectHtml += '<select class="selectorJudete">';
                        $inpSelectHtml += "<option value=''>Selecteaza judet</option>";
                        _self.judete.forEach(function(judet, i){
                            $inpSelectHtml += "<option value='"+judet['name']['ro']+"'>"+judet['name']['ro']+"</option>";
                        });
                        $inpSelectHtml += '</select>';
                        $inpJudete.parent().append($inpSelectHtml);
                        var judet = $inpJudete.val();
                        if (undefined != typeof judet && "" != judet && $inpJudete.parent().find(".selectorJudete").length) {
                            if ($inpJudete.parent().find(".selectorJudete option[value='"+judet+"']").length) {
                                $inpJudete.parent().find(".selectorJudete").prop("selectedIndex", $inpJudete.parent().find(".selectorJudete option[value='"+judet+"']").index()).change();
                            } else {
                                $inpJudete.val("").change();
                            }

                        } else {
                            $inpJudete.val("").change();
                        }
                        //console.log("triggered");
                    });

                    $2("body").find("#ship_to_billing_new").closest(".inputField").addClass("FloatLeft");
                    $2("body").find(".AddShippingAddress, .AddBillingAddress").children("img[src*='NodeJoin']").addClass("hideThis");

                    // _self.specialNoticeMessage();
                    _self.checkCheckoutGifts();


                    //begin card stock validation
                    //set ramburs if products have precomanda and there is no pick up method, otherwise just hide card payment method
                    if ($2("body").find(".CartContents td[data-pcode]").length > 0 && $2("body").find(".providerSelectorsWrapper .providerSelection").length > 0) {
                        if (!$2("body").find(".CartContents").hasClass("cardPaymentMethodValidated")) {
                            var shouldHideCard = false,
                                hasPrecomanda = false,
                                hasRamburs = false,
                                hasCardMethod = false,
                                hasPickUp = false;
                            $2("body").find(".providerSelectorsWrapper .providerSelection").each(function(){
                                var $paymentMethod = $2(this);
                                if ($paymentMethod.find("label").length) {
                                    if ($paymentMethod.find("label").text().toString().toLowerCase().indexOf("ramburs") > -1) {
                                        hasRamburs = true;
                                    }
                                    if ($paymentMethod.find("label").text().toString().toLowerCase().indexOf("card") > -1 && $paymentMethod.find("label").text().toString().toLowerCase().indexOf("sediu") == -1) {
                                        hasCardMethod = true;
                                    }
                                    if ($paymentMethod.find("label").text().toString().toLowerCase().indexOf("sediu") > -1) {
                                        hasPickUp = true;
                                    }
                                }
                            });
                            $2("body").find(".CartContents td[data-pcode]").each(function(){
                                var $cardProduct = $2(this),
                                    canBeBoughtWithCard = false;
                                if ($cardProduct.find(".Availability").length) {
                                    if ($cardProduct.find(".Availability").text().toString().toLowerCase().trim().indexOf("in stoc") > -1) {
                                        canBeBoughtWithCard = true;
                                    }
                                }
                                if (false == canBeBoughtWithCard) {
                                    shouldHideCard = true;
                                }
                            });

                            // console.log("shouldHideCard:",shouldHideCard, "hasPrecomanda:",hasPrecomanda, "hasRamburs:", hasRamburs, "hasCardMethod:",hasCardMethod, "hasPickUp:", hasPickUp);

                            if (true == shouldHideCard && true == hasCardMethod) {
                                if ($2("body").find(".providerSelectorsWrapper .providerSelection.providerPayu").length) {
                                    $2("body").find(".providerSelectorsWrapper .providerSelection.providerPayu").hide(); // card hide
                                }
                                if (true == hasRamburs && false == hasPickUp) {
                                    if ($2("body").find(".providerSelectorsWrapper .providerSelection.providerCod").length) {
                                        $2("body").find(".providerSelectorsWrapper .providerSelection.providerCod").click(); // ramburs click
                                        // $2("body").find(".providerSelectorsWrapper .providerSelection.providerCod").hide();
                                        if ($2("body").find("#payment_options").length) {
                                            $2("body").find("#payment_options").hide(); // cum doriti sa platiti (titlul)
                                        }
                                    }
                                }
                            }

                            $2("body").find(".CartContents").addClass("cardPaymentMethodValidated");
                        }
                    }
                    //end card stock validation


                    //ExpressCheckout mods
                    if ("undefined" != typeof ExpressCheckout) {
                        //console.log("ExpressCheckout is on");
                        if ("undefined" != typeof ExpressCheckout.currentStep) {
                            //has currentStep
                            //["BillingAddress", "ShippingAddress", "ShippingProvider", "Confirmation", "PaymentDetails"]
                            var isLoggedIn = ExpressCheckout.signedIn,
                                currentStep = ExpressCheckout.currentStep,
                                address = ExpressCheckout.BuildAddressLine();
                            if ("BillingAddress" == currentStep) {
                                //console.log("is BillingAddress");
                                // if (_self.isPowerLaptopIp) {
                                //     //console.log("Is powerlaptop");
                                //only powerlaptop
                                if (!isLoggedIn) {
                                    //is not logged in
                                    //rewrite adresa field to separate fields
                                    if ("undefined" != typeof _self.repeaters.checkBillingAddressVisibleRepeater) {
                                        clearInterval(_self.repeaters.checkBillingAddressVisibleRepeater);
                                    }
                                    _self.repeaters.checkBillingAddressVisibleRepeater = setInterval(function () {
                                        if ($2("body").find(".AddBillingAddress").is(":visible")) {
                                            clearInterval(_self.repeaters.checkBillingAddressVisibleRepeater);
                                            if (!$2("body").find("[name='FormField[2][8]']").closest("dd").find(".addressComponentsWrapper").length) {
                                                //console.log("rewriting address components");
                                                var $addrCompHTML = "<div class='addressComponentsWrapper billingAddressComponentsWrapper'>";
                                                $addrCompHTML += "<div class='addressComponentsInner'>";
                                                $addrCompHTML += "<div class='addressComponent addressComponentStradaWrapper'>";
                                                $addrCompHTML += "<label for='billingAddressComponentStrada' class='FormFieldRequired'>Strada</label>";
                                                $addrCompHTML += "<input type='text' class='addressComponentInput billingAddressComponentStrada' id='billingAddressComponentStrada' autocomplete='nope' />";
                                                $addrCompHTML += "</div>";
                                                $addrCompHTML += "<div class='addressComponent'>";
                                                $addrCompHTML += "<label for='billingAddressComponentNr' class='FormFieldRequired'>Numar</label>";
                                                $addrCompHTML += "<input type='text' class='addressComponentInput billingAomponentNr' id='billingAddressComponentNr' autocomplete='nope' />";
                                                $addrCompHTML += "</div>";
                                                $addrCompHTML += "<div class='addressComponent'>";
                                                $addrCompHTML += "<label for='billingAddressComponentBloc'>Bloc</label>";
                                                $addrCompHTML += "<input type='text' class='addressComponentInput billingAddressComponentBloc' id='billingAddressComponentBloc' autocomplete='nope' />";
                                                $addrCompHTML += "</div>";
                                                $addrCompHTML += "<div class='addressComponent'>";
                                                $addrCompHTML += "<label for='billingAddressComponentEtaj'>Etaj</label>";
                                                $addrCompHTML += "<input type='text' class='addressComponentInput billingAddressComponentEtaj' id='billingAddressComponentEtaj' autocomplete='nope' />";
                                                $addrCompHTML += "</div>";
                                                $addrCompHTML += "<div class='addressComponent'>";
                                                $addrCompHTML += "<label for='billingAddressComponentApartament'>Apartament</label>";
                                                $addrCompHTML += "<input type='text' class='addressComponentInput billingAddressComponentApartament' id='billingAddressComponentApartament' autocomplete='nope' />";
                                                $addrCompHTML += "</div>";
                                                $addrCompHTML += "</div>";
                                                $addrCompHTML += "</div>";

                                                $2("body").find("[name='FormField[2][8]']").closest("dd").append($addrCompHTML);
                                                $2("body").find("[name='FormField[2][8]']").closest(".inputField").find("dt").css({"opacity": 0});
                                                $2("body").find("[name='FormField[2][8]']").closest(".inputField").find(".FormFieldLabel").text("Strada");
                                                $2("body").find("[name='FormField[2][8]']").closest(".inputField").addClass("fullWidthInputField").addClass("hideOriginalAddress");
                                                $2("body").find("[name='FormField[2][8]']").val("").change();

                                                //remove adresa2
                                                if ($2("body").find("[name='FormField[2][9]']").is(":visible")) {
                                                    $2("body").find("[name='FormField[2][9]']").closest(".inputField").addClass("hideThis");
                                                }

                                                //nume prenume
                                                if (
                                                    $2("body").find("[name='FormField[2][4]']").closest(".inputField").is(":visible")
                                                    && $2("body").find("[name='FormField[2][5]']").closest(".inputField").is(":visible")
                                                ) {
                                                    $2("body").find("[name='FormField[2][4]'], [name='FormField[2][5]']").closest(".inputField").wrapAll("<div class='inputFieldGroup groupNumePrenume' />");
                                                }

                                                //mail telefon
                                                if (
                                                    $2("body").find("[name='FormField[1][1]']").closest(".inputField").is(":visible")
                                                    && $2("body").find("[name='FormField[2][7]']").closest(".inputField").is(":visible")
                                                ) {
                                                    $2("body").find("[name='FormField[1][1]']").closest(".inputField").insertAfter($2("body").find("[name='FormField[2][7]']").closest(".inputField"));
                                                }

                                                if (
                                                    $2("body").find("[name='FormField[2][10]']").closest(".inputField").is(":visible")
                                                    && $2("body").find("[name='FormField[2][11]']").closest(".inputField").is(":visible")
                                                    && $2("body").find("[name='FormField[2][12]']").closest(".inputField").is(":visible")
                                                    && $2("body").find("[name='FormField[2][13]']").closest(".inputField").is(":visible")
                                                ) {
                                                    // $2("body").find("[name='FormField[2][10]'], [name='FormField[2][11]'],  [name='FormField[2][12]'], [name='FormField[2][13]']").closest(".inputField").wrapAll("<div class='inputFieldGroup addressComponentsGroup' />");
                                                    $2("body").find("[name='FormField[2][11]'], [name='FormFieldIsText[2][12]'],  [name='FormField[2][10]'], [name='FormField[2][13]']").closest(".inputField").wrapAll("<div class='inputFieldGroup addressComponentsGroup' />");
                                                    $2("body").find(".addressComponentsGroup [name='FormField[2][11]']").closest(".inputField").insertBefore($2("body").find(".addressComponentsGroup [name='FormField[2][10]']").closest(".inputField"));
                                                    $2("body").find(".addressComponentsGroup [name='FormField[2][12]']").closest(".inputField").insertBefore($2("body").find(".addressComponentsGroup [name='FormField[2][10]']").closest(".inputField"));
                                                    $2("body").find("[name='FormField[2][10]']").closest(".inputField").addClass("localitiesWrapper").addClass("localitiesBilling");
                                                    $2("body").find("[name='FormField[2][12]']").closest(".inputField").addClass("judeteWrapper").addClass("judeteBilling");
                                                    //make select2 judet/localitate facturare 1

                                                    if ("undefined" != typeof $2.fn.select2){
                                                        $2("body").find(".addressComponentsGroup select").select2();
                                                    }
                                                    var judetSelectat = "";

                                                    if ("undefined" != typeof $2("body").find(".judeteBilling .selectorJudete").val()){
                                                        if ("" != $2("body").find(".judeteBilling .selectorJudete").val()) {
                                                            judetSelectat = $2("body").find(".judeteBilling .selectorJudete").val();
                                                        }
                                                        if ("" == judetSelectat) {
                                                            judetSelectat = ExpressCheckout.BuildAddressLine("billing", "json")["State"];
                                                        }
                                                    }
                                                    if ("" != judetSelectat) {
                                                        $2("body").find("[name='FormField[2][12]']").val(judetSelectat).change();
                                                    }
                                                    _self.getLocalitiesByStateName(judetSelectat, function(localitati){
                                                        _self.renderLocalities(localitati, ".localitiesBilling");
                                                        $2("body").find("[name='FormField[2][10]']").val(ExpressCheckout.BuildAddressLine("billing", "json")["City"]).change();
                                                        $2("body").find(".localitiesBilling select").val(ExpressCheckout.BuildAddressLine("billing", "json")["City"]).change();
                                                        //console.log("3 loc billing ",ExpressCheckout.BuildAddressLine("billing", "json")["State"]);
                                                        if ("undefined" != typeof $2.fn.select2){
                                                            $2("body").find(".localitiesBilling select").select2();
                                                        }
                                                    });

                                                    //FormField[2][11]. FormFieldIsText[2][12], FormField[2][10],FormField[2][13]
                                                }

                                                //persoane fizice/juridice
                                                if (
                                                    $2("body").find("[name='FormField[2][6]']").closest(".inputField").is(":visible")
                                                    && $2("body").find("[name='FormField[2][24]']").closest(".inputField").is(":visible")
                                                ) {
                                                    $2("body").find("[name='FormField[2][6]'], [name='FormField[2][24]']").closest(".inputField").wrapAll("<div class='inputFieldGroup groupFirmaCui groupPersoaneJuridiceWrapper' />");
                                                    $2("body").find(".groupPersoaneJuridiceWrapper").insertAfter($2("body").find(".addressComponentsGroup"));
                                                }

                                                if (!$2("body").find("#CheckoutStepBillingAddress .AddBillingAddress .persFizicaJuridicaTabs").length) {
                                                    var $tabsPFJHTML = "<div class='persFizicaJuridicaTabsWrapper'>";
                                                    $tabsPFJHTML += "<div class='persFizicaJuridicaTabs clearfix'>";
                                                    $tabsPFJHTML += "<a href='javascript:void(0);' class='persFizicaJuridicaTab persFizica active'>Persoana Fizica</a>";
                                                    $tabsPFJHTML += "<a href='javascript:void(0);' class='persFizicaJuridicaTab persJuridica'>Persoana Juridica</a>";
                                                    $tabsPFJHTML += "</div>";
                                                    $tabsPFJHTML += "</div>";
                                                    $2("body").find("#CheckoutStepBillingAddress .AddBillingAddress").prepend($tabsPFJHTML);
                                                }


                                                //aceasi adresa checkbox reversed
                                                if ($2("body").find("#ship_to_billing_new").is(":visible")) {
                                                    if (!$2("body").find("#ship_to_billing_new").closest("label").hasClass("reversedSameAddressCheckbox")){
                                                        $2("body").find("#ship_to_billing_new").closest("label").append("<a href='javascript:void(0);' class='reversedCheckboxBtn'></a>").addClass("reversedSameAddressCheckbox");
                                                    }
                                                }


                                            }
                                        }
                                    }, 100);
                                } else {
                                    //is logged in
                                    //rewrite adresa field to separate fields
                                    if ("undefined" != typeof _self.repeaters.checkBillingAddressVisibleRepeater) {
                                        clearInterval(_self.repeaters.checkBillingAddressVisibleRepeater);
                                    }
                                    _self.repeaters.checkBillingAddressVisibleRepeater = setInterval(function() {
                                        if ($2("body").find(".AddBillingAddress").is(":visible")) {
                                            clearInterval(_self.repeaters.checkBillingAddressVisibleRepeater);
                                            if (!$2("body").find("[name='FormField[2][8]']").closest("dd").find(".addressComponentsWrapper").length) {
                                                //console.log("rewriting address components");
                                                var $addrCompHTML = "<div class='addressComponentsWrapper billingAddressComponentsWrapper'>";
                                                $addrCompHTML += "<div class='addressComponentsInner'>";
                                                $addrCompHTML += "<div class='addressComponent addressComponentStradaWrapper'>";
                                                $addrCompHTML += "<label for='billingAddressComponentStrada' class='FormFieldRequired'>Strada</label>";
                                                $addrCompHTML += "<input type='text' class='addressComponentInput billingAddressComponentStrada' id='billingAddressComponentStrada' autocomplete='nope' />";
                                                $addrCompHTML += "</div>";
                                                $addrCompHTML += "<div class='addressComponent'>";
                                                $addrCompHTML += "<label for='billingAddressComponentNr' class='FormFieldRequired'>Numar</label>";
                                                $addrCompHTML += "<input type='text' class='addressComponentInput billingAomponentNr' id='billingAddressComponentNr' autocomplete='nope' />";
                                                $addrCompHTML += "</div>";
                                                $addrCompHTML += "<div class='addressComponent'>";
                                                $addrCompHTML += "<label for='billingAddressComponentBloc'>Bloc</label>";
                                                $addrCompHTML += "<input type='text' class='addressComponentInput billingAddressComponentBloc' id='billingAddressComponentBloc' autocomplete='nope' />";
                                                $addrCompHTML += "</div>";
                                                $addrCompHTML += "<div class='addressComponent'>";
                                                $addrCompHTML += "<label for='billingAddressComponentEtaj'>Etaj</label>";
                                                $addrCompHTML += "<input type='text' class='addressComponentInput billingAddressComponentEtaj' id='billingAddressComponentEtaj' autocomplete='nope' />";
                                                $addrCompHTML += "</div>";
                                                $addrCompHTML += "<div class='addressComponent'>";
                                                $addrCompHTML += "<label for='billingAddressComponentApartament'>Apartament</label>";
                                                $addrCompHTML += "<input type='text' class='addressComponentInput billingAddressComponentApartament' id='billingAddressComponentApartament' autocomplete='nope' />";
                                                $addrCompHTML += "</div>";
                                                $addrCompHTML += "</div>";
                                                $addrCompHTML += "</div>";

                                                $2("body").find("[name='FormField[2][8]']").closest("dd").append($addrCompHTML);
                                                $2("body").find("[name='FormField[2][8]']").closest(".inputField").find("dt").css({"opacity": 0});
                                                $2("body").find("[name='FormField[2][8]']").closest(".inputField").find(".FormFieldLabel").text("Strada");
                                                $2("body").find("[name='FormField[2][8]']").closest(".inputField").addClass("fullWidthInputField").addClass("hideOriginalAddress");
                                                $2("body").find("[name='FormField[2][8]']").val("").change();

                                                //remove adresa2
                                                if ($2("body").find("[name='FormField[2][9]']").is(":visible")) {
                                                    $2("body").find("[name='FormField[2][9]']").closest(".inputField").addClass("hideThis");
                                                }

                                                //nume prenume telefon
                                                if (
                                                    $2("body").find("[name='FormField[2][4]']").closest(".inputField").is(":visible") // nume
                                                    && $2("body").find("[name='FormField[2][5]']").closest(".inputField").is(":visible") // prenume
                                                    && $2("body").find("[name='FormField[2][7]']").closest(".inputField").is(":visible") // telefon
                                                ) {
                                                    $2("body").find("[name='FormField[2][7]']").closest(".inputField").insertAfter($2("body").find("[name='FormField[2][5]']").closest(".inputField"));

                                                    $2("body").find("[name='FormField[2][4]'], [name='FormField[2][5]'], [name='FormField[2][7]']").closest(".inputField").wrapAll("<div class='inputFieldGroup groupNumePrenume' />");
                                                }

                                                if (
                                                    $2("body").find("[name='FormField[2][10]']").closest(".inputField").is(":visible")
                                                    && $2("body").find("[name='FormField[2][11]']").closest(".inputField").is(":visible")
                                                    && $2("body").find("[name='FormField[2][12]']").closest(".inputField").is(":visible")
                                                    && $2("body").find("[name='FormField[2][13]']").closest(".inputField").is(":visible")
                                                ) {
                                                    // $2("body").find("[name='FormField[2][10]'], [name='FormField[2][11]'],  [name='FormField[2][12]'], [name='FormField[2][13]']").closest(".inputField").wrapAll("<div class='inputFieldGroup addressComponentsGroup' />");
                                                    $2("body").find("[name='FormField[2][11]'], [name='FormField[2][12]'],  [name='FormField[2][10]'], [name='FormField[2][13]']").closest(".inputField").wrapAll("<div class='inputFieldGroup addressComponentsGroup' />");
                                                    $2("body").find(".addressComponentsGroup [name='FormField[2][11]']").closest(".inputField").insertBefore($2("body").find(".addressComponentsGroup [name='FormField[2][10]']").closest(".inputField"));
                                                    $2("body").find(".addressComponentsGroup [name='FormField[2][12]']").closest(".inputField").insertBefore($2("body").find(".addressComponentsGroup [name='FormField[2][10]']").closest(".inputField"));
                                                    $2("body").find("[name='FormField[2][10]']").closest(".inputField").addClass("localitiesWrapper").addClass("localitiesBilling");
                                                    $2("body").find("[name='FormField[2][12]']").closest(".inputField").addClass("judeteWrapper").addClass("judeteBilling");
                                                    //make select2 judet/localitate facturare 2

                                                    if ("undefined" != typeof $2.fn.select2){
                                                        $2("body").find(".addressComponentsGroup select").select2();
                                                    }
                                                    var judetSelectat = "";
                                                    if ("undefined" != typeof $2("body").find(".judeteBilling .selectorJudete").val()){
                                                        if ("" != $2("body").find(".judeteBilling .selectorJudete").val()) {
                                                            judetSelectat = $2("body").find(".judeteBilling .selectorJudete").val();
                                                        }
                                                        if ("" == judetSelectat) {
                                                            judetSelectat = ExpressCheckout.BuildAddressLine("billing", "json")["State"];
                                                        }
                                                    }
                                                    if ("" != judetSelectat) {
                                                        $2("body").find("[name='FormField[2][12]']").val(judetSelectat).change();
                                                    }
                                                    _self.getLocalitiesByStateName(judetSelectat, function(localitati){
                                                        _self.renderLocalities(localitati, ".localitiesBilling");
                                                        //console.log("2 loc billing ",ExpressCheckout.BuildAddressLine("billing", "json"));
                                                        $2("body").find("[name='FormField[2][10]']").val(ExpressCheckout.BuildAddressLine("billing", "json")["City"]).change();
                                                        $2("body").find(".localitiesBilling select").val(ExpressCheckout.BuildAddressLine("billing", "json")["City"]).change();
                                                        if ("undefined" != typeof $2.fn.select2){
                                                            $2("body").find(".localitiesBilling select").select2();
                                                        }
                                                    });
                                                }

                                                //persoane fizice/juridice
                                                if (
                                                    $2("body").find("[name='FormField[2][6]']").closest(".inputField").is(":visible")
                                                    && $2("body").find("[name='FormField[2][24]']").closest(".inputField").is(":visible")
                                                ) {
                                                    $2("body").find("[name='FormField[2][6]'], [name='FormField[2][24]']").closest(".inputField").wrapAll("<div class='inputFieldGroup groupFirmaCui groupPersoaneJuridiceWrapper' />");
                                                    $2("body").find(".groupPersoaneJuridiceWrapper").insertAfter($2("body").find(".addressComponentsGroup"));
                                                }

                                                if (!$2("body").find("#CheckoutStepBillingAddress .AddBillingAddress .persFizicaJuridicaTabs").length) {
                                                    var $tabsPFJHTML = "<div class='persFizicaJuridicaTabsWrapper'>";
                                                    $tabsPFJHTML += "<div class='persFizicaJuridicaTabs clearfix'>";
                                                    $tabsPFJHTML += "<a href='javascript:void(0);' class='persFizicaJuridicaTab persFizica active'>Persoana Fizica</a>";
                                                    $tabsPFJHTML += "<a href='javascript:void(0);' class='persFizicaJuridicaTab persJuridica'>Persoana Juridica</a>";
                                                    $tabsPFJHTML += "</div>";
                                                    $tabsPFJHTML += "</div>";
                                                    $2("body").find("#CheckoutStepBillingAddress .AddBillingAddress").prepend($tabsPFJHTML);
                                                }


                                                //aceasi adresa checkbox reversed
                                                if ($2("body").find("#ship_to_billing_new").is(":visible")) {
                                                    if (!$2("body").find("#ship_to_billing_new").closest("label").hasClass("reversedSameAddressCheckbox")){
                                                        $2("body").find("#ship_to_billing_new").closest("label").append("<a href='javascript:void(0);' class='reversedCheckboxBtn'></a>").addClass("reversedSameAddressCheckbox");
                                                    }
                                                }

                                            }
                                        }
                                    }, 100);
                                }
                                // }

                            } else if ("ShippingAddress" == currentStep) {
                                if (isLoggedIn) {
                                    if (!$2("body").find("#CheckoutStepShippingAddress #ChooseShippingAddress .powerLaptopAddressToggle").length) {
                                        // $2("body").find("#CheckoutStepShippingAddress #ChooseShippingAddress").prepend("<div class='powerLaptopAddressToggleWrapper'><label class='powerLaptopAddressToggleLabel'><input type='checkbox' class='powerLaptopAddressToggle' />Ridicare personala de la sediul PowerLaptop</label></div>");
                                    }
                                } else {
                                    if (!$2("body").find("#CheckoutStepShippingAddress .AddShippingAddress .powerLaptopAddressToggle").length) {
                                        // $2("body").find("#CheckoutStepShippingAddress .AddShippingAddress").prepend("<div class='powerLaptopAddressToggleWrapper'><label class='powerLaptopAddressToggleLabel'><input type='checkbox' class='powerLaptopAddressToggle' />Ridicare personala de la sediul PowerLaptop</label></div>");
                                    }
                                }

                                // if (_self.isPowerLaptopIp) {
                                //     //console.log("Is powerlaptop");
                                //rewrite adresa field to separate fields
                                if ("undefined" != typeof _self.repeaters.checkBillingAddressVisibleRepeater) {
                                    clearInterval(_self.repeaters.checkBillingAddressVisibleRepeater);
                                }
                                _self.repeaters.checkshippingAddressVisibleRepeater = setInterval(function () {
                                    if ($2("body").find(".AddShippingAddress").is(":visible")) {
                                        clearInterval(_self.repeaters.checkshippingAddressVisibleRepeater);
                                        if (!$2("body").find("[name='FormField[3][18]']").closest("dd").find(".addressComponentsWrapper").length) {
                                            //console.log("rewriting address components");
                                            var $addrCompHTML = "<div class='addressComponentsWrapper shippingAddressComponentsWrapper'>";
                                            $addrCompHTML += "<div class='addressComponentsInner'>";
                                            $addrCompHTML += "<div class='addressComponent addressComponentStradaWrapper'>";
                                            $addrCompHTML += "<label for='shippingAddressComponentStrada' class='FormFieldRequired'>Strada</label>";
                                            $addrCompHTML += "<input type='text' class='addressComponentInput shippingAddressComponentStrada' id='shippingAddressComponentStrada' autocomplete='nope' />";
                                            $addrCompHTML += "</div>";
                                            $addrCompHTML += "<div class='addressComponent'>";
                                            $addrCompHTML += "<label for='shippingAddressComponentNr'>Numar</label>";
                                            $addrCompHTML += "<input type='text' class='addressComponentInput shippingAomponentNr' id='shippingAddressComponentNr' autocomplete='nope' />";
                                            $addrCompHTML += "</div>";
                                            $addrCompHTML += "<div class='addressComponent'>";
                                            $addrCompHTML += "<label for='shippingAddressComponentBloc'>Bloc</label>";
                                            $addrCompHTML += "<input type='text' class='addressComponentInput shippingAddressComponentBloc' id='shippingAddressComponentBloc' autocomplete='nope' />";
                                            $addrCompHTML += "</div>";
                                            $addrCompHTML += "<div class='addressComponent'>";
                                            $addrCompHTML += "<label for='shippingAddressComponentEtaj'>Etaj</label>";
                                            $addrCompHTML += "<input type='text' class='addressComponentInput shippingAddressComponentEtaj' id='shippingAddressComponentEtaj' autocomplete='nope' />";
                                            $addrCompHTML += "</div>";
                                            $addrCompHTML += "<div class='addressComponent'>";
                                            $addrCompHTML += "<label for='shippingAddressComponentApartament'>Apartament</label>";
                                            $addrCompHTML += "<input type='text' class='addressComponentInput shippingAddressComponentApartament' id='shippingAddressComponentApartament' autocomplete='nope' />";
                                            $addrCompHTML += "</div>";
                                            $addrCompHTML += "</div>";
                                            $addrCompHTML += "</div>";

                                            $2("body").find("[name='FormField[3][18]']").closest("dd").append($addrCompHTML);
                                            $2("body").find("[name='FormField[3][18]']").closest(".inputField").find("dt").css({"opacity": 0});
                                            $2("body").find("[name='FormField[3][18]']").closest(".inputField").find(".FormFieldLabel").text("Strada");
                                            $2("body").find("[name='FormField[3][18]']").closest(".inputField").addClass("fullWidthInputField").addClass("hideOriginalAddress");
                                            $2("body").find("[name='FormField[3][18]']").val("").change();
                                            //remove adresa2
                                            //FormField[2][9]
                                            if ($2("body").find("[name='FormField[3][19]']").is(":visible")) {
                                                $2("body").find("[name='FormField[3][19]']").closest(".inputField").addClass("hideThis");
                                            }


                                            // firma/cui hide
                                            if (
                                                $2("body").find("[name='FormField[3][16]']").is(":visible")
                                                && $2("body").find("[name='FormField[3][25]']").is(":visible")
                                            ) {
                                                if (!$2("body").find("[name='FormField[3][16]'], [name='FormField[3][25]']").closest(".inputFieldGroup").length) {
                                                    $2("body").find("[name='FormField[3][16]'], [name='FormField[3][25]']").closest(".inputField").wrapAll("<div class='inputFieldGroup hideThis' />");
                                                }
                                            }


                                            //nume, prenume, telefon
                                            if (
                                                $2("body").find("[name='FormField[3][17]']").is(":visible") // telefon
                                                && $2("body").find("[name='FormField[3][14]']").is(":visible") // nume
                                                && $2("body").find("[name='FormField[3][15]']").is(":visible") //prenume
                                            ) {
                                                $2("body").find("[name='FormField[3][17]']").closest(".inputWrapper").insertAfter($2("body").find("[name='FormField[3][15]']").closest(".inputWrapper"));

                                                if (!$2("body").find("[name='FormField[3][17]'], [name='FormField[3][14]'], [name='FormField[3][15]']").closest(".inputFieldGroup").length) {
                                                    $2("body").find("[name='FormField[3][17]'], [name='FormField[3][14]'], [name='FormField[3][15]']").closest(".inputField").wrapAll("<div class='inputFieldGroup' />");
                                                }
                                            }

                                            if (
                                                $2("body").find("[name='FormField[3][20]']").closest(".inputField").is(":visible")
                                                && $2("body").find("[name='FormField[3][21]']").closest(".inputField").is(":visible")
                                                && $2("body").find("[name='FormField[3][23]']").closest(".inputField").is(":visible")
                                                && $2("body").find("[name='FormField[3][22]']").closest(".inputField").is(":visible")
                                            ) {
                                                $2("body").find("[name='FormField[3][20]'], [name='FormField[3][21]'],  [name='FormField[3][22]'], [name='FormField[3][23]']").closest(".inputField").wrapAll("<div class='inputFieldGroup addressComponentsGroup2' />");
                                                $2("body").find(".addressComponentsGroup2 [name='FormField[3][21]']").closest(".inputField").insertBefore($2("body").find(".addressComponentsGroup2 [name='FormField[3][20]']").closest(".inputField"));
                                                $2("body").find(".addressComponentsGroup2 [name='FormField[3][22]']").closest(".inputField").insertBefore($2("body").find(".addressComponentsGroup2 [name='FormField[3][20]']").closest(".inputField"));
                                                //make select2 judet/localitate livrare

                                                $2("body").find("[name='FormField[3][20]']").closest(".inputField").addClass("localitiesWrapper").addClass("localitiesShipping");
                                                $2("body").find("[name='FormField[3][22]']").closest(".inputField").addClass("judeteWrapper").addClass("judeteShipping");

                                                if ("undefined" != typeof $2.fn.select2){
                                                    $2("body").find(".addressComponentsGroup2 select").select2();
                                                }
                                                var judetSelectat = "";
                                                if ("undefined" != typeof $2("body").find(".judeteShipping .selectorJudete").val()){
                                                    if ("" != $2("body").find(".judeteShipping .selectorJudete").val()) {
                                                        judetSelectat = $2("body").find(".judeteShipping .selectorJudete").val();
                                                    }
                                                    if ("" == judetSelectat) {
                                                        judetSelectat = ExpressCheckout.BuildAddressLine("shipping", "json")["State"];
                                                    }
                                                }
                                                //make select2 judet/localitate facturare 2
                                                if ("" != judetSelectat) {
                                                    $2("body").find("[name='FormField[3][22]']").val(judetSelectat).change();
                                                }
                                                _self.getLocalitiesByStateName(judetSelectat, function(localitati){
                                                    _self.renderLocalities(localitati, ".localitiesShipping");
                                                    //console.log("1 loc shipping ",ExpressCheckout.BuildAddressLine("shipping", "json")["State"]);
                                                    $2("body").find("[name='FormField[3][20]']").val(ExpressCheckout.BuildAddressLine("shipping", "json")["City"]).change();
                                                    $2("body").find(".localitiesShipping select").val(ExpressCheckout.BuildAddressLine("shipping", "json")["City"]).change();
                                                    if ("undefined" != typeof $2.fn.select2){
                                                        $2("body").find(".localitiesShipping select").select2();
                                                    }
                                                });
                                            }

                                        }
                                    }
                                }, 100);
                                // }
                                //console.log("is ShippingAddress");
                            } else if ("ShippingProvider" == currentStep) {
                                //console.log("is ShippingProvider");
                                var shippingAddress = ExpressCheckout.BuildAddressLine().toString().trim();
                                if (shippingAddress.indexOf(_self.powerLaptopAddress) > -1) {
                                    //is picking up from power laptop address
                                    //console.log("Adresa power laptop");

                                    $2("body").find(".ShippingProviderList li").each(function(){
                                        // var $shippingProvider = $2(this);
                                        // if ($shippingProvider.find("span.ShipperName").text().toLowerCase().trim().indexOf("ridicare sediu power laptop") > -1) {
                                        //     //option powerlaptop
                                        //     // $shippingProvider.find("input")[0].click();
                                        //     // $shippingProvider.find("input").prop("checked", true);
                                        //     // $shippingProvider.find("input").attr("disabled", false).prop("disabled", false);
                                        //     $shippingProvider.find("input").attr("disabled", true).prop("disabled", true);
                                        // } else if ($shippingProvider.find("span.ShipperName").text().toLowerCase().trim().indexOf("livrare prin curier") > -1) {
                                        //     //option courier
                                        //     // $shippingProvider.find("input").attr("disabled", true).prop("disabled", true);
                                        //
                                        //     $shippingProvider.find("input")[0].click();
                                        //     $shippingProvider.find("input").prop("checked", true);
                                        //     $shippingProvider.find("input").attr("disabled", false).prop("disabled", false);
                                        // }
                                    });

                                } else {
                                    //console.log("Alta adresa");
                                    $2("body").find(".ShippingProviderList li").each(function(){
                                        // var $shippingProvider = $2(this);
                                        // if ($shippingProvider.find("span.ShipperName").text().toLowerCase().trim().indexOf("ridicare sediu power laptop") > -1) {
                                        //     //option powerlaptop
                                        //     $shippingProvider.find("input").attr("disabled", true).prop("disabled", true);
                                        // } else if ($shippingProvider.find("span.ShipperName").text().toLowerCase().trim().indexOf("livrare prin curier") > -1) {
                                        //     //option courier
                                        //     $shippingProvider.find("input")[0].click();
                                        //     $shippingProvider.find("input").prop("checked", true);
                                        //     $shippingProvider.find("input").attr("disabled", false).prop("disabled", false);
                                        // }
                                    });
                                }

                                // $2("body").find("#CheckoutStepShippingProvider input[type='submit']")[0].click();
                                // TBA - calcul taxe curier
                                // selectie automata curier
                                // .shippingProviderOption
                                // data-shippingprovider
                                //Livrare prin FAN curier
                                //Livrare prin GLS curier
                                var costTransport = 15,
                                    shippingAddress = ExpressCheckout.BuildAddressLine("shipping", "json");
                                if (!localStorage.getItem("checkingtransportcost")) {
                                    localStorage.setItem("checkingtransportcost", 1);
                                    dontTriggerModification = true;
                                    $2.ajax({
                                        url: _self.apiUrl+"/fan/",
                                        data: {
                                            method: "getcost",
                                            data: btoa(JSON.stringify({
                                                "serviciu": "standard",
                                                "judet": shippingAddress["State"],
                                                "localitate": shippingAddress["City"],
                                                "plicuri": "1",
                                                "colete": "",
                                                "greutate": "1"
                                            }))
                                        },
                                        type: "POST",
                                        success: function (data) {
                                            if ("undefined" != typeof data) {
                                                if ("string" == typeof data) {
                                                    if (_self.isJson(data)) {
                                                        data = JSON.parse(data);
                                                    }
                                                }
                                                if ("undefined" != typeof data["data"]) {
                                                    if ("undefined" != typeof data["data"]) {
                                                        if (!isNaN(data["data"])) {
                                                            costTransport = data["data"];
                                                        }
                                                    }
                                                }
                                            }
                                            //console.log(data);
                                            //console.log("costTransport",costTransport);
                                            if (costTransport > 15) {
                                                // este GLS
                                                $2("body").find(".ShippingProviderList .shippingProviderOption[data-shippingprovider='Livrare prin GLS curier']")[0].click();
                                                $2("body").find(".ShippingProviderList .shippingProviderOption[data-shippingprovider='Livrare prin GLS curier']").prop("checked", true);
                                                $2("body").find(".ShippingProviderList .shippingProviderOption[data-shippingprovider='Livrare prin GLS curier']").attr("disabled", false).prop("disabled", false);

                                                $2("body").find(".ShippingProviderList .shippingProviderOption[data-shippingprovider='Livrare prin FAN curier']").attr("disabled", true).prop("disabled", true);
                                            } else {
                                                // este FAN
                                                $2("body").find(".ShippingProviderList .shippingProviderOption[data-shippingprovider='Livrare prin FAN curier']")[0].click();
                                                $2("body").find(".ShippingProviderList .shippingProviderOption[data-shippingprovider='Livrare prin FAN curier']").prop("checked", true);
                                                $2("body").find(".ShippingProviderList .shippingProviderOption[data-shippingprovider='Livrare prin FAN curier']").attr("disabled", false).prop("disabled", false);

                                                $2("body").find(".ShippingProviderList .shippingProviderOption[data-shippingprovider='Livrare prin GLS curier']").attr("disabled", true).prop("disabled", true);
                                            }
                                            $2("body").find("#CheckoutStepShippingProvider input[type='submit']")[0].click();
                                        },
                                        error: function (a, b, c) {

                                        },
                                        complete: function () {
                                            setTimeout(function(){
                                                dontTriggerModification = false;
                                                localStorage.removeItem("checkingtransportcost");
                                            },1000);
                                        }
                                    });
                                }

                                $2("body").find(".ShippingProviderList .shippingProviderOption").each(function(){
                                    var $shippingProvider = $2(this),
                                        providerName = $shippingProvider.attr("data-shippingprovider");
                                    //Livrare prin FAN curier
                                    //Livrare prin GLS curier
                                    //console.log(providerName);
                                });


                            } else if ("Confirmation" == currentStep) {
                                //console.log("is Confirmation");
                                var shippingAddress = ExpressCheckout.BuildAddressLine().toString().trim();
                                // if (shippingAddress.indexOf(_self.powerLaptopAddress) > -1) {
                                //     //sediu power laptop - cash / card
                                //     $2("body").find("#checkout_provider_checkout_cod").prop("checked", false).removeAttr("checked");
                                //     $2("body").find("#checkout_provider_checkout_instore").prop("checked", true).attr("checked","checked");
                                // } else {
                                //     //alta adresa ramburs
                                //     $2("body").find("#checkout_provider_checkout_instore").prop("checked", false).removeAttr("checked");
                                //     $2("body").find("#checkout_provider_checkout_cod").prop("checked", true).attr("checked","checked");
                                // }

                            } else if ("PaymentDetails" == currentStep) {
                                //console.log("is PaymentDetails");
                            }
                        }
                    }

                    $2("body").find('form, input, select').attr('autocomplete', 'nope');

                    //TBA - provider plata cu cardul custom
                    if ($2("body").find("#provider_list").length) {
                        if (!$2("body").find("#provider_list").hasClass("customised")) {
                            $2("body").find("#provider_list br").remove();
                            $2("body").find("#provider_list").find("input#checkout_provider_checkout_cod, label[for='checkout_provider_checkout_cod']").wrapAll("<div class='providerSelection providerCod' />");
                            $2("body").find("#provider_list").find("input#checkout_provider_checkout_payu, label[for='checkout_provider_checkout_payu']").wrapAll("<div class='providerSelection providerPayu' />");
                            $2("body").find("#provider_list .providerSelection").wrapAll("<div class='providerSelectorsWrapper' />");
                            $2("body").find("#provider_list .providerSelection").append("<div class='providerIcon'></div>");
                            $2("body").find("#provider_list .providerPayu .providerIcon").append("<div class='masterCardIcon'></div>");
                            $2("body").find("#provider_list").addClass("customised");
                        }

                        //check if products are in stock and card module settings

                    }

                    dontTriggerModification = false;
                    //console.log("Checked checkout for changes at "+(new Date().toLocaleTimeString()));
                }, 300);
            }

            // });
        }

        $2("body").find("#Wrapper").each(function(){
            var sel = this;
            new MutationObserver(function() {
                checkChangesInTheCart(sel);
            }).observe(sel, {childList: true, subtree: true});
        });

        $2("body").on("click", "[name='BillingAddressType'], input[type='submit'], input[type='radio']", function(){
            checkChangesInTheCart($2("#Wrapper"));
        });
        $2("body").on("change", "select", function(){
            checkChangesInTheCart($2("#Wrapper"));
        });
        $2("body").on("click", ".ChangeLink", function(){
            checkChangesInTheCart($2("#Wrapper"));
        });
        // },300);
        _self.clearfix("dl");

        if ($2("body").find("input[type='radio'][onclick*='ExpressCheckout.ToggleAddressType'][onclick*='Billing'][onclick*='Add']").length) {
            $2("body").find("input[type='radio'][onclick*='ExpressCheckout.ToggleAddressType'][onclick*='Billing'][onclick*='Add']").trigger("click");
        }

        if ("undefined" != typeof _self.repeaters.checkBlacklistCheckoutInitialInterval) {
            clearInterval(_self.repeaters.checkBlacklistCheckoutInitialInterval);
        }
        _self.repeaters.checkBlacklistCheckoutInitialInterval = setInterval(function(){
            // console.log("checking cycle 2");
            _self.initialCheckoutBlacklistCheck();
        },3000);
    };


    _self.rewriteAccount = function(){
        //console.log("rewritting account");
        $2("body").addClass("accountPage");

        _self.replaceImageInput($2("[alt='Vezi Detaliile Comenzii']"), null, _self.blueColor);
        _self.replaceImageInput($2("[alt='Re-Comanda']"), null, "#fff", "#666", "1px solid #ddd");

        $2("body").find("input.inputJudete").filter(function(){
            return !$2(this).parent().find(".selectorJudete").length
        }).each(function(){
            var $inpJudete = $2(this),
                $inpSelectHtml = "";
            $inpSelectHtml += '<select class="selectorJudete">';
            $inpSelectHtml += "<option value=''>Selecteaza judet</option>";
            _self.judete.forEach(function(judet, i){
                $inpSelectHtml += "<option value='"+judet['name']['ro']+"'>"+judet['name']['ro']+"</option>";
            });
            $inpSelectHtml += '</select>';
            $inpJudete.parent().append($inpSelectHtml);
            $inpJudete.parent().addClass("judeteWrapper");
            var judet = $inpJudete.val();
            if (undefined != typeof judet && "" != judet && $inpJudete.parent().find(".selectorJudete").length) {
                if ($inpJudete.parent().find(".selectorJudete option[value='"+judet+"']").length) {
                    $inpJudete.parent().find(".selectorJudete").prop("selectedIndex", $inpJudete.parent().find(".selectorJudete option[value='"+judet+"']").index()).change();
                } else {
                    $inpJudete.val("").change();
                }

            } else {
                $inpJudete.val("").change();
            }
            //console.log("triggered");
        });

        if (_self.isViewShippingAddress){
            if ($("body").find(".UtilityLinks").length > 0) {
                $2("body").find(".UtilityLinks").html($("body").find(".UtilityLinks").html().replace(" / ", ""));
            }
            $2("body").find("a[onclick*='confirm_delete_shipping_address']").remove();
        }

        if (_self.isAddShippingAddress || _self.isSaveNewShippingAddress || _self.isEditShippingAddress || _self.isCreatingAccount || _self.isSavingNewAccount) {//BEGIN SHIPPING ADDRESS
            //console.log("account form");
            if ($2("body").find("#AddressEditForm").length) {
                $2("body").find("#AddressEditForm dt").each(function () {
                    var $dt = $2(this);
                    if (!$dt.closest(".inputField").length) {
                        $dt.next('dd').andSelf().wrapAll("<div class='inputField' />");
                    }
                });
            }
            if ($2("body").find("form[action*='login.php']").length) {
                $2("body").find("form[action*='login.php'] dt").each(function () {
                    var $dt = $2(this);
                    if (!$dt.closest(".inputField").length) {
                        $dt.next('dd').andSelf().wrapAll("<div class='inputField' />");
                    }
                });
            }

            if (!$2("body").find("[name='FormField[2][8]']").closest("dd").find(".addressComponentsWrapper").length) {
                //console.log("rewriting address components");
                var $addrCompHTML = "<div class='addressComponentsWrapper billingAddressComponentsWrapper'>";
                $addrCompHTML += "<div class='addressComponentsInner'>";
                $addrCompHTML += "<div class='addressComponent addressComponentStradaWrapper'>";
                $addrCompHTML += "<label for='billingAddressComponentStrada' class='FormFieldRequired'>Strada</label>";
                $addrCompHTML += "<input type='text' class='addressComponentInput billingAddressComponentStrada' id='billingAddressComponentStrada' autocomplete='nope' />";
                $addrCompHTML += "</div>";
                $addrCompHTML += "<div class='addressComponent'>";
                $addrCompHTML += "<label for='billingAddressComponentNr' class='FormFieldRequired'>Numar</label>";
                $addrCompHTML += "<input type='text' class='addressComponentInput billingAomponentNr' id='billingAddressComponentNr' autocomplete='nope' />";
                $addrCompHTML += "</div>";
                $addrCompHTML += "<div class='addressComponent'>";
                $addrCompHTML += "<label for='billingAddressComponentBloc'>Bloc</label>";
                $addrCompHTML += "<input type='text' class='addressComponentInput billingAddressComponentBloc' id='billingAddressComponentBloc' autocomplete='nope' />";
                $addrCompHTML += "</div>";
                $addrCompHTML += "<div class='addressComponent'>";
                $addrCompHTML += "<label for='billingAddressComponentEtaj'>Etaj</label>";
                $addrCompHTML += "<input type='text' class='addressComponentInput billingAddressComponentEtaj' id='billingAddressComponentEtaj' autocomplete='nope' />";
                $addrCompHTML += "</div>";
                $addrCompHTML += "<div class='addressComponent'>";
                $addrCompHTML += "<label for='billingAddressComponentApartament'>Apartament</label>";
                $addrCompHTML += "<input type='text' class='addressComponentInput billingAddressComponentApartament' id='billingAddressComponentApartament' autocomplete='nope' />";
                $addrCompHTML += "</div>";
                $addrCompHTML += "</div>";
                $addrCompHTML += "</div>";

                $2("body").find("[name='FormField[2][8]']").closest("dd").append($addrCompHTML);
                $2("body").find("[name='FormField[2][8]']").closest(".inputField").find("dt").css({"opacity": 0});
                $2("body").find("[name='FormField[2][8]']").closest(".inputField").find(".FormFieldLabel").text("Strada");
                $2("body").find("[name='FormField[2][8]']").closest(".inputField").addClass("fullWidthInputField").addClass("hideOriginalAddress");
                $2("body").find("[name='FormField[2][8]']").val("").change();

                //remove adresa2
                if ($2("body").find("[name='FormField[2][9]']").is(":visible")) {
                    $2("body").find("[name='FormField[2][9]']").closest(".inputField").addClass("hideThis");
                }

                //nume prenume
                if (
                    $2("body").find("[name='FormField[2][4]']").closest(".inputField").is(":visible")
                    && $2("body").find("[name='FormField[2][5]']").closest(".inputField").is(":visible")
                ) {
                    $2("body").find("[name='FormField[2][4]'], [name='FormField[2][5]']").closest(".inputField").wrapAll("<div class='inputFieldGroup groupNumePrenume' />");
                }

                //mail telefon
                if (
                    $2("body").find("[name='FormField[1][1]']").closest(".inputField").is(":visible")
                    && $2("body").find("[name='FormField[2][7]']").closest(".inputField").is(":visible")
                ) {
                    $2("body").find("[name='FormField[1][1]']").closest(".inputField").insertAfter($2("body").find("[name='FormField[2][7]']").closest(".inputField"));
                } else if (
                    $2("body").find("[name='FormField[2][5]']").closest(".inputField").is(":visible")
                    && $2("body").find("[name='FormField[2][7]']").closest(".inputField").is(":visible")
                ) {
                    $2("body").find("[name='FormField[2][7]']").closest(".inputField").insertAfter($2("body").find("[name='FormField[2][5]']").closest(".inputField"));
                }

                //parola confirmare parola creating account
                //_self.isCreatingAccount || _self.isSavingNewAccount
                if (
                    $2("body").find("[name='FormField[1][2]']").closest(".inputField").is(":visible") // parola
                    && $2("body").find("[name='FormField[1][3]']").closest(".inputField").is(":visible") // confirmare parola
                ) {
                    $2("body").find("[name='FormField[1][2]'], [name='FormField[1][3]']").closest(".inputField").wrapAll("<div class='inputFieldGroup groupParolaConfirmareParola' />");
                }
                if (_self.isCreatingAccount || _self.isSavingNewAccount) {
                    if (
                        $2("body").find("[name='FormField[1][1]']").closest(".inputField").is(":visible") // mail
                        && $2("body").find("[name='FormField[2][7]']").closest(".inputField").is(":visible") // telefon
                    ) {
                        $2("body").find("[name='FormField[1][1]'], [name='FormField[2][7]']").closest(".inputField").wrapAll("<div class='inputFieldGroup groupMailTelefon' />");
                    }
                }


                if (
                    $2("body").find("[name='FormField[2][10]']").closest(".inputField").is(":visible")
                    && $2("body").find("[name='FormField[2][11]']").closest(".inputField").is(":visible")
                    && $2("body").find("[name='FormField[2][12]']").closest(".inputField").is(":visible")
                    && $2("body").find("[name='FormField[2][13]']").closest(".inputField").is(":visible")
                ) {
                    // $2("body").find("[name='FormField[2][10]'], [name='FormField[2][11]'],  [name='FormField[2][12]'], [name='FormField[2][13]']").closest(".inputField").wrapAll("<div class='inputFieldGroup addressComponentsGroup' />");
                    $2("body").find("[name='FormField[2][11]'], [name='FormFieldIsText[2][12]'],  [name='FormField[2][10]'], [name='FormField[2][13]']").closest(".inputField").wrapAll("<div class='inputFieldGroup addressComponentsGroup' />");
                    $2("body").find(".addressComponentsGroup [name='FormField[2][11]']").closest(".inputField").insertBefore($2("body").find(".addressComponentsGroup [name='FormField[2][10]']").closest(".inputField"));
                    $2("body").find(".addressComponentsGroup [name='FormField[2][12]']").closest(".inputField").insertBefore($2("body").find(".addressComponentsGroup [name='FormField[2][10]']").closest(".inputField"));
                    $2("body").find("[name='FormField[2][10]']").closest(".inputField").addClass("localitiesWrapper").addClass("localitiesBilling");
                    $2("body").find("[name='FormField[2][12]']").closest(".inputField").addClass("judeteWrapper").addClass("judeteBilling");
                    //make select2 judet/localitate facturare 1

                    if ("undefined" != typeof $2.fn.select2){
                        $2("body").find(".addressComponentsGroup select").select2();
                    }
                    var judetSelectat = "";

                    if ("undefined" != typeof $2("body").find(".judeteBilling .selectorJudete").val()){
                        if ("" != $2("body").find(".judeteBilling .selectorJudete").val()) {
                            judetSelectat = $2("body").find(".judeteBilling .selectorJudete").val();
                        }
                    }
                    if ("" != judetSelectat) {
                        $2("body").find("[name='FormField[2][12]']").val(judetSelectat).change();
                    }
                    _self.getLocalitiesByStateName(judetSelectat, function(localitati){
                        _self.renderLocalities(localitati, ".localitiesBilling");
                        if ("undefined" != typeof $2.fn.select2){
                            $2("body").find(".localitiesBilling select").select2();
                        }
                    });

                    //FormField[2][11]. FormFieldIsText[2][12], FormField[2][10],FormField[2][13]
                }

                if ($2("body").find(".judeteWrapper .FormFieldRequired").length) {
                    $2("body").find(".judeteWrapper .FormFieldRequired").css({"visibility": "visible"});
                }

                //persoane fizice/juridice
                if (
                    $2("body").find("[name='FormField[2][6]']").closest(".inputField").is(":visible")
                    && $2("body").find("[name='FormField[2][24]']").closest(".inputField").is(":visible")
                ) {
                    $2("body").find("[name='FormField[2][6]'], [name='FormField[2][24]']").closest(".inputField").wrapAll("<div class='inputFieldGroup groupFirmaCui groupPersoaneJuridiceWrapper' />");
                    $2("body").find(".groupPersoaneJuridiceWrapper").insertAfter($2("body").find(".addressComponentsGroup"));
                }

                if (!$2("body").find(".Content form .persFizicaJuridicaTabs").length) {
                    var $tabsPFJHTML = "<div class='persFizicaJuridicaTabsWrapper'>";
                    $tabsPFJHTML += "<div class='persFizicaJuridicaTabs clearfix'>";
                    $tabsPFJHTML += "<a href='javascript:void(0);' class='persFizicaJuridicaTab persFizica active'>Persoana Fizica</a>";
                    $tabsPFJHTML += "<a href='javascript:void(0);' class='persFizicaJuridicaTab persJuridica'>Persoana Juridica</a>";
                    $tabsPFJHTML += "</div>";
                    $tabsPFJHTML += "</div>";
                    $2("body").find(".Content form").prepend($tabsPFJHTML);
                }

            }

            if ($2("body").find("select.defaultcourier").length > 0) {
                var $defaultCourierSelect = $2("body").find("select.defaultcourier");
                $2.ajax({
                    url: _self.api.powersell,
                    data: {
                        method: "getdefaultcourier",
                        customerid: _self.customerData.customerId
                    },
                    success: function(resp){
                        if ("string" == typeof resp) {
                            if (_self.isJson(resp)) {
                                resp = JSON.parse(resp);
                            }
                            if ("undefined" != typeof resp["data"] && !isNaN(resp["data"]) && !!resp["data"]){
                                switch(resp["data"]) {
                                    case 12:
                                        $defaultCourierSelect.val("fan");
                                        break;
                                    case 15:
                                        $defaultCourierSelect.val("gls");
                                        break;
                                }
                            }
                        }
                    },
                    error: function(a,b,c){

                    },
                    complete: function(){

                    }
                });
            }

        } //END HIPPING ADDRESS




        $2("body").on("click", "#ShippingAddressForm input[type='submit']", function(e){
            var judeteValid = false;
            if ($2("body").find(".inputJudete").length) {
                if ("" != $2("body").find(".inputJudete").val()) {
                    judeteValid = true;
                }
            }

            if (!judeteValid) {
                e.preventDefault();
                e.stopImmediatePropagation();
                e.stopPropagation();
                alert("Va rugam selectati judetul");
                if ($2("body").find(".selectorJudete").length) {
                    $2("body").find(".selectorJudete").focus();
                }
            }
        });

        // if ($2("body").find("a[href*='account.php?action=address_book']").length) {
        //     $2("body").find("a[href*='account.php?action=address_book']").parent().hide();
        // }

        if (_self.isViewOrderList) {
            $2("body").addClass("isViewOrderList");
            if ($2("body").find(".AccountOrderStatusList input[name='order_id']").length) {
                $2("body").find(".AccountOrderStatusList input[name='order_id']").each(function () {
                    var $inp = $2(this),
                        orderid = $inp.val().toString().trim(),
                        email = (!!customerData && !!customerData.data && !!customerData.data.custconemail) ? customerData.data.custconemail : null;
                    _self.getAwb(orderid, email, function(data){
                        if (!!data && !!data["data"] && !!data["data"]["awb"]) {
                            _self.renderAwb(data, function () {
                                //console.log("Rendered awb for order "+orderid);
                            });
                        }
                    });
                });
            }
        } else if (_self.isViewOrderDetails) {
            $2("body").addClass("isViewOrderDetails");
            if ($2("body").find("#AccountOrder > h2").length) {
                $2("body").find("#AccountOrder > h2").each(function () {
                    var $title = $2(this),
                        titleText = $title.text().toString().trim(),
                        orderid = (titleText.indexOf("nr.") > -1) ? titleText.split("nr.")[1].toString().trim() : null,
                        email = (!!customerData && !!customerData.data && !!customerData.data.custconemail) ? customerData.data.custconemail : null;
                    if (null != orderid) {
                        _self.getAwb(orderid, email, function(data){
                            if (!!data && !!data["data"] && !!data["data"]["awb"]) {
                                _self.renderAwb(data, function () {
                                    //console.log("Rendered awb for order "+orderid);
                                });
                                _self.getTracking(data["data"]["awb"], function (trackingData) {
                                    //console.log("Got order tracking", trackingData);
                                    _self.renderTracking(trackingData, function () {
                                        //console.log("rendered order tracking");
                                    });
                                });
                            }
                        });
                    }
                });
            }
        }
        $2("body").find('form, input, select').attr('autocomplete', 'nope');
    }; //END REWRITE ACCOUNT

    _self.rewriteSearch = function(){
        //console.log("Rewritting search..");
        var searchKeywords = "",
            searchKeywordsHTML = "";
        $2("body").addClass("searchCustom");
        $2("#LayoutColumn2").addClass("customSearchWrapper");
        _self.clearfix("#LayoutColumn2");
        _self.clearfix("#SearchPageHeader");
        _self.clearfix("#SearchPage");


        if ("undefined" != typeof _self.getUrlParameter("search_query")) {
            if (null != _self.getUrlParameter("search_query")) {
                if ("" != _self.getUrlParameter("search_query").toLowerCase().trim()) {
                    searchKeywords = _self.getUrlParameter("search_query").toLowerCase().trim();

                    searchKeywords = searchKeywords.replace(".php", "");
                    searchKeywordsHTML += "<div class='searchKeywordTagsWrapper'><span>Termeni cautare</span>";
                    searchKeywords.split("+").forEach(function(keyword, i){
                        searchKeywordsHTML += "<a href='javascript:void(0);' class='searchKeywordTagBtn'>"+keyword+"</a>";
                    });
                    searchKeywordsHTML += "</div>";
                    if (!$2("body").find("#SearchPage .searchKeywordTagsWrapper").length) {
                        $2("body").find("#SearchPage").prepend(searchKeywordsHTML);
                    }
                    $2("body").find(".searchKeywordTagBtn").each(function(){
                        var $btn = $2(this),
                            keyword = $btn.text().trim().toLowerCase();
                        $btn.data({
                            "keyword":keyword
                        });
                    })
                }
            }
        }
        _self.searchHtmlToken = "";
        _self.getGiftsForSearch();
        if ("undefined" != typeof _self.repeaters.giftInSearchPageInterval) {
            clearInterval(_self.repeaters.giftInSearchPageInterval);
        }
        _self.repeaters.giftInSearchPageInterval = setInterval(function(){
            _self.getGiftsForSearch();
        },1000);
    };

    _self.getGiftsForSearch = function(){
        if (_self.isSearch && $2("body").find(".SearchContainer .ProductList").length) {
            var productCodes = [];

            if (btoa(unescape(encodeURIComponent($2("body").find(".SearchContainer .ProductList").html()))) != _self.searchHtmlToken) {
                $2("body").find(".ProductList [data-pcode]").each(function(){
                    var $product = $2(this),
                        pcode = $product.attr("data-pcode");
                    if (productCodes.indexOf(pcode) < 0 && !$product.find(".productGiftWrapper").length) {
                        productCodes.push(pcode);
                    }
                });

                if (_self.isSearch) {
                    //console.log("Rendering products gifts", productCodes);
                    productCodes.forEach(function(productCode, i){
                        //render this product code
                        _self.getProductGifts(productCode, function(resp){
                            _self.renderGifts(resp);
                        });
                    });
                }
                _self.searchHtmlToken = btoa(unescape(encodeURIComponent($2("body").find(".SearchContainer .ProductList").html())));
            }
        }
    };

    _self.rewriteHomepageCarousel = function(slidesData) {
        if (!$2("body").find(".homepageSlider").length) {
            var homepageSliderOptions = {
                infinite: true,
                slidesToShow: 1,
                slidesToScroll: 1,
                dots: true,
                fade: true,
                autoplay: true,
                autoplaySpeed: 5000
            };
            if (!slidesData) {
                var slidesData = [];
            }
            $2("body").append(_self.homepageSliderHtml);
            slidesData.forEach(function(slide, i){
                $2("body").find(".homepageSlider").append("<a href='"+slide["url"]+"'><img"+((i == 0) ? " fetchpriority='high'" : "  fetchpriority='low'")+" src='"+slide["imgDesktop"]+"' alt='"+slide["alt"]+"' width='955' height='484' /></a>");
            });
            // _self.loadImages();
            if (!$2("html").find("script[src*='slick.min.js']").length){
                //console.log("Including slick js");
                $2.getScript(_self.root+"/assets/scripts/slick.min.js").done(function(script, textStatus) {
                    if ("success" == textStatus) {
                        _self.createSlickCarousel(".homepageSlider", homepageSliderOptions);
                    }
                });
            } else {
                //console.log("slick js already included");
                _self.createSlickCarousel(".homepageSlider", homepageSliderOptions);
            }

        }
    };

    _self.addFiltersToNavMenu = function(){
        if ($2("body").find(".navMenuCategories .categories").length) {
            if ($2("body").find(".navMenuFiltersSelectors").length) {
                _self.loader(".navMenuFiltersSelectors", "start");
            }
            var $filterSelectors = "<h3 style='display: none;'>Alege Laptopul Tau</h3>";
            $filterSelectors+="<select id='brandsFilterInMenu' style='display: none;'></select>";
            $filterSelectors +="<select id='gameProduseFilterInMenu' style='display: none;'></select>";
            $filterSelectors +="<select id='modelsFilterInMenu' style='display: none;'></select>";
            if (!$2("body").find(".navMenuCategories .categories").find(".navMenuFiltersSelectors").length) {
                $2("body").find(".navMenuCategories .categories").append("<li class='navMenuFiltersSelectors'>"+$filterSelectors+"</li>");
            } else {
                $2("body").find(".navMenuCategories .categories").find(".navMenuFiltersSelectors select, .navMenuFiltersSelectors h3").hide();
                $2("body").find(".navMenuCategories .categories").find(".navMenuFiltersSelectors").find("select, h3").remove();
                $2("body").find(".navMenuCategories .categories").find(".navMenuFiltersSelectors").append($filterSelectors);
            }

            $2("body").find("#brandsFilterInMenu, #brandsFilterInFilterablePane").html($2("body").find("#brandsFilter").html());

            if ("function" == typeof $2.fn.select2) {
                $2("body").find("#brandsFilterInMenu, #brandsFilterInFilterablePane").select2();
                // $2("body").find("#gameProduseFilterInMenu, #gameProduseFilterInFilterablePane").select2();
                // $2("body").find("#modelsFilterInMenu, #modelsFilterInFilterablePane").select2();
            }

            clearTimeout(_self.waiters.showMenuFiltersTimeout);
            if ($2("body").find(".navMenuFiltersSelectors").length) {
                _self.loader(".navMenuFiltersSelectors", "stop");
            }
            _self.waiters.showMenuFiltersTimeout = setTimeout(function(){
                $2("body").find(".navMenuCategories .categories .navMenuFiltersSelectors h3, .navMenuCategories .categories .navMenuFiltersSelectors select#brandsFilterInMenu").fadeIn(400);
            },300);
        }
    };

    _self.implementHomepageFiltersCustom = function(){
        //d'ale lui Ionut
        _self.addFiltersToNavMenu();

        if ($2("body").find(".FilterableProducts").length) {
            $2("body").find(".FilterableProducts").addClass("customPane active");
            if (!$2("body").find(".TabbedProductsBlock").length && !$2("body").find(".TabbedProductsBlockContent").length) {
                $2("body").find(".FilterableProducts").wrapAll("<div class='BlockContent clearfix TabbedProductsBlockContent customPanes' />");
                $2("body").find(".TabbedProductsBlockContent").wrapAll("<div class='Block TabbedProductsBlock Moveable Panel' style='display: none;' />");
            }
        }
        if ($2("body").find(".Block#HomeFeaturedProducts").length && !$2("body").find(".Block#HomeFeaturedProducts").hasClass("customPane")) {
            $2("body").find(".Block#HomeFeaturedProducts").insertBefore(".FilterableProducts");
            $2("body").find(".Block#HomeFeaturedProducts").addClass("customPane");
        }
        if ($2("body").find(".Block#HomeNewProducts").length && !$2("body").find(".Block#HomeNewProducts").hasClass("customPane")) {
            $2("body").find(".Block#HomeNewProducts").insertAfter("#HomeFeaturedProducts");
            $2("body").find(".Block#HomeNewProducts").addClass("customPane");
        }

        if (!$2("body").find(".TabbedProductsBlock").find(".customTabs").length) {
            var $productCustomTabs = "<div class='customTabs clearfix'>";
            $productCustomTabs += "<a href='javascript:void(0);' class='customTabcustomTabRecomandate'>Produse Recomandate</a>";
            $productCustomTabs += "<a href='javascript:void(0);' class='customTab customTabNoi'>Produse Noi</a>";
            $productCustomTabs += "<a href='javascript:void(0);' class='customTab active customTabCauta'>Cauta produsul dorit</a>";
            $productCustomTabs += "<div class='customTabsSpacer'></div>";
            $productCustomTabs += "</div>";
            $2("body").find(".TabbedProductsBlock").prepend($productCustomTabs);
            $2("body").find(".TabbedProductsBlock .FilterableProductsFilters, .TabbedProductsBlock .customPane > h2").hide();
        }
        clearTimeout(_self.waiters.showHomepageProductTabsTimeout);
        _self.waiters.showHomepageProductTabsTimeout = setTimeout(function(){
            $2("body").find(".TabbedProductsBlock, .Content").stop(true, true).fadeIn({ duration: 300, queue: false }).css('display', 'none').slideDown(300);
            _self.loader("#Wrapper", "stop");
            $2("body").find(".TabbedProductsBlock .ProductList").each(function(){
                var $ProductList = $2(this),
                    $parentTab = $ProductList.closest(".customPane");
                if ($ProductList.find("li").length) {
                    if ($ProductList.hasClass("slick-slider")) {
                        $ProductList.slick("destroy");
                        // if ($parentTab.hasClass("FilterableProducts")) {
                        //     console.log("Filterable carousel 1");
                        //     _self.createSlickCarousel($ProductList, {
                        //         dots: true,
                        //         infinite: true,
                        //         speed: 300,
                        //         slidesToShow: 1,
                        //         slidesToScroll: 1
                        //     });
                        // } else {
                        //     _self.createSlickCarousel($ProductList);
                        // }
                    } else {
                        // if ($parentTab.hasClass("FilterableProducts")) {
                        //     console.log("Filterable carousel 2");
                        //         _self.createSlickCarousel($ProductList, {
                        //         dots: true,
                        //         infinite: true,
                        //         speed: 300,
                        //         slidesToShow: 1,
                        //         slidesToScroll: 1
                        //     });
                        // } else {
                        //     _self.createSlickCarousel($ProductList);
                        // }
                    }
                }
            });

            if (!$2("body").find(".navMenuFiltersSelectors select").length) {
                clearTimeout(_self.waiters.rebuildMissingNavMenuFiltersTimeout);
                _self.waiters.rebuildMissingNavMenuFiltersTimeout = setTimeout(function(){
                    _self.addFiltersToNavMenu();
                },500);
            }
        },300);
    };

    _self.createFilterableProductsCarousel = function(element){

        var $blockHtml = "<div class='filterableProductFiltersSelectorsWrapper'>";
        $blockHtml += "<div class='filterableProductFiltersSelectorWrapper'><select id='brandsFilterInFilterablePane' style=''><option selected='' value=''>Alege Brand</option></select></div>";
        $blockHtml += "<div class='filterableProductFiltersSelectorWrapper'><select id='gameProduseFilterInFilterablePane' style='display: none;'></select></div>";
        $blockHtml += "<div class='filterableProductFiltersSelectorWrapper'><select id='modelsFilterInFilterablePane' style='display: none;'></select></div>";
        $blockHtml += "<div class='td'>&nbsp;</div>";
        $blockHtml += "</div>";
        $blockHtml += "<h2>Cauta produsul dorit</h2>";
        $blockHtml += "<div class='FilterableProductsFilters'>";
        $blockHtml += "<div class='categoryFiltersWrapper inlineFiltersWrapper'>";
        $blockHtml +="<select id='brandsFilter'></select>";
        $blockHtml +="<select id='gameProduseFilter'></select>";
        $blockHtml +="<select id='modelsFilter'></select>";
        $blockHtml +="</div>";
        $blockHtml += "</div>";
        $blockHtml += "<div class='BlockContent clearfix'>";
        $blockHtml += "<ul class='ProductList'>";

        $blockHtml += "</ul>";
        $blockHtml += "<br class='Clear'>";
        $blockHtml += "</div>";


        $2(element).html($blockHtml);

        _self.getCategoryIds(_self.categoryId, function(catidx){
            //console.log("a");
            _self.categoryCategories = catidx;
            _self.getCategoryBrands(_self.categoryId, function(brandsx){
                _self.categoryFiltersActive = true;
                _self.categoryFilters["brand"] = "Asus";
                _self.filterCategoryProducts();

                _self.buildBrandSelector(brandsx);

                //custom filters in homepage
                _self.implementHomepageFiltersCustom();
            });
        });
    };

    _self.rewriteHomepageProducts = function(){
        if (!$2("html").find("script[src*='slick.min.js']").length){
            //console.log("Including slick js");
            $2.getScript(_self.root+"/assets/scripts/slick.min.js").done(function(script, textStatus) {
                if ("success" == textStatus) {
                    // _self.createSlickCarousel("#HomeFeaturedProducts .ProductList");
                    // _self.createSlickCarousel("#HomeNewProducts .ProductList");
                    $2("body").append("<div class='Block FilterableProducts Moveable Panel'></div>");
                    $2("body").find(".FilterableProducts").insertBefore("#HomeFeaturedProducts");
                    _self.createFilterableProductsCarousel(".FilterableProducts");
                }
            });
        } else {
            //console.log("slick js already included");
            // _self.createSlickCarousel("#HomeFeaturedProducts .ProductList");
            // _self.createSlickCarousel("#HomeNewProducts .ProductList");
            $2("body").append("<div class='Block FilterableProducts Moveable Panel'></div>");
            $2("body").find(".FilterableProducts").insertBefore("#HomeFeaturedProducts");
            _self.createFilterableProductsCarousel(".FilterableProducts");
        }
    };

    _self.renderHomepageBadges = function(){
        var HomepageBadges = '<div class="ProductBadges">' +
            '    <div class="bubbleInfo">' +
            '        <div class="trigger">' +
            '            <img src="'+_self.root+'/product_images/uploaded_images/transport-24h.png"  alt="Transport 24h">' +
            '            <h5>Livrare rapida!</h5>' +
            '        </div>' +
            '        <div class="popup" style="opacity: 0;">' +
            '            <h3>Livram 99% din comenzile noastre in 24h!</h3>' +
            '            <p>Stim ca timpul este valoros pentru tine de aceea <strong>livram foarte rapid</strong> toate comenzile noastre.</p>' +
            '            <p>Avem contract de colaborare cu 2 dintre <strong>cele mai mari firme de curierat din Romania</strong>: Fan Curier si Cargus. Ei sunt partenerii nostri care ne ajuta sa livram 99% dintre comenzi in <strong>maxim 24h de la plasarea lor!</strong></p>' +
            '        </div>' +
            '    </div>     ' +
            '    <div class="bubbleInfo">' +
            '        <div class="trigger">' +
            '            <img src="'+_self.root+'/product_images/uploaded_images/banii-inapoi-10-zile.png"  alt="Banii Inapoi">' +
            '            <h5>Banii inapoi 10 zile!</h5>' +
            '        </div>' +
            '        <div class="popup" style="opacity: 0;">' +
            '            <h3>Garantam calitatea produselor noastre!</h3>' +
            '            <p>Stim ca avem produse <strong>de cea mai buna calitate</strong>, de aceea suntem siguri ca vei fi multumit de ele.</p>' +
            '            <p>Daca, totusi, ai o nemultumire legata de un produs, il poti returna in termen de <strong>10 zile</strong> de la achizitionare, iar noi iti vom returna banii fara nicio obligatie din partea ta!</p>' +
            '        </div>' +
            '    </div>    ' +
            '        <div class="bubbleInfo">' +
            '        <div class="trigger">' +
            '            <img src="'+_self.root+'/product_images/uploaded_images/suport-asistenta-clienti.png"  alt="Asistenta Clienti">' +
            '            <h5>Suport clienti!</h5>' +
            '        </div>' +
            '        <div class="popup" style="opacity: 0;">' +
            '            <h3>Suntem alaturi de clientii nostri!</h3>' +
            '            <p>Daca nu te poti hotara asupra unui produs, sau daca nu stii ce produs se potriveste laptop-ului tau, sa stii ca <strong>suntem aici pentru tine!</strong></p>' +
            '            <p>Iti oferim consultanta prin <strong>Yahoo Messenger</strong>, <strong>telefonic</strong>, sau prin serviciul de <strong>live chat</strong> prezent pe site</p>' +
            '            </div>' +
            '    </div>' +
            '            <div class="bubbleInfo">' +
            '        <div class="trigger">' +
            '            <a href="https://powerlaptop.allshops.ro" rel="nofollow" target="_blank"> <img src="'+_self.root+'/product_images/uploaded_images/recomandat-allshops.png" alt="Recomandat AllShops" border="0"> </a>' +
            '            <h5>Recomandat!</h5>' +
            '        </div>' +
            '        <div class="popup" style="opacity: 0;">            ' +
            '            <h3>Suntem magazin premium AllShops!</h3>' +
            '            <p>AllShops este o platforma de comert online foarte cunoscuta in Romania</p>' +
            '            <p>Power Laptop este <strong>membru premium</strong> al acestei platforme si a primit <strong>recomandarea AllShops!</strong></p> Dai click pe iconita de mai jos pentru a vedea profilul nostru.' +
            '        </div>' +
            '    </div>' +
            '    <div class="bubbleInfo">' +
            '        <div class="trigger">' +
            '            <a href="https://www.okazii.ro/comunitati/okazia-lui/powerlaptop2012.html" rel="nofollow" target="_blank"> <img class="lazy" data-src="'+_self.root+'/product_images/uploaded_images/vanzator-premium-okazii.png" alt="Recomandat Okazii"> </a>' +
            '            <h5>Vanzator premium!</h5>' +
            '        </div>' +
            '        <div class="popup" style="opacity: 0;">            ' +
            '            <h3>Suntem vazantor premium pe Okazii.ro!</h3>' +
            '            <p>Okazii este <strong>cea mai mare platforma</strong> de licitatii online din Romania!</p>' +
            '            <p>Power Laptop este <strong>Vazator Premium</strong> si a obtinut acest statut in urma numeroaselor <strong>recomandari pozitive</strong> din partea clientilor. Dai click <a href="https://www.okazii.ro/comunitati/okazia-lui/powerlaptop2012.html" rel="nofollow" target="_blank">aici</a> sau pe iconita de mai jos pentru a vedea toate calificativele noastre de pe Okazii.ro!</p>' +
            '        </div>' +
            '    </div>' +
            '</div>';

        $2("body").find("#LayoutColumn2").prepend("<div class='homepageBadges'>"+HomepageBadges+"</div>");
        // _self.loadImages();
    };

    _self.rewritePages = function(){
        $2("html").addClass("pages");
        if ($2("body").find("#PageContent").length) {
            //tba
        }
    };

    _self.rewriteBrands = function(){
        $2("body").addClass("brandsCategoryPage");
        if ($2("body").find(".SubBrandList").length) {
            var lastLetter = "",
                letterChanged = true,
                isInitial = true;
            $2("body").find(".SubBrandList li").each(function(){
                var $brand = $2(this),
                    brandName =$brand.find("a").text().toLowerCase().trim(),
                    firstBrandLetter = brandName.substring(0,1);

                if (lastLetter != firstBrandLetter) {
                    lastLetter = firstBrandLetter;
                    letterChanged = true;
                } else {
                    letterChanged = false;
                }

                if (letterChanged || isInitial) {
                    $brand.before("<li class='brandLetterIndex' style='font-size: 18px; color: "+_self.blueColor+"; padding: 5px !important; text-transform: uppercase; border-bottom: 1px solid #ddd; margin-bottom: 5px !important; margin-right: 10px !important;'>"+firstBrandLetter+"</li>");
                }
                isInitial = false;
            });
        }
    };

    _self.rewriteCategory = function(){
        //console.log("Rewriting category..");
        _self.loader("#CategoryContent", "start");
        _self.removeEmptyParagraphs(".banner_category_page_top");
        _self.removeEmptyParagraphs(".CategoryDescription");
        if ($2("body").find(".banner_category_page_top").length) {
            _self.removeNspaces(".banner_category_page_top");
            // $2("body").find(".banner_category_page_top").find("p, h3").remove();
        }
        //CategoryDescription
        if ($2("body").find(".CategoryDescription").length) {
            _self.removeNspaces(".CategoryDescription");
            // $2("body").find(".CategoryDescription").find("p, h3").remove();
        }
        if ($2("body").find("#CategoryHeading > .BlockContent > h1").length) {
            $2("body").find("#CategoryHeading > .BlockContent > h1").remove();
        }
        if ($2("body").find("#CategoryHeading > .BlockContent > .SortBox").length){
            $2("body").find("#CategoryHeading > .BlockContent > .SortBox").wrap("<div class='categorySortWrapper' />");



            if ($2("body").find("#CategoryHeading > .BlockContent > .SubCategoryList").length) {
                $2("body").find("#CategoryHeading > .BlockContent > .SubCategoryList").wrapAll("<div class='categoryTopSelectors' />");
                $2("body").find(".categorySortWrapper").insertAfter($2("body").find(".categoryTopSelectors"));


                if ("categories" == window.location.pathname.replace(/\//g,"").toLowerCase()) {
                    $2("body").find(".categoryTopSelectors .SubCategoryList").prepend("<h3>Categorii</h3>");
                    $2("body").find(".categoryTopSelectors .SubCategoryList").append("<div class='toggleCategoryExpandWrapper'><a href='javascript:void(0);' class='toggleCategoryExpandBtn'>Vezi toate categoriile</a></div>");
                } else {
                    $2("body").find(".categoryTopSelectors .SubCategoryList").prepend("<h3>Branduri disponibile</h3>");
                    $2("body").find(".categoryTopSelectors .SubCategoryList").append("<div class='toggleCategoryExpandWrapper'><a href='javascript:void(0);' class='toggleCategoryExpandBtn'>Vezi toate brandurile</a></div>");
                }
                if ($2("body").find(".CategoryDescription").length) {
                    if ($2("body").find(".CategoryDescription > h2").length) {
                        $2("body").find(".categorySortWrapper").prepend("<div class='categoryDynamicTitle'><h3>"+$2("body").find(".CategoryDescription > h2").text().trim()+"</h3></div>");
                    } else {
                        $2("body").find(".categorySortWrapper").prepend("<div class='categoryDynamicTitle'><h3>"+(window.location.pathname.split("/")[window.location.pathname.split("/").length-2].replace(/-/g," ").trim())+"</h3></div>");
                    }
                    $2("body").find(".categoryTopSelectors").insertAfter($2("body").find(".CategoryDescription"));
                    $2("body").find(".categorySortWrapper").insertAfter($2("body").find(".categoryTopSelectors"));
                    $2("body").find(".CategoryDescription").find("div").filter(function(){return $2(this).text().trim() == "" && !$2(this).find("*").length}).remove();
                } else {
                    $2("body").find(".categorySortWrapper").prepend("<div class='categoryDynamicTitle'><h3>"+(window.location.pathname.split("/")[window.location.pathname.split("/").length-2].replace(/-/g," ").trim())+"</h3></div>");
                }

            } else {
                $2("body").find(".categorySortWrapper").prepend("<div class='categoryDynamicTitle'><h3>"+(window.location.pathname.split("/")[window.location.pathname.split("/").length-2].replace(/-/g," ").trim())+"</h3></div>");
            }
            if ($2("body").find(".categoryTopSelectors").length) {
                $2("body").find(".categorySortWrapper").insertAfter(".categoryTopSelectors");
            } else  if ($2("body").find(".CategoryDescription").length) {
                $2("body").find(".categorySortWrapper").insertAfter(".CategoryDescription");
            }
        }

        // $2("body").find("#CategoryHeading h1").each(function(){
        //     if (!$2("body").find("#CategoryHeading h1 .toggleCategoryDescriptionBtn").length
        //         && $2("body").find("#CategoryHeading .banner_category_page_top").length) {
        //         $2("body").find("#CategoryHeading h1").first().html("<span>"+$2("body").find("#CategoryHeading h1").first().text()+"</span>").append("<a href='javascript:void(0);' class='toggleCategoryDescriptionBtn'>Mai multe detalii</a>");
        //     }
        // });



        if ($2("body").find("#CategoryHeading .SubCategoryList li").length) {
            var subcategories = [];
            $2("body").find("#CategoryHeading .SubCategoryList li").each(function(){
                var $subcategory = $2(this);
                subcategories.push({
                    "name": $subcategory.text(),
                    "url": ($subcategory.find("a").length) ? $subcategory.find("a").attr("href") : null
                });
            });

            var $subcatSelector = "<div class='subcategoriesSelector'>";
            $subcatSelector += "<input type='text' class='subcategoriesSelectorInput' placeholder='Alege "+$2("body").find("h1").first().find("span").text()+"' autocomplete='nope' />";
            $subcatSelector += "<div class='subcategoriesSelectorAutocomplete'>";
            subcategories.forEach(function(subcategory, i){
                $subcatSelector += "<a class='subcategoriesSelectorAutocompleteItem"+((!i) ? " selected":"")+"' href='"+subcategory["url"]+"'>"+subcategory["name"]+"</a>";
            });
            $subcatSelector += "</div>";

            $subcatSelector += "</div>";
            // if (20 < subcategories.length) {
            //     $2("body").find("#CategoryHeading .SubCategoryList").empty().html($subcatSelector);
            // }
            if (6 < subcategories.length) {
                // $2("body").find("#CategoryHeading .SubCategoryList").append("<a href='javascript:void(0);' class='toggleSubcategoriesListBtn'>Afiseaza toate subcategoriile</a>");
            }
            //console.log(subcategories);
        }

        //compare products
        // if ($2("body").find(".CompareButton").length) {
        //     var $inp = $2("body").find(".CompareButton input[type='image']"),
        //         $compareHtml = "<div class='comparedProductsWrapper'>"+
        //                             "<div class='comparedProducts'>Selecteaza minim 2 produse pentru a le compara</div>"+
        //                             "<div class='comparedProductsButtonWrapper'>"+
        //                                 "<a href='javascript:void(0);' class='customCompareBtn'>Compara produse</a>"+
        //                             "</div>"+
        //                         "</div>";
        //     $inp.addClass("hide");
        //     if (!$2("body").find(".comparedProductsWrapper").length) {
        //         $2("body").find(".CompareButton").append($compareHtml);
        //     }
        // }

        if ($2("body").find("#CategoryHeading .CategoryDescription").length) {
            if ($2("head").find("link[rel='alternate'][type='application/rss+xml'][href*='categoryid=']").length) {
                _self.categoryId = parseInt($2("head").find("link[rel='alternate'][type='application/rss+xml'][href*='categoryid=']").first().attr("href").split("categoryid=")[1].split("&")[0],10);
                //console.log("Category ID: "+_self.categoryId);

                var brands = [],
                    catids = [],
                    models = [],
                    gameproduse = [],
                    products = [],
                    filtersHTML = "";

                if (!_self.categoryUnfilteredProductsHTML && !_self.categoryProductHasEmptyPrice()) {
                    _self.categoryUnfilteredProductsHTML = $2('body').find('.ProductList').html();
                }
                if (!_self.categoryUnfilteredPaginatorHTML && !_self.categoryProductHasEmptyPrice()) {
                    _self.categoryUnfilteredPaginatorHTML = $2('body').find('#CategoryPagingBottom').html();
                }

                _self.buildFiltersHTML();
                _self.getCategoryIds(_self.categoryId, function(catidx){
                    //console.log("a");
                    _self.categoryCategories = catidx;
                    _self.getCategoryBrands(_self.categoryId, function(brandsx){
                        //console.log("b");
                        if (window.location.pathname.trim().split("/").filter(function(value){return !!value}).length < 3) { // if is primary category
                            _self.buildBrandSelector(brandsx, function(){
                                var CatTitle = "",
                                    canUseTitleToSelect = false,
                                    appleBrandWords = ["iphone", "ipad", "macbook"],
                                    isApple = false;
                                if ($2("body").find(".categoryDynamicTitle h3").length > 0) {
                                    CatTitle = $2("body").find(".categoryDynamicTitle h3").text().trim().toLowerCase();
                                    // console.log("CatTitle", CatTitle);
                                    if ($2("body").find("#brandsFilter").length > 0 && CatTitle.length > 0) {
                                        if ($2("body").find("#brandsFilter option").length > 0) {
                                            if ($2("body").find("#brandsFilter").find("option").filter(function(){
                                                appleBrandWords.forEach(function(appleBrandWord, a){
                                                    if (CatTitle.toLowerCase().indexOf(appleBrandWord) > -1) {
                                                        isApple = true;
                                                    }
                                                });
                                                return (true == isApple) > -1 ? true : false;
                                            }).length > 0) {
                                                canUseTitleToSelect = true;
                                            }
                                        }
                                    }
                                }
                                if (canUseTitleToSelect) {
                                    var longestBrand = "";
                                    if (isApple == true) {
                                        longestBrand = "apple";
                                    } else {
                                        $2("body").find("#brandsFilter").find("option").each(function () {
                                            if (CatTitle.indexOf($2(this).text().trim().toLowerCase()) > -1) {
                                                if (longestBrand.trim().length < $2(this).text().trim().toLowerCase().length) {
                                                    longestBrand = $2(this).text().trim().toLowerCase();
                                                }
                                            }
                                        });
                                    }

                                    $2("body").find("#brandsFilter").prop("selectedIndex", $2("body").find("#brandsFilter").find("option").filter(function(){
                                        return $2(this).text().trim().toLowerCase().indexOf(longestBrand) > -1 ? true : false;
                                    }).index()).change();
                                }
                            });
                        } else {// is secondary category
                            _self.buildBrandSelector(brandsx, function(){
                                var CatTitle = "",
                                    canUseTitleToSelect = false,
                                    appleBrandWords = ["iphone", "ipad", "macbook"],
                                    isApple = false;
                                if ($2("body").find(".categoryDynamicTitle h3").length > 0) {
                                    CatTitle = $2("body").find(".categoryDynamicTitle h3").text().trim().toLowerCase();
                                    // console.log("CatTitle", CatTitle);
                                    if ($2("body").find("#brandsFilter").length > 0 && CatTitle.length > 0) {
                                        if ($2("body").find("#brandsFilter option").length > 0) {
                                            if ($2("body").find("#brandsFilter").find("option").filter(function(){
                                                if (CatTitle.indexOf($2(this).text().trim().toLowerCase()) > -1) {
                                                    // console.log("CatTitle",CatTitle,"has option",$2(this).text().trim().toLowerCase());
                                                }

                                                appleBrandWords.forEach(function(appleBrandWord, a){

                                                    if (CatTitle.toLowerCase().indexOf(appleBrandWord) > -1) {
                                                        isApple = true;
                                                    }
                                                });
                                                return CatTitle.indexOf($2(this).text().trim().toLowerCase() || true == isApple) > -1 ? true : false;
                                            }).length > 0) {
                                                canUseTitleToSelect = true;
                                            }
                                        }
                                    }
                                }
                                if (canUseTitleToSelect) {
                                    var longestBrand = "";
                                    if (isApple == true) {
                                        longestBrand = "apple";
                                    } else {
                                        $2("body").find("#brandsFilter").find("option").each(function () {
                                            if (CatTitle.indexOf($2(this).text().trim().toLowerCase()) > -1) {
                                                if (longestBrand.trim().length < $2(this).text().trim().toLowerCase().length) {
                                                    longestBrand = $2(this).text().trim().toLowerCase();
                                                }
                                            }
                                        });
                                    }

                                    $2("body").find("#brandsFilter").prop("selectedIndex", $2("body").find("#brandsFilter").find("option").filter(function(){
                                        return $2(this).text().trim().toLowerCase().indexOf(longestBrand) > -1 ? true : false;
                                    }).index()).change();
                                } else if (!!_self.getUrlParameter("brand")) {
                                    var urlBrand = _self.getUrlParameter("brand");
                                    $2("body").find(".categoryFiltersWrapper #brandsFilter").prop("selectedIndex", $2("body").find(".categoryFiltersWrapper #brandsFilter option").filter(function(){
                                        return $2(this).val() == urlBrand ? true : false;
                                    }).first().index()).change();
                                    $2("body").find("#brandsFilterSticky").prop("selectedIndex", $2("body").find("#brandsFilter option").filter(function(){
                                        return $2(this).val() == urlBrand ? true : false;
                                    }).first().index()).change();
                                } else if ("undefined" != typeof _self.filters.brand) {
                                    var selfBrand = _self.filters.brand,
                                        selfBrandName = _self.filters.brandName;
                                    $2("body").find(".categoryFiltersWrapper #brandsFilter").prop("selectedIndex", $2("body").find(".categoryFiltersWrapper #brandsFilter option").filter(function(){
                                        return $2(this).val() == selfBrand ? true : false;
                                    }).first().index()).change();
                                    $2("body").find("#brandsFilterSticky").prop("selectedIndex", $2("body").find("#brandsFilter option").filter(function(){
                                        return $2(this).val() == selfBrand ? true : false;
                                    }).first().index()).change();
                                } else {
                                    // $2("body").find(".categoryFiltersWrapper #brandsFilter").prop("selectedIndex", $2("body").find(".categoryFiltersWrapper #brandsFilter option").filter(function(){
                                    //     return $2(this).text().toLowerCase() != "alege brand" ? true : false;
                                    // }).first().index()).change();
                                    // $2("body").find("#brandsFilterSticky").prop("selectedIndex", $2("body").find("#brandsFilter option").filter(function(){
                                    //     return $2(this).text().toLowerCase() != "alege brand" ? true : false;
                                    // }).first().index()).change();
                                }
                            });

                            // $2("body").find(".categoryFiltersWrapper #brandsFilter option").filter(function(){
                            //     return $2(this).text().toLowerCase() == "alege brand" ? true : false;
                            // }).remove();
                            // $2("body").find("#brandsFilterSticky option").filter(function(){
                            //     return $2(this).text().toLowerCase() == "alege brand" ? true : false;
                            // }).remove();
                        }

                        if (_self.categoryProductHasEmptyPrice()) {
                            _self.filterCategoryProducts(true);
                        } else {
                            _self.loader("#CategoryContent", "stop");
                            $2("body").find("#CategoryContent .ProductList").fadeIn();
                        }
                    });
                });


            }
        }

        if ($2("body").find("#CategoryHeading .CategoryDescription img").length &&
            !$2("body").find(".categoryCustomBannerWrapper").length) {
            //console.log("Found category banner img");
            var imgSrc = $2("body").find("#CategoryHeading .CategoryDescription img").first().attr("src"),
                customCategoryBannerHTML = "";
            customCategoryBannerHTML += "<div class='categoryCustomBannerWrapper'>";
            customCategoryBannerHTML += "<img class='lazy' data-src='"+imgSrc+"' />";
            customCategoryBannerHTML += "</div>";
            $2("body").find(".categoryBannerContainerFilters").show().html(customCategoryBannerHTML);
            $2("body").find(".categoryFiltersWrapper").removeClass("inlineFiltersWrapper");
            _self.loadImages();
        }

    };

    _self.categoryProductHasEmptyPrice = function(){
        if (_self.isCategory) {
            //console.log("checking for empty price", _self.categoryCategories);
            if ($2("body").find(".ProductList .ProductPriceRating").length) {
                if (!(/\d/.test($2(".ProductList .ProductPriceRating").text().trim()))) {
                    //console.log("found empty price");
                    return true;
                }
            }
        }
        return false;
    };

    _self.rewriteFooter = function(){
        $2.ajax({
            url: _self.api.footer,
            success: function(data){
                //console.log("Footer content");
                //console.log(data);
                var $footerInner = $2("<div />");
                $footerInner.addClass("FooterInner");
                $footerInner.html(data);
                $footerInner.find("br").remove();

                $2("body").find("#Footer").html($footerInner);

                var $anpcIcons = "<div class='anpcIconsWrapper anpc-holder'>";
                $anpcIcons += "<a href='https://anpc.ro/ce-este-sal/' target='_blank' rel='nofollow' aria-label='Ce este SAL'><span class='anpc-sal'></span></a>";
                $anpcIcons += "<a href='https://ec.europa.eu/consumers/odr/main/index.cfm?event=main.home2.show&amp;lng=RO' target='_blank' rel='nofollow' aria-label='Platforma SOL'><span class='anpc-sol'></span></a>";
                $anpcIcons += "</div>";

                $2("body").find("#Footer").append($anpcIcons);

                var $socialIcons = "<div class='socialIconsWrapper'>";
                $socialIcons += "<a href='https://www.facebook.com/powerlaptop/' class='facebook socialIcon' target='_blank' loading='lazy' rel='nofollow'  aria-label='Facebook Power Laptop'><i class='fab fa-facebook-f' loading='lazy'></i></a>";
                $socialIcons += "<a href='https://www.youtube.com/channel/UCACyyaXIwvHJ-ESe4DmK68A/' class='youtube socialIcon' target='_blank' rel='nofollow' loading='lazy' aria-label='Youtube Power Laptop'><i  class='fab fa-youtube' loading='lazy'></i></a>";
                $socialIcons += "<a href='https://www.instagram.com/powerlaptop/' class='instagram socialIcon' target='_blank' loading='lazy' rel='nofollow' aria-label='Instagram Power Laptop'><i class='fab fa-instagram' loading='lazy'></i></a>";
                $socialIcons += "</div>";

                $2("body").find("#Footer").append($socialIcons);
                $2("body").find("#Footer").append("<div class='copyrightContent'>&copy; "+new Date().getFullYear()+" Power Laptop</div>")
            },
            error: function(a,b,c) {
                //console.log(a,b,c);
            }
        });
    };

    _self.rewriteOrderSuccess = function(){ //TBA to live
        if ($2("body").find(".SuccessMessage").length > 0) {

            if ($2("body").find(".SuccessMessage").text().toString().trim() != "") {
                if ($2("body").find("#Wrapper .Block").not(".TopSellers").length) {
                    if ($2("body").find("#Wrapper .Block").not(".TopSellers").find(".thanksOrder").length == 0) {
                        var thanksOrderHtml = "<div class='thanksOrder'><div class='thanksOrderCheck'><span></span></div></div>";
                        $2("body").find("#Wrapper .Block").not(".TopSellers").addClass("orderSuccessContent").prepend(thanksOrderHtml);
                    }
                }
                if ($2("body").find(".orderSuccessContent").length) {
                    if (window.location.href.toString().indexOf("provider=checkout_payu") > -1) {
                        var payuMessage = "";

                        if ("undefined" != typeof _self.repeaters.checkPayuMessageRepeater) {
                            clearInterval(_self.repeaters.checkPayuMessageRepeater);
                        }

                        if ("undefined" != typeof window.cardFinishOrderMessage) {
                            clearInterval(_self.repeaters.checkPayuMessageRepeater);
                            $2("body").find(".orderSuccessContent h2").remove();
                            $2("body").find(".orderSuccessContent .BlockContent").html("<h2>Va multumim pentru comanda!</h2><p class='SuccessMessage'>"+window.cardFinishOrderMessage+"</p>");
                        }

                    } else {
                        $2("body").find(".orderSuccessContent h2").remove();
                        $2("body").find(".orderSuccessContent .BlockContent").html("<h2>Va multumim pentru comanda!</h2><p class='SuccessMessage'>Comanda a fost inregistrata si vei primi actualizari prin email sau sms</p>");
                    }
                }


            } else if ($2("body").find(".ErrorMessage").is(":visible")){

            }
        }

        if ("undefined" != typeof _self.repeaters.cartStillNotEmptyRepeater) {
            clearInterval(_self.repeaters.cartStillNotEmptyRepeater);
        }

        _self.repeaters.cartStillNotEmptyRepeater = setInterval(function(){
            if ($2("body").find(".miniCartListWrapper .miniCartItemRemove").length) {
                $2("body").find(".miniCartListWrapper .miniCartItemRemove").each(function(){
                    var $removeBtn = $2(this);
                    $removeBtn.click();
                });
                clearInterval(_self.repeaters.cartStillNotEmptyRepeater);
            }
        },100);
    };

    _self.buildFiltersHTML = function(){
        //console.log("Building filters HTML");
        var filtersHTML = "<div class='categoryFiltersWrapper'>";
        filtersHTML +="<select id='brandsFilter'></select>";
        filtersHTML +="<select id='gameProduseFilter' style='display: none;'></select>";
        filtersHTML +="<select id='modelsFilter' style='display: none;'></select>";
        filtersHTML +="</div>";

        var filtersHTMLSticky = "<div class='categoryFiltersWrapperSticky'>";
        filtersHTMLSticky +="<div class='categoryFiltersWrapperStickyInner'>";
        filtersHTMLSticky +="<select id='brandsFilterSticky'></select>";
        filtersHTMLSticky +="<select id='gameProduseFilterSticky' style='display: none;'></select>";
        filtersHTMLSticky +="<select id='modelsFilterSticky' style='display: none;'></select>";
        filtersHTMLSticky +="</div>";
        filtersHTMLSticky +="</div>";


        $2("body").prepend(filtersHTMLSticky);
        // $2("body").find(".CategoryDescription .categoryFiltersWrapper").remove();
        var hasDescriptionBanner = false;
        if (!$2("body").find(".categoryBannerWrapperFilters").length) {
            if (!$2("body").find(".categoryBannerContainerFilters").length) {
                if (!$2("body").find(".CategoryDescription > div").length) {
                    $2("body").find(".CategoryDescription").append("<div></div>");
                } else {
                    hasDescriptionBanner = true;
                }

                $2("body").find(".CategoryDescription > div").first().wrap("<div class='categoryBannerContainerFilters'/>");
            }
            $2("body").find(".CategoryDescription .categoryBannerContainerFilters").wrap("<div class='categoryBannerWrapperFilters'/>");
        }

        if (!$2("body").find(".categoryBannerWrapperFilters").find(".categoryFiltersWrapper").length) {
            $2("body").find(".categoryBannerWrapperFilters").prepend(filtersHTML);
        }
        if (!hasDescriptionBanner) {
            $2("body").find(".categoryBannerContainerFilters").hide();
            $2("body").find(".categoryFiltersWrapper").addClass("inlineFiltersWrapper");
            $2("body").find(".categoryBannerWrapperFilters").addClass("inlineFiltersContainer");
        }

        if (!!_self.getUrlParameter("brand") || !!_self.getUrlParameter("model") || !!_self.getUrlParameter("gama")) {
            _self.categoryFiltersActive = false;
            if ($2("body").find(".categoryFiltersWrapper #brandsFilter").length) {
                $2("body").find(".categoryFiltersWrapper #brandsFilter").prop("selectedIndex", $2("body").find(".categoryFiltersWrapper #brandsFilter option").filter(function(){
                    return $2(this).text() == _self.getUrlParameter("brand");
                }).first().index()).change();
            }
            if ($2("body").find("#brandsFilterSticky").length) {
                $2("body").find("#brandsFilterSticky").prop("selectedIndex", $2("body").find("#brandsFilterSticky option").filter(function(){
                    return $2(this).text() == _self.getUrlParameter("brand");
                }).first().index()).change();
            }
            if ($2("body").find(".categoryFiltersWrapper #modelsFilter").length) {
                $2("body").find(".categoryFiltersWrapper #modelsFilter").prop("selectedIndex", $2("body").find(".categoryFiltersWrapper #modelsFilter option").filter(function () {
                    return $2(this).text() == _self.getUrlParameter("model");
                }).first().index()).change();
            }
            if ($2("body").find("#modelsFilterSticky").length) {
                $2("body").find("#modelsFilterSticky").prop("selectedIndex", $2("body").find("#modelsFilterSticky option").filter(function () {
                    return $2(this).text() == _self.getUrlParameter("model");
                }).first().index()).change();
            }
            if ($2("body").find(".categoryFiltersWrapper #gameProduseFilter").length) {
                $2("body").find(".categoryFiltersWrapper #gameProduseFilter").prop("selectedIndex", $2("body").find(".categoryFiltersWrapper #gameProduseFilter option").filter(function () {
                    return $2(this).text() == _self.getUrlParameter("gama");
                }).first().index()).change();
            }
            if ($2("body").find("#gameProduseFilterSticky").length) {
                $2("body").find("#gameProduseFilterSticky").prop("selectedIndex", $2("body").find("#gameProduseFilterSticky option").filter(function () {
                    return $2(this).text() == _self.getUrlParameter("gama");
                }).first().index()).change();
            }
        } else if (
            "undefined" != typeof _self.filters.brand
            && "undefined" != typeof _self.filters.gama
            && "undefined" != typeof _self.filters.model
        ) {
            _self.categoryFiltersActive = false;
            if ($2("body").find(".categoryFiltersWrapper #brandsFilter").length) {
                $2("body").find(".categoryFiltersWrapper #brandsFilter").prop("selectedIndex", $2("body").find(".categoryFiltersWrapper #brandsFilter option").filter(function(){
                    return $2(this).text() == _self.filters.brand || $2(this).text() == _self.filters.brandName;
                }).first().index()).change();
            }
            if ($2("body").find("#brandsFilterSticky").length) {
                $2("body").find("#brandsFilterSticky").prop("selectedIndex", $2("body").find("#brandsFilterSticky option").filter(function(){
                    return $2(this).text() == _self.filters.brand || $2(this).text() == _self.filters.brandName;
                }).first().index()).change();
            }
            if ($2("body").find(".categoryFiltersWrapper #modelsFilter").length) {
                $2("body").find(".categoryFiltersWrapper #modelsFilter").prop("selectedIndex", $2("body").find(".categoryFiltersWrapper #modelsFilter option").filter(function () {
                    return $2(this).text() == _self.filters.model;
                }).first().index()).change();
            }
            if ($2("body").find("#modelsFilterSticky").length) {
                $2("body").find("#modelsFilterSticky").prop("selectedIndex", $2("body").find("#modelsFilterSticky option").filter(function () {
                    return $2(this).text() == _self.filters.model;
                }).first().index()).change();
            }
            if ($2("body").find(".categoryFiltersWrapper #gameProduseFilter").length) {
                $2("body").find(".categoryFiltersWrapper #gameProduseFilter").prop("selectedIndex", $2("body").find(".categoryFiltersWrapper #gameProduseFilter option").filter(function () {
                    return $2(this).text() == _self.filters.gama;
                }).first().index()).change();
            }
            if ($2("body").find("#gameProduseFilterSticky").length) {
                $2("body").find("#gameProduseFilterSticky").prop("selectedIndex", $2("body").find("#gameProduseFilterSticky option").filter(function () {
                    return $2(this).text() == _self.filters.gama;
                }).first().index()).change();
            }
        }
        _self.categoryFiltersActive = true;
    };

    _self.buildBrandSelector = function (brands, callback){
        //console.log("Ree this", brands);
        var brandFilterHTML = "<option selected value=''>Alege Brand</option>";
        brands = brands.filter(function(obj){return obj["brandname"] != null});
        brands.sort(function(a, b) {
            var textA = a["brandname"].toUpperCase();
            var textB = b["brandname"].toUpperCase();
            return (textA < textB) ? -1 : (textA > textB) ? 1 : 0;
        });

        brands.forEach(function(brand, i){
            if (!!brand["brandid"]) {
                brandFilterHTML += "<option class='brandOption' value='" + brand["brandid"] + "'>" + brand["brandname"] + "</option>";
            } else {
                if (!!brand["brandname"]) {
                    brandFilterHTML += "<option class='brandOption' value='" + brand["brandname"] + "'>" + brand["brandname"] + "</option>";
                }
            }
        });

        $2("body").find("#brandsFilter, #brandsFilterSticky").empty();
        if ($2("body").find("#brandsFilter").length) {
            $2("body").find("#brandsFilter").html(brandFilterHTML);

            if ($2("body").find("#brandsFilterSticky").length) {
                $2("body").find("#brandsFilterSticky").html(brandFilterHTML);
            }
        }
        if ("function" == typeof callback){
            callback();
        }
    };

    _self.buildGamaSelector = function (gameproduse){
        //console.log("will run callback 3 for game", gameproduse);
        var gamaFilterHTML = "<option selected value=''>Alege Gama</option>";
        gameproduse = gameproduse.filter(function(obj){return obj["gama"] != null});
        gameproduse.sort(function(a, b) {
            var textA = a["gama"].toUpperCase();
            var textB = b["gama"].toUpperCase();
            return (textA < textB) ? -1 : (textA > textB) ? 1 : 0;
        });
        gameproduse.forEach(function(gama, i){
            if (_self.isHomepage) {
                if (gama["gama"].toLowerCase().indexOf("cauta dupa") == -1) {
                    gamaFilterHTML +="<option value='"+gama["gama"]+"'>"+gama["gama"]+"</option>";
                }
            } else {
                gamaFilterHTML +="<option value='"+gama["gama"]+"'>"+gama["gama"]+"</option>";
            }

        });
        if ($2("body").find("#gameProduseFilter").length){
            $2("body").find("#gameProduseFilter").html(gamaFilterHTML);
        }
        if ($2("body").find("#gameProduseFilterSticky").length){
            $2("body").find("#gameProduseFilterSticky").html(gamaFilterHTML);
        }
        if (gameproduse.length) {
            if ($2("body").find("#gameProduseFilter").length){
                $2("body").find("#gameProduseFilter").show();
            }
            if ($2("body").find("#gameProduseFilterSticky").length){
                $2("body").find("#gameProduseFilterSticky").show();
            }
        } else {
            if ($2("body").find("#gameProduseFilter").length){
                $2("body").find("#gameProduseFilter").hide();
            }
            if ($2("body").find("#gameProduseFilterSticky").length){
                $2("body").find("#gameProduseFilterSticky").hide();
            }
            if ($2("body").find("#modelsFilter").length){
                $2("body").find("#modelsFilter").hide();
            }
            if ($2("body").find("#modelsFilterSticky").length){
                $2("body").find("#modelsFilterSticky").hide();
            }
        }
    };

    _self.buildModelSelector = function (models){
        //console.log("will run callback 3 for models", models);
        var modelFilterHTML = "<option selected value=''>Alege Model</option>";
        models.sort(function(a, b) {
            var textA = a["model"].toUpperCase();
            var textB = b["model"].toUpperCase();
            return (textA < textB) ? -1 : (textA > textB) ? 1 : 0;
        });
        models.forEach(function(model, i){
            modelFilterHTML +="<option value='"+model["model"]+"'>"+model["model"]+"</option>";
        });
        if ($2("body").find("#modelsFilter").length){
            $2("body").find("#modelsFilter").html(modelFilterHTML);
        }
        if ($2("body").find("#modelsFilterSticky").length){
            $2("body").find("#modelsFilterSticky").html(modelFilterHTML);
        }
        if (models.length) {
            if ($2("body").find("#modelsFilter").length){
                $2("body").find("#modelsFilter").show();
            }
            if ($2("body").find("#modelsFilterSticky").length){
                $2("body").find("#modelsFilterSticky").show();
            }
        } else {
            if ($2("body").find("#modelsFilter").length){
                $2("body").find("#modelsFilter").hide();
            }
            if ($2("body").find("#modelsFilterSticky").length){
                $2("body").find("#modelsFilterSticky").hide();
            }
        }
    };

    _self.getCategoryIds = function(catId, callback){
        if ("undefined" == catId || 0 == catId) {
            var catId = "all";
        }
        $2.ajax({
            url: _self.api["filters"],
            data: {
                method: "getCatIds",
                categoryid: catId
            },
            success: function(data){
                if ("string" == typeof data) {
                    data = JSON.parse(data);
                }
                if ("function" == typeof callback){
                    _self.categoryFilters["category"] = data;
                    callback(data);
                }
            },
            error: function(a,b,c){
                //console.log(a,b,c);
            }
        });
    };

    _self.getCategoryBrand = function($catid, callback){
        //console.log("a1", $id);
        if (!$catid || isNaN($catid)) {
            var ids = 0;
        }
        $2.ajax({
            url: _self.api["filters"],
            data: {
                method: "getBrand",
                categoryid: $catid
            },
            success: function(data){
                if ("string" == typeof data) {
                    data = JSON.parse(data);
                }
                //console.log("brand");
                //console.log(data);
                if ("function" == typeof callback){
                    callback(data);
                }
            },
            error: function(a,b,c){
                //console.log(a,b,c);
            }
        });
    };

    _self.getCategoryBrands = function($id, callback){
        //console.log("a1", $id);
        if (!$id || isNaN($id)) {
            var $id = "all";
        }
        $2.ajax({
            url: _self.api["filters"],
            data: {
                method: "getBrands",
                categoryid: $id
            },
            success: function(data){
                if ("string" == typeof data) {
                    data = JSON.parse(data);
                }
                //console.log("brands");
                //console.log(data);
                if ("function" == typeof callback){
                    callback(data);
                }
            },
            error: function(a,b,c){
                //console.log(a,b,c);
            }
        });
    };

    _self.getBrandGama = function(brandid, callback){
        if (!brandid) {
            var brandid = 0;
        }
        brandid = parseInt(brandid, 10);

        if (!!brandid){
            //console.log("found game brandid ", brandid);

            _self.getCategoryIds(_self.categoryId, function(catidx){
                //console.log("a");
                _self.categoryCategories = catidx;
                _self.getCategoryBrands(_self.categoryId, function(brandsx){
                    $2.ajax({
                        url: _self.api["filters"],
                        data: {
                            method: "getGama",
                            brandid: brandid,
                            category: _self.categoryCategories.join(",")
                        },
                        success: function(data){
                            //console.log("found game for ", brandid, data);
                            if ("string" == typeof data) {
                                data = JSON.parse(data);
                            }
                            //console.log("brands");
                            //console.log(data);
                            if ("function" == typeof callback){

                                callback(data);
                            }
                        },
                        error: function(a,b,c){
                            //console.log(a,b,c);
                        }
                    });
                });
            });
        }
    };

    _self.getGamaModels = function(gamaid, callback){
        if (!gamaid) {
            var gamaid = "";
        }
        if (!!gamaid){
            $2.ajax({
                url: _self.api["filters"],
                data: {
                    method: "getModels",
                    brandid: _self.categoryFilters["brand"],
                    gamaid: gamaid,
                    category: _self.categoryId
                },
                success: function(data){
                    if ("string" == typeof data) {
                        data = JSON.parse(data);
                    }
                    //console.log("brands");
                    //console.log(data);
                    if ("function" == typeof callback){
                        callback(data);
                    }
                },
                error: function(a,b,c){
                    //console.log(a,b,c);
                }
            });
        }
    };

    _self.replaceImageInput = function($button, $text, $backgroundColor, $textColor, $border){
        if ("undefined" == typeof $backgroundColor || null == $backgroundColor || "" == $backgroundColor) {
            var $backgroundColor = _self.blueColor;
        }
        if ("undefined" == typeof $textColor || null == $textColor || "" == $textColor) {
            var $textColor = "#fff";
        }
        if ("undefined" == typeof $border || null == $border || "" == $border) {
            var $border = "none";
        }

        $2("body").find($button).each(function(){
            var $btn = $2(this),
                alt = ("undefined" != typeof $btn.attr("alt")) ? $btn.attr("alt") : "";
            if ("undefined" == typeof $text || null == $text) {
                var $text = alt;
            }
            if ("" != $text) {
                $btn.addClass("hideThisBtn").wrap("<div class='fakeBtn"+(('none' != $border) ? " bordered" : "")+"' style='background-color: "+$backgroundColor+" !important; border: "+$border+"' />");
                $btn.closest(".fakeBtn").prepend("<span class='fakeSpan' style='color: "+$textColor+";'>"+$text+"</span>");
            }
        });
    };

    _self.clearfix = function($el){
        if ($2("body").find($el).length) {
            $2("body").find($el).addClass("clearfix");
        }
    };

    _self.removeEmptyParagraphs = function(container){
        $2("body").find(container+" p").each(function(){
            var p = $2(this);
            if ("" == p.text().replace(/\s/gi, "") && p.html().replace(/&nbsp;/g, "").trim() == "" && !p.find("*").length) {
                p.remove();
            }
        });
    };
    _self.removeNspaces = function(container){
        if ($2("body").find(container).length) {
            $2("body").find(container).html($2("body").find(container).html().replace(/&nbsp;/gi, ""));
        }
    };

    _self.showAutocomplete = function(searchResults){
        $2(".customDesktopHeader .searchWrapper").find(".searchAutocomplete").remove();
        var autocompleteHtml = "";
        if ("string" == typeof searchResults) {
            searchResults = JSON.parse(searchResults);
        }
        //console.log("SEARCH RESULTS",searchResults);
        if ("undefined" != typeof searchResults.results) {
            if (searchResults.results.length) {
                var autocompleteHtml = "<div class='searchAutocomplete'>";
                autocompleteHtml += "<h4>Sugestii de cautare</h4>";
                autocompleteHtml += "<a href='"+window.location.protocol+"//"+window.location.host+"/cauta/"+$2("body").find(".customSearch").val().trim().replace(/\s/g, "+").toLowerCase()+"' class='autocompleteResult'><strong>"+$2("body").find(".customSearch").val().trim().toLowerCase()+"</strong></a>";
                searchResults.results.forEach(function(result, i){
                    var name = "",
                        catname = "";
                    if ("undefined" != typeof result.name && null != result.name) {
                        name = result.name.split(" ").filter(function(item, i){
                            return (i < 6);
                        }).join(" ")
                    }
                    if ("undefined" != typeof result.catparentname && null != result.catparentname) {
                        catname = result.catparentname.split(" ").filter(function(item, i){
                            return (i < 4);
                        }).join(" ");
                    }
                    if ("" != name) {
                        if ("" != catname) {
                            autocompleteHtml += "<a href='"+result.url+"' class='autocompleteResult'><strong>"+name+"</strong> in <span>"+catname+"</span></a>";
                        } else {
                            autocompleteHtml += "<a href='"+result.url+"' class='autocompleteResult'><strong>"+name+"</strong></a>";
                        }
                    }
                });
                if (searchResults.categories.length) {
                    autocompleteHtml += "<h4>Mergi direct la categoria</h4>";
                    searchResults.categories.forEach(function(category, i){
                        var name = "";
                        if ("undefined" != typeof category.catname && null != category.catname) {
                            name = category.catname.split(" ").filter(function (item, i) {
                                return (i < 6);
                            }).join(" ");
                            autocompleteHtml += "<a href='"+category.url+"' class='autocompleteResult'><strong>"+name+"</strong></a>";
                        }

                    });
                }
                autocompleteHtml += "</div>";

                $2(".customDesktopHeader .searchWrapper").append(autocompleteHtml);
                $2(".customDesktopHeader .searchWrapper").find(".searchAutocompleteUnderlay").show();
            }
        }

    };

    _self.loader = function(element, method) {
        if ("undefined" == typeof method) {
            var method = "start";
        }
        if ("undefined" == typeof element) {
            var element = "body";
        }
        if ("start" == method) {
            if (!$2(element).find(".customLoader").length) {
                $2(element).append("<div class='customLoader'></div>");
            } else {
                $2(element).find(".customLoader").show();
            }
        } else {
            $2(element).find(".customLoader").fadeOut(300);
            clearTimeout(_self.waiters["removeLoaderFrom"+element]);
            _self.waiters["removeLoaderFrom"+element] = setTimeout(function(){
                $2(element).find(".customLoader").remove();
            },400);
        }
        //console.log("Loading "+method+" in "+element);
    };

    _self.createMiniCart = function(callback){
        if ($2("body").find(".customDesktopHeader .cartToggle").length) {
            if ($2("body").find(".cartToggle").find(".cartCounter").length) {
                $2("body").find(".cartToggle").find(".cartCounter").remove();
            }
            if ($2("body").find(".customDesktopHeader .cartToggle").find(".miniCartListWrapper").length) {
                $2("body").find(".customDesktopHeader .cartToggle").find(".miniCartListWrapper").remove();
            }

            $2.ajax({
                url: _self.root + "/comanda/?method=getcartproducts",
                method: "GET",
                success: function (data) {
                    if ("string" == typeof data) {
                        if (_self.isJson(data)) {
                            data = JSON.parse(data);
                        }
                    }

                    if (!!data["data"] && !!data["data"]["products"] && !!data["data"]["products"].length > 0) {
                        var cartList = data["data"]["products"],
                            cartProducts = data["data"]["products"].length,
                            totalCartPriceItem = (!!data["data"]["totals"] && !!data["data"]["totals"]["subtotal"]) ?  parseFloat(data["data"]["totals"]["subtotal"]) : 0,
                            totalCartPrice = parseFloat(totalCartPriceItem);



                        //console.log("total price "+totalCartPrice);
                        if (!!cartProducts) {
                            //console.log("Found cart products");
                            var miniCartHtml = "<div class='miniCartListWrapper'>";
                            miniCartHtml += "<div class='miniCartList'>";
                            miniCartHtml += "<div class='miniCartListInner'>";
                            cartList.forEach(function(product, i){
                                var prodName = product["productName"],
                                    itemId = product["itemId"].trim(),
                                    prodUrl = product["productUrl"],
                                    prodImg = product["productImage"],
                                    prodPrice = parseFloat(product["productTotal"]),
                                    prodRemoveFromCartUrl = _self.root+"/cos.php?action=remove&item="+itemId,
                                    prodRemoveCartOnClick = "Cart.RemoveItem('"+itemId+"');",
                                    prodQuantity = parseInt(product["productQuantity"], 10);

                                miniCartHtml += "<div class='miniCartItem'>";
                                miniCartHtml += "<a class='miniCartItemThumb' href='"+prodUrl+"'><img class='lazy' data-src='"+prodImg+"' /></a>";
                                miniCartHtml += "<a href='"+_self.root+"/cos.php' class='miniCartItemDetails'><strong>"+prodQuantity+"x "+prodName+"</strong>"+prodPrice+" Lei</a>";
                                miniCartHtml += "<a class='miniCartItemRemove' data-cartitemtoremove='"+itemId+"' href='javascript:void(0);' data-href='"+prodRemoveFromCartUrl+"'>x</a>";
                                miniCartHtml += "</div>";
                            });
                            miniCartHtml += "</div>";
                            miniCartHtml += "<div class='totalCartPrice'>Total: <strong>"+totalCartPrice+"</strong></div>";
                            miniCartHtml += "<a class='btnViewCartDetails' href='"+_self.root+"/cos.php'>Vezi detalii cos</a>";
                            miniCartHtml += "</div>";
                            miniCartHtml += "</div>";

                            $2("body").find(".customDesktopHeader .cartToggle").append(miniCartHtml);
                            _self.loadImages();

                            _self.totalCartProducts = parseInt(cartProducts,10);
                            //console.log(_self.totalCartProducts);
                            $2("body").find(".cartToggle").append("<span class='cartCounter'>"+_self.totalCartProducts+"</span>");
                            $2("body").find(".accountActionsMenu").find("a[href*='cos.php']").text("Vezi Cos ("+cartProducts+((1 == cartProducts) ? " produs" : " produse")+")");
                        }
                    }
                },
                error: function () {

                },
                complete: function () {
                    if ("function" == typeof callback) {
                        callback();
                    } else {
                        $2("body").find(".cartToggle").find(".cartCounter").removeClass("showFast").removeClass("show");
                        clearTimeout(_self.waiters.showCartCounterTimeout);
                        _self.waiters.showCartCounterTimeout = setTimeout(function(){
                            $2("body").find(".cartToggle").find(".cartCounter").addClass("show");
                        },100);
                    }
                }
            });
        }
    };

    _self.showAddToCartTransition = function($btnToClickAfter) {
        if ("undefined" == typeof $btnToClickAfter) {
            var $btnToClickAfter = $2("body").find("[type='image'][src*='images/red/adauga.png']");
        }

        var $needSelects = [],
            hasSelects = false,
            selectsOk = true;


        if ($2(".ProductAddToCart").find("select").length) {
            hasSelects = true;
            $2(".ProductAddToCart").find("select").each(function(){
                selectsOk = false;
                var $sel = $2(this),
                    $selVal = $sel.val(),
                    $selTitle = ($sel.closest('.DetailRow').find(".Label").length) ? $sel.closest('.DetailRow').find(".Label").text().replace(":","").trim() : "";

                if (("undefined" == $selVal || "" == $selVal) && "" != $selTitle) {
                    $needSelects.push($selTitle);
                }
            });
        }

        if (!selectsOk && $needSelects.length) {
            alert("Va rugam selectati "+$needSelects.join(", "));
        } else {
            var $productImage = $2("body").find("#ProductDetails .ProductThumbImage img"),
                $productImageSrc = $productImage.attr("src"),
                $prodImageTop = $productImage.offset().top,
                $prodImageLeft = $productImage.offset().left,
                $prodImageWidth = $productImage.width(),
                $prodImageHeight = $productImage.height(),
                $cartImage = $2("body").find(".customDesktopHeader .actionsWrapper .actionsWrapperItem img[src*='cartIcon']"),
                $cartImageSrc = $cartImage.attr("src"),
                $cartImageTop = $cartImage.offset().top,
                $cartImageLeft = $cartImage.offset().left,
                $cartImageWidth = $cartImage.width(),
                $cartImageHeight = $cartImage.height();

            if (!$2("body").find(".addToCartImageTransitionClone").length) {
                $2("body").append("<div class='addToCartImageTransitionClone'><img src='"+$productImageSrc+"' style='top: 0; left: 0; width: 100%; height: 100%;' /></div>");
            }

            $2("body").find(".addToCartImageTransitionClone").css({
                "top": $prodImageTop+"px",
                "left": $prodImageLeft+"px",
                "width": $prodImageWidth+"px",
                "height": $prodImageHeight+"px"
            });

            $2("body").find(".addToCartImageTransitionClone").addClass("goToCart").stop().animate({
                "top": $cartImageTop+"px",
                "left": $cartImageLeft+"px",
                "width": $cartImageWidth+"px",
                "height": $cartImageHeight+"px",
            },500);

            clearTimeout(_self.waiters.addToCartTransitionImageTimeout);
            _self.waiters.addToCartTransitionImageTimeout = setTimeout(function() {
                $2("body").find(".addToCartImageTransitionClone").remove();
                if (!$2("body").find(".cartToggle .cartCounter").length) {
                    $2("body").find(".cartToggle").append("<span class='cartCounter'>1</span>");
                }
                $2("body").find(".cartToggle").find(".cartCounter").removeClass("show").removeClass("showFast");
                clearTimeout(_self.waiters.showCartCounterTimeout);
                _self.waiters.showCartCounterTimeout = setTimeout(function(){
                    $2("body").find(".cartToggle").find(".cartCounter").addClass("showFast");
                },100);
            },500);

            if ($btnToClickAfter.length) {
                clearTimeout(_self.waiters.addToCartTransitionTimeout);
                _self.waiters.addToCartTransitionTimeout = setTimeout(function(){
                    $btnToClickAfter.click();
                },1000);
            }
        }
    };

    _self.addToCartCustom = function(productData){
        if ("undefined" != typeof productData){
            _self.postForm(_self.api.cart, productData);
        }
    };

    _self.consentCookies = function(){
        if ("" == _self.getCookie("cookieConsent")) {
            if ("undefined" != typeof gtag) {
                gtag('consent', 'default', {
                    'ad_storage': 'denied',
                    'ad_user_data': 'denied',
                    'ad_personalization': 'denied',
                    'analytics_storage': 'denied',
                    'functionality_storage': "denied",
                    'security_storage': "denied"
                });
            }
            if (!$2("body").find(".cookiePolicyWrapper").length){
                var msg = "<div class='cookiePolicyWrapper'>";
                msg += "<div class='cookiePolicyInner'>";
                msg += "<div class='cookieMsg'>Pentru scopuri precum afișarea de conținut personalizat, folosim module cookie sau tehnologii similare. Apăsând Accept sau navigând pe acest website, ești de acord să permiți colectarea de informații prin cookie-uri sau tehnologii similare. Află in sectiunea";
                msg += "&nbsp;<a class='cookieInfo' href='"+_self.root+"/pages/confidentialitatea-datelor-gdpr-si-cookie' target='_blank'>Politica de Cookies</a>&nbsp;";
                msg += "mai multe despre cookie-uri, inclusiv despre posibilitatea retragerii acordului.";

                msg += "<div class='cookieTypeToggleWrapper'>";
                    msg += "<div class='cookieTypeToggleItem'><label for='cookieAnalyticsCheckbox'><input type='checkbox' id='cookieAnalyticsCheckbox' name='cookieAnalyticsCheckbox' checked /><span>Analytics</span></label></div>";
                    msg += "<div class='cookieTypeToggleItem'><label for='cookieMarketingCheckbox'><input type='checkbox' id='cookieMarketingCheckbox' name='cookieMarketingCheckbox' checked /><span>Marketing</span></label></div>";
                    msg += "<div class='cookieTypeToggleItem'><label for='cookieNecessaryCheckbox'><input type='checkbox' id='cookieNecessaryCheckbox' name='cookieNecessaryCheckbox' checked disabled readonly/><span>Necesare</span></label></div>";
                msg += "</div>";

                msg += "</div>";
                msg += "<div class='cookieActions'>";
                msg += "<a href='javascript:void(0);' class='acceptCookieBtn'>Accept</a>";
                msg += "<a href='javascript:void(0);' class='laterCookieBtn'>Nu accept</a>";
                msg += "</div>";
                msg += "</div>";
                msg += "</div>";
                $2("body").append(msg);
            }
        } else {
            if ("undefined" != typeof gtag) {
                if (localStorage.getItem("an_strg") == 1) {
                    gtag('consent', 'update', {
                        'analytics_storage': 'granted'
                    });
                } else {
                    gtag('consent', 'update', {
                        'analytics_storage': 'denied'
                    });
                }
                if (localStorage.getItem("mrk_strg") == 1) {
                    gtag('consent', 'update', {
                        'ad_storage': 'granted',
                        'ad_user_data': 'granted',
                        'ad_personalization': 'granted',
                    });
                } else {
                    gtag('consent', 'update', {
                       'ad_storage': 'denied',
                        'ad_user_data': 'denied',
                        'ad_personalization': 'denied',
                    });
                }
                gtag("consent", "update", {
                    'functionality_storage': "granted",
                    'security_storage': "granted"
                });
            }
        }
    };

    _self.blackFridayMessage = function(){
        if (!_self.isCheckout) {
            if (!$2("body").find(".blackFridayMessageWrapper").length && !$2("body").hasClass("blackFridayMessage")){
                var msg = "<a class='blackFridayMessageWrapper' href='https://www.powerlaptop.ro/categories/black-friday/'>";
                    msg += '<div class="blackFridayMessageInner">';
                    msg += '<div class="blackFridayMsg">Vezi aici produsele de Black Friday!';
                    msg += '</div>';
                    msg += '</div>';
                msg += '</a>';
                $2("body").prepend(msg);
                $2("body").addClass("blackFridayMessage");
            }
        }
    };

    _self.specialNoticeMessage = function(){
        if (!_self.isCheckout) {
            if ("" == _self.getCookie("specialNotice")) {
                if (!$2("body").find(".specialNoticeWrapper").length && !$2("body").hasClass("specialNotice")){
                    var msg = "<div class='specialNoticeWrapper'>";
                    msg += '<div class="specialNoticeInner">';
                    msg += '<div class="specialNoticeMsg">In perioada 1 Ianuarie - 2 Ianuarie 2024, sediul va fi inchis. 3 Ianuarie 2024 - program normal.';
                    msg += '</div>';
                    msg += '<div class="specialNoticeActions">';
                    msg += '<a href="javascript:void(0);" class="acceptSpecialNoticeBtn">OK</a>';
                    msg += '</div>';
                    msg += '</div>';
                    msg += '</div>';
                    $2("body").prepend(msg);
                    $2("body").addClass("specialNotice");
                }
            }
        } else {
            if ($2("body").find(".ShippingProviderList").is(":visible")){
                // $2("body").find(".ShippingProviderList li").each(function(){
                //     var $shippingProvider = $2(this);
                //     $shippingProvider.addClass("covid");
                //     if ($shippingProvider.find("span.ShipperName").text().toLowerCase().trim() == "ridicare sediu power laptop") {
                //         $shippingProvider.addClass("disabled").attr("title", "Pentru a preveni raspandirea COVID19, din 19 octombrie 2020, magazinul va fi inchis pentru public. Comenzile se vor expedia doar prin curier.");
                //         $shippingProvider.attr("title", "Pentru a preveni raspandirea COVID19, din 19 octombrie 2020, magazinul va fi inchis pentru public. Comenzile se vor expedia doar prin curier.");
                //         $shippingProvider.find("input").attr("disabled", "disabled");
                //     } else if ($shippingProvider.find("span.ShipperName").text().toLowerCase().trim() == "livrare prin curier") {
                //         $shippingProvider.find("input")[0].click();
                //     }
                // });
                //
                // $2("body").find("#checkout_provider_checkout_instore").attr("disabled", "disabled");
                // $2("body").find("#checkout_provider_checkout_instore", "label[for='checkout_provider_checkout_instore']").attr("title", "Pentru a preveni raspandirea COVID19, din 19 octombrie, magazinul va fi inchis pentru public. Comenzile se vor expedia doar prin curier.");
                // if ($2("body").find("#checkout_provider_checkout_cod").length) {
                //     $2("body").find("#checkout_provider_checkout_cod")[0].click();
                // }
            }
        }
    };


    _self.requestResellerPrice = function(resellerid, adtkn, cid, prodid, callback){
        if ("undefined" != typeof resellerid && "undefined" != typeof prodid && !isNaN(prodid) && (_self.checkCpLin() == true || !isNaN(cid)) && _self.isProduct == true) {
            $2.ajax({
                url: _self.api["powersell"],
                data: {
                    method: "requestresellerprice",
                    resellerid: resellerid,
                    adtkn: adtkn,
                    cid: cid,
                    prodid: prodid
                },
                success: function(data){
                    if ("string" == typeof data) {
                        if (_self.isJson(data)) {
                            data = JSON.parse(data);
                        }
                    }
                    if ("function" == typeof callback){
                        callback(data);
                    }
                },
                error: function(a,b,c){
                    //console.log(a,b,c);
                }
            });
        } else {
            alert("Cererea nu a putut fi trimisa din cauza unei erori");
        }
    };

    _self.returnResellerToRequestFormAfterLogin = function(){
        if (true == _self.customerData.isLoggedIn && !!localStorage.getItem("returnToResellerRequestPage")) {
            var returnToResellerRequestPage = JSON.parse(localStorage.getItem("returnToResellerRequestPage"));
            if ("undefined" != typeof returnToResellerRequestPage && !!returnToResellerRequestPage["urlFrom"]) {
                if (returnToResellerRequestPage["urlFrom"].startsWith("https://www.powerlaptop.ro")) {
                    localStorage.removeItem("returnToResellerRequestPage");
                    localStorage.setItem("shouldOpenResellerRequestForm", true);
                    _self.waiters.redirectTimeout = setTimeout(function(){
                        window.location.href = returnToResellerRequestPage["urlFrom"];
                    },100);
                }
            }
        }
        if (true == _self.customerData.isLoggedIn && !!localStorage.getItem("shouldOpenResellerRequestForm")) {
            if ($2("body").find(".popupResellerRequest, .popupResellerRequestOverlay").length > 0) {
                $2("body").find(".popupResellerRequest, .popupResellerRequestOverlay").addClass("show");
                localStorage.removeItem("shouldOpenResellerRequestForm");
            }
        }
    };

    _self.initialCheckoutBlacklistCheck = function(){
        if ("undefined" != typeof ExpressCheckout) {
            if ("function" == typeof ExpressCheckout.BuildAddressLine) {
                var billingAddress = ExpressCheckout.BuildAddressLine("billing", "json"),
                    shippingAddress = ExpressCheckout.BuildAddressLine("shipping", "json"),
                    clientBilling = {
                        "firstname": ("undefined" != typeof billingAddress["FirstName"]) ? billingAddress["FirstName"].toString().trim() : "",
                        "lastname": ("undefined" != typeof billingAddress["LastName"]) ? billingAddress["LastName"].toString().trim() : "",
                        "customername": ("undefined" != typeof billingAddress["LastName"] || "undefined" != typeof billingAddress["LastName"]) ? [billingAddress["FirstName"].toString().trim(),billingAddress["LastName"].toString().trim()].join(" ").toString().trim() : "",
                        "phone": ("undefined" != typeof billingAddress["Phone"]) ? billingAddress["Phone"].toString().trim() : "",
                        "email": ($2("body").find("[name='FormField[1][1]']").length) ? $2("body").find("[name='FormField[1][1]']").val().toString().trim() : "",
                        "cui": ("undefined" != typeof billingAddress["cui"]) ? billingAddress["cui"].toString().trim() : "",
                        "ip": "",
                        "cnp": ""
                    },
                    clientShipping = {
                        "firstname": ("undefined" != typeof shippingAddress["FirstName"]) ? shippingAddress["FirstName"].toString().trim() : "",
                        "lastname": ("undefined" != typeof shippingAddress["LastName"]) ? shippingAddress["LastName"].toString().trim() : "",
                        "customername": ("undefined" != typeof shippingAddress["LastName"] || "undefined" != typeof shippingAddress["LastName"]) ? [shippingAddress["FirstName"].toString().trim(),shippingAddress["LastName"].toString().trim()].join(" ").toString().trim() : "",
                        "phone": ("undefined" != typeof shippingAddress["Phone"]) ? shippingAddress["Phone"].toString().trim() : "",
                        "email": ($2("body").find("[name='FormField[1][1]']").length) ? $2("body").find("[name='FormField[1][1]']").val().toString().trim() : "",
                        "cui": ("undefined" != typeof shippingAddress["cui"]) ? shippingAddress["cui"].toString().trim() : "",
                        "cui": "",
                        "ip": "",
                        "cnp": ""
                    };

                // console.log(clientBilling, clientShipping);
                _self.checkClientOrderBlacklist(clientBilling, function(clientAccess){
                    // console.log("Client access", clientAccess);
                    if ("undefined" != typeof clientAccess) {
                        if ("undefined" != typeof clientAccess["data"]) {
                            if ("undefined" != typeof clientAccess["data"]["canOrder"]) {
                                if (true != clientAccess["data"]["canOrder"]) {
                                    window.location.reload();
                                } else {
                                    _self.checkClientOrderBlacklist(clientShipping, function(clientAccess2){
                                        // console.log("Client access", clientAccess);
                                        if ("undefined" != typeof clientAccess2) {
                                            if ("undefined" != typeof clientAccess2["data"]) {
                                                if ("undefined" != typeof clientAccess2["data"]["canOrder"]) {
                                                    if (true != clientAccess2["data"]["canOrder"]) {
                                                        window.location.reload();
                                                    }
                                                }
                                            }
                                        }
                                    });
                                }
                            }
                        }
                    }
                });
            }
        }
    };

    _self.validateCheckout = function(step, skipJudete = false) {
        var valid = false;

        switch (step){
            case "billing":
                if ("" !== $2("body").find("input[name='FormField[2][4]']").val().toString().trim() // Nume
                    &&  "" !== $2("body").find("input[name='FormField[2][5]']").val().toString().trim() // Prenume
                    &&  "" !== $2("body").find("input[name='FormField[2][7]']").val().toString().trim() // Telefon
                    &&  "" !== $2("body").find("input[name='FormField[2][8]']").val().toString().trim() // Adresa 1
                    &&  "" !== $2("body").find("input[name='FormField[2][10]']").val().toString().trim() // Localitate
                    &&  "" !== $2("body").find("select[name='FormField[2][11]']").val().toString().trim() // Tara
                    &&  "" !== $2("body").find("input[name='FormField[2][13]']").val().toString().trim() // Cod Postal
                ) {
                    if ("" !== $2("body").find("input[name='FormField[2][12]']").val() && skipJudete == false) {// Judet)
                        valid = true;
                    } else {
                        valid = true;
                    }
                }
                break;
            case "shipping":
                if ("" !== $2("body").find("input[name='FormField[3][14]']").val().toString().trim() // Nume
                    &&  "" !== $2("body").find("input[name='FormField[3][15]']").val().toString().trim() // Prenume
                    &&  "" !== $2("body").find("input[name='FormField[3][17]']").val().toString().trim() // Telefon
                    &&  "" !== $2("body").find("input[name='FormField[3][18]']").val().toString().trim() // Adresa 1
                    &&  "" !== $2("body").find("input[name='FormField[3][20]']").val().toString().trim() // Localitate
                    &&  "" !== $2("body").find("select[name='FormField[3][21]']").val().toString().trim() // Tara
                    &&  "" !== $2("body").find("input[name='FormField[3][23]']").val().toString().trim() // Cod Postal
                ) {
                    if ("" !== $2("body").find("input[name='FormField[3][22]']").val() && skipJudete == false) {// Judet)
                        valid = true;
                    } else {
                        valid = true;
                    }
                }
                break;
        }


        return valid;
    };


    _self.filterCategoryProducts = function(getAllFromCategory){
        _self.loader("#CategoryContent", "start");
        $2("body").find("#CategoryContent .ProductList").hide();
        if ("undefined" == typeof getAllFromCategory) {
            var getAllFromCategory = false;
        }

        //console.log("Filtering category products with getAllFromCategory "+getAllFromCategory);
        //console.log("Filtering category products");
        if ((_self.categoryFiltersActive && ( !!_self.categoryFilters["brand"] || !!_self.categoryFilters["model"] || !!_self.categoryFilters["gama"])) || getAllFromCategory) {
            //console.log("Will filter products");
            //console.log("Filters category ",_self.categoryFilters["category"]);
            var categFiltersParsed = _self.categoryFilters;
            categFiltersParsed["reseller"] = false;
            if ("undefined" != typeof _self.customerData) {
                if ("undefined" != typeof _self.customerData.customerData) {
                    if ("undefined" != typeof _self.customerData.isLoggedIn &&
                        true == _self.customerData.isLoggedIn) {
                        if ("undefined" != typeof _self.customerData.customerData
                            && "undefined" != typeof _self.customerData.isReseller
                            && "undefined" != typeof _self.customerData.resellerData
                        ) {
                            var thisResellerRankName = _self.customerData.resellerData["resellerTitle"],
                                thisResellerId = ("undefined" != typeof _self.customerData.resellerData["resellerGroup"]) ? _self.customerData.resellerData["resellerGroup"] : "";
                            categFiltersParsed["resellerId"] = thisResellerId;
                            categFiltersParsed["resellerTitle"] = thisResellerRankName;
                            categFiltersParsed["reseller"] = true;
                        }
                    }
                }
            }
            if (!!_self.getUrlParameter("sort")){
                categFiltersParsed["sort"] = _self.getUrlParameter("sort");
            }
            categFiltersParsed["limit"] = 60;
            categFiltersParsed["category"] = (Array.isArray(_self.categoryFilters["category"])) ? _self.categoryFilters["category"].join(",") : _self.categoryFilters["category"];
            // categFiltersParsed["category"] = _self.categoryId;
            // delete categFiltersParsed["category"];
            //console.log("Object before rendering");
            //console.log("categFiltersParsed", categFiltersParsed);
            var homepageInitProducts = false;
            if (_self.isHomepage == true &&
                (
                    "undefined" == typeof $2("body").find("select#brandsFilterInFilterablePane").val()
                    || $2("body").find("select#brandsFilterInFilterablePane").val() == ""
                    || $2("body").find("select#brandsFilterInFilterablePane").val().toString().indexOf("selecteaza") > -1
                    || $2("body").find("select#brandsFilterInFilterablePane").val().toString().indexOf("alege") > -1
                    // || isNaN($2("body").find("select#brandsFilterInFilterablePane").val())
                )) {
                // alert("OK");
                homepageInitProducts = true;
                categFiltersParsed["homepageInitProducts"] = 1;
                delete categFiltersParsed["category"];
                delete categFiltersParsed["brand"];
            } else {
                // alert("NOK");
                if ("undefined" != typeof categFiltersParsed["homepageInitProducts"]) {
                    delete categFiltersParsed["homepageInitProducts"];
                }
            }

            $2.ajax({
                url: _self.api["filters"],
                data: categFiltersParsed,
                success: function(data){
                    if ("string" == typeof data) {
                        data = JSON.parse(data);
                    }
                    //console.log("Object after rendering");
                    //console.log(data);

                    if (getAllFromCategory) {
                        _self.renderFilteredCategoryProducts(data, true);
                        _self.renderFilteredPaginator(data, true);
                    } else {
                        _self.renderFilteredCategoryProducts(data);
                        _self.renderFilteredPaginator(data);
                    }
                    _self.loadImages();
                    //console.log(data);
                },
                error: function(a,b,c){
                    //console.log(a,b,c);
                }
            });
        }
    };

    _self.renderFilteredPaginator = function(dataObj, resetDefaultPaginator){
        if ("undefined" == typeof resetDefaultPaginator) {
            var resetDefaultPaginator= false;
        }
        var totalpages = dataObj['totalpages'],
            currentpage = dataObj['currentpage'],
            paginatorpages = dataObj["paginatorPages"];

        _self.oldPaginator = $2("body").find("#CategoryPagingBottom").html();
        $2("#CategoryPagingBottom .CategoryPagination .PagingList").empty();
        $2("#CategoryPagingBottom .CategoryPagination .PagingList").append("<li>Pagini:</li>");
        for (var i=0; i <= paginatorpages.length-1; i++){
            if (paginatorpages[i] != currentpage) {
                $2("#CategoryPagingBottom .CategoryPagination .PagingList").append("<li class='pageFiltered'><a data-page='"+paginatorpages[i]+"' href='javascript:void(0);'>"+paginatorpages[i]+"</a></li>");
            } else {
                $2("#CategoryPagingBottom .CategoryPagination .PagingList").append("<li class='ActivePage pageFiltered'>"+paginatorpages[i]+"</li>");
            }
        }
        if (resetDefaultPaginator) {
            $2("#CategoryPagingBottom .CategoryPagination .PagingList").addClass("paginationForAll");
            _self.categoryUnfilteredPaginatorHTML = $2('body').find('#CategoryPagingBottom').html();
        }
    };

    _self.renderFilteredCategoryProducts = function(data, resetProductsHtml){
        //console.log(" ");
        //console.log(" ");
        //console.log("---------------------------------------");
        //console.log("Filtering Category Products with");
        //console.log(data);
        //console.log("---------------------------------------");
        //console.log(" ");
        //console.log(" ");

        if ("undefined" == typeof resetProductsHtml) {
            var resetProductsHtml = false;
        }

        if ("string" == typeof data) {
            data = JSON.parse(data);
        }

        $2("body").find("#CategoryContent").find(".noProductsFound").remove();
        if (data["results"].length) {
            var productCodes = [],
                $productsHTML = "<ul class='ProductList' id='CategoryFilteredProductList'>";
            data["results"].forEach(function(product, i){
                if (productCodes.indexOf(product['prodcode']) == -1) {
                    productCodes.push(product['prodcode']);
                }

                var imgThumb = (!!product["images"] && !!product["images"][0] && !!product["images"][0]["imagefilethumb"]) ? product["images"][0]["imagefilethumb"] : "";


                $productsHTML += "<li class='"+((i % 2 == 0) ? "Odd" : "Even")+" filterableProduct groupedProduct' data-pcode='"+product['prodcode']+"' data-pid='"+product['productid']+"' data-template='js_filteredcategoryproducts'>";

                $productsHTML += "<div class='ProductImage' style='height: 170px; width: 170px;'>";
                $productsHTML += "<a href='"+product['url']+"'>";
                $productsHTML += "<img class='lazy' data-src='"+imgThumb+"' />";
                $productsHTML += "</a>";
                $productsHTML += "</div>";

                $productsHTML += "<div class='ProductDetails' style='height: 83px;'>";
                $productsHTML += "<strong>";
                $productsHTML += "<a href='"+product['url']+"'>";
                $productsHTML += product["prodname"];
                $productsHTML += "</a>";
                $productsHTML += "</strong>";
                $productsHTML += "</div>";

                $productsHTML += "<div class='ProductPriceRating'>";
                $productsHTML += "<em>";
                if (!isNaN(product['prodretailprice']) && parseInt(product['prodretailprice'], 10) > parseInt(product['prodprice'],10)) {
                    $productsHTML += (!isNaN(product['prodretailprice']) ? "<strike class='RetailPriceValue'>" + product['prodretailprice'] + " Lei</strike>" : "");
                }
                $productsHTML += product['prodprice']+" Lei";
                $productsHTML += "</em>";
                $productsHTML += "<span class='Rating Rating0'><img class='lazy' data-src='"+_self.root+"/templates/WomensShoes/images/IcoRating0.gif' alt=''></span>";
                $productsHTML += "</div>";

                if ("undefined" != typeof product["stock"] && !!product["stock"]) {
                    $productsHTML += "<div class='productGridStock "+product["stock"].toString().toLowerCase().replace(/\s/g, "")+"'>"+product["stock"].toString().toUpperCase().trim()+"</div>";
                }

                $productsHTML += "<div class='ProductActionAdd'>";
                $productsHTML += "<a rel='nofollow' href='"+product['url']+"'>Adauga in Cos</a>";
                $productsHTML += "</div>";

                $productsHTML += "</li>";
            });
            $productsHTML += "</ul>";


            if ($2("body").find(".CategoryContent").length) {
                $2("body").find(".CategoryContent").first().find("#frmCompare .ProductList").remove();
                $2("body").find(".CategoryContent").first().find("#frmCompare").append($productsHTML);
            } else if ($2("body").find(".FilterableProducts .BlockContent").length) {
                $2("body").find(".FilterableProducts .BlockContent").html($productsHTML);
            }
            _self.loadImages();


            //check if product images loaded



            _self.loader("#CategoryContent", "stop");
            $2("body").find("#CategoryContent .ProductList").fadeIn();

            if (_self.categoryFiltersActive && !!_self.categoryFilters["brand"] && !!_self.categoryFilters["model"] && !!_self.categoryFilters["gama"]) {
                clearTimeout(_self.waiters.scrollToPositionTimeout);
                _self.waiters.scrollToPositionTimeout = setTimeout(function(){
                    if (_self.isHomepage) {
                        if ($2("body").find(".customTabCauta").length) {
                            $2("body").find(".customTabCauta")[0].click();
                        }
                        if ($2("body").find("#CategoryFilteredProductList").length) {
                            $2("body, html").stop().animate({
                                scrollTop: $2("body").find("#CategoryFilteredProductList").offset().top - 200
                            }, 300);
                        }
                    } else {
                        if ($2("body").find("#CategoryFilteredProductList").length) {
                            // $2("body, html").stop().animate({
                            //     scrollTop: $2("body").find("#CategoryFilteredProductList").offset().top - 200
                            // }, 300);
                        }
                    }
                },500);
            }

            //render products gifts
            if (_self.isCategory) {
                //console.log("Rendering products gifts", productCodes);
                productCodes.forEach(function(productCode, i){
                    //render this product code
                    _self.getProductGifts(productCode, function(resp){
                        _self.renderGifts(resp);
                    });
                });
            }

        } else {
            //console.log('will reset category products');
            if (resetProductsHtml) {
                _self.categoryUnfilteredProductsHTML = $2('body').find('.ProductList').html();
            }
            $2('body').find('.ProductList').html(_self.categoryUnfilteredProductsHTML);
            $2('body').find('#CategoryPagingBottom').html(_self.categoryUnfilteredPaginatorHTML);
            $2("body").find("#CategoryContent").prepend("<p class='InfoMessage noProductsFound'>Nu am gasit produse incadrate in criteriile de cautare</p>");
            $2("body").find("#CategoryContent .ProductList").fadeIn();
            _self.loader("#CategoryContent", "stop");
        }
        if ($2("body").find(".FilterableProducts .ProductList").length) {
            // _self.createSlickCarousel(".FilterableProducts .ProductList", {
            //     dots: true,
            //     infinite: true,
            //     speed: 300,
            //     slidesToShow: 1,
            //     slidesToScroll: 1
            // });
        }
    };

    _self.createSlickCarousel = function(element, options){
        if (!options) {
            var options = {
                dots: true,
                infinite: true,
                speed: 300,
                slidesToShow: 5,
                slidesToScroll: 5,
                responsive: [
                    {
                        breakpoint: 1024,
                        settings: {
                            slidesToShow: 3,
                            slidesToScroll: 3,
                            infinite: true,
                            dots: true
                        }
                    },
                    {
                        breakpoint: 600,
                        settings: {
                            slidesToShow: 2,
                            slidesToScroll: 2
                        }
                    },
                    {
                        breakpoint: 480,
                        settings: {
                            slidesToShow: 1,
                            slidesToScroll: 1
                        }
                    }
                    // You can unslick at a given breakpoint now by adding:
                    // settings: "unslick"
                    // instead of a settings object
                ]
            };
        }
        if("undefined" != typeof $2.fn.slick) {
            if($2(element).hasClass("slick-slider")){
                $2(element).slick('destroy');
            }
            $2(element).slick(options);
        }
    };

    _self.getCookie = function(cname) {
        var name = cname + "=";
        var decodedCookie = decodeURIComponent(document.cookie);
        var ca = decodedCookie.split(';');
        for(var i = 0; i <ca.length; i++) {
            var c = ca[i];
            while (c.charAt(0) == ' ') {
                c = c.substring(1);
            }
            if (c.indexOf(name) == 0) {
                return c.substring(name.length, c.length);
            }
        }
        return "";
    };

    _self.setCookie = function(cname, cvalue, exdays) {
        var d = new Date();
        d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
        var expires = "expires="+d.toUTCString();
        document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
        return cvalue;
    };

    _self.generateGclid =  function(){
        return btoa(encodeURIComponent(_self.uuid()+"_"+new Date().getTime()));
    };

    _self.generateTplid = function(){
        return btoa(encodeURIComponent(_self.uuid()+"_"+new Date().getTime()));
    };

    _self.generateFbclid = function(){
        return btoa(encodeURIComponent(_self.uuid()+"_"+new Date().getTime()));
    };

    _self.getTrackingParams = function(callback){
        $2.ajax({
            url: _self.apiUrl+"/tracking/",
            data: {
                method: "gettrackingparams",
            },
            success: function(data){
                if ("undefined" != typeof data) {
                    if ("string" == typeof data && _self.isJson(data)) {
                        data = JSON.parse(data);
                    }
                    if ("function" == typeof callback) {
                        callback(data);
                    }
                }
            },
            error: function(a,b,c) {
                console.log(a,b,c);
            },
            complete: function(xhr){

            }
        });
    };

    _self.check2Performant = function(){
        //console.log("Checking 2Performant..");
        if (window.location.href.toLowerCase().indexOf("2performant") > -1) {
            //console.log("Coming from 2performant");
            document.cookie = "is2Performant=true";
            _self.hide2Performant();
        }

        if ("" != _self.getCookie("is2Performant")) {
            //console.log("found 2Performant cookie");
            _self.hide2Performant();
        } else {
            //console.log("2Performant cookie not found");
        }
        $2.getScript("https://event.2performant.com/javascripts/postmessage.js").done(function(script, textStatus) {
            if ("success" == textStatus) {
                //console.log("2performant service loaded");
                window.dp_network_url = 'event.2performant.com';
                window.dp_campaign_unique = '3da8a1b48';
                window.dp_cookie_result = function (data) {
                    if (data && data.indexOf(":click:")) {
                        //console.log(":click: found");
                        _self.hide2Performant();
                    }
                };
                xtd_receive_cookie();
            }
        });
    };

    _self.hide2Performant = function() {
        if (!$2("body").hasClass("hide2Performant")) {
            $2("body").addClass("hide2Performant");
            //console.log("2Performant optimisations applied!");
        }
    };

    _self.googleGclidEnsurer = function(){
        if ("undefined" != typeof _self.getUrlParameter("gclid")) {
            localStorage.setItem("gclid", _self.getUrlParameter("gclid"));
        } else {
            if (!!localStorage.getItem("gclid")) {
                if (window.location.href.indexOf("?") > -1) {
                    window.location.href = window.location.href+"&gclid="+localStorage.getItem("gclid");
                } else  {
                    window.location.href = window.location.href+"?gclid="+localStorage.getItem("gclid");
                }
            }
        }
        if ("undefined" != typeof _self.repeaters.checkGclidUrlsInterval) {
            clearInterval(_self.repeaters.checkGclidUrlsInterval);
        }

        _self.repeaters.checkGclidUrlsInterval = setInterval(function(){
            $2("body").find("a").each(function(){
                var $link = $2(this),
                    href = ("undefined" != typeof $link.attr("href")) ? $link.attr("href").toLowerCase() : "";

                if (href != "javascript:void(0);" && href != "#"  && href != "") {
                    if (!!localStorage.getItem("gclid") && href.indexOf("gclid") == -1) {
                        if (href.indexOf("?") > -1) {
                            href = href+"&gclid="+localStorage.getItem("gclid");
                        } else  {
                            href = href+"?gclid="+localStorage.getItem("gclid");
                        }
                        $link.attr("href", href);
                    }
                }
            })
        },1000);


    };


    _self.track = function(){
        var hasGclid = false,
            gclid = null,
            tplid = null,
            fbclid = null,
            awrl1a = btoa(encodeURIComponent(window.location.href)),
            awrl1t = btoa(encodeURIComponent(window.location.href)),
            awrl1f = btoa(encodeURIComponent(window.location.href)),
            clicktime = null,
            tpclicktime = null,
            fbclicktime = null,
            ordertime = null,
            orderid = null,
            device = "desktop",
            purchased = false,
            isAdwords = false,
            is2Performant = false,
            isFacebook = false,
            productid = ("undefined" != typeof productId) ? productId : null;

        _self.getTrackingParams(function(resp){
            var params = ("undefined" != typeof resp && "undefined" != typeof resp["data"] && Array.isArray(resp["data"]) && resp["data"].length > 0) ? resp["data"] : [],
                log = "a";

            // console.log("params", params);

            if (params.length > 0) {
                log += "a";
                params.forEach(function(param, p){
                    log += p;
                    if ("undefined" != typeof param["paramName"]
                    && "undefined" != typeof param["paramValue"]
                    && "undefined" != typeof param["source"] && !!param["source"]) {
                        log += "b";
                        if (!!param["paramName"]
                         && !!param["paramValue"]
                        ) { // if has param name and param value
                            log += "c";
                            if (param["paramName"].toString().trim().indexOf("*") == -1 && param["paramValue"].toString().trim().indexOf("*") == -1) {
                                log += "d";
                                _self.getAllUrlParameters().forEach(function(paramName, r){
                                    log += "e";
                                    var paramValue = _self.getUrlParameter(paramName);
                                    if (paramName.toString().toLowerCase().trim() == param["paramName"].toString().toLowerCase().trim()
                                    && paramValue.toString().toLowerCase().trim() == param["paramValue"].toString().toLowerCase().trim()) {
                                        log += "f";
                                        if ("adwords" == param["source"]){
                                            log += "g";
                                            isAdwords = true;
                                        } else if ("2performant" == param["source"]) {
                                            log += "h";
                                            is2Performant = true;
                                        } else if ("facebook" == param["source"]) {
                                            log += "h";
                                            isFacebook = true;
                                        }
                                    }
                                });
                            } else if (param["paramName"].toString().trim().startsWith("*") && !param["paramName"].toString().trim().endsWith("*") && param["paramValue"].toString().indexOf("*") == -1) {
                                log += "i";
                                _self.getAllUrlParameters().forEach(function(paramName, r){
                                    log += "j";
                                    var paramValue = _self.getUrlParameter(paramName);
                                    if (paramName.toString().toLowerCase().trim().endsWith(param["paramName"].toString().replace(/\*/g, "").toLowerCase().trim())
                                        && paramValue.toString().toLowerCase().trim() == param["paramValue"].toString().toLowerCase().trim()) {
                                        log += "k";
                                        if ("adwords" == param["source"]){
                                            log += "l";
                                            isAdwords = true;
                                        } else if ("2performant" == param["source"]) {
                                            log += "m";
                                            is2Performant = true;
                                        } else if ("facebook" == param["source"]) {
                                            log += "h";
                                            isFacebook = true;
                                        }
                                    }
                                });
                            } else if (param["paramName"].toString().trim().endsWith("*") && !param["paramName"].toString().trim().startsWith("*") && param["paramValue"].toString().indexOf("*") == -1) {
                                log += "n";
                                _self.getAllUrlParameters().forEach(function(paramName, r){
                                    log += "o";
                                    var paramValue = _self.getUrlParameter(paramName);
                                    if (paramName.toString().toLowerCase().trim().startsWith(param["paramName"].toString().replace(/\*/g, "").toLowerCase().trim())
                                        && paramValue.toString().toLowerCase().trim() == param["paramValue"].toString().toLowerCase().trim()) {
                                        log += "p";
                                        if ("adwords" == param["source"]){
                                            log += "q";
                                            isAdwords = true;
                                        } else if ("2performant" == param["source"]) {
                                            log += "r";
                                            is2Performant = true;
                                        } else if ("facebook" == param["source"]) {
                                            log += "h";
                                            isFacebook = true;
                                        }
                                    }
                                });
                            } else if (param["paramName"].toString().trim().indexOf("*") == -1 && param["paramValue"].toString().trim().endsWith("*") && !param["paramValue"].toString().trim().startsWith("*")) {
                                log += "s";
                                _self.getAllUrlParameters().forEach(function(paramName, r){
                                    log += "t";
                                    var paramValue = _self.getUrlParameter(paramName);
                                    if (paramName.toString().toLowerCase().trim() == param["paramName"].toString().toLowerCase().trim()
                                        && paramValue.toString().toLowerCase().trim().startsWith(param["paramValue"].toString().replace(/\*/g, "").toLowerCase().trim())) {
                                        log += "u";
                                        if ("adwords" == param["source"]){
                                            log += "v";
                                            isAdwords = true;
                                        } else if ("2performant" == param["source"]) {
                                            log += "w";
                                            is2Performant = true;
                                        } else if ("facebook" == param["source"]) {
                                            log += "h";
                                            isFacebook = true;
                                        }
                                    }
                                });
                            } else if (param["paramName"].toString().trim().indexOf("*") == -1 && param["paramValue"].toString().trim().startsWith("*") && !param["paramValue"].toString().trim().endsWith("*")) {
                                log += "x";
                                _self.getAllUrlParameters().forEach(function(paramName, r){
                                    log += "y";
                                    var paramValue = _self.getUrlParameter(paramName);
                                    if (paramName.toString().toLowerCase().trim() == param["paramName"].toString().toLowerCase().trim()
                                        && paramValue.toString().toLowerCase().trim().endsWith(param["paramValue"].toString().replace(/\*/g, "").toLowerCase().trim())) {
                                        log += "z";
                                        if ("adwords" == param["source"]){
                                            log += "A";
                                            isAdwords = true;
                                        } else if ("2performant" == param["source"]) {
                                            log += "B";
                                            is2Performant = true;
                                        } else if ("facebook" == param["source"]) {
                                            log += "h";
                                            isFacebook = true;
                                        }
                                    }
                                });
                            } else if (param["paramName"].toString().trim().indexOf("*") == -1 && param["paramValue"].toString().trim().indexOf("*") > -1) {
                                log += "x-";
                                _self.getAllUrlParameters().forEach(function(paramName, r){
                                    log += "y-";
                                    var paramValue = _self.getUrlParameter(paramName);
                                    if (paramName.toString().toLowerCase().trim() == param["paramName"].toString().toLowerCase().trim()
                                        && paramValue.toString().toLowerCase().trim().indexOf(param["paramValue"].toString().replace(/\*/g, "").toLowerCase().trim()) > -1) {
                                        log += "z-";
                                        if ("adwords" == param["source"]){
                                            log += "A";
                                            isAdwords = true;
                                        } else if ("2performant" == param["source"]) {
                                            log += "B";
                                            is2Performant = true;
                                        } else if ("facebook" == param["source"]) {
                                            log += "h";
                                            isFacebook = true;
                                        }
                                    }
                                });
                            } else if (param["paramName"].toString().trim().startsWith("*") && !param["paramName"].toString().endsWith("*") && param["paramValue"].toString().trim().startsWith("*") && !param["paramValue"].toString().trim().endsWith("*")) {
                                log += "C";
                                _self.getAllUrlParameters().forEach(function(paramName, r){
                                    log += "D";
                                    var paramValue = _self.getUrlParameter(paramName);
                                    if (paramName.toString().toLowerCase().trim().endsWith(param["paramName"].toString().replace(/\*/g, "").toLowerCase().trim())
                                        && paramValue.toString().toLowerCase().trim().endsWith(param["paramValue"].toString().replace(/\*/g, "").toLowerCase().trim())) {
                                        log += "E";
                                        if ("adwords" == param["source"]){
                                            log += "F";
                                            isAdwords = true;
                                        } else if ("2performant" == param["source"]) {
                                            log += "G";
                                            is2Performant = true;
                                        } else if ("facebook" == param["source"]) {
                                            log += "h";
                                            isFacebook = true;
                                        }
                                    }
                                });
                            } else if (param["paramName"].toString().trim().endsWith("*") && !param["paramName"].toString().trim().startsWith("*") && param["paramValue"].toString().trim().endsWith("*") && !param["paramValue"].toString().trim().startsWith("*")) {
                                log += "H";
                                _self.getAllUrlParameters().forEach(function(paramName, r){
                                    log += "I";
                                    var paramValue = _self.getUrlParameter(paramName);
                                    if (paramName.toString().toLowerCase().trim().startsWith(param["paramName"].toString().replace(/\*/g, "").toLowerCase().trim())
                                        && paramValue.toString().toLowerCase().trim().startsWith(param["paramValue"].toString().replace(/\*/g, "").toLowerCase().trim())) {
                                        log += "J";
                                        if ("adwords" == param["source"]){
                                            log += "K";
                                            isAdwords = true;
                                        } else if ("2performant" == param["source"]) {
                                            log += "L";
                                            is2Performant = true;
                                        } else if ("facebook" == param["source"]) {
                                            log += "h";
                                            isFacebook = true;
                                        }
                                    }
                                });
                            } else if (param["paramName"].toString().startsWith("*") && !param["paramName"].toString().endsWith("*") && param["paramValue"].toString().trim().endsWith("*") && !param["paramValue"].toString().trim().startsWith("*")) {
                                log += "M";
                                _self.getAllUrlParameters().forEach(function(paramName, r){
                                    log += "N";
                                    var paramValue = _self.getUrlParameter(paramName);
                                    if (paramName.toString().toLowerCase().trim().endsWith(param["paramName"].toString().replace(/\*/g, "").toLowerCase().trim())
                                        && paramValue.toString().toLowerCase().trim().startsWith(param["paramValue"].toString().replace(/\*/g, "").toLowerCase().trim())) {
                                        log += "O";
                                        if ("adwords" == param["source"]){
                                            log += "P";
                                            isAdwords = true;
                                        } else if ("2performant" == param["source"]) {
                                            log += "Q";
                                            is2Performant = true;
                                        } else if ("facebook" == param["source"]) {
                                            log += "h";
                                            isFacebook = true;
                                        }
                                    }
                                });
                            } else if (param["paramName"].toString().endsWith("*") && !param["paramName"].toString().startsWith("*") && param["paramValue"].toString().trim().startsWith("*") && !param["paramValue"].toString().trim().endsWith("*")) {
                                log += "R";
                                _self.getAllUrlParameters().forEach(function(paramName, r){
                                    log += "S";
                                    var paramValue = _self.getUrlParameter(paramName);
                                    if (paramName.toString().toLowerCase().trim().startsWith(param["paramName"].toString().replace(/\*/g, "").toLowerCase().trim())
                                        && paramValue.toString().toLowerCase().trim().endsWith(param["paramValue"].toString().replace(/\*/g, "").toLowerCase().trim())) {
                                        log += "T";
                                        if ("adwords" == param["source"]){
                                            log += "U";
                                            isAdwords = true;
                                        } else if ("2performant" == param["source"]) {
                                            log += "V";
                                            is2Performant = true;
                                        } else if ("facebook" == param["source"]) {
                                            log += "h";
                                            isFacebook = true;
                                        }
                                    }
                                });
                            } else if (param["paramName"].toString().indexOf("*") > -1 && param["paramValue"].toString().trim().indexOf("*") > -1) {
                                log += "W";
                                _self.getAllUrlParameters().forEach(function(paramName, r){
                                    log += "X";
                                    var paramValue = (!!_self.getUrlParameter(paramName.toString().replace(/\*/g, ""))) ? _self.getUrlParameter(paramName.toString().replace(/\*/g, "")) : "";
                                    if (paramName.toString().toLowerCase().trim().indexOf(param["paramName"].toString().replace(/\*/g, "").toLowerCase().trim()) > -1
                                        && paramValue.toString().toLowerCase().trim().indexOf(param["paramValue"].toString().replace(/\*/g, "").toLowerCase().trim()) > -1) {
                                        log += "Y";
                                        if ("adwords" == param["source"]){
                                            isAdwords = true;
                                        } else if ("2performant" == param["source"]) {
                                            log += "Z";
                                            is2Performant = true;
                                        } else if ("facebook" == param["source"]) {
                                            log += "h";
                                            isFacebook = true;
                                        }
                                    }
                                });
                            } else if (param["paramName"].toString().indexOf("*") == 1 && param["paramValue"].toString().trim().indexOf("*") > -1) {
                                log += "a_";
                                _self.getAllUrlParameters().forEach(function(paramName, r){
                                    log += "b_";
                                    var paramValue = _self.getUrlParameter(paramName);
                                    if (paramName.toString().toLowerCase().trim() == param["paramName"].toString().replace(/\*/g, "").toLowerCase().trim()
                                        && paramValue.toString().toLowerCase().trim().indexOf(param["paramValue"].toString().replace(/\*/g, "").toLowerCase().trim()) > -1) {
                                        log += "c_";
                                        if ("adwords" == param["source"]){
                                            log += "d_";
                                            isAdwords = true;
                                        } else if ("2performant" == param["source"]) {
                                            log += "e_";
                                            is2Performant = true;
                                        } else if ("facebook" == param["source"]) {
                                            log += "h";
                                            isFacebook = true;
                                        }
                                    }
                                });
                            } else if (param["paramName"].toString().indexOf("*") > -1 && param["paramValue"].toString().trim().indexOf("*") == -1) {
                                log += "f_";
                                _self.getAllUrlParameters().forEach(function(paramName, r){
                                    log += "g_";
                                    var paramValue = _self.getUrlParameter(paramName);
                                    if (paramName.toString().toLowerCase().trim().indexOf(param["paramName"].toString().replace(/\*/g, "").toLowerCase().trim()) > -1
                                        && paramValue.toString().toLowerCase().trim() == param["paramValue"].toString().replace(/\*/g, "").toLowerCase().trim()) {
                                        log += "h_";
                                        if ("adwords" == param["source"]){
                                            log += "i_";
                                            isAdwords = true;
                                        } else if ("2performant" == param["source"]) {
                                            log += "j_";
                                            is2Performant = true;
                                        } else if ("facebook" == param["source"]) {
                                            log += "h";
                                            isFacebook = true;
                                        }
                                    }
                                });
                            }
                        } else if (!!param["paramName"] && !param["paramValue"]) { // if has only param name
                            log += "k_";
                            var paramValue = _self.getUrlParameter(param["paramName"]);
                            if (param["paramName"].toString().indexOf("*") == -1) {
                                log += "l_";
                                _self.getAllUrlParameters().forEach(function(paramName, r){
                                    log += "m_";
                                    if (paramName.toString().toLowerCase().trim() == param["paramName"].toString().toLowerCase().trim()) {
                                        log += "n_";
                                        if ("adwords" == param["source"]){
                                            log += "o_";
                                            isAdwords = true;
                                        } else if ("2performant" == param["source"]) {
                                            log += "p_";
                                            is2Performant = true;
                                        } else if ("facebook" == param["source"]) {
                                            log += "h";
                                            isFacebook = true;
                                        }
                                    }
                                });
                            } else if (param["paramName"].toString().trim().startsWith("*") && !param["paramName"].toString().trim().endsWith("*")) {
                                log += "q_";
                                _self.getAllUrlParameters().forEach(function(paramName, r){
                                    log += "r_";
                                    if (paramName.toString().toLowerCase().trim().endsWith(param["paramName"].toString().replace(/\*/g, "").toLowerCase().trim())) {
                                        log += "s_";
                                        if ("adwords" == param["source"]){
                                            log += "t_";
                                            isAdwords = true;
                                        } else if ("2performant" == param["source"]) {
                                            log += "u_";
                                            is2Performant = true;
                                        } else if ("facebook" == param["source"]) {
                                            log += "h";
                                            isFacebook = true;
                                        }
                                    }
                                });
                            } else if (param["paramName"].toString().trim().endsWith("*") && !param["paramName"].toString().trim().startsWith("*")) {
                                log += "v_";
                                _self.getAllUrlParameters().forEach(function(paramName, r){
                                    log += "w_";
                                    if (paramName.toString().toLowerCase().trim().startsWith(param["paramName"].toString().replace(/\*/g, "").toLowerCase().trim())) {
                                        log += "x_";
                                        if ("adwords" == param["source"]){
                                            log += "y_";
                                            isAdwords = true;
                                        } else if ("2performant" == param["source"]) {
                                            log += "z_";
                                            is2Performant = true;
                                        } else if ("facebook" == param["source"]) {
                                            log += "h";
                                            isFacebook = true;
                                        }
                                    }
                                });
                            } else if (param["paramName"].toString().indexOf("*") > -1) {
                                log += "A_";
                                _self.getAllUrlParameters().forEach(function(paramName, r){
                                    log += "B_";
                                    if (paramName.toString().toLowerCase().trim().indexOf(param["paramName"].toString().replace(/\*/g, "").toLowerCase().trim()) > -1) {
                                        log += "C_";
                                        if ("adwords" == param["source"]){
                                            log += "D_";
                                            isAdwords = true;
                                        } else if ("2performant" == param["source"]) {
                                            log += "E_";
                                            is2Performant = true;
                                        } else if ("facebook" == param["source"]) {
                                            log += "h";
                                            isFacebook = true;
                                        }
                                    }
                                });
                            }
                        } else if (!param["paramName"] && !!param["paramValue"]) { // if has only param value
                            log += "F_";
                            if (param["paramValue"].toString().indexOf("*") == -1) {
                                log += "G_";
                                _self.getAllUrlParameters().forEach(function(paramName, r){
                                    log += "H_";
                                    var paramValue = _self.getUrlParameter(paramName);
                                    if (paramValue.toString().toLowerCase().trim() == param["paramValue"].toString().toLowerCase().trim()) {
                                        log += "I_";
                                        if ("adwords" == param["source"]){
                                            isAdwords = true;
                                        } else if ("2performant" == param["source"]) {
                                            log += "J_";
                                            is2Performant = true;
                                        } else if ("facebook" == param["source"]) {
                                            log += "h";
                                            isFacebook = true;
                                        }
                                    }
                                });
                            } else if (param["paramValue"].toString().trim().startsWith("*") && !param["paramValue"].toString().trim().endsWith("*")) {
                                log += "K_";
                                _self.getAllUrlParameters().forEach(function(paramName, r){
                                    log += "L_";
                                    var paramValue = _self.getUrlParameter(paramName);
                                    if (paramValue.toString().toLowerCase().trim().endsWith(param["paramValue"].toString().replace(/\*/g, "").toLowerCase().trim())) {
                                        log += "M_";
                                        if ("adwords" == param["source"]){
                                            log += "N_";
                                            isAdwords = true;
                                        } else if ("2performant" == param["source"]) {
                                            log += "O_";
                                            is2Performant = true;
                                        } else if ("facebook" == param["source"]) {
                                            log += "h";
                                            isFacebook = true;
                                        }
                                    }
                                });
                            } else if (param["paramValue"].toString().trim().endsWith("*") && !param["paramValue"].toString().trim().startsWith("*")) {
                                log += "P_";
                                _self.getAllUrlParameters().forEach(function(paramName, r){
                                    log += "Q_";
                                    var paramValue = _self.getUrlParameter(paramName);
                                    if (paramValue.toString().toLowerCase().trim().startsWith(param["paramValue"].toString().replace(/\*/g, "").toLowerCase().trim())) {
                                        log += "R_";
                                        if ("adwords" == param["source"]){
                                            log += "S_";
                                            isAdwords = true;
                                        } else if ("2performant" == param["source"]) {
                                            log += "T_";
                                            is2Performant = true;
                                        } else if ("facebook" == param["source"]) {
                                            log += "h";
                                            isFacebook = true;
                                        }
                                    }
                                });
                            } else if (param["paramValue"].toString().indexOf("*") > -1) {
                                log += "U_";
                                _self.getAllUrlParameters().forEach(function(paramName, r){
                                    log += "V_";
                                    var paramValue = _self.getUrlParameter(paramName);
                                    if (paramValue.toString().toLowerCase().trim().indexOf(param["paramValue"].toString().replace(/\*/g, "").toLowerCase().trim()) > -1) {
                                        log += "W_";
                                        if ("adwords" == param["source"]){
                                            log += "X_";
                                            isAdwords = true;
                                        } else if ("2performant" == param["source"]) {
                                            log += "Y_";
                                            is2Performant = true;
                                        } else if ("facebook" == param["source"]) {
                                            log += "h";
                                            isFacebook = true;
                                        }
                                    }
                                });
                            }
                        }
                    }
                });
            }



            if (true == is2Performant) {
                isAdwords = false;
                isFacebook = false;
            }

            if (true == isFacebook) {
                isAdwords = false;
            }
            //
            // console.log("isAdwords", isAdwords, "is2Performant", is2Performant, "log", log);

            if (!!localStorage.getItem("gclid")) {
                gclid = localStorage.getItem("gclid");
            }
            if (!!localStorage.getItem("tplid")) {
                tplid = localStorage.getItem("tplid");
            }
            if (!!localStorage.getItem("fbclid")) {
                fbclid = localStorage.getItem("fbclid");
            }
            if (!!localStorage.getItem("awrl1a")) {
                awrl1a = localStorage.getItem("awrl1a");
            }
            if (!!localStorage.getItem("awrl1t")) {
                awrl1t = localStorage.getItem("awrl1t");
            }
            if (!!localStorage.getItem("awrl1f")) {
                awrl1f = localStorage.getItem("awrl1f");
            }
            if (!!localStorage.getItem("clicktime")) {
                clicktime = parseInt(localStorage.getItem("clicktime"),10);
            }
            if (!!localStorage.getItem("tpclicktime")) {
                tpclicktime = parseInt(localStorage.getItem("tpclicktime"),10);
            }
            if (!!localStorage.getItem("fbclicktime")) {
                fbclicktime = parseInt(localStorage.getItem("fbclicktime"),10);
            }

            if (true == isAdwords) {
                gclid = _self.generateGclid();
                clicktime = new Date().getTime();

                if (!localStorage.getItem("gclid")) {
                    $2.ajax({
                        url: _self.apiUrl+"/tracking/",
                        type: "POST",
                        data: {
                            method: "storeadwordsclick",
                            gclid: gclid,
                            clicktime: clicktime,
                            productid: productid,
                            device: device,
                            url: awrl1a
                        },
                        success: function (data) {
                            //console.log(data);
                        },
                        error: function(a,b,c){
                            //console.log(a,b,c)
                        },
                        complete: function(xhr){
                            //console.log("Track init");
                        }
                    });
                }

                localStorage.setItem("gclid", gclid);
                localStorage.setItem("clicktime", clicktime);
                localStorage.setItem("awrl1a", awrl1a);
            }

            var replaceWordsOnlyOnGoogleAds = false;
            if ("undefined" != typeof frontendWordsToReplace) {
                if ("undefined" != typeof frontendWordsToReplace["googleAdsOnly"]){
                    if (true == frontendWordsToReplace["googleAdsOnly"]){
                        replaceWordsOnlyOnGoogleAds = true;
                    }
                }
            }

            if (replaceWordsOnlyOnGoogleAds == true && null !== gclid) {
                _self.wordsReplace();
            } else if (replaceWordsOnlyOnGoogleAds == false) {
                _self.wordsReplace();
            }

            if (true == is2Performant) {
                tplid = _self.generateTplid();
                tpclicktime = new Date().getTime();

                if (!localStorage.getItem("tplid")) {
                    $2.ajax({
                        url: _self.apiUrl+"/tracking/",
                        type: "POST",
                        data: {
                            method: "storetwoperformantclick",
                            tplid: tplid,
                            tpclicktime: tpclicktime,
                            productid: productid,
                            device: device,
                            url: awrl1t
                        },
                        success: function (data) {
                            //console.log(data);
                        },
                        error: function(a,b,c){
                            //console.log(a,b,c)
                        },
                        complete: function(xhr){
                            //console.log("Track init");
                        }
                    });
                }

                localStorage.setItem("tplid", tplid);
                localStorage.setItem("tpclicktime", tpclicktime);
                localStorage.setItem("awrl1t", awrl1t);
            }

            if (true == isFacebook) {
                fbclid = _self.generateFbclid();
                fbclicktime = new Date().getTime();

                if (!localStorage.getItem("fbclid")) {
                    $2.ajax({
                        url: _self.apiUrl+"/tracking/",
                        type: "POST",
                        data: {
                            method: "storefacebookclick",
                            fbclid: fbclid,
                            fbclicktime: fbclicktime,
                            productid: productid,
                            device: device,
                            url: awrl1f
                        },
                        success: function (data) {
                            //console.log(data);
                        },
                        error: function(a,b,c){
                            //console.log(a,b,c)
                        },
                        complete: function(xhr){
                            //console.log("Track init");
                        }
                    });
                }

                localStorage.setItem("fbclid", fbclid);
                localStorage.setItem("fbclicktime", fbclicktime);
                localStorage.setItem("awrl1f", awrl1f);
            }

            if (window.location.href.indexOf("finishorder") > -1) {
                //finished order
                if ("undefined" != typeof orderDetails) {
                    //console.log(orderDetails);

                    if ("undefined" != orderDetails["orderid"]) {
                        orderid = orderDetails["orderid"];
                    }
                    if ("undefined" != orderDetails["orddate"]) {
                        ordertime = parseInt(parseInt(orderDetails["orddate"],10) * 1000,10);
                    } else {
                        ordertime = new Date().getTime();
                    }

                    if ("undefined" != gclid
                        && null != gclid
                        && "undefined" != typeof orderid
                        && null != orderid
                        && "undefined" != typeof clicktime
                        && null != clicktime
                        && "undefined" != typeof ordertime
                        && null != ordertime
                    ) {

                        $2.ajax({
                            url: _self.apiUrl+"/tracking/",
                            type: "POST",
                            data: {
                                method: "storeconversion",
                                gclid: gclid,
                                orderid: orderid,
                                clicktime: clicktime,
                                ordertime: ordertime,
                                device: device,
                                url: ("undefined" != typeof awrl1a && !!awrl1a) ? awrl1a : ""
                            },
                            success: function (data) {
                                //console.log(data);
                            },
                            error: function(a,b,c){
                                //console.log(a,b,c)
                            },
                            complete: function(xhr){
                                //console.log("Track complete");
                                localStorage.removeItem("clicktime");
                                localStorage.removeItem("gclid");
                                localStorage.removeItem("awrl1a");
                            }
                        });
                    }

                    if ("undefined" != tplid
                        && null != tplid
                        && "undefined" != typeof orderid
                        && null != orderid
                        && "undefined" != typeof tpclicktime
                        && null != tpclicktime
                        && "undefined" != typeof ordertime
                        && null != ordertime
                    ) {

                        $2.ajax({
                            url: _self.apiUrl+"/tracking/",
                            type: "POST",
                            data: {
                                method: "storeconversion",
                                tplid: tplid,
                                orderid: orderid,
                                tpclicktime: tpclicktime,
                                ordertime: ordertime,
                                device: device,
                                url: ("undefined" != typeof awrl1t && !!awrl1t) ? awrl1t : ""
                            },
                            success: function (data) {
                                //console.log(data);
                            },
                            error: function(a,b,c){
                                //console.log(a,b,c)
                            },
                            complete: function(xhr){
                                //console.log("Track complete");
                                localStorage.removeItem("tpclicktime");
                                localStorage.removeItem("tplid");
                                localStorage.removeItem("awrl1t");
                                document.cookie = 'is2Performant=; Max-Age=-99999999;';
                            }
                        });
                    }

                    if ("undefined" != fbclid
                        && null != fbclid
                        && "undefined" != typeof orderid
                        && null != orderid
                        && "undefined" != typeof fbclicktime
                        && null != fbclicktime
                        && "undefined" != typeof ordertime
                        && null != ordertime
                    ) {

                        $2.ajax({
                            url: _self.apiUrl+"/tracking/",
                            type: "POST",
                            data: {
                                method: "storeconversion",
                                fbclid: fbclid,
                                orderid: orderid,
                                fbclicktime: fbclicktime,
                                ordertime: ordertime,
                                device: device,
                                url: ("undefined" != typeof awrl1f && !!awrl1f) ? awrl1f : ""
                            },
                            success: function (data) {
                                //console.log(data);
                            },
                            error: function(a,b,c){
                                //console.log(a,b,c)
                            },
                            complete: function(xhr){
                                //console.log("Track complete");
                                localStorage.removeItem("fbclicktime");
                                localStorage.removeItem("fbclid");
                                localStorage.removeItem("awrl1f");
                            }
                        });
                    }
                }
            }


            //iframe get event
            var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
            var eventer = window[eventMethod];
            var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message";

            // Listen to message from child window
            eventer(messageEvent,function(e) {
                var msgReceived = e.data;
                if ("undefined" != typeof msgReceived["quickOrder"] &&
                    "undefined" != typeof msgReceived["orderDetails"]){

                    //console.log("Received track message", msgReceived);
                    if ("string" == typeof msgReceived["orderDetails"]) {
                        if (_self.isJson(msgReceived["orderDetails"])){
                            msgReceived["orderDetails"] = JSON.parse(msgReceived["orderDetails"]);
                        }
                    }
                    var orderDetails = msgReceived["orderDetails"];

                    if ("undefined" != typeof orderDetails["orderid"]) {
                        if (!isNaN(orderDetails["orderid"])) {
                            orderid = orderDetails["orderid"];
                        }
                    }
                    if ("undefined" != typeof orderDetails["orddate"]) {
                        ordertime = parseInt(parseInt(orderDetails["orddate"],10) * 1000,10);
                    } else {
                        ordertime = new Date().getTime();
                    }

                    //console.log("Will add tracking data",{
                    //     gclid: gclid,
                    //     tplid: tplid,
                    //     orderid: orderid,
                    //     clicktime: clicktime,
                    //     ordertime: ordertime,
                    //     device: device
                    // });

                    if ("undefined" != gclid
                        && null != gclid
                        && "undefined" != typeof orderid
                        && null != orderid
                        && "undefined" != typeof clicktime
                        && null != clicktime
                        && "undefined" != typeof ordertime
                        && null != ordertime
                    ) {

                        $2.ajax({
                            url: _self.apiUrl+"/tracking/",
                            type: "POST",
                            data: {
                                method: "storeconversion",
                                gclid: gclid,
                                orderid: orderid,
                                clicktime: clicktime,
                                ordertime: ordertime,
                                device: device,
                                url: ("undefined" != typeof awrl1a && !!awrl1a) ? awrl1a : ""
                            },
                            success: function (data) {
                                //console.log(data);
                            },
                            error: function(a,b,c){
                                //console.log(a,b,c)
                            },
                            complete: function(xhr){
                                //console.log("Track complete");
                                localStorage.removeItem("clicktime");
                                localStorage.removeItem("gclid");
                                localStorage.removeItem("awrl1a");
                            }
                        });
                    }

                    if ("undefined" != tplid
                        && null != tplid
                        && "undefined" != typeof orderid
                        && null != orderid
                        && "undefined" != typeof tpclicktime
                        && null != tpclicktime
                        && "undefined" != typeof ordertime
                        && null != ordertime
                    ) {

                        $2.ajax({
                            url: _self.apiUrl+"/tracking/",
                            type: "POST",
                            data: {
                                method: "storeconversion",
                                tplid: tplid,
                                orderid: orderid,
                                tpclicktime: tpclicktime,
                                ordertime: ordertime,
                                device: device,
                                url: ("undefined" != typeof awrl1t && !!awrl1t) ? awrl1t : ""
                            },
                            success: function (data) {
                                //console.log(data);
                            },
                            error: function(a,b,c){
                                //console.log(a,b,c)
                            },
                            complete: function(xhr){
                                //console.log("Track complete");
                                localStorage.removeItem("tpclicktime");
                                localStorage.removeItem("tplid");
                                document.cookie = 'is2Performant=; Max-Age=-99999999;';
                                localStorage.removeItem("awrl1t");
                            }
                        });
                    }

                    if ("undefined" != fbclid
                        && null != fbclid
                        && "undefined" != typeof orderid
                        && null != orderid
                        && "undefined" != typeof fbclicktime
                        && null != fbclicktime
                        && "undefined" != typeof ordertime
                        && null != ordertime
                    ) {

                        $2.ajax({
                            url: _self.apiUrl+"/tracking/",
                            type: "POST",
                            data: {
                                method: "storeconversion",
                                fbclid: fbclid,
                                orderid: orderid,
                                fbclicktime: fbclicktime,
                                ordertime: ordertime,
                                device: device,
                                url: ("undefined" != typeof awrl1f && !!awrl1f) ? awrl1f : ""
                            },
                            success: function (data) {
                                //console.log(data);
                            },
                            error: function(a,b,c){
                                //console.log(a,b,c)
                            },
                            complete: function(xhr){
                                //console.log("Track complete");
                                localStorage.removeItem("fbclicktime");
                                localStorage.removeItem("fbclid");
                                localStorage.removeItem("awrl1f");
                            }
                        });
                    }
                }
            },false);
        });
    };

    _self.facebookPixel = function(){
        if ("undefined" != typeof fbq) {
            if (_self.isProduct) {
                var BreadCrumbs = [],
                    BreadCrumbsString = "";

                if ($2("body").find("#ProductBreadcrumb > ul > li").length) {
                    $2("body").find("#ProductBreadcrumb > ul > li").each(function(){
                        if ($2(this).text().trim().toLowerCase() != "power laptop") {
                            BreadCrumbs.push($2(this).text().trim().replace(/  /g, " "));
                        }
                    });
                }
                BreadCrumbsString = BreadCrumbs.join(" > ");
                var fbqData = {
                    content_ids: ("undefined" != typeof productId) ? [productId] : [],
                    content_type: 'product',
                    product_type: BreadCrumbsString,
                    value: ($2("body").find("#product_price").length) ? parseFloat($2("body").find("#product_price").val()).toFixed(2) : null,
                    currency: 'RON'
                }

                //console.log(fbqData);
                fbq('track', 'ViewContent', fbqData);


                $2("body").on("click", ".addToCartBtnWithTransition", function(e){
                    if (!!localStorage.getItem("fbqAddToCart")) {
                        localStorage.removeItem("fbqAddToCart");
                    }
                    localStorage.setItem("fbqAddToCart", JSON.stringify(fbqData));
                    e.preventDefault();
                });
            } else if (_self.isCart) {
                if (!!localStorage.getItem("fbqAddToCart")) {
                    var fbqData = JSON.parse(localStorage.getItem("fbqAddToCart")),
                        totalCartPrice = ($2("body").find("tr.SubTotal.Last em.ProductPrice").length) ? parseFloat($2("body").find("tr.SubTotal.Last em.ProductPrice").text().replace(/\s/g,'').toLowerCase().replace("lei", "")).toFixed(2) : fbqData["value"];
                    fbqData["value"] = totalCartPrice;
                    localStorage.setItem("fbqAddToCart", JSON.stringify(fbqData));
                    //console.log(fbqData);
                    fbq('track', 'AddToCart', fbqData);
                    localStorage.removeItem("fbqAddToCart");
                }
            } else if (_self.isOrderSuccess) {
                var productIds = [], orderTotal = 0;
                //console.log("Is order success. Fb pixel should send this");
                if ("undefined" != typeof orderDetails) {
                    if ("undefined" != typeof orderDetails["productsOrdered"]) {
                        if (orderDetails["productsOrdered"].length) {
                            orderDetails["productsOrdered"].forEach(function(product, i){
                                productIds.push(product["productId"]);
                            });
                        }
                    }
                    if ("undefined" != typeof orderDetails["subtotal_inc_tax"]) {
                        orderTotal = parseFloat(orderDetails["subtotal_inc_tax"]).toFixed(2);
                    }
                }
                var fbqData = {
                    content_ids: productIds,
                    content_type: "product",
                    product_type: "Electronic Components",
                    value: orderTotal,
                    currency: "RON",
                }
                //console.log(fbqData);
                fbq('track', 'Purchase', fbqData);
            }
        } else {
            if ("undefined" != typeof _self.waiters.facebookPixelTimeout) {
                clearTimeout(_self.waiters.facebookPixelTimeout);
            }
            _self.waiters.facebookPixelTimeout = setTimeout(function(){
                _self.facebookPixel();
            },500);
        }
    };

    _self.googleTagManagerV4 = function(){
        if ("undefined" != typeof dataLayer) {
            // console.log("GA4 datalayer active");
            if (true == _self.isProduct) {
                var productDataLayer = {
                    event: "view_item",
                    ecommerce: {
                        currency: "RON",
                        // value: parseFloat($2("body").find("em.pretStandard").text()),
                        items: [
                            {
                                quantity: 1
                            }
                        ]
                    }
                };

                if ("undefined" != typeof productCode) {
                    productDataLayer.ecommerce.items[0].item_id = productCode;
                }

                if ($2("body").find("em.pretStandard").length > 0) {
                    productDataLayer.ecommerce.items[0].price = parseFloat($2("body").find("em.pretStandard").text());
                    productDataLayer.ecommerce.value = parseFloat($2("body").find("em.pretStandard").text());
                }

                if ($2("body").find("#ProductDetails .BlockContent.clearfix:eq(0)").length > 0) {
                    if ($2("body").find("#ProductDetails .BlockContent.clearfix:eq(0)").find("h1:eq(0)").length > 0) {
                        productDataLayer.ecommerce.items[0].item_name = $2("body").find("#ProductDetails .BlockContent.clearfix:eq(0)").find("h1:eq(0)").text();
                    }
                }

                if ($2("body").find(".Breadcrumb").length > 0) {
                    if ($2("body").find(".Breadcrumb > ul > li:nth-of-type(2) a").length > 0) {
                        productDataLayer.ecommerce.items[0].item_category = $2("body").find(".Breadcrumb > ul > li:nth-of-type(2) a").text();
                    }
                    if ($2("body").find(".Breadcrumb > ul > li:nth-of-type(3) a").length > 0) {
                        productDataLayer.ecommerce.items[0].item_category2 = $2("body").find(".Breadcrumb > ul > li:nth-of-type(3) a").text();
                    }
                    if ($2("body").find(".Breadcrumb > ul > li:nth-of-type(4) a").length > 0) {
                        productDataLayer.ecommerce.items[0].item_category3 = $2("body").find(".Breadcrumb > ul > li:nth-of-type(4) a").text();
                    }
                }

                // console.log("GA4 is product");
                // console.log("productDataLayer", productDataLayer);
                dataLayer.push({ ecommerce: null });
                dataLayer.push(productDataLayer);

                $2("body").on("click", ".addToCartBtnWithTransition", function(e){
                    var addToCartDataLayer = {
                        event: "add_to_cart",
                        ecommerce: {
                            currency: productDataLayer.ecommerce.currency,
                            value: productDataLayer.ecommerce.value,
                            items: [
                                productDataLayer.ecommerce.items[0]
                            ]
                        }
                    };
                    if ($2("body").find(".QuantityInput .quantityInput").length > 0) {
                        addToCartDataLayer.ecommerce.items[0].quantity = parseInt($2("body").find(".QuantityInput .quantityInput").val(), 10);
                    }
                    // console.log('addToCartDataLayer', JSON.stringify(addToCartDataLayer));
                    dataLayer.push({ ecommerce: null });
                    // dataLayer.push(addToCartDataLayer);
                });
            } else if (true == _self.isCart) {
                console.log("GA4 is cart");
                var cartViewDataLayer = {
                    event: "view_cart",
                    ecommerce: {
                        currency: "RON",
                        items: []
                    }
                };

                if ($2("body").find(".CartContents > tbody > tr").length > 0) {
                    var i = 0;
                    $2("body").find(".CartContents > tbody > tr").each(function(){
                        var $productWrapper = $2(this),
                            productName = $productWrapper.find(".ProductName a").text(),
                            productCode = $productWrapper.find(".ProductName").attr("data-pcode"),
                            productQuantity = parseInt($productWrapper.find(".quantityInput").val(),10),
                            productPrice = parseFloat($productWrapper.find(".CartItemIndividualPrice").text().replace("Lei", "").trim()),
                            productTotalPrice = $productWrapper.find(".CartItemTotalPrice .ProductPrice").text().replace("Lei", "").trim();

                        cartViewDataLayer.ecommerce.items.push({
                            item_id: productCode,
                            item_name: productName,
                            index: i,
                            price: productPrice,
                            quantity: productQuantity
                        });
                        i++;
                    });
                }

                // console.log("cartViewDataLayer", cartViewDataLayer);
                dataLayer.push({ ecommerce: null });
                dataLayer.push(cartViewDataLayer);

                $2("body").on("click", ".CartRemoveLink", function(e){
                    var cartRemoveDataLayer = {
                            event: "remove_from_cart",
                            ecommerce: {
                                currency: "RON",
                                items: []
                            }
                        },
                        $btn = $2(this),
                        $productWrapper = $btn.closest("tr"),
                        productName = $productWrapper.find(".ProductName a").text(),
                        productCode = $productWrapper.find(".ProductName").attr("data-pcode"),
                        productQuantity = parseInt($productWrapper.find(".quantityInput").val(),10),
                        productPrice = parseFloat($productWrapper.find(".CartItemIndividualPrice").text().replace("Lei", "").trim()),
                        productTotalPrice = $productWrapper.find(".CartItemTotalPrice .ProductPrice").text().replace("Lei", "").trim();
                    cartRemoveDataLayer.ecommerce.items.push({
                        item_id: productCode,
                        item_name: productName,
                        index: i,
                        price: productPrice,
                        quantity: productQuantity
                    });

                    dataLayer.push({ ecommerce: null });
                    dataLayer.push(cartRemoveDataLayer);
                });
            }
        }
    };

    _self.alphaOnly = function(val){
        return /^[a-zA-Z ]+$/.test(val) || val.toString().trim() == "";
    };

    _self.wordsReplace = function(){
        if ("undefined" != typeof frontendWordsToReplace) {
            if ("undefined" != typeof frontendWordsToReplace["desktop"] && "undefined" != typeof frontendWordsToReplace["wordsToReplace"]) {
                if (true == frontendWordsToReplace["desktop"] && Object.keys(frontendWordsToReplace["wordsToReplace"]).length > 0) {
                    var wordsToReplace = frontendWordsToReplace["wordsToReplace"];

                    Object.keys(wordsToReplace).forEach(function(wrId, i){
                        if ("undefined" != typeof wordsToReplace[wrId]["from"] && "undefined" != typeof wordsToReplace[wrId]["to"]) {

                            $2('body :not(script)').contents().filter(function() {
                                return this.nodeType === 3;
                            }).replaceWith(function() {

                                var replaceWord = wordsToReplace[wrId]["from"],
                                    replaceRegex = new RegExp(replaceWord,"g");

                                return this.nodeValue.replace(replaceRegex, wordsToReplace[wrId]["to"]);
                            });
                        }
                    });
                }
            }
        }
    };

    _self.quickOrder = function(){
        var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
        var eventer = window[eventMethod];
        var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message";
        //console.log("Waiting for redirect");
        // Listen to message from child window
        eventer(messageEvent,function(e) {

            var msgReceived = e.data;
            //console.log('parent received message!', msgReceived);
            if ("undefined" != typeof msgReceived["qwMessage"]){
                //console.log("Received close qw event from guest");
                if ("closeQuickOrder" == msgReceived["qwMessage"]) {
                    $2("body").find(".quickOrderWrapper, .quickOrderOverlay").removeClass("show");
                    $2("html, body").removeClass("fixedBody");
                    $2( '#quickOrderFrame' ).attr( 'src', function ( i, val ) { return val; });
                }
            }
        },false);
    };

    _self.getProductGifts = function(pcode, callback){
        var log = "a";
        if ("undefined" != typeof pcode) {
            log += "b";
            $2.ajax({
                url: _self.api.gift,
                type: "POST",
                data: {
                    method: "getproductgifts",
                    pcode: pcode,
                    cdata: btoa(encodeURIComponent(JSON.stringify(_self.customerData)))
                },
                success: function(data){
                    if ("string" == typeof data) {
                        if (_self.isJson(data)) {
                            data = JSON.parse(data);
                        }
                    }
                    //console.log(log,data);
                    if ("function" == typeof callback){
                        callback(data);
                    }
                },
                error: function(a,b,c){
                    //console.log(a,b,c);
                }
            });
        }
    };

    _self.checkCartGifts = function(){
        if (_self.isCart) {
            if (!$2("body").find("#cartForm").hasClass("giftChecked")){
                if ($2("body").find("#cartForm .ProductName[data-pcode]").length) {
                    $2("body").find("#cartForm .ProductName[data-pcode]").each(function(){
                        var $item = $2(this),
                            pcode = $item.attr("data-pcode");
                        _self.getProductGifts(pcode, function(data){
                            _self.renderGifts(data);
                            $2("body").find("#cartForm").addClass("giftChecked");
                        });
                    });
                }
            }
        }
    };

    _self.checkCheckoutGifts = function(){
        if (_self.isCheckout) {
            if (!$2("body").find("#OrderConfirmationForm .CartContents").hasClass("giftChecked")){
                if ($2("body").find("#OrderConfirmationForm .CartContents td[data-pcode]").length) {
                    $2("body").find("#OrderConfirmationForm .CartContents td[data-pcode]").each(function(){
                        var $item = $2(this),
                            pcode = $item.attr("data-pcode");
                        if (!$item.hasClass("giftChecked")) {
                            _self.getProductGifts(pcode, function (data) {
                                _self.renderGifts(data);
                                $2("body").find("#OrderConfirmationForm .CartContents").addClass("giftChecked");
                            });
                        }
                    });
                }
            }
        }
    };

    _self.renderGifts = function(data){
        var log = "1";
        if ("undefined" != typeof data) {
            log += "2";
            if ("undefined" != typeof data["data"]) {
                log += "3";
                if (data["data"].length) {
                    log += "4";
                    //product page
                    if (_self.isProduct) {
                        log += "5";

                        //main product
                        data["data"].forEach(function(giftProduct, i) {
                            if ($2("body").find(".ProductThumb[data-pcode='"+giftProduct["productcodeassignedto"]+"']").length) {
                                log += "6";
                                if (!$2("body").find(".ProductThumb[data-pcode='"+giftProduct["productcodeassignedto"]+"'] .productGiftWrapper").length) {
                                    log += "7";
                                    var $giftHTML = "";
                                    $giftHTML += "<a "+((giftProduct["url"] != "") ? " target='_blank' ": "")+" href='"+((giftProduct["url"] != "") ? giftProduct["url"]: "javascript:void(0);")+"' class='productGiftWrapper giftInProductPage' style='background-color: "+((giftProduct["color"] != "") ? giftProduct["color"]: "#d70000")+";' data-giftid='"+giftProduct["giftid"]+"'>";

                                    $giftHTML += "<div class='productGiftInner'>";
                                    // $giftHTML += "<div class='productGiftImageWrapper'>";
                                    //     $giftHTML += "<img src='"+giftProduct["productthumb"]+"' />";
                                    // $giftHTML += "</div>";
                                    $giftHTML += "<div class='productGiftName'>"+((giftProduct["giftname"] != "") ? giftProduct["giftname"] : giftProduct["prodname"])+"</div>";
                                    $giftHTML += "<div class='giftBadge'><i class='emg-icon giftIcon'></i>Cadou</div>";
                                    $giftHTML += "</div>";
                                    $giftHTML += "</a>";
                                    $2("body").find(".ProductThumb[data-pcode='"+giftProduct["productcodeassignedto"]+"']").append($giftHTML);
                                }
                            }
                        });

                        //related products
                        if ($2("body").find(".ProductList [data-pcode]").length) {
                            log += "6b";
                            //console.log("Gifts ",data["data"]);
                            data["data"].forEach(function(giftProduct, i) {
                                if ($2("body").find(".ProductList [data-pcode='"+giftProduct["productcodeassignedto"]+"']").length) {
                                    log += "7b";
                                    if (!$2("body").find(".ProductList [data-pcode='"+giftProduct["productcodeassignedto"]+"'] .productGiftWrapper").length) {
                                        log += "8b";
                                        var $giftHTML = "";
                                        $giftHTML += "<div class='productGiftWrapper giftInRelatedProducts' style='background-color: "+((giftProduct["color"] != "") ? giftProduct["color"]: "#d70000")+";' data-giftid='"+giftProduct["giftid"]+"'>";
                                        // $giftHTML += "<div class='productGiftImageWrapper'>";
                                        //     $giftHTML += "<img src='"+giftProduct["productthumb"]+"' />";
                                        // $giftHTML += "</div>";
                                        $giftHTML += "<div class='productGiftName'>";
                                        $giftHTML += "<strong><i class='emg-icon giftIcon'></i>Cadou</strong>";
                                        $giftHTML += ((giftProduct["giftname"] != "") ? giftProduct["giftname"] : giftProduct["prodname"])+"</div>";

                                        $giftHTML += "</div>";
                                        $2("body").find(".ProductList [data-pcode='"+giftProduct["productcodeassignedto"]+"']").append($giftHTML);
                                    }
                                }
                            });
                        }

                    } else if (_self.isCart) {
                        log += "5";
                        //console.log("data",data);
                        var cancelOrtherGifts = false;
                        if ($2("body").find("#cartForm .ProductName[data-pcode]").length) {
                            data["data"].forEach(function(gift, i){
                                //"undefined" != typeof data["data"]["productcodeassignedto"] &&
                                log += "6";
                                if ("undefined" != typeof gift["cumulative"] && "undefined" != typeof gift["gifttype"] && "undefined" != typeof gift["giftid"]) {
                                    log += "7";
                                    if (gift["cumulative"] == 1 && gift["gifttype"] == 1) {
                                        log += "9";
                                        //allow Other gifts and set per order
                                        if ($2("body").find("#cartForm .CartContents tbody").length){
                                            log += "12";
                                            if (!$2("body").find("#cartForm .CartContents tbody .giftRow[data-giftid='"+gift["giftid"]+"']").length){
                                                log += "13";
                                                var $giftHTML = "<tr class='giftRow' data-giftid='"+gift["giftid"]+"'>";
                                                $giftHTML += "<td class='CartThumb'><a "+((giftProduct["url"] != "") ? " target='_blank' ": "")+" href='"+((giftProduct["url"] != "") ? giftProduct["url"]: "javascript:void(0);")+"'><img class='lazy' data-src='" + gift["productthumb"] + "' /></a></td>";
                                                $giftHTML += "<td class='ProductName'><div class='cartProductGiftsWrapper' style='background-color: " + gift["color"] + "'><div class='cartProductGiftName'><strong><i class='emg-icon giftIcon'></i>CADOU</strong> " + ((1 < gift["cumulative"]) ? gift["cumulative"]+"x" : "") + gift["giftname"] + "</div></div></td>";
                                                $giftHTML += "<td>&nbsp;</td>";
                                                $giftHTML += "<td>&nbsp;</td>";
                                                $giftHTML += "<td align='right'><em class='ProductPrice'><s>"+parseFloat(gift["prodsaleprice"])+" Lei</s><br />GRATUIT</em></td>";
                                                $giftHTML += "</tr>";
                                                $2("body").find("#cartForm .CartContents tbody").append($giftHTML);
                                                _self.loadImages();
                                            }
                                        }
                                    } else if (gift["cumulative"] == 1 && gift["gifttype"] == 2) {
                                        //allow Other gifts and set per product
                                        if ($2("body").find("#cartForm .ProductName[data-pcode='" + gift["productcodeassignedto"] + "']").length) {
                                            log += "9";

                                            var $product = $2("body").find("#cartForm .ProductName[data-pcode='" + gift["productcodeassignedto"] + "']").closest("tr"),
                                                $giftHTML = "";

                                            $giftHTML += "<div class='cartProductGiftsWrapper' style='background-color: " + gift["color"] + "'>";
                                            $giftHTML += "<div class='cartProductGiftName'><strong><i class='emg-icon giftIcon'></i>CADOU</strong> " + ((1 < gift["cumulative"]) ? gift["cumulative"]+"x" : "") + gift["giftname"] + "</div>";
                                            $giftHTML += "<div class='cartProductGiftImage'><img class='lazy' data-src='" + gift["productthumb"] + "' /></div>";
                                            $giftHTML += "</div>";

                                            if (!$product.find(".cartProductGiftsWrapper").length) {
                                                log += "10";
                                                $product.find(".ProductName").append($giftHTML);
                                                $product.addClass("hasGift");
                                                _self.loadImages();
                                            }
                                        }
                                    } else {
                                        log += "11";
                                        //cancel other gifts
                                        if ($2("body").find("#cartForm .CartContents tbody").length){
                                            log += "12";
                                            if (!$2("body").find("#cartForm .CartContents tbody .giftRow").length){
                                                log += "13";
                                                if (cancelOrtherGifts == false) {
                                                    $2("body").find(".giftRow").remove();
                                                    var $giftHTML = "<tr class='giftRow' data-giftid='" + gift["giftid"] + "'>";
                                                    $giftHTML += "<td class='CartThumb'><a "+((gift["url"] != "") ? " target='_blank' ": "")+" href='"+((gift["url"] != "") ? gift["url"]: "javascript:void(0);")+"'><img class='lazy' data-src='" + gift["productthumb"] + "' /></a></td>";
                                                    $giftHTML += "<td class='ProductName'><div class='cartProductGiftsWrapper' style='background-color: " + gift["color"] + "'><div class='cartProductGiftName'><strong><i class='emg-icon giftIcon'></i>CADOU</strong> " + ((1 < gift["cumulative"]) ? gift["cumulative"] + "x" : "") + gift["giftname"] + "</div></div></td>";
                                                    $giftHTML += "<td>&nbsp;</td>";
                                                    $giftHTML += "<td>&nbsp;</td>";
                                                    $giftHTML += "<td align='right'><em class='ProductPrice'><s>"+parseFloat(gift["prodsaleprice"])+" Lei</s><br />GRATUIT</em></td>";
                                                    $giftHTML += "</tr>";
                                                    $2("body").find("#cartForm .CartContents tbody").append($giftHTML);
                                                    _self.loadImages();
                                                    cancelOrtherGifts = true;
                                                }
                                            }
                                        }
                                    }
                                }
                            });
                        }
                    } else if (_self.isCheckout) {
                        log += "5";
                        //console.log("data",data);
                        var cancelOrtherGifts = false;
                        if ($2("body").find("#OrderConfirmationForm .CartContents td[data-pcode]").length) {
                            data["data"].forEach(function(gift, i){
                                log += "6";
                                if ("undefined" != typeof gift["cumulative"] && "undefined" != typeof gift["gifttype"] && "undefined" != typeof gift["giftid"]) {
                                    log += "7";
                                    if (gift["cumulative"] == 1 && gift["gifttype"] == 1) {
                                        log += "9";
                                        //allow Other gifts and set per order
                                        if ($2("body").find("#OrderConfirmationForm .CartContents tbody").length && $2("body").find("#OrderConfirmationForm .CartContents tbody td[data-pcode='"+gift["productcodeassignedto"] +"']").length){
                                            log += "10";
                                            if (!$2("body").find("#OrderConfirmationForm .CartContents tbody .giftRow[data-giftid='"+gift["giftid"]+"']").length && !$2("body").find("#OrderConfirmationForm .CartContents tbody td[data-pcode='"+gift["productcodeassignedto"] +"']").hasClass("giftChecked")){
                                                log += "11";
                                                var $giftHTML = "<tr class='giftRow' data-giftid='"+gift["giftid"]+"'>";
                                                $giftHTML += "<td class='ProductName'><div class='checkoutProductGiftsWrapper' style='background-color: " + gift["color"] + "'><div class='checkoutProductGiftName'><strong><i class='emg-icon giftIcon'></i>CADOU</strong> " + ((1 < gift["cumulative"]) ? gift["cumulative"]+"x" : "") + gift["giftname"] + "</div></div></td>";
                                                $giftHTML += "<td>&nbsp;</td>";
                                                $giftHTML += "<td>&nbsp;</td>";
                                                $giftHTML += "<td align='right'><em class='ProductPrice'><s>"+parseFloat(gift["prodsaleprice"])+" Lei</s><br />GRATUIT</em></td>";
                                                $giftHTML += "</tr>";
                                                $2("body").find("#OrderConfirmationForm .CartContents tbody").append($giftHTML);
                                                $2("body").find("#OrderConfirmationForm .CartContents tbody td[data-pcode='"+gift["productcodeassignedto"] +"']").addClass("giftChecked");
                                            }
                                        }
                                    } else if (gift["cumulative"] == 1 && gift["gifttype"] == 2) {
                                        //allow Other gifts and set per product
                                        if ($2("body").find("#OrderConfirmationForm .CartContents td[data-pcode='" + gift["productcodeassignedto"] + "']").length && !$2("body").find("#OrderConfirmationForm .CartContents td[data-pcode='" + gift["productcodeassignedto"] + "']").hasClass("giftChecked")) {
                                            log += "12";

                                            var $product = $2("body").find("#OrderConfirmationForm .CartContents td[data-pcode='" + gift["productcodeassignedto"] + "']").closest("tr"),
                                                $giftHTML = "";

                                            $giftHTML += "<div class='checkoutProductGiftsWrapper' style='background-color: " + gift["color"] + "'>";
                                            $giftHTML += "<div class='checkoutProductGiftName'><strong><i class='emg-icon giftIcon'></i>CADOU</strong> " + ((1 < gift["cumulative"]) ? gift["cumulative"]+"x" : "") + gift["giftname"] + "</div>";
                                            $giftHTML += "</div>";

                                            if (!$product.find(".checkoutProductGiftsWrapper").length) {
                                                log += "13";
                                                $product.find("td[data-pcode='"+gift["productcodeassignedto"]+"']").append($giftHTML);
                                                $product.addClass("hasGift");
                                                $2("body").find("#OrderConfirmationForm .CartContents tbody td[data-pcode='"+gift["productcodeassignedto"] +"']").addClass("giftChecked");
                                            }
                                        }
                                    } else {
                                        log += "14";
                                        //cancel other gifts

                                        if ($2("body").find("#OrderConfirmationForm .CartContents tbody").length){
                                            log += "15";
                                            if (!$2("body").find("#OrderConfirmationForm .CartContents tbody td[data-pcode='"+gift["productcodeassignedto"] +"']").hasClass("giftChecked")){
                                                log += "16";
                                                if (cancelOrtherGifts == false) {
                                                    $2("body").find(".giftRow").remove();
                                                    var $giftHTML = "<tr class='giftRow' data-giftid='" + gift["giftid"] + "'>";
                                                    $giftHTML += "<td class='ProductName'><div class='checkoutProductGiftsWrapper' style='background-color: " + gift["color"] + "'><div class='checkoutProductGiftName'><strong><i class='emg-icon giftIcon'></i>CADOU</strong> " + ((1 < gift["cumulative"]) ? gift["cumulative"] + "x" : "") + gift["giftname"] + "</div></div></td>";
                                                    $giftHTML += "<td>&nbsp;</td>";
                                                    $giftHTML += "<td>&nbsp;</td>";
                                                    $giftHTML += "<td align='right'><em class='ProductPrice'><s>"+parseFloat(gift["prodsaleprice"])+" Lei</s><br />GRATUIT</em></td>";
                                                    $giftHTML += "</tr>";
                                                    $2("body").find("#OrderConfirmationForm .CartContents tbody").append($giftHTML);
                                                    $2("body").find("#OrderConfirmationForm .CartContents tbody td[data-pcode='" + gift["productcodeassignedto"] + "']").addClass("giftChecked");
                                                    cancelOrtherGifts = true;
                                                }
                                            }
                                        }
                                    }
                                }
                            });
                        }
                    } else if (_self.isCategory || _self.isSearch) {
                        log += "5";
                        //console.log("data",data);
                        if ($2("body").find(".ProductList [data-pcode]").length) {
                            log += "6";
                            log += "7";
                            data["data"].forEach(function(giftProduct, i) {
                                if (!$2("body").find(".ProductList [data-pcode='"+giftProduct["productcodeassignedto"] +"'] .productGiftWrapper").length) {
                                    var $giftHTML = "";
                                    $giftHTML += "<div class='productGiftWrapper giftInCategoryPage' style='background-color: "+((giftProduct["color"] != "") ? giftProduct["color"]: "#d70000")+";' data-giftid='"+giftProduct["giftid"]+"'>";
                                    $giftHTML += "<div class='productGiftName'>";
                                    $giftHTML += "<strong><i class='emg-icon giftIcon'></i>Cadou</strong>";
                                    $giftHTML += ((giftProduct["giftname"] != "") ? giftProduct["giftname"] : giftProduct["prodname"])+"</div>";

                                    $giftHTML += "</div>";
                                    $2("body").find(".ProductList [data-pcode='"+giftProduct["productcodeassignedto"] +"']").append($giftHTML);
                                }
                            });


                        }
                    }
                }
            }
        }
        //console.log(log);
    };

    _self.getAwb = function(orderid, email, callback){
        if ("undefined" != typeof orderid && "undefined" != typeof email) {
            if (!isNaN(orderid)) {
                $2.ajax({
                    url: _self.api.fan,
                    type: "POST",
                    data: {method: "getlocalawb", orderid: orderid, email: email},
                    success: function(data){
                        if ("string" == typeof data) {
                            if (_self.isJson(data)) {
                                data = JSON.parse(data);
                            }
                        }
                        if ("function" == typeof callback) {
                            callback(data);
                        }
                    },
                    error: function(a,b,c){
                        //console.log(a,b,c);
                    }
                });
            }
        }
    };

    _self.renderAwb = function(data, callback){
        if ("undefined" != typeof data) {
            if ("undefined" != typeof data["data"]) {
                if ("undefined" != typeof data["data"]["orderid"] && "undefined" != typeof data["data"]["awb"]) {
                    if (_self.isAccount) {
                        if (_self.isViewOrderList) {
                            if ($2("body").find(".AccountOrderStatusList input[name='order_id']").length) {
                                $2("body").find(".AccountOrderStatusList input[name='order_id']").each(function(){
                                    var $inp = $2(this),
                                        orderid = $2(this).val(),
                                        $wrapper = $inp.closest("li");

                                    if (orderid == data["data"]["orderid"]) {
                                        $wrapper.attr("data-orderid", orderid);
                                        $wrapper.find("hr").attr("data-orderidend", orderid);
                                        if (!$wrapper.find(".orderListAwb").length) {
                                            $2("<div class='orderListAwb' data-orderid='" + orderid + "' data-awb='" + data["data"]["awb"] + "'><a href='https://www.fancourier.ro/awb-tracking/?metoda=tracking&bar_size=x&limba=romana&awb="+data["data"]["awb"]+"&home_awb_submit=' target='_blank'>AWB: <strong>" + data["data"]["awb"] + "</strong></a></div>").insertBefore("hr[data-orderidend='" + orderid + "']");
                                        }
                                    }
                                });
                                if ("function" == typeof callback) {
                                    callback();
                                }
                            }
                        } else if (_self.isViewOrderDetails) {
                            if ($2("body").find("#AccountOrder").length && !$2("body").find("#orderListAwb").length) {
                                $2("body").find("#AccountOrder").each(function(){
                                    var $wrapper = $2(this),
                                        orderid = data["data"]["orderid"];

                                    $wrapper.attr("data-orderid", orderid);
                                    if (!$wrapper.find(".orderListAwb").length) {
                                        $wrapper.children("h2").first().append("<div class='orderListAwb' data-orderid='" + orderid + "' data-awb='" + data["data"]["awb"] + "'><a href='https://www.fancourier.ro/awb-tracking/?metoda=tracking&bar_size=x&limba=romana&awb="+data["data"]["awb"]+"&home_awb_submit=' target='_blank'><span>AWB: </span><strong>" + data["data"]["awb"] + "</strong></a></div>");
                                    }
                                    _self.clearfix("#AccountOrder");
                                    _self.clearfix(".Content h2, .TitleHeading");
                                });
                                if ("function" == typeof callback) {
                                    callback();
                                }
                            }
                        }
                    }
                }
            }
        }
    };

    _self.getTracking = function(awb, callback){
        if ("undefined" != typeof awb) {
            $2.ajax({
                url: _self.api.fan,
                type: "POST",
                data: {method: "gettracking", awb: awb},
                success: function(data){
                    if ("string" == typeof data) {
                        if (_self.isJson(data)) {
                            data = JSON.parse(data);
                        }
                    }
                    if ("function" == typeof callback) {
                        callback(data);
                    }
                },
                error: function(a,b,c){
                    //console.log(a,b,c);
                }
            });
        }
    };

    _self.renderTracking = function(data, callback){
        if ("undefined" != typeof data){
            if ("undefined" != typeof data["data"]) {
                if ("string" == typeof data["data"]) {
                    if (_self.isJson(data["data"])) {
                        data["data"] = JSON.parse(data["data"]);
                    }
                }

                var trackingProgress = data["data"],
                    $trackHTML = "<div class='trackingWrapper'>",
                    activeSteps = 0;
                if (null != trackingProgress) {
                    Object.keys(trackingProgress).forEach(function (stepName, i) {
                        var trackingStep = trackingProgress[stepName];
                        if (
                            "undefined" != typeof trackingStep["date"]
                            && "undefined" != typeof trackingStep["time"]
                            && "undefined" != typeof trackingStep["location"]
                            && "undefined" != typeof trackingStep["status"]
                            && "undefined" != typeof trackingStep["desc"]
                            && "undefined" != typeof trackingStep["title"]
                        ) {

                            $trackHTML += '<div class="trackingStep clearfixt '+((true == trackingStep["status"]) ? "trackingStepActive" : "")+'" title="' + trackingStep["desc"] + '" data-date="' + trackingStep["deliverydate"] + trackingStep["deliverytime"] + '" data-status="' + trackingStep["status"] + '">';
                            $trackHTML += "<i class='trackingStepIcon loh-icon " + stepName + "'></i>";
                            $trackHTML += "<span class='trackingStepName'>" + trackingStep["title"] + "</span>";
                            $trackHTML += "<span class='trackingStepDateTime'>" + trackingStep["date"] + " " + trackingStep["time"] + "</span>";
                            $trackHTML += '</div>';

                            if (true == trackingStep["status"]) {
                                activeSteps++;
                            }
                        }
                    });
                }
                $trackHTML += "</div>";
                $2("body").find("#LayoutColumn2").prepend($trackHTML); // TBA
                $2("body").find("#LayoutColumn2 .trackingWrapper").attr("data-activesteps", activeSteps);
                if ("function" == typeof callback) {
                    callback();
                }
            }
        }
    };

    _self.getLocalitiesByStateName = function(state, callback){
        if ("undefined" != typeof state) {
            $2.ajax({
                url: _self.api.localities,
                type: "POST",
                data: {method: "getlocalitiesbystatename", state: state, source: "fan"},
                success: function(data){
                    if ("string" == typeof data) {
                        if (_self.isJson(data)) {
                            data = JSON.parse(data);
                        }
                    }
                    if ("function" == typeof callback) {
                        callback(data);
                    }
                },
                error: function(a,b,c){
                    //console.log(a,b,c);
                }
            });
        }
    };

    _self.renderLocalities = function(data, $element){
        //console.log("rendering localities",data, $element);
        if ("undefined" != typeof data && $2("body").find($element).length){
            var $selHTML = "<select class='localitiesSelect' data-selectfor='"+$element+"'>";
            $selHTML += "<option value=''>Selecteaza localitate</option>";
            if (false != data["status"]){
                if (Object.keys(data).length > 0){
                    Object.keys(data).forEach(function(localitate, i){
                        $selHTML += "<option value='"+data[localitate]["name"]+"'>"+data[localitate]["name"]+"</option>";
                    });
                }
            }
            $selHTML += "</select>";
            //console.log($selHTML);
            $2("body").find($element+" .localitiesSelect").remove();
            $2("body").find($element).append($selHTML);
        }
    };
    _self.getCookies = function(){
        var pairs = document.cookie.split(";");
        var cookies = {};
        for (var i=0; i<pairs.length; i++){
            var pair = pairs[i].split("=");
            cookies[(pair[0]+'').trim()] = unescape(pair.slice(1).join('='));
        }
        return cookies;
    };
    _self.sortObjectKeys = function(objectToSort) {
        var key = Object.keys(objectToSort).sort(function order(key1, key2) {
            if (key1 < key2) {
                return -1;
            } else if (key1 > key2) {
                return +1;
            } else {
                return 0
            };
        });

        // Taking the object in 'temp' object
        // and deleting the original object.
        var temp = {};

        for (var i = 0; i < key.length; i++) {
            temp[key[i]] = objectToSort[key[i]];
            delete objectToSort[key[i]];
        }

        // Copying the object from 'temp' to
        // 'original object'.
        for (var i = 0; i < key.length; i++) {
            objectToSort[key[i]] = temp[key[i]];
        }
        return objectToSort;
    };

    _self.getIp = function(callback){
        $2.ajax({
            url: _self.api.powerblacklist,
            type: "POST",
            data: {
                method: "getip"
            },
            success: function(ip){
                if ("function" == typeof callback) {
                    callback(ip);
                }
            },
            error: function(a,b,c){
                //console.log(a,b,c);
            }
        });
    };
    _self.checkClientOrderBlacklist = function(client, callback){
        if ("undefined" == typeof client) {
            var client = {};
        }
        _self.getIp(function(ip){
            if ("undefined" != typeof client["customername"]
                || "undefined" != typeof client["ip"]
                || "undefined" != typeof ip
                || "undefined" != typeof client["email"]
                || "undefined" != typeof client["phone"]
                || "undefined" != typeof client["cui"]
                || "undefined" != typeof client["cnp"]) {
                if ("undefined" == typeof client["ip"] && "undefined" != typeof ip) {
                    client["ip"] = ip;
                }
                $2.ajax({
                    url: _self.api.powerblacklist,
                    type: "POST",
                    data: {
                        method: "checkclient",
                        data: btoa(JSON.stringify(client))
                    },
                    success: function(data){
                        if ("string" == typeof data) {
                            if (_self.isJson(data)) {
                                data = JSON.parse(data);
                            }
                        }
                        if ("function" == typeof callback) {
                            callback(data);
                        }
                    },
                    error: function(a,b,c){
                        //console.log(a,b,c);
                    }
                });
            }
        });
    };

    _self.handleCanOrder = function(){
        //console.log("Handing canOrder");

        var cookies = _self.getCookies(),
            pwrHCOCookies = {},
            hcoString = "",
            hcoNumber = -1;

        if (Object.keys(cookies).length > 0) {

            cookies = _self.sortObjectKeys(cookies);
            Object.keys(cookies).forEach(function(cookieName, i) {
                if (cookieName.toString().trim().indexOf("pwrhco_") > -1) {
                    var hcoCookieNumber = cookieName.split("pwrhco_")[1];
                    if (!isNaN(hcoCookieNumber)) {
                        //has number
                        pwrHCOCookies[hcoCookieNumber] = cookies[cookieName];
                    }
                }
            });

            pwrHCOCookies = _self.sortObjectKeys(pwrHCOCookies);
            //console.log("pwrHCOCookies",pwrHCOCookies);

            Object.keys(pwrHCOCookies).forEach(function(hcoCookieNumber, i) {
                if (!isNaN(hcoCookieNumber)) {
                    //has number
                    if (parseFloat(hcoCookieNumber) == parseFloat(hcoNumber)+1) {
                        hcoString = (hcoString+""+pwrHCOCookies[hcoCookieNumber]).trim();
                        hcoNumber = parseFloat(hcoCookieNumber);
                    }
                }
            });

        }
        //console.log(hcoString);

        if ("undefined" != typeof hcoString) {
            if ("string" == typeof hcoString) {
                if (_self.isBase64(hcoString)) {
                    var handleData = atob(hcoString);

                    if (_self.isJson(handleData)) {
                        handleData = JSON.parse(handleData);
                    }
                    //console.log("handleData", handleData);
                    if ("undefined" != typeof handleData["canOrder"]) {
                        if (false == "undefined" != typeof handleData["canOrder"]){
                            if ($2("body").find(".ProductAddToCart, .customDesktopProductHeaderAddToCartWrapper, .cartToggle, a[href*='/cos.php']").length) {
                                $2("body").find(".ProductAddToCart, .customDesktopProductHeaderAddToCartWrapper, .cartToggle, a[href*='/cos.php']").remove();
                            }
                            if ("undefined" != typeof _self.repeaters.removeOrderHooksRepeater) {
                                clearInterval(_self.repeaters.removeOrderHooksRepeater);
                            }
                            if ("undefined" != typeof _self.waiters.removeOrderHooksTimeout) {
                                clearTimeout(_self.waiters.removeOrderHooksTimeout);
                            }
                            _self.repeaters.removeOrderHooksRepeater = setInterval(function(){
                                if ($2("body").find(".ProductAddToCart, .customDesktopProductHeaderAddToCartWrapper, .cartToggle, a[href*='/cos.php']").length) {
                                    $2("body").find(".ProductAddToCart, .customDesktopProductHeaderAddToCartWrapper, .cartToggle, a[href*='/cos.php']").remove();
                                }
                            },100);
                            _self.waiters.removeOrderHooksTimeout = setTimeout(function(){
                                clearInterval(_self.repeaters.removeOrderHooksRepeater);
                            },5000);

                            if ("undefined" != typeof handleData["clientNotice"]) {
                                var $htmlHCO = "<div class='blacklistClientNoticeWrapper'>",
                                    $textDiv = $2("<div/>");
                                $textDiv.html(handleData["clientNotice"].toString().trim());
                                $htmlHCO += "<div class='blacklistClientNoticeInner'></div>";
                                if ("undefined" != typeof handleData["clientImages"]) {
                                    if (handleData["clientImages"].length) {
                                        $htmlHCO += "<div class='blacklistClientImages'>";
                                        handleData["clientImages"].forEach(function(image, i){
                                            $htmlHCO += "<a class='blacklistClientImage' href='"+image+"' target='_blank'><img class='lazy' data-src='"+image+"' /></a>";
                                        });
                                        $htmlHCO += "</div>";
                                    }
                                }


                                $htmlHCO += "</div>";
                                if (!$2("body").find(".blacklistClientNoticeWrapper").length) {
                                    $2("body").append($htmlHCO);
                                    $2("body").find(".blacklistClientNoticeWrapper .blacklistClientNoticeInner").text($textDiv.text());
                                    _self.loadImages();
                                }
                            }
                        }
                    }
                }
            }
        }
    };

    _self.handleResellerRequest = function(){
        if (_self.isProduct == true && $2("body").find(".btnResellerPricesRequest").length > 0 && !isReseller) {
            // console.log("Has reseller button in product page");
            var $btnResellerRequest = $2("body").find(".btnResellerPricesRequest");
            // if (_self.customerData.isReseller == true && _self.customerData.customerId == 18910) { // TBA remove customer id constrain
            // console.log("Is dev");
            var $popupHTML = "<div class='popupResellerRequestOverlay'></div>";
            $popupHTML += "<div class='popupResellerRequest' data-customerid='"+_self.customerData.customerId+"'>";
            $popupHTML += "<a href='javascript:void(0);' class='btnCloseResellerRequestPopup'></a>";
            $popupHTML += "<div class='popupResellerRequestInner'>";
            $popupHTML += "<div class='popupResellerRequestHead'>Cerere Reseller</div>";
            $popupHTML += "<div class='popupResellerRequestBody'>";
            if (_self.customerData.isLoggedIn != true) {
                $popupHTML += "<p>Pentru a beneficia de peturi speciale pentru reselleri este necesar sa va autentificati sau sa creati un cont.</p>";
            } else {
                $popupHTML += "<p>Pentru a beneficia de peturi speciale pentru reselleri completati cu atentie datele de mai jos.</p>";
                $popupHTML += "<div class='resellerRequestForm'>";
                $popupHTML += "<div class='inputGroup'>";
                $popupHTML += "<div class='inputWrapper'>";
                $popupHTML += "<span>Nume <i>*</i></span>";
                $popupHTML += "<input type='text' class='resellerRequestFirstName' value='"+(("undefined" != typeof _self.customerData["customerData"]["custconfirstname"]) ? _self.customerData["customerData"]["custconfirstname"] : "" )+"' placeholder='Nume' />";
                $popupHTML += "</div>";
                $popupHTML += "<div class='inputWrapper'>";
                $popupHTML += "<span>Prenume <i>*</i></span>";
                $popupHTML += "<input type='text' class='resellerRequestLastName' value='"+(("undefined" != typeof _self.customerData["customerData"]["custconlastname"]) ? _self.customerData["customerData"]["custconlastname"] : "" )+"' placeholder='Prenume' />";
                $popupHTML += "</div>";
                $popupHTML += "<div class='inputWrapper'>";
                $popupHTML += "<span>Nume firma <i>*</i></span>";
                $popupHTML += "<input type='text' class='resellerRequestCompany' value='"+(("undefined" != typeof _self.customerData["customerData"]["custconcompany"]) ? _self.customerData["customerData"]["custconcompany"] : "" )+"' placeholder='Nume firma' />";
                $popupHTML += "</div>";
                $popupHTML += "<div class='inputWrapper'>";
                $popupHTML += "<span>CUI <i>*</i></span>";
                $popupHTML += "<input type='text' class='resellerRequestCui' value='"+(("undefined" != typeof _self.customerData["customerData"]["formfieldfieldvalue"]) ? _self.customerData["customerData"]["formfieldfieldvalue"] : "" )+"' placeholder='CUI' />";
                $popupHTML += "</div>";
                $popupHTML += "</div>";

                $popupHTML += "<div class='inputGroup'>";
                $popupHTML += "<div class='inputWrapper'>";
                $popupHTML += "<span>Telefon <i>*</i></span>";
                $popupHTML += "<input type='text' class='resellerRequestPhone' value='"+(("undefined" != typeof _self.customerData["customerData"]["custconphone"]) ? _self.customerData["customerData"]["custconphone"] : "" )+"' placeholder='Telefon' />";
                $popupHTML += "</div>";
                $popupHTML += "<div class='inputWrapper'>";
                $popupHTML += "<span>Email <i>*</i></span>";
                $popupHTML += "<input type='text' class='resellerRequestEmail' value='"+(("undefined" != typeof _self.customerData["customerData"]["custconemail"]) ? _self.customerData["customerData"]["custconemail"] : "" )+"' placeholder='Email' />";
                $popupHTML += "</div>";

                $popupHTML += "<div class='inputWrapper'>";
                $popupHTML += "<span>Judet <i>*</i></span>";
                $popupHTML += "<input type='text' class='resellerRequestState' value='"+(("undefined" != typeof _self.customerData["customerData"]["shipstate"]) ? _self.customerData["customerData"]["shipstate"] : "" )+"' />";
                $popupHTML += "</div>";
                $popupHTML += "<div class='inputWrapper'>";
                $popupHTML += "<span>Localitate <i>*</i></span>";
                $popupHTML += "<input type='text' class='resellerRequestCity' value='"+(("undefined" != typeof _self.customerData["customerData"]["shipcity"]) ? _self.customerData["customerData"]["shipcity"] : "" )+"' />";
                $popupHTML += "</div>";
                $popupHTML += "</div>";

                $popupHTML += "<div class='inputGroup'>";
                $popupHTML += "<div class='inputWrapper'>";
                $popupHTML += "<span>Adresa <i>*</i></span>";
                $popupHTML += "<input type='text' class='resellerRequestAddress' value='"+(("undefined" != typeof _self.customerData["customerData"]["shipaddress1"]) ? _self.customerData["customerData"]["shipaddress1"] : "" )+"' placeholder='Ex. Str. Sfantul Niceta, Nr. 6' />";
                $popupHTML += "</div>";
                $popupHTML += "</div>";

                $popupHTML += "<div class='inputGroup'>";
                $popupHTML += "<div class='inputWrapper'>";
                $popupHTML += "<span>Ati mai cumparat de la noi? <i>*</i></span>";
                $popupHTML += "<div class='radioGroup'>";
                $popupHTML += "<input type='radio' value='nu' class='resellerRequestAleadyBought' id='resellerRequestAleadyBoughtNu' name='resellerRequestAleadyBought' "+(("undefined" == typeof _self.customerData["customerData"]["totalorders"] || isNaN(_self.customerData["customerData"]["totalorders"]) || 0 >= parseFloat(_self.customerData["customerData"]["totalorders"])) ? "checked" : "" )+"/><label for='resellerRequestAleadyBoughtNu'>NU</label>";
                $popupHTML += "<input type='radio' value='da' class='resellerRequestAleadyBought' id='resellerRequestAleadyBoughtDa' name='resellerRequestAleadyBought' "+(("undefined" != typeof _self.customerData["customerData"]["totalorders"] && !isNaN(_self.customerData["customerData"]["totalorders"]) && 0 < parseFloat(_self.customerData["customerData"]["totalorders"])) ? "checked" : "" )+"/><label for='resellerRequestAleadyBoughtDa'>DA</label>";
                $popupHTML += "</div>";
                $popupHTML += "</div>";

                $popupHTML += "<div class='inputWrapper'>";
                $popupHTML += "<span>Valoarea de care intentionati sa achizitionati lunar <i>*</i></span>";
                $popupHTML += "<input type='number' min='1' class='resellerRequestQuantity' value='' placeholder='Ex. 1000 lei' />";
                $popupHTML += "</div>";

                $popupHTML += "<div class='inputWrapper'>";
                $popupHTML += "<span>Ce tipuri de produse intentionati sa cumparati? <i>*</i></span>";
                $popupHTML += "<input type='text' class='resellerRequestProducts' value='' placeholder='Ex. Display telefon, baterii laptop etc..' />";
                $popupHTML += "</div>";

                $popupHTML += "</div>";
                $popupHTML += "</div>";
            }


            $popupHTML += "<div class='resellerRequestResponse'></div>";
            $popupHTML += "</div>";
            $popupHTML += "<div class='popupResellerRequestActions'>";
            if (_self.customerData.isLoggedIn == true) {
                $popupHTML += "<a href='javascript:void(0);' class='btnCloseResellerRequest'>Anulare</a>";
                $popupHTML += "<a href='javascript:void(0);' class='btnSendResellerRequest'>Trimite cererea</a>";
            } else {
                $popupHTML += "<a href='javascript:void(0);' class='btnCloseResellerRequest'>Anulare</a>";
                $popupHTML += "<a href='../login.php' class='btnLoginResellerRequest'>Autentificare</a>";
                $popupHTML += "<a href='../login.php?action=create_account' class='btnRegisterResellerRequest'>Cont nou</a>";
            }
            $popupHTML += "</div>";
            $popupHTML += "</div>";
            $popupHTML += "</div>";

            if ($2("body").find(".popupResellerRequest").length == 0) {
                $2("body").append($popupHTML);

                //TBA reseller popup registration
            }
            // }
        } else {
            if (_self.isProduct && !!isReseller) {
                if ($2("body").find(".btnResellerPricesRequest").length > 0) {
                    $2("body").find(".btnResellerPricesRequest").remove();
                }
            }
            // console.log("Has no reseller button in product page");
        }
    };

    _self.sendResellerRequest = function(callback){
        if ($2("body").find('.popupResellerRequest').length > 0) {
            var $popup = $2("body").find('.popupResellerRequest'),
                customerid = _self.customerData.customerData["customerid"],
                firstname = ("undefined" != typeof $popup.find("input.resellerRequestFirstName").val() && null != $popup.find("input.resellerRequestFirstName").val()) ? $popup.find("input.resellerRequestFirstName").val().toString().trim() : "",
                lastname = ("undefined" != typeof $popup.find("input.resellerRequestLastName").val() && null != $popup.find("input.resellerRequestLastName").val()) ? $popup.find("input.resellerRequestLastName").val().toString().trim() : "",
                company = ("undefined" != typeof $popup.find("input.resellerRequestCompany").val() && null != $popup.find("input.resellerRequestCompany").val()) ? $popup.find("input.resellerRequestCompany").val().toString().trim() : "",
                cui = ("undefined" != typeof $popup.find("input.resellerRequestCui").val() && null != $popup.find("input.resellerRequestCui").val()) ? $popup.find("input.resellerRequestCui").val().toString().trim() : "",
                phone = ("undefined" != typeof $popup.find("input.resellerRequestPhone").val() && null != $popup.find("input.resellerRequestPhone").val()) ? $popup.find("input.resellerRequestPhone").val().toString().trim() : "",
                email = ("undefined" != typeof $popup.find("input.resellerRequestEmail").val() && null != $popup.find("input.resellerRequestEmail").val()) ? $popup.find("input.resellerRequestEmail").val().toString().trim() : "",
                state = ("undefined" != typeof $popup.find("input.resellerRequestState").val() && null != $popup.find("input.resellerRequestState").val()) ? $popup.find("input.resellerRequestState").val().toString().trim() : "",
                city = ("undefined" != typeof $popup.find("input.resellerRequestCity").val() && null != $popup.find("input.resellerRequestCity").val()) ? $popup.find("input.resellerRequestCity").val().toString().trim() : "",
                address = ("undefined" != typeof $popup.find("input.resellerRequestAddress").val() && null != $popup.find("input.resellerRequestAddress").val()) ? $popup.find("input.resellerRequestAddress").val().toString().trim() : "",
                alreadybought = ("undefined" != typeof $popup.find("[name='resellerRequestAleadyBought']:checked").val() && null != $popup.find("[name='resellerRequestAleadyBought']:checked").val()) ? $popup.find("[name='resellerRequestAleadyBought']:checked").val().toString().trim() : "",
                quantity = ("undefined" != typeof $popup.find("input.resellerRequestQuantity").val() && null != $popup.find("input.resellerRequestQuantity").val()) ? $popup.find("input.resellerRequestQuantity").val().toString().trim() : "",
                products = ("undefined" != typeof $popup.find("input.resellerRequestProducts").val() && null != $popup.find("input.resellerRequestProducts").val()) ? $popup.find("input.resellerRequestProducts").val().toString().trim() : "",
                valid = true,
                errors = {};

            customerid = parseFloat(customerid);
            // console.log("customerid", customerid);

            if (isNaN(customerid) || 0 == customerid) {
                valid = false;
                errors["input.resellerRequestFirstName"] = "Trebuie sa va autentificati sau sa creati un cont";
            }

            if (firstname.length <= 2) {
                valid = false;
                errors["input.resellerRequestFirstName"] = "Nume invalid";
            }
            if (lastname.length <= 2) {
                valid = false;
                errors["input.resellerRequestLastName"] = "Prenume invalid";
            }
            if (company.length <= 2) {
                valid = false;
                errors["input.resellerRequestCompany"] = "Necesita completare";
            }
            if (cui.length < 1 || !(/\d/.test(cui))) {
                valid = false;
                errors["input.resellerRequestCui"] = "CUI invalid";
            }
            if (phone.length < 10 || !(/\d/.test(phone))) {
                valid = false;
                errors["input.resellerRequestPhone"] = "Numar invalid";
            }
            if (email.length == 0 || !(/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(email))) {
                valid = false;
                errors["input.resellerRequestEmail"] = "Email invalid";
            }
            if (state.length <= 2) {
                valid = false;
                errors["input.resellerRequestState"] = "Necesita completare";
            }
            if (city.length <= 2) {
                valid = false;
                errors["input.resellerRequestCity"] = "Necesita completare";
            }
            if (address.length <= 3) {
                valid = false;
                errors["input.resellerRequestAddress"] = "Necesita completare";
            }
            if (address.length <= 2) {
                valid = false;
                errors["input.resellerRequestAddress"] = "Necesita completare";
            }
            // console.log("alreadybought", alreadybought);
            if (["da", "nu"].indexOf(alreadybought.toString().toLowerCase()) == -1) {
                valid = false;
                errors["input.resellerRequestAleadyBought"] = "Necesita completare";
            }
            if (quantity.length == 0 || isNaN(quantity)) {
                valid = false;
                errors["input.resellerRequestQuantity"] = "Necesita completare";
            }
            if (products.length <= 2) {
                valid = false;
                errors["input.resellerRequestProducts"] = "Necesita completare";
            }

            var sendData = {
                customerid: customerid,
                firstname: firstname,
                lastname: lastname,
                company: company,
                cui: cui,
                phone: phone,
                email: email,
                state: state,
                city: city,
                address: address,
                alreadybought: alreadybought,
                quantity: quantity,
                products: products
            };

            // console.log("sendData", sendData);

            // console.log("errors", errors, "valid", valid);
            $popup.find(".errorNotice").remove();
            if (true != valid) {
                if (Object.keys(errors).length > 0) {
                    Object.keys(errors).forEach(function(elem, i){
                        if ($popup.find(elem).length > 0) {
                            $popup.find(elem).closest(".inputWrapper").append("<strong class='errorNotice'>"+errors[elem].toString().trim()+"</strong>");
                        }
                    });
                }
            } else if (true == valid) {
                $2.ajax({
                    url: _self.api.powersell,
                    data: {
                        method: "resellerrequest",
                        data: btoa(encodeURIComponent(JSON.stringify(sendData))),
                    },
                    success: function (data) {
                        if ("undefined" != typeof data) {
                            if ("string" == typeof data) {
                                if (_self.isJson(data)) {
                                    data = JSON.parse(data);
                                }
                            }
                            if ("function" == typeof callback) {
                                if ("undefined" != typeof data["status"] && true == data["status"]) {
                                    $popup.find(".resellerRequestResponse").text("Cererea a fost trimisa cu succes").removeClass("error").addClass("success");
                                    callback(data);
                                } else if ("undefined" != typeof data["error"] && !data["status"]) {
                                    if (Object.keys(data["error"]).length > 0){
                                        $popup.find(".resellerRequestResponse").text("Va rugam sa completati cu atentie campurile").removeClass("success").addClass("error");
                                        Object.keys(data["error"]).forEach(function(elem, i){
                                            if ($popup.find(elem).length > 0) {
                                                $popup.find(elem).closest(".inputWrapper").append("<string class='errorNotice'>"+data["error"][elem].toString().trim()+"</string>");
                                            }
                                        });
                                    }
                                } else {
                                    $popup.find(".resellerRequestResponse").text("Cererea nu a putut fi trimisa din cauza unei erori. Va rugam sa incercati mai tarziu").removeClass("success").addClass("error");
                                }
                            }
                        }
                    },
                    error: function (a, b, c) {
                        //console.log(a,b,c);
                    },
                    complete: function (xhr) {

                    }
                });
            }
        }
    };

    _self.renderResellerStats = function(){
        // console.log("rendering reseller stats");
        if (_self.isAccountIndex == true){
            // display in account page
            // console.log("Is account index");
            _self.renderAccountResellerStats();
        }
    };

    _self.renderAccountResellerStats = function(){
        // console.log("rendering account index for reseller stats");
        if ("undefined" != typeof _self.customerData) {
            if ("undefined" != typeof _self.customerData.customerData) {
                if ("undefined" != typeof _self.customerData.isLoggedIn &&
                    true == _self.customerData.isLoggedIn) {
                    if ("undefined" != typeof _self.customerData.customerData
                        && "undefined" != typeof _self.customerData.isReseller
                        && "undefined" != typeof _self.customerData.resellerData
                    ) {
                        // if ([1, 18910].indexOf(_self.customerData.customerId) > -1) { // is sorin or ionut

                        // show reseller notice about price
                        var totalValueBoughtLastMonth = (!isNaN(_self.customerData.resellerData["totalOrdersValueLastMonth"])) ? parseFloat(_self.customerData.resellerData["totalOrdersValueLastMonth"]) : 0,
                            // totalQuantityBought = (!isNaN(_self.customerData.resellerData["totalItemsOrdered"])) ? parseInt(_self.customerData.resellerData["totalItemsOrdered"], 10) : 0,
                            totalValueBoughtThisMonth = (!isNaN(_self.customerData.resellerData["totalOrdersValueThisMonth"])) ? parseFloat(_self.customerData.resellerData["totalOrdersValueThisMonth"]) : 0,
                            // totalQuantityBoughtThisMonth = (!isNaN(_self.customerData.resellerData["totalItemsOrdered"])) ? parseInt(_self.customerData.resellerData["totalItemsOrdered"], 10) : 0,
                            totalValueBoughtThisAndLastMonth = Math.abs(totalValueBoughtLastMonth) + Math.abs(totalValueBoughtThisMonth),
                            resellerConfig = _self.customerData.resellerConfig,
                            thisResellerIndex = Object.keys(resellerConfig["groups"]).indexOf(_self.customerData.resellerData["resellerGroup"]),
                            thisResellerId = ("undefined" != typeof _self.customerData.resellerData["resellerGroup"]) ? _self.customerData.resellerData["resellerGroup"] : "",
                            nextResellerIndex = ("undefined" != typeof Object.keys(resellerConfig["groups"])[thisResellerIndex + 1]) ? Object.keys(resellerConfig["groups"]).indexOf(Object.keys(resellerConfig["groups"])[thisResellerIndex + 1]) : thisResellerIndex,
                            nextResellerId = ("undefined" != typeof Object.keys(resellerConfig["groups"])[nextResellerIndex]) ? Object.keys(resellerConfig["groups"])[nextResellerIndex] : null,
                            superiorResellerExist = (nextResellerIndex > thisResellerIndex) ? true : false,
                            nextRankType = null,
                            thisRankType = null,
                            thisResellerRankDifference = ("undefined" != typeof resellerConfig["groups"][thisResellerId] && !isNaN(resellerConfig["groups"][thisResellerId]["minAmount"])) ? Math.ceil(resellerConfig["groups"][thisResellerId]["minAmount"] - totalValueBoughtThisAndLastMonth) : 0,
                            // thisResellerRankQuantityDifference = ("undefined" != typeof resellerConfig["groups"][thisResellerId] && !isNaN(resellerConfig["groups"][thisResellerId]["minQuantity"])) ? Math.ceil(resellerConfig["groups"][thisResellerId]["minQuantity"] - totalQuantityBoughtThisAndLastMonth) : 0,
                            nextResellerRankDifference = 0,
                            nextResellerRankQuantityDifference = 0,
                            nextResellerRankName = "",
                            thisResellerRankName = _self.customerData.resellerData["resellerTitle"],
                            logX = "a";


                        // if (thisResellerRankDifference > 0 && thisResellerRankQuantityDifference <= 0) {
                        //     thisRankType = "amount";
                        // }
                        // else if (thisResellerRankQuantityDifference > 0 && thisResellerRankDifference <= 0) {
                        //     thisRankType = "quantity";
                        // }
                        thisRankType = "amount";

                        if (true == superiorResellerExist) {
                            logX += "b";
                            nextResellerRankName = resellerConfig["groups"][nextResellerId]["title"];
                            nextResellerRankDifference = Math.ceil(resellerConfig["groups"][nextResellerId]["minAmount"] - totalValueBoughtThisAndLastMonth);
                            // nextResellerRankQuantityDifference = Math.ceil(resellerConfig["groups"][nextResellerId]["minQuantity"] - totalQuantityBoughtThisMonth);
                            //
                            //
                            // if (nextResellerRankDifference > totalValueBoughtThisMonth && nextResellerRankQuantityDifference < totalQuantityBoughtThisMonth) {
                            //     nextRankType = "amount";
                            //     logX += "c";
                            // } else if (nextResellerRankQuantityDifference < Math.ceil(resellerConfig["groups"][nextResellerId]["minQuantity"])) {
                            //     nextRankType = "quantity";
                            //     logX += "d";
                            // }
                            nextRankType = "amount";
                        }

                        // console.log("thisResellerRankQuantityDifference", thisResellerRankQuantityDifference, "nextResellerRankQuantityDifference", nextResellerRankQuantityDifference);

                        var $resellerNoticeHtml = "<div class='resellerNoticeDescription'>";

                        // console.log("thisRankType", thisRankType, "nextRankType", nextRankType);

                        // check if customer bought enought to get a reseller rank
                        var achievedResellerGroupId = null,
                            achievedResellerGroupTitle = null,
                            achievedResellerGroupMinAmount = 0;
                        if (totalValueBoughtThisMonth > 0) {
                            Object.keys(resellerConfig["groups"]).forEach(function(groupid, i){
                                if (totalValueBoughtThisMonth >= parseFloat(resellerConfig["groups"][groupid]["minAmount"])){
                                    achievedResellerGroupId = groupid;
                                    achievedResellerGroupTitle = resellerConfig["groups"][groupid]["title"];
                                    achievedResellerGroupMinAmount = parseFloat(resellerConfig["groups"][groupid]["minAmount"]);
                                }
                            });
                        }

                        // console.log("thisResellerRankDifference", thisResellerRankDifference, "totalValueBoughtThisAndLastMonth", totalValueBoughtThisAndLastMonth);


                        if ("amount" == nextRankType) {
                            logX += "e";
                            if (true == _self.customerData.isReseller && achievedResellerGroupTitle != null && 0 < achievedResellerGroupMinAmount) {
                                $resellerNoticeHtml += "<div>Ati cumparat de minim <strong>" + achievedResellerGroupMinAmount + " RON</strong> si ati primit statusul de <strong>" + achievedResellerGroupTitle + "</strong></div>";
                            } else if (true == _self.customerData.isReseller) {
                                if (!isNaN(thisResellerRankDifference) && parseFloat(thisResellerRankDifference) > 0) {
                                    $resellerNoticeHtml += "<div>Trebuie sa mai cumparati de <strong>" + thisResellerRankDifference + " RON</strong> pentru a va pastra rangul de reseller <strong>" + thisResellerRankName + "</strong> si luna viitoare</div>";
                                }
                            }
                            if (nextResellerRankDifference > 0) {
                                logX += "f";
                                if (true == superiorResellerExist) {
                                    if (!isNaN(nextResellerRankDifference) && parseFloat(nextResellerRankDifference) > 0) {
                                        $resellerNoticeHtml += "<div>Trebuie sa mai cumparati de <strong>" + nextResellerRankDifference + " RON</strong> pentru a creste la rangul de <strong>" + nextResellerRankName + "</strong></div>";
                                    }
                                }
                                $resellerNoticeHtml += "</div>";
                            }
                            // } else if ("quantity" == nextRankType) {
                            //     logX += "g";
                            //     if (true == superiorResellerExist) {
                            //         logX += "h";
                            //         $resellerNoticeHtml += "<br />Trebuie sa mai cumparati <strong>" + nextResellerRankQuantityDifference + "</strong> bucati pentru a creste la rangul de <strong>" + nextResellerRankName + "</strong></div>";
                            //     }
                        } else {
                            if (true == _self.customerData.isReseller) {
                                if (!isNaN(thisResellerRankDifference) && parseFloat(thisResellerRankDifference) > 0) {
                                    $resellerNoticeHtml += "<div>Trebuie sa mai cumparati de <strong>" + thisResellerRankDifference + " RON</strong> pentru a va pastra rangul de reseller <strong>" + thisResellerRankName + "</strong> si luna viitoare</div>";
                                }
                            }
                            $resellerNoticeHtml += "</div>";
                        }


                        // console.log("loxXReseller", logX);
                        // console.log(18910);

                        var $wrapper = $2("body").find(".accountResellerStatsWrapper"),
                            $html = "";

                        if (_self.isReseller == true) {
                            $wrapper.addClass("isReseller");
                        } else {
                            $wrapper.addClass("isNotReseller");
                        }


                        $html += "<div class='resellerStatsSection resellerHeader'>";
                        $html += "<div class='resellerHeaderInner'>";
                        if (!!_self.customerData.resellerData.resellerGroup && _self.isReseller == true) {
                            $html += "<div class='resellerAvatarImage'><img src='https://www.powerlaptop.ro/assets/images/medal-" + _self.customerData.resellerData.resellerGroup + ".png' /></div>";
                        }
                        $html += "<div class='resellerStatsContainer "+((_self.isReseller == true) ? "isReseller" : "isNotReseller")+"'>";


                        if (_self.isReseller == true) {
                            $html += "<div class='resellerStatsContainerSplitter'>";
                            $html += "<div class='resellerStatsContainerSplitterSection resellerNameAndRank'>";
                            $html += "<div class='resellerName'>" + ([_self.customerData.customerData.custconfirstname, _self.customerData.customerData.custconlastname].join(" ").trim()) + "</div>";
                            if (!!_self.customerData.resellerData.resellerTitle) {
                                $html += "<div class='resellerRank'>" + (_self.customerData.resellerData.resellerTitle) + "</div>";
                            }
                            $html += "</div>";
                            $html += "<div class='resellerStatsContainerSplitterSection resellerProgressContainer'>";
                            $html += "<div class='resellerProgressProgressBarWrapper'>";
                            $html += "<div class='resellerProgressProgressBar' data-resellerprogress='" + _self.customerData.resellerData.resellerGroup + "'></div>";
                            $html += "</div>";

                            Object.keys(resellerConfig["groups"]).forEach(function (groupid, i) {
                                $html += "<div class='resellerProgressStep' data-step='" + groupid + "'><span class='resellerProgressStepTitle'>" + resellerConfig["groups"][groupid]["title"] + "<strong>" + resellerConfig["groups"][groupid]["minAmount"] + " RON</strong></span></strong></div>";
                            });


                            $html += "</div>";
                            $html += "</div>";
                        }


                        $html += "<div class='resellerStatsInner' data-stats='lastMonth'>";
                        $html += "<div class='resellerStatsDetail totalOrdersLastMonth'>";
                        $html += "<h4 class='resellerStatsDetailTitle'>Total comenzi in luna trecuta</h4>";
                        $html += "<div class='totalOrdersThisMonth resellerStatsDetailValue'>"+_self.customerData.resellerData.totalOrdersLastMonth+"</div>";
                        $html += "</div>";
                        $html += "<div class='resellerStatsDetail totalOrdersValueLastMonth'>";
                        $html += "<h4 class='resellerStatsDetailTitle'>Valoare totala comenzi in luna trecuta</h4>";
                        $html += "<div class='totalOrdersValueThisMonth resellerStatsDetailValue'>"+_self.customerData.resellerData.totalOrdersValueLastMonth+" RON</div>";
                        $html += "</div>";
                        // $html += "<div class='resellerStatsDetail totalOrdersItemsLastMonth'>";
                        //     $html += "<h4 class='resellerStatsDetailTitle'>Produse cumparate luna trecuta</h4>";
                        //     $html += "<div class='totalOrdersItemsThisMonth resellerStatsDetailValue'>"+_self.customerData.resellerData.totalItemsOrdered+"</div>";
                        // $html += "</div>";
                        $html += "</div>";
                        $html += "<div class='resellerStatsInner' data-stats='thisMonth'>";
                        $html += "<div class='resellerStatsDetail totalOrdersLastMonth'>";
                        $html += "<h4 class='resellerStatsDetailTitle'>Total comenzi in aceasta luna</h4>";
                        $html += "<div class='totalOrdersThisMonth resellerStatsDetailValue'>"+_self.customerData.resellerData.totalOrdersThisMonth+"</div>";
                        $html += "</div>";
                        $html += "<div class='resellerStatsDetail totalOrdersValueLastMonth'>";
                        $html += "<h4 class='resellerStatsDetailTitle'>Valoare totala comenzi in aceasta luna</h4>";
                        $html += "<div class='totalOrdersValueThisMonth resellerStatsDetailValue'>"+_self.customerData.resellerData.totalOrdersValueThisMonth+" RON</div>";
                        $html += "</div>";
                        // $html += "<div class='resellerStatsDetail totalOrdersItemsLastMonth'>";
                        //     $html += "<h4 class='resellerStatsDetailTitle'>Produse cumparate aceasta luna</h4>";
                        //     $html += "<div class='totalOrdersItemsThisMonth resellerStatsDetailValue'>"+_self.customerData.resellerData.totalItemsOrdered+"</div>";
                        // $html += "</div>";
                        $html += "</div>";

                        if (_self.isReseller == true) {
                            $html += "<div class='resellerNoticeWrapper clearfix'>" + $resellerNoticeHtml + "<div class='resellerRankDetailsWrapper'><a href='javascript:void(0);' class='btnViewResellerRankDetails'>Vezi detalii</a></div></div>";



                            // add popup to body

                            var $resellerSystemDetailsPopup = "<div class='popupOverlayResellerSystemDetails'></div>";
                            $resellerSystemDetailsPopup += "<div class='popupResellerSystemDetails'>";
                            $resellerSystemDetailsPopup += "<a href='javascript:void(0);' class='close closeBtn'></a>";
                            $resellerSystemDetailsPopup += "<h4 class='popupOverlayResellerSystemDetailsHeader'>Salut,</h4>";
                            $resellerSystemDetailsPopup += "<div class='popupOverlayResellerSystemDetailsBody'>";

                            $resellerSystemDetailsPopup += "<p>Iti multumim pentru interesul acordat produselor noastre.";
                            $resellerSystemDetailsPopup += "Pentru a veni in sprijinul tau, am creat programul pentru revanzatori, care te ajuta sa vezi mai usor preturile de care beneficiezi in calitate de reseller si sa poti comanda cu pret redus direct pe site.";
                            $resellerSystemDetailsPopup += "Exista 2 metode prin care poti deveni revanzator:</p>";

                            $resellerSystemDetailsPopup += "<p>1. Prin completarea formularului de aderare la programul de revanzatori:";
                            // $resellerSystemDetailsPopup += "* printscreen cu butonul din pagina de produs *";
                            $resellerSystemDetailsPopup += "Dupa completarea formularului, va trebui sa astepti aprobarea cererii. Confirmarea o vei primi pe email.</p>";

                            $resellerSystemDetailsPopup += "<p>2. Prin achizitionarea de produse in valoare totala mai mare decat pragul minim necesar pentru a fi revanzator.";
                            $resellerSystemDetailsPopup += "In acest caz vei fi inscris automat in programul de reselleri si vei beneficia de preturi cu discount, in mod automat.</p>";

                            $resellerSystemDetailsPopup += "<p>Pragurile care definesc reducerile de care beneficiezi sunt urmatoarele:</p>";

                            $resellerSystemDetailsPopup += "<p>1. Reseller Mic";
                            $resellerSystemDetailsPopup += " - Este necesar sa achizitionezi, lunar, produse in valoare de minim 1000 lei</p>";

                            $resellerSystemDetailsPopup += "<p>2. Reseller Mare";
                            $resellerSystemDetailsPopup += " - Este necesar sa achizitionezi, lunar, produse in valoare de minim 2000 lei</p>";

                            $resellerSystemDetailsPopup += "<p>3. Reseller Premium";
                            $resellerSystemDetailsPopup += "- Este necesar sa achizitionezi, lunar, produse in valoare de minim 5000 lei</p>";

                            $resellerSystemDetailsPopup += "<p>Cresterea si scaderea in rang se fac in mod automat, in functie de valoarea totala a achizitiilor din luna anterioara.</p>";

                            $resellerSystemDetailsPopup += "<p>Spor la vanzari!</p>";
                            $resellerSystemDetailsPopup += "</div>";
                            $resellerSystemDetailsPopup += "<div class='popupOverlayResellerSystemDetailsActions'>";
                            $resellerSystemDetailsPopup += "<a href='javascript:void(0);' class='close okBtn'>INCHIDE</a>";
                            $resellerSystemDetailsPopup += "</div>";
                            $resellerSystemDetailsPopup += "</div>";
                            //popupResellerSystemDetails, .popupOverlayResellerSystemDetails
                            if ($2("body").find(".popupResellerSystemDetails").length == 0) {
                                $2("body").append($resellerSystemDetailsPopup);
                            }

                        }
                        $html += "</div>";
                        $html += "</div>";
                        $html += "</div>";
                        $wrapper.html($html);
                        $wrapper.addClass("show");
                        _self.loadImages();
                        // }
                    }
                }
            }
        }
    };

    _self.checkCpLin = function(){
        var cookies = _self.getCookies(),
            cpt = "00530054004f0052004500530055004900540045005f00430050005f0054004f004b0045004e".hexDecode(),
            iscplin = false;
        if ("undefined" != typeof cookies) {
            if ("undefined" != typeof cookies[cpt]) {
                iscplin = true;
            }
        }
        return iscplin;
    };

    _self.getResellerPrices = function(pcode, callback){
        if ("undefined" != typeof pcode) {
            $2.ajax({
                url: _self.api["powersell"],
                data: {
                    method: "getresellerpricesforproductcode",
                    prodcode: pcode
                },
                success: function(data){
                    if ("string" == typeof data) {
                        if (_self.isJson(data)) {
                            data = JSON.parse(data);
                        }
                    }
                    if ("function" == typeof callback){
                        callback(data);
                    }
                },
                error: function(a,b,c){
                    //console.log(a,b,c);
                }
            });
        }
    };

    _self.showResellerPrices = function(){
        if (_self.checkCpLin() == true && _self.isProduct == true && "undefined" != typeof productCode) {
            var pcode = productCode;
            _self.getResellerPrices(pcode, function(resp){
                if ("undefined" != typeof resp && "undefined" != typeof resp["data"] && resp["data"].length > 0 && $2("body").find(".prodNewPriceWrapper .rsPrc").length > 0) {
                    // console.log("product data reseller prices",resp);

                    var $html = "<div class='productResellerPricesWrapper'><br />";
                    if ("undefined" != typeof resp["baseprice"] && !isNaN(resp["baseprice"]) && 0 < resp["baseprice"]) {
                        $html += "<div class='productResellerPriceItem''><strong>Pret client final</strong>: <span>"+resp["baseprice"]+" RON</div>";
                    }
                    if (!!resp && !!resp["data"] && resp["data"].length > 0) {
                        resp["data"].forEach(function (rsPrice, i) {
                            $html += "<div class='productResellerPriceItem' data-resellerpriceid='" + rsPrice["resellid"] + "'><strong>" + rsPrice["title"] + "</strong>: <span>" + ((!isNaN(rsPrice["resellerprice"]) && 9999 != rsPrice["resellerprice"]) ? rsPrice["resellerprice"] + " RON" : "<a href='javascript:void(0);' class='btnCerePretReseller' data-requestresellerpriceresellerid='" + rsPrice["resellid"] + "'>Cere pret</a>") + "</span></div>";
                        });
                    }

                    $html += "</div>";

                    $2("body").find(".prodNewPriceWrapper .rsPrc").html($html);
                    if ($2("body").find(".productDetailsResellerWrapper").length > 0) {
                        $2("body").find(".productDetailsResellerWrapper").remove();
                    }
                }
            });
        } else if (_self.isReseller && _self.isProduct == true && "undefined" != typeof productCode) {
            var pcode = productCode;
            _self.getResellerPrices(pcode, function(resp){

                if ("undefined" != typeof resp && "undefined" != typeof resp["data"] && resp["data"].length > 0) {
                    var $html = "<div class='productResellerPricesWrapper'><br />",
                        hasResellerPriceForThisRank = false,
                        RESELLID = productCode+"_"+_self.customerData["resellerData"]["resellerGroup"];
                    if (!!resp && !!resp["data"] && resp["data"].length > 0) {
                        resp["data"].forEach(function (rsPrice, i) {
                            if (!isNaN(rsPrice["resellerprice"]) && 9999 != rsPrice["resellerprice"]) {
                                if (rsPrice["resellid"].split("_")[1] == _self.customerData["resellerData"]["resellerGroup"]) {
                                    hasResellerPriceForThisRank = true;
                                }
                            }
                        });
                    }
                    if (false == hasResellerPriceForThisRank) {
                        $html += "<div class='productResellerPriceItem' data-resellerpriceid='"+RESELLID+"'><div><strong>Acest produst nu are pret de reseller alocat</strong></div><span><a href='javascript:void(0);' class='btnCerePretReseller btnCerePretResellerByReseller' data-requestresellerpriceresellerid='"+RESELLID+"' data-customerid='"+_self.customerData.customerId+"'>Cere pret</a></span></div>";
                    }

                    $html += "</div>";

                    if (true == hasResellerPriceForThisRank) {
                        $2("body").find(".prodNewPriceWrapper .rsPrc").html($html);
                    } else {
                        // console.log("no reseller price");
                        _self.repeaters.checkForWrapperToAddRequestPriceInterval = setInterval(function(){
                            // console.log("checking price placeholder");
                            if ($2("body").find(".prodNewPriceWrapper .pretReducere").length > 0) {
                                clearInterval(_self.repeaters.checkForWrapperToAddRequestPriceInterval);
                                // console.log("found price placeholder");
                                $2("body").find(".prodNewPriceWrapper .pretReducere").html($html);
                            }
                        },100);
                    }



                    if ($2("body").find(".productDetailsResellerWrapper").length > 0) {
                        $2("body").find(".productDetailsResellerWrapper").remove();
                    }
                }
            });
        }
    };

    _self.handleEvents = function(){
        //console.log("Handling events");
        $2(window).on("scroll", function(){
            if ("undefined" != typeof _self.waiters.waitForScrollTimeout) {
                clearTimeout(_self.waiters.waitForScrollTimeout);
            }
            _self.waiters.waitForScrollTimeout = setTimeout(function(){
                _self.loadImages();
            },300);
        });

        $2(window).on("resize", function(){
            if ("undefined" != typeof _self.waiters.waitForResizeTimeout) {
                clearTimeout(_self.waiters.waitForResizeTimeout);
            }
            _self.waiters.waitForResizeTimeout = setTimeout(function(){
                _self.loadImages();
            },300);
        });

        $2("body").on("select2:open", "#brandsFilterInMenu", function(){
            $2("body").find("#gameProduseFilterInMenu, #modelsFilterInMenu").each(function(){
                var $select = $2(this),
                    isSelect2 = (!!$select.attr("data-select2-id")) ? true : false;
                if (isSelect2){
                    $select.select2("close");
                }
            });
        });


        $2("body").on("blur", "input#FormField_4, input#FormField_5, input#FormField_14, input#FormField_15", function(e){
            var $inp = $2(this),
                val = $inp.val().toString();
            //console.log("typed ",val);
            //console.log("is  ",_self.alphaOnly(val));
            if (!_self.alphaOnly(val)) {
                e.preventDefault();
                $inp.val(val.replace(/[^a-z ]/gi, '')).change();
                alert("Va rugam introduceti doar litere, fara diacritice sau simboluri");
                // $inp[0].trigger("focus");
            }
        });

        $2("body").off("keypress", "input.customSearch").on("keypress", "input.customSearch", function(e){
            var inp = $2(this),
                keycode = e.keyCode || e.which;
            if (keycode == '13') {
                _self.search(inp.val().replace(".php", ""));
            }
        });
        $2("body").on("focus", "input.customSearch", function(){
            if ($2(".customDesktopHeader .searchWrapper").find(".searchAutocomplete").length) {
                $2(".customDesktopHeader .searchWrapper").find(".searchAutocomplete").show();
            }
            if ($2(".customDesktopHeader .searchWrapper").find(".searchAutocompleteUnderlay").length) {
                $2(".customDesktopHeader .searchWrapper").find(".searchAutocompleteUnderlay").show();
            }
        });
        $2("body").off("click", ".searchBtn").on("click", ".searchBtn", function(e){
            var inpVal = $2(this).parent().find("input.customSearch").first().val();
            _self.search(inpVal.replace(".php", ""));
        });
        var typingX = false;
        $2("body").off("input", "input.customSearch").on("input", "input.customSearch", function(){
            typingX = true;
            var inpVal = $2(this).val().replace(".php", "");
            clearTimeout(_self.waiters.searchAutocompleteTimeout);
            _self.loader(".searchInner", "start");
            _self.waiters.searchAutocompleteTimeout = setTimeout(function(){
                clearTimeout(_self.waiters.searchAutocompleteTimeout);
                typingX = false;
                _self.loader(".searchInner", "start");
                _self.getSearchAutocompleteResults(inpVal, function(searchResults){
                    if (!typingX) {
                        _self.showAutocomplete(searchResults);
                    }
                    _self.loader(".searchInner", "stop");
                });
            },500);
        });

        $2("body").on("blur", "input.customSearch", function(e){
            clearTimeout(_self.waiters.removeAutocompleteTimeout);
            _self.waiters.removeAutocompleteTimeout = setTimeout(function(){
                $2(".customDesktopHeader .searchWrapper").find(".searchAutocomplete, .searchAutocompleteUnderlay").hide();
            },300);
        });

        $2(parent.window.document).scroll(function(){
            clearTimeout(_self.waiters.scrollTimeout);
            _self.waiters.scrollTimeout = setTimeout(function(){
                _self.scrollAmmount = $2(window).scrollTop();
                if (_self.isHomepage) {
                    if (600 <= _self.scrollAmmount) {
                        $2("body").addClass("fixed");
                        $2("body").find(".customDesktopHeader, .customDesktopSubheader").addClass("fixed");
                        $2(".navMenuInner, .customDesktopHeader .menuTrigger.show").removeClass('show');
                    } else {
                        $2("body").find(".customDesktopHeader, .customDesktopSubheader").removeClass("fixed");
                        $2("body").removeClass("fixed");
                        $2(".navMenuInner, .customDesktopHeader .menuTrigger").addClass('show');
                    }
                } else {
                    if (110 <= _self.scrollAmmount) {
                        $2("body").addClass("fixed");
                        $2("body").find(".customDesktopHeader, .customDesktopSubheader").addClass("fixed");
                    } else {
                        $2("body").find(".customDesktopHeader, .customDesktopSubheader").removeClass("fixed");
                        $2("body").removeClass("fixed");
                    }
                    $2(".navMenuInner, .customDesktopHeader .menuTrigger").removeClass('show');
                }
            },150);
        });


        // $2("body").on("mouseenter", ".navMenuCategories > .categories > li", function(){
        // var $li = $2(this);
        // if ("undefined" != typeof _self.waiters.waitForMenuHoverChangeTimeout) {
        //     clearTimeout(_self.waiters.waitForMenuHoverChangeTimeout);
        // }
        // _self.waiters.waitForMenuHoverChangeTimeout = setTimeout(function(){
        //     $2("body").find(".navMenuCategories > .categories > li").not($li).removeClass("show");
        //     $li.addClass("show");
        //     $2("body").find(".navMenuCategories > .categories > li > ul > li").removeClass("show");
        //     $li.children("ul").eq(0).find("li").eq(0).trigger("hover").addClass("show");
        // },100);
        // });
        // $2("body").on("mouseover", ".navMenuCategories > .categories > li > ul > li", function(){
        // var $li = $2(this);
        // if ("undefined" != typeof _self.waiters.waitForSubMenuHoverChangeTimeout) {
        //     clearTimeout(_self.waiters.waitForSubMenuHoverChangeTimeout);
        // }
        // _self.waiters.waitForSubMenuHoverChangeTimeout = setTimeout(function(){
        //     $li.closest("ul").children("li").not($li).removeClass("show");
        //     $li.addClass("show");
        // },100);
        // });

        $2("body").on("mousemove", ".navMenuCategories", function(e){
            var $el = $2(e.target),
                $categoryLevel = ("undefined" != typeof $el.attr("data-categorylevel")) ? $el.attr("data-categorylevel") : null;
            if ("undefined" != typeof _self.waiters.mouseMoveOverMenuCategoriesTimeout) {
                clearTimeout(_self.waiters.mouseMoveOverMenuCategoriesTimeout);
            }
            _self.waiters.mouseMoveOverMenuCategoriesTimeout = setTimeout(function(){

                if ($categoryLevel != null) {
                    if ("linkCategoryLvl1" == $categoryLevel) {
                        var $li = $el.parent("li");
                        $2("body").find(".navMenuCategories > .categories > li").not($li).removeClass("show");
                        $li.addClass("show");
                        $2("body").find(".navMenuCategories > .categories > li > ul > li").removeClass("show");
                        $li.children("ul").eq(0).find("li").eq(0).closest("ul").children("li").not($li).removeClass("show");
                        $li.children("ul").eq(0).find("li").eq(0).addClass("show");

                    } else if ("linkCategoryLvl2" == $categoryLevel) {
                        var $li = $el.parent("li");
                        $li.closest("ul").children("li").not($li).removeClass("show");
                        $li.addClass("show");
                    }
                    //console.log($categoryLevel);
                }
            },40);
        });

        $2("html").on("mousemove", "body", function(e){
            var $el = $2(e.target),
                logX = "";

            if ("undefined" != typeof _self.waiters.mouseMoveOverMenuTimeout) {
                clearTimeout(_self.waiters.mouseMoveOverMenuTimeout);
            }
            _self.waiters.mouseMoveOverMenuTimeout = setTimeout(function(){
                logX = "";
                if ($el.hasClass("navMenu") || $el.closest(".navMenu").length || $el.hasClass("menuTrigger") || $el.closest(".menuTrigger").length || $el.hasClass("customDesktopCategoriesToggle") || $el.closest(".customDesktopCategoriesToggle").length) {
                    logX += "a";
                    if($2("body").find(".customDesktopHeader").hasClass("fixed") || $2("body").find(".customDesktopSubheader").hasClass("fixed")) {
                        logX += "b";
                        if ($el.hasClass("navMenuFiltersSelectors") || $el.closest(".navMenuFiltersSelectors").length) {
                            $2(".navMenuInner, .customDesktopHeader .menuTrigger").removeClass('show');
                        } else {
                            $2(".navMenuInner, .customDesktopHeader .menuTrigger").addClass('show');
                        }
                    } else {
                        logX += "c";
                        //TBD
                        if ($el.hasClass("navMenuFiltersSelectors") || $el.closest(".navMenuFiltersSelectors").length) {
                            $2("body").find(".navMenuCategories > .categories > li").removeClass('show');
                        }
                    }
                } else {
                    logX += "d";
                    if($2("body").find(".customDesktopHeader").hasClass("fixed") || $2("body").find(".customDesktopSubheader").hasClass("fixed")) {
                        logX += "e";
                        $2(".navMenuInner, .customDesktopHeader .menuTrigger").removeClass('show');
                        if ((_self.isHomepage && 600 <= _self.scrollAmmount) || !_self.isHomepage){
                            logX += "f";
                            $2(".navMenuInner, .customDesktopHeader .menuTrigger").removeClass('show');
                        } else if (_self.isHomepage && 600 > _self.scrollAmmount) {
                            logX += "g";
                            $2("body").find(".navMenuCategories > .categories > li").removeClass('show');
                        }
                    } else {
                        logX += "h";
                        $2("body").find(".navMenuCategories > .categories > li").removeClass('show');
                    }
                }
                //console.log(logX);
            },40);
        });

        // $2("body").on("mouseover", ".customDesktopCategoriesToggle, .menuTrigger", function(){
        //     $2(".navMenuInner, .customDesktopHeader .menuTrigger").addClass('show');
        // });
        $2("body").on("mousedown", function(){
            clearTimeout(_self.waiters.hideCategoriesMenuTimeout);
            _self.waiters.hideCategoriesMenuTimeout = setTimeout(function(){
                if ((_self.isHomepage && 600 <= _self.scrollAmmount) || !_self.isHomepage) {
                    $2(".navMenuInner, .customDesktopHeader .menuTrigger").removeClass('show');
                } else if (_self.isHomepage && 600 > _self.scrollAmmount) {
                    $2("body").find(".navMenuCategories > .categories > li").removeClass('show');
                }
            },100);
        });
        $2("body").on("mousedown", ".navMenuInner", function(e){
            e.stopPropagation();
        });

        // $2("body").on("mouseleave", ".navMenuInner", function(){
        //     if ((_self.isHomepage && 600 <= _self.scrollAmmount) || !_self.isHomepage){
        //         $2(".navMenuInner, .customDesktopHeader .menuTrigger").removeClass('show');
        //     } else if (_self.isHomepage && 600 > _self.scrollAmmount) {
        //         $2("body").find(".navMenuCategories > .categories > li").removeClass('show');
        //     }
        // });

        $2("body").on("mouseenter mouseover", ".navMenu", function(){
            _self.navMenuHover = true;
        });
        $2("body").on("mouseout mouseleave", ".navMenu", function(){
            _self.navMenuHover = true;
        });

        $2("body").on("click", ".toggleCategoryDescriptionBtn", function(){
            $2("body").find("#CategoryHeading .banner_category_page_top").toggleClass("show");
            if (!$2("body").find("#CategoryHeading .banner_category_page_top").hasClass("show")) {
                $2("body").find("#CategoryHeading h1 .toggleCategoryDescriptionBtn").text("Mai multe detalii");
            } else {
                $2("body").find("#CategoryHeading h1 .toggleCategoryDescriptionBtn").text("Ascunde detaliile");
            }
        });

        $2("body").on("focus", ".subcategoriesSelectorInput", function(){
            $2("body").find(".subcategoriesSelectorAutocomplete").addClass("show");
        });
        $2("body").on("blur", ".subcategoriesSelectorInput", function(){
            clearTimeout(_self.waiters.hideSubcategoryAutocompleteTimeout);
            _self.waiters.hideSubcategoryAutocompleteTimeout = setTimeout(function(){
                $2("body").find(".subcategoriesSelectorAutocomplete").removeClass("show");
                $2("body").find(".subcategoriesSelectorAutocompleteItem").removeClass("hide").attr("data-match", "0");
            },300);
        });
        $2("body").on("click", ".subcategoriesSelectorAutocompleteItem", function(){
            var $name = $2(this).text();
            $2("body").find(".subcategoriesSelectorInput").val($name).change();
        });
        //.toggleCategoryExpandBtn
        $2("body").on("click", ".toggleCategoryExpandBtn", function(){
            $2("body").find(".SubCategoryList ul").toggleClass("expand");
            if ($2("body").find(".SubCategoryList ul").hasClass("expand")) {
                $2(this).text("Restrange lista");
            } else {
                if ("categories" == window.location.pathname.replace(/\//g,"").toLowerCase()) {
                    $2(this).text("Vezi toate categoriile");
                } else {
                    $2(this).text("Vezi toate brandurile");
                }

            }
        });

        $2("body").on("input", ".subcategoriesSelectorInput", function(){
            var $keywords = $2(this).val();
            if ("undefined" != typeof $keywords) {
                $keywords = $keywords.trim().toLowerCase();
            }
            if ($keywords.length) {
                $2("body").find(".subcategoriesSelectorAutocompleteItem").removeClass("hide").attr("data-match", "0");
            }
            $2("body").find(".subcategoriesSelectorAutocompleteItem").each(function(){
                var $itemName = $2(this).text().trim().toLowerCase(),
                    matched = 0;


                $keywords.split(" ").forEach(function(keyword, i){
                    if ($itemName.indexOf(keyword) > -1) { //if all name contains a keyword
                        matched++;
                    }
                    $itemName.split(" ").forEach(function(itemNamePart, j){ //if some part of the name is equal with keyword
                        if (itemNamePart == keyword) {
                            matched++;
                        }
                    });
                });


                if (!matched) {
                    $2(this).addClass("hide");
                } else {
                    $2(this).removeClass("hide").attr("data-match", matched.toString());
                }
            });
        });

        $2("body").on("keydown", ".subcategoriesSelectorInput", function(e){
            var $inp = $2(this),
                $autocompleteList = $2("body").find(".subcategoriesSelectorAutocomplete");

            if ('38' == e.keyCode) {
                $autocompleteList.show();
                if (!$autocompleteList.find("a.selected").length) {
                    $autocompleteList.find("a").last().addClass('selected');
                } else {
                    if ($autocompleteList.find("a.selected").index() > 0) {
                        $autocompleteList.find("a").eq(parseInt($autocompleteList.find("a.selected").index(),10)-1).addClass("selected");
                        $autocompleteList.find("a.selected").last().removeClass("selected");
                    } else {
                        $autocompleteList.find("a").removeClass("selected");
                        $autocompleteList.find("a").last().addClass('selected');
                    }
                }
                $autocompleteList.stop().animate({ scrollTop: $autocompleteList.scrollTop()+$autocompleteList.find("a.selected").first().position().top }, 100);
            } else if ('40' == e.keyCode) {
                $autocompleteList.show();
                if (!$autocompleteList.find("a.selected").length) {
                    $autocompleteList.find("a").first().addClass("selected");
                } else {
                    if ($autocompleteList.find("a.selected").index() < $autocompleteList.find("a").length-1) {
                        $autocompleteList.find("a").eq(parseInt($autocompleteList.find("a.selected").index(),10)+1).addClass("selected");
                        $autocompleteList.find("a.selected").first().removeClass("selected");
                    } else {
                        $autocompleteList.find("a").removeClass("selected");
                        $autocompleteList.find("a").first().addClass("selected");
                    }
                }
                $autocompleteList.stop().animate({ scrollTop: $autocompleteList.scrollTop()+$autocompleteList.find("a.selected").first().position().top }, 100);

            } else if ('13' == e.keyCode) {
                if ($autocompleteList.find("a.selected").length) {
                    $inp.val($autocompleteList.find("a.selected").text()).change();
                    clearTimeout(_self.waiters.closeAutocompleteTimeout);
                    _self.waiters.closeAutocompleteTimeout = setTimeout(function(){
                        $autocompleteList.hide();
                        $autocompleteList.find("a.selected")[0].click();
                    },100);
                }
            }
        });



        $2("body").on("click", ".customCompareBtn", function(e){
            $2("body").find(".CompareButton input[type='image']")[0].click();
        });

        $2("body").on("click", ".ProductList .ProductCompareButton", function(){
            var totalToCompare = $2("body").find(".ProductList .ProductCompareButton input[type='checkbox']").filter(function(){
                return $2(this).is(":checked");
            }).length;

            if (1 <= totalToCompare) {
                $2("body").find(".comparedProducts").text("Ai selectat "+totalToCompare+" "+((1<totalToCompare) ? "produse" : "produs")+" pentru comparatie");
            } else {
                $2("body").find(".comparedProducts").text("Selecteaza minim 2 produse pentru a le compara");
            }
        });

        //category filters

        $2("body").on("change", ".categoryFiltersWrapper #brandsFilter", function(){
            var $sel = $2(this),
                selBrand = $sel.val(),
                selBrandName = ("undefined" != typeof $sel.find("option[value='"+selBrand+"']") && !!$sel.find("option[value='"+selBrand+"']").text() && $sel.find("option[value='"+selBrand+"']").text().toString().toLowerCase().indexOf("alege") == -1 && $sel.find("option[value='"+selBrand+"']").text().toString().toLowerCase().indexOf("selecteaza") == -1) ? $sel.find("option[value='"+selBrand+"']").text() : "";
            _self.categoryFilters["brand"] = selBrand;
            _self.categoryFilters["brandName"] = selBrandName;
            _self.categoryFilters["page"] = 1;
            _self.categoryFilters["gama"] = '';
            _self.categoryFilters["model"] = '';
            $2("body").find(".categoryFiltersWrapper #gameProduseFilter, .categoryFiltersWrapper #modelsFilter").empty().hide();
            $2("body").find("#gameProduseFilterSticky, #modelsFilterSticky").empty().hide();
            if (!!selBrand || selBrandName) {
                // console.log("!!selBrand true");
                // _self.setUrlParameter("brand", selBrand);
                _self.filters.brand = selBrand;
                _self.filters.brandName = selBrandName;
                //console.log(_self.categoryFilters);
                _self.getBrandGama(_self.categoryFilters["brand"], function(gamex){
                    _self.buildGamaSelector(gamex);
                    _self.filterCategoryProducts();
                });
            } else {
                // console.log("!!selBrand false");
                if (_self.categoryProductHasEmptyPrice()) {
                    // console.log("categoryProductHasEmptyPrice true");
                    _self.filterCategoryProducts(true);
                } else {
                    // console.log("categoryProductHasEmptyPrice false");
                    _self.filterCategoryProducts(true);
                }
                $2('body').find('.ProductList').html(_self.categoryUnfilteredProductsHTML);
                $2('body').find('#CategoryPagingBottom').html(_self.categoryUnfilteredPaginatorHTML);
            }
            $2("body").find("#brandsFilterSticky").prop("selectedIndex", $2("body").find("#brandsFilterSticky option").filter(function () {
                return $2(this).val() == selBrand;
            }).first().index());
        });
        $2("body").on("change", "#brandsFilterSticky", function(){
            var $thisVal = $2(this).val();
            $2("body").find(".categoryFiltersWrapper #brandsFilter").prop("selectedIndex", $2("body").find("#brandsFilterSticky option").filter(function () {
                return $2(this).val() == $thisVal;
            }).first().index()).change();
        });
        $2("body").on("change", ".categoryFiltersWrapper #gameProduseFilter", function(){
            var $sel = $2(this),
                selGama = $sel.val();
            _self.categoryFilters["gama"] = selGama;
            _self.categoryFilters["model"] = '';
            _self.categoryFilters["page"] = 1;
            $2("body").find(".categoryFiltersWrapper #modelsFilter").empty().hide();
            $2("body").find("#modelsFilterSticky").empty().hide();
            if (!!selGama) {
                _self.getGamaModels(_self.categoryFilters["gama"], function (modelx) {
                    _self.buildModelSelector(modelx);
                    _self.filterCategoryProducts();
                });
                //console.log(_self.categoryFilters);
            } else {
                _self.filterCategoryProducts();
            }
            $2("body").find("#gameProduseFilterSticky").prop("selectedIndex", $2("body").find("#gameProduseFilterSticky option").filter(function () {
                return $2(this).val() == selGama;
            }).first().index());
        });
        $2("body").on("change", "#gameProduseFilterSticky", function(){
            var $thisVal = $2(this).val();
            $2("body").find(".categoryFiltersWrapper #gameProduseFilter").prop("selectedIndex", $2("body").find("#gameProduseFilterSticky option").filter(function () {
                return $2(this).val() == $thisVal;
            }).first().index()).change();
        });
        $2("body").off("change", ".categoryFiltersWrapper #modelsFilter").on("change", ".categoryFiltersWrapper #modelsFilter", function(){
            var $sel = $2(this),
                selModel = $sel.val();
            _self.categoryFilters["model"] = selModel;
            _self.categoryFilters["page"] = 1;
            _self.filterCategoryProducts();
            $2("body").find("#modelsFilterSticky").prop("selectedIndex", $2("body").find("#modelsFilterSticky option").filter(function () {
                return $2(this).val() == selModel;
            }).first().index());
        });
        $2("body").on("change", "#modelsFilterSticky", function(){
            var $thisVal = $2(this).val();
            $2("body").find(".categoryFiltersWrapper #modelsFilter").prop("selectedIndex", $2("body").find("#modelsFilterSticky option").filter(function () {
                return $2(this).val() == $thisVal;
            }).first().index()).change();
        });
        $2("body").on("click", ".PagingList li.pageFiltered a", function(e){
            var $thisPageLink = $2(this),
                thisPage = $thisPageLink.attr("data-page");
            _self.categoryFilters["page"] = thisPage;


            if ($2("body").find(".PagingList").hasClass("paginationForAll") || _self.categoryProductHasEmptyPrice()) {
                _self.filterCategoryProducts(true);
            } else {
                _self.filterCategoryProducts();
            }

            e.preventDefault();
        });

        $2("body").on("click", ".customTab", function(e){
            var $tab = $2(this),
                $customTabs = $2(this).closest(".customTabs"),
                $customPanes = $customTabs.parent().find(".customPanes"),
                $tabIndex = $tab.index();

            $customTabs.find(".customTab").not(this).removeClass("active");
            $customPanes.find(".customPane").removeClass("active");
            $tab.addClass("active");
            $customPanes.find(".customPane").eq($tabIndex).addClass("active");
            // $customPanes.find(".customPane.active").find(".ProductList").slick("destroy");

            var $activePane = ".customPane.active";
            // if ($activePane.hasClass("FilterableProducts")) {
            //     _self.createSlickCarousel(".customPane.active .ProductList", {
            //         dots: true,
            //         infinite: true,
            //         speed: 300,
            //         slidesToShow: 1,
            //         slidesToScroll: 1
            //     });
            // } else {
            //     _self.createSlickCarousel(".customPane.active .ProductList");
            // }

            e.preventDefault();
        });

        $2("body").on("change", "#brandsFilterInMenu, #brandsFilterInFilterablePane", function(){
            var $brandsSelect = $2(this),
                $brand = $brandsSelect.val(),
                $brandName = $brandsSelect.find("option[value='"+$brand+"']").text();

            if ($2("body").find("#brandsFilter").length) {
                $2("body").find("#brandsFilter").prop("selectedIndex", $brandsSelect.find("option").filter(function () {
                    return $2(this).val() == $brand;
                }).first().index()).change();
            }

            $2("body").find("#brandsFilterInMenu, #brandsFilterInFilterablePane").prop("selectedIndex", $2("body").find("#brandsFilter").find("option").filter(function () {
                return $2(this).val() == $2("body").find("#brandsFilter").val();
            }).first().index());

            $2("body").find("#brandsFilterInMenu, #brandsFilterInFilterablePane").each(function(){
                var $select = $2(this),
                    isSelect2 = (!!$select.attr("data-select2-id")) ? true : false;
                if (isSelect2){
                    $select.select2('destroy');
                    $select.val($2("body").find("#brandsFilter").val()).select2();
                }
            });

            if ($2("body").find("#gameProduseFilterInMenu").length) {
                $2("body").find("#gameProduseFilterInMenu").empty().hide();
            }
            if ($2("body").find("#modelsFilterInMenu").length) {
                $2("body").find("#modelsFilterInMenu").empty().hide();
            }

            if ($2("body").find("#gameProduseFilterInFilterablePane").length) {
                $2("body").find("#gameProduseFilterInFilterablePane").empty().hide();
            }
            if ($2("body").find("#modelsFilterInFilterablePane").length) {
                $2("body").find("#modelsFilterInFilterablePane").empty().hide();
            }
            clearInterval(_self.repeaters.checkGameInterval);
            _self.repeaters.checkGameInterval = setInterval(function(){
                if ($2("body").find("#gameProduseFilter").length && $2("body").find("#gameProduseFilterInMenu")) {
                    if ($2("body").find("#gameProduseFilter").find("option").length) {
                        clearInterval(_self.repeaters.checkGameInterval);

                        if ($2("body").find("#gameProduseFilter").find("option").filter(function(){
                            return !!$2(this).val();
                        }).length) {
                            // $2("body").find("#gameProduseFilterInMenu, #gameProduseFilterInFilterablePane").html($2("body").find("#gameProduseFilter").html()).show();
                            $2("body").find("#gameProduseFilterInMenu, #gameProduseFilterInFilterablePane").html($2("body").find("#gameProduseFilter").html());

                            if ("function" == typeof $2.fn.select2) {
                                $2("body").find("#gameProduseFilterInMenu, #gameProduseFilterInFilterablePane").select2();
                            }
                        } else {
                            $2("body").find("#gameProduseFilterInMenu, #gameProduseFilterInFilterablePane").hide();
                            clearTimeout(_self.waiters.scrollToPositionTimeout);
                            if ($2("body").find(".customTabCauta").length) {
                                clearTimeout(_self.waiters.clickTabCautaProduseTimeout);
                                _self.waiters.clickTabCautaProduseTimeout = setTimeout(function(){
                                    $2("body").find(".customTabCauta")[0].click();
                                    // $2("body, html").stop().animate({
                                    //     scrollTop: $2("body").find("#CategoryFilteredProductList").offset().top - 200
                                    // }, 300);
                                },500);
                            }
                        }

                        $2("body").find("#gameProduseFilterInMenu, #gameProduseFilterInFilterablePane").prop("selectedIndex", $2("body").find("#gameProduseFilter").find("option").filter(function () {
                            return $2(this).val() == $2("body").find("#gameProduseFilter").val();
                        }).first().index());
                    }
                }
            },400);
        });

        $2("body").on("change", "#gameProduseFilterInMenu, #gameProduseFilterInFilterablePane", function(){
            var $gamaSelect = $2(this),
                $gama = $gamaSelect.val();

            if ($2("body").find("#gameProduseFilter").length) {
                $2("body").find("#gameProduseFilter").prop("selectedIndex", $gamaSelect.find("option").filter(function () {
                    return $2(this).val() == $gama;
                }).first().index()).change();
            }

            $2("body").find("#gameProduseFilterInMenu, #gameProduseFilterInFilterablePane").prop("selectedIndex", $2("body").find("#gameProduseFilter").find("option").filter(function () {
                return $2(this).val() == $2("body").find("#gameProduseFilter").val();
            }).first().index());

            $2("body").find("#gameProduseFilterInMenu, #gameProduseFilterInFilterablePane").each(function(){
                var $select = $2(this),
                    isSelect2 = (!!$select.attr("data-select2-id")) ? true : false;
                if (isSelect2){
                    $select.select2('destroy');
                    $select.val($2("body").find("#gameProduseFilter").val()).select2();
                }
            });

            if ($2("body").find("#modelsFilterInMenu")) {
                $2("body").find("#modelsFilterInMenu").empty().hide();
            }
            if ($2("body").find("#modelsFilterInFilterablePane")) {
                $2("body").find("#modelsFilterInFilterablePane").empty().hide();
            }

            clearTimeout(_self.waiters.checkModeleInterval);
            _self.waiters.checkModeleInterval = setTimeout(function(){
                if ($2("body").find("#modelsFilter").length && $2("body").find("#modelsFilterInMenu")) {
                    if ($2("body").find("#modelsFilter").find("option").length) {
                        clearInterval(_self.repeaters.checkModeleInterval);

                        if ($2("body").find("#modelsFilter").find("option").filter(function(){
                            return !!$2(this).val();
                        }).length) {
                            // $2("body").find("#modelsFilterInMenu, #modelsFilterInFilterablePane").html($2("body").find("#modelsFilter").html()).show();
                            $2("body").find("#modelsFilterInMenu, #modelsFilterInFilterablePane").html($2("body").find("#modelsFilter").html());

                            if ("function" == typeof $2.fn.select2) {
                                $2("body").find("#modelsFilterInMenu, #modelsFilterInFilterablePane").select2();
                            }
                        } else {
                            $2("body").find("#modelsFilterInMenu, #modelsFilterInFilterablePane").hide();
                            clearTimeout(_self.waiters.scrollToPositionTimeout);
                            if ($2("body").find(".customTabCauta").length) {
                                clearTimeout(_self.waiters.clickTabCautaProduseTimeout);
                                _self.waiters.clickTabCautaProduseTimeout = setTimeout(function(){
                                    $2("body").find(".customTabCauta")[0].click();
                                    // $2("body, html").stop().animate({
                                    //     scrollTop: $2("body").find("#CategoryFilteredProductList").offset().top - 200
                                    // }, 300);
                                },500);
                            }
                        }


                        $2("body").find(".navMenuFiltersSelectors #modelsFilterInMenu").prop("selectedIndex", $2("body").find("#modelsFilter").find("option").filter(function () {
                            return $2(this).val() == $2("body").find("#modelsFilter").val();
                        }).first().index());
                        $2("body").find("#modelsFilterInFilterablePane").prop("selectedIndex", $2("body").find("#modelsFilter").find("option").filter(function () {
                            return $2(this).val() == $2("body").find("#modelsFilter").val();
                        }).first().index());
                    }
                }
            },400);
        });

        $2("body").on("change", "#modelsFilterInMenu, #modelsFilterInFilterablePane", function(){
            var $modelSelect = $2(this),
                $model = $modelSelect.val();
            if ($2("body").find("#modelsFilter").length) {
                $2("body").find("#modelsFilter").prop("selectedIndex", $modelSelect.find("option").filter(function () {
                    return $2(this).val() == $model;
                }).first().index()).change();
            }
            $2("body").find("#modelsFilterInMenu, #modelsFilterInFilterablePane").prop("selectedIndex", $2("body").find("#modelsFilter").find("option").filter(function () {
                return $2(this).val() == $2("body").find("#modelsFilter").val();
            }).first().index());

            $2("body").find("#modelsFilterInMenu, #modelsFilterInFilterablePane").each(function(){
                var $select = $2(this),
                    isSelect2 = (!!$select.attr("data-select2-id")) ? true : false;
                if (isSelect2){
                    $select.select2('destroy');
                    $select.val($2("body").find("#modelsFilter").val()).select2();
                }
            });

            if ($2("body").find(".customTabCauta").length) {
                clearTimeout(_self.waiters.clickTabCautaProduseTimeout);
                _self.waiters.clickTabCautaProduseTimeout = setTimeout(function(){
                    $2("body").find(".customTabCauta")[0].click();
                },500);
            }
        });


        $2("body").on("mouseover", ".homepageBadges .ProductBadges .bubbleInfo", function(){
            var $bubbleIndex = $2(this).index();
            if ($2(".homepageBadges .ProductBadges .bubbleInfo .popup").length) {
                $2(".homepageBadges .ProductBadges .bubbleInfo .popup").attr("data-arrowPosition", $bubbleIndex);
            }
        });

        $2("body").on("click", ".addToCartBtnWithTransition", function(e){
            var $el = $2(this),
                $imgBtn = $el.closest(".fakeBtn").find("input[type='image']");

            e.preventDefault();
            // if () {
            //
            // }
            _self.showAddToCartTransition($imgBtn);
        });


        $2("body").on("click", ".miniCartItemRemove", function(e){
            e.preventDefault();
            if ($2("body").find(".customDesktopHeader .cartToggle").length) {
                if ($2("body").find(".cartToggle").find(".cartCounter").length) {
                    $2("body").find(".cartToggle").find(".cartCounter").remove();
                }
                if ($2("body").find(".customDesktopHeader .cartToggle").find(".miniCartListWrapper").length) {
                    $2("body").find(".customDesktopHeader .cartToggle").find(".miniCartListWrapper").remove();
                }
            }

            var $el = $2(this),
                $removeUrl = $el.attr("data-href"),
                itemId = $el.attr("data-cartitemtoremove");

            // Cart.RemoveItem(itemId);


            if (_self.isCart) {
                e.stopImmediatePropagation();
                e.stopPropagation();
            }
            $2.ajax({
                type: "GET",
                url: $removeUrl,
                complete: function(resp){
                    if (_self.isCart) {
                        window.location.reload();
                    } else {
                        _self.createMiniCart(function(){
                            $2("body").find(".cartCounter").removeClass("show").removeClass("showFast");
                            clearTimeout(_self.waiters.showCartCounterTimeout);
                            _self.waiters.showCartCounterTimeout = setTimeout(function(){
                                $2("body").find(".cartToggle").find(".cartCounter").addClass("showFast");
                            },100);
                        });
                    }
                }
            });
        });

        $2("body").on("click", ".customDesktopProductHeaderAddToCart", function(e) {
            $2("body, html").stop().animate({
                scrollTop: 0
            }, 300, function(){
                if ($2("body").find(".addToCartBtnWithTransition").length) {
                    $2("body").find(".addToCartBtnWithTransition")[0].click();
                }
            });
            e.preventDefault();
        });

        $2("body").on("click", ".acceptCookieBtn", function(e){
            _self.setCookie("cookieConsent", 1, 9999);
            if ("undefined" != typeof gtag) {
                if ($2("body").find("#cookieAnalyticsCheckbox").length > 0
                    && ($2("body").find("#cookieAnalyticsCheckbox").is(":checked") || $2("body").find("#cookieAnalyticsCheckbox").prop(":checked"))) {

                    localStorage.setItem("an_strg", 1);
                    gtag('consent', 'update', {
                        'analytics_storage': 'granted'
                    });

                } else {
                    localStorage.setItem("an_strg", 0);
                    gtag('consent', 'update', {
                        'analytics_storage': 'denied'
                    });
                }
                if ($2("body").find("#cookieMarketingCheckbox").length > 0
                    && ($2("body").find("#cookieMarketingCheckbox").is(":checked") || $2("body").find("#cookieMarketingCheckbox").prop(":checked"))) {
                    localStorage.setItem("mrk_strg", 1);
                    gtag('consent', 'update', {
                        'ad_storage': 'granted',
                        'ad_user_data': 'granted',
                        'ad_personalization': 'granted',
                    });
                } else {
                    localStorage.setItem("mrk_strg", 0);
                    gtag('consent', 'update', {
                        'ad_storage': 'denied',
                        'ad_user_data': 'denied',
                        'ad_personalization': 'denied',
                    });
                }
                gtag("consent", "update", {
                    'functionality_storage': "granted",
                    'security_storage': "granted"
                });
            }
            if ("undefined" != typeof _self.waiters.removeCookieConsentTimeout) {
                clearTimeout(_self.waiters.removeCookieConsentTimeout);
            }
            _self.waiters.removeCookieConsentTimeout = setTimeout(function(){
                $2("body").find(".cookiePolicyWrapper").remove();
            }, 400);

            e.preventDefault();
        });
        $2("body").on("click", ".laterCookieBtn", function(e){
            _self.setCookie("cookieConsent", 1, 1);
            //laterCookieBtn
            localStorage.setItem("mrk_strg", 0);
            localStorage.setItem("an_strg", 0);
            if ("undefined" != typeof gtag) {
                gtag('consent', 'update', {
                    'analytics_storage': 'denied',
                    'ad_storage': 'denied',
                    'ad_user_data': 'denied',
                    'ad_personalization': 'denied',
                    'functionality_storage': "granted",
                    'security_storage': "granted"
                });
            }
            if ("undefined" != typeof _self.waiters.removeCookieConsentTimeout) {
                clearTimeout(_self.waiters.removeCookieConsentTimeout);
            }
            _self.waiters.removeCookieConsentTimeout = setTimeout(function(){
                $2("body").find(".cookiePolicyWrapper").remove();
            }, 400);
            e.preventDefault();
        });
        $2("body").on("click", ".acceptSpecialNoticeBtn", function(e){
            _self.setCookie("specialNotice", 1, 1);
            $2("body").removeClass("specialNotice");
            $2("body").find(".specialNoticeWrapper").remove();
            e.preventDefault();
        });

        $2("body").on("change", ".selectorJudete", function(){
            var judet = $2(this).val(),
                $inputJudete = $2(this).parent().find("input.inputJudete");
            // if (undefined != typeof judet && "" != judet) {
            $inputJudete.val(judet).attr("value",judet).change();
            // }
        });

        // $2("body").on("click", ".billingButton", function(e){
        //     var $btn = $2(this),
        //         $block = $btn.closest(".ExpressCheckoutBlock"),
        //         $inpJudete = $block.find(".inputJudete").val(),
        //         $useNew = $2("body").find(".AddBillingAddress").is(":visible"), //isNew
        //         $useExisting = !$useNew;
        //
        //     if ($useNew && "" == $inpJudete) {
        //         e.preventDefault();
        //         alert("Va rugam selectati judetul");
        //         ExpressCheckout.ChangeStep("BillingAddress");
        //     }
        // });
        // $2("body").on("click", ".shippingButton", function(e){
        //     var $btn = $2(this),
        //         $block = $btn.closest(".ExpressCheckoutBlock"),
        //         $inpJudete = $block.find(".inputJudete").val(),
        //         $useNew = $useNew = $2("body").find(".AddShippingAddress").is(":visible"), //isNew
        //         $useExisting = !$useNew;
        //
        //     if ($useNew && "" == $inpJudete) {
        //         e.preventDefault();
        //         alert("Va rugam selectati judetul");
        //         ExpressCheckout.ChangeStep("ShippingAddress");
        //     }
        // });


        $2("body").on("change", "#AdvancedSearchForm input, #AdvancedSearchForm select", function(){
            $2("#AdvancedSearchForm input[type='submit']")[0].click();
        });

        $2("body").on("click", ".searchKeywordTagBtn", function(e){
            var $btn = $2(this),
                keyword = $btn.data("keyword").replace(".php", ""),
                allKeywords = [];
            $btn.addClass("selected");
            $2("body").find(".searchKeywordTagBtn").not(this).removeClass("selected");

            $2("body").find(".searchKeywordTagBtn").each(function(){
                var $tag = $2(this),
                    $key = $tag.data("keyword").replace(".php", "");
                if (!$tag.hasClass("selected")) {
                    allKeywords.push($key);
                }
            });
            // var addGclid = "";
            // if (!!localStorage.getItem("gclid")) {
            //     addGclid = "?gclid="+localStorage.getItem("gclid");
            // }
            // window.location.href = _self.root+"/cauta/"+allKeywords.join("+")+addGclid;
            window.location.href = _self.root+"/cauta/"+(allKeywords.join("+"));
        });
        // $2("body").on("mouseenter", ".customDesktopHeaderInner", function(){
        //     if ((_self.isHomepage && 600 <= _self.scrollAmmount) || !_self.isHomepage){
        //         $2(".navMenuInner, .customDesktopHeader .menuTrigger").removeClass('show');
        //     } else if (_self.isHomepage && 600 > _self.scrollAmmount) {
        //         $2("body").find(".navMenuCategories > .categories > li").removeClass('show');
        //     }
        // });



        $2("body").on("click", ".ChangeLink[onclick*='ExpressCheckout.ChangeStep'], #OrderConfirmationForm input[type='submit'], #CheckoutStepBillingAddress input[type='submit'], #CheckoutStepShippingProvider input[type='submit']", function(e){
            var billingValid = false, billingJudetValid = false;
            //console.log("pre 1");
            // if ("undefined" != typeof _self.repeaters.switchToNewAddressInterval) {
            //     clearInterval(_self.repeaters.switchToNewAddressInterval);
            // }
            // _self.repeaters.switchToNewAddressInterval = setInterval(function(){
            //     //console.log("1");
            //     if ("undefined" != typeof ExpressCheckout) {
            //         if ("BillingAddress" == ExpressCheckout.currentStep) {
            //             if ($2("body").find("input[type='radio']#BillingAddressTypeNew").length) {
            //                 clearInterval(_self.repeaters.switchToNewAddressInterval);
            //                 $2("body").find("input[type='radio']#BillingAddressTypeNew")[0].click();
            //                 //console.log("1 switching to new billing address form");
            //             }
            //         } else if ("ShippingAddress" == ExpressCheckout.currentStep) {
            //             if ($2("body").find("input[type='radio']#ShippingAddressTypeNew").length) {
            //                 clearInterval(_self.repeaters.switchToNewAddressInterval);
            //                 $2("body").find("input[type='radio']#ShippingAddressTypeNew")[0].click();
            //                 //console.log("1 switching to new shipping address form");
            //             }
            //         }
            //     }
            // }, 400);

            if ($2("body").find("#CheckoutStepBillingAddress .inputJudete").length) {
                if ("" != $2("body").find("#CheckoutStepBillingAddress .inputJudete").val()) {
                    billingJudetValid = true;
                }
            }

            if (!$2("body").find("#BillingAddressTypeExisting").is(":checked")) {
                if (_self.validateCheckout("billing", true)) {
                    billingValid = true;
                }
            } else {
                billingValid = true;
            }


            if ($2("body").find(".AddBillingAddress").is(":visible")) {
                if (!billingJudetValid) {
                    e.preventDefault();
                    e.stopImmediatePropagation();
                    e.stopPropagation();

                    setTimeout(function(){
                        if ("undefined" != typeof ExpressCheckout) {
                            ExpressCheckout.ChangeStep("BillingAddress");
                        }
                        if (billingValid) {
                            alert("Va rugam selectati judetul");
                            $2("body").find("#CheckoutStepBillingAddress .selectorJudete").focus();
                        } else {
                            ExpressCheckout.ChooseBillingAddress();
                        }
                    },500);
                } else {
                    if (!billingValid) {
                        e.preventDefault();
                        e.stopImmediatePropagation();
                        e.stopPropagation();
                        if ("undefined" != typeof ExpressCheckout) {
                            ExpressCheckout.ChooseBillingAddress();
                            ExpressCheckout.ChangeStep("BillingAddress");
                        }
                    }
                }
            }

            //console.log("billingValid: "+billingValid+", billingJudetValid: "+billingJudetValid);
        });



        $2("body").on("click", ".ChangeLink[onclick*='ExpressCheckout.ChangeStep'], #OrderConfirmationForm input[type='submit'], #CheckoutStepShippingAddress input[type='submit'], #CheckoutStepShippingProvider input[type='submit']", function(e){
            var shippingValid = false, shippingJudetValid = false;
            //console.log("pre 2");
            // if ("undefined" != typeof _self.repeaters.switchToNewAddressInterval) {
            //     clearInterval(_self.repeaters.switchToNewAddressInterval);
            // }
            // _self.repeaters.switchToNewAddressInterval = setInterval(function(){
            //     //console.log("2");
            //     if ("undefined" != typeof ExpressCheckout) {
            //         if ("BillingAddress" == ExpressCheckout.currentStep) {
            //             if ($2("body").find("input[type='radio']#BillingAddressTypeNew").length) {
            //                 clearInterval(_self.repeaters.switchToNewAddressInterval);
            //                 $2("body").find("input[type='radio']#BillingAddressTypeNew")[0].click();
            //                 //console.log("2 switching to new billing address form");
            //             }
            //         } else if ("ShippingAddress" == ExpressCheckout.currentStep) {
            //             if ($2("body").find("input[type='radio']#ShippingAddressTypeNew").length) {
            //                 clearInterval(_self.repeaters.switchToNewAddressInterval);
            //                 $2("body").find("input[type='radio']#ShippingAddressTypeNew")[0].click();
            //                 //console.log("2 switching to new shipping address form");
            //             }
            //         }
            //     }
            // }, 400);

            if ($2("body").find("#CheckoutStepShippingAddress .inputJudete").length) {
                if ("" != $2("body").find("#CheckoutStepShippingAddress .inputJudete").val()) {
                    shippingJudetValid = true;
                }
            }


            if (!$2("body").find("#ShippingAddressTypeExisting").is(":checked")) {
                if (_self.validateCheckout("shipping", true)) {
                    shippingValid = true;
                }
            } else {
                shippingValid = true;
            }

            if ($2("body").find(".AddShippingAddress").is(":visible")) {
                if (!shippingJudetValid) {
                    e.preventDefault();
                    e.stopImmediatePropagation();
                    e.stopPropagation();

                    setTimeout(function(){
                        if ("undefined" != typeof ExpressCheckout) {
                            ExpressCheckout.ChangeStep("ShippingAddress");
                        }
                        if (shippingValid) {
                            alert("Va rugam selectati judetul");
                            $2("body").find("#CheckoutStepShippingAddress .selectorJudete").focus();
                        } else {
                            ExpressCheckout.ChooseShippingAddress();
                        }
                    },500);
                } else {
                    if (!shippingValid) {
                        e.preventDefault();
                        e.stopImmediatePropagation();
                        e.stopPropagation();
                        if ("undefined" != typeof ExpressCheckout) {
                            ExpressCheckout.ChooseShippingAddress();
                            ExpressCheckout.ChangeStep("ShippingAddress");
                        }
                    }
                }
            }

            //console.log("shippingValid: "+shippingValid+", shippingJudetValid: "+shippingJudetValid);
        });

        $2("body").on("click", ".AddBillingAddress .billingButton", function(e){
            if ($2("body").find(".AddBillingAddress .groupFirmaCui").is(":visible")) {
                if ($2("body").find("[name='FormField[2][6]']").val().toString().trim() == "") {
                    $2("body").find("[name='FormField[2][6]']").focus();
                    alert("Va rugam completati numele firmei");
                    e.preventDefault();
                    e.stopImmediatePropagation();
                    e.stopPropagation();
                    if ("undefined" != typeof ExpressCheckout) {
                        // ExpressCheckout.ChooseBillingAddress();
                        ExpressCheckout.ChangeStep("BillingAddress");
                    }
                }
                if ($2("body").find("[name='FormField[2][24]']").val().toString().trim() == "") {
                    $2("body").find("[name='FormField[2][24]']").focus();
                    alert("Campul 'CUI' este necesar");
                    e.preventDefault();
                    e.stopImmediatePropagation();
                    e.stopPropagation();
                    if ("undefined" != typeof ExpressCheckout) {
                        // ExpressCheckout.ChooseBillingAddress();
                        ExpressCheckout.ChangeStep("BillingAddress");
                    }
                }
            }
        });


        $2("body").on("click", "#bottom_payment_button", function(e){
            e.preventDefault();
            var $btn = $2(this),
                providerSelected = false,
                termsAccepted = false;

            //check if provider is selected and checked terms and conditions
            $2("body").find(".providerSelection input").each(function(){
                var $inp = $2(this);
                if ($inp.is(":selected") || $inp.is(":checked")) {
                    providerSelected = true;
                }
            });
            $2("body").find("#AgreeTermsAndConditions").each(function(){
                var $inp = $2(this);
                if ($inp.is(":selected") || $inp.is(":checked")) {
                    termsAccepted = true;
                }
            });
            if (providerSelected && termsAccepted) {
                $btn.addClass("btnSubmitted").val("Se trimite comanda..").text("Se trimite comanda..");
                $btn.attr("disabled", "disabled").prop("disabled", true).css({"pointer-events": "none"});
            }

        });

        $2("body").on("click", "#quickOrderBtn", function(e){
            $2("body").find(".quickOrderOverlay, .quickOrderWrapper").addClass("show");
            $2("html, body").addClass("fixedBody");
            e.preventDefault();
        });
        $2("body").on("click", ".qwCloseBtn", function(e){
            $2("body").find(".quickOrderOverlay, .quickOrderWrapper").removeClass("show");
            $2("html, body").removeClass("fixedBody");
            $2( '#quickOrderFrame' ).attr( 'src', function ( i, val ) { return val; });
            e.preventDefault();
        });

        $2("body").on("change", ".powerLaptopAddressToggle", function(){
            var $inp = $2(this);
            if ("undefined" != typeof ExpressCheckout) {
                if ("ShippingAddress" == ExpressCheckout.currentStep && "function" == typeof ExpressCheckout.ToggleAddressType) {
                    if ($inp.is(":checked")) {
                        // if (ExpressCheckout.signedIn) {
                        if ($2("body").find("#ShippingAddressTypeNew").length) {
                            $2("body").find("#ShippingAddressTypeNew")[0].click();
                        }
                        ExpressCheckout.ToggleAddressType('Shipping', 'Add');
                        var powerLaptopAddress = {
                            "nume": "",
                            "prenume": "",
                            "adresa": "Str. Sfantul Niceta, Nr. 6",
                            "numar": "6",
                            "strada": "Sfantul Niceta",
                            "localitate": "Bucuresti",
                            "judet": "Bucuresti",
                            "tara": "Romania",
                            "codpostal": "023744"
                        };

                        if ("undefined" != _self.repeaters.setPowerLaptopAddressInterval) {
                            clearInterval(_self.repeaters.setPowerLaptopAddressInterval);
                        }

                        _self.repeaters.setPowerLaptopAddressInterval = setInterval(function(){
                            if ($2("body").find(".AddShippingAddress").is(":visible")) {
                                clearInterval(_self.repeaters.setPowerLaptopAddressInterval);
                                $2("body").find("#CheckoutStepShippingAddress input[name='FormField[3][18]']").val(powerLaptopAddress["adresa"]).attr("value", powerLaptopAddress["adresa"]).change();
                                $2("body").find("#CheckoutStepShippingAddress #shippingAddressComponentStrada").val(powerLaptopAddress["strada"]).attr("value", powerLaptopAddress["strada"]).change();
                                $2("body").find("#CheckoutStepShippingAddress #shippingAddressComponentNr").val(powerLaptopAddress["numar"]).attr("value", powerLaptopAddress["numar"]).change();
                                $2("body").find("#CheckoutStepShippingAddress input[name='FormField[3][20]']").val(powerLaptopAddress["localitate"]).attr("value", powerLaptopAddress["localitate"]).change();
                                $2("body").find("#CheckoutStepShippingAddress input[name='FormField[3][22]']").val(powerLaptopAddress["judet"]).attr("value", powerLaptopAddress["judet"]).change();
                                $2("body").find("#CheckoutStepShippingAddress .selectorJudete").val(powerLaptopAddress["judet"]).change();
                                $2("body").find("#CheckoutStepShippingAddress select[name='FormField[3][21]']").val(powerLaptopAddress["tara"]).change();
                                $2("body").find("#CheckoutStepShippingAddress input[name='FormField[3][23]']").val(powerLaptopAddress["codpostal"]).attr("value", powerLaptopAddress["codpostal"]).change();
                                // $2("body").find("#CheckoutStepShippingAddress .shippingButton").val("Ridic de la Sediul PowerLaptop");
                            }
                        },100);
                        // }
                    } else {
                        if ("undefined" != _self.repeaters.setOtherAddressInterval) {
                            clearInterval(_self.repeaters.setOtherAddressInterval);
                        }
                        _self.repeaters.setOtherAddressInterval = setInterval(function(){
                            if ($2("body").find(".AddShippingAddress").is(":visible")) {
                                clearInterval(_self.repeaters.setOtherAddressInterval);
                                $2("body").find("#CheckoutStepShippingAddress .shippingButton").val("Continuare");
                                $2("body").find("#CheckoutStepShippingAddress [name='FormField[3][18]']").val("");
                                $2("body").find("#CheckoutStepShippingAddress #shippingAddressComponentStrada").val("");
                                $2("body").find("#CheckoutStepShippingAddress #shippingAddressComponentNr").val("");
                                $2("body").find("#CheckoutStepShippingAddress #shippingAddressComponentBloc").val("");
                                $2("body").find("#CheckoutStepShippingAddress #shippingAddressComponentEtaj").val("");
                                $2("body").find("#CheckoutStepShippingAddress #shippingAddressComponentApartament").val("");
                                $2("body").find("#CheckoutStepShippingAddress [name='FormField[3][23]']").val("");
                            } else if ($2("body").find(".SelectShippingAddress").is(":visible")) {
                                clearInterval(_self.repeaters.setOtherAddressInterval);
                                $2("body").find("#CheckoutStepShippingAddress .shippingButton").val("Continuare");
                            }
                        },100);

                    }
                }
            }
        });

        $2("body").on("change", "[name='ShippingAddressType']", function(){
            var $inp = $2(this),
                id = $2("body").find("[name='ShippingAddressType']:checked").attr("id");
            if ("ShippingAddressTypeNew" != id) {
                if ($2("body").find(".powerLaptopAddressToggle").length) {
                    $2("body").find(".powerLaptopAddressToggle").prop("checked", false).removeAttr("checked").change();
                }
            }
        });

        $2("body").on("input change blur focus click", "#CheckoutStepShippingAddress input, #CheckoutStepShippingAddress select, #CheckoutStepShippingAddress textarea", function(){
            if ("undefined" != typeof ExpressCheckout) {
                var logx = "x: a";
                if ("undefined" != typeof _self.waiters.checkPowerLaptopAddressChangesTimeout) {
                    clearTimeout(_self.waiters.checkPowerLaptopAddressChangesTimeout);
                }
                _self.waiters.checkPowerLaptopAddressChangesTimeout = setTimeout(function () {
                    logx += "b";
                    // if (ExpressCheckout.signedIn) {
                    logx += "c";
                    if ($2("body").find(".SelectShippingAddress").is(":visible")) {
                        logx += "d";
                        if ($2("body").find("#CheckoutStepShippingAddress .shippingButton").length) {
                            logx += "e";
                            $2("body").find("#CheckoutStepShippingAddress .shippingButton").val("Continuare");
                            $2("body").find(".powerLaptopAddressToggle").prop("checked", false).removeAttr("checked");
                        }
                    } else if ($2("body").find(".AddShippingAddress").is(":visible")) {
                        logx += "f";
                        var shippingAddress = ExpressCheckout.BuildAddressLine().toString().trim();
                        if (shippingAddress.indexOf(_self.powerLaptopAddress) > -1) {
                            logx += "g";
                            //adresa power laptop
                            if ($2("body").find("#CheckoutStepShippingAddress .shippingButton").length) {
                                logx += "h";
                                // $2("body").find("#CheckoutStepShippingAddress .shippingButton").val("Ridic de la Sediul PowerLaptop");
                                $2("body").find(".powerLaptopAddressToggle").prop("checked", true).attr("checked", true);
                            }
                        } else {
                            //alta adresa
                            logx += "i";
                            if ($2("body").find("#CheckoutStepShippingAddress .shippingButton").length) {
                                logx += "j";
                                $2("body").find("#CheckoutStepShippingAddress .shippingButton").val("Continuare");
                                $2("body").find(".powerLaptopAddressToggle").prop("checked", false).removeAttr("checked");
                            }
                        }
                    }
                    // }
                    //console.log(logx);
                }, 300);
            }
        });

        $2("body").on("change", "[name='checkout_provider']", function(){
            var $inp = $2("body").find("[name='checkout_provider']:checked"),
                method = $inp.val(); //checkout_instore, checkout_cod
            //console.log("method checkout ",method);
            if ("undefined" != typeof ExpressCheckout) {
                var shippingAddress = ExpressCheckout.BuildAddressLine().toString().trim();
                if (shippingAddress.indexOf(_self.powerLaptopAddress) > -1) {
                    if (method == "checkout_instore") {
                        //ok
                    } else {
                        //nok
                        alert("Ati selectat ridicare de la sediul Power Laptop, insa momentan ridicarea personala de la sediul nostru nu este disponibila ca masura a preventiilor raspandirii COVID19. daca doriti sa platiti ramburs la curier va rugam selectati o adresa de livrare diferita");
                        ExpressCheckout.ChangeStep("ShippingAddress");
                    }
                } else {
                    // curier
                    if (method == "checkout_cod") {
                        //ok
                    } else {
                        //nok
                        // alert("Ati selectat o adresa diferita de livrare. Daca doriti sa ridicati comanda de la sediul nostru va rugam modificati adresa de livrare");
                        // ExpressCheckout.ChangeStep("ShippingAddress");
                    }
                }
            }
        });

        $2("body").on("input", ".billingAddressComponentsWrapper .addressComponentInput", function(){
            var $inp = $2(this),
                addressLine = [];
            if ($2("body").find("#billingAddressComponentStrada").length) {
                if ($2("body").find("#billingAddressComponentStrada").val().toString().replace(/-/gi, " ").replace(/str\./gi, "").replace(/str /gi, "").replace(/strada/gi, "").replace(/,,/gi, ",").trim() != "") {
                    addressLine.push("Str. " + $2("body").find("#billingAddressComponentStrada").val().toString().replace(/-/gi, " ").replace(/str\./gi, "").replace(/str /gi, "").replace(/strada/gi, "").replace(/,,/gi, ",").trim());
                }
            }
            if ($2("body").find("#billingAddressComponentNr").length) {
                if ($2("body").find("#billingAddressComponentNr").val().toString().replace(/-/gi, " ").replace(/nr\./gi, "").replace(/nr/gi, "").replace(/numarul/gi, "").replace(/numaru/gi, "").replace(/\./g,"").replace(/,,/gi, ",").trim() != "") {
                    addressLine.push("Nr. " + $2("body").find("#billingAddressComponentNr").val().toString().replace(/-/gi, " ").replace(/nr\./gi, "").replace(/nr/gi, "").replace(/numarul/gi, "").replace(/numaru/gi, "").replace(/\./g,"").replace(/,,/gi, ",").trim());
                }
            }
            if ($2("body").find("#billingAddressComponentBloc").length) {
                if ($2("body").find("#billingAddressComponentBloc").val().toString().replace(/-/gi, " ").replace(/blocul/gi, "").replace(/blocu/gi, "").replace(/bloc/gi, "").replace(/blc\./gi, "").replace(/blc /gi, "").replace(/bl /gi, "").replace(/bl\./gi, "").replace(/\./g,"").replace(/,,/gi, ",").trim() != "") {
                    addressLine.push("Bloc " + $2("body").find("#billingAddressComponentBloc").val().toString().replace(/-/gi, " ").replace(/blocul/gi, "").replace(/blocu/gi, "").replace(/bloc/gi, "").replace(/blc\./gi, "").replace(/blc /gi, "").replace(/bl /gi, "").replace(/bl\./gi, "").replace(/\./g,"").replace(/,,/gi, ",").trim());
                }
            }
            if ($2("body").find("#billingAddressComponentEtaj").length) {
                if ($2("body").find("#billingAddressComponentEtaj").val().toString().replace(/-/gi, " ").replace(/etajul/gi, "").replace(/etaj/gi, "").replace(/etj\./gi, "").replace(/etj /gi, "").replace(/et\./gi, "").replace(/et /gi, "").replace(/\./g,"").replace(/,,/gi, ",").trim() != "") {
                    addressLine.push("Etaj " + $2("body").find("#billingAddressComponentEtaj").val().toString().replace(/-/gi, " ").replace(/etajul/gi, "").replace(/etaj/gi, "").replace(/etj\./gi, "").replace(/etj /gi, "").replace(/et\./gi, "").replace(/et /gi, "").replace(/\./g,"").replace(/,,/gi, ",").trim());
                }
            }
            if ($2("body").find("#billingAddressComponentApartament").length) {
                if ($2("body").find("#billingAddressComponentApartament").val().toString().replace(/-/gi, " ").replace(/apartamentul/gi,"").replace(/apartament/gi, "").replace(/apart\./gi, "").replace(/apart /gi,"").replace(/aprt\./gi, "").replace(/apt /gi, "").replace(/apt\./gi, "").replace(/ap /gi, "").replace(/ap\./gi, "").replace(/\./g,"").replace(/,,/gi, ",").trim() != "") {
                    addressLine.push("Apart. " + $2("body").find("#billingAddressComponentApartament").val().toString().replace(/-/gi, " ").replace(/apartamentul/gi,"").replace(/apartament/gi, "").replace(/apart\./gi, "").replace(/apart /gi,"").replace(/aprt\./gi, "").replace(/apt /gi, "").replace(/apt\./gi, "").replace(/ap /gi, "").replace(/ap\./gi, "").replace(/\./g,"").replace(/,,/gi, ",").trim());
                }
            }
            addressLine = addressLine.join(", ");
            //console.log("Built billing addresLine: "+addressLine);
            if ($inp.closest(".inputField").find("[name='FormField[2][8]']").length) {
                $inp.closest(".inputField").find("[name='FormField[2][8]']").val(addressLine).attr("value", addressLine).change();
            }
            // if ($inp.closest(".inputField").find("[name='FormField[3][18]']").length) {
            //     $inp.closest(".inputField").find("[name='FormField[3][18]']").val(addressLine).attr("value", addressLine).change();
            // }
        });

        $2("body").on("input", ".shippingAddressComponentsWrapper .addressComponentInput", function(){
            var $inp = $2(this),
                addressLine = [];
            if ($2("body").find("#shippingAddressComponentStrada").length) {
                if ($2("body").find("#shippingAddressComponentStrada").val().toString().replace(/-/gi, " ").replace(/str\./gi, "").replace(/str /gi, "").replace(/strada/gi, "").replace(/,,/gi, ",").trim() != "") {
                    addressLine.push("Str. " + $2("body").find("#shippingAddressComponentStrada").val().toString().replace(/-/gi, " ").replace(/str\./gi, "").replace(/str /gi, "").replace(/strada/gi, "").replace(/,,/gi, ",").trim());
                }
            }
            if ($2("body").find("#shippingAddressComponentNr").length) {
                if ($2("body").find("#shippingAddressComponentNr").val().toString().replace(/-/gi, " ").replace(/nr\./gi, "").replace(/nr/gi, "").replace(/numarul/gi, "").replace(/numaru/gi, "").replace(/\./g,"").replace(/,,/gi, ",").trim() != "") {
                    addressLine.push("Nr. " + $2("body").find("#shippingAddressComponentNr").val().toString().replace(/-/gi, " ").replace(/nr\./gi, "").replace(/nr/gi, "").replace(/numarul/gi, "").replace(/numaru/gi, "").replace(/\./g,"").replace(/,,/gi, ",").trim());
                }
            }
            if ($2("body").find("#shippingAddressComponentBloc").length) {
                if ($2("body").find("#shippingAddressComponentBloc").val().toString().replace(/-/gi, " ").replace(/blocul/gi, "").replace(/blocu/gi, "").replace(/bloc/gi, "").replace(/blc\./gi, "").replace(/blc /gi, "").replace(/bl /gi, "").replace(/bl\./gi, "").replace(/\./g,"").replace(/,,/gi, ",").trim() != "") {
                    addressLine.push("Bloc " + $2("body").find("#shippingAddressComponentBloc").val().toString().replace(/-/gi, " ").replace(/blocul/gi, "").replace(/blocu/gi, "").replace(/bloc/gi, "").replace(/blc\./gi, "").replace(/blc /gi, "").replace(/bl /gi, "").replace(/bl\./gi, "").replace(/\./g,"").replace(/,,/gi, ",").trim());
                }
            }
            if ($2("body").find("#shippingAddressComponentEtaj").length) {
                if ($2("body").find("#shippingAddressComponentEtaj").val().toString().replace(/-/gi, " ").replace(/etajul/gi, "").replace(/etaj/gi, "").replace(/etj\./gi, "").replace(/etj /gi, "").replace(/et\./gi, "").replace(/et /gi, "").replace(/\./g,"").replace(/,,/gi, ",").trim() != "") {
                    addressLine.push("Etaj " + $2("body").find("#shippingAddressComponentEtaj").val().toString().replace(/-/gi, " ").replace(/etajul/gi, "").replace(/etaj/gi, "").replace(/etj\./gi, "").replace(/etj /gi, "").replace(/et\./gi, "").replace(/et /gi, "").replace(/\./g,"").replace(/,,/gi, ",").trim());
                }
            }
            if ($2("body").find("#shippingAddressComponentApartament").length) {
                if ($2("body").find("#shippingAddressComponentApartament").val().toString().replace(/-/gi, " ").replace(/apartamentul/gi,"").replace(/apartament/gi, "").replace(/apart\./gi, "").replace(/apart /gi,"").replace(/aprt\./gi, "").replace(/apt /gi, "").replace(/apt\./gi, "").replace(/ap /gi, "").replace(/ap\./gi, "").replace(/\./g,"").replace(/,,/gi, ",").trim() != "") {
                    addressLine.push("Apart. " + $2("body").find("#shippingAddressComponentApartament").val().toString().replace(/-/gi, " ").replace(/apartamentul/gi,"").replace(/apartament/gi, "").replace(/apart\./gi, "").replace(/apart /gi,"").replace(/aprt\./gi, "").replace(/apt /gi, "").replace(/apt\./gi, "").replace(/ap /gi, "").replace(/ap\./gi, "").replace(/\./g,"").replace(/,,/gi, ",").trim());
                }
            }
            addressLine = addressLine.join(", ");
            //console.log("Built shipping addresLine: "+addressLine);
            if ($inp.closest(".inputField").find("[name='FormField[3][18]']").length) {
                $inp.closest(".inputField").find("[name='FormField[3][18]']").val(addressLine).attr("value", addressLine).change();
            }
            // if ($inp.closest(".inputField").find("[name='FormField[3][18]']").length) {
            //     $inp.closest(".inputField").find("[name='FormField[3][18]']").val(addressLine).attr("value", addressLine).change();
            // }
        });

        $2("body").on("click", ".persFizicaJuridicaTabs a", function(e){
            var $tab = $2(this);
            if ($tab.hasClass("persJuridica")) {
                $2("body").find(".groupPersoaneJuridiceWrapper").addClass("show");
            } else {
                $2("body").find(".groupPersoaneJuridiceWrapper").removeClass("show");
            }
            $2("body").find(".persFizicaJuridicaTabs a").not(this).removeClass("active");
            $tab.addClass("active");
            e.preventDefault();
        });

        $2("body").on("click", ".btnFinalizareComanda", function(e){
            var $btn = $2(this),
                checkoutProviderSet = false,
                checkoutProvider = "",
                isCard = false,
                isRamburs = false;
            if ($2("body").find("input[name='checkout_provider']").length) {
                if ($2("body").find("input[name='checkout_provider']").is(":checked")) {
                    checkoutProviderSet = true;
                    if ("undefined" != typeof $2("body").find("input[name='checkout_provider']:checked").val()) {
                        checkoutProvider = $2("body").find("input[name='checkout_provider']:checked").val().toString().trim();
                        if ("checkout_payu" == $2("body").find("input[name='checkout_provider']:checked").val().toString().trim()) {
                            isCard = true;
                            isRamburs = false;
                        } else if ("checkout_cod" == $2("body").find("input[name='checkout_provider']:checked").val().toString().trim()) {
                            isCard = false;
                            isRamburs = true;
                        }
                    }
                }
            }
            if (true == checkoutProviderSet && isRamburs == true) {
                $btn.addClass("btnSubmitted").val("Se trimite comanda..").text("Se trimite comanda..");
            }
        });

        $2("body").on("change", ".judeteBilling select", function(){
            var $select = $2(this),
                judetSelectat = $select.val().trim();
            _self.getLocalitiesByStateName(judetSelectat, function(localitati){
                // _self.renderLocalities(localitati, ".localitiesBilling");
                if ("undefined" != typeof $2.fn.select2){
                    var options = [];
                    //console.log("localitati facturare pentru judetul "+judetSelectat, localitati);
                    if ("undefined" != typeof localitati){
                        if (false != localitati["status"]){
                            if (Object.keys(localitati).length > 0){
                                options.push({
                                    text: "Selecteaza localitate",
                                    id: ""
                                });
                                Object.keys(localitati).forEach(function(lid, i){
                                    options.push({
                                        text: localitati[lid]["name"],
                                        id: localitati[lid]["name"]
                                    });
                                });
                                $2("body").find(".localitiesBilling select").empty().select2({
                                    data: options
                                });

                                $2("body").find(".localitiesBilling input[name='FormField[2][10]']").val("").change();
                            } else {
                                $2("body").find(".localitiesBilling input[name='FormField[2][10]']").val("").change();
                                if ("undefined" != typeof _self.waiters.destroyShippingLocalitiesSelectTimeout) {
                                    clearTimeout(_self.waiters.destroyShippingLocalitiesSelectTimeout);
                                }
                                _self.waiters.destroyBillingLocalitiesSelectTimeout = setTimeout(function(){
                                    $2("body").find(".localitiesBilling select").select2("destroy");
                                    $2("body").find(".localitiesBilling select").html("<option value=''>Selecteaza localitate</option>").change();
                                    $2("body").find(".localitiesBilling select").select2();
                                },10);
                            }
                        } else {
                            if ("undefined" != typeof _self.waiters.destroyShippingLocalitiesSelectTimeout) {
                                clearTimeout(_self.waiters.destroyShippingLocalitiesSelectTimeout);
                            }
                            _self.waiters.destroyBillingLocalitiesSelectTimeout = setTimeout(function(){
                                $2("body").find(".localitiesBilling select").select2("destroy");
                                $2("body").find(".localitiesBilling select").html("<option value=''>Selecteaza localitate</option>").change();
                                $2("body").find(".localitiesBilling select").select2();
                            },10);
                        }
                    }
                }
            });
        });

        $2("body").on("change", ".judeteShipping select", function(){
            var $select = $2(this),
                judetSelectat = $select.val().toString().trim();
            _self.getLocalitiesByStateName(judetSelectat, function(localitati){
                // _self.renderLocalities(localitati, ".localitiesBilling");
                if ("undefined" != typeof $2.fn.select2){
                    var options = [];
                    //console.log("localitati livrare pentru judetul "+judetSelectat, localitati);
                    if ("undefined" != typeof localitati){
                        if (false != localitati["status"]){
                            if (Object.keys(localitati).length > 0){
                                options.push({
                                    text: "Selecteaza localitate",
                                    id: ""
                                });
                                Object.keys(localitati).forEach(function(lid, i){
                                    options.push({
                                        text: localitati[lid]["name"],
                                        id: localitati[lid]["name"]
                                    });
                                });
                                $2("body").find(".localitiesShipping select").empty().select2({
                                    data: options
                                });
                                $2("body").find(".localitiesShipping input[name='FormField[3][20]']").val("").change();
                            } else {
                                $2("body").find(".localitiesBilling input[name='FormField[3][20]']").val("").change();
                                if ("undefined" != typeof _self.waiters.destroyShippingLocalitiesSelectTimeout) {
                                    clearTimeout(_self.waiters.destroyShippingLocalitiesSelectTimeout);
                                }
                                _self.waiters.destroyShippingLocalitiesSelectTimeout = setTimeout(function(){
                                    $2("body").find(".localitiesShipping select").select2("destroy");
                                    $2("body").find(".localitiesShipping select").html("<option value=''>Selecteaza localitate</option>").change();
                                    $2("body").find(".localitiesShipping select").select2();
                                },10);
                            }
                        } else {
                            $2("body").find(".localitiesBilling input[name='FormField[3][20]']").val("").change();
                            if ("undefined" != typeof _self.waiters.destroyShippingLocalitiesSelectTimeout) {
                                clearTimeout(_self.waiters.destroyShippingLocalitiesSelectTimeout);
                            }
                            _self.waiters.destroyShippingLocalitiesSelectTimeout = setTimeout(function(){
                                $2("body").find(".localitiesShipping select").select2("destroy");
                                $2("body").find(".localitiesShipping select").html("<option value=''>Selecteaza localitate</option>").change();
                                $2("body").find(".localitiesShipping select").select2();
                            },10);
                        }
                    }
                }
            });
        });

        $2("body").on("change", ".localitiesBilling select", function(){
            var $select = $2(this),
                localitate = $select.val().toString().trim(),
                $inp = $select.closest(".localitiesBilling").find("input[name='FormField[2][10]']");
            $inp.val(localitate).change();
        });
        $2("body").on("change", ".localitiesShipping select", function(){
            var $select = $2(this),
                localitate = $select.val().toString().trim(),
                $inp = $select.closest(".localitiesShipping").find("input[name='FormField[3][20]']");
            $inp.val(localitate).change();
        });

        $2("body").on("select2:opening", "select.localitiesSelect", function (e) {
            var $sel = $2(this),
                localitate = $sel.val().toString().trim(),
                optionsLength = $sel.find("option").length,
                $wrapper = $sel.closest(".addressComponentsGroup, .addressComponentsGroup2"),
                $judeteWrapper = $wrapper.find(".judeteWrapper"),
                $localitiesWrapper = $wrapper.find(".localitiesWrapper"),
                $judeteSelect = $wrapper.find(".selectorJudete"),
                judet = $judeteSelect.val().toString().trim(),
                results = [];

            $localitiesWrapper.find(".select2-result-label").each(function(){
                results.push($2(this).text());
            });


            //console.log(optionsLength, judet, localitate, results);
            if ($judeteWrapper.length) {
                if (!$judeteWrapper.find(".judeteNotice").length) {
                    $judeteWrapper.append("<div class='judeteNotice'>Selecteaza judetul</div>");
                }
                if (localitate == "" && judet == "") {
                    $judeteWrapper.addClass("judeteWarning");
                    $judeteWrapper.find(".judeteNotice").addClass("show");
                } else {
                    $judeteWrapper.removeClass("judeteWarning");
                    $judeteWrapper.find(".judeteNotice").removeClass("show");
                }
            }
        });

        $2("body").on("select2:opening change", "select.selectorJudete", function (e) {
            var $sel = $2(this),
                judet = $sel.val().toString().trim(),
                $wrapper = $sel.closest(".addressComponentsGroup, .addressComponentsGroup2"),
                $judeteWrapper = $wrapper.find(".judeteWrapper");
            if ($judeteWrapper.find(".judeteNotice").length && "" != judet) {
                $judeteWrapper.removeClass("judeteWarning");
                $judeteWrapper.find(".judeteNotice").removeClass("show");
            }
            //console.log(judet);
        });

        $2("body").on("input", ".select2-search__field", function(){
            var $inp = $2(this),
                controls = $inp.attr("aria-controls"),
                $owns = $2("body").find("[aria-owns='"+controls+"']"),
                results = [],
                $wrapper = $inp.closest(".select2-dropdown"),
                $selectWrapper = $owns.closest(".inputField"),
                $select = $selectWrapper.find("select"),
                selectType = "",
                hasResults = false,
                $addressWrapper = $select.closest(".addressComponentsGroup, .addressComponentsGroup2"),
                $selectJudete = $addressWrapper.find(".selectorJudete"),
                $wrapperJudete = $addressWrapper.find(".judeteWrapper");

            if ("undefined" != typeof controls) {
                if ($owns.length > 0) {
                    if ($selectWrapper.length > 0) {
                        if ($select.length > 0) {
                            if ($select.hasClass("localitiesSelect")) {
                                selectType = "localities";
                            } else if ($select.hasClass("selectorJudete")) {
                                selectType = "judete";
                            }
                        }
                    }
                }
            }
            if ("localities" == selectType) {
                $wrapper.find(".select2-results__option").each(function(){
                    results.push($2(this).text());
                });
            }
            if (results.length >= 1) {
                if (results.length > 1) {
                    hasResults = true;
                } else {
                    if (["Selecteaza localitate", "No results found", ""].indexOf(results["0"]) == -1) {
                        hasResults = true;
                    }
                }
            }

            if ($wrapperJudete.length > 0 && hasResults == false && selectType == "localities") {
                if (!$wrapperJudete.find(".judeteNotice").length) {
                    $wrapperJudete.append("<div class='judeteNotice'>Selecteaza judetul</div>");
                }
                $wrapperJudete.addClass("judeteWarning");
                $wrapperJudete.find(".judeteNotice").addClass("show");
            } else {
                if ($wrapperJudete.find(".judeteNotice").length) {
                    $wrapperJudete.removeClass("judeteWarning");
                    $wrapperJudete.find(".judeteNotice").removeClass("show");
                }
            }
            //console.log($wrapperJudete.length, selectType, hasResults, results);
        });

        $2("body").on("click", ".providerSelectorsWrapper .providerSelection", function(e){
            var $el = $2(this),
                $radio = $el.find("input[type='radio']");
            $radio[0].click();
        });

        //focus select
        $2("html").not(".homepage").on('focus', '.select2-selection.select2-selection--single', function (e) {
            $2(this).closest(".select2-container").siblings('select:enabled').select2('open');
        });
        //
        // // steal focus during close - only capture once and stop propogation
        $2("html").not(".homepage").on('select2:closing', 'select.select2', function (e) {
            $2(e.target).data("select2").$selection.one('focus focusin', function (e) {
                e.stopPropagation();
            });
        });


        //check blacklist
        if (_self.isCheckout) {
            $2("body").on("input focus blur change click", ".ExpressCheckout input, .ExpressCheckout select, .ExpressCheckout textarea", function () {

                if ("undefined" != typeof _self.waiters.blacklistClientCheckTimeout) {
                    clearTimeout(_self.waiters.blacklistClientCheckTimeout);
                }

                var $inp = $2(this),
                    client = {
                        "firstname": "",
                        "lastname": "",
                        "customername": "",
                        "phone": "",
                        "email": "",
                        "cui": "",
                        "ip": "",
                        "cnp": ""
                    },
                    $billingFirstname = $2("body").find("[name='FormField[2][4]']"),
                    $shippingFirstname = $2("body").find("[name='FormField[3][14]']"),
                    $billingLastname = $2("body").find("[name='FormField[2][5]']"),
                    $shippingLastname = $2("body").find("[name='FormField[3][15]']"),
                    $billingEmail = $2("body").find("[name='FormField[1][1]']"),
                    $billingPhone = $2("body").find("[name='FormField[2][7]']"),
                    $shippingPhone = $2("body").find("[name='FormField[3][17]']"),
                    $billingCui = $2("body").find("[name='FormField[2][24]']"),
                    parentBilling = "#CheckoutStepBillingAddress",
                    parentShipping = "#CheckoutStepShippingAddress",
                    isBilling = $inp.closest(parentBilling).length > 0,
                    isShipping = $inp.closest(parentShipping).length > 0;

                _self.waiters.blacklistClientCheckTimeout = setTimeout(function(){
                    // console.log("checking cycle 1");
                    if (true == isBilling) {
                        //first name / last name
                        if ($billingFirstname.length > 0) {
                            client["firstname"] = ("" != $billingFirstname.val().toString().trim()) ? $billingFirstname.val().toString().trim() : client["firstname"];
                        }
                        if ($billingLastname.length > 0) {
                            client["lastname"] = ("" != $billingLastname.val().toString().trim()) ? $billingLastname.val().toString().trim() : client["lastname"];
                        }
                        client["customername"] = [client["firstname"], client["lastname"]].join(" ").toString().trim();
                        //email
                        if ($billingEmail.length > 0) {
                            client["email"] = ("" != $billingEmail.val().toString().trim()) ? $billingEmail.val().toString().trim() : client["email"];
                        }
                        //phone
                        if ($billingPhone.length > 0) {
                            client["phone"] = ("" != $billingPhone.val().toString().trim()) ? $billingPhone.val().toString().trim() : client["phone"];
                        }
                        //cui
                        if ($billingCui.length > 0) {
                            client["cui"] = ("" != $billingCui.val().toString().trim()) ? $billingCui.val().toString().trim() : client["cui"];
                        }

                        // console.log("Client", client);
                        _self.checkClientOrderBlacklist(client, function(clientAccess){
                            // console.log("Client access", clientAccess);
                            if ("undefined" != typeof clientAccess) {
                                if ("undefined" != typeof clientAccess["data"]) {
                                    if ("undefined" != typeof clientAccess["data"]["canOrder"]) {
                                        if (true != clientAccess["data"]["canOrder"]) {
                                            window.location.reload();
                                        }
                                    }
                                }
                            }
                        });

                    } else if (true == isShipping) {
                        if ($shippingFirstname.length > 0) {
                            client["firstname"] = ("" != $shippingFirstname.val().toString().trim()) ? $shippingFirstname.val().toString().trim() : client["firstname"];
                        }
                        if ($shippingLastname.length > 0) {
                            client["lastname"] = ("" != $shippingLastname.val().toString().trim()) ? $shippingLastname.val().toString().trim() : client["lastname"];
                        }
                        client["customername"] = [client["firstname"], client["lastname"]].join(" ").toString().trim();
                        //phone
                        if ($shippingPhone.length > 0) {
                            client["phone"] = ("" != $shippingPhone.val().toString().trim()) ? $shippingPhone.val().toString().trim() : client["phone"];
                        }

                        // console.log("Client", client);
                        _self.checkClientOrderBlacklist(client, function(clientAccess){
                            // console.log("Client access", clientAccess);
                            if ("undefined" != typeof clientAccess) {
                                if ("undefined" != typeof clientAccess["data"]) {
                                    if ("undefined" != typeof clientAccess["data"]["canOrder"]) {
                                        if (true != clientAccess["data"]["canOrder"]) {
                                            window.location.reload();
                                        }
                                    }
                                }
                            }
                        });

                    }

                },1000);

            });
        }

        //qwCloseBtn

        // $2("body").on("click", ".ChangeLink[onclick*='ExpressCheckout.ChangeStep'][onclick*='BillingAddress']", function(e){
        //     if ($2("body").find("input[type='radio'][onclick*='ExpressCheckout.ToggleAddressType'][onclick*='Billing'][onclick*='Add']").length) {
        //         $2("body").find("input[type='radio'][onclick*='ExpressCheckout.ToggleAddressType'][onclick*='Billing'][onclick*='Add']").trigger("click");
        //         if ("undefined" != typeof ExpressCheckout) {
        //             ExpressCheckout.ChangeStep("BillingAddress");
        //         }
        //     }
        // });
        // $2("body").on("click", ".ChangeLink[onclick*='ExpressCheckout.ChangeStep'][onclick*='ShippingAddress'], #CheckoutStepBillingAddress input[type='submit']", function(e){
        //     if ($2("body").find("input[type='radio'][onclick*='ExpressCheckout.ToggleAddressType'][onclick*='Shipping'][onclick*='Add']").length) {
        //         $2("body").find("input[type='radio'][onclick*='ExpressCheckout.ToggleAddressType'][onclick*='Shipping'][onclick*='Add']").trigger("click");
        //         if ("undefined" != typeof ExpressCheckout) {
        //             if (ExpressCheckout.ChooseShippingAddress()) {
        //                 ExpressCheckout.ChangeStep("ShippingAddress");
        //             } else {
        //                 ExpressCheckout.ChangeStep("BillingAddress");
        //             }
        //         }
        //     }
        // });

        //COMANDA CU CARDUL fara stoc
        $2("body").on("click", ".btnModifyOrder", function(e){
            e.preventDefault();
            window.location.href = _self.root+"/cos.php";
        });
        $2("body").on("click", ".btnChangeToRamburs", function(e){
            e.preventDefault();
            if ("undefined" != typeof ExpressCheckout) {
                ExpressCheckout.ChangeStep("Confirmation");
                if ($2("body").find(".providerSelectorsWrapper .providerCod").length) {
                    $2("body").find(".providerSelectorsWrapper .providerCod")[0].click();
                }
            }
        });
        //btnCloseResellerRequest
        $2("body").on("click", ".btnCloseResellerRequest, .popupResellerRequestOverlay", function(){
            $2("body").find(".popupResellerRequest, .popupResellerRequestOverlay").removeClass("show");
        });
        $2("body").on("click", ".popupResellerRequest .btnSendResellerRequest", function(){
            _self.sendResellerRequest(function(resp){
                _self.waiters.closeRequestResellerPopupTimeout = setTimeout(function(){
                    $2("body").find(".popupResellerRequest, .popupResellerRequestOverlay").removeClass("show");
                    alert("Va multumim! Veti fi informat prin email in momentul in care vi se va accepta cererea");
                },1000);
            });
        });
        $2("body").on("click", ".btnResellerPricesRequest", function(e){
            e.preventDefault();
            $2("body").find(".popupResellerRequest, .popupResellerRequestOverlay").addClass("show");
            if (!!localStorage.getItem('shouldOpenResellerRequestForm')) {
                localStorage.removeItem('shouldOpenResellerRequestForm');
            }
        });
        $2("body").on("click", ".btnLoginResellerRequest, .btnRegisterResellerRequest", function(e){
            e.preventDefault();
            e.stopImmediatePropagation();
            e.stopPropagation();
            var $btn = $2(this),
                href = $btn.attr("href");

            localStorage.setItem("returnToResellerRequestPage",JSON.stringify({
                "requestedReseller": true,
                "urlFrom": window.location.href
            }));

            _self.waiters.redirectTimeout = setTimeout(function(){
                window.location.href = href;
            },100);
        });

        $2("body").on("click", ".btnCerePretReseller", function(e){
            var $btn = $2(this),
                isByReseller = ($btn.hasClass("btnCerePretResellerByReseller")) ? true : false,
                resellerid = $btn.attr("data-requestresellerpriceresellerid"),
                prodid = ("undefined" != typeof productId && !isNaN(productId)) ? productId : null,
                cookies = _self.getCookies(),
                cpt = "00530054004f0052004500530055004900540045005f00430050005f0054004f004b0045004e".hexDecode(),
                iscplin = false,
                adtkn = null,
                cid = null;
            if ("undefined" != typeof cookies) {
                if ("undefined" != typeof cookies[cpt]) {
                    iscplin = true;
                    adtkn = cookies[cpt];
                }
            }

            // if (false == iscplin) {
            if ("undefined" != typeof customerData
                && "undefined" != typeof customerData["data"]
                && "undefined" != typeof customerData["data"]["customerid"]
                && !isNaN(customerData["data"]["customerid"])
            ) {
                cid = parseFloat(customerData["data"]["customerid"]);
            }
            // }

            if ("undefined" != typeof resellerid && _self.checkCpLin() == true && _self.isProduct == true) {
                _self.requestResellerPrice(resellerid, adtkn, null, prodid, function(resp){
                    alert(("undefined" != typeof resp && "undefined" != typeof resp["status"] && true == resp["status"]) ? "Cererea a fost trimisa." : "cererea nu a fost trimisa din cauza unei erori [COD:R1]");
                });
            } else if (isByReseller == true && !isNaN(cid)) {
                _self.requestResellerPrice(resellerid, null, cid, prodid, function(resp){
                    alert(("undefined" != typeof resp && "undefined" != typeof resp["status"] && true == resp["status"]) ? "Cererea a fost trimisa. Vei primi un email cand pretul de reseller va fi alocat acestui produs." : "cererea nu a fost trimisa din cauza unei erori [COD:R2]");
                });
            }
            e.preventDefault();
        });


        $2("body").on("click", ".btnViewResellerRankDetails", function(e){
            if ($2("body").find(".popupResellerSystemDetails, .popupOverlayResellerSystemDetails").length > 0) {
                $2("body").find(".popupResellerSystemDetails, .popupOverlayResellerSystemDetails").addClass("show");
            }
            e.preventDefault();
        });
        $2("body").on("click", ".popupResellerSystemDetails .close, .popupOverlayResellerSystemDetails", function(e){
            if ($2("body").find(".popupResellerSystemDetails, .popupOverlayResellerSystemDetails").length > 0) {
                $2("body").find(".popupResellerSystemDetails, .popupOverlayResellerSystemDetails").removeClass("show");
            }
            e.preventDefault();
        });
        $2("body").on("change", "#cookieAnalyticsCheckbox", function(){
            var $inp = $2(this);
            if ("undefined" != typeof gtag) {
                if (!!$inp.is(":checked") || !!$inp.prop(":checked")) {
                    localStorage.setItem("an_strg", 1);
                    gtag('consent', 'update', {
                        'analytics_storage': 'granted',
                        'functionality_storage': "granted",
                        'security_storage': "granted"
                    });
                } else {
                    localStorage.setItem("an_strg", 0);
                    gtag('consent', 'update', {
                        'analytics_storage': 'denied',
                        'functionality_storage': "granted",
                        'security_storage': "granted"
                    });
                }
            }
        });
        $2("body").on("change", "#cookieMarketingCheckbox", function(){
            var $inp = $2(this);
            if ("undefined" != typeof gtag) {
                if (!!$inp.is(":checked") || !!$inp.prop(":checked")) {
                    localStorage.setItem("mrk_strg", 1);
                    gtag('consent', 'update', {
                        'ad_storage': 'granted',
                        'ad_user_data': 'granted',
                        'ad_personalization': 'granted',
                        'functionality_storage': "granted",
                        'security_storage': "granted"
                    });
                } else {
                    localStorage.setItem("mrk_strg", 0);
                    gtag('consent', 'update', {
                        'ad_storage': 'denied',
                        'ad_user_data': 'denied',
                        'ad_personalization': 'denied',
                        'functionality_storage': "granted",
                        'security_storage': "granted"
                    });
                }
            }
        });
        $2("body").on("click", ".productPowerNoticePopup .btnClosePopup", function(e){
            e.preventDefault();
            $2("body").find(".productPowerNoticePopup").removeClass("show");
        });

        $2("body").on("click", ".youtubeVideoEmbedLazy", function(e){
            e.preventDefault();
            var $btn = $(this),
                youtubeId = $btn.attr("data-videoid"),
                $iframe = "<iframe src='https://www.youtube.com/embed/"+youtubeId+"' style='position: absolute; top: 0; left: 0; width: inherit; height: inherit;' width='100%' height='100%' frameborder='0'></iframe>";
            $btn.html($iframe);
        });
    };

    _self.init = function(){
        _self.track();
        _self.facebookPixel();
        // _self.googleGclidEnsurer();
        //console.log("Desktop app initialized");
        _self.rewriteInterface();
        _self.handleCanOrder();
        _self.handleEvents();
        _self.returnResellerToRequestFormAfterLogin();
        _self.showResellerPrices();
        _self.googleTagManagerV4();
        _self.loadImages();
    };
};
if ("undefined" == typeof $2) {
    var $2 = jQuery.noConflict();
}

jQuery.browser = {};
(function () {
    jQuery.browser.msie = false;
    jQuery.browser.version = 0;
    if (navigator.userAgent.match(/MSIE ([0-9]+)\./)) {
        jQuery.browser.msie = true;
        jQuery.browser.version = RegExp.$1;
    }
})();
$2(document).ready(function(){
    window.PowerLaptop = new PowerLaptop();
    window.PowerLaptop.init();
});

//</script>