var jjr = {};
jjr.api = {};
jjr.flash = {};
jjr.voting = {};
jjr.htmlInterface = {};

heap.api.setup({
  'object' : jjr.api, 
  'api_class' : 'jjr', 
  'url' : heap.urlmap.api_jjr, 
  'methods' : ['search', 'login', 'logout', 'vote', 'getVotes', 'sendContactEmail', 'sendReminderEmail']
});

jjr.flash.embed = function(params)
{
  var swf_url = heap.urlmap.static + '/swf/' + params.mode + '.swf';
  if (params.swf_location) swf_url = params.swf_location;

  var width = (params.width ? params.width : 560);
  var height = (params.height ? params.height : 364);
  
	var playerVersion = swfobject.getFlashPlayerVersion();
	if(playerVersion.major < 10) return;
	
  swfobject.embedSWF(
    swf_url, 
    params.elem_id, 
    width, 
    height, 
    "10.0.0", //min flash version
		null,
    params.flashvars, 
    {
      'wmode' : 'transparent'  //flash params
    }
  );
};

jjr.login = function(params) {
  jjr.api.login(function(response) {
    if (response.type != heap.SUCCESS) {
      alert(response.msg);
      return false;
    }
    location.reload();
  }, params);
  return false;
};

jjr.htmlInterface.openLogin = function(){
	$(window).resize(function() { 
		var $shadow = $('#shadow');
		$shadow.css({width: $(window).width() + 'px', height: $(window).height() + 'px'});
		winx = $(window).width();
		$('#popup_login').css('left',(winx-xpopup)/2);	/* xpopup - definit plus bas */
		$('#password_link').css('left',(winx-x_popup_password)/2);	/* x_popup_password - var global */
	});
		
	// Définition du DIV(shadow)
	var winx = $(window).width()
	var winy = $(window).height();
	var shadow = $('<div></div>').appendTo("body").addClass('shadow').attr("id", 'shadow').css({'width':winx, 'height':winy});
	
	($.browser.msie) ? shadow.css('display','block') : shadow.fadeIn('slow');
	$('#popup_login').fadeIn('slow');
	var xpopup = $('#popup_login').width();
	$('#popup_login').css('left',(winx-xpopup)/2);		
		
	// AddEvent (hide divs)
	$('#shadow').bind('click', function(){								
		($.browser.msie) ? shadow.remove() : shadow.remove();
		$('#popup_login').fadeOut("slow");
		$('#popup_password').fadeOut("slow");
		$('#rules').fadeOut("slow");
		$('#rules_content').fadeOut("slow");
	});
	
	$('#popup_login .close a').bind('click', function(){								
		($.browser.msie) ? shadow.remove() : shadow.remove();
		$('#popup_login').fadeOut("slow");
		$('#popup_password').fadeOut("slow");
		$('#rules').fadeOut("slow");
		$('#rules_content').fadeOut("slow");
		return false;
	});
};

jjr.voting.init = function(params) {
  this.initParams = params;
  this.enabled = (params.enabled ? true : false);
  this.isLogged = this.enabled;
  jjr.voting.userLogguedIn = this.isLogged;
  
  $('ul.list_debatteur li').bind('click', function(){
    var elem = $(this);
    jjr.voting.vote($('input.debatteur_id', elem).val(), function() { jjr.voting.switchToClickFeedbackState(elem);});
  });
  
  this.updateUI();
};

jjr.voting.switchToClickFeedbackState = function(elem)
{
  //change header
  var msgid = "#msg" + (this.votes == 2 ? 1 : 4); //Just trust me on this one
  $("#header_msg > .cufon").addClass("inactive").filter(msgid).removeClass("inactive");
  
  //change li class
  var id = elem.attr('id');
  elem.removeClass(id).addClass(id+'_on');
  
  //Change text
  $("#num_votes").text(heap.translate("vote_" + (this.votes-1) + "_votes"));
  
  this.timeout = setTimeout(function() {
    jjr.voting.enabled = true;
    jjr.voting.updateUI();
  }, 5000);
};

jjr.voting.enable = function() {
  this.enabled = true;
  this.updateUI();
};

jjr.voting.disable = function() {
  this.enabled = false;
  this.updateUI();
};

jjr.voting.vote = function(debatteur_id, callback) {
  if(!this.isLogged) jjr.htmlInterface.openLogin();	
	if (!this.enabled || this.votes <= 0) return false;
  this.enabled = false;
  
  var params = {};
  params.atom_id = this.initParams.emission_id;
  params.value = debatteur_id;
  
  jjr.api.vote(function(response) {
    if (response.type != heap.SUCCESS) {
      alert(response.msg);
      return false;
    }
    callback();
  }, params); 
};

jjr.voting.updateUI = function() {
  if (this.timeout) clearInterval(this.timeout);
  
  var that = this;
  
  jjr.api.getVotes(function (response) {
    $("ul.list_debatteur li").each(function()
    {
      var id = $(this).attr('id');
      var id_on = id + "_on";
      $(this).removeClass(id_on).addClass(id);
    });
  
    if (response.type != heap.SUCCESS) {
      if(response.code != 'ERR_NOT_AUTHENTICATED') alert(response.msg);
      return false;
    }
    that.votes = response.data;
    var msgid = "#msg" + (4 - that.votes);
    
    $("#num_votes").text(heap.translate("vote_" + that.votes + "_votes"));
    $("#header_msg > .cufon").addClass("inactive").filter(msgid).removeClass("inactive");
    
    if (that.enabled && that.votes > 0) {
      $('#hide_vote').hide();
      $('#show_vote').show();
    }
    else {
      
      $('#hide_vote').show();
      $('#show_vote').hide();
    }
  }, { 'atom_id' : this.initParams.emission_id });
};


jjr.classement = {};

jjr.classement.init = function(params) {
  this.initParams = params;
};

jjr.classement.loadSeason = function(params) {
  //TODO
};


jjr.debatteurs = {};

jjr.debatteurs.init = function(params) {
  this.initParams = params;
};

jjr.debatteurs.loadSeason = function(params) {
  //TODO
};


jjr.emissions = {};

jjr.emissions.init = function(params) {
  this.initParams = params;
  this.searchParams = params.searchParams;
  this.searchOptions = params.searchOptions;
  this.searchListing = params.searchListing;
  var that = this;
  $('.js-season').click(function(){ that.searchParams.channel = $(this).attr('rel'); that.reload(); return false; });
};

jjr.emissions.changePage = function(page) {
  this.searchOptions.page = page;
  this.reload();
};

jjr.emissions.reload = function() {
  var that = this; 
  var html_holder = $(this.searchListing);
  
  jjr.api.search(function(response) {
    if (response.type != heap.SUCCESS) {
      alert('Une erreur est survenue: ' + response.msg);      
    }
    else{
    $(that.searchListing).hide().html(response.data).fadeIn();
    }
    return false;
  }, { 'searchParams' : this.searchParams, 'searchOptions' : this.searchOptions });/**/
};

jjr.sendReminderEmail = function(params) {
  jjr.api.sendReminderEmail(function(response) {
    if (response.type != heap.SUCCESS) {
      alert(response.msg);
      return false;
    }
    location.reload();
  }, params);
  return false;
};

/*
  FORM ELEMENTS VERIFICATION : RESET ERRORS
*/   

  jjr.forms = {}; 
  
  jjr.forms.resetErrors = function(){
    $(".error_label ul li").fadeOut('normal');
    $(".error_label").fadeOut('normal');
    
    $(":input").removeClass("error_input");
  };

/*
  FORM ELEMENTS VERIFICATION : SHOW ERROR
*/ 
  jjr.forms.showError = function(elem, name){
    $(elem).focus();
    $(elem).addClass('error_input');

    if(name)
      $('#' + name + '_err').fadeIn('normal');
    else
      $('#'+$(elem).attr('id')+'_err').fadeIn('normal');    
    $('.error_label').fadeIn('normal');   
  }; 

/*
  FORM ELEMENTS VERIFICATION
*/
  
  jjr.forms.checkElem = function(elem){
    var res = false;
    var curr_elem = $(elem);
    var curr_elem_name = false;
    var reg_email = new RegExp("[a-zA-Z0-9_\-]+@[a-zA-Z0-9_\-]+\.+[a-zA-Z0-9_\-]+", "g");
    var reg_cp1 = new RegExp("[a-zA-Z][0-9][a-zA-Z]", "g");
    var reg_cp2 = new RegExp("[0-9][a-zA-Z][0-9]", "g");
    var reg_numeric = new RegExp("^[0-9\.]+$", "g");
    var curr_value = (curr_elem.val()) ? curr_elem.val() : '';
    
    if(curr_elem.hasClass('multi_field')) 
    {
      curr_elem_name = curr_elem.attr("name").substring(0, curr_elem.attr("name").length - 2);
    }
    
    if(curr_elem.is(':input[type=text]'))
    {
      if(curr_elem.hasClass('email_field') && curr_value != '') 
      {
        res = ( curr_value.match(reg_email) );
      }
      else if(curr_elem.hasClass('email_validation_field') && curr_value != '') 
      {
        res = ( curr_value == curr_elem.parent().eq(0).find('.email_field').val() );
      }
      else if(curr_elem.hasClass('cp_field1') && curr_value != '') 
      {
        res = ( curr_value.match(reg_cp1) );
      }
      else if(curr_elem.hasClass('cp_field2') && curr_value != '') 
      {
        res = ( curr_value.match(reg_cp2) );
      }
      else if(curr_elem.hasClass('numeric_field') && curr_value != '') 
      {
        res = ( curr_value.match(reg_numeric) );
      }
      else if(curr_elem.hasClass('float_field') && curr_value != '') 
      {
        res = ( curr_value.match(reg_numeric) );
      }
      else if (curr_elem.hasClass('mdy_field'))
      {
        res = ( curr_value.length > 0 );
      }
    } 
    else if(curr_elem.is(':input[type=password]'))
    {
      if(curr_elem.hasClass('passw_field') && curr_value != '') 
      {
        res = ( curr_value.length > 5 );
      }
      else if(curr_elem.hasClass('passw_validation_field') && curr_value != '') 
      {
        res = ( curr_value == curr_elem.parent().eq(0).find('.passw_field').val() );
      }
    }
    else if(curr_elem.is(':input[type=radio]'))
    {
      var curr_radio_checked = $(":radio[name='"+curr_elem.attr("name")+"']:checked").length;
      var curr_radio_val = '';
      curr_elem_name = curr_elem.attr("name");

      if(curr_radio_checked) curr_radio_val = $(":radio[name='"+curr_elem.attr("name")+"']:checked").val();
      res = ( curr_radio_val != '' );
    }
    else if(curr_elem.is(':input[type=checkbox]'))
    {
      res = true;
    }
    else if(curr_elem.is('select'))
    {
      res = ( ( curr_value.length > 1 ) || (parseInt(curr_value) > 0) );
    }
    else if(curr_elem.is('textarea'))
    {
      res = ( curr_value.length > 0 );
    }
    if(!res) jjr.forms.showError(curr_elem, curr_elem_name);

  return res;
  };
  
  jjr.forms.checkForm = function(){
    
    var verification_passed = true;
    $('.mdy_field').each(function(i, elt){
      if(!jjr.forms.checkElem(elt)) 
      {
        verification_passed = false;
        return false;
      }
    });
    
    if(verification_passed) 
    {
      $(this).closest('form').submit();
      //console.log('verif_passed!');
    }
    return false;
  };