var Util;

if (Util==null)
  Util={}

Util.genCkSum = function(qID, uID ) {
	if( uID == null || uID == "" )
		uID = "anon@foo.bar.uk";
 
	var str = (qID+"|"+uID).toLowerCase();
	var sum = 0;
	var sum2 = 0;
	var sum3 = 0;

  for(var i = 0; i < str.length; i++){
		c = str.charCodeAt(i);
		c = (c-32) & 0x3f;
		sum = (sum << 6) + c;
		sum3 += (sum & 0xffff0000) >> 16;
		sum2 ^= c;
		sum2 = (sum2 << 1) & 0xffffffff;
		sum = sum & 0xffff;
		sum3 = sum3 & 0xffff;
	}

	sum = Math.abs(sum);
	sum2 = Math.abs(sum2);
	sum3 = Math.abs(sum3);

	var res =''+((sum+sum2+sum3)%10000);
  while (res.length<4)
    res='0'+res;
  return res;
}

function onChEM(fields) {
  // Get all fields used in the message
  var s='',pid;
  for (var f in fields) {
    var e = document.getElementById(f);
    if (e!=null && e.value!='' && e.value.search(/\S/)>=0)
      s+=e.value.toString().replace(/[^a-zA-Z0-9]+/gm,' ');
  }
  if (s.length>0) {
    if ((pid = document.getElementById('pid'))!=null) 
      //alert("pid.value : "+pid.value+", pid.value.toString());
      s = pid.value.toString()+s;

    var k=Util.genCkSum(s);
    //alert("LEN:"+s.length+", KEY:"+k+", VAL:"+s);
    
    // Move key to input area and make visible.
    var blk=document.getElementById('access_code_blk');
    var ida=document.getElementById('blk_c_id');
    if (blk!=null && ida!=null) {
      ida.innerHTML=k;
      blk.style.display='block';
    }
  }
  else {
    // No values entered
    var blk=document.getElementById('access_code_blk');
    if (blk!=null)
      blk.style.display='none';
  }
}

