1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
//initialize
window.onload = function() {
    doInit();
    doDates();
}

//the Date class
function Date() {
    //define the variables
    this.label = '';
    this.errMsg = '';
    this.info = '';
    this.disabledEdit = '';
    this.display = '';
    this.optional = '';
    this.type = '';
    this.value = '';
    this.status = '';
    this.validateIcon = '';
    this.classStyle = '';
    this.validIconPath = '';
    this.invalidIconPath = '';
    this.langID = '';
    this.onDocumentReady = '';
    this.onMouseOver = '';
    this.onMouseOut = '';
    this.onMouseDown = '';
    this.onKeyDown = '';
    this.onFocus = '';
    this.onBlur = '';
    this.onPropertyChange = '';
    this.onValidate = '';

    //the constructor
    this.renderControl = function() {
        parseXML('lang.xml');
        /*
        this.button = document.createElement('button');
        //set the attributes if needed
        
        document.body.appendChild(this.button);
        eval(this.onPropertyChange); //properties have changed
        */
    }
}

function parseXML(filename) {
    var xmlDoc;
    if(document.implementation && document.implementation.createDocument) {
        xmlDoc = document.implementation.createDocument('', '', null);
    } else if(window.ActiveXObject) {
        xmlDoc = new ActiveXObject('Microsoft.XMLDOM');
     }
    xmlDoc.load(filename);
    document.getElementById("body").innerHTML = xmlDoc.getElementsByTagName("to");
    return xmlDoc;
}


//parses the style string and adds all the styles to the button
function parseStyle(style, button) {
    var currentStyle; //define the local variable
    style = rtrim(style, ';'); //trim the extra semi-colon from the end of the string
    style = style.split(';'); //split all the styles into an array (each element has a syntax: "attribute:value")
    for(var i = 0; i < style.length; i++) {
        currentStyle = style[i];
        currentStyle = currentStyle.split(':'); //split each element into "currentStyle[0] = attribute" and "currentStyle[1] = value"
        eval('button.style.' + trim(toCamelCase(currentStyle[0])) + ' = "' + trim(currentStyle[1]) + '"'); //assign the value
    }
}

//strip whitespace (or other characters) from the beginning and end of a string
function trim(str, chars) {
    return ltrim(rtrim(str, chars), chars);
}

//strip whitespace (or other characters) from the beginning of a string
function ltrim(str, chars) {
    chars = chars || "\\s";
    return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}

//strip whitespace (or other characters) from the end of a string
function rtrim(str, chars) {
    chars = chars || "\\s";
    return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}

//converts selector-case to camelCase
function toCamelCase(str) {
    return str.replace(/\-(.)/g, function(m, l){return l.toUpperCase()});
}