Gene_Braintree - Version 2.0.1

Version Notes

Connect your Magento store to Braintree to accept Credit Cards & PayPal using V.Zero SDK

Download this release

Release Info

Developer Dave Macaulay
Extension Gene_Braintree
Version 2.0.1
Comparing to
See all releases


Code changes from version 2.0.0 to 2.0.1

Files changed (41) hide show
  1. app/code/community/Gene/Braintree/Model/Kount/Ens.php +38 -2
  2. app/code/community/Gene/Braintree/Model/Migration.php +0 -1
  3. app/code/community/Gene/Braintree/Model/Paymentmethod/Abstract.php +102 -0
  4. app/code/community/Gene/Braintree/Model/Paymentmethod/Creditcard.php +17 -1
  5. app/code/community/Gene/Braintree/Model/Paymentmethod/Paypal.php +1 -1
  6. app/code/community/Gene/Braintree/Model/Wrapper/Braintree.php +1 -1
  7. app/code/community/Gene/Braintree/controllers/CheckoutController.php +2 -0
  8. app/code/community/Gene/Braintree/controllers/ExpressController.php +131 -15
  9. app/code/community/Gene/Braintree/etc/config.xml +2 -1
  10. app/code/community/Gene/Braintree/etc/system.xml +14 -2
  11. app/code/community/Gene/Braintree/sql/gene_braintree_setup/upgrade-2.0.0-2.0.1.php +56 -0
  12. app/design/adminhtml/default/default/layout/gene/braintree.xml +1 -1
  13. app/design/adminhtml/default/default/template/gene/braintree/js.phtml +3 -2
  14. app/design/frontend/base/default/layout/gene/braintree.xml +24 -2
  15. app/design/frontend/base/default/template/gene/braintree/express/cart.phtml +1 -0
  16. app/design/frontend/base/default/template/gene/braintree/express/catalog.phtml +2 -1
  17. app/design/frontend/base/default/template/gene/braintree/express/error.phtml +23 -4
  18. app/design/frontend/base/default/template/gene/braintree/express/shipping_details.phtml +7 -3
  19. app/design/frontend/base/default/template/gene/braintree/js/awesomecheckout.phtml +121 -0
  20. js/gene/braintree/express.js +155 -2
  21. js/gene/braintree/vzero-0.7-min.js +1 -1
  22. js/gene/braintree/vzero-0.7.js +48 -13
  23. package.xml +4 -4
  24. skin/adminhtml/default/default/css/gene/braintree/config.codekit +1 -1
  25. skin/frontend/base/default/css/gene/braintree/aheadworks.css +1 -1
  26. skin/frontend/base/default/css/gene/braintree/amasty.css +1 -1
  27. skin/frontend/base/default/css/gene/braintree/awesomecheckout.css +255 -0
  28. skin/frontend/base/default/css/gene/braintree/config.codekit +62 -13
  29. skin/frontend/base/default/css/gene/braintree/core/_general.less +1 -1
  30. skin/frontend/base/default/css/gene/braintree/default.css +1 -1
  31. skin/frontend/base/default/css/gene/braintree/express.css +107 -95
  32. skin/frontend/base/default/css/gene/braintree/express.less +136 -0
  33. skin/frontend/base/default/css/gene/braintree/firecheckout.css +21 -1
  34. skin/frontend/base/default/css/gene/braintree/fme.css +1 -1
  35. skin/frontend/base/default/css/gene/braintree/idev.css +1 -1
  36. skin/frontend/base/default/css/gene/braintree/integrations/awesomecheckout.less +63 -0
  37. skin/frontend/base/default/css/gene/braintree/integrations/firecheckout.less +17 -0
  38. skin/frontend/base/default/css/gene/braintree/iwd.css +1 -1
  39. skin/frontend/base/default/css/gene/braintree/magestore.css +1 -1
  40. skin/frontend/base/default/css/gene/braintree/oye.css +1 -1
  41. skin/frontend/base/default/css/gene/braintree/unicode.css +1 -1
app/code/community/Gene/Braintree/Model/Kount/Ens.php CHANGED
@@ -311,8 +311,44 @@ class Gene_Braintree_Model_Kount_Ens extends Mage_Core_Model_Abstract
311
  */
312
  public function isValidEnsIp($ip)
313
  {
314
- $validIps = array('64.128.91.251', '209.81.12.251', '192.168.47.1');
315
- return in_array($ip, $validIps);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
316
  }
317
 
318
  /**
311
  */
312
  public function isValidEnsIp($ip)
313
  {
314
+ $validIps = explode(',', Mage::getStoreConfig('payment/gene_braintree_creditcard/kount_ens_ips'));
315
+ if (is_array($validIps) && count($validIps) > 0) {
316
+ $validIps = array_map('trim', $validIps);
317
+ foreach ($validIps as $validIp) {
318
+ if ($this->isIpInRange($ip, $validIp)) {
319
+ return true;
320
+ }
321
+ }
322
+
323
+ return false;
324
+ }
325
+
326
+ // If no IP's are set allow from all
327
+ return true;
328
+ }
329
+
330
+ /**
331
+ * Determine whether an IP is within a range
332
+ *
333
+ * @param $ip
334
+ * @param $range
335
+ *
336
+ * @return bool
337
+ *
338
+ * @author https://gist.github.com/tott/7684443
339
+ */
340
+ protected function isIpInRange($ip, $range)
341
+ {
342
+ if ( strpos( $range, '/' ) == false ) {
343
+ $range .= '/32';
344
+ }
345
+ // $range is in IP/CIDR format eg 127.0.0.1/24
346
+ list( $range, $netmask ) = explode( '/', $range, 2 );
347
+ $range_decimal = ip2long( $range );
348
+ $ip_decimal = ip2long( $ip );
349
+ $wildcard_decimal = pow( 2, ( 32 - $netmask ) ) - 1;
350
+ $netmask_decimal = ~ $wildcard_decimal;
351
+ return ( ( $ip_decimal & $netmask_decimal ) == ( $range_decimal & $netmask_decimal ) );
352
  }
353
 
354
  /**
app/code/community/Gene/Braintree/Model/Migration.php CHANGED
@@ -126,7 +126,6 @@ class Gene_Braintree_Model_Migration extends Mage_Core_Model_Abstract
126
  'capture_action' => 'gene_braintree_creditcard/capture_action',
127
  'order_status' => 'gene_braintree_creditcard/order_status',
128
  'use_vault' => 'gene_braintree_creditcard/use_vault',
129
- 'useccv' => 'gene_braintree_creditcard/useccv',
130
  'cctypes' => 'gene_braintree_creditcard/cctypes',
131
  'three_d_secure' => 'gene_braintree_creditcard/threedsecure',
132
  'kount_id' => 'gene_braintree_creditcard/kount_merchant_id',
126
  'capture_action' => 'gene_braintree_creditcard/capture_action',
127
  'order_status' => 'gene_braintree_creditcard/order_status',
128
  'use_vault' => 'gene_braintree_creditcard/use_vault',
 
129
  'cctypes' => 'gene_braintree_creditcard/cctypes',
130
  'three_d_secure' => 'gene_braintree_creditcard/threedsecure',
131
  'kount_id' => 'gene_braintree_creditcard/kount_merchant_id',
app/code/community/Gene/Braintree/Model/Paymentmethod/Abstract.php CHANGED
@@ -327,6 +327,81 @@ abstract class Gene_Braintree_Model_Paymentmethod_Abstract extends Mage_Payment_
327
  return $collection->getSize();
328
  }
329
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
330
  /**
331
  * Update the order status within Kount
332
  *
@@ -436,4 +511,31 @@ abstract class Gene_Braintree_Model_Paymentmethod_Abstract extends Mage_Payment_
436
 
437
  return $this;
438
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
439
  }
327
  return $collection->getSize();
328
  }
329
 
330
+ /**
331
+ * Accept a payment that landed in payment review
332
+ *
333
+ * @param \Mage_Payment_Model_Info $payment
334
+ *
335
+ * @return mixed
336
+ */
337
+ public function acceptPayment(Mage_Payment_Model_Info $payment)
338
+ {
339
+ parent::acceptPayment($payment);
340
+
341
+ /* @var $order Mage_Sales_Model_Order */
342
+ $order = $payment->getOrder();
343
+
344
+ /* @var $invoice Mage_Sales_Model_Order_Invoice */
345
+ $invoice = $this->_getInvoiceForTransactionId($payment, $payment->getLastTransId());
346
+ if ($invoice && $invoice->getId()) {
347
+ if ($invoice->getState() == Mage_Sales_Model_Order_Invoice::STATE_PAID) {
348
+ // Invoice is already paid and captured, just move the order into processing
349
+ return false;
350
+ } else if ($invoice->canCapture()) {
351
+ return $invoice->capture();
352
+ }
353
+ } else if ($order->getPayment()->canCapture()) {
354
+ // We don't currently have an invoice for this order, let's create one whilst capturing
355
+ $order->getPayment()->capture(null);
356
+ /* @var $invoice Mage_Sales_Model_Order_Invoice */
357
+ $invoice = $order->getPayment()->getCreatedInvoice();
358
+ // Mark the invoice as paid
359
+ $invoice->pay();
360
+ return true;
361
+ }
362
+
363
+ Mage::throwException(Mage::helper('payment')->__('Unable to load invoice to accept the payment for this order.'));
364
+ }
365
+
366
+ /**
367
+ * Deny a payment that landed in payment review
368
+ *
369
+ * @param \Mage_Payment_Model_Info $payment
370
+ *
371
+ * @return mixed
372
+ */
373
+ public function denyPayment(Mage_Payment_Model_Info $payment)
374
+ {
375
+ parent::denyPayment($payment);
376
+
377
+ /* @var $invoice Mage_Sales_Model_Order_Invoice */
378
+ $invoice = $this->_getInvoiceForTransactionId($payment, $payment->getLastTransId());
379
+ if ($invoice && $invoice->getId()) {
380
+ if ($invoice->getState() == Mage_Sales_Model_Order_Invoice::STATE_CANCELED) {
381
+ // Invoice has already been cancelled
382
+ return false;
383
+ } else {
384
+ return $invoice->void();
385
+ }
386
+ } else {
387
+ // The order has no invoice, let's void the payment directly
388
+ $this->_getWrapper()->init();
389
+ $transaction = Braintree_Transaction::find($payment->getLastTransId());
390
+ if ($transaction->status == Braintree_Transaction::AUTHORIZED) {
391
+ try {
392
+ Braintree_Transaction::void($payment->getLastTransId());
393
+ return true;
394
+ } catch (Exception $e) {
395
+ // Let's add the error into the session
396
+ Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
397
+ return false;
398
+ }
399
+ }
400
+ }
401
+
402
+ Mage::throwException(Mage::helper('payment')->__('Unable to load invoice to deny the payment for this order.'));
403
+ }
404
+
405
  /**
406
  * Update the order status within Kount
407
  *
511
 
512
  return $this;
513
  }
514
+
515
+ /**
516
+ * Return invoice model for transaction
517
+ *
518
+ * @param \Varien_Object $payment
519
+ * @param $transactionId
520
+ *
521
+ * @return bool
522
+ */
523
+ protected function _getInvoiceForTransactionId(Varien_Object $payment, $transactionId)
524
+ {
525
+ foreach ($payment->getOrder()->getInvoiceCollection() as $invoice) {
526
+ if ($invoice->getTransactionId() == $transactionId) {
527
+ $invoice->load($invoice->getId());
528
+ return $invoice;
529
+ }
530
+ }
531
+ foreach ($payment->getOrder()->getInvoiceCollection() as $invoice) {
532
+ if ($invoice->getState() == Mage_Sales_Model_Order_Invoice::STATE_OPEN
533
+ && $invoice->load($invoice->getId())
534
+ ) {
535
+ $invoice->setTransactionId($transactionId);
536
+ return $invoice;
537
+ }
538
+ }
539
+ return false;
540
+ }
541
  }
app/code/community/Gene/Braintree/Model/Paymentmethod/Creditcard.php CHANGED
@@ -40,10 +40,17 @@ class Gene_Braintree_Model_Paymentmethod_Creditcard extends Gene_Braintree_Model
40
  protected $_canUseForMultishipping = true;
41
  protected $_isInitializeNeeded = false;
42
  protected $_canFetchTransactionInfo = false;
43
- protected $_canReviewPayment = false;
44
  protected $_canCreateBillingAgreement = false;
45
  protected $_canManageRecurringProfiles = false;
46
 
 
 
 
 
 
 
 
47
  /**
48
  * Place Braintree specific data into the additional information of the payment instance object
49
  *
@@ -61,6 +68,10 @@ class Gene_Braintree_Model_Paymentmethod_Creditcard extends Gene_Braintree_Model
61
  ->setAdditionalInformation('save_card', $data->getData('save_card'))
62
  ->setAdditionalInformation('device_data', $data->getData('device_data'));
63
 
 
 
 
 
64
  return $this;
65
  }
66
 
@@ -193,6 +204,11 @@ class Gene_Braintree_Model_Paymentmethod_Creditcard extends Gene_Braintree_Model
193
  // Run the built in Magento validation
194
  parent::validate();
195
 
 
 
 
 
 
196
  // Confirm that we have a nonce from Braintree
197
  if (!$this->getPaymentMethodToken() || ($this->getPaymentMethodToken() && $this->getPaymentMethodToken() == 'threedsecure')) {
198
 
40
  protected $_canUseForMultishipping = true;
41
  protected $_isInitializeNeeded = false;
42
  protected $_canFetchTransactionInfo = false;
43
+ protected $_canReviewPayment = true;
44
  protected $_canCreateBillingAgreement = false;
45
  protected $_canManageRecurringProfiles = false;
46
 
47
+ /**
48
+ * Are we submitting the payment after the initial payment validate?
49
+ *
50
+ * @var bool
51
+ */
52
+ protected $_submitAfterPayment = false;
53
+
54
  /**
55
  * Place Braintree specific data into the additional information of the payment instance object
56
  *
68
  ->setAdditionalInformation('save_card', $data->getData('save_card'))
69
  ->setAdditionalInformation('device_data', $data->getData('device_data'));
70
 
71
+ if ($submitAfterPayment = $data->getData('submit_after_payment')) {
72
+ $this->_submitAfterPayment = $submitAfterPayment;
73
+ }
74
+
75
  return $this;
76
  }
77
 
204
  // Run the built in Magento validation
205
  parent::validate();
206
 
207
+ // Validation doesn't need to occur now, as the payment has not yet been tokenized
208
+ if ($this->_submitAfterPayment) {
209
+ return $this;
210
+ }
211
+
212
  // Confirm that we have a nonce from Braintree
213
  if (!$this->getPaymentMethodToken() || ($this->getPaymentMethodToken() && $this->getPaymentMethodToken() == 'threedsecure')) {
214
 
app/code/community/Gene/Braintree/Model/Paymentmethod/Paypal.php CHANGED
@@ -40,7 +40,7 @@ class Gene_Braintree_Model_Paymentmethod_Paypal extends Gene_Braintree_Model_Pay
40
  protected $_canUseForMultishipping = true;
41
  protected $_isInitializeNeeded = false;
42
  protected $_canFetchTransactionInfo = false;
43
- protected $_canReviewPayment = false;
44
  protected $_canCreateBillingAgreement = false;
45
  protected $_canManageRecurringProfiles = false;
46
 
40
  protected $_canUseForMultishipping = true;
41
  protected $_isInitializeNeeded = false;
42
  protected $_canFetchTransactionInfo = false;
43
+ protected $_canReviewPayment = true;
44
  protected $_canCreateBillingAgreement = false;
45
  protected $_canManageRecurringProfiles = false;
46
 
app/code/community/Gene/Braintree/Model/Wrapper/Braintree.php CHANGED
@@ -779,7 +779,7 @@ class Gene_Braintree_Model_Wrapper_Braintree extends Mage_Core_Model_Abstract
779
 
780
  // Include level 2 data if the user has provided a VAT ID
781
  if ($order->getBillingAddress()->getVatId()) {
782
- $request['taxAmount'] = $order->getTaxAmount();
783
  $request['taxExempt'] = true;
784
  $request['purchaseOrderNumber'] = $order->getIncrementId();
785
  }
779
 
780
  // Include level 2 data if the user has provided a VAT ID
781
  if ($order->getBillingAddress()->getVatId()) {
782
+ $request['taxAmount'] = Mage::helper('gene_braintree')->formatPrice($order->getTaxAmount());
783
  $request['taxExempt'] = true;
784
  $request['purchaseOrderNumber'] = $order->getIncrementId();
785
  }
app/code/community/Gene/Braintree/controllers/CheckoutController.php CHANGED
@@ -110,6 +110,8 @@ class Gene_Braintree_CheckoutController extends Mage_Core_Controller_Front_Actio
110
  // Pull the billing address from the multishipping experience
111
  if ($this->getRequest()->getParam('billing') == 'multishipping') {
112
  $billing = Mage::getSingleton('checkout/type_multishipping')->getQuote()->getBillingAddress();
 
 
113
  } else {
114
  $billing = $this->getRequest()->getParam('billing');
115
  }
110
  // Pull the billing address from the multishipping experience
111
  if ($this->getRequest()->getParam('billing') == 'multishipping') {
112
  $billing = Mage::getSingleton('checkout/type_multishipping')->getQuote()->getBillingAddress();
113
+ } else if ($this->getRequest()->getParam('billing') == 'quote') {
114
+ $billing = Mage::getSingleton('checkout/session')->getQuote()->getBillingAddress();
115
  } else {
116
  $billing = $this->getRequest()->getParam('billing');
117
  }
app/code/community/Gene/Braintree/controllers/ExpressController.php CHANGED
@@ -257,14 +257,76 @@ class Gene_Braintree_ExpressController extends Mage_Core_Controller_Front_Action
257
  }
258
  }
259
 
260
- // Build up the totals block
261
- /* @var $totals Mage_Checkout_Block_Cart_Totals */
262
- $totals = $this->getLayout()->createBlock('checkout/cart_totals')
263
- ->setTemplate('checkout/cart/totals.phtml')
264
- ->setCustomQuote($this->_getQuote());
265
 
266
- // Set the body in the response
267
- $this->getResponse()->setBody($totals->toHtml());
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
268
  }
269
 
270
  /**
@@ -275,11 +337,17 @@ class Gene_Braintree_ExpressController extends Mage_Core_Controller_Front_Action
275
  $quote = $this->_getQuote();
276
  $quote->setTotalsCollectedFlag(false)->collectTotals()->save();
277
 
278
- // Set payment method
279
- $paymentMethod = $quote->getPayment();
280
- $paymentMethod->setMethod('gene_braintree_paypal');
281
- $paymentMethod->setAdditionalInformation('payment_method_nonce', Mage::getModel('core/session')->getBraintreeNonce());
282
- $quote->setPayment($paymentMethod);
 
 
 
 
 
 
283
 
284
  // Convert quote to order
285
  $convert = Mage::getSingleton('sales/convert_quote');
@@ -296,8 +364,17 @@ class Gene_Braintree_ExpressController extends Mage_Core_Controller_Front_Action
296
  }
297
 
298
  // Set the order as complete
 
299
  $service = Mage::getModel('sales/service_quote', $order->getQuote());
300
- $service->submitAll();
 
 
 
 
 
 
 
 
301
  $order = $service->getOrder();
302
 
303
  // Send the new order email
@@ -316,15 +393,54 @@ class Gene_Braintree_ExpressController extends Mage_Core_Controller_Front_Action
316
  }
317
 
318
  /**
319
- * Display order summary.
 
 
320
  */
321
- public function errorAction()
322
  {
323
  // View to select shipping method
 
324
  $block = $this->getLayout()->createBlock('gene_braintree/express_checkout')
325
  ->setTemplate('gene/braintree/express/error.phtml');
326
 
 
 
 
 
327
  $this->getResponse()->setBody($block->toHtml());
328
  }
329
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
330
  }
257
  }
258
  }
259
 
260
+ return $this->_returnJson(array(
261
+ 'success' => true,
262
+ 'totals' => $this->_returnTotals()
263
+ ));
264
+ }
265
 
266
+ /**
267
+ * Allow customers to add coupon codes into their orders
268
+ *
269
+ * @return \Gene_Braintree_ExpressController|\Zend_Controller_Response_Abstract
270
+ */
271
+ public function saveCouponAction()
272
+ {
273
+ $quote = $this->_getQuote();
274
+ $couponCode = $this->getRequest()->getParam('coupon');
275
+ $oldCoupon = $quote->getCouponCode();
276
+
277
+ // Don't try and re-apply the already applied coupon
278
+ if ($couponCode == $oldCoupon) {
279
+ // Just alert the front-end the response was a success
280
+ return $this->_returnJson(array(
281
+ 'success' => true
282
+ ));
283
+ }
284
+
285
+ // If the user is trying to remove the coupon code allow them to
286
+ if ($this->getRequest()->getParam('remove')) {
287
+ $couponCode = '';
288
+ }
289
+
290
+ // Build our response in an array to be returned as JSON
291
+ $response = array(
292
+ 'success' => false
293
+ );
294
+
295
+ try {
296
+ $codeLength = strlen($couponCode);
297
+ $isCodeLengthValid = $codeLength && $codeLength <= Mage_Checkout_Helper_Cart::COUPON_CODE_MAX_LENGTH;
298
+
299
+ $this->_getQuote()->getShippingAddress()->setCollectShippingRates(true);
300
+ $this->_getQuote()->setCouponCode($isCodeLengthValid ? $couponCode : '')
301
+ ->collectTotals()
302
+ ->save();
303
+
304
+ if ($codeLength) {
305
+ if ($isCodeLengthValid && $couponCode == $this->_getQuote()->getCouponCode()) {
306
+ $response['success'] = true;
307
+ $response['message'] = $this->__('Coupon code "%s" was applied.', Mage::helper('core')->escapeHtml($couponCode));
308
+ } else {
309
+ $response['success'] = false;
310
+ $response['message'] = $this->__('Coupon code "%s" is not valid.', Mage::helper('core')->escapeHtml($couponCode));
311
+ }
312
+ } else {
313
+ // The coupon has been removed successfully
314
+ $response['success'] = true;
315
+ }
316
+
317
+ } catch (Mage_Core_Exception $e) {
318
+ $response['success'] = false;
319
+ $response['message'] = $e->getMessage();
320
+ } catch (Exception $e) {
321
+ $response['success'] = false;
322
+ $response['message'] = $this->__('Cannot apply the coupon code.');
323
+ Mage::logException($e);
324
+ }
325
+
326
+ // Include the totals HTML in the response
327
+ $response['totals'] = $this->_returnTotals();
328
+
329
+ return $this->_returnJson($response);
330
  }
331
 
332
  /**
337
  $quote = $this->_getQuote();
338
  $quote->setTotalsCollectedFlag(false)->collectTotals()->save();
339
 
340
+ // Handle free orders via coupon codes
341
+ if ($quote->getGrandTotal() == 0) {
342
+ $paymentMethod = $quote->getPayment();
343
+ $paymentMethod->setMethod('free');
344
+ $quote->setPayment($paymentMethod);
345
+ } else {
346
+ $paymentMethod = $quote->getPayment();
347
+ $paymentMethod->setMethod('gene_braintree_paypal');
348
+ $paymentMethod->setAdditionalInformation('payment_method_nonce', Mage::getModel('core/session')->getBraintreeNonce());
349
+ $quote->setPayment($paymentMethod);
350
+ }
351
 
352
  // Convert quote to order
353
  $convert = Mage::getSingleton('sales/convert_quote');
364
  }
365
 
366
  // Set the order as complete
367
+ /* @var $service Mage_Sales_Model_Service_Quote */
368
  $service = Mage::getModel('sales/service_quote', $order->getQuote());
369
+ try {
370
+ $service->submitAll();
371
+ } catch (Mage_Core_Exception $e) {
372
+ $this->errorAction($e->getMessage());
373
+ return false;
374
+ } catch (Exception $e) {
375
+ $this->errorAction($e->getMessage());
376
+ return false;
377
+ }
378
  $order = $service->getOrder();
379
 
380
  // Send the new order email
393
  }
394
 
395
  /**
396
+ * Display an error to the user
397
+ *
398
+ * @param bool|false $errorMessage
399
  */
400
+ public function errorAction($errorMessage = false)
401
  {
402
  // View to select shipping method
403
+ /* @var $block Gene_Braintree_Block_Express_Checkout */
404
  $block = $this->getLayout()->createBlock('gene_braintree/express_checkout')
405
  ->setTemplate('gene/braintree/express/error.phtml');
406
 
407
+ if ($errorMessage) {
408
+ $block->getLayout()->getMessagesBlock()->addError($errorMessage);
409
+ }
410
+
411
  $this->getResponse()->setBody($block->toHtml());
412
  }
413
 
414
+ /**
415
+ * Return the totals in the Ajax response
416
+ *
417
+ * @return \Zend_Controller_Response_Abstract
418
+ */
419
+ protected function _returnTotals()
420
+ {
421
+ // Build up the totals block
422
+ /* @var $totals Mage_Checkout_Block_Cart_Totals */
423
+ $totals = $this->getLayout()->createBlock('checkout/cart_totals')
424
+ ->setTemplate('checkout/cart/totals.phtml')
425
+ ->setCustomQuote($this->_getQuote());
426
+
427
+ // Set the body in the response
428
+ return $totals->toHtml();
429
+ }
430
+
431
+ /**
432
+ * Return JSON to the browser
433
+ *
434
+ * @param $array
435
+ *
436
+ * @return $this
437
+ */
438
+ protected function _returnJson($array)
439
+ {
440
+ $this->getResponse()->setBody(Mage::helper('core')->jsonEncode($array));
441
+ $this->getResponse()->setHeader('Content-type', 'application/json');
442
+
443
+ return $this;
444
+ }
445
+
446
  }
app/code/community/Gene/Braintree/etc/config.xml CHANGED
@@ -2,7 +2,7 @@
2
  <config>
3
  <modules>
4
  <Gene_Braintree>
5
- <version>2.0.0</version>
6
  </Gene_Braintree>
7
  </modules>
8
  <global>
@@ -106,6 +106,7 @@
106
  <threedsecure>0</threedsecure>
107
  <threedsecure_threshold>0</threedsecure_threshold>
108
  <useccv>1</useccv>
 
109
  </gene_braintree_creditcard>
110
 
111
  </payment>
2
  <config>
3
  <modules>
4
  <Gene_Braintree>
5
+ <version>2.0.1</version>
6
  </Gene_Braintree>
7
  </modules>
8
  <global>
106
  <threedsecure>0</threedsecure>
107
  <threedsecure_threshold>0</threedsecure_threshold>
108
  <useccv>1</useccv>
109
+ <kount_ens_ips>209.81.12.0/24,64.128.91.0/24,64.128.87.0/24</kount_ens_ips>
110
  </gene_braintree_creditcard>
111
 
112
  </payment>
app/code/community/Gene/Braintree/etc/system.xml CHANGED
@@ -761,10 +761,22 @@
761
  ]]></comment>
762
  </kount_ens_url>
763
 
 
 
 
 
 
 
 
 
 
 
 
 
764
  <display_heading translate="label">
765
  <label>Display</label>
766
  <frontend_model>adminhtml/system_config_form_field_heading</frontend_model>
767
- <sort_order>145</sort_order>
768
  <show_in_default>1</show_in_default>
769
  <show_in_website>1</show_in_website>
770
  <show_in_store>1</show_in_store>
@@ -773,7 +785,7 @@
773
  <sort_order translate="label">
774
  <label>Sort Order</label>
775
  <frontend_type>text</frontend_type>
776
- <sort_order>150</sort_order>
777
  <show_in_default>1</show_in_default>
778
  <show_in_website>1</show_in_website>
779
  <show_in_store>1</show_in_store>
761
  ]]></comment>
762
  </kount_ens_url>
763
 
764
+ <kount_ens_ips>
765
+ <label>Event Notification System (ENS) Allowed IPs</label>
766
+ <frontend_type>text</frontend_type>
767
+ <sort_order>145</sort_order>
768
+ <show_in_default>1</show_in_default>
769
+ <show_in_website>1</show_in_website>
770
+ <show_in_store>1</show_in_store>
771
+ <comment><![CDATA[
772
+ The IPs that have access to the ENS endpoint above. These can be individual IP's or ranges separated with commas. To allow from all IPs leave this field empty (not recommended).
773
+ ]]></comment>
774
+ </kount_ens_ips>
775
+
776
  <display_heading translate="label">
777
  <label>Display</label>
778
  <frontend_model>adminhtml/system_config_form_field_heading</frontend_model>
779
+ <sort_order>150</sort_order>
780
  <show_in_default>1</show_in_default>
781
  <show_in_website>1</show_in_website>
782
  <show_in_store>1</show_in_store>
785
  <sort_order translate="label">
786
  <label>Sort Order</label>
787
  <frontend_type>text</frontend_type>
788
+ <sort_order>155</sort_order>
789
  <show_in_default>1</show_in_default>
790
  <show_in_website>1</show_in_website>
791
  <show_in_store>1</show_in_store>
app/code/community/Gene/Braintree/sql/gene_braintree_setup/upgrade-2.0.0-2.0.1.php ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /* @var $installer Gene_Braintree_Model_Entity_Setup */
4
+ $installer = $this;
5
+ $installer->startSetup();
6
+
7
+ // Update the white list for AnattaDesign Awesome Checkout
8
+ if (Mage::helper('core')->isModuleEnabled('AnattaDesign_AwesomeCheckout')) {
9
+ $whiteListConfigXmlPath = 'awesomecheckout/advanced/whitelisted_css_js';
10
+ $whiteList = array(
11
+ 'gene/braintree/vzero-0.7-min.js',
12
+ 'css/gene/braintree/awesomecheckout.css'
13
+ );
14
+
15
+ // Update values on the default scope
16
+ if ($currentWhiteList = $this->getStoreConfig($whiteListConfigXmlPath)) {
17
+ $currentWhiteListArray = explode("\n", $currentWhiteList);
18
+ if (is_array($currentWhiteListArray) && count($currentWhiteListArray) > 0) {
19
+ $whiteList = array_merge($currentWhiteListArray, $whiteList);
20
+ }
21
+ }
22
+
23
+ // Save the new default config values
24
+ Mage::getConfig()->saveConfig(
25
+ $whiteListConfigXmlPath,
26
+ implode("\n", $whiteList),
27
+ 'default',
28
+ 0
29
+ );
30
+
31
+ // Loop through the stores and ensure they're all up to date
32
+ $stores = Mage::getModel('core/store')->getCollection();
33
+ foreach ($stores as $store) {
34
+
35
+ // Update values on the default scope
36
+ if ($currentWhiteList = $this->getStoreConfig($whiteListConfigXmlPath, $store)) {
37
+ $currentWhiteListArray = explode("\n", $currentWhiteList);
38
+ if (is_array($currentWhiteListArray) && count($currentWhiteListArray) > 0) {
39
+ $whiteList = array_merge($currentWhiteListArray, $whiteList);
40
+ }
41
+ }
42
+
43
+ // Save the new default config values
44
+ Mage::getConfig()->saveConfig(
45
+ $whiteListConfigXmlPath,
46
+ implode("\n", $whiteList),
47
+ 'stores',
48
+ $store->getId()
49
+ );
50
+ }
51
+
52
+ // Clean the cache
53
+ Mage::getConfig()->cleanCache();
54
+ }
55
+
56
+ $installer->endSetup();
app/design/adminhtml/default/default/layout/gene/braintree.xml CHANGED
@@ -24,7 +24,7 @@
24
  </reference>
25
  <reference name="js">
26
  <block type="core/text" name="braintree-js">
27
- <action method="setText"><text><![CDATA[<script src="https://js.braintreegateway.com/js/braintree-2.23.0.min.js"></script>]]></text></action>
28
  </block>
29
  </reference>
30
  <reference name="before_body_end">
24
  </reference>
25
  <reference name="js">
26
  <block type="core/text" name="braintree-js">
27
+ <action method="setText"><text><![CDATA[<script src="https://js.braintreegateway.com/js/braintree-2.26.0.min.js"></script>]]></text></action>
28
  </block>
29
  </reference>
30
  <reference name="before_body_end">
app/design/adminhtml/default/default/template/gene/braintree/js.phtml CHANGED
@@ -27,8 +27,9 @@
27
  * @returns {boolean}
28
  */
29
  shouldInterceptCreditCard: function() {
30
- return $('p_method_free') == null || ($('p_method_free') != null && !$('p_method_free').checked);
31
- },
 
32
 
33
  });
34
 
27
  * @returns {boolean}
28
  */
29
  shouldInterceptCreditCard: function() {
30
+ // Additional check to see if the label is present for the payment method
31
+ return ($('p_method_free') == null || ($('p_method_free') != null && !$('p_method_free').checked)) && $$('[for="p_method_gene_braintree_creditcard"]').length > 0;
32
+ }
33
 
34
  });
35
 
app/design/frontend/base/default/layout/gene/braintree.xml CHANGED
@@ -5,9 +5,9 @@
5
  <gene_braintree_assets>
6
  <reference name="head">
7
  <block type="core/text" name="braintree-js">
8
- <action method="setText"><text><![CDATA[<script src="https://js.braintreegateway.com/js/braintree-2.23.0.min.js"></script>]]></text></action>
9
  </block>
10
- <action method="addJs"><file>gene/braintree/vzero-0.7-min.js</file></action>
11
  <!-- If Braintree_Payments is enabled remove their JS -->
12
  <action method="removeItem"><type>js</type><name>braintree/braintree-1.3.4.js</name></action>
13
  </reference>
@@ -219,6 +219,28 @@
219
  </reference>
220
  </checkout_onestep_index>
221
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
222
  <!-- Add in support for Magento's mutli shipping checkout -->
223
  <checkout_multishipping_billing>
224
  <update handle="gene_braintree_assets" />
5
  <gene_braintree_assets>
6
  <reference name="head">
7
  <block type="core/text" name="braintree-js">
8
+ <action method="setText"><text><![CDATA[<script src="https://js.braintreegateway.com/js/braintree-2.26.0.min.js"></script>]]></text></action>
9
  </block>
10
+ <action method="addJs"><file>gene/braintree/vzero-0.7.js</file></action>
11
  <!-- If Braintree_Payments is enabled remove their JS -->
12
  <action method="removeItem"><type>js</type><name>braintree/braintree-1.3.4.js</name></action>
13
  </reference>
219
  </reference>
220
  </checkout_onestep_index>
221
 
222
+ <!-- Add in support for AwesomeCheckout -->
223
+ <anattadesign_awesomecheckout_onepage_index>
224
+ <update handle="gene_braintree_assets" />
225
+ <reference name="head">
226
+ <action method="addCss"><file>css/gene/braintree/awesomecheckout.css</file></action>
227
+ </reference>
228
+ <!-- We have to force remove these blocks, and add blocks under a new name -->
229
+ <remove name="gene_braintree_js" />
230
+ <remove name="gene_braintree_data" />
231
+ <reference name="before_body_end">
232
+ <block type="gene_braintree/js" name="gene_braintree_js_ac" template="gene/braintree/js/awesomecheckout.phtml" />
233
+
234
+ <!-- We include device data at the end of the larger form -->
235
+ <block type="gene_braintree/js" name="gene_braintree_data_ac" template="gene/braintree/js/data.phtml">
236
+ <action method="setData">
237
+ <key>payment_form_id</key>
238
+ <value>co-payment-form</value>
239
+ </action>
240
+ </block>
241
+ </reference>
242
+ </anattadesign_awesomecheckout_onepage_index>
243
+
244
  <!-- Add in support for Magento's mutli shipping checkout -->
245
  <checkout_multishipping_billing>
246
  <update handle="gene_braintree_assets" />
app/design/frontend/base/default/template/gene/braintree/express/cart.phtml CHANGED
@@ -41,6 +41,7 @@ if( !$this->hasBeenSetup() ): ?>
41
  locale: '<?php echo strtolower($this->getStoreLocale()); ?>',
42
  authUrl: '<?php echo $this->getUrl('braintree/express/authorization') ?>',
43
  shippingSaveUrl:'<?php echo $this->getUrl('braintree/express/saveShipping') ?>',
 
44
  successUrl: '<?php echo $this->getUrl("checkout/onepage/success"); ?>',
45
  buyButtonPlacement: function() {
46
  var placement = document.getElementsByClassName("checkout-types");
41
  locale: '<?php echo strtolower($this->getStoreLocale()); ?>',
42
  authUrl: '<?php echo $this->getUrl('braintree/express/authorization') ?>',
43
  shippingSaveUrl:'<?php echo $this->getUrl('braintree/express/saveShipping') ?>',
44
+ couponSaveUrl: '<?php echo $this->getUrl('braintree/express/saveCoupon') ?>',
45
  successUrl: '<?php echo $this->getUrl("checkout/onepage/success"); ?>',
46
  buyButtonPlacement: function() {
47
  var placement = document.getElementsByClassName("checkout-types");
app/design/frontend/base/default/template/gene/braintree/express/catalog.phtml CHANGED
@@ -37,7 +37,8 @@ if( !$this->hasBeenSetup() ): ?>
37
  productId: <?php echo (int) $this->getProduct()->getId(); ?>,
38
  authUrl: '<?php echo $this->getUrl('braintree/express/authorization') ?>',
39
  shippingSaveUrl:'<?php echo $this->getUrl('braintree/express/saveShipping') ?>',
40
- successUrl: '<?php echo $this->getUrl("checkout/onepage/success"); ?>',
 
41
  });
42
  }
43
  });
37
  productId: <?php echo (int) $this->getProduct()->getId(); ?>,
38
  authUrl: '<?php echo $this->getUrl('braintree/express/authorization') ?>',
39
  shippingSaveUrl:'<?php echo $this->getUrl('braintree/express/saveShipping') ?>',
40
+ couponSaveUrl: '<?php echo $this->getUrl('braintree/express/saveCoupon') ?>',
41
+ successUrl: '<?php echo $this->getUrl("checkout/onepage/success"); ?>'
42
  });
43
  }
44
  });
app/design/frontend/base/default/template/gene/braintree/express/error.phtml CHANGED
@@ -1,4 +1,23 @@
1
- <div class="item-row"><strong><?php echo $this->__('Your Order'); ?></strong></div>
2
- <?php echo $this->getMessagesBlock()->getGroupedHtml() ?>
3
-
4
- <button type="button" onclick="document.location=document.location;" class="button"><?php echo $this->__('Close'); ?></button>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /* @var $this Gene_Braintree_Block_Express_Checkout */
3
+ ?>
4
+ <div class="item-row order-title">
5
+ <h3><?php echo $this->__('There has been an issue whilst processing your order'); ?></h3>
6
+ <p><?php echo $this->__('The following error has occurred whilst trying to process your order:'); ?></p>
7
+ </div>
8
+ <div class="item-row">
9
+ <?php
10
+ $messages = $this->getMessagesBlock();
11
+ /* @var $message Mage_Core_Model_Message_Error */
12
+ foreach ($messages->getMessages() as $message) {
13
+ ?>
14
+ <p>
15
+ <?php echo $message->getText(); ?>
16
+ </p>
17
+ <?php
18
+ }
19
+ ?>
20
+ </div>
21
+ <div class="item-row order">
22
+ <button type="button" onclick="ppExpress.hideModal();" class="button"><?php echo $this->__('Close'); ?></button>
23
+ </div>
app/design/frontend/base/default/template/gene/braintree/express/shipping_details.phtml CHANGED
@@ -20,7 +20,6 @@
20
  <?php if ($this->hasShippingRates()): ?>
21
  <div class="shipping-row item-row">
22
  <strong><?php echo $this->__('Shipping method:'); ?></strong>
23
-
24
  <?php foreach($this->getShippingRates() as $_rate): ?>
25
  <label class="item-subrow">
26
  <input type="radio" name="shipping_method" value="<?php echo $_rate->getCode(); ?>" onchange="ppExpress.updateShipping('<?php echo $_rate->getCode(); ?>')" />
@@ -29,13 +28,18 @@
29
  <strong><?php echo Mage::helper('core')->currency($_rate->getPrice(), true, false); ?></strong>
30
  </label>
31
  <?php endforeach; ?>
32
-
 
 
 
 
 
33
  </div>
34
  <div class="item-row" id="paypal-express-totals">
35
  <?php echo $this->getChildHtml('totals'); ?>
36
  </div>
37
 
38
- <button type="submit" class="button"><?php echo $this->__('Place Order'); ?></button>
39
  <?php else: ?>
40
  <p><?php echo $this->__('There are no shipping methods available for your address.'); ?></p>
41
  <p><?php echo $this->__('Please repeat the process, selecting an address that we\'re able to deliver to.'); ?></p>
20
  <?php if ($this->hasShippingRates()): ?>
21
  <div class="shipping-row item-row">
22
  <strong><?php echo $this->__('Shipping method:'); ?></strong>
 
23
  <?php foreach($this->getShippingRates() as $_rate): ?>
24
  <label class="item-subrow">
25
  <input type="radio" name="shipping_method" value="<?php echo $_rate->getCode(); ?>" onchange="ppExpress.updateShipping('<?php echo $_rate->getCode(); ?>')" />
28
  <strong><?php echo Mage::helper('core')->currency($_rate->getPrice(), true, false); ?></strong>
29
  </label>
30
  <?php endforeach; ?>
31
+ </div>
32
+ <div class="coupon-row item-row">
33
+ <div id="paypal-express-coupon-error" class="error" style="display: none;"></div>
34
+ <input type="text" name="coupon" id="paypal-express-coupon" placeholder="<?php echo $this->__('Coupon Code'); ?>" />
35
+ <button type="button" name="coupon-apply" id="paypal-express-coupon-apply" class="coupon-submit button" onclick="return ppExpress.updateCoupon();"><?php echo $this->__('Apply Coupon'); ?></button>
36
+ <button type="button" name="coupon-remove" id="paypal-express-coupon-remove" class="coupon-submit button" onclick="return ppExpress.removeCoupon();" style="display: none;"><?php echo $this->__('Remove Coupon'); ?></button>
37
  </div>
38
  <div class="item-row" id="paypal-express-totals">
39
  <?php echo $this->getChildHtml('totals'); ?>
40
  </div>
41
 
42
+ <button type="submit" class="button" id="paypal-express-submit"><?php echo $this->__('Place Order'); ?></button>
43
  <?php else: ?>
44
  <p><?php echo $this->__('There are no shipping methods available for your address.'); ?></p>
45
  <p><?php echo $this->__('Please repeat the process, selecting an address that we\'re able to deliver to.'); ?></p>
app/design/frontend/base/default/template/gene/braintree/js/awesomecheckout.phtml ADDED
@@ -0,0 +1,121 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Intercept various functions for the Awesome Checkout checkout flow
4
+ * @author Dave Macaulay <dave@gene.co.uk>
5
+ */
6
+ ?>
7
+ <!-- AWESOME CHECKOUT BRAINTREE SUPPORT -->
8
+ <script type="text/javascript">
9
+
10
+ vZeroIntegration.addMethods({
11
+
12
+ setLoading: function () {
13
+ checkout.setLoadWaiting('review');
14
+ },
15
+
16
+ resetLoading: function () {
17
+ checkout.setLoadWaiting(false);
18
+ },
19
+
20
+ /**
21
+ * Attach observer events for saving the payment step, alongside the review step
22
+ */
23
+ prepareSubmitObserver: function() {
24
+
25
+ // Store a pointer to the vZero integration
26
+ var vzeroIntegration = this;
27
+
28
+ // As the default checkout submits more data on the review step, we need to make sure various elements are disabled
29
+ var _originalReviewSave = Review.prototype.save;
30
+ Review.prototype.save = function () {
31
+
32
+ if (vzeroIntegration.shouldInterceptSubmit('creditcard')) {
33
+
34
+ // Store a pointer to the payment class
35
+ var paymentThis = this;
36
+ var paymentArguments = arguments;
37
+
38
+ // If everything was a success on the checkout end, let's submit the vZero integration
39
+ vzeroIntegration.submit('creditcard', function () {
40
+ return _originalReviewSave.apply(paymentThis, paymentArguments);
41
+ });
42
+
43
+ } else {
44
+ // If not run the original code
45
+ return _originalReviewSave.apply(this, arguments);
46
+ }
47
+ };
48
+
49
+ },
50
+
51
+ /**
52
+ * Attach an event to insert the PayPal button on the review step of the checkout
53
+ */
54
+ preparePaymentMethodSwitchObserver: function () {
55
+
56
+ // Store a pointer to the vZero integration
57
+ var vzeroIntegration = this;
58
+
59
+ // Store a pointer to the original review step
60
+ var _originalReviewInitialize = Review.prototype.init;
61
+
62
+ // Intercept the save function
63
+ Review.prototype.init = function(saveUrl, successUrl, agreementsForm) {
64
+
65
+ // Do the original action
66
+ var reviewResponse = _originalReviewInitialize.apply(this, arguments);
67
+
68
+ // Run our magical function
69
+ vzeroIntegration.updatePayPalButton();
70
+
71
+ return reviewResponse;
72
+ };
73
+
74
+ // When the credit card payment methods is loaded init the hosted fields if enabled
75
+ vZero.prototype.creditCardLoaded = function() {
76
+ // When the credit card is loaded call the init hosted fields function
77
+ vzeroIntegration.initHostedFields();
78
+ vzeroIntegration.initSavedMethods();
79
+
80
+ vzeroIntegration.observeAjaxRequests();
81
+ };
82
+ vZero.prototype.paypalLoaded = function() {
83
+ vzeroIntegration.initSavedMethods();
84
+
85
+ vzeroIntegration.observeAjaxRequests();
86
+ };
87
+
88
+ },
89
+
90
+ /**
91
+ * Inform the system to retrieve the billing address from the quote
92
+ */
93
+ getBillingAddress: function () {
94
+ return {
95
+ billing: 'quote'
96
+ };
97
+ }
98
+
99
+ });
100
+
101
+ /**
102
+ * Start a new instance of our integration
103
+ *
104
+ * @type {vZeroIntegration}
105
+ */
106
+ new vZeroIntegration(
107
+ (window.vzero || false),
108
+ (window.vzeroPaypal || false),
109
+ '<div id="paypal-complete"><div id="paypal-container"></div></div>',
110
+ '#review-buttons-container input[type="submit"]',
111
+ false,
112
+ {
113
+ ignoreAjax: [
114
+ 'anattadesign_awesomecheckout/onepage/progress',
115
+ 'checkout/onepage/saveOrder'
116
+ ]
117
+ },
118
+ true
119
+ );
120
+
121
+ </script>
js/gene/braintree/express.js CHANGED
@@ -144,7 +144,8 @@ var ppExpress = (function() {
144
  /**
145
  * Update the grand total display within the modal
146
  */
147
- updateShipping: function(method) {
 
148
  new Ajax.Request(config.get('shippingSaveUrl'), {
149
  method: 'POST',
150
  parameters: {
@@ -153,14 +154,165 @@ var ppExpress = (function() {
153
  },
154
 
155
  onSuccess: function (data) {
156
- $('paypal-express-totals').update(data.responseText);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
157
  },
158
 
 
 
 
 
 
 
 
 
 
 
 
 
159
  onFailure: function () {
 
160
  api.hideModal();
161
  alert( typeof Translator === "object" ? Translator.translate("We were unable to complete the request. Please try again.") : "We were unable to complete the request. Please try again." );
162
  }
163
  });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
164
  }
165
  };
166
 
@@ -197,6 +349,7 @@ var ppExpress = (function() {
197
  onSuccess: function (data) {
198
  api.getModal().classList.remove('loading');
199
  api.getModal().innerHTML = data.responseText;
 
200
  ajaxHandler();
201
  },
202
 
144
  /**
145
  * Update the grand total display within the modal
146
  */
147
+ updateShipping: function (method) {
148
+ this._setLoading($('paypal-express-submit'));
149
  new Ajax.Request(config.get('shippingSaveUrl'), {
150
  method: 'POST',
151
  parameters: {
154
  },
155
 
156
  onSuccess: function (data) {
157
+ var response = this._getJson(data);
158
+ this._unsetLoading($('paypal-express-submit'));
159
+ this._updateTotals(response);
160
+ }.bind(this),
161
+
162
+ onFailure: function () {
163
+ this._unsetLoading($('paypal-express-submit'));
164
+ api.hideModal();
165
+ alert( typeof Translator === "object" ? Translator.translate("We were unable to complete the request. Please try again.") : "We were unable to complete the request. Please try again." );
166
+ }
167
+ });
168
+ },
169
+
170
+ /**
171
+ * Prepare the coupon form by handling users hitting enter
172
+ */
173
+ prepareCoupon: function () {
174
+ if ($('paypal-express-coupon')) {
175
+ $('paypal-express-coupon').observe('keypress', function (event) {
176
+ var key = event.which || event.keyCode;
177
+ if (key == Event.KEY_RETURN) {
178
+ Event.stop(event);
179
+ this.updateCoupon();
180
+ }
181
+ }.bind(this));
182
+ }
183
+ },
184
+
185
+ /**
186
+ * Allow customers to add coupons into their basket
187
+ *
188
+ * @param coupon
189
+ */
190
+ updateCoupon: function (coupon) {
191
+ $('paypal-express-coupon-error').hide();
192
+ if (!coupon && $('paypal-express-coupon')) {
193
+ coupon = $('paypal-express-coupon').value;
194
+ }
195
+
196
+ // Only update if the coupon is set to something
197
+ if (coupon == '') {
198
+ return false;
199
+ }
200
+
201
+ this._setLoading($('paypal-express-coupon-apply'));
202
+ new Ajax.Request(config.get('couponSaveUrl'), {
203
+ method: 'POST',
204
+ parameters: {
205
+ 'coupon': coupon
206
  },
207
 
208
+ onSuccess: function (data) {
209
+ var response = this._getJson(data);
210
+ this._unsetLoading($('paypal-express-coupon-apply'));
211
+ this._updateTotals(response);
212
+ if (response.success == true) {
213
+ $('paypal-express-coupon-remove').show();
214
+ $('paypal-express-coupon-apply').hide();
215
+ } else if (response.message) {
216
+ $('paypal-express-coupon-error').update(response.message).show();
217
+ }
218
+ }.bind(this),
219
+
220
  onFailure: function () {
221
+ this._unsetLoading($('paypal-express-coupon-submit'));
222
  api.hideModal();
223
  alert( typeof Translator === "object" ? Translator.translate("We were unable to complete the request. Please try again.") : "We were unable to complete the request. Please try again." );
224
  }
225
  });
226
+ return false;
227
+ },
228
+
229
+ /**
230
+ * Allow the user the ability to remove the coupon code from their quote
231
+ */
232
+ removeCoupon: function () {
233
+ $('paypal-express-coupon-error').hide();
234
+ this._setLoading($('paypal-express-coupon-remove'));
235
+ new Ajax.Request(config.get('couponSaveUrl'), {
236
+ method: 'POST',
237
+ parameters: {
238
+ 'remove': true
239
+ },
240
+
241
+ onSuccess: function (data) {
242
+ var response = this._getJson(data);
243
+ this._unsetLoading($('paypal-express-coupon-remove'));
244
+ this._updateTotals(response);
245
+ if (response.success == true) {
246
+ $('paypal-express-coupon-remove').hide();
247
+ $('paypal-express-coupon-apply').show();
248
+ $('paypal-express-coupon').value = '';
249
+ $('paypal-express-coupon').focus();
250
+ } else if (response.message) {
251
+ $('paypal-express-coupon-error').update(response.message).show();
252
+ }
253
+ }.bind(this),
254
+
255
+ onFailure: function () {
256
+ this._unsetLoading($('paypal-express-coupon-submit'));
257
+ api.hideModal();
258
+ alert( typeof Translator === "object" ? Translator.translate("We were unable to complete the request. Please try again.") : "We were unable to complete the request. Please try again." );
259
+ }
260
+ });
261
+ },
262
+
263
+ /**
264
+ * Update the totals from the response
265
+ *
266
+ * @param response
267
+ * @private
268
+ */
269
+ _updateTotals: function (response) {
270
+ if (typeof response.totals !== 'undefined') {
271
+ $('paypal-express-totals').update(response.totals);
272
+ }
273
+ },
274
+
275
+ /**
276
+ * Return the JSON from the request
277
+ *
278
+ * @param data
279
+ * @returns {*}
280
+ * @private
281
+ */
282
+ _getJson: function (data) {
283
+ if (typeof data.responseJSON !== 'undefined') {
284
+ return data.responseJSON;
285
+ } else if (typeof data.responseText === 'string') {
286
+ return data.responseText.evalJSON();
287
+ }
288
+ },
289
+
290
+ /**
291
+ * Set an element to a loading state
292
+ *
293
+ * @param element
294
+ * @private
295
+ */
296
+ _setLoading: function (element) {
297
+ if (!element) {
298
+ return false;
299
+ }
300
+ element.setAttribute('disabled', 'disabled');
301
+ element.addClassName('loading');
302
+ },
303
+
304
+ /**
305
+ * Unset the loading state
306
+ *
307
+ * @param element
308
+ * @private
309
+ */
310
+ _unsetLoading: function (element) {
311
+ if (!element) {
312
+ return false;
313
+ }
314
+ element.removeAttribute('disabled');
315
+ element.removeClassName('loading');
316
  }
317
  };
318
 
349
  onSuccess: function (data) {
350
  api.getModal().classList.remove('loading');
351
  api.getModal().innerHTML = data.responseText;
352
+ api.prepareCoupon();
353
  ajaxHandler();
354
  },
355
 
js/gene/braintree/vzero-0.7-min.js CHANGED
@@ -1 +1 @@
1
- var vZero=Class.create();vZero.prototype={initialize:function(e,t,i,n,a,o,s,r,d){this.code=e,this.clientToken=t,this.threeDSecure=i,this.hostedFields=n,a&&(this.billingName=a),o&&(this.billingPostcode=o),s&&(this.quoteUrl=s),r&&(this.tokenizeUrl=r),d&&(this.vaultToNonceUrl=d),this._hostedFieldsTokenGenerated=!1,this.acceptedCards=!1,this.closeMethod=!1,this._hostedFieldsTimeout=!1,this._updateDataXhr=!1,this._updateDataCallbacks=[],this._updateDataParams={},this._vaultToNonceXhr=!1},init:function(){this.client=new braintree.api.Client({clientToken:this.clientToken})},initHostedFields:function(e){return $$('iframe[name^="braintree-"]').length>0?!1:null===$("braintree-hosted-submit")?!1:(this.integration=e,this._hostedFieldsTokenGenerated=!1,clearTimeout(this._hostedFieldsTimeout),void(this._hostedFieldsTimeout=setTimeout(function(){if(this._hostedIntegration!==!1)try{this._hostedIntegration.teardown(function(){this._hostedIntegration=!1,this.setupHostedFieldsClient()}.bind(this))}catch(e){this.setupHostedFieldsClient()}else this.setupHostedFieldsClient()}.bind(this),50)))},teardownHostedFields:function(e){this._hostedIntegration!==!1?this._hostedIntegration.teardown(function(){this._hostedIntegration=!1,"function"==typeof e&&e()}.bind(this)):"function"==typeof e&&e()},setupHostedFieldsClient:function(){if($$('iframe[name^="braintree-"]').length>0)return!1;this._hostedIntegration=!1;var e={id:this.integration.form,hostedFields:{styles:this.getHostedFieldsStyles(),number:{selector:"#card-number",placeholder:"0000 0000 0000 0000"},expirationMonth:{selector:"#expiration-month",placeholder:"MM"},expirationYear:{selector:"#expiration-year",placeholder:"YY"},onFieldEvent:this.hostedFieldsOnFieldEvent.bind(this)},onReady:function(e){this._hostedIntegration=e,$$("#credit-card-form.loading").length&&$$("#credit-card-form.loading").first().removeClassName("loading")}.bind(this),onPaymentMethodReceived:this.hostedFieldsPaymentMethodReceived.bind(this),onError:this.hostedFieldsError.bind(this)};null!==$("cvv")&&(e.hostedFields.cvv={selector:"#cvv"}),braintree.setup(this.clientToken,"custom",e)},getHostedFieldsStyles:function(){return"function"==typeof this.integration.getHostedFieldsStyles?this.integration.getHostedFieldsStyles():{input:{"font-size":"14pt",color:"#3A3A3A"},":focus":{color:"black"},".valid":{color:"green"},".invalid":{color:"red"}}},hostedFieldsOnFieldEvent:function(e){if("fieldStateChange"===e.type&&e.card){var t={visa:"VI","american-express":"AE","master-card":"MC",discover:"DI",jcb:"JCB",maestro:"ME"};void 0!==typeof t[e.card.type]?this.updateCardType(!1,t[e.card.type]):this.updateCardType(!1,"card")}},vaultToNonce:function(nonce,callback){var parameters=this.getBillingAddress();parameters.nonce=nonce,new Ajax.Request(this.vaultToNonceUrl,{method:"post",parameters:parameters,onSuccess:function(transport){if(transport&&transport.responseText){var response;try{response=eval("("+transport.responseText+")")}catch(e){response={}}response.success&&response.nonce?callback(response.nonce):("function"==typeof this.integration.resetLoading&&this.integration.resetLoading(),response.error?alert(response.error):alert("Something wen't wrong and we're currently unable to take your payment."))}}.bind(this),onFailure:function(){"function"==typeof this.integration.resetLoading&&this.integration.resetLoading(),alert("Something wen't wrong and we're currently unable to take your payment.")}.bind(this)})},hostedFieldsPaymentMethodReceived:function(e){this.threeDSecure?("function"==typeof this.integration.setLoading&&this.integration.setLoading(),this.updateData(function(){this.vaultToNonce(e.nonce,function(e){"function"==typeof this.integration.resetLoading&&this.integration.resetLoading(),this.verify3dSecureNonce(e,{onSuccess:function(e){this.hostedFieldsNonceReceived(e.nonce)}.bind(this),onFailure:function(e,t){alert(t)}.bind(this)})}.bind(this))}.bind(this))):this.hostedFieldsNonceReceived(e.nonce)},hostedFieldsNonceReceived:function(e){$("creditcard-payment-nonce").value=e,$("creditcard-payment-nonce").setAttribute("value",e),"function"==typeof this.integration.resetLoading&&this.integration.resetLoading(),this._hostedFieldsTokenGenerated=!0,"function"==typeof this.integration.afterHostedFieldsNonceReceived&&this.integration.afterHostedFieldsNonceReceived(e)},hostedFieldsError:function(e){return"function"==typeof this.integration.resetLoading&&this.integration.resetLoading(),"undefined"!=typeof e.message&&-1==e.message.indexOf("Cannot place two elements in")&&alert(e.message),this._hostedFieldsTokenGenerated=!1,"function"==typeof this.integration.afterHostedFieldsError&&this.integration.afterHostedFieldsError(e.message),!1},usingSavedCard:function(){return void 0!=$("creditcard-saved-accounts")&&void 0!=$$("#creditcard-saved-accounts input:checked[type=radio]").first()&&"other"!==$$("#creditcard-saved-accounts input:checked[type=radio]").first().value},setThreeDSecure:function(e){this.threeDSecure=e},setAmount:function(e){this.amount=parseFloat(e)},setBillingName:function(e){this.billingName=e},getBillingName:function(){return"object"==typeof this.billingName?this.combineElementsValues(this.billingName):this.billingName},setBillingPostcode:function(e){this.billingPostcode=e},getBillingPostcode:function(){return"object"==typeof this.billingPostcode?this.combineElementsValues(this.billingPostcode):this.billingPostcode},setAcceptedCards:function(e){this.acceptedCards=e},getBillingAddress:function(){if("function"==typeof this.integration.getBillingAddress)return this.integration.getBillingAddress();var e={};return null!==$("co-billing-form")?e="FORM"==$("co-billing-form").tagName?$("co-billing-form").serialize(!0):this.extractBilling($("co-billing-form").up("form").serialize(!0)):null!==$("billing:firstname")&&(e=this.extractBilling($("billing:firstname").up("form").serialize(!0))),e?e:void 0},extractBilling:function(e){var t={};return $H(e).each(function(e){0==e.key.indexOf("billing")&&-1==e.key.indexOf("password")&&(t[e.key]=e.value)}),t},getAcceptedCards:function(){return this.acceptedCards},combineElementsValues:function(e,t){t||(t=" ");var i=[];return e.each(function(e,t){void 0!==$(e)&&(i[t]=$(e).value)}),i.join(t)},updateCardType:function(e,t){if(t||(t=this.getCardType(e)),void 0!=$("gene_braintree_creditcard_cc_type")&&("card"==t?$("gene_braintree_creditcard_cc_type").value="":$("gene_braintree_creditcard_cc_type").value=t),void 0!=$("card-type-image")){var i=$("card-type-image").src.substring(0,$("card-type-image").src.lastIndexOf("/"));$("card-type-image").setAttribute("src",i+"/"+t+".png")}},observeCardType:function(){void 0!==$$('[data-genebraintree-name="number"]').first()&&(Element.observe($$('[data-genebraintree-name="number"]').first(),"keyup",function(){vzero.updateCardType(this.value)}),$$('[data-genebraintree-name="number"]').first().oninput=function(){var e=this.value.split(" ").join("");e.length>0&&(e=e.match(new RegExp(".{1,4}","g")).join(" ")),this.value=e})},observeAjaxRequests:function(e,t){Ajax.Responders.register({onComplete:function(i){return this.handleAjaxRequest(i.url,e,t)}.bind(this)}),window.jQuery&&jQuery(document).ajaxComplete(function(i,n,a){return this.handleAjaxRequest(a.url,e,t)}.bind(this))},handleAjaxRequest:function(e,t,i){if("undefined"!=typeof i&&i instanceof Array&&i.length>0){var n=!1;if(i.each(function(t){e&&-1!=e.indexOf(t)&&(n=!0)}),n===!0)return!1}e&&-1==e.indexOf("/braintree/")&&(t?t(e):this.updateData())},updateData:function(e,t){this._updateDataCallbacks.push(e),this._updateDataParams=t,this._updateDataXhr!==!1&&this._updateDataXhr.transport.abort(),this._updateDataXhr=new Ajax.Request(this.quoteUrl,{method:"post",parameters:this._updateDataParams,onSuccess:function(e){if(e&&(e.responseJSON||e.responseText)){var t;e.responseJSON&&"object"==typeof e.responseJSON?t=e.responseJSON:e.responseText&&(t=JSON.decode(e.responseText)),void 0!=t.billingName&&(this.billingName=t.billingName),void 0!=t.billingPostcode&&(this.billingPostcode=t.billingPostcode),void 0!=t.grandTotal&&(this.amount=t.grandTotal),void 0!=t.threeDSecure&&this.setThreeDSecure(t.threeDSecure),"undefined"!=typeof vzeroPaypal&&void 0!=t.grandTotal&&void 0!=t.currencyCode&&vzeroPaypal.setPricing(t.grandTotal,t.currencyCode),this._updateDataParams={},this._updateDataXhr=!1,this._updateDataCallbacks.length&&(this._updateDataCallbacks.each(function(e){e(t)}.bind(this)),this._updateDataCallbacks=[])}}.bind(this),onFailure:function(){this._updateDataParams={},this._updateDataXhr=!1,this._updateDataCallbacks=[]}.bind(this)})},close3dSecureMethod:function(e){this.closeMethod=e},tokenize3dSavedCards:function(callback){if(this.threeDSecure)if(void 0!==$$("[data-token]").first()){var tokens=[];$$("[data-token]").each(function(e,t){tokens[t]=e.getAttribute("data-token")}),new Ajax.Request(this.tokenizeUrl,{method:"post",onSuccess:function(transport){if(transport&&transport.responseText){try{response=eval("("+transport.responseText+")")}catch(e){response={}}response.success&&$H(response.tokens).each(function(e){void 0!=$$('[data-token="'+e.key+'"]').first()&&$$('[data-token="'+e.key+'"]').first().setAttribute("data-threedsecure-nonce",e.value)}),callback&&callback(response)}}.bind(this),parameters:{tokens:Object.toJSON(tokens)}})}else callback();else callback()},onUserClose3ds:function(){this._hostedFieldsTokenGenerated=!1,this.closeMethod?this.closeMethod():checkout.setLoadWaiting(!1)},verify3dSecureNonce:function(e,t){var i={amount:this.amount,creditCard:e,onUserClose:this.onUserClose3ds.bind(this)};this.client.verify3DS(i,function(e,i){e?t.onFailure&&t.onFailure(i,e.message):t.onSuccess&&t.onSuccess(i)})},verify3dSecure:function(e){var t={amount:this.amount,creditCard:{number:$$('[data-genebraintree-name="number"]').first().value,expirationMonth:$$('[data-genebraintree-name="expiration_month"]').first().value,expirationYear:$$('[data-genebraintree-name="expiration_year"]').first().value,cardholderName:this.getBillingName()},onUserClose:this.onUserClose3ds.bind(this)};void 0!=$$('[data-genebraintree-name="cvv"]').first()&&(t.creditCard.cvv=$$('[data-genebraintree-name="cvv"]').first().value),""!=this.getBillingPostcode()&&(t.creditCard.billingAddress={postalCode:this.getBillingPostcode()}),this.client.verify3DS(t,function(t,i){t?(alert(t.message),e.onFailure?e.onFailure():checkout.setLoadWaiting(!1)):($("creditcard-payment-nonce").value=i.nonce,$("creditcard-payment-nonce").setAttribute("value",i.nonce),e.onSuccess&&e.onSuccess())})},verify3dSecureVault:function(e){var t=$$("#creditcard-saved-accounts input:checked[type=radio]").first().getAttribute("data-threedsecure-nonce");t?this.client.verify3DS({amount:this.amount,creditCard:t},function(t,i){t?(alert(t.message),e.onFailure?e.onFailure():checkout.setLoadWaiting(!1)):($("creditcard-payment-nonce").removeAttribute("disabled"),$("creditcard-payment-nonce").value=i.nonce,$("creditcard-payment-nonce").setAttribute("value",i.nonce),e.onSuccess&&e.onSuccess())}):(alert("No payment nonce present."),e.onFailure?e.onFailure():checkout.setLoadWaiting(!1))},processCard:function(e){var t={number:$$('[data-genebraintree-name="number"]').first().value,cardholderName:this.getBillingName(),expirationMonth:$$('[data-genebraintree-name="expiration_month"]').first().value,expirationYear:$$('[data-genebraintree-name="expiration_year"]').first().value};void 0!=$$('[data-genebraintree-name="cvv"]').first()&&(t.cvv=$$('[data-genebraintree-name="cvv"]').first().value),""!=this.getBillingPostcode()&&(t.billingAddress={postalCode:this.getBillingPostcode()}),this.client.tokenizeCard(t,function(t,i){if(t){for(var n=0;n<t.length;n++)alert(t[n].code+" "+t[n].message);e.onFailure?e.onFailure():checkout.setLoadWaiting(!1)}else $("creditcard-payment-nonce").value=i,$("creditcard-payment-nonce").setAttribute("value",i),e.onSuccess&&e.onSuccess()})},shouldInterceptCreditCard:function(){return!0},shouldInterceptPayPal:function(){return!0},getCardType:function(e){if(e){if(null!=e.match(/^4/))return"VI";if(null!=e.match(/^(34|37)/))return"AE";if(null!=e.match(/^5[1-5]/))return"MC";if(null!=e.match(/^6011/))return"DI";if(null!=e.match(/^(?:2131|1800|35)/))return"JCB";if(null!=e.match(/^(5018|5020|5038|6304|67[0-9]{2})/))return"ME"}return"card"},process:function(e){e=e||{},this._hostedFieldsTokenGenerated?e.onSuccess&&e.onSuccess():this.usingSavedCard()&&$$("#creditcard-saved-accounts input:checked[type=radio]").first().hasAttribute("data-threedsecure-nonce")?this.verify3dSecureVault(e):this.usingSavedCard()?e.onSuccess&&e.onSuccess():1==this.threeDSecure?this.verify3dSecure(e):this.processCard(e)},creditCardLoaded:function(){return!1},paypalLoaded:function(){return!1}};var vZeroPayPalButton=Class.create();vZeroPayPalButton.prototype={initialize:function(e,t,i,n,a){this.clientToken=e,this.storeFrontName=t,this.singleUse=i,this.locale=n,this.futureSingleUse=a,this._paypalOptions={},this._paypalIntegration=!1,this._paypalButton=!1,this._rebuildTimer=!1,this._rebuildCount=0},setPricing:function(e,t){this.amount=parseFloat(e),this.currency=t,null==$("paypal-payment-nonce")||$("paypal-payment-nonce").value||this.rebuildButton()},rebuildButton:function(){if(clearTimeout(this._rebuildTimer),this._paypalIntegration!==!1)try{this._paypalIntegration.teardown(function(){this._paypalIntegration=!1,this.addPayPalButton(this._paypalOptions)}.bind(this))}catch(e){if("Cannot teardown integration more than once"==e.message)this._paypalIntegration=!1,this.addPayPalButton(this._paypalOptions);else{if(this._rebuildCount>=10)return!1;this._rebuildTimer=setTimeout(function(){++this._rebuildCount,this.rebuildButton()}.bind(this),200)}}},addPayPalButton:function(e,t){if(null===$("paypal-container")||null===$("braintree-paypal-button"))return!1;var i=$("braintree-paypal-button").innerHTML;if($("paypal-container").update(""),$("paypal-container").insert(i),!$("paypal-container").select(">button").length)return!1;this._paypalButton=$("paypal-container").select(">button").first(),this._paypalButton.addClassName("braintree-paypal-loading"),this._paypalButton.setAttribute("disabled","disabled"),this._paypalOptions=e,this._paypalIntegration=!1;var n={paymentMethodNonceInputField:"paypal-payment-nonce",displayName:this.storeFrontName,onPaymentMethodReceived:function(t){"function"==typeof e.onSuccess?e.onSuccess(t):(payment.switchMethod("gene_braintree_paypal"),$("paypal-payment-nonce").removeAttribute("disabled"),$("paypal-complete").remove(),window.review&&review.save())},onUnsupported:function(){alert("You need to link your PayPal account with your Braintree account in your Braintree control panel to utilise the PayPal functionality of this extension.")},onReady:function(i){this._paypalIntegration=i,this._attachPayPalButtonEvent(t),"function"==typeof e.onReady&&e.onReady(i)}.bind(this),paypal:{headless:!0}};this.locale&&(n.locale=this.locale),1==this.singleUse?(n.singleUse=!0,n.amount=this.amount,n.currency=this.currency):1==this.futureSingleUse?n.singleUse=!0:n.singleUse=!1,braintree.setup(this.clientToken,"paypal",n)},_attachPayPalButtonEvent:function(e){this._paypalIntegration&&this._paypalButton&&(this._paypalButton.removeClassName("braintree-paypal-loading"),this._paypalButton.removeAttribute("disabled"),Event.stopObserving(this._paypalButton,"click"),Event.observe(this._paypalButton,"click",function(t){Event.stop(t),"object"==typeof e&&"function"==typeof e.validateAll?e.validateAll()&&this._paypalIntegration.paypal.initAuthFlow():this._paypalIntegration.paypal.initAuthFlow()}.bind(this)))},closePayPalWindow:function(e){}};var vZeroIntegration=Class.create();vZeroIntegration.prototype={initialize:function(e,t,i,n,a,o,s){return vZeroIntegration.prototype.loaded?(console.error("Your checkout is including the Braintree resources multiple times, please resolve this."),!1):(vZeroIntegration.prototype.loaded=!0,this.vzero=e||!1,this.vzeroPaypal=t||!1,this.vzero===!1&&this.vzeroPaypal===!1?(console.warn("The vzero and vzeroPaypal objects are not initiated."),!1):(this.paypalMarkUp=i||!1,this.paypalButtonClass=n||!1,this.isOnepage=a||!1,this.config=o||{},this._methodSwitchTimeout=!1,this._hostedFieldsInit=!1,document.observe("dom:loaded",function(){this.prepareSubmitObserver(),this.preparePaymentMethodSwitchObserver()}.bind(this)),this.hostedFieldsGenerated=!1,this.vzero.close3dSecureMethod(function(){this.vzero._hostedFieldsValidationRunning=!1,this.vzero.tokenize3dSavedCards(function(){this.threeDTokenizationComplete()}.bind(this))}.bind(this)),this.isOnepage&&(this.vzero.observeCardType(),this.observeAjaxRequests(),document.observe("dom:loaded",function(){this.initSavedPayPal(),this.initDefaultMethod(),null!==$("braintree-hosted-submit")&&this.initHostedFields()}.bind(this))),void document.observe("dom:loaded",function(){this.initSavedMethods(),null!==$("braintree-hosted-submit")&&this.initHostedFields()}.bind(this))))},initSavedMethods:function(){$$('#creditcard-saved-accounts input[type="radio"], #paypal-saved-accounts input[type="radio"]').each(function(e){var t="",i="";void 0!==e.up("#creditcard-saved-accounts")?(t="#creditcard-saved-accounts",i="#credit-card-form"):void 0!==e.up("#paypal-saved-accounts")&&(t="#paypal-saved-accounts",i=".paypal-info"),$(e).stopObserving("change").observe("change",function(e){return this.showHideOtherMethod(t,i)}.bind(this))}.bind(this))},showHideOtherMethod:function(e,t){void 0!==$$(e+" input:checked[type=radio]").first()&&"other"==$$(e+" input:checked[type=radio]").first().value?void 0!==$$(t).first()&&($$(t).first().show(),$$(t+" input, "+t+" select").each(function(e){e.removeAttribute("disabled")})):void 0!==$$(e+" input:checked[type=radio]").first()&&void 0!==$$(t).first()&&($$(t).first().hide(),$$(t+" input, "+t+" select").each(function(e){e.setAttribute("disabled","disabled")}))},checkSavedOther:function(){var e="",t="";"gene_braintree_creditcard"==this.getPaymentMethod()?(e="#creditcard-saved-accounts",t="#credit-card-form"):"gene_braintree_paypal"==this.getPaymentMethod()&&(e="#paypal-saved-accounts",t=".paypal-info"),void 0!==$$(e).first()&&this.showHideOtherMethod(e,t)},initHostedFields:function(){this.vzero.hostedFields&&null!==$("braintree-hosted-submit")&&(void 0!==$("braintree-hosted-submit").up("form")?(this._hostedFieldsInit=!0,this.form=$("braintree-hosted-submit").up("form"),this.vzero.initHostedFields(this)):console.error("Hosted Fields cannot be initialized as we're unable to locate the parent form."))},afterHostedFieldsNonceReceived:function(e){return this.resetLoading(),this.vzero._hostedFieldsTokenGenerated=!0,this.hostedFieldsGenerated=!0,this.isOnepage?this.submitCheckout():this.submitPayment()},afterHostedFieldsError:function(e){return this.vzero._hostedFieldsTokenGenerated=!1,this.hostedFieldsGenerated=!1,!1},initDefaultMethod:function(){this.shouldAddPayPalButton(!1)&&(this.setLoading(),this.vzero.updateData(function(){this.resetLoading(),this.updatePayPalButton("add")}.bind(this)))},observeAjaxRequests:function(){this.vzero.observeAjaxRequests(function(){this.vzero.updateData(function(){this.isOnepage&&(this.initSavedPayPal(),this.rebuildPayPalButton(),this.checkSavedOther(),this.vzero.hostedFields&&this.initHostedFields()),this.initSavedMethods()}.bind(this))}.bind(this),"undefined"!=typeof this.config.ignoreAjax?this.config.ignoreAjax:!1)},rebuildPayPalButton:function(){null==$("paypal-container")&&this.updatePayPalButton()},initSavedPayPal:function(){void 0!==$$("#paypal-saved-accounts input[type=radio]").first()&&$("paypal-saved-accounts").on("change","input[type=radio]",function(e){this.updatePayPalButton(!1,"gene_braintree_paypal")}.bind(this))},prepareSubmitObserver:function(){return!1},beforeSubmit:function(e){return this._beforeSubmit(e)},_beforeSubmit:function(e){if(this.hostedFieldsGenerated===!1&&this.vzero.hostedFields&&(void 0===$$("#creditcard-saved-accounts input:checked[type=radio]").first()||void 0!==$$("#creditcard-saved-accounts input:checked[type=radio]").first()&&"other"==$$("#creditcard-saved-accounts input:checked[type=radio]").first().value)){var t=$("braintree-hosted-submit").down("button");t.removeAttribute("disabled"),t.click()}else e()},afterSubmit:function(){return!1},submit:function(e,t,i,n){this.shouldInterceptSubmit(e)&&(this.validateAll()?(this.setLoading(),this.beforeSubmit(function(){void 0!=$$('[data-genebraintree-name="number"]').first()&&this.vzero.updateCardType($$('[data-genebraintree-name="number"]').first().value),this.vzero.updateData(function(){this.updateBilling(),this.vzero.process({onSuccess:function(){if(this.enableDeviceData(),this.disableCreditCardForm(),this.resetLoading(),this.afterSubmit(),this.enableDisableNonce(),this.vzero._hostedFieldsTokenGenerated=!1,this.hostedFieldsGenerated=!1,"function"==typeof t)var e=t();return this.setLoading(),this.enableCreditCardForm(),e}.bind(this),onFailure:function(){return this.vzero._hostedFieldsTokenGenerated=!1,this.hostedFieldsGenerated=!1,this.resetLoading(),this.afterSubmit(),"function"==typeof i?i():void 0}.bind(this)})}.bind(this),this.getUpdateDataParams())}.bind(this))):(this.vzero._hostedFieldsTokenGenerated=!1,this.hostedFieldsGenerated=!1,this.resetLoading(),"function"==typeof n&&n()))},submitCheckout:function(){window.review&&review.save()},submitPayment:function(){payment.save&&payment.save()},enableDisableNonce:function(){"gene_braintree_creditcard"==this.getPaymentMethod()?(null!==$("creditcard-payment-nonce")&&$("creditcard-payment-nonce").removeAttribute("disabled"),null!==$("paypal-payment-nonce")&&$("paypal-payment-nonce").setAttribute("disabled","disabled")):"gene_braintree_paypal"==this.getPaymentMethod()&&(null!==$("creditcard-payment-nonce")&&$("creditcard-payment-nonce").setAttribute("disabled","disabled"),null!==$("paypal-payment-nonce")&&$("paypal-payment-nonce").removeAttribute("disabled"))},preparePaymentMethodSwitchObserver:function(){return this.defaultPaymentMethodSwitch()},defaultPaymentMethodSwitch:function(){var e=this,t=Payment.prototype.switchMethod;Payment.prototype.switchMethod=function(i){return e.paymentMethodSwitch(i),t.apply(this,arguments)}},paymentMethodSwitch:function(e){clearTimeout(this._methodSwitchTimeout),this._methodSwitchTimeout=setTimeout(function(){this.shouldAddPayPalButton(e)?this.updatePayPalButton("add",e):this.updatePayPalButton("remove",e),"gene_braintree_creditcard"==(e?e:this.getPaymentMethod())&&this.initHostedFields(),this.checkSavedOther()}.bind(this),50)},completePayPal:function(e){return this.enableDisableNonce(),this.enableDeviceData(),e.nonce&&null!==$("paypal-payment-nonce")?($("paypal-payment-nonce").value=e.nonce,$("paypal-payment-nonce").setAttribute("value",e.nonce)):console.warn("Unable to update PayPal nonce, please verify that the nonce input field has the ID: paypal-payment-nonce"),this.afterPayPalComplete(),!1},afterPayPalComplete:function(){return this.resetLoading(),this.submitCheckout()},updatePayPalButton:function(e,t){if(this.paypalMarkUp===!1)return!1;if("refresh"==e)return this.updatePayPalButton("remove"),this.updatePayPalButton("add"),!0;if(this.shouldAddPayPalButton(t)&&"remove"!=e||"add"==e)if(void 0!==$$(this.paypalButtonClass).first()){if(void 0!==$$("#paypal-complete").first()&&$$("#paypal-complete").first().visible())return!0;$$(this.paypalButtonClass).first().hide(),$$(this.paypalButtonClass).first().insert({after:this.paypalMarkUp});var i={onSuccess:this.completePayPal.bind(this),onReady:this.paypalOnReady.bind(this)};this.vzeroPaypal.addPayPalButton(i,this)}else console.warn("We're unable to find the element "+this.paypalButtonClass+". Please check your integration.");else void 0!==$$(this.paypalButtonClass).first()&&$$(this.paypalButtonClass).first().show(),void 0!==$$("#paypal-complete").first()&&$("paypal-complete").remove()},paypalOnReady:function(e){return!0},setLoading:function(){checkout.setLoadWaiting("payment")},resetLoading:function(){checkout.setLoadWaiting(!1)},enableDeviceData:function(){null!==$("device_data")&&$("device_data").removeAttribute("disabled")},disableCreditCardForm:function(){$$("#credit-card-form input, #credit-card-form select").each(function(e){"creditcard-payment-nonce"!=e.id&&"gene_braintree_creditcard_store_in_vault"!=e.id&&e.setAttribute("disabled","disabled")})},enableCreditCardForm:function(){$$("#credit-card-form input, #credit-card-form select").each(function(e){e.removeAttribute("disabled")})},updateBilling:function(){(null!==$("billing-address-select")&&""==$("billing-address-select").value||null===$("billing-address-select"))&&(null!==$("billing:firstname")&&null!==$("billing:lastname")&&this.vzero.setBillingName($("billing:firstname").value+" "+$("billing:lastname").value),null!==$("billing:postcode")&&this.vzero.setBillingPostcode($("billing:postcode").value))},getUpdateDataParams:function(){var e={};return null!==$("billing-address-select")&&""!=$("billing-address-select").value&&(e.addressId=$("billing-address-select").value),e},getPaymentMethod:function(){return payment.currentMethod},shouldInterceptSubmit:function(e){switch(e){case"creditcard":return"gene_braintree_creditcard"==this.getPaymentMethod()&&this.vzero.shouldInterceptCreditCard();break;case"paypal":return"gene_braintree_paypal"==this.getPaymentMethod()&&this.vzero.shouldInterceptCreditCard()}return!1},shouldAddPayPalButton:function(e){return"gene_braintree_paypal"==(e?e:this.getPaymentMethod())&&null===$("paypal-saved-accounts")||"gene_braintree_paypal"==(e?e:this.getPaymentMethod())&&void 0!==$$("#paypal-saved-accounts input:checked[type=radio]").first()&&"other"==$$("#paypal-saved-accounts input:checked[type=radio]").first().value},threeDTokenizationComplete:function(){this.resetLoading()},validateAll:function(){return!0}},function(){for(var e,t=function(){},i=["assert","clear","count","debug","dir","dirxml","error","exception","group","groupCollapsed","groupEnd","info","log","markTimeline","profile","profileEnd","table","time","timeEnd","timeStamp","trace","warn"],n=i.length,a=window.console=window.console||{};n--;)e=i[n],a[e]||(a[e]=t)}();
1
+ var vZero=Class.create();vZero.prototype={initialize:function(e,t,i,n,a,o,s,r,d){this.code=e,this.clientToken=t,this.threeDSecure=i,this.hostedFields=n,a&&(this.billingName=a),o&&(this.billingPostcode=o),s&&(this.quoteUrl=s),r&&(this.tokenizeUrl=r),d&&(this.vaultToNonceUrl=d),this._hostedFieldsTokenGenerated=!1,this.acceptedCards=!1,this.closeMethod=!1,this._hostedFieldsTimeout=!1,this._updateDataXhr=!1,this._updateDataCallbacks=[],this._updateDataParams={},this._vaultToNonceXhr=!1},init:function(){this.client=new braintree.api.Client({clientToken:this.clientToken})},initHostedFields:function(e){return $$('iframe[name^="braintree-"]').length>0?!1:null===$("braintree-hosted-submit")?!1:(this.integration=e,this._hostedFieldsTokenGenerated=!1,clearTimeout(this._hostedFieldsTimeout),void(this._hostedFieldsTimeout=setTimeout(function(){if(this._hostedIntegration!==!1)try{this._hostedIntegration.teardown(function(){this._hostedIntegration=!1,this.setupHostedFieldsClient()}.bind(this))}catch(e){this.setupHostedFieldsClient()}else this.setupHostedFieldsClient()}.bind(this),50)))},teardownHostedFields:function(e){this._hostedIntegration!==!1?this._hostedIntegration.teardown(function(){this._hostedIntegration=!1,"function"==typeof e&&e()}.bind(this)):"function"==typeof e&&e()},setupHostedFieldsClient:function(){if($$('iframe[name^="braintree-"]').length>0)return!1;this._hostedIntegration=!1;var e={id:this.integration.form,hostedFields:{styles:this.getHostedFieldsStyles(),number:{selector:"#card-number",placeholder:"0000 0000 0000 0000"},expirationMonth:{selector:"#expiration-month",placeholder:"MM"},expirationYear:{selector:"#expiration-year",placeholder:"YY"},onFieldEvent:this.hostedFieldsOnFieldEvent.bind(this)},onReady:function(e){this._hostedIntegration=e,$$("#credit-card-form.loading").length&&$$("#credit-card-form.loading").first().removeClassName("loading")}.bind(this),onPaymentMethodReceived:this.hostedFieldsPaymentMethodReceived.bind(this),onError:this.hostedFieldsError.bind(this)};null!==$("cvv")&&(e.hostedFields.cvv={selector:"#cvv"}),braintree.setup(this.clientToken,"custom",e)},getHostedFieldsStyles:function(){return"function"==typeof this.integration.getHostedFieldsStyles?this.integration.getHostedFieldsStyles():{input:{"font-size":"14pt",color:"#3A3A3A"},":focus":{color:"black"},".valid":{color:"green"},".invalid":{color:"red"}}},hostedFieldsOnFieldEvent:function(e){if("fieldStateChange"===e.type&&e.card){var t={visa:"VI","american-express":"AE","master-card":"MC",discover:"DI",jcb:"JCB",maestro:"ME"};void 0!==typeof t[e.card.type]?this.updateCardType(!1,t[e.card.type]):this.updateCardType(!1,"card")}},vaultToNonce:function(nonce,callback){var parameters=this.getBillingAddress();parameters.nonce=nonce,new Ajax.Request(this.vaultToNonceUrl,{method:"post",parameters:parameters,onSuccess:function(transport){if(transport&&transport.responseText){var response;try{response=eval("("+transport.responseText+")")}catch(e){response={}}response.success&&response.nonce?callback(response.nonce):("function"==typeof this.integration.resetLoading&&this.integration.resetLoading(),response.error?alert(response.error):alert("Something wen't wrong and we're currently unable to take your payment."))}}.bind(this),onFailure:function(){"function"==typeof this.integration.resetLoading&&this.integration.resetLoading(),alert("Something wen't wrong and we're currently unable to take your payment.")}.bind(this)})},hostedFieldsPaymentMethodReceived:function(e){this.threeDSecure?("function"==typeof this.integration.setLoading&&this.integration.setLoading(),this.updateData(function(){this.vaultToNonce(e.nonce,function(e){"function"==typeof this.integration.resetLoading&&this.integration.resetLoading(),this.verify3dSecureNonce(e,{onSuccess:function(e){this.hostedFieldsNonceReceived(e.nonce)}.bind(this),onFailure:function(e,t){alert(t)}.bind(this)})}.bind(this))}.bind(this))):this.hostedFieldsNonceReceived(e.nonce)},hostedFieldsNonceReceived:function(e){$("creditcard-payment-nonce").value=e,$("creditcard-payment-nonce").setAttribute("value",e),"function"==typeof this.integration.resetLoading&&this.integration.resetLoading(),this._hostedFieldsTokenGenerated=!0,"function"==typeof this.integration.afterHostedFieldsNonceReceived&&this.integration.afterHostedFieldsNonceReceived(e)},hostedFieldsError:function(e){return"function"==typeof this.integration.resetLoading&&this.integration.resetLoading(),"undefined"!=typeof e.message&&-1==e.message.indexOf("Cannot place two elements in")&&-1==e.message.indexOf("Unable to find element with selector")&&alert(e.message),this._hostedFieldsTokenGenerated=!1,"function"==typeof this.integration.afterHostedFieldsError&&this.integration.afterHostedFieldsError(e.message),!1},usingSavedCard:function(){return void 0!=$("creditcard-saved-accounts")&&void 0!=$$("#creditcard-saved-accounts input:checked[type=radio]").first()&&"other"!==$$("#creditcard-saved-accounts input:checked[type=radio]").first().value},setThreeDSecure:function(e){this.threeDSecure=e},setAmount:function(e){this.amount=parseFloat(e)},setBillingName:function(e){this.billingName=e},getBillingName:function(){return"object"==typeof this.billingName?this.combineElementsValues(this.billingName):this.billingName},setBillingPostcode:function(e){this.billingPostcode=e},getBillingPostcode:function(){return"object"==typeof this.billingPostcode?this.combineElementsValues(this.billingPostcode):this.billingPostcode},setAcceptedCards:function(e){this.acceptedCards=e},getBillingAddress:function(){if("function"==typeof this.integration.getBillingAddress)return this.integration.getBillingAddress();var e={};return null!==$("co-billing-form")?e="FORM"==$("co-billing-form").tagName?$("co-billing-form").serialize(!0):this.extractBilling($("co-billing-form").up("form").serialize(!0)):null!==$("billing:firstname")&&(e=this.extractBilling($("billing:firstname").up("form").serialize(!0))),e?e:void 0},extractBilling:function(e){var t={};return $H(e).each(function(e){0==e.key.indexOf("billing")&&-1==e.key.indexOf("password")&&(t[e.key]=e.value)}),t},getAcceptedCards:function(){return this.acceptedCards},combineElementsValues:function(e,t){t||(t=" ");var i=[];return e.each(function(e,t){void 0!==$(e)&&(i[t]=$(e).value)}),i.join(t)},updateCardType:function(e,t){if(t||(t=this.getCardType(e)),void 0!=$("gene_braintree_creditcard_cc_type")&&("card"==t?$("gene_braintree_creditcard_cc_type").value="":$("gene_braintree_creditcard_cc_type").value=t),void 0!=$("card-type-image")){var i=$("card-type-image").src.substring(0,$("card-type-image").src.lastIndexOf("/"));$("card-type-image").setAttribute("src",i+"/"+t+".png")}},observeCardType:function(){void 0!==$$('[data-genebraintree-name="number"]').first()&&(Element.observe($$('[data-genebraintree-name="number"]').first(),"keyup",function(){vzero.updateCardType(this.value)}),$$('[data-genebraintree-name="number"]').first().oninput=function(){var e=this.value.split(" ").join("");e.length>0&&(e=e.match(new RegExp(".{1,4}","g")).join(" ")),this.value=e})},observeAjaxRequests:function(e,t){Ajax.Responders.register({onComplete:function(i){return this.handleAjaxRequest(i.url,e,t)}.bind(this)}),window.jQuery&&jQuery(document).ajaxComplete(function(i,n,a){return this.handleAjaxRequest(a.url,e,t)}.bind(this))},handleAjaxRequest:function(e,t,i){if("undefined"!=typeof i&&i instanceof Array&&i.length>0){var n=!1;if(i.each(function(t){e&&-1!=e.indexOf(t)&&(n=!0)}),n===!0)return!1}e&&-1==e.indexOf("/braintree/")&&(t?t(e):this.updateData())},updateData:function(e,t){this._updateDataCallbacks.push(e),this._updateDataParams=t,this._updateDataXhr!==!1&&this._updateDataXhr.transport.abort(),this._updateDataXhr=new Ajax.Request(this.quoteUrl,{method:"post",parameters:this._updateDataParams,onSuccess:function(e){if(e&&(e.responseJSON||e.responseText)){var t;e.responseJSON&&"object"==typeof e.responseJSON?t=e.responseJSON:e.responseText&&(t=JSON.decode(e.responseText)),void 0!=t.billingName&&(this.billingName=t.billingName),void 0!=t.billingPostcode&&(this.billingPostcode=t.billingPostcode),void 0!=t.grandTotal&&(this.amount=t.grandTotal),void 0!=t.threeDSecure&&this.setThreeDSecure(t.threeDSecure),"undefined"!=typeof vzeroPaypal&&void 0!=t.grandTotal&&void 0!=t.currencyCode&&vzeroPaypal.setPricing(t.grandTotal,t.currencyCode),this._updateDataParams={},this._updateDataXhr=!1,this._updateDataCallbacks.length&&(this._updateDataCallbacks.each(function(e){e(t)}.bind(this)),this._updateDataCallbacks=[])}}.bind(this),onFailure:function(){this._updateDataParams={},this._updateDataXhr=!1,this._updateDataCallbacks=[]}.bind(this)})},close3dSecureMethod:function(e){this.closeMethod=e},tokenize3dSavedCards:function(callback){if(this.threeDSecure)if(void 0!==$$("[data-token]").first()){var tokens=[];$$("[data-token]").each(function(e,t){tokens[t]=e.getAttribute("data-token")}),new Ajax.Request(this.tokenizeUrl,{method:"post",onSuccess:function(transport){if(transport&&transport.responseText){try{response=eval("("+transport.responseText+")")}catch(e){response={}}response.success&&$H(response.tokens).each(function(e){void 0!=$$('[data-token="'+e.key+'"]').first()&&$$('[data-token="'+e.key+'"]').first().setAttribute("data-threedsecure-nonce",e.value)}),callback&&callback(response)}}.bind(this),parameters:{tokens:Object.toJSON(tokens)}})}else callback();else callback()},onUserClose3ds:function(){this._hostedFieldsTokenGenerated=!1,this.closeMethod?this.closeMethod():checkout.setLoadWaiting(!1)},verify3dSecureNonce:function(e,t){var i={amount:this.amount,creditCard:e,onUserClose:this.onUserClose3ds.bind(this)};this.client.verify3DS(i,function(e,i){e?t.onFailure&&t.onFailure(i,e.message):t.onSuccess&&t.onSuccess(i)})},verify3dSecure:function(e){var t={amount:this.amount,creditCard:{number:$$('[data-genebraintree-name="number"]').first().value,expirationMonth:$$('[data-genebraintree-name="expiration_month"]').first().value,expirationYear:$$('[data-genebraintree-name="expiration_year"]').first().value,cardholderName:this.getBillingName()},onUserClose:this.onUserClose3ds.bind(this)};void 0!=$$('[data-genebraintree-name="cvv"]').first()&&(t.creditCard.cvv=$$('[data-genebraintree-name="cvv"]').first().value),""!=this.getBillingPostcode()&&(t.creditCard.billingAddress={postalCode:this.getBillingPostcode()}),this.client.verify3DS(t,function(t,i){t?(alert(t.message),e.onFailure?e.onFailure():checkout.setLoadWaiting(!1)):($("creditcard-payment-nonce").value=i.nonce,$("creditcard-payment-nonce").setAttribute("value",i.nonce),e.onSuccess&&e.onSuccess())})},verify3dSecureVault:function(e){var t=$$("#creditcard-saved-accounts input:checked[type=radio]").first().getAttribute("data-threedsecure-nonce");t?this.client.verify3DS({amount:this.amount,creditCard:t},function(t,i){t?(alert(t.message),e.onFailure?e.onFailure():checkout.setLoadWaiting(!1)):($("creditcard-payment-nonce").removeAttribute("disabled"),$("creditcard-payment-nonce").value=i.nonce,$("creditcard-payment-nonce").setAttribute("value",i.nonce),e.onSuccess&&e.onSuccess())}):(alert("No payment nonce present."),e.onFailure?e.onFailure():checkout.setLoadWaiting(!1))},processCard:function(e){var t={number:$$('[data-genebraintree-name="number"]').first().value,cardholderName:this.getBillingName(),expirationMonth:$$('[data-genebraintree-name="expiration_month"]').first().value,expirationYear:$$('[data-genebraintree-name="expiration_year"]').first().value};void 0!=$$('[data-genebraintree-name="cvv"]').first()&&(t.cvv=$$('[data-genebraintree-name="cvv"]').first().value),""!=this.getBillingPostcode()&&(t.billingAddress={postalCode:this.getBillingPostcode()}),this.client.tokenizeCard(t,function(t,i){if(t){for(var n=0;n<t.length;n++)alert(t[n].code+" "+t[n].message);e.onFailure?e.onFailure():checkout.setLoadWaiting(!1)}else $("creditcard-payment-nonce").value=i,$("creditcard-payment-nonce").setAttribute("value",i),e.onSuccess&&e.onSuccess()})},shouldInterceptCreditCard:function(){return!0},shouldInterceptPayPal:function(){return!0},getCardType:function(e){if(e){if(null!=e.match(/^4/))return"VI";if(null!=e.match(/^(34|37)/))return"AE";if(null!=e.match(/^5[1-5]/))return"MC";if(null!=e.match(/^6011/))return"DI";if(null!=e.match(/^(?:2131|1800|35)/))return"JCB";if(null!=e.match(/^(5018|5020|5038|6304|67[0-9]{2})/))return"ME"}return"card"},process:function(e){e=e||{},this._hostedFieldsTokenGenerated?e.onSuccess&&e.onSuccess():this.usingSavedCard()&&$$("#creditcard-saved-accounts input:checked[type=radio]").first().hasAttribute("data-threedsecure-nonce")?this.verify3dSecureVault(e):this.usingSavedCard()?e.onSuccess&&e.onSuccess():1==this.threeDSecure?this.verify3dSecure(e):this.processCard(e)},creditCardLoaded:function(){return!1},paypalLoaded:function(){return!1}};var vZeroPayPalButton=Class.create();vZeroPayPalButton.prototype={initialize:function(e,t,i,n,a){this.clientToken=e,this.storeFrontName=t,this.singleUse=i,this.locale=n,this.futureSingleUse=a,this._paypalOptions={},this._paypalIntegration=!1,this._paypalButton=!1,this._rebuildTimer=!1,this._rebuildCount=0},setPricing:function(e,t){this.amount=parseFloat(e),this.currency=t,null==$("paypal-payment-nonce")||$("paypal-payment-nonce").value||this.rebuildButton()},rebuildButton:function(){if(clearTimeout(this._rebuildTimer),this._paypalIntegration!==!1)try{this._paypalIntegration.teardown(function(){this._paypalIntegration=!1,this.addPayPalButton(this._paypalOptions)}.bind(this))}catch(e){if("Cannot teardown integration more than once"==e.message)this._paypalIntegration=!1,this.addPayPalButton(this._paypalOptions);else{if(this._rebuildCount>=10)return!1;this._rebuildTimer=setTimeout(function(){++this._rebuildCount,this.rebuildButton()}.bind(this),200)}}},addPayPalButton:function(e,t){if(null===$("paypal-container")||null===$("braintree-paypal-button"))return!1;var i=$("braintree-paypal-button").innerHTML;if($("paypal-container").update(""),$("paypal-container").insert(i),!$("paypal-container").select(">button").length)return!1;this._paypalButton=$("paypal-container").select(">button").first(),this._paypalButton.addClassName("braintree-paypal-loading"),this._paypalButton.setAttribute("disabled","disabled"),this._paypalOptions=e,this._paypalIntegration=!1;var n={paymentMethodNonceInputField:"paypal-payment-nonce",displayName:this.storeFrontName,onPaymentMethodReceived:function(t){"function"==typeof e.onSuccess?e.onSuccess(t):(payment.switchMethod("gene_braintree_paypal"),$("paypal-payment-nonce").removeAttribute("disabled"),$("paypal-complete").remove(),window.review&&review.save())},onUnsupported:function(){alert("You need to link your PayPal account with your Braintree account in your Braintree control panel to utilise the PayPal functionality of this extension.")},onReady:function(i){this._paypalIntegration=i,this._attachPayPalButtonEvent(t),"function"==typeof e.onReady&&e.onReady(i)}.bind(this),paypal:{headless:!0}};this.locale&&(n.locale=this.locale),1==this.singleUse?(n.singleUse=!0,n.amount=this.amount,n.currency=this.currency):1==this.futureSingleUse?n.singleUse=!0:n.singleUse=!1,braintree.setup(this.clientToken,"paypal",n)},_attachPayPalButtonEvent:function(e){this._paypalIntegration&&this._paypalButton&&(this._paypalButton.removeClassName("braintree-paypal-loading"),this._paypalButton.removeAttribute("disabled"),Event.stopObserving(this._paypalButton,"click"),Event.observe(this._paypalButton,"click",function(t){Event.stop(t),"object"==typeof e&&"function"==typeof e.validateAll?e.validateAll()&&this._paypalIntegration.paypal.initAuthFlow():this._paypalIntegration.paypal.initAuthFlow()}.bind(this)))},closePayPalWindow:function(e){}};var vZeroIntegration=Class.create();vZeroIntegration.prototype={initialize:function(e,t,i,n,a,o,s){return vZeroIntegration.prototype.loaded?(console.error("Your checkout is including the Braintree resources multiple times, please resolve this."),!1):(vZeroIntegration.prototype.loaded=!0,this.vzero=e||!1,this.vzeroPaypal=t||!1,this.vzero===!1&&this.vzeroPaypal===!1?(console.warn("The vzero and vzeroPaypal objects are not initiated."),!1):(this.paypalMarkUp=i||!1,this.paypalButtonClass=n||!1,this.isOnepage=a||!1,this.config=o||{},this._methodSwitchTimeout=!1,this._hostedFieldsInit=!1,document.observe("dom:loaded",function(){this.prepareSubmitObserver(),this.preparePaymentMethodSwitchObserver()}.bind(this)),this.hostedFieldsGenerated=!1,this.vzero.close3dSecureMethod(function(){this.vzero._hostedFieldsValidationRunning=!1,this.vzero.tokenize3dSavedCards(function(){this.threeDTokenizationComplete()}.bind(this))}.bind(this)),this.isOnepage&&(this.vzero.observeCardType(),this.observeAjaxRequests(),document.observe("dom:loaded",function(){this.initSavedPayPal(),this.initDefaultMethod(),null!==$("braintree-hosted-submit")&&this.initHostedFields()}.bind(this))),void document.observe("dom:loaded",function(){this.initSavedMethods(),null!==$("braintree-hosted-submit")&&this.initHostedFields()}.bind(this))))},initSavedMethods:function(){$$('#creditcard-saved-accounts input[type="radio"], #paypal-saved-accounts input[type="radio"]').each(function(e){var t="",i="";void 0!==e.up("#creditcard-saved-accounts")?(t="#creditcard-saved-accounts",i="#credit-card-form"):void 0!==e.up("#paypal-saved-accounts")&&(t="#paypal-saved-accounts",i=".paypal-info"),$(e).stopObserving("change").observe("change",function(e){return this.showHideOtherMethod(t,i)}.bind(this))}.bind(this))},showHideOtherMethod:function(e,t){void 0!==$$(e+" input:checked[type=radio]").first()&&"other"==$$(e+" input:checked[type=radio]").first().value?void 0!==$$(t).first()&&($$(t).first().show(),$$(t+" input, "+t+" select").each(function(e){e.removeAttribute("disabled")})):void 0!==$$(e+" input:checked[type=radio]").first()&&void 0!==$$(t).first()&&($$(t).first().hide(),$$(t+" input, "+t+" select").each(function(e){e.setAttribute("disabled","disabled")}))},checkSavedOther:function(){var e="",t="";"gene_braintree_creditcard"==this.getPaymentMethod()?(e="#creditcard-saved-accounts",t="#credit-card-form"):"gene_braintree_paypal"==this.getPaymentMethod()&&(e="#paypal-saved-accounts",t=".paypal-info"),void 0!==$$(e).first()&&this.showHideOtherMethod(e,t)},initHostedFields:function(){this.vzero.hostedFields&&null!==$("braintree-hosted-submit")&&(void 0!==$("braintree-hosted-submit").up("form")?(this._hostedFieldsInit=!0,this.form=$("braintree-hosted-submit").up("form"),this.vzero.initHostedFields(this)):console.error("Hosted Fields cannot be initialized as we're unable to locate the parent form."))},afterHostedFieldsNonceReceived:function(e){return this.resetLoading(),this.vzero._hostedFieldsTokenGenerated=!0,this.hostedFieldsGenerated=!0,this.isOnepage?this.submitCheckout():this.submitPayment()},afterHostedFieldsError:function(e){return this.vzero._hostedFieldsTokenGenerated=!1,this.hostedFieldsGenerated=!1,!1},initDefaultMethod:function(){this.shouldAddPayPalButton(!1)&&(this.setLoading(),this.vzero.updateData(function(){this.resetLoading(),this.updatePayPalButton("add")}.bind(this)))},observeAjaxRequests:function(){this.vzero.observeAjaxRequests(function(){this.vzero.updateData(function(){this.isOnepage&&(this.initSavedPayPal(),this.rebuildPayPalButton(),this.checkSavedOther(),this.vzero.hostedFields&&this.initHostedFields()),this.initSavedMethods()}.bind(this))}.bind(this),"undefined"!=typeof this.config.ignoreAjax?this.config.ignoreAjax:!1)},rebuildPayPalButton:function(){null==$("paypal-container")&&this.updatePayPalButton()},initSavedPayPal:function(){void 0!==$$("#paypal-saved-accounts input[type=radio]").first()&&$("paypal-saved-accounts").on("change","input[type=radio]",function(e){this.updatePayPalButton(!1,"gene_braintree_paypal")}.bind(this))},prepareSubmitObserver:function(){return!1},beforeSubmit:function(e){return this._beforeSubmit(e)},_beforeSubmit:function(e){if(this.hostedFieldsGenerated===!1&&this.vzero.hostedFields&&(void 0===$$("#creditcard-saved-accounts input:checked[type=radio]").first()||void 0!==$$("#creditcard-saved-accounts input:checked[type=radio]").first()&&"other"==$$("#creditcard-saved-accounts input:checked[type=radio]").first().value)){var t=$("braintree-hosted-submit").down("button");t.removeAttribute("disabled"),t.click()}else e()},afterSubmit:function(){return!1},submit:function(e,t,i,n){this.shouldInterceptSubmit(e)&&(this.validateAll()?(this.setLoading(),this.beforeSubmit(function(){void 0!=$$('[data-genebraintree-name="number"]').first()&&this.vzero.updateCardType($$('[data-genebraintree-name="number"]').first().value),this.vzero.updateData(function(){this.updateBilling(),this.vzero.process({onSuccess:function(){if(this.enableDeviceData(),this.disableCreditCardForm(),this.resetLoading(),this.afterSubmit(),this.enableDisableNonce(),this.vzero._hostedFieldsTokenGenerated=!1,this.hostedFieldsGenerated=!1,"function"==typeof t)var e=t();return this.setLoading(),this.enableCreditCardForm(),e}.bind(this),onFailure:function(){return this.vzero._hostedFieldsTokenGenerated=!1,this.hostedFieldsGenerated=!1,this.resetLoading(),this.afterSubmit(),"function"==typeof i?i():void 0}.bind(this)})}.bind(this),this.getUpdateDataParams())}.bind(this))):(this.vzero._hostedFieldsTokenGenerated=!1,this.hostedFieldsGenerated=!1,this.resetLoading(),"function"==typeof n&&n()))},submitCheckout:function(){window.review&&review.save()},submitPayment:function(){payment.save&&payment.save()},enableDisableNonce:function(){"gene_braintree_creditcard"==this.getPaymentMethod()?(null!==$("creditcard-payment-nonce")&&$("creditcard-payment-nonce").removeAttribute("disabled"),null!==$("paypal-payment-nonce")&&$("paypal-payment-nonce").setAttribute("disabled","disabled")):"gene_braintree_paypal"==this.getPaymentMethod()&&(null!==$("creditcard-payment-nonce")&&$("creditcard-payment-nonce").setAttribute("disabled","disabled"),null!==$("paypal-payment-nonce")&&$("paypal-payment-nonce").removeAttribute("disabled"))},preparePaymentMethodSwitchObserver:function(){return this.defaultPaymentMethodSwitch()},defaultPaymentMethodSwitch:function(){var e=this,t=Payment.prototype.switchMethod;Payment.prototype.switchMethod=function(i){return e.paymentMethodSwitch(i),t.apply(this,arguments)}},paymentMethodSwitch:function(e){clearTimeout(this._methodSwitchTimeout),this._methodSwitchTimeout=setTimeout(function(){this.shouldAddPayPalButton(e)?this.updatePayPalButton("add",e):this.updatePayPalButton("remove",e),"gene_braintree_creditcard"==(e?e:this.getPaymentMethod())&&this.initHostedFields(),this.checkSavedOther()}.bind(this),50)},completePayPal:function(e){return this.enableDisableNonce(),this.enableDeviceData(),e.nonce&&null!==$("paypal-payment-nonce")?($("paypal-payment-nonce").value=e.nonce,$("paypal-payment-nonce").setAttribute("value",e.nonce)):console.warn("Unable to update PayPal nonce, please verify that the nonce input field has the ID: paypal-payment-nonce"),this.afterPayPalComplete(),!1},afterPayPalComplete:function(){return this.resetLoading(),this.submitCheckout()},updatePayPalButton:function(e,t){if(this.paypalMarkUp===!1)return!1;if("refresh"==e)return this.updatePayPalButton("remove"),this.updatePayPalButton("add"),!0;if(this.shouldAddPayPalButton(t)&&"remove"!=e||"add"==e)if(void 0!==$$(this.paypalButtonClass).first()){if(void 0!==$$("#paypal-complete").first()&&$$("#paypal-complete").first().visible())return!0;$$(this.paypalButtonClass).first().hide(),$$(this.paypalButtonClass).first().insert({after:this.paypalMarkUp});var i={onSuccess:this.completePayPal.bind(this),onReady:this.paypalOnReady.bind(this)};this.vzeroPaypal.addPayPalButton(i,this)}else console.warn("We're unable to find the element "+this.paypalButtonClass+". Please check your integration.");else void 0!==$$(this.paypalButtonClass).first()&&$$(this.paypalButtonClass).first().show(),void 0!==$$("#paypal-complete").first()&&$("paypal-complete").remove()},paypalOnReady:function(e){return!0},setLoading:function(){checkout.setLoadWaiting("payment")},resetLoading:function(){checkout.setLoadWaiting(!1)},enableDeviceData:function(){null!==$("device_data")&&$("device_data").removeAttribute("disabled")},disableCreditCardForm:function(){$$("#credit-card-form input, #credit-card-form select").each(function(e){"creditcard-payment-nonce"!=e.id&&"gene_braintree_creditcard_store_in_vault"!=e.id&&e.setAttribute("disabled","disabled")})},enableCreditCardForm:function(){$$("#credit-card-form input, #credit-card-form select").each(function(e){e.removeAttribute("disabled")})},updateBilling:function(){(null!==$("billing-address-select")&&""==$("billing-address-select").value||null===$("billing-address-select"))&&(null!==$("billing:firstname")&&null!==$("billing:lastname")&&this.vzero.setBillingName($("billing:firstname").value+" "+$("billing:lastname").value),null!==$("billing:postcode")&&this.vzero.setBillingPostcode($("billing:postcode").value))},getUpdateDataParams:function(){var e={};return null!==$("billing-address-select")&&""!=$("billing-address-select").value&&(e.addressId=$("billing-address-select").value),e},getPaymentMethod:function(){return payment.currentMethod},shouldInterceptSubmit:function(e){switch(e){case"creditcard":return"gene_braintree_creditcard"==this.getPaymentMethod()&&this.vzero.shouldInterceptCreditCard();break;case"paypal":return"gene_braintree_paypal"==this.getPaymentMethod()&&this.vzero.shouldInterceptCreditCard()}return!1},shouldAddPayPalButton:function(e){return"gene_braintree_paypal"==(e?e:this.getPaymentMethod())&&null===$("paypal-saved-accounts")||"gene_braintree_paypal"==(e?e:this.getPaymentMethod())&&void 0!==$$("#paypal-saved-accounts input:checked[type=radio]").first()&&"other"==$$("#paypal-saved-accounts input:checked[type=radio]").first().value},threeDTokenizationComplete:function(){this.resetLoading()},validateAll:function(){return!0}},function(){for(var e,t=function(){},i=["assert","clear","count","debug","dir","dirxml","error","exception","group","groupCollapsed","groupEnd","info","log","markTimeline","profile","profileEnd","table","time","timeEnd","timeStamp","trace","warn"],n=i.length,a=window.console=window.console||{};n--;)e=i[n],a[e]||(a[e]=t)}();
js/gene/braintree/vzero-0.7.js CHANGED
@@ -164,14 +164,7 @@ vZero.prototype = {
164
  },
165
  onFieldEvent: this.hostedFieldsOnFieldEvent.bind(this)
166
  },
167
- onReady: function (integration) {
168
- this._hostedIntegration = integration;
169
-
170
- // Unset the loading state if it's present
171
- if ($$('#credit-card-form.loading').length) {
172
- $$('#credit-card-form.loading').first().removeClassName('loading');
173
- }
174
- }.bind(this),
175
  onPaymentMethodReceived: this.hostedFieldsPaymentMethodReceived.bind(this),
176
  onError: this.hostedFieldsError.bind(this)
177
  };
@@ -307,6 +300,31 @@ vZero.prototype = {
307
  );
308
  },
309
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
310
  /**
311
  * Action to call after receiving the payment method
312
  *
@@ -386,7 +404,11 @@ vZero.prototype = {
386
 
387
  // Stop any "Cannot place two elements in #xxx" messages being shown to the user
388
  // These are non critical errors and the functionality will still work as expected
389
- if (typeof response.message !== 'undefined' && response.message.indexOf('Cannot place two elements in') == -1) {
 
 
 
 
390
  // Let the user know what went wrong
391
  alert(response.message);
392
  }
@@ -656,6 +678,12 @@ vZero.prototype = {
656
  */
657
  observeAjaxRequests: function (callback, ignore) {
658
 
 
 
 
 
 
 
659
  // For every ajax request on complete update various Braintree things
660
  Ajax.Responders.register({
661
  onComplete: function (transport) {
@@ -1086,7 +1114,7 @@ vZero.prototype = {
1086
  * @returns {boolean}
1087
  */
1088
  shouldInterceptCreditCard: function () {
1089
- return true;
1090
  },
1091
 
1092
  /**
@@ -1432,9 +1460,9 @@ vZeroIntegration.prototype = {
1432
  * @param paypalButtonClass The class of the button we need to replace with the above mark up
1433
  * @param isOnepage Is the integration a onepage checkout?
1434
  * @param config Any further config the integration wants to push into the class
1435
- * @param onReady function fired after integration is "ready"
1436
  */
1437
- initialize: function (vzero, vzeroPaypal, paypalMarkUp, paypalButtonClass, isOnepage, config, onReady) {
1438
 
1439
  // Only allow the system to be initialized twice
1440
  if (vZeroIntegration.prototype.loaded) {
@@ -1459,6 +1487,8 @@ vZeroIntegration.prototype = {
1459
 
1460
  this.config = config || {};
1461
 
 
 
1462
  this._methodSwitchTimeout = false;
1463
 
1464
  // Hosted fields hasn't been initialized yet
@@ -1644,7 +1674,7 @@ vZeroIntegration.prototype = {
1644
  this.resetLoading();
1645
  this.vzero._hostedFieldsTokenGenerated = true;
1646
  this.hostedFieldsGenerated = true;
1647
- if (this.isOnepage) {
1648
  return this.submitCheckout();
1649
  } else {
1650
  return this.submitPayment();
@@ -1769,6 +1799,11 @@ vZeroIntegration.prototype = {
1769
  } else {
1770
  callback();
1771
  }
 
 
 
 
 
1772
  },
1773
 
1774
  /**
164
  },
165
  onFieldEvent: this.hostedFieldsOnFieldEvent.bind(this)
166
  },
167
+ onReady: this.hostedFieldsOnReady.bind(this),
 
 
 
 
 
 
 
168
  onPaymentMethodReceived: this.hostedFieldsPaymentMethodReceived.bind(this),
169
  onError: this.hostedFieldsError.bind(this)
170
  };
300
  );
301
  },
302
 
303
+ /**
304
+ * Called when Hosted Fields integration is ready
305
+ *
306
+ * @param integration
307
+ */
308
+ hostedFieldsOnReady: function (integration) {
309
+ this._hostedIntegration = integration;
310
+
311
+ // Unset the loading state if it's present
312
+ if ($$('#credit-card-form.loading').length) {
313
+ $$('#credit-card-form.loading').first().removeClassName('loading');
314
+ }
315
+
316
+ // Will this checkout submit the payment after the "payment" step. This is typically used in non one step checkouts
317
+ // which contains a review step.
318
+ if (this.integration.submitAfterPayment) {
319
+ var input = new Element('input', {type: 'hidden', name: 'payment[submit_after_payment]', value: 1, id: 'braintree-submit-after-payment'});
320
+ $('payment_form_gene_braintree_creditcard').insert(input);
321
+ } else {
322
+ if ($('braintree-submit-after-payment')) {
323
+ $('braintree-submit-after-payment').remove();
324
+ }
325
+ }
326
+ },
327
+
328
  /**
329
  * Action to call after receiving the payment method
330
  *
404
 
405
  // Stop any "Cannot place two elements in #xxx" messages being shown to the user
406
  // These are non critical errors and the functionality will still work as expected
407
+ if (
408
+ typeof response.message !== 'undefined' &&
409
+ response.message.indexOf('Cannot place two elements in') == -1 &&
410
+ response.message.indexOf('Unable to find element with selector') == -1
411
+ ) {
412
  // Let the user know what went wrong
413
  alert(response.message);
414
  }
678
  */
679
  observeAjaxRequests: function (callback, ignore) {
680
 
681
+ // Only allow one initialization of this function
682
+ if (vZero.prototype.observingAjaxRequests) {
683
+ return false;
684
+ }
685
+ vZero.prototype.observingAjaxRequests = true;
686
+
687
  // For every ajax request on complete update various Braintree things
688
  Ajax.Responders.register({
689
  onComplete: function (transport) {
1114
  * @returns {boolean}
1115
  */
1116
  shouldInterceptCreditCard: function () {
1117
+ return (this.amount != '0.00');
1118
  },
1119
 
1120
  /**
1460
  * @param paypalButtonClass The class of the button we need to replace with the above mark up
1461
  * @param isOnepage Is the integration a onepage checkout?
1462
  * @param config Any further config the integration wants to push into the class
1463
+ * @param submitAfterPayment Is the checkout going to submit the actual payment after the payment step? For instance a checkout with a review step
1464
  */
1465
+ initialize: function (vzero, vzeroPaypal, paypalMarkUp, paypalButtonClass, isOnepage, config, submitAfterPayment) {
1466
 
1467
  // Only allow the system to be initialized twice
1468
  if (vZeroIntegration.prototype.loaded) {
1487
 
1488
  this.config = config || {};
1489
 
1490
+ this.submitAfterPayment = submitAfterPayment || false;
1491
+
1492
  this._methodSwitchTimeout = false;
1493
 
1494
  // Hosted fields hasn't been initialized yet
1674
  this.resetLoading();
1675
  this.vzero._hostedFieldsTokenGenerated = true;
1676
  this.hostedFieldsGenerated = true;
1677
+ if (this.isOnepage || this.submitAfterPayment) {
1678
  return this.submitCheckout();
1679
  } else {
1680
  return this.submitPayment();
1799
  } else {
1800
  callback();
1801
  }
1802
+
1803
+ // Remove the save after payment to ensure validation fires correctly
1804
+ if (this.submitAfterPayment && $('braintree-submit-after-payment')) {
1805
+ $('braintree-submit-after-payment').remove();
1806
+ }
1807
  },
1808
 
1809
  /**
package.xml CHANGED
@@ -1,7 +1,7 @@
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>Gene_Braintree</name>
4
- <version>2.0.0</version>
5
  <stability>stable</stability>
6
  <license uri="http://opensource.org/licenses/mit-license.php">MIT License</license>
7
  <channel>community</channel>
@@ -36,9 +36,9 @@
36
  &lt;/ul&gt;</description>
37
  <notes>Connect your Magento store to Braintree to accept Credit Cards &amp;amp; PayPal using V.Zero SDK</notes>
38
  <authors><author><name>Dave Macaulay</name><user>dave</user><email>support@gene.co.uk</email></author></authors>
39
- <date>2016-06-16</date>
40
- <time>15:17:40</time>
41
- <contents><target name="magecommunity"><dir name="Gene"><dir name="Braintree"><dir name="Block"><dir name="Adminhtml"><dir name="Report"><dir name="Transactions"><file name="Grid.php" hash="32b32086548f62ae4aca4baf456b9ed2"/><file name="Search.php" hash="81d57c3744530f36c37782ce9d0f3a70"/></dir><file name="Transactions.php" hash="7afe45b49353e52b432aa0392d76a08e"/></dir><dir name="System"><dir name="Config"><dir name="Braintree"><file name="Config.php" hash="40a2eb78ee6c004b749ec62aaa690bf4"/><file name="Currency.php" hash="9976cc7d6ff80c3ea351ddff9b10b9d8"/><dir name="Kount"><file name="Ens.php" hash="56ef3f1e4da9d09b6bc8d0814a882358"/></dir><file name="Moduleversion.php" hash="eed1f9bcb139b6062e7972d3f98e13c8"/><file name="Version.php" hash="ce58278a4faf965301cc2d8b2da4483c"/></dir><file name="Migration.php" hash="e57911ecb5fb301147cd4940b3f1e4f4"/></dir></dir></dir><dir name="Cart"><file name="Totals.php" hash="a03c441e8143896f92d02931a809f666"/></dir><dir name="Creditcard"><file name="Info.php" hash="6faf4be87ad62f13373a6b2e852a478b"/><file name="Saved.php" hash="2d0a3c3543d8eecc7c94a50cea7810d9"/><file name="Threedsecure.php" hash="7848d4ecac743be985f328fa969318bf"/></dir><file name="Creditcard.php" hash="7871f210f4009cfe53ecfaf5164e43ca"/><dir name="Express"><file name="Button.php" hash="b7bb6fa7e6f80aa4809d1d1dc7dc6950"/><file name="Checkout.php" hash="d0c9bc6f656e93031189e7d6bb1c8533"/></dir><file name="Info.php" hash="4d9513f53e20bf7752c1f826bbd63b0e"/><file name="Js.php" hash="35e604171e4a5d1250732c4a5ad33d9b"/><dir name="Paypal"><file name="Info.php" hash="0874c0839a27c14ec9be47fed152e880"/><file name="Saved.php" hash="6a99ef8a384d7ab8f4537e995867ec85"/></dir><file name="Paypal.php" hash="10cbb40f8801153ac0c04725843f4eee"/><dir name="Saved"><file name="Edit.php" hash="ae2d80ecab7cdda39b18054b057f2dc5"/></dir><file name="Saved.php" hash="782f17589219da087e57035a1c0b9a4a"/></dir><dir name="Helper"><file name="Data.php" hash="b3e5025957b496d3be5cdb865a20e5be"/></dir><dir name="Model"><file name="Debug.php" hash="f3360f71e2346881f93424792ed9f209"/><dir name="Entity"><file name="Setup.php" hash="c580e73ec53ac455698ee6b0ff005e39"/></dir><dir name="Kount"><file name="Ens.php" hash="0929b4b909c1baea965b77b011aff49e"/><file name="Rest.php" hash="5dfb5265a431da0210cb87dba023b7b6"/></dir><file name="Migration.php" hash="f6642a8ddf000b731f2b7044072d1adf"/><file name="Observer.php" hash="e1ac13f65517ef889cc41fc8b421cafb"/><dir name="Paymentmethod"><file name="Abstract.php" hash="f90b0dfa2890402af044dd9e3717c161"/><file name="Creditcard.php" hash="98c528e9db7d336d7e3c8a897e5e5de8"/><dir name="Legacy"><file name="Creditcard.php" hash="cfc791157f3a173ff8ed838e69c96f51"/><file name="Paypal.php" hash="59ef3cfb64f4c4c878015147412c78a7"/></dir><file name="Paypal.php" hash="ceba6e4eca55e5dcfeff4318800a18e5"/></dir><file name="Saved.php" hash="3c9318122fbe56bdb915c837d834f392"/><dir name="Source"><file name="Cctype.php" hash="d76aa6c3a4bd798e3a47695f579d21d4"/><dir name="Creditcard"><file name="CaptureAction.php" hash="d39ff81be4b54620410ceeda7f960f0f"/><file name="FormIntegration.php" hash="9788f349430e0d48c9e13c262da3fe06"/><file name="PaymentAction.php" hash="d6e997ae4f6ed57129bf4d5da06a0a82"/></dir><file name="Environment.php" hash="5c2f5ce4d6d9f6f178102b90ec15aa2c"/><dir name="Paypal"><file name="CaptureAction.php" hash="0dd0c6da578aee4b7508f78cab982176"/><file name="Locale.php" hash="adc0ab30619eb3a34d8f5fe1087b07b0"/><file name="PaymentAction.php" hash="ab430eaf7ced39e9d6fd80ad0a7f6b3c"/><file name="Paymenttype.php" hash="48225fa7b3f5e54d81711397dd5bd96b"/></dir></dir><dir name="System"><dir name="Config"><dir name="Backend"><file name="Currency.php" hash="73cb15b1de303e88c487db4c585ef94e"/></dir></dir></dir><dir name="Wrapper"><file name="Braintree.php" hash="40c4fc221552e35c9cb26e66e82930b6"/></dir></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Braintree"><file name="MigrationController.php" hash="cb9ffed24551fb7fff6ccd871a589101"/></dir><file name="BraintreeController.php" hash="d7ece21342a7b4b37ee41ea0e7ff20ad"/></dir><file name="CheckoutController.php" hash="42ac29d6b91aaf40a3a1e1678be7f5b3"/><file name="ExpressController.php" hash="897ba6b4f1557ed7f7baf8b332f0bc87"/><dir name="Kount"><file name="EnsController.php" hash="1db795afa1df901c37bbe48a3f01db2f"/></dir><file name="SavedController.php" hash="083777b1536e8dda604107af9f0081a9"/></dir><dir name="etc"><file name="adminhtml.xml" hash="c9c940beffa0ec19e4a1499a66f7fd12"/><file name="config.xml" hash="5e37801ecd00956a55f664d2057c682c"/><file name="system.xml" hash="ddd778a4d2a9a3f500fe41758c83e237"/></dir><dir name="sql"><dir name="gene_braintree_setup"><file name="install-0.1.0.php" hash="503f428384f687d3f55a19ea57450212"/><file name="upgrade-1.0.5.4-2.0.0.php" hash="62d37c35ba39a77ea14cad842f143393"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><dir name="gene"><file name="braintree.xml" hash="7a028487a5d85fd4034883eb11b908b4"/></dir></dir><dir name="template"><dir name="gene"><dir name="braintree"><dir name="creditcard"><file name="hostedfields.phtml" hash="bfa98d63527cba0990c5cd793325a013"/><file name="info.phtml" hash="2ae1e397b3a633dd305bc26c7b9c1065"/><file name="saved.phtml" hash="579ec8ca726de3b5bea8600663d1e61f"/><file name="threedsecure.phtml" hash="ee8ad689afde041c39dd92ffa5274883"/></dir><file name="creditcard.phtml" hash="2cf07e28ebd141ea73e6e9082096304e"/><dir name="customer"><file name="edit.phtml" hash="ed8a9533f07fbfa36ec78623afd1a04d"/><file name="methods.phtml" hash="794ad8cb20314d1657a746b365c82540"/><file name="saved.phtml" hash="0457b0fa38f9db788133e54f359baa63"/></dir><dir name="express"><file name="cart.phtml" hash="430af653061c7d6f1074bd2ca5e9b04d"/><file name="catalog.phtml" hash="78bb957f8e650cf095f00a0f665f2945"/><file name="error.phtml" hash="dc2c40f1914a5d68e220e3aa82abb1e6"/><file name="shipping_details.phtml" hash="d89af997ad75ed875e3a18d2f38e6571"/></dir><dir name="js"><file name="aheadworks.phtml" hash="533ba9aebbba6768649668386a74a1c2"/><file name="amasty.phtml" hash="2bfc5623dd9a98721b53a4d8cd13c0c3"/><file name="data.phtml" hash="f8b04e3d0d7154cc75332eb5bec3e54e"/><file name="default.phtml" hash="fdcfb27a06ebab20268ef4ed820625c1"/><file name="firecheckout.phtml" hash="06acaa71a28ff9029242c4906cc05314"/><file name="fme.phtml" hash="263fb201b77696cf21cc677696c53fdd"/><file name="idev.phtml" hash="f8677f5296e573b8bfc3e63603e62bf6"/><file name="iwd.phtml" hash="d7e12c84b629306529d3d8beb0c4814d"/><file name="magestore.phtml" hash="ff6a622a4048b8e533f3e672a40e6296"/><file name="multishipping.phtml" hash="a1e777e99df26d81f7c4b9e7b4a7c109"/><file name="oye.phtml" hash="51ef48f818e79acb6d1e8b9eb7889cc9"/><file name="setup.phtml" hash="804d63a30f8d6c985644b545a768da97"/><file name="unicode.phtml" hash="dd07e924a01b0a28ef46c9a62f22e3b5"/></dir><dir name="paypal"><file name="info.phtml" hash="5149b273730121e4dec3c3179820f747"/><file name="saved.phtml" hash="3dd56f96bcdd14be594d355ae8fff329"/></dir><file name="paypal.phtml" hash="d12c20e5fb76f31270a5d47061e42715"/></dir></dir></dir></dir></dir></dir><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><dir name="gene"><file name="braintree.xml" hash="a80683ffe99332dffa0c2e563120ef75"/></dir></dir><dir name="template"><dir name="gene"><dir name="braintree"><dir name="creditcard"><file name="hostedfields.phtml" hash="152e09ed938c47ffc056a7c11247375a"/><file name="info.phtml" hash="24c67bab482ea7383ce57d9a06bb9d6f"/><file name="saved.phtml" hash="ca27adb601aebf97cd25a892082a8663"/></dir><file name="creditcard.phtml" hash="2d77487c6b7e9e6c77b2ddb25597bd8b"/><file name="js.phtml" hash="40866b2bdd056310fa0622c3aac3f7db"/><dir name="paypal"><file name="info.phtml" hash="a8f92f312f8aa5a9463f1d5c2a38cd1b"/><file name="saved.phtml" hash="779ca8e907d7d463eafce58dfaf94f0c"/></dir><file name="paypal.phtml" hash="f81578f64c8a30560299bd993d8e996d"/><dir name="system"><dir name="config"><file name="migration.phtml" hash="4cfe0ffb6a9e03d1297eb66a51f77429"/></dir></dir><dir name="transactions"><file name="index.phtml" hash="1791b6393f319616dd79c0b46e391847"/><file name="search.phtml" hash="1682ce6200681681f0ce3c848e2e6694"/></dir></dir></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Gene_Braintree.xml" hash="8c0ffda8566dca2f0b98a999921e3e55"/></dir></target><target name="mageweb"><dir name="js"><dir name="gene"><dir name="braintree"><file name="braintree-0.1.js" hash="a72cc4545d0d01dd0947dae1474516dd"/><file name="config.codekit" hash="ac2da34ea9ef3ca9c6dd616a0ae830d6"/><file name="express.js" hash="616046de857e85d0736839dfd192a133"/><file name="vzero-0.7-min.js" hash="e0a5babca1118aeb94f0655827317e20"/><file name="vzero-0.7-min.js.map" hash="1fc5d50c5cdcb138131930ac92362053"/><file name="vzero-0.7.js" hash="effafba9ab6fa9012da9b352b7996109"/></dir></dir></dir></target><target name="mageskin"><dir name="frontend"><dir name="base"><dir name="default"><dir name="images"><dir name="gene"><dir name="braintree"><file name="AE.png" hash="6b6f405105413b0723a62ee498f88bf6"/><file name="DI.png" hash="d8e3c3022dda9e723f466b8976ae428f"/><file name="JCB.png" hash="3aa9a71ed8a1d6610bbe0dfe2040e29e"/><file name="MC.png" hash="1fcd14928245139962b72f9368bdbe32"/><file name="ME.png" hash="b9389913c47b9546a67f907fcca73706"/><file name="PP.png" hash="b4946bccba574e86c9716a4986e21c36"/><file name="VI.png" hash="c9f74d1d54e61ab2c748f45a4bdface0"/><file name="card.png" hash="66e16f8c573fad93bb0d62258dce28bb"/><file name="paypal-loading.gif" hash="078a2daf55245b227c09a7bed86750c6"/><file name="paypal.png" hash="40d5f74305e565bd14aef19bcf696541"/></dir><file name="loader.gif" hash="f48ee069890b16455c3ddcacee9b5f75"/><file name="loader-white.gif" hash="1fc0e911558e8dfe77cfdfafa0d38f88"/></dir></dir><dir name="css"><dir name="gene"><dir name="braintree"><dir name="account"><file name="account.less" hash="ddf6bf208f290316300ab20682f34473"/></dir><file name="account.css" hash="73bb46f85320b2f2b4de9beb6c0e0bd6"/><file name="aheadworks.css" hash="548efcbb5b31d1e8811aa1f352111af9"/><file name="amasty.css" hash="0b5ffece72469b63cebdfde108ad2e13"/><file name="config.codekit" hash="7fac910f64b164f32f561db17f19cbba"/><dir name="core"><file name="_general.less" hash="bdadf4fc85ee76b514f03298be1a7e58"/><file name="_hostedfields.less" hash="555bd4655d78a3b379c4b86a3e2d86e5"/><file name="_paypal.less" hash="e7e55d959247956253a0af1df0c9e899"/><file name="_saved.less" hash="66ec8d894e336f9934a1e54972c4b220"/></dir><file name="default.css" hash="80bb5eaa02405ce35ee960537204a62f"/><file name="express.css" hash="13fffafad7ed0cf5fbb85dc167f2a7bb"/><file name="firecheckout.css" hash="9be117bd43f83a15843b599e955896a2"/><file name="fme.css" hash="1139d2b8f32806f781639872c97df5cb"/><file name="idev.css" hash="bae7b82bb27e4b21a31c5e8e26d7672b"/><dir name="integrations"><file name="aheadworks.less" hash="09b0304383e198885f030119c15641f7"/><file name="amasty.less" hash="4cdf236e1d44112205750cefa11448b4"/><file name="default.less" hash="d366d4560ed1ce3e9e120309e56bec2f"/><file name="firecheckout.less" hash="9ce8a9a8fd82553e9a3dbf76f030872a"/><file name="fme.less" hash="580ed66608560fcd1195246c22e3559c"/><file name="idev.less" hash="47485cc963e16d12e673c06cd9efe4b1"/><file name="iwd.less" hash="5081477c7946e0f5cf8cc4198895ca11"/><file name="magestore.less" hash="0af5cd105be3995dc2044d33f990bbb5"/><file name="oye.less" hash="06a0f79190b16dfbce3aec6d14f07461"/><file name="unicode.less" hash="1416abe9a38965d9aead022b238f7d4f"/></dir><file name="iwd.css" hash="b1aa43d7bb9c97ab54d5392a24b703fb"/><file name="magestore.css" hash="529a595d9aef634527b8fe8e72aa1b84"/><file name="oye.css" hash="80906d460c6f5490e5e303a0a7fc6e20"/><file name="unicode.css" hash="46ca21b52eb30fbae49ce91c9300d9b4"/><file name=".DS_Store" hash="1405352d803d5c88cf3ec19a82f173d0"/></dir></dir></dir></dir></dir></dir><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="css"><dir name="gene"><dir name="braintree"><file name="adminhtml.css" hash="2847eb017b959db61659562d1e8cfaea"/><file name="adminhtml.less" hash="6456950844fcd86471cf78400f922915"/><file name="config.codekit" hash="1be78e1e754fe681b3d1be469b4d0386"/><file name="migration.css" hash="c67c92df36fe23fecaa1db9f1f1cd996"/><file name="migration.less" hash="2f76dd2f55cc5268bd70197bfe344b20"/><file name=".DS_Store" hash="63617e9dd9988a3d3773937a3f7e2f9a"/></dir></dir></dir><dir name="images"><dir name="gene"><dir name="braintree"><file name="AE.png" hash="6b6f405105413b0723a62ee498f88bf6"/><file name="DI.png" hash="d8e3c3022dda9e723f466b8976ae428f"/><file name="JCB.png" hash="3aa9a71ed8a1d6610bbe0dfe2040e29e"/><file name="MC.png" hash="1fcd14928245139962b72f9368bdbe32"/><file name="ME.png" hash="b9389913c47b9546a67f907fcca73706"/><file name="PP.png" hash="b4946bccba574e86c9716a4986e21c36"/><file name="VI.png" hash="c9f74d1d54e61ab2c748f45a4bdface0"/><file name="card.png" hash="66e16f8c573fad93bb0d62258dce28bb"/><dir name="migration"><file name="braintree.png" hash="396d721824a86b169ce0055090ce9766"/><file name="gene-logo.png" hash="16efb1b148acc59c46c84a21d726b6e9"/><file name="loader.gif" hash="66b9100930b8e58d46acf2e13d41f7ea"/></dir></dir><file name="loader.gif" hash="f48ee069890b16455c3ddcacee9b5f75"/></dir></dir></dir></dir></dir></target><target name="magelib"><dir name="Gene"><dir name="Braintree"><file name="AddOn.php" hash="e8bbb6db343ba99192346b1dcbf45677"/><file name="AddOnGateway.php" hash="d8698ffe89c01fba78a8a06a2fc68122"/><file name="Address.php" hash="004d3d36d39fc6fcc3d510f4b15b1fca"/><file name="AddressGateway.php" hash="41b5a3be7bdb2fe326a49a1554e1b0c3"/><file name="AndroidPayCard.php" hash="bb4a81807fefc76db286e615128c5d8c"/><file name="ApplePayCard.php" hash="b895256bcb867854bcaaffc1ce833fbd"/><file name="Base.php" hash="60d52fd1bef5655bcb607fba45bb4c1c"/><file name="ClientToken.php" hash="358c0a1dba687baf635db818cb7d1dac"/><file name="ClientTokenGateway.php" hash="9c24bb9de2c419c7e377c046da2a1ffa"/><file name="CoinbaseAccount.php" hash="ee5cb6963f675a9a71293c453b128866"/><file name="Collection.php" hash="0e7d31ffcbd9780fb554186bd2c194b0"/><file name="Configuration.php" hash="2a416a1eae0c22329d9bef88b25039b2"/><file name="CredentialsParser.php" hash="c4bb2248a33129d8523a6120ce44108b"/><file name="CreditCard.php" hash="d32b8d8e64b2d046d3d9e4f00c67f1ed"/><file name="CreditCardGateway.php" hash="0d120ed06f06fd614468d6e3f0ad22d2"/><file name="CreditCardVerification.php" hash="48d6ea546914278f4bea2fefb75e7836"/><file name="CreditCardVerificationGateway.php" hash="6a07430c9437f6e6c1516d5b4572a749"/><file name="CreditCardVerificationSearch.php" hash="18efe7d508c2bd5fea1c0e68fc26182f"/><file name="Customer.php" hash="62d0937de86f7a14a512ad66edba7569"/><file name="CustomerGateway.php" hash="5367d9d8a878572106e3a94c60132b1b"/><file name="CustomerSearch.php" hash="8aacc83dac341cd9afec5a3deab17593"/><file name="Descriptor.php" hash="3f5db5e817280ce7f2fa18a205281ad9"/><file name="Digest.php" hash="9d12d067770f55b123b8498fce4478fa"/><file name="Disbursement.php" hash="ad122f0f33b27dfd98bcdd38ea138ae4"/><file name="DisbursementDetails.php" hash="ae632207d0982e288a83aed401c880d9"/><file name="Discount.php" hash="763b3f9cde0ff3af3e8795cac4097595"/><file name="DiscountGateway.php" hash="47796edb8ac2fa68e9af8fb8a13aacb1"/><dir name="Dispute"><file name="TransactionDetails.php" hash="7fdea673a1295055508f42286ad57f4e"/></dir><file name="Dispute.php" hash="c3a4e93fa2b3b0e20ddcb593dcdc7b2b"/><file name="EqualityNode.php" hash="cfd6aa184186233b8d6d1ec0f0e79298"/><dir name="Error"><file name="Codes.php" hash="a7f98ff690e725b7fcd198b4b22d0637"/><file name="ErrorCollection.php" hash="e28d638db56524f5bf3609fa725e6d55"/><file name="Validation.php" hash="bf4e2198300019c52ba56f16269d66ce"/><file name="ValidationErrorCollection.php" hash="9ef25d0126a0b4f6951da5334ae6f0dc"/></dir><file name="EuropeBankAccount.php" hash="82ae4f4d1c45ce2c421305bf9397c866"/><dir name="Exception"><file name="Authentication.php" hash="f9e13654988452cca2ac5228a80adae4"/><file name="Authorization.php" hash="5f8c017c6e9fd79a556dade8e15a72e8"/><file name="Configuration.php" hash="b50f67e8ea36cff0d9f6ad718126c6fc"/><file name="DownForMaintenance.php" hash="7fd30b1f8976ed7e38b7e9fae5c20f03"/><file name="ForgedQueryString.php" hash="6884dbae1e86767834b77c821df2db62"/><file name="InvalidChallenge.php" hash="1c283a1c9dac65feb137594d0dcf0e35"/><file name="InvalidSignature.php" hash="b83f5b16735cb3a8e0a8111c4f32711e"/><file name="NotFound.php" hash="f832f771d20b381c2780eb2a572b9f44"/><file name="SSLCaFileNotFound.php" hash="e927c7307bf1761814dc8a755238070d"/><file name="SSLCertificate.php" hash="d509b6a6206bd7c5563ac142dfe3801f"/><file name="ServerError.php" hash="b4645290229ab228a257047d08ef63d7"/><file name="TestOperationPerformedInProduction.php" hash="fde4c6a8b708420b26785fb67a2548ef"/><file name="Unexpected.php" hash="01ea2800fb91995ec2a15aee5024611e"/><file name="UpgradeRequired.php" hash="7f40b174df891cc3b3e206d1be884a58"/><file name="ValidationsFailed.php" hash="cd2d30c69911f81b55279c3d6bf88c61"/></dir><file name="Exception.php" hash="f14c94bf67206184eb3e4e7aeb4a608a"/><file name="Gateway.php" hash="d2fac69479243ef4cea7d7a8add798f7"/><file name="Http.php" hash="1baa32e0efcae13c4d6294d1233512a1"/><file name="Instance.php" hash="f0603b3f9213b53687e079c5621ac8f3"/><file name="IsNode.php" hash="e4b1f7bbfcbd24b1d08b97f94df592be"/><file name="KeyValueNode.php" hash="255595ec01a16906dd0c49faf67d9efb"/><file name="Merchant.php" hash="5053ebe889c854d11f2686bffdeb58be"/><dir name="MerchantAccount"><file name="AddressDetails.php" hash="1d265d864a884ebcf2504f55207cc0dd"/><file name="BusinessDetails.php" hash="3e80148bac9fda676844aa19d5b2dc28"/><file name="FundingDetails.php" hash="7368f653fcbcc3d87924447b1763e616"/><file name="IndividualDetails.php" hash="777b6f28f643e78616c7ed753a39c0cd"/></dir><file name="MerchantAccount.php" hash="496c93182d824bb2967cc9366dec1ac3"/><file name="MerchantAccountGateway.php" hash="e2073aff6f8b3c5f2e64b23b210c44f7"/><file name="MerchantGateway.php" hash="e0a2e3a28c68dac8bd082973b269ed1b"/><file name="Modification.php" hash="0abe992d4f821327f617ca883c4eb2d1"/><file name="MultipleValueNode.php" hash="92700fa03011eaa9561010b3a160449c"/><file name="MultipleValueOrTextNode.php" hash="ef06bac18e2bc40974bdc0bcb854890f"/><file name="OAuthCredentials.php" hash="e992dca9dfedb27e3d050af55971a968"/><file name="OAuthGateway.php" hash="9a0b2b692eaf8fb5f337922044b20cc1"/><file name="PartialMatchNode.php" hash="370c7e0ab8a445cfeef6b19ef1755f4d"/><file name="PartnerMerchant.php" hash="bdb69ebdc75d67009710be9703a47e80"/><file name="PayPalAccount.php" hash="672a7d424f94e590c5e66a21e62d7bc2"/><file name="PayPalAccountGateway.php" hash="d73f5744ebaca6cc882c42d0e9c1a05e"/><file name="PaymentInstrumentType.php" hash="be97a30c7d8fbbb180864dc4efea71f2"/><file name="PaymentMethod.php" hash="5bc31d3e97610e7218c95aba2422cc9a"/><file name="PaymentMethodGateway.php" hash="4c93b070cb79c86ec9384e069fbae777"/><file name="PaymentMethodNonce.php" hash="e99302e2468f55c8fb4b2ceeb1bce68e"/><file name="PaymentMethodNonceGateway.php" hash="22a0d89eee071a28b530c6be477dcc6e"/><file name="Plan.php" hash="22ab0117d462352aecb9531d4a26619e"/><file name="PlanGateway.php" hash="95e093b55ad20f8b652ee5f2fc2a0fcf"/><file name="RangeNode.php" hash="4ad9a92547423b3d54d69097114c3daf"/><file name="ResourceCollection.php" hash="8f437cb5014148c0e2f6049347ae795c"/><dir name="Result"><file name="CreditCardVerification.php" hash="7c41787025ec7cffb269f53e3ce479e2"/><file name="Error.php" hash="0e0460f1eea017bc7591e05351f51eb0"/><file name="Successful.php" hash="03f1c379fcedaef499296ab7778d1e36"/></dir><file name="RiskData.php" hash="8bef1074f9f1c50c841a7c7cf627c9cf"/><file name="SettlementBatchSummary.php" hash="388d88e8cea7bec61ee78f388fb78c2c"/><file name="SettlementBatchSummaryGateway.php" hash="bc54658b75fa0505e072331799c2d9ad"/><file name="SignatureService.php" hash="4b78d3e5897e715dcc877c5f65b3cfae"/><dir name="Subscription"><file name="StatusDetails.php" hash="29e375f02150bfd7147591f0eb27cb4f"/></dir><file name="Subscription.php" hash="cde05aa61192d5b930b57330db308835"/><file name="SubscriptionGateway.php" hash="bd1b2aa2d4d41a595463bead64ed34e0"/><file name="SubscriptionSearch.php" hash="1874ebe5cb42d7d2836617810cced1af"/><dir name="Test"><file name="CreditCardNumbers.php" hash="676a9100354eb679e7ca1e0f0d67293f"/><file name="MerchantAccount.php" hash="612e7e30cca364c0d14cbff3b54ebf3f"/><file name="Nonces.php" hash="d39c75e07c12c005c837c33003cb9ec2"/><file name="Transaction.php" hash="f7ef8730ede38eda778679c7056ae7c7"/><file name="TransactionAmounts.php" hash="ed9bf1f57d871542c32d11de9e031f05"/><file name="VenmoSdk.php" hash="6ce94deccd1f968596011487c7e69cc7"/></dir><file name="TestingGateway.php" hash="ccb1126142799ac3dc9f8d6f1a1f48d4"/><file name="TextNode.php" hash="94c95ec9645de57acace2179fef7fb43"/><file name="ThreeDSecureInfo.php" hash="542550c4e03a24551d00e8aad5493035"/><dir name="Transaction"><file name="AddressDetails.php" hash="ff52a4a48248085b7ea92e992160e413"/><file name="AndroidPayCardDetails.php" hash="0d7716a3c992dfb0833e7ecd437ef346"/><file name="ApplePayCardDetails.php" hash="23f7ba70521889585fa40f4f0388524d"/><file name="CoinbaseDetails.php" hash="d19a625f8de98698b8277c25660358f0"/><file name="CreditCardDetails.php" hash="aac5eb1f5804d4f979b9c71f7b98cb36"/><file name="CustomerDetails.php" hash="e137895c646127312be44292c84a2d81"/><file name="EuropeBankAccountDetails.php" hash="afe4fdc3ab3714ef2995f514ce2be2a6"/><file name="PayPalDetails.php" hash="06903d1ee21879f7329b920138df9ac6"/><file name="StatusDetails.php" hash="7c6e719c51bf13bdfd07615030100ac6"/><file name="SubscriptionDetails.php" hash="1cf1f511d1545a2e27b8d3f4bee800ca"/></dir><file name="Transaction.php" hash="afe5d8ef7fc73633424d26b942c4e5a1"/><file name="TransactionGateway.php" hash="39684956db79fe58891876e5c7845413"/><file name="TransactionSearch.php" hash="aa58846182b909fb8747e165ec7e9b92"/><file name="TransparentRedirect.php" hash="154c9850be5175a5cd1b35bdf78ae939"/><file name="TransparentRedirectGateway.php" hash="5ead181bf0d5484db5eb305efa13bec4"/><file name="UnknownPaymentMethod.php" hash="9107498774ab5bc2b25de98838736b47"/><file name="Util.php" hash="9832a44da18b97a55248cadc4bb9a4ad"/><file name="Version.php" hash="43e074bc53780cb92af4a9ef4887c63e"/><file name="WebhookNotification.php" hash="4097fb57d46368d903c42bb20fbd49ca"/><file name="WebhookTesting.php" hash="c40311458bb64e37b4c08eb88df37805"/><dir name="Xml"><file name="Generator.php" hash="19f9c9b9b61d4f97f65775f527ac408d"/><file name="Parser.php" hash="c06b1ae155ac7687eaa856fac472656d"/></dir><file name="Xml.php" hash="dc69e05bea21e3d1185d45d53e4747db"/></dir><file name="Braintree.php" hash="2c75cf27b3c9a6e1bc557e6b239d2594"/><dir name="ssl"><file name="api_braintreegateway_com.ca.crt" hash="04beb23c767547e980c76eb68c7eab15"/><file name="sandbox_braintreegateway_com.ca.crt" hash="f1b529883c7c2cbb4251658f5da7b4c9"/></dir></dir></target><target name="magelocale"><dir><dir name="en_US"><file name="Gene_Braintree.csv" hash="b0c520cbdf0f42b11c8c6dfafbe999bd"/></dir></dir></target></contents>
42
  <compatible/>
43
  <dependencies><required><php><min>5.4.0</min><max>6.0.0</max></php><package><name></name><channel>connect.magentocommerce.com/core</channel><min></min><max></max></package></required></dependencies>
44
  </package>
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>Gene_Braintree</name>
4
+ <version>2.0.1</version>
5
  <stability>stable</stability>
6
  <license uri="http://opensource.org/licenses/mit-license.php">MIT License</license>
7
  <channel>community</channel>
36
  &lt;/ul&gt;</description>
37
  <notes>Connect your Magento store to Braintree to accept Credit Cards &amp;amp; PayPal using V.Zero SDK</notes>
38
  <authors><author><name>Dave Macaulay</name><user>dave</user><email>support@gene.co.uk</email></author></authors>
39
+ <date>2016-07-07</date>
40
+ <time>13:53:56</time>
41
+ <contents><target name="magecommunity"><dir name="Gene"><dir name="Braintree"><dir name="Block"><dir name="Adminhtml"><dir name="Report"><dir name="Transactions"><file name="Grid.php" hash="32b32086548f62ae4aca4baf456b9ed2"/><file name="Search.php" hash="81d57c3744530f36c37782ce9d0f3a70"/></dir><file name="Transactions.php" hash="7afe45b49353e52b432aa0392d76a08e"/></dir><dir name="System"><dir name="Config"><dir name="Braintree"><file name="Config.php" hash="40a2eb78ee6c004b749ec62aaa690bf4"/><file name="Currency.php" hash="9976cc7d6ff80c3ea351ddff9b10b9d8"/><dir name="Kount"><file name="Ens.php" hash="56ef3f1e4da9d09b6bc8d0814a882358"/></dir><file name="Moduleversion.php" hash="eed1f9bcb139b6062e7972d3f98e13c8"/><file name="Version.php" hash="ce58278a4faf965301cc2d8b2da4483c"/></dir><file name="Migration.php" hash="e57911ecb5fb301147cd4940b3f1e4f4"/></dir></dir></dir><dir name="Cart"><file name="Totals.php" hash="a03c441e8143896f92d02931a809f666"/></dir><dir name="Creditcard"><file name="Info.php" hash="6faf4be87ad62f13373a6b2e852a478b"/><file name="Saved.php" hash="2d0a3c3543d8eecc7c94a50cea7810d9"/><file name="Threedsecure.php" hash="7848d4ecac743be985f328fa969318bf"/></dir><file name="Creditcard.php" hash="7871f210f4009cfe53ecfaf5164e43ca"/><dir name="Express"><file name="Button.php" hash="b7bb6fa7e6f80aa4809d1d1dc7dc6950"/><file name="Checkout.php" hash="d0c9bc6f656e93031189e7d6bb1c8533"/></dir><file name="Info.php" hash="4d9513f53e20bf7752c1f826bbd63b0e"/><file name="Js.php" hash="35e604171e4a5d1250732c4a5ad33d9b"/><dir name="Paypal"><file name="Info.php" hash="0874c0839a27c14ec9be47fed152e880"/><file name="Saved.php" hash="6a99ef8a384d7ab8f4537e995867ec85"/></dir><file name="Paypal.php" hash="10cbb40f8801153ac0c04725843f4eee"/><dir name="Saved"><file name="Edit.php" hash="ae2d80ecab7cdda39b18054b057f2dc5"/></dir><file name="Saved.php" hash="782f17589219da087e57035a1c0b9a4a"/></dir><dir name="Helper"><file name="Data.php" hash="b3e5025957b496d3be5cdb865a20e5be"/></dir><dir name="Model"><file name="Debug.php" hash="f3360f71e2346881f93424792ed9f209"/><dir name="Entity"><file name="Setup.php" hash="c580e73ec53ac455698ee6b0ff005e39"/></dir><dir name="Kount"><file name="Ens.php" hash="3f672b000d43363406b1df7e2b52f620"/><file name="Rest.php" hash="5dfb5265a431da0210cb87dba023b7b6"/></dir><file name="Migration.php" hash="cb9cec0c7d57c406e9bad66efe68b07d"/><file name="Observer.php" hash="e1ac13f65517ef889cc41fc8b421cafb"/><dir name="Paymentmethod"><file name="Abstract.php" hash="5a950bf2273b99ceae0eaf8482d67052"/><file name="Creditcard.php" hash="c336f9e0a43459beb57a907cae7f436c"/><dir name="Legacy"><file name="Creditcard.php" hash="cfc791157f3a173ff8ed838e69c96f51"/><file name="Paypal.php" hash="59ef3cfb64f4c4c878015147412c78a7"/></dir><file name="Paypal.php" hash="363575d74739bda8f2446f0f6d87c284"/></dir><file name="Saved.php" hash="3c9318122fbe56bdb915c837d834f392"/><dir name="Source"><file name="Cctype.php" hash="d76aa6c3a4bd798e3a47695f579d21d4"/><dir name="Creditcard"><file name="CaptureAction.php" hash="d39ff81be4b54620410ceeda7f960f0f"/><file name="FormIntegration.php" hash="9788f349430e0d48c9e13c262da3fe06"/><file name="PaymentAction.php" hash="d6e997ae4f6ed57129bf4d5da06a0a82"/></dir><file name="Environment.php" hash="5c2f5ce4d6d9f6f178102b90ec15aa2c"/><dir name="Paypal"><file name="CaptureAction.php" hash="0dd0c6da578aee4b7508f78cab982176"/><file name="Locale.php" hash="adc0ab30619eb3a34d8f5fe1087b07b0"/><file name="PaymentAction.php" hash="ab430eaf7ced39e9d6fd80ad0a7f6b3c"/><file name="Paymenttype.php" hash="48225fa7b3f5e54d81711397dd5bd96b"/></dir></dir><dir name="System"><dir name="Config"><dir name="Backend"><file name="Currency.php" hash="73cb15b1de303e88c487db4c585ef94e"/></dir></dir></dir><dir name="Wrapper"><file name="Braintree.php" hash="dd319741658ff63fd96495772df213a9"/></dir></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Braintree"><file name="MigrationController.php" hash="cb9ffed24551fb7fff6ccd871a589101"/></dir><file name="BraintreeController.php" hash="d7ece21342a7b4b37ee41ea0e7ff20ad"/></dir><file name="CheckoutController.php" hash="223de3639574a686a68e9210f39c1fad"/><file name="ExpressController.php" hash="89aaef3ec80d0793e918a3674139b4f6"/><dir name="Kount"><file name="EnsController.php" hash="1db795afa1df901c37bbe48a3f01db2f"/></dir><file name="SavedController.php" hash="083777b1536e8dda604107af9f0081a9"/></dir><dir name="etc"><file name="adminhtml.xml" hash="c9c940beffa0ec19e4a1499a66f7fd12"/><file name="config.xml" hash="cc0b3c389edbe9ad5564b8051f9af8b7"/><file name="system.xml" hash="de3781d5454488230602588b69aac3d2"/></dir><dir name="sql"><dir name="gene_braintree_setup"><file name="install-0.1.0.php" hash="503f428384f687d3f55a19ea57450212"/><file name="upgrade-1.0.5.4-2.0.0.php" hash="62d37c35ba39a77ea14cad842f143393"/><file name="upgrade-2.0.0-2.0.1.php" hash="90bd92f8c00e4d4088314ddd8f9ad2f9"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><dir name="gene"><file name="braintree.xml" hash="37554a4ee99b24d44fdccd83f54b1aed"/></dir></dir><dir name="template"><dir name="gene"><dir name="braintree"><dir name="creditcard"><file name="hostedfields.phtml" hash="bfa98d63527cba0990c5cd793325a013"/><file name="info.phtml" hash="2ae1e397b3a633dd305bc26c7b9c1065"/><file name="saved.phtml" hash="579ec8ca726de3b5bea8600663d1e61f"/><file name="threedsecure.phtml" hash="ee8ad689afde041c39dd92ffa5274883"/></dir><file name="creditcard.phtml" hash="2cf07e28ebd141ea73e6e9082096304e"/><dir name="customer"><file name="edit.phtml" hash="ed8a9533f07fbfa36ec78623afd1a04d"/><file name="methods.phtml" hash="794ad8cb20314d1657a746b365c82540"/><file name="saved.phtml" hash="0457b0fa38f9db788133e54f359baa63"/></dir><dir name="express"><file name="cart.phtml" hash="dc6546baaa5c0c37fe3a6221ed978e87"/><file name="catalog.phtml" hash="e24ee8a37661e4cc82c19aaae3b669c3"/><file name="error.phtml" hash="0ec2ea2f9b909d9f0543e5df83eea055"/><file name="shipping_details.phtml" hash="0bb6ceafaac0ba522278df310d6136e2"/></dir><dir name="js"><file name="aheadworks.phtml" hash="533ba9aebbba6768649668386a74a1c2"/><file name="amasty.phtml" hash="2bfc5623dd9a98721b53a4d8cd13c0c3"/><file name="awesomecheckout.phtml" hash="ee42abb3b9211a31b3d4454ba1e92fe9"/><file name="data.phtml" hash="f8b04e3d0d7154cc75332eb5bec3e54e"/><file name="default.phtml" hash="fdcfb27a06ebab20268ef4ed820625c1"/><file name="firecheckout.phtml" hash="06acaa71a28ff9029242c4906cc05314"/><file name="fme.phtml" hash="263fb201b77696cf21cc677696c53fdd"/><file name="idev.phtml" hash="f8677f5296e573b8bfc3e63603e62bf6"/><file name="iwd.phtml" hash="d7e12c84b629306529d3d8beb0c4814d"/><file name="magestore.phtml" hash="ff6a622a4048b8e533f3e672a40e6296"/><file name="multishipping.phtml" hash="a1e777e99df26d81f7c4b9e7b4a7c109"/><file name="oye.phtml" hash="51ef48f818e79acb6d1e8b9eb7889cc9"/><file name="setup.phtml" hash="804d63a30f8d6c985644b545a768da97"/><file name="unicode.phtml" hash="dd07e924a01b0a28ef46c9a62f22e3b5"/></dir><dir name="paypal"><file name="info.phtml" hash="5149b273730121e4dec3c3179820f747"/><file name="saved.phtml" hash="3dd56f96bcdd14be594d355ae8fff329"/></dir><file name="paypal.phtml" hash="d12c20e5fb76f31270a5d47061e42715"/></dir></dir></dir></dir></dir></dir><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><dir name="gene"><file name="braintree.xml" hash="9d57a85acb47d23341af91f4143b4f5e"/></dir></dir><dir name="template"><dir name="gene"><dir name="braintree"><dir name="creditcard"><file name="hostedfields.phtml" hash="152e09ed938c47ffc056a7c11247375a"/><file name="info.phtml" hash="24c67bab482ea7383ce57d9a06bb9d6f"/><file name="saved.phtml" hash="ca27adb601aebf97cd25a892082a8663"/></dir><file name="creditcard.phtml" hash="2d77487c6b7e9e6c77b2ddb25597bd8b"/><file name="js.phtml" hash="7253799710792ed1f8611e21c2b100bf"/><dir name="paypal"><file name="info.phtml" hash="a8f92f312f8aa5a9463f1d5c2a38cd1b"/><file name="saved.phtml" hash="779ca8e907d7d463eafce58dfaf94f0c"/></dir><file name="paypal.phtml" hash="f81578f64c8a30560299bd993d8e996d"/><dir name="system"><dir name="config"><file name="migration.phtml" hash="4cfe0ffb6a9e03d1297eb66a51f77429"/></dir></dir><dir name="transactions"><file name="index.phtml" hash="1791b6393f319616dd79c0b46e391847"/><file name="search.phtml" hash="1682ce6200681681f0ce3c848e2e6694"/></dir></dir></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Gene_Braintree.xml" hash="8c0ffda8566dca2f0b98a999921e3e55"/></dir></target><target name="mageweb"><dir name="js"><dir name="gene"><dir name="braintree"><file name="braintree-0.1.js" hash="a72cc4545d0d01dd0947dae1474516dd"/><file name="config.codekit" hash="ac2da34ea9ef3ca9c6dd616a0ae830d6"/><file name="express.js" hash="a32735940fb8313c150e6567a59a1f0e"/><file name="vzero-0.7-min.js" hash="2ed17ce02180373bec9cb1bc4f8f7c89"/><file name="vzero-0.7-min.js.map" hash="1fc5d50c5cdcb138131930ac92362053"/><file name="vzero-0.7.js" hash="128cd8642deca1fdb0ce1a2afe9e3c76"/></dir></dir></dir></target><target name="mageskin"><dir name="frontend"><dir name="base"><dir name="default"><dir name="images"><dir name="gene"><dir name="braintree"><file name="AE.png" hash="6b6f405105413b0723a62ee498f88bf6"/><file name="DI.png" hash="d8e3c3022dda9e723f466b8976ae428f"/><file name="JCB.png" hash="3aa9a71ed8a1d6610bbe0dfe2040e29e"/><file name="MC.png" hash="1fcd14928245139962b72f9368bdbe32"/><file name="ME.png" hash="b9389913c47b9546a67f907fcca73706"/><file name="PP.png" hash="b4946bccba574e86c9716a4986e21c36"/><file name="VI.png" hash="c9f74d1d54e61ab2c748f45a4bdface0"/><file name="card.png" hash="66e16f8c573fad93bb0d62258dce28bb"/><file name="paypal-loading.gif" hash="078a2daf55245b227c09a7bed86750c6"/><file name="paypal.png" hash="40d5f74305e565bd14aef19bcf696541"/></dir><file name="loader.gif" hash="f48ee069890b16455c3ddcacee9b5f75"/><file name="loader-white.gif" hash="1fc0e911558e8dfe77cfdfafa0d38f88"/></dir></dir><dir name="css"><dir name="gene"><dir name="braintree"><dir name="account"><file name="account.less" hash="ddf6bf208f290316300ab20682f34473"/></dir><file name="account.css" hash="73bb46f85320b2f2b4de9beb6c0e0bd6"/><file name="aheadworks.css" hash="f5a06971e4dbac94df48fb0ff1912f98"/><file name="amasty.css" hash="5a4a845ea4a16cca2195cb836e25571e"/><file name="awesomecheckout.css" hash="5f858ec9549f6b04b0c2885fbf193e7b"/><file name="config.codekit" hash="abccddbb4a8dc17b0126bd223c2a2ac0"/><dir name="core"><file name="_general.less" hash="5848708373d8ed5eda5e5b23c3e4e05c"/><file name="_hostedfields.less" hash="555bd4655d78a3b379c4b86a3e2d86e5"/><file name="_paypal.less" hash="e7e55d959247956253a0af1df0c9e899"/><file name="_saved.less" hash="66ec8d894e336f9934a1e54972c4b220"/></dir><file name="default.css" hash="229df9c1e39496d64a96c1b17e7a1823"/><file name="express.css" hash="23fdeca7804baa026615f4e54eeaf66b"/><file name="express.less" hash="0d752abca5f300beadc5a2948b5565ae"/><file name="firecheckout.css" hash="6605fd097c6b509fd8ef758a5a2ea236"/><file name="fme.css" hash="5809c809abc0cc6dde9ff2accebe4f38"/><file name="idev.css" hash="89104fad2a084ec8ed229d119d9c276c"/><dir name="integrations"><file name="aheadworks.less" hash="09b0304383e198885f030119c15641f7"/><file name="amasty.less" hash="4cdf236e1d44112205750cefa11448b4"/><file name="awesomecheckout.less" hash="e774da637a5c6bbdb2e5decc998afae1"/><file name="default.less" hash="d366d4560ed1ce3e9e120309e56bec2f"/><file name="firecheckout.less" hash="459704b8b6efca52fcee7c335b3ad625"/><file name="fme.less" hash="580ed66608560fcd1195246c22e3559c"/><file name="idev.less" hash="47485cc963e16d12e673c06cd9efe4b1"/><file name="iwd.less" hash="5081477c7946e0f5cf8cc4198895ca11"/><file name="magestore.less" hash="0af5cd105be3995dc2044d33f990bbb5"/><file name="oye.less" hash="06a0f79190b16dfbce3aec6d14f07461"/><file name="unicode.less" hash="1416abe9a38965d9aead022b238f7d4f"/></dir><file name="iwd.css" hash="651ba890cc76d1f9fdaa7d6137b2a106"/><file name="magestore.css" hash="fdeca676628bd2e1c732a15640a42ff3"/><file name="oye.css" hash="ec24b4a2541dd3d01540d1f065025d7b"/><file name="unicode.css" hash="82acd70dca47bb484a17296c2ca11e81"/><file name=".DS_Store" hash="1405352d803d5c88cf3ec19a82f173d0"/></dir></dir></dir></dir></dir></dir><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="css"><dir name="gene"><dir name="braintree"><file name="adminhtml.css" hash="2847eb017b959db61659562d1e8cfaea"/><file name="adminhtml.less" hash="6456950844fcd86471cf78400f922915"/><file name="config.codekit" hash="a41f2e0e0faacce3bd7f194f03bdd365"/><file name="migration.css" hash="c67c92df36fe23fecaa1db9f1f1cd996"/><file name="migration.less" hash="2f76dd2f55cc5268bd70197bfe344b20"/><file name=".DS_Store" hash="63617e9dd9988a3d3773937a3f7e2f9a"/></dir></dir></dir><dir name="images"><dir name="gene"><dir name="braintree"><file name="AE.png" hash="6b6f405105413b0723a62ee498f88bf6"/><file name="DI.png" hash="d8e3c3022dda9e723f466b8976ae428f"/><file name="JCB.png" hash="3aa9a71ed8a1d6610bbe0dfe2040e29e"/><file name="MC.png" hash="1fcd14928245139962b72f9368bdbe32"/><file name="ME.png" hash="b9389913c47b9546a67f907fcca73706"/><file name="PP.png" hash="b4946bccba574e86c9716a4986e21c36"/><file name="VI.png" hash="c9f74d1d54e61ab2c748f45a4bdface0"/><file name="card.png" hash="66e16f8c573fad93bb0d62258dce28bb"/><dir name="migration"><file name="braintree.png" hash="396d721824a86b169ce0055090ce9766"/><file name="gene-logo.png" hash="16efb1b148acc59c46c84a21d726b6e9"/><file name="loader.gif" hash="66b9100930b8e58d46acf2e13d41f7ea"/></dir></dir><file name="loader.gif" hash="f48ee069890b16455c3ddcacee9b5f75"/></dir></dir></dir></dir></dir></target><target name="magelib"><dir name="Gene"><dir name="Braintree"><file name="AddOn.php" hash="e8bbb6db343ba99192346b1dcbf45677"/><file name="AddOnGateway.php" hash="d8698ffe89c01fba78a8a06a2fc68122"/><file name="Address.php" hash="004d3d36d39fc6fcc3d510f4b15b1fca"/><file name="AddressGateway.php" hash="41b5a3be7bdb2fe326a49a1554e1b0c3"/><file name="AndroidPayCard.php" hash="bb4a81807fefc76db286e615128c5d8c"/><file name="ApplePayCard.php" hash="b895256bcb867854bcaaffc1ce833fbd"/><file name="Base.php" hash="60d52fd1bef5655bcb607fba45bb4c1c"/><file name="ClientToken.php" hash="358c0a1dba687baf635db818cb7d1dac"/><file name="ClientTokenGateway.php" hash="9c24bb9de2c419c7e377c046da2a1ffa"/><file name="CoinbaseAccount.php" hash="ee5cb6963f675a9a71293c453b128866"/><file name="Collection.php" hash="0e7d31ffcbd9780fb554186bd2c194b0"/><file name="Configuration.php" hash="2a416a1eae0c22329d9bef88b25039b2"/><file name="CredentialsParser.php" hash="c4bb2248a33129d8523a6120ce44108b"/><file name="CreditCard.php" hash="d32b8d8e64b2d046d3d9e4f00c67f1ed"/><file name="CreditCardGateway.php" hash="0d120ed06f06fd614468d6e3f0ad22d2"/><file name="CreditCardVerification.php" hash="48d6ea546914278f4bea2fefb75e7836"/><file name="CreditCardVerificationGateway.php" hash="6a07430c9437f6e6c1516d5b4572a749"/><file name="CreditCardVerificationSearch.php" hash="18efe7d508c2bd5fea1c0e68fc26182f"/><file name="Customer.php" hash="62d0937de86f7a14a512ad66edba7569"/><file name="CustomerGateway.php" hash="5367d9d8a878572106e3a94c60132b1b"/><file name="CustomerSearch.php" hash="8aacc83dac341cd9afec5a3deab17593"/><file name="Descriptor.php" hash="3f5db5e817280ce7f2fa18a205281ad9"/><file name="Digest.php" hash="9d12d067770f55b123b8498fce4478fa"/><file name="Disbursement.php" hash="ad122f0f33b27dfd98bcdd38ea138ae4"/><file name="DisbursementDetails.php" hash="ae632207d0982e288a83aed401c880d9"/><file name="Discount.php" hash="763b3f9cde0ff3af3e8795cac4097595"/><file name="DiscountGateway.php" hash="47796edb8ac2fa68e9af8fb8a13aacb1"/><dir name="Dispute"><file name="TransactionDetails.php" hash="7fdea673a1295055508f42286ad57f4e"/></dir><file name="Dispute.php" hash="c3a4e93fa2b3b0e20ddcb593dcdc7b2b"/><file name="EqualityNode.php" hash="cfd6aa184186233b8d6d1ec0f0e79298"/><dir name="Error"><file name="Codes.php" hash="a7f98ff690e725b7fcd198b4b22d0637"/><file name="ErrorCollection.php" hash="e28d638db56524f5bf3609fa725e6d55"/><file name="Validation.php" hash="bf4e2198300019c52ba56f16269d66ce"/><file name="ValidationErrorCollection.php" hash="9ef25d0126a0b4f6951da5334ae6f0dc"/></dir><file name="EuropeBankAccount.php" hash="82ae4f4d1c45ce2c421305bf9397c866"/><dir name="Exception"><file name="Authentication.php" hash="f9e13654988452cca2ac5228a80adae4"/><file name="Authorization.php" hash="5f8c017c6e9fd79a556dade8e15a72e8"/><file name="Configuration.php" hash="b50f67e8ea36cff0d9f6ad718126c6fc"/><file name="DownForMaintenance.php" hash="7fd30b1f8976ed7e38b7e9fae5c20f03"/><file name="ForgedQueryString.php" hash="6884dbae1e86767834b77c821df2db62"/><file name="InvalidChallenge.php" hash="1c283a1c9dac65feb137594d0dcf0e35"/><file name="InvalidSignature.php" hash="b83f5b16735cb3a8e0a8111c4f32711e"/><file name="NotFound.php" hash="f832f771d20b381c2780eb2a572b9f44"/><file name="SSLCaFileNotFound.php" hash="e927c7307bf1761814dc8a755238070d"/><file name="SSLCertificate.php" hash="d509b6a6206bd7c5563ac142dfe3801f"/><file name="ServerError.php" hash="b4645290229ab228a257047d08ef63d7"/><file name="TestOperationPerformedInProduction.php" hash="fde4c6a8b708420b26785fb67a2548ef"/><file name="Unexpected.php" hash="01ea2800fb91995ec2a15aee5024611e"/><file name="UpgradeRequired.php" hash="7f40b174df891cc3b3e206d1be884a58"/><file name="ValidationsFailed.php" hash="cd2d30c69911f81b55279c3d6bf88c61"/></dir><file name="Exception.php" hash="f14c94bf67206184eb3e4e7aeb4a608a"/><file name="Gateway.php" hash="d2fac69479243ef4cea7d7a8add798f7"/><file name="Http.php" hash="1baa32e0efcae13c4d6294d1233512a1"/><file name="Instance.php" hash="f0603b3f9213b53687e079c5621ac8f3"/><file name="IsNode.php" hash="e4b1f7bbfcbd24b1d08b97f94df592be"/><file name="KeyValueNode.php" hash="255595ec01a16906dd0c49faf67d9efb"/><file name="Merchant.php" hash="5053ebe889c854d11f2686bffdeb58be"/><dir name="MerchantAccount"><file name="AddressDetails.php" hash="1d265d864a884ebcf2504f55207cc0dd"/><file name="BusinessDetails.php" hash="3e80148bac9fda676844aa19d5b2dc28"/><file name="FundingDetails.php" hash="7368f653fcbcc3d87924447b1763e616"/><file name="IndividualDetails.php" hash="777b6f28f643e78616c7ed753a39c0cd"/></dir><file name="MerchantAccount.php" hash="496c93182d824bb2967cc9366dec1ac3"/><file name="MerchantAccountGateway.php" hash="e2073aff6f8b3c5f2e64b23b210c44f7"/><file name="MerchantGateway.php" hash="e0a2e3a28c68dac8bd082973b269ed1b"/><file name="Modification.php" hash="0abe992d4f821327f617ca883c4eb2d1"/><file name="MultipleValueNode.php" hash="92700fa03011eaa9561010b3a160449c"/><file name="MultipleValueOrTextNode.php" hash="ef06bac18e2bc40974bdc0bcb854890f"/><file name="OAuthCredentials.php" hash="e992dca9dfedb27e3d050af55971a968"/><file name="OAuthGateway.php" hash="9a0b2b692eaf8fb5f337922044b20cc1"/><file name="PartialMatchNode.php" hash="370c7e0ab8a445cfeef6b19ef1755f4d"/><file name="PartnerMerchant.php" hash="bdb69ebdc75d67009710be9703a47e80"/><file name="PayPalAccount.php" hash="672a7d424f94e590c5e66a21e62d7bc2"/><file name="PayPalAccountGateway.php" hash="d73f5744ebaca6cc882c42d0e9c1a05e"/><file name="PaymentInstrumentType.php" hash="be97a30c7d8fbbb180864dc4efea71f2"/><file name="PaymentMethod.php" hash="5bc31d3e97610e7218c95aba2422cc9a"/><file name="PaymentMethodGateway.php" hash="4c93b070cb79c86ec9384e069fbae777"/><file name="PaymentMethodNonce.php" hash="e99302e2468f55c8fb4b2ceeb1bce68e"/><file name="PaymentMethodNonceGateway.php" hash="22a0d89eee071a28b530c6be477dcc6e"/><file name="Plan.php" hash="22ab0117d462352aecb9531d4a26619e"/><file name="PlanGateway.php" hash="95e093b55ad20f8b652ee5f2fc2a0fcf"/><file name="RangeNode.php" hash="4ad9a92547423b3d54d69097114c3daf"/><file name="ResourceCollection.php" hash="8f437cb5014148c0e2f6049347ae795c"/><dir name="Result"><file name="CreditCardVerification.php" hash="7c41787025ec7cffb269f53e3ce479e2"/><file name="Error.php" hash="0e0460f1eea017bc7591e05351f51eb0"/><file name="Successful.php" hash="03f1c379fcedaef499296ab7778d1e36"/></dir><file name="RiskData.php" hash="8bef1074f9f1c50c841a7c7cf627c9cf"/><file name="SettlementBatchSummary.php" hash="388d88e8cea7bec61ee78f388fb78c2c"/><file name="SettlementBatchSummaryGateway.php" hash="bc54658b75fa0505e072331799c2d9ad"/><file name="SignatureService.php" hash="4b78d3e5897e715dcc877c5f65b3cfae"/><dir name="Subscription"><file name="StatusDetails.php" hash="29e375f02150bfd7147591f0eb27cb4f"/></dir><file name="Subscription.php" hash="cde05aa61192d5b930b57330db308835"/><file name="SubscriptionGateway.php" hash="bd1b2aa2d4d41a595463bead64ed34e0"/><file name="SubscriptionSearch.php" hash="1874ebe5cb42d7d2836617810cced1af"/><dir name="Test"><file name="CreditCardNumbers.php" hash="676a9100354eb679e7ca1e0f0d67293f"/><file name="MerchantAccount.php" hash="612e7e30cca364c0d14cbff3b54ebf3f"/><file name="Nonces.php" hash="d39c75e07c12c005c837c33003cb9ec2"/><file name="Transaction.php" hash="f7ef8730ede38eda778679c7056ae7c7"/><file name="TransactionAmounts.php" hash="ed9bf1f57d871542c32d11de9e031f05"/><file name="VenmoSdk.php" hash="6ce94deccd1f968596011487c7e69cc7"/></dir><file name="TestingGateway.php" hash="ccb1126142799ac3dc9f8d6f1a1f48d4"/><file name="TextNode.php" hash="94c95ec9645de57acace2179fef7fb43"/><file name="ThreeDSecureInfo.php" hash="542550c4e03a24551d00e8aad5493035"/><dir name="Transaction"><file name="AddressDetails.php" hash="ff52a4a48248085b7ea92e992160e413"/><file name="AndroidPayCardDetails.php" hash="0d7716a3c992dfb0833e7ecd437ef346"/><file name="ApplePayCardDetails.php" hash="23f7ba70521889585fa40f4f0388524d"/><file name="CoinbaseDetails.php" hash="d19a625f8de98698b8277c25660358f0"/><file name="CreditCardDetails.php" hash="aac5eb1f5804d4f979b9c71f7b98cb36"/><file name="CustomerDetails.php" hash="e137895c646127312be44292c84a2d81"/><file name="EuropeBankAccountDetails.php" hash="afe4fdc3ab3714ef2995f514ce2be2a6"/><file name="PayPalDetails.php" hash="06903d1ee21879f7329b920138df9ac6"/><file name="StatusDetails.php" hash="7c6e719c51bf13bdfd07615030100ac6"/><file name="SubscriptionDetails.php" hash="1cf1f511d1545a2e27b8d3f4bee800ca"/></dir><file name="Transaction.php" hash="afe5d8ef7fc73633424d26b942c4e5a1"/><file name="TransactionGateway.php" hash="39684956db79fe58891876e5c7845413"/><file name="TransactionSearch.php" hash="aa58846182b909fb8747e165ec7e9b92"/><file name="TransparentRedirect.php" hash="154c9850be5175a5cd1b35bdf78ae939"/><file name="TransparentRedirectGateway.php" hash="5ead181bf0d5484db5eb305efa13bec4"/><file name="UnknownPaymentMethod.php" hash="9107498774ab5bc2b25de98838736b47"/><file name="Util.php" hash="9832a44da18b97a55248cadc4bb9a4ad"/><file name="Version.php" hash="43e074bc53780cb92af4a9ef4887c63e"/><file name="WebhookNotification.php" hash="4097fb57d46368d903c42bb20fbd49ca"/><file name="WebhookTesting.php" hash="c40311458bb64e37b4c08eb88df37805"/><dir name="Xml"><file name="Generator.php" hash="19f9c9b9b61d4f97f65775f527ac408d"/><file name="Parser.php" hash="c06b1ae155ac7687eaa856fac472656d"/></dir><file name="Xml.php" hash="dc69e05bea21e3d1185d45d53e4747db"/></dir><file name="Braintree.php" hash="2c75cf27b3c9a6e1bc557e6b239d2594"/><dir name="ssl"><file name="api_braintreegateway_com.ca.crt" hash="04beb23c767547e980c76eb68c7eab15"/><file name="sandbox_braintreegateway_com.ca.crt" hash="f1b529883c7c2cbb4251658f5da7b4c9"/></dir></dir></target><target name="magelocale"><dir><dir name="en_US"><file name="Gene_Braintree.csv" hash="b0c520cbdf0f42b11c8c6dfafbe999bd"/></dir></dir></target></contents>
42
  <compatible/>
43
  <dependencies><required><php><min>5.4.0</min><max>6.0.0</max></php><package><name></name><channel>connect.magentocommerce.com/core</channel><min></min><max></max></package></required></dependencies>
44
  </package>
skin/adminhtml/default/default/css/gene/braintree/config.codekit CHANGED
@@ -227,7 +227,7 @@
227
  "coffeeMinifyOutput": 1,
228
  "coffeeOutputStyle": 0,
229
  "coffeeSyntaxCheckerStyle": 1,
230
- "externalServerAddress": "http:\/\/rocketweb.braintree.dave.gene.co.uk\/",
231
  "externalServerPreviewPathAddition": "",
232
  "genericWebpageFileExtensionsString": "html, htm, shtml, shtm, xhtml, php, jsp, asp, aspx, erb, ctp",
233
  "hamlAutoOutputPathEnabled": 1,
227
  "coffeeMinifyOutput": 1,
228
  "coffeeOutputStyle": 0,
229
  "coffeeSyntaxCheckerStyle": 1,
230
+ "externalServerAddress": "http:\/\/default.braintree.dave.gene.co.uk\/",
231
  "externalServerPreviewPathAddition": "",
232
  "genericWebpageFileExtensionsString": "html, htm, shtml, shtm, xhtml, php, jsp, asp, aspx, erb, ctp",
233
  "hamlAutoOutputPathEnabled": 1,
skin/frontend/base/default/css/gene/braintree/aheadworks.css CHANGED
@@ -1,6 +1,6 @@
1
  /* Accepted Cards */
2
  #braintree-accepted-cards img {
3
- float: left;
4
  margin-right: 4px;
5
  }
6
  /* Hosted Fields Loading State */
1
  /* Accepted Cards */
2
  #braintree-accepted-cards img {
3
+ display: inline-block;
4
  margin-right: 4px;
5
  }
6
  /* Hosted Fields Loading State */
skin/frontend/base/default/css/gene/braintree/amasty.css CHANGED
@@ -1,6 +1,6 @@
1
  /* Accepted Cards */
2
  #braintree-accepted-cards img {
3
- float: left;
4
  margin-right: 4px;
5
  }
6
  /* Hosted Fields Loading State */
1
  /* Accepted Cards */
2
  #braintree-accepted-cards img {
3
+ display: inline-block;
4
  margin-right: 4px;
5
  }
6
  /* Hosted Fields Loading State */
skin/frontend/base/default/css/gene/braintree/awesomecheckout.css ADDED
@@ -0,0 +1,255 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* Accepted Cards */
2
+ #braintree-accepted-cards img {
3
+ display: inline-block;
4
+ margin-right: 4px;
5
+ }
6
+ /* Hosted Fields Loading State */
7
+ #credit-card-form.loading {
8
+ position: relative;
9
+ }
10
+ #credit-card-form .braintree-hostedfield {
11
+ opacity: 1;
12
+ }
13
+ #credit-card-form .credit-card-loading {
14
+ display: none;
15
+ }
16
+ #credit-card-form.loading .credit-card-loading {
17
+ position: absolute;
18
+ top: 30%;
19
+ left: 0;
20
+ right: 0;
21
+ width: 100%;
22
+ height: 70%;
23
+ text-align: center;
24
+ display: block;
25
+ }
26
+ #credit-card-form.loading .credit-card-loading img {
27
+ margin: 16px auto;
28
+ }
29
+ #credit-card-form.loading .braintree-hostedfield {
30
+ opacity: 0;
31
+ }
32
+ /* Hosted Fields */
33
+ #braintree-hosted-submit {
34
+ display: none;
35
+ }
36
+ .braintree-input-field {
37
+ height: 42px;
38
+ max-width: 340px;
39
+ padding: 0 10px;
40
+ border: 1px solid lightgrey;
41
+ background: white;
42
+ }
43
+ .braintree-card-input-field {
44
+ height: 50px;
45
+ width: 100%;
46
+ max-width: 372px;
47
+ border: 1px solid lightgrey;
48
+ position: relative;
49
+ background: white;
50
+ }
51
+ .braintree-card-input-field .card-type {
52
+ position: absolute;
53
+ top: 0;
54
+ left: 0;
55
+ bottom: 0;
56
+ padding: 0 10px 0 8px;
57
+ }
58
+ .braintree-card-input-field .card-type img {
59
+ height: 48px;
60
+ }
61
+ .braintree-card-input-field #card-number {
62
+ float: left;
63
+ height: 48px;
64
+ width: 100%;
65
+ padding-left: 66px;
66
+ box-sizing: border-box;
67
+ }
68
+ #braintree-expiration-container {
69
+ display: block;
70
+ width: 100%;
71
+ vertical-align: middle;
72
+ font-size: 0;
73
+ }
74
+ .braintree-expiration {
75
+ width: 70px;
76
+ display: inline-block;
77
+ *zoom: 1;
78
+ *display: inline;
79
+ }
80
+ .braintree-expiration-seperator {
81
+ vertical-align: top;
82
+ line-height: 42px;
83
+ display: inline-block;
84
+ *zoom: 1;
85
+ *display: inline;
86
+ font-size: 30px;
87
+ padding: 0 8px;
88
+ }
89
+ .braintree-cvv {
90
+ width: 80px;
91
+ }
92
+ .braintree-hostedfield .cvv-what-is-this {
93
+ margin-left: 0;
94
+ }
95
+ #paypal-container iframe {
96
+ display: none;
97
+ }
98
+ /* PayPal headless button */
99
+ button.braintree-paypal-button {
100
+ background: #019cde;
101
+ color: white;
102
+ height: 46px;
103
+ line-height: 46px;
104
+ padding: 0 20px 0 18px;
105
+ border: none;
106
+ border-radius: 3px;
107
+ -webkit-border-radius: 3px;
108
+ font-size: 14px;
109
+ float: left;
110
+ cursor: pointer;
111
+ }
112
+ button.braintree-paypal-button.braintree-paypal-loading {
113
+ background: #014c6b url('../../../images/gene/braintree/paypal-loading.gif') center center no-repeat;
114
+ background-size: 32px;
115
+ }
116
+ button.braintree-paypal-button.braintree-paypal-loading > span {
117
+ opacity: 0;
118
+ }
119
+ button.braintree-paypal-button.braintree-paypal-loading:hover {
120
+ background: #014c6b url('../../../images/gene/braintree/paypal-loading.gif') center center no-repeat;
121
+ }
122
+ button.braintree-paypal-button:hover {
123
+ background: #0175a6;
124
+ }
125
+ button.braintree-paypal-button > span {
126
+ display: block;
127
+ height: 46px;
128
+ line-height: 46px;
129
+ background: url('../../../images/gene/braintree/paypal.png') right center no-repeat;
130
+ background-size: 80px;
131
+ padding-right: 94px;
132
+ }
133
+ /* Saved Accounts */
134
+ #creditcard-saved-accounts,
135
+ #paypal-saved-accounts {
136
+ font-size: 0;
137
+ width: 100%;
138
+ }
139
+ #creditcard-saved-accounts tr,
140
+ #paypal-saved-accounts tr {
141
+ border-bottom: 1px dotted lightgrey;
142
+ }
143
+ #creditcard-saved-accounts tr td,
144
+ #paypal-saved-accounts tr td {
145
+ vertical-align: middle;
146
+ }
147
+ #payment_form_gene_braintree_creditcard #creditcard-saved-accounts label,
148
+ #payment_form_gene_braintree_paypal #paypal-saved-accounts label,
149
+ #payment_form_gene_braintree_creditcard #creditcard-saved-accounts .label,
150
+ #payment_form_gene_braintree_paypal #paypal-saved-accounts .label {
151
+ width: 100%;
152
+ padding: 0;
153
+ text-align: left;
154
+ float: none;
155
+ }
156
+ #payment_form_gene_braintree_creditcard p,
157
+ #payment_form_gene_braintree_paypal p {
158
+ padding: 0;
159
+ }
160
+ #creditcard-saved-accounts tr.other-row,
161
+ #paypal-saved-accounts tr.other-row {
162
+ border-bottom: 0;
163
+ }
164
+ #creditcard-saved-accounts label {
165
+ float: left;
166
+ padding: 10px 0;
167
+ line-height: 40px;
168
+ width: 100%;
169
+ }
170
+ #creditcard-saved-accounts tr.other-row label,
171
+ #paypal-saved-accounts tr.other-row label {
172
+ padding: 8px 0;
173
+ }
174
+ #paypal-saved-accounts label {
175
+ padding: 6px 0;
176
+ line-height: 40px;
177
+ }
178
+ #creditcard-saved-accounts label img,
179
+ #paypal-saved-accounts label img {
180
+ margin-left: 6px;
181
+ height: 40px;
182
+ float: left;
183
+ }
184
+ #creditcard-saved-accounts label .saved-card-info,
185
+ #paypal-saved-accounts label .saved-paypal-email {
186
+ margin-left: 14px;
187
+ float: left;
188
+ }
189
+ #creditcard-saved-accounts label .saved-card-info span {
190
+ line-height: 40px;
191
+ }
192
+ #creditcard-saved-accounts label .saved-card-info span.saved-expiry-date {
193
+ font-size: 12px;
194
+ font-weight: normal;
195
+ margin-left: 14px;
196
+ }
197
+ #gene_braintree_creditcard_store_in_vault_div label,
198
+ label[for="gene_braintree_paypal_store_in_vault"] {
199
+ width: auto!important;
200
+ }
201
+ #ac-page #checkout-payment-method-load #payment_form_gene_braintree_creditcard,
202
+ #ac-page #checkout-payment-method-load #payment_form_gene_braintree_paypal {
203
+ padding: 12px 0;
204
+ }
205
+ #ac-page #checkout-payment-method-load #payment_form_gene_braintree_creditcard > label,
206
+ #ac-page #checkout-payment-method-load #payment_form_gene_braintree_paypal > label {
207
+ font-weight: bold;
208
+ }
209
+ #ac-page #checkout-payment-method-load #payment_form_gene_braintree_creditcard > p,
210
+ #ac-page #checkout-payment-method-load #payment_form_gene_braintree_paypal > p {
211
+ margin-top: 6px;
212
+ }
213
+ #ac-page #checkout-payment-method-load #payment_form_gene_braintree_creditcard #creditcard-saved-accounts,
214
+ #ac-page #checkout-payment-method-load #payment_form_gene_braintree_paypal #creditcard-saved-accounts,
215
+ #ac-page #checkout-payment-method-load #payment_form_gene_braintree_creditcard #paypal-saved-accounts,
216
+ #ac-page #checkout-payment-method-load #payment_form_gene_braintree_paypal #paypal-saved-accounts {
217
+ font-size: inherit!important;
218
+ margin: 8px 0;
219
+ }
220
+ #ac-page #checkout-payment-method-load #payment_form_gene_braintree_creditcard #creditcard-saved-accounts tr td,
221
+ #ac-page #checkout-payment-method-load #payment_form_gene_braintree_paypal #creditcard-saved-accounts tr td,
222
+ #ac-page #checkout-payment-method-load #payment_form_gene_braintree_creditcard #paypal-saved-accounts tr td,
223
+ #ac-page #checkout-payment-method-load #payment_form_gene_braintree_paypal #paypal-saved-accounts tr td {
224
+ padding: 6px 0;
225
+ }
226
+ #ac-page #checkout-payment-method-load #payment_form_gene_braintree_creditcard #creditcard-saved-accounts label .saved-card-info,
227
+ #ac-page #checkout-payment-method-load #payment_form_gene_braintree_paypal #creditcard-saved-accounts label .saved-card-info,
228
+ #ac-page #checkout-payment-method-load #payment_form_gene_braintree_creditcard #paypal-saved-accounts label .saved-card-info,
229
+ #ac-page #checkout-payment-method-load #payment_form_gene_braintree_paypal #paypal-saved-accounts label .saved-card-info {
230
+ margin-left: 10px;
231
+ }
232
+ #ac-page #checkout-payment-method-load #payment_form_gene_braintree_creditcard #credit-card-form li,
233
+ #ac-page #checkout-payment-method-load #payment_form_gene_braintree_paypal #credit-card-form li {
234
+ margin-bottom: 12px;
235
+ }
236
+ #ac-page #checkout-payment-method-load #payment_form_gene_braintree_creditcard #credit-card-form li > label,
237
+ #ac-page #checkout-payment-method-load #payment_form_gene_braintree_paypal #credit-card-form li > label {
238
+ margin-bottom: 6px;
239
+ display: block;
240
+ }
241
+ #ac-page #checkout-payment-method-load #payment_form_gene_braintree_creditcard #credit-card-form li .cvv-what-is-this,
242
+ #ac-page #checkout-payment-method-load #payment_form_gene_braintree_paypal #credit-card-form li .cvv-what-is-this {
243
+ top: -40px;
244
+ }
245
+ #ac-page #checkout-payment-method-load #payment_form_gene_braintree_creditcard #credit-card-form #gene_braintree_creditcard_store_in_vault_div label,
246
+ #ac-page #checkout-payment-method-load #payment_form_gene_braintree_paypal #credit-card-form #gene_braintree_creditcard_store_in_vault_div label {
247
+ display: inline;
248
+ }
249
+ #ac-page #checkout-payment-method-load #payment_form_gene_braintree_creditcard .paypal-info > p,
250
+ #ac-page #checkout-payment-method-load #payment_form_gene_braintree_paypal .paypal-info > p {
251
+ margin-bottom: 8px;
252
+ }
253
+ #paypal-complete {
254
+ float: right;
255
+ }
skin/frontend/base/default/css/gene/braintree/config.codekit CHANGED
@@ -49,6 +49,15 @@
49
  "outputPathIsOutsideProject": 0,
50
  "outputPathIsSetByUser": 0
51
  },
 
 
 
 
 
 
 
 
 
52
  "\/core\/_general.less": {
53
  "allowInsecureImports": 0,
54
  "createSourceMap": 0,
@@ -140,13 +149,33 @@
140
  },
141
  "\/express.css": {
142
  "fileType": 16,
143
- "ignore": 0,
144
  "ignoreWasSetByUser": 0,
145
  "inputAbbreviatedPath": "\/express.css",
146
  "outputAbbreviatedPath": "No Output Path",
147
  "outputPathIsOutsideProject": 0,
148
  "outputPathIsSetByUser": 0
149
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
150
  "\/firecheckout.css": {
151
  "fileType": 16,
152
  "ignore": 1,
@@ -183,7 +212,7 @@
183
  "ignore": 0,
184
  "ignoreWasSetByUser": 0,
185
  "inputAbbreviatedPath": "\/integrations\/aheadworks.less",
186
- "outputAbbreviatedPath": "\/aheadworks-0.1.css",
187
  "outputPathIsOutsideProject": 0,
188
  "outputPathIsSetByUser": 1,
189
  "outputStyle": 0,
@@ -203,7 +232,27 @@
203
  "ignore": 0,
204
  "ignoreWasSetByUser": 0,
205
  "inputAbbreviatedPath": "\/integrations\/amasty.less",
206
- "outputAbbreviatedPath": "\/amasty-0.1.css",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
207
  "outputPathIsOutsideProject": 0,
208
  "outputPathIsSetByUser": 1,
209
  "outputStyle": 0,
@@ -223,7 +272,7 @@
223
  "ignore": 0,
224
  "ignoreWasSetByUser": 0,
225
  "inputAbbreviatedPath": "\/integrations\/default.less",
226
- "outputAbbreviatedPath": "\/default-0.1.css",
227
  "outputPathIsOutsideProject": 0,
228
  "outputPathIsSetByUser": 1,
229
  "outputStyle": 0,
@@ -241,9 +290,9 @@
241
  "fileType": 1,
242
  "ieCompatibility": 1,
243
  "ignore": 0,
244
- "ignoreWasSetByUser": 0,
245
  "inputAbbreviatedPath": "\/integrations\/firecheckout.less",
246
- "outputAbbreviatedPath": "\/firecheckout-0.1.css",
247
  "outputPathIsOutsideProject": 0,
248
  "outputPathIsSetByUser": 1,
249
  "outputStyle": 0,
@@ -263,7 +312,7 @@
263
  "ignore": 0,
264
  "ignoreWasSetByUser": 0,
265
  "inputAbbreviatedPath": "\/integrations\/fme.less",
266
- "outputAbbreviatedPath": "\/fme-0.1.css",
267
  "outputPathIsOutsideProject": 0,
268
  "outputPathIsSetByUser": 1,
269
  "outputStyle": 0,
@@ -283,7 +332,7 @@
283
  "ignore": 0,
284
  "ignoreWasSetByUser": 0,
285
  "inputAbbreviatedPath": "\/integrations\/idev.less",
286
- "outputAbbreviatedPath": "\/idev-0.1.css",
287
  "outputPathIsOutsideProject": 0,
288
  "outputPathIsSetByUser": 1,
289
  "outputStyle": 0,
@@ -303,7 +352,7 @@
303
  "ignore": 0,
304
  "ignoreWasSetByUser": 0,
305
  "inputAbbreviatedPath": "\/integrations\/iwd.less",
306
- "outputAbbreviatedPath": "\/iwd-0.1.css",
307
  "outputPathIsOutsideProject": 0,
308
  "outputPathIsSetByUser": 1,
309
  "outputStyle": 0,
@@ -323,7 +372,7 @@
323
  "ignore": 0,
324
  "ignoreWasSetByUser": 0,
325
  "inputAbbreviatedPath": "\/integrations\/magestore.less",
326
- "outputAbbreviatedPath": "\/magestore-0.1.css",
327
  "outputPathIsOutsideProject": 0,
328
  "outputPathIsSetByUser": 1,
329
  "outputStyle": 0,
@@ -343,7 +392,7 @@
343
  "ignore": 0,
344
  "ignoreWasSetByUser": 0,
345
  "inputAbbreviatedPath": "\/integrations\/oye.less",
346
- "outputAbbreviatedPath": "\/oye-0.1.css",
347
  "outputPathIsOutsideProject": 0,
348
  "outputPathIsSetByUser": 1,
349
  "outputStyle": 0,
@@ -363,7 +412,7 @@
363
  "ignore": 0,
364
  "ignoreWasSetByUser": 0,
365
  "inputAbbreviatedPath": "\/integrations\/unicode.less",
366
- "outputAbbreviatedPath": "\/unicode-0.1.css",
367
  "outputPathIsOutsideProject": 0,
368
  "outputPathIsSetByUser": 1,
369
  "outputStyle": 0,
@@ -577,7 +626,7 @@
577
  "coffeeMinifyOutput": 1,
578
  "coffeeOutputStyle": 0,
579
  "coffeeSyntaxCheckerStyle": 1,
580
- "externalServerAddress": "http:\/\/braintree.dave.gene.co.uk\/",
581
  "externalServerPreviewPathAddition": "",
582
  "genericWebpageFileExtensionsString": "html, htm, shtml, shtm, xhtml, php, jsp, asp, aspx, erb, ctp",
583
  "hamlAutoOutputPathEnabled": 1,
49
  "outputPathIsOutsideProject": 0,
50
  "outputPathIsSetByUser": 0
51
  },
52
+ "\/awesomecheckout.css": {
53
+ "fileType": 16,
54
+ "ignore": 1,
55
+ "ignoreWasSetByUser": 0,
56
+ "inputAbbreviatedPath": "\/awesomecheckout.css",
57
+ "outputAbbreviatedPath": "No Output Path",
58
+ "outputPathIsOutsideProject": 0,
59
+ "outputPathIsSetByUser": 0
60
+ },
61
  "\/core\/_general.less": {
62
  "allowInsecureImports": 0,
63
  "createSourceMap": 0,
149
  },
150
  "\/express.css": {
151
  "fileType": 16,
152
+ "ignore": 1,
153
  "ignoreWasSetByUser": 0,
154
  "inputAbbreviatedPath": "\/express.css",
155
  "outputAbbreviatedPath": "No Output Path",
156
  "outputPathIsOutsideProject": 0,
157
  "outputPathIsSetByUser": 0
158
  },
159
+ "\/express.less": {
160
+ "allowInsecureImports": 0,
161
+ "createSourceMap": 0,
162
+ "disableJavascript": 0,
163
+ "fileType": 1,
164
+ "ieCompatibility": 1,
165
+ "ignore": 0,
166
+ "ignoreWasSetByUser": 0,
167
+ "inputAbbreviatedPath": "\/express.less",
168
+ "outputAbbreviatedPath": "\/express.css",
169
+ "outputPathIsOutsideProject": 0,
170
+ "outputPathIsSetByUser": 1,
171
+ "outputStyle": 0,
172
+ "relativeURLS": 0,
173
+ "shouldRunAutoprefixer": 0,
174
+ "shouldRunBless": 0,
175
+ "strictImports": 0,
176
+ "strictMath": 0,
177
+ "strictUnits": 0
178
+ },
179
  "\/firecheckout.css": {
180
  "fileType": 16,
181
  "ignore": 1,
212
  "ignore": 0,
213
  "ignoreWasSetByUser": 0,
214
  "inputAbbreviatedPath": "\/integrations\/aheadworks.less",
215
+ "outputAbbreviatedPath": "\/aheadworks.css",
216
  "outputPathIsOutsideProject": 0,
217
  "outputPathIsSetByUser": 1,
218
  "outputStyle": 0,
232
  "ignore": 0,
233
  "ignoreWasSetByUser": 0,
234
  "inputAbbreviatedPath": "\/integrations\/amasty.less",
235
+ "outputAbbreviatedPath": "\/amasty.css",
236
+ "outputPathIsOutsideProject": 0,
237
+ "outputPathIsSetByUser": 1,
238
+ "outputStyle": 0,
239
+ "relativeURLS": 0,
240
+ "shouldRunAutoprefixer": 0,
241
+ "shouldRunBless": 0,
242
+ "strictImports": 0,
243
+ "strictMath": 0,
244
+ "strictUnits": 0
245
+ },
246
+ "\/integrations\/awesomecheckout.less": {
247
+ "allowInsecureImports": 0,
248
+ "createSourceMap": 0,
249
+ "disableJavascript": 0,
250
+ "fileType": 1,
251
+ "ieCompatibility": 1,
252
+ "ignore": 0,
253
+ "ignoreWasSetByUser": 0,
254
+ "inputAbbreviatedPath": "\/integrations\/awesomecheckout.less",
255
+ "outputAbbreviatedPath": "\/awesomecheckout.css",
256
  "outputPathIsOutsideProject": 0,
257
  "outputPathIsSetByUser": 1,
258
  "outputStyle": 0,
272
  "ignore": 0,
273
  "ignoreWasSetByUser": 0,
274
  "inputAbbreviatedPath": "\/integrations\/default.less",
275
+ "outputAbbreviatedPath": "\/default.css",
276
  "outputPathIsOutsideProject": 0,
277
  "outputPathIsSetByUser": 1,
278
  "outputStyle": 0,
290
  "fileType": 1,
291
  "ieCompatibility": 1,
292
  "ignore": 0,
293
+ "ignoreWasSetByUser": 1,
294
  "inputAbbreviatedPath": "\/integrations\/firecheckout.less",
295
+ "outputAbbreviatedPath": "\/firecheckout.css",
296
  "outputPathIsOutsideProject": 0,
297
  "outputPathIsSetByUser": 1,
298
  "outputStyle": 0,
312
  "ignore": 0,
313
  "ignoreWasSetByUser": 0,
314
  "inputAbbreviatedPath": "\/integrations\/fme.less",
315
+ "outputAbbreviatedPath": "\/fme.css",
316
  "outputPathIsOutsideProject": 0,
317
  "outputPathIsSetByUser": 1,
318
  "outputStyle": 0,
332
  "ignore": 0,
333
  "ignoreWasSetByUser": 0,
334
  "inputAbbreviatedPath": "\/integrations\/idev.less",
335
+ "outputAbbreviatedPath": "\/idev.css",
336
  "outputPathIsOutsideProject": 0,
337
  "outputPathIsSetByUser": 1,
338
  "outputStyle": 0,
352
  "ignore": 0,
353
  "ignoreWasSetByUser": 0,
354
  "inputAbbreviatedPath": "\/integrations\/iwd.less",
355
+ "outputAbbreviatedPath": "\/iwd.css",
356
  "outputPathIsOutsideProject": 0,
357
  "outputPathIsSetByUser": 1,
358
  "outputStyle": 0,
372
  "ignore": 0,
373
  "ignoreWasSetByUser": 0,
374
  "inputAbbreviatedPath": "\/integrations\/magestore.less",
375
+ "outputAbbreviatedPath": "\/magestore.css",
376
  "outputPathIsOutsideProject": 0,
377
  "outputPathIsSetByUser": 1,
378
  "outputStyle": 0,
392
  "ignore": 0,
393
  "ignoreWasSetByUser": 0,
394
  "inputAbbreviatedPath": "\/integrations\/oye.less",
395
+ "outputAbbreviatedPath": "\/oye.css",
396
  "outputPathIsOutsideProject": 0,
397
  "outputPathIsSetByUser": 1,
398
  "outputStyle": 0,
412
  "ignore": 0,
413
  "ignoreWasSetByUser": 0,
414
  "inputAbbreviatedPath": "\/integrations\/unicode.less",
415
+ "outputAbbreviatedPath": "\/unicode.css",
416
  "outputPathIsOutsideProject": 0,
417
  "outputPathIsSetByUser": 1,
418
  "outputStyle": 0,
626
  "coffeeMinifyOutput": 1,
627
  "coffeeOutputStyle": 0,
628
  "coffeeSyntaxCheckerStyle": 1,
629
+ "externalServerAddress": "http:\/\/default.braintree.dave.gene.co.uk\/",
630
  "externalServerPreviewPathAddition": "",
631
  "genericWebpageFileExtensionsString": "html, htm, shtml, shtm, xhtml, php, jsp, asp, aspx, erb, ctp",
632
  "hamlAutoOutputPathEnabled": 1,
skin/frontend/base/default/css/gene/braintree/core/_general.less CHANGED
@@ -1,5 +1,5 @@
1
  /* Accepted Cards */
2
  #braintree-accepted-cards img {
3
- float: left;
4
  margin-right: 4px;
5
  }
1
  /* Accepted Cards */
2
  #braintree-accepted-cards img {
3
+ display: inline-block;
4
  margin-right: 4px;
5
  }
skin/frontend/base/default/css/gene/braintree/default.css CHANGED
@@ -1,6 +1,6 @@
1
  /* Accepted Cards */
2
  #braintree-accepted-cards img {
3
- float: left;
4
  margin-right: 4px;
5
  }
6
  /* Hosted Fields Loading State */
1
  /* Accepted Cards */
2
  #braintree-accepted-cards img {
3
+ display: inline-block;
4
  margin-right: 4px;
5
  }
6
  /* Hosted Fields Loading State */
skin/frontend/base/default/css/gene/braintree/express.css CHANGED
@@ -1,119 +1,131 @@
1
  #pp-express-overlay {
2
- display: none;
3
- position: fixed;
4
- top: 0;
5
- left: 0;
6
- right: 0;
7
- bottom: 0;
8
- z-index: 100;
9
- background:rgba(0, 0, 0, 0.701961);
10
  }
11
-
12
  #pp-express-modal {
13
- box-sizing: border-box;
14
- display: none;
15
- position: fixed;
16
- top: 20%;
17
- left: 40%;
18
- left: calc(50% - 175px);
19
- z-index: 101;
20
-
21
- width: 350px;
22
- height: 390px;
23
- padding: 15px;
24
-
25
- background: #fff;
26
- border: 3px solid #ccc;
27
- border-radius: 4px;
28
- overflow: auto;
29
- }
30
-
31
- @media (max-width: 770px) {
32
- #pp-express-modal {
33
- width: 70%;
34
- height: 80%;
35
- top: 10%;
36
- left: 15%;
37
- }
38
- }
39
-
40
- @media (max-width: 500px) {
41
- #pp-express-modal {
42
- width: 100%;
43
- height: 100%;
44
- top: 0;
45
- left: 0;
46
- border: none;
47
- border-radius: 0;
48
- padding: 25px;
49
- }
50
- }
51
-
52
- #pp-express-modal.loading:before {
53
- content: " ";
54
- background: url('../../../images/gene/loader.gif') no-repeat;
55
- height: 48px;
56
- width: 48px;
57
- position: absolute;
58
- top: 30%;
59
- left: 44%;
60
- left: calc(50% - 24px);
61
- }
62
-
63
  #pp-express-modal .button {
64
- display: block;
65
- width: 100%;
66
- margin-top: 30px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
67
  }
68
-
69
  #pp-express-modal .button2 {
70
- display: block;
71
- width: 100%;
72
- margin-top: 6px;
73
- font-size: 0.9rem;
74
  }
75
-
76
  #pp-express-modal .product-row {
77
- min-height: 60px;
78
- margin: 0;
79
  }
80
-
81
  #pp-express-modal .item-row {
82
- border-bottom: 1px solid #ccc;
83
- padding-bottom: 10px;
84
- margin-bottom: 10px;
85
- display: block;
 
 
 
 
86
  }
87
-
88
  #pp-express-modal .item-subrow {
89
- margin-top: 5px;
90
- margin-bottom: 5px;
91
- display: block;
92
  }
93
-
94
  #pp-express-modal .product-image {
95
- float: left;
96
- width: 50px;
97
- height: 50px;
98
- margin: 0;
99
- overflow: hidden;
100
  }
101
  #pp-express-modal .product-image img {
102
- max-width: 100%;
103
  }
104
-
105
  #pp-express-modal .product-info {
106
- margin-left: 60px;
107
- padding-top: 5px;
108
  }
109
-
110
  #pp-express-modal .product-qty {
111
- font-size: 0.8rem;
112
  }
113
-
114
  #pp-express-modal #shopping-cart-totals-table {
115
- width: 100%;
116
  }
117
  #pp-express-modal #shopping-cart-totals-table td {
118
- padding-left: 10px;
119
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  #pp-express-overlay {
2
+ display: none;
3
+ position: fixed;
4
+ top: 0;
5
+ left: 0;
6
+ right: 0;
7
+ bottom: 0;
8
+ z-index: 100;
9
+ background: rgba(0, 0, 0, 0.701961);
10
  }
 
11
  #pp-express-modal {
12
+ box-sizing: border-box;
13
+ display: none;
14
+ position: fixed;
15
+ top: 20%;
16
+ left: 40%;
17
+ left: calc(50% - 175px);
18
+ z-index: 101;
19
+ width: 350px;
20
+ height: 390px;
21
+ padding: 15px;
22
+ background: #fff;
23
+ border: 3px solid #ccc;
24
+ border-radius: 4px;
25
+ overflow: auto;
26
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
27
  #pp-express-modal .button {
28
+ display: block;
29
+ width: 100%;
30
+ margin-top: 30px;
31
+ }
32
+ #pp-express-modal .button.coupon-submit {
33
+ margin: 0;
34
+ float: right;
35
+ width: 50%;
36
+ box-sizing: border-box;
37
+ }
38
+ #pp-express-modal .button.loading {
39
+ background-image: url('../../../images/gene/loader-transparent.gif');
40
+ background-repeat: no-repeat;
41
+ background-position: center center;
42
+ background-size: auto 60%;
43
+ text-indent: -9999px;
44
+ }
45
+ #pp-express-modal #paypal-express-coupon {
46
+ float: left;
47
+ width: 50%;
48
+ box-sizing: border-box;
49
+ height: 33px;
50
+ line-height: 33px;
51
+ }
52
+ #pp-express-modal #paypal-express-coupon-error {
53
+ margin-bottom: 6px;
54
  }
 
55
  #pp-express-modal .button2 {
56
+ display: block;
57
+ width: 100%;
58
+ margin-top: 6px;
59
+ font-size: 0.9rem;
60
  }
 
61
  #pp-express-modal .product-row {
62
+ min-height: 60px;
63
+ margin: 0;
64
  }
 
65
  #pp-express-modal .item-row {
66
+ border-bottom: 1px solid #ccc;
67
+ padding-bottom: 10px;
68
+ margin-bottom: 10px;
69
+ display: block;
70
+ }
71
+ #pp-express-modal .item-row.coupon-row {
72
+ float: left;
73
+ width: 100%;
74
  }
 
75
  #pp-express-modal .item-subrow {
76
+ margin-top: 5px;
77
+ margin-bottom: 5px;
78
+ display: block;
79
  }
 
80
  #pp-express-modal .product-image {
81
+ float: left;
82
+ width: 50px;
83
+ height: 50px;
84
+ margin: 0;
85
+ overflow: hidden;
86
  }
87
  #pp-express-modal .product-image img {
88
+ max-width: 100%;
89
  }
 
90
  #pp-express-modal .product-info {
91
+ margin-left: 60px;
92
+ padding-top: 5px;
93
  }
 
94
  #pp-express-modal .product-qty {
95
+ font-size: 0.8rem;
96
  }
 
97
  #pp-express-modal #shopping-cart-totals-table {
98
+ width: 100%;
99
  }
100
  #pp-express-modal #shopping-cart-totals-table td {
101
+ padding-left: 10px;
102
+ }
103
+ #pp-express-modal.loading:before {
104
+ content: " ";
105
+ background: url('../../../images/gene/loader.gif') no-repeat;
106
+ height: 48px;
107
+ width: 48px;
108
+ position: absolute;
109
+ top: 30%;
110
+ left: 44%;
111
+ left: calc(50% - 24px);
112
+ }
113
+ @media (max-width: 770px) {
114
+ #pp-express-modal {
115
+ width: 70%;
116
+ height: 80%;
117
+ top: 10%;
118
+ left: 15%;
119
+ }
120
+ }
121
+ @media (max-width: 500px) {
122
+ #pp-express-modal {
123
+ width: 100%;
124
+ height: 100%;
125
+ top: 0;
126
+ left: 0;
127
+ border: none;
128
+ border-radius: 0;
129
+ padding: 25px;
130
+ }
131
+ }
skin/frontend/base/default/css/gene/braintree/express.less ADDED
@@ -0,0 +1,136 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ #pp-express-overlay {
3
+ display: none;
4
+ position: fixed;
5
+ top: 0;
6
+ left: 0;
7
+ right: 0;
8
+ bottom: 0;
9
+ z-index: 100;
10
+ background: rgba(0, 0, 0, 0.701961);
11
+ }
12
+ #pp-express-modal {
13
+ box-sizing: border-box;
14
+ display: none;
15
+ position: fixed;
16
+ top: 20%;
17
+ left: 40%;
18
+ left: ~"calc(50% - 175px)";
19
+ z-index: 101;
20
+ width: 350px;
21
+ height: 390px;
22
+ padding: 15px;
23
+ background: #fff;
24
+ border: 3px solid #ccc;
25
+ border-radius: 4px;
26
+ overflow: auto;
27
+ .button {
28
+ display: block;
29
+ width: 100%;
30
+ margin-top: 30px;
31
+
32
+ &.coupon-submit {
33
+ margin: 0;
34
+ float: right;
35
+ width: 50%;
36
+ box-sizing: border-box;
37
+ }
38
+ &.loading {
39
+ background-image: url('../../../images/gene/loader-transparent.gif');
40
+ background-repeat: no-repeat;
41
+ background-position: center center;
42
+ background-size: auto 60%;
43
+ text-indent: -9999px;
44
+ }
45
+ }
46
+ #paypal-express-coupon {
47
+ float: left;
48
+ width: 50%;
49
+ box-sizing: border-box;
50
+ height: 33px;
51
+ line-height: 33px;
52
+ }
53
+ #paypal-express-coupon-error {
54
+ margin-bottom: 6px;
55
+ }
56
+ .button2 {
57
+ display: block;
58
+ width: 100%;
59
+ margin-top: 6px;
60
+ font-size: 0.9rem;
61
+ }
62
+ .product-row {
63
+ min-height: 60px;
64
+ margin: 0;
65
+ }
66
+ .item-row {
67
+ border-bottom: 1px solid #ccc;
68
+ padding-bottom: 10px;
69
+ margin-bottom: 10px;
70
+ display: block;
71
+
72
+ &.coupon-row {
73
+ float: left;
74
+ width: 100%;
75
+ }
76
+ }
77
+ .item-subrow {
78
+ margin-top: 5px;
79
+ margin-bottom: 5px;
80
+ display: block;
81
+ }
82
+ .product-image {
83
+ float: left;
84
+ width: 50px;
85
+ height: 50px;
86
+ margin: 0;
87
+ overflow: hidden;
88
+ img {
89
+ max-width: 100%;
90
+ }
91
+ }
92
+ .product-info {
93
+ margin-left: 60px;
94
+ padding-top: 5px;
95
+ }
96
+ .product-qty {
97
+ font-size: 0.8rem;
98
+ }
99
+ #shopping-cart-totals-table {
100
+ width: 100%;
101
+ td {
102
+ padding-left: 10px;
103
+ }
104
+ }
105
+ }
106
+ #pp-express-modal.loading {
107
+ &:before {
108
+ content: " ";
109
+ background: url('../../../images/gene/loader.gif') no-repeat;
110
+ height: 48px;
111
+ width: 48px;
112
+ position: absolute;
113
+ top: 30%;
114
+ left: 44%;
115
+ left: ~"calc(50% - 24px)";
116
+ }
117
+ }
118
+ @media (max-width: 770px) {
119
+ #pp-express-modal {
120
+ width: 70%;
121
+ height: 80%;
122
+ top: 10%;
123
+ left: 15%;
124
+ }
125
+ }
126
+ @media (max-width: 500px) {
127
+ #pp-express-modal {
128
+ width: 100%;
129
+ height: 100%;
130
+ top: 0;
131
+ left: 0;
132
+ border: none;
133
+ border-radius: 0;
134
+ padding: 25px;
135
+ }
136
+ }
skin/frontend/base/default/css/gene/braintree/firecheckout.css CHANGED
@@ -1,6 +1,6 @@
1
  /* Accepted Cards */
2
  #braintree-accepted-cards img {
3
- float: left;
4
  margin-right: 4px;
5
  }
6
  /* Hosted Fields Loading State */
@@ -217,3 +217,23 @@ label[for="gene_braintree_paypal_store_in_vault"] {
217
  padding-top: 6px;
218
  padding-bottom: 6px;
219
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  /* Accepted Cards */
2
  #braintree-accepted-cards img {
3
+ display: inline-block;
4
  margin-right: 4px;
5
  }
6
  /* Hosted Fields Loading State */
217
  padding-top: 6px;
218
  padding-bottom: 6px;
219
  }
220
+ #payment_form_gene_braintree_paypal label,
221
+ #payment_form_gene_braintree_creditcard label {
222
+ float: left;
223
+ width: 100%;
224
+ margin-bottom: 4px;
225
+ }
226
+ #payment_form_gene_braintree_paypal .braintree-card-input-field,
227
+ #payment_form_gene_braintree_creditcard .braintree-card-input-field {
228
+ float: left;
229
+ width: 100%;
230
+ }
231
+ #payment_form_gene_braintree_paypal #cvv,
232
+ #payment_form_gene_braintree_creditcard #cvv {
233
+ float: left;
234
+ }
235
+ #payment_form_gene_braintree_paypal a.cvv-what-is-this,
236
+ #payment_form_gene_braintree_creditcard a.cvv-what-is-this {
237
+ display: block;
238
+ clear: both;
239
+ }
skin/frontend/base/default/css/gene/braintree/fme.css CHANGED
@@ -1,6 +1,6 @@
1
  /* Accepted Cards */
2
  #braintree-accepted-cards img {
3
- float: left;
4
  margin-right: 4px;
5
  }
6
  /* Hosted Fields Loading State */
1
  /* Accepted Cards */
2
  #braintree-accepted-cards img {
3
+ display: inline-block;
4
  margin-right: 4px;
5
  }
6
  /* Hosted Fields Loading State */
skin/frontend/base/default/css/gene/braintree/idev.css CHANGED
@@ -1,6 +1,6 @@
1
  /* Accepted Cards */
2
  #braintree-accepted-cards img {
3
- float: left;
4
  margin-right: 4px;
5
  }
6
  /* Hosted Fields Loading State */
1
  /* Accepted Cards */
2
  #braintree-accepted-cards img {
3
+ display: inline-block;
4
  margin-right: 4px;
5
  }
6
  /* Hosted Fields Loading State */
skin/frontend/base/default/css/gene/braintree/integrations/awesomecheckout.less ADDED
@@ -0,0 +1,63 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @import '../core/_general';
2
+ @import '../core/_hostedfields';
3
+ @import '../core/_paypal';
4
+ @import '../core/_saved';
5
+
6
+ #ac-page #checkout-payment-method-load {
7
+ #payment_form_gene_braintree_creditcard, #payment_form_gene_braintree_paypal {
8
+ padding: 12px 0;
9
+ > label {
10
+ font-weight: bold;
11
+ }
12
+ > p {
13
+ margin-top: 6px;
14
+ }
15
+
16
+ #creditcard-saved-accounts, #paypal-saved-accounts {
17
+ font-size: inherit!important;
18
+ margin: 8px 0;
19
+
20
+ tr {
21
+ td {
22
+ padding: 6px 0;
23
+ }
24
+ }
25
+
26
+ label {
27
+ .saved-card-info {
28
+ margin-left: 10px;
29
+ }
30
+ }
31
+ }
32
+
33
+ #credit-card-form {
34
+ li {
35
+ margin-bottom: 12px;
36
+
37
+ > label {
38
+ margin-bottom: 6px;
39
+ display: block;
40
+ }
41
+
42
+ .cvv-what-is-this {
43
+ top: -40px;
44
+ }
45
+ }
46
+ #gene_braintree_creditcard_store_in_vault_div {
47
+ label {
48
+ display: inline;
49
+ }
50
+ }
51
+ }
52
+
53
+ .paypal-info {
54
+ >p {
55
+ margin-bottom: 8px;
56
+ }
57
+ }
58
+ }
59
+ }
60
+
61
+ #paypal-complete {
62
+ float: right;
63
+ }
skin/frontend/base/default/css/gene/braintree/integrations/firecheckout.less CHANGED
@@ -21,4 +21,21 @@
21
  #payment_form_gene_braintree_paypal, #payment_form_gene_braintree_creditcard {
22
  padding-top: 6px;
23
  padding-bottom: 6px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
24
  }
21
  #payment_form_gene_braintree_paypal, #payment_form_gene_braintree_creditcard {
22
  padding-top: 6px;
23
  padding-bottom: 6px;
24
+
25
+ label {
26
+ float: left;
27
+ width: 100%;
28
+ margin-bottom: 4px;
29
+ }
30
+ .braintree-card-input-field {
31
+ float: left;
32
+ width: 100%;
33
+ }
34
+ #cvv {
35
+ float: left;
36
+ }
37
+ a.cvv-what-is-this {
38
+ display: block;
39
+ clear: both;
40
+ }
41
  }
skin/frontend/base/default/css/gene/braintree/iwd.css CHANGED
@@ -1,6 +1,6 @@
1
  /* Accepted Cards */
2
  #braintree-accepted-cards img {
3
- float: left;
4
  margin-right: 4px;
5
  }
6
  /* Hosted Fields Loading State */
1
  /* Accepted Cards */
2
  #braintree-accepted-cards img {
3
+ display: inline-block;
4
  margin-right: 4px;
5
  }
6
  /* Hosted Fields Loading State */
skin/frontend/base/default/css/gene/braintree/magestore.css CHANGED
@@ -1,6 +1,6 @@
1
  /* Accepted Cards */
2
  #braintree-accepted-cards img {
3
- float: left;
4
  margin-right: 4px;
5
  }
6
  /* Hosted Fields Loading State */
1
  /* Accepted Cards */
2
  #braintree-accepted-cards img {
3
+ display: inline-block;
4
  margin-right: 4px;
5
  }
6
  /* Hosted Fields Loading State */
skin/frontend/base/default/css/gene/braintree/oye.css CHANGED
@@ -1,6 +1,6 @@
1
  /* Accepted Cards */
2
  #braintree-accepted-cards img {
3
- float: left;
4
  margin-right: 4px;
5
  }
6
  /* Hosted Fields Loading State */
1
  /* Accepted Cards */
2
  #braintree-accepted-cards img {
3
+ display: inline-block;
4
  margin-right: 4px;
5
  }
6
  /* Hosted Fields Loading State */
skin/frontend/base/default/css/gene/braintree/unicode.css CHANGED
@@ -1,6 +1,6 @@
1
  /* Accepted Cards */
2
  #braintree-accepted-cards img {
3
- float: left;
4
  margin-right: 4px;
5
  }
6
  /* Hosted Fields Loading State */
1
  /* Accepted Cards */
2
  #braintree-accepted-cards img {
3
+ display: inline-block;
4
  margin-right: 4px;
5
  }
6
  /* Hosted Fields Loading State */