/*
There is only one main function in this Product Activation Algorithm.
The main function is:
generateProductKey(serialNumber)
	parameters: serialNumber is a 8-character Alpha Numeric number (Not Hexadecimal)..
		The paramater is string value.
	description:
		This function will check string length and validate portions of the Serial Number.
		If it is a valid Serial Number, it generates the Product Key in a string.
	returns:
		this function returns true if the Serial Number could be validated and display it in the text field.
		false otherwise.
supporting functions:
*/

//function generateProductKey(serialNumber)
function generateProductKey(serialNbr)
{
serialNumber = serialNbr.value;

	if( serialNumber.length != 8 )
	{	//most of these checks are self explanitory
		alert("Please enter 8-character Serial Number");
		return false;
	}

	for( var i = 0; i < serialNumber.length; ++i )
	{	// make sure the number is either numbers or characters A to z.. (by design)
		var c = serialNumber.charAt(i);

		if( c < '0' || c > 'z' ) 
		{
			alert("Please enter a valid serial number. The S/N is on the back of the Locator.");
			return false;
		}
        }

	for( var i = 0; i < 4; i++ ) // First four digits are supposed to be numbers..
	{
		// make sure the number is either numbers or characters A to z.. (by design)
		var c = serialNumber.charAt(i);

		if( c < '0' || c > '9' ) 
		{
			alert("Please enter a valid serial number. The S/N is on the back of the Locator.");
			return false;
		}
	}

	var prefixYear = parseInt( serialNumber.substring(0,2));


	if (prefixYear < 0 || prefixYear > 99)
	{
		alert("Please enter a valid serial number. The S/N is on the back of the Locator.");
	}

	var prefixWeek = parseInt( serialNumber.substring(2,4) );

	if (prefixWeek < 0 || prefixWeek > 53)
	{
		alert("Please enter a valid serial number. The S/N is on the back of the Locator.");
	}

	// We have validated the Serial Number.. Now, let us convert all the chars to upper case..

	serialNumber = serialNumber.toUpperCase();

   	var length = serialNumber.length;  //perform card specific length and prefix tests

	// LUHN Formula for validation of credit card numbers.
	var ar = new Array( serialNumber.length );
	var i = 0,sum = 0;

    	for( i = 0; i < serialNumber.length; ++i )
	{
 		ar[i] = serialNumber.charCodeAt(i) - 47;

		if (i%2 == 0)
		   ar[i] = ar[i] * 50;
		else
		   ar[i] = ar[i] * 45;

		sum += ar[i];
	}

	while (sum > 9999)
	{
		sum = parseInt (sum / 2);
	}

	// set the activation code to the hidden form field
	document.contact.activation_key.value = sum;

 	return false; // at this point card has not been proven to be invalid
}

