// *** TO DETECT BROWSER:
var isMSIE = false;

if (navigator.appName == 'Microsoft Internet Explorer')
{
	var isMSIE = true;
}

// function to validate text fields
function validate(fieldObj,len)
{
	var id    = fieldObj.id;
	var value = trim(fieldObj.value);
	
	// to store reference to span that
		// contains validation message
	var validSpan = document.getElementById(id + '_valid');
	
	// to store whether or not the field is valid
	var valid = false;
	
	// to store whether or not the field is the
		// right length (where applicable)
	var validLength = false;
	
	if (len)
	{
		if (value.length >= len)
		{
			validLength = true;
		}
	} else {
		validLength = true;
	}
	
	// If the length is valid
		// (or not applicable)
	if (validLength)
	{
		// If this is a Confirmation Field...
		if ( id.substr(id.length - 3) == 'con' )
		{
			if (value == document.getElementById( id.substring(0, id.length - 4) ).value )
			{
				valid = true;
			}
		} else {
		// This IS NOT a Confirmation Field...	
			if ( eval(fieldObj.id + '_regexp').test(value) ) 
			{
				valid = true
			}
		}
	}
	
	
	// If the Field is Valid...
	if (!valid)
	{
		validSpan.innerHTML = eval(id + '_msg');
		validSpan.style.color = 'red';
	} else {
	// The Field is INVALID...
		if (validSpan.style.color == 'red')
		{
			validSpan.innerHTML = '';
		}
	}
	
	return valid;
}



// function to check if email address
	// is already in use
function checkEmail()
{
	var isValid = validate(document.getElementById('email_con'),0);
	
	if (isValid)
	{
		// XMLHttpRequest object to determine
			// Email availability
		var email_req = getXMLHttpRequest();
		
		// onReadyStateChange handler for request object
		email_req.onreadystatechange = function() {
			if (email_req.readyState == 4 ) {
				// reference to the validation span element
				var validSpan = document.getElementById('email_con_valid');
				
				// to store user name and user id
				var response = email_req.responseText;
				
				// If user name is availabe...
				if (response != '0')
				{
					validSpan.innerHTML = 'This Email Address is Already in Use!';
					validSpan.style.color = 'red';
				}
				
				document.getElementById('email_use').value = response;
			}
		};

		// prepare request
		email_req.open('POST','../php/email.php',true);
		email_req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
		
		// trim white space and convert user name to lower case characters
		email_req.send( 'email=' + trim( document.getElementById('email_con').value.toLowerCase() ) );
	} else {
		return false;
	}
}



// function to check user name
	// availability
function checkUserName()
{
	if ( name1_regexp.test( getObj('u_name_check').value ) ||
		 name2_regexp.test( getObj('u_name_check').value ) ||
		 name3_regexp.test( getObj('u_name_check').value ) ||
		 name4_regexp.test( getObj('u_name_check').value )     )
	{
		alert('Pick Another User Name!');
		
		return;
	}
	
	
	
	var isValid = validate(document.getElementById('u_name_check'),4);
	
	if ( getObj('u_name_check').value == getObj('u_name').value )
	{
		isValid = false;
	}
	
	if (isValid)
	{
		// XMLHttpRequest object to determine
			// User Name availability
		var userName_req = getXMLHttpRequest();
		
		// onReadyStateChange handler for request object
		userName_req.onreadystatechange = function() {
			if (userName_req.readyState == 4 ) {
				// reference to the validation span element
				var validSpan = document.getElementById('u_name_check_valid');
				
				// reference to user name text field
				var uNameField = document.getElementById('u_name');
				
				var uIdField = document.getElementById('u_id');
				
				// to store user name and user id
				var response = userName_req.responseText;
				
				// If user name is availabe...
				if (response != 'TAKEN!')
				{
					validSpan.innerHTML = 'User Name is Available.';
					validSpan.style.color = '#009900';
					
					// * define array to store row values
					var row = new Array();
					
					row = response.split(',');
					
					uNameField.value = row[0];
					
					uIdField.value = row[1];
				} else {
					validSpan.innerHTML = 'User Name is Already Taken!';
					validSpan.style.color = 'red';
					
					
					// ** ERASE, if taken! **
					uNameField.value = '';
					uIdField.value   = '';
				}
			}
		};

		// prepare request
		userName_req.open('POST','../php/username.php',true);
		userName_req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
		
		// trim white space and convert user name to lower case characters
		userName_req.send( 'u_name=' + trim( document.getElementById('u_name_check').value.toLowerCase() ) );
	}
}



name1_regexp = /^.*jam_dom.*$/i
name2_regexp = /^.*jamdom.*$/i
name3_regexp = /^.*moderator.*$/i
name4_regexp = /^.*admin.*$/i



// function to reset form
	// (after an hour)
function resetForm()
{
	window.location.href = 'index.php';
}

// function to validate DOB
function validateDOB()
{
	var month = document.getElementById('month').value;
	var day   = document.getElementById('day').value;
	var year  = document.getElementById('year').value;
	
	var validSpan = document.getElementById('dob_valid');
	
	if (month == '')
	{
		validSpan.innerHTML = 'Please Select your Month of Birth.';
		validSpan.style.color = 'red';
		
		return false;
	}
	else if (day == '')
	{
		validSpan.innerHTML = 'Please Select your Day of Birth.';
		validSpan.style.color = 'red';
		
		return false;
	}
	else if ( !year_regexp.test(year) )
	{
		validSpan.innerHTML = 'Please enter a valid Year of Birth.';
		validSpan.style.color = 'red';
		
		return false;
	} else {
		if (validSpan.style.color == 'red')
		{
			validSpan.innerHTML = '';
		}
	}
	
	// set the dob form field
	document.getElementById('dob').value = year + '-' + month + '-' + day;
	
	return true;
}

// function to get corresponding list of Regions
function getRegions(fieldObj)
{
	// validate country selection
	var isValid = validate(fieldObj,0);
	
	// If a Country has
		// been selected...
	if (isValid)
	{
		// XMLHttpRequest object to get
			// corresponding list of regions
		var regions_req = getXMLHttpRequest();
		
		// onReadyStateChange handler for request object
		regions_req.onreadystatechange = function() {
			if (regions_req.readyState == 4 ) {
				var response = regions_req.responseText;
				
				var regionsList = document.getElementById('region');
				
				var importedField = document.getElementById('imported');
				
				var regionTD = document.getElementById('regionQuestion');
				
				// If the Regions have been imported...
				if (response != 'NOT IMPORTED!')
				{
					importedField.value = '1';
					
					regionTD.className = 'question';
					
					var rows = new Array();
					
					rows = response.split("\n");
					
					
					var regionsHTML	= '<option value="">Region</option>'; 
					regionsHTML 	+= '<option value="">-------------</option>';
					
					for (var i = 0; i < rows.length; i++)
					{
						fields = new Array();
						
						fields = rows[i].split(',');
						
						regionsHTML += '<option value="' + fields[0] + '">' + fields[1] + '</option>'
					}
						
					// If this is NOT IE...
					if (!isMSIE)
					{
						regionsList.innerHTML = regionsHTML;
					} else {
					// If this is IE...
						var spanHTML = '<select name="region" id="region" onChange="getCities(this)">';
						
						spanHTML += regionsHTML;
						
						spanHTML += '</select>';
						
						regionsList.outerHTML = spanHTML;
					}
					
					// ** should NOT be disabled!
					regionsList.disabled = false;
					
					regionsList.selectedIndex = 0;
					
				} else {
				// The Regions HAVE NOT been imported...
					importedField.value = '0';
					
					regionTD.className = 'dependent';
					
					document.getElementById('cityQuestion').className = 'dependent';
					
					// ** should be disabled
					regionsList.disabled = true;
					
					document.getElementById('city').disabled = true;
				}
			}
		};
		
		// set this country as default for
			// the country that the player
			// wants to represent
		document.getElementById('country_rep').selectedIndex = fieldObj.selectedIndex;
		
		// prepare request
		regions_req.open('POST','../php/regions.php',true);
		regions_req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
		
		// trim white space and convert user name to lower case characters
		regions_req.send('country_id=' + fieldObj.value);
	}
}



// function to get corresponding list of Cities
function getCities(fieldObj)
{
	// validate region selection
	var isValid = validate(fieldObj,0);
	
	// If a Region has
		// been selected...
	if (isValid)
	{
		// XMLHttpRequest object to get
			// corresponding list of regions
		var cities_req = getXMLHttpRequest();
		
		// onReadyStateChange handler for request object
		cities_req.onreadystatechange = function() {
			if (cities_req.readyState == 4 ) {
				var response = cities_req.responseText;
				
				var citiesList = document.getElementById('city');
				
				document.getElementById('cityQuestion').className = 'question';
				
				
				var rows = new Array();
							
				rows = response.split("\n");
				
				var citiesHTML	= '<option value="">City</option>'; 
				citiesHTML 		+= '<option value="">-------------</option>';
				
				for (var i = 0; i < rows.length; i++)
				{
					fields = new Array();
					
					fields = rows[i].split(',');
					
					citiesHTML += '<option value="' + fields[0] + '">' + fields[1] + '</option>'
				}
					
				// If this is NOT IE...
				if (!isMSIE)
				{
					citiesList.innerHTML = citiesHTML;
				} else {
				// If this is IE...
					var spanHTML = '<select name="city" id="city" onChange="validate(this,0)">';
					
					spanHTML += citiesHTML;
					
					spanHTML += '</select>';
					
					citiesList.outerHTML = spanHTML;
				}
							
			
				citiesList.disabled = false;
				
				citiesList.selectedIndex = 0;
				
			}
		};
		
		// prepare request
		cities_req.open('POST','../php/cities.php',true);
		cities_req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
		
		// trim white space and convert user name to lower case characters
		cities_req.send('region_id=' + fieldObj.value);
	}
}



// reg exp for Refferer
	// (at least 3 characters)
referrer_regexp = /^.{3,}$/
// message for invalid referrer
referrer_msg = 'Please tell us how you heard about us!';

// regexp for email address with multiple sub-domains but ending in a regular domain
email_regexp  = /^[\w\.\-]+\@([a-z0-9\-]+\.)+[a-z0-9]{2,4}$/i
// message for invalid email address
email_msg = 'Please enter a valid email address!';

// message for invalid confirmed email
email_con_msg = 'You must enter the same email address twice!';

// regexp for valid username
u_name_check_regexp = /^[a-z](_?[a-z0-9]+)+$/i
// message for invalid user name
u_name_check_msg = 'Invalid User Name!';

// regexp for valid username
u_name_regexp = /^[a-z](_?[a-z0-9]+)+$/i
// message for invalid user name
u_name_msg = 'Enter User Name Above & Press Button Beside It!';

// regexp for valid password
pass_regexp = /.{6,}/
// message for invalid password
pass_msg = 'Please Choose a Valid Password!';

// message for invalid confirmed password
pass_con_msg = 'You must enter the same password twice!';

// regexp for valid year
year_regexp = /\d{4}/

// regexp for valid country
country_regexp = /\d{1,3}/
// message for invalid country of location
country_msg = '<br />Please Select the Country that You Live in!';

// regexp for valid region
region_regexp = /\d+/
// message for invalid country of location
region_msg = '<br />Please Select the Region that You Live in!';

// regexp for valid city
city_regexp = /\d+/
// message for invalid country of location
city_msg = '<br />Please Select the City that You Live in!';

//M6M 5B7

//= /^[a-z](\d[a-z]){2}\d$/i

// regexp for valid country to represent
country_rep_regexp = /\d{1,3}/
// message for invalid country of location
country_rep_msg = 'Select the Country that You Want to Represent!';

function getObj(id)
{
	return document.getElementById(id);
}

// function to validate & submit form
function register()
{
	var referrer 		= validate( getObj('referrer'), 0 );
	var email    		= validate( getObj('email'), 0 );
	var email_con		= validate( getObj('email_con'), 0 );
	
	
	
	checkEmail();
	
	
	var email_use = false;
	
	if ( getObj('email_use').value == '0' )
	{
		email_use = true;
	}
	
	
	
	var u_name = validate( getObj('u_name'), 4 );
	
	var pass		= validate( getObj('pass'), 0 );
	var pass_con	= validate( getObj('pass_con'), 0 );
	
	var gender = false;
	
	var genderSpan = getObj('gender_valid');
	
	if (document.registrationForm.gender[0].checked || 
		 document.registrationForm.gender[1].checked )
	{
		gender = true;
		
		if (genderSpan.style.color == 'red')
		{
			genderSpan.innerHTML = '';
		}
	} else {
		genderSpan.innerHTML = 'Please Select your Gender.';
		
		genderSpan.style.color = 'red';
	}
	
	var dob = validateDOB();
	
	var country	= validate( getObj('country'), 0 );
	
	var region 	= false;
	var city 	= false;
	
	var imported = getObj('imported').value;
	
	if (imported == '1')
	{
		region 	= validate( getObj('region'), 0 );
		city	= validate( getObj('city'), 0 );
	} else {
		region 	= true;
		city 	= true;
	}
	
	var country_rep = validate( getObj('country_rep'), 0 );
	
	// If all fields are vaild...
	if (referrer &&
		 email &&
		 email_con &&
		 
		 
		 email_use &&
		 
		 
		 u_name &&
		 pass &&
		 pass_con &&
		 gender &&
		 dob &&
		 country &&
		 region &&
		 city &&
		 country_rep)
	{
		// hash password
		getObj('pass_hash').value = hex_sha1( getObj('pass').value );
		// *** delete content of un-hased password fields!!!
		getObj('pass').disabled		= true;
		getObj('pass_con').disabled	= true;
		
		// ** enable u_name field for emails
		getObj('u_name').disabled	= false;
		
		getObj('email_con').disabled	= true;
		getObj('u_name_check').disabled	= true;
		
		getObj('month').disabled	= true;
		getObj('day').disabled		= true;
		getObj('year').disabled		= true;
		
		getObj('region').disabled		= true;	
		
		getObj('registrationForm').submit();
	} else {
	// If any field is invalid...
		alert("Your form has errors!\nPlease go back and fix them.");
	}
}
