/**
 * ScriptToolKit
 *
 *
 *
 */


var ScriptToolKit =  function(){};
ScriptToolKit.prototype.VERSION = '1.0.0';

/**
 * ScriptToolKit::Documentクラス
 *
 *
 *
 *
 */
ScriptToolKit.Document = function(){};
ScriptToolKit.Document.prototype.VERSION = '1.0.0';


/**
 * ScriptToolKit::Document::Loaderクラス
 *
 *
 *
 */
ScriptToolKit.Document.Loader = function(){};


/**
 * ScriptToolKit::Document::Loader
 * クラスプロパティ
 */
ScriptToolKit.Document.Loader.prototype._timer;
ScriptToolKit.Document.Loader.prototype._timeout = 100;
ScriptToolKit.Document.Loader.prototype._interval = 1000;


/**
 * ScriptToolKit::Document::Loader
 * クラスメソッド
 */

/**
 * ScriptToolKit::Document::Loader::loadメソッド
 *
 * @param   target    string
 * @param   loader    object Loaderクラスのインスタンスが内部保持している各プロパティの値
 * @return  boolean
 */
ScriptToolKit.Document.Loader.prototype.load = function(target, loader){
    if (typeof loader != 'object') {
        var loader = {};
        loader.timer        = loader.timer? loader.timer : this._timer;
        loader.timeout      = loader.timeout? loader.timeout : this._timeout;
        loader.interval     = loader.interval? loader.interval : this._interval;
        loader.onComplete   = loader.onComplete? loader.onComplete : this.onComplete;
        loader.onLoding     = loader.onLoding? loader.onLoding : this.onLoding;
        loader.onError      = loader.onError? loader.onError : this.onError;
        loader.target       = new Array();
        loader.loaded       = 0;
        loader.loadings      = 0;
        loader.count        = undefined;
        
        for (var i=0; i<target.length; i++) {
            loader.target[i] = target[i].split(':')[1];
            loader.loadings++;
        }
        for (var i=0; i<loader.target.length; i++) {
            loader[loader.target[i]] = {};
            loader[loader.target[i]].type  = target[i].split(':')[0];
            loader[loader.target[i]].name  = target[i].split(':')[1];
            loader[loader.target[i]].value = undefined;
        }
    }
    
    if (loader.timeout == 0) {
        if (typeof loader.onError == 'function') {
            loader.onError(loader);
        }
        clearTimeout(loader.timer);
        return false;
    }
    
    for (var i=0; i<loader.target.length; i++) {
        switch (loader[loader.target[i]].type) {
            case 'id' :
                if (document.getElementById(loader[loader.target[i]].name)) {
                    loader[loader.target[i]].value = document.getElementById(loader[loader.target[i]].name);
                    loader.loaded++;
                }
            break;
            case 'var' :
            case 'object' :
            case 'function' :
                try {
                    loader[loader.target[i]].value = eval(loader[loader.target[i]].name);
                    loader.loaded++;
                } catch (e) {
                    break;
                }
            break;
            default :
            break;
        }
    }
    if (loader.loaded == loader.loadings) {
        if (typeof loader.onComplete == 'function') {
            loader.onComplete(loader);
            
        }
        clearTimeout(loader.timer);
        return true;
    } else {
        loader.count = loader.timeout;
        if (typeof loader.onLoding == 'function') {
            loader.onLoding(loader);
        }
        loader.timer = setTimeout(
            function() {
                ScriptToolKit.Document.Loader.prototype.load(target, loader);
            },
            loader.interval
        );
        loader.timeout--;
    }
};


/**
 * ScriptToolKit::Document::Loader::onCompleteメソッド
 *
 * @param　loader    object Loaderクラスのインスタンスが内部保持している各プロパティの値
 *
 * @description ロード完了時に実行するメソッドの雛形
 */
ScriptToolKit.Document.Loader.prototype.onComplete = function(loader){};


/**
 * ScriptToolKit::Document::Loader::onLodingメソッド
 *
 * @param　loader    object Loaderクラスのインスタンスが内部保持している各プロパティの値
 *
 * @description ロード中に実行するメソッドの雛形
 */
ScriptToolKit.Document.Loader.prototype.onLoding = function(loader){};


/**
 * ScriptToolKit::Document::Loader::onErrorメソッド
 *
 * @param　loader    object Loaderクラスのインスタンスが内部保持している各プロパティの値
 *
 * @description ロード失敗時に実行するメソッドの雛形
 */
ScriptToolKit.Document.Loader.prototype.onError = function(loader){};


/**
 * ScriptToolKit::Document::Loader
 *
 * @examples
 * 
 * var loader = new ScriptToolKit.Document.Loader();
 *    
 * loader._timeout = 30;
 * loader.onComplete = function(loader){alert('Comp=' + loader.value)};
 * loader.onLoding = function(loader){alert('Comp=' + loader.count)};
 * loader.onError = function(loader){alert('Comp Error')};
 * loader.load('var:settings');
 *    
 *    
 * var loader2 = new ScriptToolKit.Document.Loader();
 *    
 * loader2.onComplete = function(loader){alert('onComplete2')};
 * loader2.onError = function(loader){alert('Comp2 Error')};
 * loader2.load('var:setup');
 *    
 * var loader3 = new ScriptToolKit.Document.Loader();
 *    
 * loader3.onComplete = function(loader){alert('onComplete3')};
 * loader3.onError = function(loader){alert('Comp3 Error')};
 * loader3.load('id:tt');
 */



/**
 * ScriptToolKit::Document::Loader::searchメソッド
 *
 */
ScriptToolKit.Document.search = function(target) {};







/**
 * ScriptToolKit::Eventクラス
 *
 *
 *
 */

ScriptToolKit.Event = function(){};
ScriptToolKit.Event.prototype.VERSION = '1.0.0';


/**
 * ScriptToolKit::Event::addEventListener
 *
 * @param element   object
 * @param event     string
 * @param method    function
 * @param capture   boolean
 */
ScriptToolKit.Event.addEventListener = function(element, event, method,capture) {
    try {
        element.addEventListener(event, method, capture);
    } catch(e) {
        element.attachEvent('on' + event, method, capture);
    }
}


/**
 * ScriptToolKit::Event::removeEventListener
 *
 * @param element   object
 * @param event     string
 * @param method    function
 * @param capture   boolean
 */
ScriptToolKit.Event.removeEventListener = function(element, event, method,capture) {
    try {
        element.removeEventListener(event, method, capture);
    } catch(e) {
        element.detachEvent('on' + event, method, capture);
    }
}


/**
 * ScriptToolKit::Event::stopPropagation
 *
 * @param e event
 */
ScriptToolKit.Event.stopPropagation = function(e) {
    try {
        e.stopPropagation();
    } catch(e) {
        window.event.cancelBubble = true;
    }
}


/**
 * ScriptToolKit::Event::preventDefault
 *
 * @param e event
 */
ScriptToolKit.Event.preventDefault = function(e) {
    try {
        e.preventDefault();
    } catch(e) {
        window.event.returnValue = false;
    }
}

