var formFields = {};

// Init
function formInit() {
    var firstOne = true;
    for (var field in formFields) {
        var element = document.getElementById(field);
        if (element==null) {
            continue; // For label and others that might not have a control
        }
        if (firstOne) {
            try {
                if (element.type!="checkbox") {
                    element.focus();
                }
            } catch (e) {
            }
            firstOne = false;
        }
        fieldInit(element, formFields[field]);
    }
}
function fieldInit(element, field) {
    if (element.tagName=="INPUT") {
        if (element.type=="checkbox") {
            element.checked = field['value'];
        } else {
            element.value = field['value'];
        }
    } else if (element.tagName=="SELECT") {
        selectInit(element, field['value']);
    } else if (element.tagName=="TEXTAREA") {
        element.value = field['value'];
    }

    if (field['group']!='') {
        formGroupChange(field['group'], element.value);
    }
}
var ftime = true;
function selectInit(element, value) {
    for (var i=0;i<element.options.length;++i) {
        var option = element.options[i];
        if (option.value==value) {
            element.selectedIndex = option.index;
            break;
        }
    }
}

// Validation
function formIsHidden(f) {
    if (f==document.body) {
        return false;
    }
    if (f.style.display=="none") {
        return true;
    } else {
        return formIsHidden(f.parentNode);
    }
}
function formFieldValidate(id) {
    if (formFields[id]['required']) {
        var f = document.getElementById(id);
        if (formIsHidden(f)) {
            return true;
        }
        if (f.type=="checkbox") {
            return f.checked;
        }
        return !(f.value=="");
    } else {
        return true;
    }
}

function formFieldLengthCheck(id) {
    var f = document.getElementById(id);
    if (f.tagName=="INPUT" && f.type=="text") {
        if (f.value.length>255) {
            alert("One line text fields are limited to 255 characters");
            return false;
        }
    }
    if (f.tagName=="TEXTAREA" && f.value.length>32000) {
        alert("Text fields are limited to 32,000 characters")
        return false;
    }
    return true;
}
function formValidate() {
    for (var f in formFields) {
        if (!formFieldValidate(f)) {
            try {
               alert(formValidationMessage);
            } catch (e) {
                alert("Please fill all required fields");
            }
            return false;
        }
        if (!formFieldLengthCheck(f)) {
            return false;
        }
    }
    return true;
}

// Groups
var formGroups = null;
function formGroupChange(name, value) {
    if (formGroups==null) {
        formGroups = {};
        setTimeout(function(){formGroupChange(name, value)}, 50);
        return;
    }
    var formGroup = formGroups[name];
    if (formGroup==null) {
        formGroup = {};
        formGroups[name] = formGroup;
    }

    var div = document.getElementById(name+'.'+value);
    if (div!=null) {
        formGroup[name+'.'+value] = div;
    }
    for (var id in formGroup) {
        div = formGroup[id];
        div.style.display = (name+'.'+value==id)?"":"none";
    }
}

// Attachemnts
var formAttachments = 0;
function formAttachmentChange(field, description) {
    if (field.populated) {
        return;
    }
    field.populated = true;
    formAttachmentAddNew(field, description);
    formAttachmentAddRemove(field);
}
function formAttachmentAddRemove(field) {
    var img = field.parentNode.lastChild;
    img.className = "attachmentdelete";
    var id = field.id;
    img.onclick = function() { formAttachmentRemove(id) };
}
function formAttachmentRemove(id) {
    var field = document.getElementById(id);
    field.parentNode.parentNode.removeChild(field.parentNode);
}
function formAttachmentAddNew(field, description) {
    var div = document.createElement("div");
    div.className = "attachmentcontainer";

var pec = document.createElement("input");
    pec.type = "text";
    pec.name = "id";
    pec.size = "2";
   div.appendChild(pec);

    if (description) {
        var dfield = document.createElement("input");
        dfield.className = "form";
        dfield.name = field.name+"description";
        dfield.type = "text";
        div.appendChild(dfield);


    }

    var newField = document.createElement("input");
    newField.type = field.type;
    newField.className = "form";
    newField.id = field.id+formAttachments;
    newField.name = field.name;
    newField.onchange = field.onchange;
    div.appendChild(newField);



   


    field.parentNode.parentNode.appendChild(div);
    formAttachments++;


}

