﻿function validateFlyBuysNumber(sender, e) {
    var number = e.Value.replace(/[\s\-]/g, "");

    window.status = "Card Number = " + number;
    if (number.length == 0) {
        e.IsValid = true;
    }
    else if (number.length == 13) {
        e.IsValid = validateFlyBuysNumberEAN(number);
    }
    else if (number.length == 16) {
        e.IsValid = validateFlyBuysNumberMAG(number);
    }
    else {
        e.IsValid = false;
    }
}

function validateFlyBuysNumberEAN(number) {
    if (number.length != 13)
        return false;

    var prefix = parseInt(number.substr(0, 3));
    var check = parseInt(number.substr(12, 1));

    if (prefix != 264)
        return false;

    var odds = 0;
    var evens = 0;

    for (var i = 1; i < 12; i += 2) {
        var x = parseInt(number.substr(i, 1));
        odds += x * 3;
    }

    for (var i = 0; i < 12; i += 2) {
        var x = parseInt(number.substr(i, 1));
        evens += x;
    }

    var mod10 = 10 - ((odds + evens) % 10) % 10;
    return mod10 == check;
}


function validateFlyBuysNumberMAG(number) {
    if (number.length != 16)
        return false;

    var prefix = parseInt(number.substr(0, 6));
    var check = parseInt(number.substr(15, 1));

    if (prefix != 601435)
        return false;

    var odds = 0;
    var evens = 0;

    for (var i = 1; i < 15; i += 2) {
        var x = parseInt(number.substr(i, 1));
        odds += x;
    }

    for (var i = 0; i < 15; i += 2) {
        var x = parseInt(number.substr(i, 1)) * 2;
        evens += Math.floor(x / 10) + (x % 10);
    }

    var mod10 = 10 - ((odds + evens) % 10) % 10;
    return mod10 == check;
}
