//

function elemStyle(elem)
{
	var el;
	if (document.getElementById) el = document.getElementById(elem).style;
	else if (document.all)       el = document.all[elem].style;
	else return null;
	return el;
}

function showElem(elem) {elemStyle(elem).visibility = 'visible';}
function hideElem(elem) {elemStyle(elem).visibility = 'hidden';}

function alterElem (c,InElem,ImElem)
{
 var i;
 for (i=0; i<=ImElem; i++)
 {
   if (i==InElem) showElem(c+InElem);
	 else {
	  hideElem(c+i);
		    } 
 }
}

//

function textOn(txt){
document.getElementById(txt).className="textOn";
}
function textNormal(txt){
document.getElementById(txt).className="text";
}

function checkOn(txt){
document.getElementById(txt).className="checkOn";
}
function checkNormal(txt){
document.getElementById(txt).className="check";
}



// Mask Fields

function applyMask(field,mask,jump)
/*
x = numbers
a = letters
w = x+a
*/  
{
  if (!window.event) return
  v = field.value;
  k = String.fromCharCode(event.keyCode);
  if (v.length+1 > mask.length) return false;
  ok = false;
  i = v.length;
  switch (mask.charAt(i)) {
    case 'x':
      if (/[0-9]/i.test(k)) ok=true;
      break;
    case 'a':
      if (/[a-z]/i.test(k)) ok=true;
      break;
    case 'w':
      if (/[\w]/i.test(k)) ok=true;
      break;
    default:
      if (k==mask.charAt(i)) ok=true;
  }
  if (ok) {
    v += k;
    while (!/[xaw]/i.test(mask.charAt(++i)) && i<mask.length) v += mask.charAt(i);
    }
  field.value = v;
  if (jump && field.value.length==mask.length) {
    e = field;
    do { e = e.nextSibling; } while (e && e.nodeName.toLowerCase()!='input');
    if (e) e.focus();
  }
  return false;
}

// cpf & cnpj functions ------------------------------------------------

function Calcular_Peso(iPosicao, iPeso) {
//Pesos: CPF 11, CNPJ 9
  return (iPosicao % (iPeso - 1)) + 2;
}

function CalcularDV(sCampo, iPeso) {
  var iTamCampo;
  var iPosicao, iDigito;
  var iSoma1 = 0;
  var iSoma2=0;
  var iDV1, iDV2;
    
  iTamCampo = sCampo.length;
  for (iPosicao=1; iPosicao<=iTamCampo; iPosicao++){
    iDigito = sCampo.substr(iPosicao-1, 1);
    iSoma1 = parseInt(iSoma1,10) + parseInt((iDigito * Calcular_Peso(iTamCampo - iPosicao, iPeso)),10);
    iSoma2 = parseInt(iSoma2,10) + parseInt((iDigito * Calcular_Peso(iTamCampo - iPosicao + 1, iPeso)),10);
  }

  iDV1 = 11 - (iSoma1 % 11);
  if (iDV1 > 9) iDV1 = 0;

  iSoma2 = iSoma2 + (iDV1 * 2);
  iDV2 = 11 - (iSoma2 % 11);
  if (iDV2 > 9) iDV2 = 0;

  Ret = (parseInt(iDV1 * 10,10) + parseInt(iDV2));
  Ret = "0" + Ret;
  Ret = Ret.substr(Ret.length - 2, Ret.length);
  return Ret
}

// CreditCard Validation

function isValidCreditCard(number, type) {
/*
 type:
   visa       : VISA
   mastercard : Mastercard/Eurocard
   amex       : American Express
   diners     : Diners Club / Carte Blanche
   discover   : Discover
   enroute    : enRoute
   jcb        : JCB
*/
  number = number.toString().replace(/\D+/g, '')
  if (type) {
    var lengthAndPrefix = {
      'visa'      : [[13, 16], [4]],
      'mastercard': [[16], range(51, 55+1)],
      'amex'      : [[15], [34, 37]],
      'diners'    : [[14], range(300,305+1).merge([36, 38])],
      'discover'  : [[16], [6011]],
      'enroute'   : [[15], [2014, 2149]],
      'jcb'       : [[15, 16], [3, 2131, 1800]]
    }[type.toLowerCase()]
    if (!lengthAndPrefix) return false 
    var lengths  = lengthAndPrefix[0].map("item.toString()")
    var prefixes = lengthAndPrefix[1].map("item.toString()")
    if (!(prefixes.any(function(prefix){ return number.substr(0, prefix.length) == prefix })
          && lengths.any(function(length){ return number.length == length })))
      return false
  }
  function digitsFromNumber(n){ return n.toString().split(/(?:)/).map("parseInt(item)") }
  return digitsFromNumber(number).reverse().
    map(function(d, ix){ return digitsFromNumber(ix % 2 ? d * 2 : d) }).flatten().inject("a + b") % 10 == 0
}
/* testing code
alert([
["mastercard",  5105105105105100],
["mastercard",  5555555555554444],
["visa",        4222222222222   ],
["visa",        4111111111111111],
["visa",        4012888888881881],
["amex",        378282246310005 ],
["amex",        371449635398431 ],
["amex",        378734493671000 ],
["diners",      38520000023237  ],
["diners",      30569309025904  ],
["discover",    6011111111111117],
["discover",    6011000990139424],
["jcb",         3530111333300000],
["jcb",         3566002020360505],
].map(function(cc){
  var type   = cc[0]
  var number = cc[1]
  return "{0}: {1} - {2}".subn(isValidCreditCard(number, type), type, number)
}).njoin())
*/
