
var numix = window['numix'] || {};

numix.ui = {};
numix.api = {};

numix.ui.params_hide = { height: "0px", opacity: 0 };
numix.ui.params_show = { height: "20px", opacity: 1 };

/**
* ui init / events binding
**/
numix.ui.init = function()
{
  // cufon
  //Cufon.replace('#header ul li a', { fontFamily: 'ZineSlabDisBI', fontWeight: 'bold', fontStyle: 'italic', hover: true});
  Cufon.replace('.fontRR', { fontFamily: 'ZineSlabDisRR'});
  Cufon.replace('.fontRRM', { fontFamily: 'ZineSlabDisRR', hover: true});
  Cufon.replace('.fontMI', { fontFamily: 'ZineSlabDisMI'});  
  Cufon.replace('.fontBI', { fontFamily: 'ZineSlabDisBI'});  
  
  $('#ilogout').bind('click', numix.user.logout);

  // TODO: enlever pcq jutse pour tester
  $('#iapicategories').bind('click', numix.votes.categories);
  $('#iapiusager').bind('click', numix.votes.usager);
  $('#iapisoumettre').bind('click', numix.votes.soumettre);
};

heap.api.numix = {};
heap.api.numix.soumission = {};
heap.api.setup({
  object: heap.api.numix.soumission,
  api_class:'soumission',
  url: heap.urlmap.api_json,
  methods: ['create']
});

numix.api.numix_creer_soumission = function() 
{  
  var params = jQuery.forms.toDataStructure('#form_soumettre');
  //$('.error_field').removeClass('error_field'); 
  //$('.error').animate(numix.ui.params_hide, 500, function(){ $(this).hide(); });
  heap.api.numix.soumission.create(numix.api.numix_creer_soumission_cb, params);
};

numix.api.numix_creer_soumission_cb = function(response)
{
	numix.charCount({textarea:'production_description',maxCount:1000});
	numix.charCount({textarea:'convergence_description',maxCount:500});
	
  if(response.type == heap.SUCCESS)
  {
    $('#form_thanks').show();
    $('#form_intro').remove();
    $('.removable').animate(numix.ui.params_hide, 1000, function(){ $(this).remove(); });
  }
	else 
	{
	  msg = '';
	  for (var i in response.data) 
	  {          
	    msg += i + ': ' + heap.translate(response.data[i]) + "\n";

      $('#i'+i+'').addClass('error_field');
      $('#i'+i+'_err').text(heap.translate(response.data[i]));
      $('#i'+i+'_err').animate(numix.ui.params_show, 500, function(){ $(this).show(); });
      $('.error_field').unbind();
      
      $('.error_field').bind('focus', function(){
        $(this).removeClass('error_field'); 
        $('#'+$(this).attr('id')+'_err').animate(numix.ui.params_hide, 500, function(){ $(this).hide(); });
      });
      //iproduction_url : production_url => validator-required
    }
  }
};

numix.charCount = function(param)
{
	if($('#i'+param.textarea).val().length > param.maxCount)
	{
		$('#i'+param.textarea).addClass('error_field');
		$('#i'+param.textarea+'_err').text('Maximum '+param.maxCount+' caractères');
		$('#i'+param.textarea+'_err').animate(numix.ui.params_show, 500, function(){ $(this).show(); });
	};
};

numix.api.users = {};
heap.api.setup({
  object: numix.api.users,
  api_class:'users',
  url: heap.urlmap.numix_api,
  methods: ['create','edit']
});

numix.user = {};
numix.user.login = function()
{
	params = new Object;
  params['email'] = $('#iemail').val();
  params['password'] = $('#ipassword').val();
  
  heap.api.users.login(numix.user.loginCallback, params);  

  return false;
};

numix.user.loginCallback = function(response)
{	
	if(response.type == heap.SUCCESS)
	  window.location.href = heap.urlmap.voter;
	else
  {    
    $('#ilogin_error').text(response.msg).animate(numix.ui.params_show, 500, function(){ $(this).show(); });
    
    $('#form_login input').bind('focus', function(){
      $('#ilogin_error').animate(numix.ui.params_hide, 500, function(){ $(this).hide(); });
    });
  }

	return;
};

numix.user.logout = function()
{
  heap.api.users.logout(numix.user.logoutCallback, {});  

  return false;
};

numix.user.logoutCallback = function(response)
{	
	if(response.type == heap.SUCCESS)
	  window.location.href = heap.urlmap.accueil;
	else
	  alert("ERREUR\n\n" + response.msg);
	
	return;
};

numix.api.rsvp = {};
heap.api.setup({
  object: numix.api.rsvp,
  'api_class':'rsvp',
  url: heap.urlmap.numix_api,
  methods: ['reserver']
});

numix.rsvp = {};
numix.rsvp.reserver = function()
{
  $('.error_field').each(function(){
    $(this).removeClass('error_field'); 
    $('#'+$(this).attr('id')+'_err').animate(numix.ui.params_hide, 0, function(){ $(this).hide(); });
  });  
  
  var params = jQuery.forms.toDataStructure('#form_rsvp');
  numix.api.rsvp.reserver(numix.api.rsvp.reserverCallback, params);  

  return false;
};
numix.api.rsvp.reserverCallback = function(response)
{
	if(response.type == heap.SUCCESS)
	{
		var rsvpForm = $('#form_rsvp');
		$(rsvpForm).height($(rsvpForm).height());
		$(rsvpForm).children('.inner').fadeOut('normal', function(){
			$('#rsvp_thanks').fadeIn('normal');
		});
	}
	else
	{
    msg = '';
	  for (var i in response.data) 
	  {          
	    msg += i + ': ' + heap.translate(response.data[i]) + "\n";

      $('#i'+i+'').addClass('error_field');
      $('#i'+i+'_err').text(heap.translate(response.data[i]));
      $('#i'+i+'_err').animate(numix.ui.params_show, 500, function(){ $(this).show(); });
      $('.error_field').unbind();
      
      $('.error_field').bind('focus', function(){
        $(this).removeClass('error_field'); 
        $('#'+$(this).attr('id')+'_err').animate(numix.ui.params_hide, 500, function(){ $(this).hide(); });
      });
      //iproduction_url : production_url => validator-required
    }
  }
}

// pour tester les api de votes
numix.api.votes = {};
heap.api.setup({
  object: numix.api.votes,
  'api_class':'votes',
  url: heap.urlmap.numix_api,
  methods: ['categories', 'usager', 'soumettre']
});

numix.votes = {};
numix.votes.categories = function()
{
  numix.api.votes.categories();  

  return false;
};
numix.votes.usager = function()
{
  numix.api.votes.usager();  

  return false;
};
numix.votes.soumettre = function()
{
  numix.api.votes.soumettre(function() { } , { soumission:3, rank: 3 });  

  return false;
};