﻿var DictionaryRepository =
{ 
    jsPath: "dc/",
    getClassById: function(classId) {
        if (undefined != window["__Dictionary__" + classId])
            return window["__Dictionary__" + classId];

        var scriptSrc = this.jsPath + classId + ".js?v=1";
        if (typeof console != "undefined")
            console.debug("AjaxPro.getResource[%s]", scriptSrc);
        var res = AjaxPro.getResource(scriptSrc);

        eval("window['__Dictionary__' + classId] = " + res + ";");

        return window["__Dictionary__" + classId];
    },
    getParentId: function(classId, codeId) {
        var c = this.getClassById(classId);
        if (c == null || c.DataItems == null || c.DataItems.length <= 0) return 0;
        var itemCount = c.DataItems.length;
        var dataItem = null;

        for (var i = 0; i < itemCount; i++) {
            dataItem = c.DataItems[i];
            if (dataItem.CodeId == codeId) {
                return dataItem.ParentId;
            }
        }
    },
    getNameBuId: function() {

    },
    fillOptions: function(classId, lang, ctlA, ctlB) {
        if (ctlA == null) return;
        ctlA = $(ctlA);
        var c = this.getClassById(classId);
        if (c == null || c.DataItems == null || c.DataItems.length <= 0) return;

        var itemCount = c.DataItems.length;
        var ctlAIndex = ctlA.options.length;
        var res = App.getLangResAbbreviation(lang);
        var dataItem = null;

        for (var i = 0; i < itemCount; i++) {
            dataItem = c.DataItems[i];
            if (dataItem.ParentId == 0) {
                ctlA.options[ctlAIndex] = new Option(eval("dataItem.CodeName" + res), dataItem.CodeId);
                ctlAIndex++;
            }
        }

        if (ctlB != null) {
            ctlB = $(ctlB);
			ctlB.hasInitializeOption = ctlB.options.length > 0;
            ctlA.setAttribute("classId", classId);
            ctlA.setAttribute("lang", lang);
            addEvent(ctlA, 'change', function() { DictionaryRepository.onParentChanged(ctlA, ctlB); }, true);
        }
    },
    onParentChanged: function(src, target) {
        if (src.options.selectedIndex == 0 && typeof(target.initOptions) == "function") {
            target.initOptions();
            return;
        }
        var classId = src.getAttribute("classId"), lang = src.getAttribute("lang");
        var c = DictionaryRepository.getClassById(classId);
        if (c == null || c.DataItems == null || c.DataItems.length <= 0) return;

        var parentId = src.value;
        var itemCount = c.DataItems.length;
        var targetIndex = target.hasInitializeOption ? 1 : 0;
        var res = App.getLangResAbbreviation(lang);
        var dataItem = null;	
        target.options.length = target.hasInitializeOption ? 1 : 0;
		if (parentId == "0") return ;

        for (var i = 0; i < itemCount; i++) {
            dataItem = c.DataItems[i];
            if (dataItem.ParentId == parentId) {
                target.options[targetIndex] = new Option(eval("dataItem.CodeName" + res), dataItem.CodeId);
                targetIndex++;
            }
        }
    }
};