var cleanValidator = {
	init: function (settings) {
		this.settings = settings;
		this.form = document.getElementById(this.settings["formId"]);
		formInputs = this.form.getElementsByTagName("input");
		
		// change color of inputs on focus
		for(i=0;i<formInputs.length;i++)
		{
			if(formInputs[i].getAttribute("type") != "submit") {
				input = formInputs[i];
				input.style.background = settings["inputColors"][0];
				input.onblur = function () {
					this.style.background = settings["inputColors"][0];
				}
				input.onfocus = function () {
					this.style.background = settings["inputColors"][1];
				}
			}
		};
		validate_form = function () {
              var terms_accepted = document.forms[0].terms.checked;
              
             if (!document.forms[0].terms.value) {
                 error = "You must accept the terms and conditions before you register!";
                 cleanValidator.printError(error);
                 return false;
              }   
             
             var re = /^(9?[2|3|4|6|7|8|9]\d{8})$/ 
              if (!re.test(trim(document.forms[0].mobile_no.value))) {
                 error = "Invalid Mobile Number!";
                 cleanValidator.printError(error);
                 return false;
              }   
          
             if (trim(document.forms[0].password.value) !== trim(document.forms[0].password1.value)) {
                   error = "Repeat Password does not match!";
                   cleanValidator.printError(error);
                   return false;
             }  
             
             if (!terms_accepted){
                error = "You must agree terms and conditions!";
                cleanValidator.printError(error);
                return false;
             }
             
			error = cleanValidator.validate();
			if(error.length < 1) {
				return true;
			} else {
				cleanValidator.printError(error);
				return false;
			}
		};
	},
	validate: function () {
		error = '';
		validationTypes = new Array("isRequired", "isEmail", "isNumeric", "isAlpha", "isPassword");
		for(n=0; n<validationTypes.length; n++) {
			var x = this.settings[validationTypes[n]];
			if(x != null) {
				for(i=0; i<x.length; i++) 
				{
					inputField = document.getElementById(x[i]);
					switch (validationTypes[n]) {
						case "isRequired" :
						    valid = !isRequired(trim(inputField.value));
						    errorMsg = "is a required field.";
						    break;
						
                        case "isEmail" :
						    valid = isEmail(trim(inputField.value));
						    errorMsg = "is an invalid email address.";
						    break;
						
                        case "isNumeric" :
						    valid = isNumeric(trim(inputField.value));
						    errorMsg = "can only be a number.";
						    break;
                        
                        case "isAlpha" :
                            valid = isAlpha(trim(inputField.value));
                            errorMsg = "Should be Alphabetical Characters only.";
                            break;
                     
                        case "isPassword" :
                            valid = isPassword(trim(inputField.value));
                            errorMsg = "Valid Password Min. 6 Chars and Max 8 chars with A-Z, a-z, 0-9 only.\n No special Characters allowed.";
                            break;   
                     
					}
					if(!valid) {
						error += x[i]+" "+errorMsg+"\n";
						inputField.style.background = this.settings["errorColors"][0];
						inputField.style.border = "1px solid "+this.settings["errorColors"][1];
					} else {
						inputField.style.background = this.settings["inputColors"][0];
						inputField.style.border = '1px solid';
					}
				}
			}
		}
		return error;
	},
	printError: function (error) {
		alert(error);
	}
};

// returns true if the string is not empty
function isRequired(str){
	return (str == null) || (str.length == 0);
}

// returns true if the string is a valid email
function isEmail(str){
	if(isRequired(str)) return false;
	var re = /^[^\s()<>@,;:\/]+@\w[\w\.-]+\.[a-z]{2,}$/i
	return re.test(str);
}
// returns true if the string only contains characters 0-9 and is not null
function isNumeric(str){
	if(isRequired(str)) return false;
	var re = /[\D]/g
	if (re.test(str)) return false;
	return true;
}

function isAlpha(str){
    if(isRequired(str)) return false;
    var re = /^[A-Za-z]{3,}$/i  
    return re.test(str);
    
} 

function isPassword(str){
    if(isRequired(str)) return false;
    var re = /[A-Z|a-z|0-9]{6,9}/i;
    return (re.test(str)); 
}  
