// 2009 c.rl
// formVa thing by Mateusz Cyrankiewicz

// MAIN

// init
function validate(form){
	
	var lines = form.getElements('.line');
	
	//check classes
	lines.each(function(element){
		
		//check text || select
		if(element.getElement('input')){
		
			// check if required
			if(element.match('.required')){
				element.getElement('input').addEvents({
					'keyup': function(){vaRequired(element)}
				});
			}
			
			// check min
			if(element.match('.min-4')){
				element.getElement('input').addEvents({
					'keyup': function(){vaMin(element, 4)}
				});
			}
			
			// check if email
			if(element.match('.email')){
				element.getElement('input').addEvents({
					'keyup': function(){vaEmail(element)}
				});
			}
			
			//check if date
			if(element.match('.date')){
				var fields = element.getElements('.field');
				fields.each(function(el){
					var range;
					if(el.match('.days')){
						range = [1, 31];
					} else if(el.match('.months')){
						range = [1, 12];
					} else if(el.match('.years')){
						var d = new Date();
						var cy = d.getFullYear();
						range = [1900, cy-12];
					}
					
					el.getElement('input').addEvents({
						'keyup': function(){vaNum(el, range)}
					});
				});
			}
			
			//check if number
			
			//check if www
			
		} else if(element.getElement('select')){
			if(element.match('.required')){
				element.getElement('select').addEvents({
					'click': function(){vaRequiredSelect(element)}
				});
			}
		}

	});
	
}

//submit btn pressed
function checkForm(form){
	
	var lines = form.getElements('.line');
	var wecool; // valid or not, boolean
	
	//check classes
	lines.each(function(element){
						
		//check text || select
		if(element.getElement('input')){
		
			if(wecool != false){
				
				// check if required
				if(element.match('.required')){
					wecool = vaRequired(element)
				}
				
				// check min
				if(element.match('.min-4') && wecool){
					wecool = vaMin(element, 4)
				}
				
				// check if email
				if(element.match('.email') && wecool){
					wecool = vaEmail(element)
				}
				
				//check if date
				if(element.match('.date') && wecool){
					var fields = element.getElements('.field');
					fields.each(function(el){
						var range;
						if(el.match('.days')){
							range = [1, 31];
						} else if(el.match('.months')){
							range = [1, 12];
						} else if(el.match('.years')){
							var d = new Date();
							var cy = d.getFullYear();
							range = [1900, cy-12];
						}
						wecool = vaNum(el, range);
					});
				}
				
				//check if number
				
				//check if www
			
			}
		
		} else if(element.getElement('select')){
			if(wecool != false){
				if(element.match('.required')){
					wecool = vaRequiredSelect(element);
				}
			}
		}
	});
	
	return wecool;
	
}

function vaRequired(element){
	var val = element.getElement('input').value;
	if(val.length == 0){
		inva(element);
		return false;
	} else {
		va(element);
		return true;
	}
}

function vaRequiredSelect(element){
	var val = element.getElement('select').selectedIndex;
	if(val == 0){
		inva(element);
		return false;
	} else {
		va(element);
		return true;
	}
}

function vaMin(element, min){
	var val = element.getElement('input').value;
	if(val.length < min){
		inva(element);
		return false;
	} else {
		va(element);
		return true;
	}
}

function vaEmail(element){
	var val = element.getElement('input').value;
	var emailExp = /^[\w\-\.\+]+\@[a-zA-Z0-9\.\-]+\.[a-zA-z0-9]{2,4}$/;
	if(!val.match(emailExp)){
		inva(element);
		return false;
	} else {
		va(element);
		return true;
	}
}

function vaNum(element, range){
	var val = element.getElement('input').value.toInt();
	if(isNaN(val) || val < range[0] || val > range[1]){
		inva(element);
		return false;
	} else {
		va(element);
		return true;
	}
}

// mark invalid
function inva(element){
	if(element.getElement('.field')){
		element.getElement('.field').setStyle('border-color', '#f00');
	} else {
		element.setStyle('border-color', '#f00');
	}
}

//mark valid
function va(element){
	if(element.getElement('.field')){
		element.getElement('.field').setStyle('border-color', '#333333');
	} else {
		element.setStyle('border-color', '#333333');
	}
}
