// Application
$(function() {
  // Hook up "Start a New Search" buttons
  $('#start_new_search').click(function() {
    window.location = $(this).attr('data-url');
  });

  $('#add_fabric').click(function() {
    window.location.pathname = $(this).attr('data-url');
  });

  // Put the fabric form in edit mode
  $('#edit_fabric').click(function() {
    $('#FabricViewForm').addClass('edit_mode');
    $('.rightColDetail').addClass('edit_mode');
  });

  $('#fabric_limited').click(function() {
    if ($(this).is(':checked')) {
      $('#fabric_limited_value').val(1);
      return;
    }
    $('#fabric_limited_value').val(0);
  });

  // Put the fabric form in read only mode
  $('#edit_fabric_cancel').click(function() {
    $('#FabricViewForm').removeClass('edit_mode');
    $('.rightColDetail').removeClass('edit_mode');
  });

  // This fixes a weird bug in FF that doesn't auto-select the radio
  if ($('#fabric_scale_id_val').length > 0) {
    var scale_id = $.trim($('#fabric_scale_id_val').html());
    $('#fabric_scale_radios input:checked').removeAttr();
    $('#fabric_scale_radios input[value="'+scale_id+'"]').attr('checked', 'checked');
  }

  if ($('#fabric_sample_image').length > 0) {
    // Fabric image upload
    $('#fabric_sample_image').uploadify({
      'uploader':   '/uploadify/uploadify.swf',
      'script':     $('#fabric_sample_image').closest('form').attr('action').replace('edit','editImage'),
      'cancelImg':  '/uploadify/cancel.png',
      'folder':     '/uploads',
      'buttonText': 'UPDATE IMAGE',
      'fileExt':    '*.jpg',
      'fileDesc':   'Image Files',
      'fileDataName':'data[Fabric][sample_image]',
      'auto':       true,
      'onComplete': function(event, ID, fileObj, response, data) {
        var $img = $('#fabric_sample_img');
        var src = eval(response);
        if (response != 'FAIL') {
          $img.attr('src', src + '?' + (new Date()).getTime());
          $('#fabric_sample_image'+ID+'ProgressBar').css('width','0%');
        }
      },
      'onProgress': function(event, ID, fileObj, data) {
        $('#fabric_sample_imageQueue')
          .find('.uploadifyProgressBar').css('width',data.percentage + '%');
      }
    });
  }

  var update_floats = function() {
    $('#fabric_correlates .productRelated:odd').css('clear', 'none');
    $('#fabric_correlates .productRelated:even').css('clear', 'left');
    $('#fabric_alternates .productRelated:odd').css('clear', 'none');
    $('#fabric_alternates .productRelated:even').css('clear', 'left');
  };

  // Ajax removal of related (alternate / correlate) fabrics
  $('.productRelated[data-related] a.delete').live('click', function() {
    if (!confirm($(this).attr('data-confirm'))) { return false; }
    var type = $(this).attr('data-type');
    var related = $(this).attr('data-related');
    var post_vars = { 
      '_method': 'delete', 
      'data[type]': type,
      'data[related]': related };
    $.post($(this).attr('href'), post_vars, function(response) {
      if (response.did_delete === true) {
        $('.productRelated.'+type+'[data-related="'+related+'"]')
          .fadeOut('normal', function() {
            $(this).remove();
            update_floats();
          });
      }
    }, "json");
    return false;
  });


  // Ajax removal of fabric applications
  $('.productThumbSM.application a.delete').live('click', function() {
    if (!confirm($(this).attr('data-confirm'))) { return false; }
    var application = $(this).attr('data-application');
    var post_vars = { 
      '_method': 'post', 
      'data[application]': application };
    $.post($(this).attr('href'), post_vars, function(response) {
      if (response.did_delete === true) {
        $('.productThumbSM.application[data-application="'+application+'"]')
          .fadeOut('normal', function() {
            $(this).remove();
            if ($('#fabric_applications .application').length === 0) {
              $('#fabric_applications').hide();
            }
          });
      }
    }, "json");
    return false;
  });

  // Click a related fabric in the results to add it to the associated relationship
  $('.search').each(function() {
    var $search = $(this);
    $('.productRelated a', $search).live('click', function() {
      var $prodRelated = $(this).parent();
      var type = $prodRelated.attr('data-type');
      var related = $prodRelated.attr('data-related');
      var fid = $prodRelated.attr('data-fid');
      var $container = $('#fabric_'+type+'s');
      // Just post it, we've got the related product
      $.post('/fabrics/addRelated/'+fid, { 'data[type]':type, 'data[related]':related });
      $container.append($prodRelated.detach());
      update_floats();
      return false;
    });
  });

  var getCurrentIds = function(type) {
    var current = [];
    $('#fabric_'+type+'s').find('.productRelated').each(function() {
      current.push($(this).attr('data-related'));
    });
    return current.join(',');
  };

  // Finding related fabrics
  $('.search input').keyup(function(evnt) {
    var $input = $(this);
    var $search = $input.parent();
    var $results = $search.find('.results');
    var empty_results = function() {
      $results.slideUp('slow',function() { $results.empty(); });
    };
    $search.removeClass('not_found');
    if ($input.val().length > 2
          && $.inArray(evnt.keyCode,[16,17,18,20,27,33,34,35,37,38,39,40,144]) == -1
          && !$search.hasClass('busy')) {
      $search.addClass('busy');
      empty_results();
      window.clearTimeout($input.data('search_timeout'));
      $input.data('search_timeout', window.setTimeout(function() {
        var current = getCurrentIds($input.attr('data-type'));
        $.post($input.attr('data-url'),{'data[type]':$input.attr('data-type'), 'data[related]':$input.val(), 'data[current]':current }, function(data) {
          if (data.length > 0) {
            $results.append(data).slideDown('slow');
          }
          else {
            $search.addClass('not_found');
          }
          $search.removeClass('busy');
        });
      }, 500));
    }
    else {
      window.clearTimeout($input.data('search_timeout'));
      empty_results();
      $search.removeClass('busy');
    }
    return true;
  });

  // Finding fabric applications
  $('#fabric_applications_search').keyup(function(evnt) {
    var $input = $(this);
    var $search = $input.parent();
    $search.removeClass('not_found');
    if ($input.val().length > 2
          && $.inArray(evnt.keyCode,[16,17,18,20,27,33,34,35,37,38,39,40,144]) == -1
          && !$search.hasClass('busy')) {
      window.clearTimeout($input.data('search_timeout'));
      $input.data('search_timeout', window.setTimeout(function() {
        $search.addClass('busy');
        $.post($input.attr('data-url'),{'data[application]':$input.val()}, function(data) {
          if (data.indexOf('data-application') > -1) {
            var prod = $(data).attr('data-application');
            var prod_selector = '#fabric_applications .application[data-application="'+prod+'"]';
            if ($(prod_selector).length == 0) {
              if ($(data).hasClass('md') || $('#fabric_applications .md').length == 0) {
                $('#fabric_applications').append(data).show();
              }
              else {
                $('#fabric_applications .md:first').before(data).show();
              }
              // Wire up slimbox
              $(prod_selector).find("a[rel^='lightbox']").slimbox({/* Put custom options here */}, null, function(el) {
                return (this == el) || ((this.rel.length > 8) && (this.rel == el.rel));
              });
            }
          }
          else {
            $search.addClass('not_found');
          }
          $search.removeClass('busy');
        });
      }, 500));
    }
    else {
      window.clearTimeout($input.data('search_timeout'));
      $search.removeClass('busy');
    }
    return true;
  });


  // Ajax delete of fabrics
  $('.productThumb a.delete').click(function() {
    if (!confirm($(this).attr('data-confirm'))) { return false; }
    var $fabric = $(this).parent();
    $.post($(this).attr('href'), {_method: 'delete'}, function(response) {
      if (response.did_delete === true) {
        $fabric.fadeOut('normal', function() {
          $(this).remove();
        });
      }
    }, "json");
    return false;
  });


  if ($('#admin_banner.do_flash').length > 0) {
    window.setTimeout(function() { 
      $('#admin_banner.do_flash span').hide('normal', function() {
        $('#admin_banner.do_flash a span').show('normal');
      });
    }, 5000);
  }


  // Finding fabric leathers
  $('#fabric_leathers_search').keyup(function(evnt) {
    var $input = $(this);
    var $search = $input.parent();
    $search.removeClass('not_found');
    if ($input.val().length > 2
          && $.inArray(evnt.keyCode,[16,17,18,20,27,33,34,35,37,38,39,40,144]) == -1
          && !$search.hasClass('busy')) {
      window.clearTimeout($input.data('search_timeout'));
      $input.data('search_timeout', window.setTimeout(function() {
        $search.addClass('busy');
        $.post($input.attr('data-url'),{'data[leather]':$input.val()}, function(data) {
          if (data.indexOf('data-leather') > -1) {
            var prod = $(data).attr('data-leather');
            var prod_selector = '#fabric_leathers .leather[data-leather="'+prod+'"]';
            if ($(prod_selector).length == 0) {
              $('#fabric_leathers').append(data);
              // Wire up slimbox
              $(prod_selector).find("a[rel^='lightbox']").slimbox({/* Put custom options here */}, null, function(el) {
                return (this == el) || ((this.rel.length > 8) && (this.rel == el.rel));
              });
            }
          }
          else {
            $search.addClass('not_found');
          }
          $search.removeClass('busy');
        });
      }, 500));
    }
    else {
      window.clearTimeout($input.data('search_timeout'));
      $search.removeClass('busy');
    }
    return true;
  });

  // Ajax removal of leathers
  $('.productThumbSM.leather a.delete').live('click', function() {
    if (!confirm($(this).attr('data-confirm'))) { return false; }
    var leather = $(this).attr('data-leather');
    var post_vars = { 
      '_method': 'post', 
      'data[leather]': leather };
    $.post($(this).attr('href'), post_vars, function(response) {
      if (response.did_delete === true) {
        $('.productThumbSM.leather[data-leather="'+leather+'"]')
          .fadeOut('normal', function() {
            $(this).remove();
          });
      }
    }, "json");
    return false;
  });

  // Restrict input on a form to nubers only
  $('.numbers_only').keypress(function(evnt) { 
    // Numbers only 
    var ctrl_keys = [null, 0, 8, 9, 13, 27];
    var keychar = String.fromCharCode(evnt.which);
    return ($.inArray(evnt.which, ctrl_keys) >= 0 || keychar.match(/\d/) !== null);
  });

  // Market Images
  if ($('#fabric_applications .application').length === 0) { 
    $('#fabric_applications').hide();
  }
  var MarkdownMaker = new Attacklab.showdown.converter();
  if ($('#market_image_form').length > 0) {
    var market_uploadify = {
      'uploader'        : '/uploadify/uploadify.swf',
      'script'          : '/market_images/add',
      'cancelImg'       : '/uploadify/cancel.png',
      'folder'          : '/uploads',
      'buttonText'      : 'UPLOAD IMAGE',
      'fileExt'         : '*.jpg;*.jpeg;*.JPG',
      'fileDesc'        : 'JPEG Image Files',
      'fileDataName'    : 'data[MarketImage][room_image]',
      'multi'           : false,
      'method'          : 'POST',
      'removeCompleted' : true,
      'auto'            : false,
      'onError'         : function(event, ID, fileObj, errorObj) {
        // console.log('error');
      },
      'onComplete'   : function(event, ID, fileObj, response, data) {
        if (response != 'FAIL') {
          var market_image = $.parseJSON(response);
          var textval = $('#market_image_form textarea').val()
                          .replace('<b>','**').replace('</b>', '**')
                          .replace('<B>','**').replace('</B>', '**');
          var data = { 
            '_method'                     : 'POST',
            'data[MarketImage][id]'       : market_image.id,
            'data[MarketImage][caption]'  : textval,
            'data[MarketImage][fabric_id]': $('#MarketImageFabricId').val()
          };
          $.post('/market_images/edit/'+market_image.id, data, function (result, status, jqxhr) {
            $('#MarketImageRoomImage').uploadifyClearQueue();
            $('#market_image_form textarea').val('');
            $('#market_images').append(result);
            $('#market_images .market_image[data-market_image='+market_image.id+'] a.zoom').slimbox({}, mi_mapper, null);
            $('#market_images .market_image[data-market_image='+market_image.id+'] a.market_image').slimbox({}, mi_mapper, null);
            $('#market_images .market_image[data-market_image='+market_image.id+'] .caption').each(function() {
              $(this).html(MarkdownMaker.makeHtml($(this).html()));
            });
          });
        }
      }
    };
    var f = function() { $('#MarketImageRoomImage').uploadify(market_uploadify); };
    setTimeout(f, 0);

    $('#new_market_image_button').click(function() {
      if ($('#market_image_form .uploadifyQueueItem').length === 0) {
        alert("Please select an image.");
        return;
      }
      /*
      if ($('#MarketImageCaption').val() === '') {
        alert("Please enter a caption.");
        return;
      }
      */
      $('#MarketImageRoomImage').uploadifyUpload();
    });
  }
  $('#market_images .market_image_caption .caption').each(function() {
    $(this).html(MarkdownMaker.makeHtml($(this).html()));
  });
  var mi_mapper = function (el) {
    var $p = $(el).parent();
    if ($(el).hasClass('zoom')) { $p = $p.parent(); }
    var caption = $p.find('.market_image_caption').html();
    return [el.href, caption];
  };
  $('#market_images').find('a.market_image').each(function () {
      $(this).slimbox({}, mi_mapper, null);
  });
  $('#market_images').find('a.zoom').each(function() {
      $(this).slimbox({}, mi_mapper, null);
  });

  // Ajax removal of Market Images
  $('#market_images a.delete').live('click', function() {
    if (!confirm($(this).attr('data-confirm'))) { return false; }
    var id = $(this).attr('data-market_image');
    var post_vars = { 
      '_method': 'post', 
      'data[id]': id };
    $.post($(this).attr('href'), post_vars, function(response) {
      if (response.did_delete === true) {
        $('.market_image[data-market_image="'+response.id+'"]')
          .fadeOut('normal', function() {
            $(this).remove();
          });
      }
    }, "json");
    return false;
  });

});

