var forms = new Array(new Array(), new Array(), new Array(), new Array(), new Array(), new Array(), new Array(), new Array(), new Array());
var successInfo;

function changeReturnRequirness(formName, returnName, required) {
	for(var i = 0; i < forms[0].length; i++) {
		if(forms[0][i] == formName) {
			for(var ii = 0; ii < forms[5][i].length; ii++) {
				if(forms[5][i][ii] == returnName) {
					forms[8][i][ii] = required;
					break;
				}
			}
		}
	}
}

function addForm(formName, formID, successMsg, failureMsg) {
	forms[0].push(formName);
	forms[1].push(formID);
	forms[2].push(successMsg);
	forms[3].push(failureMsg);
	forms[4].push(new Array());
	forms[5].push(new Array());
	forms[6].push(new Array());
	forms[7].push(new Array());
	forms[8].push(new Array());
}

function addReturn(formName, fieldID, returnName, errorName, type, required) {
	for(var i = 0; i < forms[0].length; i++) {
		if(forms[0][i] == formName) {
			forms[4][i].push(fieldID);
			forms[5][i].push(returnName);
			forms[6][i].push(errorName);
			forms[7][i].push(type);
			forms[8][i].push(required);
			break;
		}
	}
}

function validateForm(formName) {
	var valid = true;

	for(var i = 0; i < forms[0].length; i++) {
		if(forms[0][i] == formName) {
			for(var ii = 0; ii < forms[4][i].length; ii++) {
				document.getElementById(forms[6][i][ii]).innerHTML = "";
				var value = getInputValue(document.getElementById(forms[4][i][ii]));
				if(forms[8][i][ii]) {
					if(isBlank(value)) {
						valid = false;
						document.getElementById(forms[6][i][ii]).innerHTML += "This is a required field!";
						continue;
					}
				}

				if(isBlank(value))
					continue;

				switch(forms[7][i][ii].toLowerCase()) {
					case "email":
						if(!new RegExp('[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]', '').test(value)) {
							valid = false;
							document.getElementById(forms[6][i][ii]).innerHTML += "Please enter a valid email!";
						}
						break;
					case "phone":
						value = getNumbersFromString(value);
						
						if(!new RegExp('^[0-9]{10}$', '').test(value)) {
							valid = false;
							document.getElementById(forms[6][i][ii]).innerHTML += "Please enter a valid phone number!<br />ex. ###-###-####";
						}
						
						if (value.length == 10) {
							value = value.toString().slice(0, 3) + '-' + value.toString().slice(3, 6) + '-' + value.toString().slice(6, 10);
						}

						setInputValue(document.getElementById(forms[4][i][ii]), value);
						break;
					case "zip":
						value = getNumbersFromString(value);

						if(!new RegExp('^[0-9]{5}$', '').test(value) && !new RegExp('^[0-9]{9}$', '').test(value)) {
							valid = false;
							document.getElementById(forms[6][i][ii]).innerHTML += "Please enter a valid zip code!<br />ex. ##### or #####-####";
						}

						if (value.length == 9) {
							value = value.toString().slice(0, 5) + '-' + value.toString().slice(5, 9);
						}

						setInputValue(document.getElementById(forms[4][i][ii]), value);
						break;
					case "year":
						if(!new RegExp('(19|20)[0-9]{2}', '').test(value)) {
							valid = false;
							document.getElementById(forms[6][i][ii]).innerHTML += "Please enter a valid year!</br >ex. yyyy";
						}
						break;
					case "date":
						if(!new RegExp('(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)[0-9]{2}', '').test(value)) {
							valid = false;
							document.getElementById(forms[6][i][ii]).innerHTML += "Please enter a valid date!</br >ex. dd/mm/yyyy or dd-mm-yyyy or dd.mm.yyyy";
						}
						break;
					case "dob":
						if(!new RegExp('(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)[0-9]{2}', '').test(value) && !new RegExp('(19|20)[0-9]{2}', '').test(value)) {
							valid = false;
							document.getElementById(forms[6][i][ii]).innerHTML += "Please enter a valid date!</br >ex. dd/mm/yyyy or dd-mm-yyyy or dd.mm.yyyy";
						}
						break;
					default:
						break;
				}
			}
			break;
		}
	}

	return valid;
}

function getNumbersFromString(value) {
	var newValue = '';

	for (var i = 0 ; i < value.length ; i++) {
		var c = value.charAt(i);

		if (!isNaN(c)) {
			newValue += c;
		}
	}

	return newValue;
}

function submit(formName) {
	var info = new Array();

	for(var i = 0; i < forms[0].length; i++) {
		if(forms[0][i] == formName) {
			info.push(forms[1][i]);
			info.push(forms[4][i]);
			info.push(forms[5][i]);
			info.push(forms[2][i]);
			info.push(forms[3][i]);
			break;
		}
	}

	if(info.length != 5)
		return;

	var xml = createXML(info, formName);
	self.frames["resultFrame"].document.forms["frm12345"].xml.value = xml;
	self.frames["resultFrame"].document.forms["frm12345"].action = 'http://api2.silverpop.com/XMLAPI';
	self.frames["resultFrame"].document.forms["frm12345"].submit();
	
	successInfo = info[3];
	setTimeout('success()', 3000);
}

function createXML(info, form) {
	var xml = '<?xml version="1.0" encoding="UTF-8"?><Envelope><Body><AddRecipient>';

	xml += '<LIST_ID>' + info[0] + '</LIST_ID>';

	xml += '<CREATED_FROM>2</CREATED_FROM><UPDATE_IF_FOUND>TRUE</UPDATE_IF_FOUND>';

    xml += '<SEND_AUTOREPLY>TRUE</SEND_AUTOREPLY>';

	for(var i = 0; i < info[1].length; i++) {
		xml += '<COLUMN><NAME>' + info[2][i].toUpperCase() + '</NAME><VALUE>' + getInputValue(document.getElementById(info[1][i])) + '</VALUE></COLUMN>';
	}	

	xml += '</AddRecipient></Body></Envelope>';

	return xml;
}

function success() {
    document.getElementById("confirmation").innerHTML = successInfo;
    document.getElementById("form").innerHTML = "";
}