$j(function(){
  window.setInterval("checkRequiredFields()", 500);
  
  /* General Validation */
  $j("input.validate_field").blur(function () {
    validateField($j(this));
  });
  
  /* Convert Group's name to Group Link */
  $j(".org_name").keyup(function() {
    var org_name = $j(this).val();
    var parsed_name = $j.trim(org_name).replace(/[^a-zA-Z0-9_\s]/gi, '').replace(/\s/gi, '_').toLowerCase();
    $j("#groupable_link").val(parsed_name);
    if (parsed_name != '' ) {
      validateField($j("#groupable_link"));
    }
  });
  
  $j("#groupable_link").keyup(function() {
    var parsed_name = $j.trim($j(this).val()).replace(/[^a-zA-Z0-9_\s]/gi, '').replace(/\s/gi, '_').toLowerCase();
    $j("#groupable_link").val(parsed_name);
    if (parsed_name != '' ) {
      validateField($j("#groupable_link"));
    }
  });

  /* Main & Sub categories */
  $j("select#main_category").change(function() {
	  $j.ajax({
		  type: "POST",
		  url: "/ajax/validate.php",
		  data: "name=" + $j('#main_category').attr("id") + "&value=" + $j('#main_category').val(),
		  success: function(msg) {
			  	$j('#sub_category').html(msg);
		  }
		});
  });
  
  /* Zip Code & City/Country */
  $j("#out_of_us_anchor").click(function(e) {
    e.preventDefault();
    $j("#zip_code").attr("disabled", true).addClass("disabled");
    $j("#zip_code").nextAll(".msg").empty();
    $j("#zip_code_container").hide();
    
    $j("#city").attr("disabled", false).removeClass("disabled");
    $j("#country").attr("disabled", false).removeClass("disabled");
    $j("#city_country_container").show();
    
  });
  
  $j("#in_us_anchor").click(function(e) {
    e.preventDefault();
    $j("#city").attr("disabled", true).addClass("disabled");
    $j("#country").attr("disabled", true).addClass("disabled");
    $j("#city").nextAll(".msg").empty();
    $j("#city_country_container").hide();
    
    $j("#zip_code").attr("disabled", false).removeClass("disabled");
    if ($j.trim($j("#zip_code").val()) != '') {
      validateField($j("#zip_code"));
    }
    $j("#zip_code_container").show();
  });
  
  /* Email */
  var email_value = '';
  $j("input#email").keyup(function() {
    if (email_value != $j(this).val()) {
      $j("#term_of_service").attr("checked", false);
    }
  });
  $j("input#email").blur(function() {
    //var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
    //if(reg.test($j(this).val()) == true) {
    validateField($j(this));
    //}
  });
  
  /* Validate Password */
  $j("input#password").keyup(function() {
    $j("input#confirm_password").nextAll(".msg").empty();
    checkPasswordStrength($j(this));
    if ($j("input#confirm_password").val() != "") {
      checkPasswordMatched();
    }
  });
  $j("input#confirm_password").keyup(function () {
    $j("input#confirm_password").nextAll(".msg").empty();
    $j("input#password").nextAll(".msg").empty().append(checkPasswordStrength($j("input#password")));
    checkPasswordMatched();
  });
});



function validateField(elem) {
  elem.nextAll(".msg").empty().append('<div class="loading"><img src="/img/loading.gif"/></div>');
   		$j.ajax({
		      type: "POST",
		      url: "/ajax/validate.php",
		      data: {name: elem.attr("id"), value: $j.trim(elem.val())},
		      success: function(result) {
		        showValidationResult(elem, result);
		      }
		});

}

function showValidationResult(element, result) {
  var msg_field = element.nextAll(".msg");
  msg_field.empty().append(result);
  
  var reg = /error_msg/;
  if (result.match(reg)) {
    $j("#term_of_service").attr("checked", false);
  }
}

function checkRequiredFields() {
  if ($j(".required_field:not(.disabled)").filter(function() {return $j(this).val()=='';}).length == 0 &&
      $j(".required_field").nextAll(".msg")
          .filter(function() {return $j(this).children(".error_msg").length > 0;}).length == 0 &&
      $j("#term_of_service").attr('checked')) {
    $j("#signup_btn").attr("disabled", false);
    $j("#signup_btn").removeClass("disabled_btn");
  } else {
    $j("#signup_btn").attr("disabled", true);
    $j("#signup_btn").addClass("disabled_btn");
  }
}

function checkPasswordMatched() {
  if ( $j("input#password").val() == $j("input#confirm_password").val() && 
       $j("input#password").val() != '') {
    $j("input#confirm_password").after('<div class="msg">Password matched</div>');
  } else {
    $j("input#confirm_password").after('\
      <div class="msg"> \
        <div class="error_msg">Your password does not match!</div> \
      </div>');
  }
}

function checkPasswordStrength(passwd_elem) {
  // Reset password msg field
  var msg = passwd_elem.nextAll(".msg");

  msg.empty().attr('class', 'msg');
             
  var passwd_value = passwd_elem.val();
  var re = /^\S{1,4}$/;
  var re_medium = /^\S{5,7}$/;
  var re_strong = /^\S{8,}$/;
  if (re.test(passwd_value)) {
    msg.addClass('weak_passwd').append("Weak");
  } else if (re_medium.test(passwd_value)) {
    msg.addClass('medium_passwd').append("Good");
  } else if (re_strong.test(passwd_value)) {
    msg.addClass('strong_passwd').append("Strong");
  } else {
    msg.addClass('error_msg');
    msg.append("Please enter a valid password.");
  }
}