/**
 * ican.js
 * 
 * icanのメインJS。
 * 依存ライブラリのロードなど。
 * 
 * @package    Ican
 * @copyright  Befool,Inc.
 * @author     Satoshi Kiuchi <satoshi.kiuchi@befool.co.jp>
 */
/*====================
  初期化
====================*/
    //グローバル空間の確立
    var ICAN = {};
    var NULL = null;
    
    
/*====================
  関数定義
====================*/
    /**
     * 名前空間の生成。
     * 指定の空間にオブジェクトを生成できる。
     * ex)
     * ICAN.namespace('Admin');
     * ICAN.namespace('ICAN.Admin');
     * 上の二つは同じ意味になります(最初のICANは省略可能)。
     * @access     public
     * @param      string  名前空間名
     */
    ICAN.namespace = function()
    {
        var a = arguments, o = null, j, d;
        for (i=0; i<a.length; i++) {
            d = a[i].split('.');
            o = ICAN;
            for (j=(d[0] == 'ICAN') ? 1 : 0; j<d.length; j++) {
                o[d[j]] = o[d[j]] || {};
                o = o[d[j]];
            }
        }
        return o;
    }
    
    
    /**
     * 動的な継承サポート？
     * @access     public
     */
    ICAN.extend = function(subc, superc, overrides)
    {
        var F = function(){};
        F.prototype = superc.prototype;
        subc.prototype = new F();
        subc.prototype.constructor = subc;
        subc.superclass = superc.prototype;
        if (superc.prototype.constructor == Object.prototype.constructor) {
            superc.prototype.constructor=superc;
        }
        //上書き
        if (overrides) {
            for (var i in overrides) {
                subc.prototype[i] = overrides[i];
            }
        }
    }
