/* Programa : tc.wmls
   -Parámetros de la función principal: 
           estar ( <cadena que devuelve>,<tipo de tarjeta>,<numerotarjeta> )
   -Funcionalidad:
         · Permite validar tarjetas de credito del tipo 
 			   VISA, MasterCard y American Express
   Compatible: WMLScript 1.1
   =====================================================================
   Diseñado y Programado por:
      Jose Luis Narbona Moreno y Emilio Alarcon
   Licencia Libre de USO para fines no comerciales
   Esta permitido reproducir total o parcialmente este código, 
   siempre y cuando sea para fines educativos y no comerciales, 
   y previa notifiacion a mi 
   mail(tambien se admiten sugerencias):
          
               jlnarbona@mundofree.com
   =====================================================================
*/

extern function esTC(st)
{
if ( String.length(st) > 16 || String.length(st) < 13 )
return false;

var suma = 0; 
var flag = false; 
var len = String.length(st);

for (var i = 0; i < len; i++) { 

var start = Lang.parseInt(len-i) - 1;
var digit = Lang.parseInt(String.subString(st, start, 1));

if ( flag == true )
{
var product = 2 * digit;

if ( product >= 10 )
suma += (product%10) + 1; 
else 
suma += product;
}
else {
suma += digit;
}

flag ^= true;
}

if ( (suma % 10) == 0 )
return true;
else 
return false;
}

extern function esVisa(cc)  // esta función comprueba los tipo VISA
{ 
if ( ((String.length(cc) == 16) || (String.length(cc) == 13) )
&& (String.subString(cc,0,1) == 4 ) )
return esTC(cc);
return false;
}

extern function esMasterCard(cc) // esta función comprueba los tipo MasterCard
{
var p2d = String.subString(cc, 0, 2);

if ( (String.length(cc) == 16) && 
(p2d == "51") ||
(p2d == "52") ||
(p2d == "53") ||
(p2d == "54") ||
(p2d == "55") )
return esTC(cc);
return false;
}

extern function esAmericanExpress(cc) // esta función comprueba los tipo American Express
{
var p2d = String.subString(cc, 0, 2);

if ( (String.length(cc) == 15) && 
(p2d == "34") ||
(p2d == "37") )
return esTC(cc);
return false;
}



extern function estar (rs, tipo, nt)
{
var r;

if (tipo == "Visa") 
{
if (!esVisa(nt))
r = "numero de Visa erroneo";
else
r = "numero de Visa correcto";
}
else if (tipo == "Master") 
{
if (!esMasterCard(nt))
r = "numero de MasterCard erroneo";
else
r = "numero de MasterCard correcto";
}
else if (tipo == "Amex")
{
if (!esAmericanExpress(nt))
r = "numero de American Express erroneo";
else
r = "numero de American Express correcto";
} 

WMLBrowser.setVar('no','');
WMLBrowser.setVar(rs, r);
WMLBrowser.go("tcredito.wml#ver");

}
