jQuery(document).ready(function() {
    setInitialDisplay();

    jQuery("#orderStatusButton").click(function() {
        validateAndSubmit();
    });

    jQuery('#radOnline').click(function() {
        showOnlineOrder();
    });

    jQuery('#radHomeDelivery').click(function() {
        showHomeDelivery();
    });

    jQuery('.btn_prevPage').click(function() {
        jQuery('#resultsDisplay').empty();
        jQuery('#resultsContainer').fadeOut('slow', function() {
            jQuery('#resultsContainer').css('display', 'none');
            if (jQuery.browser.safari) {
                jQuery('#searchContainer').css('display', 'block');
            }
            else {
                jQuery('#searchContainer').fadeIn('slow');
            }
        });
    });

    jQuery(document).keypress(function(e) {
        var evt = (window.event) ? window.event : e;
        if ((evt.which && evt.which == 13) || (evt.keyCode && evt.keyCode == 13)) {
            e.preventDefault();
            validateAndSubmit();
        }
    });
});

function setInitialDisplay() {
    if (jQuery('#hdnOperationalMode').val().toLowerCase() == 'return') {
        jQuery('#onlineOptions').css('display', 'block');
    }
    
    if(jQuery('#hdnDisplayMode').val().toLowerCase() == 'home') {
        showHomeDelivery();
    }
    else if(jQuery('#hdnDisplayMode').val().toLowerCase() == 'online') {
        showOnlineOrder();
    }
    else {
        var qs = new QueryStringManager();
        
        if(qs.containsKey('type')) {
            var type = qs.getValue('type', '');
            
            if(type.toLowerCase() == 'homedelivery') {
                jQuery('#radHomeDelivery').attr('checked', true);
                showHomeDelivery();
            }
        }
    }
}

function showHomeDelivery() {
        jQuery('#hdnTrackingType').val('home');
        jQuery('#radOnline').attr('checked', false);
        jQuery('#onlineOptions').slideUp('normal');
        jQuery('#WebOrderContent').css('display', 'none');
        jQuery('#homeDeliveryOptions').slideDown('normal');
        jQuery('#HDOrderContent').fadeIn('slow');
        jQuery('#submitPanel').fadeIn('slow');
}

function showOnlineOrder() {
        jQuery('#hdnTrackingType').val('order');
        jQuery('#radHomeDelivery').attr('checked', false);
        jQuery('#homeDeliveryOptions').slideUp('normal');
        jQuery('#HDOrderContent').css('display', 'none');
        jQuery('#onlineOptions').slideDown('normal');
        jQuery('#WebOrderContent').fadeIn('slow');
        jQuery('#submitPanel').fadeIn('slow');
}

function validateAndSubmit() {
    var type = jQuery('#hdnTrackingType').val();
    var dataString = 'control=OrderSearchResults';
    var errMsg = 'The following errors were found on your entry:';
    var frmValid = true;
    var ajaxProceed = true;
    var orderNum = '';
    var zip = '';
    
    switch(type.toLowerCase()) {
        case 'order':
            if (arguments.length == 2) {
                orderNum = arguments[1];
                zip = arguments[2];
            }
            else {
                orderNum = jQuery('#txtOrderNumber').val();
                zip = jQuery('#txtZip').val();
            }

            if (orderNum.length == 0 || !isNumeric(orderNum)) {
                frmValid = false;
                errMsg += '\n\tInvalid order number';
            }

            if (zip.length == 0 || !isZipValid(zip)) {
                frmValid = false;
                errMsg += '\n\tInvalid zip code';
            }
            else if (zip.length == 9)
                zip = zip.substring(0, 5) + '-' + zip.substring(5);


            var orderType = '';

            if (frmValid && jQuery('#hdnOperationalMode').val().toLowerCase() != 'return') {
                dataString += '&type=online&zipCode=' + zip + '&orderNumber=' + orderNum;
            }
            break;
                    
        case 'home':
            var hdNum = jQuery('#txtHDNumber').val();

            if(hdNum.length == 0 || !isValidHDNum(hdNum)) {
                frmValid = false;
            }
            
            if(frmValid) {
                hdNum = hdNum.replace(/-/g,'');
                store = trimNumber(hdNum.substr(0,5));
                date = hdNum.substr(9,2)+'/'+hdNum.substr(11,2)+'/'+hdNum.substr(5,4);
                reg = trimNumber(hdNum.substr(13,2));
                trans = trimNumber(hdNum.substr(15,5));
		        dataString += '&type=home&HDStore=' + store + '&HDReg=' + reg + '&HDTrans=' + trans + '&HDDate=' + date;
            }
            else {
                errMsg += '\n\tInvalid Home Delivery number entered.';
            }
           
            break;
            
        default:
            break;
    }

    if (frmValid) {
        if (jQuery('#hdnOperationalMode').val().toLowerCase() == 'return') {
            var args = zip + '|' + orderNum;
            __doPostBack('RETURN_SEARCH', args);
        }
        else if (ajaxProceed) {
            jQuery('#searchContainer').fadeOut('slow', function() {jQuery('#orders-loading-wrapper').fadeIn('slow', function() {getOrderDetails(dataString);});});
        }
    }
    else {
        alert(errMsg);
    }
}

function checkForLegacyOrder(legacyCheck) {
    var retVal = false;
    
    jQuery.ajax({
        type        : 'GET',
        url         : '/WebServices/RenderControls.aspx',
        dataType    : 'html',
        async       : false,
        data        : legacyCheck,
        success     : function(isLegacyOrder) {
            if(isLegacyOrder == 'true') {
                retVal = true;
            }
        },
        error       : function() {
            jQuery('#orders-loading-wrapper').fadeOut('slow', function() {
                jQuery('#searchContainer').fadeIn('slow', function() {
                    alert('An error ocurred while trying to retrieve data from the server.');
                });
            });
        }
    });
    
    return retVal;
}

function showWebOrder(zip, orderNum) {
    dataString = 'control=OrderSearchResults&type=online&zipCode=' + zip + '&orderNumber=' + orderNum;
    
    jQuery('#searchContainer').fadeOut('slow', function() {
        jQuery('#orders-loading-wrapper').fadeIn('slow', function() {
            getOrderDetails(dataString);
        });
    });
}

function getOrderDetails(dataString) {
    jQuery.ajax({
        type: 'GET',
        url: '/WebServices/RenderControls.aspx',
        dataType: 'html',
        async: false,
        data: dataString,
        success: function(html) {
            html = RemoveScriptFromAjaxResponse(CleanAjaxResponse(html));
            
            jQuery('#resultsDisplay').append(html);

            //Webkit-based browser fix.  For some reason Safari and Google Chrome don't like
            //the fading effects for Ajax results. 
            if (jQuery.browser.safari) {
                jQuery('#orders-loading-wrapper').css('display', 'none');
                jQuery('#resultsContainer').css('display', 'block'); ;
            }
            else {
                jQuery('#orders-loading-wrapper').fadeOut('slow', function() {
                    jQuery('#resultsContainer').fadeIn('slow');
                });
            }
        },
        error: function() {
            jQuery('#orders-loading-wrapper').fadeOut('slow', function() {
                jQuery('#searchContainer').fadeIn('slow', function() {
                    alert('An error ocurred while trying to retrieve data from the server.');
                });
            });
        }
    });
}

function trimNumber(s) {
    while (s.substr(0,1) == '0' && s.length>1) { s = s.substr(1,9999); }
    return s;
}

function isNumeric(val) {
    var rgxNum=/(^\d+$)|(^\d+\.\d+$)/;
    return rgxNum.test(val);
}

function isZipValid(val) {
    var rgxZip = /^\d{5}$|^\d{9}$|^\d{5}-\d{4}$/;
    return rgxZip.test(val);
}

function isValidHDNum(val) {
    var rgxHDNum=/^\d{4}-\d{4}-\d{4}-\d{4}-\d{4}$|^\d{20}$/;
    return rgxHDNum.test(val);
}
