function _jsMakeGeneralTag() {
    var generalTag = JumpstartGeneralTag();

    //To activate Jumpstart Tracking, uncomment the next two lines and fill in the Dealer ID.
    var dealerId = "390";
    generalTag.setDealerId(dealerId);

    //To activate the Google Analytics Tag, uncomment the next two lines and fill in the Analytics Account ID.
    //var googleAccount = "UA-XXXXXXX-X";
    //generalTag.setGoogleAccount(googleAccount);

    //To activate the VoiceStar JavaScript Number Rewriter, uncomment the next two lines and fill in the VoiceStar account ID.
    var voiceStarAccount = "CA6phkn149A8GwHc";
    generalTag.setVoiceStarAccount(voiceStarAccount);

    //To activate the Revenue Science Tag, uncomment the next two lines and fill in the Revenue Science Category Name
    var revSciName = "SRT-SonCarsonHon";
    generalTag.setRevSciName(revSciName);

    //To activate Dart tag that measures uniques, uncomment and fill in the values below.
    var dartUniqueTagSrc = "2264559";
    var dartUniqueTagType = "resea053";
    var dartUniqueTagCat = "uniqu245";
    generalTag.setDartUniqueTag(dartUniqueTagSrc, dartUniqueTagType, dartUniqueTagCat);

    //To put a normal Dart tag in the general tag, uncomment and fill in the values below.
    var dartCustomTagSrc = "2264559";
    var dartCustomTagType = "resea053";
    var dartCustomTagCat = "custo449";
    generalTag.setDartCustomTag(dartCustomTagSrc, dartCustomTagType, dartCustomTagCat);

    //To put a Audience Science tag in the general tag, uncomment and fill in the values below.
    var audSciCustomTagAcct = "EF49DD91943288556B07EA9CA12529D8";
    var audSciCustomTagSite = "3BA6B57E2462874C6ECE9A88A9EFB9F7";
    var audSciCustomTagEvnt = "778E622EE6F84350A62233E2063D1394";
    generalTag.setAudSciCustomTag(audSciCustomTagAcct, audSciCustomTagSite, audSciCustomTagEvnt);

    return generalTag;
}

_jsGeneralTag = _jsMakeGeneralTag();
vs_account_id = _jsGeneralTag.getVoiceStarAccount();
_jsGeneralTag.writeTags();

function JumpstartGeneralTag()
{
    var private = {
        sslLocation: "insecure",
        dealerId: null,
        googleAccount: null,
        voiceStarAccount: null,
        revSciName: null,
        searchUserId: null,
        searchSource: null,
        searchMedium: null,
        searchKeyword: null,
        dartUserId: null,
        dartUniqueTagSrc: null,
        dartUniqueTagType: null,
        dartUniqueTagCat: null,
        dartCustomTagSrc: null,
        dartCustomTagType: null,
        dartCustomTagCat: null,
        audSciCustomTagAcct: null,
        audSciCustomTagSite: null,
        audSciCustomTagEvnt: null,

        detectSsl: function()
        {
            try {
                var loc = parent.location.protocol;
                if(loc == "http:") {
                    loc = "insecure";
                } else {
                    loc = "secure";
                }
            } catch(err) {
                loc = "insecure";
            }
            return loc;
        },

        getCookie: function(c_name)
        {
            if (document.cookie.length > 0) {
                var c_start = document.cookie.indexOf(c_name + "=");
                if (c_start!=-1) {
                    c_start = c_start + c_name.length+1;
                    var c_end = document.cookie.indexOf(";",c_start);
                    if (c_end == -1) {
                        c_end = document.cookie.length;
                    }
                    return unescape(document.cookie.substring(c_start,c_end));
                }
            }
            return "";
        },

        setCookie: function(c_name, value, days)
        {
            var date = new Date();
            date.setTime(date.getTime()+(days*24*60*60*1000));
            var expires = ' ;expires=' + date.toGMTString();
            var path = ' ;path=/';
            document.cookie = c_name + '=' + value + expires + path;
        },
        
        getUrlParameter: function(name)
        {
            name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
            var regexS = "[\\?&]"+name+"=([^&#]*)";
            var regex = new RegExp(regexS);
            var results = regex.exec(window.location.href);
            if(results == null) {
                return "";
            } else {
                return results[1];
            }
        },

        createUniqueString: function()
        {
            var mydate = new Date;
            var myday = mydate.getDate();
            var mymonth = mydate.getMonth()+1;
            var myyear = ((mydate.getYear() < 100) ? "19" : "") + mydate.getYear();
            var myyear = myyear.substring(2,4);
            var myhour = mydate.getHours();
            var myminutes = mydate.getMinutes();
            var myseconds = mydate.getSeconds();
            if(myday < 10) myday = "0" + myday;
            if(mymonth < 10) mymonth = "0" + mymonth;
            if(myhour < 10) myhour = "0" + myhour;
            if(myminutes < 10) myminutes = "0" + myminutes;
            if(myseconds < 10) myseconds = "0" + myseconds;
            var datearray = new Array(mymonth,myday,myyear,myhour,myminutes,myseconds);
            var uniq = "";
            for(i=0;i<datearray.length;i++){
                for(z=0;z<2;z++){
                    var which = Math.round(Math.random()*1);
                    if(which==0){
                        x = String.fromCharCode(64 + (Math.round(Math.random()*25)+1));
                    } else {
                        x = String.fromCharCode(47 + (Math.round(Math.random()*9)+1));
                    }
                    uniq += x;
                }
                uniq += datearray[i];
            }
            return uniq;
        },

        createGoogleTag: function(sslLocation)
        {
            if(sslLocation == 'secure') {
                var gprefix = 'https://ssl.';
                var prefix = 'https://';
            } else {
                var gprefix = 'http://www.';
                var prefix = 'http://';
            }
            try {
                document.write('<script type="text/javascript" language="Javascript" src="'+ gprefix +'google-analytics.com/ga.js"></script>');
                document.write('<script type="text/javascript" language="Javascript" src="' + prefix + 'www.jumpstarttaggingsolutions.com/tags/oogaactivate.js"></script>');
            } catch(err) {       
                var gtag=document.createElement('script');
                gtag.src= gprefix + 'google-analytics.com/ga.js';
                document.getElementsByTagName('head')[0].appendChild(gtag);
                activateGoogleTag();
            }
        },

        activateGoogleTag: function(sslLocation)
        {
            if (sslLocation == 'secure') {
                var prefix = 'https://';
            } else {
                var prefix = 'http://';
            }
            var gact=document.createElement('script');
            gact.src= prefix + 'www.jumpstarttaggingsolutions.com/tags/oogaactivate.js';
            document.getElementsByTagName('head')[0].appendChild(gact);
        },

        createVoicestarTag: function(sslLocation)
        {
            if (sslLocation == 'secure') {
                var vsprefix = 'https://www.';
            } else {
                var vsprefix = 'http://jumpstartautomotive.';
            }
            try {
                document.write('<script type="text/javascript" src="' + vsprefix + 'voicestar.com/euinc/number-changer.js"></script>');
            } catch(err){
                return false;
            }
        },

        createRevsciTag: function(sslLocation)
        {
            if (sslLocation == 'secure') {
                var prefix = 'https://';
            } else {
                var prefix = 'http://';
            }
            try {
                document.write('<script type="text/javascript" language="Javascript" src="' + prefix + 'js.revsci.net/gateway/gw.js?csid=H06572"></script>');
                document.write('<script type="text/javascript" language="Javascript" src="' + prefix + 'www.jumpstarttaggingsolutions.com/tags/oorevsciactivate.js"></script>');
            } catch(err) {
                var rstag=document.createElement('script');
                rstag.src= prefix + 'js.revsci.net/gateway/gw.js?csid=H06572';
                document.getElementsByTagName('head')[0].appendChild(rstag);
                activateRevsciTag();
            }
        },

        activateRevsciTag: function(sslLocation)
        {
            if (sslLocation == 'secure') {
                var prefix = 'https://';
            } else {
                var prefix = 'http://';
            }
            var rsact=document.createElement('script');
            rsact.src= prefix + 'www.jumpstarttaggingsolutions.com/tags/oorevsciactivate.js';
            document.getElementsByTagName('head')[0].appendChild(rsact);
        },

        createDartTag: function(sslLocation, src, type, cat, ord)
        {
            if(sslLocation == 'secure') {
                var prefix = 'https://';
            } else {
                var prefix = 'http://';
            }
            var src = src;
            var cat = cat;
            var type = type;
            var ord = ord;
            var darttag = '<IFRAME SRC="' + prefix + 'fls.doubleclick.net/activityi;src=';
            darttag = darttag + src + ';type=' + type + ';cat=' + cat + ';ord=' + ord;
            darttag = darttag + '?" WIDTH=1 HEIGHT=1 FRAMEBORDER=0></IFRAME>';
            document.write(darttag);
        },

        createAudSciTag: function(sslLocation, acct, site, evnt)
        {
            if(sslLocation == 'secure') {
                var prefix = 'https://';
            } else {
                var prefix = 'http://';
            }
            var acct = acct;
            var site = site;
            var evnt = evnt;
            var astag = '<img src="' + prefix + 'ads.revsci.net/adserver/ako';
            astag = astag + '?rsi_noads=1&rsi_pixel=1';
            astag = astag + '&rsi_account=' + acct + '&rsi_site=' + site + '&rsi_event=' + evnt;
            astag = astag + '"/>';
            document.write(astag);
        },

        jsPixel: function(sslLocation, dealerId, session, source, medium, keyword)
        {
            if (sslLocation == 'secure') {
                var prefix = 'https://';
            } else {
                var prefix = 'http://';
            }
            var urlparams = 'jssession=' + session + '&';
            urlparams = urlparams + 'jsdealer=' + dealerId + '&';
            urlparams = urlparams + 'jssource=' + source + '&';
            urlparams = urlparams + 'jsmedium='  + medium + '&';
            urlparams = urlparams + 'jskeyword=' + keyword;
            try {
                var appgen=document.createElement('img');
                appgen.width='0';
                appgen.height='0';
                appgen.src= prefix + 'www.jumpstarttaggingsolutions.com/tracking/general.php?' + urlparams;
                document.getElementsByTagName('head')[0].appendChild(appgen);
            } catch(err) {
                document.write('<img width=0 height=0 src="' + prefix + 'www.jumpstarttaggingsolutions.com/tracking/general.php?' + urlparams + '">');
            }
        },

        setSslLocation: function(loc)
        {
            this.sslLocation = loc;
        }

    };

    var public = {

        setDealerId: function(dealerId)
        {
            private.dealerId = dealerId;
        },

        getGoogleAccount: function()
        {
            return private.googleAccount;
        },

        setGoogleAccount: function(googleAccount)
        {
            private.googleAccount = googleAccount;
        },

        getVoiceStarAccount: function()
        {
            return private.voiceStarAccount;
        },

        setVoiceStarAccount: function(voiceStarAccount)
        {
            private.voiceStarAccount = voiceStarAccount;
        },

        getRevSciName: function()
        {
            return private.revSciName;
        },

        setRevSciName: function(revSciName)
        {
            private.revSciName = revSciName;
        },

        setDartUniqueTag: function(dartUniqueTagSrc, dartUniqueTagType, dartUniqueTagCat)
        {
            private.dartUniqueTagSrc = dartUniqueTagSrc;
            private.dartUniqueTagType = dartUniqueTagType;
            private.dartUniqueTagCat = dartUniqueTagCat;
        },

        setDartCustomTag: function(dartCustomTagSrc, dartCustomTagType, dartCustomTagCat)
        {
            private.dartCustomTagSrc = dartCustomTagSrc;
            private.dartCustomTagType = dartCustomTagType;
            private.dartCustomTagCat = dartCustomTagCat;
        },

        setAudSciCustomTag: function(audSciCustomTagAcct, audSciCustomTagSite, audSciCustomTagEvnt)
        {
            private.audSciCustomTagAcct = audSciCustomTagAcct;
            private.audSciCustomTagSite = audSciCustomTagSite;
            private.audSciCustomTagEvnt = audSciCustomTagEvnt;
        },

        getSslLocation: function()
        {
            return private.sslLocation;
        },

        getSearchSourceFromCookie: function()
        {
            var searchSource = private.getCookie('jssource');
            return searchSource;
        },

        getSearchMediumFromCookie: function()
        {
            var searchMedium = private.getCookie('jsmedium');
            return searchMedium;
        },

        getSearchKeywordFromCookie: function()
        {
            var searchKeyword = private.getCookie('jskeyword');
            return searchKeyword;
        },

        getSearchSessionFromCookie: function()
        {
            var searchSession = private.getCookie('jstrack');
            return searchSession;
        },

        goalSubmit: function(goalNumber)
        {
            var location = private.sslLocation;
            if(location == 'secure') {
                var prefix = 'https://';
            } else {
                var prefix = 'http://';
            }
            var jsSession = private.getCookie('jstrack');
            if (jsSession != null && jsSession != '') {
                var goal = goalNumber;
                var urlparams = 'jssession=' + jsSession + '&';
                urlparams = urlparams + "goal=" + goal;
                var apptag=document.createElement('img');
                apptag.width='0';
                apptag.height='0';
                apptag.src= prefix + 'www.jumpstarttaggingsolutions.com/tracking/goals.php?' + urlparams + '&' + Math.random();
                document.getElementsByTagName('head')[0].appendChild(apptag);
            }
        },

        linkValues: function(linkurl)
        {
	        var testurl = linkurl;
	        var questionMarkResult = testurl.search(/\?/);
	        if (questionMarkResult != -1) {
		        var questionOrAmpersand = '&';
	        } else {
		        var questionOrAmpersand = '?';
	        }
	        var jsSourceCookie = private.getCookie('jssource');
	        var jsMediumCookie = private.getCookie('jsmedium');
            var jsKeywordCookie = private.getCookie('jskeyword');
	        if (jsSourceCookie != null && jsSourceCookie != "") {
			        window.open(linkurl + questionOrAmpersand + "_jssource=" + jsSourceCookie + "&_jsmedium=" + jsMediumCookie + "&_jskeyword=" + jsKeywordCookie);
	        }
	        else {
		        window.open(linkurl);
	        }
        },

        linkSession: function(linkurl)
        {
	        var testurl = linkurl;
	        var questionMarkResult = testurl.search(/\?/);
	        if (questionMarkResult != -1) {
		        var questionOrAmpersand = '&';
	        } else {
		        var questionOrAmpersand = '?';
	        }
	        var jsCookie = private.getCookie('jstrack');
	        if (jsCookie != null && jsCookie != "") {
		        window.open(linkurl + questionOrAmpersand + "_jscookie=" + jsCookie);
	        }
	        else {
		        window.open(linkurl);
	        }
        },

        writeTags: function()
        {
            var location = private.sslLocation;
            var dealerId = private.dealerId;
            var googleAccount = private.googleAccount;
            var voiceStarAccount = private.voiceStarAccount;
            var revSciName = private.revSciName;
            var dartUniqueTagSrc = private.dartUniqueTagSrc
            var dartUniqueTagType = private.dartUniqueTagType
            var dartUniqueTagCat = private.dartUniqueTagCat
            var dartCustomTagSrc = private.dartCustomTagSrc
            var dartCustomTagType = private.dartCustomTagType
            var dartCustomTagCat =  private.dartCustomTagCat
            var audSciCustomTagAcct = private.audSciCustomTagAcct
            var audSciCustomTagSite = private.audSciCustomTagSite
            var audSciCustomTagEvnt =  private.audSciCustomTagEvnt

            var jumpstartSource = private.getUrlParameter('_jssource');
            var jumpstartMedium = private.getUrlParameter('_jsmedium');
            var jumpstartKeyword = private.getUrlParameter('_jskeyword');
            var linkedCookie = private.getUrlParameter('_jscookie');
            
            if (linkedCookie != null && linkedCookie != '') {
                private.setCookie('jstrack', linkedCookie, 365);
            }

            if (jumpstartSource != null && jumpstartSource != '' && dealerId != null) {
                var jumpstartSession = private.createUniqueString();
                private.searchUserId = jumpstartSession;
                private.setCookie('jstrack', jumpstartSession, 365);
                private.setCookie('jssource', jumpstartSource, 365);
                private.setCookie('jsmedium', jumpstartMedium, 365);
                private.setCookie('jskeyword', jumpstartKeyword, 365);
                private.jsPixel(location, dealerId, jumpstartSession, jumpstartSource, jumpstartMedium, jumpstartKeyword);
            }

            if (googleAccount) {
                private.createGoogleTag(location);
            }

            if (voiceStarAccount) {
                private.createVoicestarTag(location);
            }

            if (revSciName) {
                private.createRevsciTag(location);
            }

            if (dartUniqueTagSrc, dartUniqueTagType, dartUniqueTagCat) {
                var dartUserId = private.getCookie('jsunique');
                if (!dartUserId) {
                    dartUserId = private.createUniqueString();
                    private.setCookie('jsunique', dartUserId, 365);
                }
                private.dartUserId = dartUserId;
                private.createDartTag(location, dartUniqueTagSrc, dartUniqueTagType, dartUniqueTagCat, dartUserId);
            }

            if (dartCustomTagSrc, dartCustomTagType, dartCustomTagCat) {
                var randomString = private.createUniqueString();
                private.createDartTag(location, dartCustomTagSrc, dartCustomTagType, dartCustomTagCat, randomString);
            }

            if (audSciCustomTagAcct, audSciCustomTagSite, audSciCustomTagEvnt) {
                private.createAudSciTag(location, audSciCustomTagAcct, audSciCustomTagSite, audSciCustomTagEvnt);
            }
        }

    };

    private.setSslLocation(private.detectSsl());

    return public;

}

function jsGoalSubmit(goalnumber)
{
    var loc = _jsGeneralTag.getSslLocation();
    if(loc == 'secure') {
        var prefix = 'https://';
    } else {
        var prefix = 'http://';
    }
    var jsSession = _jsGeneralTag.getSearchSessionFromCookie();
    if (jsSession != null && jsSession != '') {
        var goal = goalnumber;
        var urlparams = 'jssession=' + jsSession + '&';
        urlparams = urlparams + "goal=" + goal;
        var apptag=document.createElement('img');
        apptag.width='0';
        apptag.height='0';
        apptag.src= prefix + 'www.jumpstarttaggingsolutions.com/tracking/goals.php?' + urlparams + '&' + Math.random();
        document.getElementsByTagName('head')[0].appendChild(apptag);
    }
}

function jsLinkValues(linkurl)
{
	var testurl = linkurl;
	var questionMarkResult = testurl.search(/\?/);
	if (questionMarkResult != -1) {
		var questionOrAmpersand = '&';
	} else {
		var questionOrAmpersand = '?';
	}
	var jsSourceCookie = _jsGeneralTag.getSearchSourceFromCookie();
	var jsMediumCookie = _jsGeneralTag.getSearchMediumFromCookie();
    var jsKeywordCookie = _jsGeneralTag.getSearchKeywordFromCookie();
	if (jsSourceCookie != null && jsSourceCookie != "") {
			window.open(linkurl + questionOrAmpersand + "_jssource=" + jsSourceCookie + "&_jsmedium=" + jsMediumCookie + "&_jskeyword=" + jsKeywordCookie);
	}
	else {
		window.open(linkurl);
	}
}

function jsLink(linkurl)
{
	var testurl = linkurl;
	var questionMarkResult = testurl.search(/\?/);
	if (questionMarkResult != -1) {
		var questionOrAmpersand = '&';
	} else {
		var questionOrAmpersand = '?';
	}
	var jsCookie = _jsGeneralTag.getSearchSessionFromCookie();
	if (jsCookie != null && jsCookie != "") {
		window.open(linkurl + questionOrAmpersand + "_jscookie=" + jsCookie);
	}
	else {
		window.open(linkurl);
	}
}

function gup(name)
{
    name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
    var regexS = "[\\?&]"+name+"=([^&#]*)";
    var regex = new RegExp(regexS);
    var results = regex.exec(window.location.href);
    if(results == null) {
        return "";
    } else {
        return results[1];
    }
}

