var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
function encode64(input) {
   var output = "";
   var chr1, chr2, chr3;
   var enc1, enc2, enc3, enc4;
   var i = 0;
   do {
      chr1 = input.charCodeAt(i++);
      chr2 = input.charCodeAt(i++);
      chr3 = input.charCodeAt(i++);
      enc1 = chr1 >> 2;
      enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
      enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
      enc4 = chr3 & 63;
      if (isNaN(chr2)) {
         enc3 = enc4 = 64;
      } else if (isNaN(chr3)) {
         enc4 = 64;
      }
      output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) + 
         keyStr.charAt(enc3) + keyStr.charAt(enc4);
   } while (i < input.length);
   return output;
}
function encrypt(key, value)
{
	var enc = "";
	for(i = 0; i < value.length; i++)
	{
		enc += String.fromCharCode(key.charCodeAt(i % key.length) ^ value.charCodeAt(i));
	}
	return encode64(enc);
}
function signup()
{
	// basic stuff
	var email = document.getElementById('vf_email').value;
	var name = document.getElementById('vf_name').value;
	//var code = document.getElementById('vf_code').value;
	if (document.getElementById('vf_rcode'))
	{
		var rcode = document.getElementById('vf_rcode').value;
	}
	
	
	if (!document.getElementById('terms').checked)
	{
		document.getElementById('error_container').innerHTML = '<div id="error"><h1>You must agree to the terms of use!</h1></div>';
		return;
	}
	
	if (email.length < 3)
	{
		document.getElementById('error_container').innerHTML = '<div id="error"><h1>Please enter an email address.</h1></div>';
		return;
	}
	if (name.length < 1)
	{
		document.getElementById('error_container').innerHTML = '<div id="error"><h1>Please enter a name.</h1></div>';
		return;
	}
	
	// password stuff
	
	if (document.getElementById('pw1').value !=
		document.getElementById('pw2').value)
	{
		document.getElementById('error_container').innerHTML = '<div id="error"><h1>New password and confirmation do not match.</h1><p>Please check your spelling and that CAPS LOCK is turned off.</p></div>';
		return;
	}
	if (document.getElementById('pw1').value.length < 6)
	{
		document.getElementById('error_container').innerHTML = '<div id="error"><h1>New password must be at least 6 characters long.</h1></div>';
		return;
	}
	var password = document.getElementById('pw1').value;
	var lower = false, upper = false, other = false;
	for (var i = 0; i < password.length; i++)
	{
		if (isLowerCase(password.charAt(i)))
			lower = true;
		else if (isUpperCase(password.charAt(i)))
			upper = true;
		else
			other = true;
	}
	var count = 0;
	if (lower) count++;
	if (upper) count++;
	if (other) count++;
	if (count < 2)
	{
		document.getElementById('error_container').innerHTML = '<div id="error"><h1>New password may not consist of all lowercase letters, all uppercase letters, or all non-letter characters.</h1></div>';
		return;	
	}
	document.getElementById('hf_pw_signup').value =hex_md5(password);
	//document.getElementById('hf_code').value = code;
	document.getElementById('hf_email_signup').value = email;
	document.getElementById('hf_name_signup').value = name;
	if (document.getElementById('hf_rcode_signup'))
	{
		document.getElementById('hf_email_signup').value = rcode;
	}
	document.forms.hidden_form_signup.submit();
}
function isLowerCase(aCharacter)
{
      return (aCharacter >= 'a') && (aCharacter <= 'z')
}
function isUpperCase(aCharacter)
{
      return (aCharacter >= 'A') && (aCharacter <= 'Z')
}