PRODUCT_ADD_MODE = 'product'
function getSelectedPriceListId() {
  return $(getSelectedRow('price_list_select')).attr('id').replace(/\D*/, ''); 
}
function getSelectedPackageId() {
  return $(getSelectedRow('package_container')).attr('id').replace(/\D*/, ''); 
}
function getSelectedPackagePurchasableId() {
  return $(getSelectedRow('package_builder_container')).attr('id').replace(/\D*/, ''); 
}
function getSelectedPlpId() {
  return $(getSelectedRow('plp_container')).attr('id').replace(/\D*/, ''); 
}
function getSelectedRow(container) { 
  return $('#' + container + ' .selected-row')[0];
}
function clearSelections(container) { 
  $('#' + container + ' .selected-row').removeClass('selected-row');
}
function getPriceListsPath() {
  return '/price_lists';
}
function selectVendor(el) { 
  var name = $(el).attr('name')
  var url = $(el).attr('path')
  clearSelections('vendor_select');
  $(el).addClass('selected-row');

  $('#product_container').html(ajaxSpinnerHtml());
  $('#selected_vendor_name').html(name);
  $('#product_container').load(url);
}
function selectPriceList(el) { 
  var url = $(el).attr('path')
  clearSelections('price_list_select');
  $(el).addClass('selected-row');

  $('#plp_container').html(ajaxSpinnerHtml());
  $('#plp_container').load(url, '', setupPricingProfileListeners);
}
function selectPurchasable(el) { 
  clearSelections('package_builder_container');
  $(el).addClass('selected-row');
}
function selectPackage(el) { 
  clearSelections('package_container');
  $(el).addClass('selected-row');
  var name = $(el).attr('name');
  $('#selected_package_name').html(' - ' + name);
  changeMode('package');
}

function createPriceList() { 
  jPrompt(
    'Enter a name for your offering.  This is for your identification only - the name you choose will not be shown to customers',
    '',
    'Enter a name',
    function(name) {
      if (!name || name == '') {
        return;
      }
      $('#price_list_select').html(ajaxSpinnerHtml());
      $.post(getPriceListsPath(), {'price_list[name]': name }, function (data) { 
        if (data != 'Success')
          jAlert(data);
        $('#price_list_select').load(getPriceListsPath());
      });
    });
}
function deletePriceList() { 
  jConfirm('Are you sure that you wish to permanently delete this offering?', 'Are you sure?', function(r) {
    if (!r)
      return;
    var post_path = 'price_lists/' + getSelectedPriceListId();
    $('#price_list_select').html(ajaxSpinnerHtml());
    $.post(post_path, {_method: 'delete' }, function (data) { 
      if (data != 'Success')
        jAlert(data);
			else {
				//Clear any panes with info pertaining to this price list
				$('#plp_container').html('')
				$('#package_builder_container').html('')
				$('#package_container').html('')
			}
      $('#price_list_select').load(getPriceListsPath());
    });
  });
  return false;
}
function deletePackagePurchasable() {
  //build the deletion url
  var purch_id = getSelectedPackagePurchasableId();
  var pack_id = getSelectedPackageId();
  var post_path = 'packages/' + pack_id + '/purchasables/' + purch_id;
  var reload_path = 'packages/' + pack_id + '/purchasables/';
  $('#package_builder_container').html(ajaxSpinnerHtml());
  $.post(post_path, {_method: 'delete' }, function (data) { 
    if (data == 'Success')
      $('#package_builder_container').load(reload_path);
    else
      jAlert(data);
  });
}
function addPackageToOffering(packageId) { 
  var pack_id = packageId;
  var pl_id = getSelectedPriceListId(); 
  var post_path = '/price_lists/' + pl_id + '/add_new_package';
  var reload_path = '/price_lists/' + pl_id + '/price_list_purchasables';
  $('#plp_container').html(ajaxSpinnerHtml());
  $.post(post_path, {'package_id': pack_id }, function (data) { 
    if (data != 'Success')
      jAlert(data);
    $('#plp_container').load(reload_path, '', setupPricingProfileListeners);
  });
}
function createPackage() { 
  jPrompt(
    'Enter a name for your package.  This is the name your customers will see when making purchases',
    '',
    'Enter a name',
    function(name) {
      if (!name || name == '') {
        return;
      }
      var pl_id = getSelectedPriceListId(); 
      var post_path = '/purchasables/'; 
      var reload_path = '/purchasables?mode=packages'
      $('#package_container').html(ajaxSpinnerHtml());
      $.post(post_path, {'purchasable[name]': name, 'purchasable[is_package]': '1' }, function (data) { 
        if (data != 'Success')
          jAlert(data);
        $('#package_container').load(reload_path);
      });
    });
}
function renamePackage() {
  jPrompt(
    'Enter a new name for your package.  This is the name your customers will see when making purchases',
    '',
    'Enter new name',
    function(name) {
      if (!name || name == '') {
        return;
      }
      var pl_id = getSelectedPriceListId();
      var post_path = '/purchasables/' + getSelectedPackageId();
      var reload_path = '/purchasables?mode=packages'
      $('#package_container').html(ajaxSpinnerHtml());
      $.post(post_path, {'purchasable[name]': name, _method: 'put'}, function (data) {
        if (data != 'Success')
          jAlert(data);
        $('#package_container').load(reload_path);
      });
    });
}
function deletePackage() {
  var package_row = getSelectedRow('package_container');
  if (!package_row)
    return;
  var pack_id = getSelectedPackageId();
  var post_path = '/purchasables/' + pack_id;
  var reload_path = '/purchasables?mode=packages'

  jConfirm('Are you sure that you wish to delete this package?  It will be removed from all offerings.  Existing orders will not be affected.', 'Are you sure?', function(r) {
    if (!r)
      return;
    $('#package_container').html(ajaxSpinnerHtml());
    $.post(post_path, {_method: 'delete' }, function (data) { 
      if (data != 'Success')
        jAlert(data);
		  else {
				//clear related content in other panes
				$('#package_builder_container').html('')
				changeMode('products');
			}
      $('#package_container').load(reload_path);
    });
  });
  return false;
}
function deletePlp() { 
  var plp = getSelectedRow('plp_container');
  if (!plp) 
    return;
  var plp_id = $(plp).attr('plp_id');
  var pl_id = getSelectedPriceListId(); 
  var url = '/price_lists/' + pl_id  + '/price_list_purchasables/' + plp_id;

  jConfirm('Are you sure that you wish to remove this product from the offering?', 'Are you sure?', function(r) {
    if (!r)
      return;
    $('#plp_container').html(ajaxSpinnerHtml());
    $.post(url, {_method: 'delete' }, function (data) { 
      if (data != 'Success')
        jAlert(data);
      var url = $(getSelectedRow('price_list_select')).attr('path');
      $('#plp_container').load(url, '', setupPricingProfileListeners);
    });
  });
  return false;
}
function selectPlp(el) { 
  clearSelections('plp_container');
  var name = $(el).attr('name')
  var url = $(el).attr('path')
  $(el).addClass('selected-row');
}
function addProduct(product_id) {
  //We are either adding an item to a package, or adding an add-on to an offering (price list)
  if (PRODUCT_ADD_MODE == 'package') {
    var post_path = '/packages/' + getSelectedPackageId() + '/purchasables';
    $('#package_builder_container').html(ajaxSpinnerHtml());
    $.post(post_path, {'product_id': product_id }, function (data) {
      if (data != 'Success')
        jAlert(data);
      $('#package_builder_container').load('/packages/' + getSelectedPackageId() + '/purchasables');
    });
  }
  else {
    // product mode
    $('#plp_container').html(ajaxSpinnerHtml());
    var pl_id = getSelectedPriceListId();
    var post_path = '/price_lists/' + pl_id + '/add_new_add_on';
    $.post(post_path, {'product_id': product_id }, function (data) {
      if (data != 'Success')
        jAlert(data);
      var url = '/price_lists/' + pl_id + '/price_list_purchasables';
      $('#plp_container').load(url, '', setupPricingProfileListeners);
    });
  }
}
function changeMode(mode) {
  PRODUCT_ADD_MODE = mode;
  if (mode == 'package') {
    $('#add_on_message').hide();
    $('#package_builder_container').show();
    $('#package_builder_container').html(ajaxSpinnerHtml());
    $('#package_builder_container').load('/packages/' + getSelectedPackageId() + '/purchasables');
    $('#purchasables').removeClass('selected-box');
    $('#new_packages').addClass('selected-box');
    $('#products').addClass('selected-box');
  }
  else {
    $('#package_builder_container').html('');
    $('#add_on_message').show();
    $('#new_packages').removeClass('selected-box');
    $('#purchasables').addClass('selected-box');
    $('#products').addClass('selected-box');
    $('#selected_package_name').html('');
  }
}
function executeAction() {
  var action = $("#action").val();
  
  switch(action) {
    case "round99":
      $(".sale-price").each(function(){
        $(this).find("input").val((Math.ceil(parseFloat($(this).find("input").val())+0.01)-0.01).toFixed(2));
        if($(this).find("input").val() < 0) { $(this).find("input").val(0); }
        saleChangeRaw($(this).find("input"));
      });
      break;
    case "round00":
      $(".sale-price").each(function(){
        $(this).find("input").val(Math.ceil(parseFloat($(this).find("input").val())).toFixed(2));
        if($(this).find("input").val() < 0) { $(this).find("input").val(0); }
        saleChangeRaw($(this).find("input"));
      });
      break;
    case "increase":
      jPrompt('How much would you like to increase the markups? (USD):', 1.00, 'Increase Markup', function(r) {
        if(r) {
          $(".markup").each(function(){
            $(this).find("input").val((parseFloat($(this).find("input").val())+parseFloat(r)).toFixed(2));
            if($(this).find("input").val() < 0) { $(this).find("input").val(0); }
            markupChangeRaw($(this).find("input"));
          }); 
        }
      });
      break;
    case "decrease":
      jPrompt('How much would you like to decrease the markups? (USD):', 1.00, 'Decrease Markup', function(r) {
        if(r) {
          $(".markup").each(function(){
            $(this).find("input").val((parseFloat($(this).find("input").val())-parseFloat(r)).toFixed(2));
            if($(this).find("input").val() < 0) { $(this).find("input").val(0); }
            markupChangeRaw($(this).find("input"));
          });
        }
      });
      break;
    case "increase_percent":
      jPrompt('What percent of the wholesale price would you like your markups to be? (%):', 50, 'Percent Increase From Wholesale', function(r) {
        if(r) {
          $(".markup").each(function(){
            $(this).find("input").val((parseFloat($(this).parent().find(".wholesale:first").html().replace('$','')) * (parseFloat(r)/100)).toFixed(2));
            if($(this).find("input").val() < 0) { $(this).find("input").val(0); }
            markupChangeRaw($(this).find("input"));
          });
        }
      });
      break;
  }
  
}

function parsePriceFromElement(ele) {
	var anum = ($(ele).val() == "" ? 0 : parseFloat($(ele).val()));
	//NaN is not > 0, so this catches that too
	if (! (anum > 0))
		anum = 0
	return anum;
}

function markupChange(e) {
  markupChangeRaw(e.target);
}

function markupChangeRaw(ele) {
	var anum = parsePriceFromElement(ele);
	$(ele).val(anum.toFixed(2));
	$(ele).val(anum);
  sale_ele = $(ele).parent().parent().find(".sale-price input:first")
  sale_ele.val((anum+parseFloat($(ele).parent().parent().find(".wholesale:first").html().replace("$",""))).toFixed(2));
	ajaxPriceUpdate(sale_ele[0], 'photographer_price');
}

function saleChange(e) {
  saleChangeRaw(e.target);
}

function saleChangeRaw(ele) {
	var anum = parsePriceFromElement(ele);
	$(ele).val(anum.toFixed(2));
  $(ele).parent().parent().find(".markup input:first").val((anum-parseFloat($(ele).parent().parent().find(".wholesale:first").html().replace("$",""))).toFixed(2));
  ajaxPriceUpdate(ele, 'photographer_price');
}

function packagePriceChange(e) {
	packagePriceChangeRaw(e.target);
}

function packagePriceChangeRaw(ele) {
	var anum = parsePriceFromElement(ele);
	$(ele).val(anum.toFixed(2));
	ajaxPriceUpdate(ele, 'photographer_price_with_package');
}

function setupPricingProfileListeners() {
  $(".markup input").bind("change", markupChange);
  $(".sale-price input").bind("change", saleChange);
	$(".package-price input").bind("change", packagePriceChange);
  $(".check-included").bind("change", includeProductChange);
}

//silent update of the plp price.
//	ele is the cell, which has html attrs with ids and stuff.
//  price_type is 'photographer_price' or 'photographer_price_with_package'
function ajaxPriceUpdate (ele, price_type) {
	var pl_id = getSelectedPriceListId();
	var plp_id = $(ele).attr('plp_id');
	var price = ele.value;
	var post_path = '/price_lists/' + pl_id  + '/price_list_purchasables/' + plp_id;
	var params;
	if (price_type == 'photographer_price_with_package')
		params = {'price_list_purchasable[photographer_price_with_package]': price, _method: 'put' };
	else
		params = {'price_list_purchasable[photographer_price]': price, _method: 'put' };
	$.post(post_path, params, function (data) {
		if (data != 'Success')
			jAlert(data);
	});
}
function setGroupPhotoFlag(pack_id, purch_id, is_group_photo) {
  var post_path = 'packages/' + pack_id + '/purchasables/' + purch_id + '/set_group_photo_flag';
  $.post(post_path, {is_group_photo: is_group_photo.toString() }, function (data) { 
    if (data != 'Success')
      jAlert(data);
  });
}
function usePriceListForJob(post_path) {
  var pl_id = getSelectedPriceListId();
  $.post(post_path, { 'price_list': pl_id }, function (data) { 
      jAlert(data['msg']);
  }, 'json');
}