﻿
// ############################ PS 클래스 #################################################
//
// 시스템 기반 클래스 이루어져 있음 (Static 클래스)
//
// 속성
//  scriptPath : 스크립트 경로 (string)
//  classList  : 참조 클래스 목록 (object)
//
// 메소드
//  importScript : 스크립트 추가


PS.System = {};

// 현재 실행 시스템 명 (10/02/08, 작성자 : Roy)
PS.System.name = "";

// 스크립트 경로 (09/10/21, 작성자 : Roy)
PS.System.scriptPath = "/" + PS.ProgramRoot + "/Script/PS/";

// 참조 클래스 목록 (09/10/21, 작성자 : Roy)
PS.System.classList = {};

// 스크립트 추가
PS.System.importScript = function(path) {
    if (!PS.System.classList[path.toLowerCase()]) {
        document.writeln("<script language=\"javascript\" src=\"" + path + "\"></script>");
        PS.System.classList[path.toLowerCase()] = true;
    }
}

// Css 동적 추가
PS.System.importCSS = function(fileName) {
    if (!PS.System.classList[fileName.toLowerCase()]) {
        document.writeln("<link rel=\"stylesheet\" href=\"" + fileName + "\" type=\"text/css\"> \n");
        PS.System.classList[fileName.toLowerCase()] = true;
    }
}


// 기본 클래스 추가
PS.System.importClass = function(className) {
    var url = PS.System.scriptPath + className + ".js";
    PS.System.importScript(url);
}

// DHtmlX 스크립트 추가 (09/10/23, 작성자 : Roy)
PS.System.importDHtmlScript = function(className) {
    var url = "/" + PS.ProgramRoot + "/Script/DHtmlX/" + className + ".js";
    PS.System.importScript(url);
}

// DHtmlX CSS 추가 (09/10/23, 작성자 : Roy)
PS.System.importDHtmlCSS = function(fileName) {
    var url = "/" + PS.ProgramRoot + "/Script/DHtmlX/CSS/" + fileName;
    PS.System.importCSS(url);
    
}


// 동적 스크립트 로딩
PS.System.loadDynamicScript = function loadJavascript(url, callback, charset) {

    // 기존에 이미 로드 된 경우
    if (PS.System.classList[url.toLowerCase()]) {
        if (callback) callback();
        return;
    }

    var head = document.getElementsByTagName('head')[0];
    var script = document.createElement('script');
    script.type = 'text/javascript';
    
    //if (!charset) {
    //    script.charset = "euc-kr";
    //}
    
    var loaded = false;
    script.onreadystatechange = function() {
        if (this.readyState == 'loaded' || this.readyState == 'complete') {
            if (loaded) {
                return;
            }
            loaded = true;
            PS.System.classList[url.toLowerCase()] = true;
            if (callback) callback();
        }
    }
    script.onload = function() {
        PS.System.classList[url.toLowerCase()] = true;
        if (callback) callback();
    }
    script.src = url;
    head.appendChild(script);

}

// 여러 파일 동적 로딩
// params 스크립트 파일 경로, callback
PS.System.loadDynamicScriptList = function() {

    var args = $A(arguments);
    var functions = [];

    for (var i = 0; i < args.length - 1; i++) {

        functions.push(
            {
                thisScriptFile: args[i],
                thisFunction:
                    function(index) {
                        if (index < functions.length - 1)
                            PS.System.loadDynamicScript(functions[index].thisScriptFile, function() { functions[index + 1].thisFunction(index + 1) });
                        else
                            PS.System.loadDynamicScript(functions[index].thisScriptFile, function() { if (args[args.length - 1]) args[args.length - 1](); });

                    }
            }
        );

    }

    // 다음 function 재설정
    for (var i = 0; i < functions.length - 1; i++) {
        functions[i].nextFunction = functions[i + 1].nextFunction;
    }

    // 함수 실행
    functions[0].thisFunction(0);

}

// jQuery doucment.ready 이벤트 처음에 걸기
PS.System.readyEventFirst = function(fn) {

    var arrReadyEvent = [fn];
    arrReadyEvent.addArray(jQuery.readyList);
    jQuery.readyList = arrReadyEvent;

}









// #########  별칭 생성 #############
$k.$s = PS.System;