'use strict';

// Menu scroll

var c,
    currentScrollTop = 0,
    navbar = document.querySelector('nav.main');

window.addEventListener('scroll', function () {
    var a = document.documentElement.scrollTop || document.body.scrollTop;
    var b = navbar.clientHeight;

    currentScrollTop = a;

    if (c < currentScrollTop && a > b + b) {
        navbar.classList.add('scrollUp');
    } else if (c > currentScrollTop && !(a <= b)) {
        navbar.classList.remove('scrollUp');
    }
    c = currentScrollTop;
});

// Dropdown menu

function dropdown_event(dropdown, click = false) {
    var child = dropdown.getElementsByTagName('ul')[0];
    var ignore = dropdown.classList.contains('ignore-next');

    dropdown.classList.remove('ignore-next');

    if (child.style.display === 'block') {
        child.style.display = 'none';
        dropdown.classList.remove('open');
    } else {

        if (!click && ignore) return;

        child.style.display = 'block';
        dropdown.classList.add('open');
    }

    if (click)
        dropdown.classList.add('ignore-next');

    /*dropdowns.forEach(function (drop) {
        if (drop !== dropdown) {
            drop.getElementsByTagName('ul')[0].style.display = 'none';
            drop.classList.remove('open');
        }
    });*/
}

var dropdowns = document.querySelectorAll('li.dropdown');

dropdowns.forEach(function (dropdown) {
    dropdown.addEventListener('mouseover', function () {
        dropdown_event(dropdown);
    }, {passive: true});

    dropdown.addEventListener('mouseout', function () {
        dropdown_event(dropdown);
    }, {passive: true});

    /*dropdown.addEventListener('touchstart', function () {
        dropdown_event(dropdown);
    }, {passive: true});

    dropdown.addEventListener('touchcancel', function () {
        dropdown_event(dropdown);
    }, {passive: true});*/

    /*dropdown.addEventListener('click', function () {
        dropdown_event(dropdown, true);
    });*/
});

// Select redirects

var redirects = document.querySelectorAll('select.redirect');

redirects.forEach(function (redirect) {
    redirect.addEventListener('change', function () {
        window.open(redirect.value, '_blank');
    });
});

// Mobile menu toggle

document.getElementById('menu-toggle').addEventListener('click', function () {
    var menu = document.getElementById('menu');

    if (menu.style.display === 'block')
        menu.style.display = 'none';
    else
        menu.style.display = 'block';
});

// Carousel

function prev(elem) {
    var wrapper = elem.querySelector('.wrapper');
    var items = elem.querySelectorAll('.wrapper > *');

    wrapper.prepend(items[items.length - 1]);
}

function next(elem) {
    var wrapper = elem.querySelector('.wrapper');
    var items = elem.querySelectorAll('.wrapper > *');

    wrapper.appendChild(items[0]);
}

var carousels = document.querySelectorAll('.carousel');

carousels.forEach(function (carousel) {

    carousel.querySelector('.prev').addEventListener('click', function () {
        prev(carousel);
    });

    carousel.querySelector('.next').addEventListener('click', function () {
        next(carousel);
    });

    swipedetect(carousel, function (direction) {
        if (direction === 'left')
            prev(carousel);

        if (direction === 'right')
            next(carousel);
    });
});

// Swipe detect
function swipedetect(el, callback) {

    var touchsurface = el,
        swipedir,
        startX,
        startY,
        distX,
        distY,
        threshold = 150, //required min distance traveled to be considered swipe
        restraint = 100, // maximum distance allowed at the same time in perpendicular direction
        allowedTime = 300, // maximum time allowed to travel that distance
        elapsedTime,
        startTime,
        handleswipe = callback || function (swipedir) {
        };

    touchsurface.addEventListener('touchstart', function (e) {
        var touchobj = e.changedTouches[0];
        swipedir = 'none';
        dist = 0;
        startX = touchobj.pageX;
        startY = touchobj.pageY;
        startTime = new Date().getTime(); // record time when finger first makes contact with surface
        e.preventDefault();
    }, false);

    touchsurface.addEventListener('touchmove', function (e) {
        e.preventDefault(); // prevent scrolling when inside DIV
    }, false);

    touchsurface.addEventListener('touchend', function (e) {
        var touchobj = e.changedTouches[0];
        distX = touchobj.pageX - startX; // get horizontal dist traveled by finger while in contact with surface
        distY = touchobj.pageY - startY; // get vertical dist traveled by finger while in contact with surface
        elapsedTime = new Date().getTime() - startTime; // get time elapsed
        if (elapsedTime <= allowedTime) { // first condition for awipe met
            if (Math.abs(distX) >= threshold && Math.abs(distY) <= restraint) { // 2nd condition for horizontal swipe met
                swipedir = (distX < 0) ? 'left' : 'right'; // if dist traveled is negative, it indicates left swipe
            } else if (Math.abs(distY) >= threshold && Math.abs(distX) <= restraint) { // 2nd condition for vertical swipe met
                swipedir = (distY < 0) ? 'up' : 'down'; // if dist traveled is negative, it indicates up swipe
            }
        }
        handleswipe(swipedir);
        e.preventDefault();
    }, false);
}

// Capture leads form

var form_elems = document.querySelectorAll('form.course-lead');

form_elems.forEach(function (form_elem) {

    var type_elem = form_elem.querySelector('select[name="tipo_curso"]');
    var area_elem = form_elem.querySelector('select[name="area_curso"]');
    var name_elem = form_elem.querySelector('input[name="nome"]');
    var email_elem = form_elem.querySelector('input[name="email"]');
    var whatsapp_elem = form_elem.querySelector('input[name="whatsapp"]');
    var graduado_elem = form_elem.querySelector('select[name="graduado"]');

    /* type_elem.addEventListener('change', function (e) {
         if (e.target.value == 'Graduação' || e.target.value == 'Disciplinas Isoladas') {
             type_elem.parentElement.classList.add('full');
             area_elem.parentElement.classList.add('hide');
             area_elem.value = '-';
         } else {
             type_elem.parentElement.classList.remove('full');
             area_elem.parentElement.classList.remove('hide');
         }
     });*/

    var btn_elem = form_elem.querySelector('button');

    btn_elem.addEventListener('click', function (e) {
        if (name_elem.value && email_elem.value) {
            var xhr = new XMLHttpRequest();

            var body = 'lead=true';

            body += '&nome=' + name_elem.value || '-';
            body += '&email=' + email_elem.value || '-';
            body += '&tipo_curso=' + type_elem.value || '-';
            body += '&area_curso=' + area_elem.value || '-';
            body += '&whatsapp=' + whatsapp_elem.value || '-';
            body += '&graduado=' + graduado_elem.value || '-';

            xhr.open('POST', '/', true);
            xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
            xhr.send(body);

            e.target.disabled = true;
            e.target.innerHTML = 'Enviando...';

            xhr.onreadystatechange = function () {
                e.target.innerHTML = 'Mensagem enviada!';
            };
        }
    });
});

// Contact form

var form_elems = document.querySelectorAll('form.contact');

form_elems.forEach(function (form_elem) {

    var subject_elem = form_elem.querySelector('select[name="assunto"]');
    var name_elem = form_elem.querySelector('input[name="nome"]');
    var cpf_elem = form_elem.querySelector('input[name="cpf"]');
    var whatsapp_elem = form_elem.querySelector('input[name="whatsapp"]');
    var email_elem = form_elem.querySelector('input[name="email"]');
    var mesage_elem = form_elem.querySelector('textarea[name="mensagem"]');

    var btn_elem = form_elem.querySelector('button');

    btn_elem.addEventListener('click', function (e) {
        if (subject_elem.value && name_elem.value && mesage_elem) {
            var xhr = new XMLHttpRequest();

            var body = 'contact=true';

            body += '&assunto=' + subject_elem.value || '-';
            body += '&nome=' + name_elem.value || '-';
            body += '&cpf=' + cpf_elem.value || '-';
            body += '&whatsapp=' + whatsapp_elem.value || '-';
            body += '&email=' + email_elem.value || '-';
            body += '&mensagem=' + mesage_elem.value || '-';

            xhr.open('POST', '/', true);
            xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
            xhr.send(body);

            e.target.disabled = true;
            e.target.innerHTML = 'Enviando...';

            xhr.onreadystatechange = function () {
                e.target.innerHTML = 'Mensagem enviada!';
            };
        }
    });
});

// course search form

var search_form_elem = document.querySelector('form.search-filters');

if (search_form_elem) {
    var type_elem = search_form_elem.querySelector('input.type');
    var area_elem = search_form_elem.querySelector('select.area');

    if (area_elem) {
        area_elem.addEventListener('change', function () {
            var action = '/' + type_elem.value;

            if (area_elem.value && area_elem.value != '*')
                action += '/' + area_elem.value;

            search_form_elem.action = action;
        });
    }
}

function slugify(str) {
    return str.toString().toLowerCase()
        .replace(/[àÀáÁâÂãäÄÅåª]+/g, 'a')       // Special Characters #1
        .replace(/[èÈéÉêÊëË]+/g, 'e')        // Special Characters #2
        .replace(/[ìÌíÍîÎïÏ]+/g, 'i')        // Special Characters #3
        .replace(/[òÒóÓôÔõÕöÖº]+/g, 'o')        // Special Characters #4
        .replace(/[ùÙúÚûÛüÜ]+/g, 'u')        // Special Characters #5
        .replace(/[ýÝÿŸ]+/g, 'y')            // Special Characters #6
        .replace(/[ñÑ]+/g, 'n')                // Special Characters #7
        .replace(/[çÇ]+/g, 'c')                // Special Characters #8
        .replace(/[ß]+/g, 'ss')                // Special Characters #9
        .replace(/[Ææ]+/g, 'ae')                // Special Characters #10
        .replace(/[Øøœ]+/g, 'oe')            // Special Characters #11
        .replace(/[%]+/g, 'pct')                // Special Characters #12
        .replace(/\s+/g, '-')                // Replace spaces with -
        .replace(/[^\w\-]+/g, '')            // Remove all non-word chars
        .replace(/\-\-+/g, '-')                // Replace multiple - with single -
        .replace(/^-+/, '')                    // Trim - from start of text
        .replace(/-+$/, '');            		// Trim - from end of text
}

function urlB64ToUint8Array(base64String) {
    const padding = '='.repeat((4 - base64String.length % 4) % 4);
    const base64 = (base64String + padding)
        .replace(/\-/g, '+')
        .replace(/_/g, '/');

    const rawData = window.atob(base64);
    const outputArray = new Uint8Array(rawData.length);

    for (let i = 0; i < rawData.length; ++i) {
        outputArray[i] = rawData.charCodeAt(i);
    }
    return outputArray;
}

var swRegistration = null;

if ('serviceWorker' in navigator) {
    window.addEventListener('load', function () {
        navigator.serviceWorker.register('/service-worker.js')
            .then(function (reg) {
                swRegistration = reg;
            })
            .catch(function (err) {
                console.info('service worker not registered', err);
            });

        navigator.serviceWorker.getRegistration()
            .then(function (reg) {
                reg.update();
            })
            .then(function (updated) {
                swRegistration = updated;
            });
    });
}

function subscribeUser() {
    var applicationServerKey = urlB64ToUint8Array('BJhpGn3x1Jn6PQIu0WUcfA3XG4sKqnGuGnQKtwiAD1kOqDXqab3o7KeRD96l78-0FU0CU7sldRdbAm1ssEe4Z98');

    swRegistration.pushManager
        .subscribe({
            userVisibleOnly: true,
            applicationServerKey: applicationServerKey
        })
        .then(function (subscription) {
            console.log('User is subscribed:', subscription);

            //updateSubscriptionOnServer(subscription);
        })
        .catch(function (err) {
            console.log('Failed to subscribe the user: ', err);
        });
}

function checkSubscription() {
    swRegistration.pushManager.getSubscription()
        .then(function (subscription) {

        });
}

jQuery('#fb_whatsapp').mask('(00) 90000-0000');
jQuery('#ft_whatsapp').mask('(00) 90000-0000');

async function send_lead_form(num, type = '') {
    let form = num === 1 ? 'fb' : 'ft'
    let name = jQuery(`#${form}_nome`).val();
    let whats = jQuery(`#${form}_whatsapp`).val().replace(/[^\d]+/g, '');
    let email = jQuery(`#${form}_email`).val();
    if (name != '' && (email != '' && whats != '')) {
        const data = {
            origin: 'Link de Vendas - Centro Universitário Única ',
            name,
            email,
            cellPhone: whats,
            _cpf: undefined,
            interest: undefined,
        };
        if (typeof courseType !== 'undefined' && courseType) {
            let system = '-';
            switch (courseType) {
                case 'Pós-Graduação':
                case 'Extensão':
                case 'Aperfeiçoamento':
                    system = 'piaget';
                    break;
                case 'Graduação':
                case 'Disciplina Isolada':
                case 'Segunda Graduação':
                case 'Segunda Licenciatura':
                    system = 'pincel';
                    break;
                default:
                    system = '-';
            }
            data.interest = {
                course: {
                    system,
                    certifier: typeof certifier !== 'undefined' ? certifier : undefined,
                    type: typeof courseType !== 'undefined' ? courseType : undefined,
                    area: typeof area !== 'undefined' ? area : undefined,
                    name: typeof course !== 'undefined' ? course.trim() : undefined,
                    workload: typeof workload !== 'undefined' ? workload : undefined
                }
            };
        }
        if (partnerCpf && partnerCpf !== '') {// Central leads parceiros
            data._cpf = partnerCpf;
            return await send_lead_partner(data);
        } else {
            return await send_lead_prominas(data);
        }
    }
}

async function send_lead_partner(data) {
    return await makeRequest('POST', 'https://leadspartners.institutoprominas.com.br', data);
}

async function send_lead_prominas(data) {
    return await makeRequest('POST', 'https://leads.institutoprominas.com.br', data);
}

function makeRequest(method, url, body) {
    return new Promise(function (resolve, reject) {
        let xhr2 = new XMLHttpRequest();
        xhr2.open(method, url, true);
        xhr2.setRequestHeader('Content-Type', 'application/json;charset=UTF-8');
        xhr2.send(JSON.stringify(body));
        xhr2.onload = function () {
            if (this.status >= 200 && this.status < 300) {
                resolve({
                    status: this.status,
                    statusText: xhr2.statusText,
                    response: JSON.parse(xhr2.response)
                });
            } else {
                reject({
                    status: this.status,
                    statusText: xhr2.statusText
                });
            }
        };
        xhr2.onerror = function () {
            reject({
                status: this.status,
                statusText: xhr.statusText
            });
        };
    }).then(function (ret) {
        console.log('RET',ret)
        return true;
    }).catch(function (err) {
        console.error('Erro ao enviar!', err.statusText);
        return false;
    });
}
