// programming by Joel Hahn, Niles Public Library District

function CalculateISBN10Checksum(messageString,checksumDigit)
{
 var csumTotal = 0; // The checksum working variable starts at zero

 // If the source message string is less than 9 characters long, we make it 9 characters

 if( messageString.value.length < 9 )
  {
  var holdString = '000000000' + messageString.value;
  messageString.value = holdString.substring(holdString.length - 9, holdString.length);
  }

 // Calculate the checksum value for the message

// for( charPos = messageString.value.length - 1; charPos >= 0; charPos--) 
 for( charPos = 0; charPos <= 8; charPos++) 
  {
  csumTotal = csumTotal + ((charPos+1) * parseInt(messageString.value.substring(charPos,charPos+1)));
//  if( charPos / 2 == parseInt(charPos/2) )
//   csumTotal = csumTotal + (parseInt(messageString.value.substring(charPos,charPos+1)));
//  else
//   csumTotal = csumTotal + (3 * parseInt(messageString.value.substring(charPos,charPos+1)));
  }

 // Calculate the checksum digit

//  checksumDigit.value = csumTotal;

 var remainder = csumTotal - parseInt(csumTotal/11) * 11;
 if( remainder == 0 )
  checksumDigit.value = '0';
 if ( remainder == 10 )
  checksumDigit.value = 'X';
 else
  checksumDigit.value = remainder;
}

function CalculateEAN13Checksum(messageString,checksumDigit)
{
 var csumTotal = 0; // The checksum working variable starts at zero

 // If the source message string is less than 12 characters long, we make it 12 characters

 if( messageString.value.length < 12 )
  {
  var holdString = '000000000000' + messageString.value;
  messageString.value = holdString.substring(holdString.length - 12, holdString.length);
  }

 // Calculate the checksum value for the message

 for( charPos = messageString.value.length - 1; charPos >= 0; charPos--) 
  {
  if( charPos / 2 == parseInt(charPos/2) )
   csumTotal = csumTotal + (parseInt(messageString.value.substring(charPos,charPos+1)));
  else
   csumTotal = csumTotal + (3 * parseInt(messageString.value.substring(charPos,charPos+1)));
  }

 // Calculate the checksum digit

 var remainder = csumTotal - parseInt(csumTotal/10) * 10;
 if( remainder == 0 )
  checksumDigit.value = '0';
 else
  checksumDigit.value = 10 - remainder;
}

function Convert10to13(messageString,isbn13Field)
{
  // Get the ISBN (first 9 digits)
   if( messageString.value.length < 10 )
   {
     var holdString = '0000000000' + messageString.value;
     messageString.value = holdString.substring(holdString.length - 10, holdString.length);
   }
   var booknum = messageString.value.substring(0,9);

  // Add 978
  var booknum = '978' + booknum;

  // Calculate new checksum

 var csumTotal = 0;
 for( charPos = booknum.length - 1; charPos >= 0; charPos--) 
  {
  if( charPos / 2 == parseInt(charPos/2) )
   csumTotal = csumTotal + (parseInt(booknum.substring(charPos,charPos+1)));
  else
   csumTotal = csumTotal + (3 * parseInt(booknum.substring(charPos,charPos+1)));
  }

 // Calculate the checksum digit

  var remainder = csumTotal - parseInt(csumTotal/10) * 10;
  if( remainder == 0 )
   newChecksumDigit = '0';
  else
   newChecksumDigit = 10 - remainder;

  isbn13Field.value = booknum + newChecksumDigit;

}

function Convert13to10(messageString,isbn13Field)
{
  // Get the ISBN (first 12 digits)
   var booknum = messageString.value;
   if( booknum.length < 13 )
   {
     var holdString = '0000000000000' + booknum;
     booknum = holdString.substring(holdString.length - 10, holdString.length);
   }

  if( booknum.substr(0,3) != "978" )
  {
    alert("An ISBN-13 must start with '978' to be converted to an ISBN-10!");
    isbn13Field.value = "";
  }
  else
  {
  // Remove 978

  var booknum = booknum.substr(3,9);

  // Calculate the checksum value for the message

  var csumTotal = 0;
  for( charPos = 0; charPos <= 8; charPos++) 
  {
  csumTotal = csumTotal + ((charPos+1) * parseInt(booknum.substring(charPos,charPos+1)));
  }

 // Calculate the checksum digit

  var remainder = csumTotal - parseInt(csumTotal/11) * 11;
  if( remainder == 0 )
   newChecksumDigit = '0';
  if ( remainder == 10 )
   newChecksumDigit = 'X';
  else
   newChecksumDigit = remainder;

  isbn13Field.value = booknum + newChecksumDigit;
  }

}
