/*
Implementação de classe do ROI meter
Espera:
- jParticipants: objetos jQuery a disparar os eventos
- events: tipos de eventos a serem observados (string de eventos da mesma forma do jQuery().bind()
- url: URL a receber a requisição HTTP do lado da aplicação do ROI meter
- onlyOnce: o disparo da requisição deve ser feito apenas uma vez?
*/
(function($){

var EMPREGOCERTO = window.EMPREGOCERTO || {}; window.EMPREGOCERTO = EMPREGOCERTO;
EMPREGOCERTO.ROI = {};

EMPREGOCERTO.ROI.send = function(url) {
    $.getScript(url);
};
EMPREGOCERTO.ROI.Observer = function(jParticipants, events, url, onlyOnce) {
    var objRef = this;
    
    this.jParticipants = jParticipants;
    this.events = events;
    this.url = url;
    this.onlyOnce = onlyOnce;
    
    var sent = false;
    
    this.send = function() {
        if (objRef.onlyOnce && sent) return;
        
        EMPREGOCERTO.ROI.send(url);
        
        sent = true;
        return objRef;
    };
    
    this.jParticipants.bind(events, this.send);
};


/*
Casos de funcionamento do ROI
*/

EMPREGOCERTO.ROI.cases = {
    
  
  
    // Cadastro Normandia - currículo
    curriculumRegistry: function(parentBox) {
        var inputs = parentBox.find('input'),
            selects = parentBox.find('select'),
            city = inputs.filter('#cityROI'),
            federationUnit = inputs.filter('#federationUnitROI'),
            iid = inputs.filter('#iidROI'),
            workingAreas = parentBox.find('div#workingAreas :checkbox'),
            hierarchyLevels = parentBox.find('div#hierarchyLevels :checkbox'),
            jButton = $('#submitButton'),
            // Variáveis para atraso de envio
            dummyInt = 0, dummyString = '';
            
        jButton.bind('formValid.curriculumRegistryROI', function(){
            var cityString = city.val(), fuString = federationUnit.val(), iidString = iid.val(), workingAreasArray = [], hierarchyLevelsArray = [];
            workingAreas.filter(':checked').each(function(){
                var val = $(this).next('label').text();
                workingAreasArray.push(val);
            });
            hierarchyLevels.filter(':checked').each(function(){
                var val = $(this).next('label').text();
                hierarchyLevelsArray.push(val);
            });
            
            var workingAreasString = workingAreasArray.toString(),
                hierarchyLevelsString = hierarchyLevelsArray.toString();

            if (cityString && fuString && iidString && workingAreasString && hierarchyLevelsString) {
                var url = 'http://clicklogger.rm.uol.com.br/?prd=21&oper=8&grp=Estado:' + fuString + ';Cidade:' + cityString + ';Nivel Hierarquico:' + hierarchyLevelsString + ';Area de Atuacao:' + workingAreasString + ';iid:' + iidString + '&msr=Cadastros Curriculo:1';
                EMPREGOCERTO.ROI.send(url);
                // Atraso de envio (para contornar problema de formação de requisição pelo navegador)
                while (dummyInt < 1000) {
                    dummyString += ' ';
                    dummyInt++;
                }
            }
        });
    },
  
  
    // Cadastro Normandia - vaga
    jobRegistry: function(parentBox) {
        var inputs = parentBox.find('input'),
            selects = parentBox.find('select'),
            city = inputs.filter('#cityROI'),
            federationUnit = inputs.filter('#federationUnitROI'),
            iid = inputs.filter('#iidROI'),
            workingAreas = parentBox.find('div#jobAreaContainer :checkbox'),
            hierarchyLevels = parentBox.find('div#jobHierarchyContainer :checkbox'),
            jButton = $('#submitButton');
            
        jButton.bind('formValid.jobRegistryROI', function(){
            var cityString = city.val(), fuString = federationUnit.val(), iidString = iid.val(), workingAreasArray = [], hierarchyLevelsArray = [];
            workingAreas.filter(':checked').each(function(){
                var val = $(this).next('label').text();
                workingAreasArray.push(val);
            });
            hierarchyLevels.filter(':checked').each(function(){
                var val = $(this).next('label').text();
                hierarchyLevelsArray.push(val);
            });
            
            var workingAreasString = workingAreasArray.toString(),
                hierarchyLevelsString = hierarchyLevelsArray.toString();
            if (cityString && fuString && iidString && workingAreasString && hierarchyLevelsString) {
                var url = 'http://clicklogger.rm.uol.com.br/?prd=21&oper=8&grp=Estado:' + fuString + ';Cidade:' + cityString + ';Nivel Hierarquico:' + hierarchyLevelsString + ';Area de Atuacao:' + workingAreasString + ';iid:' + iidString + '&msr=Cadastros Vaga:1';
                EMPREGOCERTO.ROI.send(url);
            }
        });
    },
  
  
    // Visualização de vaga (pelo usuário)
    jobView: function(parentBox) {
        var viewURL = 'http://clicklogger.rm.uol.com.br/?prd=21&oper=8&msr=Quantidade de Vagas Visualizadas:1',
            contactURL = 'http://clicklogger.rm.uol.com.br/?prd=21&oper=8&msr=Quantidade de Curriculos Enviados:1',
            sendCurriculumButton = parentBox.find('.sendCurriculum');
            
        EMPREGOCERTO.ROI.send(viewURL);
            
        var jobContactROI = new EMPREGOCERTO.ROI.Observer(sendCurriculumButton, 'click', contactURL, true);
    },
  
  
    // Visualização de currículo (pelo recrutador)
    curriculumView: function(parentBox) {
        var url = 'http://clicklogger.rm.uol.com.br/?prd=21&oper=8&msr=Quantidade de Dados do Candidato Exibidos:1';
        
        EMPREGOCERTO.ROI.send(url);
    },
  
  
    // Contato com candidato
    curriculumContact: function(parentBox) {
        var url = 'http://clicklogger.rm.uol.com.br/?prd=21&oper=8&msr=Quantidade de Dados Enviados por E-mail:1',
            jButton = parentBox.find('#submitButton');
            
        jButton.bind('formValid.curriculumContact', function(){
            EMPREGOCERTO.ROI.send(url);
        });
    },
  
  
    // Visualização de dados da vaga no próprio site (não permite envio de currículo)
    jobOpportunityData: function(parentBox) {
        var url = 'http://clicklogger.rm.uol.com.br/?prd=21&oper=8&msr=Quantidade de Dados da Vaga Exibidos:1';
        EMPREGOCERTO.ROI.send(url);
    },
  
  
    // Cancelamento de assinatura - tela de "espere"
    cancelWait: function(parentBox) {
        var url = 'http://clicklogger.rm.uol.com.br/?prd=21&oper=8&msr=Quantidade de Cancelamentos do Produto:1',
            jButton = parentBox.find('a.cancelConfirmation');
        var cancelConclusionROI = new EMPREGOCERTO.ROI.Observer(jButton, 'click', url, true);

    },
  
  
    // Reativação da assinatura
    reactivate: function(parentBox) {
        var url = 'http://clicklogger.rm.uol.com.br/?prd=21&oper=8&msr=Quantidade de Reativacoes:1',
            jButton = parentBox.find('a.reactivationButton,a.reactivate');
        var reactivationROI = new EMPREGOCERTO.ROI.Observer(jButton, 'click', url, true);
    },
  
  
    // Cancelamento de vaga
    jobCancel: function(parentBox) {
        var url = 'http://clicklogger.rm.uol.com.br/?prd=21&msr=Quantidade%20de%20Cancelamentos%20da%20Vaga:1&oper=1',
            jButton = parentBox.find('a');
        var jobCancelROI = new EMPREGOCERTO.ROI.Observer(jButton, 'click', url, true);
    }
    
    
};

})(jQuery);










/*
Uso do ROI meter
*/
$(document).ready(function(){
    var ROI = EMPREGOCERTO.ROI.Observer,
        ROICases = EMPREGOCERTO.ROI.cases;
    
    /*
    Pontos de partida do DOM para as várias telas do site
    */
    // Cadastro Normandia - currículo
    var curriculumRegistryParent = $('form.curriculumRegister').not('[action*="update"]');
    // Cadastro Normandia - vaga
    var jobRegistryParent = $('form.companyRegisterJob').not('[action*="update"]');
    // Visualização de vaga (pelo usuário)
    var jobViewParent = $('body.jobOpportunityViewPage');
    // Visualização de currículo (pelo recrutador)
    var curriculumViewParent = $('body.recruiterCurriculumView');
    // Contato com candidato
    var curriculumContactParent = $('body.thickBoxIframe div#contactCv.miniForm form#formRegister');
    // Visualização de dados da vaga no próprio site (não permite envio de currículo)
    var jobOpportunityDataBox = $('div#appliedForJob.showJobData');
    // Cancelamento de assinatura - tela de "espere"
    var cancelWaitParent = $('body.cancelPage div.cancelWait');
    // Reativação da assinatura
    var reactivateParent = $('body.userHome div.canReactivate,body.cancelPage.expired div.uniqueContent');
    // Cancelamento de vaga
    var jobCancelParent = $('body.recruiterHome li.cancel');
    
    /*
    Uso condicional dos meters
    */
    
    // Cadastro Normandia - currículo
    if (!!curriculumRegistryParent.length) {
        ROICases.curriculumRegistry(curriculumRegistryParent);
    }
    // Cadastro Normandia - vaga
    if (!!jobRegistryParent.length) {
        ROICases.jobRegistry(jobRegistryParent);
    }
    // Visualização de vaga + envio de currículo
    if(!!jobViewParent.length) {
        ROICases.jobView(jobViewParent);
    }
    // Visualização de currículo
    if(!!curriculumViewParent.length) {
        ROICases.curriculumView(curriculumViewParent);
    }
    // Contato com candidato
    if (!!curriculumContactParent.length) {
        ROICases.curriculumContact(curriculumContactParent);
    }
    // Cancelamento de assinatura - tela de "espere"
    if (!!cancelWaitParent.length) {
        ROICases.cancelWait(cancelWaitParent);
    }
    // Reativação da assinatura
    if (!!reactivateParent.length) {
        ROICases.reactivate(reactivateParent);
    }
    // Visualização de dados da vaga no próprio site (não permite envio de currículo)
    if (jobOpportunityDataBox.length) {
        ROICases.jobOpportunityData(jobOpportunityDataBox);
    }
    // Cancelamento de vaga
    if (!!jobCancelParent.length) {
        ROICases.jobCancel(jobCancelParent);
    }
});
