marceloorigoni.com.ar / NB Market on Br-Ba

// ==UserScript==
// @name        NB Market on Br-Ba
// @namespace   nb_m
// @description Adds extra functionality to the Neuron Ball Market. 
// @include     http://www.neuronball.com/*/market/
// @version     1.1
// @grant       none
// ==/UserScript==

/** Global Variables **/

var neuron_list_market = [];
var start_list_market = 0;
var prev_start_list_market = [];
var neurons_loaded = [];

/** Extra and extended functions **/

var fetch_market_results = function(qs){
  return $.ajax({
    type: 'GET',
    url: qs,
    error: function () {
        $("#from_market").empty();
        $("#from_market").append('<div class="placeholder">« Change search parameters</div>');
    },
    success: function (xml) {}
  });    
};

var get_neurons_in_market = function(qs, start, type){
    var neurons = [], args = [],a, kv, k, last;
    qs = qs.substring(1);
    args = qs.split('&');
    for(a in args){
        kv = args[a].split('=');
        k = kv[0];
        if(k == 'start'){
            kv[1] = start;
        }
        args[a] = kv.join('=');
    }
    qs = '?' + args.join('&');

    neurons.push(fetch_market_results("/en/aj/market/players/" + qs));    
    $.when.apply(this, neurons).done(function () {
        fill_list(arguments[0], type);
        if(neuron_list_market.length < NEURONS_PER_PAGE && arguments[0].length > 0){
            get_neurons_in_market(qs, start + NEURONS_PER_PAGE, type);
        }else{
            show_neurons_market(last);
        }
    });
};

var fill_list = function(){
    var list, type, start;
    list = arguments[0];
    type = arguments[1];
    for(i in list){
        if(neuron_list_market.length < NEURONS_PER_PAGE){
            start_list_market++;
            page_size++;
            if(list[i].type_id == $('#neuron_type').val() || $('#neuron_type').val() == '-'){
                neuron_list_market.push(list[i]);
            }
        }
    }
}

var show_neurons_market = function(last){
    list = neuron_list_market;
    $("#from_market").empty();
    if(typeof(list[0]) == "undefined") {
        $("#from_market").append('<div class="placeholder">This query matches no Neurons, sorry</div>');
    } else {
        neurons_loaded = list;
        var to_append = "<div class='clearfix'>";
        for(idx in list) {
            console.log(list[idx]);
            to_append += $("#template_neuron").html().
                replace("#neuron_url#", list[idx].url).
                replace(/#neuron_id#/g, list[idx].id).
                replace("#neuron_name#", list[idx].name).
                replace("#neuron_price#", list[idx].price)
        }
        to_append += "</div>";
        $("#from_market").append(to_append);
        
        for(idx in list)
        {
            var canvas = new PlayerView(document.getElementById("neuron"+list[idx].id), new ViewSize(20), {});
            var canvas_options = {
                pattern: list[idx].pattern,
                color1: list[idx].main_tint,
                color2: list[idx].secondary_tint,
                number: list[idx].number,
                eyes: list[idx].eyes,
                type_id: list[idx].type_id,
                booster_active: list[idx].booster_active
            };
            canvas.setParams(canvas_options);
            canvas.anim = true;
            neuron_canvas_list.push(canvas);
        }
    }

    $("#page_up, #page_down").css("visibility","hidden");
    if(start_list_market > 0) { $("#page_down").css("visibility","visible"); }
    if(list.length == NEURONS_PER_PAGE) { $("#page_up").css("visibility","visible"); }
    $("#from_market").append($("#template_pages").html().replace("#page#", page));
}

var show_current_neuron = function (current){
     var current_neuron;
     for(idx in neurons_loaded)
     {
         if(current == neurons_loaded[idx].id) {
             current_neuron = neurons_loaded[idx];
             break;
         }
     }

     $("#neuron_presentation").html(
         $("#template_neuron_presentation").html().
         replace(/#url#/g, current_neuron.url).
         replace(/#level#/g, current_neuron.level).
         replace("#name#", current_neuron.name).
         replace("#ai_kind#", current_neuron.ai_kind).
         replace("#price#", current_neuron.price)
     );

     $("#neuron_presentation #buy_neuron").unbind();
     if(current_neuron.can_buy)
     {
         $("#neuron_presentation #buy_neuron").css("visibility", "visible");
         $("#neuron_presentation #buy_neuron").on("click", function(evt) {
             evt.preventDefault();
             if($(this).hasClass("need-confirm")) {
                 $(this).html("Click to confirm");
                 $(this).removeClass("need-confirm");
             } else {
                 $(this).html("<img src='"+NB_CONF.static_url+"img/ranking-loader.gif' />");
                 $.ajax({
                     type: "POST",
                     url: current_neuron.purchase_url,
                     beforeSend: function(xhr, settings) {
                         xhr.setRequestHeader("X-CSRFToken", NB_CONF.csrf_token);
                     },
                     success: function(data){
                         if(typeof data != "undefined" && data.error == "need-validation")
                         {
                             alert("You need to validate your team to buy a player.");
                             $('#neuron_presentation').slideUp();
                         }
                         else if(typeof data != "undefined" && data.error == "not-authorized")
                         {
                             alert("You cannot buy a player you have once owned.");
                             $('#neuron_presentation').slideUp();
                         }
                         else
                         {
                             document.location.href = current_neuron.url;
                         }
                     },
                     error: function() { }
                 });
             }
         });
     }
    var neuron_options = {
        pattern: current_neuron.pattern,
        color1: current_neuron.main_tint,
        color2: current_neuron.secondary_tint,
        number: current_neuron.number,
        eyes: current_neuron.eyes,
        type_id: current_neuron.type_id,
        booster_active: current_neuron.booster_active
    };
    neurondetail.setParams(neuron_options);
    neurondetail.anim = true;
    $("#neuron_presentation").slideDown();    
}

var market_search = function(qs, welcome, start)
        {
            var type = 0;
            neuron_list_market = [];
            neurons_loaded = [];
            page_size = 0;
            // stops current canvases
            if(neuron_canvas_list.length > 0) {
                for(var idx in neuron_canvas_list) {
                    neuron_canvas_list[idx].anim = false;
                }
            }

            if(!start){
                start = start_list_market;
            }
            console.log(start);
            if($.inArray(start,prev_start_list_market) == -1){
              prev_start_list_market.push(start); 
            }

            if(!qs) {
                var qs = "?", args = [];
                  args.push("start="+start);
                  args.push("num="+NEURONS_PER_PAGE);
                  args.push("price_min="+$("#min_price").val());
                  args.push("price_max="+$("#max_price").val());
                  args.push("lvl_min="+$("#level_slider").slider("option", "value"));
                  if($("#ai_kinds").val() != "-") {
                    args.push("ai_kind="+$("#ai_kinds").val());
                  }
                qs += args.join("&");
            }
            
            $("#neuron_presentation").slideUp();
            $("#from_market").empty();
            $("#from_market").append("<div class='placeholder'><img src='"+NB_CONF.static_url+"img/ranking-loader.gif' /></div>")

            var list = [];
            get_neurons_in_market(qs, start, type);
        };

/** Elements **/

$fz = $('<div class="filter-zone">Neuron Speciality<br></div>');
$sel = $('<select id="neuron_type" class="form-control"></select>');
$all = $('<option value="-">All</option>');
$std = $('<option value="0">Standard</option>');
$flx = $('<option value="1">Flex</option>');
$eco = $('<option value="2">Eco</option>');
$str = $('<option value="3">Stretch</option>');
$tou = $('<option value="4">Tough</option>');
$trb = $('<option value="5">Turbo</option>');
$elc = $('<option value="6">Electro</option>');
$ght = $('<option value="7">Ghost</option>');
$ang = $('<option value="8">Angry</option>');
$elt = $('<option value="9">Elite</option>');

$sel.append($all);
$sel.append($std);
$sel.append($flx);
$sel.append($eco);
$sel.append($str);
$sel.append($tou);
$sel.append($trb);
$sel.append($elc);
$sel.append($ght);
$sel.append($ang);
$sel.append($elt);
$fz.append($sel);

/** Events **/

$('.market-filters').prepend($fz);
$('.market-filters').css('height','500px');

$("#neuron_results").off("click");
$("#market_search").off("click");
$("#ai_kinds").off("click");
$("#min_price").off("click");
$("#max_price").off("click");
$("#neuron_type").off("click");
$("#from_market").off("click");

$("#neuron_results").on("click", "#page_down", function(evt) {
    evt.preventDefault();
    page--;
    start_list_market = prev_start_list_market[page-1];
    market_search();
});

$("#neuron_results").on("click", "#page_up", function(evt) {
    evt.preventDefault();
    page++;
    market_search();
});

$("#market_search").on("click", function(evt) {
    evt.preventDefault(); 
    page = 1;
    prev_start_list_market = [];
    market_search();
});

$("#ai_kinds, #min_price, #max_price, #neuron_type").on("change", function(evt){
    evt.preventDefault(); 
    page = 1;
    prev_start_list_market = [];
    market_search();    
});

$("#from_market").on("click", ".market-neuron", function(evt){
    evt.preventDefault();
    show_current_neuron($(this).attr("data-pk"));
});