﻿/* contains code for ctrl-m functionality */
var ManageIt = (function() {
    var manageItReady = false;

    var displayMessage = function(message, delay) {
        if (typeof(message) == "boolean") {
            if (message) {
                $.blockUI();
            } else {
                $.unblockUI();
            }
        } else if (typeof(message) == "number") {
            setTimeout(function() { $.unblockUI(); }, message);
        } else {
            $.blockUI(message);
            if (typeof(delay) == "number")
                displayMessage(delay);
        }
    };

    var ignoreError = function(xhrequest, textStatus, errorThrown, elem) { 
        //alert(errorThrown);
    };
    
    var loadBusinessIntel = function(data) {
        var output = "";
        
        var intelCount = data.intels.length;
        if (intelCount == 0) {
            output = "No current intelligence available for this customer and/or parts.";
        } else {
            for (var i = 0; i < intelCount; i++)
            {
                output += '<div style="border-bottom:solid 1px black; margin-bottom:10px;">On ' + data.intels[i].creationDate + ', ' + 
                    data.intels[i].createdByName + ' said, <div>';
                if (data.intels[i].customerName != '')
                    output += "Customer Name: " + data.intels[i].customerName + "<br/>";
                if (data.intels[i].partNumber != "")
                    output += "Part Number: " + data.intels[i].partNumber + "<br/>";
                output += '"' + data.intels[i].intel + '"</div></div>';
            }
        }
        $("#intelOutput").html(output);
    };
    
    var loadCartHeaderData = function(data) {
        var result = JSC.ConvertServerDataToLocal(data);

        if (result.serverDataOk && !result.error) {
            $("#headerReferenceNumber").text(result.basketId);
            $("#headerCartName").val(result.cartName);
            $("#headerContactName").val(result.contactName);
            $("#headerContactPhone").val(result.contactPhone);
            $("#headerContactEmail").val(result.contactEmail);
            $("#headerContactName").attr("contactid", result.contactId);
            $("#headerCustomerName").val(result.customerName);
            $("#headerCustomerName").attr("originalName", result.customerName);
            $("#headerCustomerNumber").val(result.customerNumber);
            $("#headerRequestDate").val(result.requestDate);
            $("#headerQuoteExpiration").val(result.quoteExpiration);
            $("#headerPriceList").val(result.priceList);
            $("#headerExternalComments").val(result.externalComments);
            $("#headerInternalComments").val(result.internalComments);
            if (result.quoteStatus == null || result.quoteStatus == '')
                $("#headerQuoteStatus").val("TBD");
            else
                $("#headerQuoteStatus").val(result.quoteStatus);
            $("#headerOwnedByDisplay").val(result.ownerEmail);
            $("#headerOwnedBy").val("none");
            $("#headerLastUpdatedBy").text(result.lastUpdatedByEmail);
            
            loadingIndicator(false);
            $("#currentQuoteHeader").attr("headerLoaded", "yes");
            
            $("#currentQuoteHeaderWrapper").show();

            if (result.cartName == "My Cart") {
                $("#headerCartName").attr("disabled", "true");
                $("#headerCustomerName").focus();
            } else {
                $("#headerCartName").removeAttr("disabled");
                $("#headerCartName").focus();
            }
            
            if (result.basketId == "")
                $("#headerUpdate1,#headerUpdate2").hide();
            else
                $("#headerUpdate1,#headerUpdate2").show();
                
            // Crm Opportunity action
            JSC.ServerPost( {'action':'findOpportunityByQuote','quoteNumber':result.basketId}, setUpCrmOpportunity, ignoreError, null);
            //$("#createOpportunity").hide();
            //$("#opportunityDetails").hide();
            //$("#openOpportunity").hide();
        }
    };
    
    // Crm Opportunity function - handles result of being at new quote
    var setUpCrmOpportunity = function(data) {
        if (data.length > 10) {
            // got a GUID!
            $("#openOpportunity").html(data);
            $("#openOpportunity").show();
            $("#createOpportunity").hide();
            $("#opportunityDetails").hide();
        }
        else {
            var needToLoad = ($("#opportunityOwner").attr("ownersLoaded") == "no");
            if (needToLoad) {
                JSC.ServerPost( {'action':'getOpportunityOwners'}, getOpportunityOwnersResult, ignoreError, null);
            }
            $("#createOpportunity").show();
            $("#opportunityDetails").hide();
            $("#openOpportunity").hide();
        }
    };

    // Crm Opportunity function - handles result of creating opportunity name
    var buildOpportunityDefaultNameResult = function(data) {
        $("#opportunityName").val(data);
    }
    
    // Crm Opportunity function - handles result of creating new opportunity
    var createCrmOpportunityResult = function(data) {
        if (data.length > 10) {
            // got a GUID?
            if (data.substring(0,1) == "<"){
                $("#openOpportunity").html(data);
                $("#openOpportunity").show();
                $("#createOpportunity").hide();
                $("#opportunityDetails").hide();
            }
            else {
                if (data.substring(4,10) == "<!DOCT") {
                    alert("Unable to create an opportunity for this quote. An unexcepted error has occured. The error has been reported to the IS department.");
                }
                else {
                    alert(data);
                }
                $("#createOpportunity").show();
                $("#opportunityDetails").hide();
                $("#openOpportunity").hide();
            }
        }
        else {
            var needToLoad = ($("#opportunityOwner").attr("ownersLoaded") == "no");
            if (needToLoad) {
                JSC.ServerPost( {'action':'getOpportunityOwners'}, getOpportunityOwnersResult, ignoreError, null);
            }
            $("#createOpportunity").show();
            $("#opportunityDetails").hide();
            $("#openOpportunity").hide();
        }
    };

    // Crm Opportunity function - handles result of building the owners list
    var getOpportunityOwnersResult = function(data) {
        $("#opportunityOwner").html(data);
        $("#opportunityOwner").attr("ownersLoaded", "yes");
    }
    
    var loadCartLinesData = function(data) {
        var result = JSC.ConvertServerDataToLocal(data);

        if (result.serverDataOk && !result.error) {
            // reference to the table
            var table = $("#linesDisplayTable");
            table.unbind();
            
            // remove any lines that current exist
            table.find("tr.dataLine").remove();
            
            var lineCount = result.lines.length;
            var orgNames = [];
            orgNames[0] = 'Not Set';
            orgNames[252] = 'PLD';
            orgNames[372] = 'MEX';
            orgNames[572] = 'TEX';
            for (var i = 0; i < lineCount; i++) {
                var curLine = result.lines[i];
                
                var tr = $('<tr class="dataLine" valign="top" lineId="' + curLine.lineId + '"></tr>');
                
                // description
                var cell = '<td class="ctrl-m-cart-line" style="font-size:small;"><input type="text" size="35" id="lineUserDescription"' + 
                    ' value="' + curLine.description.replace('"', '&quot;') + '">' + '<br/>' +
                    curLine.partNumber + '</td>';
                tr.append($(cell));
                
                // warehouse
                var shipWarehouse = (curLine.shipWarehouse == '' ? curLine.defaultShippingOrgId : curLine.shipWarehouse);
                var availableOrgs = curLine.availableOrgs.split(',');
                if (shipWarehouse == "") {
                    shipWarehouse = availableOrgs[0];
                }
                
                var cell = '<td class="ctrl-m-cart-line" align="center"><select id="lineShipWarehouse">';
                for (var j = 0; j < availableOrgs.length; j++) {
                    cell += '<option value="' + availableOrgs[j] + '"' + ((shipWarehouse == availableOrgs[j]) ? ' selected' : '') +
                    '>' + orgNames[availableOrgs[j]] + '</option>';
                }
                cell += '</select><br/>DSO:' + curLine.defaultShippingOrg + '</td>';
                tr.append($(cell));
                
                // aro
                var cell = '<td class="ctrl-m-cart-line" align="center"><input type="text" id="lineDaysARO" size="2"' +
                    ' value="' + (curLine.quotedARO == '' ? (curLine.leadTimeDays == 0 ? "30" : curLine.leadTimeDays) : curLine.quotedARO) + 
                    '" style="text-align:right;"></td>';
                tr.append($(cell));
                
                // schedule date
                var cell = '<td class="ctrl-m-cart-line" style="width:115px;" align="center"><input type="text" id="lineScheduleDate" size="8"' +
                    ' value="' + curLine.scheduleDate + '" style="text-align:center; float:left; margin-left:10px;" class="manage-it-date-picker-line"><br style="clear:left;"/>MLT/ATP Date:<br/>' + curLine.expectedShipDate + '</td>';
                tr.append($(cell));

                var cell = '<td class="ctrl-m-cart-line" style="width:115px;" align="center"><input type="text" id="lineRequestDate" size="8"' +
                    ' value="' + curLine.requestDate + '" style="text-align:center; float:left; margin-left:10px;" class="manage-it-date-picker-line"><br style="clear:left;"/>Customer Date:<br/>' + curLine.customerDate + '</td>';
                tr.append($(cell));

                var cell = '<td class="ctrl-m-cart-line" style="width:115px;" align="center"><input type="text" id="linePromiseDate" size="8"' +
                    ' value="' + curLine.promiseDate + '" style="text-align:center; margin-left:10px;" disabled>' + 
                    (curLine.atpFailure ? '<br style="clear:left;"/>ATP Date:<br/>' + curLine.latestATPDate : '') + '</td>';
                tr.append($(cell));

                table.append(tr);
            }
            
            $(".manage-it-date-picker-line").datePicker({startDate:'01/01/2007'});
            
            $("#linesReferenceNumber").text(result.basketId);
                
            loadingIndicator(false);
            $("#currentQuoteLines").attr("linesLoaded", "yes");
            $("#currentQuoteLinesWrapper").show();
        }
    };
    
    var loadingIndicator = function(show) {
        if (show) {
            $("#manageItLoadingWrapper").show();
            $("#manageItContentWrapper").hide();
        } else {
            $("#manageItLoadingWrapper").hide();
            $("#manageItContentWrapper").show();
        }
    };
    
    var selectCtrlMButton = function(buttonSelector, selectedButton) {
        $(buttonSelector).css("backgroundColor", "#FFFFFF");
        $(buttonSelector).attr("buttonSelected", "no");
        $(selectedButton).css("backgroundColor", "#FFFFCC");
        $(selectedButton).attr("buttonSelected", "yes");
    };
    
    var setUpCtrlM = function() {
        if (Ubiquitous.User().internalUser) {
            $(document).keydown(function(e) {
                if (e.keyCode == 77 && e.ctrlKey) {
                    if (Ubiquitous.IsCtrlMBlocked()) {
                        displayMessage("Ctrl-M will be available in a few seconds.", 2000);
                        return;
                    }

                    e.preventDefault();
                    var t = '<span style="font-size:medium; font-weight:bold;">Telect Order Entry - Manage It!</span>';
                    var a = '#TB_inline?height=' + ($.browser.msie ? '585' : '560') + '&amp;width=850&amp;inlineId=pelotonManageItWrapper';
                    var g = false;
                    tb_show(t, a, g, setUpManageItWindow, function() { JSCE.Fire("ManageItClosed", null, "jquery.thickbox.tb_show"); } );
	            }
            });
        }
        
        JSC.ServerPost({"action":"getPossibleCartOwners"}, function(data) {
            var optionHtml = "<option value='none'> -- choose a new owner -- </option>";
            var results = eval("(" + data + ")");
            var ownerCount = results.length;
            for (var i = 0; i < ownerCount; i++)
            {
                optionHtml += "<option value='" + results[i].email + "'>" + results[i].name + "</option>";
            }
            $("#headerOwnedBy").html(optionHtml);
        }, ignoreError, false);
    };
    
    var setUpManageItWindow = function() {
        if (manageItReady && $("#currentQuoteWrapper").css("display") != "none" && $("#currentQuoteHeaderWrapper").css("display") != "none")
            $("#headerCartName").focus();

        if (!manageItReady) {
            // set up the 'tabs'
            $("div.ctrl-m-button-main").wrap('<div style="background-color:#CC8822; width:10em; float:left; margin-right:20px;"></div>');
            $("div.ctrl-m-button-current").wrap('<div style="background-color:#CC8822; width:6em; float:left; margin-right:10px;"></div>');
            $("div.ctrl-m-button").corner("round 4px").parent().css('padding', '2px').corner("round 6px");
            $("div.ctrl-m-button").mouseover(function() { $(this).css("backgroundColor", "#CCCCCC"); });
            $("div.ctrl-m-button").mouseout(function() { 
                if ($(this).attr("buttonSelected") == "no")
                    $(this).css("backgroundColor", "#FFFFFF");
                else
                    $(this).css("backgroundColor", "#FFFFCC");
            });
            
            $("#findQuotes").click(function() {
                $("#findQuoteWrapper").show();
                $("#currentQuoteWrapper").hide();
                $("#createQuoteWrapper").hide();
                selectCtrlMButton("div.ctrl-m-button-main", this);
                $("#findQuoteByCustomerName").focus();
            });
            $("#currentQuote").click(function() {
                // the main section
                $("#findQuoteWrapper").hide();
                $("#currentQuoteWrapper").show();
                $("#createQuoteWrapper").hide();
                selectCtrlMButton("div.ctrl-m-button-main", this);
                
                // the current section
                $("#currentQuoteHeader").click();
                
            });
            $("#createQuote").click(function() {
                // the main section
                $("#findQuoteWrapper").hide();
                $("#currentQuoteWrapper").hide();
                $("#createQuoteWrapper").show();
                selectCtrlMButton("div.ctrl-m-button-main", this);
                $("#createCartName").focus();
            });
            $("#currentQuoteHeader").click(function() {
                var needToLoad = ($(this).attr("headerLoaded") == "no");
                
                if (needToLoad) {
                    loadingIndicator(true);
                } else {
                    loadingIndicator(false);
                    $("#currentQuoteHeaderWrapper").show();
                }
                $("#currentQuoteLinesWrapper").hide();
                $("#currentQuoteIntelWrapper").hide();
                selectCtrlMButton("div.ctrl-m-button-current", this);
                
                // if we need to load the header
                if (needToLoad) {
                    JSC.ServerPost( {"action":"cartHeader"}, loadCartHeaderData, ignoreError, null);
                } else {
                    $("#headerCustomerName").focus();
                }
            });
            $("#currentQuoteLines").click(function() {
                var needToLoad = ($(this).attr("linesLoaded") == "no");
                
                if (needToLoad) {
                    loadingIndicator(true);
                } else {
                    loadingIndicator(false);
                    $("#currentQuoteLinesWrapper").show();
                }
                $("#currentQuoteHeaderWrapper").hide();
                $("#currentQuoteIntelWrapper").hide();
                selectCtrlMButton("div.ctrl-m-button-current", this);

                // if we need to load the lines
                if (needToLoad) {
                    JSC.ServerPost( {"action":"cartLines"}, loadCartLinesData, ignoreError, null);
                }
            });
            $("#currentQuoteIntel").click(function() {
                var needToLoad = ($(this).attr("intelLoaded") == "no");
                
                if (needToLoad) {
                    loadingIndicator(true);
                } else {
                    loadCartHeaderData(false);
                    $("#currentQuoteIntelWrapper").show();
                }
                
                $("#currentQuoteHeaderWrapper").hide();
                $("#currentQuoteLinesWrapper").hide();
                selectCtrlMButton("div.ctrl-m-button-current", this);

                // if we need to load the lines
                if (needToLoad) {
                    JSC.ServerPost( {"action":"getIntel"}, function(data) {
                        var result = eval("(" + data + ")");

                        if (result.customerId == "" || result.customerId == 0) {
                            $("#newIntelForCustomer").val("0");
                            $("#newIntelCustomerRow").hide();
                        } else {                        
                            $("#newIntelForCustomer").val(result.customerId);
                            $("#newIntelCustomer").text(result.customerName);
                            $("#newIntelCustomerRow").show();
                        }
                        
                        var partHtml = '<option value="0">-- no part; customer only--</option>';
                        var partCount = result.parts.length;
                        if (partCount > 0) {
                            for (var i = 0; i < partCount; i++)
                            {
                                partHtml += '<option value="' + result.parts[i].productId + '">' + 
                                    result.parts[i].partNumber + '</option>';
                            }
                            $("#newIntelPart").html(partHtml);
                            $("#newIntelPart").get(0).selectedIndex = 0;
                            $("#newIntelPartRow").show();
                        } else {
                            $("#newIntelPartRow").hide();
                        }
                        
                        if ((result.customerId == "" || result.customerId == 0) && partCount == 0) {
                            $("#newIntelData").val("Unable to record business intelligence on quotes with an Oracle customer or Oracle parts.");
                            $("#newIntelSubmit").hide();
                        } else {
                            $("#newIntelData").val("");
                            $("#newIntelSubmit").show();
                        }
                        
                        loadBusinessIntel(result);

                        $("#currentQuoteIntel").attr("intelLoaded", "yes");
                        $("#currentQuoteIntelWrapper").show();
                        loadingIndicator(false);
                    }, ignoreError, null);
                }
            });

            // function we'll use when we get back a list of matching baskets
            var _showMatchingBaskets = function(data) { 
                loadingIndicator(false);
                $("#serverOutput").unbind();
                $("#serverOutput").html(data);
                $("#findQuoteResults").tablesorter();
                var additionalHeadersLink = $("#showAdditionalHeaders");
                if (additionalHeadersLink.size() > 0) {
                    $("#additionalHeaders").hide();
                    $("#showAdditionalHeaders").click(function() { $("#additionalHeaders").toggle(); });
                }
                $("#findQuoteResults a.search-results-select").click(function() {
                    var postData = {};
                    postData["action"] = "changeCart";
                    postData["cartName"] = $(this).text();
                    
                    JSC.ServerPost(postData, function() { 
                        $("#currentQuoteHeader").attr("headerLoaded", "no");
                        $("#currentQuoteLines").attr("linesLoaded", "no");
                        
                        //tb_remove();
                        //window.location.href = "/www/Orders/ViewCart.aspx";
                        JSCE.Fire("CartSelected", null, "ManageIt.setUpManageItWindow._showMatchingBaskets");
                        
                        $("#findQuoteWrapper").hide();
                        $("#currentQuoteWrapper").show();
                        $("#createQuoteWrapper").hide();
                        selectCtrlMButton("div.ctrl-m-button-main", $("#currentQuote").get(0));
                
                        $("#currentQuoteLines").click();
                    }, ignoreError, null);
                }); 

                $("#findQuoteResults a.search-results-copy").click(function() {
                    loadingIndicator(true);
                    
                    var postData = {};
                    postData["action"] = "copyCart";
                    postData["basketId"] = $(this).attr("basketId");
                    
                    JSC.ServerPost(postData, function() { 
                        loadingIndicator(false);
                        $("#currentQuoteHeader").attr("headerLoaded", "no");
                        $("#currentQuoteLines").attr("linesLoaded", "no");
                        $("#currentQuote").click();
                        JSCE.Fire("CartSelected", null, "ManageIt._showMatchingBaskets");
                    }, ignoreError, null);
                }); 
            
                $("#additionalHeaders a.search-results-select").click(function() {
                    var postData = {};
                    postData["action"] = "changeCart";
                    postData["cartName"] = $(this).text();
                    
                    JSC.ServerPost(postData, function() { 
                        $("#currentQuoteHeader").attr("headerLoaded", "no");
                        $("#currentQuoteLines").attr("linesLoaded", "no");
                        
                        //tb_remove();
                        //window.location.href = "/www/Orders/ViewCart.aspx";
                        JSCE.Fire("CartSelected", null, "ManageIt.setUpManageItWindow._showMatchingBaskets");
                        
                        $("#findQuoteWrapper").hide();
                        $("#currentQuoteWrapper").show();
                        $("#createQuoteWrapper").hide();
                        selectCtrlMButton("div.ctrl-m-button-main", $("#currentQuote").get(0));
                
                        $("#currentQuoteLines").click();
                    }, ignoreError, null);
                }); 

                $("#additionalHeaders a.search-results-copy").click(function() {
                    loadingIndicator(true);
                    
                    var postData = {};
                    postData["action"] = "copyCart";
                    postData["basketId"] = $(this).attr("basketId");
                    
                    JSC.ServerPost(postData, function() { 
                        loadingIndicator(false);
                        $("#currentQuoteHeader").attr("headerLoaded", "no");
                        $("#currentQuoteLines").attr("linesLoaded", "no");
                        $("#currentQuote").click();
                        JSCE.Fire("CartSelected", null, "ManageIt._showMatchingBaskets");
                    }, ignoreError, null);
                }); 
            };
            
            
            // what we want to do before we call for matching baskets
            var _prepForMatchingBasketRequest = function(inputToLeavePopulated) {
                $("#findQuoteResults").unbind();
                
                $("input.find-quote-input").each(function() {
                    if (this.id.indexOf(inputToLeavePopulated) < 0)
                        $(this).val("");
                });
                
                loadingIndicator(true);
            };
            
            // searching by date range ... the most complicated
            var _zeroPad = function(num) {
                var s = '0' + num;
                return s.substring(s.length - 2);
            };
            var format = "mm/dd/yyyy";
            var end = new Date();
            var start = new Date();
            start.setDate(end.getDate() - 90);
            var endFormatted = format.split('yyyy').join(end.getFullYear())
			    .split('yy').join((end.getFullYear() + '').substring(2))
			    .split('mm').join(_zeroPad(end.getMonth()+1))
			    .split('dd').join(_zeroPad(end.getDate()));
            var startFormatted = format.split('yyyy').join(start.getFullYear())
			    .split('yy').join((start.getFullYear() + '').substring(2))
			    .split('mm').join(_zeroPad(start.getMonth()+1))
			    .split('dd').join(_zeroPad(start.getDate()));
    			
            $("#findQuoteByDateRangeStart").val(startFormatted);
            $("#findQuoteByDateRangeEnd").val(endFormatted);
            
            $("#findQuoteByDateRangeStart,#findQuoteByDateRangeEnd").keydown(function(e) {
                if (e.keyCode == 13) {
                    e.preventDefault();

                    _prepForMatchingBasketRequest("DateRange");
                    
                    JSC.ServerPost({'action':'findQuoteByDateRange','startDate':$("#findQuoteByDateRangeStart").val(),'endDate':$("#findQuoteByDateRangeEnd").val()},
                        _showMatchingBaskets, ignoreError, null);
                }
            });
            
            // search by customer name
            $("#findQuoteByCustomerName").autocomplete("/www/CustomerNameAutocomplete.tsc", 
                {minChars:3, mustMatch:1, cacheLength:10, onItemSelect: function(item) {
                    if (item.extra[0] != null) {
                        $("#findQuoteByCustomerNumber").val(item.extra[0]);
                        
                        _prepForMatchingBasketRequest("CustomerName");
                        
                        var customerNumber = item.extra[0];
                        JSC.ServerPost({'action':'findQuoteByCustomerNumber','customerNumber':customerNumber},
                            _showMatchingBaskets, ignoreError, null);
                    }
                }}
            );
            
            $("#findQuoteByCustomerNumber").keydown(function(e) {
                if (e.keyCode == 13) {
                    e.preventDefault();

                    _prepForMatchingBasketRequest("CustomerNumber");
                    
                    var customerNumber = $(this).val();
                    JSC.ServerPost({'action':'findQuoteByCustomerNumber','customerNumber':customerNumber},
                        _showMatchingBaskets, ignoreError, null);
                }
            });
            
            $("#findQuoteByEmailAddress").keydown(function(e) {
                if (e.keyCode == 13) {
                    e.preventDefault();
                    
                    _prepForMatchingBasketRequest("EmailAddress");
                    
                    var email = $(this).val();
                    JSC.ServerPost({'action':'findQuoteByEmailAddress','emailAddress':email},
                        _showMatchingBaskets, ignoreError, null);
                }
            });
            
            $("#findQuoteByReference").keydown(function(e) {
                if (e.keyCode == 13) {
                    e.preventDefault();
                    
                    _prepForMatchingBasketRequest("Reference");
                    
                    var refNum = $(this).val();
                    JSC.ServerPost({'action':'findQuoteByReferenceNumber','referenceNumber':refNum}, 
                        _showMatchingBaskets, ignoreError, null);
                }
            });

            $("#findQuoteByPartNumber").autocomplete("/www/PartNumberAutocomplete.tsc", 
                {minChars:4, cacheLength:10, onItemSelect: function(item) {
                    _prepForMatchingBasketRequest("PartNumber");
                        
                    var partNumber = item.extra[0];
                    JSC.ServerPost({'action':'findQuoteByPartNumber','partNumber':partNumber},
                        _showMatchingBaskets, ignoreError, null);
                }}
            );
            
            $("#findQuoteByPONumber").keydown(function(e) {
                if (e.keyCode == 13) {
                    e.preventDefault();
                    
                    _prepForMatchingBasketRequest("PONumber");
                    
                    var poNum = $(this).val();
                    JSC.ServerPost({'action':'findQuoteByPONumber','poNumber':poNum}, 
                        _showMatchingBaskets, ignoreError, null);
                }
            });

            $("#findQuoteByStatus").change(function() {
                if ($(this).val() != "") {
                    _prepForMatchingBasketRequest("QuoteStatus");
                    JSC.ServerPost({'action':'findQuoteByQuoteStatus','quoteStatus':$(this).val()},
                        _showMatchingBaskets, ignoreError, null);            
                }
            });
            
            $("#findQuoteMyRecent").click(function() {
                _prepForMatchingBasketRequest();
                    
                JSC.ServerPost({'action':'findQuoteByMe'}, _showMatchingBaskets, ignoreError, null);
            });

            $("#findQuoteMyRecent2,#recentQuotes").click(function() {
                $("#findQuotes").click();
                _prepForMatchingBasketRequest();
                JSC.ServerPost({'action':'findQuoteByMe'}, _showMatchingBaskets, ignoreError, null);
            });
            
            $("#findQuoteMine").click(function() {
                _prepForMatchingBasketRequest();
                
                JSC.ServerPost({'action':'findQuotesIOwn'}, _showMatchingBaskets, ignoreError, null);
            });

            $("#findQuoteMine2,#myQuotes").click(function() {
                $("#findQuotes").click();
                _prepForMatchingBasketRequest();
                JSC.ServerPost({'action':'findQuotesIOwn'}, _showMatchingBaskets, ignoreError, null);
            });
            
            // autocomplete on the customer name field in the header section            
            $("#headerCustomerName").autocomplete("/www/CustomerNameAutocomplete.tsc", 
                {minChars:3, cacheLength:10, onItemSelect: function(item) {
                    $("#headerCustomerNumber").val(item.extra[0]);
                }}
            );

            // erase customer number when name changes            
            $("#headerCustomerName").blur(function() {
                var that = $(this);
                if (that.attr("originalName") != that.val()) {
                    that.attr("originalName", that.val());
                    $("#headerCustomerNumber").val("");
                }
            });

            // autocomplete on the contact name field in the header section            
            $("#headerContactName").autocomplete("/www/ContactNameAutocomplete.tsc", 
                {minChars:3, cacheLength:5, onItemSelect: function(item) {
                    $("#headerContactName").attr("contactid", item.extra[0]);
                }}
            );

            // autocomplete on other fields in the header section
            $("#headerPriceList").autocomplete("/www/PriceListNameAutocomplete.tsc", {minChars:3, cacheLength:5});
            //$("#headerOwnedBy").autocomplete("/www/UserEmailAutocomplete.tsc", {minChars:3, cacheLength:5});
            
            // updating the header
            $("#headerUpdate1,#headerUpdate2").click(function() {
                loadingIndicator(true);

                var postData = JSC.GatherPostData($("#currentQuoteHeaderWrapper"), null);
                postData["action"] = "updateCartHeader";
                postData["basketId"] = $("#headerReferenceNumber").text();
                postData["contactId"] = $("#headerContactName").attr("contactid");
                JSC.ServerPost( postData, function(data) { 
                    loadCartHeaderData(data); 
                    
                    JSCE.Fire("CartUpdated", null, "ManageIt.setUpManageItWindow");
                }, 
                ignoreError, null);
            });
            
            // updating the lines
            $("#linesUpdate1,#linesUpdate2").click(function() {
                loadingIndicator(true);

                var postData = {};
                postData["action"] = "updateCartLines";
                postData["basketId"] = $("#linesReferenceNumber").text();
                var lineCount = 0;
                $("#linesDisplayTable").find("tr.dataLine").each(function() {
                    var that = $(this);
                    
                    postData["lineId." + lineCount] = that.attr("lineId");
                    postData["lineUserDescription." + lineCount] = that.find("#lineUserDescription").val();
                    postData["lineShipWarehouse." + lineCount] = that.find("#lineShipWarehouse").val();
                    postData["lineDaysARO." + lineCount] = that.find("#lineDaysARO").val();
                    postData["lineScheduleDate." + lineCount] = that.find("#lineScheduleDate").val();
                    postData["lineRequestDate." + lineCount] = that.find("#lineRequestDate").val();
                    postData["linePromiseDate." + lineCount] = that.find("#linePromiseDate").val();

                    lineCount++;
                });
                
                postData["lineCount"] = lineCount;
                
                JSC.ServerPost( postData, function(data) { 
                    JSCE.Fire("CartUpdated", null, "Ubiquitous.SetUpManageItWindow"); 
                }, ignoreError, null);
            });
            
            // business intelligence actions
            $("#newIntel").click(function() {
                $("#newIntelWrapper").show();
                $("#newIntelData").val("");                    
            });
            $("#newIntelSubmit").click(function() {
                loadingIndicator(true);
                var postData = JSC.GatherPostData($("#newIntelWrapper"), null);
                postData["action"] = "addIntel";
                JSC.ServerPost(postData, function(data) {
                    var result = eval("(" + data + ")");
                    $("#newIntelWrapper").hide();
                    loadBusinessIntel(result);
                    loadingIndicator(false);
                }, ignoreError, null);
            });
            
            // autocomplete on fields in the create section
            $("#createCustomerName").autocomplete("/www/CustomerNameAutocomplete.tsc", {minChars:3, cacheLength:10});
            //$("#createPriceList").autocomplete("/www/PriceListNameAutocomplete.tsc", {minChars:3, cacheLength:5});

            // creating a new cart
            $("#createUpdate").click(function() {
                loadingIndicator(true);
                var postData = JSC.GatherPostData($("#createQuoteWrapper"), null);
                postData["action"] = "createCart";
                JSC.ServerPost( postData, function(data) {
                    loadingIndicator(false);
                    $("#currentQuoteHeader").attr("headerLoaded", "no");
                    $("#currentQuoteLines").attr("linesLoaded", "no");
                    $("#headerOwnedBy").val("none");
                    $("#currentQuote").click();
                    JSCE.Fire("CartSelected", null, "ManageIt.createUpdate");
                }, ignoreError, null);
            });
                        
            // click on a tab
            if (window.location.toString().toLowerCase().indexOf("viewcart.aspx") >= 0 ||
                    window.location.toString().toLowerCase().indexOf("checkout.aspx") >= 0 ||
                    window.location.toString().toLowerCase().indexOf("checkout2.aspx") >= 0) {    
                $("#currentQuote").click();
            } else {
                $("#findQuotes").click();
                $("#findQuoteByCustomerName").focus();
            }
            
            $(".manage-it-date-picker-header").datePicker({startDate:'01/01/2007'});
            
            // Crm Opportunity actions            
            $("#opportunityDetails").hide();
            $("#createOpportunity").hide();
            $("#openOpportunity").hide();

            $('#btnCreateOpportunity').click(function() {
                var custName = $("#headerCustomerName").val();
                var description = $("#headerCartName").val();
                var quoteNumber = $("#headerReferenceNumber").text();
                
                elem = document.getElementById('foreCastBookDate');
                elem.value = $("#headerQuoteExpiration").val();
                
                JSC.ServerPost( {'action':'buildOpportunityDefaultName','customerName':custName,'description':description,'quoteNumber':quoteNumber}, buildOpportunityDefaultNameResult, ignoreError, null);
                $("#createOpportunity").hide();
                $("#opportunityDetails").show();
            });

            $('#cancelOpportunitySave').click(function() {
                $("#createOpportunity").show();
                $("#opportunityDetails").hide();
            });

            $('#btnSaveOpportunity').click(function() {
                var customerNumber = $('#headerCustomerNumber').val();
                var quoteNumber = $('#headerReferenceNumber').html();
                var forecastDate = $('#foreCastBookDate').val();

                if (!isValidDate(forecastDate, "MDY")) {
                    alert("The date is not in the correct format. 'MM/DD/YYYY' " + forecastDate); 
                }
                else {
                    elem = document.getElementById('opportunityName');
                    var oppName = elem.value;
                    if (oppName == ''){
                        alert('An Opportunity Name is Required. Save Cancelled');
                    }
                    else {
                        elem = document.getElementById('opportunityType');
                        var oppType = elem.options[elem.selectedIndex].value;
                        if (oppType == '') {
                            alert('An Opportunity Type must be Selected. Save Cancelled.');
                        }
                        else {
                            elem = document.getElementById('opportunityOwner');
                            var oppOwner = elem.options[elem.selectedIndex].value;
                            if (oppOwner == '') {
                                alert('An Opportunity Owner must be Selected. Save Cancelled.');
                            }
                            else {
                                JSC.ServerPost( {'action':'createCrmOpportunity',
                                                    'customerNumber':customerNumber,
                                                    'quoteNumber':quoteNumber,
                                                    'forecastDate':forecastDate,
                                                    'opportunityType':oppType,
                                                    'opportunityName':oppName,
                                                    'opportunityOwner':oppOwner}, 
                                                    createCrmOpportunityResult, ignoreError, null);
                            }
                        }
                    }
                }
            });

            manageItReady = true;
        }
    };
    
    var updateCartLines = function(data) {
        // repull the cartlines data
        JSC.ServerPost( {"action":"cartLines"}, function(data) { 
            var currentlyDisplayed = $("#currentQuoteLinesWrapper").css("display");
            loadCartLinesData(data); 
            if (currentlyDisplayed == "none")
                $("#currentQuoteLinesWrapper").hide(); 
        }, ignoreError, null);
    };
    
    return {
        Init : function() {
            JSCE.Subscribe("UbiquitousLoaded", setUpCtrlM);
            JSCE.Subscribe("CartUpdated", updateCartLines);
            JSCE.Subscribe("CartItemAdded", updateCartLines);
            JSCE.Subscribe("CartItemRemoved", updateCartLines);
            JSCE.Subscribe("CartLeadTimesUpdated", updateCartLines);
        }
    };
})();

ManageIt.Init();