// referenced cached at onload to improve performance
var $TT_presetRadios // jQuery object
    ,TT_dateRadio
    ,TT_today = new Date()
    ,TT_radioGroupDateRange
    ,TT_specDatesFaded = false
    ,TT_allowFades = !$.browser.safari
;

function TT_dateRadioChange() {
    if (TT_dateRadio.checked) {
        if (TT_specDatesFaded) {
            TT_allowFades && $('#set_specDates').fadeTo(100, 1);
            TT_specDatesFaded = false;
        }
        $('#set_specDates select').unbind('change', TT_chooseSpecifiedDates);
    } else {
        if (! TT_specDatesFaded) {
            TT_allowFades && $('#set_specDates').fadeTo(100, 0.5);
            TT_specDatesFaded = true;
        }
        TT_setPresetRanges(TT_radioGroupDateRange.getValue());
        $('#set_specDates select').bind('change', TT_chooseSpecifiedDates);
    }
}

function TT_chooseSpecifiedDates() {
    TT_radioGroupDateRange.setValue('dates');
    TT_allowFades && $('#set_specDates').fadeTo(100, 1);
    TT_specDatesFaded = false;
}

function TT_getDateRange() {
    var v = {};
    $('#set_specDates select').each(function(){
        v[this.name] = $(this).formVal();
    });
    return {
        from : new Date(v.fromDate_y, v.fromDate_m - 1, v.fromDate_d)
        ,to : new Date(v.toDate_y, v.toDate_m - 1, v.toDate_d)
    };
}

function TT_setDate(selectNamePrefix, dateObj) {
    $('#' + selectNamePrefix + '_y').formVal(dateObj.getFullYear());
    $('#' + selectNamePrefix + '_m').formVal(dateObj.getMonth() + 1);
    $('#' + selectNamePrefix + '_d').formVal(dateObj.getDate());
}

function TT_firstOfMonth(dateObj) {
    return new Date(dateObj.getFullYear(), dateObj.getMonth(), 1);
}

function TT_setPresetRanges(days) {
    TT_setDate('fromDate', new Date(TT_today - (86400000 * days)));
    TT_setDate('toDate', new Date(TT_today - 86400000));
}

// make sure from earlier than to
function TT_fixDates(supressAlert) {
    var range = TT_getDateRange();
    if (range.from > range.to) {
        TT_setDate('fromDate', range.to);
        if (supressAlert) {
            return true;
        }
        alert('The From: date was later than the To: date\nFrom: was altered'
            +' to match the To: date.\nPlease verify the dates are as you'
            +' desire before submitting.');
        return false;
    }
    return true;
}

function TT_formToString() {
    var locs = [], date = '';
    $('input:checked').each(function () {
        var m;
        if (m = this.id.match(/^locs__(\d+)/)) {
            locs.push(m[1]);
        } else if (m = this.id.match(/^presetRange__(7|14|30)/)) {
            date = m[1];
        }
    });
    return 'locs=' + locs.join(',') 
         + '&date=' + date
         + '&ab=' + $('#temp_aboveBelow').formVal()
         + '&unit=' + $('#temp_unit').formVal()
         + '&val=' + $('#temp_value').formVal();
}

function TT_stringToForm(str) {
    var obj = (new MrClay.LocationHash(str)).get();
    $.each(obj.locs.split(','), function () {
        $('#locs__' + this).attr({checked:true});
    });
    obj.date && $('#presetRange__' + obj.date).attr({checked:true});
    $('#temp_aboveBelow').formVal(obj.ab);
    $('#temp_unit').formVal(obj.unit);
    $('#temp_value').formVal(obj.val);
}

function TT_init() {
    // capture references
    TT_dateRadio = $('#set_presetRanges input[@value=dates]')[0];
    $TT_presetRadios = $('#set_presetRanges input[@name=presetRange]')
        .not(TT_dateRadio);

    TT_radioGroupDateRange = Fawn.extendRadioGroup(
        $('#thresholdReportForm')[0].presetRange, TT_dateRadioChange);

    // on submit, hide errors in case user returns via 'back'
    $('#thresholdReportForm').submit(function (){
        $('em.error').remove();
        $.cookie('ttSettings', TT_formToString(), {
            path: '/tools/temperature_threshold/'
            ,expires: 365 // days
        });
        return TT_fixDates();
    });

    // Removed 2008-09-11. This annoying feature converted your temperature
    // to match the unit.
    /*$('#temp_unit').change(function (){
        var val = $('#temp_value').formVal();
        if ('f' == $(this).formVal()) {
            val = val * 1.8 + 32;
        } else {
            val = (val - 32) / 1.8;
        }
        $('#temp_value').formVal(val.toFixed(3));
    });*/

    TT_dateRadioChange();
    
    // give all radios ids (helpful for saving form state)
    $('input[type=radio]').each(function () {
        if (! this.id) {
            this.id = this.name + '__' + this.value;    
        }
    });
    
    // restore settings from cookie
    var str = $.cookie('ttSettings');
    if (str) {
        TT_stringToForm(str);
        TT_dateRadioChange();
    }
}

$(function () {
    if (/*@cc_on!@*/false) {
        // this is necessary because IE7's DOM was not quite ready. In particular
        // the radio inputs didn't have their value properties yet. The use of
        // setTimeout causes this to run in a separate thread, so this should
        // fix the problem regardless of how fast the page loads.
        setTimeout(TT_init, 1);
    } else {
        // better browsers
        TT_init();
    }
});
