function checkField(x){
  o = x;
  if(o.value.length == 0){
    markError(o); 
  } else {
    unMarkError(o);
  }
}

// Marks a field as error
function markError(o){
  try{
    o.className = 'field_error_set';
  }  catch(e){}
  try{
    document.getElementById(o.id + '_label').className = 'label_error_set';
  }  catch(e){}
}

// Unmarks an error field
function unMarkError(o){
  try{
    o.className = 'field_error_unset';
  } catch(e){}
  try{
    document.getElementById(o.id + '_label').className = 'label_error_unset';
  } catch(e){}
}

// Validates the various forms.
// NOTE:  Any form names that aren't specifed in the main 'if' block are pass-thru as VALID.
function validate(fn){
  var errors = '';
  var valid = true;
  var fields = new Array();
  // Profile editor
  if(fn == 'profile'){
    // Get the fields to validate    
    fields['password_old'] = document.getElementById('password_old');
    fields['password'] = document.getElementById('password');
    fields['password_confirm'] = document.getElementById('password_confirm');
    fields['email_address'] = document.getElementById('email_address');
    fields['firstname'] = document.getElementById('firstname');
    fields['lastname'] = document.getElementById('lastname');
    fields['location'] = document.getElementById('location');
    // Clear the error markings of the fields
    unMarkError(fields['password_old']);
    unMarkError(fields['password']);
    unMarkError(fields['password_confirm']);
    unMarkError(fields['email_address']);
    unMarkError(fields['firstname']);
    unMarkError(fields['lastname']);
    unMarkError(fields['location']);
    // If password is to be changed, make sure it matches the confirmation.
    if(fields['password'].value != ''){
      if(fields['password'].value != fields['password_confirm'].value){
        errors += "The confirmation password must match the new password.\n";
        markError(fields['password']);
        markError(fields['password_confirm']);
        valid = false;
      }      
    }
    // Make sure first name, last name, and location are not blank.
    if(fields['firstname'].value == ''){
      errors += "You must specify a first name.\n";
      markError(fields['firstname']);
      valid = false;
    }
    if(fields['lastname'].value == ''){
      errors += "You must specify a last name.\n";
      markError(fields['lastname']);
      valid = false;
    }
    if(fields['location'].value == ''){
      errors += "You must specify a location.\n";
      markError(fields['location']);
      valid = false;
    } 
    if(validateEmail(fields['email_address'].value) == false){
      errors += "You must specify a valid e-mail address.\n";
      markError(fields['email_address']);
      valid = false;    
    }
  } else if(fn == 'registration'){
    // Get the fields to validate    
    fields['tos_agree'] = document.getElementById('tos_agree');
    fields['username'] = document.getElementById('username');
    fields['password_old'] = document.getElementById('password_old');
    fields['password'] = document.getElementById('password');
    fields['password_confirm'] = document.getElementById('password_confirm');
    fields['email_address'] = document.getElementById('email_address');
    fields['firstname'] = document.getElementById('firstname');
    fields['lastname'] = document.getElementById('lastname');
    fields['location'] = document.getElementById('location');
    fields['captcha'] = document.getElementById('captcha');
    // Clear the error markings of the fields
    unMarkError(fields['tos_agree']);
    unMarkError(fields['username']);
    unMarkError(fields['password_old']);
    unMarkError(fields['password']);
    unMarkError(fields['password_confirm']);
    unMarkError(fields['email_address']);
    unMarkError(fields['firstname']);
    unMarkError(fields['lastname']);
    unMarkError(fields['location']);
    unMarkError(fields['captcha']);
    // Make sure password is set and matches confirmation.
    if(fields['password'].value != ''){
      if(fields['password'].value != fields['password_confirm'].value){
        errors += "The confirmation password must match the new password.\n";
        markError(fields['password']);
        markError(fields['password_confirm']);
        valid = false;
      }
    } else if(fields['password'].value == ''){
      errors += "Please set a password.\n";
      markError(fields['password']);
      valid = false;
    }
    // Ensure the agreement checkbox is checked.
    if(fields['tos_agree'].checked == false){
      errors += "You must check the 'Yes, I agree...' box.\n";
      markError(fields['tos_agree']);
      valid = false;
    }
    // Make sure user name, e-mail, first name, last name, captcha, and location are not blank.
    if(fields['username'].value == ''){
      errors += "You must specify a user name.\n";
      markError(fields['username']);
      valid = false;
    }
    if(fields['firstname'].value == ''){
      errors += "You must specify a first name.\n";
      markError(fields['firstname']);
      valid = false;
    }
    if(fields['lastname'].value == ''){
      errors += "You must specify a last name.\n";
      markError(fields['lastname']);
      valid = false;
    }
    if(fields['location'].value == ''){
      errors += "You must specify a location.\n";
      markError(fields['location']);
      valid = false;
    }
    if(validateEmail(fields['email_address'].value) == false){
      errors += "You must specify a valid e-mail address.\n";
      markError(fields['email_address']);
      valid = false;    
    }
    if(fields['captcha'].value == ''){
      errors += "You must enter the CAPTCHA code.\n";
      markError(fields['captcha']);
      valid = false;
    }
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  }
  
  // Return errors, if applicable.
  if(valid == false){
    alert(errors);
    return false;
  } else {
    return true;
  }
  
}

//This function validates e-mail addresses.
function validateEmail(e) {
  if(e == '') return false;
	var at="@";
	var dot=".";
	var lat=e.indexOf(at);
	var lstr=e.length;
	var ldot=e.indexOf(dot);
	if (e.indexOf(at)==-1){
	   return false;
	}
	if (e.indexOf(at)==-1 || e.indexOf(at)==0 || e.indexOf(at)==lstr){
	   return false;
	}
	if (e.indexOf(dot)==-1 || e.indexOf(dot)==0 || e.indexOf(dot)==lstr){
	   return false;
	}
	if (e.indexOf(at,(lat+1))!=-1){
	   return false;
	}
	if (e.substring(lat-1,lat)==dot || e.substring(lat+1,lat+2)==dot){
	   return false;
	}
	if (e.indexOf(dot,(lat+2))==-1){
	   return false;
	}		
	if (e.indexOf(" ")!=-1){
	   return false;
	}
	return true;
}
