function validate(form)
{
	var error 	= "";
	var flag 	= true; // this flag is used to give the focus to the first field
				// that contains an error
	var er_flag	= true; // when there is no error, but the user didn't checked the "Accept terms and conditions"
				// this flag is set to FALSE
	var ValidationString = "abcdefghijklmnopqrstuvwxyz0123456789-_:. "
	var temp;
// function check_input(i_name, f_name, ch_min, ch_max, valid_str, only_digits, is_phone)
	if((temp = check_input(form.UserId, 2, 32, "abcdefghijklmnopqrstuvwxyz0123456789-_", false, false)) != "")
	{
		error = "\n->Username: " + temp;
	}
	if(error != "" && flag)
	{
		form.UserId.focus();
		flag = false;
	}
	
	if((temp = check_input(form.Pass, 4, 32, "", false, false)) != "")
	{
		error = error + "\n->Parola: " + temp;
	}
	if(error != "" && flag)
	{
		form.Pass.focus();
		flag = false;
	}
	
	if((temp = check_input(form.Passcheck, 4, 32, "", false, false)) != "")
	{
		error = error + "\n->Confirmare parola: " + temp;
	}
	if(error != "" && flag)
	{
		form.Passcheck.focus();
		flag = false;
	}
	
	if(form.Pass.value.length >= 4 && form.Passcheck.value.length >= 4)
	{
		if(form.Pass.value != form.Passcheck.value)
		{
			error = error + "\n->Parola nu a fost confirmata corect, te rugam sa o retastezi!";
			if(flag)
			{
				form.Pass.focus();
				flag = false;
			}
		}
	}
	
	if(form.Email.value.length < 5)
	{
		error = error + "\n->Email: te rugam sa specifici o adresa valida!";
		if(flag)
		{
			form.Email.focus();
			flag = false;
		}
	}
	else
	{
		if((temp = emailCheck(form.Email.value)) != true)
		{
			error = error + "\n->Email: " + temp;
			if(flag)
			{
				form.Email.focus();
				flag = false;
			}
		}
	}
	
	if((temp = check_input(form.FName, 2, 32, ValidationString, false, false)) != "")
	{
		error = error + "\n->Prenume: " + temp;
	}
	if(error != "" && flag)
	{
		form.FName.focus();
		flag = false;
	}
	
	if((temp = check_input(form.LName, 0, 32, ValidationString, false, false)) != "")
	{
		error = error + "\n->Nume: " + temp;
	}
	if(error != "" && flag)
	{
		form.LName.focus();
		flag = false;
	}
	
	if((temp = check_input(form.Street, 0, 255, ValidationString, false, false)) != "")
	{
		error = error + "\n->Strada: " + temp;
	}
	if(error != "" && flag)
	{
		form.Street.focus();
		flag = false;
	}

	if((temp = check_input(form.PCode, 0, 32, ValidationString, false, false)) != "")
	{
		error = error + "\n->Cod: " + temp;
	}
	if(error != "" && flag)
	{
		form.PCode.focus();
		flag = false;
	}
	
	if((temp = check_input(form.City, 2, 255, ValidationString, false, false)) != "")
	{
		error = error + "\n->Oras: " + temp;
	}
	if(error != "" && flag)
	{
		form.City.focus();
		flag = false;
	}
	
	if((temp = check_input(form.State, 0, 255, ValidationString, false, false)) != "")
	{
		error = error + "\n->Judet: " + temp;
	}
	if(error != "" && flag)
	{
		form.State.focus();
		flag = false;
	}
	
	if((temp = check_input(form.Country, 0, 255, ValidationString, false, false)) != "")
	{
		error = error + "\n->Tara: " + temp;
	}
	if(error != "" && flag)
	{
		form.Country.focus();
		flag = false;
	}

	if(! form.tc.checked)
	{

		if(error)
		{
			error = error + "\n\nTe poti inregistra doar daca accepti \"Termenii si conditiile generale de utilizare\"";
		}
		else
		{
			error = "Te poti inregistra doar daca accepti \"Termenii si conditiile generale de utilizare\"";
			er_flag = false;
		}
		
	}

	if(error != "")
	{
		if(er_flag)
		{
			error = "Te rugam, sa completezi campurile urmatoare, respectiv sa corectezi erorile:" + error;
		}
		
		alert(error);
		return false;
	}
	else
	{
		return true;
	}
}

