//#############################################################
//####                        Máscaras                     ####
//#### <input type="text" tipo="numerico" onclick="Mascaras.carregar();"> aqui so da para digitar numeros<br />
//#### <input type="text" tipo="numerico" onclick="Mascaras.carregar();" negativo=true> aqui so da para digitar numeros e no caso de precionar "-" umsinal de negativo vai aparecer<br />
//#### <input type="text" tipo="decimal" negativo="false" casasdecimais="3" onclick="Mascaras.carregar();"> números decimais<br />
//#### <input type="text" tipo="numerico" onclick="Mascaras.carregar();" mascara="##/##/####"> data<br />
//#### <input type="text" tipo="numerico" onclick="Mascaras.carregar();" mascara="###.###.###-##"> cpf<br />
//#############################################################
Mascaras = {
IsIE: navigator.appName.toLowerCase().indexOf('microsoft')!=-1,
AZ: /[A-Z]/i,
Acentos: /[À-ÿ]/i,
Num: /[0-9]/,
carregar: function(parte){
 var Tags = ['input','textarea'];
 if (typeof parte == "undefined") parte = document;
 for(var z=0;z<Tags.length;z++){
  Inputs=parte.getElementsByTagName(Tags[z]);
  for(var i=0;i<Inputs.length;i++)
   if(('button,image,hidden,submit,reset').indexOf(Inputs[i].type.toLowerCase())==-1)
    this.aplicar(Inputs[i]);
 }
},
aplicar: function(campo){
 tipo = campo.getAttribute('tipo');
 if (!tipo || campo.type == "select-one") return;
 orientacao = campo.getAttribute('orientacao');
 mascara = campo.getAttribute('mascara');
 if (tipo.toLowerCase() == "decimal"){
  orientacao = "esquerda";
  casasdecimais = campo.getAttribute('casasdecimais');
  tamanho = campo.getAttribute('maxLength');
  if (!tamanho || tamanho > 50)
   tamanho = 10;
  if (!casasdecimais)
   casasdecimais = 2;
  campo.setAttribute("mascara", this.geraMascaraDecimal(tamanho, casasdecimais));
  campo.setAttribute("tipo", "numerico");
  campo.setAttribute("orientacao", orientacao);
 }
 if (orientacao && orientacao.toLowerCase() == "esquerda") campo.style.textAlign = "right";
 if (mascara) campo.setAttribute("maxLength", mascara.length);
 if (tipo){
  campo.onkeypress = function(e){ return Mascaras.onkeypress(e?e:event); };
  campo.onkeyup = function(e){ Mascaras.onkeyup(e?e:event, campo) };
 }
 campo.setAttribute("snegativo", ((campo.value).substr(0,1) == "-" ? "s" : "n"));
},
onkeypress: function(e){
 KeyCode = this.IsIE ? event.keyCode : e.which;
 campo =  this.IsIE ? event.srcElement : e.target;
 readonly = campo.getAttribute('readonly');
 if (readonly) return;
 maxlength = campo.getAttribute('maxlength');
 pt = campo.getAttribute('pt');
 selecao = this.selecao(campo);
 if (selecao.length > 0 && KeyCode != 0){
  campo.value = ""; return true;
 }
 if (KeyCode == 0) return true;
 Char = String.fromCharCode(KeyCode);
 valor = campo.value;
 mascara = campo.getAttribute('mascara');
 if (KeyCode != 8){
  tipo = campo.getAttribute('tipo').toLowerCase();
  negativo = campo.getAttribute('negativo');
  if(negativo && KeyCode == 45){
   snegativo = campo.getAttribute('snegativo');
   snegativo = (snegativo == "s" ? "n" : "s");
   campo.setAttribute("snegativo", snegativo);
  }else{
   valor += Char
   if (tipo == "numerico" && Char.search(this.Num) == -1) return false;
   if (KeyCode != 32 && tipo == "caracter" && Char.search(this.AZ) == -1 && Char.search(this.Acentos) == -1) return false;
  }
 }
 if (mascara){
  this.aplicarMascara(campo, valor);
  return false;
 }
 return true;
},
onkeyup: function(e, campo){
 KeyCode = this.IsIE ? event.keyCode : e.which;
 if (KeyCode != 9 && KeyCode != 16 && KeyCode != 109){
  valor = campo.value;
  if (KeyCode == 8 && !this.IsIE) valor = valor.substr(0,valor.length-1);
  this.aplicarMascara(campo, valor);
 }
},
aplicarMascara: function(campo, valor){
 mascara = campo.getAttribute('mascara');
 if (!mascara) return;
 negativo = campo.getAttribute('negativo');
 snegativo = campo.getAttribute('snegativo');
 if (negativo && valor.substr(0,1) == "-") 
  valor = valor.substr(1,valor.length-1);
 orientacao = campo.getAttribute('orientacao');
 var i = 0;
 for(i=0;i<mascara.length;i++){
  caracter = mascara.substr(i,1);
  if (caracter != "#") valor = valor.replace(caracter, "");
 }
 retorno = "";
 if (orientacao != "esquerda"){
  contador = 0;
  for(i=0;i<mascara.length;i++){
   caracter = mascara.substr(i,1);
   if (caracter == "#"){
    retorno += valor.substr(contador,1);
    contador++;
   }else
    retorno += caracter;
   if(contador >= valor.length) break;
  }
 }else{
  contador = valor.length-1;
  for(i=mascara.length-1;i>=0;i--){
   if(contador < 0) break;
   caracter = mascara.substr(i,1);
   if (caracter == "#"){
    retorno = valor.substr(contador,1) + retorno;
    contador--;
   }else
    retorno = caracter + retorno;
  }
 }
 if (negativo && snegativo == "s")
  retorno = "-" + retorno;
 campo.value = retorno;
},
geraMascaraDecimal: function(tam, decimais){
 var retorno = ""; var contador = 0; var i = 0;
 decimais = parseInt(decimais);
 for (i=0;i<(tam-(decimais+1));i++){
  retorno = "#" + retorno;
  contador++;
  if (contador == 3){
   retorno = "." + retorno;
   contador=0;
  }
 }
 retorno = retorno + ",";
 for (i=0;i<decimais;i++) retorno += "#";
 return retorno;
},
selecao: function(campo){
 if (this.IsIE)
  return document.selection.createRange().text;
 else
  return (campo.value).substr(campo.selectionStart, (campo.selectionEnd - campo.selectionStart));
},
formataValor: function (valor, decimais){
 valor = valor.split('.');
 if (valor.length == 1) valor[1] = "";
 for(var i=valor[1].length;i<decimais;i++)
  valor[1] += "0"; 
 valor[1] = valor[1].substr(0,2);
 return (valor[0] + "." + valor[1]);
}
};

<!-- Begin
var Cards = new makeArray(8);
Cards[0] = new CardType("MasterCard", "51,52,53,54,55", "16");
var MasterCard = Cards[0];
Cards[1] = new CardType("VisaCard", "4", "13,16");
var VisaCard = Cards[1];
Cards[2] = new CardType("AmExCard", "34,37", "15");
var AmExCard = Cards[2];
Cards[3] = new CardType("DinersClubCard", "30,36,38", "14");
var DinersClubCard = 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();

/*************************************************************************\
CheckCardNumber(form)
function called when users click the "check" button.
\*************************************************************************/
function CheckCardNumber() {
var tmpyear;
if (form.CardNumber.value.length == 0) {
alert("Favor preencher o número do cartão.");
form.CardNumber.focus();
return false;
}
if (form.ExpYear.value.length == 0) {
alert("Favor preencher o ano de validade.");
form.ExpYear.focus();
return;
}
if (form.ExpYear.value < 21)
	tmpyear = "20" + form.ExpYear.value;
else {
	alert("O Ano de expiração não é valido.");
	return false;
}
tmpmonth = form.ExpMon.options[form.ExpMon.selectedIndex].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("Este cartão já expirou.");
return false;
}
card = form.CardType.options[form.CardType.selectedIndex].value;
var retval = eval(card + ".checkCardNumber(\"" + form.CardNumber.value +
"\", " + tmpyear + ", " + tmpmonth + ");");
cardname = "";
if (retval)



// comment this out if used on an order form
//alert("This card number appears to be valid.");
return true;


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(form.CardNumber.value, tmpyear, tmpmonth)) {
cardname = Cards[n].getCardType();
break;
   }
}
if (cardname.length > 0) {
	alert("Este parece um cartão da bandeira " + cardname + ", não um da bandeira " + card + ".");
	return false;
}
else {
alert("Este número de cartão não é válido.");
return false;
      }
   }
}
/*************************************************************************\
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;
}
//  End -->




/*************************************************************************\
abre pops de peça presente e indique a amigo
\*************************************************************************/
function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_showHideLayers() { //v6.0
  var i,p,v,obj,args=MM_showHideLayers.arguments;
  for (i=0; i<(args.length-2); i+=3) if ((obj=MM_findObj(args[i]))!=null) { v=args[i+2];
    if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v=='hide')?'hidden':v; }
    obj.visibility=v; }
}




/*************************************************************************\
FAZ O ENVIO DE PRESENTE
\*************************************************************************/
function valida_formulario_presente() {


		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 emailID=document.formulario_presente.email;
			var nomeID=document.formulario_presente.nome;
			var emailD1=document.formulario_presente.email1;
			var nomeD1=document.formulario_presente.nome1;
			var emailD2=document.formulario_presente.email2;
			var nomeD2=document.formulario_presente.nome2;
			
			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;
			}


	presente_enviar();
	
	
			function presente_enviar() {
			var_url = '';
			var_url = 'vst_ajax_presente.asp?no_class=titulo&acao=enviar';
			var_url = var_url + '&no_destino_email=' + document.formulario_presente.email1.value;
			var_url = var_url + '&no_destino=' + document.formulario_presente.nome1.value;
			var_url = var_url + '&no_origem=' + document.formulario_presente.nome.value;
			var_url = var_url + '&no_origem_email=' + document.formulario_presente.email.value;
			var_url = var_url + '&no_destino2=' + document.formulario_presente.nome2.value;
			var_url = var_url + '&no_destino_email2=' + document.formulario_presente.email2.value;
			var_url = var_url + '&cod_produto=' + document.formulario_presente.cod_produto.value;
			var_url = var_url + '&categoria=' + document.formulario_presente.categoria.value;
			
			//window.location = var_url
			
			var ajax = new Ajax.Updater(
					'presente_ajax',        // DIV id (XXX: doesnt work?)
					var_url,        // URL
					{                // options
					method:'get',
						onComplete: presente_showResponse
					});
			return false;
			}
			
			
		
		function presente_showResponse(req)
		{

            document.getElementById('presente_esconde').style.visibility='hidden';					
					
		return false;
		}

	return false;
}


/*************************************************************************\
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 emailID=document.formulario_indique.email;
			var nomeID=document.formulario_indique.nome;
			var emailD1=document.formulario_indique.email1;
			var nomeD1=document.formulario_indique.nome1;
			var emailD2=document.formulario_indique.email2;
			var nomeD2=document.formulario_indique.nome2;
			
			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;
			}


	indique_enviar();
	
	
			function indique_enviar() {
			var_url = '';
			var_url = 'vst_ajax_indique.asp?no_class=titulo&acao=enviar';
			var_url = var_url + '&no_destino_email=' + document.formulario_indique.email1.value;
			var_url = var_url + '&no_destino=' + document.formulario_indique.nome1.value;
			var_url = var_url + '&no_origem=' + document.formulario_indique.nome.value;
			var_url = var_url + '&no_origem_email=' + document.formulario_indique.email.value;
			var_url = var_url + '&no_destino2=' + document.formulario_indique.nome2.value;
			var_url = var_url + '&no_destino_email2=' + document.formulario_indique.email2.value;
			var_url = var_url + '&cod_produto=' + document.formulario_indique.cod_produto.value;
			var_url = var_url + '&categoria=' + document.formulario_indique.categoria.value;

			var ajax = new Ajax.Updater(
					'indique_ajax',        // DIV id (XXX: doesnt work?)
					var_url,        // URL
					{                // options
					method:'get',
						onComplete: indique_showResponse
					});
			return false;
			}
			
	
		
		function indique_showResponse(req)
		{
		
            document.getElementById('indique_esconde').style.visibility='hidden';					
		
		return false;
		}
}

