var semCookieTTL = 2592000000; // 30 days from now
var semCookiePath = '/';
var semCookieDomain = location.hostname.replace(/.*?([^\.]+\.[^\.]+)$/, ".$1");
var semCookieSecure = false;
var semPaidKey = ['paid=1', 'referral=', 'OVKWID=', 'gclid='];
var semEngines = [
['google',         'q'],
['yahoo',          'p'],
['msn',            'q'],
['live',           'q'],
['ask',            'q'],

['about',          'terms'],
['alice',          'qs'],
['alltheweb',      'q'],
['altavista',      'q'],
['aol',            'q'],
['baidu',          'wd'],
['club-internet',  'q'],
['cnn',            'query'],
['gigablast',      'q'],
['google.interia', 'q'],
['looksmart',      'qt'],
['lycos',          'query'],
['mama',           'query'],
['mamma',          'query'],
['najdi',          'q'],
['netscape',       'query'],
['netsprint',      'q'],
['pchome',         'q'],
['search',         'q'],
['seznam',         'q'],
['szukacz',        'q'],
['szukaj',         'qt'],
['virgilio',       'qs'],
['voila',          'rdata'],
['yam',            'k'],
['yandex',         'text']
];


function semTagRequest() {
    
    // Are we the intital referral request?
    if (document.referrer != '') {
        
        var hostRE = '\\:\\/\\/(?:www\.)?'+location.hostname.replace(/\./g, '\\.');
        hostRE = new RegExp(hostRE, 'i');
        if (hostRE.test(document.referrer) == false) {
            
            // This is an external referer
            semSetCookie('sem_referrerurl', document.referrer);
            semSetCookie('sem_entryurl', location.href);
            var referrerHostname = document.referrer.replace(/^.*?\:\/\/([^\/]+).*?$/, "$1");
            var referrerHostnameID = referrerHostname.replace(/^.*?([^\.]+)\.[a-z]{2,4}$/i, "$1");
            for (var i = 0; i < semEngines.length; i++) {
                
                if (referrerHostnameID == semEngines[i][0]) {
                    
                    // Referrer is a search engine
                    semSetCookie('sem_engineid', semEngines[i][0]);
                    // Click type
                    var semClickType = 'organic';
                    for (var ii = 0; ii < semPaidKey.length; ii++) {
                        
                        if (location.href.indexOf(semPaidKey[ii]) != -1) {
                            
                            semClickType = 'paid';
                            break;
                            
                        }
                        
                    }
                    semSetCookie('sem_clicktype', semClickType);
                    // Get keywords
                    var semEngineKQS = semEngines[i][1];
                    var semEngineKRE = semEngineKQS+'\\=([^\\=\\&]+)';
                    semEngineKRE = new RegExp(semEngineKRE, 'i');
                    var semEngineK = semEngineKRE.exec(document.referrer);
                    semEngineK = semEngineK[1];
                    if (semEngineK) { semSetCookie('sem_engineterms', unescape(semEngineK)); }
                    
                }
                
            }
            
        }
        
    }
    
}


function semSetCookie(name, value, expires, path, domain, secure) {
    
    if (typeof(semCookieTTL) != 'object') {
        
        var mydate = new Date();
        var mytime = mydate.getTime();
        mytime += semCookieTTL;
        mydate.setTime(mytime);
        semCookieTTL = mydate;
        
    }
    expires = (expires) ? expires : semCookieTTL;
    path = (path) ? path : semCookiePath;
    domain = (domain) ? domain : semCookieDomain;
    secure = (typeof(secure) == 'boolean') ? secure : semCookieSecure;
    var curCookie = name + "=" + escape(value) +
                    ((expires) ? "; expires=" + expires.toGMTString() : "") +
                    ((path) ? "; path=" + path : "") +
                    ((domain) ? "; domain=" + domain : "") +
                    ((secure) ? "; secure" : "");
    document.cookie = curCookie;
}


function semConsoleLog(msg) {
    
    if (typeof(console) == 'object') { console.log(msg); }
    
}


semTagRequest();
