$(document).ready(function()
{
    var protect_form = new protect_form_obj;
    protect_form.Init();
    
    $("form[validate=On]").submit(function()
    {
        var flag= 0 ;
        var errors_array= [];
        var elements = [];
        var error_container = ($(this).attr('error_container') != "") ? $("#"+$(this).attr('error_container')) : $(this).find('.placeForError');

		$(error_container).html('');

        $(this).find(':input').each(function(n,element)
        {
            if(!$(element).attr("readonly") && $(element).is(':visible') && $(element).attr("validate") != undefined)
            {
                if($(element).val() == $(element)[0].defaultValue)
                {
                   $(element).val('');
                }
                
                var res = validate($(element).attr("value"),$(element).attr("validate"),$(element));

                if(!res)
                {
                     if($(element).val() == '' && $(element)[0].defaultValue != '')
                     {
                       $(element).val($(element)[0].defaultValue);
                     }
                    
                     errors_array.push($(element).attr("error"));
                     elements.push($(element));

                     flag++;
                }
                else
                {
                     $(element).removeClass("error");
                }
            }
        });

        if(flag == 0)
        {
            console.log($(this).attr('is_ajax'));
            if($(this).attr('is_ajax') == 'on')
            {
                send_ajax_form($(this));
                return false;
            }
            
            $(this).unbind('submit');
            $(this).submit();

            return true;
        }
				
        $(elements[0]).addClass("error");
        $('html, body').animate({ scrollTop: $(elements[0]).offset().top - 100},500);

        if(!$(error_container).is(':visible'))
            $(error_container).show('midle');

        $(error_container).html(errors_array[0]);

        return false;
    });

    $("form[validate=On] :input").live('keyup',function(event)
    {
        var field = event.target;
        var form = $(field).parents('form');

        if($(field).attr('readonly') == 'readonly')
            return;

        if($(form).attr('validate_on_fly') == 'off')
        {
           $(field).removeClass('error');
           return;
        }

        var error_container = ($(form).attr('error_container') != "") ? $("#"+$(form).attr('error_container')) : $(form).find('.placeForError');

        $(error_container).html('');

        if($(error_container).is(':visible'))
            $(error_container).hide('midle');
				
        validate_field(field);
    });

    $("form[validate=On] :input").live('blur',function(event)
    {
        var field = event.target;
        var form = $(field).parents('form');

        if($(field).attr('readonly') == 'readonly')
            return;

        var error_container = ($(form).attr('error_container') != "") ? $("#"+$(form).attr('error_container')) : $(form).find('.placeForError');

        $(error_container).html('');

        if($(error_container).is(':visible'))
            $(error_container).hide('midle');

        if($(form).attr('validate_on_fly') == 'off')
        {
           return;
        }
				
        validate_field(field);
    });
});

 function send_ajax_form(form)
 {
    var url = $(form).attr('action');
    var data = {};
    var error_container = ($(form).attr('error_container') != "") ? $("#"+$(form).attr('error_container')) : $(form).find('.placeForError');
    var success_message = ($(form).attr('success_message') != "") ? $(form).attr('success_message') : "Форма отправлена";
    var button =  $(form).find('input[type=submit]');
    var capcha = $(form).find('img.captchImage');
    var is_url_param = (url.split("?").length > 1) ? true : false;

    $(form).find(':input').each(function(n,element)
    {
        if($(element).attr('name') != '' && $(element).val() != $(element)[0].defaultValue)
        {
            data[$(element).attr('name')] = $(element).val();
        }
    });

    $(form).find('input[type=hidden]').each(function(n,element)
    {
        if($(element).attr('name') != '')
        {
            data[$(element).attr('name')] = $(element).val();
        }
    });

    $(button).attr('disabled','disabled');

    $.ajax(
    {
        url			 : (is_url_param) ? url + "&is_ajax=1" : url + "?is_ajax=1",
        data		 : data,
        type		 : "POST",
        dataType     : "json",
        success	     : function (res, textStatus)
        {
            if(res.status == true)
            {
               var redirect = $(form).find('input[name=after_submit_action]');
               if(redirect.length > 0)
               {
                  location.href =  $(redirect).val();
               }

               $(form).find(':input').each(function(n,element)
               {
                    if($(element)[0].defaultValue != '')
                    {
                        $(element).val($(element)[0].defaultValue);
                    }
                    else
                    {
                        $(element).val('');
                    }
               });

               $(error_container).html(success_message);
            }

            if(res.status == false)
            {
               $(error_container).html("Вы уже подписанны на россылку");
            }

            if(res.status == -1)
            {
               $(error_container).html("Неверный код защиты от спама");
            }

            update_capcha(capcha);
            $(error_container).css('display','block');
            $(button).removeAttr('disabled');
            $(button).focus();
        },

        error	: function ()
        {
            $(error_container).html("Приносим свои извинения, сообщение не удалось отправить. Попробуйте, пожалуйста позже, или свяжитесь с нами по e-mail или телефону.");
            update_capcha(capcha);
            $(error_container).css('display','block');
            $(button).removeAttr('disabled');
            $(button).focus();
        }
    });
 }

 function update_capcha(capcha)
 {
     var src = $(capcha).attr('src');
     var src_array = src.split("?");

     if(src_array.length == 2)
     {
        var reg=/id=.+/;
        var arr=reg.exec(src_array[1]);
        var new_sid = "sid=" + new Date().getTime();

         $(capcha).attr('src',src_array[0] + "?"+ arr[0] + '&' + new_sid);
     }
 }

 function validate_field(field)
 {
	 var field = field;
	 
	 setTimeout(function()
	 {
         if($(field).attr("validate") == undefined)
            return;

         var res = validate($(field).attr("value"),$(field).attr("validate"),field);
         if(!res)
         {
            $(field).addClass("error");
         }
         else
         {
            $(field).removeClass("error");
         }
	 },300);
 }

 function validate(value,type,field)
 {
    if($(field).attr('empty') == 'true' && value.length == 0)
        return true;
		
    if(type=='tel')
    {
        var reg=/^(\+{0,1})?[0-9()-]{4,20}$/;
        var result= reg.test(value);

        return  result;
    }
		
	if(type=='float_not_zero')
    {
        if(value <= 0)
            return false;
				
        var reg=/^[0-9]+((\.){1,1}[0-9]{1,2})?$/;
        var result= reg.test(value);
				
        return  result;
    }
		
	if(type=='date')
    {
        var reg=/^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d$/;
        var result= reg.test(value);

        return  result;
    }
		
	if(type=='time')
    {
        var reg=/^([0-1][0-9]|[2][0-3]):([0-5][0-9])$/;
        var result= reg.test(value);

        return  result;
    }

    if(type=='password')
    {	
        var reg=/^.{4,20}$/;
        var result=reg.test(value);

        return  result;
    }
		
	if(type=='login')
    {
        var reg=/^.{3,20}$/;
        var result=reg.test(value);

        return  result;
    }

    if(type=='password_confirm')
    {
        var reg=/^.{4,20}$/;
        var result=reg.test(value);

        if(result)
        {
           if($('#password').attr("value") === $('#password2').attr("value"))
            return true;
           else
            return false;
        }

        return false;
    }

    if(type=='city')
    {
        var reg=/^.{3,50}$/;
        var result=reg.test(value);

        return  result;
    }

    if(type=='name')
    {
       var reg=/^.{3,200}$/;
       var result=reg.test(value);
			 
       return result;
    }

    if(type=='message')
    {
       var reg=/^.{1,}$/;
       var result=reg.test(value);
       return result;
    }

    if(type=='adres')
    {
        var reg=/^.{10,70}$/;
        var result=reg.test(value);

        return result;
    }
		
	if(type=='not_empty')
    {
        var reg=/^.+$/m;
        var result=reg.test(value);

        return result;
    }

    if(type=='agreement')
    {
        if($(field).attr('checked'))
            return true;
        else
            return false
    }

    if(type=='email')
    {
        var reg=/^(([a-z0-9])(_)?(-)?(\.)?){1,20}@(([a-z0-9-]+\.)+(com|net|org|mil|edu|gov|arpa|info|biz|inc|name|[a-z]{2,4})|[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})$/i;
        var result=reg.test(value);

        return result;
    }			
 }

 


