//********************************************************************
//VARIABLES
//********************************************************************
var LEAD_CAPTURE_DOMAIN_CHECK = /acquisio.com/;
var LEAD_CAPTURE_DOMAIN = 'acquisio.com';
var LEAD_CAPTURE_COOKIE_NAME = 'acquisioLeadVisit';
var LEAD_CAPTURE_COOKIE_OPTIONS = { path: '/', expires: 2000, domain: LEAD_CAPTURE_DOMAIN };  //VALID FOR 2000 DAYS (5.5 YEARS)
var LEAD_CAPTURE_COOKIE_MAX = 5;
var LEAD_CAPTURE_PPC_KEYWORDS = ['OVKEY', 'keyword', 'kw'];

//********************************************************************
//PARSE URL AND GET PARAMETERS
//********************************************************************
function captureLeadData() {
    var source = '';
    var url = '';
    var engine = '';
    var keyword = '';
    var utm_campaign = '';
    var utm_source = '';
    var utm_medium = '';
    var utm_term = '';
    var utm_content = '';
    engine = getReferrerEngine();                       //CHECKS THE SEARCH ENGINE FOR ORGANIC AND PAID
    if (engine != '') {
        keyword = getReferrerKeyword(engine);
        if (keyword != '') {                            //SEARCH ENGINE AND KEYWORD, SOURCE: Organic
            source = 'Organic';
        } //else {
            //source = 'Paid';                          //SEARCH ENGINE AND PPC KEYWORD, SOURCE: Paid --NOT WORKING--
            //keyword = getReferrerKeywordPPC(engine);
        //}
    }
    if (source == '') {
        if ($(document).getUrlParam('utm_campaign') != null) {  //PAGE REFERRED WITH UTM TAGS, SOURCE: Tagged
            source = 'Tagged';
            utm_campaign = $(document).getUrlParam('utm_campaign');
            utm_source = $(document).getUrlParam('utm_source');
            utm_medium = $(document).getUrlParam('utm_medium');
            utm_term = $(document).getUrlParam('utm_term');
            utm_content = $(document).getUrlParam('utm_content');
        } else {
            if (document.referrer == '') {                  //NO REFERRER, SOURCE: Direct
                source = 'Direct';
            } else {                                        //PAGE REFERRED FROM EXTERNAL SITE, SOURCE: Referrer
                url = getReferrerURL();
                if (url != '') {
                    source = 'Referrer';
                }
            }
        }
    }
    if (source != '') {
        setLeadVisitCookie(source, url, engine, keyword, utm_campaign, utm_source, utm_medium, utm_term, utm_content);
    }
}

//Recognize the engine that referred the visit
function getReferrerURL() {
    var referrer = document.referrer;
    var url = '';
    if ((referrer.match(LEAD_CAPTURE_DOMAIN_CHECK) == null) && (referrer.length > 2)) {
        url = referrer;
    }
    return url;
}

//Recognize the engine that referred the visit
function getReferrerEngine() {
    var referrer = document.referrer;
    var engine = ''; 
    if ((referrer.match(LEAD_CAPTURE_DOMAIN_CHECK) == null) && (referrer.length > 2 )) {
      if (referrer.match(/.yahoo./)) {
         engine = "Yahoo";
      } else if (referrer.match(/.google./)) {
         engine = "Google";
      } else if (referrer.match(/live.com/)) {
         engine = "Microsoft Live";
      } else if (referrer.match(/search.msn.com/)) {
         engine = "MSN Search";
      } else if (referrer.match(/bing.com/)) {
         engine = "Bing";
      }
    }
    return engine;
}

//Recognize the Keyword used in the engine to refer the visit
function getReferrerKeyword(engine) {
    var referrer = $("<a src='" + document.referrer + "'></a>");
    var keyword = '';
    if (engine == 'Yahoo') {
        keyword = referrer.getUrlParam('p');
    } else if ((engine == 'Google') || (engine == 'Microsoft Live') || (engine == 'MSN Search') || (engine == 'Bing')) {
        keyword = referrer.getUrlParam('q');
    }
    return keyword;
}

//Recognize the PPC Keyword used in the engine to refer the visit
function getReferrerKeywordPPC() {
    var referrer = $("<a src='" + document.referrer + "'></a>");
    var keyword = '';
    //Look for all the defined PPC keywords
    for (var index = 0; index < LEAD_CAPTURE_PPC_KEYWORDS.length; index++) {
        var param = LEAD_CAPTURE_PPC_KEYWORDS[index];
        keyword = referrer.getUrlParam(param);
        if (keyword != '') {
            break;
        }
    }
    return keyword;
}

//********************************************************************
//Cookies Set/Get
//********************************************************************
//Set the cookie for this visit
function setLeadVisitCookie(source, url, engine, keyword, utm_campaign, utm_source, utm_medium, utm_term, utm_content) {
    //Find the last recorded cookie
    var index = 1;
    for (index = 1; index <= LEAD_CAPTURE_COOKIE_MAX; index++) {
        if ($.cookie(LEAD_CAPTURE_COOKIE_NAME + index) == null) {
            break;
        }
    }
    //If there are less cookies than the maximum set, create a new one
    if (index <= LEAD_CAPTURE_COOKIE_MAX) {
        //Set The new cookie
        var now = new Date();
        var month = now.getMonth() + 1;
        //Format Date
        var date = month.getFixedLengthNumber(2) + '/' + now.getDate().getFixedLengthNumber(2) + '/' +
            now.getFullYear().getFixedLengthNumber(2) + ' ' + now.getHours().getFixedLengthNumber(2) + ':' +
            now.getMinutes().getFixedLengthNumber(2) + ':' + now.getSeconds().getFixedLengthNumber(2);
        //Create cookie
        var cookieValue = date + '|' + source + '|' + url + '|' + engine + '|' + keyword + '|' + utm_campaign +
            '|' + utm_source + '|' + utm_medium + '|' + utm_term + '|' + utm_content;
        $.cookie(LEAD_CAPTURE_COOKIE_NAME + index, cookieValue, LEAD_CAPTURE_COOKIE_OPTIONS);
    }
}

//Get Cookies and create hidden fields
function createHiddenFields() {
    var form = $('form').eq(0);
    if ($(form).size() > 0) {
        //For each cookie found create the hidden fields
        for (var index = 1; index <= LEAD_CAPTURE_COOKIE_MAX; index++) {
            var cookie = $.cookie(LEAD_CAPTURE_COOKIE_NAME + index);
            if (cookie != null) {
                //Get Data from the cookie
                var data = cookie.split('|');
                var date = data[0];
                var source = data[1];
                var url = data[2];
                var engine = data[3];
                var keyword = data[4];
                var utm_campaign = data[5];
                var utm_source = data[6];
                var utm_medium = data[7];
                var utm_term = data[8];
                var utm_content = data[9];
                //Generate hidden fields
                var prefix = 'v' + index + '_';
                setHiddenField($(form), prefix + 'time', date);
                setHiddenField($(form), prefix + 'source_type', source);
                setHiddenField($(form), prefix + 'referred_url', url);
                setHiddenField($(form), prefix + 'search_engine', engine);
                setHiddenField($(form), prefix + 'keyword', keyword);
                setHiddenField($(form), prefix + 'utm_campaign', utm_campaign);
                setHiddenField($(form), prefix + 'utm_source', utm_source);
                setHiddenField($(form), prefix + 'utm_medium', utm_medium);
                setHiddenField($(form), prefix + 'utm_term', utm_term);
                setHiddenField($(form), prefix + 'utm_content', utm_content);
            } else {
                break;
            }
        }
    }
}

//********************************************************************
//UTILS
//********************************************************************
//Creates an HTML Hidden Field or sets the value if the hidden field is already created
function setHiddenField(form, fieldName, fieldValue) {
    var already = $("#" + fieldName);
    if ($(already).size() > 0) {
        $(already).val(fieldValue);
    } else {
    var field = $("<input type='hidden' name='" + fieldName + "' id='" + fieldName + "' value='" + fieldValue + "' />");
        $(form).append(field);
    }
}

//Fixes the length of a number by adding 0s to its left
Number.prototype.getFixedLengthNumber = function(FixedLength) {
    var fixedValue = this;
    while (fixedValue.toString().length < FixedLength) {
        fixedValue = '0' + fixedValue;
    }
    return fixedValue;
}

//********************************************************************
//On LOAD of the document
//********************************************************************
$(function() {
    captureLeadData();
    createHiddenFields()
})


