﻿function GetJSONValue(p_jsonData, p_strKey) {
    if (p_jsonData == null || p_strKey == null) return null;
    var l_arrKey = p_strKey.split('.');
    var l_jsonData = p_jsonData;
    for (l_strKey in l_arrKey) {
        l_strKey = l_arrKey[l_strKey];
        if (l_jsonData == null) break;
        if (l_strKey.length == 0) {
            l_jsonData = l_jsonData[0];
        } else if (/#\d+/.test(l_strKey)) {
            l_jsonData = l_jsonData[parseInt(l_strKey.substr(1))];
        } else {
            l_jsonData = l_jsonData[l_strKey];
        }
    }
    return l_jsonData;
}

function SetNodeValueFromJSON(p_objNode, p_jsonData) {
    var l_strId = p_objNode.id;
    if (l_strId != null) {
        var l_objMatch = /^(.+)_\d+$/.exec(l_strId);
        if (l_objMatch != null) {
            if (document.getElementById(l_objMatch[1]) != null) {
                l_strId = l_objMatch[1];
            }
        }
        var l_jsonData = GetJSONValue(p_jsonData, l_strId)
        if (l_jsonData != null) {
            var l_strTagname = p_objNode.tagName;
            if (l_strTagname != null) {
                l_strTagname = l_strTagname.toLowerCase();
                switch (l_strTagname) {
                    case "a":
                        p_objNode.href = l_jsonData;
                        break;
                    case "div":
                    case "span":
                        p_objNode.innerHTML = l_jsonData;
                        break;
                    case "img":
                        p_objNode.src = l_jsonData;
                        break;
                    default:
                        break;
                }
            }
        }
    }
}

function SetNodeValuesFromJSON(p_objNode, p_jsonData) {
    SetNodeValueFromJSON(p_objNode, p_jsonData);
    var l_intLength = p_objNode.childNodes.length;
    for (var l_intIndex = 0; l_intIndex < l_intLength; l_intIndex++) {
        var l_objNode = p_objNode.childNodes[l_intIndex];
        SetNodeValuesFromJSON(l_objNode, p_jsonData);
    }
}

function BindElementToJSON(p_objElement, p_jsonData) {
    p_objElement.style.display = 'block';
    var l_objParentNode = p_objElement.parentNode;
    for (var l_intIndex = l_objParentNode.childNodes.length - 1; l_intIndex >= 0; l_intIndex--) {
        var l_objChildNode = l_objParentNode.childNodes[l_intIndex];
        if (l_objChildNode.tagName == p_objElement.tagName && l_objChildNode.id == p_objElement.id && l_objChildNode != p_objElement) l_objParentNode.removeChild(l_objChildNode);
    }
    for (l_Key in p_jsonData) {
        var l_jsonRecord = p_jsonData[l_Key];
        var l_objElement = p_objElement.cloneNode(true);
        l_objParentNode.insertBefore(l_objElement, p_objElement);
        SetNodeValuesFromJSON(l_objElement, l_jsonRecord);
    }
    //l_objParentNode.removeChild(p_objElement);
    p_objElement.style.display = 'none';
}
