/**
 * Todos los enums del modelo.
 */
var Enums = {
  UNKNOWN: '&lt;UNKNOWN&gt;',
  UnknownValueClass: 'unknown-value',
  
  commonResolve: function( config)
  {
    var result = null;
    
    var key = config.key * 1;
    var index = config.keys.indexOf( key);
    
    if (index != -1)
    {
      result = config.values[index];
      
      if (config.cssClasses && config.cssClasses[index])
      {
        config.metadata.css = config.cssClasses[index];
      }
    }
    else
    {
      result = config.unknownValue;
      config.metadata.css = config.unknownClass;
    }
    
    return result;
  },
  
  resolve: function( key, metadata, keys, values, cssClasses)
  {
    var config = {
      key: key, 
      metadata: metadata, 
      keys: keys, 
      values: values, 
      cssClasses: cssClasses,
      unknownValue: Enums.UNKNOWN,
      unknownClass: Enums.UnknownValueClass      
    };
    
    var result = Enums.commonResolve( config);

    metadata = config.metadata;
    return result;        
  },
  
  resolveWithNA: function( key, metadata, keys, values, cssClasses)
  {
    var config = {
      key: key, 
      metadata: metadata, 
      keys: keys, 
      values: values, 
      cssClasses: cssClasses,
      unknownValue: 'N/A',
      unknownClass: Enums.UnknownValueClass      
    };
    
    var result = Enums.commonResolve( config);

    metadata = config.metadata;
    return result;
  }  
};

var AvalancheStatus = {
  NONE: 0,
  LOW: 1,
  MODERATE: 2,
  CONSIDERABLE: 3,
  HIGH: 4,
  EXTREME: 5 ,
  
  toRender: function (value, metadata)
  {
    return Enums.resolve( value, metadata,
      [this.NONE, this.LOW, this.MODERATE, this.CONSIDERABLE, this.HIGH, this.EXTREME],
      ['None', 'Low', 'Moderate', 'Considerable', 'High', 'Extreme']);
  }
};

var StationType = {
  SKI_RESORT: 1,
  PRIVATE_WEATHER: 2,
  REGULAR: 3,
  
  toRender: function (value, metadata)
  {
    return Enums.resolve( value, metadata,
      [this.SKI_RESORT, this.PRIVATE_WEATHER, this.REGULAR],
      ['Ski Resort', 'Private Weather', 'Regular Station']);
  }
};

var Status = {
  INACTIVE: 0,
  ACTIVE: 1,
  
  toRender: function (value, metadata)
  {
    return Enums.resolve( value, metadata,
      [this.INACTIVE, this.ACTIVE],
      ['Not Active', 'Active'],
      ['status-inactive', 'status-active']);
  }
};

var MemberStatus = {
  WAITING: 0,
  ENABLED: 1,
  DISABLED: 2,
  
  toRender: function( value, metadata)
  {
    return Enums.resolve( value, metadata, 
      [this.WAITING, this.ENABLED, this.DISABLED], 
      ['Waiting', 'Enabled', 'Disabled'], 
      ['member-waiting', 'member-enabled', 'member-disabled']);
  }
};

var PublicStatus = {
  NOT_PUBLIC: 0, 
  PUBLIC: 1,
  
  toRender: function( value, metadata)
  {
    return Enums.resolve( value, metadata, 
      [this.NOT_PUBLIC, this.PUBLIC], 
      ['Not Public', 'Public'], 
      ['status-public', 'status-not-public']);
  }
};

var TrackDifficulty = {
  EASY: 1,
  BEGINNER: 2,
  MEDIUM: 3,
  DIFFICULT: 4,
  ADVANCED: 5,
  
  toRender: function( value, metadata)
  {
    return Enums.resolveWithNA( value, metadata, 
      [this.EASY, this.BEGINNER, this.MEDIUM, this.DIFFICULT, this.ADVANCED], 
      ['Easy', 'Beginner', 'Medium', 'Difficult', 'Advanced'], 
      ['track-easy', 'track-beginner', 'track-medium', 'track-difficult', 'track-advanced']);
  }
};

var WorkStatus = {
  CLOSED: 0,
  OPEN: 1,
  PARTIALLY_OPEN: 2,
  
  toRender: function( value, metadata)
  {
    return Enums.resolve( value, metadata, 
      [this.CLOSED, this.OPEN, this.PARTIALLY_OPEN], 
      ['Closed', 'Open', 'Partially Open'], 
      ['status-closed', 'status-open', 'status-partially-open']);
  }
};

var EventStatus = {
  PUBLIC: 1,
  FINISHED: 2,
  CANCELLED: 3,
  
  toRender: function( value, metadata)
  {
    return Enums.resolve( value, metadata, 
      [this.PUBLIC, this.FINISHED, this.CANCELLED], 
      ['Public', 'Finished', 'Cancelled'], 
      [null, 'event-finished', 'event-cancelled']);
  }
};

var EventType = {
  NORMAL: 1,
  SPECIAL: 2,
  BIG: 3,
    
  toRender: function( value, metadata)
  {
    return Enums.resolve( value, metadata, 
      [this.NORMAL, this.SPECIAL, this.BIG], 
      ['Normal', 'Special', 'Big'], 
      ['event-normal', 'event-special', 'event-big']);
  }
};

var MenuContentType = {
  PARENT: 0,
  TEXT: 1,
  URL: 2,
  IMAGE_GALLERY: 3
};

var EditMode = {
  ADD: 1,
  UPDATE: 2
};


