uniqueFormId = 'a1';
fieldRequiredArray = new Array();
formEmailObj = null;
downloadFileName = null;

function xavioDownloadFile(fileCrypted, fileName) {
    downloadThankYouPage = doDecryptText(fileCrypted);
    downloadFileName = fileName;
    download();
}

function download() {
    obj = document.getElementById('xavio_form_' + uniqueFormId);
    
    if (obj.getElementsByTagName('div')[2].className == 'title') {
        obj.getElementsByTagName('div')[2].innerHTML = downloadFormTitle.replace(/%title%/gi, downloadFileName);
    }

    obj.style.display = '';
}


function downloadValidateInput(obj, objType) {
    objIsOk = true;

    if (isNaN(objType) && obj == null) {
        // Check all objects (from submit)        
        divs = document.getElementById(objType).getElementsByTagName('div');
        for (x = 0; x < divs.length; x++) {
            if (divs[x].className.toLowerCase() == 'required') {
                objIsOk = false;
            }
        }

        if (objIsOk) {
            if (downloadThankYouPage != null) document.getElementById('xavio_form_' + uniqueFormId + '_redirect').value = downloadThankYouPage;
            if (downloadFormEmailSubject != null) document.getElementById('xavio_form_' + uniqueFormId + '_mailSubject').value = downloadFormEmailSubject.replace(/%title%/gi, downloadFileName);
            if (downloadFormEmailRecipient != null) document.getElementById('xavio_form_' + uniqueFormId + '_mailRecipient').value = downloadFormEmailRecipient;
            if (fieldRequiredArray.length > -1) document.getElementById('xavio_form_' + uniqueFormId + '_requiredFields').value = fieldRequiredArray;
            if (formEmailObj != null) document.getElementById('xavio_form_' + uniqueFormId + '_replyTo').value = formEmailObj.value;

            
            document.getElementById(objType).submit();
            return true;
            return false;
        } else {
            return false;
        }
    }
    else {
        switch (objType) {
            case 1:
                // no blanks allowed
                if (obj.value.replace(/ /gi, "").length == 0) objIsOk = false;
                break;

            case 2:
                // valid email required
                var filter = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
                if (!filter.test(obj.value)) objIsOk = false;
                break;

            case 3:
                // checkbox must be checked
                if (!obj.checked) objIsOk = false;
                break;

            case 4:
                // a radio button must be selected
                if (obj.value.length == 0) objIsOk = false;
                break;
        }

        if (objType == 3 || objType == 4) {
            parentObj = obj.parentNode.parentNode;
        } else {
            parentObj = obj.parentNode;
        }

        if (objIsOk) {
            parentObj.className = 'required_done';
        } else {
            parentObj.className = 'required';
        }
    }
}


function createdownloadForm() {
    fieldRequiredArray.length = 0;
    var newForm = document.createElement('form');
    newForm.className = 'xavio_custom_form';
    newForm.setAttribute('action', downloadFormAction);
    newForm.setAttribute('method', 'post');
    newForm.setAttribute('target', '_blank');
    newForm.style.display = 'none';
    newForm.id = 'xavio_form_' + uniqueFormId;
    
    newForm.onsubmit = (function() {
        return function() {
            return downloadValidateInput(null, this.id);
        }
    })();

    // Black background div with opacity
    var blackDiv = document.createElement('div');
    blackDiv.className = 'black';
    blackDiv.onclick = (function() {
        return function() {
            if (this.parentNode.style.display != 'none') this.parentNode.style.display = 'none';
        }
    })();
    newForm.appendChild(blackDiv);

    var containerDiv = document.createElement('div');
    containerDiv.className = 'container';

    // download title
    if (downloadFormTitle != null) {
        var newDiv = document.createElement('div');
        newDiv.className = 'title';
        newDiv.appendChild(document.createTextNode(downloadFormTitle));
        containerDiv.appendChild(newDiv);
    }

    // needed input variables
    if (downloadThankYouPage != null) {
        var argInput = document.createElement('input');
        argInput.id = 'xavio_form_' + uniqueFormId + '_redirect';
        argInput.name = '_redirectUrl';
        containerDiv.appendChild(argInput);
    }
    if (downloadFormEmailSubject != null) {
        var argInput = document.createElement('input');
        argInput.id = 'xavio_form_' + uniqueFormId + '_mailSubject';
        argInput.name = '_subject';
        containerDiv.appendChild(argInput);
    }
    if (downloadFormEmailRecipient != null) {
        var argInput = document.createElement('input');
        argInput.id = 'xavio_form_' + uniqueFormId + '_mailRecipient';
        argInput.name = '_recipients';
        containerDiv.appendChild(argInput);
    }

    for (a = 0; a < downloadFieldArray.length; a++) {

        if (downloadFieldArray[a][0] == 'input' ||
        downloadFieldArray[a][0] == 'select' ||
        downloadFieldArray[a][0] == 'textarea' ||
        downloadFieldArray[a][0] == 'radiobutton' ||
        downloadFieldArray[a][0] == 'checkbox' ||
        downloadFieldArray[a][0] == 'note' ||
        downloadFieldArray[a][0] == 'buttons') {


            var newDiv = document.createElement('div');
            newDiv.id = 'xavio_form_' + uniqueFormId + '_div_' + xavioFormIdNumber;
            var newFormLabel = document.createElement('label');

            if (downloadFieldArray[a][0] == 'note' || downloadFieldArray[a][0] == 'buttons') {
                newFormLabel.appendChild(document.createTextNode(''));
            } else {
                newFormLabel.appendChild(document.createTextNode(downloadFieldArray[a][1]));
            }
            newFormLabel.setAttribute('for', 'xavio_form_' + uniqueFormId + '_input_' + xavioFormIdNumber);

            switch (downloadFieldArray[a][0]) {
                case 'input':
                    // Input fields (and e-mails)
                    var newObj = document.createElement('input');
                    newObj.setAttribute('type', 'text');
                    newObj.name = downloadFieldArray[a][1];
                    newObj.id = 'xavio_form_' + uniqueFormId + '_input_' + xavioFormIdNumber;
                    if (downloadFieldArray[a][2] == 'required') {
                        newDiv.className = 'required';
                        fieldRequiredArray.push(newObj.name);

                        if (downloadFieldArray[a][1].toLowerCase() == 'email') {
                            formEmailObj = newObj;
                            newObj.onblur = (function() {
                                return function() {
                                    downloadValidateInput(this, 2);
                                }
                            })();
                        } else {
                            newObj.onblur = (function() {
                                return function() {
                                    downloadValidateInput(this, 1);
                                }
                            })();
                        }
                    }
                    break;


                case 'select':
                    // Select boxes
                    var newObj = document.createElement('select');
                    newObj.id = 'xavio_form_' + uniqueFormId + '_input_' + xavioFormIdNumber;
                    newObj.name = downloadFieldArray[a][1];
                    newObj.options[newObj.options.length] = new Option('', '');
                    for (b = 0; b < downloadFieldArray[a][2].length; b++) {
                        newObj.options[newObj.options.length] = new Option(downloadFieldArray[a][2][b], downloadFieldArray[a][2][b]);
                    }
                    if (downloadFieldArray[a][3] == 'required') {
                        newDiv.className = 'required';
                        fieldRequiredArray.push(newObj.name);

                        newObj.onblur = (function() {
                            return function() {
                                downloadValidateInput(this, 1);
                            }
                        })();
                    }
                    break;


                case 'textarea':
                    // Textareas
                    var newObj = document.createElement('textarea');
                    newObj.id = 'xavio_form_' + uniqueFormId + '_input_' + xavioFormIdNumber;
                    newObj.setAttribute('cols', '30');
                    newObj.setAttribute('rows', '5');
                    newObj.name = downloadFieldArray[a][1];
                    if (downloadFieldArray[a][2] == 'required') {
                        newDiv.className = 'required';
                        fieldRequiredArray.push(newObj.name);

                        newObj.onblur = (function() {
                            return function() {
                                downloadValidateInput(this, 1);
                            }
                        })();
                    }
                    break;


                case 'checkbox':
                    // Checkboxes
                    var newContainer = document.createElement('div');
                    for (b = 0; b < downloadFieldArray[a][2].length; b++) {
                        var newObj = document.createElement('input');
                        newObj.setAttribute('type', 'checkbox');
                        newObj.name = downloadFieldArray[a][1];
                        newObj.value = downloadFieldArray[a][2][b];
                        newObj.id = 'xavio_form_' + uniqueFormId + '_input_' + xavioFormIdNumber + '_' + b;

                        if (downloadFieldArray[a][3] == 'required') {
                            newDiv.className = 'required';
                            fieldRequiredArray.push(newObj.name);

                            newObj.onclick = (function() {
                                return function() {
                                    downloadValidateInput(this, 3);
                                }
                            })();
                        }

                        newContainer.appendChild(newObj);

                        var newLabel = document.createElement('label');
                        newLabel.appendChild(document.createTextNode(downloadFieldArray[a][2][b]));
                        newLabel.setAttribute('for', 'xavio_form_' + uniqueFormId + '_input_' + xavioFormIdNumber + '_' + b);
                        newContainer.appendChild(newLabel);
                    }
                    newObj = newContainer;
                    break;



                case 'radiobutton':
                    // Radio buttons
                    var newContainer = document.createElement('div');
                    for (b = 0; b < downloadFieldArray[a][2].length; b++) {
                        var newObj = document.createElement('input');
                        newObj.id = 'xavio_form_' + uniqueFormId + '_input_' + xavioFormIdNumber + '_' + b;
                        newObj.setAttribute('type', 'radio');
                        newObj.name = downloadFieldArray[a][1];
                        newObj.value = downloadFieldArray[a][2][b];

                        if (downloadFieldArray[a][3] == 'required') {
                            newDiv.className = 'required';

                            newObj.onclick = (function() {
                                return function() {
                                    downloadValidateInput(this, 4);
                                }
                            })();
                        }

                        newContainer.appendChild(newObj);

                        var newLabel = document.createElement('label');
                        newLabel.appendChild(document.createTextNode(downloadFieldArray[a][2][b]));
                        newLabel.setAttribute('for', 'xavio_form_' + uniqueFormId + '_input_' + xavioFormIdNumber + '_' + b);
                        newContainer.appendChild(newLabel);
                    }
                    
                    if (downloadFieldArray[a][3] == 'required') fieldRequiredArray.push(newObj.name);
                    newObj = newContainer;
                    break;

                case 'note':
                    // Notes 
                    var newObj = document.createElement('div');
                    newObj.className = 'note';
                    newObj.appendChild(document.createTextNode(downloadFieldArray[a][1]));
                    break;

                case 'buttons':
                    // Buttons at the bottom (submit and cancel)
                    var newObj = document.createElement('div');
                    for (b = 0; b < downloadFieldArray[a][1].length; b++) {
                        var newBtn = document.createElement('button');
                        newBtn.setAttribute('type', downloadFieldArray[a][1][b][0]);
                        newBtn.name = '_' + downloadFieldArray[a][1][b][1];
                        newBtn.innerHTML = downloadFieldArray[a][1][b][1];

                        if (downloadFieldArray[a][1][b][0] == 'submit') {
                            newBtn.onclick = (function(theFormId) {
                                return function() {
                                    if (downloadValidateInput(null, theFormId)) {
                                        this.disabled = true;
newForm.submit();         
this.parentNode.parentNode.parentNode.parentNode.style.display = 'none';
                                    }

                                }
                            })(newForm.id);
                        }

                        if (downloadFieldArray[a][1][b][0] == 'reset') {
                            newBtn.onclick = (function() {
                                return function() {
                                    this.parentNode.parentNode.parentNode.parentNode.style.display = 'none';
                                }
                            })();
                        }

                        newObj.appendChild(newBtn);
                    }
                    break;
            }

            newDiv.appendChild(newFormLabel);
            newDiv.appendChild(newObj);
            containerDiv.appendChild(newDiv);
            xavioFormIdNumber += 1;
        }
       
    }

    if (fieldRequiredArray.length > -1) {
        var argInput = document.createElement('input');
        argInput.id = 'xavio_form_' + uniqueFormId + '_requiredFields';
        argInput.name = '_requiredFields';
        containerDiv.appendChild(argInput);
    }

    if (formEmailObj != null) {
        var argInput = document.createElement('input');
        argInput.id = 'xavio_form_' + uniqueFormId + '_replyTo';
        argInput.name = '_replyToField';
        containerDiv.appendChild(argInput);
    }

    newForm.appendChild(containerDiv);
    document.body.appendChild(newForm);
}

function startdownloadForm() {
    try { createdownloadForm(); } catch (err) {
        alert('Something went wrong while executing the Javascript.\n\nPlease contact the site administrator. (' + err + ')');
    }
}

