/* ========================================================== */ /* ================== Technical Predictors ================== */ /* ========================================================== */ class Ha_indicators { inArray = function(needle, haystack) { var length = haystack.length; for(var i = 0; i < length; i++) { if(haystack[i] == needle) return true; } return false; }; constructor() { this.filterIndicatorVariations = [ { code: 'raw', label: 'RAW', type: 'raw' }, { code: 'per10Kpop', label: 'RAW (Per 10K)', type: 'raw' }, { code: 'yyt', label: '1 Yr Change', type: 'raw' }, { code: 'yy_change', label: '1 Yr Change', type: 'raw' }, { code: 'mm', label: 'MoM % Chng', type: 'raw' }, { code: 'yy', label: 'YoY % Chng', type: 'raw' }, { code: 'cagr3y' , label: '3-Yr CAGR', type: 'raw' }, { code: 'cagr5y' , label: '5-Yr CAGR', type: 'raw' }, { code: 'pct', label: 'Rank', type: 'pct' }, { code: 'per10Kpop_pct', label: 'Rank (Per 10K)', type: 'pct' }, { code: 'percentile_yy_change', label: 'Rank 1 Yr Change', type: 'pct' }, { code: 'mm_pct', label: '1-Mo Rank.', type: 'pct' }, { code: 'yy_pct', label: 'YoY % Chng Rank.', type: 'pct' }, { code: 'cagr3y_pct' , label: '3-Yr CAGR', type: 'pct' }, { code: 'cagr5y_pct' , label: '5-Yr CAGR', type: 'pct' }, ]; this.indicatorGroups = { technical : { label: 'Technical Predictors' }, hybrid : { label: 'Hybrid Indicators' }, /* predictor : { label: 'Predictors' }, */ mls : { label: 'MLS Indicators' }, appreciation : { label: 'Appreciation Rates' }, fundamental : { label: 'Fundamental Indicators' } }; this.indicators = {}; /* this.indicators['hms'] = { mapid: '', label: 'Hot Market Score', popover_title: 'hms', access: 'PRO,LITE,PMT,JV', override_classic: 'false', mkt_lvl: 'County-Zipcode', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Technical Predictors', format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: 0, c_max: 100, min: 0, max: 100, active: false }; this.indicators['hms_pct'] = { mapid: 'sms', label: 'Hot Market Score (Rank)', popover_title: 'hms_pct', access: 'PRO,LITE,PMT,JV', override_classic: 'false', mkt_lvl: 'County-Zipcode', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Technical Predictors', format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: 0, c_max: 100, min: 0, max: 100, active: false }; this.indicators['hms_yyt'] = { mapid: 'sms', label: 'Hot Market Score (1 Yr Change)', // YoY Chng popover_title: '', access: 'PRO,LITE,PMT,JV', override_classic: 'false', mkt_lvl: 'County-Zipcode', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Technical Predictors', format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: -100, c_max: 100, min: -100, max: 100, active: false }; this.indicators['hms_yy'] = { mapid: 'sms', label: 'Hot Market Score (YoY % Change)', popover_title: 'hms_yy', access: 'PRO', override_classic: 'false', mkt_lvl: 'County-Zipcode', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Technical Predictors', format: 'Percent', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '%', // Symbol After Values step: 1, c_min: -100, c_max: 100, min: -100, max: 100, active: false }; */ this.indicators['wp_flag'] = { mapid: '', label: 'Wealth Phase', popover_title: 'wp_flag', access: 'PRO,LITE,PMT,JV', mkt_lvl: 'State-MSA', // Market Level Restriction: "All", "State", "State-MSA", etc... parent_market_data_for_mm: true, type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Technical Predictors', format: 'Radio', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) options_title: 'Options', options_subtitle: 'Show Markets Currently:', options_selections: { 'true' : { label: 'Markets IN a Wealth Phase', option: 'IN WP', button: 'IN WP', value: 1 }, 'false' : { label: 'Markets NOT in a Wealth Phase', option: 'NOT', button: 'NOT In WP', value: 0 }, 'both' : { label: 'Include Both', option: 'BOTH', button: 'BOTH', value: 2 }, }, options_ui: 'Vertical', prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: 0, c_max: 2, min: 0, max: 2, control_value: 2, // Both active: false }; if (getUrlVars()['mls_score'] == 'yes') { /* this.indicators['mls_score'] = { label: 'Market Outlook RAW', popover_title: 'mls_score', mkt_lvl: '', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Technical Predictors', format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: 0, c_max: 10000, min: 0, max: 10000, active: false }; */ } this.indicators['mls_score2_normalised'] = { label: 'Market Outlook', popover_title: 'mls_score2_normalised', // mkt_label: 'State and Metro Only', access: 'PRO,LITE,PMT,JV', override_classic: 'false', mkt_lvl: '', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Technical Predictors', format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: 0, c_max: 10000, min: 0, max: 10000, active: false }; this.indicators['mls_score2_normalised_yy_change'] = { label: 'Market Outlook (1 Yr Change)', // YoY Chng popover_title: 'mls_score2_normalised_yy_change', // mkt_label: 'State and Metro Only', access: 'PRO,LITE,PMT,JV', override_classic: 'false', mkt_lvl: 'All', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Technical Predictors', format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: 0, c_max: 10000, min: 0, max: 10000, active: false }; this.indicators['mls_score2_normalised_percentile'] = { label: 'Market Outlook (Rank)', popover_title: 'mls_score2_normalised_percentile', // mkt_label: 'State and Metro Only', access: 'PRO,LITE,PMT,JV', override_classic: 'false', mkt_lvl: 'All', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Technical Predictors', format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: 0, c_max: 10000, min: 0, max: 10000, active: false }; this.indicators['mls_score2_normalised_percentile_yy_change'] = { label: 'Market Outlook (Rank) (1 Yr Change)', // YoY Chng popover_title: 'mls_score2_normalised_percentile_yy_change', // mkt_label: 'State and Metro Only', access: 'PRO', override_classic: 'false', mkt_lvl: 'All', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Technical Predictors', format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: 0, c_max: 10000, min: 0, max: 10000, active: false }; //-------------------------------------------------------------- /* this.indicators['mls_score_normalised'] = { label: 'Market Outlook [OLD]', popover_title: 'mls_score_normalised', // mkt_label: 'State and Metro Only', access: 'PRO,LITE,PMT,JV', override_classic: 'false', mkt_lvl: '', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Technical Predictors', format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: 0, c_max: 10000, min: 0, max: 10000, active: false }; this.indicators['mls_score_normalised_yy_change'] = { label: 'Market Outlook [OLD] (1 Yr Change)', // YoY Chng popover_title: 'mls_score_normalised_yy_change', // mkt_label: 'State and Metro Only', access: 'PRO,LITE,PMT,JV', override_classic: 'false', mkt_lvl: 'All', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Technical Predictors', format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: 0, c_max: 10000, min: 0, max: 10000, active: false }; this.indicators['mls_score_normalised_percentile'] = { label: 'Market Outlook [OLD] (Rank)', popover_title: 'mls_score_normalised_percentile', // mkt_label: 'State and Metro Only', access: 'PRO,LITE,PMT,JV', override_classic: 'false', mkt_lvl: 'All', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Technical Predictors', format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: 0, c_max: 10000, min: 0, max: 10000, active: false }; this.indicators['mls_score_normalised_percentile_yy_change'] = { label: 'Market Outlook [OLD] (Rank) (1 Yr Change)', // YoY Chng popover_title: 'mls_score_normalised_percentile_yy_change', // mkt_label: 'State and Metro Only', access: 'PRO', override_classic: 'false', mkt_lvl: 'All', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Technical Predictors', format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: 0, c_max: 10000, min: 0, max: 10000, active: false }; */ //-------------------------------------------------------------- this.indicators['score_master_normalized'] = { mapid: 'scores_ta-star-hpa', label: 'Master Score', // mkt_label: 'State and Metro Only', access: 'PRO,LITE,PMT,JV', override_classic: 'true', mkt_lvl: '', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Technical Predictors', format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: 70, c_max: 100, min: 0, max: 100, active: false }; this.indicators['score_master_normalized_yy_change'] = { mapid: '', label: 'Master Score (1 Yr Change)', // YoY Chng // mkt_label: 'State and Metro Only', access: 'PRO,LITE,PMT,JV', override_classic: 'true', mkt_lvl: '', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Technical Predictors', format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: 70, c_max: 100, min: 0, max: 100, active: false }; this.indicators['score_master_normalized_percentile'] = { mapid: '', label: 'Master Score (Rank)', // mkt_label: 'State and Metro Only', access: 'PRO,LITE,PMT,JV', override_classic: 'true', mkt_lvl: '', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Technical Predictors', format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: 70, c_max: 100, min: 0, max: 100, active: false }; this.indicators['score_master_normalized_percentile_yy_change'] = { mapid: '', label: 'Master Score (Rank) (1 Yr Change)', // YoY Chng // mkt_label: 'State and Metro Only', access: 'PRO,LITE,PMT,JV', override_classic: 'true', mkt_lvl: '', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Technical Predictors', format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: 70, c_max: 100, min: 0, max: 100, active: false }; // this.indicators['score_master_percentile'] = { // mapid: 'scores_ta-star-hpa', // label: 'Master Score (Rank)', // mkt_label: 'State and Metro Only', // mkt_lvl: 'State-MSA', // Market Level Restriction: "All", "State", "State-MSA", etc... // type:'', // score:'', // capita:'', // group: 'HousingAlerts', // cat: 'Technical Predictors', // format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) // prep: '', // Symbol Before Values // appn: '', // Symbol After Values // step: 1, // c_min: 70, // c_max: 100, // min: 0, // max: 100, // active: false // }; this.indicators['score_canary_normalised'] = { label: 'Momentum Alert', popover_title: '', mkt_label: 'State and Metro Only', access: 'PRO', override_classic: 'false', mkt_lvl: 'State-MSA', // Market Level Restriction: "All", "State", "State-MSA", etc... parent_market_data_for_mm: true, type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Technical Predictors', format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: 0, c_max: 10000, min: 0, max: 10000, active: false }; this.indicators['score_canary_normalised_yy_change'] = { label: 'Momentum Alert (1 Yr Change)', // YoY Chng popover_title: '', mkt_label: 'State and Metro Only', access: 'PRO', override_classic: 'false', mkt_lvl: 'State-MSA', // Market Level Restriction: "All", "State", "State-MSA", etc... parent_market_data_for_mm: true, type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Technical Predictors', format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: 0, c_max: 10000, min: 0, max: 10000, active: false }; this.indicators['score_canary_normalised_percentile'] = { label: 'Momentum Alert (Rank)', popover_title: '', mkt_label: 'State and Metro Only', access: 'PRO', override_classic: 'false', mkt_lvl: 'State-MSA', // Market Level Restriction: "All", "State", "State-MSA", etc... parent_market_data_for_mm: true, type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Technical Predictors', format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: 0, c_max: 10000, min: 0, max: 10000, active: false }; this.indicators['score_canary_normalised_percentile_yy_change'] = { label: 'Momentum Alert (Rank) (1 Yr Change)', // YoY Chng popover_title: '', mkt_label: 'State and Metro Only', access: 'PRO', override_classic: 'false', mkt_lvl: 'State-MSA', // Market Level Restriction: "All", "State", "State-MSA", etc... parent_market_data_for_mm: true, type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Technical Predictors', format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: 0, c_max: 10000, min: 0, max: 10000, active: false }; /* this.indicators['stability_index'] = { label: 'Stability Index', popover_title: '', mkt_label: 'State and Metro Only', access: 'PRO,LITE,PMT', override_classic: 'false', mkt_lvl: 'All', // Market Level Restriction: "All", "State", "State-MSA", etc... // parent_market_data_for_mm: true, type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Technical Predictors', format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: 0, c_max: 10000, min: 0, max: 10000, active: false }; this.indicators['stability_index_yy_change'] = { label: 'Stability Index (1 Yr Change)', // YoY Chng popover_title: '', mkt_label: 'State and Metro Only', access: 'PRO,LITE,PMT', override_classic: 'false', mkt_lvl: 'All', // Market Level Restriction: "All", "State", "State-MSA", etc... // parent_market_data_for_mm: true, type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Technical Predictors', format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: 0, c_max: 10000, min: 0, max: 10000, active: false }; this.indicators['stability_index_percentile'] = { label: 'Stability Index (Rank)', popover_title: '', mkt_label: 'State and Metro Only', access: 'PRO,LITE,PMT', override_classic: 'false', mkt_lvl: 'All', // Market Level Restriction: "All", "State", "State-MSA", etc... // parent_market_data_for_mm: true, type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Technical Predictors', format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: 0, c_max: 10000, min: 0, max: 10000, active: false }; this.indicators['stability_index_percentile_yy_change'] = { label: 'Stability Index (Rank) (1 Yr Change)', // YoY Chng popover_title: '', mkt_label: 'State and Metro Only', access: 'PRO,LITE,PMT', override_classic: 'false', mkt_lvl: 'All', // Market Level Restriction: "All", "State", "State-MSA", etc... // parent_market_data_for_mm: true, type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Technical Predictors', format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: 0, c_max: 10000, min: 0, max: 10000, active: false }; */ this.indicators['mb_score_wholesale'] = { label: 'Wholesale - Flip Score', access: 'PRO,LITE,PMT,JV', popover_title: '', cat: 'Technical Predictors' }; this.indicators['mb_score_wholesale_percentile'] = { label: 'Wholesale - Flip Score (Rank)', access: 'PRO,LITE,PMT,JV', popover_title: '', cat: 'Technical Predictors' }; this.indicators['mb_score_creative'] = { label: 'Creative REI Score', access: 'PRO,LITE,PMT,JV', popover_title: '', cat: 'Technical Predictors' }; this.indicators['mb_score_creative_percentile'] = { label: 'Creative REI Score (Rank)', access: 'PRO,LITE,PMT,JV', popover_title: '', cat: 'Technical Predictors' }; this.indicators['mb_score_cashflow'] = { label: 'Cash Flow Boost Score', access: 'PRO,LITE,PMT,JV', popover_title: '', cat: 'Technical Predictors' }; this.indicators['mb_score_cashflow_percentile'] = { label: 'Cash Flow Boost Score (Rank)', access: 'PRO,LITE,PMT,JV', popover_title: '', cat: 'Technical Predictors' }; this.indicators['mb_score_wealth'] = { label: 'Wealth Maximizer Score', popover_title: '', cat: 'Technical Predictors' }; this.indicators['mb_score_wealth_percentile'] = { label: 'Wealth Maximizer Score (Rank)', popover_title: '', cat: 'Technical Predictors' }; this.indicators['score_combo'] = { label: 'Combo Score', popover_title: '', mkt_label: 'State and Metro Only', access: 'PRO', override_classic: 'false', mkt_lvl: 'State-MSA', // Market Level Restriction: "All", "State", "State-MSA", etc... parent_market_data_for_mm: true, type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Technical Predictors', format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: 0, c_max: 10000, min: 0, max: 10000, active: false }; this.indicators['score_combo_yy_change'] = { label: 'Combo Score (1 Yr Change)', // YoY Chng popover_title: '', mkt_label: 'State and Metro Only', access: 'PRO', override_classic: 'false', mkt_lvl: 'State-MSA', // Market Level Restriction: "All", "State", "State-MSA", etc... parent_market_data_for_mm: true, type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Technical Predictors', format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: 0, c_max: 10000, min: 0, max: 10000, active: false }; this.indicators['score_combo_percentile'] = { label: 'Combo Score (Rank)', popover_title: '', mkt_label: 'State and Metro Only', access: 'PRO', override_classic: 'false', mkt_lvl: 'All', // Market Level Restriction: "All", "State", "State-MSA", etc... parent_market_data_for_mm: true, type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Technical Predictors', format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: 0, c_max: 10000, min: 0, max: 10000, active: false }; this.indicators['score_combo_percentile_yy_change'] = { label: 'Combo Score (Rank) (1 Yr Change)', // YoY Chng popover_title: '', mkt_label: 'State and Metro Only', access: 'PRO', override_classic: 'false', mkt_lvl: 'All', // Market Level Restriction: "All", "State", "State-MSA", etc... parent_market_data_for_mm: true, type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Technical Predictors', format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: 0, c_max: 10000, min: 0, max: 10000, active: false }; this.indicators['score_msf_normalised'] = { label: 'State & Metro Forecast', popover_title: '', mkt_label: 'State and Metro Only', access: 'PRO', override_classic: 'false', mkt_lvl: 'All', // Market Level Restriction: "All", "State", "State-MSA", etc... parent_market_data_for_mm: true, type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Technical Predictors', format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: 0, c_max: 10000, min: 0, max: 10000, active: false }; this.indicators['score_msf_normalised_yy_change'] = { label: 'State & Metro Forecast (1 Yr Change)', // YoY Chng popover_title: '', mkt_label: 'State and Metro Only', access: 'PRO', override_classic: 'false', mkt_lvl: 'All', // Market Level Restriction: "All", "State", "State-MSA", etc... parent_market_data_for_mm: true, type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Technical Predictors', format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: 0, c_max: 10000, min: 0, max: 10000, active: false }; this.indicators['score_msf_normalised_percentile'] = { label: 'State & Metro Forecast (Rank)', popover_title: '', mkt_label: 'State and Metro Only', access: 'PRO', override_classic: 'false', mkt_lvl: 'All', // Market Level Restriction: "All", "State", "State-MSA", etc... parent_market_data_for_mm: true, type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Technical Predictors', format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: 0, c_max: 10000, min: 0, max: 10000, active: false }; this.indicators['score_msf_normalised_percentile_yy_change'] = { label: 'State & Metro Forecast (Rank) (1 Yr Change)', // YoY Chng popover_title: '', mkt_label: 'State and Metro Only', access: 'PRO', override_classic: 'false', mkt_lvl: 'All', // Market Level Restriction: "All", "State", "State-MSA", etc... parent_market_data_for_mm: true, type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Technical Predictors', format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: 0, c_max: 10000, min: 0, max: 10000, active: false }; this.indicators['momentum_score'] = { mapid: 'scores_momentum', label: 'S.T.A.R. Momentum', mkt_label: 'State and Metro Only', access: 'PRO,LITE,PMT,JV', override_classic: 'false', mkt_lvl: 'State-MSA', // Market Level Restriction: "All", "State", "State-MSA", etc... parent_market_data_for_mm: true, type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Technical Predictors', format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: -1000, c_max: 1000, min: -1000, max: 1000, active: false }; this.indicators['momentum_score_percentile'] = { mapid: 'scores_momentum', label: 'S.T.A.R. Momentum (Rank)', mkt_label: 'State and Metro Only', access: 'PRO,LITE,PMT,JV', override_classic: 'false', mkt_lvl: 'State-MSA', // Market Level Restriction: "All", "State", "State-MSA", etc... parent_market_data_for_mm: true, type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Technical Predictors', format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: 0, c_max: 100, min: 0, max: 100, active: false }; this.indicators['score'] = { mapid: 'scores', label: 'T.A.P.S. Local Score', mkt_label: 'State and Metro Only', access: 'PRO', override_classic: 'false', mkt_lvl: 'State-MSA', // Market Level Restriction: "All", "State", "State-MSA", etc... parent_market_data_for_mm: true, type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Technical Predictors', format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: 0, c_max: 100, min: -1000, max: 1000, active: false }; this.indicators['score_percentile'] = { mapid: 'scores', label: 'T.A.P.S. Local Score (Rank)', mkt_label: 'State and Metro Only', access: 'PRO', override_classic: 'false', mkt_lvl: 'State-MSA', // Market Level Restriction: "All", "State", "State-MSA", etc... parent_market_data_for_mm: true, type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Technical Predictors', format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: 0, c_max: 100, min: 0, max: 100, active: false }; this.indicators['star_3_is_green'] = { mapid: '', label: 'STAR Indicator #3', popover_title: '', access: 'PRO', mkt_lvl: 'State-MSA', // Market Level Restriction: "All", "State", "State-MSA", etc... parent_market_data_for_mm: true, type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Technical Predictors', format: 'Radio', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) options_title: 'Options', options_subtitle: 'Show Markets Currently:', options_selections: { 'true' : { label: 'Green', option: 'GREEN', button: 'GREEN', value: 1 }, 'false' : { label: 'Not Green', option: 'NotGREEN', button: 'NotGREEN', value: 0 }, 'both' : { label: 'Include Both', option: 'BOTH', button: 'BOTH', value: 2 }, }, options_ui: 'Vertical', prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: 0, c_max: 2, min: 0, max: 2, control_value: 2, // Both active: false }; this.indicators['star_4_is_green'] = JSON.parse(JSON.stringify(this.indicators['star_3_is_green'])); this.indicators['star_4_is_green'].label = 'STAR Indicator #4'; this.indicators['star_5_is_green'] = JSON.parse(JSON.stringify(this.indicators['star_3_is_green'])); this.indicators['star_5_is_green'].label = 'STAR Indicator #5'; this.indicators['star_6_is_green'] = JSON.parse(JSON.stringify(this.indicators['star_3_is_green'])); this.indicators['star_6_is_green'].label = 'STAR Indicator #6'; /* ======================================================== */ /* ================== Hybrid Indicators ================== */ /* ======================================================== */ this.indicators['ha_rent_to_price'] = { mapid: 'rtp', label: 'Gross Rent Ratio', popover_title: '', access: 'PRO,LITE,PMT,JV', override_classic: 'false', mkt_lvl: '', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Hybrid Indicators', format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '%', // Symbol After Values step: 1, c_min: 0, c_max: 20, min: 0, max: 20, active: false }; this.indicators['ha_rent_to_price_pct'] = { mapid: 'rtp', label: 'Gross Rent Ratio (Rank)', popover_title: '', access: 'PRO', override_classic: 'false', mkt_lvl: '', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Hybrid Indicators', format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: 50, c_max: 100, min: 0, max: 100, active: false }; this.indicators['combo_mls_score_rtp2_percentile'] = { // mapid: 'csr2p', label: 'Market Outlook + Cash Flow (Rank)', popover_title: '', access: 'PRO,LITE,PMT,JV', override_classic: 'false', mkt_lvl: '', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Hybrid Indicators', format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: 50, c_max: 100, min: 0, max: 100, active: false }; this.indicators['combo_mls_score_hpv2_percentile'] = { // mapid: 'csh2p', label: 'Market Outlook + House Value (Rank)', popover_title: '', access: 'PRO,LITE,PMT,JV', override_classic: 'false', mkt_lvl: '', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Hybrid Indicators', format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: 50, c_max: 100, min: 0, max: 100, active: false }; this.indicators['ha_value_to_income'] = { mapid: '', label: 'Value to Income Ratio', popover_title: '', access: 'PRO,LITE,PMT,JV', override_classic: 'false', mkt_lvl: '', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Hybrid Indicators', format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 100, c_min: 3000, c_max: 50000000, min: 100, max: 100000000, active: false }; this.indicators['ha_value_to_income_yy'] = JSON.parse(JSON.stringify(this.indicators['ha_value_to_income'])); // Duplicate an object - not just link! this.indicators['ha_value_to_income_yy'].label += ' (YoY % Chng)'; this.indicators['ha_value_to_income_yy'].appn = '%'; this.indicators['ha_value_to_income_yy'].access = 'PRO'; this.indicators['ha_value_to_income_pct'] = JSON.parse(JSON.stringify(this.indicators['ha_value_to_income'])); // Duplicate an object - not just link! this.indicators['ha_value_to_income_pct'].label += ' (Rank)'; this.indicators['ha_value_to_income_pct'].appn = '%'; this.indicators['ha_value_to_income_pct'].access = 'PRO'; //--------------------------------------------------------------------- // this.indicators['ha_undervalue_overvalue'] = { // mapid: '', // label: 'Undervalue / Overvalue', // popover_title: '', // access: 'PRO,LITE,PMT,JV', // mkt_lvl: '', // Market Level Restriction: "All", "State", "State-MSA", etc... // type:'', // score:'', // capita:'', // group: 'HousingAlerts', // cat: 'Hybrid Indicators', // format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) // prep: '', // Symbol Before Values // appn: '', // Symbol After Values // step: 100, // c_min: 3000, // c_max: 50000000, // min: 100, // max: 100000000, // active: false // }; // this.indicators['ha_undervalue_overvalue_yy'] = JSON.parse(JSON.stringify(this.indicators['ha_undervalue_overvalue'])); // Duplicate an object - not just link! // this.indicators['ha_undervalue_overvalue_yy'].label += ' (YoY % Chng)'; // this.indicators['ha_undervalue_overvalue_yy'].appn = '%'; // this.indicators['ha_undervalue_overvalue_yy'].access = 'PRO'; // this.indicators['ha_undervalue_overvalue_pct'] = JSON.parse(JSON.stringify(this.indicators['ha_undervalue_overvalue'])); // Duplicate an object - not just link! // this.indicators['ha_undervalue_overvalue_pct'].label += ' (Rank)'; // this.indicators['ha_undervalue_overvalue_pct'].appn = '%'; // this.indicators['ha_undervalue_overvalue_pct'].access = 'PRO'; //--------------------------------------------------------------------- this.indicators['ha_affordability'] = { mapid: '', label: 'Affordability Ratio', popover_title: '', access: 'PRO,LITE,PMT,JV', override_classic: 'false', mkt_lvl: '', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Hybrid Indicators', format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 100, c_min: 3000, c_max: 50000000, min: 100, max: 100000000, active: false }; this.indicators['ha_affordability_yy'] = JSON.parse(JSON.stringify(this.indicators['ha_affordability'])); // Duplicate an object - not just link! this.indicators['ha_affordability_yy'].label += ' (YoY % Chng)'; this.indicators['ha_affordability_yy'].appn = '%'; this.indicators['ha_affordability_yy'].access = 'PRO'; this.indicators['ha_affordability_pct'] = JSON.parse(JSON.stringify(this.indicators['ha_affordability'])); // Duplicate an object - not just link! this.indicators['ha_affordability_pct'].label += ' (Rank)'; this.indicators['ha_affordability_pct'].appn = '%'; this.indicators['ha_affordability_pct'].access = 'PRO'; //--------------------------------------------------------------------- /* ===================================================== */ /* ================== MLS Indicators ================== */ /* ===================================================== */ this.indicators['mls_ha_nmi'] = { mapid: '', label: 'Months Inventory', popover_title: '', access: 'PRO,LITE,PMT,JV', override_classic: 'false', mkt_lvl: '', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'MLS Analyst', cat: 'MLS Indicators', format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: -1000, c_max: 1000, min: -1000, max: 1000, active: false }; this.indicators['mls_raw_dom'] = { mapid: '', label: 'Days On Market', popover_title: '', access: 'PRO,LITE,PMT,JV', override_classic: 'false', mkt_lvl: '', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'MLS Analyst', cat: 'MLS Indicators', format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: 0, c_max: 1000, min: 0, max: 1000, active: false }; this.indicators['mls_ha_ptlpd'] = { mapid: '', label: '% Of Listings w/ Price Drop', popover_title: '', access: 'PRO,LITE,PMT,JV', override_classic: 'false', mkt_lvl: '', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'MLS Analyst', cat: 'MLS Indicators', format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: 0, c_max: 100, min: 0, max: 100, active: false }; this.indicators['mls_raw_pr'] = { mapid: '', label: 'Pending Sales Ratio', popover_title: '', access: 'PRO,LITE,PMT,JV', override_classic: 'false', mkt_lvl: '', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'MLS Analyst', cat: 'MLS Indicators', format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: -100, c_max: 100, min: -100, max: 100, active: false }; this.indicators['mls_raw_mlp'] = { mapid: '', label: 'Median Listing Price', popover_title: '', access: 'PRO,LITE,PMT,JV', override_classic: 'false', mkt_lvl: '', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'MLS Analyst', cat: 'MLS Indicators', format: 'Money', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '$', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: 0, c_max: 10000000, min: 0, max: 10000000, active: false }; this.indicators['mls_raw_mlppsqft'] = { mapid: '', label: 'Median Price Per Sq Ft', popover_title: '', access: 'PRO,LITE,PMT,JV', override_classic: 'false', mkt_lvl: '', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'MLS Analyst', cat: 'MLS Indicators', format: 'Money', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '$', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: 0, c_max: 10000, min: 0, max: 10000, active: false }; this.indicators['mls_raw_mlsqft'] = { mapid: '', label: 'Median Listing Sq Ft', popover_title: '', access: 'PRO,LITE,PMT,JV', override_classic: 'false', mkt_lvl: '', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'MLS Analyst', cat: 'MLS Indicators', format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '² ft.', // Symbol After Values step: 1, c_min: 0, c_max: 100000, min: 0, max: 100000, active: false }; this.indicators['mls_raw_alp'] = { mapid: '', label: 'Average List Price', popover_title: '', access: 'PRO,LITE,PMT,JV', override_classic: 'false', mkt_lvl: '', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'MLS Analyst', cat: 'MLS Indicators', format: 'Money', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '$', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: 0, c_max: 100000000, min: 0, max: 100000000, active: false }; this.indicators['mls_raw_plc'] = { mapid: '', label: 'Pending Sales', popover_title: '', access: 'PRO,LITE,PMT,JV', override_classic: 'false', mkt_lvl: '', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'MLS Analyst', cat: 'MLS Indicators', format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: 0, c_max: 10000, min: 0, max: 10000, active: false }; this.indicators['mls_raw_plc'] = { mapid: '', label: 'Pending Sales', hasPer10KpopVariation: true, popover_title: '', access: 'PRO,LITE,PMT,JV', override_classic: 'false', mkt_lvl: '', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'MLS Analyst', cat: 'MLS Indicators', format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: 0, c_max: 10000, min: 0, max: 10000, active: false }; this.indicators['mls_raw_tlc'] = { mapid: '', label: 'Total Listings', hasPer10KpopVariation: true, popover_title: '', access: 'PRO,LITE,PMT,JV', override_classic: 'false', mkt_lvl: '', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'MLS Analyst', cat: 'MLS Indicators', format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: 0, c_max: 10000, min: 0, max: 10000, active: false }; this.indicators['mls_raw_alc'] = { label: 'Active Listings', hasPer10KpopVariation: true, popover_title: '', access: 'PRO,LITE,PMT,JV', override_classic: 'false', mkt_lvl: '', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'MLS Analyst', cat: 'MLS Indicators', format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: 0, c_max: 10000, min: 0, max: 10000, active: false }; this.indicators['mls_raw_nlc'] = { mapid: '', label: 'New Listings', hasPer10KpopVariation: true, popover_title: '', access: 'PRO,LITE,PMT,JV', override_classic: 'false', mkt_lvl: '', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'MLS Analyst', cat: 'MLS Indicators', format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: 0, c_max: 10000, min: 0, max: 10000, active: false }; this.indicators['mls_ha_sne'] = { mapid: '', label: 'Sold & Expired', hasPer10KpopVariation: true, popover_title: '', access: 'PRO,LITE,PMT,JV', override_classic: 'false', mkt_lvl: '', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'MLS Analyst', cat: 'MLS Indicators', format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: 0, c_max: 10000, min: 0, max: 10000, active: false }; this.indicators['mls_raw_pdc'] = { mapid: '', label: '# Listings w/ Price Drop', hasPer10KpopVariation: true, popover_title: '', access: 'PRO,LITE,PMT,JV', override_classic: 'false', mkt_lvl: '', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'MLS Analyst', cat: 'MLS Indicators', format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: 0, c_max: 10000, min: 0, max: 10000, active: false }; /* ========================================================= */ /* ================== Appreciation Rates ================== */ /* ========================================================= */ this.indicators['ach'] = { mapid: 'ach', label: 'Annual Home Price Appreciation (%)', popover_title: '', access: 'PRO,LITE,PMT,JV', override_classic: 'false', mkt_lvl: '', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Appreciation Rates', format: 'Percent', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '%', // Symbol After Values step: 1, c_min: -1000, c_max: 1000, min: -1000, max: 1000, active: false }; this.indicators['ach_pct'] = { mapid: 'ach', label: 'Annual Home Price Appreciation (%) (Rank)', popover_title: '', access: 'PRO', override_classic: 'false', mkt_lvl: '', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Appreciation Rates', format: 'Percent', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '%', // Symbol After Values step: 1, c_min: -1000, c_max: 1000, min: -1000, max: 1000, active: false }; this.indicators['zillow_house_value'] = { label: 'Zillow Home Value Index', popover_title: '', access: 'PRO,LITE,PMT', override_classic: 'false', mkt_lvl: 'All', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Appreciation Rates', format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: 0, c_max: 10000, min: 0, max: 10000, active: false }; this.indicators['zillow_house_value_yy'] = { // mapid: 'rent_appr_now', label: 'Zillow Home Value Index (YoY % Chng)', popover_title: '', access: 'PRO,LITE,PMT,JV', override_classic: 'false', mkt_lvl: 'All', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Appreciation Rates', format: 'Percent', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '%', // Symbol After Values step: 1, c_min: -1000, c_max: 1000, min: -1000, max: 1000, active: false }; this.indicators['zillow_house_value_mm'] = { // mapid: 'rent_appr_now', label: 'Zillow Home Value Index (MoM % Chng)', popover_title: '', access: 'PRO,LITE,PMT,JV', override_classic: 'false', mkt_lvl: 'All', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Appreciation Rates', format: 'Percent', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '%', // Symbol After Values step: 1, c_min: -1000, c_max: 1000, min: -1000, max: 1000, active: false }; this.indicators['zillow_house_value_pct'] = { mapid: 'rtp', label: 'zillow_house_value (Rank)', popover_title: '', access: 'PRO', override_classic: 'false', mkt_lvl: '', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Appreciation Rates', format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: 50, c_max: 100, min: 0, max: 100, active: false }; this.indicators['zillow_house_value_yy_pct'] = { mapid: 'rtp', label: 'zillow_house_value (YoY % Chng Rank.)', popover_title: '', access: 'PRO', override_classic: 'false', mkt_lvl: '', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Appreciation Rates', cat: 'Appreciation Rates', format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: 50, c_max: 100, min: 0, max: 100, active: false }; this.indicators['zillow_house_value_mm_pct'] = { mapid: 'rtp', label: 'zillow_house_value (MoM % Chng Rank.)', popover_title: '', access: 'PRO', override_classic: 'false', mkt_lvl: '', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Appreciation Rates', format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: 50, c_max: 100, min: 0, max: 100, active: false }; this.indicators['iach'] = { mapid: 'iach', label: 'Inflation Adjusted Annual Home Price Appreciation (%)', popover_title: '', access: 'PRO,LITE,PMT,JV', override_classic: 'false', mkt_lvl: '', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Appreciation Rates', format: 'Percent', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '%', // Symbol After Values step: 1, c_min: -1000, c_max: 1000, min: -1000, max: 1000, active: false }; this.indicators['iach_pct'] = { mapid: 'iach_pct', label: 'Inflation Adjusted Annual Home Price Appreciation (%) (Rank)', popover_title: '', access: 'PRO', override_classic: 'false', mkt_lvl: '', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Appreciation Rates', format: 'Percent', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '%', // Symbol After Values step: 1, c_min: -1000, c_max: 1000, min: -1000, max: 1000, active: false }; this.indicators['azch'] = { mapid: 'azch', label: 'Quarterly Home Price Appreciation (annualized %)', mkt_label: 'State and Metro Only', access: 'PRO,LITE,PMT,JV', override_classic: 'false', mkt_lvl: 'State-MSA', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Appreciation Rates', format: 'Percent', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '%', // Symbol After Values step: 1, c_min: -1000, c_max: 1000, min: -1000, max: 1000, active: false }; this.indicators['azch_pct'] = { mapid: 'azch', label: 'Quarterly Home Price Appreciation (annualized %) (Rank)', mkt_label: 'State and Metro Only', access: 'PRO', override_classic: 'false', mkt_lvl: 'State-MSA', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Appreciation Rates', format: 'Percent', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '%', // Symbol After Values step: 1, c_min: -1000, c_max: 1000, min: -1000, max: 1000, active: false }; this.indicators['qiach'] = { mapid: 'qiach', label: 'Inflation Adjusted Quarterly Home Price Appreciation (%)', mkt_label: 'State and Metro Only', access: 'PRO', override_classic: 'false', mkt_lvl: 'State-MSA', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Appreciation Rates', format: 'Percent', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '%', // Symbol After Values step: 1, c_min: -1000, c_max: 1000, min: -1000, max: 1000, active: false }; this.indicators['qiach_pct'] = { mapid: 'qiach', label: 'Inflation Adjusted Quarterly Home Price Appreciation (%) (Rank)', mkt_label: 'State and Metro Only', access: 'PRO', override_classic: 'false', mkt_lvl: 'State-MSA', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Appreciation Rates', format: 'Percent', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '%', // Symbol After Values step: 1, c_min: -1000, c_max: 1000, min: -1000, max: 1000, active: false }; this.indicators['cagr2y'] = { mapid: 'cagr2y', label: 'Annual Home Price Appreciation (%) - 2 yr. CAGR', popover_title: '', access: 'PRO,LITE,PMT,JV', override_classic: 'false', mkt_lvl: '', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Appreciation Rates', format: 'Percent', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '%', // Symbol After Values step: 1, c_min: -1000, c_max: 1000, min: -1000, max: 1000, active: false }; this.indicators['cagr2y_pct'] = { mapid: 'cagr2y', label: 'Annual Home Price Appreciation (%) - 2 yr. CAGR (Rank)', popover_title: '', access: 'PRO', override_classic: 'false', mkt_lvl: '', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Appreciation Rates', format: 'Percent', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '%', // Symbol After Values step: 1, c_min: -1000, c_max: 1000, min: -1000, max: 1000, active: false }; this.indicators['cagr3y'] = { mapid: 'cagr3y', label: 'Annual Home Price Appreciation (%) - 3 yr. CAGR', popover_title: '', access: 'PRO', override_classic: 'false', mkt_lvl: '', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Appreciation Rates', format: 'Percent', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '%', // Symbol After Values step: 1, c_min: -1000, c_max: 1000, min: -1000, max: 1000, active: false }; this.indicators['cagr3y_pct'] = { mapid: 'cagr3y', label: 'Annual Home Price Appreciation (%) - 3 yr. CAGR (Rank)', popover_title: '', access: 'PRO', override_classic: 'false', mkt_lvl: '', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Appreciation Rates', format: 'Percent', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '%', // Symbol After Values step: 1, c_min: -1000, c_max: 1000, min: -1000, max: 1000, active: false }; this.indicators['cagr5y'] = { mapid: 'cagr5y', label: 'Annual Home Price Appreciation (%) - 5 yr. CAGR', popover_title: '', access: 'PRO,LITE,PMT,JV', override_classic: 'false', mkt_lvl: '', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Appreciation Rates', format: 'Percent', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '%', // Symbol After Values step: 1, c_min: -1000, c_max: 1000, min: -1000, max: 1000, active: false }; this.indicators['cagr5y_pct'] = { mapid: 'cagr5y', label: 'Annual Home Price Appreciation (%) - 5 yr. CAGR (Rank)', popover_title: '', access: 'PRO', override_classic: 'false', mkt_lvl: '', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Appreciation Rates', format: 'Percent', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '%', // Symbol After Values step: 1, c_min: -1000, c_max: 1000, min: -1000, max: 1000, active: false }; //---------------------------------------------------------------------- this.indicators['rent_cagr3y'] = { mapid: 'rc3y', label: 'Median Rent (3-Yr CAGR)', popover_title: '', access: 'PRO,LITE,PMT,JV', override_classic: 'false', mkt_lvl: '', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Appreciation Rates', format: 'Percent', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '%', // Symbol After Values step: 1, c_min: -1000, c_max: 1000, min: -1000, max: 1000, active: false }; this.indicators['rent_cagr3y_pct'] = { mapid: 'rc3y', label: 'Median Rent (3-Yr CAGR) (Rank)', popover_title: '', access: 'PRO', override_classic: 'false', mkt_lvl: '', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Appreciation Rates', format: 'Percent', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '%', // Symbol After Values step: 1, c_min: 0, c_max: 100, min: 0, max: 100, active: false }; this.indicators['rent_cagr5y'] = { mapid: 'rc5y', label: 'Median Rent (5-Yr CAGR)', popover_title: '', access: 'PRO,LITE,PMT,JV', override_classic: 'false', mkt_lvl: '', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Appreciation Rates', format: 'Percent', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '%', // Symbol After Values step: 1, c_min: -1000, c_max: 1000, min: -1000, max: 1000, active: false }; this.indicators['rent_cagr5y_pct'] = { mapid: 'rc5y', label: 'Median Rent (5-Yr CAGR) (Rank)', popover_title: '', access: 'PRO', override_classic: 'false', mkt_lvl: '', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Appreciation Rates', format: 'Percent', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '%', // Symbol After Values step: 1, c_min: 0, c_max: 100, min: 0, max: 100, active: false }; this.indicators['ha_house_rent_yy'] = { // mapid: 'rent_appr_now', label: 'Median Rent Annual Growth', popover_title: '', access: 'PRO,LITE,PMT,JV', override_classic: 'false', mkt_lvl: '', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Appreciation Rates', format: 'Percent', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '%', // Symbol After Values step: 1, c_min: -1000, c_max: 1000, min: -1000, max: 1000, active: false }; this.indicators['ha_house_rent_yy_pct'] = { // mapid: 'rc5y', label: 'Median Rent Annual Growth (Rank)', popover_title: '', access: 'PRO', override_classic: 'false', mkt_lvl: '', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Appreciation Rates', format: 'Percent', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '%', // Symbol After Values step: 1, c_min: 0, c_max: 100, min: 0, max: 100, active: false }; /* ============================================================= */ /* ================== Fundamental Indicators ================== */ /* ============================================================= */ this.indicators['population'] = { mapid: '', label: 'Population', popover_title: '', access: 'PRO,LITE,PMT,JV', override_classic: 'false', mkt_lvl: '', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Fundamental Indicators', format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 100, c_min: 3000, c_max: 50000000, min: 100, max: 100000000, active: false }; this.indicators['population_yy'] = JSON.parse(JSON.stringify(this.indicators['population'])); // Duplicate an object - not just link! this.indicators['population_yy'].label += ' (YoY % Chng)'; this.indicators['population_yy'].appn = '%'; // this.indicators['population_yy'].access = 'PRO,PMT'; this.indicators['population_yy_percentile'] = JSON.parse(JSON.stringify(this.indicators['population'])); // Duplicate an object - not just link! this.indicators['population_yy_percentile'].label += ' (YoY % Chng Rank)'; this.indicators['population_yy_percentile'].appn = ''; this.indicators['population_yy_percentile'].access = 'PRO'; //--------------------------------------------------------------------- this.indicators['median_household_income'] = { mapid: '', label: 'Median Household Income', popover_title: '', access: 'PRO,LITE,PMT,JV', override_classic: 'false', mkt_lvl: '', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Fundamental Indicators', format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 100, c_min: 3000, c_max: 50000000, min: 100, max: 100000000, active: false }; // this.indicators['median_household_income_yy'] = JSON.parse(JSON.stringify(this.indicators['median_household_income'])); // Duplicate an object - not just link! // this.indicators['median_household_income_yy'].label += ' (YoY % Chng)'; // this.indicators['median_household_income_yy'].appn = '%'; // this.indicators['median_household_income_yy'].access = 'PRO'; this.indicators['median_household_income_pct'] = JSON.parse(JSON.stringify(this.indicators['median_household_income'])); // Duplicate an object - not just link! this.indicators['median_household_income_pct'].label += ' (Rank)'; this.indicators['median_household_income_pct'].appn = '%'; this.indicators['median_household_income_pct'].access = 'PRO'; //--------------------------------------------------------------------- this.indicators['ha_house_rent'] = { mapid: '', label: 'Median Rent', popover_title: '', access: 'PRO,LITE,PMT,JV', override_classic: 'false', mkt_lvl: '', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Fundamental Indicators', format: 'Money', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '$', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: 0, c_max: 5000, min: 0, max: 10000, active: false }; this.indicators['ha_house_rent_pct'] = { mapid: '', label: 'Median Rent (Rank)', popover_title: '', access: 'PRO', override_classic: 'false', mkt_lvl: '', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Fundamental Indicators', format: 'Money', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: 50, c_max: 100, min: 0, max: 100, active: false }; this.indicators['ha_house_value'] = { mapid: 'hv', label: 'Median Home Value', popover_title: '', access: 'PRO,LITE,PMT,JV', override_classic: 'false', mkt_lvl: '', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Fundamental Indicators', format: 'Money', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: 100000, c_max: 300000, min: 0, max: 3000000, active: false }; this.indicators['ha_house_value_pct'] = { mapid: 'hv', label: 'Median Home Value (Rank)', popover_title: '', access: 'PRO', override_classic: 'false', mkt_lvl: '', // Market Level Restriction: "All", "State", "State-MSA", etc... type:'', score:'', capita:'', group: 'HousingAlerts', cat: 'Fundamental Indicators', format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) prep: '', // Symbol Before Values appn: '', // Symbol After Values step: 1, c_min: 50, c_max: 100, min: 0, max: 100, active: false }; // this.indicators['master_score_noranks_normalised'] = { // mapid: 'hv', // label: 'MM MS RAW', // popover_title: '', // access: 'PRO', // mkt_lvl: '', // Market Level Restriction: "All", "State", "State-MSA", etc... // type:'', // score:'', // capita:'', // group: 'HousingAlerts', // cat: 'Fundamental Indicators', // format: 'Whole', // Number formatting "Percent" or "Whole" or "Money" or "Radio" ( with options ) // prep: '', // Symbol Before Values // appn: '', // Symbol After Values // step: 1, // c_min: 50, // c_max: 100, // min: 0, // max: 100, // active: false // }; /* mls_ha_sne_per10Kpop */ // Create Variations for MLS indicators for (const indicatorKey in this.indicators) { // set some defaults if (typeof this.indicators[indicatorKey]['mapid'] == 'undefined') this.indicators[indicatorKey]['mapid'] = 'rtp'; if (typeof this.indicators[indicatorKey]['access'] == 'undefined') this.indicators[indicatorKey]['access'] = 'PRO,LITE,PMT'; if (typeof this.indicators[indicatorKey]['override_classic'] == 'undefined') this.indicators[indicatorKey]['override_classic'] = 'false'; if (typeof this.indicators[indicatorKey]['mkt_lvl'] == 'undefined') this.indicators[indicatorKey]['mkt_lvl'] = 'All'; if (typeof this.indicators[indicatorKey]['type'] == 'undefined') this.indicators[indicatorKey]['type'] = ''; if (typeof this.indicators[indicatorKey]['score'] == 'undefined') this.indicators[indicatorKey]['score'] = ''; if (typeof this.indicators[indicatorKey]['capita'] == 'undefined') this.indicators[indicatorKey]['capita'] = ''; if (typeof this.indicators[indicatorKey]['group'] == 'undefined') this.indicators[indicatorKey]['group'] = 'HousingAlerts'; if (typeof this.indicators[indicatorKey]['cat'] == 'undefined') this.indicators[indicatorKey]['cat'] = 'Fundamental Indicators'; if (typeof this.indicators[indicatorKey]['format'] == 'undefined') this.indicators[indicatorKey]['format'] = 'Whole'; if (typeof this.indicators[indicatorKey]['prep'] == 'undefined') this.indicators[indicatorKey]['prep'] = ''; if (typeof this.indicators[indicatorKey]['appn'] == 'undefined') this.indicators[indicatorKey]['appn'] = ''; if (typeof this.indicators[indicatorKey]['step'] == 'undefined') this.indicators[indicatorKey]['step'] = 1; if (typeof this.indicators[indicatorKey]['c_min'] == 'undefined') this.indicators[indicatorKey]['c_min'] = 0; if (typeof this.indicators[indicatorKey]['c_max'] == 'undefined') this.indicators[indicatorKey]['c_max'] = 10000; if (typeof this.indicators[indicatorKey]['min'] == 'undefined') this.indicators[indicatorKey]['min'] = 0; if (typeof this.indicators[indicatorKey]['max'] == 'undefined') this.indicators[indicatorKey]['max'] = 10000; if (typeof this.indicators[indicatorKey]['active'] == 'undefined') this.indicators[indicatorKey]['active'] = false; if (indicatorKey.indexOf('mls_') == 0 && indicatorKey.indexOf('mls_score') != 0) { const indicatorKeyAbsolute = indicatorKey.replace('_per10Kpop',''); // "YoY" this.indicators[indicatorKeyAbsolute + '_yy'] = { label: this.indicators[indicatorKey].label + ' (YoY % Chng)', access: 'PRO,LITE,PMT,JV', c_min: -1000, c_max: 1000, min: -1000, max: 1000, active: false }; // "MoM" this.indicators[indicatorKeyAbsolute + '_mm'] = { label: this.indicators[indicatorKey].label + ' (MoM % Chng)', access: 'PRO', c_min: -1000, c_max: 1000, min: -1000, max: 1000, active: false }; // // "YoY percentile" // this.indicators[indicatorKeyAbsolute + '_yy_pct'] = { // label: this.indicators[indicatorKey].label + ' (YoY Pct.)', // access: 'PRO', // c_min: 0, // c_max: 100, // min: 0, // max: 100, // active: false // }; // // "MoM Percentile" // this.indicators[indicatorKeyAbsolute + '_mm_pct'] = { // label: this.indicators[indicatorKey].label + ' (MoM Pct.)', // access: 'PRO', // c_min: 0, // c_max: 100, // min: 0, // max: 100, // active: false // }; // Per 10K Pop. if (typeof this.indicators[indicatorKey].hasPer10KpopVariation == 'boolean') { this.indicators[indicatorKey + '_per10Kpop'] = { label: this.indicators[indicatorKey].label + ' (Per 10K)', access: 'PRO,LITE,PMT,JV', c_min: 0, c_max: 100000, min: 0, max: 100000, active: false }; this.indicators[indicatorKey + '_per10Kpop_pct'] = { label: this.indicators[indicatorKey].label + ' (Rank) (Per 10K)', access: 'PRO', c_min: 0, c_max: 100, min: 0, max: 100, active: false }; // this.indicators[indicatorKey].label += ' (Total)'; this.indicators[indicatorKey].label += ''; } else { // "Percentile" this.indicators[indicatorKey + '_pct'] = { label: this.indicators[indicatorKey].label + ' (Rank)', access: 'PRO', c_min: 0, c_max: 100, min: 0, max: 100, active: false }; } } } // Duplicate filter indicators for the "Step 1" parent market filter. for (const indicatorKey in this.indicators) { this.indicators['parent__' + indicatorKey] = JSON.parse(JSON.stringify(this.indicators[indicatorKey])); // Use this trick to CLONE and Not link to the original object this.indicators[indicatorKey].is_parent_indicator = false; this.indicators['parent__' + indicatorKey].is_parent_indicator = true; this.indicators['parent__' + indicatorKey].active = false; this.indicators['parent__' + indicatorKey].mkt_lvl = ''; } //------------------------------------------------------------------- // Assign access restrictions to the list of indicators: for (const indicatorKey in this.indicators) { this.indicators[indicatorKey].available = true; this.indicators[indicatorKey].upgrade_required = false; var indicatorAccessStrings = this.indicators[indicatorKey].access.split(','); if (!this.inArray(ha_tools_access_level, indicatorAccessStrings)) { if (ha_tools_access_level == 'JV') { // delete this.indicators[indicatorKey]; this.indicators[indicatorKey].available = false; } else { this.indicators[indicatorKey].upgrade_required = true; } } if (typeof this.indicators[indicatorKey].parent_market_data_for_mm == 'undefined') { this.indicators[indicatorKey].parent_market_data_for_mm = false; } // this.indicators[indicatorKey].restriction_css_class = 'State-MSA'; } //------------------------------------------------------------------- // Set variation types for ALL indicators: for (const indicatorKey in this.indicators) { let variation = 'raw'; // default if (indicatorKey.indexOf('_mm') == -1 && indicatorKey.indexOf('_pct') > 0) variation = 'pct'; if (indicatorKey.indexOf('_mm') == -1 && indicatorKey.indexOf('_per10Kpop') > 0) variation = 'per10Kpop'; if (indicatorKey.indexOf('_mm') == -1 && indicatorKey.indexOf('_per10Kpop_pct') > 0) variation = 'per10Kpop_pct'; if (indicatorKey.indexOf('_mm') == -1 && indicatorKey.indexOf('_percentile') > 0) variation = 'pct'; if (indicatorKey.indexOf('_pct') == -1 && indicatorKey.indexOf('_mm') > 0) variation = 'mm'; if (indicatorKey.indexOf('_pct') == -1 && indicatorKey.indexOf('_yy') > 0) variation = 'yy'; if (indicatorKey.indexOf('_pct') == -1 && indicatorKey.indexOf('_yyt') > 0) variation = 'yyt'; if (indicatorKey.indexOf('_pct') == -1 && indicatorKey.indexOf('_yy_change') > 0) variation = 'yy_change'; if (indicatorKey.indexOf('_percentile_yy_change') > 0) variation = 'percentile_yy_change'; if (indicatorKey.indexOf('_mm_pct') > 0) variation = 'mm_pct'; if (indicatorKey.indexOf('_yy_pct') > 0) variation = 'yy_pct'; if (indicatorKey.indexOf('_yy_percentile') > 0) variation = 'yy_pct'; this.indicators[indicatorKey]['variation'] = variation; } //------------------------------------------------------------------- } //==================================================================================================== //==================================================================================================== //==================================================================================================== isFilterIndicatorBasic(indicatorKey) { //---- Special Cases -------------------------------------- if (indicatorKey == 'rent_cagr3y') return false; if (indicatorKey == 'rent_cagr3y_pct') return false; if (indicatorKey == 'rent_cagr5y') return false; if (indicatorKey == 'rent_cagr5y_pct') return false; if (indicatorKey == 'score_master_percentile') return false; if (indicatorKey == 'score_master_normalized_percentile') return false; //--------------------------------------------------------- if (indicatorKey.indexOf('_pct') > 0 && typeof this.indicators[indicatorKey.replace('_pct','')] == 'object') return false; if (indicatorKey.indexOf('_per10Kpop') > 0 && typeof this.indicators[indicatorKey.replace('_per10Kpop','')] == 'object') return false; if (indicatorKey.indexOf('_percentile') > 0 && typeof this.indicators[indicatorKey.replace('_percentile','')] == 'object') return false; if (indicatorKey.indexOf('_mm') > 0 && typeof this.indicators[indicatorKey.replace('_mm','')] == 'object') return false; if (indicatorKey.indexOf('_yy') > 0 && typeof this.indicators[indicatorKey.replace('_yy','')] == 'object') return false; if (indicatorKey.indexOf('_yyt') > 0 && typeof this.indicators[indicatorKey.replace('_yyt','')] == 'object') return false; if (indicatorKey.indexOf('_yy_change') > 0 && typeof this.indicators[indicatorKey.replace('_yy_change','')] == 'object') return false; if (indicatorKey.indexOf('_mm') > 0 && typeof this.indicators[indicatorKey.replace('_mm','') + '_per10Kpop'] == 'object') return false; if (indicatorKey.indexOf('_yy') > 0 && typeof this.indicators[indicatorKey.replace('_yy','') + '_per10Kpop'] == 'object') return false; return true; } getIndicatorVariation(basicIndicatorKey, variation) { //---- Special Cases -------------------------------------- if (ha_tools_access_level == 'JV' && basicIndicatorKey == 'ha_house_rent' && variation == 'cagr3y') return false; if (basicIndicatorKey == 'ha_house_rent' && variation == 'cagr3y') return 'rent_cagr3y'; if (basicIndicatorKey == 'ha_house_rent' && variation == 'cagr3y_pct') return 'rent_cagr3y_pct'; if (basicIndicatorKey == 'ha_house_rent' && variation == 'cagr5y') return 'rent_cagr5y'; if (basicIndicatorKey == 'ha_house_rent' && variation == 'cagr5y_pct') return 'rent_cagr5y_pct'; if (basicIndicatorKey == 'ha_house_rent' && variation == 'yy') return 'ha_house_rent_yy'; if (basicIndicatorKey == 'ha_house_rent' && variation == 'yy_pct') return 'ha_house_rent_yy_pct'; if (basicIndicatorKey == 'score_master_normalized' && variation == 'pct') return 'score_master_normalized_percentile'; //--------------------------------------------------------- for (const indicatorKey in this.indicators) { // if (basicIndicatorKey.indexOf('_per10Kpop') >= 0 && variation != 'raw' && variation != 'pct') { // basicIndicatorKey = basicIndicatorKey.replace('_per10Kpop',''); // } if (basicIndicatorKey == 'score') { // Gets special treatment because 'score' also matches a few other scores star start with that. if (variation == 'yy') return 'score_yy'; if (variation == 'raw') return 'score'; return false; } if (this.indicators[indicatorKey].variation == variation && indicatorKey.indexOf(basicIndicatorKey) == 0) return indicatorKey; } return false; } indicatorHasVariationsOfType(basicIndicatorKey, variationType) { for (const variationKey in this.filterIndicatorVariations) { if (this.filterIndicatorVariations[variationKey].type == variationType) { const fullIndicatorKey = this.getIndicatorVariation(basicIndicatorKey, this.filterIndicatorVariations[variationKey].code); if ( fullIndicatorKey !== false) { if (this.indicators[fullIndicatorKey]?.available) { // console.log(">" + basicIndicatorKey + " has option: " + fullIndicatorKey); return true; } } } } return false; } indicatorHasAnyVariationsAvailable(basicIndicatorKey, withUpgrade) { for (const variationKey in this.filterIndicatorVariations) { const fullIndicatorKey = this.getIndicatorVariation(basicIndicatorKey, this.filterIndicatorVariations[variationKey].code); if ( fullIndicatorKey !== false) { if (this.indicators[fullIndicatorKey]?.available) { if (withUpgrade || !this.indicators[fullIndicatorKey]?.upgrade_required) { if (false && basicIndicatorKey == 'score_master_normalized') { console.log("[" + basicIndicatorKey + "] has option: " + fullIndicatorKey + "; var key:[" + this.filterIndicatorVariations[variationKey].code + "]"); } return true; } } } } return false; } isIndicatorVariationAvailable(basicIndicatorKey, variationType) { const fullIndicatorKey = this.getIndicatorVariation(basicIndicatorKey, variationType); if (fullIndicatorKey === false) return false; return this.indicators[fullIndicatorKey].available; } get_indicators() { return this.indicators; } get_indicator_groups() { return this.indicatorGroups; } get_filter_indicator_variations() { return this.filterIndicatorVariations; } get_indicator_label(dataset_code_full) { if (typeof this.indicators[dataset_code_full] == 'object') { if (typeof this.indicators[dataset_code_full].label == 'string') { return this.indicators[dataset_code_full].label; } } return 'LBL[' + dataset_code_full + ']'; } }