/* Valorar noticia */
var submenu_interval;
var submenu_visible = false;
var active_submenu_id = '';

$(function(){
  
  rateItem();

  $('.has_submenu').hover(
    function() {
      var submenu_id = $(this).attr('id').replace('call_', '');
      setSubmenuShower(submenu_id);
    },
    function () {
      setSubmenuHidder();
    }
  );

  $('td.submenu_option').hover(
    function() {
      var submenu_id = $($(this).parents('.submenu_container').get(0)).attr('id');
      setSubmenuShower(submenu_id);
    },
    function () {
      setSubmenuHidder();
    }
  );

  if ( $('#frmChangeCenter').length ) {
    $('select#change_center_id').change(function(){
      $('#frmChangeCenter').submit();
    });
  }

  if ( $("a.carrousel").length )
  {
    $("a.carrousel").fancybox({
            'autoScale'         : false,
            'autoDimensions'    : true ,
            'transitionIn'	: 'elastic',
            'transitionOut'	: 'elastic',
            'speedIn'		: 600,
            'speedOut'		: 200,
            'overlayShow'       : false
    });
  }

  if ( $('.question_complain').length )
  {
    $('.question_complain').bind('click', function(){
      var url  = $(this).children('.action_url').text();

      complainQuestion(url);
    });
  }

  if ( $('.answer_complain').length )
  {
    $('.answer_complain').bind('click', function(){
      var url  = $(this).children('.action_url').text();
      var id = $(this).attr('id').split('_')[2];

      reviewAnswer(url, id);
    });
  }

  if ( $('.answer_applause').length )
  {
    $('.answer_applause').bind('click', function(){
      var url  = $(this).children('.action_url').text();
      var id = $(this).attr('id').split('_')[2];

      reviewAnswer(url, id);
    });
  }

  if ( $('.forum_signin').length )
  {
    $('.forum_signin').bind('click', function(){
      var url  = $(this).children('.action_url').text();

      forumSignin(url);
      return false;
    });
  }

  if ( $('.forum_login').length )
  {
    $('.forum_login').bind('click', function(){
      var url  = $(this).children('.action_url').text();

      checkLogin(url);
      return false;
    });
  }

  if ( $('.new_forum').length )
  {
    $('.new_forum').bind('click', function(){
      var url  = $(this).children('.action_url').text();

      addForum(url);
      return false;
    });
  }

  if ( $('.forum_comment').length )
  {
    $('.forum_comment').val($('.forum_comment').next('input.default_comment').val());
    
    $('.forum_comment').bind('focus', function(){

      var $this = $(this);

      if ( $('.forum_login').length )
      {
        var url  = $('.forum_login:first').children('.action_url').text();
        editComment(url);
      }
      
      if ( $this.val() == $this.nextAll('input.default_comment:first').val() )
      {
        $this.val('');
      }
    });

    $('.forum_comment').bind('blur', function(){

      var $this = $(this);

      if ( $this.val() == '' )
      {
        $this.val($this.nextAll('input.default_comment:first').val());
      }
    });
  }

  if ( $('#form_comment').length )
  {
    $(".forum_comment").validate({
      expression: "if ((VAL.length > 10) && (VAL != $('.forum_comment').next('input.default_comment').val())) return true; else return false;",
      message: "Debe introducir un comentario de mas de 10 caracteres."
    });

    $('#form_comment').submit( function(){
      var url  = $(this).attr('action');
//      var url  = $('.forum_login:first').children('.action_url').text();

      addForumComment(url);

      return false;
    });
  }
  
  if ( $('a#add_forum').length )
  {
    $('a#add_forum').click( function(){
      var url  = $(this).attr('href');

      gotoNewForum(url);

      return false;
    });
  }

  if ( $('#province_filter').length ) {
    
    var province_id = $('#ajax_filter_form').children('#filter_province_id').val();

    $('#province_filter').ajaxFilter( {
        'selectedItem': $('li#item_' + province_id),
        'callback':     reloadProvinceList,
        'categories':   new Array('province')
      });
  }

  if ( $('#category_filter').length ) {
    if ( $('#ajax_filter_form').children('#filter_speciality_id').val() != 0 )
    {
      speciality_id = $('#ajax_filter_form').children('#filter_speciality_id').val();

      $('#category_filter').ajaxFilter( {
          'selectedItem': $('li#item_' + speciality_id + '.speciality'),
          'callback':     reloadCategoryList,
          'categories':   new Array('category', 'speciality')
        });
    }
    else
    {
      category_id = $('#ajax_filter_form').children('#filter_category_id').val();

      $('#category_filter').ajaxFilter( {
          'selectedItem': $('li#item_' + category_id + '.category'),
          'callback':     reloadCategoryList,
          'categories':   new Array('category', 'speciality')
        });
    }

  }

  if ( $('#price_filter').length ) {
    if ( $('#ajax_filter_form').children('#filter_speciality_id').val() != 0 )
    {
      speciality_id = $('#ajax_filter_form').children('#filter_speciality_id').val();

      $('#price_filter').ajaxFilter( {
          'selectedItem': $('li#item_' + speciality_id + '.speciality'),
          'callback':     reloadPriceList,
          'categories':   new Array('category', 'speciality')
        });
    }
    else
    {
      category_id = $('#ajax_filter_form').children('#filter_category_id').val();

      $('#price_filter').ajaxFilter( {
          'selectedItem': $('li#item_' + category_id + '.category'),
          'callback':     reloadPriceList,
          'categories':   new Array('category', 'speciality')
        });
    }

  }

    if ($('#frmAdvancedSearch').length)
    {
        $('#frmAdvancedSearch').submit(function(){
            if (! $('select#speciality_id').val()) {
                alert('Debe selecciónar una especialidad');
                return false;
            }
            return true;
        });
    }

});

var reloadProvinceList = function(id, category) {
  
  $('#ajax_filter_form').children('#filter_province_id').val(id);

  reloadFilterList();

}

var reloadCategoryList = function(id, category) {
  if ( category == 'category' ) {
    $('#ajax_filter_form').children('#filter_category_id').val(id);
    $('#ajax_filter_form').children('#filter_speciality_id').val(0);
  } else {
    $('#ajax_filter_form').children('#filter_category_id').val(0);
    $('#ajax_filter_form').children('#filter_speciality_id').val(id);
  }

  reloadFilterList();

}

var reloadPriceList = function( id, category ) {
  if ( category == 'category' ) {
    $('#ajax_filter_form').children('#filter_category_id').val(id);
    $('#ajax_filter_form').children('#filter_speciality_id').val(0);
  } else {
    $('#ajax_filter_form').children('#filter_category_id').val(0);
    $('#ajax_filter_form').children('#filter_speciality_id').val(id);
  }

  reloadInterestsMenu();

}

function reloadFilterList()
{
  $('.list_container').empty().addClass('list_loader');

  var by_category = $('#ajax_filter_form input#filter_speciality_id').val() > 0 ? 0 : 1;
  
  $('#ajax_filter_form input#by_category').val( by_category );

  $.ajax({
    url: $('#ajax_filter_form').attr('action'),
    data: $('#ajax_filter_form').serialize(),
    type: 'GET',
    success: function(data){
      //fv_icon.removeClass('fv_icon_saving');
      $('.list_container').removeClass('list_loader').html(data);
      reloadInterestsMenu();
    }
  });

}

function reloadInterestsMenu()
{
  $('#interests_menu_container').empty().addClass('list_loader');

  $.ajax({
    url: $('#interests_menu_url').val(),
    data: $('#ajax_filter_form').serialize(),
    type: 'GET',
    success: function(data){
      //fv_icon.removeClass('fv_icon_saving');
      $('#interests_menu_container').removeClass('list_loader').html(data);
    }
  });

}

function addAnswer(url)
{
  $.ajax({
    url: url,
    dataType: 'json',
    cache: false,
    success: function(data){
      //fv_icon.removeClass('fv_icon_saving');
      if (data.error == 'no_session') {
        createLoginDialog({'title': 'Para poder participar es necesario estar registrado', 'login_url': data.login_url, 'next_url': url, 'action': 'add_answer'});
      } else {
        window.location.reload();
      }
    }
  });
}

function gotoNewForum(url) {
  $.ajax({
    url: url,
    dataType: 'json',
    type: 'GET',
    cache: false,
    success: function(data){
      //fv_icon.removeClass('fv_icon_saving');
      if (data.error == 'no_session') {
        createLoginDialog({'title': 'Nuevo tema', 'login_url': data.login_url, 'next_url': url, 'action': 'new_forum'});
      } else {
        window.location.href = url;
      }
    }
  });
}

function addForum(url)
{
  $.ajax({
    url: url,
    dataType: 'json',
    data: $('#forum_question').serialize(),
    type: 'POST',
    cache: false,
    success: function(data){
      //fv_icon.removeClass('fv_icon_saving');
      if (data.error == 'no_session') {
        createLoginDialog({'title': 'Nuevo tema', 'login_url': data.login_url, 'next_url': url, 'action': 'add_forum'});
      } else {
        $('.need_login').empty();
        $('#new_forum_container').html(data.html);
      }
    }
  });
}

function addForumComment(url)
{
  $('#add_comment').next('.ajax-loader').show();
  $.ajax({
    url: url,
    dataType: 'json',
    data: $('#form_comment').serialize(),
    type: 'POST',
    cache: false,
    success: function(data){
      $('#add_comment').next('.ajax-loader').hide();
      if (data.error == 'no_session') {
        createLoginDialog({'title': 'Comentar tema', 'login_url': data.login_url, 'next_url': url, 'action': 'add_comment'});
      } else {
        $('#answers_list_body').html(data.html);
        $('#forum_answer_content').val('');
      }
    }
  });
}

function complainQuestion(url)
{
  $.ajax({
    url: url,
    dataType: 'json',
    cache: false,
    success: function(data){
      //fv_icon.removeClass('fv_icon_saving');
      if (data.error == 'no_session') {
        createLoginDialog({'title': 'Valorar pregunta', 'login_url': data.login_url, 'next_url': url, 'action': 'question_complain'});
      } else {
        $.flashMessenger("Se ha valorado la pregunta", {modal:false, autoClose:true, wait: 1500});
        $('.question_complain').hide();
        $('.need_login').empty()
      }
    }
  });
}

function reviewAnswer(url, id)
{
  $.ajax({
    url: url,
    dataType: 'json',
    cache: false,
    success: function(data){
      //fv_icon.removeClass('fv_icon_saving');
      if (data.error == 'no_session') {
        createLoginDialog({'title': 'Valorar respuesta', 'login_url': data.login_url, 'next_url': url, 'action': 'answer_review', 'id': id});
      } else {
        $.flashMessenger("Se ha valorado la respuesta", {modal:false, autoClose:true, wait: 1500});
        $('#answer_review_' + id).hide();
        $('.need_login').empty()
      }
    }
  });
}

function setSubmenuShower(submenu_id)
{

  clearInterval(submenu_interval);

  if ( submenu_id != active_submenu_id ) {

    $('#call_' + submenu_id).addClass('over');

    if (active_submenu_id != '') {
      hideSubmenu();
    }
    
    $('#' + submenu_id).show();
    active_submenu_id = submenu_id;
  }

}

function setSubmenuHidder()
{
  submenu_interval = setInterval(hideSubmenu, 200);
}

function hideSubmenu()
{
  $('#call_' + active_submenu_id).removeClass('over');
  $('#' + active_submenu_id).hide();
  clearInterval(submenu_interval);
  active_submenu_id = '';
}

function forumLogin(url)
{
  $.ajax({
    url: url,
    dataType: 'json',
    success: function(data){
      //fv_icon.removeClass('fv_icon_saving');
      if (data.error == 'no_session')
      {
        createLoginDialog({'title': 'Iniciar sesión', 'login_url': data.login_url, 'next_url': url, 'action': 'user_login'});
      }
      else
      {
        $.flashMessenger("Ha iniciado sesion correctamente!", {modal:false, autoClose:true, wait: 1500});
        $('.need_login').empty();
        $('#new_comment_container').html(data.html);
      }
    }
  });
}

function editComment(url)
{
  checkLogin(url, 'focus_comment')
}

function checkLogin(url, action)
{
  if ( action == undefined )
  {
    action = 'check_login';
  }
  createLoginDialog({'title': 'Iniciar sesión', 'login_url': url, 'action': action});
}

/*function forumLogin(url)
{
  createLoginDialog({'title': 'Iniciar sesión', 'login_url': url, 'action': 'user_login', 'width': '550'});
}*/

function forumSignin(url)
{
  createSigninDialog({'title': 'Registro de usuario', 'login_url': url, 'action': 'user_signin'});
}

function createSigninDialog(params)
{
  var ldiv = $('<div/>').attr('id', 'signin_div').attr('title', params.title).appendTo('body');
  ldiv.load(params.login_url, function(){
    $(this).dialog({
      width: 520,
      height: 480,
      close: function(event, ui) {
        $(this).remove();
      }
    });

    initSigninForm(params);

   });
}

function initSigninForm(params)
{
  $("#guest_name").validate({
    expression: "if (VAL != '') return true; else return false;",
    message: "<br />El nombre es obligatorio"
  });

  $("#guest_province_id").validate({
    expression: "if (VAL > 0) return true; else return false;",
    message: "<br />Debe especificar la provincia"
  });

  $("#guest_email").validate({
     expression: "if (VAL.match(/^[^\\W][a-zA-Z0-9\\_\\-\\.]+([a-zA-Z0-9\\_\\-\\.]+)*\\@[a-zA-Z0-9\\_\\-]+(\\.[a-zA-Z0-9_]+)*\\.[a-zA-Z]{2,4}$/)) return true; else return false;",
     message: "<br />El e-mail es incorrecto"
  });

  $("#guest_email").validate({
     expression: "if (!userExists(VAL)) return true; else return false;",
     message: "<br />Este usuario ya existe. Revise bien su e-mail."
  });

  $("#guest_email_again").validate({
    expression: "if (VAL == $('#guest_email').val()) return true; else return false;",
    message: "<br />Los e-mails no coinciden"
  });

  $("#password").validate({
    expression: "if (VAL.length > 5 && VAL) return true; else return false;",
    message: "<br />Introduzca una contraseña válida"
  });

  $("#password_again").validate({
    expression: "if (VAL == $('#password').val()) return true; else return false;",
    message: "<br />Las contraseñas no coinciden"
  });

  $("#accept").validate({
    expression: "if ($('#accept').attr('checked')) return true; else return false;",
    message:    "Debe acceptar la politica de privacidad y condiciones de uso.",
    show_after: "#pp_container"
  });

  $('form.form_signin').validated(function(){
      $('button#do_signin').hide();
      $('#signin_loader').show();

      $.post(
        $('form.form_signin').attr('action'),
        $('form.form_signin').serialize(),
        function(data) {
          $('#login_div').html(data);

          $('#signin_loader').hide();

          /*if ($('span.signed_user').length)
          {
            switch (params.action)
            {
                case 'user_signin':
                  //initSigninForm(params.next_url);
                  break;

                default:
            }
          }
          else
          {
            initLoginForm(params);
          }*/

      });

  });

  $('button#do_signin').click(function(){
    $('form.form_signin').submit();
    return false;
  });

}

function userExists(user)
{
  var valid;
  var user_id = $('#current_user_id').length ? $('#current_user_id').text() : 0;

  $.ajax({
     type:  "POST",
     async: false,
     url:   $('#email_exists').text(),
     data:  "user=" + user + "&id=" + user_id,
     complete: function(XMLHttpRequest, textStatus){
       switch (XMLHttpRequest.responseText) {
         case 'same_user':
         case 'no_exists':
           valid = false;
           break;
         default:
           valid = true;
       }
     }
  });

   return valid;
}

function rateItem()
{
  if ($('.auto-submit-star').length) {
    var rate_status = $('#rate_label');
    $('.auto-submit-star').rating({
      callback: function(value, link){
        $.ajax({type:'POST',
                url: $('#frmRateIt').attr('action'),
                dataType:'json',
                data:$('#frmRateIt').serialize(),
                success:function(data){
                  if (data.error == 'no_session') {
                    createLoginDialog({'title': 'Valorar artículo', 'login_url': data.login_url, 'next_url': $('#frmRateIt').attr('action'), 'id': $('#rate_id').val(), 'action': 'rate'});
                  } else {
                    $('.auto-submit-star').rating('readOnly', true);
                    rate_status.text(data.message);
                  }
                }
        });
      }
    });
  }
}

/* Añadir a Favoritos */
// TODO: Refactorizar
function showAddFavorites(url, id)
{
  var fv_icon = $('#fv_icon_' + id);
  fv_icon.addClass('fv_icon_saving');
  $.ajax({
    url: url,
    dataType: 'json',
    data: {'id': id},
    success: function(data){
      fv_icon.removeClass('fv_icon_saving');
      if (data.error == 'no_session') {
        createLoginDialog({'title': 'Añadir a favoritos', 'login_url': data.login_url, 'next_url': url, 'id': id, 'action': 'favorite'});
      } else {
        $.flashMessenger("Se ha añadido a favoritos",{modal:false, autoClose:true, wait: 1500});
      }
    }
  });
}

function recoverPassword()
{
  var url = $('#recover_password').attr('href');

  $('#login_div').load(
    url,
    function() {
      $('#frmRecoverPassword').submit(function() {
        sendPassword();

        return false;
      });
    }
  );

  return false;
}

function sendPassword()
{
  var url = $('#frmRecoverPassword').attr('action');

  $('.ajax-loader').show();
  $.ajax({
    url: url,
    type: 'POST',
    data: {email: $('#email').val()},
    success: function(data) {
      $('.ajax-loader').hide();
      $('#login_div').html(data);
      if ($('#frmRecoverPassword').length)
      {
        $('#frmRecoverPassword').submit(function() {
          sendPassword();
        });
      }
      else
      {
        $('#back_to_login').click(function() {
          $('#login_div').load(
            $('#back_to_login').attr('href'),
            function(){
              initLoginForm({'action': 'check_login'});
            }
          );

          return false;
        });
      }
      return false;
    }
  });

  return false;
}

function createLoginDialog(params)
{
  var ldiv = $('<div/>').attr('id', 'login_div').attr('title', params.title).appendTo('body');
  ldiv.load(params.login_url, function(){
    $(this).dialog({
      width: 520,
      height: 530,
      modal: true,
      close: function(event, ui) {
        $(this).remove();
      }
    });

    initLoginForm(params);
    initSigninForm(params);
    
   });
}

function initLoginForm(params)
{
  $("#signin_username").validate({
    expression: "if (VAL != '') return true; else return false;",
    message: "El email es obligatorio"
  });

  $("#signin_username").validate({
    expression: "if (VAL.match(/^[^\\W][a-zA-Z0-9\\_\\-\\.]+([a-zA-Z0-9\\_\\-\\.]+)*\\@[a-zA-Z0-9\\_\\-]+(\\.[a-zA-Z0-9_]+)*\\.[a-zA-Z]{2,4}$/)) return true; else return false;",
    message: "El e-mail es incorrecto"
  });

  $("#signin_password").validate({
    expression: "if (VAL != '') return true; else return false;",
    message: "La contraseña es obligatoria"
  });

  $('#guest_signin').click(function(){
    var url  = $(this).attr('href');
    forumSignin(url);
    
    return false;
  });

  $('form.form_login').validated(function(){
      $('button#do_login').hide();
      $('#login_loader').show();
      $('#login_div').load(
        $('form.form_login').attr('action'),
        {username: $('#signin_username').val(), password:  $('#signin_password').val()},
        function() {
          $('#login_loader').hide();

            if ($('span.logged_user').length)
          {
            switch (params.action)
            {
                case 'favorite':
                  showAddFavorites(params.next_url, params.id);
                  break;

                case 'question_complain':
                  complainQuestion(params.next_url);
                  break;

                case 'answer_review':
                  reviewAnswer(params.next_url, params.id);
                  break;

                case 'rate':
                  rateItem();
                  break;

                case 'add_comment':
                  addForumComment(params.next_url);
                  break;

                case 'user_login':
                  forumLogin(params.next_url);
                  break;

                case 'focus_comment':
                  $('.need_login').empty();
                  break;

                case 'check_login':
                  $('.need_login').empty();
                  break;

                case 'user_signin':
                  initSigninForm(params.next_url);
                  break;

                case 'add_forum':
                  addForum(params.next_url);
                  break;

                case 'new_forum':
                  gotoNewForum(params.next_url);
                  break;

                case 'add_answer':
                  addAnswer(params.next_url);
                  break;
                  
                default:
            }
          }
          else
          {
            initLoginForm(params);
          }
        }
      );
  });

  $('button#do_login').click(function(){
    $('form.form_login').submit();
    return false;
  });

}

/* Contactar clinica/cirujano */
// TODO: Refactorizar
function showContactForm(url, id, center_id)
{
  var cform = $('<div/>').attr('id', 'contact_form').attr('title', 'Contactar').appendTo('body');
  cform.load(url, {'id': id, 'center_id': center_id}, function(){
    $(this).dialog({
      width: 390,
      height: 460,
      modal: true,
      close: function(event, ui) {
        $(this).remove();
      }
    });

    initContactForm();

   });

/*  //var fv_icon = $('#fv_icon_' + id);
  //fv_icon.addClass('fv_icon_saving');
  $.ajax({
    url: url,
    dataType: 'json',
    data: {'id': id},
    success: function(data){
      //fv_icon.removeClass('fv_icon_saving');
      if (data.error == 'no_session') {
        createLoginDialog({'title': 'Añadir a favoritos', 'login_url': data.login_url, 'next_url': url, 'id': id, 'action': 'favorite'});
      }
    }
  });*/
}

function initContactForm()
{
  $("#contact_name").validate({
    expression: "if (VAL != '') return true; else return false;",
    message: "Debe especificar su nombre"
  });

  $("#contact_email").validate({
    expression: "if (VAL != '') return true; else return false;",
    message: "Debe especificar su e-mail"
  });

  $("#contact_email").validate({
    expression: "if (VAL.match(/^[^\\W][a-zA-Z0-9\\_\\-\\.]+([a-zA-Z0-9\\_\\-\\.]+)*\\@[a-zA-Z0-9\\_\\-]+(\\.[a-zA-Z0-9_]+)*\\.[a-zA-Z]{2,4}$/)) return true; else return false;",
    message: "El e-mail es incorrecto"
  });

  $("#contact_comments").validate({
    expression: "if ((VAL != '') && (VAL.length > 10)) return true; else return false;",
    message: "Debe enviar algun comentario"
  });

  $('#frmContact').validated(function(){
      $('img#do_contact').hide();
      $('.ajax-loader').show();
      $('#contact_form').load(
        $('#frmContact').attr('action'),
        $('#frmContact').serialize(),
        function() {
          $('#loader').hide();

          if (!$('span.contact_sent').length) {
            initContactForm();
          }
        }
      );
  });

  $('img#do_contact').click(function(){
    $('#frmContact').submit();
    return false;
  });
}

