var login_form = new ns_form("login", "https://go.pardot.com/l/7092/2011-05-18/2AZ9", ["retemail"]); 
var registration_form = new ns_form("newcust", "https://go.pardot.com/l/7092/2011-05-16/1SGL", ["email"]);

//create an array of forms to easily go through them all
var ns_to_pardot_forms = new Array();
//create array in order of preference (only 1 form will be processed on a single page)
ns_to_pardot_forms[0] = registration_form;
ns_to_pardot_forms[1] = login_form;

function init_script(){
		var count = 0;
		for (i = 0; ns_to_pardot_forms && i < ns_to_pardot_forms.length && count == 0; i++) { //go through all ns to pardot forms
			if (document.forms[ns_to_pardot_forms[i].form_name] && !document.getElementById("fsubmit")) {
				var pardot_iframe = document.createElement("iframe"); // create pardot iframe
				pardot_iframe.id = ns_to_pardot_forms[i].pardot_iframe_id;
				pardot_iframe.width = "1";
				pardot_iframe.height = "1";
				pardot_iframe.style.visibility = "hidden";
							
				var real_submit = document.getElementById(ns_to_pardot_forms[i].submitId); //get the real submit button
				real_submit.style.visibility = "hidden"; //hide real submit button
				
				var fake_submit = document.createElement("input"); //create fake submit button
				if (real_submit.type) 
					fake_submit.type = real_submit.type;
				if (real_submit.value) 
					fake_submit.value = real_submit.value;
				if (real_submit.className) 
					fake_submit.className = real_submit.className;
					fake_submit.id = "fsubmit";
				document.getElementById(ns_to_pardot_forms[i].submitParentId).insertBefore(fake_submit, real_submit); //insert fake submit button into the page
				document.getElementById(ns_to_pardot_forms[i].submitParentId).insertBefore(pardot_iframe, real_submit); //insert iframe into the page
				
				addElementEventListener(fake_submit, "click", "ns_to_pardot_forms[" + i + "].onsubmit()", false, false); //add event listener for fake submit button, when it's clicked, run onsubmit method of corresponding ns_form object
				count = count+1;
			}
		}
	}


function addElementEventListener(element, evt, action, useCapture, removeAfter)
{
	
	listener = function(e){ //e is event, parameter is passed by system
		if (!e) {
			e = window.event;
		} //fix for IE
		else 
		{
			var target = e.target; //element, which has been clicked
		}
		if(!target)
		{
				target = this;
		}//another ie fix
		if(target!=null)
		{
			eval(action); //run whatever action was specified
			
			if(removeAfter && target.removeEventListener)
			{
				element.removeEventListener(evt,listener); //if removeAfter is set to true, remove event listener after action has been evaluated
			}
			else if(removeAfter && target.detachEvent)
			{
				element.detachEvent("on" + evt, listener);
			}			
		}
	}
	if (element.addEventListener) {
		element.addEventListener(evt, listener, useCapture); //works in all browsers, but IE
	}
	else if(element.attachEvent){
		element.attachEvent("on" + evt, listener);	
	}	
}


function ns_form(form_name, pardot_url, field_names)
{
	this.form_name = form_name; 
	this.field_names = field_names;
	this.pardot_url = pardot_url;
	this.pardot_iframe_id = "pardot_iframe";
	this.submitParentId = "tbl_submitter";
	this.submitId = "submitter";
	
	this.getFieldValues = function (){
	var fields = new Array();
	count = 0;
	try {
		var Form = document.forms[form_name];
		if (Form) {
			var allElements = document.forms[form_name].elements;
			
			for (i = 0; i < this.field_names.length; i++) {
				if (allElements[field_names[i]]) {
					fields[count] = new form_field(allElements[field_names[i]].name, allElements[field_names[i]].value);
					count++;
				}
			}
			if (count != 0) {
				return fields;
			}
		}
	} 
	catch (err) {
		alert(err);
		return null;
	}
	return null;
}

	this.getPardotPostUrl = function (form_fields)
	{
		var param_str = "\?";
		for (i = 0 ;i < form_fields.length; i++)
		{
			if(i!=0)
			{
				param_str += "&";
			}
			param_str += form_fields[i].name + "=" + form_fields[i].value;
		}
		return this.pardot_url + param_str;
	}
	
	this.onsubmit = function ()
	{
		var url = this.getPardotPostUrl(this.getFieldValues());
		var pardot_iframe = document.getElementById(this.pardot_iframe_id);
		if(pardot_iframe)
		{
		pardot_iframe.src = url;
		addElementEventListener(pardot_iframe,"load","document.getElementById('"+ this.submitId +"').click()", false, true);
		}
	}
}

function form_field(name, value){
	this.name = name;
	this.value = value;
}

addElementEventListener(window, "load", "init_script()", false, true); //run page init script on window load
