/**
* Company			Explore Consulting
* Copyright			2010 Explore Consulting, LLC
* Type				NetSuite Suitelet
* Version			1.0.0.0
* Description		This script collects Google Analytics data for submission along with captured lead data.
**/

var debugMode = false;

/*
 *---------------------------------------------------------------------------
 * Client Page Field Validation Functions
 *---------------------------------------------------------------------------
*/
function validateAndSubmit(formID, formName, eventName, documentURL, openFileURL, closeLightbox)
{
	try
	{
		//Validate the form inputs before doing anything else.
		if (!validateLeadForm()) return false;
		
		//If the form data is valid, then append the Google Analytics data.
		if (!captureAnalytics(formID, formName, eventName, documentURL)) return false;

		//If a file URL was specified, the open it in a new window.
		if (openFileURL != null && openFileURL != "")
			var newWin = window.open(openFileURL, "_blank");

		//If the page uses the JQuery light box and the user wants to close it, then do so.
		if (closeLightbox) 
		{
			try { parent.$.fn.colorbox.close(); }
			catch (e) { }
		}
		
		return true;
	}
	catch (e)
	{
		debug("Unexpected error in validateAndSubmit(). \r\n" + e);
	}
	
	return false;
}

function getFieldValue(fieldName)
{
    var fields = document.getElementsByName(fieldName);
    if (fields == null)
		return null;
    else
		return fields[0].value;
}

function setFocus(fieldName)
{
	var fields = document.getElementsByName(fieldName);
    if (fields != null && fields.length != 0) fields[0].focus();
}

function validateLeadForm()
{
	//Get the values for all fields we know about and support.
	var companyName = getFieldValue("CompanyName");
	var firstName = getFieldValue("FirstName");
	var lastName = getFieldValue("LastName");
	var emailAddress = getFieldValue("Email");
	var phoneNumber = getFieldValue("PhoneNumber");

	if (isNullOrEmpty(companyName))
	{
		alert("Please enter your company name.");
		setFocus("CompanyName");
		return false;
	}

	if (isNullOrEmpty(firstName))
	{
		alert("Please enter your first name.");
		setFocus("FirstName");
		return false;
	}

	if (isNullOrEmpty(lastName))
	{
		alert("Please enter your last name.");
		setFocus("LastName");
		return false;
	}

	if (isNullOrEmpty(emailAddress))
	{
		alert("Please enter your email address.");
		setFocus("Email");
		return false;
	}
	else
	{
		if (!checkemail(trim(emailAddress), true))
		{
			setFocus("Email");
			return false;
		}
	}
    
	if (!isNullOrEmpty(phoneNumber))
	{
		var digits = getDigits(phoneNumber);

		if (digits.length < 10)
		{
			alert("Please enter a valid phone number.");
			setFocus("PhoneNumber");
			return false;
		}
	}
	else 
	{		
		alert("Please enter your phone number.");
		setFocus("PhoneNumber");
		return false;
	}

	return true;
}

function getDigits(value)
{
	var newValue = "";

	for (var i = 0; i < value.length; i++)
	{
		var c = value.substr(i, 1);

		if (parseInt(c) >=0 &&  parseInt(c) <= 9)
			newValue += c;
	}

	return newValue;
}

function checkemail(s_email, alrt)
{
    if (/\s|[,":<>]/.test(s_email))
    {
        if (alrt) alert('Please enter a valid email address. We do not accept email addresses with quotation marks, commas, colons, spaces, or greater than or less than signs.');
        return false;
    }

	if (!/^(?!\.)[-a-z0-9!#$%&'*+\/=?^_`{|}~.]*[-a-z0-9!#$%&'*+\/=?^_`{|}~]@(?:(?!-)[-a-z0-9]*[a-z0-9]\.)+(?:ac|ad|ae|aero|af|ag|ai|al|am|an|ao|aq|ar|arpa|as|asia|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|biz|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cat|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|com|coop|cr|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|info|int|io|iq|ir|is|it|je|jm|jo|jobs|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mil|mk|ml|mm|mn|mo|mobi|mp|mq|mr|ms|mt|mu|museum|mv|mw|mx|my|mz|na|name|nc|ne|net|nf|ng|ni|nl|no|np|nr|nu|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|pro|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tel|tf|tg|th|tj|tk|tl|tm|tn|to|tp|tr|travel|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|xn--0zwm56d|xn--11b5bs3a9aj6g|xn--80akhbyknj4f|xn--9t4b11yi5a|xn--deba0ad|xn--g6w251d|xn--hgbk6aj7f53bba|xn--hlcj6aya9esc7a|xn--jxalpdlp|xn--kgbechtv|xn--zckzah|ye|yt|yu|za|zm|zw)$/i.test(s_email))
	{
		if (alrt) alert('Please enter a valid email address.');
		return false;
	}

    return true;
}

/*
 *---------------------------------------------------------------------------
 * Utility Functions
 *---------------------------------------------------------------------------
*/

function trim(str)
{
    return str.replace(/^\s+/,"").replace(/\s+$/,"");
}

function isNullOrEmpty(value)
{
	if (value == null || trim(value) == "")
		return true;
	else
		return false;
}

function debug(text)
{
	if (debugMode != null && debugMode == true) alert(text);
}

/*
 *---------------------------------------------------------------------------
 * Google Analytics Capture Functions
 *---------------------------------------------------------------------------
*/
function getGAAccount()
{
	try
	{
		if (pageTracker != null)
			return pageTracker.s;
		else
			return _uacct;
	}
	catch (e)
	{
		debug("Google Analytics not enabled.");
	}
}

function getGABrowserInfo()
{
    return _uBInfo();
}

function getGACookie()
{
//    if (pageTracker != null)
//        return pageTracker.Tb();
//    else
//        return _ubd.cookie;

	return document.cookie;
}

function getGAKeywords()
{
	try
	{
		var temp = getGACookie();
		if (temp != null && temp != "")
		{
			var startPos = temp.indexOf("|utmctr=");
			if (startPos == -1) return "";
			startPos += 8;
			
			var endPos = temp.indexOf("|", startPos + 1);
			if (endPos == -1) return "";

			return temp.substring(startPos, endPos);
		}

		return "";
	}
	catch (e)
	{
		debug("Unexpected error in getGAKeywords().\r\n" + e + "\r\nTemp: " + temp);
	}
}

function getGAReferrer()
{
	try
	{
		var temp = getGACookie();
		if (temp != null && temp != "")
		{
			var startPos = temp.indexOf("|utmcsr=");
			if (startPos == -1) return "";
			startPos += 8;
			
			var endPos = temp.indexOf("|", startPos + 1);
			if (endPos == -1) return "";

			return temp.substring(startPos, endPos);
		}

		return "";
	}
	catch (e)
	{
		debug("Unexpected error in getGAReferrer().\r\n" + e + "\r\nTemp: " + temp);
	}
}

function getGAReferralType()
{
	try
	{
		var temp = getGACookie();
		if (temp != null && temp != "")
		{
			var startPos = temp.indexOf("utmccn=");
			if (startPos == -1) return "";
			startPos += 7;

			var endPos = temp.indexOf("|", startPos + 1);
			if (endPos == -1) return "";

			return temp.substring(startPos, endPos);
		}

		return "";
	}
	catch (e)
	{
		debug("Unexpected error in getGAReferralType().\r\n" + e + "\r\nTemp: " + temp);
	}
}


function createHtmlAttribute(name, value)
{
	var attribute = document.createAttribute(name);
	attribute.nodeValue = value;
	return attribute;
}

function setField(form, fieldName, fieldValue)
{
	try
	{
		var field = null;
		var fields = document.getElementsByName(fieldName);
		if (fields == null || fields.length == 0)
		{
			field = document.createElement("input");
			field.setAttributeNode(createHtmlAttribute("type", "hidden"));
			field.setAttributeNode(createHtmlAttribute("name", fieldName));
			field.setAttributeNode(createHtmlAttribute("value", fieldValue));
			form.appendChild(field);
		}
		else
		{
			field = fields[0];
		}

		field.value = fieldValue;
	}
	catch (e)
	{
		console.log("Unexpected error in setField(). \r\n" + e + "\r\nField Name: " + fieldName + ", Value: " + fieldValue);
	}
}

function captureAnalytics(formID, formName, eventName, documentURL)
{
	try
	{
		var form = document.getElementById(formID);
		if (form == null)
		{
			debug("This page does not have a form with an ID of '" + formID + "'.");
			return false;
		}

		debug("Updating GA lead source, keywords, etc...");
		setField(form, "ga_Account", getGAAccount());
		setField(form, "ga_LeadSource", getGAReferrer());
		setField(form, "ga_LeadType", getGAReferralType());
		setField(form, "ga_Keywords", getGAKeywords());
		setField(form, "ga_FormPage", document.location.href);

		debug("Updating GA event tracking");
		if ((formName != null && formName != "") && (eventName != null && eventName != "") && (documentURL != null && documentURL != ""))
		{
			if (pageTracker != null)
			{
				pageTracker._trackEvent(formName, eventName, documentURL);
			}
		}

		//TODO: Test in IE, Firefox and Safari. If the fields don't get passed through
		//then the following line may need to be enabled.
		//document.body.appendChild(form);

		return true;
	}
	catch (e)
	{
		debug("Unexpected error in captureAnalytics(). \r\n" + e);
	}
	
	return true;
}


