var dota_items;
var dota_itemsets_delete = [];

function renderitemdetails(itemcode) {
    if (!dota_items)
        $.ajax({
            type: "GET",
            url: 'items.php',
            dataType: "json",
            async: false,
            success: function (data, textStatus) {
                dota_items = data;
            }
        });

    var itemdata = getitembycode(itemcode);
    if (itemdata) {
        var itemtable = $('<table />').addClass("item-info-table");
        if(itemdata.name) {
            $('<tr />').append($('<td />').html('Name ')).append($('<td />').html(itemdata.name)).appendTo(itemtable);
        }
        if(itemdata.shop) {
            $('<tr />').append($('<td />').html('Shop')).append($('<td />').html(itemdata.shop)).appendTo(itemtable);
        }
        if(itemdata.description) {
            $('<tr />').append($('<td />').html('Description')).append($('<td />').html(itemdata.description)).appendTo(itemtable);
        }
        if(itemdata.cost) {
            $('<tr />').append($('<td />').html('Cost')).append($('<td />').html(itemdata.cost)).appendTo(itemtable);
        }

        $('<tr />').append($('<td />').html('Total Cost')).append($('<td />').html(calculatecost(itemdata.code))).appendTo(itemtable);
        
        if(itemdata.strength) {
            $('<tr />').append($('<td />').html('Strength')).append($('<td />').html(itemdata.strength)).appendTo(itemtable);
        }
        if(itemdata.agility) {
            $('<tr />').append($('<td />').html('Agility')).append($('<td />').html(itemdata.agility)).appendTo(itemtable);
        }
        if(itemdata.intelligence) {
            $('<tr />').append($('<td />').html('Intelligence')).append($('<td />').html(itemdata.intelligence)).appendTo(itemtable);
        }
        if(itemdata.damage) {
            $('<tr />').append($('<td />').html('Damage')).append($('<td />').html(itemdata.damage)).appendTo(itemtable);
        }
        if(itemdata.armor) {
            $('<tr />').append($('<td />').html('Armor')).append($('<td />').html(itemdata.armor)).appendTo(itemtable);
        }
        if(itemdata.hp) {
            $('<tr />').append($('<td />').html('HP')).append($('<td />').html(itemdata.hp)).appendTo(itemtable);
        }
        if(itemdata.mana) {
            $('<tr />').append($('<td />').html('Mana')).append($('<td />').html(itemdata.mana)).appendTo(itemtable);
        }
        if(itemdata.hp_regen) {
            $('<tr />').append($('<td />').html('HP regen')).append($('<td />').html(itemdata.hp_regen)).appendTo(itemtable);
        }
        if(itemdata.mana_regen) {
            $('<tr />').append($('<td />').html('Mana regen')).append($('<td />').html(itemdata.mana_regen)).appendTo(itemtable);
        }
        if(itemdata.moveplus) {
            $('<tr />').append($('<td />').html('Move')).append($('<td />').html(itemdata.moveplus)).appendTo(itemtable);
        }
        if(itemdata.movepercent) {
            $('<tr />').append($('<td />').html('Move %')).append($('<td />').html(itemdata.movepercent)).appendTo(itemtable);
        }

        return itemtable;
    } else {
        return null;
    }
}

function renderitemtree(itemcode)
{
    if (!dota_items)
        $.ajax({
            type: "GET",
            url: 'items.php',
            dataType: "json",
            async: false,
            success: function (data, textStatus) {
                dota_items = data;
            }
        });

    var itemdata = getitembycode(itemcode);
    var totalcost = 0;
    var itemtable = $("<table />").addClass("itemcost-table");
    var itemrow = $("<tr />").appendTo(itemtable);

    if(dota_items && itemdata){
        totalcost = itemdata.cost;

        // ITEM IMAGE
        var headcolumn = $("<td />").append(
            $("<img />").css({
                "border":"0px"
            }).attr({
                "src":"items/" + itemdata.code + ".gif",
                "title": itemdata.name
            })).appendTo(itemrow);

        $("<div />").html(itemdata.cost).appendTo(headcolumn);
        $("<div />").html(calculatecost(itemcode)).appendTo(headcolumn);

        // LOCATION
        $("<td />").append(
            $("<img />").css({
                "border":"0px"
            }).addClass("location").attr({
                "src":"locations/" + itemdata.shop_code + ".gif"
            })).appendTo(itemrow);

        // SPACER
        $("<td />").append($("<div />").html("&nbsp;")).appendTo(itemrow);

        var subitems = itemdata.receipe.split(",");
        for (var i=0; i<subitems.length; i++) {
            var subitemdata = getitembycode(subitems[i]);
            if (subitemdata){
                // ITEM IMAGE
                var headsubcolumn = $("<td />").append(
                    $("<img />").css({
                        "border":"0px"
                    }).addClass("subitem").attr({
                        "src":"items/" + subitemdata.code + ".gif",
                        "title": subitemdata.name
                    })).appendTo(itemrow);

                $("<div />").html(subitemdata.cost).appendTo(headsubcolumn);
                $("<div />").html(calculatecost(subitemdata.code)).appendTo(headsubcolumn);

                // LOCATION
                $("<td />").append(
                    $("<img />").css({
                        "border":"0px"
                    }).addClass("location").attr({
                        "src":"locations/" + subitemdata.shop_code + ".gif"
                    })).appendTo(itemrow);
                    
                // SPACER
                $("<td />").append($("<div />").html("&nbsp;")).appendTo(itemrow);
            }
        }
    }

    return itemtable;
}

function calculatecost(itemcode, depth){
    if (!depth) {
        depth = 0;
    }
    else {
        depth = depth + 1;
    }
    
    var itemdata = getitembycode(itemcode);
    var cost = parseInt(itemdata.cost);
    var subitems = itemdata.receipe.split(",");
    for (var i=0; i<subitems.length; i++) {
        var subitemdata = getitembycode(subitems[i]);
        if (subitemdata && depth < 4){
            cost = cost + calculatecost(subitemdata.code, depth);
        }
    }
    return cost;
}

function getitembycode(itemcode) {
    for(var i=0;i<dota_items.length;i++){
        if (dota_items[i].code == itemcode) {
            return dota_items[i];
        }
    }
    return null;
}

function additemset(){
    var itemsetcontainer = $("<div />").addClass("itemset-container").appendTo("#itemsets");
    var itemsettable = $("<table />").addClass("itemset-table").appendTo(itemsetcontainer);

    for(var i = 0; i < 6; i++) {
        var slotElement = $("<td />").css({
            "width":"48px"
        }).append($("<div />").addClass("item-container").html("&nbsp;"));
        
        var colspan = 2;

        if (itemsettable[0].rows.length != Math.floor(i/colspan) + 1)
        {
            itemsettable.append("<tr />");
        }
        $(itemsettable[0].rows[Math.floor(i/colspan)]).append(slotElement);

        // clear by right clicking
        slotElement.bind("mousedown", function(obj) {
            if (obj.button == 2) {
                $(this).removeData("dota-item");
                $(this).empty().append($("<div />").addClass("item-container").html("&nbsp;"));
            }
        });
				
        // prevent the right button context menu from popping up.
        slotElement.bind("contextmenu",function(e){
            return false;
        });

        // drop!
        slotElement.droppable();
        slotElement.bind('drop', function(event, ui) {
            // clear out previously dropped item
            $(this).empty().data("dota-item",$(ui.draggable).draggable("option","dota-item"));

            var clone = $(ui.draggable).clone(false).removeClass().addClass("item-contained");
            clone.draggable({
                "helper": "clone",
                "dota-item": $(ui.draggable).draggable("option","dota-item")
            });

            $(this).append(clone);
        });
    }

    var textarea = $("<textarea />").css({
        "width":"96px",
        "height":"30px"
    });
    $("<tr />").append($("<td />").attr({
        "colSpan":colspan
    }).append(textarea)).prependTo(itemsettable);

    var options = $("<td />").attr({
        "colSpan":colspan
    });
    var removeoption = $("<a />").attr({
        "href":"#remove_itemset"
    }).html("remove");
    removeoption.data("itemset",itemsetcontainer);
    removeoption.click(function(){
        // Add the itemset in the "delete-queue" !!
        if ($(this).data("itemset").data("itemset_id")) {
            dota_itemsets_delete.push($(this).data("itemset").data("itemset_id"));
        }

        $(this).data("itemset").remove();
    });
    options.append(removeoption);
    options.append(" - ");

    // Show information like cost and where to buy items.
    var infooption = $("<a />").attr({
        "href":"#remove_itemset"
    }).html("info");

    infooption.data("itemset",itemsetcontainer);
    infooption.click(function(){
        var isc = $(this).data("itemset");
        $("#itemset_cost_dialog").empty();

        var $t = $("<table />").appendTo("#itemset_cost_dialog");
        var $r = $("<tr />").appendTo($t);
        var $c = $("<td />").css({
            "padding":"8px"
        }).appendTo($r);
        var i=0;

        $(".ui-droppable", isc).each(function(){
            if ($(this).data("dota-item")){
                if (i>2) {
                    i=0;
                    $("<td />").css({
                        "border":"solid 1px #E5CC80"
                    }).append($("<div />").html("&nbsp;")).appendTo($r);
                    $c = $("<td />").css({
                        "padding":"8px"
                    }).appendTo($r);
                }
                $c.append(renderitemtree($(this).data("dota-item")));
                i++;
            }
        });
        $("#itemset_cost_dialog").css({
            "display":"inline"
        });
        $("#itemset_cost_dialog").css({
            "margin-left":
            parseInt($("#itemset_cost_dialog").width() / -2) + "px"
        });
        $("#itemset_cost_dialog").css({
            "margin-top":
            parseInt($("#itemset_cost_dialog").height() / -2) + "px"
        });
    });
    options.append(infooption);

    $("<tr />").append(options).prependTo(itemsettable);
}

function renderitembyid(itemid) {
    var itemcode;
    for(var i=0;i<dota_items.length;i++){
        if (dota_items[i].id == itemid) {
            itemcode = dota_items[i].code;
            break;
        }
    }    
    return renderitem(itemcode, "item-contained");
}

function renderitem(itemcode, classname) {
    var item_icon = $("<div />");
    var itemdata = getitembycode(itemcode);

    item_icon.append($("<img />").css({
        "border":"0px"
    }).attr({
        "src":"items/" + itemcode + ".gif",
        "title": itemdata.name
    }));

    item_icon.addClass(classname);

    item_icon.draggable({
        "helper": "clone",
        "dota-item": itemcode
    });

    return item_icon;
}

function loaditemssync(){
    if (!dota_items)
        $.ajax({
            type: "GET",
            url: 'items.php',
            dataType: "json",
            async: false,
            success: function (data, textStatus) {
                dota_items = data;
            }
        });
}

function loaditems(){
    $.getJSON('items.php', function(data) {
        dota_items = data;
        for (var idx in data) {
            var item_icon = renderitem(data[idx].code, "item-icon");

            if ("" == data[idx].receipe) {
                item_icon.appendTo("#basic");
            }
            else {
                item_icon.appendTo("#recipe");
            }            
        }
    });
}
