if ( window.smilemaker == null )
  window.smilemaker = {};

smilemaker.Template = Class.create();
smilemaker.Template.prototype = {
  variables: undefined,
  text: undefined,


  initialize: function( templateText )
  {
    templateText = smilemaker.Template.cleanTemplate( templateText );
    this.text = templateText.split( /\{|\}/ );
    if ( templateText.charAt(0) == '{' )
      this.text.splice( 0, 0, '' );

    this.variables = new Array( this.text.length );
    for ( i = 1; i < this.text.length; i+=2 )
      this.variables[i] = this.text[i];
  },

  evaluate: function( )
  {
    for ( var i = 1; i < this.text.length; i+=2 )
    {
      var value = undefined;
      for ( var j = 0; (value == undefined ) && (j < arguments.length); j++ )
        value = arguments[j][ this.variables[i] ]
      this.text[i] = ( value ? value : '' );
    }

    return this.text.join('');
  },

  evaluateMultiple: function( contexts )
  {
    var out = new Array();
    for ( var i = 0; i < contexts.length; i++ )
      out.push( this.evaluate( contexts[i] ) );

    return out.join('');
  }

}

smilemaker.Template.cleanTemplate = function( template )
{
  template = template.replace(/%7B/g,'{');
  template = template.replace(/%7D/g,'}');
  return template;
}