function $(anid)
{
	return document.getElementById(anid);
}

function validateOptions(form, field, value)
{
	for(i=0; i<field.length; i++)
		if(field[i].checked)
			return true;
	return false;
}

function validateSelect(form, field, value)
{
	return value != "";
}

function validateCardExpDate(form, field, value)
{
	if(form.CCExpireYear.value == new Date().getFullYear())
		if(form.CCExpireMonth.value < new Date().getMonth()+1)
			return false;
	return true;
}

function validatePositiveInteger(form, field, value)
{
	if(parseInt(value) > 0)
		return true;
	return false;
}

function validateMembershipCodeBoxes(form, field, value)
{
	if(form.MembershipCode1.value.length < 3 || form.MembershipCode2.value.length < 3 || form.MembershipCode3.value.length < 4)
		return false;
	return true;
}

function checkField(field)
{
	var validate = field.getAttribute('validate');
	var emsg = field.getAttribute('message');
	var alsoreq = field.getAttribute('alsoreq');
	
	if(validate)
		validate = validate.toLowerCase();
	
	if(!emsg)
		emsg = "Error in " + field.getAttribute('name') + ".";
	
	if(alsoreq)
	{
		alsoreqs = alsoreq.split(",");
		for(i=0; i<alsoreqs.length; i++)
			if(!validateRequired($(alsoreqs[i]).value))
				return emsg;
	}
	
	if( field.getAttribute('required') && !validateRequired(field.value)        ||
	   	validate == "date"             && !validateDate(field.value)            ||
		validate == "positiveint"      && !validatePositiveInteger(field.value) ||
		validate == "range"            && !validateRange(field)                 ||
		validate == "creditcard"       && !validateCreditCard(field.value)      ||
		validate == "email"            && !validateEmail(field.value)           ||
		validate == "validateselect"   && !validateSelect(field)                ||
		validate == "radio"            && !validateRadioButtons(field)
	)
		return emsg;
	
	return "";
}

function validateFunction(funct, form, field)
{
	var emsg = field.getAttribute('message');
	
	if(!funct(form, field, field.value))
		return emsg;
	return "";
}

function checkFieldArray(field)
{
	var validate = field[0].getAttribute('validate');
	var emsg = field[0].getAttribute('message');
	var alsoreq = field[0].getAttribute('alsoreq');
	
	if(validate)
		validate = validate.toLowerCase();
	
	if(!emsg)
		emsg = "Error in " + field[0].getAttribute('name') + ".";
	
	if(alsoreq)
	{
		alsoreqs = alsoreq.split(",");
		for(i=0; i<alsoreqs.length; i++)
			if(!validateRequired($(alsoreqs[i]).value))
				return emsg;
	}
	
	if( !validateRadioButtons(field)
	)
		return emsg;
	
	return "";
}

function addErrorMessage(currentMsg, newMsg)
{
	return currentMsg + (validateRequired(newMsg)?("|:|" + newMsg):"");
}

function formatErrorMessage(msg)
{
	return msg.replace(/^\|:\|/, "").replace(/\|:\|/g, "\n");
}

function showErrorMessage(msg)
{
	alert(formatErrorMessage(msg));
}

function validateSelect(field)
{
	if(field.selectedIndex == -1)
		return false;
	if(field.options)
		return field.options[field.selectedIndex].value != "";
	return true;
}

function validateRadioButtons(field)
{
	if(!field[0])
		return true;
	
	for(var i=0; i<field.length; i++)
		if(field[i].checked)
			return true;
	
	return false;
}

function validateRange(field)
{
	if(!validateInteger(field.value))
		return false;
	
	var val = parseInt(field.value);
	var minval = field.getAttribute('minval');
	var maxval = field.getAttribute('maxval');
	
	return (!minval || val >= minval) && (!maxval || val <= maxval);
}

function validateRequired(value)
{
	var reg = /[^\s]+/;
	
	return reg.test(value);
}

function validateValue(regex, value)
{
	return regex.test(value);
}

function validatePrice(value)
{
	var reg = /^(\d*\.\d\d|\d*)$/;
	
	return validateValue(reg, value);
}

function validateDate(value)
{
	var reg = /^(\d\d[\/]\d\d[\/]\d\d\d\d)?$/;
	
	return validateValue(reg, value);
}

function validateInteger(value)
{
	var reg = /^[-+]?\d*$/;
	
	return validateValue(reg, value);
}

function validatePositiveInteger(value)
{
	var reg = /^\+?\d*$/;
	
	return validateValue(reg, value);
}

function validateCreditCard(value)
{
	var reg = /^\d{16}$/;
	
	return validateValue(reg, value);
}

function validateEmail(value)
{
	var reg = /^[^@]+@[^@]+\.[^@]{2,3}$/;
	
	return validateValue(reg, value);
}



