function $(id)
{
  return document.getElementById( id);
}

function $$( tagName)
{
  return document.getElementByTagName( tagName);  
}

function isNullOrEmpty( value)
{
  return (value === null || value === '');
}

function fillWithItems( el, items)
{
  var text = '';
  for (var i = 0; i < items.length; i++)  
  {
    text += items[i] + '<br/>';
  }
  
  el.innerHTML = text;
}

String.prototype.trim = function()
{
    var re = /^\s+|\s+$/g;
    return function(){ return this.replace( re, ""); };
}();

String.prototype.isBlankChar = function ()
{
  // Cambios de linea, tabs, espacios en blanco, etc...
  return (this === '' || this == ' ' || this == '\t' || this == '\n' || this == '\r' || this == '\b' ||
          this == '\f' || this == '\v'); 
};

String.prototype.isBlank = function ()
{
  var re = /^\s+$/;
  return function()
  { 
    return (this.match( re) !== null);
  };  
}();

String.prototype.superTrim = function()
{
  var start = 0;
  while (start < this.length && this.charAt( start).isBlankChar())
  {
    start++;
  }
  
  var end = this.length - 1;
  while (end > 0 && this.charAt( end).isBlankChar())
  {
    end--;
  }
  
  if (start <= end)
  {
    return this.substring( start, end + 1);
  }
  else
  {
    return '';
  }
};

String.prototype.endsWith = function( suffix)
{
  var result = false;
  if (suffix !== '')
  {
    result = ((this.indexOf( suffix) == this.length - suffix.length));
  }
  else
  {
    // Si el sufijo es vacio, siempre devolvemos true
    result = true;    
  }
  
  return result;
};

if (!String.format)
{
  String.format = function()
  {
    var result = null;
    
    if (arguments.length == 1)
    {
      result = arguments[0];
    }
    else if (arguments.length > 1)
    {
      result = arguments[0];
      
      // Reemplazamos todas las instancias de '{0}' por el argumento #1, '{1}' por el argumento #2, etc... 
      for (var i = 0; i < arguments.length - 1; i++)
      {
        result = result.replace( '{' + i + '}', arguments[i + 1]);
      }
    }
    else // arguments.length === 0
    {
      throw new Error( 'Número de argumentos incorrecto.');
    }
    
    return result;
  };
}

if (!Array.prototype.indexOf)
{
  Array.prototype.indexOf = function( value)
  {
    var result = -1;
    
    if (this.length > 0)
    {
      var i = 0;
      while (i < this.length && this[i] != value)
      {
        i++;
      }
      
      if (i < this.length)
      {
        result = i;        
      }
    }
    
    return result;
  };
}
