var controlStringNum;
var dataCreate;
var responseMsg;

$(document).ready(function(e) {

  $("#overlay_map").overlay({ color: '#ffffff', top: 200, mask: "#FFFFFF", closeOnClick: true });

  function debounce(func, wait) {
    var timeout;
    return function() {
      var context = this, args = arguments;
      var later = function() {
        timeout = null;
        func.apply(context, args);
      };
      clearTimeout(timeout);
      timeout = setTimeout(later, wait);
    };
  };

  function ajaxValidate(el) {
    $(el).removeClass().addClass('fieldChecking');
    $.ajax({
      type: "POST",
      url: '/wp-content/themes/via/signup.php',
      data: "action=validate&what="+el.name+"&value="+encodeURIComponent(el.value),
      dataType: "json",
      success: function(response){
        if (response.result == 'OK') {
          $(el).removeClass().addClass('fieldOk');
          $(el).attr('msg', '');
          var ttel = $('.tooltipError');
          if (ttel.attr('for') == $(el).attr('name')) {
            ttel.hide();
          }
        } else {
          var msg = response.errorDescription ? response.errorDescription : '';
          $(el).attr('msg', msg);
          $(el).removeClass().addClass('fieldError');
          if ($(el).is(":focus")) {
            showErrorTip($(el));
          }
        }
        updateSubmitErrorMsg();
      },
      error: function(){
        // TODO: retry later?
      }
    });
  }
  
  var lazyValidators = {};
  function lazyValidate(event) {
    //var code = event ? (event.keyCode || event.which) : 0;
    //if (code == 9 || code == 16 || code == 18 || code == 27 || (code >= 37 && code <= 40) ) return; // skip tab, arrow keys, shift, esc
    var lazyValidator = lazyValidators[this.name];
    if (!lazyValidator) {
      lazyValidator = lazyValidators[this.name] = {
         lastValue: null
        //,fn: debounce(ajaxValidate, 500)
        ,fn: ajaxValidate
      }
    }
    if (lazyValidator.lastValue !== this.value) {
      $(this).removeClass().addClass('fieldChecking');
      lazyValidator.fn(this);
      lazyValidator.lastValue = this.value;
    }
  }
  
  $('#free_reg :input[type=text]').bind('blur', lazyValidate);
  $('#free_reg :input[type=password]').bind('blur', lazyValidate);
  $('#free_reg :input[type=checkbox]').bind('keyup onchange click', function(event) {
    updateSubmitErrorMsg();
  });
  
  function showErrorTip(inputEl) {
    var msg = inputEl.attr('msg');
    var el = $('.tooltipError');
    if (msg && msg != "") {
      var offset = inputEl.offset();
      el.html(msg);
      el.css({top: offset.top + 30, left: offset.left});
      el.attr('for', inputEl.attr('name'));
      el.show();
      //alert(offset.left + " - " + el.offset().left);
    } else {
      el.hide();
    }
  }
  
  function updateSubmitErrorMsg() {
    // perform a basic check on all field values (must not be empty, must not have failed asynch validation)
    var ok = true;
    var hasErrors = 0;
    var hasEmpty = 0;
    var isAccepted = $("#checktermInp").attr('checked');
    $('#free_reg :input').each(function(idx, el) {
      el = $(el);
      if (el.attr('value') == '') {
        hasEmpty++;
      }
      if (el.attr('class') == 'fieldError') {
        hasErrors++;
      }
    });
    var el = $("#submitCreate");
    if (hasEmpty) {
      ok = false;
      el.attr('msg', "Please fill in all fields");
    } else if (hasErrors) {
      ok = false;
      el.attr('msg', "Some fields have errors, please correct them first");
    } else if (!isAccepted) {
      el.attr('msg', "Please accept the terms of service and privacy policy");
      ok = false;
    } else {
      el.attr('msg', "");
    }
    return ok;
  }
  
  $('#free_reg :input').bind({
    blur: function(){
      $('.tooltipError').hide();
    },
    focus: function(){
      showErrorTip($(this));
    },
    mouseenter: function(){
      showErrorTip($(this));
    },
    mouseleave: function(){
      $('.tooltipError').hide();
    }
  });
  
  
  $('#free_reg').submit(function(){
    var ok = updateSubmitErrorMsg();
    showErrorTip($("#submitCreate"));
    //disable submit button and show "wait" mask
    $("#waitmask").css("visibility", (ok ? "visible" : "hidden"));
    return ok;
  });

  $('.yourcountryTool').bind({
    click: 
      function(){
        $('.toolCountry').fadeIn(300);
      },
    mouseleave:
      function(){
        $('.toolCountry').fadeOut(100);
      }
  });
  
});

function responseMsgFun(responseMsg){
  $('.commonMsg').html(responseMsg);
  $('.commonMsg').fadeIn(400);
  if(responseMsg.indexOf("SuccesS") != (-1) ){
    // reg ok
    $('.commonMsg').css({'background': '#8ACF26', 'text-align' : 'center'});
    setTimeout("$('.commonMsg').fadeOut(400)", 1000);
  }
  else {
  };
  
};


