/**
*
*  Indicators
*  =================================
*  http://www.godmode-trader.de/
*  2007 Martin Kleinhans 
*
**/
var Indicators = {
  averages: undefined,
  
  indicators: undefined,
  
  types: undefined,
  
  sorted: new Object(),
  
  addIndicator: function(name,data) {
    Indicators.indicators[name] = data;  
  },
   
  getIndicator: function(name) {
    if(Indicators.indicators[name] != undefined) {
      return Indicators.indicators[name];
    }
    return false;
  },
  
  getTypeNames: function() {
    return Indicators.types;
  },
  
  getIndicatorNames: function() {
    return Indicators.indicators.keys();
  },
  
  initialize: function() {
    Indicators.averages = {};
    Indicators.indicators = {};
    
    Indicators.types = new Array();
    Indicators.types[0] = "Durchschnitte und Preisb&auml;nder";
    Indicators.types[1] = "Trendfolgende Indikatoren";
    Indicators.types[2] = "Volatilit&auml;t/Trendst&auml;rke Indikatoren";
    Indicators.types[3] = "Volumenbasierte Indikatoren";
    Indicators.types[4] = "Oszillatoren";
    Indicators.types[5] = "Kennzahlen";
    
    // =========== Moving Averages ===========
    
    // Weighted Moving Average
    Indicators.addIndicator('SAR',{  name: 'Parabolic Time Indicator',
                            type: 2
                            });
                            
    // Weighted Moving Average
    Indicators.addIndicator('WMA',{  name: 'Weighted Moving Average',
                            type: 0,
                            param0_name: 'Periode',
                            param0_default: 10
                            });
    
    // Quadratic Weighted Moving Average                        
    Indicators.addIndicator('QWMA',{ name: 'Quadratic Weighted Moving Average',
                            type: 0,
                            param0_name: 'Periode',
                            param0_default: 10
                            });    
     
    // Simple Moving Average
    Indicators.addIndicator('SMA',{  name: 'Simple Moving Average',
                            type: 0,
                            param0_name: 'Periode',
                            param0_default: 20
                            });
                            
    // Exponential Moving Average
    Indicators.addIndicator('EMA',{  name: 'Exponential Moving Average',
                            type: 0,
                            param0_name: 'Periode',
                            param0_default: 50
                            });
    
    // Triple Moving Average
    Indicators.addIndicator('TMA',{  name: 'Triple Moving Average',
                            type: 0,
                            param0_name: 'Periode',
                            param0_default: 38
                            });
                    
    // =========== Indicators ===========
    
    // Bollinger Band
    Indicators.addIndicator('BB',{name: 'Bollinger Band',
                              type: 0,
                              param0_name: 'Periode',
                              param0_default: 20,
                              param1_name: 'Standardabweichung',
                              param1_default: 2,
                              param1_unit: ''
                              });
                                     
    // Donchian Channel
    Indicators.addIndicator('DC',{name: 'Donchian Channel',
                              type: 0,
                              param0_name: 'Periode',
                              param0_default: 20
                              });
                                       
    // Historical Volatility
    Indicators.addIndicator('HV',{name: 'Historische Volatilit&auml;t',
                              type: 5,
                              param0_name: 'Periode',
                              param0_default: 30
                              });
                              
    // Historical Volatility
    Indicators.addIndicator('PP',{name: 'Pivot-Punkte',
                              type: 5
                              });                          
    
    // Accumulation / Distribution
    Indicators.addIndicator('AD',{name: 'Accumulation / Distribution',
                              type: 3
                              });
    
    // Overbought / Oversold
    Indicators.addIndicator('OBOS',{name: 'Overbought / Oversold',
                              type: 4,
                              param0_name: 'Periode',
                              param0_default: 25
                              });
                              
    // Aroon
    Indicators.addIndicator('A',{name: 'Aroon',
                              type: 2,
                              param0_name: 'Periode',
                              param0_default: 14
                              });
                              
    // Aroon Oscillator
    Indicators.addIndicator('AO',{name: 'Aroon Oscillator',
                              type: 4,
                              param0_name: 'Periode',
                              param0_default: 14
                              });
                              
    // Average Directional Index
    Indicators.addIndicator('ADX',{name: 'Average Directional Index',
                              type: 2,
                              param0_name: 'Periode',
                              param0_default: 14
                              });
                              
    // Average True Range
    Indicators.addIndicator('ATR',{name: 'Average True Range',
                              type: 2,
                              param0_name: 'Periode',
                              param0_default: 14
                              });
                              
    // Commodity Channel Index
    Indicators.addIndicator('CCI',{name: 'Commodity Channel Index',
                              type: 2,
                              param0_name: 'Periode',
                              param0_default: 14,
                              param1_name: 'Abstand',
                              param1_default: 10
                              });
    
    // Chaikin Money Flow
    Indicators.addIndicator('CMF',{name: 'Chaikin Money Flow',
                              type: 3,
                              param0_name: 'Periode',
                              param0_default: 21
                              });
                              
    // Chaikin Oscillator
    Indicators.addIndicator('CO',{name: 'Chaikin Oscillator',
                              type: 4
                              });
                              
    // Relative Strength (Levy)
    Indicators.addIndicator('RSL',{name: 'Relative Strength (Levy)',
                              type: 4,
                              param0_name: 'Periode',
                              param0_default: 27
                              });
                                                        
    // Chaikin Volatility
    Indicators.addIndicator('CV',{name: 'Chaikin Volatility',
                              type: 2,
                              param0_name: '1. Periode',
                              param0_default: 10,
                              param1_name: '2. Periode',
                              param1_default: 10
                              });
                              
    // Detrended Price Oscillator
    Indicators.addIndicator('DPO',{name: 'Detrended Price Oscillator',
                              type: 4,
                              param0_name: 'Periode',
                              param0_default: 14
                              });
                              
    // Bollinger Band Width
    Indicators.addIndicator('BBW',{name: 'Bollinger Band Width',
                              type: 0,
                              param0_name: 'Periode',
                              param0_default: 20,
                              param1_name: 'Standardabweichung',
                              param1_default: 2,
                              param1_unit: ''
                              });
                              
    // Donchian Channel Width
    Indicators.addIndicator('DCW',{name: 'Donchian Channel Width',
                              type: 0,
                              param0_name: 'Periode',
                              param0_default: 14
                              });
    
    // Ease of Movement
    Indicators.addIndicator('EOM',{name: 'Ease of Movement',
                              type: 1,
                              param0_name: 'Periode',
                              param0_default: 13
                              });
                              
    // Fast Stochastic
    Indicators.addIndicator('FS',{name: 'Fast Stochastic',
                              type: 4,
                              param0_name: '%K Periode',
                              param0_default: 5,
                              param1_name: '%D Periode',
                              param1_default: 3
                              });
    // MACD ohne Histogramm
    Indicators.addIndicator('MACDWH',{name: 'MACD (ohne Histogramm)',
                              type: 1,
                              param0_name: '1. Periode',
                              param0_default: 12,
                              param1_name: '2. Periode',
                              param1_default: 26,
                              param2_name: '3. Periode',
                              param2_default: 9
                              });                         
    // MACD
    Indicators.addIndicator('MACD',{name: 'MACD',
                              type: 1,
                              param0_name: '1. Periode',
                              param0_default: 12,
                              param1_name: '2. Periode',
                              param1_default: 26,
                              param2_name: '3. Periode',
                              param2_default: 9
                              });
    
    // Mass Index
    Indicators.addIndicator('MI',{name: 'Mass Index',
                              type: 1
                              });
                              
    // Money Flow Index
    Indicators.addIndicator('MFI',{name: 'Money Flow Index',
                              type: 3,
                              param0_name: 'Periode',
                              param0_default: 14
                              });
                              
    // Momentum
    Indicators.addIndicator('MOM',{name: 'Momentum',
                              type: 1,
                              param0_name: 'Periode',
                              param0_default: 12
                              });
    
    // Negative Volume Index
    Indicators.addIndicator('NVI',{name: 'Negative Volume Index',
                              type: 3,
                              param0_name: 'Periode',
                              param0_default: 255
                              });
    
    // On Balance Volume
    Indicators.addIndicator('OBV',{name: 'On Balance Volume',
                              type: 3
                              });
                              
               
    // Percentage Price Oscillator
    Indicators.addIndicator('PPO',{name: 'Percentage Price Oscillator',
                              type: 4,
                              param0_name: '1. Periode',
                              param0_default: 10,
                              param1_name: '2. Periode',
                              param1_default: 30,
                              param2_name: '3. Periode',
                              param2_default: 50
                              });
                               
    // Positive Volume Index
    Indicators.addIndicator('PVI',{name: 'Positive Volume Index',
                              type: 3,
                              param0_name: 'Periode',
                              param0_default: 50
                              });
  
    // Percentage Volume Oscillator
    Indicators.addIndicator('PVO',{name: 'Percentage Volume Oscillator',
                              type: 3,
                              param0_name: '1. Periode',
                              param0_default: 12,
                              param1_name: '2. Periode',
                              param1_default: 26,
                              param2_name: '3. Periode',
                              param2_default: 9
                              });
                              
    // Price Volume Trend
    Indicators.addIndicator('PVT',{name: 'Price Volume Trend',
                              type: 3
                              });
                                          
    // Rate of Change
    Indicators.addIndicator('ROC',{name: 'Rate of Change',
                              type: 4,
                              param0_name: 'Periode',
                              param0_default: 14
                              });
                              
    // Relative Strength Index
    Indicators.addIndicator('RSI',{name: 'Relative Strength Index',
                              type: 4,
                              param0_name: 'Periode',
                              param0_default: 14
                              }); 

    // Slow Stochastic
    Indicators.addIndicator('SS',{name: 'Slow Stochastic',
                              type: 4,
                              param0_name: '%K Periode',
                              param0_default: 5,
                              param1_name: '%D Periode',
                              param1_default: 3
                              });
    
    // TRIX
    Indicators.addIndicator('TRIX',{name: 'TRIX',
                              type: 1,
                              param0_name: 'Periode',
                              param0_default: 10
                              });
     
    // Ultimate Oscillator
    Indicators.addIndicator('UOS',{name: 'Ultimate Oscillator',
                              type: 4,
                              param0_name: '1. Periode',
                              param0_default: 7,
                              param1_name: '2. Periode',
                              param1_default: 14,
                              param2_name: '3. Periode',
                              param2_default: 28
                              });

    // William %R
    Indicators.addIndicator('WR',{name: 'William %R',
                              type: 4,
                              param0_name: 'Periode',
                              param0_default: 28
                              });
                              
    // William %R
    Indicators.addIndicator('SPREADCHART',{name: 'Spread-Chart',
                              type: 5
                              });
                              
    
   for( i=0; i<this.types.length; i++ ) {
        this.sorted[this.types[i]] = new Array();
        for( ind in this.indicators ) {
           if( typeof(this.indicators[ind])=='object' && this.indicators[ind].type == i ) {
                this.indicators[ind].value = ind;
                this.sorted[this.types[i]].push(this.indicators[ind]);
            }
        }
    } 

  }
}

Indicators.initialize();
      
