//Used to update the vendor container in the edit group window
function createVendorSearch(type, vendorsId, container) {
    
    /*
    1. Get and parse alphabet
    2. Generate HTML for vendor search
    3. Vendor search needs to be container independent.
    */
        
    var alphabet = Translate("default.alphabet").split("|");
    
    var htmlContainer = document.createElement("div");
    var vendorContainer = document.createElement("div");
    vendorContainer.setAttribute("id","vendors_container");
        
    var searchInputContainer = document.createElement("div");
    searchInputContainer.className = "vendors_search_container";
    searchInputContainer.innerHTML = '<input type="hidden" id="vendor_type" value="' + type + '" /><input type="text" id="vendor_search_input" maxlength="40" size="20" /><button onclick="searchVendors()"><span>' + Translate("common.search") + '</span></button>';
    vendorContainer.appendChild(searchInputContainer);
    
    var alphabetContainer = document.createElement("div");
    var alphabetHTML = "";
    
    for(var i = 0; i < alphabet.length; i++) {
        alphabetHTML += '<span class="hide">[</span><a href="javascript:searchVendorsByLetter(\'' + alphabet[i].toLowerCase() + '\')">' + alphabet[i].toUpperCase() + '</a><span class="hide">]</span> ';
    }
    
    alphabetContainer.innerHTML = alphabetHTML;
    vendorContainer.appendChild(alphabetContainer);
    
    var linkContainer = document.createElement("div");
    linkContainer.innerHTML = '<a href="javascript:showSelectedVendors()">' + Translate("vendors.viewall") + '</a>';
    vendorContainer.appendChild(linkContainer);
    
    var header = document.createElement("h4");
    header.innerHTML = Translate("groups.vendors");
    vendorContainer.appendChild(header);
    
    var selectedVendorsContainer = document.createElement("div");
    selectedVendorsContainer.setAttribute("id","selected_vendors");
    vendorContainer.appendChild(selectedVendorsContainer);

    var searchedVendorsContainer = document.createElement("div");
    searchedVendorsContainer.setAttribute("id","searched_vendors");
    searchedVendorsContainer.className = "hide";
    
    vendorContainer.appendChild(searchedVendorsContainer);
    htmlContainer.appendChild(vendorContainer);
    createAlert(htmlContainer.innerHTML);
    
    //Convert the vendor XML to an array of Vendors to get the names
    var vendorXML = document.getElementById(vendorsId).value;
    ecSoftware.eMarketPlace.Web.SOAP.FrontEnd.GetVendors(vendorXML, OnGetVendorList);
}

function updateVendorCount(count, type, vendorXml, container) {
    var place = document.getElementById(container);
    
    var vendorsText = (count == 1) ? " " + Translate("vendors.one_selected") + "." : " " + Translate("vendors.many_selected") + ".";
    var vendorsLink = (count > 0) ? '<div><a href="javascript:createVendorSearch(\'' + type + '\',\'' + vendorXml + '\',\'' + container + '\')">' + Translate("vendors.clicktoviewall") +'</a></div>' : '';
    var vendorsSearchLink = '<div><a href="javascript:createVendorSearch(\'' + type + '\',\'' + vendorXml + '\',\'' + container + '\')">' + Translate("vendors.modify") + '</a></div>';



    if(type == "new" || type == "edit") {
        place.innerHTML = count + vendorsText + vendorsLink + vendorsSearchLink;
    } else {
    
       place.innerHTML = (count ==0)?" ":'<span>'+ count + vendorsText + '</span>';
    }
}

function createVendorObject(prefix, id, labelText, isChecked, type) {
    var vendorType = type;
    
    var container = document.createElement("div");
    container.setAttribute("id",prefix + "_container_" + id);
    
    if(isChecked) {
        container.className = "selected";
    }

    var html = '<input type="checkbox" value="' + id + '" id="' + prefix + '_' + id + '"';    
    
    if(vendorType == "edit") {
        html += ' onclick="updateVendors(this)"';
    } else if (vendorType == "new") {
        html += ' onclick="newVendors(this)"';
    } else if (vendorType == "setting") {
        html += ' onclick="updateVendorSetting(this)"';
    } else if (vendorType == "xsetting") {
        html += ' onclick="updateUserVendorSettings(this)"';
    }
        
    if(isChecked) {
        html += ' checked="checked"';
    }
    
    html += '/>';    
    html += '<label for="' + prefix + '_' + id + '">' + labelText + '</label>';

    container.innerHTML = html;
    
    return container;
}

function showSelectedVendors() {
    var selectedContainer = document.getElementById("selected_vendors");
    selectedContainer.className = "show";
    var searchContainer = document.getElementById("searched_vendors");
    searchContainer.className = "hide";
}

function chooseVendors() {
    var container = document.getElementById("vendors_container");
    container.className = "show";
}

function searchVendors() {
    var query = document.getElementById("vendor_search_input").value;
    ecSoftware.eMarketPlace.Web.SOAP.FrontEnd.SearchVendors(query, OnVendorSearchResults);
}

function searchVendorsByLetter(letter) {
    var container = document.getElementById("searched_vendors");
    container.innerHTML = '<div style="padding-left:12px">' + Translate("common.searching") + '</div>';
    setTimeout("_searchVendorsByLetter('" + letter + "')", 500);
}

function _searchVendorsByLetter(letter) {    
    ecSoftware.eMarketPlace.Web.SOAP.FrontEnd.SearchVendorsByLetter(letter, OnVendorSearchResults);
}

function OnVendorSearchResults(results) {
    var selectedContainer = document.getElementById("selected_vendors");
    selectedContainer.className = "hide";
    var container = document.getElementById("searched_vendors");
    container.innerHTML = "";
    container.className = "show";
    var type = document.getElementById("vendor_type").value;
    
    if(results.length > 0) {
    for(var i = 0; i < results.length; i++) {
        var company = results[i];
        
        var selectedCheckBox = document.getElementById("selected_vendor_" + company.Id);
        var checked = false;

        if(selectedCheckBox != null) {
            checked = true;
        }
        
        var object = createVendorObject("vendor",company.Id, company.Name, checked, type);               
        container.appendChild(object);
    }
    } else {
        container.innerHTML = '<div style="padding-left:12px">' + Translate("common.noresults") + '</div>';
    }
}

function updateVendorsIE() {
    var currentBox = window.event.srcElement;
    updateVendors(currentBox);
}

function updateVendors(checkbox) {
    var editGroupId = document.getElementById("edit_group_id").value;
    var oldXml = document.getElementById("Group_AccessVendors").value;   
    var selectedVendor = document.getElementById("selected_vendor_" + checkbox.value);
    var container = document.getElementById("selected_vendors");

    if(checkbox.checked == true) {
        if(!selectedVendor) {
            var label = checkbox.nextSibling;
            checkbox.parentNode.className = "selected";
            var object = createVendorObject("selected_vendor",checkbox.value, label.innerHTML, true);
            container.appendChild(object);
            
            ecSoftware.eMarketPlace.Web.SOAP.FrontEnd.AddVendorToGroup(editGroupId, oldXml, checkbox.value, true, false, OnVendorsUpdated);
        }
    } else {
        if(selectedVendor) {
            checkbox.parentNode.className = "";
            var selectedVendorContainer = document.getElementById("selected_vendor_container_" + checkbox.value);
            selectedVendorContainer.parentNode.removeChild(selectedVendorContainer);
            
            ecSoftware.eMarketPlace.Web.SOAP.FrontEnd.RemoveVendorFromGroup(editGroupId, oldXml, checkbox.value, true, false, OnVendorsUpdated);
        }
    }
}

function updateVendorSettingIE() {
    var currentBox = window.event.srcElement;
    updateVendorSetting(currentBox);
}

function updateVendorSetting(checkbox) {
    var oldXml = document.getElementById("user_settings_vendors").value;   
    var selectedVendor = document.getElementById("selected_vendor_" + checkbox.value);
    var container = document.getElementById("selected_vendors");

    if(checkbox.checked == true) {
        if(!selectedVendor) {
            checkbox.parentNode.className = "selected";
            var label = checkbox.nextSibling;
            var object = createVendorObject("selected_vendor", checkbox.value, label.innerHTML, true);
            container.appendChild(object);
            
            ecSoftware.eMarketPlace.Web.SOAP.FrontEnd.AddVendorToGroup("", oldXml, checkbox.value, false, true, OnVendorSettingUpdated);
        }
    } else {
        if(selectedVendor) {
            checkbox.parentNode.className = "";
            var selectedVendorContainer = document.getElementById("selected_vendor_container_" + checkbox.value);
            selectedVendorContainer.parentNode.removeChild(selectedVendorContainer);
            
            ecSoftware.eMarketPlace.Web.SOAP.FrontEnd.RemoveVendorFromGroup("", oldXml, checkbox.value, false, true, OnVendorSettingUpdated);
        }
    }
}

function newVendorsIE() {
    var currentBox = window.event.srcElement;
    newVendors(currentBox);
}

function newVendors(checkbox) {
    var vendorsXml = document.getElementById("NewGroup_AccessVendors").value;
    var vendorId = checkbox.value;
    var dummyGuid = "00000000-0000-0000-0000-000000000000";
    
    if(checkbox.checked == true) {
        ecSoftware.eMarketPlace.Web.SOAP.FrontEnd.AddVendorToGroup(dummyGuid, vendorsXml, vendorId, false, false, OnVendorsCreated);
    } else {
        ecSoftware.eMarketPlace.Web.SOAP.FrontEnd.RemoveVendorFromGroup(dummyGuid, vendorsXml, vendorId, false, false, OnVendorsCreated);
    }   
}

function OnVendorsUpdated(results) {
    document.getElementById("Group_AccessVendors").value = results;    
    ecSoftware.eMarketPlace.Web.SOAP.FrontEnd.GetVendors(results, OnGetEditedList);
}

function OnVendorSettingUpdated(results) {
    document.getElementById("user_settings_vendors").value = results;
    ecSoftware.eMarketPlace.Web.SOAP.FrontEnd.GetVendors(results, OnGetSettingsList);
}

function OnVendorsCreated(results) {
    document.getElementById("NewGroup_AccessVendors").value = results;    
    ecSoftware.eMarketPlace.Web.SOAP.FrontEnd.GetVendors(results, OnGetNewList);
}

function OnGetNewList(results) {
    OnGetVendorList(results, 'new', 'NewGroup_AccessVendors', 'new_vendor_container');
}

function OnGetEditedList(results) {
    OnGetVendorList(results, 'edit', 'Group_AccessVendors', 'vendor_container');
}

function OnGetSettingsList(results) {
    OnGetVendorList(results, 'setting', 'user_settings_vendors', 'vendor_container');
}

function OnGetVendorList(results, type, xml, vendors) {
    var container = document.getElementById("selected_vendors");
    
    if(!type)
        type = document.getElementById("vendor_type").value;
        
    if(container) {
        container.innerHTML = "";
     
        for(var i = 0; i < results.length; i++) {
            var company = results[i];
                    
            var object = createVendorObject("selected_vendor", company.Id, company.Name, true, type);
            container.appendChild(object);
        }
    }    
        
    if(!xml || !vendors)
        if(type == "edit") {
            xml = "Group_AccessVendors";
            vendors = "vendor_container";
        } else if(type == "new") {
            xml = "NewGroup_AccessVendors";
            vendors = "new_vendor_container";
        } else if(type == "setting") {
            xml = "user_settings_vendors";
            vendors = "vendor_container";
        } else {
            xml = "user_settings_vendors";
            vendors = "vendor_container";
        }
    
    if(type != "setting" || results.length > 5 ) {
    document.getElementById("select_vendor").checked = true;
        updateVendorCount(results.length, type, xml, vendors);
    } 
    else if(type == "setting" && results.length == 0)
    {
     document.getElementById("reset_vendor").checked = true;
     updateVendorCount(results.length, type, xml, vendors);
    }
    else {
    document.getElementById("select_vendor").checked = true;
        container = document.getElementById(vendors);
        container.innerHTML = "";
        
        for(var j = 0; j < results.length; j++) {
            var vendorcompany = results[j];
                    
            var vendorobject = createVendorObject("filtered_vendor", vendorcompany.Id, vendorcompany.Name, true, "x" + type);
            container.appendChild(vendorobject);
        }
    }
    
    OnUserSettingsUpdated();
}

