// littlegreencube validation script Version 2

function validateForm(allFields,requiredFields,numericFields,emailFields,phoneFields){
	
	clearAllErrors();
	
	var validForm = true;
	errorMsg = '';

	clearAllFieldsAndLabels(allFields);
	
	var requiredLen = requiredFields.length;
	var numericLen = numericFields.length;
	var emailLen = emailFields.length;
	var phoneLen = phoneFields.length;
	
	//validate all required fields
	if(requiredLen > 0){
		for(var i=0;i<requiredLen;i++){
	
			var f = requiredFields[i].split('|');
			
			var oneTrue = false;
			for (var j=0; j<f.length;j++){
				if (validateRequiredFields(f[j])){
					oneTrue = true;	
				}
			}

			if(!oneTrue){
				validForm = false;
				
				if(f.length<=1){
					validateAddError($(requiredFields[i]).title + ' is required.');
					validateHighlightField(requiredFields[i]);
					validateHighlightLabel(requiredFields[i]);			
				}else{

					var msg = '';

					for (var j=0; j<f.length;j++){
						if(j>0){
							msg += " OR ";
						}
						msg += $(f[j]).title;
						validateHighlightField(f[j]);
						validateHighlightLabel(f[j]);			
					}

					validateAddError(msg+' is required.');

				}
			}
			
		}
	}
	//email is not required, but if it is entered, validate it.
	if(emailLen > 0){
		for(var i=0;i<emailLen;i++){
			if($F(emailFields[i]).replace(/ /gi,'') != '' && $F(emailFields[i]) != 'email'){
		
				if(!isValidEmail($F(emailFields[i]))){
					validForm = false;
					validateAddError($(emailFields[i]).title + ' does not appear to be a valid email address.');
					validateHighlightField(emailFields[i]);
					validateHighlightLabel(emailFields[i]);			
				}
			}
		}
	}

	//validate all numeric fields
	if(numericLen > 0){
		for(var i=0;i<numericLen;i++){
			if($F(numericFields[i]).replace(/ /gi,'') != '' && $F(numericFields[i]).toLowerCase() != $(numericFields[i]).title.toLowerCase() && isNaN($F(numericFields[i]))){
				validForm = false;
				validateAddError($(numericFields[i]).title + ' must be a number.');
				validateHighlightField(numericFields[i]);
				validateHighlightLabel(numericFields[i]);			
			}
		}
	}
	
	//validate all phonefields
	if(phoneLen > 0){
		for(var i=0;i<phoneLen;i++){
			if($F(phoneFields[i]).replace(/ /gi,'') != '' && $F(phoneFields[i]).toLowerCase() != $(phoneFields[i]).title.toLowerCase() && !isValidPhone($F(phoneFields[i]))){
				validForm = false;
				validateAddError($(phoneFields[i]).title + ' does not appear to be a valid phone number.');

				validateHighlightField(phoneFields[i]);
				validateHighlightLabel(phoneFields[i]);		
			}
		}
	}
	
	if(validForm){
		return true;
	}else{
		showValidateErrors();
		return false;
	}
}

function clearAllFieldsAndLabels(allFields){
	for(var i=0;i<allFields.length;i++){
		validateClearField(allFields[i]);
		validateClearLabel(allFields[i]);
	}
}

function isValidEmail(emailAddress){
	var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	return (filter.test(emailAddress));
}

function isValidPhone(phone){
	var numCount=0;	
	for(i=0;i<phone.length;i++){
		if(!isNaN(phone.charAt(i))){
			numCount++;	
		}
	}
	return (numCount>=10);
}


function validateRequiredFields(fieldId){
	return ($F(fieldId).replace(/ /gi,'') != '' && $F(fieldId).toLowerCase() != $(fieldId).title.toLowerCase());
}

function clearAllErrors(){
	$('badMsgDiv').innerHTML = '';
	$('badMsgDiv').style.visibility = 'hidden';
}


function showValidateErrors(){
	$('badMsgDiv').style.visibility = 'visible';	
	$('badMsgDiv').innerHTML = '<div class="msgWrapper">Please fix the following:<ul>' + errorMsg + '</ul></div> ';

	if($('badMsgDiv').style.display == 'none'){
		new Effect.BlindDown('badMsgDiv');
//		new Effect.ScrollTo('badMsgDiv');
	}
}

function validateAddError(errorTxtToAdd){
	errorMsg += '<li>' + errorTxtToAdd + '</li>';
}

function validateHighlightField(fieldId){

	$(fieldId).className = $(fieldId).className + ' badField';
/*
	if ( $(fieldId).tagName == 'select' ){
		$(fieldId).className = 'badSelect';
	}else if( $(fieldId).tagName == 'input' ){
		$(fieldId).className = 'badField';
	}
*/	
}

function validateClearField(fieldId){
	$(fieldId).className = $(fieldId).className.replace(/badField/gi,'').replace(/badSelect/gi,'');
}

function validateHighlightLabel(fieldId){
	$(fieldId+'_label').className = $(fieldId+'_label').className + ' badLabel';
}
function validateClearLabel(fieldId){
	$(fieldId+'_label').className = $(fieldId+'_label').className.replace(/badLabel/gi,'');
}


function hideFieldLabel(f){
	if(f.value == f.title.toLowerCase()){ 
		f.value = '';
	}
}

function showFieldLabel(f){
	if(f.value.replace(/ /gi,'') == ''){ 
		f.value = f.title.toLowerCase();
	}
}
