window.Automizy = window.Automizy || {};
window.AutomizyAutodetect = window.AutomizyAutodetect || {id:0};
Automizy.autodetect = {};
Automizy.autodetect.detectedForms = [];
Automizy.autodetect.formCheckInterval = 0;
Automizy.autodetect.url = {
    api:{}
};
Automizy.autodetect.id = "0" || 0;
Automizy.autodetect.version = "0" || 0;
Automizy.autodetect.url.api.base = "https://gateway.automizy.com" || "https://api.automizy.com";
Automizy.newXMLHttpRequest = function() {
    if (window.XMLHttpRequest) {
        return new window.XMLHttpRequest;
    }
    else {
        try {
            return new ActiveXObject("MSXML2.XMLHTTP.3.0");
        }
        catch(ex) {
            return null;
        }
    }
};Automizy.objectToXhrData = function(obj, prefix) {
    var str = [], p;
    for(p in obj) {
        if (obj.hasOwnProperty(p)) {
            var k = prefix ? prefix + "[" + p + "]" : p, v = obj[p];
            str.push((v !== null && typeof v === "object") ?
                Automizy.objectToXhrData(v, k) :
            encodeURIComponent(k) + "=" + encodeURIComponent(v));
        }
    }
    return str.join("&");
};/******************************************
* https://gist.github.com/brettz9/7147458 *
******************************************/

Automizy.serialize = function(form, isObject) {
    var i, j, len, jLen, formElement, q = [], o = {};
    isObject = isObject || false;
    function urlencode (str) {
        return encodeURIComponent(str).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\(/g, '%28').
        replace(/\)/g, '%29').replace(/\*/g, '%2A').replace(/%20/g, '+');
    }
    function addNameValue(name, value) {
        o[name] = value;
        q.push(urlencode(name) + '=' + urlencode(value));
    }
    if (!form || !form.nodeName || form.nodeName.toLowerCase() !== 'form') {
        throw 'You must supply a form element';
    }
    for (i = 0, len = form.elements.length; i < len; i++) {
        formElement = form.elements[i];
        if (formElement.name === '' || formElement.disabled) {
            continue;
        }
        switch (formElement.nodeName.toLowerCase()) {
            case 'input':
                switch (formElement.type) {
                    case 'text':
                    case 'search':
                    case 'email':
                    case 'url':
                    case 'tel':
                    case 'number':
                    case 'range':
                    case 'date':
                    case 'month':
                    case 'week':
                    case 'time':
                    case 'datetime':
                    case 'datetime-local':
                    case 'color':
                    case 'hidden':
                    case 'password':
                    case 'button':
                    case 'submit':
                        addNameValue(formElement.name, formElement.value);
                        break;
                    case 'checkbox':
                    case 'radio':
                        if (formElement.checked) {
                            addNameValue(formElement.name, formElement.value);
                        }
                        break;
                    case 'file':
                        break;
                    case 'reset':
                        break;
                }
                break;
            case 'textarea':
                addNameValue(formElement.name, formElement.value);
                break;
            case 'select':
                switch (formElement.type) {
                    case 'select-one':
                        addNameValue(formElement.name, formElement.value);
                        break;
                    case 'select-multiple':
                        for (j = 0, jLen = formElement.options.length; j < jLen; j++) {
                            if (formElement.options[j].selected) {
                                addNameValue(formElement.name, formElement.options[j].value);
                            }
                        }
                        break;
                }
                break;
            case 'button':
                switch (formElement.type) {
                    case 'reset':
                    case 'submit':
                    case 'button':
                        addNameValue(formElement.name, formElement.value);
                        break;
                }
                break;
        }
    }
    return (isObject ? o : q.join('&'));
};(function () {
    window.AutomizyMacProtection = false;
    if (navigator.userAgent.indexOf('Mac OS X') != -1) {
        AutomizyMacProtection = true;
    }
    Automizy.autodetect.clog = function (msg) {
        if (!!Automizy.autodetect.showLogs) {
            console.log("%c " + msg.toString(), "background: #222; color: #bada55");
        }
    };
    Automizy.autodetect.submitCallback = function (formOrEvent, forceForm) {

        Automizy.autodetect.clog('Form Submit');

        var form;
        if (!!forceForm) {
            form = formOrEvent;
        } else {
            form = formOrEvent.target;
        }
        var formId = form.id || false;
        var formAction = form.action || false;
        var detectedForm = false;

        Automizy.autodetect.clog('formId: ' + formId);
        Automizy.autodetect.clog('formAction: ' + formAction);

        for (var i = 0; i < Automizy.autodetect.detectedForms.length; i++) {
            if (formId !== false) {
                if (Automizy.autodetect.detectedForms[i].formId == formId) {
                    detectedForm = Automizy.autodetect.detectedForms[i];
                    break;
                }
            } else if (formAction !== false) {
                if (Automizy.autodetect.detectedForms[i].action == formAction) {
                    detectedForm = Automizy.autodetect.detectedForms[i];
                    break;
                }
            } else {
                return;
            }
        }

        Automizy.autodetect.clog('detectedForm: ' + detectedForm);

        if (detectedForm === false) {
            return true;
        }
        var formName = form.getAttribute('name');
        var formSequenceId = false;

        var forms = document.getElementsByTagName('form');
        for (var i = 0; i < forms.length; i++) {
            if (forms[i] === form) {
                formSequenceId = i;
                break;
            }
        }

        Automizy.autodetect.clog('formSequenceId: ' + formSequenceId);

        var formObject = Automizy.serialize(form, true);
        var data = {
            form: detectedForm.id,
            fields: {}
        };

        Automizy.autodetect.clog('detectedForm.id: ' + detectedForm.id);

        var passwordInputNames = [];
        var inputs = form.getElementsByTagName('input');
        for (var i = 0; i < inputs.length; i++) {
            if (inputs[i].getAttribute("type") == "password") {
                passwordInputNames.push(inputs[i].getAttribute('name'));
            }
        }
        for (var i in formObject) {
            var value = formObject[i];
            if (passwordInputNames.indexOf(i) >= 0) {
                continue;
            }
            if (typeof data.fields[i] === 'undefined') {
                data.fields[i] = value;
            } else {
                if (typeof data.fields[i] !== 'array' && typeof data.fields[i] !== 'object') {
                    data.fields[i] = [data.fields[i]];
                }
                data.fields[i].push(value);
            }
        }

        var url = Automizy.autodetect.url.api.base + '/forms/autodetect/save/' + Automizy.autodetect.id;
        if(AutomizyMacProtection){

            var xhr = Automizy.newXMLHttpRequest();
            var dataString = JSON.stringify(data);
            xhr.open("POST", url, true);
            //xhr.open("POST", "https://developers.automizy.com/gyuri/echo.php", true);
            xhr.setRequestHeader('Content-Type', 'text/plain; charset=UTF-8');
            //xhr.setRequestHeader('Content-Length', dataString.length);
            //xhr.setRequestHeader('Host', 'api.automizy.com');
            //xhr.setRequestHeader('Connection', 'keep-alive');
            xhr.setRequestHeader('Accept-Language', 'en-us');
            //xhr.setRequestHeader('Accept-Encoding', 'br, gzip, delate');
            //xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8');
            //xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8');
            //xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8');
            //xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8');
            //xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8');
            xhr.send(JSON.stringify(data));

        }else if (typeof jQuery !== 'undefined' && typeof jQuery.ajax === 'function') {
            jQuery.ajax({
                type: "POST",
                url: url,
                data: data
            });
        } else {
            var xhr = Automizy.newXMLHttpRequest();
            xhr.open("POST", url, true);
            xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8');
            xhr.send(JSON.stringify(data));
        }

        Automizy.autodetect.clog('send request to ' + url);

        if (typeof AutomizyAutodetect.beforeSubmit === 'function') {
            AutomizyAutodetect.beforeSubmit.apply(form, [data]);
        }

    };

    /*
    if(document.addEventListener){
        document.addEventListener("submit", callback, false);
    }else if(document.attachEvent){
        document.attachEvent('onsubmit', callback);
    }
    */

    clearInterval(Automizy.autodetect.formCheckInterval);
    Automizy.autodetect.formCheckInterval = setInterval(function () {
        for (var i = 0; i < document.forms.length; i++) {
            if (typeof document.forms[i].automizySubmitEventRegistered === 'undefined') {
                document.forms[i].automizySubmitEventRegistered = true;
                if (document.addEventListener) {
                    var formId = document.forms[i].id || false;
                    var action = document.forms[i].action || false;
                    if (formId !== false) {
                        for (var j = 0; j < Automizy.autodetect.detectedForms.length; j++) {
                            if (Automizy.autodetect.detectedForms[j].formId == formId) {
                                document.forms[i].automizyOriginalSubmitFunction = document.forms[i].onsubmit || function () {};
                                document.forms[i].onsubmit = function () {
                                    Automizy.autodetect.submitCallback.apply(this, [this, true]);
                                    this.automizyOriginalSubmitFunction.apply(this, arguments);
                                };
                                break;
                            }
                        }
                    } else if (action !== false) {
                        action = action.replace('/#', '#');
                        for (var j = 0; j < Automizy.autodetect.detectedForms.length; j++) {
                            if (Automizy.autodetect.detectedForms[j].action == action) {
                                if (AutomizyMacProtection) {
                                    var f = document.forms[i];
                                    var inputs = f.getElementsByTagName('input');
                                    /*
                                    f.onkeydown = function (e) {
                                        if (e.keyCode == 13) {
                                            Automizy.autodetect.clog('Form - Enter');
                                            var f = this.myForm;
                                            Automizy.autodetect.submitCallback.apply(f, [f, true]);
                                        }
                                    };
                                    */
                                    for (var k = 0; k < inputs.length; k++) {
                                        Automizy.autodetect.clog(inputs[k].type);
                                        var iType = inputs[k].type.toLowerCase();
                                        inputs[k].myForm = f;
                                        if (iType == 'submit') {
                                            inputs[k].onmousedown = function () {
                                                Automizy.autodetect.clog('Submit - MouseDown');
                                                var f = this.myForm;
                                                Automizy.autodetect.submitCallback.apply(f, [f, true]);
                                            };
                                        }else{
                                            inputs[k].onkeydown = function (e) {
                                                if (e.keyCode == 13) {
                                                    e.preventDefault();
                                                    e.stopPropagation();
                                                    Automizy.autodetect.clog('Input - Enter');
                                                    var f = this.myForm;
                                                    Automizy.autodetect.submitCallback.apply(f, [f, true]);
                                                    (function(f){setTimeout(function(){
                                                        f.submit();
                                                    }, 150)})(f);
                                                    //f.submit();
                                                    return false;
                                                }
                                            };
                                        }
                                    }
                                } else {
                                    document.forms[i].automizyOriginalSubmitFunction = document.forms[i].onsubmit || function () {};
                                    document.forms[i].onsubmit = function () {
                                        Automizy.autodetect.submitCallback.apply(this, [this, true]);
                                        this.automizyOriginalSubmitFunction.apply(this, arguments);
                                    };
                                }
                                break;
                            }
                        }
                    }
                } else if (document.attachEvent) {
                    document.forms[i].attachEvent('onsubmit', Automizy.autodetect.submitCallback);
                }
            }
        }
    }, 2000);

})();Automizy.autodetect.detectedForms = JSON.parse("");