﻿var $j = jQuery.noConflict();

// accept dd-MMM-yyyy
// parseInt is jQuery function
function formatToDate(str) { 
    var monthArr = new Array("Jan", "Feb", "Mar","Apr", "May", "Jun", "Jul", "Aug", "Sep","Oct", "Nov", "Dec");
    var year = parseInt(str.substring(7, 11)); 
    var day; 
    if(str.charAt(0) == '0')
        day = parseInt(str.charAt(1));
    else
        day = str.substring(0, 2);
    var month; 
    for(i=0; i<monthArr.length;i++) {
        if(str.substring(3,6) == monthArr[i])
            month = i; 
    }
    return new Date(year, month, day); 
}

// accept a date
// parseInt is jQuery function
function formatToString(d) { 
    var monthArr = new Array("Jan", "Feb", "Mar","Apr", "May", "Jun", "Jul", "Aug", "Sep","Oct", "Nov", "Dec");
    var day;
    if(d.getDate() < 10)
        day = '0' + d.getDate();
    else
        day =  d.getDate();
    return day+'-'+monthArr[d.getMonth()]+'-'+d.getFullYear(); 
}

function getDay(d) {
    var day;
    if(d.getDate() < 10)
        day = '0' + d.getDate();
    else
        day = d.getDate();
    return day;
}

function getMth(d) {
    var mth;
    if( (d.getMonth() + 1) < 10 )
        mth = '0' + (d.getMonth() + 1);
    else
        mth = (d.getMonth() + 1);
    return mth;
}

function IsNumeric(vlu)
{
    if (isNaN(vlu) || !(/^-?\d+$/.test(vlu)) || parseInt(vlu) < 0) return false;
    return true;
}

// Validate Credit Card Number.
// Standard 3 checks:
// 1. Check that only numbers or spaces are given in the credit card number — not letters or other characters.
// 2. Check that, for the given card type, the number of digits given is valid and the prefix to the number is valid.
// 3. Use the Luhn formula to check the validity of the entered credit card number.
// http://www.evolt.org/node/24700
function Validate() {}
Validate.prototype.isValidCreditCardNumber = function(cardNumber, cardType, errMsg)
{
    // Check 1:
    var isValid = false;
    var ccCheckRegExp = /[^\d ]/;
    isValid = !ccCheckRegExp.test(cardNumber);

    if (!isValid)
    {
        errMsg.innerHTML = 'Credit Card Number must contain only numbers';        
        alert('Credit Card Number must contain only numbers');
    }

    if (isValid)
    {
        var cardNumbersOnly = cardNumber.replace(/ /g,"");
        var cardNumberLength = cardNumbersOnly.length;
        var lengthIsValid = false;
        var prefixIsValid = false;
        var prefixRegExp;
        
        // Check 2:
        switch(cardType)
        {
          // Card Type: Mastercard; Prefix: 51-55; Number of Digits: 16
          case "MC":
            lengthIsValid = (cardNumberLength == 16);
            prefixRegExp = /^5[1-5]/;
            break;

          // Card Type: Visa; Prefix: 4; Number of Digits: 13,16 
          case "VISA":
            lengthIsValid = (cardNumberLength == 16 || cardNumberLength == 13);
            prefixRegExp = /^4/;
            break;
          
          // Card Type: American Express; Prefix: 34,37; Number of Digits: 15
          case "AMEX":
            lengthIsValid = (cardNumberLength == 15);
            prefixRegExp = /^3(4|7)/;
            break;

          default:
            prefixRegExp = /^$/;
            errMsg.innerHTML = 'Card type not found';
            alert("Card type not found");
        }
        
        prefixIsValid = prefixRegExp.test(cardNumbersOnly);
        isValid = prefixIsValid && lengthIsValid;
        
        if (!isValid)
        {
            errMsg.innerHTML = 'Credit Card Number length and prefix is invalid';
            alert('Credit Card Number length or prefix is invalid');
        }        
    }

    if (isValid)
    {
        // Check 3
        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);
        
        if (!isValid)
        {
            errMsg.innerHTML = 'Invalid Credit Card Number';
            alert('Invalid Credit Card Number');
        }        
    }
    
    return isValid;
}