	////////////////////////  --> DMKVALIDATOR <-- ///////////////////////////////
	//																			//
	//          V. 1.5 - Autores: Denis Carneiro denis@agenciadmk.com.br        //
	//					 		  Henrique de Moraes Vieira                     //
	//					 		  Paulo Roberto Augusto de Jesus                //
	//																			//
	//							Criado em 15/06/2006							//
	//																			//
	//////////////////////////////////////////////////////////////////////////////
	//
	//
	////////////////////////////////////  DESCRIÇÃO  ////////////////////////////
	//																		   //
	// Biblioteca para varredura e validação automática de campos de formulá-  //
	// rios.																   //
	// 																		   //
	/////////////////////////////////////////////////////////////////////////////
	
	//////////////////////////// FORMA DE UTILIZAÇÃO ////////////////////////////
	//																		   //
	//	Existem dois tipos de vallidação: a tipagem do campo e a sua           //
	//	obrigatoriedade.													   //
	//	Para validar a tipagem, deve-se colocar no objeto do formulário 	   //
	//	o atributo tipo="", sendo que entre as aspas deve-se colocar a tipagem //
	//	conforme a listagem abaixo:											   //
	//																		   //
	// 1- 	e-mail 		----> valida e-mail.								   //
	// 2- 	inteiro		----> Aceita somente valores inteiros positivos ou 	   //
	//                        negativos.									   //
	// 3- 	decimal 	----> Aceita números decimais, positivos ou 	       //
	//                        negativos, com pelo menos 1 casa decimal.		   //
	// 4- 	moeda 		----> Aceita números decimais, positivos ou 	       //
	//                        negativos, com pelo menos 1 casa decimal.		   //
	// 5- 	cep 		----> valida cep.                                      //
	// 6- 	data 		----> valida data no formato brasileiro                //
	// 7- 	hora 		----> valida hora no formato 12 ou 24 horas 	 	   //
	// 8- 	cpf 		----> valida cpf.									   //
	// 9- 	cnpj 		----> valida cnpj.									   //
	// 10-	url			----> valida url com ou sem o http e o www			   //
	// 11-	telefone	----> valida telefone com todos os tipos de entrada    //
	// 12-	ddg			----> valida números de telefone 0800 				   //
	// 13-	rg			----> valida RG										   //
	// 14-	cartão		----> valida cartão de crédito (amex, visa e master)   //
	//						  												   //
	//						  												   //
	//	Para validar a obrigatoriedae, deve-se colocar no objeto do formulário //
	//	o atributo obrigatorio="", sendo que entre as aspas deve-se colocar    //
	//	a obrigatoriedade conforme a listagem abaixo:						   //
	//																		   //
	// 1- 	naovazio	---->	se não puder ficar vazio.					   //
	// 2-  	depende		---->	utiliza o atributo complemento da sequinte 	   //
	//							forma: copmplemento="campo1,campo2", sendo que //
	//							caso o campo1 ou o campo2 forem selecionados   //
	//							ou checados, ou != de vazio, o campo em questão//
	//							torna-se obrigatório. O complemento deve ser o //
	//							ID do campo e não o nome dele.				   //
	// 3-  	umdos		---->	utiliza o atributo complemento da sequinte 	   //
	//							forma: complemento="campo1,campo2", sendo que  //
	//							só pode ser preenchido um dos campos que 	   //
	//							constam dentro de complemento ou o próprio 	   //
	//							campo em questão. O complemento deve ser o 	   //
	//							ID do campo e não o nome dele.				   //
	// 4-  	iguala		---->	utiliza o atributo complemento da sequinte 	   //
	//							forma: copmplemento="campo1,campo2", sendo que://
	//							se for textfield, senha, textarea ou radio, o  //
	//							o complemento deve ser o texto do valor do 	   //
	//							campo ou o ID do campo que deve ser igual a ele//
	//																		   //
	//							se for checkbox ou select multiplo, deve-se    //
	//							colocar o intervalo de seleção mínima e máxima //
	//							desta forma: complemento="1,4"				   //
	//																		   //
	/////////////////////////////////////////////////////////////////////////////

function escondeDiv(obj){
	var objDiv = document.getElementById(obj);
	objDiv.style.display = "none";
}

function tempo(div){
	setTimeout("escondeDiv('"+div+"')",5000);
}

function AbrePopUp(url, nomedajanela, w, h)
{ 
	var winl = (screen.width - w) / 2;
	var wint = (screen.height - h) / 2 - 50;
	winprops = 'height=' + h + ', width=' + w + ', top=' + wint + ', left=' + winl + ',status=no, scrollbars=no, resizable=yes, menubar=yes'
	 
	win = window.open (url, nomedajanela, winprops);
	if (parseInt(navigator.appVersion) >= 4) { win.window.focus(); }
}

function AbrePopUp(url, nomedajanela, w, h)
{ 
	var winl = (screen.width - w) / 2;
	var wint = (screen.height - h) / 2 - 50;
	winprops = 'height=' + h + ', width=' + w + ', top=' + wint + ', left=' + winl + ',status=no, scrollbars=no, resizable=yes, menubar=yes'
	 
	win = window.open (url, nomedajanela, winprops);
	if (parseInt(navigator.appVersion) >= 4) { win.window.focus(); }
}



function validaForm(qualForm){

	var objeto = "";
	var complemento = "";
	var nomedocampo = "";
	var inicioMensagem = "";
	var mensagemFim = "";
	var numeroElementos = qualForm.elements.length;
	var valor = "";
	var expressao = "";
	var x = 0;
	var i = 0;
	var z = 0;
	var soma = 0;
	var resto = 0;
	var temp = "";
	var temp2 = "";
	var temparr = [];

	for(x=0; x<numeroElementos; x++){
		
		objeto = qualForm.elements[x];
		valor = objeto.value;
		mensagemFim = "";
		
		if(valor.length > 1){
			if(valor.charCodeAt(0) == '32'){
				i = 0;
				while (valor.charCodeAt(0) == '32'){
					valor = valor.substring(i,valor.length);
					i++;
				}
				objeto.value = valor;
			}
			if(valor.charCodeAt(valor.length-1) == "32"){
				while(valor.charCodeAt(valor.length-1) == "32"){
					valor = valor.substring(0,valor.length-1);
				}
				objeto.value = valor;
			}
		}
		
		if(objeto.getAttribute("tipo") != undefined || objeto.getAttribute("obrigatorio") != undefined){
			nomedocampo = objeto.name;
			if(nomedocampo == undefined || nomedocampo == ""){
				alert("Atenção\n\nNão foi possivel resgatar o nome do campo " + x + ".\n\nPor favor, contate o administrador do sistema informando esta mensagem.");
				objeto.focus();
				return false;
			}
			
			inicioMensagem = "Atenção\n\nO campo " + nomedocampo;
			
			if(objeto.disabled == false){
				if((objeto.getAttribute("obrigatorio") != undefined && objeto.getAttribute("obrigatorio") != "") || (objeto.getAttribute("obrigatório") != undefined && objeto.getAttribute("obrigatório") != "")){
					switch (objeto.getAttribute("obrigatorio").toLowerCase()){
						case "naovazio":
						case "nãovazio":
						case "nao vazio":
						case "não vazio":
						case "nao_vazio":
						case "não_vazio":
							if(valor == ""){
								alert(inicioMensagem + " não pode ficar em branco.");
								objeto.focus();
								return false;
							}
						break;
						
						case "depende":
							if(objeto.value == ""){
								if(objeto.getAttribute("complemento") == undefined || objeto.getAttribute("complemento") == ""){
									alert(inicioMensagem + " não possui um complemento de verificação válido.\n\nContate o administrador do sistema.");
									objeto.focus();
									return false;
								}else{
									complemento = objeto.getAttribute("complemento");
									temparr = complemento.split(",");
									for(i = 0; i < temparr.length; i++){
										temp = document.getElementById(temparr[i]);
										if(temp == undefined){
											alert("Atenção\n\nO campo " + nomedocampo + " está vinculado com o campo " + temparr[i] + ", que é inexistente.\n\nContate o administrador do sistema.");
											objeto.focus();
											return false;
										}else{
											if(temp.value != ""){
												switch (temp.type){
													case "checkbox":
														if(temp.checked){
															alert(inicioMensagem + " não pode ficar em branco.");
															objeto.focus();
															return false;
														}
													break;
													case "radio":
														if(temp.checked){
															alert(inicioMensagem + " não pode ficar em branco.");
															objeto.focus();
															return false;
														}
													break;
													case "text":
														alert(inicioMensagem + " não pode ficar em branco.");
														objeto.focus();
														return false;
													break;
													case "password":
														alert(inicioMensagem + " não pode ficar em branco.");
														objeto.focus();
														return false;
													break;
													case "textarea":
														alert(inicioMensagem + " não pode ficar em branco.");
														objeto.focus();
														return false;
													break;
												}
											} 
										}	
									}
								}
							}
						break;
						
						case "umdos":
						case "um dos":
						case "um_dos":
							if(objeto.getAttribute("depende") == undefined || objeto.getAttribute("depende") == ""){
								alert(inicioMensagem + " não possui um complemento de verificação (depende) válido.\n\nContate o administrador do sistema.");
								objeto.focus();
								return false;
							}
							complemento = objeto.getAttribute("depende");
							temparr = complemento.split(",");
							
							if (objeto.value != ""){
								temp2 = 1;
							}
							else{
								temp2 = 0;
							}
							for(i = 0; i < temparr.length; i++){
								temp = document.getElementById(temparr[i]);
								if(temp == undefined){
									alert("Atenção\n\nO campo " + nomedocampo + " está vinculado com o campo " + temparr[i] + ", que é inexistente.\n\nContate o administrador do sistema.");
									objeto.focus();
									return false;
								}else{
									if (temp.value != ""){
										temp2 += 1;
										if (temp2 > 1){
											alert("Você deve preencher apenas um dos campos: "+ objeto.name + ", " + complemento);
											objeto.focus();
											return false;
											break;
										}
									}
								}
							}
							if (temp2 == 0){
								alert("Você deve preencher apenas um dos campos: "+ objeto.name + ", " + complemento);
								objeto.focus();
								return false;
								break;
							}
							
						break;
	
						case "iguala":
						case "igual a":
						case "igual_a":
							if(objeto.getAttribute("complemento") == undefined || objeto.getAttribute("complemento") == ""){
								alert(inicioMensagem + " não possui um complemento de verificação (complemento) válido.\n\nContate o administrador do sistema.");
								objeto.focus();
								return false;
							}else{
								complemento = objeto.getAttribute("complemento");
								switch (objeto.type){
									case "checkbox":
										temp = 0;
										temparr = complemento.split(",");
										for(z=0; z<numeroElementos; z++){
											if(qualForm.elements[z].name == objeto.name && qualForm.elements[z].type == "checkbox"){
												if(qualForm.elements[z].checked == true){
													temp += 1;
													if(temparr[1].value != ""){
														if(temp > temparr[1]){
															alert(inicioMensagem + " não foi devidamente preenchido.\n\nVocê deve selecionar no máximo " + temparr[1] + " opções.");
															objeto.focus();
															return false;
															break;
														}
													}
												}
											}
										}
										if(temp < temparr[0]){
											if(temparr[0] > 1){
												alert(inicioMensagem + " não foi devidamente preenchido.\n\nVocê deve selecionar pelo menos " + temparr[0] + " opções.");
											}else{
												alert(inicioMensagem + " não foi devidamente preenchido.\n\nVocê deve selecionar pelo menos " + temparr[0] + " opção.");
											}
											objeto.focus();
											return false;
											break;
										}
									break;
									case "text":
									case "password":
									case "textarea":
										if(document.getElementById(complemento) != undefined){
											if(document.getElementById(complemento).value != objeto.value){
												alert(inicioMensagem + " deve ser preenchido com o mesmo valor do campo " + document.getElementById(complemento).name + ".");
												objeto.focus();
												return false;
											} 
										}else{
											if(objeto.value != complemento){
												alert(inicioMensagem + " deve ser preenchido com o valor: '" + complemento + "'.");
												objeto.focus();
												return false;
											}
										}
									break;
								}
							}
						break;
					}
				}
				
				
				if(objeto.getAttribute("tipo") != undefined && objeto.getAttribute("tipo") != "" && valor != ""){
					switch (objeto.getAttribute("tipo").toLowerCase()){
						case "e-mail":
						case "email":
							expressao = /^[\w-]+(\.[\w-]+)*@(([A-Za-z\d][A-Za-z\d-]{0,61}[A-Za-z\d]\.)+[A-Za-z]{2,6}|\[\d{1,3}(\.\d{1,3}){3}\])$/;
							if(testarExpresao(expressao,valor) == false){
								retorna(inicioMensagem,objeto,mensagemFim);
								return false;
							}
						break;
						
						case "inteiro":
							expressao = /^[+-]?[ ]?\d+$/;
							if(testarExpresao(expressao,valor) == false){
								mensagemFim = "\n\nPreencha-o apenas com números inteiros positivos ou negativos";
								retorna(inicioMensagem,objeto,mensagemFim);
								return false;
							}
						break;
						
						case "decimal":
							expressao = /^[+-]?[ ]?\d{1,3}(\.?\d{3})*,\d+$/;
							if(testarExpresao(expressao,valor) == false){
								mensagemFim = "\n\nPreencha-o apenas com números inteiros positivos ou negativos, pontos (para separar milhar) e vírgula (para determinar decimal)";
								retorna(inicioMensagem,objeto,mensagemFim);
								return false;
							}
						break;
						
						case "moeda":
							expressao = /^[+-]?[ ]?\d{1,3}(\.?\d{3})*,\d{2}$/;
							if(testarExpresao(expressao,valor) == false){
								mensagemFim = "\n\nPreencha-o apenas com números inteiros positivos ou negativos, pontos (para separar milhar) e vírgula (para determinar decimal), com DOIS números decimais.";
								retorna(inicioMensagem,objeto,mensagemFim);
								return false;
							}
						break;
						
						case "cep":
							expressao = /^\d{5}[- .]?\d{3}$/;
							if(testarExpresao(expressao,valor) == false){
								retorna(inicioMensagem,objeto,mensagemFim);
								return false;
							}
							if(parseInt(valor.substring(0,5),10) < 1000){
								mensagemFim = "\n\nO CEP digitado não existe.";
								retorna(inicioMensagem,objeto,mensagemFim);
								return false;						
							}
						break;
						
						case "data":
							expressao = /^((0?[1-9]|[12]\d)\/(0?[1-9]|1[0-2])|30\/(0?[13-9]|1[0-2])|31\/(0?[13578]|1[02]))\/(19|20)?\d{2}$/;
							if(testarExpresao(expressao,valor) == false){
								retorna(inicioMensagem,objeto,mensagemFim);
								return false;
							}
							var ano = valor.split("/");
							if(ano[0] == 29 && ano[1] == 2){
								if (ano[2]%4 == 0 && !(ano[2]%100 == 0 && ano[2]%400 != 0)){ 
								}else{
									retorna(inicioMensagem,objeto,mensagemFim);
									return false;
								}   
							}
						break;
						
						case "hora":
							expressao = /^(((0?[1-9]|[1][0-2])(([hH] ?|:)| ([hH]|:) )(0?[0-9]|[1-5]\d) ?(([mM]|(min)|(MIN)|(Min)) )?(AM|PM|Am|Pm|am|pm)))|(((0?[0-9])|1[0-9]|2[0-3])(([hH] ?|:)| ([hH]|:) )(0?[0-9]|[1-5]\d) ?([mM]|(min)|(MIN)|(Min))?)$/;
							if(testarExpresao(expressao,valor) == false){
								mensagemFim = "\n\nPreencha-o no formato hh:mm";
								retorna(inicioMensagem,objeto,mensagemFim);
								return false;
							}
						break;
						
						case "cpf":
							expressao = /^(\d{3}[. -]?){3}\d{2}$/;
							if(testarExpresao(expressao,valor) == false){
								retorna(inicioMensagem,objeto,mensagemFim);
								return false;
							}
							
							i = 0;
							for(i=0;i<valor.length;i++)
							{
								temp = valor.substring(i,i+1);
								if(temp == "." || temp == "-" || temp == " ")
								{
									valor = valor.substring(0,i) + valor.substring(i+1,valor.length);
									objeto.value = valor;
								}
							}
	
							if (valor.length != 11 || valor == "00000000000" || valor == "11111111111" || valor == "22222222222" ||	valor == "33333333333" || valor == "44444444444" || valor == "55555555555" || valor == "66666666666" || valor == "77777777777" || valor == "88888888888" || valor == "99999999999"){
								retorna(inicioMensagem,objeto,mensagemFim);
								return false;
							}
							soma = 0;
							for (i=0; i < 9; i ++){
								soma += parseInt(valor.charAt(i)) * (10 - i);
							}
							resto = 11 - (soma % 11);
							if (resto == 10 || resto == 11){resto = 0;}
							if (resto != parseInt(valor.charAt(9))){
								retorna(inicioMensagem,objeto,mensagemFim);
								return false;
							}
							soma = 0;
							for (i = 0; i < 10; i ++){soma += parseInt(valor.charAt(i)) * (11 - i);}
							resto = 11 - (soma % 11);
							if (resto == 10 || resto == 11){resto = 0;}
							if (resto != parseInt(valor.charAt(10))){
								retorna(inicioMensagem,objeto,mensagemFim);
								return false;
							}
						break;
						
						case "cnpj":
							expressao = /^\d{2}[. -]?\d{3}[. -]?\d{3}[. - \/]?\d{4}[. -]?\d{2}$/;
							if(testarExpresao(expressao,valor) == false){
								retorna(inicioMensagem,objeto,mensagemFim);
								return false;
							}
							i = 0;
							for(i=0;i<valor.length;i++){
								temp = valor.substring(i,i+1);
								if(temp == "." || temp == "-" || temp == " " || temp == "/"){
									valor = valor.substring(0,i) + valor.substring(i+1,valor.length);
									objeto.value = valor;
								}
							}
							var numeros, digitos, soma, resultado, pos, tamanho, digitos_iguais;
							digitos_iguais = 1;
							for (i = 0; i < 14; i++){
								if (valor.charAt(i) != valor.charAt(i + 1)){
									digitos_iguais = 0;
									break;
								}
							}
							if (!digitos_iguais){
								tamanho = valor.length - 2;
								numeros = valor.substring(0,tamanho);
								digitos = valor.substring(tamanho);
								soma = 0;
								pos = tamanho - 7;
								for (i = tamanho; i >= 1; i--){
									soma += numeros.charAt(tamanho - i) * pos--;
									if (pos < 2){pos = 9;}
								}
								resultado = soma % 11 < 2 ? 0 : 11 - soma % 11;
								if (resultado != digitos.charAt(0)){
									retorna(inicioMensagem,objeto,mensagemFim);
									return false;	
								}
								tamanho = tamanho + 1;
								numeros = valor.substring(0,tamanho);
								soma = 0;
								pos = tamanho - 7;
								for (i = tamanho; i >= 1; i--){
									soma += numeros.charAt(tamanho - i) * pos--;
									if (pos < 2){
										pos = 9;
									}
								}
								resultado = soma % 11 < 2 ? 0 : 11 - soma % 11;
								if (resultado != digitos.charAt(1)){
									retorna(inicioMensagem,objeto,mensagemFim);
									return false;
								}
							}else{
								retorna(inicioMensagem,objeto,mensagemFim);
								return false;
							} 
						break;
						
						case "url":
							expressao = /^(http:\/\/)?(www.)?([_a-zA-Z-\d]{3,}(\.?[_a-zA-Z-\d]+)?)(\.[a-z]{2,3})(\.[a-z]{2})?$/;
							if(testarExpresao(expressao,valor) == false){
								retorna(inicioMensagem,objeto,mensagemFim);
								return false;
							}
						break;
						
						case "ddg":
							expressao = /^0800[ -.]?\d{3}[ -.]?\d{4}$/;
							if(testarExpresao(expressao,valor) == false){
								retorna(inicioMensagem,objeto,mensagemFim);
								return false;
							}
						break;
						
						case "rg":
							expressao = /^\d{2}[\. -]?\d{3}[\. -]?\d{3}([\. -]?(\d|x|X))?$/;
							if(testarExpresao(expressao,valor) == false){
								retorna(inicioMensagem,objeto,mensagemFim);
								return false;
							}
						break;
						
						case "telefone":
							//expressao = /^((\(0?(..)?[0-9]{2}\) )|(\+\d{2}[ -])?(0?(..)?[0-9]{2})[- ])?[0-9]{3,4}[- \.]?[0-9]{4}$/;
							if(testarExpresao(expressao,valor) == false){
								retorna(inicioMensagem,objeto,mensagemFim);
								return false;
							}
						break;
	
						case "cartao":
						case "cartão":
							tempMes = objeto.getAttribute("mes");
							tempAno = objeto.getAttribute("ano");
							if(tempMes == undefined || tempMes == ""){
								alert(inicioMensagem + " não possui o campo de mês para verificação.\n\nContate o administrador do sistema.");
								objeto.focus();
								return false;
							}else{
							if(tempAno == undefined || tempAno == ""){
								alert(inicioMensagem + " não possui o campo de ano para verificação.\n\nContate o administrador do sistema.");
								objeto.focus();
								return false;
							}else{
								tempMes = document.getElementById(tempMes).value;
								tempAno = document.getElementById(tempAno).value;
								if(tempMes == undefined || tempMes == ""){
									alert(inicioMensagem + "/Mes não pode ficar em branco.");
									objeto.focus();
									return false;
								}else{
									if(tempAno == undefined || tempAno == ""){
										alert(inicioMensagem + "/Ano não pode ficar em branco.");
										objeto.focus();
										return false;
									}else{
										if (tempAno.length == 2) {
											tempAno = "20" + tempAno;
										}
										if (validateCard(valor, tempMes, tempAno) == false){
											return false;
										}
	
									}
								}
							}}
	
						break;
					}
				}
			}
		}
	}
	return true;
}
function mod10( cardNumber ) {
	var ar = new Array( cardNumber.length );
	var i = 0,sum = 0;


		for( i = 0; i < cardNumber.length; ++i ) {
			ar[i] = parseInt(cardNumber.charAt(i));
		}
		for( i = ar.length -2; i >= 0; i-=2 ) { 
			ar[i] *= 2;							 
			if( ar[i] > 9 ) ar[i]-=9;			 
		}										


			for( i = 0; i < ar.length; ++i ) {
				sum += ar[i];						 
			}
			return (((sum%10)==0)?true:false);	 	
	}


function expired( month, year ) {
		var now = new Date();							
		var expiresIn = new Date(year,month,0,0,0);		
		expiresIn.setMonth(expiresIn.getMonth()+1);		
		if( now.getTime() < expiresIn.getTime() ) return false;
		return true;									
}


function validateCard(cardNumber,cardMonth,cardYear) {
		if( cardNumber.length == 0 ) {						
			alert("Por Favor, Digite corretamente o número do Cartão de crédito.");
			return false;				
		}
		while ((cardNumber.search(" ") != -1) || (cardNumber.search("-") != -1) || (cardNumber.search("/") != -1))
		{
			cardNumber = cardNumber.replace(" ","");
			cardNumber = cardNumber.replace("-","");
			cardNumber = cardNumber.replace("/","");						
		}

	
		for( var i = 0; i < cardNumber.length; ++i ) {		
			var c = cardNumber.charAt(i);


				if( c < '0' || c > '9' ) {
					alert("Por Favor, digite um número válido de Cartão de Crédito.");
					return false;
				}
			}
			
			var length = cardNumber.length;			

		   cardType = "UNKNOWN";
	
		   if ( length == 15 && cardNumber.substr(0, 1) == '3' )                 	{ cardType = "amex"; }
		   if ( length == 16 && cardNumber.substr(0, 4) == '6011' )              	{ cardType = "discover"; }
		   if ( length == 16 && cardNumber.substr(0, 1) == '5'  )                	{ cardType = "mc"; }
		   if ( (length == 16 || length == 13) && cardNumber.substr(0, 1) == '4' ) { cardType = "visa"; }
	
	
				switch( cardType ) {
					case 'amex':


							if( length != 15 ) {
								alert("Entre o número correto do seu Cartão Amercian Express Card.");
								return;
							}
							var prefix = parseInt( cardNumber.substring(0,2));


								if( prefix != 34 && prefix != 37 ) {
									alert("Entre o número correto do seu Cartão Amercian Express Card.");
									return;
								}
								break;
								
					case 'discover':
					
						
						if( length != 16 ) {
							alert("Entre o número correto do seu Cartão Discover Card.");
							return;
						}
						var prefix = parseInt( cardNumber.substring(0,4));
						
						
						if( prefix != 6011 ) {
							alert("Entre o número correto do seu Cartão Discover Card.");
							return;
						}
						break;
						
					case 'mc':
					
					
						if( length != 16 ) {
							alert("Entre o número correto do seu Cartão MasterCard.");
							return;
						}
						var prefix = parseInt( cardNumber.substring(0,2));
					
					
						if( prefix < 51 || prefix > 55) {
							alert("Entre o número correto do seu Cartão MasterCard.");
							return;
						}
						break;
						
					case 'visa':
					
						if( length != 16 && length != 13 ) {
							alert("Entre o número correto do seu Cartão Visa.");
							return;
						}
						var prefix = parseInt( cardNumber.substring(0,1));
					
					
						if( prefix != 4 ) {
							alert("Entre o número correto do seu Cartão Visa.");
							return;
						}
						break;
					}
					
					if( !mod10( cardNumber ) ) { 		
						alert("Desculpe! Esse não é um número de Cartão de Crédito válido.");
						return false;
					}
					
					if( expired( cardMonth, cardYear ) ) {							
						alert("Desculpe! A data que você digitou torna este Cartão de Crédito inválido.");
						return false;
		}
		return true; 
}	

function testarExpresao(expressao,string){
	if(expressao.test(string) != true){
		return false;
	}else{
		return true;
	}
}
function retorna(inicioMensagem,objeto,mensagemFim){
	alert(inicioMensagem + " não parece estar correto." + mensagemFim);
	objeto.focus();
}

// Esta função serve para dar um focus automático no primeiro campo de texto ou senha do formulário quando a página é carregada. O focus acontece no onload, portanto deve ser setada assim:
// <body onload="focusForm('idDoFormulario');">, sendo que idDoFormulario é realmente o id do form que queremos que dê focus.
function focusForm(qualForm){
	var nomeForm = document.getElementById(qualForm);
	var i = 0;
	for(i=0; i < nomeForm.elements.length; i++){
		if(nomeForm.elements[i].type=="text" || nomeForm.elements[i].type=="password"){
			nomeForm.elements[i].focus();
			break;
		}
	}
}

///////////////////////////////   		HABILITA / DESABILITA CAMPOS /////////////////////
//
// campos separados por , --> acao = true ou false.
function habilita(campos,acao){
	var temparr = [];
	var temp;
	temparr = campos.split(",");
	if(temparr.length == 0){
		alert("Atenção\n\nNão foi informado nenhum campo para habilitar/desabilitar.\n\nContate o administrador do sistema.");
		return false;
	}
	if(acao == true){
		for(i=0;i<temparr.length;i++){
				temp = document.getElementById(temparr[i]);
				if(temp == undefined || temp == ""){
					alert("Atenção\n\nNão foi encontrado o elemento " + temp + ".\n\nContate o administrador do sistema.");
					return false;
				}else{
					temp.disabled = false;
				}
		}
	}else{
		for(i=0;i<temparr.length;i++){
				temp = document.getElementById(temparr[i]);
				if(temp == undefined || temp == ""){
					alert("Atenção\n\nNão foi encontrado o elemento " + temp + ".\n\nContate o administrador do sistema.");
					return false;
				}else{
					temp.disabled = true;
				}
		}
	}
}

///////////////////////////////   		HABILITA / DESABILITA CAMPOS B /////////////////////
//
// campos separados por , --> acao = true ou false.
function habilitaB(campo){
	var campox = document.getElementById(campo);
	if(campox.disabled == true){
		campox.disabled = false;
	}else{
		campox.value = "";
		campox.disabled = true;
	}
}

///////////////////////////////   Muda a cor da linha da tabela ///////////////////////////
// Cor quando o Mouse estiver sobre a linha
// onMouseOver="MouseOver(this,'#000000');"
// onMouseOut="MouseOut(this);"
//
////////////////////////////////////////////////////////////////////////////////////////////

function MouseOver(src) {
	if (!src.contains(event.fromElement)){
			src.style.cursor = 'hand';
			src.bgColor = "#000000";
		}
	}

function MouseOut(src){
	if (!src.contains(event.toElement)){
		src.style.cursor = 'default';
		src.bgColor = "";
	}
}

///////////////////////////////   fim Muda a cor da linha da tabela ////////////////////////

///////////////////////////////   Abre/Fecha Divs   ////////////////////////////////////////

/*
	Tratamento de eventos crossbrowser
	Baseado em http://simon.incutio.com/archive/2003/11/06/easytoggle
	Elcio Ferreira - 2004 - http://elcio.locaweb.com.br
*/

function addEvent(obj, evType, fn){
	if(obj.addEventListener)obj.addEventListener(evType,fn,true)
	if(obj.attachEvent)obj.attachEvent("on"+evType,fn)
}


function getSource(e){
	if(typeof e=='undefined')var e=window.event;
	var source=typeof e.target!='undefined'?e.target:typeof e.srcElement!='undefined'?e.srcElement:true
	if(source.nodeType == 3)source=source.parentNode;
	return source
}


//Atribuição de eventos
function inittree(){
	var uls=document.getElementsByTagName("ul")
	for(i=0;i<uls.length;i++)
		if(uls[i].className=="treelist"){
			var lis=uls[i].childNodes
			for(ii=0;ii<lis.length;ii++)
				if(lis[ii].nodeType==1)
					if(lis[ii].getElementsByTagName("ul").length>0){
						if(lis[ii].className!="aberto"){
							lis[ii].className="fechado"
						}
						chi=lis[ii].childNodes
						addEvent(lis[ii].childNodes[0],"click",clicado)
					}
		}
}

//Abre/fecha quando clicado
function clicado(e){
	var source=getSource(e)
	var li=source.parentNode
	li.className=li.className=="fechado"?"aberto":"fechado"
	return false
}

///////////////////////////////   Seta Status dos Links   /////////////////////////////////


function setMsg(msg) {
	window.status = msg;
	window.statusbar = msg;
	return true;
}

///////////////////////////////   Amplia Imagem   /////////////////////////////////


function jczResetWindow(bmp)
{ 
 self.moveTo(2,2);
 self.resizeTo(bmp.width+5,bmp.height+50);
 if (parseInt(navigator.appVersion) >= 4)
 {
 	window.moveTo((screen.width/2)-((bmp.width+50)/2+10),(screen.height/2)-((bmp.height+50)/2));
 }
}


///////////////////////////////  Altera o style da tabela de produtos ///////////////////

function alteraStyleTabela(obj){
	if(obj.checked == true){
		obj.parentNode.parentNode.className = "check";
	}else{
		var temp = 0;
		for(z=0;z<obj.parentNode.parentNode.parentNode.childNodes.length;z++){
			if(obj.parentNode.parentNode.parentNode.childNodes[z].nodeType == 1){
				temp += 1;
				if(obj.parentNode.parentNode.parentNode.childNodes[z] == obj.parentNode.parentNode){
					if(temp % 2 == 0){
						obj.parentNode.parentNode.className = "zebra";
					}else{
						obj.parentNode.parentNode.className = "";
					}
				}
			}
		}
		//obj.parentNode.parentNode.className = "";
	}
}

///////////////////////////////////////  AJAX //////////////////////////////////////////////////////
fila=[];
ifila=0;
arrCache=[];
function initAd(){
	var ie = (document.all);
	if(!ie){return false;}
	adDiv=eval('document.all.carregando.style');
	randAd=Math.ceil(Math.random()*1);
	if(randAd==1) showAd();
}
function showAd(){
	documentWidth =truebody().offsetWidth/2+truebody().scrollLeft-20;
	documentHeight =truebody().offsetHeight/2+truebody().scrollTop-20;
	adDiv.top =documentHeight+'px';
	setTimeout("showAd()",1);
}
function truebody(){
	return (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body
}
function processaRetorno(url,data,cache){
	if(cache){
		var encontrou = false;
		for(x=0;x<arrCache.length;x++){
			if(arrCache[x][0] == url){
				encontrou = true;
				break;
			}
		}
		if(encontrou == false){
			arrCache[arrCache.length]=[url,data];
		}
	}
	data=unescape(data.replace(/\+/g," "));
	document.getElementById("carregando").style.display = "none";
	var temscript = false;
	expressao = /<script/;
	if(testarExpresao(expressao,data)){
		var ini = 0;
		while (ini!=-1){
			ini = data.indexOf('<script', ini);
			if (ini >=0){
				ini = data.indexOf('>', ini) + 1;
				var fim = data.indexOf('</script>', ini);
				var codigo = data.substring(ini,fim);
				var novo = document.createElement("script")
				novo.text = codigo;
				document.body.appendChild(novo);
				data = data.substring(0,data.indexOf('<script')) + data.substring(data.indexOf('</script>')+9);
				temscript = true;
			}
		}
	}
	if(fila[ifila][1].length > 0){
		retorno = document.getElementById(fila[ifila][1]);
		if(retorno.tagName.toLowerCase()=="input"){
			data=unescape(data.replace(/\+/g," "))
			retorno.value = data;
		}else if(retorno.tagName.toLowerCase()=="select"){        
			select_innerHTML(retorno,data)
		}else if(retorno.tagName){
			retorno.innerHTML = data;
		}
	}
	if(temscript){executaRetorno();}
	ifila++;
	if(ifila<fila.length){
		if(fila[ifila][2]){
			document.getElementById("carregando").style.display = "block";
		}
		setTimeout("ajaxRun()",20)
	}
	function select_innerHTML(objeto,innerHTML){
		objeto.innerHTML = "";
		var selTemp = document.createElement("micoxselect");
		var opt;
		selTemp.id="micoxselect1";
		document.body.appendChild(selTemp);
		selTemp = document.getElementById("micoxselect1");
		selTemp.style.display="none";
		if(innerHTML.toLowerCase().indexOf("<option")<0){
			innerHTML = "<option>" + innerHTML + "</option>";
		}
		innerHTML = innerHTML.replace(/<option/g,"<span").replace(/<\/option/g,"</span");
		selTemp.innerHTML = innerHTML;
		for(var i=0;i<selTemp.childNodes.length;i++){
			if(selTemp.childNodes[i].tagName){
				opt = document.createElement("OPTION");
				for(var j=0;j<selTemp.childNodes[i].attributes.length;j++){
					opt.setAttributeNode(selTemp.childNodes[i].attributes[j].cloneNode(true));
				}
				opt.value = selTemp.childNodes[i].getAttribute("value");
				opt.text = selTemp.childNodes[i].innerHTML;
				if(document.all){
					objeto.add(opt);
				}else{
					objeto.appendChild(opt);
				}                    
			}    
		}
		document.body.removeChild(selTemp);
		selTemp = null;
	}
}
function solicitaAjax(url,retorno,carregando,cache,formulario){
	var taNaFila = false;
	for(x=ifila;x<fila.length;x++){
		if(fila[ifila][0] == url){
			taNaFila = true;
			break;
		}
	}
	if(taNaFila == false){
		if(formulario.length > 0){
			formulario = document.getElementById(formulario);
			if(formulario == null){alert("Atenção\n\nO formulário não foi encontrado.");}
			var send = new Array(); 
			var elementos = formulario.elements; 
			  
			for(var i = 0; i < elementos.length; i++) { 
				 var e = elementos[i]; 
				 if(!e.name) 
					 continue; 			  

				 var nVal = ""; 
          
				 for(var x = 0; x < e.value.length; x++) { 
					 codeA = e.value.charCodeAt(x); 
					 codeA = DecHex(codeA); 
					 nVal += "%" + codeA; 
				 }
				 
				 var tipo = e.type.toLowerCase();
				  
				if(tipo != "checkbox" && tipo != "radio") { 
				 	send[send.length] = e.id + "=" + nVal; 
				} else { 
					 if(e.checked) { 
						 send[send.length] = e.id + "=" + nVal; 
					 } 
				}
			 }
			 send = send.join("&");
		}
		
		fila[fila.length]=[url,retorno,carregando,cache,send];
	}
	if((ifila+1)==fila.length && taNaFila == false){
		 if(carregando){
				document.getElementById("carregando").style.display = "block";
		}
		ajaxRun();

	}
}

function DecHex(dec2) { 
 var hex_chars = "0123456789ABCDEF"; 

 var n1 = hex_chars.charAt(Math.floor(dec2 / 16)); 
 var n2 = hex_chars.charAt(dec2 % 16); 

 return n1 + n2; 
} 
function ajax(funcao,retorno,carregando,cache,formulario,parametros){
	if(parametros != ""){
		url = ajaxFuncoes(funcao) + "&" + parametros;
	}else{
		url = ajaxFuncoes(funcao);
	}
	
	if(cache){
		if(arrCache.length>0){
			var encontrou = false;
			for(x=0;x<arrCache.length;x++){
				if(arrCache[x][0] == url){
					ifila -=1;
					processaRetorno(url,arrCache[x][1], false);
					encontrou = true;
					break;
				}
			}
			if(encontrou == false){
				solicitaAjax(url,retorno,carregando,cache,formulario);
			}
		}else{
			solicitaAjax(url,retorno,carregando,cache,formulario);
		}
	}else{
		solicitaAjax(url,retorno,carregando,cache,formulario);
	}
}
function ajaxRun(){
    var ajax1 = pegaAjax();
    if(ajax1){
		url = fila[ifila][0];
        ajax1.onreadystatechange = ajaxOnReady
		if(fila[ifila][4] != undefined){ 
			ajax1.open("POST", url, true);
			ajax1.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
		} else { 
			ajax1.open("GET", url ,true);
		}
        ajax1.setRequestHeader("Cache-Control", "no-cache");
        ajax1.setRequestHeader("Pragma", "no-cache");
	   if(fila[ifila][4] != undefined) { 
			 ajax1.send(fila[ifila][4]);
		 } else { 
			 ajax1.send(null); 
		 }
    }else{
        return false;
    }
    function ajaxOnReady(){
        if (ajax1.readyState==4){
			if(ajax1.status == 200){
				var data=ajax1.responseText;
				processaRetorno(fila[ifila][0],data, fila[ifila][3]);
			}else{
				if(fila[ifila][2]){
					document.getElementById("carregando").style.display = "none";
					}
				alert(httpStatus(ajax1.status));
				ifila++;
            	if(ifila<fila.length){
					if(fila[ifila+1][2]){
						document.getElementById("carregando").style.display = "block";
					}
					setTimeout("ajaxRun()",20)
				}
			}
			ajax1 = null;
        }
    }
    function pegaAjax(){
        if(typeof(XMLHttpRequest)!='undefined'){return new XMLHttpRequest();}
        var axO=['Microsoft.XMLHTTP','Msxml2.XMLHTTP','Msxml2.XMLHTTP.6.0','Msxml2.XMLHTTP.4.0','Msxml2.XMLHTTP.3.0'];
        for(var i=0;i<axO.length;i++){ try{ return new ActiveXObject(axO[i]);}catch(e){} }
        return null;
    }   
	
	function httpStatus(stat){
        switch(stat){
            case 0: return "Erro desconhecido de javascript";
            case 400: return "400: Solicitção incompreensível"; break;
            case 403: case 404: return "404: Não foi encontrada a URL solicitada"; break;
            case 405: return "405: O servidor não suporta o método solicitado"; break;
            case 500: return "500: Erro desconhecido de natureza do servidor"; break;
            case 503: return "503: Capacidade máxima do servidor alcançada"; break;
            default: return "Erro " + stat + ". Mais informações em http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html"; break;
        }
    }
}
