var has_lower_case = /[a-z]/;
var has_upper_case = /[A-Z]/;
var has_number = /\d+/;
var has_special = /.[!,@,#,$,%,\^,&,*,?,_,~,-,(,)]/;

function passwordStrength(event)
{
  if (! $('user_password')) { return; }
 var password = $('user_password').value;

 var desc = [];
 desc[0] = "Too short";
 desc[1] = "Weak";
 desc[2] = "Medium";
 desc[3] = "Strong";
 desc[4] = "Very Strong";

 var score   = 0;

 if (password.length > 5) {
   score++;    //if password bigger than 6 give 1 point
   
   //if password has both lower and uppercase characters give 1 point  
   if ( ( password.match(has_lower_case) ) && ( password.match(has_upper_case) ) ){score++;}

   //if password has at least one number give 1 point
   if (password.match(has_number)) {score++;}

   //if password has at least one special caracther give 1 point
   if ( password.match(has_special) ) {score++;}
 }

  $('passwordStrength').innerHTML = desc[score];
  $('passwordStrength').className = "strength" + score;
}


function start_auto_complete_district(event){district_search_auto_completer.activate();}
function start_auto_complete_school(event){school_search_auto_completer.activate();}



function set_error_display(b,e){
  if (b){Element.up(e,0).addClassName('fieldWithErrors');}
  else  {Element.up(e,0).removeClassName('fieldWithErrors');}
  return false;
}
function require_text(event){
  var e = event.element();
  set_error_display((e.value.length === 0),e);
  return false;
}
function require_email(event){
  return false;
  // var regexEmail = /^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i;
  // var e = event.element();
  // set_error_display(regexEmail.test(e.value),e);
  // return false;
}


function set_submit(){
  var b=$('user_submit');
  if (b.hasClassName('purplebtn')){
    b.removeClassName('purplebtn');
    b.addClassName('disabledbtn');
    b.disable();
  } else {
    b.removeClassName('disabledbtn');
    b.addClassName('purplebtn');
    b.enable();    
  }
}

// FIXME: This code is in 2 places - card_enter.js

function us_state_changed(){
  var d = $('district_search');
  var s = $('school_search');
  var i = $('user_us_state').selectedIndex;
  
  if ( i===0 ){ 
    d.addClassName('has_prerequisite');
    s.addClassName('has_prerequisite');
    d.value = 'first select your state';
    s.value = 'first select your state';
  } else { 
    s.value = 'first select your district';
    s.addClassName('has_prerequisite');
    d.removeClassName('has_prerequisite');
    d.value='';
    d.disabled = false;
    d.focus();
  }
}
function district_has_good_selection(){
  var d = $('district_search');
  var dn = $('district_name');
  var good_district_selected = true;
  if(parseInt($('user_district_id').value, 10) < 1) {good_district_selected=false;}
  if (d.value.length === 0)                         {good_district_selected=false;}
  if (d.value === 'start typing your district name'){good_district_selected=false;}
  if (d.value.startsWith('Plus '))                  {good_district_selected=false;}
  if (d.value !== dn.value)                         {good_district_selected=false;}
  return good_district_selected;
}
function district_required(){
  $('district_name').value=$('district_search').value;
  $('district_search').value='';
  $('user_district_id').value='0';
}
function school_has_good_selection(){
  var d = $('school_search');
  var dn = $('school_name');

  var good_school_selected = true;
  if(parseInt($('user_school_id').value, 10) < 1)   {good_school_selected=false;}
  if (d.value === 'start typing your school name')  {good_school_selected=false;}
  if (d.value.startsWith('Plus '))                  {good_school_selected=false;}
  if (d.value.unescapeHTML() !== dn.value.unescapeHTML())                         {good_school_selected=false;}
  if (dn.value.length===0)                          {good_school_selected=false;}
  return good_school_selected;
}
function school_required(){
  $('school_name').value=$('school_search').value;
  $('school_search').value='';
  $('user_school_id').value='0';
}
function district_create_new_location(){
  $('district_search').value=$('district_name').value;
  $('district_loading').show();
  ignore = new Ajax.Request('/district_create/'+$('user_us_state').value+'/'+$('district_name').value, { method:'POST', parameters: '?authenticity_token=' + encodeURIComponent(token)});
}
function school_create_new_location(){
  $('school_search').value=$('school_name').value;
  $('school_loading').show();
  ignore = new Ajax.Request('/school_create/'+$('user_district_id').value+'/'+$('school_name').value, { method:'POST', parameters: '?authenticity_token=' + encodeURIComponent(token)});
}
var district_leaving_autocomplete = false;
var school_leaving_autocomplete = false;
function district_onblur(){
  if (!district_leaving_autocomplete && !district_has_good_selection()){district_required();}
}
function school_onblur(){
  if (!school_leaving_autocomplete && !school_has_good_selection()){school_required();}
}


// Called after the user has clicked on a dropdown selection
function district_changed(element,value){
  var d = $('district_search');
  var s = $('school_search');
  $('user_district_id').value=value.id.substring(value.id.lastIndexOf('_')+1);
  $('district_name').value=value.innerHTML.unescapeHTML();
  district_leaving_autocomplete = true;
  d.blur();
  district_leaving_autocomplete = false;
  
  if (!district_has_good_selection()){
    district_required();
    d.focus();
    d.select();
  }else{
    d.removeClassName('has_prerequisite');
    s.removeClassName('has_prerequisite');
    s.value='';
    s.disabled = false;
    s.focus();
  }
}
// Called after the user has clicked on a dropdown selection
function school_changed(element,value){
  var s = $('school_search');
  $('user_school_id').value=value.id.substring(value.id.lastIndexOf('_')+1);
  $('school_name').value=value.innerHTML.unescapeHTML();
  school_leaving_autocomplete = true;
  s.blur();
  school_leaving_autocomplete = false;
  
  if (!school_has_good_selection()){
    school_required();
  }else{
  }
}



function indicate_creating_account(btn){
  btn.removeClassName('purplebtn');
  btn.addClassName('disabledbtn');
  btn.disabled=true;
  btn.value='Creating your account...';
  // result = (btn.onsubmit ? (btn.form.onsubmit() ? btn.form.submit() : false) : btn.form.submit());
  btn.form.method = 'POST';
  btn.form.action = '/signup.html';
  result = btn.form.submit();
  return result;
}


Event.observe(window, 'load', function(){
  if ($('user_password')){$('user_password').observe('keyup', passwordStrength);}
  
  if ($('district_search')){$('district_search').observe('focus', start_auto_complete_district);}
  if ($('school_search')){$('school_search').observe('focus', start_auto_complete_school);}

  Event.observe('user_first_name', 'blur', require_text);
  Event.observe('user_last_name', 'blur', require_text);
  // Event.observe('user_email', 'blur', require_email);
  Event.observe('district_search', 'blur', district_onblur);
  Event.observe('school_search', 'blur', school_onblur);

  if ($('user_terms_of_service')){$('user_terms_of_service').checked = '';}
  if ($('user_terms_of_service')){Event.observe('user_terms_of_service', 'click', set_submit);}
  
  Event.observe('user_us_state', 'change', us_state_changed);
  if ($('user_first_name')){$('user_first_name').focus();}
});


