function isCheckGroup(element) {
	return (element.checked+""=="undefined" && element.length+""!="undefined");
}
function Validator(preMsg) {
	this.firstErrorField=null;
	if (preMsg!=null) {
		this.msg=preMsg;
	} else {
		this.msg="Há informações erradas ou incompletas no formulário. Erros:\n\n";
	} 
	this.validateName=validateName;
	this.validateLastName=validateLastName;
	this.validateSimpleTextField=validateSimpleTextField;
	this.validateVariableField=validateVariableField;
	this.validateNumberTextField=validateNumberTextField;
	this.validateUrlTextField=validateUrlTextField;
	this.validateEmailField=validateEmailField;
	this.validatePasswordEquals=validatePasswordEquals;
	this.validateComboField=validateSimpleTextField;
	this.validateCheckGroup=validateCheckGroup;
	this.validateSex=validateSex;
	this.doLog=doLog;
	this.processLog=processLog;
}

function validateSex(element,errorMsg) {
	if (element.value == 0) {
		this.doLog(element,errorMsg);
		return false;
	}
	return true;
}

function validateName(element,errorMsg) {
	if (element.value == "") {
		this.doLog(element,errorMsg);
		return false;
	}
	return true;
}

function validateLastName(element,errorMsg) {
	if (element.value == "") {
		this.doLog(element,errorMsg);
		return false;
	}
	return true;
}
function validateSimpleTextField(element,errorMsg) {
	if (element.value == "") {
		this.doLog(element,errorMsg);
		return false;
	}
	return true;
}

function validatePasswordEquals(element,confirmElement,errorMsg) {
	
	if (element.value != confirmElement.value) {
		this.doLog(element,errorMsg);
		return false;
	}
	return true;
	
}
function validateVariableField (element,errorMsg) {
	var str=element.value;
	if(str==""||!isNaN(str.charAt(0))) {
		this.doLog(element,errorMsg);
		return false;
	} 
	for (var i=0;i<str.length;i++) {
		if (!((str.charAt(i) >= 'a'&&str.charAt(i) <= 'z')||(str.charAt(i) >= 'A'&&str.charAt(i) <= 'Z') ||(str.charAt(i) >= '0'&&str.charAt(i) <= '9') ||(str.charAt(i)=='_'))) {
			this.doLog(element,errorMsg);
			return false;
		}
	}
	return true;
}
function validateNumberTextField(element,maxValue,minValue,errorMsg) {
	if (element.value!=""&&(isNaN(element.value)||(maxValue!=null&&element.value>maxValue)||(minValue!=null&&element.value<minValue))) {
		this.doLog(element,errorMsg);
		return false;
	}
	return true;
}
function validateUrlTextField(element,errorMsg) {
	var httpUrl=element.value;
	if (httpUrl=="") {
		this.doLog(element,errorMsg);
		return false;
	}
	if (httpUrl.length<"http://".length) {
		this.doLog(element,"URL inválida. Ela provavelmente não possui http://");
		return false;
	}
	if (httpUrl.substring(0,"http://".length)!="http://" ) {
		this.doLog(element,"URL inválida. Ela deve conter http://");
		return false;
	}
	if (httpUrl.length<"http://".length+1) {
		this.doLog(element,"URL inválida. Ela tem que conter algum dado além de http://");
		return false;
	} 
	var dotPos=httpUrl.indexOf(".");
	if (dotPos==-1) {
		this.doLog(element,"URL inválida. Ela tem que conter um ponto.");
		return false;
	} 
	if (!(dotPos>"http://".length&&dotPos<httpUrl.length-1)) {
		this.doLog(element,"URL inválida. O caminho não existe ou está incorreto.");
		return false;
	}
	return true;
}
function validateEmailField(element,errorMsg) {
	var email=element.value;
	var atPos=email.indexOf("@");
	var dotPos=email.indexOf(".");
	if(email!="") {
		if(atPos<1||dotPos<1||dotPos==email.length-1||atPos==email.length-1 ||email.length<6||email.indexOf(' ')!=-1 ||dotPos==atPos+1||dotPos==atPos-1||atPos!=email.lastIndexOf("@")||email.indexOf("..")!=-1) {
			this.doLog(element,errorMsg);
			return false;
		}
	} 
	return true;
}
function validateCheckGroup(element,errorMsg) {
	var ok=false;
	if(isCheckGroup(element)) {
		for (var i=0;i<element.length;i++) {
			if( element[i].checked) {
				ok=true;
			}
		}
	} else {
		ok=element.checked;
	}
	if(!ok) {
		this.doLog(element,errorMsg);
		return false;
	}
	return true;
}
function doLog(element,newMsg) {
	if(this.firstErrorField==null) {
		this.firstErrorField=element;
	} else {
		this.msg += "\n";
	}
	this.msg += " - " + newMsg;
}
function processLog() {
	if(this.firstErrorField!=null) {
		alert(this.msg);
		if(!isCheckGroup(this.firstErrorField)) {
			this.firstErrorField.focus();
			this.firstErrorField.select();
		} else {
			this.firstErrorField[0].focus()
		}
	}
	return (this.firstErrorField==null);
}
function strReplace(text,searchFor,replaceStr) {
	var re=new RegExp(searchFor,'gi');text=text.replace(re,replaceStr);return text;
}
function limitTextArea(mf,cf,m) {
	if(mf.value.length>m) {
		mf.value=mf.value.substring(0,m);
	} else { 
		if(cf!=null) {
			cf.value=m-mf.value.length;
		}
	}
}


function validateFormLogin(form) {
	
	var validator = new Validator();
	
	validator.validateName(form.name, "Você deve informar um nome");
	//validator.validateLastName(form.lastName, "Você deve informar um sobrenome");
	validator.validateSimpleTextField(form.login, "Você deve informar um login.");
	validator.validateSimpleTextField(form.email, "Você deve definir um e-mail.");
	validator.validateEmailField(form.email, "Você deve definir um e-mail válido.");
	validator.validateSimpleTextField(form.currentPassword, "Você deve definir sua senha atual.");
	if (form.hiddenPassword.value == 1) {
		validator.validateSimpleTextField(form.newPassword, "Você deve definir uma nova senha.");
		validator.validatePasswordEquals(form.newPassword, form.newConfirmPassword, "Senha e confirmação de senha devem ser iguais");
	}
	return validator.processLog()
}

function validateFormLogon(form) {
	var validator = new Validator();
	
	validator.validateName(form.name, "Você deve informar um nome");
	validator.validateSimpleTextField(form.login, "Você deve informar um login.");
	//validator.validateLastName(form.lastName, "Você deve informar um sobrenome");
	validator.validateSimpleTextField(form.email, "Você deve definir um e-mail.");
	validator.validateEmailField(form.email, "Você deve definir um e-mail válido.");
	validator.validateSimpleTextField(form.password, "Você deve definir uma senha.");
	validator.validatePasswordEquals(form.password, form.confirmPassword, "Senha e confirmação de senha devem ser iguais");
	
	return validator.processLog()
}
function validateFormList(form) {
	var validator = new Validator();
	validator.validateName(form.nameList, "Você deve informar um nome para lista.");
	validator.validateName(form.urls, "Você deve informar links para sua lista.");
	return validator.processLog()

}
function validateEmailBySite(form) {
	var validator = new Validator();
	validator.validateEmailField(form.email, "Você deve definir um e-mail válido.");
	return validator.processLog()
}


function validateFormChat(form) {
	var validator = new Validator();
	
	validator.validateName(form.name, "Você deve informar um nome");
	validator.validateSimpleTextField(form.email, "Você deve definir um e-mail.");
	validator.validateEmailField(form.email, "Você deve definir um e-mail válido.");
	validator.validateSimpleTextField(form.password, "Você deve definir uma senha.");
	validator.validatePasswordEquals(form.password, form.passwordRepeat, "Senha e confirmação de senha devem ser iguais");
	
	return validator.processLog()
}


function validateFrameChat(form) {
	var validator = new Validator();
	
	validator.validateSimpleTextField(form.email, "Você deve definir um e-mail.");
	validator.validateEmailField(form.email, "Você deve definir um e-mail válido.");
	validator.validateSimpleTextField(form.password, "Você deve definir uma senha.");
	
	return validator.processLog()
}

