var jcaRequiredFields = [];
var jcaRestrictedFields = [];

var jcaForms = Class.create();
jcaForms.prototype = {
    initialize : function (formID) {
        this.formName = "";
        this.formID = formID;
        this.loaded = false;
        this.shadow = true;
        this.X = null;
        this.Y = null;
        this.actions = [];
        this.formFill = [];
        this.formOptions = {};
        try {
            $(formID).handle = this;
        } catch (e) { }
    },
    loadForm : function() {
        new Ext.data.Connection().request({
            url: 'AjaxServ.php',
            params: {
                funcName: "loadFormClient",
                funcType: "HTML",
                'funcKey[Actions]': this.actions.join(":"),
                'funcKey[Name]': this.formName
            },
            callback: this.createForm2.bind(this)
        });
    },
    createForm2 : function(mgr, a, response) {
        this.loaded = true;
        var Elements = Ext.decode(response.responseText);
        for(var i in Elements) {
            var newElement = {};
            try {
                newElement.tag = Elements[i]["property"]["tagName"];
                if (Elements[i]["property"]["name"]) {
                    newElement.name = Elements[i]["property"]["name"];
                }
                newElement.id = this.formID + "formElement" + i;
            } catch (e) { alert(e); console.log(e); }
            for (var custom in Elements[i]["custom"]) {
                switch (custom) {
                    case "relYposition":
                        Elements[i].style.top = Elements[i]["custom"][custom];
                    break;
                    case "relXposition":
                        Elements[i].style.left = Elements[i]["custom"][custom];
                    break;
                    case "relativeTo":
                        newElement[custom] = this.formID + Elements[i]["custom"][custom];
                    break;
                    default:
                        newElement[custom] = Elements[i]["custom"][custom];
                    break;
                }
            }
            for (var prop in Elements[i]["property"]) {
                switch (prop) {
                    case "tagName":
                    break;
                    case "innerHTML":
                        newElement.children = [{ html: Elements[i]["property"][prop] }];
                    break;
                    case "required":
                        jcaRequiredFields.push(newElement.id);
                    break;
                    case "restriction":
                        newElement['ext:qtip'] = FieldValidator[Elements[i]["property"][prop]+"Help"];
                        newElement['jca:restriction'] = Elements[i]["property"][prop];
                        jcaRestrictedFields.push(newElement.id);
                    break;
                    case "checked":
//                         newElement.defaultChecked = Elements[i]["property"][prop];
                    break;
                    default:
                        newElement[prop] = Elements[i]["property"][prop];
                    break;
                }
            }
            if (this.formFill[i]) {
                if (newElement.tag == "SELECT") {
                } else if( (newElement.eleType != "label") && (newElement.tag == "DIV") ) {
                    newElement.children = [{ html: this.formFill[i] }];
                } else if (newElement.eleType == "checkbox") {
                    if (this.formFill[i] == "1" || this.formFill[i] == 1) {
                        newElement.checked = true;
                    }
                } else if (newElement.eleType == "radio") {
                    if (this.formFill[i] == newElement.value) {
                        newElement.defaultChecked = true;
                        newElement.checked = true;
                    } else {
                        newElement.defaultChecked = false;
                        newElement.checked = false;
                    }
                } else {
                    newElement.value = this.formFill[i];
                }
            }
            if (this.formOptions[newElement.name]) {
                if (newElement.tag == "DIV") {
                    for (key in this.formOptions[newElement.name]) {
                        if (this.formFill[i] == this.formOptions[newElement.name][key]) {
                            newElement.children = [{ html: key }];
                        }
                    }
                }
            }
            newElement.cls = newElement.eleType + "Element";
            var ele = Ext.DomHelper.append(this.formID, newElement);
            // handle select dropdowns
            if (this.formOptions[newElement.name]) {
                if (newElement.tag == "SELECT") {
                    var j = 0;
                    for (key in this.formOptions[newElement.name]) { // Add options
                        ele.options[j] = new Option(key, this.formOptions[newElement.name][key]);
                        j++;
                    }
                    Elements[i].style.width = '';
                    if (this.formFill[i]) { // Handle selected
                        for (var j = 0; j < ele.options.length; j++) {
                            if (ele.options[j].value == this.formFill[i]) {
                                ele.selectedIndex = j;
                            }
                        }
                    }
                }
            }
            Ext.DomHelper.applyStyles(ele, Elements[i].style);
            this.formElementCounter = i;
        }
        Ext.getDom(this.formID).style.position = 'relative';
        try {
            this.afterLoad();
        } catch (e) { alert(e); console.log(e); }
        return true;
    }
}
