// JsLoader

var _$ = function(s){
    return (typeof s == "object") ? s : document.getElementById(s);
};
var $N = function(s){
    return (typeof s == "object") ? s : document.getElementsByName(s);
};

var Browser = new Object();
Browser.ua = window.navigator.userAgent.toLowerCase();
Browser.ie = /msie/.test(Browser.ua);

var JsLoader = {
    load: function(sId, sUrl, oOption){
        var _oOption = new Object();
        if (typeof oOption == "function") 
            _oOption.onSuccess = oOption;
        else 
            _oOption = oOption;
        _oOption.decay = _oOption.decay || 1;
        _oOption.delay = _oOption.delay || 1000;
        _oOption.count = _oOption.count || 0;
        if (_oOption.timer) 
            window.clearTimeout(_oOption.timer);
   		if(_$(sId)){_$(sId).parentNode.removeChild(_$(sId));}
        var _script = document.createElement("script");
        _script.setAttribute("id", sId);
        _script.setAttribute("type", "text/javascript");
        _script.setAttribute("src", sUrl);
        document.getElementsByTagName("head")[0].appendChild(_script);
        _oOption.timer = window.setTimeout(function(){
            if (_$(sId)) 
                if (--_oOption.decay > 0) {
                    _oOption.count++;
                    JsLoader.load(sId, sUrl, _oOption);
                }
                else {
                    if (typeof _oOption.onFailure == "function") {
                        _oOption.onFailure();
                    }
                }
        }, _oOption.delay);
        if (Browser.ie) {
            _script.onreadystatechange = function(){
                if (this.readyState == "loaded" || this.readyState == "complete") {
	                if(_script.parentNode){_script.parentNode.removeChild(_script);}
                    window.clearTimeout(_oOption.timer);
                    if (typeof _oOption.isSuccess == "function") {
                        if (!_oOption.isSuccess()) {
                            if (--_oOption.decay > 0) {
                                _oOption.count++;
                                JsLoader.load(sId, sUrl, _oOption);
                            }
                            else {
                                if (typeof _oOption.onFailure == "function") {
                                    _oOption.onFailure();
                                }
                            }
                            return;
                        }
                    }
                    if (typeof _oOption.onSuccess == "function") 
                        _oOption.onSuccess();
                }
            };
        }
        else {
            _script.onload = function(){				
                if(_script.parentNode){_script.parentNode.removeChild(_script);}
                window.clearTimeout(_oOption.timer);
                if (typeof _oOption.isSuccess == "function") {
                    if (!_oOption.isSuccess()) {
                        if (--_oOption.decay > 0) {
                            _oOption.count++;
                            JsLoader.load(sId, sUrl, _oOption);
                        }
                        else {
                            if (typeof _oOption.onFailure == "function") {
                                _oOption.onFailure();
                            }
                        }
                        return;
                    }
                }
                if (typeof _oOption.onSuccess == "function") 
                    _oOption.onSuccess();
            };
        }
    }
};
