﻿// JScript File
var BaseClass = function(){
    this.cfg=null;
    this.errs = {};
    this.div = "";
    this.errflds={};
}
BaseClass.prototype.getVal = function(ele){
    if( ele ) return ele.value.trim();
    else return "";
}
BaseClass.prototype.setVal = function(ele, val){
    if( ele ){
        if( ele.value ) ele.value = val;
        else ele.innerHTML = val;
    }
}
BaseClass.prototype.getErr = function(err){
    if(this.errs && this.errs[err]) 
        return this.errs[err];
    else err;
}
BaseClass.prototype.clear = function(){
    var ele = this.cfg.fields;
    for(var e in ele) this.resetEle(ele[e]);
    this.clearErrs();
}
BaseClass.prototype.clearErrs = function(){
  ///<summary>This function clears the error fields.</summary>
    var ele = this.cfg.errflds;
    for( var a in ele)if( ele[a] ) ele[a].style.display='none';
}
BaseClass.prototype.resetEle=function(e){
    if(e){
        if(e.type){
            switch(e.type){
            case "checkbox":e.checked=false;break;
            case "select-one":e.selectedIndex=0;break;
            case "text":e.value='';break;
            }
        }
        else e.innerHTML='';
    }
}
BaseClass.prototype.show = function(){ this.div.style.display='';}
BaseClass.prototype.hide = function(){ this.div.style.display='none';}
BaseClass.prototype.Init = function(cfg){ this.cfg = cfg; if(cfg.baseName) this.div = $(cfg.baseName); this.errflds = cfg.errflds; }

var CCHelper = {
    ValidateCCNum : function (ccNum){
	    var checkOK = "0123456789";
	    var CrValid = true, checksum = 0, ddigit = 0, kdig = 0;
	    var errors = "";		
        var maxLength = 16, minLength = 13;

        var isMaxMessage = "Credit card number must be fewer than " + maxLength + " characters long.";
        var isMinMessage = "Credit card number must be greater than " + minLength + " characters long.";
        var isInvalidCardNumMessage = "Credit card number is invalid.";
	    var isNullMessage = "Credit card number is required.";
    	
	    if (String(ccNum).length < 1){
		    errors = isNullMessage;
	    }else{
		    ccNum = String(ccNum);
		    if (ccNum.length < minLength){
			    errors = isMinMessage;
		    }else if (ccNum.length > maxLength){
			    errors = isMaxMessage;
		    }else{
			    for (i = ccNum.length-1; i >= 0; i--) {
				    kdig++;
				    ch = ccNum.charAt(i);
				    if ((kdig % 2) != 0) {
					    checksum = checksum + parseInt(ch);
				    } else {
					    ddigit = parseInt(ch) * 2;
					    if (ddigit >= 10) {
						    checksum = checksum + 1 + (ddigit-10);
					    } else {
						    checksum = checksum + ddigit;
					    }
				    }
				    for (j = 0; j < checkOK.length; j++) {
					    if (ch == checkOK.charAt(j)) {
						    break;
					    }
				    }
				    if (j == checkOK.length) {
					    errors = isInvalidCardNumMessage;
					    break;
				    }
			    }
			    if (errors==""){
				    if ((checksum % 10) != 0){
					    errors = isInvalidCardNumMessage;
				    }else{
					    var cType = ccNum.charAt(0);
					    if (cType != '3' && cType != '4' && cType != '5' && cType != '6') {
						    errors = isInvalidCardNumMessage;
					    }
				    }
			    }
			    //else alert('no CCNUM errors');
		    }
	    }
	    return errors;
    },
    ValidateCCExp : function (expMonth, expYear){
        //alert("Getting into _validateCCExp" );
	    var oDate = new Date();
	    var errors = "";
        var isInvalidExpMessage = "Expiration date is invalid.";	
        var isExpiredCardMessage = "Expiration date has already passed.";
	    if (String(expMonth).length < 1 || String(expYear).length < 1){
		    errors = isInvalidExpMessage;
	    }else{
		    expMonth = parseInt(expMonth, 10);
		    expYear = parseInt(expYear, 10);

		    if (expMonth < 1 ){
			    errors = isInvalidExpMessage;
		    }
		    if ((expYear == oDate.getFullYear() && expMonth < (oDate.getMonth() + 1)) || (expYear < oDate.getFullYear())){
			    errors = isExpiredCardMessage;
		    }
	    }
	    return errors;
    }
}

var ACHHelper = {
    ValidateAccNum : function (accountNum){
        var i, j;
        var sum = 0;
        var maxLength = 16;
        var minLength = 4;
	    var invalidChars = new RegExp("\\D", "gi");
    	
        var errors = "";

        var isMaxMessage = "Account number must be fewer than " + maxLength + " characters long.";
        var isMinMessage = "Account number must be greater than " + minLength + " characters long.";
        var isInvalidAccountNumMessage = "Account number is invalid.";
	    var isNullMessage = "Account number is required.";

	    if (String(accountNum).length < 1){
		    errors = isNullMessage;
	    }else{
		    accountNum = String(accountNum);
		    if (accountNum.length < minLength){
			    errors =  isMinMessage;
		    }else if (accountNum.length > maxLength){
			    errors = isMaxMessage;
		    }else if (invalidChars.test(accountNum)){
			    errors = isInvalidAccountNumMessage ;
		    }else if (parseInt(accountNum,10) == 0) {
			    errors = isInvalidAccountNumMessage;
		    }
	        }
	    return errors;
    },
    ValidateRoutingNum : function (routingNum){
        var i, j;
        var sum = 0;
        var maxLength = 9;
        var minLength = 9;
	    var invalidChars = new RegExp("\\D", "gi");
        var errors = "";

   	    this.isNullMessage = "Routing number is required.";
        this.isMaxMessage = "Routing number must be fewer than " + maxLength + " characters long.";
        this.isMinMessage = "Routing number must be " + minLength + " characters long.";
        this.isInvalidAccountNumMessage = "Routing number you entered is invalid.";

        
        if (String(routingNum).length < 1){
	        errors = this.isNullMessage;
        }else{
	        routingNum = String(routingNum);
	        if (routingNum.length < minLength){
		        errors = this.isMinMessage;
	        }else if (routingNum.length > maxLength){
		        errors = this.isMaxMessage;
	        }else if (invalidChars.test(routingNum)){
		        errors = (this.isInvalidCharMessage);
	        }else{
		        var checkDigit = Number(routingNum.charAt(8));
		        var mult = [3, 7, 1];
		        for (i=0, j=0; i<8; i++, j++) {
			        sum += Number(routingNum.charAt(i)) * mult[j];
			        if (j == 2) j = -1;//'reset multiple
		        }
		        sum += checkDigit;
		        if ((sum % 10) != 0 || parseInt(routingNum,10) == 0) {
			        errors = (this.isInvalidAccountNumMessage);
		        }
	        }
        }
        return errors;
    }
}
//***********************************************************************************
//Function Name    : fnAutoTab()
//Purpose          : This function is called to handle the auto tab functionality
//Inputs           : input - the input control, len - the lenght of the field, e - event
//Output           : N/A
//***********************************************************************************
function fnAutoTab(input,len, e) {
    var isNN = (navigator.appName.indexOf("Netscape")!=-1);
    var keyCode = (isNN) ? e.which : e.keyCode;
    var filter = (isNN) ? [0,8,9] : [0,8,9,16,17,18,37,38,39,40,46];
    if (input.value.length >= len && !containsElement(filter,keyCode)) {
	    input.value = input.value.slice(0, len);
	    try{
    	    input.form[(getIndex(input)+1) % input.form.length].focus();
    	}catch(e){alert(e);}
    }
    function containsElement(arr, ele) {
	    var found = false, index = 0;
	    while(!found && index < arr.length) {
		    if (arr[index] == ele) {
			    found = true;
		    } else {
			    index++;
		    }
	    }
	    return found;
    }
    function getIndex(input) {
	    var index = -1, i = 0, found = false;
	    while (i < input.form.length && index == -1) {
		    if (input.form[i] == input) {
			    index = i;
		    } else {
			    i++;
		    }
	    }
	    return index;
    }
    return true;
}