﻿/* ********************************************************** */
/* Invoice handling                                           */        
/* ********************************************************** */
if (!this.ECBInvoice) {
  ECBInvoice = {};
}

(function () {

  // Validate invoice period to.                               
  if (typeof ECBInvoice.validateInvoicePeriodTo !== 'function') {
    ECBInvoice.validateInvoicePeriodTo = function (s, e) {
      if (e.isValid) {
        var result = true;
        var control = window['_dateFromDateSelector'];
        if (control !== null && control !== undefined) {
          if (s.GetValue() == null) {
            result = false;
          }
          else
          {
            if (control.GetValue() !== null) {
              result = (control.GetValue() <= s.GetValue());
            }
          }
        }
        e.isValid = result;
      }
    };
  }

})();

(function () {

  // Validate account serial number
  if (typeof ECBInvoice.ValidateAccountNumber !== 'function') {
    ECBInvoice.ValidateAccountNumber = function (s, e) {
      if (e.isValid) {
        var result = true;        
        if (s.GetValue() === null) {
			result = false;			
		}        
        else
        {
			if (s.GetValue().length > 0){
				var tmpString = s.GetValue().replace('-', '').replace('-', '');
				serialNumber = tmpString.substring(0, 8);
				var lastDigit = tmpString.substring(8, 9);
				var serialNumberStartPos = 0;
				var serialNumberPosLast = 10;
				if (!isNaN(lastDigit)){
					var lastNumber = KeyValueAt(FindNumberAt(0, serialNumberStartPos), serialNumberPosLast);					
					result = lastDigit === lastNumber;
				}
			}
		}		
		e.isValid = result;
      }
    };
  }

})();

// Returns the digit of a serial number from the SerialHashKeys 
function FindNumberAt(lastValue , serialNumberIndex){
	if (serialNumberIndex < serialNumber.length){
		var iValue = parseInt(ColumnValueAt(serialNumberIndex));
		var kValue = parseInt(KeyValueAt(lastValue, iValue));
		return FindNumberAt(kValue, serialNumberIndex + 1);
	}
	return lastValue;
}

// returns a digit of the serial number treated (account number)
function ColumnValueAt(serialNumberIndex){
	if (serialNumberIndex < serialNumber.length){
		return serialNumber.substring(serialNumberIndex, serialNumberIndex + 1);
		}
	else
	{
		return 0;
	}
}

function KeyValueAt(row, column){
	return SerialHashKeys[row].charAt(column);
}

var serialNumber = '';

// A matrix of serial numbers used to compute the last digit (X) of the account serial number.(00-000000-X)
var SerialHashKeys =
[
	'09468271350',
	'94682713509',
	'46827135098',
	'68271350947',
	'82713509466',
	'27135094685',
	'71350946824',
	'13509468273',
	'35094682712',
	'50946827131'
];


// temporary keep this version in case it do not work on our server ???
//function KeyValueAt(row, column){
//		switch (row) 
//		{ 
//		case 0: 
//			return '09468271350'.charAt(column);
//		break; 
//		case 1: 
//			return '94682713509'.charAt(column);
//		break; 
//		case 2: 
//			return '46827135098'.charAt(column);
//		break; 
//		case 3: 
//			return '68271350947'.charAt(column);
//		break; 
//		case 4: 
//			return '82713509466'.charAt(column);
//		break; 
//		case 5: 
//			return '27135094685'.charAt(column);
//		break; 
//		case 6: 
//			return '71350946824'.charAt(column);
//		break; 
//		case 7: 
//			return '13509468273'.charAt(column);
//		break; 
//		case 8: 
//			return '35094682712'.charAt(column);
//		break; 
//		case 9: 
//			return '50946827131'.charAt(column);
//		break; 
//		default: 
//			return "0";
//		break; 
//		}
//}
