function Stack() {
    // attributes
    this.elements = new Array();
	
    // methods
    this.push = stackPush;
    this.pop = stackPop;
    this.top = stackTop;
    this.getNth = stackNth;
    this.size = stackGetLength
    this.getAllElements = function () {return this.elements};
    this.hasElement = stackHasElement;
    this.toString = elementsAsString;
}

function stackPush(element) {
    this.elements[this.elements.length] = element;
}

function stackPop() {
    var retVal;
    if (this.elements.length > 0) {
        retVal = this.elements[this.elements.length -1];
        this.elements.length--;
    } else {
        retVal = null;
    }
    return retVal;
}

function stackTop() {
    if (this.elements.length > 0) {
        return this.elements[this.elements.length -1];
    } else {
        return null;
    }
}

function stackNth(n) {
    if (n <= 0) return null;
    var index = this.elements.length - n;
    if (n >= 0) {
        return this.elements[index];
    }
    return null;
}

function stackGetLength() {
    return this.elements.length;
}

function stackHasElement(e) {
    for (element in this.elements) {
        if (this.elements[element] == e) return true;
    }
    return false;
}

function elementsAsString() {
    var str = "";
    for (element in this.elements) {
        str = str + this.elements[element] + "\n";
    }
    return str;
}


