function validateForm(fields, form) {
	erro = '';
	fldNP = ''; // Nao preenchidos
	fldNE = ''; // Não definidos
	fldIN = ''; // Preenchidos incorretamente
	fldQty = fields.length;
	
	cleanHighlight(form);
	for (i = 0; i < fldQty; i++) {
		field = document.getElementById(fields[i][0]);
		if (!field) {
			fldNE += '   - ' + fields[i][2] + '\n';
		} else {
			fldValue = trim(field.value);
			fldType  = fields[i][1];
			fldDescription = fields[i][2];
			
			// Campo de Texto
			if (fldType == 'text') {
				if (fldValue.length == 0) {
					fldNP += '   - ' + fldDescription + '\n';
					highlightField(fields[i][0]);
				}
				
				
			// Campo de Radio
			} else if (fldType == 'radio') {
				if (field.type != 'radio' && field.type != 'checkbox') {
					fldNE += '   - ' + fldDescription + '\n';
				} else {
					if (checkRadioButton(fields[i][0], form) == null) {
						fldNP += '   - ' + fldDescription + '\n';
						highlightField(fields[i][0]);
					} 
				}
				
				
			// Campo de Checkbox
			} else if (fldType == 'check') {
				if (field.type != 'checkbox') {
					fldNE += '   - ' + fldDescription + '\n';
				} else {
					if (!field.checked) {
						fldNP += '   - ' + fldDescription + '\n';
						highlightField(fields[i][0]);
					} 
				}
				
			// Campo de Senha
			} else if (fldType == 'pass') {
				if (fldValue.length == 0) {
					fldNP += '   - ' + fldDescription + '\n';
					highlightField(fields[i][0]);
				} else if (fldValue.length < 6) {
					fldIN += '   - ' + fldDescription + ' (mínimo 6 caracteres)\n';
					highlightField(fields[i][0]);
				} else {
					fldCheck = fields[i][0] + '2';
					fldCheck = document.getElementById(fldCheck);
					if (fldCheck) {
						if (fldCheck.value != '' && fldCheck.value != fldValue) {
							fldIN += '   - As duas senhas digitadas não são iguais\n';
							highlightField(fldCheck);
						}
					}
				}
				
				
			// Campo de Usuario
			} else if (fldType == 'user') {
				if (fldValue.length == 0) {
					fldNP += '   - ' + fldDescription + '\n';
					highlightField(fields[i][0]);
				} else if (fldValue.length < 6) {
					fldIN += '   - ' + fldDescription + ' (mínimo 6 caracteres)\n';
					highlightField(fields[i][0]);
				}
				
				
			// Campo de CPF
			} else if (fldType == 'cpf') {
				if (fldValue.length == 0) {
					fldNP += '   - ' + fldDescription + '\n';
					highlightField(fields[i][0]);
				} else if (!checkCPF(fldValue)) {
					fldIN += '   - ' + fldDescription + '\n';
					highlightField(fields[i][0]);
				}
				
				
			// Campo de CNPJ
			} else if (fldType == 'cnpj') {
				if (fldValue.length == 0) {
					fldNP += '   - ' + fldDescription + '\n';
					highlightField(fields[i][0]);
				} else if (!checkCNPJ(fldValue)) {
					fldIN += '   - ' + fldDescription + '\n';
					highlightField(fields[i][0]);
				}
				
				
			// Campo de CEP
			} else if (fldType == 'cep') {
				if (fldValue.length == 0) {
					fldNP += '   - ' + fldDescription + '\n';
					highlightField(fields[i][0]);
				} else if (!checkCEP(fldValue)) {
					fldIN += '   - ' + fldDescription + ' (8 caracteres numéricos)\n';
					highlightField(fields[i][0]);
				}
			
			// Campo de Email
			} else if (fldType == 'email') {
				if (fldValue.length == 0) {
					fldNP += '   - ' + fldDescription + '\n';
					highlightField(fields[i][0]);
				} else {
					if (!checkEmail(field.value)) {
						fldIN += '   - ' + fldDescription + '\n';
						highlightField(fields[i][0]);
					} else {
						fldCheck = fields[i][0] + '2';
						fldCheck = document.getElementById(fldCheck);
						if (fldCheck) {
							if (fldCheck.value != '' && fldCheck.value != fldValue) {
								fldIN += '   - Os dois emails digitados não são iguais\n';
								highlightField(fldCheck);
							}
						}
					}
				}
				
			// Campo de Data
			} else if (fldType == 'data') {
				if (fldValue.length == 0) {
					fldNP += '   - ' + fldDescription + '\n';
					highlightField(fields[i][0]);
				} else if (!checkDate(fldValue)) {
					fldIN += '   - ' + fldDescription + ' (dd/mm/yyyy)\n';
					highlightField(fields[i][0]);
				}
				
			// Campo de Hora
			} else if (fldType == 'hora') {
				if (fldValue.length == 0) {
					fldNP += '   - ' + fldDescription + '\n';
					highlightField(fields[i][0]);
				} else if (!checkTime(fldValue)) {
					fldIN += '   - ' + fldDescription + ' (hh:mm)\n';
					highlightField(fields[i][0]);
				}
			}
		}
	}
		
	if (fldNE != '') {
		erro += 'Campo(s) não encontrado(s)\n\n';
		erro += fldNE + '\n';
	}
	if (fldNP != '') {
		erro += 'Campo(s) não preenchido(s)\n\n';
		erro += fldNP + '\n';
	}
	if (fldIN != '') {
		erro += 'Campo(s) invalido(s)\n\n';
		erro += fldIN;
	}
	
	return erro;
}

function highlightField(field, color) {
	if (!color && color != '') {
		color = 'FFBCCF';
	}
	
	if (typeof field == 'string') {
		field = document.getElementById(field);
	}
	
	if (field) {
		campo = field.style;
		campo.backgroundColor = color;
	}
}

function cleanHighlight(form) {
	if (form) {
		for (i=0;i<form.elements.length;i++) {
			highlightField(form.elements[i], '');
		}
	}
}

function setFocus(frmElement)
{
	if (typeof frmElement == 'string') {
		frmElement = document.getElementById(frmElement);
	}
	
	if (frmElement) {
		frmElement.focus();
	}
}

/**
 *	Set one value in combo box as the selected value
 */
function setSelect(listElement, listValue)
{
	if (typeof listElement == 'string') {
		listElement = document.getElementById(listElement);
	}
	
	for (i=0; i < listElement.options.length; i++) {
		if (listElement.options[i].value == listValue)	{
			listElement.selectedIndex = i;
		}
	}	
}

function cleanSelect(id) {
	field = document.getElementById(id);
	if (field) {
		for (i = field.length; i>= 0; i--) {
			field.options[i] = null;
		}
	}
}

function addSelectOption(id, option) {
	field = document.getElementById(id);
	if (field) {
		field.options[field.length] = option;
	}
}

function setCheckbox(checkElement, checked) {
	if (typeof checkElement == 'string') {
		checkElement = document.getElementById(checkElement);
	}
	
	if (checkElement) {
		checkElement.checked = checked;
	}
}

function setRadio(form, group, value) {
    if (typeof group == 'string') group = form.elements[group];
    if (group.length) {
	    for (var i = 0, n = group.length; i < n; ++i) {
	        if (group[i].value == value) {
	        	group[i].checked = 'checked';
	        }
	    }
    } else {
    	if (group.value == value) {
    		group.checked = 'checked';
    	}
    }
}

function checkRadioButton(group, form) {
    if (typeof group == 'string') group = form.elements[group];
    for (var i = 0, n = group.length; i < n; ++i)
        if (group[i].checked) return group[i].value;
    return null;
}

/*
 *	Check if a form element is empty.
 *	If it is display an alert box and focus
 *	on the element
 */
function isEmpty(formElement, message) {
	_isEmpty = false;
	if (formElement) {
		formElement.value = trim(formElement.value);
		
		if (formElement.value == '') {
			_isEmpty = true;
			alert(message);
			formElement.focus();
		}

	}

	return _isEmpty;

}

function checkCPF(s)
{
	var i;
	s = limpa_string(s);
	var c = s.substr(0,9);
	var dv = s.substr(9,2);
	var d1 = 0;
	for (i = 0; i < 9; i++)
	{
		d1 += c.charAt(i)*(10-i);
	}
        if (d1 == 0) return false;
	d1 = 11 - (d1 % 11);
	if (d1 > 9) d1 = 0;
	if (dv.charAt(0) != d1)
	{
		return false;
	}

	d1 *= 2;
	for (i = 0; i < 9; i++)
	{
		d1 += c.charAt(i)*(11-i);
	}
	d1 = 11 - (d1 % 11);
	if (d1 > 9) d1 = 0;
	if (dv.charAt(1) != d1)
	{
		return false;
	}
        return true;
}

function checkCNPJ(s)
{
	var i;
	s = limpa_string(s);
	var c = s.substr(0,12);
	var dv = s.substr(12,2);
	var d1 = 0;
	for (i = 0; i < 12; i++)
	{
		d1 += c.charAt(11-i)*(2+(i % 8));
	}
        if (d1 == 0) return false;
        d1 = 11 - (d1 % 11);
	if (d1 > 9) d1 = 0;
	if (dv.charAt(0) != d1)
	{
		return false;
	}

	d1 *= 2;
	for (i = 0; i < 12; i++)
	{
		d1 += c.charAt(11-i)*(2+((i+1) % 8));
	}
	d1 = 11 - (d1 % 11);
	if (d1 > 9) d1 = 0;
	if (dv.charAt(1) != d1)
	{
		return false;
	}
        return true;
}

function checkCEP(cep) {
     s = limpa_string(cep);
     if (s.length != 8) {
        return false;
     }
     return true;
}
 
function checkEmail(email)
{
	var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	if (!filter.test(email)) {
		return false;
	} else {
		return true;
	}
}

function checkDate(strDate) {
	 // regular expression to match required date format 
	 re = /^(\d{1,2})\/(\d{1,2})\/(\d{4})$/; 
	 
	 if(strDate != '') { 
	 	if(regs = strDate.match(re)) { 
	 		if(regs[1] < 1 || regs[1] > 31) { 
	 			return false;
	 		} else if(regs[2] < 1 || regs[2] > 12) { 
	 			return false;
//	 		} else if(regs[3] < minYear || regs[3] > maxYear) { 
//	 			return false;
	 		} 
	 	} else { 
 			return false;
	 	} 
	 } else { 
		return false
	 } 
	 
	 return true;
}

function checkTime(strTime) {
	// regular expression to match required time format 
	re = /^(\d{1,2}):(\d{2})(:00)?$/; 
	if(strTime != '') { 
		if(regs = strTime.match(re)) { 
			if(regs[1] > 23) { 
				return false;
			} 
			
			if(regs[2] > 59) { 
				return false;
			}
			
			if(regs[3]) {
				if (regs[3] > 59) {
					return false;
				}
			}
		} else { 
			return false;
		} 
	} else {
		return false;
	}
	
	return true;
}

function editItem(itemId)
{
	window.location.href = 'index.php?view=edit&id=' + itemId;
	
	return false;
}

function deleteItem(itemId, form)
{
	if (confirm('Remover este item?')) {
		form['hidId'].value = itemId;
		submitFormAction(form, 'delete');
	}
	
	return false;
}

function submitFormAction(form, action)
{
	form['action'].value = action;
	form.submit();
}