IMVU.data.selectedProducts = {};
IMVU.data.tags = {};

function toggleProduct(pid, checked) {
    var update = IMVU.getInputElementsByNameValue("my_products", pid);
    for (var i=0;i<update.length;i++) {
        update[i].checked = checked;
    }
    
    var product = Dom.get(""+pid);
    
    if (checked) {
        IMVU.data.selectedProducts[pid] = IMVU.data.products[pid];
        Dom.addClass(product, "selected");
    } else {
        delete IMVU.data.selectedProducts[pid];
        Dom.removeClass(product, "selected");
    }
    
    updateSelectedProducts();
    updateSelectedTags();
};

function toggleAllProducts(checked) {
    var update = IMVU.getInputElementsByName("my_products");
    for (var i=0;i<update.length;i++) {
        update[i].checked = checked;
        var pid = update[i].value;
    
        var product = Dom.get(""+pid);
        
        if (checked) {
            IMVU.data.selectedProducts[pid] = IMVU.data.products[pid];
            Dom.addClass(product, "selected");
        } else {
            delete IMVU.data.selectedProducts[pid];
            Dom.removeClass(product, "selected");
        }       
    }
        
    updateSelectedProducts();
    updateSelectedTags();
};

function updateSelectedProducts() {
    var selected = Dom.get("selected-products");
    selected.innerHTML = "";
    
    var count = 0;
    for (var pid in IMVU.data.selectedProducts) {
        var node = document.createElement("li");
        var product = IMVU.data.selectedProducts[pid];
        node.innerHTML = '<a href="' + product.url + '">' + product.name + '</a>';
        selected.appendChild(node);
        count++;
    }
    
    var nosel = Dom.get("no_selected_products");
    var multitag = Dom.get("multi_tag");
    
    if (count > 0) {
        multitag.style.display = "block";
        nosel.style.display = "none";
    } else {
        multitag.style.display = "none";
        nosel.style.display = "block";
    }
    
    IMVU.data.selectedProductsCount = count;
};

function updateSelectedTags() {
    var selected = Dom.get("selected-tags");
    var count=0;
    
    IMVU.data.tags = {};
    
    for (var pid in IMVU.data.selectedProducts) {
        var product = IMVU.data.selectedProducts[pid];
        var tags = product.tags;
        
        for (var t=0;t<tags.length;t++) {
            var tag = tags[t];
            if (tag) {
                if (! IMVU.data.tags[tag]) {
                    IMVU.data.tags[tag] = [pid];
                    if (count == 0) {
                        selected.innerHTML = "";
                    }
                    var node = document.createElement("li");
                    node.innerHTML = "<span class=\"tag\">" + tag + "</span> <a class=\"tag-link\" href=\"javascript:deleteTagMulti('" + tag + "');\"><img src=\"/common/skin/base/icons/icn_delete.gif\" style=\"vertical-align:middle\" /></a>";
                    selected.appendChild(node);
                    count++;
                } else {
                    IMVU.data.tags[tag][IMVU.data.tags[tag].length] = pid;
                }
            }
        }
    }
    if (count == 0) {
        selected.innerHTML = "";
    }
};

var dlg_delete = new YAHOO.widget.SimpleDialog("dlg_delete", { zIndex:1000, visible:false, context:["product_widget_overlay", "tl", "tl"], width:"300px", modal:true, draggable:false, close:false });
var dlg_delete_buttons = [ { text:"OK", handler:null }, { text:"Cancel", handler:null, isDefault:true } ];

function deleteTag(tag, pid) {
    var product = IMVU.data.products[pid];
    
    var handleDeleteOK = function() {
        for (var t=0;t<product.tags.length;t++) {
            if (product.tags[t]) {
                if (tag.toLowerCase() == product.tags[t].toLowerCase()) {
                    product.tags[t] = null;
                    break;
                }
            }
        }
        populateDataOverlay(pid);
        
        commitDeleteTag(pid, tag);
        
        updateSelectedTags();
        this.hide();
    };
    
    var handleDeleteCancel = function() {
        this.hide();
    };

    dlg_delete.setHeader("Delete tag?");
    dlg_delete.setBody("Are you sure you want to remove tag <b>\"" + tag + "\"</b> from \"" + product.name + "\"?");
    
    dlg_delete_buttons[0].handler = handleDeleteOK;
    dlg_delete_buttons[1].handler = handleDeleteCancel;
    dlg_delete.cfg.queueProperty("buttons", dlg_delete_buttons);
    
    dlg_delete.render(document.body);
    dlg_delete.cfg.refireEvent("context");
    dlg_delete.show();
}

function deleteTagMulti(tag) {
    var handleDeleteOK = function() {
        var pid_array = [];
        for (var pid in IMVU.data.selectedProducts) {
            pid_array[pid_array.length] = pid;
                        
            var product = IMVU.data.selectedProducts[pid];
            for (var t=0;t<product.tags.length;t++) {
                if (product.tags[t]) {
                    if (tag.toLowerCase() == product.tags[t].toLowerCase()) {
                        product.tags[t] = null;
                        break;
                    }
                }
            }       
        };
        
        commitDeleteTagMulti(pid_array, tag);
        
        updateSelectedTags();
        this.hide();
    };
    
    var handleDeleteCancel = function() {
        this.hide();
    };
    
    dlg_delete.setHeader("Delete tag?");
    dlg_delete.setBody("Are you sure you want to remove tag <b>\"" + tag + "\"</b> from " + IMVU.data.selectedProductsCount + " selected products?");
    
    dlg_delete_buttons[0].handler = handleDeleteOK;
    dlg_delete_buttons[1].handler = handleDeleteCancel;
    dlg_delete.cfg.queueProperty("buttons", dlg_delete_buttons);
    
    dlg_delete.render(document.body);
    dlg_delete.cfg.refireEvent("context");
    dlg_delete.center();
    dlg_delete.show();
};

function addTag() {
    var tag = IMVU.productwidget.txt_addtag.value;
    var pid = IMVU.productwidget.pid;
    var product = IMVU.data.products[pid];
    product.tags[product.tags.length] = tag;
    populateDataOverlay(pid);
    
    commitAddTag(pid, tag);
    
    IMVU.productwidget.txt_addtag.value = "";
    IMVU.productwidget.txt_addtag.focus();
    updateSelectedTags();
};

function addTagMulti() {
    //var tag = IMVU.productwidget.txt_addtag.value;
    var mt_txt_addtag = Dom.get("mt_txt_addtag");
    var tag = mt_txt_addtag.value;
    
    var pid_array = [];
    for (var pid in IMVU.data.selectedProducts) {
        pid_array[pid_array.length] = pid;
        var product = IMVU.data.selectedProducts[pid];
        product.tags[product.tags.length] = tag;
    };
    
    commitAddTagMulti(pid_array, tag);
                
    mt_txt_addtag.value = "";
    mt_txt_addtag.focus();
    updateSelectedTags();
};

function addTagViaEnter(e) {
    if (e.keyCode == 13) {
        addTag();
    }
};

function addTagViaEnterMulti(e) {
    if (e.keyCode == 13) {
        addTagMulti();
    }
};

var handleSuccess = function(o) {
    //console.log(o);    
};

var handleFailure = function(o) {
    //console.log(o);
};

var callback = {
    success : handleSuccess,
    failure : handleFailure
}

function commitAddTag(pid, tag) {
    YAHOO.util.Connect.asyncRequest('GET', '/shop/service/svc_tagger.php?method=add&pid=' + pid + '&tag=' + tag, callback);
};

function commitAddTagMulti(pid_array, tag) {
    var pid_params = "";
    for (var p=0;p<pid_array.length;p++) {
        var pid = pid_array[p];
        pid_params += "pid[]=" + pid;
        if (p != pid_array.length-1) {
            pid_params += "&";
        }
    }
    
    YAHOO.util.Connect.asyncRequest('GET', '/shop/service/svc_tagger.php?method=add&' + pid_params + '&tag=' + tag, callback);
};

function commitDeleteTag(pid, tag) {
    YAHOO.util.Connect.asyncRequest('GET', '/shop/service/svc_tagger.php?method=delete&pid=' + pid + '&tag=' + tag, callback);
    
};

function commitDeleteTagMulti(pid_array, tag) {
    var pid_params = "";
    for (var p=0;p<pid_array.length;p++) {
        var pid = pid_array[p];
        pid_params += "pid[]=" + pid;
        if (p != pid_array.length-1) {
            pid_params += "&";
        }
    }
    
    YAHOO.util.Connect.asyncRequest('GET', '/shop/service/svc_tagger.php?method=delete&' + pid_params + '&tag=' + tag, callback);
};

function showAddTagForm() {
    Dom.get("pwd_tags_add_link").style.display = "none";
    Dom.get("pwd_tags_add_form").style.display = "block";
    Dom.get("txt_addtag").focus();
};

function showAddTagFormMulti() {
    Dom.get("mt_tags_add_link").style.display = "none";
    Dom.get("mt_tags_add_form").style.display = "block";
    Dom.get("mt_txt_addtag").focus();
};

productWidgetLoadEvent.subscribe(function() {
    IMVU.productwidget.tags = Dom.get("pwd_tags");
    IMVU.productwidget.tags_list = Dom.get("pwd_tags_list");
    
    IMVU.productwidget.btn_addtag = Dom.get("btn_addtag");
    IMVU.productwidget.txt_addtag = Dom.get("txt_addtag");
    
    IMVU.productwidget.tags.style.display = "block";
    
    YAHOO.util.Event.addListener(IMVU.productwidget.txt_addtag, "keyup", addTagViaEnter);
    
    populateDataOverlayEvent.subscribe(function(type,args,obj) {
        var prod = args[0];
        
        var tagCount = 0;
        
        if (prod.tags.length > 0) {
            IMVU.productwidget.tags_list.style.display = "block";
            var tagHTML = "";
            for (var t=0;t<prod.tags.length;t++) {
                var tag = prod.tags[t];
                if (tag) {
                    tagCount++;
                    tagHTML += ("<span class=\"tag\">" + tag + "</span> <a class=\"tag-link\" href=\"javascript:deleteTag('" + tag + "', " + prod.id + ");\"><img src=\"/common/skin/base/icons/icn_delete.gif\" style=\"vertical-align:middle\" /></a>");
                    if (t != prod.tags.length-1) {
                        tagHTML += "<br />";
                    }
                }
            }
            IMVU.productwidget.tags_list.innerHTML = tagHTML;
        }
        
        
        if (tagCount == 0) {
            IMVU.productwidget.tags_list.style.display = "none";
        }
        
        dataOverlay.cfg.refireEvent("xy");
        IMVU.shadow("product_widget_data");
    });
    
    dataOverlay.beforeShowEvent.subscribe(function() {
        Dom.get("pwd_tags_add_link").style.display = "block";
        Dom.get("pwd_tags_add_form").style.display = "none";
    });
});