var alertedCount = 0;

function checkform(form) {
	if(document.getElementById('required')) {
		var reqfields = document.getElementById('required').value.split(',');
		if (document.getElementById('alertMessage')) {
			var alert = document.getElementById('alertMessage');
			alert.parentNode.removeChild(alert);
		}
		alertedCount = 0;
		for(var i=0; i<reqfields.length; i++) {
			var field = document.getElementById(reqfields[i]);
			if (field) {
				checkField(form,field);
			}
		}
	}
	if (alertedCount > 0) {
		alertMessage(form,'We were unable to process your form.','Please review the highlighted fields and resubmit.');
		return false;
	}
}

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==''){
				alertField(field.id);
			} else if (field.id == 'emailAddress' && !isEmailAddr(field.value)){
				alertField(field.id);
			}
			else if (field.id=='phoneNumber' || field.id=='orderFaxNumber' || field.id=='orderPhoneNumber'){
				if (!isPhone(field.value)){
					alertField(field.id);
				} else {
					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 == '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 == 'creditAmount'){
				field.value = formatCurrency(field.value,false);
			} else if (field.id == 'additionalCreditAmount'){
				field.value = formatCurrency(field.value,false);
			}
		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			= urlPath + "/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 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 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);
	}
}

function toggleLinkType(formInput, noOption, yesOption, callFunc) {
	var inputState;
	if(formInput) {
		var type=formInput.type.toLowerCase();
		switch(type) { // translating values of different input types to a common format (i.e. integers)
/*			case 'text':
				if(f.value==''){adderr(f.id,of,'We were unable to process your form.','Please review the highlighted fields and resubmit.')}
				else if(f.id=='email' && !isEmailAddr(f.value)){adderr(f.id,of,'We were unable to process your form.','Please review the highlighted fields and resubmit.')}
				else if(f.id=='phone'){
					if(!isPhone(f.value)){adderr(f.id,of,'We were unable to process your form.','Please review the highlighted fields and resubmit.');}
					else{f.value=isPhone(f.value);}
				}
			break;*/
/*			case 'textarea':
				if(f.value==''){adderr(f.id,of,'We were unable to process your form.','Please review the highlighted fields and resubmit.')}			
			break;*/
/*			case 'password':
				if(f.value==''){adderr(f.id,of,'We were unable to process your form.','Please review the highlighted fields and resubmit.')}	
			break;*/
			case 'checkbox':
				if(formInput.checked){inputState = 1;} else {inputState = 0;}
			break;
			case 'select-one':
			case 'select':
				// should already be 0 or 1, may use this space in future for options such as true|false or something
				inputState = formInput.value;
			break;	
		}
	}

	var option0 = document.getElementById(noOption);
	var option1 = document.getElementById(yesOption);
	if (yesOption != '' && noOption == '' && inputState != 'self') {
		option1.style.display = 'block';
//		return;
	} else if (yesOption != '' && noOption == '' && inputState == 'self') {
		option1.style.display = 'none';
//		return;
	} 

}
