/**
 * @author turnec3
 */

var formValidation = function(){
	var api = {};
	
	api.validators = [];
	
	api.validators['name'] = function(data){
		if(data.length < 2 || data.length > 64 || data.search(/[0-9]/) != -1){
			return false;
		}
		
		return true;
	};
	
	api.validators['text'] = function(data){
		if(data.length < 2 || data.length > 64){
			return false;
		}
		
		return true;
	};
	
	api.validators['address'] = function(data){
		if(data.length < 5 || data.length > 100){
			return false;
		}
		
		return true;
	};
	
	api.validators['city'] = function(data){
		if(data.length < 2 || data.length > 100){
			return false;
		}
		
		return true;
	};
	
	api.validators['province'] = function(data){
		if(data.length < 2 || data.length > 26){
			return false;
		}
		
		return true;
	};
	
	api.validators['postalCode'] = function(data){
		if(data.length < 6 || data.length > 7){
			return false;
		}
		
		return true;
	};
	
	api.validators['phoneNumber'] = function(data){
		if(data.length < 7 || data.length > 16){
			return false;
		}
		
		return true;
	};
	
	api.validators['extensionNumber'] = function(data){
		if(data.length < 1 || data.length > 6){
			return false;
		}
		
		return true;
	};
	
	api.validators['emailAddress'] = function(data){
		if(data.length < 8 || data.length > 50){
			return false;
		}
		
		return true;
	};
	
	api.validators['websiteAddress'] = function(data){
		if(data.length < 5 || data.length > 50){
			return false;
		}
		
		return true;
	};
	
	api.validators['charitableRegistrationNumber'] = function(data){
		if(data.length < 1 || data.length > 24){
			return false;
		}
		
		return true;
	};
	
	api.validators['textarea'] = function(data){
		if(data.length < 10){
			return false;
		}
		
		return true;
	};
	
	api.validators['dropdown'] = function(data){
		if(data == "Select one:" || data == "En choisir un :"){
			return false;
		}
		
		return true;
	};
	
	api.validators['file'] = function(data){
		if(data.length < 3 || data.length > 256 || data.search(/(\.(exe|bat|vbs|com))$/i) != -1){
			return false;
		}
		return true;
	};

	api.cleanData = function(data){
		data = data.replace(/</g, '&lt;');
		data = data.replace(/>/g, '&gt;');	
		
		return data;	
	};
	
	api.validate = function(data, validator){
		return api.validators[validator](data);
	};
	
	api.bindElement = function(bindElement, validator, hilite){
		jqElement = $(bindElement);
		if (hilite != false) {
			jqElement.siblings(':first').addClass('invalid');
		}
		jqElement.bind('blur keyup change', function(){
			jqElement = $(this);
				if (api.validate(jqElement.val(), validator) || (hilite == false && jqElement.val().length == 0)) {
					jqElement.siblings(':first').removeClass('invalid');
				}
				else {
					jqElement.siblings(':first').addClass('invalid');
				}
		})
		
		jqElement.blur();
	};
		
	return api;
}();
