﻿/// <reference name="MicrosoftAjax.js" />

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Extension Methods
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Array.prototype.remove = function(from, to) {
    var rest = this.slice((to || from) + 1 || this.length);

    this.length = from < 0 ? this.length + from : from;

    return this.push.apply(this, rest);
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

var Harrison =
{
    getClassSelector: function(className) {
        /// <summary>
        /// Converts the passed in css class name into an css selector used by jQuery
        /// </summary>

        return "." + className;
    },

    getIdSelector: function(elementID) {
        /// <summary>
        /// Converts the passed in element id into an id selector used by jQuery
        /// </summary>

        return "#" + elementID;
    }
};

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Namespace declarations
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Harrison.Modules = {};
Harrison.Telerik = {};
//Harrison.Modules.UserControls = {};
Harrison.Generic = {};

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// GENERIC JAVASCRIPT ARRAY
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Harrison.Generic.list = function() {
    this.items = new Array();
};

Harrison.Generic.list.prototype.add = function(item) {
    if (this.items.length != 0) {
        var oldlen = this.items.length;
        var tmp = new Array(oldlen + 1);
        var i = 0;

        for (i = 0; i < this.items.length; i++) {
            tmp[i] = this.items[i];
        };
        tmp[(tmp.length - 1)] = item;
        this.items = new Array(tmp.length);
        for (i = 0; i < tmp.length; i++) {
            this.items[i] = tmp[i];
        };
        tmp = null;
    }
    else {
        this.items = new Array(1);
        this.items[0] = item;
    };
};

Harrison.Generic.list.prototype.addRange = function(objectArray) {
    if (this.items.length != 0) {
        var oldlen = this.items.length;
        var tmp = new Array(oldlen + objectArray.length);
        var i = 0;

        for (i = 0; i < this.items.length; i++) {
            tmp[i] = this.items[i];
        };
        for (i = 0; i < objectArray.length; i++) {
            tmp[(i + oldlen)] = objectArray[i];
        };
        this.items = new Array(tmp.length);
        for (i = 0; i < tmp.length; i++) {
            this.items[i] = tmp[i];
        };
        tmp = null;
    }
    else {
        var iloop = 0;

        this.items = new Array(objectArray.length);
        for (iloop = 0; iloop < objectArray.length; iloop++) {
            this.items[iloop] = objectArray[iloop];
        };
    };
};

Harrison.Generic.list.prototype.clear = function() {
    this.items = new Array();
};

Harrison.Generic.list.prototype.compare = function(a, b) {
    return (a == b);
};

Harrison.Generic.list.prototype.count = function() {
    return this.items.length;
};

Harrison.Generic.list.prototype.extendProperty = function(index, obj) {
    for (key in obj) {
        this.setProperty(index, key, obj[key]);
    };
};

Harrison.Generic.list.prototype.find = function(item) {
    var index = -1;
    var i = 0;

    for (i = 0; i < this.items.length; i++) {
        if (this.compare(this.items[i], item)) {
            index = i;
            break;
        };
    };

    return index;
};

Harrison.Generic.list.prototype.getItem = function(index) {
    return this.items[index];
};

Harrison.Generic.list.prototype.getItems = function() {
    return this.items;
};

Harrison.Generic.list.prototype.getProperty = function(index, property) {
    return this.items[index][property];
};

Harrison.Generic.list.prototype.insert = function(item, index) {
    if (this.items.length != 0) {
        var oldlen = this.items.length;
        var tmp = new Array(oldlen + 1);
        var i = 0;
        var j = 0;

        for (i = 0; i < tmp.length; i++) {
            if (i == index) {
                tmp[i] = item;
            } else {
                tmp[i] = this.items[j];
                j++;
            };
        };
        this.items = new Array(tmp.length);
        for (i = 0; i < tmp.length; i++) {
            this.items[i] = tmp[i];
        };
        tmp = null;
    }
    else {
        this.items = new Array(1);
        this.items[0] = item;
    };
};

Harrison.Generic.list.prototype.join = function(seprator, property) {
    var i = 0;
    var result = "";

    for (i = 0; i < this.items.length; i++) {
        if (i == (this.items.length - 1)) {
            result += (property) ? this.items[i][property] : this.items[i];
        }
        else {
            result += (property) ? this.items[i][property] : this.items[i];
            result += seprator;
        };
    };

    return result;
};

Harrison.Generic.list.prototype.remove = function(item) {
    var index = this.find(item);

    if (index != -1) {
        var tmp = new Array((this.items.length - 1));
        var i = 0;
        var j = 0;

        for (i = 0; i < this.items.length; i++) {
            if (i != index) {
                tmp[j] = this.items[i];
                j++;
            };
        };
        this.items = new Array(tmp.length);
        for (i = 0; i < tmp.length; i++) {
            this.items[i] = tmp[i];
        };
        tmp = null;
        this.count--;
    };
};

Harrison.Generic.list.prototype.removeAt = function(index) {
    if (this.items.length == 1) {
        this.items = null;
        this.items = new Array();
    }
    else {
        var tmp = new Array((this.items.length - 1));
        var i = 0;
        var j = 0;

        for (i = 0; i < this.items.length; i++) {
            if (i != index) {
                tmp[j] = this.items[i];
                j++;
            };
        };
        this.items = new Array(tmp.length);
        for (i = 0; i < tmp.length; i++) {
            this.items[i] = tmp[i];
        };
        tmp = null;
    };
};

Harrison.Generic.list.prototype.setItem = function(item, index) {
    this.items[index] = item;
};

Harrison.Generic.list.prototype.setProperty = function(index, property, value) {
    this.items[index][property] = value;
};
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/* Description:     Used to add handlers to the DOM objects. 
Examples:
function function1()
{
alert("first alert");
}

function function2()
{
alert("second alert");
}

Harrison.Generic.addEventHandler(window,"load",function2);
*/
Harrison.Generic.addEventHandler = function(to_element, event, handler) {
    if (to_element.addEventListener) { to_element.addEventListener(event, handler, false); }
    else if (to_element.attachEvent) { to_element.attachEvent("on" + event, handler); }
    else return false;
}

Harrison.Generic.stopPropagation = function(e) {
    //cancel bubbling
    e.cancelBubble = true;
    if (e.stopPropagation) {
        e.stopPropagation();
    }
}

/* Description: Used to prevent user from hitting 'Enter' key.  Pass event.keyCode. */
Harrison.Generic.preventEnterKeyPress = function(keyCode) {
    return (keyCode != 13);
}

/* Description: Used with RadTreeViews that use the checkbox. */
Harrison.Telerik.onTreeViewCheckboxesClientNodeClicked = function(sender, args) {
    var node = args.get_node();

    // If node is not already checked, check it.
    if (node.get_checkState() != 1) { node.set_checked(true); }
}
