var Utils =
{
  loadPage: function( page, idpage)
  {
    var updater = Ext.get( 'content').getUpdater();
    updater.update( {
      method: 'GET',
      text: 'Cargando...',
      url: 'lib/loadpages.php?page=' + page + '&idpage=' + idpage,
      scripts: true,
      nocache: true
    });
  },

  loadLayoutPage: function( page1, page2)
  {
    updater = Ext.get( 'content').getUpdater();
    updater.update( {
      method: 'GET',
      text: 'Cargando...',
      url: 'lib/loadpages.php?type=layout&page1=' + page1 + '&page2=' + page2,
      scripts: true,
      nocache: true
    });
  },

  getSelectedRow: function( grid)
  {
    var result = null;
    var record = grid.getSelectionModel().getSelected();
    var store = grid.getStore();

    var count = store.getCount();
    var i = 0;

    while (i < count && store.getAt( i) != record)
    {
      ++i;
    }

    if (i < count)
    {
      result = grid.getView().getRow( i);
    }

    return result;
  },

  /**
   * Formatea una cadena de caracteres, sustituyendo todas las expresiones {xxx}
   * por los valores correspondientes del parametro values. Si values es un
   * arreglo, las expresiones deben ser {0}, {1}, ..., {N} donde N es
   * values.length y se sustituye {i} por values[i]. Las expresiones {N+1}... se
   * quedan como estan. Si values no es un arreglo, se usan los nombres de las
   * propiedades. Por ejemplo, si values contiene las propiedades "nombre" y
   * "edad", se estos valores en todos los lugares donde se encuentren {nombre}
   * y {edad}.
   *
   * @param template
   *          Plantilla de texto, con expresiones entre llaves - {} que serán
   *          sustituidas por los valores del objeto values.
   * @param values
   *          Objeto de valores. Puede ser un arreglo o un objeto simple.
   * @returns Texto con los valores sustituidos.
   */
  format: function( template, values)
  {
    var result = template;

    // Si tiene estas propiedades, asumimos que es un arreglo
    if (values.push && values.pop && values.length)
    {
      // Es un arreglo: obtenemos los valores indexados
      for ( var i = 0; i < values.length; i++)
      {
        result = result.replace( '{' + i + '}', values[i]);
      }
    }
    else
    {
      // No es un arreglo: usamos sus propiedades
      for ( var prop in values)
      {
        if (values.hasOwnProperty( prop))
        {
          result = result.replace( '{' + prop + '}', values[prop]);
        }
      }
    }

    return result;
  },

  addMClass: function()
  {
    $('#month').addClass( 'validate[required]');
  },

  addDClass: function()
  {
    var month = document.getElementById( "month");

    if (month.value != '')
    {
      document.getElementById( "day").className = 'validate[required]';
    }
    else
    {
      document.getElementById( "day").className = '';
      alert( 'Month ==0');
    }
  },

  getUTCTime: function( date)
  {
    var minutes = date.getUTCMinutes();
    if (minutes < 10)
    {
      minutes = '0' + minutes;  
    }
    
    return date.getUTCHours() + ':' + minutes;
  },

  makeVote: function()
  {
    var val = 0;

    for (i = 0; i < document.form.voto.length; i++)
    {
      if (document.form.voto[i].checked == true)
        val = document.form.voto[i].value;
    }

    var msg_vote = nuevoAjax();
    msg_vote.open( "GET", 'admin/lib/vote.php?porcessPoll&val=' + val, true);
    var div_vote = document.getElementById( "div_vote");
    var divEncuesta = document.getElementById( "wait_msg");
    divEncuesta.innerHTML = '<div class="reload"><img src="img/loading.gif" alt="waiting" />'
        + "Waiting for vote...</div>";
    msg_vote.onreadystatechange = function()
    {
      if (msg_vote.readyState == 4)
      {
        divEncuesta.innerHTML = msg_vote.responseText;
      }
    };

    msg_vote.send( null);
  },

  showSubmitFailure: function( form, action)
  {
    Ext.MessageBox.alert( this.errorMsgTitle, action.result.error_message);
  }
};
