//used to store the default new group HTML
var newGroupHtml;

function newUser(groupId) {
    document.location.href = "../notendur/?group=" + groupId + "&add=1";
}

function viewUsers(groupId) {
    document.location.href = "../notendur/?group=" + groupId;
}

/* Create group */

function newGroup(groupGuid) {
    var container = $get("new_group_container");
    
    if(container.innerHTML == "")
        container.innerHTML = newGroupHtml;
        
    var companyId = document.getElementById("NewGroup_CompanyId").value;
    updateVendorCount(0, 'new','NewGroup_AccessVendors','new_vendor_container');
    
    var currentGroup = document.getElementById(groupGuid);
    var groupId = currentGroup.getAttribute("group").replace("group_","");
    
    if(container.className.indexOf("hide") > -1) {
        //showObject(container);
        
        var formValues = container.getElementsByTagName("input");
        
        for(var i = 0; i < formValues.length; i++) {
            var input = formValues[i];
            
            if(input.type == "text" || input.type == "hidden") {
                input.value = "";
            } else if(input.type == "checkbox") {
                input.checked = false;
            }
        }
        
        $get("NewGroup_ParentId").value = groupId;
        $get("NewGroup_Guid").value = groupGuid;
        $get("NewGroup_CompanyId").value = companyId;
        
        newGroupHtml = container.innerHTML;
        createWindow('<div id="new_group_container">' + newGroupHtml + '</div>');
        container.innerHTML = '';
    }
    else {
        hideObject(container);
    }

    ecSoftware.eMarketPlace.Web.SOAP.FrontEnd.GetGroupByGuid(groupGuid, OnGroupFound);
}

function OnGroupFound(usergroup)
{
    if(usergroup != undefined)
    {
        $get("NewGroup_CompanyId").value = usergroup.CompanyId; 
    }
}

function inheritFromParent() {
    var parentId = $get("NewGroup_Guid").value;
    ecSoftware.eMarketPlace.Web.SOAP.FrontEnd.GetGroupByGuid(parentId, OnGetParentDetails);
}

function OnGetParentDetails(results) {
    if(results != null) {
        $get("NewGroup_Name").value = results.Name;
        $get("NewGroup_CompanyId").value = results.CompanyId;
        $get("NewGroup_AccessVendors").value = results.AccessVendors;
        $get("NewGroup_AccessGroups").checked = results.AccessGroups;
        $get("NewGroup_AccessUsers").checked = results.AccessUsers;
        $get("NewGroup_AccessCompany").checked = results.AccessCompany;
        $get("NewGroup_AccessInvite").checked = results.AccessInvite;
        $get("NewGroup_AccessCostCenters").checked = results.AccessCostCenters;
        $get("NewGroup_AccessAddresses").checked = results.AccessAddresses;
        $get("NewGroup_AccessNews").checked = results.AccessNews;
        $get("NewGroup_AccessContract").checked = results.AccessContract;
        $get("NewGroup_MaxPurchase").value = (results.MaxPurchase == -1) ? "" : results.MaxPurchase;
        
        ecSoftware.eMarketPlace.Web.SOAP.FrontEnd.GetVendors(results.AccessVendors, OnGetNewList);
    }
}

function createGroup() {
    var parentId = $get("NewGroup_ParentId").value;
    var companyId = $get("NewGroup_CompanyId").value;
    var name = $get("NewGroup_Name").value;
    var accessVendors = $get("NewGroup_AccessVendors").value;
    var accessGroups = $get("NewGroup_AccessGroups").checked;
    var accessUsers = $get("NewGroup_AccessUsers").checked;
    var accessCompany = $get("NewGroup_AccessCompany").checked;
    var accessInvite = $get("NewGroup_AccessInvite").checked;
    var accessCostCenters = $get("NewGroup_AccessCostCenters").checked;
    var accessAddresses = $get("NewGroup_AccessAddresses").checked;
    var accessNews = $get("NewGroup_AccessNews").checked;
    var accessContract = $get("NewGroup_AccessContract").checked;
    var maxPurchase = ($get("NewGroup_MaxPurchase").value == "") ? "-1" : $get("NewGroup_MaxPurchase").value;
    
    deleteWindow();
    ecSoftware.eMarketPlace.Web.SOAP.FrontEnd.CreateGroup(parentId, companyId, name, accessVendors, accessGroups, accessUsers, accessCompany, accessInvite, accessCostCenters, accessAddresses, accessNews, accessContract, maxPurchase, OnGroupCreated);
}

function OnGroupCreated(results) {
    //create new row in the table
    if(results != null) { 
        var group = results;
        var parentId = group.ParentId;
        
        var parentName = document.getElementById("name_" + parentId);
        var parentRow = document.getElementById("cell_" + parentId).parentNode;
        
        var parentLevel = (parentRow.getAttribute("level") * 1);
        var parentTree = (parentRow.getAttribute("tree"));
        var nextRow = parentRow.nextSibling;
        var table = parentRow.parentNode;
                
        var newRow = document.createElement("tr");
        newRow.setAttribute("id",group.EntryId);
        newRow.setAttribute("group","group_" + group.Id);
        newRow.setAttribute("parent","group_" + group.ParentId);
        newRow.setAttribute("level", (parentLevel + 1));
        newRow.setAttribute("active", "true");
        newRow.setAttribute("tree", parentTree + group.Id + "_");
        
        if(nextRow != null && nextRow.className == "hide") {
            newRow.className = "hide";
            parentName.className = "group_icon closed_group";
        } else {
            parentName.className = "group_icon open_group";
        }
        
        var nameCell = document.createElement("td");
        nameCell.className = "group_name";
        
        nameCell.setAttribute("id","cell_" + group.Id);
        
        if( nameCell.attachEvent ){
           nameCell.attachEvent("onclick", toggleGroupsIE);
        } else {
           nameCell.setAttribute("onclick", "toggleGroups(this,true)"); 
        }
        
        nameCell.style.paddingLeft = ((parentLevel+1)*25) + "px";
        nameCell.innerHTML = '<span id="name_' + group.Id + '" class="group_icon no_subgroup">' + group.Name + '</span>';
        
        newRow.appendChild(nameCell);
        
        var newGroupLabel = Translate("groups.new_group");
        var newUserLabel = Translate("groups.new_user");
        var viewUserLabel = Translate("groups.view_users");
        var editGroupLabel = Translate("groups.edit_group");
        var disableGroupLabel = Translate("groups.disable_group");
        var deleteGroupLabel = Translate("groups.delete_group");
        
        var newGroupCell = document.createElement("td");
        newGroupCell.innerHTML = '<a class="admin_group" href="javascript:newGroup(\'' + group.EntryId + '\')">' + newGroupLabel + '</a>';
        newRow.appendChild(newGroupCell);
        
        var newUserCell = document.createElement("td");
        newUserCell.innerHTML = '<a class="admin_group" href="javascript:newUser(\'' + group.EntryId + '\')">' + newUserLabel + '</a>';
        newRow.appendChild(newUserCell);
        
        var viewUserCell = document.createElement("td");
        viewUserCell.innerHTML = '<a class="admin_group" href="javascript:viewUsers(\'' + group.EntryId + '\')">' + viewUserLabel + '</a>';
        newRow.appendChild(viewUserCell);
        
        var editGroupCell = document.createElement("td");
        editGroupCell.innerHTML = '<a name="Edit" id="edit_' + group.Id + '" class="actions_icon icon_edit" title="' + editGroupLabel + '" href="javascript:editGroup(\'' + group.EntryId + '\',\'' + group.Id + '\')"><span>' + editGroupLabel + '</span></a>';
        newRow.appendChild(editGroupCell);
        
        var disableGroupCell = document.createElement("td");
        disableGroupCell.innerHTML = '<a name="Disable" class="actions_icon icon_disable" title="' + disableGroupLabel + '" id="disable_' + group.Id + '" href="javascript:disableGroup(\'' + group.EntryId + '\')"><span>' + disableGroupLabel + '</span></a>';
        newRow.appendChild(disableGroupCell);
        
        var deleteGroupCell = document.createElement("td");
        deleteGroupCell.innerHTML = '<a name="Delete" class="actions_icon icon_delete" title="' + deleteGroupLabel + '" id="delete_' + group.Id + '" href="javascript:deleteGroup(\'' + group.EntryId + '\')"><span>' + deleteGroupLabel + '</span></a>';
        newRow.appendChild(deleteGroupCell);
        
        if(table.lastChild == parentRow) {
            table.appendChild(newRow);
        } else {
            table.insertBefore(newRow, nextRow);
        }
    }
}

/* Update group */

function editGroup(groupId, editId) {
    //Set up the edit table row for the selected group
    var editRow = document.getElementById("edit_row");
    var editGroupId = document.getElementById("edit_group_id");
    var vendors;
    var selectedVendors;
    var vendorContainer;
    
    if(editRow.className.indexOf("hide") > -1 || editGroupId.value != groupId) { 
        editGroupId.value = groupId;
        
        var groupRow = document.getElementById(groupId);
        
        var table = groupRow.parentNode;
        var nextRow = groupRow.nextSibling;
            
        table.insertBefore(editRow, nextRow);
        showCleanObject(editRow);
        
        toggleExtraIcons("edit_" + editId, "Edit", "actions_icon icon_edit_on edit_group", "actions_icon icon_edit");
        toggleExtraIcons("delete_" + editId, "Delete", "actions_icon icon_empty", "actions_icon icon_delete");
        toggleExtraIcons("disable_" + editId, "Disable", "actions_icon icon_empty", "actions_icon icon_disable");
        
        ecSoftware.eMarketPlace.Web.SOAP.FrontEnd.GetGroupByGuid(groupId, OnGetGroupDetails);
    } else {
        hideObject(editRow);
        resetIcon("edit_" + editId, "actions_icon icon_edit");
        resetIcon("delete_" + editId, "actions_icon icon_delete");
        resetIcon("disable_" + editId, "actions_icon icon_disable");
    }
}

function OnGetGroupDetails(results) {
    if(results != null) {
        $get("Group_Name").value = results.Name;
        $get("Group_AccessVendors").value = results.AccessVendors;
        $get("Group_AccessGroups").checked = results.AccessGroups;
        $get("Group_AccessUsers").checked = results.AccessUsers;
        $get("Group_AccessCompany").checked = results.AccessCompany;
        $get("Group_AccessInvite").checked = results.AccessInvite;
        $get("Group_AccessCostCenters").checked = results.AccessCostCenters;
        $get("Group_AccessAddresses").checked = results.AccessAddresses;
        $get("Group_AccessNews").checked = results.AccessNews;
        $get("Group_AccessContract").checked = results.AccessContract;
        $get("Group_MaxPurchase").value = (results.MaxPurchase == -1) ? "" : results.MaxPurchase;
        
        ecSoftware.eMarketPlace.Web.SOAP.FrontEnd.GetVendors(results.AccessVendors, OnGetEditedList);
    }
}

function updateGroup(obj) {
    var groupGuid = document.getElementById("edit_group_id").value;
    var groupId = document.getElementById(groupGuid).getAttribute("group").replace("group_","");
    var property = obj.getAttribute("id").replace("Group_","").toLowerCase();
    var updatedValue;
        
    if(property == "name" && obj.value == "") {
        createAlert(Translate("error.group_emptyname"));
    } 
    else {
        if(property == "name") {
            updatedValue = obj.value;
            $get("name_" + groupId).innerHTML = updatedValue;
        } else if(property == "maxpurchase") {
            if(obj.value == "")
                updatedValue = "-1";
            else 
                updatedValue = obj.value;
        } else {
            if(obj.checked)
                updatedValue = true;
            else if(!obj.checked)
                updatedValue = false;
        }
        
        ShowCreateWindow();
        ecSoftware.eMarketPlace.Web.SOAP.FrontEnd.UpdateGroup(groupGuid, updatedValue, property, OnGroupUpdated);
    }
}

function OnGroupUpdated(results) {
    stopUpdateWindow();
}

/* disable / enable */

function disableGroup(groupId) {
    var groupRow = document.getElementById(groupId);
    var active = groupRow.getAttribute("active").toLowerCase();
    
    if(active == "true") {
        ecSoftware.eMarketPlace.Web.SOAP.FrontEnd.DisableGroup(groupId, OnDisableGroup);
    } else {
        ecSoftware.eMarketPlace.Web.SOAP.FrontEnd.EnableGroup(groupId, OnEnableGroup);
    }
}

function OnDisableGroup(results) {
    if(results != -1) {
        var groupRow = document.getElementById("cell_" + results).parentNode;
        var active = groupRow.setAttribute("active", "false");
        var disableCell = document.getElementById("disable_" + results);

        var enableText = Translate("groups.enable_group");
        disableRow(groupRow);
        disableCell.innerHTML = "<span>" + enableText + "</span>";
        disableCell.className = "actions_icon icon_disable";
        disableCell.setAttribute("title",enableText);
    }
}

function OnEnableGroup(results) {
    if(results != -1) {
        var groupRow = document.getElementById("cell_" + results).parentNode;
        var active = groupRow.setAttribute("active", "true");
        var disableCell = document.getElementById("disable_" + results);

        var disableText = Translate("groups.disable_group");
        enableRow(groupRow);
        disableCell.innerHTML = "<span>" + disableText + "</span>";
        disableCell.className = "actions_icon icon_enable";
        disableCell.setAttribute("title",disableText);
    }
}

/* delete group */

function deleteGroup(groupId) {
    var html = '<p>' + Translate("groups.confirm_deletegroup") + '</p>' + 
    '<a class="button_green" href="javascript:confirmDeleteGroup(\'' + groupId + '\')"><span>' + Translate("forms.ok") + '</span></a><span class="hide">|</span> <a class="button_red" href="javascript:deleteAlert()"><span>' + Translate("forms.cancel") + '</span></a>';
    
    createAlert(html);
}

function confirmDeleteGroup(groupId) {
    deleteAlert();
    ecSoftware.eMarketPlace.Web.SOAP.FrontEnd.DeleteGroup(groupId, OnDeletingGroup, OnDeletingGroupFailed);
}

function OnDeletingGroup(results) {
    var tableRow = document.getElementById("cell_" + results).parentNode;
    var parentGroup = tableRow.getAttribute("parent");
    var parentId = parentGroup.replace("group_","");
    
    var cell = tableRow.getElementsByTagName("td")[0];
    var name = document.getElementById("name_" + results);

    if(name.className.indexOf("open") > -1) {
        toggleGroups(cell);
    }
    
    tableRow.parentNode.removeChild(tableRow);
    hideContainer("edit_row");
    ecSoftware.eMarketPlace.Web.SOAP.FrontEnd.HasSubGroups(parentId, OnGroupHasSubGroups);        
}

function OnDeletingGroupFailed(error) {
    createAlert(error.get_message());
}

function OnGroupHasSubGroups(results) {
    if(results != -1) {
        var parentRow = document.getElementById("name_" + results).className = "group_icon no_subgroup";
    }
}

/* expand/hide groups */

function toggleGroupsIE() {
    var currentCell = window.event.srcElement;
    toggleGroups(currentCell, true);
}

function toggleGroups(thisCell, changeIcon) {
    var currentCell = thisCell;
    
    if(currentCell.className.indexOf("no_subgroup") == -1) {
        var currentGroupName = currentCell.firstChild;
        var currentRow = currentCell.parentNode;
        var currentId = currentRow.getAttribute("group");
        var currentTree = currentRow.getAttribute("tree");
        
        if(currentGroupName.className.indexOf("no_subgroup") == -1) {
            var table = document.getElementById("group_table");
            var rows = table.getElementsByTagName("tr");
            var hasSubGroups = false;
            var hidingRows = (currentGroupName.className.indexOf("closed") > -1) ? false : true;
               
            for(var i = 0; i < rows.length; i++) {        
                var row = rows[i];
                var ignoredRows = (row.id == "edit_row" || row.className == "top_group");
                var rowParent = row.getAttribute("parent");
                var rowId = row.getAttribute("group");
                var rowTree = row.getAttribute("tree");
                
                if(!ignoredRows) {
                    var cell = row.getElementsByTagName("span")[0];
                    
                    if(hidingRows) {
                        //Close all subgroups
                        if(rowId != currentId && rowTree.startsWith(currentTree)) {
                            hasSubGroups = true;
                            row.className = "hide";
                            cell.className = "group_icon closed_group";
                        }
                    } else {
                        //Open only immediate subgroup
                        if(rowParent == currentId) {
                            hasSubGroups = true;
                            
                            var parentRow = document.getElementById(rowParent);
                            
                            if(row.className == "hide") {
                                row.className = "";
                            }
                            
                            //See if the current group has subgroups
                            if(i == rows.length-1) {
                                cell.className = "group_icon no_subgroup";
                            }
                            else if(i < rows.length-1) {
                                var nextRow = rows[i+1];
                                
                                if(nextRow.getAttribute("parent") != rowId) {
                                    cell.className = "group_icon no_subgroup";
                                }
                            }
                            
                            if(row.getAttribute("active").toLowerCase() == "false") {
                                var disableCell = document.getElementById("disable_" + rowId.replace("group_",""));
                                var enableText = Translate("groups.enable_group");
                                disableCell.setAttribute("title",enableText);
                                disableCell.innerHTML = "<span>" + enableText + "</span>";
                                disableRow(row);
                            }
                        }
                    }
                }
            }
        }
        //Change icon of the selected row
        if(changeIcon) {
            if(!hasSubGroups) {
                currentGroupName.className = "group_icon no_subgroup";
            } else {
                if(currentGroupName.className.indexOf("open") > -1) {
                    currentGroupName.className = "group_icon closed_group";
                } else {
                    currentGroupName.className = "group_icon open_group";
                }
            }
        }
    }
}

function togglePriceGroup(groupId) {

    ecSoftware.eMarketPlace.Web.SOAP.FrontEnd.togglePriceGroup(groupId); 
    
    var currentText = document.getElementById('pricegroup_' + groupId).innerHTML; 
    
    if(currentText == 'Remove') {
        document.getElementById('pricegroup_' + groupId).innerHTML = 'Add';
    }
    else {
        document.getElementById('pricegroup_' + groupId).innerHTML = 'Remove';
    }
}


