﻿// This JavaScript was developed by IntelligentBusinessCorp (IntelligentBusinessCorp@gmail.com) exclusively for www.innovativesigns.com
// Please use this code to extract details like Referral URL, Search Engine Name, Keyword Paramter and Search Engine Keyword. 
// Use this code at your own risk.  IntelligentBusinessCorp Expert takes no responsibility for errors, loss of data or any other complications arising from the use of this code
// For enquiries please contact IntelligentBusinessCorp@gmail.com
// Last Updated: Sep 18 2009 

//GLOBAL VARIABLE DECLARATION


var sIBC_PageinIFrame = 1;  // 0 = Page not called within Iframe , 1 = Page called within Iframe

var sIBC_Referrer = '';
var sIBC_SearchKeywords = '';
var sIBC_SearchEngine = '';
var sIBC_SearchType = '-NA-'; //ORGANIC OR ADWORDS
var sIBC_IsGoogleReferrer = 0;

var sIBC_CurrentURL = '';
if(sIBC_PageinIFrame = 0) // 0 = Page not called within Iframe 
{
    sIBC_CurrentURL = location.href;
}
else // 1 = Page called within Iframe 
{
    sIBC_CurrentURL = window.parent.location.href;
}

//Part of URL after '?' (including '?')
var sIBC_CurrentURL_SearchPart = '';

if(sIBC_PageinIFrame = 0) // 0 = Page not called within Iframe 
{
    sIBC_CurrentURL_SearchPart = document.location.search;
}
else // 1 = Page called within Iframe 
{
    sIBC_CurrentURL_SearchPart = window.parent.document.location.search;
}


//MAIN FUNCTION TO FIND REFERRER, SEARCH ENGINE NAME AND SEARCH ENGINE KEYWORDS     
function ExtractReferrer_Keywords()
    {
        try
        {
            if(sIBC_PageinIFrame = 0) // 0 = Page not called within Iframe 
            {
                   //USE BELOW CODE IF THE PARENT PAGE IS NOT CALLED IN IFRAME                
                   if (!document.referrer) 
                      {
                            sIBC_Referrer = '';
                            return;
                      }
                     else 
                      {
                            sIBC_Referrer = trim(document.referrer);
                      }
            }
            else // 1 = Page called within Iframe 
            {
                      //USE BELOW CODE IF THE PARENT PAGE IS CALLED IN IFRAME                
                      if (!window.parent.document.referrer) 
                      {
                            sIBC_Referrer = '';
                            return;
                      }
                      else 
                      {
                            sIBC_Referrer = trim(window.parent.document.referrer);
                      }
            }
          
          if (sIBC_Referrer.length > 0) 
          {
              sIBC_Referrer = sIBC_Referrer.toLowerCase();
              
              //Detect Search Engine
              var sIBC_DomainName = '';
              var sIBC_TempDomainName = '';
              
              //search globally for http://www
              var objRegExpHTTPWWW = /http:\/\/www/g; 
              
              //replace all matches with empty strings
              sIBC_TempDomainName = sIBC_Referrer.replace(objRegExpHTTPWWW,'');
              
              //search globally for http://
              var objRegExpHTTP = /http:\/\//g; 
              
              //replace all matches with empty strings
              sIBC_TempDomainName = sIBC_Referrer.replace(objRegExpHTTP,'');
              
              //search globally for https://www
              var objRegExpHTTPSWWW = /https:\/\/www/g; 
              
              //replace all matches with empty strings
              sIBC_TempDomainName = sIBC_TempDomainName.replace(objRegExpHTTPSWWW,'');
              
              //search globally for https://
              var objRegExpHTTPS = /https:\/\//g; 
              
              //replace all matches with empty strings
              sIBC_TempDomainName = sIBC_TempDomainName.replace(objRegExpHTTPS,'');
              
              //search globally for www
              //var objRegExpWWW = /www./g; 
              
              //replace all matches with empty strings
              //sIBC_TempDomainName = sIBC_TempDomainName.replace(objRegExpWWW,'');
              
              var nIBC_SlashIndex = sIBC_TempDomainName.indexOf('\/');
              if(nIBC_SlashIndex > -1)
              {
                sIBC_TempDomainName = sIBC_TempDomainName.substr(0,nIBC_SlashIndex);
              }
              
              sIBC_DomainName = sIBC_TempDomainName;
              var sIBC_KeywordPara = GetSearchEnngineKeywordPara(sIBC_DomainName);
             
                 
              sIBC_KeywordPara = trim(sIBC_KeywordPara);
              
              var sIBC_AfterQuestionUrlPart = '';
              if(sIBC_KeywordPara != '')
              {
                    
                   //FIRST REMOVE ALL URL PART BEFORE '?'
                   var nIBC_QuestionIndex = sIBC_Referrer.indexOf('?');
                   nIBC_QuestionIndex = parseInt(nIBC_QuestionIndex); 
                   if(nIBC_QuestionIndex > -1)
                   {
                      sIBC_AfterQuestionUrlPart = sIBC_Referrer.substr(nIBC_QuestionIndex + 1);
                      sIBC_AfterQuestionUrlPart = trim(sIBC_AfterQuestionUrlPart);
                  
                      var ictr = 0; 
                      nIBC_QuestionIndex = parseInt(sIBC_AfterQuestionUrlPart.indexOf('?'));
                        
                      while (nIBC_QuestionIndex > -1)
                        {
                            sIBC_AfterQuestionUrlPart = sIBC_AfterQuestionUrlPart.substr(nIBC_QuestionIndex + 1);
                            sIBC_AfterQuestionUrlPart = trim(sIBC_AfterQuestionUrlPart);
                            nIBC_QuestionIndex = parseInt(sIBC_AfterQuestionUrlPart.indexOf('?'));
                            ictr ++;
                            
                            //TO AVOID CONTINOUS LOOP IF THERE IS SOMETHING WRONG IN THE WHILE LOOP 
                            if(ictr > 50)
                            {
                              break; 
                            }
                        }
                                
                                           
                     if (sIBC_AfterQuestionUrlPart != '')
                     {
                        var mySplitResult = sIBC_AfterQuestionUrlPart.split("&");
                        
                        var icnt = 0;
                        for(icnt = 0; icnt < mySplitResult.length; icnt++)
                        {
                            var TempRequestVar = trim(mySplitResult[icnt]);
                            var nIBC_RequestVarIndex = TempRequestVar.indexOf(sIBC_KeywordPara + '=');
                            nIBC_RequestVarIndex = parseInt(nIBC_RequestVarIndex);                                                        
                            if (nIBC_RequestVarIndex == 0)                            
                            {
                                //search globally for sIBC_KeywordPara + '='
                                //var objRegExpKeywordPara = sIBC_KeywordPara + /=/g; 
            
                                //replace all matches with empty strings
                                //sIBC_SearchKeywords = TempRequestVar.replace(objRegExpKeywordPara,'');

                                var KeywordParaLen = (sIBC_KeywordPara + '=').length;                                
                                KeywordParaLen = parseInt(KeywordParaLen); 
                                
                                sIBC_SearchKeywords = TempRequestVar.substr(KeywordParaLen);
                                
                                //search globally for sIBC_KeywordPara + '='
                                var objRegExpPlus = /\+/g; 
            
                                //replace all matches with space
                                sIBC_SearchKeywords = sIBC_SearchKeywords.replace(objRegExpPlus,' ');
                                
                                sIBC_SearchEngine = sIBC_DomainName;
                                sIBC_SearchEngine = sIBC_SearchEngine.substr(0);
                                
                                
                                ////CODE TO IDENTIFY IF IT IS ADWORDS OR ORGANIC SEARCH
                                var nIBC_AdwordIndex = -1;
                                //if(sIBC_IsGoogleReferrer == 1)
                                //{

                                    //check for: 'gclid=' in current url
                                    if(nIBC_AdwordIndex == -1) 
                                    {
                                        nIBC_AdwordIndex = sIBC_CurrentURL_SearchPart.indexOf('gclid=');
                                        nIBC_AdwordIndex = parseInt(nIBC_AdwordIndex);                                                        
                                    } 
                                     
                                    //check for: 'cpc=' in current url
                                    if(nIBC_AdwordIndex == -1) 
                                    {
                                        nIBC_AdwordIndex = sIBC_CurrentURL_SearchPart.indexOf('cpc=');
                                        nIBC_AdwordIndex = parseInt(nIBC_AdwordIndex);                                                        
                                    }

                                    //check for: 'source=google' in current url
                                    if(nIBC_AdwordIndex == -1) 
                                    {
                                        nIBC_AdwordIndex = sIBC_CurrentURL_SearchPart.indexOf('source=google');
                                        nIBC_AdwordIndex = parseInt(nIBC_AdwordIndex);                                                        
                                    }
                                    
                                    //check for: 'campaign=google' in current url
                                    if(nIBC_AdwordIndex == -1) 
                                    {
                                        nIBC_AdwordIndex = sIBC_CurrentURL_SearchPart.indexOf('campaign=google');
                                        nIBC_AdwordIndex = parseInt(nIBC_AdwordIndex);                                                        
                                    }

                                    //check for: 'ref=googleadws' in current url
                                    if(nIBC_AdwordIndex == -1) 
                                    {
                                        nIBC_AdwordIndex = sIBC_CurrentURL_SearchPart.indexOf('ref=googleadws');
                                        nIBC_AdwordIndex = parseInt(nIBC_AdwordIndex);                                                        
                                    }
                                   
                                    //check for: '.googlesyndication.' in current ENTIRE url
                                    if(nIBC_AdwordIndex == -1) 
                                    {
                                        nIBC_AdwordIndex = sIBC_CurrentURL.indexOf('.googlesyndication.');
                                        nIBC_AdwordIndex = parseInt(nIBC_AdwordIndex);                                                        
                                    }
                                    
                                  
                                //}
                                
                                if(nIBC_AdwordIndex > -1) 
                                {
                                    sIBC_SearchType = 'ADWORDS';    
                                }
                                else
                                {
                                    sIBC_SearchType = 'ORGANIC';
                                }
                                ////CODE TO IDENTIFY IF IT IS ADWORDS OR ORGANIC SEARCH
                                
                                break; 
                            }
                            
                         }
                     
                      }
                     
                   }
              
               }
                  
            }
        }
        catch(err)
        {
            alert("Following exception occurred: " + err); 
        }
    }
    
    
//CALLING MAIN FUNCTION    
ExtractReferrer_Keywords();


//FUNCTION TO IDENTIFY DOMAIN AND SEARCH ENGINE KEYWORD PARAMETER 
function GetSearchEnngineKeywordPara(DomainSearchText)
{
    sIBC_SearchEngineKeywordPara = '';

    try
    {
                var _uOsr=new Array();	
                var _uOkw=new Array();

                // Google EMEA Image domains
                // Other Google Image search                
                  _uOsr[_uOsr.length]="images.google";	_uOkw[_uOsr.length-1]="q";                
                            
                // Google EMEA Domains
                  _uOsr[_uOsr.length]="google";	_uOkw[_uOsr.length-1]="q";
                  
                  //Bing
                _uOsr[_uOsr.length]="bing";	_uOkw[_uOsr.length-1]="q";

                // Yahoo EMEA Domains
                _uOsr[_uOsr.length]="yahoo";	_uOkw[_uOsr.length-1]="p";                

                // UK specific
                _uOsr[_uOsr.length]="hotbot";		_uOkw[_uOsr.length-1]="query";
                _uOsr[_uOsr.length]="excite";		_uOkw[_uOsr.length-1]="q";
                _uOsr[_uOsr.length]="bbc";			_uOkw[_uOsr.length-1]="q";
                _uOsr[_uOsr.length]="tiscali";			_uOkw[_uOsr.length-1]="query";
                _uOsr[_uOsr.length]="ask";		_uOkw[_uOsr.length-1]="q";
                _uOsr[_uOsr.length]="blueyonder";		_uOkw[_uOsr.length-1]="q";
                _uOsr[_uOsr.length]="search.aol";		_uOkw[_uOsr.length-1]="query";
                _uOsr[_uOsr.length]="aol";		_uOkw[_uOsr.length-1]="query";
                _uOsr[_uOsr.length]="ntlworld";			_uOkw[_uOsr.length-1]="q";
                _uOsr[_uOsr.length]="tesco";		_uOkw[_uOsr.length-1]="q";
                _uOsr[_uOsr.length]="orange";		_uOkw[_uOsr.length-1]="q";
                _uOsr[_uOsr.length]="mywebsearch";		_uOkw[_uOsr.length-1]="searchfor";
                _uOsr[_uOsr.length]="myway";		_uOkw[_uOsr.length-1]="searchfor";
                _uOsr[_uOsr.length]="searchy";		_uOkw[_uOsr.length-1]="search_term";
                _uOsr[_uOsr.length]="msn";		_uOkw[_uOsr.length-1]="q";
                _uOsr[_uOsr.length]="altavista";		_uOkw[_uOsr.length-1]="q";
                _uOsr[_uOsr.length]="lycos";		_uOkw[_uOsr.length-1]="query";


                // NL specific
                _uOsr[_uOsr.length]="chello.nl";			_uOkw[_uOsr.length-1]="q1";
                _uOsr[_uOsr.length]="home.nl";				_uOkw[_uOsr.length-1]="q";
                _uOsr[_uOsr.length]="planet.nl";			_uOkw[_uOsr.length-1]="googleq=q";
                _uOsr[_uOsr.length]="search.ilse.nl";			_uOkw[_uOsr.length-1]="search_for";
                _uOsr[_uOsr.length]="search-dyn.tiscali.nl";		_uOkw[_uOsr.length-1]="key";
                _uOsr[_uOsr.length]="startgoogle.startpagina.nl";	_uOkw[_uOsr.length-1]="q";
                _uOsr[_uOsr.length]="vinden.nl";			_uOkw[_uOsr.length-1]="q";
                _uOsr[_uOsr.length]="vindex.nl";			_uOkw[_uOsr.length-1]="search_for";
                _uOsr[_uOsr.length]="zoeken.nl";			_uOkw[_uOsr.length-1]="query";
                _uOsr[_uOsr.length]="zoeken.track.nl";			_uOkw[_uOsr.length-1]="qr";
                _uOsr[_uOsr.length]="zoeknu.nl";			_uOkw[_uOsr.length-1]="Keywords";


                // Extras
                _uOsr[_uOsr.length]="alltheweb";		    _uOkw[_uOsr.length-1]="q";
                _uOsr[_uOsr.length]="ananzi";			    _uOkw[_uOsr.length-1]="qt";
                _uOsr[_uOsr.length]="anzwers";			    _uOkw[_uOsr.length-1]="search";
                _uOsr[_uOsr.length]="araby";		    _uOkw[_uOsr.length-1]="q";
                _uOsr[_uOsr.length]="dogpile";			    _uOkw[_uOsr.length-1]="q";
                _uOsr[_uOsr.length]="elmundo";		    _uOkw[_uOsr.length-1]="q";
                _uOsr[_uOsr.length]="ezilon";		    _uOkw[_uOsr.length-1]="q";
                _uOsr[_uOsr.length]="hotbot";			    _uOkw[_uOsr.length-1]="query";
                _uOsr[_uOsr.length]="indiatimes";		_uOkw[_uOsr.length-1]="query";
                _uOsr[_uOsr.length]="iafrica.funnel";	_uOkw[_uOsr.length-1]="q";
                _uOsr[_uOsr.length]="mywebsearch";		_uOkw[_uOsr.length-1]="searchfor";
                _uOsr[_uOsr.length]="rambler";		    _uOkw[_uOsr.length-1]="words";
                _uOsr[_uOsr.length]="search.aol";		_uOkw[_uOsr.length-1]="encquery";
                _uOsr[_uOsr.length]="search.indiatimes";	_uOkw[_uOsr.length-1]="query";
                _uOsr[_uOsr.length]="searcheurope";		_uOkw[_uOsr.length-1]="query";
                _uOsr[_uOsr.length]="suche.web";		    _uOkw[_uOsr.length-1]="su";
                _uOsr[_uOsr.length]="terra";			    _uOkw[_uOsr.length-1]="query";
                _uOsr[_uOsr.length]="voila";			    _uOkw[_uOsr.length-1]="kw";


                // Default GA (sorted)
                _uOsr[_uOsr.length]="about";		_uOkw[_uOsr.length-1]="terms";
                _uOsr[_uOsr.length]="alice";		_uOkw[_uOsr.length-1]="qs";
                _uOsr[_uOsr.length]="alltheweb";	_uOkw[_uOsr.length-1]="q";
                _uOsr[_uOsr.length]="altavista";	_uOkw[_uOsr.length-1]="q";
                _uOsr[_uOsr.length]="aol";		    _uOkw[_uOsr.length-1]="encquery";
                _uOsr[_uOsr.length]="aol";		    _uOkw[_uOsr.length-1]="query";
                _uOsr[_uOsr.length]="ask";		    _uOkw[_uOsr.length-1]="q";
                _uOsr[_uOsr.length]="baidu";		_uOkw[_uOsr.length-1]="wd";
                _uOsr[_uOsr.length]="cnn";		    _uOkw[_uOsr.length-1]="query";
                _uOsr[_uOsr.length]="gigablast";	_uOkw[_uOsr.length-1]="q";
                _uOsr[_uOsr.length]="google";		_uOkw[_uOsr.length-1]="q";
                _uOsr[_uOsr.length]="live";		_uOkw[_uOsr.length-1]="q";
                _uOsr[_uOsr.length]="looksmart";	_uOkw[_uOsr.length-1]="qt";
                _uOsr[_uOsr.length]="lycos";		_uOkw[_uOsr.length-1]="query";
                _uOsr[_uOsr.length]="mamma";		_uOkw[_uOsr.length-1]="query";
                _uOsr[_uOsr.length]="msn";		    _uOkw[_uOsr.length-1]="q";
                _uOsr[_uOsr.length]="najdi";		_uOkw[_uOsr.length-1]="q";
                _uOsr[_uOsr.length]="netscape";		_uOkw[_uOsr.length-1]="s";
                _uOsr[_uOsr.length]="search";		_uOkw[_uOsr.length-1]="q";
                _uOsr[_uOsr.length]="seznam";		_uOkw[_uOsr.length-1]="w";
                _uOsr[_uOsr.length]="virgilio";	_uOkw[_uOsr.length-1]="qs";
                _uOsr[_uOsr.length]="voila";		_uOkw[_uOsr.length-1]="kw";
                _uOsr[_uOsr.length]="yahoo";		_uOkw[_uOsr.length-1]="p";
                _uOsr[_uOsr.length]="yandex";	_uOkw[_uOsr.length-1]="text";
              
                //
                
                  var ctr = 0; 
                  var arrlen = _uOsr.length;
                  
                  while (ctr <= arrlen - 1)
                  {
                     var _uOsrItem = trim(_uOsr[ctr]).toLowerCase();                
                     _uOsrItem = '.' + _uOsrItem + '.';
                     var nuOsrItemIndex = DomainSearchText.indexOf(_uOsrItem);
                    
                     if(parseInt(nuOsrItemIndex) > -1)
                     {
                         sIBC_SearchEngineKeywordPara = trim(_uOkw[ctr]).toLowerCase();

                         if ( _uOsrItem == ".images.google." || _uOsrItem == ".google." )
                         {
                            sIBC_IsGoogleReferrer = 1;
                         }
                        break; 
                     }
                    ctr++;
                  }
    }
    catch(err)
    {
        alert("Following exception occurred: " + err); 
        sIBC_SearchEngineKeywordPara = ''
    }
    
    return trim(sIBC_SearchEngineKeywordPara);
}   
    
// LTRIM(STRING) : RETURNS A COPY OF A STRING WITHOUT LEADING SPACES.
function ltrim(str)
{
   var whitespace = new String(" \t\n\r");
   var s = new String(str);
   if (whitespace.indexOf(s.charAt(0)) != -1) {
      var j=0, i = s.length;
      while (j < i && whitespace.indexOf(s.charAt(j)) != -1)
         j++;
      s = s.substring(j, i);
   }
   return s;
}

//RTRIM(STRING) : RETURNS A COPY OF A STRING WITHOUT TRAILING SPACES.
function rtrim(str)
{
   var whitespace = new String(" \t\n\r");
   var s = new String(str);
   if (whitespace.indexOf(s.charAt(s.length-1)) != -1) {
      var i = s.length - 1;       // Get length of string
      while (i >= 0 && whitespace.indexOf(s.charAt(i)) != -1)
         i--;
      s = s.substring(0, i+1);
   }
   return s;
}

// TRIM(STRING) : RETURNS A COPY OF A STRING WITHOUT LEADING OR TRAILING SPACES
function trim(str) 
{
   if(str == null)
   {
        return '';
   }
   else
   {
        return rtrim(ltrim(str));
   }
}



    
