var allcookies = document.cookie;

// Парсит кукису _utmz, возвращает значение utmcsr, utmcmd итд
function _uGC(l,n,s) {
  if (!l || l=="" || !n || n=="" || !s || s=="") return "-";
  var i,i2,i3,c="-";
  i=l.indexOf(n);
  i3=n.indexOf("=")+1;

  if (i > -1) {
    i2=l.indexOf(s,i); if (i2 < 0) { i2=l.length; }
    c=l.substring((i+i3),i2);
  }
  return c;
}

// создает cookie __firstvisit с данными о первом посещении и
// cookie __refdata c последними n посещениями '*' множитель, разделитель '+'
function RefRecord() {

  var addstr = "";
  var refdata = "";
  
  if ( allcookies.indexOf("__utmb") == -1 ) { return null }
  utmb = getCookie( "__utmb" ).split( "." );
  if ( utmb[ 1 ] != 1 ) { return null }
  
  // Определяем addstr, строка которую нужно дабавить в кукисы
  if ( document.referrer == "" ) {
    addstr = "D";
  } else {
    var z = _uGC(document.cookie, '__utmz=', ';');

    var source  = _uGC(z, 'utmcsr=', '|'); 
    var medium  = _uGC(z, 'utmcmd=', '|'); 
    var term    = _uGC(z, 'utmctr=', '|'); 
    var content = _uGC(z, 'utmcct=', '|'); 
    var campaign = _uGC(z, 'utmccn=', '|'); 
    var gclid   = _uGC(z, 'utmgclid=', '|'); 

    if (gclid != "-") { source = 'google'; medium = 'cpc'; } 

    addstr = campaign+'_'+source+'_'+medium+'_'+term+'_'+content;
  }
  
  // Определяем куда писать addstr
  if ( allcookies.indexOf("__firstvisit") == -1 ) {
    refdata = addstr + "#";
    setCookie("__firstvisit", refdata);
  } else {
       if ( allcookies.indexOf("__refdata") == -1 ) {
      refdata = addstr + "*1+";
    } else {
      var refDataArr = getCookie( "__refdata" ).split( "+" );
      var lastRefRecord = [];
      var firstLength = getCookie;
      var n = 5;

      if ( refDataArr[1] == '' ) {
        refDataArr = [refDataArr[0]];
      }

      lastRefRecord = refDataArr.slice( -1 )[0].split( "*" );

      if ( lastRefRecord[ 0 ] == addstr ) {
        lastRefRecord[ 1 ] = parseInt(lastRefRecord[ 1 ]) + 1 ;
        refDataArr[ refDataArr.length - 1 ] = lastRefRecord.join( "*" );
      } else {
        refDataArr.push( addstr + "*1" );
        if ( refDataArr.length >= n ) { refDataArr = refDataArr.slice( -( n - 1 )) };
      }

      if ( refDataArr.length == 1 ) {
        refdata = refDataArr[0] + "+";
      } else {
        refdata = refdata + refDataArr.join( "+" );
      }
    }
    setCookie("__refdata", refdata);
  }
}

// helpers
function setCookie(name, value) {
  var date = new Date();
  date.setYear(date.getFullYear() + 1);
  var expires = "; expires=" + date.toGMTString();
	document.cookie = name + "=" + value + expires + "; path=/";
}

function getCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0 ; i < ca.length; i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1, c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
	}
	return null;
}
//

// Эту функцию вешаем на отслеживаемое нами дейстивие, тут происходит setCustomVar
function sendRefData(){
  if ( allcookies.indexOf("__firstvisit") != -1){
    var firstvisit = getCookie( "__firstvisit" );
    var refdata = getCookie( "__refdata" );
    if ( refdata != null ){
      refdata = refdata.substr( 0, 64 - firstvisit.length );
    }
    
   _gaq.push(
        ['_setCustomVar', 4, 'refdata', firstvisit + refdata ],
        ['_trackEvent', 'Order', 'Send']
        );
  }
}

RefRecord();

