/**
 *  Extends the array object to have 
 *      indexOf: index of supplied value
 *      inArray: whether a value is in the array
 *      remove: remove desired indexes of an array
 */
(function() {
    if(!Array.prototype.indexOf) {
        Array.prototype.indexOf = function(val) {
            for (var n = 0; n < this.length; n++) {
                if (this[n] == val) {
                    return n;
                }
            }
            return -1;
        }
    }
    if(!Array.prototype.inArray) {
        Array.prototype.inArray = function (value) {
            for (var i=0; i < this.length; i++) {
                if (this[i] === value) {
                    return true;
                }
            }
            return false;
        }
    }
    // Array Remove - By John Resig (MIT Licensed) 
    // http://ejohn.org/blog/javascript-array-remove/
    if(!Array.prototype.remove) {
        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 toFixed = function(length) {
        var i = parseFloat(this);
        if(isNaN(i)) { i = 0.00; }
        debug('STring::toFixed. init: '+this+', parsed: '+i);
        var minus = '';
        if(i < 0) { minus = '-'; }
        i = Math.abs(i);
        i = parseInt((i + .005) * 100);
        i = i / 100;
        s = new String(i);
        var parts = s.split('.');
        debug('string parts', parts);
        if(parts[1]) {
            parts[1] = parts[1].toString().padRight('0', length);
        }
        s = minus + parts.join('.');
        return s;
    }
    if(!Number.prototype.toFixed) {
        Number.prototype.toFixed = toFixed;
    }
    if(!String.prototype.toFixed) {
        String.prototype.toFixed = toFixed;
    }

    if(!String.prototype.padLeft) {
        String.prototype.padLeft = function(padString, length) {
            var str = this;
            while (str.length < length) {
                str = padString + str;
            }
            return str;
        }
    }
    if(!String.prototype.padRight) {
        String.prototype.padRight = function(padString, length) {
            var str = this;
            while (str.length < length) {
                str = str + padString;
            }
            return str;
        }
    }

    /**
     * Extend jQuery to add some custom functions
     */
    if(!$.postJSON) {
        $.extend({
            /**  
             * Post information to server and ensure json return data
             */
            postJSON: function( url, data, callback ) {
                return $.post(url, data, callback, "json");
            }
        });
    }

})();
