// domainselector.js
var crazymails = crazymails || {};
crazymails.domainselector = crazymails.domainselector || {};
crazymails.domainselector.domain_tree = null;
crazymails.domainselector.current_toplevel = null;
crazymails.domainselector.current_category = null;
crazymails.domainselector.is_valid = true;
crazymails.domainselector.is_in_use = false;
// Cache Ajax request
// Html5 Session Storage - need to check whether this is available?
// 1 Minute cache time
if(supports_local_storage()){
//	$.ajaxCacheResponse.storage = window.sessionStorage;
}
// $.ajaxSetup({
	// cacheResponse : true,
	// cacheResponseTimer : 50000
// });


crazymails.domainselector.init = function() {
  
  $(".scrollable").scrollable();
  
  /* Make sure we show the 'register' button when user comes back from the next page' */

  /* See if we have an active domain, fill it */
  if(crazymails.readCookie('cm_selected_domain')){
    var selected_domain = crazymails.readCookie('cm_selected_domain');
    console.log(selected_domain);
    $('#email_selector_domain_box').removeClass('select_background').addClass('clear_background');
    $('#email_selector_domain').val(selected_domain);
    $('#email_selector_domain_disp').val(selected_domain);
        
  }else if($('#email_selector_domain').val()) {
    $('#email_selector_domain_disp').val($('#email_selector_domain').val());

    $('#email_selector_domain_box').removeClass('select_background').addClass('clear_background');
    $('#register_submit_button').removeClass('btn-primary');
  }else{
    $('#email_selector_domain_box').removeClass('clear_background').addClass('select_background');
  }
  
  if($('#email_selector_email').val()) {
    $('#email_selector_email_input').removeClass('select_background').addClass('clear_background');
  }else{
    $('#email_selector_email_input').removeClass('clear_background').addClass('select_background');
  }
  
  $('#email_selector_email').focus(function(){
    $('#email_selector_email_input').removeClass('select_background').addClass('clear_background');
  }).blur(function(){
    if($(this).val() == ''){
      $('#email_selector_email_input').addClass('select_background').removeClass('clear_background');
    }
  });  

  if($('#email_selector_email').val() && $('#email_selector_domain').val()) {
    $('#email_selector_domain_box').removeClass('select_background').addClass('clear_background');
    $('#register_submit_button').removeAttr('disabled').parent().show();
    $('#register_submit_button').addClass('btn-primary');    
  }
  
  $('#email_selector_email').live('keydown', function(e)
  {

    var keyCode = e.keyCode || e.which; 
    if (keyCode == 9) { 
//      $(document).scrollTop(180);
//      $('#domain_selector_halo').animateHighlight();

      e.preventDefault(); 
      return true;
      // call custom function here
    }    
    crazymails.domainselector.is_valid = true;
    $('#email_selector_form_info_message_unavailable').hide()
    $('#email_selector_form_info_message_available').hide()

    $('#register_submit_button').attr('disabled', 'disabled');
    $('#register_submit_button').removeClass('btn-primary');    
    $('#email_selector_avail').removeClass('active_small');
    $('#email_selector_avail').removeClass('error_small');
    $('#email_selector_email').parent().removeClass('active_small');
    $('#email_selector_email').parent().removeClass('error_small');
    $('#email_selector_form_info_message_invalid').hide();
    $('#email_selector_form_info_message_too_big').hide();
    $('.domain_selector_form_info_message').hide();
    $('#email_selector_form_info_message_not_available').hide();  
    delay(function(){

      var email = $('#email_selector_email').val();
      var iChars = "1234567890qwertyuioopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM_-.";
      /* Check for invalid characters */
      for (var i = 0; i < email.length; i++) {
        if (iChars.indexOf(email.charAt(i)) == -1) {
            $('#email_selector_email').parent().removeClass('active_small');
            $('#email_selector_email').parent().addClass('error_small');
            $('#email_selector_form_info_message_invalid').show().css('visibility','visible');
            crazymails.domainselector.is_valid = false;
            $('#email_selector_avail').removeClass('active_small');
            $('#email_selector_avail').addClass('error_small');
            return false;
        } 
      }
      if (email.length > 30) {
        $('#email_selector_form_info_message_too_big').show().css('visibility','visible');
        return false;
      }
      if (email.length > 0 && $('#email_selector_domain').val() != ''){
        crazymails.domainselector.check_available();
      };
    }, 500 );
  });

  crazymails.domainselector.click_handler();
  crazymails.domainselector.show_all_for_cat_handler();
};


crazymails.domainselector.click_handler = function() {
    // Domain click handler
    $('a.domainselector_domain').live('click', function(e){
      $('#email_selector_domain_box').removeClass('select_background').addClass('clear_background');
      $("#domain_selector_show_alls").close();
      var selected_domain = $(this).text().trim(); 
      $('.input-prepend').show();
      $('input#email_selector_domain').val(selected_domain);
      $('input#email_selector_domain_disp').val(selected_domain);
      $('.email_selector_visible').show();
      $('.domain_selector_form_info_message').hide();
      $('#email_selector_domain').val(selected_domain);
      crazymails.domainselector.check_available();
      crazymails.createCookie('cm_selected_domain',selected_domain,1);
      e.preventDefault();
      scroll(0,0);
      return false;
    });  
    
    
}

/*
 * Display All Domains for a Category on the 'see more' link
 */
crazymails.domainselector.show_all_for_cat_handler = function() {
    $('a.domainselector_show_all_for_cat').live('click', function(e){
      var position = $(this).position();
      var this_height = $(this).parent().height();
      var cat = $(this).attr('ref').trim();
      $('#domain_selector_show_alls').reveal();
      $('#domain_selector_show_alls h2').remove();
      $.when(crazymails.domainselector.load_cat(cat).getResult())
      // domain tree successfully received
      .then(function(domain_tree) {
        var categories = "<div>";
        var first_category = null;
      
        /* TODO: change to FOR LOOP */
        $.each(domain_tree, function(cat_name, cats_data) {
          categories += "<p class='clearleft' style='margin-bottom: 10px'></p><div><span>"+cat_name+"</span><br />";
          // Build nice structure here.
          var domain_count = 0;
//          categories += "<div><div class='domain_view_all_chunk'>";
          $.each(cats_data, function(index, domain) {
            // if(domain_count!= 0 && domain_count % 10 == 0) {
            //   categories += "</div><div class='domain_view_all_chunk'>"+cat_name+"<br/>";
            // }
            categories += "<div class='view_all_domain_element'><a href='#' class='domainselector_domain'>"+domain+"</a></div>"
            domain_count++;
          });
          categories += "</div>";
        categories += "</div>";
        });
        $('#domain_selector_show_alls_content').html(categories);
        $('#domain_selector_show_alls').prepend('<h2>'+cat+'</h2>');
        
//        $('#domain_selector_show_all').html(categories).overlay({load: true, fixed: false, closeOnClick: true});
      });
       e.preventDefault();
      return false;
    });  
}


crazymails.domainselector.load_cat = function(cat) {
  var result;

  $.ajax({
    url : '/domainselector/get_domain_tree_for_category',
    type : 'POST',
    async : false,
    data : {
      cat_name : cat
    },
    dataType : 'json',
    success : function(data) {
      result = data;
    },
    error : function(data) {
      /* TODO: ERROR */
    }
  });

  return {
    getResult : function() {
      if (result)
        return result;
      // else show some error that it isn't loaded yet;
    }
  };
};

crazymails.domainselector.check_available = function()
{

  /* reset availability messaging */
  $('#email_selector_avail_available').hide();
  $('#email_selector_avail_unavailable').hide();
  $('#register_submit_button').attr('disabled', 'disabled');
  $('#register_submit_button').removeClass('btn-primary'); 
  
  if($('#email_selector_email').val() != '') {

    $.ajax({
      url : '/register/isavailable',
      type : 'POST',
      async : true,
      data : {
        address : $('#email_selector_email').attr('value') + "@" + $('#email_selector_domain').attr('value')
      },
      dataType : 'json',
      success : function(data)
      {
        if(crazymails.domainselector.is_valid != true) {
            return false;
        }
        if(data.available) {
          $('#register_submit_button').removeAttr('disabled');
          $('#register_submit_button').addClass('btn-primary'); 
          crazymails.domainselector.is_in_use = false;
          $('#email_selector_form_info_message_not_available').hide();
        } else {

          $('#email_selector_email').parent().removeClass('active_small');
          $('#email_selector_email').parent().addClass('error_small');
          $('#email_selector_form_info_message_not_available').show().css('visibility', 'visible');
          crazymails.domainselector.is_in_use = true;
          $('#email_selector_avail').removeClass('active_small');
          $('#email_selector_avail').addClass('error_small');          
          return false;
        }
      },
      error : function(data)
      {
        alert('Oops! Sorry, something went wrong. please reload the page and try again.');
        return false;
      }
    });
    return false;
  }

};

var delay = (function(){
  var timer = 0;
  return function(callback, ms){
    clearTimeout (timer);
    timer = setTimeout(callback, ms);
  };
})();

/**
 * Detect if Browser supports HTML5 and Local Storage for cache
 * @returns {Boolean}
 */
function supports_local_storage() {
	try {
		return 'localStorage' in window && window['localStorage'] !== null;
	} catch (e) {
		return false;
	}
}


// $.fn.animateHighlight = function (e, amount) {
//         $(e.target).animate({top: amount + 'px'}, function(){
//            wobble(e, -amount);
//          });
// };


$(document).ready(function() {
  crazymails.domainselector.init();

});

