/* -*- C++ -*- */

/**
 * RSDB Global Javascript
 */

if (typeof rsdb == 'undefined') {
  rsdb = {}
  rsdb.races = null;
  rsdb.slurs = null;
}

$(document).ready(function(){

    /**
     * Search box focus.
     */

    $search = $('#search_input');

    $search.focus(function(){
        if ($search.val() == 'Search') {
          $search.val('');
        }
      });

    $search.blur(function(){
        if ($search.val() == '') {
          $search.val('Search');
        }
      });


    $('#search_input').autocomplete('/api/autocomplete/both/', { multiple: false, mustMatch: false, autoFill: false });


    /**
     * Lazy loading stuff.
     */

    if ($('#load_more').length > 0 && rsdb.api_path) {

      var load_more_slurs = function(){

        if (!rsdb.can_load) {
          rsdb.loading = false;
          return false;
        }

        var table = $('#slurs table:first tbody');
        var count = 25;

        for (var i in rsdb.slurs) {

          if ($('#slur_' + i).length > 0) {
            continue;
          }

          table.append(rsdb.slurs[i]);
          count--;

          if (count <= 0) {
            break;
          }
        }

        $('#load_more').hide();
        rsdb.loading = false;
      }

      var window_scroll = function()
      {
        var win = $(this);

        if (!rsdb.loading && (win.innerHeight() + win.scrollTop())/$(document).height() >= 0.9) {
          rsdb.loading = true;
          $('#load_more').show();
          setTimeout(load_more_slurs, 100);
        }
      }

      $.getJSON(rsdb.api_path, function(data){
          rsdb.slurs    = data;
          rsdb.can_load = true;
        });

      $('#autoload').click(function(event){
          event.preventDefault();
          $('#load_more').html('Loading more slurs...');
          $(window).scroll(window_scroll);
        });
    }


    /**
     * Make the slur/race fields autocomplete.
     */

    $('#slur').autocomplete('/api/autocomplete/slur/', { multiple: false, mustMatch: false, autoFill: false });
    $('#race').autocomplete('/api/autocomplete/race/', { multiple: true, multipleSeparator: ', ', mustMatch: false, autoFill: true });
    $('#similar').autocomplete('/api/autocomplete/slur/', { multiple: true, multipleSeparator: ', ', mustMatch: true, autoFill: true });
    $('#submitter_race').autocomplete('/api/autocomplete/race/', { multiple: false, multipleSeparator: ', ', mustMatch: false, autoFill: true });


    /**
     * the pronunciation recorder stuff
     */


    if ($('#pronunciation_start, #pronunciation_controls').length > 0) {

      /**
       * Tooltips
       */

      var hover_over = function(event)
      {
        var id = $(this).attr('id').replace('_wrapper', '');

        $('#' + id + '_tooltip').show();
      }

      var hover_out = function(event)
      {
        var id = $(this).attr('id').replace('_wrapper', '');

        $('#' + id + '_tooltip').hide();
      }

      $('#slur_wrapper, #race_wrapper, #details_wrapper, #usage_wrapper, #pronunciation_wrapper, #similar_wrapper, #attribute_to_wrapper, #submitter_race_wrapper, #email_wrapper').hover(hover_over, hover_out);
      $('#slur, #race, #details, #usage, #pronunciation, #similar, #attribute_to, #submitter_race, #email').focus(hover_over);
      $('#slur, #race, #details, #usage, #pronunciation, #similar, #attribute_to, #submitter_race, #email').blur(hover_out);

      if (window.location.hash) {
        if (window.location.hash.substr(1) == 'usage') {
          $('#usage').focus();
        }
        else if (window.location.hash.substr(1) == 'similar') {
          $('#similar').focus();
        }
      }


      $('#pronunciation_start').click(function(){

          $('#pronunciation_start').hide();
          $('#pronunciation_controls').show();

          /**
           * Embed the recorder.
           */

          var attributes = {'id': "recorder_widget", 'name':  "recorder_widget"};
          var flashvars  = {'event_handler': 'mic_event_handler', 'upload_image': '/static/images/recorder/save_button.png'};
          var params     = {allowScriptAccess: "always"};


          if (swfobject.hasFlashPlayerVersion("10.1.0")) {
            swfobject.addDomLoadEvent(function(){$('#recorder_widget').focus();});
          }
          else {
            alert('You need a newer version of Flash to use this feature.');
          }

          swfobject.embedSWF("/static/flash/recorder.swf?hi2u", "flashcontent", 76, 29, "10.1.0", "", flashvars, params, attributes);
        });
    }


    /**
     * Submission form validation.
     */

    var validate_submission = function(){

      var errors = [];


      if ($('#slur').val().trim() == '') {
        errors.push('The slur is a required field dummy.');
      }
      else if ($('#race').val().trim() == '') {
        errors.push('You must input the race for which your slur applies.');
      }
      else if ($('#details').val().trim() == '') {
        errors.push('Please put some useful information and details in the Origins/Explanations input.');
      }

      if (errors.length > 0) {
        alert(errors.join('\n'));
        return false;
      }


      if (Recorder.has_recorded == true && $('#audio_file').val() == 0) {
        var message = '';

        message += 'You recorded a pronunciation but it looks like you never saved it. If you wish for this recording';
        message += 'to be included with your submission, please press cancel on this window and then follow the instructions on the recorder widget to save your recording.\n\n';
        message += 'Otherwise, press OK to continue submitting your slur without a pronunciation.';

        if (!confirm(message)) {
          return false;
        }
      }

      return true;
    };

    if ($('#submission_form').length > 0) {
      $('#submission_form').submit(validate_submission);
    }


    if ($('.slur_player').length > 0) {
        if (swfobject.hasFlashPlayerVersion('9')) {

          $('.slur_player').each(function(){
            var me = $(this);

            var attributes = {'id': 'player_' + me.attr('id'), 'name':  'player_' + me.attr('id') };
            var flashvars  = {'file': '/static/audio/upload_' + me.data('sound_file') + '.mp3',
                              'autoStart': false,
                              'repeatPlay': false,
                              //'width': 40,
                              'backgroundColor': 'FF0000',
                              'foregroundColor': '0000FF',
                              'showDownload': false,
                              'songVolume': 70 };
            var params     = {allowScriptAccess: "always"};

            if (me.hasClass('submission')) {
              flashvars.file = '/static/audio/uploads/upload_' + me.data('sound_file') + '.mp3';
            }

            swfobject.embedSWF("/static/flash/singleplayer.swf?hi2u", me.attr('id'), 30, 20, "9.0", "", flashvars, params, attributes);
          });
        }
    }

});

