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

String.prototype.hashCode = function() {
  var result = 0;
  for (var i=0; i<this.length; i++)
    result += Math.pow(this.charCodeAt(i)*31, this.length-(i+1));
  return result;
}

Array.prototype.moveBack = function(index) {
	for(var i = index; i < this.length-1; i++) {
	  this[i] = this[i+1];
	}
  var removed = this[i];
	this[i] = null;
	this.length--;
  return removed;
}

Array.prototype.moveFoward = function(index) {
	for(var i = this.length; i > index; i--) {
    this[i] = this[i-1];
    this[i].index = i;
  }
}

Array.prototype.sortedInsert = function(newItem, iterator) {
  for(var i = 0; i < this.length; i++) {
    if(iterator(newItem, this[i])) break;
  }
  this.moveFoward(i);
  this[i] = newItem;
  newItem.index = i;
  return i;
}

getObj = function(sId, oFr) {
  if(!oFr) {
    oFr = self;
  }

  // verifying any element with an id
  try {
    if(document.all) {
      return (oFr.document.all[sId]);
    } else if(document.getElementById) {
      if(oFr.document.getElementById(sId) != null) {
        return (oFr.document.getElementById(sId));
      }
    }
  } catch(e) {}

  // verifying form elements
  try {
    if(oFr.document.forms.length > 0) {
      for(var i = 0 ; i < oFr.document.forms.length ; i++) {
        for(var j = 0 ; j < oFr.document.forms[i].elements.length ; j++) {
          if(oFr.document.forms[i].elements[j].name == sId)
            return (oFr.document.forms[i].elements[j]);
        }
      }
    }
  } catch(e) {}

  return (null);
}

getInnerHTML = function(sId, oFr) {
  var obj = top.getObj(sId, oFr);
  try {
    if(obj.innerHTML) {
      return (obj.innerHTML);
    }
  } catch(e) {
    return (null);
  }
}

setInnerHTML = function(sId, sNewInnerHTML, oFr) {
  var obj = top.getObj(sId, oFr);
  try {
    obj.innerHTML = sNewInnerHTML;
    return (true);
  } catch(e) {
    return (false);
  }
}

setCookie=function(name, value, expiresOrYear, month, day){
  if(!expiresOrYear){
    expiresOrYear = new Date(2010, 12, 31);
  } else if(!(expiresOrYear instanceof Date)) {
    expiresOrYear = new Date(expiresOrYear, month, day);
  }

  document.cookie=name+"="+escape(value)+";expires="+expiresOrYear.toGMTString()+"; path=\/";
}

getCookie = function(name) {
  var cStart, cEnd;
  
  name = name + "=";
  cStart = document.cookie.indexOf(name);
  if(cStart == -1) return null;
  cEnd = document.cookie.indexOf(";", cStart + name.length);
  if(cEnd == -1) cEnd = document.cookie.length;
  
  return unescape(document.cookie.substring(cStart + name.length, cEnd));
}