// Post defined dimensions and calculated relative dimensions
function refreshSpecificationDimensions(id) {
  // switch refresh button to loading graphic
  $('#calculated_dimensions_' + id + ' .actions .refresh').css('backgroundImage','url(/images/loader.gif)');
  // TODO don't post form if essential values missing
  // get form values
  var params = 'id=' + id + '&' + $('#spec_dimensions_' + id + ' input').serialize();
  $.getJSON('/specifications/calculate_dimensions?' + params, null, refreshSpecificationDimensionsCallback);
}

// Callback
function refreshSpecificationDimensionsCallback(data, textStatus) {
  var sidebox = $('#calculated_dimensions_' + data.id);
  var width = $('#calculated_width');
  var height = $('#calculated_height');
  
  $('.actions .refresh', sidebox).css('backgroundImage','');
  
  $(['width','height']).each(function() {
    setDimensionValue("calculated_", this, data, sidebox);
  })

  if ($('#type_width').length > 0) {
	  // Update type
	  $(['type_width','type_height']).each(function() {
	        setDimensionValue("", this, data, sidebox);
	  })	
	};

  // diagram
  $('.diagram', sidebox).html(data.diagram);
}

function setDimensionValue(prefix, dimension, data, sidebox) {
  var measurement_label = data["measurement_label"];  
  var div = $('#' + prefix + dimension);
  $('.calculated_value', div).html(data[dimension] + measurement_label);

  // value before nudge
  var relative_value = data["relative_" + dimension];     
  $('.relative_value', div).html(relative_value + measurement_label);
  
  // Change nudge
  var nudge_value = data["nudge_" + dimension];
  var math_symbol = "+";
  if (nudge_value.search(/-/) != -1) {
    math_symbol = "-";
    nudge_value = nudge_value.replace(/-/i, "")
  };
  
  $('.nudge_value', div).html(math_symbol + " " + nudge_value + measurement_label);
  // dimensions in side box
  $('.' + dimension + ' .value', sidebox).html(data[dimension]);
}

// nudge calculated values
function adjustDimensionDown(id, calculated_attribute, nudge_attribute) {
  adjustDimension(-current_nudge_value, id, calculated_attribute, nudge_attribute);
}

function adjustDimensionUp(id, calculated_attribute, nudge_attribute) {
  adjustDimension(current_nudge_value, id, calculated_attribute, nudge_attribute);
}

function adjustDimension(amount, id, calculated_attribute, nudge_attribute) {
  var calc_field = $('#specification_' + calculated_attribute)[0];
  var nudge_field = $('#specification_' + nudge_attribute)[0];
  var calc_value = Number(calc_field.value);
  var nudge_value = Number(nudge_field.value);
  
  // don't allow adjustment to take calculated values below 0
  if (calc_value <= 0) { return };
  
  calc_value += amount;
  nudge_value += amount;
  
  $(nudge_field).val(nudge_value);
  $(calc_field).val(calc_value);
  
  // adjust display of this value
  var div = $('#' + calculated_attribute);
  var nudge = $('.nudge_value', div);
  // add/remove extra class
  if (nudge_value == 0) {
    nudge.removeClass('adjusted');
  }
  else if (!nudge.hasClass('adjusted')) {
    nudge.addClass('adjusted');
  }
  
  refreshSpecificationDimensions(id);
}

// update display depending value of absolute sizing switch
function toggleAbsoluteSizing() {
  var absolute = $('input:radio[name=specification\[absolute\]]:checked').val() == "true";
  if (absolute) {
    $('.no_absolute').hide();
    $('.yes_absolute').show();
    $('#defined_dimensions_label').text('Fixed...');
  } else {
    $('.no_absolute').show();
    $('.yes_absolute').hide();
    $('#defined_dimensions_label').text('Relative...');
  };
}

function toggleBleed() {
  
  if ($('#specification_bleed').length > 0) {
    var bleed = $('#specification_bleed')[0].checked;
    if (bleed) {
      $('#type_width').show();
      $('#type_height').show();    
    }
    else {
      $('#type_width').hide();
      $('#type_height').hide();        
    };
    
  };
}

function toggleSeperatePages() {
  if ($('#specification_pages')[0].value > 1) {
    $(".file_preparation").show();
  } else {
    $(".file_preparation").hide();
  }
}