	
	function validaEsqueciSenha(){
		var form = document.senha;
		if (form.email.value == "") {
			alert("O E-MAIL no pode ser em branco!"); form.email.focus(); return false;
		}
		if (!IsValidEmail(form.email.value)) {
			alert("O E-MAIL  inválido!"); form.email.focus(); return false;
		}
	}
	
	
	
	
	function validaLogar(){
		
			if (document.form_login.login.value == "") {
				alert("O E-MAIL não pode ser em branco!"); document.form_login.login.focus(); return false;
			}
			if (document.form_login.senha.value == "") {
				alert("A SENHA no pode ser em branco!"); document.form_login.senha.focus(); return false;
			}
		//ajaxed.callback('VerificaLogin', 'retorno_login', {login: document.form_login.login.value, senha: document.form_login.senha.value});
	}
	
	
	
	
	function validaLogarAjaxed(form, var_funcaoOK, var_funcaoErr, var_retorno){
		if (form.login.value == "") {
			alert("O LOGIN não pode ser em branco!"); form.login.focus(); return false;
		} else {
			var txt = form.login.value;
			
			if ((form.login.value.length != 0) && ((form.login.value.indexOf("@") < 1) || (form.login.value.indexOf('.') < 7))){
				alert('E-mail incorreto');
				form.login.focus();
			}
		}
		if (form.senha.value == "") {
			alert("A SENHA não pode ser em branco!"); form.senha.focus(); return false;
		}
		
		ajaxed.callback('ExecutaLogin',var_retorno,{login: form.login.value, senha: form.senha.value, funcaoOK: var_funcaoOK, funcaoErr: var_funcaoErr, div_retorno: var_retorno, ic_manter_conectado: form.ic_manter_conectado.value})
	}




	function validaDigitaCep(){
		var var_SSL = document.getElementById('var_SSL').value
		document.cesta.action = var_SSL + "fecha_pedido.asp"
		
		if (document.getElementById('cep1') != null){
			if (document.getElementById('cep1').value == '' && document.getElementById('cep2').value == ''){
				alert('Favor inserir seu CEP e clique em calcular.');
				document.getElementById('cep1').focus();
				return false
			}
			if (document.frm_forma_entrega.valor_frete[0].checked == false && document.frm_forma_entrega.valor_frete[1].checked == false && document.frm_forma_entrega.valor_frete[2].checked == false){
				alert('Favor escolher a forma de entrega');
				return false
			}else{
				document.cesta.submit();
			}
		}else{
			document.cesta.submit();
		}
		
		
	}


function checaDados(){
	var Letras = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzfSOZsozY";
	var Espacos = " \t\r\n\f";
	var Numeros = "0123456789";
	
	if (document.cadastro.preenche.value == "sim") {
		if (document.cadastro.txt_nome.value == "") {
			alert("O campo Nome não pode ser em branco!");
			document.cadastro.txt_nome.focus();
			return false;
			}
		
		if (document.cadastro.dia.value == "") {
			
			alert("O campo data de nascimento não pode ser em branco!");
			document.cadastro.dia.focus();
			return false;
			}
		
		if (document.cadastro.mes.value == "") {
			
			alert("O campo data de nascimento não pode ser em branco!");
			document.cadastro.mes.focus();
			return false;
			}
		
		if (document.cadastro.ano.value == "") {
			
			alert("O campo data de nascimento não pode ser em branco!");
			document.cadastro.ano.focus();
			return false;
			}
			
		if (document.cadastro.txt_cpf_cgc.value == "") {
			
			alert("O campo CPF/CGC não pode ser em branco!");
			document.cadastro.txt_cpf_cgc.focus();
			return false;
			}
		
		if (!Verifica_CPF())
			return false;
			
		if (document.cadastro.txt_email.value == "") {
			
			alert("O campo E-mail não pode ser em branco!");
			document.cadastro.txt_email.focus();
			return false;
			}
		if (!IsValidEmail(document.cadastro.txt_email.value)){
			alert("E-mail inválido!");
			document.cadastro.txt_email.focus();
			return false;
		}
		
			
			
		if (document.cadastro.txt_senha.value == "") {
			
			alert("O campo senha não pode ser em branco!");
			document.cadastro.txt_senha.focus();
			return false;
			}
				
		if (document.cadastro.txt_senha2.value == "") {
			
			alert("O campo senha não pode ser em branco!");
			document.cadastro.txt_senha2.focus();
			return false;
			}
			
		if (document.cadastro.txt_senha2.value != document.cadastro.txt_senha.value) {
			
			alert("A Senha deve ser igual!");
			document.cadastro.txt_senha2.focus();
			return false;
			}	
		
		
		if (document.cadastro.txt_cep.value == "") {
			
			alert("O CEP não pode ser em branco!");
			document.cadastro.txt_cep.focus();
			return false;
			}
		
		
		//alert(document.cadastro.txt_rua == undefined)
		if (document.cadastro.txt_rua == undefined) {
			//alert('teste')
			//alert(document.cadastro.txt_cep.value)
			alert("Favor conferir o endereço.")
			ajaxed.callback('MontaEndCadastro', 'cadastro_endereco', {txt_cep: ''+document.cadastro.txt_cep.value+''});
			return false;
		}
		//return false;
			if (document.cadastro.txt_rua.value == "") {
				
				alert("O campo rua não pode ficar em Branco");
				document.cadastro.txt_rua.focus();
				return false;
				}
			
			if (document.cadastro.txt_numero.value == "") {
				
				alert("O campo número não pode ficar em Branco!");
				document.cadastro.txt_numero.focus();
				return false;
				}
			
			if (document.cadastro.txt_bairro.value == "") {
				
				alert("O campo Bairro não pode ser em branco!");
				document.cadastro.txt_bairro.focus();
				return false;
				} 
			
			
			if (document.cadastro.txt_cidade.value == "") {
				
				alert("O campo cidade não pode ser em branco!");
				document.cadastro.txt_cidade.focus();
				return false;
				}
			
			if (document.cadastro.cod_estado.value == "") {
				
				alert("O campo estado não pode ser em branco!");
				document.cadastro.cod_estado.focus();
				return false;
				}
		
		
		if (document.cadastro.txt_ddd_telefone.value == "") {
			
			alert("O campo DDD não pode ser em branco!");
			document.cadastro.txt_ddd_telefone.focus();
			return false;
			}

		if (document.cadastro.txt_telefone.value == "") {
			
			alert("O campo telefone não pode ser em branco!");
			document.cadastro.txt_telefone.focus();
			return false;
			}
	}
}

function Verifica_CPF() {
	s = document.cadastro.txt_cpf_cgc.value;
	if (s == "") {

		alert("Por favor, forme seu cpf.");
		document.cadastro.txt_cpf_cgc.focus();
		return false;

	}

	var varFirstChr = s.charAt(0);
	var vaCharCPF = false;

	for ( var i=0; i<=10; i++ ) { 
		var c = s.charAt(i)
         if (s.charAt(i) < "0" || s.charAt(i) > "9")
		 { 
		alert("CPF inválido! Preencha o CPF utilizando apenas os números." );
		document.cadastro.txt_cpf_cgc.value="";
		document.cadastro.txt_cpf_cgc.focus();
		return false;
	     } 
             if( c!=varFirstChr ) vaCharCPF = true; 
	} 

        if( !vaCharCPF ) { 
		alert("CPF inválido!");
		document.cadastro.txt_cpf_cgc.value="";
		document.cadastro.txt_cpf_cgc.focus();
		return false;
        } 	

	soma=0;
	for ( i=0; i<9; i++ ) { 
		soma += (10-i) * ( eval(s.charAt(i)) );	
	} 
	digito_verificador = 11-(soma % 11);
	if ( (soma % 11) < 2 ) digito_verificador = 0;
	if ( eval(s.charAt(9)) != digito_verificador ) {
		alert("CPF inválido!" );
		document.cadastro.txt_cpf_cgc.value="";
		document.cadastro.txt_cpf_cgc.focus();
		return false;
	} 
	soma=0;
	for ( i=0; i<9; i++ ) {
		soma += (11-i) * ( eval(s.charAt(i)) ); 
	}
	soma += 2 * ( eval(s.charAt(9)) );
	digito_verificador = 11-(soma % 11);
	if ( (soma % 11) < 2 ) digito_verificador = 0;
	if ( eval(s.charAt(10)) != digito_verificador ) { 
		alert("CPF inválido!" ); 
		document.cadastro.txt_cpf_cgc.value="";
		document.cadastro.txt_cpf_cgc.focus();
		return false; 
	} 
	
	return true;

}

// FIM Verifica CPF

//#############################################################
//####    Verifica  formatação do campo como aaa@bbb.cc    ####
//####         Retorna true se for um E-Mail valido        ####
//####        Retorna false nao for um E-Mail valido       ####
//#############################################################
function IsValidEmail( Value ){
	var i, Current, Tmp
	var Array = Value.split( '@' , 3 );
	
	// Se tiver mais ou menos que 1 Arroba ou nao tiver nada antes ou apos o Arroba
	if( Array.length != 2 || Array[0] == '' || Array[1] == '' )
		return false;
	
	Tmp = Array[0];
	// Se contiver caracteres especiais antes do Arroba
	for(i=0; i < Tmp.length ;i++)
		{
		Current =  Tmp.charAt(i);
		if( (Current < '0' || Current > '9') && (Current < 'A' || Current > 'Z') && (Current < 'a' || Current > 'z') && Current != '_' && Current != '-' && Current != '.' )
			return false;			
		}
	
	Tmp = Array[1];
	// Se contiver caracteres especiais depois do Arroba
	for(i=0; i < Tmp.length ;i++)
		{
		Current =  Tmp.charAt(i);
		if( (Current < '0' || Current > '9') && (Current < 'A' || Current > 'Z') && (Current < 'a' || Current > 'z') && Current != '.' && Current != '_' && Current != '-' )
			return false;			
		}
	
	Tmp = Tmp.split( '.' , 4 );
	// Se depois do arroba existir menos de 2 ou mais de 3 pontos
	if( Tmp.length != 2 && Tmp.length != 3 )
		return false;
	
	// Se depois do arroba existir menos de 2 ou mais de 3 pontos
	if( Tmp.length == 2 && (Tmp[0] == '' || Tmp[1] == '') )
		return false;
	
	// Se depois do arroba existir menos de 2 ou mais de 3 pontos
	if( Tmp.length == 3 && (Tmp[0] == '' || Tmp[1] == '' || Tmp[2] == '') )
		return false;
	
	return true
}




	function isValidCreditCardNumber(cardNumber, cardType){
		var isValid = false;
		var ccCheckRegExp = /[^\d ]/;
		isValid = !ccCheckRegExp.test(cardNumber);
		if (isValid){
			var cardNumbersOnly = cardNumber.replace(/ /g,"");
			var cardNumberLength = cardNumbersOnly.length;
			var lengthIsValid = false;
			var prefixIsValid = false;
			var prefixRegExp;
		switch(cardType){
			case "Mastercard":
				lengthIsValid = (cardNumberLength == 16);
				prefixRegExp = /^5[1-5]/;
			break;
			case "Visa":
				lengthIsValid = (cardNumberLength == 16 || cardNumberLength == 13);
				prefixRegExp = /^4/;
			break;
			case "Amex":
				lengthIsValid = (cardNumberLength == 15);
				prefixRegExp = /^3(4|7)/;
			break;
			case "Diners":
				lengthIsValid = (cardNumberLength == 14);
				prefixRegExp = /^3(4|7)/;
			break;
			default:
				prefixRegExp = /^$/;
				alert("Card type not found");
		}
	
		prefixIsValid = prefixRegExp.test(cardNumbersOnly);
		isValid = prefixIsValid && lengthIsValid;
		}
		if (isValid){
			var numberProduct;
			var numberProductDigitIndex;
			var checkSumTotal = 0;
			for (digitCounter = cardNumberLength - 1; digitCounter >= 0; digitCounter--){
				checkSumTotal += parseInt (cardNumbersOnly.charAt(digitCounter));
				digitCounter--;
				numberProduct = String((cardNumbersOnly.charAt(digitCounter) * 2));
				for (var productDigitCounter = 0; productDigitCounter < numberProduct.length; productDigitCounter++){
					checkSumTotal += parseInt(numberProduct.charAt(productDigitCounter));
				}
			}
			isValid = (checkSumTotal % 10 == 0);
		}
	
		return isValid;
	}





function checa() {

	forma		= document.cesta.frma_pagamento.value;
	//alert(forma);
	
	if (document.cesta.cd_endereco.value == undefined){
		alert("Favor escolher o endereço de entrega");
		return false;
	}else{
		if (document.cesta.cd_endereco.value == ''){
			alert("Favor escolher o endereço de entrega");
			return false;
		}
	}
	//alert(document.cesta.cd_endereco.value)
	//return false;
	
	if (forma == 'cc') {
		
		//////********************************************************************//////////
			var Cards = new makeArray(8);
				Cards[0] = new CardType("Mastercard", "51,52,53,54,55", "16");
			var Mastercard = Cards[0];
				Cards[1] = new CardType("Visa", "4", "13,16");
			var Visa = Cards[1];
				Cards[2] = new CardType("Amex", "34,37", "15");
			var Amex = Cards[2];
				Cards[3] = new CardType("Diners", "30,36,38", "14");
			var Diners = Cards[3];
				Cards[4] = new CardType("DiscoverCard", "6011", "16");
			var DiscoverCard = Cards[4];
				Cards[5] = new CardType("enRouteCard", "2014,2149", "15");
			var enRouteCard = Cards[5];
				Cards[6] = new CardType("JCBCard", "3088,3096,3112,3158,3337,3528", "16");
			var JCBCard = Cards[6];
			var LuhnCheckSum = Cards[7] = new CardType();
		//////********************************************************************//////////


		bandeira	= document.getElementById('fp_cc')
		noTitular	= document.getElementById('cartao_titular')
		anoValidade	= document.getElementById('validade_ano')
		mesValidade	= document.getElementById('validade_mes')
		noCartao	= document.getElementById('nr_cartao_dig')
		noDigito	= document.getElementById('nr_digito_dig')
		noParcelas	= document.getElementById('nr_parcela_cc')


		//////********************************************************************//////////
				var var_CardNumber = noCartao;
				var var_ExpYear = anoValidade;
				var var_ExpMon = mesValidade;
				var var_CardType = bandeira;
		//////********************************************************************//////////
				

		//alert(bandeira);
	
		if (noTitular.value == ''){
			alert("Favor informar o Titular do Cartão");
			noTitular.focus();
			return false;
		}else{
			document.cesta.ds_titular.value	= noTitular.value;
		}
		
		
		//////********************************************************************//////////
				var tmpyear;
				if (var_ExpYear.value.length == 0) {
					alert("Informe a data de validade.");
					var_ExpYear.focus();
					return false;
				}
				
				if (var_ExpYear.value > 96)
					tmpyear = "19" + var_ExpYear.value;
				else if (var_ExpYear.value < 21)
					tmpyear = "20" + var_ExpYear.value;
				else {
					alert("Data de vencimento inválida.");
					return false;
				}
				document.cesta.nr_validade_mes.value = mesValidade.value;
				document.cesta.nr_validade_ano.value = anoValidade.value;
				
				if (var_CardNumber.value.length == 0) {
					alert("Informe seu número de cartão de crédito.");
					var_CardNumber.focus();
					return false;
				}
				
				//alert(var_CardType.value);
				
				tmpmonth = mesValidade.value;
				// The following line doesn't work in IE3, you need to change it
				// to something like "(new CardType())...".
				// if (!CardType().isExpiryDate(tmpyear, tmpmonth)) {
				if (!(new CardType()).isExpiryDate(tmpyear, tmpmonth)) {
					alert("Cartão vencido.");
					return false;
				}
				//card = form.CardType.options[form.CardType.selectedIndex].value;
				card = var_CardType.value.split(" ");
				var retval = eval(card[0] + ".checkCardNumber(\"" + var_CardNumber.value +
				"\", " + tmpyear + ", " + tmpmonth + ")");
				cardname = "";
				
				
				if (retval){
					
					
					
					// comment this out if used on an order form
					//alert("Cartão válido.");
					document.cesta.nr_cartao.value	= noCartao.value;
					document.cesta.nome_bandeira.value = bandeira.value;
				
				}else {
					// The cardnumber has the valid luhn checksum, but we want to know which
					// cardtype it belongs to.
					for (var n = 0; n < Cards.size; n++) {
						if (Cards[n].checkCardNumber(var_CardNumber.value, tmpyear, tmpmonth)) {
							cardname = Cards[n].getCardType();
							break;
						   }
					}
					if (cardname.length > 0) {
						alert("Este cartão é " + cardname + " e não " + card + ".");
						return false;
					}else {
						alert("Cartão inválido.");
						return false;
					}
				}
		//////********************************************************************//////////




		/*
		if (anoValidade.value == ''){
			alert("Favor informar o ano de validade do Cartão");
			anoValidade.focus();
			return false;
		}else{
			if (anoValidade.value != parseFloat(anoValidade.value)){
				alert("Favor informar o ano de validade do Cartão");
				anoValidade.focus();
				return false;
			}else{
				document.cesta.nr_validade_mes.value = document.getElementById('validade_mes').value;
				document.cesta.nr_validade_ano.value = anoValidade.value;
			}
		}
		*/
	
		/*
		if (bandeira.value == 'Diners'){
			var nu_digitos = 14
		}else if(bandeira.value == 'Amex'){
			var nu_digitos = 15
		}else{
			var nu_digitos = 16
		}
		*/
	//alert(nu_digitos);
	
		//alert(bandeira.value)
		/*
		if (noCartao.value == ''){
			alert('Insira seu número de cartão de crédito');
			noCartao.focus();
			return false;
		}else{
			//alert(isValidCreditCardNumber(noCartao.value, bandeira.value))
			if (isValidCreditCardNumber(noCartao.value, bandeira.value) == false){
				alert('Número do cartão inválido');
				noCartao.focus();
				return false;
			}else{
				document.cesta.nr_cartao.value	= noCartao.value;
				document.cesta.nome_bandeira.value = bandeira.value;
			}
			
		}
		*/
	
		/*
		/// VALIDAÇÃO DE CARTÕES ANTIGA
		if (noCartao.value.length < nu_digitos){
			alert('Número do cartão inválido');
			noCartao.focus();
			return false;
		}else{
			if (noCartao.value == ''){
				alert("Favor informar o nº do Cartão");
				noCartao.focus();
				return false;
			}else{
				if (noCartao.value != parseFloat(noCartao.value)){
					alert("Favor informar o nº do Cartão");
					noCartao.focus();
					return false;
				}else{
					document.cesta.nr_cartao.value	= noCartao.value;
					document.cesta.nome_bandeira.value = bandeira.value;
				}
			}
		}
		*/



		if (noDigito.value.length < 3){
			alert('Dígito do cartão inválido');
			noDigito.focus();
			return false;
		}else{
			if (noDigito.value == ''){
				alert("Favor informar o nº do dígito do Cartão");
				noDigito.focus();
				return false;
			}else{
				if (noDigito.value != parseFloat(noDigito.value)){
					alert("Favor informar o nº do dígito do Cartão");
					noDigito.focus();
					return false;
				}else{
					document.cesta.nr_digito.value	= noDigito.value;
				}
			}
		}

	
		/*
		if (noParcelas.value == ''){
			alert("Favor informar o n de parcelas");
			noParcelas.focus();
			return false
		}else{
			if (noParcelas.value != parseFloat(noParcelas.value)){
				alert("Favor informar o n de parcelas");
				noParcelas.focus();
				return false;
			}else{
				*/
				//document.cesta.nr_parcela.value	= noParcelas.value;
				//////////////////////////////////////////
				//	alert("Passou!");
						document.cesta.submit();
				//////////////////////////////////////////
				/*
			}
		}
		*/
	
		
	}else{
		if (document.getElementById('frma_pagamento').value == ''){
			alert("Favor escolher a forma de pagamento");
			return false;
		}else{
				//////////////////////////////////////////
				//	alert("Passou!");
						document.cesta.submit();
				//////////////////////////////////////////
		}
	}
}




function validaFale(){
	var ObjForm = document.form
	//validaEmail(document.form.email);
	if (ObjForm.nome.value == ''){
		alert("Favor preencher o campo Nome");
		ObjForm.nome.focus();
		return false;
	}
	if (ObjForm.Assunto.value == ''){
		alert("Favor escolher o Assunto");
		ObjForm.Assunto.focus();
		return false;
	}
	if (ObjForm.Observacao.value == ''){
		alert("Favor preencher o campo Mensagem");
		ObjForm.Observacao.focus();
		return false;
	}
	if (ObjForm.email.value == ''){
		alert("Favor preencher o campo E-mail");
		ObjForm.email.focus();
		return false;
	}else{
		return validaEmail(ObjForm.email);
	}
	
}





/*************************************************************************\
FAZ O ENVIO DE INDIQUE
\*************************************************************************/
function valida_formulario_indique() {


		function echeck(str) {
				var at="@"
				var dot="."
				var lat=str.indexOf(at)
				var lstr=str.length
				var ldot=str.indexOf(dot)
				
				var var_erro = 'E-mail Inválido.';
				
				if (str.indexOf(at)==-1){
				alert(var_erro);
				return false;
				}

				if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){
				alert(var_erro);
				return false;
				}

				if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr){
				alert(var_erro);
					return false;
				}

				if (str.indexOf(at,(lat+1))!=-1){
				alert(var_erro);
					return false;
				}

				if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){
				alert(var_erro);
					return false;
				}

				if (str.indexOf(dot,(lat+2))==-1){
				alert(var_erro);
					return false;
				}
				
				if (str.indexOf(" ")!=-1){
				alert(var_erro);
					return false;
				}

				return true;	
			}


			var nomeID=document.getElementById('indique_nome');
			var emailID=document.getElementById('indique_email');
			var nomeD1=document.getElementById('indique_nome1');
			var emailD1=document.getElementById('indique_email1');
			var nomeD2=document.getElementById('indique_nome2');
			var emailD2=document.getElementById('indique_email2');
			
			if (nomeID.value == ""){
				alert("Favor colocar seu nome.");
				nomeID.focus();
				return false;
			}
			if ((emailID.value==null)||(emailID.value=="")){
				alert("Por favor digite seu email.");
				emailID.focus();
				return false;
			}
			if (echeck(emailID.value)==false){
				emailID.value="";
				emailID.focus();
				return false;
			}
			
			if (nomeD1.value == ""){
				alert("Favor colocar o nome do(a) seu(a) amigo(a).");
				nomeD1.focus();
				return false;
			}
			if ((emailD1.value==null)||(emailD1.value=="")){
				alert("Por favor digite o e-mail do destinatário.");
				emailD1.focus();
				return false;
			}
			if (echeck(emailD1.value)==false){
				emailD1.value="";
				emailD1.focus();
				return false;
			}

	ajaxed.callback('EnvieAmigo', 'indica_retorno', {indique_nome: nomeID.value, indique_email: emailID.value, indique_nome1: nomeD1.value, indique_email1: emailD1.value, indique_nome2: nomeD2.value, indique_email2: emailD2.value, cod_produto: document.getElementById('cd_produto').value})
}


function validaLista(){
	var form = document.lista;
	if (form.ds_nome1.value == "") {
		alert("O NOME não pode ser em branco!"); form.ds_nome1.focus(); return false;
	}
	if (form.ds_email1.value == "") {
		alert("O E-MAIL não pode ser em branco!"); form.ds_email1.focus(); return false;
	}
		if (!IsValidEmail(form.ds_email1.value)) {
			alert("O E-MAIL inválido!"); form.ds_email1.focus(); return false;
		}
}

















//////////////////////////////////////////////////////////////////////////////
///// REGRAS DE VALIDAÇÃO DE CARTÃO DE CRÉDITO ///////////////////////////////

			/*************************************************************************\
			Object CardType([String cardtype, String rules, String len, int year, 
													int month])
			cardtype    : type of card, eg: MasterCard, Visa, etc.
			rules       : rules of the cardnumber, eg: "4", "6011", "34,37".
			len         : valid length of cardnumber, eg: "16,19", "13,16".
			year        : year of expiry date.
			month       : month of expiry date.
			eg:
			var VisaCard = new CardType("Visa", "4", "16");
			var AmExCard = new CardType("AmEx", "34,37", "15");
			\*************************************************************************/
			function CardType() {
			var n;
			var argv = CardType.arguments;
			var argc = CardType.arguments.length;
			
			this.objname = "object CardType";
			
			var tmpcardtype = (argc > 0) ? argv[0] : "CardObject";
			var tmprules = (argc > 1) ? argv[1] : "0,1,2,3,4,5,6,7,8,9";
			var tmplen = (argc > 2) ? argv[2] : "13,14,15,16,19";
			
			this.setCardNumber = setCardNumber;  // set CardNumber method.
			this.setCardType = setCardType;  // setCardType method.
			this.setLen = setLen;  // setLen method.
			this.setRules = setRules;  // setRules method.
			this.setExpiryDate = setExpiryDate;  // setExpiryDate method.
			
			this.setCardType(tmpcardtype);
			this.setLen(tmplen);
			this.setRules(tmprules);
			if (argc > 4)
			this.setExpiryDate(argv[3], argv[4]);
			
			this.checkCardNumber = checkCardNumber;  // checkCardNumber method.
			this.getExpiryDate = getExpiryDate;  // getExpiryDate method.
			this.getCardType = getCardType;  // getCardType method.
			this.isCardNumber = isCardNumber;  // isCardNumber method.
			this.isExpiryDate = isExpiryDate;  // isExpiryDate method.
			this.luhnCheck = luhnCheck;// luhnCheck method.
			return this;
			}
			
			/*************************************************************************\
			boolean checkCardNumber([String cardnumber, int year, int month])
			return true if cardnumber pass the luhncheck and the expiry date is
			valid, else return false.
			\*************************************************************************/
			function checkCardNumber() {
			var argv = checkCardNumber.arguments;
			var argc = checkCardNumber.arguments.length;
			var cardnumber = (argc > 0) ? argv[0] : this.cardnumber;
			var year = (argc > 1) ? argv[1] : this.year;
			var month = (argc > 2) ? argv[2] : this.month;
			
			this.setCardNumber(cardnumber);
			this.setExpiryDate(year, month);
			
			if (!this.isCardNumber())
			return false;
			if (!this.isExpiryDate())
			return false;
			
			return true;
			}
			/*************************************************************************\
			String getCardType()
			return the cardtype.
			\*************************************************************************/
			function getCardType() {
			return this.cardtype;
			}
			/*************************************************************************\
			String getExpiryDate()
			return the expiry date.
			\*************************************************************************/
			function getExpiryDate() {
			return this.month + "/" + this.year;
			}
			/*************************************************************************\
			boolean isCardNumber([String cardnumber])
			return true if cardnumber pass the luhncheck and the rules, else return
			false.
			\*************************************************************************/
			function isCardNumber() {
			var argv = isCardNumber.arguments;
			var argc = isCardNumber.arguments.length;
			var cardnumber = (argc > 0) ? argv[0] : this.cardnumber;
			if (!this.luhnCheck())
			return false;
			
			for (var n = 0; n < this.len.size; n++)
			if (cardnumber.toString().length == this.len[n]) {
			for (var m = 0; m < this.rules.size; m++) {
			var headdigit = cardnumber.substring(0, this.rules[m].toString().length);
			if (headdigit == this.rules[m])
			return true;
			}
			return false;
			}
			return false;
			}
			

			/*************************************************************************\
			boolean isExpiryDate([int year, int month])
			return true if the date is a valid expiry date,
			else return false.
			\*************************************************************************/
			function isExpiryDate() {
			var argv = isExpiryDate.arguments;
			var argc = isExpiryDate.arguments.length;
			
			year = argc > 0 ? argv[0] : this.year;
			month = argc > 1 ? argv[1] : this.month;
			
			if (!isNum(year+""))
			return false;
			if (!isNum(month+""))
			return false;
			today = new Date();
			expiry = new Date(year, month);
			if (today.getTime() > expiry.getTime())
			return false;
			else
			return true;
			}
			
			/*************************************************************************\
			boolean isNum(String argvalue)
			return true if argvalue contains only numeric characters,
			else return false.
			\*************************************************************************/
			function isNum(argvalue) {
			argvalue = argvalue.toString();
			
			if (argvalue.length == 0)
			return false;
			
			for (var n = 0; n < argvalue.length; n++)
			if (argvalue.substring(n, n+1) < "0" || argvalue.substring(n, n+1) > "9")
			return false;
			
			return true;
			}
			
			/*************************************************************************\
			boolean luhnCheck([String CardNumber])
			return true if CardNumber pass the luhn check else return false.
			Reference: http://www.ling.nwu.edu/~sburke/pub/luhn_lib.pl
			\*************************************************************************/
			function luhnCheck() {
			var argv = luhnCheck.arguments;
			var argc = luhnCheck.arguments.length;
			
			var CardNumber = argc > 0 ? argv[0] : this.cardnumber;
			
			if (! isNum(CardNumber)) {
			return false;
			  }
			
			var no_digit = CardNumber.length;
			var oddoeven = no_digit & 1;
			var sum = 0;
			
			for (var count = 0; count < no_digit; count++) {
			var digit = parseInt(CardNumber.charAt(count));
			if (!((count & 1) ^ oddoeven)) {
			digit *= 2;
			if (digit > 9)
			digit -= 9;
			}
			sum += digit;
			}
			if (sum % 10 == 0)
			return true;
			else
			return false;
			}
			
			/*************************************************************************\
			ArrayObject makeArray(int size)
			return the array object in the size specified.
			\*************************************************************************/
			function makeArray(size) {
			this.size = size;
			return this;
			}
			
			/*************************************************************************\
			CardType setCardNumber(cardnumber)
			return the CardType object.
			\*************************************************************************/
			function setCardNumber(cardnumber) {
			this.cardnumber = cardnumber;
			return this;
			}
			
			/*************************************************************************\
			CardType setCardType(cardtype)
			return the CardType object.
			\*************************************************************************/
			function setCardType(cardtype) {
			this.cardtype = cardtype;
			return this;
			}
			
			/*************************************************************************\
			CardType setExpiryDate(year, month)
			return the CardType object.
			\*************************************************************************/
			function setExpiryDate(year, month) {
			this.year = year;
			this.month = month;
			return this;
			}
			
			/*************************************************************************\
			CardType setLen(len)
			return the CardType object.
			\*************************************************************************/
			function setLen(len) {
			// Create the len array.
			if (len.length == 0 || len == null)
			len = "13,14,15,16,19";
			
			var tmplen = len;
			n = 1;
			while (tmplen.indexOf(",") != -1) {
			tmplen = tmplen.substring(tmplen.indexOf(",") + 1, tmplen.length);
			n++;
			}
			this.len = new makeArray(n);
			n = 0;
			while (len.indexOf(",") != -1) {
			var tmpstr = len.substring(0, len.indexOf(","));
			this.len[n] = tmpstr;
			len = len.substring(len.indexOf(",") + 1, len.length);
			n++;
			}
			this.len[n] = len;
			return this;
			}
			
			/*************************************************************************\
			CardType setRules()
			return the CardType object.
			\*************************************************************************/
			function setRules(rules) {
			// Create the rules array.
			if (rules.length == 0 || rules == null)
			rules = "0,1,2,3,4,5,6,7,8,9";
			  
			var tmprules = rules;
			n = 1;
			while (tmprules.indexOf(",") != -1) {
			tmprules = tmprules.substring(tmprules.indexOf(",") + 1, tmprules.length);
			n++;
			}
			this.rules = new makeArray(n);
			n = 0;
			while (rules.indexOf(",") != -1) {
			var tmpstr = rules.substring(0, rules.indexOf(","));
			this.rules[n] = tmpstr;
			rules = rules.substring(rules.indexOf(",") + 1, rules.length);
			n++;
			}
			this.rules[n] = rules;
			return this;
			}
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////

