    Function.prototype.bind = function(parentObj) {
        var func = this;
        var args = new Array();
        for(var i = 0; i < arguments.length - 1; i++) {
            args[i] = arguments[i+1];
        }
        var temp = function() {
            return func.apply(parentObj, args);
        }
        return(temp);
    }//bind

    Array.prototype.contains = function(needle) {
        for ( var c = 0; c < this.length; c++ ) {
            if ( this[c] == needle ) return true;
        }//for
        return false;
    }//inArray


    function LoadScript ( script, path ) {
        
        this.query = [];
        this.script = script;
        this.path = path === undefined ? "" : path;
        
    }//InjectScript
    
    
    LoadScript.prototype.addParm = function ( key, value ) {
        this.query[this.query.length] = key + '=' + value;
    }//addParm
    
    
    LoadScript.prototype.load = function (force) {
        if ( this.query.length > 0 ) var querystr = '?' + this.query.join("&");
        else var querystr = '';

        var cb = new Corbiz();

        if (force !== undefined ) cb.load({script:this.script + querystr,path:this.path,force:true});
        cb.load({script:this.script + querystr,path:this.path});
    }//load


    function Corbiz() {
        this.config = {};
    }//Corbiz


    /**
     * @function
     **/
    Corbiz.prototype.getElementsByClassName = function(o, name, elementtype) {

        if ( elementtype !== undefined ) {
            var tags = o.getElementsByTagName(elementtype);
        } else {
            var tags = o.getElementsByTagName("*");
        }//if-else

        var matches = [];

        for ( var c = 0; c < tags.length; c++ ) {
            var classes = tags[c].className.split(/ /);
            if ( classes.contains(name) ) {
                matches[matches.length] = tags[c];
            }//if
        }//for

        return matches;

    }//getElementsByClassName

    Corbiz.prototype.addEventHandler = function(obj, eventname, functionname) {
        try {
            obj.addEventListener(eventname,functionname, false);
        } catch(e) {
            obj.attachEvent('on' + eventname,functionname);
        }
    }//addEventHandler

    Corbiz.prototype.getClasses = function(obj) {
        var classes = obj.className.split(/ /);
        return classes;
    }//getClasses

    Corbiz.prototype.isClass = function(obj,classname) {
        return this.getClasses(obj).contains(classname);
    }//isClass

    Corbiz.prototype.setClass = function(obj,classname) {
        var classes = this.getClasses(obj);
        if ( !classes.contains(classname) ) {
            classes[classes.length] = classname;
            obj.className = classes.join(" ");
        }//if
    }//setClass

    Corbiz.prototype.removeClass = function(obj,classname) {
        var classes = this.getClasses(obj);
        var newClasses = [];
        for ( var c = 0; c < classes.length; c++ ) {
            if ( classes[c] != classname ) newClasses[newClasses.length] = classes[c];
        }//for
        obj.className = newClasses.join(" ");
    }//removeClass

    Corbiz.prototype.replaceClass = function(obj,oldclassname,newclassname) {
        var classes = this.getClasses(obj);
        for ( var c = 0; c < classes.length; c++ ) {
            if ( classes[c] == oldclassname ) classes[c] = newclassname;
        }//for
        obj.className = classes.join(" ");
    }//replaceClass

    Corbiz.prototype.load = function(arr) {

        if ( arr === undefined ) return false;
        if ( arr.script === undefined ) return false;

        //get loaded scripts
        var scripts = document.getElementsByTagName("script");
        var included = {};
        for ( var c = 0; c < scripts.length; c++ ) {
            included[scripts[c].src] = true;
            if ( /class\.corbiz\.core\.js$/.test( scripts[c].src ) && this.config.scriptpath === undefined )
                this.config.scriptpath = scripts[c].src.replace(/class\.corbiz\.core\.js$/,"");
        }//for

        //if the path is not defined, define it.
        if ( arr.path === undefined ) var script = this.config.scriptpath + arr.script;
        else if ( !/^http:\/{2}/.test(arr.path) ) var script = this.config.scriptpath + arr.path + arr.script; 
        else var script = arr.path + arr.script;

        //if the script has been included before and inclusion should be forced
        if ( included[script] !== undefined && arr.force === undefined ) return true;

        // include the script
        var com = document.createElement("script");
            com.setAttribute("type","text/javascript");
            com.setAttribute("src", script);
        document.getElementsByTagName("head")[0].appendChild(com); 

        return true;

    }//load

