var alertedCount = 0;
var domainChecked = true;

function checkform(form) { 
	if(document.getElementById('required')) { 
		var reqfields = document.getElementById('required').value.split(',');
		if (document.getElementById('alertMessage')) {
			var thisthing = document.getElementById('alertMessage');
			thisthing.parentNode.removeChild(thisthing);
		}
		alertedCount = 0;
		for(var i=0; i<reqfields.length; i++) {
			if (reqfields[i] == "planChoice") {
				var selectedRadio = getSelectedRadio(form.planChoice);
				if (selectedRadio == null) {
					alertMessage(form, 'We were unable to process your form.', 'You must select a plan.');
					return false;
				} else if (document.getElementById('currentPlan')) {
					if (document.getElementById('currentPlan').value == selectedRadio.value) {
						alertMessage(form, 'We were unable to process your form.', 'You must select a plan to upgrade to.');
						return false;
					}					
				}
			} else {
				var field = document.getElementById(reqfields[i]);
				if (field) {
					checkField(form, field);
				}
			}
		}
	}
	if (!domainChecked && !document.getElementById('advisorLite').checked && !document.getElementById('freeTrial').checked) {
		alertMessage(form, 'We were unable to process your form.', 'We have not yet verified the availability of your Domain Name.');
		alertField('domainName');
		return false;
	}
	if (alertedCount > 0) {
		alertMessage(form, 'We were unable to process your form.', 'Please review the highlighted fields and resubmit.');
		return false;
	}
}

function getSelectedRadio(radioArrayObj) {
	for (var i = 0; i < radioArrayObj.length; i++) {
		if (radioArrayObj[i].checked) {
			return radioArrayObj[i];
		}
	}
	return null;
}

function checkField(form,field) {
	field.parentNode.parentNode.className = field.parentNode.parentNode.className.replace("alert","");
	var type = field.type.toLowerCase();
	switch(type) {
		case 'text':
			if (field.value=='' && field.id != 'DialInNumber'){
				field.parentNode.parentNode.className = field.parentNode.parentNode.className.replace("calm", "");
				alertField(field.id);
			} else if (field.id == 'emailAddress' && !isEmailAddr(field.value)) {
				alertField(field.id);
			} else if (field.id == 'loginName') {
				var tempvalue = field.value; 
				field.value = tempvalue.replace( /[ ]/g, "" );
			} else if (field.id=='phoneNumber' || field.id=='organizationPhone' || field.id=='organizationFax'){
				if (!isPhone(field.value)){
					alertField(field.id);
				} else {
					field.value = isPhone(field.value);
				}
			} else if (field.id=='DialInNumber'){
				if (!isPhone(field.value) && field.value != ''){ // allow this one to be either null, or a valid phone number
					alertField(field.id);
				} else {
					field.value =(!isPhone(field.value)) ?  '' : isPhone(field.value);
				}
			} else if (field.id=='socialSecurityNumber'){
				if (!isSocial(field.value)){
					alertField(field.id);
				} else {
					field.value = isSocial(field.value);
				}
			} else if (field.id=='zipCode'){
				if (!isZipCode(field.value)){
					alertField(field.id);
				} else {
					field.value = isZipCode(field.value);
				}
			} else if (field.id == 'employeeDiscount' || field.id == 'payoutPercentage'){
				if (!isMinMax(field.value,'0','100')){
					alertField(field.id);
				} else {
					field.value = isMinMax(field.value,'0','100');
				}
			} else if (field.id == 'creditCardNumber') {
				if (!isCardNum(field.value)) {
					alertField(field.id);
				} else {
					field.value = isCardNum(field.value);
				}			
			} else if (field.id == 'creditAmount' || field.id == 'additionalCreditAmount' || field.id == 'certificateValue' || field.id == 'minimumOrder'){
				field.value = formatCurrency(field.value,false);
			} else if (field.id == 'domainName') {
				if (field.value.substr(0,7) == 'http://') {
					field.value = field.value.substr(7);
				} 
				if (field.value.substr(0,4) == 'www.') {
					field.value = field.value.substr(4);
				} 
				var domain = field.value.split(".");
				var tld = domain[1];
				var sld = domain[0];
				domainChecked = false;
				document.getElementById('submit').style.display = "none";
				loadXMLDoc(SETTINGS.webRoot + "register.php?mode=eNomCheck&tld=" + tld + "&sld=" + sld, "processDomainAvailability", field);
				if (field.parentNode.parentNode.getElementsByTagName('label')[0].getElementsByTagName('span')[0]) {
					field.parentNode.parentNode.getElementsByTagName('label')[0].removeChild(field.parentNode.parentNode.getElementsByTagName('label')[0].getElementsByTagName('span')[0]);
				}
					field.parentNode.parentNode.className = field.parentNode.parentNode.className.replace("calm", "");	
					var span = document.createElement('span');
					span.className = "button";
					span.innerHTML = "Checking<img src='" + location.protocol + "//" + document.domain + "/img/loading.gif' alt='' />";
					field.parentNode.parentNode.getElementsByTagName('label')[0].appendChild(span);
			
			}
		break;
		case 'textarea':
			if (field.value==''){
				alertField(field.id);
			}			
		break;
		case 'password':
			if (field.value=='') {
				alertField(field.id);
			} else if (field.id == 'password' && document.getElementById('confirmPassword')){
				if (!isMatch(field.value,document.getElementById('confirmPassword').value,field.value)){
					alertField("confirmPassword");
				} else {
					document.getElementById('confirmPassword').parentNode.parentNode.className = document.getElementById('confirmPassword').parentNode.parentNode.className.replace("alert","");
				} 
			} else if (field.id == 'confirmPassword' && document.getElementById('password')){
				if (!isMatch(field.value,document.getElementById('password').value)){
					alertField(field.id);
				} else {
					document.getElementById('password').parentNode.parentNode.className = document.getElementById('password').parentNode.parentNode.className.replace("alert","");
				} 
			}
		break;
		case 'checkbox':
			if (!field.checked){
				alertField(field.id);
			}							
		break;
		case 'select-one':
			if (field.options[field.selectedIndex].value==''){
				alertField(field.id);
			}
		break;	
	}
}

function alertMessage(form,msg,notes) {
	var urlPath = location.protocol + "//" + document.domain;
	if(!document.getElementById('alertMessage')){
		var alertDiv			= document.createElement('div');
		alertDiv.id				= "alertMessage";
		var alertIcon			= document.createElement('div');
		alertIcon.id			= "alertIcon";
		var alertImg			= document.createElement('img');
		alertImg.src			= "img/alertIcon.gif";
		alertImg.alt			= "We were unable to process your form. Please review the highlighted fields and resubmit.";
		var p					= document.createElement('p');
		var noteSpan			= document.createElement('span');
		alertIcon.appendChild(alertImg);
		p.appendChild(document.createTextNode(msg));
		noteSpan.appendChild(document.createTextNode(notes));
		p.appendChild(noteSpan);
		alertDiv.appendChild(alertIcon);
		alertDiv.appendChild(p);
		form.parentNode.insertBefore(alertDiv,form);
	}
}

function alertField(fieldID) {
	var field = document.getElementById(fieldID);
	field.parentNode.parentNode.className += " alert";
	alertedCount++;
}

function isEmailAddr(str) {
    return str.match(/^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,7}$/);
}
function isPhone(str) {
	str = str.replace( /[^0-9]/g, "" );
	var reg = /^([0-9]{3})([0-9]{3})([0-9]{4})$/;
	if (vals = reg.exec(str))                                  
		return "(" + vals[1] + ") " + vals[2] + "-" + vals[3];
	else
		return false;
}

function isCardNum(str) {
	str = str.replace( /[\s-]/g, "" ); // Strip out non-numerics
	var reg = /^([0-9]){13,16}$/;
	vals = reg.exec(str);
	if (vals)	{return vals[0];}
	else		{return false;}
}

function isSocial(str) {
	str = str.replace( /[^0-9]/g, "" );
	var reg = /^([0-9]{3})([0-9]{2})([0-9]{4})$/;
	if (vals = reg.exec(str))                                  
		return vals[1] + "-" + vals[2] + "-" + vals[3];
	else
		return false;
}
function isZipCode(str) {
	str = str.replace( /[^0-9]/g, "" );
	validateZip = new RegExp(/(^\d{5}$)|(^\d{9}$)/);
	if (!validateZip.test(str)) {
		return false;
	} else {
		var reg = /^([0-9]{5})([0-9]{4})$/;
		vals = reg.exec(str);
		if(vals){
			return vals[1] + "-" + vals[2];
		}else{
			return str;
		}
	}
}
function isMinMax(str,min,max) {
	str = str.replace( /[^0-9.]/g, "" );
	str = parseFloat(str);
	min = parseFloat(min);
	max = parseFloat(max);
	if (str >= min && str <= max) {
		if (str == 0) {
			return "0";
		}
		return str;
	} else {
		return false;
	}
}
function leaveDigits(master) {
	master.value=strip(master.value);
}
function strip(_str) {
	var STR="";
	var _exp =/\d+|\./g;
	var _array;
	while(_array=_exp.exec(_str)) {
		STR+=_array.join();
	}
	return(STR);
}
function isMatch(confirm,original) {
	if (confirm == original) {
		return true;
	} else {
		return false;
	}
}
function formatCurrency(num,signs) {
	num = num.toString().replace(/\$|\,/g,'');
	if(isNaN(num)) { 
		num = "0";
	}
	sign = (num == (num = Math.abs(num)));
	num = Math.floor(num*100+0.50000000001);
	cents = num%100;
	num = Math.floor(num/100).toString();
	if(cents<10) {
		cents = "0" + cents;
	}
	for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++) {
		num = num.substring(0,num.length-(4*i+3))+','+num.substring(num.length-(4*i+3));
	}
	if (signs == true) {
		return (((sign)?'':'-') + '$' + num + '.' + cents);
	} else {
		return (num + '.' + cents);
	}
}