﻿var BodyFatCalc = (function() {
    var bfc = {};

    bfc.init = function(sel) {
        var ddlGender = $('HFC-BFC-ddlGender');
        var txtWeight = $('HFC-BFC-txtWeight');
        var txtWaist = $('HFC-BFC-txtWaist');
        var ddlWaistFraction = $('.HFC-BFC-ddlWaistFraction', sel);
        var btnCalc = $('HFC-BFC-btnCalc');
        var btnClear = $('HFC-BFC-btnClear');
        var btnRecord = $('HFC-BFC-btnRecord');
        var bodyFatLabel = $('HFC-BFC-bodyFat');
        var errorLabel = $('HFC-BFC-error');
        var btnPercent = $('HFC-BFC-btnPercent');
        var btnPounds = $('HFC-BFC-btnPounds');
        var disabledButtons = '.HFC-BFC-btnRecord, .HFC-BFC-btnPercent, .HFC-BFC-btnPounds';
        var header = $('HFC-BFC-header');

        var displayMode = '%';

        var setRecordEnabled = function(enabled) {
            btnPercent.disabled = !enabled;
            btnPounds.disabled = !enabled;
            if (enabled) {
                //btnRecord.removeClass('HFC-BFC-btnRecord-disabled');
                //$(disabledButtons).removeAttr('disabled');
                //$('.HFC-BFC-btnDisplayModeCont-disabled').removeClass('HFC-BFC-btnDisplayModeCont-disabled');
            } else {
                //btnRecord.addClass('HFC-BFC-btnRecord-disabled');
                //$(disabledButtons).attr('disabled', 'true');
                //$('.HFC-BFC-btnDisplayModeCont').addClass('HFC-BFC-btnDisplayModeCont-disabled');
            }
        }

        var updateResult = function() {
            var gender = ddlGender.getValue();
            errorLabel.update('');

            var weightVal = txtWeight.getValue();
            var weight = parseFloat(weightVal);
            if (isNaN(weight) || weightVal.length == 0)
                errorLabel.update('Please enter a valid weight.');
                
            var waistVal = txtWaist.getValue();
            var waist = parseFloat(waistVal);
            if (isNaN(waist) || waistVal.length == 0)
                errorLabel.update('Please enter a valid waist size.');

            if (errorLabel.innerHTML != '') {
                bodyFatLabel.update('ERROR');
                setRecordEnabled(false);
            } else {
                var bfpercent = bfc.calculate(gender, weight, waist);
                if (displayMode == '%')
                    bodyFatLabel.update(bfpercent + '%');
                else
                    bodyFatLabel.update(Math.round((bfpercent / 100) * weight) + 'lbs');
                setRecordEnabled(true);

                $('HFC-BFC-header-line1').update('Learn more about Body Fat');
                $('HFC-BFC-header-line2').update('vs. Body Weight! Click Here >>');
                header.setStyle({
                    'cursor': 'pointer',
                    'text-decoration': 'underline'
                });
                header.observe('click', function() {
                    bfc.openBFCInfo('/LearnMoreBFC.html', 'BodyFatLearnMore');
                });
            }
        }

        var displayModeChange = function() {
            displayMode = $(this).innerHTML;
            updateResult();
        }

        btnPercent.observe('click', displayModeChange);
        btnPounds.observe('click', displayModeChange);

        btnClear.observe('click', function() {
            txtWeight.setValue('');
            txtWaist.setValue('');
            bodyFatLabel.update('&nbsp;');
            setRecordEnabled(false);
        });

        btnCalc.observe('click', function(evt) {
            updateResult();
        });
    }

    bfc.openBFCInfo = function(url, name) {
        window.open(url, name, 'status=1,height=600,width=760,resizable=0,scrollbars=1');
    }

    bfc.calculate = function(gender, weight, waist) {
        var genderFactor = (gender == 'male') ? -98.42 : -76.76;
        var bodyFat = genderFactor + (4.15 * waist) - (.082 * weight);

        // return body fat percent
        return (Math.round((bodyFat / weight) * 10000) / 100).toFixed(2);
    }
    
    Event.observe(window, 'load', function() {
        bfc.init('.HFC-BFC-cont');
    });

    return bfc;
})();