function validate(value,type,mask) {

	if(type.indexOf('*')<0) {
		if(!value || ereg('[ \n\r\t]*',value)) return true;
		if(ereg('00[-/.]00[-/.]0000',value)) return true;
		if(value=='0000-00-00') return true;
		if(ereg('[0]+',value)) return true;
	}
	type=type.replace('*','');
	type=type.toLowerCase();
	if(isNaN(mask)) var limit=0;
	else var limit=parseInt(mask);

	if(type=='int') {
		if(limit>0 || ereg('^[0-9]{1,3},[0-9]{1,3}$',mask)) {
			var expr='^[0-9]{'+mask+'}$';
		} else {
			var expr='^-?[0-9]+$';
		}
	 	if(!ereg(expr,value)) {
	 		return false;
	 	}
	}

	if(type=='float') {
		if(ereg('^[0-9]{1,3},[0-9]{1,3}$',mask)) {
			var parts=mask.split(',');
			var expr='^-?[0-9]{'+parts[0]+'}(\.[0-9]{'+parts[1]+'})?$';
		} else if(limit>0) {
			var expr='^-?[0-9]*(\.[0-9]{'+mask+'})?$';
		} else {
			var expr='^-?[0-9]*(\.[0-9]+)?$';
		}
		if(!ereg(expr,value) || value=='') {
			return false;
		}
	}

	if(type=='alphabetic') {
		if(!ereg('^[A-Za-z]+([ ][A-Za-z]+)*$',value)) {
			return false;
		}
		if(ereg('^[0-9]{1,3},[0-9]{1,3}$',mask)) {
			var parts=mask.split(',');
			if(value.length<parts[0] || value.length>parts[1]) {
				return false;
			}
		} else if(limit>0 && value.length!=mask) {
			return false;
		}
	}

	if(type=='alphanumeric') {
		if(!ereg('^[0-9A-Za-z]+([ ][0-9A-Za-z]+)*$',value)) {
			return false;
		}
		if(ereg('^[0-9]{1,3},[0-9]{1,3}$',mask)) {
			var parts=mask.split(',');
			if(value.length<parts[0] || value.length>parts[1]) {
				return false;
			}
		} else if(limit>0 && value.length!=mask) {
			return false;
		}
	}

	if(type=='measure') {
	 	if(!ereg('^-?[0-9]+(\.[0-9]+)?[ ]*[A-Za-z]+[-+/^]{0,2}[0-9A-Za-z]*$',value)) {
	 		return false;
	 	}
	}

	if(type=='date') {
		if(!ereg('^[0-9]{2}[-/.][0-9]{2}[-/.][0-9]{2,4}$',value)) return false;
		if(language=='english') {
			var month=parseInt(value.substr(0,2));
			var day=parseInt(value.substr(3,2));
			var year=parseInt(value.substr(6,4));
		} else {
			var day=parseInt(value.substr(0,2));
			var month=parseInt(value.substr(3,2));
			var year=parseInt(value.substr(6,4));
		}
		if(day<1 || day>31) return false;
		if(month<1 || month>12) return false;
		if(year<100 || year>9999) return false;
		var date_obj=new Date(year,month-1,day);
		if(day!=date_obj.getDate()) return false;
		if(month!=date_obj.getMonth()+1) return false;
		if(year!=date_obj.getFullYear()) return false;
	}

	if(type=='time') {
		if(value.length!=8) return false;
		var hour=parseInt(value.substr(0,2));
		var minute=parseInt(value.substr(3,2));
		var second=parseInt(value.substr(6,2));
		if(hour<0 || hour>23) return false;
		if(minute<0 || minute>59) return false;
		if(second<0 || second>59) return false;
		if(value.substr(2,1)!=':' || value.substr(5,1)!=':') return false;
	}

	if(type=='login') {
		if(ereg('^[0-9]{1,2},[0-9]{1,2}$',mask)) {
			var expr='^[A-Za-z][0-9A-Za-z_.-]{'+mask+'}$';
		} else if(limit>0) {
			var expr='^[A-Za-z][0-9A-Za-z_.-]{1,'+mask+'}$';
		} else {
			var expr='^[A-Za-z][0-9A-Za-z_.-]+$';
		}
	 	if(!ereg(expr,value)) {
	 		return false;
	 	}
	}

	if(type=='password') {
		if(!mask) mask='XXXX0000........................';
		var digits=0;
		var min=0;
		for(var loop=0;loop<mask.length;loop++) {
			if(ereg('[0-9]',mask.substr(loop,1))) digits++;
			if(ereg('[0-9A-Za-z]',mask.substr(loop,1))) min++;
		}
		var numbers=0;
		for(var loop=0;loop<value.length;loop++) {
			if(ereg('[0-9]',value.substr(loop,1))) numbers++;
		}
		if(numbers<digits) {
			return false;
		}
		if(value.length<min || value.length>mask.length) {
			return false;
		}
		var charcount=0;
		var digicount=0;
		for(var loop=0;loop<value.length;loop++) {
			if(loop>0 && value.charCodeAt(loop)==value.charCodeAt(loop-1)) {
				charcount++;
				if(charcount>2) return false;
			} else {
				charcount=0;
			}
			if(loop>0 && loop<value.length-1 && (value.charCodeAt(loop)==value.charCodeAt(loop-1)+1 || value.charCodeAt(loop)==value.charCodeAt(loop+1)-1 || value.charCodeAt(loop)==value.charCodeAt(loop-1)-1 || value.charCodeAt(loop)==value.charCodeAt(loop+1)+1)) {
				digicount++;
				if(digicount>3) return false;
			} else {
				digicount=0;
			}
		}
	}

	if(type=='name') {
		if(!ereg('^[ -~ªº´ÀÁÂÃÇÉÊÍÑÓÔÚÜàáâãçéêíñóôõúü¿¡¢£¥§©®±°¹²³¼½¾×÷]+$',value)) {
			return false;
		}
		if(mask && ereg('^[0-9]{1,3},[0-9]{1,3}$',mask)) {
			var parts=mask.split(',');
			if(value.length<parts[0] || value.length>parts[1]) {
				return false;
			}
		} else if(limit>0 && value.length!=mask) {
			return false;
		}
	}

	if(type=='address') {
		if(!ereg('^[&-),-/0-9A-Za-zªº´ÀÁÂÃÇÉÊÍÑÓÔÚÜàáâãçéêíñóôõúü ]+$',value)) {
			return false;
		}
		if(mask && ereg('^[0-9]{1,3},[0-9]{1,3}$',mask)) {
			var parts=mask.split(',');
			if(value.length<parts[0] || value.length>parts[1]) {
				return false;
			}
		} else if(limit>0 && value.length!=mask) {
			return false;
		}
	}

	if(type=='text') {
		if(!ereg('^[ -~ªº´ÀÁÂÃÇÉÊÍÑÓÔÚÜàáâãçéêíñóôõúü¿¡¢£¥§©®±°¹²³¼½¾×÷\t\n\r]+$',value)) {
			return false;
		}
		if(mask && ereg('^[0-9]{1,3},[0-9]{1,3}$',mask)) {
			var parts=mask.split(',');
			if(value.length<parts[0] || value.length>parts[1]) {
				return false;
			}
		} else if(limit>0 && value.length!=mask) {
			return false;
		}
	}

	if(type=='email') {
		value.toLowerCase();
		if(!ereg('^[_a-z0-9-]+(\.[_0-9a-z-]+)*@[0-9a-z-]+(\.[0-9a-z-]+)+$',value)) {
			return false;
		}
	}

	if(type=='url') {
		value.toLowerCase();
		if(!mask && !ereg('^([a-z]{3,5}[0-9]{0,2}://)?[0-9a-z]+([._-][0-9a-z]+)*\.[a-z]+[!-~]*$',value)) {
			return false;
		} else if(mask && !ereg('^[a-z]{3,5}[0-9]{0,2}://[0-9a-z]+([._-][0-9a-z]+)*\.[a-z]+[!-~]*$',value)) {
			return false;
		}
	}

	if(type=='nickname') {
		if(!ereg('^[]{\_|`^}0-9A-Za-z[]+[]{\_|`^}0-9A-Za-z[-]+$',value)) {
			return false;
		}
		if(ereg('^[0-9]{1,3},[0-9]{1,3}$',mask)) {
			var parts=mask.split(',');
			if(value.length<parts[0] || value.length>parts[1]) {
				return false;
			}
		} else if(limit>0 && value.length!=mask) {
			return false;
		} else if(value.length>30) {
			return false;
		}
	}

	if(type=='directory') {
		if(!ereg('^([A-Za-z]:)?([/\][0-9A-Za-z_-]+)+[/\]?$',value)) {
			return false;
		}
		if(value.indexOf('/')>-1 && value.indexOf('\\')>-1) {
			return false;
		}
		if(value.indexOf('/')>-1 && value.indexOf(':')>-1) {
			return false;
		}
		if(value.indexOf('//') || value.indexOf('\\\\')) {
			return false;
		}
	}

	if(type=='path') {
		if(!ereg('^([/\]?[0-9A-Za-z_.-]+)+[/\]?$',value)) {
			return false;
		}
	}

	if(type=='ip') {
		if(!ereg('^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$',value)) {
			return false;
		}
		var parts=value.split('.');
		if(parts[0]<0 || parts[0]>255) return false;
		if(parts[1]<0 || parts[1]>255) return false;
		if(parts[2]<0 || parts[2]>255) return false;
		if(parts[3]<0 || parts[3]>255) return false;
	}

	if(type=='domain') {
		value.toLowerCase();
		if(!mask) {
			if(!ereg('^[0-9a-z]+(-[0-9a-z]+)*$',value)) {
				return false;
			}
		} else {
			if(!ereg('^[0-9a-z]+(-[0-9a-z]+)*[.][0-9a-z]+(-[0-9a-z]+)*$',value)) {
				return false;
			}
		}
	}

	if(type=='fulldomain') {
		value.toLowerCase();
		if(!ereg('^[0-9a-z]+([.-][0-9a-z]+)*$',value)) {
			return false;
		}
	}

	if(type=='phone') {
		value=collapse(value);
		if(!ereg('^[(]?[0-9]+[)]?([/ -][0-9]+)*$',value)) {
			return false;
		}
	}

	if(type=='zip') {
		if(!ereg('^[0-9A-Za-z]+[- /]?[0-9A-Za-z]*$',value)) {
			return false;
		}
	}

	if(type=='cep') {
		if(!ereg('^[0-9]{5}-?[0-9]{3}$',value)) {
			return false;
		}
		if(value=='00000-000' || value=='00000000') {
			return false;
		}
	}

	if(type=='money') {
		if(!ereg('^-?[0-9]+([.,][0-9]{2})?$',value)) {
			return false;
		}
	}

	if(type=='creditcard') {
		if(!ereg('^[0-9]{4}[ -]?[0-9]{4}[ -]?[0-9]{4}[ -]?[0-9]{4}$',value)) {
			return false;
		}
	}

	if(type=='cnpj' || type=='cgc') {
		if(!ereg('^[0-9]{2}\.?[0-9]{3}\.?[0-9]{3}/?[0-9]{4}-?[0-9]{2}$',value)) {
			return false;
		}
		var cnpj=trim(value);
		cnpj=cnpj.replace(/[^0-9]/g,'');
		if(cnpj.length!=14) return false;
		if(cnpj=='00000000000000') return false;
		if(cnpj=='11111111111111') return false;
		if(cnpj=='22222222222222') return false;
		if(cnpj=='33333333333333') return false;
		if(cnpj=='44444444444444') return false;
		if(cnpj=='55555555555555') return false;
		if(cnpj=='66666666666666') return false;
		if(cnpj=='77777777777777') return false;
		if(cnpj=='88888888888888') return false;
		if(cnpj=='99999999999999') return false;
		var arr=cnpj.split('');
		var soma1=(arr[0]*5)+(arr[1]*4)+(arr[2]*3)+(arr[3]*2)+(arr[4]*9)+(arr[5]*8)+
		          (arr[6]*7)+(arr[7]*6)+(arr[8]*5)+(arr[9]*4)+(arr[10]*3)+(arr[11]*2);
		var resto=soma1%11;
		var digito1=(resto<2?0:11-resto);
		var soma2=(arr[0]*6)+(arr[1]*5)+(arr[2]*4)+(arr[3]*3)+(arr[4]*2)+(arr[5]*9)+(arr[6]*8)+
          		(arr[7]*7)+(arr[8]*6)+(arr[9]*5)+(arr[10]*4)+(arr[11]*3)+(arr[12]*2);
		var resto=soma2%11;
		var digito2=(resto<2?0:11-resto);
		if(arr[12]!=digito1 || arr[13]!=digito2) {
			return false;
		}
	}

	if(type=='cpf') {
		if(!ereg('^[0-9]{3}\.?[0-9]{3}\.?[0-9]{3}-?[0-9]{2}$',value)) {
			return false;
		}
		var cpf=trim(value);
		cpf=cpf.replace(/[^0-9]/g,'');
		if(cpf.length!=11) return false;
		if(cpf=='00000000000') return false;
		if(cpf=='11111111111') return false;
		if(cpf=='22222222222') return false;
		if(cpf=='33333333333') return false;
		if(cpf=='44444444444') return false;
		if(cpf=='55555555555') return false;
		if(cpf=='66666666666') return false;
		if(cpf=='77777777777') return false;
		if(cpf=='88888888888') return false;
		if(cpf=='99999999999') return false;
		if(cpf=='12345678909') return false;
		var arr=cpf.split('');
		var soma1=(arr[0]*10)+(arr[1]*9)+(arr[2]*8)+(arr[3]*7)+(arr[4]*6)+
					 		(arr[5]*5)+(arr[6]*4)+(arr[7]*3)+(arr[8]*2);
		var resto=soma1 % 11;
		var digito1=resto<2?0:11-resto;
		var soma2=(arr[0]*11)+(arr[1]*10)+(arr[2]*9)+(arr[3]*8)+(arr[4]*7)+
					 		(arr[5]*6)+(arr[6]*5)+(arr[7]*4)+(arr[8]*3)+(arr[9]*2);
		var resto=soma2 % 11;
		var digito2=resto<2?0:11-resto;
		if(arr[9]!=digito1 || arr[10]!=digito2) {
			return false;
		}
	}

	if(type=='rg') {
		if(!ereg('^[0-9A-Za-z]+\.?[0-9A-Za-z]+\.?[0-9A-Za-z]+-?[0-9A-Za-z]+(/[A-Za-z]{2})?$',value)) {
			return false;
		}
		if(!ereg('[0-9]+',value)) {
			return false;
		}
	}

	if(type=='insc') {
		if(!ereg('^[0-9]{1,3}([./-]?[0-9]{2,4})+$',value) && !/isento/i.test(value)) {
			return false;
		}
	}

	if(type=='placa') {
		if(!ereg('^[A-Za-z]{3}( |-)?[0-9]{4}$',value)) {
			return false;
		}
	}

	if(type=='code' || type=='ascii') {
		if(!ereg('^[ -¦]+$',value)) {
			return false;
		}
	}

	if(type=='mask') {
		if(mask && !ereg(mask,value)) {
			return false;
		}
	}

	return true;
}

function ereg(express,str) {
	if(!str) str='';
	str=str.toString();
	var bool=new RegExp(express,'gm').test(str);
	return bool;
}

function trim(str) {
	if(!str) return '';
	str=str.toString();
	//var reg_obj=new RegExp('^[ ]*(\.+)[ ]*$','gm');
	//var arr_str=reg_obj.exec(str);
	//if(arr_str!=null) return arr_str[1];
	//else return str;
	str=str.replace(/^[ ]+/m,'');
	str=str.replace(/[ ]+$/m,'');
	return str;
}

function collapse(str,chr) {
	if(!str) return '';
	if(typeof(chr)=='undefined' || !chr) {
		chr=' ';
	}
	str=str.toString();
	while(str.indexOf(chr+chr)>-1) {
		str=str.replace(chr+chr,chr);
	}
	return str;
}

function to_int(value) {
	value=to_float(value);
	value=parseInt(value);
	return value;
}

function to_float(value) {
	value=value.toString();
	value=value.replace(/[^0-9.,-]/gm,'');
	if(ereg('^-?[0-9.]*,[0-9]+$',value)) {
		value=value.replace('.','');
		value=value.replace(',','.');
	} else if(ereg('^-?[0-9,]*\.[0-9]+$',value)) {
		value=value.replace(',','');
	} else {
		value=parseFloat(value);
	}
	return value;
}

function to_digits(value) {
	return value.replace(/[^0-9]/gm,'');
}

function to_alphabetic(value) {
	return value.replace(/[^A-Za-z ]/gm,'');
}

function to_alphanumeric(value) {
	return value.replace(/[^0-9A-Za-z ]/gm,'');
}

function to_date(value) {
	return value.replace(/[^0-9./-]/gm,'');
}

function to_time(value) {
	return value.replace(/[^0-9:]/gm,'');
}

function to_login(value,initial) {
	if(typeof(initial)=='undefined' || !initial) {
		initial='w';
	}
	value=value.toString().toLowerCase();
	value=value.replace(/[^0-9a-z-]/gm,'');
	if(ereg('^[0-9]+[0-9a-z-]+$',value)) {
		value=initial+value;
	}
	return value;
}

function to_domain(value) {
	value=value.toString().toLowerCase();
	return value.replace(/[^0-9a-z.-]/gm,'');
}

function to_email(value) {
	value=value.toLowerCase();
	return value.replace(/[^0-9a-z@._-]/gm,'');
}

function to_path(value) {
	return value.replace(/[^0-9A-Za-z._/\\-]/gm,'');
}

function to_ip(value) {
	return value.replace(/[^0-9.]/gm,'');
}

function to_phone(value) {
	return value.replace(/[^0-9( )/-]/gm,'');
}

function to_cep(value) {
	return value.replace(/[^0-9-]/gm,'');
}

function to_creditcard(value) {
	return value.replace(/[^0-9 -]/gm,'');
}

function to_cnpj(value) {
	return value.replace(/[^0-9./-]/gm,'');
}

function to_cpf(value) {
	return value.replace(/[^0-9.-]/gm,'');
}

function to_placa(value) {
	value=value.toUpperCase();
	return value.replace(/[^0-9A-Z]/gm,'');
}

function to_ascii(value) {
	return value.replace(/[^ -¦]/gm,'');
}
