Array.prototype.moveUp = function(key)
{
    if (key == 0) return this;
    if (key >= (this.length)) return this;
    if (key > 1)
    {
        var newArr = this.slice(0, key - 1);
    }
    else
    {
        var newArr = new Array;
    }
    newArr[newArr.length] = this[key];
    newArr[newArr.length] = this[key - 1];
    var endArr = this.slice(key + 1, this.length);
    return newArr.concat(endArr);
}
Array.prototype.moveDown = function(key)
{
    if (key >= (this.length - 1)) return this;
    if (key > 0)
    {
        var newArr = this.slice(0, key);
    }
    else
    {
        var newArr = new Array;
    }
    newArr[newArr.length] = this[key + 1];
    newArr[newArr.length] = this[key];
    if (this.length > (key + 2))
    {
        var endArr = this.slice(key + 2, this.length);
        return newArr.concat(endArr);
    }
    return newArr;
}
Array.prototype.moveToTop = function(key)
{
    if (key == 0) return this;
    if (key >= (this.length)) return this;
    var startArr = new Array(this[key]);
    var middleArr = this.slice(0, key);
    var endArr = this.slice(key + 1, this.length);
    return startArr.concat(middleArr, endArr);
}
Array.prototype.moveToBottom = function(key)
{
    if (key >= (this.length - 1)) return this;
    if (key > 0)
    {
        var startArr = this.slice(0, key);
    }
    else
    {
        var startArr = new Array;
    }
    var middleArr = this.slice(key + 1, this.length);
    var endArr = new Array(this[key]);
    return startArr.concat(middleArr, endArr);
}
Array.prototype.indexOf = function(str)
{
    for (var i = 0; i < this.length; i++)
    {
        if (this[i] == str) return i;
    }
    return -1;
};
Array.prototype.has = function(str)
{
    return (this.indexOf(str) >= 0);
}
Array.prototype.deleteItem = function(i)
{
    if (i < 0 || i > (this.length - 1)) return false;
    if (i == (this.length - 1))
    {
        this.length--;
        return true;
    }
    for (var i = (i + 1); i < this.length; i++)
    {
        this[i - 1] = this[i];
    }
    this.length--;
    return true;
};
Array.prototype.deleteItemHash = function(key)
{
    var ret = new Array;
    for (var k in this)
    {
        if (k != key) ret[k] = this[k];
    }
    return ret;
}
function bs_array_maxSizeOfLevel(array, level)
{
    if (!array) return 0;
    if (array.length == 0) return 0;
    if (level == 1) return array.length;
    var ret = 0;
    for (var i = 0; i < array.length; i++)
    {
        if (array[i].length > ret) ret = array[i].length;
    }
    return ret;
}
function bs_array_toCsv(array, separator)
{
    if (typeof(separator) != 'string') separator = ';';
    var ret = '';
    for (var i = 0; i < array.length; i++)
    {
        var lineA = new Array();
        for (var j = 0; j < array[i].length; j++)
        {
            if ((array[i][j]) && (array[i][j]['value']))
            {
                lineA[j] = array[i][j]['value'];
            }
        }
        ret += lineA.join(separator) + "\n";
    }
    return ret;
}

