Array.prototype.size = function(){ return this.length;}

Array.prototype.elementAt = function(pos){ return this[pos];}

Array.prototype.indexOf = function(elm){
	var res=-1;
	for(var i=0;i<this.size() && res<0;i++)
		if(elm == this[i]) res=i;
	return res;
}

Array.prototype.lastElement = function(){ return this[this.length-1];}

Array.prototype.contains = function (elm){ return this.indexOf(elm)>-1;}

Array.prototype.emptyArray = function(){ this.length = 0;}

Array.prototype.addElement = function(elm){
	this[this.size()] = elm;
	return elm;
}

Array.prototype.insertElementAt = function(elm,pos){
	if(pos>=this.size())
		this.addElement(elm);
	else
	{
		for(var i=this.size()-1;i>=pos;i--)
			this[i+1] = this[i];
		this[pos] = elm;
	}
	return elm;
}

Array.prototype.push = function() {
	for(i=0;i<arguments.length;i++)
		this[this.length] = arguments[i];
	return this.length;
}

Array.prototype.pop = function() {
	lastElm = this[this.length-1];
	this.length = Math.max(this.length-1,0);
	return lastElm;
}
    
Array.prototype.shift = function() {
  elm0 = this[0];
  this.reverse();
  this.length = Math.max(this.length-1,0);
  this.reverse();
  return elm0;
}

Array.prototype.unshift = function() {
  this.reverse();
  for(var i=arguments.length-1; i>=0; i--)
		this[this.length] = arguments[i];
  this.reverse();
  return this.length
}

Array.prototype.removeElementAt = function(pos){
	var elm = this.elementAt(pos);
	for(var i=pos; i < this.size()-1; i++)
		this[i] = this[i+1];
	this.length--;
	return elm;
}

Array.prototype.removeElement = function(elm){
	var idx = this.indexOf(elm);
	if (idx>-1)
		return this.removeElementAt(idx);
	return null;
}

Array.prototype.swap = function(idx0,idx1) {
  var idx1value = this[idx1];
  this[idx1] = this[idx0];
  this[idx0] = idx1value;
  return this;
 }
 
Array.prototype.clone = function() {
  var cloned = new Array();
  for(var i=0; i < this.size(); i++)
		cloned.addElement(this[i]);
  return cloned;
 }

Array.prototype.findSubIndex = function(elm){
	var res=-1;
	for(i = 0 ; i < this.length ; i++){
		if(this[i].contains(elm)){
			 for(i = 0 ; i < eval(elm).length ; i++){
			 	tmp = eval(elm);
			 	eval("go"+tmp[2]+"("+tmp[1]+",true);");
				}
		}
	}
}

Array.prototype.splice = function(start,del) {
  var arg = arguments;
  if (typeof(start)!='number') start=0;
  if (start < 0) start = Math.max(0, this.length + start);
  if (start > this.length) {
    if (arg.length > 2) start = this.length;
    else return [];
 	 }
  if (arg.length < 2) del = this.length - start;
  del = (typeof(del) == 'number')? Math.max(0,del) : 0;
  var removeArray = this.slice(start,start+del);
  var endArray = this.slice(start+del);
  this.length = start;
  for (var i=2; i < arg.length; i++) this[this.length] = arg[i];
  for (var i=0; i < endArray.length; i++) this[this.length] = endArray[i];
  return removeArray;
}