﻿formHandler = {

	init : function() {
		formHandler.clear();
		document.getElementById("step1_container").style.display = "block";
		CardType.init();

	},
	clear : function() {
			document.ficha.reset();
	},
	
	
	clearFieldById : function(id) {
		document.getElementById(id).value = "";
	},
	togglePayPeriod : function(key) {
		if (key == 0 ){
			document.getElementById("perMonth").style.display = "block";	
			document.getElementById("perYearSem").style.display = "none";
			document.getElementById("perMonthText").style.display = "block";	
			document.getElementById("perYearSemText").style.display = "none";
			//document.getElementsByName("valorContribuicao")[0].checked = true;
			document.getElementsByName("contribuicao")[0].checked = true;
			
			
			
		}else if(key == 1) {
			//semestral e anual
			document.getElementById("perMonth").style.display = "none";	
			document.getElementById("perYearSem").style.display = "block";	
			document.getElementById("perMonthText").style.display = "none";	
			document.getElementById("perYearSemText").style.display = "block";	
			document.getElementsByName("contribuicao")[1].checked = true;
			//mostra semestral
			formHandler.toggleSemestralAnual(0);
		}
		//Clear contributions to force the users selections
		formHandler.unCheck("valorContribuicao");
		document.getElementById("valorMinimo1").value = "";
		document.getElementById("valorMinimo2").value = "";
	},
	unCheck : function(id){
		//for radio buttons or checkboxes
		var check = document.getElementsByName(id);
		for(var i = 0; i<check.length;i++) {
				check[i].checked = false;
		}
	},
	toggleSemestralAnual: function(key) {
		//semestral
		if (key == 0 ){
		document.getElementById("contribSemestral").style.display = "inline";	
		document.getElementById("contribAnual").style.display = "none";	
	//	document.getElementsByName("valorContribuicao")[4].checked = true;
		document.getElementById("customContribMin").innerHTML = "(mínimo de R$90,00)";
		//anual
		}else if(key == 1) {
		document.getElementById("contribSemestral").style.display = "none";	
		document.getElementById("contribAnual").style.display = "inline";	
	//	document.getElementsByName("valorContribuicao")[7].checked = true;
		document.getElementById("customContribMin").innerHTML = "(mínimo de R$150,00)";
		}
		//Clear contributions to force the users selections
		formHandler.unCheck("valorContribuicao");
	},
	
	togglePayType : function(key, value) {
			if (key == 0 ){
				if(value == "0") {
				document.getElementById("debitAut").style.display = "none";
				document.getElementById("debit_aut_container").className = "ptype_nselected";
				}else{
				document.getElementById("debitAut").style.display = "block";
				document.getElementById("debit_aut_container").className = "ptype_selected";
				
				document.getElementById("creditCard").style.display = "none";
				document.getElementById("credit_card_container").className = "ptype_nselected";
				document.getElementById("CardType").options[0].selected = true;
				document.getElementById("formaPagamento").value = "2";
				}
			}else if(key == 1) {
				if(value == "0") {
				document.getElementById("creditCard").style.display = "none";	
				document.getElementById("credit_card_container").className = "ptype_nselected";	
				}else{
				document.getElementById("creditCard").style.display = "block";	
				document.getElementById("credit_card_container").className = "ptype_selected";
				
				document.getElementById("debitAut").style.display = "none";	
				document.getElementById("sDebitAut").options[0].selected = true;
				document.getElementById("debit_aut_container").className = "ptype_nselected";
				document.getElementById("formaPagamento").value = "1";
				}
			}
			//Reset all cards values
			//credcard number
			document.getElementById("ExpMon").options[0].selected = true;
			document.getElementById("ExpYear").options[0].selected = true;
			document.getElementById("CardNumber").value = "";
			//debit
			document.getElementById("diaDebito").options[0].selected = true;
			document.getElementById("diaDebitoAlternativo").options[0].selected = true;
			document.getElementById("agencia").value = "";
			document.getElementById("contaCorrente").value = "";
	},
	
	
	toggleNewsletter : function(obj) {
		if(obj.checked == true) {
			document.getElementById('newsletter_period').style.display = "block";
			}else{
			document.getElementById('newsletter_period').style.display = "none";
		}
	},

	toggleFormStep : function(key) {
	
	msg = "Por favor, corrija os campos indicados.\r\n";
	
	if (formHandler.validStep1()){
		if (key == 1) {
		document.getElementById("step1_container").style.display="none";
		document.getElementById("step2_container").style.display="block";
		}else{
		document.getElementById("step1_container").style.display="block";
		document.getElementById("step2_container").style.display="none";		
		}
	}else{
		alert(msg);
		}
	},
	numberFormat : function(obj) {
		//OnKeyUp function
		var old_value = obj.value;
		var inputed_value = old_value.charAt(old_value.length-1);

		var regExp = new RegExp(/[0-9]/);
		if(!regExp.test(inputed_value)) {
			obj.value = old_value.substring(0, old_value.length-1);
			return;
		}
		
		var arr = old_value.split(",");
		arr[0] = arr[0].replace(".", "");
		//permite apagar o valor do campo
		if(this.old_value_len){
			if(obj.value.length < this.old_value_len){
				obj.value = "";
				this.old_value_len = obj.value.length;
				return;
			}
		}
		
		//Add zeros at right
		value = "";
		if(arr.length > 1){
			value = arr[0]+inputed_value;
		}else{
			value = arr[0];
		}
		var len = value.length;
		if(len>3){
		value = value.substring(0, len-3)+"."+value.substring(len-3,len);
		}
		obj.value = value+",00";
		this.old_value_len = obj.value.length;
	},
	
	isURL : function(string) {
		var strRegex = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;
		var regExpObjAdress = new RegExp(strRegex);
		return regExpObjAdress.test(string);
	},
	validStep1 : function() {
	
	var valid = true;
	var field_email       = document.getElementById('mail');
	var field_nome        = document.getElementById('nome');
	var select_sexo       = document.getElementById('sexo');
	var field_endereco    = document.getElementById('endereco');
	var field_numero      = document.getElementById('numero');
	var field_cep         = document.getElementById('cep');
	var field_bairro      = document.getElementById('bairro');
	var field_complemento = document.getElementById('complemento');
	var field_cidade      = document.getElementById('cidade');
	var select_estado     = document.getElementById('estado');
	var field_dddres      = document.getElementById('dddres');
	var field_telefoneRes = document.getElementById('telefoneRes');
	var field_dddcom      = document.getElementById('dddcom');
	var field_telefoneCom = document.getElementById('telefoneCom');
	var field_dddcel      = document.getElementById('dddcel');
	var field_telefoneCel = document.getElementById('telefoneCel');
	var select_birth_day  = document.getElementById('birth_day');
	var select_birth_month      = document.getElementById('birth_month');
	var select_birth_year       = document.getElementById('birth_year');
	var select_profissao        = document.getElementById('profissao');
	var field_cpf               = document.getElementById('cpf');
	var check_receberInformacao = document.getElementById('receberInformacao'); 
	var radio_periodoInformacao = document.getElementsByName('periodoInformacao');
	var select_canalPrincipal   = document.getElementById('canalPrincipal');
	var radio_customContrib1    = document.getElementById('customContrib1');
	var radio_customContrib2    = document.getElementById('customContrib2');
	var radio_customContrib2_Semestral  = document.getElementById('contribMonth');
	var radio_customContrib2_Anual      = document.getElementById('contribYear');

	var field_valorMinimo1      = document.getElementById('valorMinimo1');
	var field_valorMinimo2      = document.getElementById('valorMinimo2');

	/*= CAMPOS DE TEXTO*/
	var regExpObj = new RegExp("^[A-Za-z\.,;: ]+$");
	//nome
	valid = (formHandler.regExp(valid,regExpObj,field_nome,1));
	//complemento
	var regExpObj = new RegExp("^[A-Za-z0-9\.,;:\(\)\-_ ]+$");
	if(field_complemento.value.length > 0) {
		valid = (formHandler.regExp(valid,regExpObj,field_complemento,1));
	}else{
		formHandler.showFeedback(field_complemento,1);
	}
	
	//endereco
	
	
	if(formHandler.isURL(field_endereco.value)) {
		formHandler.showFeedback(field_endereco,0);
		valid = false;
	}else{
		formHandler.showFeedback(field_endereco,1);
		//check characters
		valid = (formHandler.regExp(valid,regExpObj,field_endereco,1));
	}
	
	//bairro
	valid = (formHandler.regExp(valid,regExpObj,field_bairro,1));
	//cidade
	valid = (formHandler.regExp(valid,regExpObj,field_cidade,1));
	
	/*= CAMPO DECIMAL*/

	var regExpObj = new RegExp("^([0-9]{0,1}[0-9]{0,2}(\.[0-9]{3})*(\,[0-9]{0,2})?|[0-9]{1}[0-9]{0,}(\,[0-9]{0,2})?|0(\,[0-9]{0,2})?|(\,[0-9]{1,2})?)$");
	//VALOR DA COMTRIBUICAO
	
		var contributions = document.getElementsByName("valorContribuicao");
		checked = false;
		for(var i = 0; i<contributions.length;i++) {
				if(contributions[i].checked) {
					checked = true;
				}	
		}
		if(!checked) {
		msg += " - Selecione o valor de sua contribuição.\n";	
		}
		valid = checked;
		
		//mensal
		if(radio_customContrib1.checked) {
				//valor minimo permitido = 12
				var value = field_valorMinimo1.value;
				//.replace(".","");
				value = value.replace(",",".");
				if (isNaN(value) || value < 15) {
					//valid = (formHandler.regExp(valid,regExpObj,field_valorMinimo1,0));
					formHandler.showFeedback(field_valorMinimo1,0);
					valid = false;
				 }else{
					valid = true;
					formHandler.showFeedback(field_valorMinimo1,1);
				 }
		}else{
			formHandler.showFeedback(field_valorMinimo1,1);
			}
		//semestral ou Anual
		if(radio_customContrib2.checked) {
				
				//contribuição semestral
				if(radio_customContrib2_Semestral.checked) {
					var valorMinimo = 75;
				//contribuição anual
				}else if (radio_customContrib2_Anual.checked) {
					var valorMinimo = 150;
				}
				var value = field_valorMinimo2.value.replace(",",".");
				if (isNaN(value) || value < valorMinimo) {
					//valid = (formHandler.regExp(valid,regExpObj,field_valorMinimo2,0));
					formHandler.showFeedback(field_valorMinimo2,0);
					valid = false;
				}else{
					
					formHandler.showFeedback(field_valorMinimo2,1);
					valid = true;
				}
		}else{
			formHandler.showFeedback(field_valorMinimo2,1);
			}
		
	/*= CAMPOS NUMERICOS*/
	var regExpObj = new RegExp("^[0-9]+$");
	
	//numero
	valid = (formHandler.regExp(valid,regExpObj,field_numero,0));
	//CEP
	if(field_cep.value.length > 0) {
		valid = (formHandler.regExp(valid,regExpObj,field_cep,0));
	}else{formHandler.showFeedback(field_cep,1);}
	
	//data nascimento
	if(select_birth_day.value == 0)	{valid = false; formHandler.showFeedback(select_birth_day,0);}else{formHandler.showFeedback(select_birth_day,1)};
	if(select_birth_month.value == 0)
	{valid = false; formHandler.showFeedback(select_birth_month,0);}else{formHandler.showFeedback(select_birth_month,1)};
	if(select_birth_year.value == 0)
	{valid = false; formHandler.showFeedback(select_birth_year,0);}else{formHandler.showFeedback(select_birth_year,1)};
	
	//CPF
	if (field_cpf.value.length > 0) {
		if(!(regExpObj.test(field_cpf.value)) || !(formHandler.cpfValidator(field_cpf.value)))
		{valid = false; formHandler.showFeedback(field_cpf,0);}else{formHandler.showFeedback(field_cpf,1);}
	}else{formHandler.showFeedback(field_cpf,1);}
	
		/*= CAMPOS NUMERICOS*/
		var regExpObjTel = new RegExp("^[0-9]+$");
		/*= CAMPOS NUMERICOS COM TAMANHO 2*/
		var regExpObjDDD = new RegExp("^([0-9]{2,2})+$");

		if (field_telefoneRes.value.length > 0 || field_dddres.value.length > 0) {
			//telefone resp
			valid = (formHandler.regExp(valid,regExpObjTel,field_telefoneRes,0));
			//ddd resp
			valid = (formHandler.regExp(valid,regExpObjDDD,field_dddres,0));

		}else{
			formHandler.showFeedback(field_telefoneRes,1);
			formHandler.showFeedback(field_dddres,1);
			}
		if (field_telefoneCom.value.length > 0 || field_dddcom.value.length > 0) {
			//telefone com
			valid = (formHandler.regExp(valid,regExpObjTel,field_telefoneCom,0));
			//ddd com
			valid = (formHandler.regExp(valid,regExpObjDDD,field_dddcom,0));

		}else{
			formHandler.showFeedback(field_telefoneCom,1);
			formHandler.showFeedback(field_dddcom,1);
			}
		if (field_telefoneCel.value.length > 0 || field_dddcel.value.length > 0) {
			//telefone cel
			valid = (formHandler.regExp(valid,regExpObjTel,field_telefoneCel,0));
			//ddd cel
			valid = (formHandler.regExp(valid,regExpObjDDD,field_dddcel,0));
		}else{
			formHandler.showFeedback(field_telefoneCel,1);
			formHandler.showFeedback(field_dddcel,1);
			}
		
	
	if (field_telefoneRes.value.length < 1 && field_telefoneCom.value.length < 1 && field_telefoneCel.value.length < 1) {
		valid = false;
		formHandler.showFeedback(field_telefoneRes,0);
		formHandler.showFeedback(field_dddres,0);
		formHandler.showFeedback(field_telefoneCom,0);
		formHandler.showFeedback(field_dddcom,0);
		formHandler.showFeedback(field_telefoneCel,0);
		formHandler.showFeedback(field_dddcel,0);
		msg += " - Informe pelo menos um número de telefone.\n";
	}
	
	/*= CAMPOS TIPO SELECT*/
	//sexo
	if(select_sexo.value == "0"){valid = false; formHandler.showFeedback(select_sexo,0);}else{formHandler.showFeedback(select_sexo,1);}
	//estado
	if(select_estado.value == "0"){valid = false; formHandler.showFeedback(select_estado,0);}else{formHandler.showFeedback(select_estado,1);}
	//profissao
	if(select_profissao.value == "0"){valid = false; formHandler.showFeedback(select_profissao,0);}else{formHandler.showFeedback(select_profissao,1);}
	//canal principal (de onde o user veio)
	if(select_canalPrincipal.type == "select-one") {
		if(select_canalPrincipal.value == "0"){valid = false; formHandler.showFeedback(select_canalPrincipal,0);}else{formHandler.showFeedback(select_canalPrincipal,1);}
	}
	//email
	if(field_email.value.length > 0) {
		var regExpObj = new RegExp("^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-]?[a-zA-Z0-9]+)*)\.([A-Za-z]{2,})$");
		valid = (formHandler.regExp(valid,regExpObj,field_email));
	}else{formHandler.showFeedback(field_email,1);}
	//RETORNO
	return valid;
	
	},
		
	showFeedback : function(obj, key) {
			if(key) {
				obj.parentNode.className = "data_ok";	
			//	obj.className = "input_ok";	
			}else{
				
			//	if(obj.type == "select-one") {
					obj.parentNode.className = "data_error";	
			//	}else{
			//		obj.className = "input_error";	
			//	}200
			}
		},
	
	regExp : function(valid, reg, obj, is_text) {
		if(is_text) {
			reg = (reg.test(formHandler.accentsRemove(obj.value)));
			}else{
			reg = (reg.test(obj.value));
			}
		if(!(reg)){
				formHandler.showFeedback(obj,0);
				return false;
			}else{
				formHandler.showFeedback(obj,1);
				return valid;
			}
		},
	
	accentsRemove : function(str) {
	var com_acentos = new Array("Ä","Å","Á","Â","À","Ã","ä","á","â","à","ã","É","Ê","Ë","È","é","ê","ë","è","Í","Î","Ï","Ì","í","î","ï","ì","Ö","Ó","Ô","Ò","Õ","ö","ó","ô","ò","õ","Ü","Ú","Û","ü","ú","û","ù","Ç","ç");
	var sem_acentos = new Array("A","A","A","A","A","A","a","a","a","a","a","E","E","E","E","e","e","e","e","I","I","I","I","i","i","i","i","O","O","O","O","O","o","o","o","o","o","U","U","U","u","u","u","u","C","c");

			for (var i=0; i < str.length; i++) {
		
				for (var j=0; j < com_acentos.length; j++) {	
					var str = str.replace(com_acentos[j], sem_acentos[j]);
				}
			}
			return str;
	},
	
	 cpfValidator : function(CPF) {
			if (CPF.length < 11) {
				  return false;
			  	}
			// Aqui começa a checagem do CPF
			var posicao, I, soma, DV, dv_informado;
			var digito = new Array(10);
			dv_informado = CPF.substr(9, 2); // Retira os dois últimos dígitos do número informado
			
			// Desmembra o número do CPF na array DIGITO
			for (I=0; I<=8; I++) {
			  digito[I] = CPF.substr( I, 1);
			}
			
			// Calcula o valor do 10º dígito da verificação
			posicao = 10;
			soma = 0;
			   for (I=0; I<=8; I++) {
				  soma = soma + digito[I] * posicao;
				  posicao = posicao - 1;
			   }
			digito[9] = soma % 11;
			   if (digito[9] < 2) {
					digito[9] = 0;
			}
			   else{
				   digito[9] = 11 - digito[9];
			}
			
			// Calcula o valor do 11º dígito da verificação
			posicao = 11;
			soma = 0;
			   for (I=0; I<=9; I++) {
				  soma = soma + digito[I] * posicao;
				  posicao = posicao - 1;
			   }
			digito[10] = soma % 11;
			   if (digito[10] < 2) {
					digito[10] = 0;
			   }
			   else {
					digito[10] = 11 - digito[10];
			   }
			
			// Verifica se os valores dos dígitos verificadores conferem
			DV = digito[9] * 10 + digito[10];
			  	if (DV != dv_informado) {
				   return false;
			  	}else{
				   return true;
				}
			},
			
			Submit : function() {
				var msg = "Por favor, verifique os campos indicados.\r\n";
				valid = true;
				var select_sDebitAut = document.getElementById("sDebitAut");
				var select_CardType = document.getElementById("CardType");
				if(select_sDebitAut.value != 0 || select_CardType.value != 0) {
				
				
				var regExpObj = new RegExp("^[0-9XP.-]+$");
				if(select_sDebitAut.value != 0){
					//debito
					var field_agencia = document.getElementById("agencia");
					var field_contaCorrente = document.getElementById("contaCorrente");
					var select_diaDebito = document.getElementById("diaDebito");
					var select_diaDebitoAlternativo = document.getElementById("diaDebitoAlternativo");
					
					//valida
					
					valid = (formHandler.regExp(valid,regExpObj,field_agencia,0));
					valid = (formHandler.regExp(valid,regExpObj,field_contaCorrente,0));
					/*= CAMPOS TIPO SELECT*/
					if(select_diaDebito.value == "0"){valid = false; formHandler.showFeedback(select_diaDebito,0);}else{formHandler.showFeedback(select_diaDebito,1);}
					if(select_diaDebitoAlternativo.value == "0"){valid = false; formHandler.showFeedback(select_diaDebitoAlternativo,0);}else{formHandler.showFeedback(select_diaDebitoAlternativo,1);}
					if(select_diaDebito.value == select_diaDebitoAlternativo.value)  { valid = false; msg+=("O dia do débito não pode ser igual ao dia alternativo.\r\n");	}
				}else{
					//credito
					var field_CardNumber = document.getElementById("CardNumber");
					var select_CardType = document.getElementById("CardType");
					var select_ExpMon = document.getElementById("ExpMon");
					var select_ExpYear = document.getElementById("ExpYear");

					/*Credit CArd validation using CreditCard.js*/

		 			//Year Verification
					var tmpyear = select_ExpYear.options[select_ExpYear.selectedIndex].value;
					//Month Verification
					var tmpmonth = select_ExpMon.options[select_ExpMon.selectedIndex].value;

					if (field_CardNumber.value.length == 0) {
						valid = false; formHandler.showFeedback(field_CardNumber,0);
					}else{
						formHandler.showFeedback(field_CardNumber,1);
						
						card = select_CardType.options[select_CardType.selectedIndex].value;
						
						switch(card) {
							case "1" : 
								card = "AmExCard";
								break;
							case "2" : 
								card = "MasterCard";
								break;
							case "3" : 
								card = "DinersClubCard";
								break;
							case "4" : 
								card = "VisaCard";
								break;
						}
						//Remove the "-" from the value of the credit card
						var regExpObj = new RegExp(/[-]/g);
						var cardnumber = field_CardNumber.value.replace(regExpObj, "");
						
						var retval = eval("CardType."+ card + ".checkCardNumber(\"" + cardnumber + "\", " + tmpyear + ", " + tmpmonth + ")");
						cardname = "";
						if (retval)
						// The cardnumber has the valid luhn checksum and matches the
						// cardtype's rule.
						//if correct
						formHandler.showFeedback(field_CardNumber,1);
						else {
						// The cardnumber has the valid luhn checksum, but we want to know which
						// cardtype it belongs to.
							for (var n = 0; n < CardType.Cards.size; n++) {
								if (CardType.Cards[n].checkCardNumber(cardnumber, tmpyear, tmpmonth)) {
									cardname = CardType.Cards[n].getCardType();
									break;
								}
							}
	
							if (cardname.length > 0) {
								msg+=" - O número do Cartão de Crédito informado é " + cardname + ", não " + card + ".\r\n";
							} 	else {
								msg+=" - O número do Cartão de Crédito informado está inválido.\r\n";
							}
							valid = false;
							formHandler.showFeedback(field_CardNumber,0);
						}
						
						
						}
						//Card expiration
						if (select_ExpMon.value == "0" || select_ExpYear.value == "0") {
							valid = false;
							if (select_ExpMon.value == "0") {
								formHandler.showFeedback(select_ExpMon,0);
							}else{
								formHandler.showFeedback(select_ExpMon,1);
							}
							if (select_ExpYear.value == "0") {
								formHandler.showFeedback(select_ExpYear,0);
							}else{
								formHandler.showFeedback(select_ExpYear,1);
							}
						}else{
							if (!CardType.isExpiryDate(tmpyear, tmpmonth)) {
								valid = false;
								msg += " - A data de validade do Cartão de Crédito expirou.\r\n";
								formHandler.showFeedback(select_ExpMon,0);
								formHandler.showFeedback(select_ExpYear,0);
							}else{
								formHandler.showFeedback(select_ExpMon,1);
								formHandler.showFeedback(select_ExpYear,1);
							}
						}
					}
				
				if (valid && formHandler.validStep1()) {
					document.getElementById('ficha').submit();
					with(document.getElementById('submitform')) {
						disabled  = true;
						value = "Enviando...";
					}
				}else{
					alert(msg);	
				}
				}else{valid=false; alert("Por favor, selecione Cartão de Crédito ou Débito Automático.");}
				
				
			}
}
	
Keyboard = {
		show : function(inputobj, msg) {
			
			
			//pega a div do Teclado
			var kb = document.getElementById('keyboard_container');
			kb.style.display = 'block';	
			//limpa o formulario
			document.getElementById('frmTeclado').reset();
			
			//Mostra o texto no cabeçalho do teclado
			document.getElementById('msgTeclado').innerHTML = msg;
			//seta as variaveis na classe, pois serão usadas por outros métodos
			//obj (campo invocador)
			Keyboard.inputobj = inputobj;
			//esconde os campos tipo select por causa do bug de z-index do IE
			Keyboard.toggleSelects(1);
			Keyboard.mask = "";
			Keyboard.maskedvalue = "";
			Keyboard.maskedfinalvalue = "";
			//Seta a máscara do campo
			Keyboard.setMask();
			document.getElementById('inputNumber').innerHTML= "<span style='color:silver'>"+Keyboard.mask+"</span>";
			//Disable the pad digits
			Keyboard.toggleDigits("disable");
			//IE tem problema pra reconhecer document.body.offsetHeight;
			//var bodyH = document.getElementById('page').offsetHeight;
			var bodyW = document.body.offsetWidth-20;
			//pega as coordenas do objeto invocador
			var pointX = Keyboard.findPosX(inputobj);
			var pointY = Keyboard.findPosY(inputobj);
			
			//pega as dimesoes do keyboard
			var padH = kb.offsetHeight;
			var padW = kb.offsetWidth;
			var margin = 10;
			if ((pointX+padW)+margin > bodyW) {
				kb.style.left = pointX-((pointX+padW)-bodyW)+"px";
				}else{
			kb.style.left = (pointX)+"px";
					}
			kb.style.top  = (pointY-padH)+"px";
			//scrolla a tela para o keyboard
			kb.scrollIntoView();
			//show the block_screen
			document.getElementById("block_screen").style.display = "block";
			document.getElementById("block_screen").style.height = document.height+"px";
			document.getElementById("block_screen").style.width = document.getElementById("page").offsetWidth+"px";

			},
		
		hide : function() {
			
			//mostra os campos tipo select
			Keyboard.toggleSelects(0);
			//Limpa o formulario
			document.getElementById('frmTeclado').reset();
			//Esconde o Teclado
			document.getElementById('keyboard_container').style.display = 'none'
			//Esconde screen_block
			document.getElementById("block_screen").style.display = "none";
		},
		
		press : function(value) {
				var separators = "-.";
				var inputedvalue = Keyboard.applyMask(Keyboard.mask,separators, Keyboard.maskedvalue, value);
				Keyboard.maskedvalue = inputedvalue;
				//to complete with zero at left;
				var len = (Keyboard.mask.length-Keyboard.maskedvalue.length);
				var maskright = Keyboard.mask.substring(Keyboard.maskedvalue.length, Keyboard.mask.length);
				Keyboard.maskedfinalvalue =  inputedvalue+maskright;
				document.getElementById("inputNumber").innerHTML = inputedvalue+"<span style='color:silver'>"+maskright+"</span>";
			//Enable the digits only in the digit field, in the final number, if have one.
			//if the last char is "-0" them have a digit field
			if(
			   (Keyboard.maskedvalue.length == Keyboard.maskedfinalvalue.length-2)
				&& (Keyboard.maskedfinalvalue.charAt(Keyboard.maskedfinalvalue.length-2) == "-")
				){
				//Caso Banco Real ou BB X, Caso Bradesco P em agencia e conta
				Keyboard.toggleDigits("enable");
			}
		},
		
		setMask : function(){
		
		if(Keyboard.inputobj.id == "contaCorrente") {
			switch(document.getElementById("sDebitAut").value){
				case '1' :
				Keyboard.mask = "00000000"; 
				break;
				case '33' :
				Keyboard.mask =  "00-000000-0";
				break;
				case '41' :
				Keyboard.mask =  "000000000-0"; 
				break;
				case '237' :
				Keyboard.mask = "0000000-0"; 
				break;
				case '356' :
				Keyboard.mask = "0000000-0"; 
				break;
				case '341' :
				Keyboard.mask = "00000-0"; 
				break;
				case '353' :
				Keyboard.mask = "0000000-0"; 
				break;
				case '409' :
				Keyboard.mask = "000000-0"; 
				break;
			}
		}else if(Keyboard.inputobj.id == "agencia") {
				
			switch(document.getElementById("sDebitAut").value){
				case '1' :
				Keyboard.mask = "0000";
				break;
				case '33' :
				Keyboard.mask = "0000";
				break;
				case '41' :
				Keyboard.mask = "0000";
				break;
				case '237' :
				Keyboard.mask = "0000";
				break;
				case '356' :
				Keyboard.mask = "0000";
				break;
				case '341' :
				Keyboard.mask = "0000";
				break;
				case '353' :
				Keyboard.mask = "0000";
				break;
				case '409' :
				Keyboard.mask = "0000";
				break;
			}
			/*
			1 BANCO DO BRASIL
			33 BANESPA
			41 BANRISUL
			237  BRADESCO
			275 REAL
			341 ITAU
			353 SANTANDER
			409 UNIBANCO
			*/
		}else if(Keyboard.inputobj.id == "CardNumber") {
			switch(document.getElementById("CardType").value){
				case '1' :
				Keyboard.mask = "0000-000000-00000";
				break;
				case '2' :
				Keyboard.mask  = "0000-0000-0000-0000";
				break;
				case '3' :
				Keyboard.mask  = "0000-000000-0000";
				break;
				case '4' :
				Keyboard.mask  = "0000-0000-0000-0000";
				break;
			}
		}
			/*
				1 AMEX
				2 MASTERCARD
				3 DINNERS
				4 VISA
			*/
			
		},
		applyMask : function(mask, separators, value, addvalue) {
					var regExp = new RegExp("["+separators+"]");
					var arraymask = mask.split(regExp);
					var maskednumber = "";
					var charlen = 0;
					var key = true;
					if(Keyboard.maskedvalue.length >= mask.length){
						return value;
					}
					for(var i = 0; i < arraymask.length; i++) {
							var len = ((arraymask[i].length+charlen)+i);
							charlen +=arraymask[i].length;
							if(value.length == len) {
							maskednumber += value+(mask.charAt(charlen+i))+addvalue;
							key = false;
							}
					}
					if(key) {
						maskednumber = value+addvalue;
					}
					
					/*if(maskednumber.length >= mask.length){
						document.getElementById("bt_send").disabled= false;
					}else{
						document.getElementById("bt_send").disabled= true;
					}*/
					
					return maskednumber;
		},
		send : function() {
			Keyboard.inputobj.value = Keyboard.maskedfinalvalue;
			Keyboard.hide();
		},
		clear : function() {
			document.frmTeclado.reset();
			document.getElementById('inputNumber').innerHTML= "<span style='color:silver'>"+Keyboard.mask+"</span>";
			Keyboard.inputobj.value = "";
			Keyboard.maskedvalue = "";
			Keyboard.maskedfinalvalue = "";
			//document.getElementById("bt_send").disabled= true;
		},	
	
	toggleSelects : function(key) {
		var select_elements =  document.getElementsByTagName("select");
		if (key) {
			for(var i = 0; i<select_elements.length;i++) {
			  document.getElementsByTagName("select")[i].style.visibility = "hidden";
			}
		}else{
			for(var i = 0; i<select_elements.length;i++) {
			  document.getElementsByTagName("select")[i].style.visibility = "visible";
			}
		}
	},
	toggleDigits :function(action) {
		var banco = document.getElementById("sDebitAut");
		
		if(action == "disable") {
				document.getElementById("KeyboardPButton").disabled= true;
				document.getElementById("KeyboardXButton").disabled= true;
		}else if (action == "enable"){
				if(banco.value == "275" || banco.value == "1" ) {
					if(Keyboard.inputobj.id == "agencia" || Keyboard.inputobj.id == "contaCorrente") {
						document.getElementById("KeyboardXButton").disabled= false;
					}else{
						document.getElementById("KeyboardXButton").disabled= true;
					}
				}else if(banco.value == "237" ){
					if(Keyboard.inputobj.id == "agencia" || Keyboard.inputobj.id == "contaCorrente") {
						document.getElementById("KeyboardPButton").disabled= false;
					}else{
						document.getElementById("KeyboardPButton").disabled= true;
					}
				}
		}

	},
	findPosX : function(obj){
		var curleft = 0;
		if (obj.offsetParent){
			while (obj.offsetParent){
				curleft += obj.offsetLeft;
				obj = obj.offsetParent;
			}
		}
		else if (obj.x) {
			curleft += obj.x;
			}
		return curleft;
	},
	findPosY : function(obj){
		var curtop = 0;
		if (obj.offsetParent){
			while (obj.offsetParent){
				curtop += obj.offsetTop;
				obj = obj.offsetParent;
			}
		}else if (obj.y) {
			curtop += obj.y;
			}
		return curtop;
	}
}