function format_currency(f) {
    return '$' + f.toFixed(2);
}

function format_gb(megs) {
    return (megs / 1000).toFixed(2) + 'GB';
}

function digits_only(e) {
    e.value = e.value.replace(/[^\d]/g, '');
}

function total_add(total, quantity, price) {
    if (!isNaN(quantity) && !isNaN(price)) {
        return total + quantity * price;
    } else {
        return total;
    }
}

function summary_show_quantity(q) {
    return !isNaN(q) && q > 0;
}

function myshow(jq) {
    jq.fadeIn('slow');
}

function myhide(jq) {
    jq.fadeOut('slow');
}

function summary_title_update() {
    $('#summary_title').text($('#email_domain1').val() + ' ');
}

function mbox_num_update() {
    var mbox_num = parseFloat($('#mbox_num').val());

    $('.mbox_totals').each(function() {
        var storage_per = parseFloat($(this).attr('storage_per'));
        var price_per = parseFloat($(this).attr('price_per'));

        var total_storage = storage_per * mbox_num;
        var total_monthly_cost = price_per * mbox_num;

        var s = '';
        if (!isNaN(total_storage) && !isNaN(total_monthly_cost)) {
            s = '(total of <span class="total_storage">' +
                format_gb(total_storage) + '</span> for ' +
                format_currency(total_monthly_cost) + '/month)';
        }

        $(this).html(s);
    });

    if (summary_show_quantity(mbox_num)) {
        myshow($('#summary_mbox_num').text(mbox_num + ' mailboxes'));
    } else {
        myhide($('#summary_mbox_num'));
    }

    mbox_update();
}

function mbox_update() {
    var storage_per = $('input[type=radio][name=mbox]:checked ~ * > .mbox_totals').attr('storage_per');
    var mbox_num = parseFloat($('#mbox_num').val());

    if (isNaN(storage_per) || isNaN(mbox_num)) {
        myhide($('#summary_total_storage'));
    } else {
        myshow(
            $('#summary_total_storage').text(format_gb(mbox_num * storage_per) +
                ' total storage'));
    }

    total_update();
}

function num_blackberry_update() {
    var num_blackberry = parseFloat($('#num_blackberry').val());

    if (summary_show_quantity(num_blackberry)) {
        myshow($('#summary_num_blackberry').text(num_blackberry +
            ' BlackBerry users'));
    } else {
        myhide($('#summary_num_blackberry'));
    }

    total_update();
}

function num_good_mobile_update() {
    var num_good_mobile = parseFloat($('#num_good_mobile').val());

    if (summary_show_quantity(num_good_mobile)) {
        myshow($('#summary_num_good_mobile').text(num_good_mobile +
            ' Good Mobile Messaging users'));
    } else {
        myhide($('#summary_num_good_mobile'));
    }

    total_update();
}

function arch_update() {
    var arch_selected = $('input[type=radio][name=arch]:checked').val();

    myhide($('.summary_arch'));
    myshow($('#summary_arch_' + arch_selected));

    total_update();
}

function addl_sharepoint_update() {
    var addl_sharepoint = parseFloat($('#addl_sharepoint').val());

    if (summary_show_quantity(addl_sharepoint)) {
        myshow($('#summary_addl_sharepoint').text(addl_sharepoint +
            'GB additional SharePoint storage'));
    } else {
        myhide($('#summary_addl_sharepoint'));
    }

    total_update();
}

function total_update() {
    var setup_total = 0;
    var monthly_total = 0;

    var mbox_num = parseFloat($('#mbox_num').val());

    if (!isNaN(mbox_num)) {
        var mbox_monthly = parseFloat($('input[type=radio][name=mbox]:checked ~ * > .mbox_totals').attr('price_per'));
        monthly_total = total_add(monthly_total, mbox_num, mbox_monthly);

	var arch_monthly = parseFloat($('input[type=radio][name=arch]:checked').attr('monthly_price'));
        monthly_total = total_add(monthly_total, mbox_num,
            arch_monthly);

	var arch_setup = parseFloat($('input[type=radio][name=arch]:checked').attr('setup_price'));
        setup_total = total_add(setup_total, mbox_num, arch_setup);
    }

    var num_blackberry = $('#num_blackberry').val();
    var blackberry_monthly =
	parseFloat($('#num_blackberry').attr('monthly_price'));
    monthly_total = total_add(monthly_total, num_blackberry,
        blackberry_monthly);

    var num_goodmobile = $('#num_good_mobile').val();
    var goodmobile_monthly =
	parseFloat($('#num_good_mobile').attr('monthly_price'));
    monthly_total = total_add(monthly_total, num_goodmobile,
        goodmobile_monthly);

    var num_addl_sharepoint = $('#addl_sharepoint').val();
    var addl_sharepoint_setup =
    	parseFloat($('#addl_sharepoint').attr('setup_price'));
    setup_total = total_add(setup_total, num_addl_sharepoint,
        addl_sharepoint_setup);

    var addl_sharepoint_monthly =
    	parseFloat($('#addl_sharepoint').attr('monthly_price'));
    monthly_total = total_add(monthly_total, num_addl_sharepoint,
        addl_sharepoint_monthly);

    $('#live_setup').text(format_currency(setup_total));
    $('#live_monthly').text(format_currency(monthly_total));
}

$().ready(function(){
    $('#email_domain1').keyup(summary_title_update);

    $('#mbox_num').keyup(function(e) {
        digits_only(this);
        mbox_num_update();
    });

    // unbind click functions bound in config_pricing_v5.js, they are only used
    // for server configurator
    $('input:radio').unbind('click');

    $('input:radio[name=mbox]').click(mbox_update);

    $('#num_blackberry').keyup(function(e) {
        digits_only(this);
        num_blackberry_update();
    });

    $('#num_good_mobile').keyup(function(e) {
        digits_only(this);
        num_good_mobile_update();
    });

    $('input:radio[name=arch]').click(arch_update);

    $('#addl_sharepoint').keyup(function(e) {
        digits_only(this);
	addl_sharepoint_update();
    });

    summary_title_update();
    mbox_update();
    mbox_num_update();
    num_blackberry_update();
    num_good_mobile_update();
    arch_update();
    addl_sharepoint_update();
});
