function formatta(str){

	while( str.length != 9)
	str = "0"+str;
	return  str ;
}



function CalcolaNumeroOrdine()
{
anum = new Array("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "~", "!", "@", "#", "$", "%", "&", "_", "+", "=", "-", "?", "<", ">", "^", "`", "(", ")", ":", ";", "[", "]", "{", "}", ".", ",", "|", "/", "\\");


includedDigs = 2;
endpass = "";
passdig = 20;
for (i = 1; i <= passdig; i++) {
if (includedDigs == 1) {
nextDig = Math.floor(Math.random() * 91);
}
if (includedDigs == 2) {
nextDig = Math.floor(Math.random() * 62);
}
if (includedDigs == 3) {
nextDig = Math.floor(Math.random() * 52);
}
if (includedDigs == 4) {
nextDig = Math.floor(Math.random() * 10) + 52;
}
if (includedDigs == 5) {
nextDig = Math.floor(Math.random() * 26);
}
if (includedDigs == 6) {
nextDig = Math.floor(Math.random() * 26) + 26;
}
if (includedDigs == 7) {
nextDig = Math.floor(Math.random() * 69);
}
endpass = anum[nextDig] + endpass;
}
return endpass;
}

var hex_chr = "0123456789abcdef";
function hex(num)
{
  var str = "";
  for(var j = 7; j >= 0; j--)
    str += hex_chr.charAt((num >> (j * 4)) & 0x0F);
  return str;
}

function str2blks_SHA1(str)
{
  var nblk = ((str.length + 8) >> 6) + 1;
  var blks = new Array(nblk * 16);
  for(var i = 0; i < nblk * 16; i++) blks[i] = 0;
  for(i = 0; i < str.length; i++)
    blks[i >> 2] |= str.charCodeAt(i) << (24 - (i % 4) * 8);
  blks[i >> 2] |= 0x80 << (24 - (i % 4) * 8);
  blks[nblk * 16 - 1] = str.length * 8;
  return blks;
}

function add(x, y)
{
  var lsw = (x & 0xFFFF) + (y & 0xFFFF);
  var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
  return (msw << 16) | (lsw & 0xFFFF);
}

function rol(num, cnt)
{
  return (num << cnt) | (num >>> (32 - cnt));
}

function ft(t, b, c, d)
{
  if(t < 20) return (b & c) | ((~b) & d);
  if(t < 40) return b ^ c ^ d;
  if(t < 60) return (b & c) | (b & d) | (c & d);
  return b ^ c ^ d;
}

function kt(t)
{
  return (t < 20) ?  1518500249 : (t < 40) ?  1859775393 :
         (t < 60) ? -1894007588 : -899497514;
}

function sendXP(form) 
{

if ((document.Pagamenti.EUR.value == "")||(document.Pagamenti.CENT.value == "")||(document.Pagamenti.EMAIL.value == ""))

{
alert('ALL FIELDS ARE REQUIRED');
return false;
}

document.Pagamenti.TRANSACTION_ID.value=CalcolaNumeroOrdine();
// riga sotto indirizzo di test
//document.Pagamenti.action="https://cartasi-test.x-pay.it/XPayVPOSTEST/XPServlet";
document.Pagamenti.action="https://cartasi.x-pay.it/XPayVPOS/XPServlet"; // togliere i commenti per la produzione
document.Pagamenti.AMOUNT.value =formatta( document.Pagamenti.EUR.value + document.Pagamenti.CENT.value );
//document.Pagamenti.OPTION_EMAIL.value = document.Pagamenti.EMAIL.value;  scommentare se si utilizza OPTION_EMAIL solo in produzione
document.Pagamenti.EMAIL.value; //eliminare in caso di abilitazione campi OPTION
document.Pagamenti.MAC.value = calcSHA1();
document.Pagamenti.submit();

}
function calcSHA1(form)
{
  str = "";
  secretKey = "QMFNPVZXMHPHNLGZOITTM";
	
   str += document.Pagamenti.TERMINAL_ID.value + document.Pagamenti.TRANSACTION_ID.value + document.Pagamenti.AMOUNT.value + document.Pagamenti.CURRENCY.value + document.Pagamenti.VERSION_CODE.value + document.Pagamenti.CO_PLATFORM.value + document.Pagamenti.ACTION_CODE.value + document.Pagamenti.EMAIL.value;
  
  str += secretKey;
  var x = str2blks_SHA1(str);
  var w = new Array(80);

  var a =  1732584193;
  var b = -271733879;
  var c = -1732584194;
  var d =  271733878;
  var e = -1009589776;

  for(var i = 0; i < x.length; i += 16)
  {
    var olda = a;
    var oldb = b;
    var oldc = c;
    var oldd = d;
    var olde = e;

    for(var j = 0; j < 80; j++)
    {
      if(j < 16) w[j] = x[i + j];
      else w[j] = rol(w[j-3] ^ w[j-8] ^ w[j-14] ^ w[j-16], 1);
      t = add(add(rol(a, 5), ft(j, b, c, d)), add(add(e, w[j]), kt(j)));
      e = d;
      d = c;
      c = rol(b, 30);
      b = a;
      a = t;
    }

    a = add(a, olda);
    b = add(b, oldb);
    c = add(c, oldc);
    d = add(d, oldd);
    e = add(e, olde);
  }
  return hex(a) + hex(b) + hex(c) + hex(d) + hex(e);
}





