var ZZZ = { 
    // pre-submit callback 
    validate: function(formData, jqForm) { 
        $('#shipping-info').hide("slow");
        $('#shipping-options').hide("slow");
        $('#shipping-errors').hide("slow");
        $('#shipping-loading').show("fast");
        return true; 
    },
 
    // post-submit callback 
    updateshipping: function(json)  { 
        $('#shipping-loading').hide();
        var result = json.results;
        var errors = json.errors;
        $('.form-error').hide().html("");

        
        if (errors.length > 0) {
            for (var i = 0; i<errors.length; i++) {
                which = errors[i][0];
                err = errors[i][1];
                $('#'+which+'-errors').html(err);
                $('#'+which+'-errors').show();
                // if (which == 'quantity') {
                //                     $('#label-quantity span.error').html(err);
                //                 }
                //                 else if (which == 'product') {
                //                     $('#label-product span.error').html(err);
                //                 }
                $('#shipping-errors').show("slow", function(){$('#shipping-loading').hide();});
            }
        }
        else {
            var list_items = '';  
            var shipping_desc = json.shipping_desc;
            var shipping = json.shipping;
            
            if (shipping_desc.length > 0) {
                // list_items = '<ul>';
                // order the returned results, even though they should be ordered
                var expected_order = ['UPS-03-Ground', 'UPS-02-Second Day Air', 'UPS-01-Next Day Air'];
                var temp_shipping_desc = new Array();
                for (var i=0; i<expected_order.length; i++){
                    for (var x=0; x<shipping_desc.length; x++){
                        if (expected_order[i]==shipping_desc[x][0]){
                            temp_shipping_desc[i] = shipping_desc[x];
                            break;
                        }
                    }
                }
                shipping_desc = temp_shipping_desc;
                
                for (var i=0; i<shipping_desc.length; i++) {
                    var type = shipping_desc[i][0];
                    var text = shipping_desc[i][1];
                    var patt = /-[\d][\d]-/;
                    var result = type.search(patt);
                    var num = type.substring(result+1, result+3);
                    num = parseInt(num, 10);
                    var list_item = '<li>';
                    list_item += '<label for=\"id_shipping_' + (num-1) + '\">';
                    list_item += '<input id=\"id_shipping_' + (num-1) + '\" type=\"radio\" name=\"shipping\" value=\"' + type + '\"/>';
                    list_item += text;
                    list_item += '</li>';
                    
                    list_items += list_item;
                }
                // list_items += '</ul>';
                $('#shipping-options').html('');
                $('#shipping-options').append('<ul></ul>');
                $('#shipping-options > ul').html(list_items);
            }
            else{
                var noShippingError = 'Shipping for your address could not be calculated.<br>';
                noShippingError += 'Please verify your address information.<br>';
                noShippingError += 'If it is correct, please contact Orbit Baby<br>';
                noShippingError += 'directly by phone to place your order:<br><br>';
                noShippingError += '1-877-ORB-BABY<br>';
                noShippingError += '1-877-672-2229<br><br>';
                noShippingError += 'Your <strong> Cart ID </strong> number is: ' + json.cartid + '<br>';
                $('#shipping-options').html(noShippingError);
            }      
            $('#shipping-errors').hide();
            $('#shipping-options').show("slow", function(){$('#shipping-loading').hide();});
            $("#shipping-options input:first").attr("checked", true);      
        }
    }
};