$(document).ready(function(){
var img = new Image();
img.src = "/xxl_templ/images/loading.gif";
var formdata;
var alphaTest = /^[A-Za-zА-ЯЁа-яё\s]+$/;    
var alphanumTest = /^[A-Za-zА-ЯЁа-яё0-9-\s]+$/;
var numTest = /^[0-9\s]+$/;
var telTest = /^[0-9-+*.()\s]+$/;
var emailTest = /\w{1,}[@][\w\-]{1,}([.]([\w\-]{1,})){1,3}[\s]*$/;
//var urlTest = /^([a-z0-9]{1,})([a-zа-яё0-9-._]*)\.([a-zа-яё]{2,6})$/;
var urlTest = /^(?:(?:https?):\/\/(?:[a-z0-9а-яё_-]{1,32}(?::[a-z0-9а-яё_-]{1,32})?@)?)?(?:(?:[a-z0-9а-яё-]{1,128}\.)+(?:com|net|org|mil|edu|arpa|ru|gov|biz|info|aero|inc|name|[a-zа-яё]{2,6})|(?!0)(?:(?!0[^.]|255)[0-9]{1,3}\.){3}(?!0|255)[0-9]{1,3})(?:\/[a-z0-9а-яё.,_@%&?+=\~\/-]*)?(?:#[^ \'\"&<>]*)?[\s]*$/i;
var streetTest = /^[A-Za-zА-ЯЁа-яё0-9-.\s]+$/;
var houseTest = /^[A-Za-zА-ЯЁа-яё0-9-/\s]+$/;
var housingTest = /^[A-Za-zА-ЯЁа-яё0-9-/\s]+$/;
var officeTest = /^[A-Za-zА-ЯЁа-яё0-9-\s]+$/;
var error = "";
var maxValuesObj={    // Объект с id элементов, для которых задано макс. значение
  'code_country':3,
  'code_city':5
}
var minValuesObj={    // Объект с id элементов, для которых задано мин. значение
  'password':6
}
var intervalValuesObj={   // Объект с id элементов, для которых задан интервал возможных значений
  'tel':'5-9'
}

var validdd = true; 
var IE = false;                                                                                       

if (!$.support.opacity){
  IE = true;
}

/* Confirm */
$.crInfoWindow = function(info_text, w_class){ 
  $('#info_window').remove(); 
  var info_window = $('<div id="info_window" class="popup_window modal info_window"><p class="form_label" style="text-align:center;">'+
  info_text+'</p>'+
  '<div class="aux_sh tl"></div>'+
  '<div class="aux_sh tr"></div>'+
  '<div class="aux_sh bl"></div>'+
  '<div class="aux_sh br"></div>'+
  '<div class="button info_ok"><div><a href="#">OK<span></span></a></div></div>'+
  '<a href="#" class="close_window"></a>'+
  '</div>').hide().appendTo('#wrapper');
  if(w_class){
    info_window.addClass('info_'+w_class);
  }
  return info_window;
}

/* Создание блока с каптчей */
$.Captcha = function(formdata, form){
  var form_id = form.attr('id');
  var JSONdata;
  var captcha = $('<div id="hey" class="popup_window modal">'+
  '<div class="aux_sh tl"></div>'+
  '<div class="aux_sh tr"></div>'+
  '<div class="aux_sh bl"></div>'+
  '<div class="aux_sh br"></div>'+
  '<a href="#" class="close_window"></a>'+
  '<img src="/xxl_templ/images/loading.gif" class="load_submit" /></div>').appendTo('body');
  captcha.css({
    'position':'fixed',
    'top':'50%',
    'margin-top':'-90px',
    'display':'none'
  });
  captcha.append('<form class="form_code xxl_form" method="get" style="overflow:hidden;">'+
    '<div class="form_item code"><label for="code">Введите проверочный код:</label>'+
    '<div class="bg_inputs_box_right"><div class="bg_inputs_box_left"><div class="bg_inputs_right">'+       
    '<div class="bg_inputs_left"><input type="text" id="code" name="code" /></div></div></div></div>'+
    '</div><img src="/xxl_templ/php/secpic.php?'+Math.random()+'" width="100" height="60" alt="captcha" /><p class="err"></p>'+
    '<div class="button button_form"><div><a href="#" class="submit_anchor">Отправить<span></span></a></div></div>'+
    '</form>');
  //overlay = $.crOverlay();
  //overlay.fadeIn(500);
  (IE) ? captcha.show() : captcha.fadeIn(500);

  $('form.form_code').submit(function(e){
    var code = "";
    if($('#code').val()==""){return false;}
    else{
      $('.load_submit').show();
      code = $('input[name=code]').val();
      $.ajax({
        url: form.attr('action'),
        type: 'get',
        data: formdata+'&code='+code,
        dataType: 'json',
        success: function(JSONdata){
          $('.load_submit').hide();
          if(JSONdata.status==0){
            $('p.err').html('Неверный код!');
            return false;
          }
          else{
            if (IE){
              captcha.hide(0, function(){
                $(this).remove();  
              });  
            }
            else{
              captcha.fadeOut(500, function(){
                $(this).remove();
              })
            }
            if(JSONdata.status == 2){
              form.find('a.submit_anchor').click(function(){return false;}).addClass('disabled');
              //$('.upload_price.in_tour').show().find('input:hidden[name=id_new_shop], input:hidden[name=shop_id]').val(JSONdata.id_new_shop);              
            }
            $.SwitchResponses(JSONdata, false, form_id);
          }
        },
        error: function(data, reason){
          $('.load_submit').hide();
          $('p.err').html('Произошла ошибка, попробуйте ещё раз!');          
        }
      });
    }
    return false;
  });
};

$.SwitchResponses = function(JSONdata, second_w, w_class){         //JSONdata - объект с данными; есть вторая всплывашка или нет
  var info_text = JSONdata.text;
  if(w_class){
    var info_window = $.crInfoWindow(info_text, w_class);
  }
  else{
    var info_window = $.crInfoWindow(info_text);
  }
  (second_w) ? $.showWindow('#info_window', true) : $.showWindow('#info_window', false);
  if(IE){info_window.show()}
  else{info_window.fadeIn(500)}  
};

/* Функция для проверки на пустоту */
$.isEmpty = function(el){
  if(!el.is('select') && !el.hasClass('cusel') && (el.val()=="")){  //для текстовиков
    error = 'Обязательное поле';
    validdd = false;
    $.createNoticeError(el, error);
  }
  else if(el.is('select') && !el.is(':selected')){  // для обычных селектов
    error = 'Выберите вариант';
    validdd = false;
    $.createNoticeError(el, error);
  }
  else if(!el.is('select') && el.hasClass('cusel')){
    var cuselHiddenVal = el.find('input:hidden').val();
    if(cuselHiddenVal==0 || cuselHiddenVal=="" /*|| cuselHiddenVal=="null"*/){
      error = 'Выберите вариант';
      validdd = false;
      $.createNoticeError(el, error);      
    }
  }
  else{
    validdd = testing(el);
  }  
}

/* Создание нотисов с ошибками */
$.createNoticeError = function(el, error){
  var elOffs = el.position();
  var elOffsLeft = elOffs.left;     // вычисляем позицию
  var elOffsTop = elOffs.top;
  var Notice= $('<div class="notice_error" id=notice_error_'+el.attr('id')+'><div></div></div>');
  Notice.css({                  
    'left': (elOffsLeft-20)+el.outerWidth(true)*2/3,
    'top': elOffsTop-20
  });
  el.parent().append(Notice);  
  Notice.find('div').text(error);
};

/* Удаление нотисов с ошибками */
$.removeNoticeError = function(id){
  if(id=='all'){  //удаляем все нотисы
    $('div.notice_error').remove();
  }
  else{  // удаляем какой-то определённый нотис
    $('#notice_error_'+id).remove();
  }
};

/* Анализ классов и дальнейшие назначения */
  function testing(testElm){
    if(testElm.is('select')){
      return false;
    }
    if(testElm.hasClass('alpha')){
      validdd = alpha(testElm);
    }
    if(testElm.hasClass('alphanum')){
      validdd = alphanum(testElm);
    }
    if(testElm.hasClass('num')){
      validdd = num(testElm);
    }
    if(testElm.hasClass('tel')){
      validdd = tel(testElm);
    }
    if(testElm.hasClass('email')){
      validdd = email(testElm);
    }
    if(testElm.hasClass('street')){
      validdd = street(testElm);
    }
    if(testElm.hasClass('house')){
      validdd = house(testElm);
    }
    if(testElm.hasClass('housing')){
      validdd = housing(testElm);
    } 
    if(testElm.hasClass('office')){
      validdd = office(testElm);
    }
    if(testElm.hasClass('url')){
      validdd = url(testElm);
    }         
    if(testElm.hasClass('interval')){
      var minVar = parseInt(intervalValuesObj[testElm.attr('id')].slice(0, (intervalValuesObj[testElm.attr('id')].indexOf('-'))));
      var maxVar = parseInt(intervalValuesObj[testElm.attr('id')].slice(intervalValuesObj[testElm.attr('id')].indexOf('-')+1));
      validdd = interval(testElm, minVar, maxVar);
    }
    if(testElm.hasClass('max')){
      var maxVar = maxValuesObj[testElm.attr('id')];
      validdd = max(testElm, maxVar);
    }
    if(testElm.hasClass('min')){
      var minVar = minValuesObj[testElm.attr('id')];
      validdd = min(testElm, minVar);
    }
    return validdd;
  }

/* Получение и потеря фокуса */
var controlElms = $('form.control :text.validate, form.control :password.validate, form.control textarea.validate, form.control select.validate, form.control .cusel');
controlElms.live('blur', function(){
  if($(this).hasClass('required') || $(this).hasClass('cusel')){
    $.isEmpty($(this));
  }
  else if($(this).val()!=''){
    validdd = testing($(this));
  }  
})
.live('focus', function(){
  $.removeNoticeError($(this).attr('id'));
});

/* При клике по нотису уничтожаем его и передаём фокус */ 
$('.notice_error').live('click', function(){
  $(this).remove();
  var targetFocusElm = ($(this).attr('id')).slice(13);
  $('#'+targetFocusElm).focus();  
});


/* При отправке формы передаём данные на проверку */
$('form.control').submit(function(){    
  $.removeNoticeError('all');
  form = $(this);
  form_id = form.attr('id');
  validdd = true;
  //formIsSubmit = true;

  /* Выбираем все валидируемые элементы */
  var validateElements = form.find(':input.validate, .cusel');
  validateElements.filter(':text.required, :password.required, textarea.required, select.required, .cusel').each(function(){
    $.isEmpty($(this));
  });

  if(!form.hasClass('no-cap')){
    if(validdd){
      formdata = form.serialize();
      $.Captcha(formdata, form);
    } 
    return false; 
  }
  else{
    if(validdd){
      if(form.hasClass('no-ajax')){ return true; }
      else{
      formdata = form.serialize();
      var load_gif = $('<img src="/xxl_templ/images/loading.gif" class="preloader_gif" style="position:absolute;top:11px;right:-50px;z-index:100;" />');
      form.find('.submit_anchor:last').append(load_gif);   
      $('#status_xml_yml').find('span').text('Загрузка...').end().show();                             
      $.ajax({
        url: form.attr('action'),
        type: 'get',
        data: formdata,
        dataType: 'json',
        success: function(JSONdata){
          load_gif.remove();
          if (!form.hasClass('no-resp')){
            if(form.parents('.modal').length){            
              $.SwitchResponses(JSONdata, false, form_id);
            }
            else{     
              $.SwitchResponses(JSONdata, true, form_id);
            };          
          }
          if (form.attr('id') == 'add_new_ticket'){
            if (JSONdata.status == 1){
              var response_ticket = JSONdata.res_req;
              $('#all_open_tickets .tickets_box').prepend(response_ticket);             
            }
          } 
          else if (form.attr('id') == 'xml_yml_form'){
            if (JSONdata.status == 1){
            form.find('.submit_anchor:last').append(load_gif);
            $('#status_xml_yml')
            .find('span').text('Файл(ы) успешно загружен(ы) и в настоящий момент происходит обработка. Это может занять некоторое время. Пожалуйста, подождите.');
              $.ajax({
                url: form.attr('action'),
                type: 'get',
                data: 'yml=loaded&yml_ids='+JSONdata.yml_ids,
                dataType: 'json',
                success: function(JSONdata){
                  load_gif.remove(); 
                  $('#status_xml_yml').hide();
                  if (JSONdata.status == 1){
                    $.SwitchResponses(JSONdata, true, 'xml_yml_ok');
                    if (!form.parents('#import_prices_box').hasClass('in_tour')){
                      $('.info_xml_yml_ok .info_ok').click(function(){
                        location.replace('http://price.xxl-market.ru/admin/prodlist/');
                      });
                    }  
                  }
                  else{
                    $.SwitchResponses(JSONdata, true);
                  }   
                },
                error: function(){
                  load_gif.remove();
                  $('#status_xml_yml').hide();
                  $.SwitchResponses({"text": "Произошла ошибка обработки. Попробуйте ещё раз."}, true);
                }                
              });             
            }
            else{
              load_gif.remove();
              $('#status_xml_yml').hide();
              $.SwitchResponses(JSONdata, true);
            }                
          }
        },
        error: function(){
          load_gif.remove();
          $('#status_xml_yml').hide();
          if(form.parents('.modal').length){            
            $.SwitchResponses({'text':'Произошла ошибка! Попробуйте ещё раз'}, false, form_id);
          }
          else{     
            $.SwitchResponses({'text':'Произошла ошибка! Попробуйте ещё раз'}, true, form_id);
          };
        } 
      });
      }
    }
  }
  return false;
});

$('form.no-control').submit(function(){
  var form = $(this),
  		form_id = form.attr('id'),
  		formdata = form.serialize();
    var load_gif = $('<img src="/xxl_templ/images/loading.gif" class="preloader_gif" style="position:absolute;top:11px;right:-50px;z-index:100;" />');
    form.find('.submit_anchor:last').append(load_gif);                                
    $.ajax({
      url: form.attr('action'),
      type: 'get',
      data: formdata,
      dataType: 'json',
      success: function(JSONdata){
        load_gif.remove();
        if(form.parents('.modal').length){
          $.SwitchResponses(JSONdata, false, form_id);
        }
        else{
          $.SwitchResponses(JSONdata, true, form_id);
        };
      } 
    });  
    return false;
});

/* Только буквы */
  function alpha(alphaElm){
    if(!alphaTest.test(alphaElm.val())){
      error = 'Только буквы';
      validdd = false;
      $.createNoticeError(alphaElm, error);
    }
    return validdd;
  }

/* Только буквы и цифры */
  function alphanum(alphanumElm){
    if(!alphanumTest.test(alphanumElm.val())){
      error = 'Только буквы и цифры';
       validdd = false;
       $.createNoticeError(alphanumElm, error);
    }
    return validdd;
  }

/* Только цифры */
  function num(numElm){
    if(!numTest.test(numElm.val())){
      error = 'Только цифры';
       validdd = false;
       $.createNoticeError(numElm, error);
    }
    return validdd;
  }

/* Телефон */
  function tel(telElm){
    if(!telTest.test(telElm.val())){
      if(telElm[0].id=='code_country'){
        error = 'Некорректный код страны';  
      }
      else if(telElm[0].id=='code_city'){
        error = 'Некорректный код города';
      }
      else{
        error = 'Некорректный телефон';
      }
       validdd = false;
       $.createNoticeError(telElm, error);
    }
    return validdd;
  }

/* E-mail */
  function email(emailElm){
    if(!emailTest.test(emailElm.val())){
      error = 'Некорректный e-mail';
       validdd = false;
       $.createNoticeError(emailElm, error);
    }
    else if(emailElm.hasClass('unique')){
      emailElm.after('<img src="/xxl_templ/images/loading.gif" style="position:absolute;top:9px;right:-20px;" />')
      $.ajax({
        url:'/xxl_func_lib/xxl_func_ajax.php',
        type:'get',
        data:{ req_ajax: "email_repeat", email: emailElm.val() },
        success: function(data){
          if(data=='no'){
            emailElm.next('img').remove();
            emailElm.after('<span class="check_step"></span>'); 
            return;
          }  
          else{
            error = 'E-mail занят';
            $.createNoticeError(emailElm, error);
            emailElm.next('img').remove();
            validdd = false;
          }
        }
      });
    }
    return validdd;
  }

/* Улица */
  function street(streetElm){
    if(!streetTest.test(streetElm.val())){
      error = 'Только буквы, цифры, ., -';
       validdd = false;
       $.createNoticeError(streetElm, error);
    }
    return validdd;
  }

/* Дом */
  function house(houseElm){
    if(!houseTest.test(houseElm.val())){
      error = 'Только буквы, цифры, -';
       validdd = false;
       $.createNoticeError(houseElm, error);
    }
    return validdd;
  }
  
/* Корпус */
  function housing(housingElm){
    if(!housingTest.test(housingElm.val())){
      error = 'Только буквы, цифры, -, /';
       validdd = false;
       $.createNoticeError(housingElm, error);
    }
    return validdd;
  } 
  
/* Офис */
  function office(officeElm){
    if(!housingTest.test(officeElm.val())){
      error = 'Только буквы, цифры, -';
       validdd = false;
       $.createNoticeError(officeElm, error);
    }
    return validdd;
  }   

/* URL */
  function url(urlElm){
    if(!urlTest.test(urlElm.val())){
      error = 'Некорректный адрес';
       validdd = false;
       $.createNoticeError(urlElm, error);
    }
    return validdd;
  }

/* Минимум символов */
  function min(minElm, minVar){
    if(minElm.val().length<minVar){
      error = 'Не менее '+minVar+' символов';
      validdd = false;
      $.createNoticeError(minElm, error);    
    };
    return validdd;
  }

/* Максимум символов */
  function max(maxElm, maxVar){
    if(maxElm.val().length>maxVar){
      error = 'Не более '+maxVar+' символов';
      validdd = false;
      $.createNoticeError(maxElm, error);    
    };
    return validdd;
  }


/* Определённый интервал количества символов */
  function interval(intervalElm, minVar, maxVar){
    if((intervalElm.val().length<minVar) || (intervalElm.val().length>maxVar)){
      error = 'Не менее '+minVar+' и не более '+maxVar+' символов';
      validdd = false;
      $.createNoticeError(intervalElm, error);
    }
    return validdd;
  }    
  
/* Закрытие окошка с каптчей */
$('#hey a.close_window, #over').live('click', function(){
    $('.popup_window:visible').hide();
    error="";
    validdd = true;
    $.removeOverlay();
    return false;
  });
});
