var _FORM_ERROR = false;

function isNumeric(value) {
	var objRegExp  =  /(^-?\d\d*\.\d*$)|(^-?\d\d*$)|(^-?\.\d\d*$)/;
	return objRegExp.test(value);		
}

function isInteger(value){
	if (isNumeric(value)){
		return parseInt(value,10)
	}
	return false;
}

function isFloat(value) {
	return isNumeric(value);
}

function isEmail(value) {
	var emailRegExp = /^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$/i;		
	return emailRegExp.test(value);		 
}

function isZipCode(value) {
	var objRegExp  =  /^\d{5}([\-]\d{4})?$/;
	return objRegExp.test(value);
}

function isDate(value) {
	var dateComponents = getDateComponents(value);
	var year = dateComponents["year"];
	var month = dateComponents["month"] - 1;
	var day = dateComponents["day"];
	var dteDate;
	dteDate=new Date(year,month,day);
	return ((day==dteDate.getDate()) && (month==dteDate.getMonth()) && (year==dteDate.getFullYear()));
}

function isPhone(value) {
	var objRegExp  =  /^[0-9()\ -]+$/;
	return objRegExp.test(value);
}

function isRequired(value) {
	if (value==null || value=="" ) return false;
	return true;
}

function fieldValidator(field, validationCond, message) {
	if(_FORM_ERROR) return ;
	if(!validationCond) {
		_FORM_ERROR = true;
		if(message) alert(message);
		field.focus();
	}
}

function validateForm(form, rules) {
	_FORM_ERROR = false;
	var valid = true;
	for(var field in rules) {
		var f = $(field);
		if(!f) continue;
		var fieldValue = f.value;
		if(f.style.display=="none") continue;
		if(typeof(rules[field]["required"]) == 'undefined' && !isRequired(fieldValue)) continue;
		for(var validationRule in rules[field]) {			
			valid = true;
			switch(validationRule) {
				case 'int':	
						valid = isInteger(fieldValue);
					break;
				case 'float':
						valid = isFloat(fieldValue);
					break;
				case 'email':
						valid = isEmail(fieldValue);
					break;
				case 'phone':
						valid = isPhone(fieldValue);
					break;
				case 'zip':
						valid = isZipCode(fieldValue);
					break;
				case 'date':
						valid = isDate(fieldValue);
					break;
				case 'required':
						valid = isRequired(fieldValue);
					break;
			}
			if(!valid) {
				fieldValidator(f, valid, rules[field][validationRule]["message"]);
				return false;
			}
		}
	}
	return true;
}
