/*
Name: Google Analytics Cookie Scraper
Author: Shawn Purtell
Created: 11/29/2006
Description: Grabs data from Google Analytics tracking cookies and inserts into hidden form field for easy lead submission.
~~~~~~
Last modified by Jeremy Aube on 09/22/2008
*/

var extras = false;
var extraName = new Array("ga_campaign", "ga_keyword", "ga_ad_content", "ga_adgroup"); // extra cookie names
var utmName = new Array("user4", "user5", "user6", "user7", "user9", "user10");	// fieldname list
var utmValue = new Array();		// store field values here
var formListAfter = new Array("","_header","_main","_main2");
var formListBefore = new Array("","custom ga_","ga ");

function createCookie(name,value) {	// creates a 6 month cookie
	var date = new Date();
	date.setTime(date.getTime()+15768000000);
	var expires = "; expires="+date.toGMTString();
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {		// function to read cookie
	var nameRegex = RegExp("(?:;\\s|^)" + name + "=([^;]+)");	// match name of cookie and store value in $1
	nameValue = nameRegex.exec(document.cookie);				
	if(nameValue) {	
		return nameValue[1];
	} else {
		return null;
	}
}

function readSubCookie(name, vari) {	// function to read subcookie of passed value of __utmz
	var nameRegex = RegExp("(?:\\||\\.)" + name + "=([^|]+)");
	nameValue = nameRegex.exec(vari);
	if(nameValue) {
		return nameValue[1];
	} else {
		return " ";
	}
}

function readQuery(name) { 	// function to read query parameters of query string
	var nameRegex = RegExp("(?:\\?|&)" + name + "=([^&]+)");
	nameValue = nameRegex.exec(location.search);
	if(nameValue) {
		return nameValue[1];
	} else {
		return null;
	}
}
	

function extraCookies() {	// creates and renews supplemental cookies 
	for(i=0;i<extraName.length;i++) {
		var oldCookie = readCookie(extraName[i]);
		var newCookie = readQuery(extraName[i]);
		if(newCookie || (oldCookie && !(readCookie("__utmb") || readCookie("__utmc")))) {
				createCookie(extraName[i], newCookie);
		}
	}
	extras = true;
}



function parseCookies() {
	var c2 = readCookie("__utmz"); 			// This gets the cookie
	var gclid = readSubCookie("utmgclid",c2);	// read utmgclid subcookie
	if(gclid!=" ") {		// read values for adwords
		
		utmValue[0] = "google";
		utmValue[1] = "cpc";
		utmValue[2] = "google";
		utmValue[3] = " ";
		utmValue[4] = " ";
		
		if(extras) {	// when supplemental cookies are enabled
			for(i=2;i<5;i++) { 
				var extraValue = readCookie("ga_" + utmName[i].replace(/\s/g,"_")) // check for each cookie
				if(extraValue) {
					utmValue[i] = extraValue;
				}
			}
		} 
	} else {	// read values for non-adwords
		utmValue[0] = readSubCookie("utmcsr", c2);
		utmValue[1] = readSubCookie("utmcmd", c2);
		utmValue[2] = readSubCookie("utmccn", c2);
		utmValue[3] = readSubCookie("utmctr", c2);
		utmValue[4] = readSubCookie("utmcct", c2);
	}
	
	utmValue[5] = " ";
	if(extras) {
		utmName[6] = "adgroup";
		utmValue[6] = " ";
	}
	
	if(utmValue[1]=="cpc") {
		searchQuery = readCookie("__utmv");
		if(searchQuery) {
			searchValue = /^[0-9]+\.(.+)/.exec(searchQuery);
			if(searchValue) {
				utmValue[5] = searchValue[1];
			}
		}
		
		if(extras) {
			var adgroup = readCookie("ga_adgroup");
			if(adgroup) {
				utmValue[6] = adgroup;
			}
		}
	}
}


function modifyForm(name) {
	if(name) { // if adding hidden fields to named form
		if(document.forms[name]) {
			parseCookies(); 		// read cookies and set values
			for(i=0;i<utmName.length;i++) {
				var gaField = document.createElement("input");
				gaField.setAttribute("name", utmName[i]);
				gaField.setAttribute("value",utmValue[i]);
				gaField.setAttribute("type","hidden");
				document.forms[name].appendChild(gaField);
			}
		}
	} else { // if modifying existing fields
		parseCookies(); 		// read cookies and set values
		for(i=0;i<formListAfter.length;i++) {
			for (l=0;l<formListBefore.length;l++) {
				for(j=0;j<utmName.length;j++) {
					if(document.getElementById(formListBefore[l] + utmName[j].replace(/\s/g,"_") + formListAfter[i])) { 
						document.getElementById(formListBefore[l] + utmName[j].replace(/\s/g,"_") + formListAfter[i]).value = utmValue[j]; 
					}
					var fieldName=document.getElementsByName(formListBefore[l] + utmName[j].replace(/\s/g,"_") + formListAfter[i]);
					if(fieldName) {
						for(k=0;k<fieldName.length;k++) {
							fieldName[k].value = utmValue[j];
						}
					}
				}
			}
		}
	}
}

modifyForm("contactForm");	// optional parameter modifies specific form, otherwise modify standard field names


