﻿if (!String.prototype.trim) {
    String.prototype.trim = function() {
        return this.replace(/^\s+|\s+$/g, "");
    }
}

if (!String.prototype.endsWith) {
    String.prototype.endsWith = function(value) {
        return (this.match(value + "$") == value);
    }
}

if (!String.prototype.startsWith) {
    String.prototype.startsWith = function(value) {
        return (this.match("^" + value) == value);
    }
}

if (!String.prototype.isNumeric) {
    String.prototype.isNumeric = function() {
        return !isNaN(this);
    }
}

if (!String.prototype.parseToInt) {
    String.prototype.parseToInt = function(radix) {
        if (this.isNumeric()) {
            var parseValue = this;

            while (parseValue.length > 0) {
                if (parseValue[0] == "0")
                    parseValue = parseValue.substring(1);
                else
                    break;
            }

            if (parseValue.length == 0)
                return 0;

            return parseInt(parseValue, radix);
        }

        return null;
    }
}

Function.prototype.bind = function() {
    if (arguments.length < 2 && arguments[0] === undefined)
        return this;

    var __method = this;
    var args = Common.toArray(arguments);
    var object = args.shift();

    return function() {
        return __method.apply(object, args.concat(Common.toArray(arguments)));
    }
}

Array.prototype.each = function(iterator, context) {
    var index = 0;
    iterator = iterator.bind(context);

    try {
        this._each(function(value) {
            iterator(value, index++);
        });
    }
    catch (e) {
        if (e != Common.breakToken)
            throw e;
    }

    return this;
}

Array.prototype._each = function(iterator) {
    for (var i = 0, length = this.length; i < length; i++)
        iterator(this[i], i);
}

// Use native browser JS 1.6 implementation if available.
if (Array.prototype.forEach)
    Array.prototype._each = Array.prototype.forEach;

if (!Array.prototype.indexOf) {
    Array.prototype.indexOf = function(item, i) {
        i || (i = 0);
        var length = this.length;

        if (i < 0)
            i = length + i;

        for (; i < length; i++)
            if (this[i] === item)
            return i;

        return -1;
    }
}

jQuery.fn.extend
({
    removeCss: function(cssName) {
        return this.each(function() {
            var curDom = $(this);
            jQuery.grep(cssName.split(","),
                    function(cssToBeRemoved) {
                        curDom.css(cssToBeRemoved, '');
                    });
            return curDom;
        });
    }
});

var Common =
{
    breakToken: {},

    toArray: function(iterable) {
        if (!iterable)
            return [];

        if (iterable.toArray)
            return iterable.toArray();

        var length = iterable.length, results = new Array(length);

        while (length--)
            results[length] = iterable[length];

        return results;
    }
}
