// JavaScript Document

var errorsExist;


function startValidation(form,errorTarget,toValidate,callback)
{
	this.errorsExist = false;
	
	if(typeof(form) == 'undefined' || typeof(toValidate) == 'undefined')	
	{
		return false;	
	}
	
	var i=0;
	for(i; i<toValidate.length; ++i)
	{		
		if(document.getElementById(toValidate[i]['field']).disabled == true)
		{
			continue;	
		}

		
		
		if(typeof(toValidate[i]['validationType']) != 'undefined' && toValidate[i]['validationType'] == 'Exact')
		{
			if(!validateExact(document.getElementById(toValidate[i]['field']),toValidate[i]['copyField'],toValidate[i]['errorTarget']))
			{
				this.errorsExist = true;	
			}
		}
		else if(typeof(toValidate[i]['validationType']) != 'undefined' && toValidate[i]['validationType'] == 'NotRequired')
		{
			if(!this.validateNonRequired(document.getElementById(toValidate[i]['field']),toValidate[i]['errorTarget'],toValidate[i]['realValidation']))
			{
				this.errorsExist = true;	
			}
		}
		else
		{
			if(!this.validate(document.getElementById(toValidate[i]['field']),toValidate[i]['errorTarget'],toValidate[i]['validationType']))
			{
				this.errorsExist = true;	
			}	
		}
	}
	
	if(this.errorsExist)
	{
		if(typeof(errorTarget) == 'string')
		{
			this.createError(errorTarget,'Please adjust the fields below with errors');			
		}
		else if(typeof(errorTarget) == 'object' && errorTarget.length > 0)
		{
			for(i=0; i<errorTarget.length; ++i)
			{
				this.createError(errorTarget[i],'There are errors. Please adjust the form before submitting.');	
			}
		}
		return false;	
	}
	
	
	// callback function for success
	if(callback)
	{
		eval(callback);
	}
	return true;
}


function validate(field,errorTarget,validationType)
{	
	var returnStr = this.validateRequired(field.value,errorTarget);
	
	if(returnStr && typeof(validationType) != 'undefined')
	{
		try
		{
			var funcStr = 'validate' + validationType;
			returnStr = eval(funcStr + '(\'' + field.value + '\',\'' + errorTarget + '\')');			
		}
		catch(error)
		{
			return false;	
		}
	}
	
	return returnStr;
}


function validateNonRequired(field,errorTarget,validationType)
{	
	var returnStr = '';
	
	if(typeof(validationType) != 'undefined')
	{
		try
		{
			var funcStr = 'validate' + validationType;
			returnStr = eval(funcStr + '(\'' + field.value + '\',\'' + errorTarget + '\')');			
		}
		catch(error)
		{
			return false;	
		}
	}
	
	return returnStr;
}


function validateRequired(value,errorTarget,elementParent)
{
	if(typeof(errorTarget) != 'undefined' && (typeof(value) == 'undefined' || ltrim(rtrim(value)) == ''))
	{
		createError(errorTarget,'The above field is required');
		return false;
	}
	else if(typeof(errorTarget) != 'undefined' && (typeof(value) != 'undefined' || ltrim(rtrim(value)) != ''))
	{
		createError(errorTarget,'');
		return true;
	}

	if(typeof(value) == 'undefined' || ltrim(rtrim(value)) == '')
	{
		return 'The above field is required';			
	}
	return '';		
}


function ltrim(value) 
{
	return value.replace(new RegExp("^[ ]+", "g"), "");
}
 
function rtrim(value) 
{
	return value.replace(new RegExp("[ ]+$", "g"), "");
}

function validateNumeric(value,errorTarget)
{
	var pattern = new RegExp('^([0-9]{1,})$');
	var valid;
	var returnStr = validateRequired(value);


	if(typeof(returnStr) != 'undefined' && returnStr == '')
	{	
		valid = pattern.test(value);
		returnStr = (valid ? '' : 'Please enter a numeric value in the above field');
	}	
	else valid = false;
	
	if(typeof(errorTarget) != 'undefined')
	{
		createError(errorTarget,returnStr);		
		return valid;
	}

	if(!valid)
	{
		return 'Please enter a numeric value in the above field';
	}	

	return '';
}

function validateEmail(value,errorTarget)
{
	var pattern = new RegExp('^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$');
	var valid;
	var returnStr = validateRequired(value);


	if(typeof(returnStr) != 'undefined' && returnStr == '')
	{	
		valid = pattern.test(value);
		returnStr = (valid ? '' : 'Please enter a valid e-mail address in the above field');
	}	
	else valid = false;
	
	if(typeof(errorTarget) != 'undefined')
	{
		createError(errorTarget,returnStr);	
		return valid;
	}
		
	if(!valid)
	{
		return 'Please enter a valid e-mail address in the above field';
	}	
	return '';
}

function validatePhone(value,errorTarget)
{
	var pattern = new RegExp('^(([0-9]{1})+[- ]+([0-9]{3})+[- ]+([0-9]{3})+[- ]+([0-9]{4}))$');
	var valid;
	var returnStr = validateRequired(value);


	if(typeof(returnStr) != 'undefined' && returnStr == '')
	{	
		valid = pattern.test(value);
		returnStr = (valid ? '' : 'Please enter a valid phone number in the above field');
	}	
	else valid = false;
	
	if(typeof(errorTarget) != 'undefined')
	{
		createError(errorTarget,returnStr);	
		return valid;
	}
		
	if(!valid)
	{
		return 'Please enter a valid phone number in the above field';
	}
	return '';
}

function validatePhoneNotRequired(value,errorTarget)
{
	var pattern = new RegExp('^(([0-9]{1})+[- ]+([0-9]{3})+[- ]+([0-9]{3})+[- ]+([0-9]{4}))$');
	var valid = true;
	var returnStr = '';

	if(typeof(value) != 'undefined' && value != '')
	{	
		valid = pattern.test(value);
		returnStr = (valid ? '' : 'Please enter a valid phone number in the above field');
	}	
	
	if(typeof(errorTarget) != 'undefined')
	{
		createError(errorTarget,returnStr);	
		return valid;
	}
		
	if(!valid)
	{
		return 'Please enter a valid phone number in the above field';
	}
	return '';
}

function validateUrlNotRequired(value,errorTarget)
{
	var pattern = new RegExp('^(http|ftp|https)+(://)+(.{1,})+\.+(.{2,})');
	var valid = true;
	var returnStr = '';

	if(typeof(value) != 'undefined' && value != '')
	{	
		valid = pattern.test(value);
		returnStr = (valid ? '' : 'Please enter a valid url in the above field');
	}	
	
	if(typeof(errorTarget) != 'undefined')
	{
		createError(errorTarget,returnStr);	
		return valid;
	}
		
	if(!valid)
	{
		return 'Please enter a valid url in the above field';
	}
	return '';
}


function validateCreditCard(value,errorTarget)
{
	var pattern = new RegExp('^(([0-9]{4})+[ ]+([0-9]{4})+[ ]+([0-9]{4})+[ ]+([0-9]{4}))$');
	var valid;
	var returnStr = validateRequired(value);


	if(typeof(value) != 'undefined' && value == '')
	{	
		valid = pattern.test(value);
		returnStr = (valid ? '' : 'Please enter a valid credit card number number in the above field');
	}	
	else valid = false;
	
	if(typeof(errorTarget) != 'undefined')
	{
		createError(errorTarget,returnStr);
		return valid;
	}
		
	if(!valid)
	{
		return 'Please enter a valid credit card number number in the above field';
	}	
	return '';
}

function validateExact(field,copyField,errorTarget)
{
	var returnStr;
	var valid;
	var returnStr = validateRequired(field.value);

	valid = (returnStr != '' ? false : true);

	if(valid && typeof(document.getElementById(copyField).value) != 'undefined' && document.getElementById(copyField).value == '')
	{
		valid = false;
		returnStr = 'The previous field must not be empty';
	}
	
	if(valid)
	{
		valid = (field.value == document.getElementById(copyField).value ? true : false);
		returnStr = (valid ? '' : 'This value does not match the previous value');
	}
	
	if(typeof(errorTarget) != 'undefined')
	{
		createError(errorTarget,returnStr);	
		return valid;
	}	
	
	return returnStr;
}	


function createError(container,error)
{	
	var element = document.getElementById(container);

	if(element.hasChildNodes())
	{
		if(error == '') element.innerHTML = '<!-- -->';	
		else element.innerHTML = '<p>' + error + '</p>';
	}
	else
	{	
		if(error == '') element.innerHTML = '<!-- -->';
		else element.innerHTML = '<p>' + error + '</p>';
	}	
}

