/* -------------------------------------------------------------------------
 * arrayprototype.js
 * by Peter Belesis. v1.0 000516
 * Copyright (c) 2000 Peter Belesis. All Rights Reserved.
 * Originally published and documented at http://www.dhtmlab.com/
 * More info at http://www.webreference.com/dhtml/column33/
 * License to use is granted if and only if this entire copyright notice
 * is included.
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 * -------------------------------------------------------------------------
 * array_roll function (c) 2001 Esben Maaløe, same licensing terms as above.
*/

if (Array.prototype.push && ([0].push(true)==true)) Array.prototype.push = null;
if (Array.prototype.splice && typeof([0].splice(0)) == "number") Array.prototype.splice = null;

if (!Array.prototype.shift) {
	function array_shift() {
		firstElement = this[0];
		this.reverse();
		this.length = Math.max(this.length-1, 0);
		this.reverse();
		return firstElement;
	}
	Array.prototype.shift = array_shift;
}

if (!Array.prototype.unshift) {
	function array_unshift() {
  	this.reverse();
		for(var i = arguments.length-1; i >= 0; i--) {
			this[this.length] = arguments[i];
		}
		this.reverse();
		return this.length;
	}
	Array.prototype.unshift = array_unshift;
}

if (!Array.prototype.push) {
	function array_push() {
		for(var i = 0; i < arguments.length; i++){
			this[this.length] = arguments[i];
		}
		return this.length;
	}
	Array.prototype.push = array_push;
}

if (!Array.prototype.pop) {
	function array_pop() {
		lastElement = this[this.length-1];
		this.length = Math.max(this.length-1, 0);
		return lastElement;
	}
	Array.prototype.pop = array_pop;
}

if (!Array.prototype.splice) {
	function array_splice(ind,cnt) {
		if (arguments.length == 0) return ind;
		if (typeof ind != "number") ind = 0;
		if (ind < 0) ind = Math.max(0, this.length + ind);
		if (ind > this.length) {
			if (arguments.length > 2) ind = this.length;
			else return [];
		}
		if (arguments.length < 2) cnt = this.length-ind;
		cnt = (typeof cnt == "number") ? Math.max(0, cnt) : 0;
		removeArray = this.slice(ind, ind+cnt);
		endArray = this.slice(ind+cnt);
		this.length = ind;
		for(var i = 2; i < arguments.length; i++) {
			this[this.length] = arguments[i];
		}
		for(var i = 0; i < endArray.length; i++) {
			this[this.length] = endArray[i];
		}
		return removeArray;
	}
	Array.prototype.splice = array_splice;
}

if (!window.Array.prototype.roll) {
	function array_roll (direction) {
		direction = direction || false;
		if (!direction) {
			this.splice(this.length, 1, this[0]);
			this.splice(0,1);
		} else {
			this.splice(0,0, this[this.length-1]);
			this.splice(this.length-1,1);
		}
	}
	window.Array.prototype.roll = array_roll;
}