function trim(str) {
    var newstr = str.replace(/^\s*(.+?)\s*$/, "$1");
    if (newstr == " ") {
        return "";
    }
    return newstr;
} 
function prepare_string(str) {
    var newstr = trim(str); //функцию trim() см. выше
    return newstr.replace(/(\s)+/g, "$1");
}
function drop_spaces(str) {
    var newstr = trim(str); //функцию trim() см. выше
    return newstr.replace(/(\s)+/g, ""); 
}
function check_email(email) {
    var template = /^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-]?[a-zA-Z0-9]+)*)\.([A-Za-z])+$/;
    email = drop_spaces(email); //функцию drop_spaces() см. выше
    if (template.test(email)) {
        return true;
    }
    return false; 
}
function check_login(login) {
    var template = /^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)$/;
    login = drop_spaces(login); //функцию drop_spaces() см. выше
    if (template.test(login)) {
        return true;
    }
    return false; 
}
function check_password(pass) {
    var template = /^([a-zA-Z0-9]*)$/;
    pass = drop_spaces(pass); //функцию drop_spaces() см. выше
    if (template.test(pass)) {
        return true;
    }
    return false; 
}

////////////////////
function alertMessage(s){
	alert(s);
}

function checkLogin(login){

	if(trim(login.value)=='')return  "Введите логин";
	
	if(check_login(login.value)=='')return "Введите корректный логин";
	
	if(login.value.length<6)return "Длина логина не менее 6 символов";
	
	return "";
}

function checkMail(mail){

	if(trim(mail.value)=='')return "Введите e-mail";
	
	if(check_email(mail.value)=='')return "Введите корректный e-mail";

	return "";
}

function checkReq(field){

	if(trim(field.value)=='')return "Заполните поле";

	return "";
}

function checkPassword(pass){

	if(trim(pass.value)=='')return "Введите пароль";
	
	if(check_password(pass.value)=='')return "Введите корректный пароль";
	
	if(pass.value.length<6)return "Пароль должен содержать не менее 6 символов";
	
	if($(pass.form).find("*[name='cpassword']").length>0 
		&& pass.value!=$(pass.form).find("*[name='cpassword']")[0].value){
		return "Не совпадает пароль и подтверждение";
	}
	return "";
}



;(function($) {
	$.fn.extend({
		initForm:function(){
			/*инициализируем автоподстановку городов :)*/
			$(this).find("input.town").autocomplete("/autocomplete_city.php",{scroll:false,delay:400, max:10});
			$(this).find('input.date').attachDatepicker();
			//$(this).find("*[name='town']").autocomplete("/autocomplete_city.php",{scroll:false,delay:400, max:10});
			
			$(this).find("*[type='submit']").attr("disabled","disabled").attr( "title","Проверьте правильность заполнения формы" );
			valid=true;
			
			checkAll=function(form){
				valid=true;
				$(form).find("input.req").each(function(){
					if(valid && checkReq(this).length>0){
						valid=false;
					}				
				});
				
				$(form).find("*[name='login']").each(function(){
					if(valid && checkLogin(this).length>0){
						valid=false;
					}				
				});
				$(form).find("*[name='mail']").each(function(){
					if(valid && checkMail(this).length>0){
						valid=false;
					}				
				});
				$(form).find("*[name='password']").each(function(){
					if(valid && checkPassword(this).length>0){
						valid=false;
					}				
				});
				
				$(form).find("span.error").each(function(){
					if(valid && $(this).text().length>0){
						valid=false;
					}				
				});
				
				
				if(valid){
					$(form).find("*[type='submit']").removeAttr( "disabled" ).removeAttr( "title" );
				}else{
					$(form).find("*[type='submit']").attr( "disabled","disabled" ).attr( "title","Проверьте правильность заполнения формы" );
				}
				
				return valid;
			}
			checkAll(this);
			
			$(this).find("input.req").keyup(function(){
				var message=checkReq(this);
				$(this).removeClass("error");
				if(message.length>0){
					$(this).addClass("error");
				}
				$(this.form).find("#error-"+$(this).attr('name')).text(message);
				checkAll(this.form);				
			});
			
			
			$(this).find("*[name='login']").keyup(function(){
				var message=checkLogin(this);
				$(this).removeClass("error");
				if(message.length>0){
					$(this).addClass("error");
				}
				$(this.form).find("#error-login").text(message);
				checkAll(this.form);				
			});
			
			$(this).find("*[name='mail']").keyup(function(){
				var message=checkMail(this);
				$(this).removeClass("error");
				if(message.length>0){
					$(this).addClass("error");
				}
				$(this.form).find("#error-mail").text(message);	
				checkAll(this.form);			
			});
			
			$(this).find("*[name='password']").keyup(function(){
				var message=checkPassword(this);
				$(this).removeClass("error");
				$(this.form).find("*[name='cpassword']").removeClass("error");
				if(message.length>0){
					$(this).addClass("error");
					$(this.form).find("*[name='cpassword']").addClass("error");
				}
				$(this.form).find("#error-password").text(message);	
				checkAll(this.form);			
			});
			$(this).find("*[name='cpassword']").keyup(function(){
				var message=checkPassword(this.form.password);
				$(this).removeClass("error");
				$(this.form).find("*[name='password']").removeClass("error");
				if(message.length>0){
					$(this).addClass("error");
					$(this.form).find("*[name='password']").addClass("error");
				}
				$(this.form).find("#error-password").text(message);
				checkAll(this.form);				
			});
			
			
			
			$(this).bind("submit",function(){
				
				submitText=$(this).find("*[type='submit']").attr("value");

				$(this).find("*[type='submit']").attr("value","Отправка").attr("disabled","disabled");
				$(this).find("input").attr("readonly","readonly");
				this_form=this;
				var data=$(this).serialize();

				
//				return false;
				$.post($(this).attr("action"),data+"&ajax=true",function(resp){
					var redirect_name="redirect=";
					var message_name="message=";
//					alert(resp);
					if(resp=='ok'){
						document.location='/';
					}else if(resp.substring(0,redirect_name.length)==redirect_name){
						document.location=resp.substring(redirect_name.length);
					}
					else if(resp.substring(0,message_name.length)==message_name){
						alert(resp.substring(message_name.length));
					}
					else{
						$(resp).find("div").each(function(){
							$(this_form).find("#error-"+this.id).text($(this).text());
							if($(this).text().length>0){
								$(this_form).find("*[name='"+this.id+"']").addClass('error');
							}
						});
					}	
					$(this_form).find("*[type='submit']").attr("value",submitText);
					$(this_form).find("input").removeAttr("readonly");
					checkAll(this_form);
				});
				return false;
			});
			return false;
			/////////////////////////////////////
		}
	});
})(jQuery);
