FuturePayUS - Version 2.0.0

Version Notes

FuturePay Payment method

Download this release

Release Info

Developer FuturePay
Extension FuturePayUS
Version 2.0.0
Comparing to
See all releases


Version 2.0.0

Files changed (46) hide show
  1. app/code/community/FuturePay/FuturePay/Block/Adminhtml/System/Config/Fieldset/Hint.php +33 -0
  2. app/code/community/FuturePay/FuturePay/Block/Form/Futurepay.php +1 -0
  3. app/code/community/FuturePay/FuturePay/Block/Info/Futurepay.php +1 -0
  4. app/code/community/FuturePay/FuturePay/Block/Process.php +1 -0
  5. app/code/community/FuturePay/FuturePay/Exception.php +47 -0
  6. app/code/community/FuturePay/FuturePay/Helper/Data.php +67 -0
  7. app/code/community/FuturePay/FuturePay/Model/Method/Futurepay.php +109 -0
  8. app/code/community/FuturePay/FuturePay/Model/Observer.php +49 -0
  9. app/code/community/FuturePay/FuturePay/Model/Resource/Setup.php +12 -0
  10. app/code/community/FuturePay/FuturePay/Model/Source/Order/Status.php +11 -0
  11. app/code/community/FuturePay/FuturePay/Model/Source/Payment/Action.php +11 -0
  12. app/code/community/FuturePay/FuturePay/Model/Source/Title/Custom.php +11 -0
  13. app/code/community/FuturePay/FuturePay/controllers/IndexController.php +563 -0
  14. app/code/community/FuturePay/FuturePay/data/futurepay_setup/data-install-2.0.0.php +6 -0
  15. app/code/community/FuturePay/FuturePay/etc/config.xml +93 -0
  16. app/code/community/FuturePay/FuturePay/etc/system.xml +209 -0
  17. app/design/adminhtml/base/default/template/futurepay/info/futurepay.phtml +1 -0
  18. app/design/adminhtml/default/default/template/futurepay/system/config/fieldset/hint.phtml +10 -0
  19. app/design/frontend/base/default/layout/futurepay.xml +43 -0
  20. app/design/frontend/base/default/template/futurepay/form/futurepay.phtml +7 -0
  21. app/design/frontend/base/default/template/futurepay/form/mark.phtml +106 -0
  22. app/design/frontend/base/default/template/futurepay/form/redirect.phtml +312 -0
  23. app/design/frontend/base/default/template/futurepay/getmerchantloginform.phtml +11 -0
  24. app/design/frontend/base/default/template/futurepay/getmerchantsignupform.phtml +76 -0
  25. app/design/frontend/base/default/template/futurepay/getsignuploginform.phtml +45 -0
  26. app/design/frontend/base/default/template/futurepay/info/futurepay.phtml +13 -0
  27. app/design/frontend/base/default/template/futurepay/process.phtml +49 -0
  28. app/etc/modules/Futurepay_Futurepay.xml +10 -0
  29. package.xml +18 -0
  30. skin/adminhtml/base/default/futurepay/fp_logo.png +0 -0
  31. skin/adminhtml/base/default/futurepay/fp_logo2.png +0 -0
  32. skin/adminhtml/base/default/futurepay/futurepay-admin.js +222 -0
  33. skin/adminhtml/base/default/futurepay/logoFuturePay.png +0 -0
  34. skin/adminhtml/base/default/futurepay/styles.css +137 -0
  35. skin/frontend/base/default/futurepay/arrow.png +0 -0
  36. skin/frontend/base/default/futurepay/fpButton.jpg +0 -0
  37. skin/frontend/base/default/futurepay/fpButton18.jpg +0 -0
  38. skin/frontend/base/default/futurepay/fp_logo.png +0 -0
  39. skin/frontend/base/default/futurepay/fp_small_logo.png +0 -0
  40. skin/frontend/base/default/futurepay/fplogo.png +0 -0
  41. skin/frontend/base/default/futurepay/icon-cart.png +0 -0
  42. skin/frontend/base/default/futurepay/icon-fee.png +0 -0
  43. skin/frontend/base/default/futurepay/icon-secure.png +0 -0
  44. skin/frontend/base/default/futurepay/styles.css +8 -0
  45. skin/frontend/base/default/futurepay/styles18.css +847 -0
  46. skin/frontend/base/default/futurepay/styles19.css +863 -0
app/code/community/FuturePay/FuturePay/Block/Adminhtml/System/Config/Fieldset/Hint.php ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Renderer for FuturePay banner in System Configuration
5
+ */
6
+ class FuturePay_FuturePay_Block_Adminhtml_System_Config_Fieldset_Hint
7
+ extends Mage_Adminhtml_Block_Abstract
8
+ implements Varien_Data_Form_Element_Renderer_Interface
9
+ {
10
+ protected $_template = 'futurepay/system/config/fieldset/hint.phtml';
11
+
12
+ /**
13
+ * Render fieldset html
14
+ *
15
+ * @param Varien_Data_Form_Element_Abstract $element
16
+ * @return string
17
+ */
18
+ public function render(Varien_Data_Form_Element_Abstract $element)
19
+ {
20
+ $elementOriginalData = $element->getOriginalData();
21
+ if (isset($elementOriginalData['help_link'])) {
22
+ $this->setHelpLink($elementOriginalData['help_link']);
23
+ }
24
+ $js = <<<JS
25
+ document.observe("dom:loaded", function() {
26
+ FuturePayAdmin.displaySignupLoginTpl();
27
+ });
28
+
29
+
30
+ JS;
31
+ return $this->toHtml() . $this->helper('adminhtml/js')->getScript($js);
32
+ }
33
+ }
app/code/community/FuturePay/FuturePay/Block/Form/Futurepay.php ADDED
@@ -0,0 +1 @@
 
0
  protected function _construct()
1
  {
2
  $mark = new $mark;
3
  $mark->setTemplate('futurepay/form/mark.phtml')
4
  ->setPaymentAcceptanceMarkSrc($this->getSkinUrl('futurepay/fp_small_logo.png'))
5
  ;
6
  $this->setTemplate('futurepay/form/redirect.phtml')
7
  ->setRedirectMessage(
8
  Mage::helper('paypal')->__('Buy Now and Pay Later without a credit card using FuturePay. It\'s secure, convenient and easy to use. Don\'t have an account yet? You can signup and checkout in seconds.')
9
  )
10
  ->setMethodTitle('') // Output PayPal mark, omit title
11
  ->setMethodLabelAfterHtml($mark->toHtml())
12
  ;
13
  }
1
+ <?php
2
  protected function _construct()
3
  {
4
  $mark = new $mark;
5
  $mark->setTemplate('futurepay/form/mark.phtml')
6
  ->setPaymentAcceptanceMarkSrc($this->getSkinUrl('futurepay/fp_small_logo.png'))
7
  ;
8
  $this->setTemplate('futurepay/form/redirect.phtml')
9
  ->setRedirectMessage(
10
  Mage::helper('paypal')->__('Buy Now and Pay Later without a credit card using FuturePay. It\'s secure, convenient and easy to use. Don\'t have an account yet? You can signup and checkout in seconds.')
11
  )
12
  ->setMethodTitle('') // Output PayPal mark, omit title
13
  ->setMethodLabelAfterHtml($mark->toHtml())
14
  ;
15
  }
app/code/community/FuturePay/FuturePay/Block/Info/Futurepay.php ADDED
@@ -0,0 +1 @@
 
0
  protected $_checkout;
1
  protected function _construct()
2
  {
3
  parent::_construct();
4
  $this->setTemplate('futurepay/info/futurepay.phtml');
5
  }
6
  /**
7
  * Enter description here...
8
  *
9
  * @return string
10
  */
11
  public function getPayableTo()
12
  {
13
  return '';
14
  }
15
  /**
16
  * Enter description here...
17
  *
18
  * @return string
19
  */
20
  public function getMailingAddress()
21
  {
22
  return '';
23
  }
24
  public function getCheckout()
25
  {
26
  if (is_null($this->_checkout)) {
27
  $this->_convertAdditionalData();
28
  }
29
  return $this->_checkout;
30
  }
31
 
32
  public function getReturnUrl()
33
  {
34
  return '';
35
  }
36
  /**
37
  * Enter description here...
38
  *
39
  * @return Mage_Payment_Block_Info_Checkmo
40
  */
41
  protected function _convertAdditionalData()
42
  {
43
  $details = @unserialize($this->getInfo()->getAdditionalData());
44
  if (is_array($details)) {
45
  $this->_payableTo = isset($details['payable_to']) ? (string) $details['payable_to'] : '';
46
  $this->_mailingAddress = isset($details['mailing_address']) ? (string) $details['mailing_address'] : '';
47
  $this->_return_url = isset($details['return_url']) ? (string) $details['return_url'] : '';
48
  $this->_checkout = isset($details['checkout']) ? (string) $details['checkout'] : '';
49
  $this->_merchantID = isset($details['merchantID']) ? (string) $details['merchantID'] : '';
50
  $this->_secure_code = isset($details['secure_code']) ? (string) $details['secure_code'] : '';
51
  } else {
52
  $this->_payableTo = '';
53
  $this->_mailingAddress = '';
54
  $this->_return_url='';
55
  $this->_checkout='';
56
  $this->_merchantID='';
57
  $this->_secure_code='';
58
  }
59
  return $this;
60
  }
61
 
62
  public function toPdf()
63
  {
64
  $this->setTemplate('futurepay/info/futurepay.phtml');
65
  return $this->toHtml();
66
  }
1
+ <?php
2
  protected $_checkout;
3
  protected function _construct()
4
  {
5
  parent::_construct();
6
  $this->setTemplate('futurepay/info/futurepay.phtml');
7
  }
8
  /**
9
  * Enter description here...
10
  *
11
  * @return string
12
  */
13
  public function getPayableTo()
14
  {
15
  return '';
16
  }
17
  /**
18
  * Enter description here...
19
  *
20
  * @return string
21
  */
22
  public function getMailingAddress()
23
  {
24
  return '';
25
  }
26
  public function getCheckout()
27
  {
28
  if (is_null($this->_checkout)) {
29
  $this->_convertAdditionalData();
30
  }
31
  return $this->_checkout;
32
  }
33
 
34
  public function getReturnUrl()
35
  {
36
  return '';
37
  }
38
  /**
39
  * Enter description here...
40
  *
41
  * @return Mage_Payment_Block_Info_Checkmo
42
  */
43
  protected function _convertAdditionalData()
44
  {
45
  $details = @unserialize($this->getInfo()->getAdditionalData());
46
  if (is_array($details)) {
47
  $this->_payableTo = isset($details['payable_to']) ? (string) $details['payable_to'] : '';
48
  $this->_mailingAddress = isset($details['mailing_address']) ? (string) $details['mailing_address'] : '';
49
  $this->_return_url = isset($details['return_url']) ? (string) $details['return_url'] : '';
50
  $this->_checkout = isset($details['checkout']) ? (string) $details['checkout'] : '';
51
  $this->_merchantID = isset($details['merchantID']) ? (string) $details['merchantID'] : '';
52
  $this->_secure_code = isset($details['secure_code']) ? (string) $details['secure_code'] : '';
53
  } else {
54
  $this->_payableTo = '';
55
  $this->_mailingAddress = '';
56
  $this->_return_url='';
57
  $this->_checkout='';
58
  $this->_merchantID='';
59
  $this->_secure_code='';
60
  }
61
  return $this;
62
  }
63
 
64
  public function toPdf()
65
  {
66
  $this->setTemplate('futurepay/info/futurepay.phtml');
67
  return $this->toHtml();
68
  }
app/code/community/FuturePay/FuturePay/Block/Process.php ADDED
@@ -0,0 +1 @@
 
1
+ <?php
app/code/community/FuturePay/FuturePay/Exception.php ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Magento Core Exception
4
+ *
5
+ * This class will be extended by other modules
6
+ *
7
+ * @category VES
8
+ * @package VES_FuturePay
9
+ */
10
+ class FuturePay_FuturePay_Exception extends Exception
11
+ {
12
+ public function __construct($errorCode='',$message =''){
13
+ $message = $this->getErrorMessageByCode($errorCode);
14
+ return parent::__construct($message);
15
+ }
16
+
17
+ public function getErrorMessageByCode($errorCode){
18
+ $errorCode = trim($errorCode);
19
+ switch($errorCode){
20
+ case 'FP_EXISTING_INVALID_CUSTOMER_STATUS' : $message = Mage::helper('futurepay')->__('Your purchase was not successful because your account is not in an active state. Please contact FuturePay at <a href="mailto:support@futurepay.com">support@futurepay.com</a>.');break;
21
+ case 'FP_INVALID_ID_REQUEST' : $message = Mage::helper('futurepay')->__('Error: The GMID could not be validated - either missing or not valid format - Contact FuturePay');break;
22
+ case 'FP_INVALID_SERVER_REQUEST' : $message = Mage::helper('futurepay')->__('Error: Either the Merchant Server is not on our IP Whitelist or the Order Reference was Missing');break;
23
+ case 'FP_PRE_ORDER_EXCEEDS_MAXIMUM' : $message = Mage::helper('futurepay')->__('FuturePay can only be used on orders under $500');break;
24
+ case 'FP_MISSING_REFERENCE' : $message = Mage::helper('futurepay')->__('Reference was not detected in the Query String');break;
25
+ case 'FP_INVALID_REFERENCE' : $message = Mage::helper('futurepay')->__('Reference');break;
26
+ case 'FP_ORDER_EXISTS' : $message = Mage::helper('futurepay')->__('The reference exists with an order that has completed sales attached');break;
27
+ case 'FP_MISSING_REQUIRED_FIRST_NAME' : $message = Mage::helper('futurepay')->__('First Name was not detected in the Query String');break;
28
+ case 'FP_MISSING_REQUIRED_LAST_NAME' : $message = Mage::helper('futurepay')->__('Last Name was not detected in the Query String');break;
29
+ case 'FP_MISSING_REQUIRED_PHONE' : $message = Mage::helper('futurepay')->__('Phone Name was not detected in the Query String');break;
30
+ case 'FP_MISSING_REQUIRED_CITY' : $message = Mage::helper('futurepay')->__('City was not detected in the Query String');break;
31
+ case 'FP_MISSING_REQUIRED_STATE' : $message = Mage::helper('futurepay')->__('State was not detected in the Query String');break;
32
+ case 'FP_MISSING_REQUIRED_ADDRESS' : $message = Mage::helper('futurepay')->__('Address was not detected in the Query String');break;
33
+ case 'FP_MISSING_REQUIRED_COUNTRY' : $message = Mage::helper('futurepay')->__('Country was not detected in the Query String');break;
34
+ case 'FP_COUNTRY_US_ONLY' : $message = Mage::helper('futurepay')->__('The Country was not US');break;
35
+ case 'FP_MISSING_EMAIL' : $message = Mage::helper('futurepay')->__('Email was not detected in the Query String');break;
36
+ case 'FP_INVALID_EMAIL_SIZE' : $message = Mage::helper('futurepay')->__('Email Size was greater than 85');break;
37
+ case 'FP_INVALID_EMAIL_FORMAT' : $message = Mage::helper('futurepay')->__('Email Format was not valid');break;
38
+ case 'FP_MISSING_REQUIRED_ZIP' : $message = Mage::helper('futurepay')->__('Zip was not detected in the Query String');break;
39
+ case 'FP_NO_ZIP_FOUND' : $message = Mage::helper('futurepay')->__('The Zip code you entered for your billing address corresponds to a Military (APO/FPO/DPO), PO Box or other non-physical address. To approve your application we require a Zip code associated with a physical address in the U.S.');break;
40
+ case 'FP_INVALID_STATE_ZIP_COMBINATION' : $message = Mage::helper('futurepay')->__('The Zip code you entered for your billing address corresponds to a Military (APO/FPO/DPO), PO Box or other non-physical address. To approve your application we require a Zip code associated with a physical address in the U.S.');break;
41
+ case 'NOT_ACCEPTED' : $message = Mage::helper('futurepay')->__('Your FuturePay Account Could not be Created. Please check your email for further details. Please select another payment method.');break;
42
+ case 'ORDER_TK_NOT_FOUND' : $message = Mage::helper('futurepay')->__('FuturePay could not confirm the Order.');break;
43
+ default: $message = Mage::helper('futurepay')->__('There is an error occurred we cannot process your order. Code: %s',$errorCode);
44
+ }
45
+ return $message;
46
+ }
47
+ }
app/code/community/FuturePay/FuturePay/Helper/Data.php ADDED
@@ -0,0 +1,67 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+
5
+ class FuturePay_FuturePay_Helper_Data extends Mage_Core_Helper_Abstract
6
+
7
+ {
8
+
9
+ public function isSandboxMode(){
10
+
11
+ return Mage::getStoreConfig('payment/futurepay/is_sandbox_mode');
12
+
13
+ }
14
+
15
+
16
+
17
+ /**
18
+
19
+ * Get API Url
20
+
21
+ */
22
+
23
+ public function getApiUrl(){
24
+
25
+ return $this->isSandboxMode()?Mage::getStoreConfig('payment/futurepay/sandbox_checkout_url'):Mage::getStoreConfig('payment/futurepay/checkout_url');
26
+
27
+ }
28
+
29
+
30
+
31
+
32
+
33
+ /**
34
+
35
+ * Get cart integration url
36
+
37
+ */
38
+
39
+ public function getCartIntegrationUrl(){
40
+
41
+ return $this->isSandboxMode()?Mage::getStoreConfig('payment/futurepay/sandbox_cart_integration'):Mage::getStoreConfig('payment/futurepay/cart_integration');
42
+
43
+ }
44
+
45
+
46
+
47
+ /**
48
+
49
+ * Get order verification url
50
+
51
+ */
52
+
53
+ public function getOrderVerificationUrl(){
54
+
55
+ return $this->isSandboxMode()?Mage::getStoreConfig('payment/futurepay/sandbox_order_verification_url'):Mage::getStoreConfig('payment/futurepay/order_verification_url');
56
+
57
+ }
58
+
59
+ /**
60
+ *Get is Auto Create Invoice
61
+ */
62
+
63
+ public function autoCreateInvoice(){
64
+ return Mage::getStoreConfig('payment/futurepay/auto_invoice');
65
+ }
66
+
67
+ }
app/code/community/FuturePay/FuturePay/Model/Method/Futurepay.php ADDED
@@ -0,0 +1,109 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class FuturePay_FuturePay_Model_Method_FuturePay extends Mage_Payment_Model_Method_Abstract
3
+ {
4
+
5
+ protected $_code = 'futurepay';
6
+ protected $_formBlockType = 'futurepay/form_futurepay';
7
+ protected $_infoBlockType = 'futurepay/info_futurepay';
8
+ protected $_canAuthorize = true;
9
+ protected $_canRefund = true;
10
+ protected $_canRefundInvoicePartial = true;
11
+ protected $_canCapture = true;
12
+
13
+ public function refund(\Varien_Object $payment, $amount) {
14
+
15
+ // Setup curl request:
16
+ if (Mage::getStoreConfig('payment/futurepay/is_sandbox_mode') == 1) {
17
+ $requestHost = 'sandbox.futurepay.com';
18
+ } else {
19
+ $requestHost = 'api.futurepay.com';
20
+ }
21
+ $GMID = Mage::getStoreConfig('payment/futurepay/gmid');
22
+ $address = 'https://' . $requestHost . '/remote/merchant-returns';
23
+ $postDataArray = array();
24
+ $postDataArray['api_version'] = '2';
25
+ $postDataArray['PlatformId'] = '302';
26
+ $postDataArray['gmid'] = $GMID;
27
+ // Returned in the JavaScript Response from a successful purchase
28
+ $postDataArray['order_action'] = 'refund';
29
+ //$postDataArray['reference'] = get_object_vars($payment)['_data']['refund_transaction_id'];
30
+ //$postDataArray['reference'] = get_object_vars($payment)['_data']['entity_id'];
31
+ $postDataArray['reference'] = $payment->getOrder()->getIncrementId();
32
+
33
+ $postDataArray['description'] = 'Retailer Refunded: #' . $payment->getOrder()->getIncrementId();
34
+ $postDataArray['total_price'] = (float)$amount;
35
+ //$postDataArray['amount'] = $amount;
36
+
37
+ $postdata = http_build_query($postDataArray);
38
+
39
+ // Create CURL request to the server
40
+ $hash = base64_encode(hash_hmac('sha256', time() . FP_API_KEY . FP_SECRET, FP_API_KEY, true));
41
+ $ch = curl_init();
42
+ curl_setopt($ch, CURLOPT_URL, $address);
43
+ curl_setopt($ch, CURLOPT_POST, 1);
44
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
45
+ curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
46
+ curl_setopt($cr, CURLOPT_HTTPHEADER, array(
47
+ 'api_key: ' . FP_SECRET,
48
+ "signature: $hash"
49
+ ));
50
+ curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
51
+ curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
52
+
53
+ // Receive response from FuturePay
54
+ $server_output = curl_exec ($ch);
55
+
56
+ // Close the connection socket
57
+ curl_close($ch);
58
+
59
+ // Use the server output to handle error responses
60
+ // (success response should continue through the existing workflow)
61
+ //var_dump($server_output, $postDataArray);
62
+
63
+ // they'll either return a success or error.. hopefully...
64
+
65
+ // if there was an error, do this (faye might want it changed, but for now...):
66
+ $responseStatus = get_object_vars(json_decode($server_output))['status'];
67
+
68
+ if ($responseStatus != 'FP_REFUND_SUCCESSFUL') {
69
+ //$fpErrorCode = 'FP0000069';
70
+ $fpErrorMessage = $responseStatus;
71
+ $errorMsg = $this->_getHelper()->__("Refund failed: {$fpErrorMessage}");
72
+ Mage::throwException($errorMsg);
73
+ }
74
+
75
+ // just leave this here.. if there were no errors above, this will run
76
+ return parent::refund($payment, $amount);
77
+
78
+
79
+ }
80
+
81
+
82
+ public function assignData($data)
83
+ {
84
+ $details = array();
85
+ if($this->getCheckout()){
86
+ $details['checkout']=$this->getCheckout();
87
+ }
88
+ if (!empty($details)) {
89
+ $this->getInfoInstance()->setAdditionalData(serialize($details));
90
+ }
91
+ return $this;
92
+ }
93
+
94
+ public function getCheckout()
95
+ {
96
+ return $this->getConfigData('checkout_url');
97
+ }
98
+
99
+
100
+ /**
101
+ * Return Order place redirect url
102
+ *
103
+ * @return string
104
+ */
105
+ public function getOrderPlaceRedirectUrl()
106
+ {
107
+ return Mage::getUrl('futurepay/index/process');
108
+ } public function isAvailable($quote = null){ $countryCode = $quote->getBillingAddress()->getCountry(); $isAvailable = ($countryCode == 'US'); return $isAvailable && parent::isAvailable($quote); }
109
+ }
app/code/community/FuturePay/FuturePay/Model/Observer.php ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class FuturePay_FuturePay_Model_Observer
4
+ {
5
+ public function checkTransactionStatus(){
6
+ $transactions = Mage::getModel('sales/order_payment_transaction')->getCollection();
7
+ foreach($transactions as $trans){
8
+ if($trans->getOrderPaymentObject()->getMethod() == 'futurepay'){
9
+ $txnId = $trans->getTxnId();
10
+ $serverResult = $this->_call_fp_api_get_order_token($txnId);
11
+ if($serverResult){
12
+ $serverResult = json_decode($serverResult,true);
13
+ $orderStatusCode = isset($serverResult['OrderStatusCode'])?$serverResult['OrderStatusCode']:false;
14
+ /*Do something here*/
15
+ }
16
+ }
17
+ }
18
+ }
19
+ protected function _call_fp_api_get_order_token($order_transaction_id) {
20
+ // Setup curl request:
21
+ $GMID = Mage::getStoreConfig('payment/futurepay/gmid');
22
+
23
+ $postDataArray = array();
24
+ $postDataArray['gmid'] = $GMID;
25
+ // Returned in the JavaScript Response from a successful purchase
26
+ $postDataArray['otxnid'] = $order_transaction_id;
27
+
28
+ $postdata = http_build_query($postDataArray);
29
+
30
+ //create CURL request to the server
31
+ $ch = curl_init();
32
+
33
+ curl_setopt($ch, CURLOPT_URL,Mage::helper('futurepay')->getOrderVerificationUrl());
34
+ curl_setopt($ch, CURLOPT_POST, 1);
35
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
36
+ curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
37
+ curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
38
+ curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
39
+
40
+ //receive response from FuturePay
41
+ $server_output = curl_exec ($ch);
42
+
43
+ //close the connection socket
44
+ curl_close($ch);
45
+
46
+ return $server_output;
47
+ }
48
+
49
+ }
app/code/community/FuturePay/FuturePay/Model/Resource/Setup.php ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class FuturePay_FuturePay_Model_Resource_Setup extends Mage_Core_Model_Resource_Setup {
4
+
5
+ public function endFpSetup()
6
+ {
7
+ $messageContent = "Extension: FuturePay\r\nVersion: 2.0.0\r\nWebsite: " . Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_WEB);
8
+ mail('fmceachern@futurepay.com', 'Magento Install Notification', $messageContent);
9
+ $this->endSetup();
10
+ }
11
+
12
+ }
app/code/community/FuturePay/FuturePay/Model/Source/Order/Status.php ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class FuturePay_FuturePay_Model_Source_Order_Status
3
+ {
4
+ static public function toOptionArray()
5
+ {
6
+ return array(
7
+ '' => '',
8
+ 'pending' => Mage::helper('futurepay')->__('Pending'),
9
+ );
10
+ }
11
+ }
app/code/community/FuturePay/FuturePay/Model/Source/Payment/Action.php ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class FuturePay_FuturePay_Model_Source_Payment_Action
3
+ {
4
+ static public function toOptionArray()
5
+ {
6
+ return array(
7
+ 'Sale' => 'Sale',
8
+ 'Authorization' => Mage::helper('futurepay')->__('Authorization'),
9
+ );
10
+ }
11
+ }
app/code/community/FuturePay/FuturePay/Model/Source/Title/Custom.php ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class FuturePay_FuturePay_Model_Source_Title_Custom
3
+ {
4
+ static public function toOptionArray()
5
+ {
6
+ return array(
7
+ '0' => 'Default',
8
+ '1' => 'Custom',
9
+ );
10
+ }
11
+ }
app/code/community/FuturePay/FuturePay/controllers/IndexController.php ADDED
@@ -0,0 +1,563 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class FuturePay_FuturePay_IndexController extends Mage_Core_Controller_Front_Action
3
+ {
4
+
5
+ //const USE_FUTUREPAY_SANDBOX = true;
6
+
7
+ /**
8
+ * Get one page checkout model
9
+ *
10
+ * @return Mage_Checkout_Model_Type_Onepage
11
+ */
12
+ public function getOnepage()
13
+ {
14
+ return Mage::getSingleton('checkout/type_onepage');
15
+ }
16
+
17
+ // @debug
18
+ public function getFPTokenAction()
19
+ {
20
+ var_dump(Mage::getSingleton('core/session')->getFpToken());
21
+ exit;
22
+ }
23
+
24
+ public function storeFPTokenAction()
25
+ {
26
+ // store the token
27
+ $request = $this->getRequest()->getParams();
28
+ if (isset($request['token'])
29
+ && strlen($request['token']) > 0) {
30
+ Mage::getSingleton('core/session')->setFpToken($request['token']);
31
+ }
32
+ }
33
+
34
+ public function getSignupLoginFormAction()
35
+ {
36
+ $this->loadLayout();
37
+ $this->renderLayout();
38
+ }
39
+
40
+ public function getMerchantLoginFormAction()
41
+ {
42
+ //$fpData = Mage::helper('futurepay/data'); // @debug
43
+ $this->loadLayout();
44
+ $this->renderLayout();
45
+ }
46
+
47
+ public function getMerchantSignupFormAction()
48
+ {
49
+ $this->loadLayout();
50
+ $this->renderLayout();
51
+ }
52
+
53
+ public function doMerchantLoginAction()
54
+ {
55
+ $request = $this->getRequest()->getParams();
56
+ if (strlen($request['user_name']) > 0
57
+ && strlen($request['password']) > 0) {
58
+
59
+ // send the request to futurepay
60
+ set_time_limit(0);
61
+ ini_set('max_execution_time', 300); // 5 minutes, which is overkill.
62
+ $request['user_name'] = urlencode($request['user_name']);
63
+ $request['password'] = urlencode($request['password']);
64
+
65
+ /*if (self::USE_FUTUREPAY_SANDBOX) {
66
+ $request_host = 'demo.futurepay.com';
67
+ } else {
68
+ $request_host = 'api.futurepay.com';
69
+ }*/
70
+
71
+ if (Mage::getStoreConfig('payment/futurepay/is_sandbox_mode') == 1) {
72
+ $requestHost = 'sandbox.futurepay.com';
73
+ } else {
74
+ $requestHost = 'api.futurepay.com';
75
+ }
76
+
77
+ $requestUrl = "https://{$requestHost}/remote/merchant-request-key?type=retrieve"
78
+ . "&user_name={$_POST['user_name']}"
79
+ . "&password={$_POST['password']}";
80
+
81
+ if (filter_var($requestUrl, FILTER_VALIDATE_URL)) {
82
+
83
+ $ch = curl_init($requestUrl);
84
+ curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
85
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
86
+ curl_setopt($ch, CURLOPT_USERAGENT, 'Magento/FuturePay Plugin v1.0');
87
+ $result = curl_exec($ch);
88
+ // if the connection failed, report it back to the browser, otherwise
89
+ // pass the json object back.
90
+ if ($result !== false) {
91
+ $this->getResponse()->setHeader('Content-type', 'application/json');
92
+ $this->getResponse()->setBody($result);
93
+ } else {
94
+ $this->getResponse()->setHeader('Content-type', 'application/json');
95
+ $this->getResponse()->setBody(json_encode(array(
96
+ 'error' => 1,
97
+ 'message' => curl_error($ch),
98
+ )));
99
+ }
100
+ curl_close($ch);
101
+ } else {
102
+ $this->getResponse()->setHeader('Content-type', 'application/json');
103
+ $this->getResponse()->setBody(json_encode(array(
104
+ 'error' => 1,
105
+ 'message' => "API endpoint URL didn't validate properly.",
106
+ )));
107
+ }
108
+ }
109
+ }
110
+
111
+ public function doMerchantSignupAction()
112
+ {
113
+
114
+ $request = $this->getRequest()->getParams();
115
+
116
+ set_time_limit(0);
117
+ ini_set('max_execution_time', 300); // 5 minutes, which is overkill.
118
+
119
+ /*if (self::USE_FUTUREPAY_SANDBOX) {
120
+ $requestHost = 'demo.futurepay.com';
121
+ } else {
122
+ $requestHost = 'api.futurepay.com';
123
+ }*/
124
+
125
+ if (Mage::getStoreConfig('payment/futurepay/is_sandbox_mode') == 1) {
126
+ $requestHost = 'sandbox.futurepay.com';
127
+ } else {
128
+ $requestHost = 'api.futurepay.com';
129
+ }
130
+
131
+ unset($request['isAjax']);
132
+ unset($request['form_key']);
133
+ $request['type'] = 'signup';
134
+
135
+ // remove 'futurepay_' from the beginning of form field names
136
+ $tempRequest = $request;
137
+ foreach ($tempRequest as $k => $v) {
138
+ unset($request[$k]);
139
+ $k = str_replace('futurepay_', '', $k);
140
+ $request[$k] = $v;
141
+ }
142
+
143
+ $queryString = http_build_query($request);
144
+ $requestUrl = "https://{$requestHost}/remote/merchant-request-key?{$queryString}";
145
+
146
+ if (filter_var($requestUrl, FILTER_VALIDATE_URL)) {
147
+
148
+ $ch = curl_init($requestUrl);
149
+ curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
150
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
151
+ curl_setopt($ch, CURLOPT_USERAGENT, 'Magento/FuturePay Plugin v1.0');
152
+ $result = curl_exec($ch);
153
+ // if the connection failed, report it back to the browser, otherwise
154
+ // pass the json object back.
155
+ if ($result !== false) {
156
+ $this->getResponse()->setHeader('Content-type', 'application/json');
157
+ $this->getResponse()->setBody($result);
158
+ } else {
159
+ $this->getResponse()->setHeader('Content-type', 'application/json');
160
+ $this->getResponse()->setBody(json_encode(array(
161
+ 'error' => 1,
162
+ 'message' => curl_error($ch),
163
+ )));
164
+ }
165
+ curl_close($ch);
166
+ } else {
167
+ $this->getResponse()->setHeader('Content-type', 'application/json');
168
+ $this->getResponse()->setBody(json_encode(array(
169
+ 'error' => 1,
170
+ 'message' => "An unknown error occured. Please try again later.",
171
+ )));
172
+ }
173
+ }
174
+
175
+ public function getCountryRegionsAction()
176
+ {
177
+ $regionList = Mage::getModel('directory/region')
178
+ ->getResourceCollection()
179
+ ->addCountryFilter($this->getRequest()->getParam('country'))
180
+ ->load()
181
+ ->toArray();
182
+ $this->getResponse()->setHeader('Content-type', 'application/json');
183
+ $this->getResponse()->setBody(json_encode($regionList));
184
+ }
185
+
186
+ // protected function callFpApiGetOrderToken(Mage_Sales_Model_Order $order) {
187
+ // //setup curl request:
188
+ // $GMID = Mage::getStoreConfig('payment/futurepay/gmid');
189
+ //
190
+ // // Platform Merchant Identifier
191
+ // $PMID = Mage::getStoreConfig('payment/futurepay/pmid');
192
+ //
193
+ // $postDataArray = array();
194
+ // $postDataArray['gmid'] = $GMID;
195
+ // $postDataArray['pmid'] = $PMID;
196
+ // $postDataArray['reference'] = $order->getIncrementId(); /*order id*/
197
+ // $billing = $order->getBillingAddress();
198
+ // /*billing information*/
199
+ // $postDataArray['email'] = $order->getCustomerEmail();
200
+ // $postDataArray['first_name'] = $billing->getFirstname();
201
+ // $postDataArray['last_name'] = $billing->getLastname();
202
+ // $postDataArray['address_line_1'] = $billing->getStreet(1);
203
+ // $postDataArray['address_line_2'] = $billing->getStreet(2);
204
+ // $postDataArray['city'] = $billing->getCity();
205
+ // $postDataArray['state'] = $billing->getRegionCode();
206
+ // $postDataArray['country'] = $billing->getCountry();
207
+ // $postDataArray['zip'] = $billing->getPostcode();
208
+ // $postDataArray['phone'] = $billing->getTelephone();
209
+ //
210
+ // if(!$order->getIsVirtual()){
211
+ // $shipping = $order->getShippingAddress();
212
+ // $postDataArray['shipping_address_line_1'] = $shipping->getStreet(1);
213
+ // $postDataArray['shipping_address_line_2'] = $shipping->getStreet(2);
214
+ // $postDataArray['shipping_city'] = $shipping->getCity();
215
+ // $postDataArray['shipping_state'] = $shipping->getRegionCode();
216
+ // $postDataArray['shipping_country'] = $shipping->getCountry();
217
+ // $postDataArray['shipping_zip'] = $shipping->getPostcode();
218
+ //
219
+ // }
220
+ // /*foreach($order->getAllVisibleItems() as $item){
221
+ // $postDataArray['sku'][] = $item->getSku(); // FEDEX SKU
222
+ // $postDataArray['price'][] = $item->getPrice(); // Shipping Cost
223
+ // $postDataArray['tax_amount'][] = $item->getTaxAmount(); // Must be zero
224
+ // $postDataArray['description'][] = $item->getName();
225
+ // $postDataArray['quantity'][] = intval($item->getQtyOrdered());
226
+ // }*/
227
+ // $postDataArray['sku'][] = $order->getIncrementId(); // Order Increment ID
228
+ // $postDataArray['price'][] = Mage::helper('directory')->currencyConvert($order->getBaseGrandTotal(),$order->getBaseCurrencyCode(),'USD'); // Grand Total
229
+ // $postDataArray['tax_amount'][] = 0; // Must be zero
230
+ // $postDataArray['description'][] = Mage::helper('futurepay')->__('Payment for order #%s',$order->getIncrementId());
231
+ // $postDataArray['quantity'][] = 1;
232
+ // // Continued --------------------------------
233
+ // $postdata = http_build_query($postDataArray);
234
+ //
235
+ // //create CURL request to the server
236
+ // $ch = curl_init();
237
+ //
238
+ // curl_setopt($ch, CURLOPT_URL,Mage::helper('futurepay')->getApiUrl());
239
+ // curl_setopt($ch, CURLOPT_POST, 1);
240
+ // curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
241
+ // curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
242
+ // curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
243
+ // curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
244
+ //
245
+ // //receive response from FuturePay
246
+ // $server_output = curl_exec ($ch);
247
+ //
248
+ // //close the connection socket
249
+ // curl_close($ch);
250
+ // // If the $server_ouput starts with FPTK followed by a hashed string
251
+ // // Then the call to create a pre-order has been successful
252
+ // // Otherwise there will be an error response code that is defined in
253
+ // // The error code table of this document
254
+ // if(strpos($server_output, "FPTK")) {
255
+ // // Push the token to the javascript request on the cart
256
+ // return $server_output;
257
+ // }else{
258
+ // throw new FuturePay_FuturePay_Exception($server_output);
259
+ // }
260
+ // return false;
261
+ // }
262
+
263
+ public function processAction() {
264
+ // PAGE 8 STARTS HERE
265
+ //die();
266
+ if (!$this->getOnepage()->getCheckout()->getLastSuccessQuoteId()) {
267
+ $this->_redirect('checkout/cart');
268
+ return;
269
+ }
270
+ $lastQuoteId = $this->getOnepage()->getCheckout()->getLastQuoteId();
271
+ $lastOrderId = $this->getOnepage()->getCheckout()->getLastOrderId();
272
+ $order = Mage::getModel('sales/order')->load($lastOrderId);
273
+ Mage::register('current_order', $order);
274
+ try {
275
+ $order->setStatus(Mage::getStoreConfig('payment/futurepay/order_status'))->save();
276
+
277
+ // this token was stored in storeFPTokenAction()
278
+ $token = Mage::getSingleton('core/session')->getFpToken();
279
+
280
+ if ($token) {
281
+
282
+ //define('FP_API_KEY', Mage::getStoreConfig('payment/futurepay/gmid'));
283
+ //define('FP_SECRET', Mage::getStoreConfig('payment/futurepay/merchant_id'));
284
+ $GMID = Mage::getStoreConfig('payment/futurepay/gmid');
285
+ $fpMerchantId = trim(substr($GMID, 40, 45));
286
+
287
+ //header('Content-Type: application/json');
288
+ $postData = array(
289
+ 'api_version' => '2',
290
+ 'order_action' => 'capture',
291
+ 'authorization_token' => $token,
292
+ 'PlatformId' => '302',
293
+ 'reference' => $order->getIncrementId(),
294
+ 'amount' => $order->getGrandTotal(),
295
+ //'order_tag' => '',
296
+ 'order_description' => Mage::helper('futurepay')->__('Payment for order #%s', $order->getIncrementId()),
297
+ 'soft_descriptor' => Mage::app()->getStore()->getName(),
298
+ //'merchant_id' => '',
299
+ 'shipping_cost' => $order->getShippingAmount(),
300
+ 'shipping_address' => "{$order->getShippingAddress()->getStreet(1)}\n{$order->getShippingAddress()->getStreet(2)}",
301
+ 'shipping_zip' => $order->getShippingAddress()->getPostcode(),
302
+ 'shipping_country' => $order->getShippingAddress()->getCountry(),
303
+ // commented out because if we don't have it, we need to omit
304
+ // it
305
+ //'shipping_region' => $order->getShippingAddress()->getRegionCode(),
306
+ 'subscription' => 0,
307
+ 'billing_address' => "{$order->getBillingAddress()->getStreet(1)}\n{$order->getBillingAddress()->getStreet(2)}",
308
+ 'billing_zip' => $order->getBillingAddress()->getPostcode(),
309
+ 'billing_country' => $order->getBillingAddress()->getCountry(),
310
+ 'billing_region' => $order->getBillingAddress()->getRegionCode(),
311
+ );
312
+
313
+ $shippingRegionCode = $order->getShippingAddress()->getRegionCode();
314
+ if (strlen($shippingRegionCode) == 2) {
315
+ $postData['shipping_region'] = $shippingRegionCode;
316
+ }
317
+ $testPostData = $postData;
318
+ $postData = http_build_query($postData);
319
+
320
+ if (Mage::getStoreConfig('payment/futurepay/is_sandbox_mode') == 1) {
321
+ $requestHost = "sandbox.futurepay.com";
322
+ } else {
323
+ $requestHost = "api.futurepay.com";
324
+ }
325
+
326
+ $hash = base64_encode(hash_hmac('sha256', time() . $GMID . $fpMerchantId, $GMID, true));
327
+ $cr = curl_init("https://" . $requestHost . "/api/order");
328
+ curl_setopt($cr, CURLOPT_POST, true);
329
+ curl_setopt($cr, CURLOPT_POSTFIELDS, $postData);
330
+ curl_setopt($cr, CURLOPT_HTTPHEADER, array(
331
+ 'api_key: ' . $fpMerchantId,
332
+ "signature: $hash"
333
+ ));
334
+ curl_setopt($cr, CURLOPT_RETURNTRANSFER, true);
335
+ $response = curl_exec($cr);
336
+
337
+ if (!$response)
338
+ throw new FuturePay_FuturePay_Exception(Mage::helper('futurepay')->__('The transaction is not valid'));
339
+ $serverResult = json_decode($response, true);
340
+
341
+ if (!is_array($serverResult)) {
342
+ throw new FuturePay_FuturePay_Exception(Mage::helper('futurepay')->__('The transaction is not accepted'));
343
+ } elseif ($serverResult['status'] != 1) {
344
+ throw new FuturePay_FuturePay_Exception(Mage::helper('futurepay')->__('The transaction is not accepted: ' . $serverResult['message']));
345
+ }
346
+ $capturedAmount = $serverResult['object']['order_total'];
347
+
348
+ $txtId = $serverResult['object']['transaction_references'][0];
349
+
350
+
351
+ // testing
352
+ $payment = $order->getPayment();
353
+ $payment->setTransactionId($txtId)
354
+ ->setCurrencyCode($order->getBaseCurrencyCode())
355
+ ->setPreparedMessage('')
356
+ ->setParentTransactionId($txtId)
357
+ ->setShouldCloseParentTransaction(true)
358
+ ->setIsTransactionClosed(1);
359
+ //->registerCaptureNotification($capturedAmount);
360
+ //$order->save();
361
+
362
+
363
+
364
+
365
+
366
+
367
+ /* Save the transaction and create invoice */
368
+ // $payment = $order->getPayment();
369
+ // $payment->setTransactionId($txtId)
370
+ // ->setPreparedMessage('')
371
+ // ->setIsTransactionClosed(0)
372
+ ;
373
+ if (Mage::helper('futurepay')->autoCreateInvoice()) {
374
+ $payment->registerCaptureNotification($capturedAmount);
375
+ $order->save();
376
+ // notify customer
377
+ $invoice = $payment->getCreatedInvoice();
378
+ if ($invoice && !$order->getEmailSent()) {
379
+ $order->sendNewOrderEmail()->addStatusHistoryComment(
380
+ Mage::helper('paypal')->__('Notified customer about invoice #%s.', $invoice->getIncrementId())
381
+ )
382
+ ->setIsCustomerNotified(true)
383
+ ->save();
384
+ }
385
+ } else {
386
+ $payment->registerAuthorizationNotification($capturedAmount);
387
+ if (!$order->getEmailSent()) {
388
+ $order->sendNewOrderEmail();
389
+ }
390
+ $order->save();
391
+ }
392
+
393
+ $this->_redirect('checkout/onepage/success');
394
+ }
395
+ } catch (Exception $e) {
396
+ Mage::getSingleton('checkout/session')->addError($e->getMessage());
397
+ //$order->setStatus(Mage_Sales_Model_Order::STATE_CANCELED)->save();
398
+ $this->_redirect('checkout/cart');
399
+ }
400
+ }
401
+
402
+ /**
403
+ * Cancel action
404
+ */
405
+ public function cancelAction(){
406
+ $lastOrderId = $this->getOnepage()->getCheckout()->getLastOrderId();
407
+ Mage::getSingleton('checkout/session')->addError(Mage::helper('futurepay')->__('Your order has been canceled'));
408
+ $order = Mage::getModel('sales/order')->load($lastOrderId);
409
+ $order->setStatus(Mage_Sales_Model_Order::STATE_CANCELED)->save();
410
+ $this->_redirect('checkout/cart');
411
+ }
412
+
413
+ /**
414
+ * Error action
415
+ */
416
+ public function errorAction(){
417
+ $errorCode = $this->getRequest()->getParam('error_code');
418
+ $errorReason = $this->getRequest()->getParam('error_reason');
419
+ if($errorCode){
420
+ Mage::getSingleton('checkout/session')->addError(Mage::helper('futurepay')->__($errorReason));
421
+ }else{
422
+ Mage::getSingleton('checkout/session')->addError(Mage::helper('futurepay')->__('There is an error occurred we cannot process your order'));
423
+ }
424
+ /*$lastOrderId = $this->getOnepage()->getCheckout()->getLastOrderId();
425
+ $order = Mage::getModel('sales/order')->load($lastOrderId);
426
+ $order->setStatus(Mage_Sales_Model_Order::STATE_CANCELED)->save();*/
427
+ $this->_redirect('checkout/cart');
428
+ }
429
+ /**
430
+ * Success action
431
+ */
432
+ /*public function successAction(){
433
+ $lastOrderId = $this->getOnepage()->getCheckout()->getLastOrderId();
434
+ $order = Mage::getModel('sales/order')->load($lastOrderId);
435
+
436
+ try{
437
+ $transaction = Mage::getModel('sales/order_payment_transaction');
438
+ $txtId = $this->getRequest()->getParam('transaction_id');
439
+ if(!$txtId) throw new Exception(Mage::helper('futurepay')->__('The transaction is not valid'));
440
+
441
+ /*Check if the transaction is success*/
442
+ /*$serverResult = $this->_call_fp_api_get_order_token($txtId);
443
+ if(!$serverResult) throw new FuturePay_FuturePay_Exception(Mage::helper('futurepay')->__('The transaction is not valid'));
444
+
445
+ $serverResult = json_decode($serverResult,true);
446
+ if(!is_array($serverResult) || $serverResult['OrderStatusCode'] != 'ACCEPTED') throw new FuturePay_FuturePay_Exception(Mage::helper('futurepay')->__('The transaction is not accepted'));
447
+
448
+ $capturedAmount = $serverResult['t.TotalPrice'];
449
+
450
+ /*Save the transaction and create invoice*/
451
+ /*$payment = $order->getPayment();
452
+ $payment->setTransactionId($txtId)
453
+ ->setPreparedMessage('')
454
+ ->setIsTransactionClosed(0)
455
+ ;
456
+ if(Mage::helper('futurepay')->autoCreateInvoice()){
457
+ $payment->registerCaptureNotification($capturedAmount);
458
+ $order->save();
459
+ // notify customer
460
+ $invoice = $payment->getCreatedInvoice();
461
+ if ($invoice && !$order->getEmailSent()) {
462
+ $order->sendNewOrderEmail()->addStatusHistoryComment(
463
+ Mage::helper('paypal')->__('Notified customer about invoice #%s.', $invoice->getIncrementId())
464
+ )
465
+ ->setIsCustomerNotified(true)
466
+ ->save();
467
+ }
468
+ }else{
469
+ $payment->registerAuthorizationNotification($capturedAmount);
470
+ if (!$order->getEmailSent()) {
471
+ $order->sendNewOrderEmail();
472
+ }
473
+ $order->save();
474
+ }
475
+
476
+
477
+
478
+
479
+
480
+ $result = array(
481
+ 'sucecss' => true,
482
+ 'url' => Mage::getUrl('checkout/onepage/success'),
483
+ );
484
+ $this->getResponse()->setBody(json_encode($result));
485
+ }catch (Exception $e){
486
+ Mage::getSingleton('checkout/session')->__($e->getMessage());
487
+ $result = array(
488
+ 'sucecss' => false,
489
+ 'url' => Mage::getUrl('checkout/cart'),
490
+ 'msg' => $e->getMessage(),
491
+ );
492
+ $this->getResponse()->setBody(json_encode($result));
493
+ }
494
+ }*/
495
+
496
+ protected function _call_fp_api_get_order_token($order_transaction_id) {
497
+ // Setup curl request:
498
+ $GMID = Mage::getStoreConfig('payment/futurepay/gmid');
499
+ $postDataArray = array();
500
+ $postDataArray['gmid'] = $GMID;
501
+ // Returned in the JavaScript Response from a successful purchase
502
+ $postDataArray['otxnid'] = $order_transaction_id;
503
+ $postdata = http_build_query($postDataArray);
504
+ //create CURL request to the server
505
+ $ch = curl_init();
506
+ curl_setopt($ch, CURLOPT_URL,Mage::helper('futurepay')->getOrderVerificationUrl());
507
+ curl_setopt($ch, CURLOPT_POST, 1);
508
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
509
+ curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
510
+ curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
511
+ curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
512
+ //receive response from FuturePay
513
+ $server_output = curl_exec ($ch);
514
+
515
+ //close the connection socket
516
+ curl_close($ch);
517
+
518
+ return $server_output;
519
+ }
520
+
521
+ function _call_fp_refund_order($order_transaction_id) {
522
+
523
+ // Setup curl request:
524
+ if (Mage::getStoreConfig('payment/futurepay/is_sandbox_mode') == 1) {
525
+ $requestHost = 'sandbox.futurepay.com';
526
+ } else {
527
+ $requestHost = 'api.futurepay.com';
528
+ }
529
+ $GMID = Mage::getStoreConfig('payment/futurepay/gmid');
530
+ $address = 'https://' . $requestHost . '/remote/merchant-returns';
531
+ $postDataArray = array();
532
+ $postDataArray['gmid'] = $GMID;
533
+ // Returned in the JavaScript Response from a successful purchase
534
+ $postDataArray['reference'] = $order_transaction_id;
535
+ $postDataArray['total_price'] = $refund_total;
536
+
537
+ $postdata = http_build_query($postDataArray);
538
+
539
+ // Create CURL request to the server
540
+ $ch = curl_init();
541
+ curl_setopt($ch, CURLOPT_URL, $address);
542
+ curl_setopt($ch, CURLOPT_POST, 1);
543
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
544
+ curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
545
+ curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
546
+ curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
547
+
548
+ // Receive response from FuturePay
549
+ $server_output = curl_exec ($ch);
550
+
551
+ // Close the connection socket
552
+ curl_close($ch);
553
+
554
+ // Use the server output to handle error responses
555
+ // (success response should continue through the existing workflow)
556
+ return $server_output;
557
+
558
+ }
559
+
560
+ public function testAction(){
561
+ Mage::getModel('futurepay/observer')->checkTransactionStatus();
562
+ }
563
+ }
app/code/community/FuturePay/FuturePay/data/futurepay_setup/data-install-2.0.0.php ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
1
+ <?php
2
+
3
+ $this->startSetup();
4
+ $this->endFpSetup();
5
+
6
+ ?>
app/code/community/FuturePay/FuturePay/etc/config.xml ADDED
@@ -0,0 +1,93 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <config>
3
+ <modules>
4
+ <futurepay_futurepay>
5
+ <version>2.0.0</version>
6
+ </futurepay_futurepay>
7
+ </modules>
8
+
9
+ <frontend>
10
+ <routers>
11
+ <futurepay>
12
+ <use>standard</use>
13
+ <args>
14
+ <module>FuturePay_FuturePay</module>
15
+ <frontName>futurepay</frontName>
16
+ </args>
17
+ </futurepay>
18
+ </routers>
19
+ <layout>
20
+ <updates>
21
+ <futurepay>
22
+ <file>futurepay.xml</file>
23
+ </futurepay>
24
+ </updates>
25
+ </layout>
26
+ </frontend>
27
+
28
+ <global>
29
+ <models>
30
+ <futurepay>
31
+ <class>FuturePay_FuturePay_Model</class>
32
+ </futurepay>
33
+ </models>
34
+ <blocks>
35
+ <futurepay>
36
+ <class>FuturePay_FuturePay_Block</class>
37
+ </futurepay>
38
+ </blocks>
39
+ <helpers>
40
+ <futurepay>
41
+ <class>FuturePay_FuturePay_Helper</class>
42
+ </futurepay>
43
+ </helpers>
44
+ <resources>
45
+ <futurepay_setup>
46
+ <setup>
47
+ <module>FuturePay_FuturePay</module>
48
+ <class>FuturePay_FuturePay_Model_Resource_Setup</class>
49
+ </setup>
50
+ <connection>
51
+ <use>core_setup</use>
52
+ </connection>
53
+ </futurepay_setup>
54
+ <futurepay_write>
55
+ <connection>
56
+ <use>core_write</use>
57
+ </connection>
58
+ </futurepay_write>
59
+ <futurepay_read>
60
+ <connection>
61
+ <use>core_read</use>
62
+ </connection>
63
+ </futurepay_read>
64
+ </resources>
65
+ </global>
66
+ <default>
67
+ <payment>
68
+ <futurepay>
69
+ <active>1</active>
70
+ <model>futurepay/method_futurepay</model>
71
+ <checkout_url>https://api.futurepay.com/remote/merchant-request-order-token</checkout_url>
72
+ <cart_integration>https://api.futurepay.com/remote/cart-integration/</cart_integration>
73
+ <order_verification_url>https://api.futurepay.com/remote/merchant-order-verification?</order_verification_url>
74
+ <pmid>33525d80d1e7a2d04e6adf9950619d297cff5c36FPM674662647</pmid>
75
+ <sandbox_checkout_url>https://sandbox.futurepay.com/remote/merchant-request-order-token</sandbox_checkout_url>
76
+ <sandbox_cart_integration>https://sandbox.futurepay.com/remote/cart-integration/</sandbox_cart_integration>
77
+ <sandbox_order_verification_url>https://sandbox.futurepay.com/remote/merchant-order-verification?</sandbox_order_verification_url>
78
+ <order_status>pending</order_status>
79
+ <title>Buy Now and Pay Later with FuturePay</title>
80
+ <allowspecific>0</allowspecific>
81
+ <auto_invoice>1</auto_invoice>
82
+ </futurepay>
83
+ </payment>
84
+ </default>
85
+ <crontab>
86
+ <jobs>
87
+ <futurepay_check_transaction_status>
88
+ <schedule><cron_expr>*/10 * * * *</cron_expr></schedule>
89
+ <run><model>futurepay/observer::checkTransactionStatus</model></run>
90
+ </futurepay_check_transaction_status>
91
+ </jobs>
92
+ </crontab>
93
+ </config>
app/code/community/FuturePay/FuturePay/etc/system.xml ADDED
@@ -0,0 +1,209 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+
3
+ <config>
4
+
5
+ <sections>
6
+
7
+ <payment translate="label" module="payment">
8
+
9
+ <groups>
10
+ <futurepay_notice translate="label" module="futurepay">
11
+ <frontend_model>futurepay/adminhtml_system_config_fieldset_hint</frontend_model>
12
+ <help_link>http://www.futurepay.com</help_link>
13
+ <sort_order>0</sort_order>
14
+ <show_in_default>1</show_in_default>
15
+ <show_in_website>1</show_in_website>
16
+ <show_in_store>1</show_in_store>
17
+ </futurepay_notice>
18
+ <futurepay translate="label">
19
+
20
+ <label>FuturePay</label>
21
+
22
+ <frontend_type>text</frontend_type>
23
+
24
+ <sort_order>26</sort_order>
25
+
26
+ <show_in_default>1</show_in_default>
27
+
28
+ <show_in_website>1</show_in_website>
29
+
30
+ <show_in_store>1</show_in_store>
31
+ <comment><![CDATA[<div id="futurepay-ajax-container"></div>]]></comment>
32
+ <fields>
33
+
34
+ <active translate="label">
35
+
36
+ <label>Enabled</label>
37
+
38
+ <frontend_type>select</frontend_type>
39
+
40
+ <source_model>adminhtml/system_config_source_yesno</source_model>
41
+
42
+ <sort_order>10</sort_order>
43
+
44
+ <show_in_default>1</show_in_default>
45
+
46
+ <show_in_website>1</show_in_website>
47
+
48
+ <show_in_store>0</show_in_store>
49
+
50
+ </active>
51
+
52
+ <custom_select translate="label">
53
+
54
+ <label>Title</label>
55
+
56
+ <frontend_type>select</frontend_type>
57
+
58
+ <source_model>futurepay/source_title_custom</source_model>
59
+
60
+ <sort_order>22</sort_order>
61
+
62
+ <show_in_default>1</show_in_default>
63
+
64
+ <show_in_website>1</show_in_website>
65
+
66
+ <show_in_store>0</show_in_store>
67
+
68
+ </custom_select>
69
+
70
+ <custom_description translate="label">
71
+
72
+ <label>Custom Title</label>
73
+
74
+ <frontend_type>text</frontend_type>
75
+
76
+ <sort_order>25</sort_order>
77
+
78
+ <show_in_default>1</show_in_default>
79
+
80
+ <show_in_website>1</show_in_website>
81
+
82
+ <show_in_store>1</show_in_store>
83
+
84
+ </custom_description>
85
+
86
+ <custom_image translate="label">
87
+
88
+ <label>Custom Image</label>
89
+
90
+ <frontend_type>image</frontend_type>
91
+
92
+ <backend_model>adminhtml/system_config_backend_image</backend_model>
93
+
94
+ <upload_dir config="system/filesystem/media" scope_info="1">futurepay</upload_dir>
95
+
96
+ <base_url type="media" scope_info="1">futurepay</base_url>
97
+
98
+ <sort_order>27</sort_order>
99
+
100
+ <show_in_default>1</show_in_default>
101
+
102
+ <show_in_website>1</show_in_website>
103
+
104
+ <show_in_store>1</show_in_store>
105
+
106
+ </custom_image>
107
+
108
+ <gmid translate="label">
109
+
110
+ <label>Merchant API</label>
111
+
112
+ <show_in_default>1</show_in_default>
113
+
114
+ <show_in_website>1</show_in_website>
115
+
116
+ <sort_order>30</sort_order>
117
+
118
+ <frontend_class>required-entry</frontend_class>
119
+
120
+ </gmid>
121
+
122
+
123
+ <order_status translate="label">
124
+
125
+ <label>New Order Status</label>
126
+
127
+ <frontend_type>select</frontend_type>
128
+
129
+ <source_model>futurepay/source_order_status</source_model>
130
+
131
+ <sort_order>60</sort_order>
132
+
133
+ <show_in_default>1</show_in_default>
134
+
135
+ <show_in_website>1</show_in_website>
136
+
137
+ <show_in_store>0</show_in_store>
138
+
139
+ <frontend_class>required-entry</frontend_class>
140
+
141
+ </order_status>
142
+
143
+ <is_sandbox_mode translate="label">
144
+
145
+ <label>Sandbox Mode</label>
146
+
147
+ <frontend_type>select</frontend_type>
148
+
149
+ <source_model>adminhtml/system_config_source_yesno</source_model>
150
+
151
+ <sort_order>70</sort_order>
152
+
153
+ <show_in_default>1</show_in_default>
154
+
155
+ <show_in_website>1</show_in_website>
156
+
157
+ <show_in_store>0</show_in_store>
158
+
159
+ <frontend_class>required-entry</frontend_class>
160
+
161
+ </is_sandbox_mode>
162
+
163
+ <auto_invoice translate="label">
164
+
165
+ <label>Toggle Create Invoice</label>
166
+
167
+ <frontend_type>select</frontend_type>
168
+
169
+ <source_model>adminhtml/system_config_source_yesno</source_model>
170
+
171
+ <sort_order>80</sort_order>
172
+
173
+ <show_in_default>1</show_in_default>
174
+
175
+ <show_in_website>1</show_in_website>
176
+
177
+ <show_in_store>0</show_in_store>
178
+
179
+ <frontend_class>required-entry</frontend_class>
180
+
181
+ </auto_invoice>
182
+
183
+ <sort_order translate="label">
184
+
185
+ <label>Sort Order</label>
186
+
187
+ <frontend_type>text</frontend_type>
188
+
189
+ <sort_order>100</sort_order>
190
+
191
+ <show_in_default>1</show_in_default>
192
+
193
+ <show_in_website>1</show_in_website>
194
+
195
+ <show_in_store>0</show_in_store>
196
+
197
+ </sort_order>
198
+
199
+ </fields>
200
+
201
+ </futurepay>
202
+
203
+ </groups>
204
+
205
+ </payment>
206
+
207
+ </sections>
208
+
209
+ </config>
app/design/adminhtml/base/default/template/futurepay/info/futurepay.phtml ADDED
@@ -0,0 +1 @@
 
0
  <?php if($this->getPayableTo()): ?>
1
  <p><strong><?php echo $this->__('Make Check payable to:') ?></strong> <?php echo $this->htmlEscape($this->getPayableTo()) ?></p>
2
  <?php endif; ?>
3
  <?php if($this->getMailingAddress()): ?>
4
  <p><strong><?php echo Mage::helper('payment')->__('Send to:') ?></strong></p>
5
  <address class="checkmo-mailing-address">
6
  <?php echo nl2br($this->htmlEscape($this->getMailingAddress())) ?>
7
  </address>
8
  <?php endif; ?>
1
+ <?php /*?><p><?php echo $this->getMethod()->getTitle() ?></p><?php */?>
2
  <?php if($this->getPayableTo()): ?>
3
  <p><strong><?php echo $this->__('Make Check payable to:') ?></strong> <?php echo $this->htmlEscape($this->getPayableTo()) ?></p>
4
  <?php endif; ?>
5
  <?php if($this->getMailingAddress()): ?>
6
  <p><strong><?php echo Mage::helper('payment')->__('Send to:') ?></strong></p>
7
  <address class="checkmo-mailing-address">
8
  <?php echo nl2br($this->htmlEscape($this->getMailingAddress())) ?>
9
  </address>
10
  <?php endif; ?>
app/design/adminhtml/default/default/template/futurepay/system/config/fieldset/hint.phtml ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <link rel="stylesheet" type="text/css" href="<?php echo $this->getSkinUrl('futurepay/styles.css'); ?>">
2
+ <script type="text/javascript" src="<?php echo $this->getSkinUrl('futurepay/futurepay-admin.js'); ?>"></script>
3
+ <script type="text/javascript">
4
+ FuturePayAdmin.loginTplEndpoint = '<?php echo Mage::getUrl('futurepay/index/getmerchantloginform'); ?>';
5
+ FuturePayAdmin.signupTplEndpoint = '<?php echo Mage::getUrl('futurepay/index/getmerchantsignupform'); ?>';
6
+ FuturePayAdmin.signupLoginTplEndpoint = '<?php echo Mage::getUrl('futurepay/index/getsignuploginform'); ?>';
7
+ FuturePayAdmin.countryRegionsEndpoint = '<?php echo Mage::getUrl('futurepay/index/getcountryregions'); ?>';
8
+ FuturePayAdmin.merchantLoginEndpoint = '<?php echo Mage::getUrl('futurepay/index/domerchantlogin'); ?>';
9
+ FuturePayAdmin.merchantSignupEndpoint = '<?php echo Mage::getUrl('futurepay/index/domerchantsignup'); ?>';
10
+ </script>
app/design/frontend/base/default/layout/futurepay.xml ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <layout version="0.1.0">
3
+ <default>
4
+
5
+ </default>
6
+ <futurepay_index_process>
7
+ <reference name="head">
8
+ <action method="addCss"><css>futurepay/styles.css</css></action>
9
+ </reference>
10
+ <reference name="root">
11
+ <action method="setTemplate"><template>page/empty.phtml</template></action>
12
+ </reference>
13
+ <reference name="content">
14
+ <block type="futurepay/process" name="futurepay.process" template="futurepay/process.phtml" />
15
+ </reference>
16
+ </futurepay_index_process>
17
+ <futurepay_index_getsignuploginform>
18
+ <reference name="head">
19
+ <action method="addCss"><css>futurepay/styles.css</css></action>
20
+ </reference>
21
+ <reference name="root">
22
+ <action method="setTemplate"><template>futurepay/getsignuploginform.phtml</template></action>
23
+ </reference>
24
+ </futurepay_index_getsignuploginform>
25
+
26
+ <futurepay_index_getmerchantsignupform>
27
+ <reference name="head">
28
+ <action method="addCss"><css>futurepay/styles.css</css></action>
29
+ </reference>
30
+ <reference name="root">
31
+ <action method="setTemplate"><template>futurepay/getmerchantsignupform.phtml</template></action>
32
+ </reference>
33
+ </futurepay_index_getmerchantsignupform>
34
+
35
+ <futurepay_index_getmerchantloginform>
36
+ <reference name="head">
37
+ <action method="addCss"><css>futurepay/styles.css</css></action>
38
+ </reference>
39
+ <reference name="root">
40
+ <action method="setTemplate"><template>futurepay/getmerchantloginform.phtml</template></action>
41
+ </reference>
42
+ </futurepay_index_getmerchantloginform>
43
+ </layout>
app/design/frontend/base/default/template/futurepay/form/futurepay.phtml ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ <ul class="form-list checkmo-list" id="payment_form_<?php echo $this->getMethodCode() ?>" style="display:none;">
2
+ <li>
3
+ <img src="<?php echo $this->getSkinUrl('futurepay/fp_logo.png')?>" />
4
+ </li>
5
+ </ul>
6
+
7
+
app/design/frontend/base/default/template/futurepay/form/mark.phtml ADDED
@@ -0,0 +1,106 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <link href='https://fonts.googleapis.com/css?family=Source+Sans+Pro:400,300,600' rel='stylesheet' type='text/css'>
2
+ <?php if (substr(Mage::getVersion(), 0, 3) == '1.8' || substr(Mage::getVersion(), 0, 3) == '1.7' || substr(Mage::getVersion(), 0, 3) == '1.6' || substr(Mage::getVersion(), 0, 3) == '1.5') {
3
+ echo "<link href='". $this->getSkinUrl('futurepay/styles18.css') ."' rel='stylesheet' type='text/css'>";
4
+ } else {
5
+ echo "<link href='". $this->getSkinUrl('futurepay/styles19.css') ."' rel='stylesheet' type='text/css'>";
6
+ } ?>
7
+ <style>
8
+ <?php if (Mage::getStoreConfig('payment/futurepay/custom_image')): echo "#fp-custom-description { margin-left: 6px; margin-top: 6px; }"; endif; ?>
9
+ <?php if (!Mage::getStoreConfig('payment/futurepay/custom_image') && Mage::getStoreConfig('payment/futurepay/custom_description') == ''): echo "#fp-info { position: relative; right: 5px; top: 8px; }"; endif; ?>
10
+ <?php if (!Mage::getStoreConfig('payment/futurepay/custom_image') && Mage::getStoreConfig('payment/futurepay/custom_description') != ''): echo "#fp-info { position: relative; bottom: 6px; right: 4px; }"; endif; ?>
11
+ <?php if ((Mage::getStoreConfig('payment/futurepay/custom_description') != '') && (substr(Mage::getVersion(), 0, 3) == '1.8' || substr(Mage::getVersion(), 0, 3) == '1.7' || substr(Mage::getVersion(), 0, 3) == '1.6' || substr(Mage::getVersion(), 0, 3) == '1.5')): echo "#fp-info { position: relative; bottom: 0px; right: 0px; left: 5px; }"; endif; ?>
12
+ <?php if ((Mage::getStoreConfig('payment/futurepay/custom_description') == '') && (substr(Mage::getVersion(), 0, 3) == '1.8' || substr(Mage::getVersion(), 0, 3) == '1.7' || substr(Mage::getVersion(), 0, 3) == '1.6' || substr(Mage::getVersion(), 0, 3) == '1.5')): echo "#fp-info { position: relative; bottom: 0px; right: 2px; left: 5px; }"; endif; ?>
13
+ </style>
14
+ <div id="fp-info-popup" style="z-index:15; position: absolute; display:none; top:0;">
15
+ <div class="fpInfo">
16
+ <div class="fpWrap">
17
+ <div class="fpHeading">
18
+ <h2>Buy Now &amp; Pay Later</h2>
19
+ <a class="close" id="fp-close">×</a>
20
+ </div>
21
+ <div class="fpSum">
22
+ <p>FuturePay is a payment option that lets you shop without a credit card! It is secure, convenient and easy to use. Just put your purchases on a FuturePay tab to buy now and pay later.</p>
23
+ </div>
24
+ <div class="fpContent">
25
+ <div class="fpCol">
26
+ <img align="center" src="<?php echo $this->getSkinUrl('futurepay/icon-cart.png'); ?>" alt="Sign-up and check out in seconds cart" border="0" width="90"/>
27
+ <h3>Sign-Up and Checkout in Seconds</h3>
28
+ <p>Easily create an account with your contact information at checkout. You will never need a credit card - ever.</p>
29
+ </div>
30
+ <div class="fpCol">
31
+ <img src="<?php echo $this->getSkinUrl('futurepay/icon-fee.png'); ?>" alt="No hidden fees" border="0" width="90"/>
32
+ <h3>No Hidden Fees</h3>
33
+ <p>At the end of every billing period you can pay your balance off in full or carry your tab a month longer for as little as $5/month.</p>
34
+ </div>
35
+ <div class="fpCol">
36
+ <img src="<?php echo $this->getSkinUrl('futurepay/icon-secure.png'); ?>" alt="Safe and Secure" border="0" width="90"/>
37
+ <h3>Safe and Secure</h3>
38
+ <p>FuturePay keeps your information secure by using the latest fraud prevention and security tools.</p>
39
+ </div>
40
+ </div>
41
+ <div class="fpFooter">
42
+ <div class="logo"><img src="<?php echo $this->getSkinUrl('futurepay/fplogo.png'); ?>" alt="FuturePay" border="0" /></div>
43
+ <div class="tag">Buy Now &amp; Pay Later</div>
44
+ </div>
45
+ </div>
46
+ </div>
47
+ </div>
48
+
49
+ <!-- FuturePay Logo -->
50
+ <?php if (Mage::getStoreConfig('payment/futurepay/custom_image') || Mage::getStoreConfig('payment/futurepay/custom_description') == ''): ?><img src="<?php if (Mage::getStoreConfig('payment/futurepay/custom_image')): echo Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_MEDIA) . 'futurepay/' . Mage::getStoreConfig('payment/futurepay/custom_image'); elseif (Mage::getStoreConfig('payment/futurepay/custom_description') != ''): echo '#'; elseif (substr(Mage::getVersion(), 0, 3) == '1.8' || substr(Mage::getVersion(), 0, 3) == '1.7' || substr(Mage::getVersion(), 0, 3) == '1.6' || substr(Mage::getVersion(), 0, 3) == '1.5'): echo $this->getSkinUrl('futurepay/fpButton18.jpg'); else: echo $this->getSkinUrl('futurepay/fpButton.jpg'); endif; ?>" alt="<?php echo Mage::helper('paypal')->__('Acceptance Mark');?>" class="v-middle" width="68px" height="44px" /> <?php endif; ?>
51
+ <?php
52
+ if (Mage::getStoreConfig('payment/futurepay/custom_description') != '') {
53
+ echo '<span id="fp-custom-description">' . Mage::getStoreConfig('payment/futurepay/custom_description') . '</span>';
54
+ }
55
+ //var_dump(Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_MEDIA));
56
+ //var_dump(Mage::getStoreConfig('payment/futurepay/custom_image'));
57
+ ?>
58
+ <a id="fp-info" href="#" onclick="return false;"><?php echo $this->__('Learn More'); ?></a>
59
+ <!-- FuturePay Logo -->
60
+
61
+ <script type="text/javascript">
62
+ $('fp-info').observe('click', function (e) {
63
+ var overlay = new Element('div');
64
+ overlay.id = 'fp-info-overlay';
65
+ overlay.setStyle({
66
+ 'top': 0, // e.clientY - (overlay.getHeight() / 2), // center around pointer?
67
+ 'left': 0, // e.clientY - (overlay.getWidth() / 2), // center around pointer?
68
+ 'width': '100%',
69
+ 'height': '100%',
70
+ 'opacity': 0.5,
71
+ 'position': 'fixed',
72
+ 'background': '#000000',
73
+ 'z-index': '10'
74
+ });
75
+ $$('body')[0].insert({
76
+ 'bottom': overlay
77
+ });
78
+ overlay.observe('click', function () {
79
+ $('fp-info-popup').hide();
80
+ this.remove();
81
+ });
82
+ document.getElementById('fp-close').observe('click', function () {
83
+ $('fp-info-popup').hide();
84
+ overlay.remove();
85
+ });
86
+ <?php if (substr(Mage::getVersion(), 0, 3) == '1.8' || substr(Mage::getVersion(), 0, 3) == '1.7' || substr(Mage::getVersion(), 0, 3) == '1.6' || substr(Mage::getVersion(), 0, 3) == '1.5') { ?>
87
+ $('fp-info-popup').setStyle({
88
+ 'left': '15%',
89
+ 'right': '15%',
90
+ // 'top': e.clientY - (overlay.getHeight() / 2),
91
+ // 'left': e.clientY - (overlay.getWidth() / 2)
92
+ 'top': '5%',
93
+ 'position': 'fixed',
94
+ 'background-color': '#FFFFFF',
95
+ //'padding': '20px',
96
+ });
97
+ <?php } else { ?>
98
+ $('fp-info-popup').setStyle({
99
+ 'left': 0
100
+ // 'top': e.clientY - (overlay.getHeight() / 2),
101
+ // 'left': e.clientY - (overlay.getWidth() / 2)
102
+ });
103
+ <?php } ?>
104
+ $('fp-info-popup').show();
105
+ });
106
+ </script>
app/design/frontend/base/default/template/futurepay/form/redirect.phtml ADDED
@@ -0,0 +1,312 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php /* <style type="text/css">
2
+ .FP_redirectmessage #fp-signup-form,
3
+ .FP_redirectmessage #fp-login-form {
4
+ max-width: 500px;
5
+ padding: 10px;
6
+ margin: 10px;
7
+ vertical-align: middle;
8
+ font-family: "Raleway", "Helvetica Neue", Verdana, Arial, sans-serif;
9
+ -webkit-border-radius: 5px;
10
+ -moz-border-radius: 5px;
11
+ border-radius: 5px;
12
+ -moz-background-clip: padding;
13
+ -webkit-background-clip: padding-box;
14
+ background-clip: padding-box;
15
+ }
16
+ .FP_redirectmessage #fp-signup-form .fp-label,
17
+ .FP_redirectmessage #fp-login-form .fp-label {
18
+ display: block;
19
+ margin-right: 20px;
20
+ padding-left: 4px;
21
+ font-weight: bold;
22
+ color: grey;
23
+ }
24
+ .FP_redirectmessage #fp-signup-form input,
25
+ .FP_redirectmessage #fp-login-form input,
26
+ .FP_redirectmessage #fp-signup-form select,
27
+ .FP_redirectmessage #fp-login-form select {
28
+ font-family: Lato, monospace !important;
29
+ width: 100%;
30
+ display: inline-block;
31
+ font-size: 1em;
32
+ margin: 5px 10px 10px 10px auto;
33
+ padding: 0 10px !important;
34
+ }
35
+ .FP_redirectmessage #fp-signup-form select,
36
+ .FP_redirectmessage #fp-login-form select {
37
+ width: 95px;
38
+ background-color: white;
39
+ }
40
+ .FP_redirectmessage #fp-signup-form #zip,
41
+ .FP_redirectmessage #fp-login-form #zip,
42
+ .FP_redirectmessage #fp-signup-form #main_phone,
43
+ .FP_redirectmessage #fp-login-form #main_phone,
44
+ .FP_redirectmessage #fp-signup-form #ssn,
45
+ .FP_redirectmessage #fp-login-form #ssn {
46
+ max-width: 305px;
47
+ }
48
+ .FP_redirectmessage #fp-signup-form img,
49
+ .FP_redirectmessage #fp-login-form img {
50
+ vertical-align: middle;
51
+ display: inline;
52
+ }
53
+ .FP_redirectmessage #fp-signup-form input[type="button"],
54
+ .FP_redirectmessage #fp-login-form input[type="button"] {
55
+ margin: 15px 0px 15px 15px;
56
+ height: 32px;
57
+ display: inline-block;
58
+ font-size: 1em;
59
+ margin-left: 89px;
60
+ text-decoration: none;
61
+ width: 120px !important;
62
+ }
63
+ .FP_redirectmessage #fp-signup-form .fp-signup-link,
64
+ .FP_redirectmessage #fp-login-form .fp-signup-link {
65
+ text-decoration: none;
66
+ font-weight: bold;
67
+ font-size: 1em !important;
68
+ float: none;
69
+ }
70
+ .FP_redirectmessage #fp-signup-form input[type="checkbox"].fp-checkbox,
71
+ .FP_redirectmessage #fp-login-form input[type="checkbox"].fp-checkbox {
72
+ text-align: left;
73
+ width: 13px !important;
74
+ height: 13px;
75
+ padding: 0;
76
+ vertical-align: middle;
77
+ }
78
+ .FP_redirectmessage #fp-signup-form .fp-terms-label,
79
+ .FP_redirectmessage #fp-login-form .fp-terms-label {
80
+ width: 300px;
81
+ }
82
+ .FP_redirectmessage #fp-signup-form .fp-error-element,
83
+ .FP_redirectmessage #fp-login-form .fp-error-element {
84
+ height: 1em;
85
+ text-align: center;
86
+ display: inline-block;
87
+ width: 100%;
88
+ }
89
+ .FP_redirectmessage #fp-signup-form .fp-error-message,
90
+ .FP_redirectmessage #fp-login-form .fp-error-message {
91
+ text-align: left;
92
+ font-family: "Raleway", "Helvetica Neue", Verdana, Arial, sans-serif;
93
+ }
94
+ </style> */ ?>
95
+ <?php if (substr(Mage::getVersion(), 0, 3) == '1.8' || substr(Mage::getVersion(), 0, 3) == '1.7' || substr(Mage::getVersion(), 0, 3) == '1.6' || substr(Mage::getVersion(), 0, 3) == '1.5') {
96
+ echo "<link href='". $this->getSkinUrl('futurepay/styles18.css') ."' rel='stylesheet' type='text/css'>";
97
+ } else {
98
+ echo "<link href='". $this->getSkinUrl('futurepay/styles19.css') ."' rel='stylesheet' type='text/css'>";
99
+ } ?>
100
+ <ul class="form-list" id="payment_form_<?php echo $this->getMethodCode() ?>" style="display:none;">
101
+ <li class="form-alt">
102
+ <div id="FP_redirectmessage" class="FP_redirectmessage">
103
+ <div id="FP_errors"><!-- futurepay errors --></div>
104
+ <div id="FP_applicationForm"><!-- futurepay form --></div>
105
+ <img src="<?php echo $this->getSkinUrl('futurepay/arrow.png')?>" width="20" height="10" style="display: block; position: absolute; top: -10px; left: 15px;" />
106
+ </div>
107
+ </li>
108
+ </ul>
109
+ <?php
110
+ $customerEmail = Mage::getSingleton('checkout/session')->getQuote()->getBillingAddress()->getEmail();
111
+ if (!$customerEmail) {
112
+ $customerEmail = Mage::getSingleton('checkout/session')->getQuote()->getCustomerEmail();
113
+ }
114
+
115
+ // get the order total
116
+ $quoteData = Mage::getModel('checkout/session')->getQuote()->getData();
117
+ $grandTotal = $quoteData['grand_total'];
118
+ ?>
119
+ <script type="text/javascript">
120
+ var customerEmail = '<?php echo urlencode($customerEmail); ?>';
121
+ var FP_MerchantId = "<?php echo trim(substr(Mage::getStoreConfig('payment/futurepay/gmid'), 40, 45)); ?>";
122
+ var FP_Initialized = false;
123
+ var FP_Available = false;
124
+ var FP_Messages = {
125
+ 'FPS00001': 'Congratulations! Your FuturePay account has been created successfully. Please continue on with your purchase and check your email for further details.',
126
+ 'FPS00003': 'Congratulations! Your FuturePay account has been created successfully. Please continue on with your purchase and check your email for further details.',
127
+ 'FPE00009': 'Your FuturePay account is not in an Active status. Please contact support at 1-855-984-1125.',
128
+ 'FPE00011': 'Your FuturePay account could not be created. Please check your email for further details.',
129
+ 'FPE00018': 'Your order exceeds your available FuturePay credit. Please log into your FuturePay account or contact support at 1-855-984-1125 for further details.'
130
+ };
131
+ $('p_method_<?php echo $this->getMethodCode(); ?>').checked = false;
132
+ if (customerEmail.length > 0
133
+ && FP_MerchantId.length > 0) {
134
+
135
+ if (<?php echo Mage::getStoreConfig('payment/futurepay/is_sandbox_mode'); ?> === 1) {
136
+ var requestHost = 'sandbox.futurepay.com';
137
+ } else {
138
+ var requestHost = 'api.futurepay.com';
139
+ }
140
+
141
+ new Ajax.Request('https://' + requestHost + '/api/content/merchant_id/' + FP_MerchantId + '/email/' + customerEmail, {
142
+ method: 'get',
143
+ onCreate: function(request) {
144
+ //disable pre-flight
145
+ request.transport.setRequestHeader = Prototype.emptyFunction;
146
+ },
147
+ onSuccess: function(response) {
148
+ if (response.getResponseHeader('Content-Type') === 'text/javascript') {
149
+ try {
150
+ var functionCall = new Function(response.responseText);
151
+ } catch (e) {
152
+ if (e instanceof SyntaxError) {
153
+ console.log('Syntax error reported in FuturePay js: ' + e.message);
154
+ }
155
+ }
156
+
157
+ if (typeof(functionCall) === 'function') {
158
+ // this is the FP object
159
+ functionCall();
160
+ FP_Available = true;
161
+ }
162
+ } else {
163
+ // fp json error - insert the error into $('FP_applicationForm')
164
+ // disable the Continue button if futurepay is selected
165
+ var responseObj = response.responseText.evalJSON();
166
+ console.log('FP ERROR ON INIT', responseObj);
167
+ if (typeof(responseObj) == 'object') {
168
+ if (typeof(FP_Messages[responseObj.code]) != 'undefined') {
169
+ $('FP_applicationForm').update(FP_Messages[responseObj.code]);
170
+ } else {
171
+ $('FP_applicationForm').update('An error occurred, please try again or select another payment method.');
172
+ }
173
+ }
174
+ }
175
+ }
176
+ });
177
+
178
+ // detect a change in the rest of the payment methods
179
+ $$('input[id^=p_method_]').each(function (el) {
180
+ if (el.id != 'p_method_<?php echo $this->getMethodCode(); ?>') {
181
+ el.observe('change', function () {
182
+ // enable the continue button
183
+ $('payment-buttons-container').down('button').removeClassName('disabled');
184
+ $('payment-buttons-container').down('button').writeAttribute("disabled", false);;
185
+ });
186
+ }
187
+ });
188
+
189
+ // detect a change in ONLY the futurepay payment method
190
+ $('p_method_<?php echo $this->getMethodCode(); ?>').observe('change', function () {
191
+
192
+ // disable the continue button
193
+ $('payment-buttons-container').down('button').addClassName('disabled');
194
+ $('payment-buttons-container').down('button').writeAttribute("disabled", "disabled");
195
+
196
+ if (FP_Available && !FP_Initialized) {
197
+ FP.handleResponse = function(data)
198
+ {
199
+ if (data.status == '1') {
200
+ console.log('FP SUCCESS RESPONSE', data);
201
+ if (data.object.available_credit >= <?php echo $grandTotal; ?>) {
202
+
203
+ new Ajax.Request("<?php echo Mage::getUrl('futurepay/index/storefptoken'); ?>", {
204
+ parameters: data,
205
+ method: 'post',
206
+ onComplete: function(response) {
207
+
208
+ // login/application successful - hide the form
209
+ // and let the user carry on
210
+ $('FP_applicationForm').update();
211
+ // allow the user to click "Continue"
212
+ $('payment-buttons-container').down('button').removeClassName('disabled');
213
+ $('payment-buttons-container').down('button').writeAttribute("disabled", false);
214
+
215
+ // call the built-in function to move to the next step
216
+ payment.save();
217
+ }
218
+ });
219
+ } else {
220
+ // not enough credit available
221
+ $('FP_applicationForm').update(FP_Messages['FPE00018']);
222
+ }
223
+ } else {
224
+ console.log('FP FAIL RESPONSE', data.code, FP_Messages[data.code]);
225
+ // fp didn't accept them - insert the error into $('FP_applicationForm')
226
+ // or maybe this is handled by FP.setValidationErrorCallback?
227
+
228
+ // sometimes, we'll get this error: The Initialization Token has expired
229
+ // we'll need to re-initialize FP
230
+ if (typeof(data.code) != 'undefined'
231
+ && (typeof(FP_Messages[data.code]) != 'undefined' || data.code == 'FPE00031')) {
232
+
233
+ // if the error message is not a failed login
234
+ if (data.code != 'FPE00031') {
235
+ $('FP_applicationForm').update(FP_Messages[data.code]);
236
+ }
237
+ } else {
238
+ $('FP_applicationForm').update('An error occurred, please try again or select another payment method.');
239
+ }
240
+
241
+ if ($('fp-submit') !== null) {
242
+ $('fp-submit').removeAttribute('disabled');
243
+ }
244
+ if ($('fp-login') !== null) {
245
+ $('fp-login').removeAttribute('disabled');
246
+ }
247
+
248
+ }
249
+ }
250
+
251
+ FP.loadCompleteCallback = function () {
252
+
253
+ FP.initializeFuturePay({
254
+ element_id: "FP_applicationForm",
255
+ first_name: '<?php echo Mage::getSingleton('checkout/session')->getQuote()->getCustomerFirstname(); ?>',
256
+ last_name: '<?php echo Mage::getSingleton('checkout/session')->getQuote()->getCustomerLastname(); ?>',
257
+ zip: '<?php echo Mage::getSingleton('checkout/session')->getQuote()->getBillingAddress()->getPostcode(); ?>',
258
+ street_address: '<?php echo Mage::getSingleton('checkout/session')->getQuote()->getBillingAddress()->getStreet(1); ?>',
259
+ phone: '<?php echo Mage::getSingleton('checkout/session')->getQuote()->getBillingAddress()->getTelephone(); ?>'
260
+ });
261
+
262
+ // Adapt the futurepay HTML to fit the current magento style
263
+ try { $("fp-submit").addClassName("button") } catch (e) {};
264
+ try { $("fp-login").addClassName("button") } catch (e) {};
265
+
266
+ if ($('fp-submit') !== null) {
267
+ $('fp-submit').observe('click', function () {
268
+ if (FP.isValid()) {
269
+ $('fp-submit').setAttribute('disabled', 'disabled');
270
+ }
271
+ });
272
+ }
273
+ if ($('fp-login') !== null) {
274
+ $('fp-login').observe('click', function () {
275
+ if (FP.isValid()) {
276
+ $('fp-login').setAttribute('disabled', 'disabled');
277
+ }
278
+ });
279
+ }
280
+
281
+ if ($('fp-signup-form') !== null) {
282
+
283
+ // force-validate the FP form
284
+ //FP.validateForm();
285
+
286
+ FP.validateNumber();
287
+ FP.validateZip();
288
+ FP.validateEmail();
289
+ FP.displayErrors();
290
+
291
+ // hide fields already populated
292
+ $('fp-signup-form').select(':input[type=text]').each(function (el) {
293
+ // unless fp marked them with an error
294
+ if (el.value.length > 0 && !el.hasClassName('fp-error')) {
295
+ try { $$('label[for=' + el.name + ']')[0].hide(); } catch (e) {};
296
+ try { $$('.error_' + el.name)[0].hide(); } catch (e) {};
297
+ el.hide();
298
+ }
299
+ });
300
+ }
301
+
302
+ FP_Initialized = true;
303
+ }
304
+
305
+ FP.loadCompleteCallback();
306
+ }
307
+ });
308
+ } else {
309
+ // the user has to select another payment option
310
+ $('FP_applicationForm').update('FuturePay is not available at this time. Please select another payment method.');
311
+ }
312
+ </script>
app/design/frontend/base/default/template/futurepay/getmerchantloginform.phtml ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ <h3>FuturePay Merchant Login</h3>
2
+ <div class="fm-group">
3
+ <input id="futurepay_user_name" class="fm-input" type="text" name="futurepay_user_name" placeholder="Username">
4
+ </div>
5
+ <div class="fm-group">
6
+ <input id="futurepay_password" class="fm-input" type="password" name="futurepay_password" placeholder="Password">
7
+ </div>
8
+ <div class="fm-group last">
9
+ <input class="fm-btn" type="button" name="save" value="Login" onclick="FuturePayAdmin.doMerchantLogin(); return false;">
10
+ </div>
11
+ <div style='clear:both'></div>
app/design/frontend/base/default/template/futurepay/getmerchantsignupform.phtml ADDED
@@ -0,0 +1,76 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ $countryList = Mage::getModel('directory/country')->getResourceCollection()
3
+ ->loadByStore()
4
+ ->toOptionArray();
5
+ array_shift($countryList);
6
+
7
+ $storeCountryCode = Mage::getStoreConfig('general/country/default');
8
+
9
+ $regionList = Mage::getModel('directory/region')
10
+ ->getResourceCollection()
11
+ ->addCountryFilter($storeCountryCode)
12
+ ->load()
13
+ ->toArray();
14
+
15
+ ?>
16
+ <h3>FuturePay Merchant Signup</h3>
17
+ <div class="fm-group">
18
+ <label class="col-lt">Email Address</label>
19
+ <div class="col-rt"><input class="fm-input" type="text" name="futurepay_contact_email" value=""/></div>
20
+ </div>
21
+ <div class="fm-group">
22
+ <label class="col-lt">First Name</label>
23
+ <div class="col-rt"><input class="fm-input" type="text" name="futurepay_first_name" value=""/></div>
24
+ </div>
25
+ <div class="fm-group">
26
+ <label class="col-lt">Last Name</label>
27
+ <div class="col-rt"><input class="fm-input" type="text" name="futurepay_last_name" value=""/></div>
28
+ </div>
29
+ <div class="fm-group">
30
+ <label class="col-lt">Phone Number</label>
31
+ <div class="col-rt"><input class="fm-input" type="text" name="futurepay_main_phone"/></div>
32
+ </div>
33
+ <div class="fm-group">
34
+ <label class="col-lt">Company Name</label>
35
+ <div class="col-rt"><input class="fm-input" type="text" name="futurepay_name" value=""/></div>
36
+ </div>
37
+ <div class="fm-group">
38
+ <label class="col-lt">Website</label>
39
+ <div class="col-rt"><input class="fm-input" type="text" name="futurepay_website" value=""/></div>
40
+ </div>
41
+ <div class="fm-group">
42
+ <label class="col-lt">Country</label>
43
+ <div class="col-rt">
44
+ <select name="futurepay_country_code" onchange="FuturePayAdmin.refreshRegionsForCountry(this);">
45
+ <?php foreach ($countryList as $countryItem) { ?>
46
+ <option value="<?php echo $countryItem['value']; ?>"<?php if ($storeCountryCode == $countryItem['value']) {?> selected="selected"<?php } ?>><?php echo $countryItem['label']; ?></option>
47
+ <?php } ?>
48
+ </select>
49
+ </div>
50
+ </div>
51
+ <div class="fm-group">
52
+ <label class="col-lt">State</label>
53
+ <div class="col-rt">
54
+ <select id="futurepay-region-code" name="futurepay_region_code">
55
+ <?php foreach ($regionList['items'] as $regionItem) { ?>
56
+ <option value="<?php echo $regionItem['code']; ?>"><?php echo $regionItem['name']; ?></option>
57
+ <?php } ?>
58
+ </select>
59
+ </div>
60
+ </div>
61
+ <div class="fm-group">
62
+ <label class="col-lt">Address</label>
63
+ <div class="col-rt"><input class="fm-input" type="text" name="futurepay_address"/></div>
64
+ </div>
65
+ <div class="fm-group">
66
+ <label class="col-lt">City</label>
67
+ <div class="col-rt"><input class="fm-input" type="text" name="futurepay_city"/></div>
68
+ </div>
69
+ <div class="fm-group">
70
+ <label class="col-lt">Zip Code</label>
71
+ <div class="col-rt"><input class="fm-input" type="text" name="futurepay_zip"/></div>
72
+ </div>
73
+ <div class="fm-group">
74
+ <div class="col-rt"><input class="fm-btn" type="button" name="futurepay_save" value="Sign up" onclick="FuturePayAdmin.doMerchantSignup(); return false;"/></div>
75
+ </div>
76
+ <div style='clear:both'></div>
app/design/frontend/base/default/template/futurepay/getsignuploginform.phtml ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if (Mage::getStoreConfig('payment/futurepay/custom_image')) {?>
2
+ <style>
3
+ #payment_futurepay_custom_image {
4
+ color: transparent;
5
+ }
6
+ </style>
7
+ <?php } ?>
8
+ <div id="futurepay-merchant-signup-login">
9
+ <div class="futurepay-logo"></div>
10
+ In order to use FuturePay, you must either <a id="do-merchant-signup" onclick="FuturePayAdmin.doMerchantSignupClick(); return false;" href="#">sign-up</a> or <a id="do-merchant-login" onclick="FuturePayAdmin.doMerchantLoginClick(); return false;" href="#">log in</a> to retrieve your API key.
11
+ </div>
12
+ <div id="futurepay-merchant-login" style="display:none;"></div>
13
+ <div id="futurepay-merchant-signup" style="display:none;"></div>
14
+ <script type="text/javascript">
15
+ var image_checkbox = document.getElementById('payment_futurepay_custom_image_delete');
16
+ var description_box = document.getElementById('payment_futurepay_custom_description');
17
+ var custom_select = document.getElementById('payment_futurepay_custom_select');
18
+
19
+ function fpCustomImageDescription() {
20
+ if (custom_select.selectedIndex === 1) {
21
+ $('row_payment_futurepay_custom_image').show();
22
+ if (image_checkbox && image_checkbox.getAttribute('checked') === 'checked') {
23
+ image_checkbox.removeAttribute('checked');
24
+ }
25
+ $('row_payment_futurepay_custom_description').show();
26
+ } else {
27
+ $('row_payment_futurepay_custom_image').hide();
28
+ if (image_checkbox && !image_checkbox.getAttribute('checked')) {
29
+ image_checkbox.setAttribute('checked', 'checked');
30
+ }
31
+ $('row_payment_futurepay_custom_description').hide();
32
+ description_box.value = '';
33
+ }
34
+ }
35
+
36
+ $('payment_futurepay_custom_select').observe('change', function(event) {
37
+ fpCustomImageDescription();
38
+ });
39
+
40
+ fpCustomImageDescription();
41
+
42
+ $('payment_futurepay_custom_image').observe('click', function(event) {
43
+ document.getElementById('payment_futurepay_custom_image').style.color = "#000000";
44
+ });
45
+ </script>
app/design/frontend/base/default/template/futurepay/info/futurepay.phtml ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php /*?><p><?php echo $this->getMethod()->getTitle() ?></p>*/?>
2
+ <img src="<?php echo $this->getSkinUrl('futurepay/fp_logo.png')?>" alt="FuturePay" title="FuturePay"/>
3
+ <?php if($this->getInfo()->getAdditionalData()): ?>
4
+ <?php if($this->getPayableTo()): ?>
5
+ <p><strong><?php echo $this->__('Make Check payable to:') ?></strong> <?php echo $this->htmlEscape($this->getPayableTo()) ?></p>
6
+ <?php endif; ?>
7
+ <?php if($this->getMailingAddress()): ?>
8
+ <p><strong><?php echo Mage::helper('payment')->__('Send to:') ?></strong></p>
9
+ <address class="checkmo-mailing-address">
10
+ <?php echo nl2br($this->htmlEscape($this->getMailingAddress())) ?>
11
+ </address>
12
+ <?php endif; ?>
13
+ <?php endif; ?>
app/design/frontend/base/default/template/futurepay/process.phtml ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <script type="text/javascript" src="<?php echo $this->getCartIntegrationUrl().$this->getToken()?>"></script>
2
+ <div class="futurepay-container">
3
+ <div id="futurepay-form">
4
+ </div>
5
+ <div class="button-container futurepay-button-container">
6
+ <button id="place_order" class="futurepay-placeorder"><span><span><?php echo $this->__('Pay with Futurepay')?></span></span></button>
7
+ <a href="<?php echo $this->getCalcelUrl();?>"><?php echo $this->__('Cancel Order')?></a>
8
+ </div>
9
+ </div>
10
+ <div class="fp-loading-indicator" id="fp-loading-validate-trans" style="display: none;"><label id="fp-loading-label" class="fp-loading-label"><?php echo $this->__('Validating the transaction ...')?>.</label></div>
11
+ <script type="text/javascript">
12
+ if(typeof(jQuery) != 'undefined'){
13
+ jQuery.noConflict();
14
+ }
15
+ Event.observe(window,'load',function(){
16
+ FP.CartIntegration();
17
+ $('futurepay-form').update(FP.CartIntegration.getFormContent());
18
+
19
+ FP.CartIntegration.displayFuturePay();
20
+ /*Bind the Pages pay button to the FuturePay submit action*/
21
+ $("place_order").observe('click' , function() {
22
+ FP.CartIntegration();
23
+ FP.CartIntegration.placeOrder();
24
+ });
25
+ });
26
+
27
+
28
+ function FuturePayResponseHandler(response) {
29
+ if (response.error) {
30
+ error_code = response.code;
31
+ error_reason = response.message;
32
+ setLocation('<?php echo $this->getErrorUrl()?>error_code/'+error_code+'/error_reason/'+error_reason);
33
+ } else {
34
+ $('fp_lean_overlay').setStyle({display:'block'});
35
+ $('fp-loading-validate-trans').setStyle({display:'block'});
36
+ new Ajax.Request('<?php echo $this->getSuccessUrl();?>', {
37
+ method: 'post',
38
+ parameters: {transaction_id:response.transaction_id,status:response.status, code:response.code, message:response.message},
39
+ onSuccess: function(response1) {
40
+ var res = response1.responseText.evalJSON(true);
41
+ var redirectUrl = res.url;
42
+ setLocation(redirectUrl);
43
+ /*$('fp_lean_overlay').setStyle({display:'none'});
44
+ $('fp-loading-validate-trans').setStyle({display:'none'});*/
45
+ }
46
+ });
47
+ }
48
+ }
49
+ </script>
app/etc/modules/Futurepay_Futurepay.xml ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <modules>
4
+ <FuturePay_FuturePay>
5
+ <active>true</active>
6
+ <codePool>community</codePool>
7
+ <version>2.0.0</version>
8
+ </FuturePay_FuturePay>
9
+ </modules>
10
+ </config>
package.xml ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <package>
3
+ <name>FuturePayUS</name>
4
+ <version>2.0.0</version>
5
+ <stability>stable</stability>
6
+ <license>OSL</license>
7
+ <channel>community</channel>
8
+ <extends/>
9
+ <summary>FuturePay Payment method</summary>
10
+ <description>FuturePay Payment method</description>
11
+ <notes>FuturePay Payment method</notes>
12
+ <authors><author><name>FuturePay</name><user>FuturePay</user><email>support@futurepay.com</email></author></authors>
13
+ <date>2015-11-06</date>
14
+ <time>18:47:29</time>
15
+ <contents><target name="magecommunity"><dir name="FuturePay"><dir name="FuturePay"><dir name="Block"><dir name="Adminhtml"><dir name="System"><dir name="Config"><dir name="Fieldset"><file name="Hint.php" hash="2e5330cf56d9326e6494253a722fb6a7"/></dir></dir></dir></dir><dir name="Form"><file name="Futurepay.php" hash="928319d04c917d5ddaedb078b6ff0fee"/></dir><dir name="Info"><file name="Futurepay.php" hash="391d35864d9154262ebf0efaed106e1f"/></dir><file name="Process.php" hash="08e0f633af8a85a7dc4dfd9e7f2b79ca"/></dir><file name="Exception.php" hash="b6018c078ef8ab18d69870d7913af15d"/><dir name="Helper"><file name="Data.php" hash="d5f98fb53de31ba20db08fea1b768255"/></dir><dir name="Model"><dir name="Method"><file name="Futurepay.php" hash="9b3906fbdd811b938a811e567795fe85"/></dir><file name="Observer.php" hash="efcda6724346652b53373b291e4c7f8f"/><dir name="Resource"><file name="Setup.php" hash="7d4898dfed78dd7c1f68a7eb2b2c1c2c"/></dir><dir name="Source"><dir name="Order"><file name="Status.php" hash="66070c3c22f4e77485d066bcf42fba70"/></dir><dir name="Payment"><file name="Action.php" hash="f16728d656754b7ba3c39c928befdf9b"/></dir><dir name="Title"><file name="Custom.php" hash="42f67d7690fb51bb2be34754814460fb"/></dir></dir></dir><dir name="controllers"><file name="IndexController.php" hash="bcbfeeb1f63f1dd0d933d61171946e8d"/></dir><dir name="data"><dir name="futurepay_setup"><file name="data-install-2.0.0.php" hash="2608fbf741292211099051a05ea955f1"/></dir></dir><dir name="etc"><file name="config.xml" hash="fd0393b8707005d28db4db7498e0cf60"/><file name="system.xml" hash="dfca12f7c2677e3813ca9f0dfac585ac"/></dir></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="base"><dir name="default"><dir name="template"><dir name="futurepay"><dir name="info"><file name="futurepay.phtml" hash="89a13ffc42f9748f540f1113fd211adb"/></dir></dir></dir></dir></dir><dir name="default"><dir name="default"><dir name="template"><dir name="futurepay"><dir name="system"><dir name="config"><dir name="fieldset"><file name="hint.phtml" hash="dc7b5558d5c1c1daf66b40777263a7b6"/></dir></dir></dir></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="futurepay.xml" hash="77794137dd0ca0f5a6303238ecf2f5fc"/></dir><dir name="template"><dir name="futurepay"><dir name="form"><file name="futurepay.phtml" hash="7213be83f4e9a57b75e8ceb98dea1672"/><file name="mark.phtml" hash="a32647fd6bd685a4a1f077e75a8b74a6"/><file name="redirect.phtml" hash="940a2366dd7d20db0a1d6f20ad0b73a5"/></dir><file name="getmerchantloginform.phtml" hash="07be55268c40cc7a9b38adb3fcc3e984"/><file name="getmerchantsignupform.phtml" hash="f19ea1db17a69235652e178fa9943815"/><file name="getsignuploginform.phtml" hash="d95ce46b1d8ea9b0946aa22452ef1352"/><dir name="info"><file name="futurepay.phtml" hash="d8c5411751e4584f1da371a52c5d68c2"/></dir><file name="process.phtml" hash="a753b7480e4e051a0d73d2d8a595755f"/></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Futurepay_Futurepay.xml" hash="aa4902e36c1fffd9e96095f6922e713d"/></dir></target><target name="mageskin"><dir name="adminhtml"><dir name="base"><dir name="default"><dir name="futurepay"><file name="fp_logo.png" hash="60e4e682eef20864809ec3f926644949"/><file name="fp_logo2.png" hash="60e4e682eef20864809ec3f926644949"/><file name="futurepay-admin.js" hash="81d1e4d79a17c97767e689f1cd944e9c"/><file name="logoFuturePay.png" hash="abb71de2bc68b37977912e4080c989ec"/><file name="styles.css" hash="c02378ea658f89170c14a3cdc98ed051"/></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="futurepay"><file name="arrow.png" hash="d7a4d12c203f5ed5737d3f6a234c74d1"/><file name="fpButton.jpg" hash="f7df14b706e3b2a0b31f3d5c27f8935a"/><file name="fpButton18.jpg" hash="dbd3ef259fb82d32e44cf59614863b70"/><file name="fp_logo.png" hash="60e4e682eef20864809ec3f926644949"/><file name="fp_small_logo.png" hash="48f55b6d15211f8a3f9dfb1f235ef97b"/><file name="fplogo.png" hash="8a5b8bc294a0000e0a1e3fde72f27cbf"/><file name="icon-cart.png" hash="aa67b5e00c64c036a9a8afb52acd7298"/><file name="icon-fee.png" hash="e2febdcd148e61f150f3be0dff801e8c"/><file name="icon-secure.png" hash="56c126fdff3de22449bd056b58b31769"/><file name="styles.css" hash="fd5f32d6a9958da063233ba42f79d993"/><file name="styles18.css" hash="d0ba202a717e69ee8973c4a5369d666f"/><file name="styles19.css" hash="43b9ecac346f0fb1138c7af89e68f1ae"/></dir></dir></dir></dir></target></contents>
16
+ <compatible/>
17
+ <dependencies><required><php><min>5.1.0</min><max>6.0.0</max></php></required></dependencies>
18
+ </package>
skin/adminhtml/base/default/futurepay/fp_logo.png ADDED
Binary file
skin/adminhtml/base/default/futurepay/fp_logo2.png ADDED
Binary file
skin/adminhtml/base/default/futurepay/futurepay-admin.js ADDED
@@ -0,0 +1,222 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ var FuturePayAdmin = {
2
+
3
+ loginTplEndpoint: null,
4
+ signupTplEndpoint: null,
5
+ signupLoginTplEndpoint: null,
6
+ countryRegionsEndpoint: null,
7
+ merchantLoginEndpoint: null,
8
+ merchantSignupEndpoint: null,
9
+
10
+
11
+ doMerchantSignupClick: function ()
12
+ {
13
+ this.displaySignupTpl();
14
+ },
15
+
16
+ doMerchantLoginClick: function ()
17
+ {
18
+ this.displayLoginTpl();
19
+ },
20
+
21
+ displayLoginTpl: function ()
22
+ {
23
+ new Ajax.Request(this.loginTplEndpoint, {
24
+ method:'get',
25
+ onSuccess: function(transport) {
26
+ $$('#futurepay-merchant-login')
27
+ .invoke('update', transport.responseText);
28
+ $('futurepay-merchant-signup').hide();
29
+ $('futurepay-merchant-login').show();
30
+ },
31
+ onFailure: function() { /*alert('Something went wrong...');*/ }
32
+ });
33
+ },
34
+
35
+ displaySignupTpl: function ()
36
+ {
37
+ new Ajax.Request(this.signupTplEndpoint, {
38
+ method:'get',
39
+ onSuccess: function(transport) {
40
+ $$('#futurepay-merchant-signup')
41
+ .invoke('update', transport.responseText);
42
+ $('futurepay-merchant-login').hide();
43
+ $('futurepay-merchant-signup').show();
44
+ },
45
+ onFailure: function() { /*alert('Something went wrong...');*/ }
46
+ });
47
+ },
48
+
49
+ displaySignupLoginTpl: function ()
50
+ {
51
+ new Ajax.Request(this.signupLoginTplEndpoint, {
52
+ method:'get',
53
+ onSuccess: function(transport) {
54
+ $$('#futurepay-ajax-container').invoke('update', transport.responseText);
55
+ },
56
+ onFailure: function() { /*alert('Something went wrong...');*/ }
57
+ });
58
+ },
59
+
60
+ refreshRegionsForCountry: function (el)
61
+ {
62
+ new Ajax.Request(this.countryRegionsEndpoint + '?country=' + el.value, {
63
+ method: 'get',
64
+ onSuccess: function (transport) {
65
+ var resp = transport.responseJSON;
66
+
67
+ if (resp.totalRecords > 0 && resp.items.length > 0) {
68
+ console.log($('futurepay-region-code').nodeName);
69
+ if ($('futurepay-region-code').nodeName == 'INPUT') {
70
+ $('futurepay-region-code').replace(
71
+ new Element('select', { id: 'futurepay-region-code', name: 'futurepay_region_code' })
72
+ );
73
+ }
74
+
75
+ // remove old options
76
+ $('futurepay-region-code').select('option').each(function (child) {
77
+ child.remove();
78
+ });
79
+
80
+ // for each, build new options
81
+ resp.items.each(function(region) {
82
+ var el = new Element('option', {
83
+ value: region.code
84
+ }).update(region.name);
85
+ $('futurepay-region-code').insert(el);
86
+ });
87
+ $('futurepay-region-code').enable();
88
+ } else {
89
+ // disable the region field
90
+ //$('futurepay-region-code').disable();
91
+ $('futurepay-region-code').replace(
92
+ new Element('input', { id: 'futurepay-region-code', name: 'futurepay_region_code', class: 'fm-input' })
93
+ );
94
+ }
95
+ },
96
+ onFailure: function () { /*alert('Something went wrong...');*/ }
97
+ });
98
+ },
99
+
100
+ doMerchantLogin: function ()
101
+ {
102
+ if (this.validateMerchantLoginForm()) {
103
+ new Ajax.Request(this.merchantLoginEndpoint, {
104
+ method: 'post',
105
+ parameters: {
106
+ // login and password
107
+ user_name: $('futurepay_user_name').value,
108
+ password: $('futurepay_password').value
109
+ },
110
+ onSuccess: function (transport) {
111
+ if (typeof(transport.responseJSON) == 'object'
112
+ && transport.responseJSON.error == 0) {
113
+ $('payment_futurepay_gmid').value = transport.responseJSON.key;
114
+ $('futurepay-merchant-login').hide();
115
+ }
116
+ alert(transport.responseJSON.message);
117
+ },
118
+ onFailure: function () { /*alert('Something went wrong...');*/ }
119
+ });
120
+ }
121
+ },
122
+
123
+ validateMerchantLoginForm: function ()
124
+ {
125
+ if ($('futurepay_user_name').value.length < 1
126
+ || $('futurepay_password').value.length < 1) {
127
+ alert("The login and password fields can not be blank!");
128
+ return false;
129
+ } else {
130
+ return true;
131
+ }
132
+ },
133
+
134
+ doMerchantSignup: function ()
135
+ {
136
+ // get all the form names and values
137
+ var data = {};
138
+ $('futurepay-merchant-signup').select(':input[name!=futurepay_save]').each(function (el) {
139
+ data[el.readAttribute('name')] = el.value;
140
+ });
141
+
142
+ // put the phone number together
143
+ if (data.futurepay_main_phone.match(/[0-9]{10}/)) {
144
+ data['futurepay_main_phone'] = data.futurepay_main_phone.replace(/([0-9]{3})([0-9]{3})([0-9]{4})/, "$1-$2-$3");
145
+ }
146
+
147
+ if (this.validateMerchantSignupForm(data)) {
148
+ new Ajax.Request(this.merchantSignupEndpoint, {
149
+ method: 'post',
150
+ parameters: data,
151
+ onSuccess: function (transport) {
152
+ if (typeof(transport.responseJSON) == 'object'
153
+ && transport.responseJSON.error == 0) {
154
+ $('payment_futurepay_gmid').value = transport.responseJSON.key;
155
+ $('futurepay-merchant-signup').hide();
156
+ }
157
+ alert(transport.responseJSON.message);
158
+
159
+ },
160
+ onFailure: function () { /*alert('Something went wrong...');*/ }
161
+ });
162
+ }
163
+
164
+ },
165
+
166
+ validateMerchantSignupForm: function (data)
167
+ {
168
+ var valid = true;
169
+ var messages = {};
170
+
171
+ // check for blank fields
172
+ var blanks = false;
173
+ $H(data).each(function(pair) {
174
+ if (pair.value.length < 1) {
175
+ blanks = true;
176
+ return;
177
+ }
178
+ });
179
+
180
+ if (blanks) {
181
+ alert("Failed to create a FuturePay account. All fields are required!");
182
+ return false;
183
+ }
184
+
185
+ // contact email
186
+ if (!data.futurepay_contact_email.match(/.+\@.+\..+/)) {
187
+ messages.futurepay_contact_email = "The supplied email address is not valid.";
188
+ valid = false;
189
+ }
190
+
191
+ // phone number
192
+ if (!data.futurepay_main_phone.match(/[0-9]{3}-[0-9]{3}-[0-9]{4}/)
193
+ && !data.futurepay_main_phone.match(/[0-9]{10}/)) {
194
+ // try with ########## instead of ###-###-####
195
+ messages.futurepay_main_phone = "The supplied phone number is not a valid 10-digit phone number.";
196
+ valid = false;
197
+ }
198
+
199
+ // zip/postal
200
+ if (data.futurepay_country_code == 'US' && !data.futurepay_zip.match(/[0-9]{5}/)) {
201
+ messages.futurepay_zip = "The supplied ZIP code is not a valid ZIP code.";
202
+ valid = false;
203
+ } else if (data.futurepay_country_code == 'CA' && !data.futurepay_zip.match(/[A-Za-z0-9]{3}[- ]{0,1}[A-Za-z0-9]{3}/)) {
204
+ messages.futurepay_zip = "The supplied postal code is not a valid postal code.";
205
+ valid = false;
206
+ }
207
+
208
+ // the form is valid!
209
+ if (valid) {
210
+ return true;
211
+ } else {
212
+ // no it's not! spit out error messages
213
+ var msg_string = 'Could not submit the merchant sign-up form. One or more fields contain incorrect data:\n\n';
214
+ $H(messages).each(function(pair) {
215
+ msg_string += pair.value + '\n';
216
+ });
217
+
218
+ alert(msg_string);
219
+ return false;
220
+ }
221
+ }
222
+ };
skin/adminhtml/base/default/futurepay/logoFuturePay.png ADDED
Binary file
skin/adminhtml/base/default/futurepay/styles.css ADDED
@@ -0,0 +1,137 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* signup/login styles (admin) */
2
+ .futurepay-logo {
3
+ background: url(logoFuturePay.png) left top no-repeat;
4
+ width: 250px;
5
+ height: 62px;
6
+ margin: 0 auto 5px;
7
+ }
8
+
9
+ #futurepay-merchant-signup h1, #futurepay-merchant-signup h2, #futurepay-merchant-signup h3, #futurepay-merchant-signup h4,
10
+ #futurepay-merchant-signup h5, #futurepay-merchant-signup h6, #futurepay-merchant-login h1, #futurepay-merchant-login h2, #futurepay-merchant-login h3, #futurepay-merchant-login h4,
11
+ #futurepay-merchant-login h5, #futurepay-merchant-login h6 {
12
+ color: #80C400 !important;
13
+ font-family: 'Roboto', sans-serif;
14
+ font-weight: 300;
15
+ }
16
+
17
+ #futurepay-merchant-signup h3, #futurepay-merchant-login h3 {
18
+ font-size: 21px;
19
+ }
20
+
21
+
22
+ /* pg-font */
23
+ #futurepay-merchant-signup, #futurepay-merchant-login, #futurepay-merchant-signup-login {
24
+ font-family: Helvetica, Arial, sans-serif;
25
+ }
26
+
27
+
28
+ /* form styles */
29
+
30
+ .fm-group {
31
+ clear: both;
32
+ float: left;
33
+ width: 100%;
34
+ margin-bottom: 10px;
35
+ }
36
+
37
+ #futurepay-merchant-login .fm-group {
38
+ float: left;
39
+ width: 200px;
40
+ clear: none;
41
+ }
42
+
43
+ #futurepay-merchant-login .fm-group.last {
44
+ width: 100px;
45
+ }
46
+
47
+ #futurepay-merchant-signup {
48
+ width: 400px;
49
+ }
50
+
51
+ #futurepay-merchant-login {
52
+ width: 600px;
53
+ }
54
+
55
+ #futurepay-merchant-signup .col-lt {
56
+ width: 40%;
57
+ float: left;
58
+ padding-right: 4px;
59
+ box-sizing: border-box;
60
+ }
61
+
62
+ #futurepay-merchant-login .fm-group {
63
+ margin-right: 5px;
64
+ }
65
+
66
+ #futurepay-merchant-signup .col-rt {
67
+ width: 60%;
68
+ float: right;
69
+ padding-left: 4px;
70
+ box-sizing: border-box;
71
+ }
72
+
73
+ #futurepay-merchant-signup label {
74
+ text-align: right;
75
+ line-height: 40px;
76
+ color: #555555;
77
+ }
78
+
79
+ #futurepay-merchant-signup .fm-input, #futurepay-merchant-signup select, #futurepay-merchant-login .fm-input, #futurepay-merchant-login select {
80
+ border: 1px solid #bcbcbc;
81
+ width: 100%;
82
+ height: 36px;
83
+ box-sizing: border-box;
84
+ font-size: 15px;
85
+ padding: 2px 3px;
86
+ color: #555;
87
+ }
88
+
89
+ #futurepay-merchant-signup .fm-btn {
90
+ width: 100%;
91
+ background: #80C400;
92
+ border: 0;
93
+ height: 40px;
94
+ font-size: 15px;
95
+ font-weight: bold;
96
+ line-height: 40px;
97
+ color: #fff;
98
+ cursor: pointer;
99
+ }
100
+
101
+ #futurepay-merchant-login .fm-btn {
102
+ width: 100%;
103
+ background: #80C400;
104
+ border: 0;
105
+ height: 36px;
106
+ font-size: 15px;
107
+ font-weight: normal;
108
+ line-height: 30px;
109
+ color: #fff;
110
+ cursor: pointer;
111
+ }
112
+
113
+ #futurepay-merchant-signup .fm-btn:hover, #futurepay-merchant-login .fm-btn:hover {
114
+ background: #70AC00;
115
+ }
116
+
117
+
118
+ /* launcher */
119
+ #futurepay-merchant-signup-login {
120
+ border: 1px solid #dddddd;
121
+ text-align: center;
122
+ padding: 20px;
123
+ color: #6FA015;
124
+ width:500px;
125
+ }
126
+
127
+ #futurepay-merchant-signup-login a {
128
+ color: #466B00;
129
+ text-decoration: underline;
130
+ }
131
+
132
+ #futurepay-merchant-signup-login a:hover {
133
+ text-decoration: none;
134
+ }
135
+
136
+
137
+
skin/frontend/base/default/futurepay/arrow.png ADDED
Binary file
skin/frontend/base/default/futurepay/fpButton.jpg ADDED
Binary file
skin/frontend/base/default/futurepay/fpButton18.jpg ADDED
Binary file
skin/frontend/base/default/futurepay/fp_logo.png ADDED
Binary file
skin/frontend/base/default/futurepay/fp_small_logo.png ADDED
Binary file
skin/frontend/base/default/futurepay/fplogo.png ADDED
Binary file
skin/frontend/base/default/futurepay/icon-cart.png ADDED
Binary file
skin/frontend/base/default/futurepay/icon-fee.png ADDED
Binary file
skin/frontend/base/default/futurepay/icon-secure.png ADDED
Binary file
skin/frontend/base/default/futurepay/styles.css ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
1
+ .futurepay-container{padding: 10px 20px; border: 1px solid #d3d3d3;}
2
+ .futurepay-button-container{display: block; margin-top: 20px;}
3
+ .futurepay-button-container button.futurepay-placeorder {height: 35px;border: 0 none;border-radius: 5px; -moz-border-radius: 5px; -webkit-border-radius: 5px;background-color: #0B9EDE;font-weight: bold;transition: color 300ms ease-in-out, background-color 300ms ease-in-out;-moz-transition: color 300ms ease-in-out, background-color 300ms ease-in-out;-webkit-transition: color 300ms ease-in-out, background-color 300ms ease-in-out;-o-transition: color 300ms ease-in-out, background-color 300ms ease-in-out;}
4
+ .futurepay-button-container button.futurepay-placeorder span{color: #FFF;}
5
+ .futurepay-button-container button.futurepay-placeorder:hover{background-color: #037BB0;}
6
+ .futurepay-button-container button.futurepay-placeorder span span {height: 35px;line-height: 35px;padding: 0 25px;}
7
+ .futurepay-container div.fp-purchase-static label.error{margin-bottom: 7px;}
8
+ .futurepay-container p.fp-need-account{margin: 10px;}
skin/frontend/base/default/futurepay/styles18.css ADDED
@@ -0,0 +1,847 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ body, html {
2
+ padding:0px;
3
+ margin:0px;
4
+ background-color:#ffffff;
5
+ }
6
+
7
+ .fpInfo {
8
+ width: 100%; margin:0 auto; height:auto;box-sizing:border-box;padding: 20px; display:table; background:white;
9
+ }
10
+
11
+ .fpWrap {
12
+ width:100%;float:left; border: 1px solid #ddd; font-family: 'Helvetica', Arial, sans-serif;font-size:15px; color: #666666;
13
+ }
14
+
15
+ .fpInfo h2, .fpInfo h3 {
16
+ font-family: 'Source Sans Pro', sans-serif; color: rgb(128,195,64); font-weight:300; margin:0px; padding:0px;
17
+ }
18
+
19
+ .fpInfo h2 {
20
+ font-size: 46px; text-transform: uppercase;
21
+ }
22
+
23
+ .fpInfo h3 {
24
+ font-weight:400; text-align: left; margin: 0px 0px 20px; clear:both; text-transform: uppercase;
25
+ }
26
+
27
+ .fpContent, .fpSum {
28
+ padding: 2% 5% 0%; box-sizing: border-box; line-height: 21px;
29
+ }
30
+
31
+ .fpContent {
32
+ float:left; width:100%; border-bottom: 1px solid #ddd;
33
+ }
34
+
35
+ .fpHeading {
36
+ border-bottom: 1px solid #ddd; text-align: center; padding: 18px 0;
37
+ }
38
+
39
+ .fpSum {
40
+ text-align: center; width: 87%; margin:0 auto; font-weight: normal;
41
+ }
42
+
43
+ .fpContent p {
44
+ margin:0px 0px 16px; padding:0px; text-align: left; font-weight: normal;
45
+ }
46
+
47
+ .fpContent img {
48
+ margin-bottom: 20px;
49
+ }
50
+
51
+ .fpCol {
52
+ width:33%;box-sizing:border-box; padding:0% 2% 2%; float:left;text-align: left;
53
+ }
54
+
55
+ .fpFooter {
56
+ padding: 2% 7%; width:100%; clear:both;float:left;box-sizing:border-box;
57
+ }
58
+
59
+ .fpFooter .logo {
60
+ float:left;
61
+ }
62
+
63
+ .fpFooter .tag {
64
+ font-family: 'Source Sans Pro', sans-serif; color: #888888; font-size: 18px; font-weight: 300; float:right; margin-top: 10px;
65
+ }
66
+
67
+ #fp-custom-description {
68
+ background-color: #f4f4f4; color: #636363; display: inline-block; float: none; max-width: none; min-width: none; width: auto;
69
+ }
70
+
71
+
72
+ .FP_redirectmessage {
73
+ font-size: medium;
74
+ line-height: 1;
75
+ direction: ltr;
76
+ text-align: left;
77
+ text-align: start;
78
+ color: black;
79
+ font-style: normal;
80
+ font-weight: normal;
81
+ text-decoration: none;
82
+ list-style-type: disc;
83
+ background-color: white;
84
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
85
+ }
86
+ .FP_redirectmessage h1,
87
+ .FP_redirectmessage h2,
88
+ .FP_redirectmessage h3,
89
+ .FP_redirectmessage h4,
90
+ .FP_redirectmessage h5,
91
+ .FP_redirectmessage h6,
92
+ .FP_redirectmessage p,
93
+ .FP_redirectmessage td,
94
+ .FP_redirectmessage dl,
95
+ .FP_redirectmessage tr,
96
+ .FP_redirectmessage dt,
97
+ .FP_redirectmessage ol,
98
+ .FP_redirectmessage form,
99
+ .FP_redirectmessage select,
100
+ .FP_redirectmessage option,
101
+ .FP_redirectmessage pre,
102
+ .FP_redirectmessage div,
103
+ .FP_redirectmessage table,
104
+ .FP_redirectmessage th,
105
+ .FP_redirectmessage tbody,
106
+ .FP_redirectmessage tfoot,
107
+ .FP_redirectmessage caption,
108
+ .FP_redirectmessage thead,
109
+ .FP_redirectmessage ul,
110
+ .FP_redirectmessage li,
111
+ .FP_redirectmessage address,
112
+ .FP_redirectmessage blockquote,
113
+ .FP_redirectmessage dd,
114
+ .FP_redirectmessage fieldset,
115
+ .FP_redirectmessage li,
116
+ .FP_redirectmessage iframe,
117
+ .FP_redirectmessage strong,
118
+ .FP_redirectmessage legend,
119
+ .FP_redirectmessage em,
120
+ .FP_redirectmessage summary,
121
+ .FP_redirectmessage cite,
122
+ .FP_redirectmessage span,
123
+ .FP_redirectmessage input,
124
+ .FP_redirectmessage sup,
125
+ .FP_redirectmessage label,
126
+ .FP_redirectmessage dfn,
127
+ .FP_redirectmessage object,
128
+ .FP_redirectmessage big,
129
+ .FP_redirectmessage q,
130
+ .FP_redirectmessage samp,
131
+ .FP_redirectmessage acronym,
132
+ .FP_redirectmessage small,
133
+ .FP_redirectmessage img,
134
+ .FP_redirectmessage strike,
135
+ .FP_redirectmessage code,
136
+ .FP_redirectmessage sub,
137
+ .FP_redirectmessage ins,
138
+ .FP_redirectmessage textarea,
139
+ .FP_redirectmessage button,
140
+ .FP_redirectmessage var,
141
+ .FP_redirectmessage a,
142
+ .FP_redirectmessage abbr,
143
+ .FP_redirectmessage applet,
144
+ .FP_redirectmessage del,
145
+ .FP_redirectmessage kbd,
146
+ .FP_redirectmessage tt,
147
+ .FP_redirectmessage b,
148
+ .FP_redirectmessage i,
149
+ .FP_redirectmessage hr,
150
+ .FP_redirectmessage article,
151
+ .FP_redirectmessage aside,
152
+ .FP_redirectmessage figure,
153
+ .FP_redirectmessage figcaption,
154
+ .FP_redirectmessage footer,
155
+ .FP_redirectmessage header,
156
+ .FP_redirectmessage menu,
157
+ .FP_redirectmessage nav,
158
+ .FP_redirectmessage section,
159
+ .FP_redirectmessage time,
160
+ .FP_redirectmessage mark,
161
+ .FP_redirectmessage audio,
162
+ .FP_redirectmessage video,
163
+ .FP_redirectmessage abbr,
164
+ .FP_redirectmessage address,
165
+ .FP_redirectmessage area,
166
+ .FP_redirectmessage blockquote,
167
+ .FP_redirectmessage canvas,
168
+ .FP_redirectmessage caption,
169
+ .FP_redirectmessage cite,
170
+ .FP_redirectmessage code,
171
+ .FP_redirectmessage colgroup,
172
+ .FP_redirectmessage col,
173
+ .FP_redirectmessage datalist,
174
+ .FP_redirectmessage fieldset,
175
+ .FP_redirectmessage main,
176
+ .FP_redirectmessage map,
177
+ .FP_redirectmessage meta,
178
+ .FP_redirectmessage optgroup,
179
+ .FP_redirectmessage output,
180
+ .FP_redirectmessage progress {
181
+ background-attachment: scroll;
182
+ background-color: transparent;
183
+ background-image: none;
184
+ background-position: 0 0;
185
+ background-repeat: repeat;
186
+ border-color: black;
187
+ border-color: currentColor;
188
+ border-style: none;
189
+ border-width: medium;
190
+ bottom: auto;
191
+ clear: none;
192
+ clip: auto;
193
+ color: inherit;
194
+ counter-increment: none;
195
+ counter-reset: none;
196
+ cursor: auto;
197
+ direction: inherit;
198
+ display: inline;
199
+ float: none;
200
+ font-family: inherit;
201
+ font-size: inherit;
202
+ font-style: inherit;
203
+ font-variant: normal;
204
+ font-weight: inherit;
205
+ height: auto;
206
+ left: auto;
207
+ letter-spacing: normal;
208
+ line-height: inherit;
209
+ list-style-type: inherit;
210
+ list-style-position: outside;
211
+ list-style-image: none;
212
+ margin: 0;
213
+ max-height: none;
214
+ max-width: none;
215
+ min-height: 0;
216
+ min-width: 0;
217
+ opacity: 1;
218
+ outline: invert none medium;
219
+ overflow: visible;
220
+ padding: 0;
221
+ position: static;
222
+ quotes: "" "";
223
+ right: auto;
224
+ table-layout: auto;
225
+ text-align: inherit;
226
+ text-decoration: inherit;
227
+ text-indent: 0;
228
+ text-transform: none;
229
+ top: auto;
230
+ unicode-bidi: normal;
231
+ vertical-align: baseline;
232
+ visibility: inherit;
233
+ white-space: normal;
234
+ width: auto;
235
+ word-spacing: normal;
236
+ z-index: auto;
237
+ -webkit-background-origin: padding-box;
238
+ background-origin: padding-box;
239
+ -webkit-background-clip: border-box;
240
+ background-clip: border-box;
241
+ -webkit-background-size: auto;
242
+ -moz-background-size: auto;
243
+ background-size: auto;
244
+ -webkit-border-image: none;
245
+ -moz-border-image: none;
246
+ -o-border-image: none;
247
+ border-image: none;
248
+ -webkit-border-radius: 0;
249
+ -moz-border-radius: 0;
250
+ border-radius: 0;
251
+ -webkit-box-shadow: none;
252
+ box-shadow: none;
253
+ -webkit-box-sizing: content-box;
254
+ -moz-box-sizing: content-box;
255
+ box-sizing: content-box;
256
+ -webkit-column-count: auto;
257
+ -moz-column-count: auto;
258
+ column-count: auto;
259
+ -webkit-column-gap: normal;
260
+ -moz-column-gap: normal;
261
+ column-gap: normal;
262
+ -webkit-column-rule: medium none black;
263
+ -moz-column-rule: medium none black;
264
+ column-rule: medium none black;
265
+ -webkit-column-span: 1;
266
+ -moz-column-span: 1;
267
+ column-span: 1;
268
+ -webkit-column-width: auto;
269
+ -moz-column-width: auto;
270
+ column-width: auto;
271
+ font-feature-settings: normal;
272
+ overflow-x: visible;
273
+ overflow-y: visible;
274
+ -webkit-hyphens: manual;
275
+ -moz-hyphens: manual;
276
+ hyphens: manual;
277
+ -webkit-perspective: none;
278
+ -moz-perspective: none;
279
+ -ms-perspective: none;
280
+ -o-perspective: none;
281
+ perspective: none;
282
+ -webkit-perspective-origin: 50% 50%;
283
+ -moz-perspective-origin: 50% 50%;
284
+ -ms-perspective-origin: 50% 50%;
285
+ -o-perspective-origin: 50% 50%;
286
+ perspective-origin: 50% 50%;
287
+ -webkit-backface-visibility: visible;
288
+ -moz-backface-visibility: visible;
289
+ -ms-backface-visibility: visible;
290
+ -o-backface-visibility: visible;
291
+ backface-visibility: visible;
292
+ text-shadow: none;
293
+ -webkit-transition: all 0s ease 0s;
294
+ transition: all 0s ease 0s;
295
+ -webkit-transform: none;
296
+ -moz-transform: none;
297
+ -ms-transform: none;
298
+ -o-transform: none;
299
+ transform: none;
300
+ -webkit-transform-origin: 50% 50%;
301
+ -moz-transform-origin: 50% 50%;
302
+ -ms-transform-origin: 50% 50%;
303
+ -o-transform-origin: 50% 50%;
304
+ transform-origin: 50% 50%;
305
+ -webkit-transform-style: flat;
306
+ -moz-transform-style: flat;
307
+ -ms-transform-style: flat;
308
+ -o-transform-style: flat;
309
+ transform-style: flat;
310
+ word-break: normal;
311
+ }
312
+ .FP_redirectmessage h3,
313
+ .FP_redirectmessage h5,
314
+ .FP_redirectmessage p,
315
+ .FP_redirectmessage h1,
316
+ .FP_redirectmessage dl,
317
+ .FP_redirectmessage dt,
318
+ .FP_redirectmessage h6,
319
+ .FP_redirectmessage ol,
320
+ .FP_redirectmessage form,
321
+ .FP_redirectmessage option,
322
+ .FP_redirectmessage pre,
323
+ .FP_redirectmessage div,
324
+ .FP_redirectmessage h2,
325
+ .FP_redirectmessage caption,
326
+ .FP_redirectmessage h4,
327
+ .FP_redirectmessage ul,
328
+ .FP_redirectmessage address,
329
+ .FP_redirectmessage blockquote,
330
+ .FP_redirectmessage dd,
331
+ .FP_redirectmessage fieldset,
332
+ .FP_redirectmessage hr,
333
+ .FP_redirectmessage article,
334
+ .FP_redirectmessage dialog,
335
+ .FP_redirectmessage figure,
336
+ .FP_redirectmessage footer,
337
+ .FP_redirectmessage header,
338
+ .FP_redirectmessage hgroup,
339
+ .FP_redirectmessage menu,
340
+ .FP_redirectmessage nav,
341
+ .FP_redirectmessage section,
342
+ .FP_redirectmessage audio,
343
+ .FP_redirectmessage video,
344
+ .FP_redirectmessage address,
345
+ .FP_redirectmessage blockquote,
346
+ .FP_redirectmessage colgroup,
347
+ .FP_redirectmessage main,
348
+ .FP_redirectmessage progress,
349
+ .FP_redirectmessage summary {
350
+ display: block;
351
+ }
352
+ .FP_redirectmessage h1,
353
+ .FP_redirectmessage h2,
354
+ .FP_redirectmessage h3,
355
+ .FP_redirectmessage h4,
356
+ .FP_redirectmessage h5,
357
+ .FP_redirectmessage h6 {
358
+ font-weight: bold;
359
+ }
360
+ .FP_redirectmessage h1 {
361
+ font-size: 2em;
362
+ padding: .67em 0;
363
+ }
364
+ .FP_redirectmessage h2 {
365
+ font-size: 1.5em;
366
+ padding: .83em 0;
367
+ }
368
+ .FP_redirectmessage h3 {
369
+ font-size: 1.17em;
370
+ padding: .83em 0;
371
+ }
372
+ .FP_redirectmessage h4 {
373
+ font-size: 1em;
374
+ }
375
+ .FP_redirectmessage h5 {
376
+ font-size: .83em;
377
+ }
378
+ .FP_redirectmessage p {
379
+ margin: 1em 0;
380
+ }
381
+ .FP_redirectmessage table {
382
+ display: table;
383
+ }
384
+ .FP_redirectmessage thead {
385
+ display: table-header-group;
386
+ }
387
+ .FP_redirectmessage tbody {
388
+ display: table-row-group;
389
+ }
390
+ .FP_redirectmessage tfoot {
391
+ display: table-footer-group;
392
+ }
393
+ .FP_redirectmessage tr {
394
+ display: table-row;
395
+ }
396
+ .FP_redirectmessage th,
397
+ .FP_redirectmessage td {
398
+ display: table-cell;
399
+ padding: 2px;
400
+ }
401
+ .FP_redirectmessage ol,
402
+ .FP_redirectmessage ul {
403
+ margin: 1em 0;
404
+ }
405
+ .FP_redirectmessage ul li,
406
+ .FP_redirectmessage ul ul li,
407
+ .FP_redirectmessage ul ul ul li,
408
+ .FP_redirectmessage ol li,
409
+ .FP_redirectmessage ol ol li,
410
+ .FP_redirectmessage ol ol ol li,
411
+ .FP_redirectmessage ul ol ol li,
412
+ .FP_redirectmessage ul ul ol li,
413
+ .FP_redirectmessage ol ul ul li,
414
+ .FP_redirectmessage ol ol ul li {
415
+ list-style-position: inside;
416
+ margin-top: .08em;
417
+ }
418
+ .FP_redirectmessage ol ol,
419
+ .FP_redirectmessage ol ol ol,
420
+ .FP_redirectmessage ul ul,
421
+ .FP_redirectmessage ul ul ul,
422
+ .FP_redirectmessage ol ul,
423
+ .FP_redirectmessage ol ul ul,
424
+ .FP_redirectmessage ol ol ul,
425
+ .FP_redirectmessage ul ol,
426
+ .FP_redirectmessage ul ol ol,
427
+ .FP_redirectmessage ul ul ol {
428
+ padding-left: 40px;
429
+ margin: 0;
430
+ }
431
+ .FP_redirectmessage nav ul,
432
+ .FP_redirectmessage nav ol {
433
+ list-style-type: none;
434
+ }
435
+ .FP_redirectmessage ul,
436
+ .FP_redirectmessage menu {
437
+ list-style-type: disc;
438
+ }
439
+ .FP_redirectmessage ol {
440
+ list-style-type: decimal;
441
+ }
442
+ .FP_redirectmessage ol ul,
443
+ .FP_redirectmessage ul ul,
444
+ .FP_redirectmessage menu ul,
445
+ .FP_redirectmessage ol menu,
446
+ .FP_redirectmessage ul menu,
447
+ .FP_redirectmessage menu menu {
448
+ list-style-type: circle;
449
+ }
450
+ .FP_redirectmessage ol ol ul,
451
+ .FP_redirectmessage ol ul ul,
452
+ .FP_redirectmessage ol menu ul,
453
+ .FP_redirectmessage ol ol menu,
454
+ .FP_redirectmessage ol ul menu,
455
+ .FP_redirectmessage ol menu menu,
456
+ .FP_redirectmessage ul ol ul,
457
+ .FP_redirectmessage ul ul ul,
458
+ .FP_redirectmessage ul menu ul,
459
+ .FP_redirectmessage ul ol menu,
460
+ .FP_redirectmessage ul ul menu,
461
+ .FP_redirectmessage ul menu menu,
462
+ .FP_redirectmessage menu ol ul,
463
+ .FP_redirectmessage menu ul ul,
464
+ .FP_redirectmessage menu menu ul,
465
+ .FP_redirectmessage menu ol menu,
466
+ .FP_redirectmessage menu ul menu,
467
+ .FP_redirectmessage menu menu menu {
468
+ list-style-type: square;
469
+ }
470
+ .FP_redirectmessage li {
471
+ display: list-item;
472
+ min-height: auto;
473
+ min-width: auto;
474
+ padding-left: 20px;
475
+ }
476
+ .FP_redirectmessage strong {
477
+ font-weight: bold;
478
+ }
479
+ .FP_redirectmessage em {
480
+ font-style: italic;
481
+ }
482
+ .FP_redirectmessage kbd,
483
+ .FP_redirectmessage samp,
484
+ .FP_redirectmessage code,
485
+ .FP_redirectmessage pre {
486
+ font-family: monospace;
487
+ }
488
+ .FP_redirectmessage a {
489
+ color: blue;
490
+ text-decoration: underline;
491
+ }
492
+ .FP_redirectmessage a:visited {
493
+ color: #529;
494
+ }
495
+ .FP_redirectmessage a,
496
+ .FP_redirectmessage a *,
497
+ .FP_redirectmessage input[type=submit],
498
+ .FP_redirectmessage input[type=radio],
499
+ .FP_redirectmessage input[type=checkbox],
500
+ .FP_redirectmessage select {
501
+ cursor: pointer;
502
+ }
503
+ .FP_redirectmessage button,
504
+ .FP_redirectmessage input[type=submit],
505
+ .FP_redirectmessage input[type=submit]:hover,
506
+ .FP_redirectmessage input[type=submit]:active {
507
+ text-align: center;
508
+ padding: 2px 6px 3px;
509
+ border-radius: 4px;
510
+ text-decoration: none;
511
+ font-family: arial, helvetica, sans-serif;
512
+ font-size: small;
513
+ background: white;
514
+ -webkit-appearance: push-button;
515
+ color: buttontext;
516
+ border: 1px #a6a6a6 solid;
517
+ background: lightgrey;
518
+ background: #ffffff;
519
+ background: -moz-linear-gradient(top, #ffffff 0%, #dddddd 100%, #d1d1d1 100%, #dddddd 100%);
520
+ /* FF3.6+ */
521
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffffff), color-stop(100%, #dddddd), color-stop(100%, #d1d1d1), color-stop(100%, #dddddd));
522
+ /* Chrome,Safari4+ */
523
+ background: -webkit-linear-gradient(top, #ffffff 0%, #dddddd 100%, #d1d1d1 100%, #dddddd 100%);
524
+ /* Chrome10+,Safari5.1+ */
525
+ background: -o-linear-gradient(top, #ffffff 0%, #dddddd 100%, #d1d1d1 100%, #dddddd 100%);
526
+ /* Opera 11.10+ */
527
+ background: -ms-linear-gradient(top, #ffffff 0%, #dddddd 100%, #d1d1d1 100%, #dddddd 100%);
528
+ /* IE10+ */
529
+ background: linear-gradient(to bottom, #ffffff 0%, #dddddd 100%, #d1d1d1 100%, #dddddd 100%);
530
+ /* W3C */
531
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#dddddd', GradientType=0);
532
+ /* IE6-9 */
533
+ -webkit-box-shadow: 1px 1px 0px #eee;
534
+ -moz-box-shadow: 1px 1px 0px #eee;
535
+ -o-box-shadow: 1px 1px 0px #eee;
536
+ box-shadow: 1px 1px 0px #eee;
537
+ outline: initial;
538
+ }
539
+ .FP_redirectmessage button {
540
+ padding: 1px 6px 2px 6px;
541
+ margin-right: 5px;
542
+ }
543
+ .FP_redirectmessage input[type=hidden] {
544
+ display: none;
545
+ }
546
+ .FP_redirectmessage textarea {
547
+ -webkit-appearance: textarea;
548
+ background: white;
549
+ padding: 2px;
550
+ margin-left: 4px;
551
+ word-wrap: break-word;
552
+ white-space: pre-wrap;
553
+ font-size: 11px;
554
+ font-family: arial, helvetica, sans-serif;
555
+ line-height: 13px;
556
+ resize: both;
557
+ }
558
+ .FP_redirectmessage select,
559
+ .FP_redirectmessage textarea,
560
+ .FP_redirectmessage input {
561
+ border: 1px solid #ccc;
562
+ }
563
+ .FP_redirectmessage select {
564
+ font-size: 11px;
565
+ font-family: helvetica, arial, sans-serif;
566
+ display: inline-block;
567
+ }
568
+ .FP_redirectmessage textarea:focus,
569
+ .FP_redirectmessage input:focus {
570
+ outline: auto 5px -webkit-focus-ring-color;
571
+ outline: initial;
572
+ }
573
+ .FP_redirectmessage input[type=text] {
574
+ background: white;
575
+ padding: 1px;
576
+ font-family: initial;
577
+ font-size: small;
578
+ }
579
+ .FP_redirectmessage input[type=checkbox],
580
+ .FP_redirectmessage input[type=radio] {
581
+ border: 1px #2b2b2b solid;
582
+ border-radius: 4px;
583
+ }
584
+ .FP_redirectmessage input[type=checkbox],
585
+ .FP_redirectmessage input[type=radio] {
586
+ outline: initial;
587
+ }
588
+ .FP_redirectmessage input[type=radio] {
589
+ margin: 2px 2px 3px 2px;
590
+ }
591
+ .FP_redirectmessage input[type=submit]:active,
592
+ .FP_redirectmessage button:active {
593
+ background: #3b679e;
594
+ /* Old browsers */
595
+ background: -moz-linear-gradient(top, #3b679e 0%, #2b88d9 50%, #207cca 51%, #7db9e8 100%);
596
+ /* FF3.6+ */
597
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #3b679e), color-stop(50%, #2b88d9), color-stop(51%, #207cca), color-stop(100%, #7db9e8));
598
+ /* Chrome,Safari4+ */
599
+ background: -webkit-linear-gradient(top, #3b679e 0%, #2b88d9 50%, #207cca 51%, #7db9e8 100%);
600
+ /* Chrome10+,Safari5.1+ */
601
+ background: -o-linear-gradient(top, #3b679e 0%, #2b88d9 50%, #207cca 51%, #7db9e8 100%);
602
+ /* Opera 11.10+ */
603
+ background: -ms-linear-gradient(top, #3b679e 0%, #2b88d9 50%, #207cca 51%, #7db9e8 100%);
604
+ /* IE10+ */
605
+ background: linear-gradient(to bottom, #3b679e 0%, #2b88d9 50%, #207cca 51%, #7db9e8 100%);
606
+ /* W3C */
607
+ border-color: #5259b0;
608
+ }
609
+ .FP_redirectmessage abbr[title],
610
+ .FP_redirectmessage acronym[title],
611
+ .FP_redirectmessage dfn[title] {
612
+ cursor: help;
613
+ border-bottom-width: 1px;
614
+ border-bottom-style: dotted;
615
+ }
616
+ .FP_redirectmessage ins {
617
+ background-color: #ff9;
618
+ color: black;
619
+ }
620
+ .FP_redirectmessage del {
621
+ text-decoration: line-through;
622
+ }
623
+ .FP_redirectmessage blockquote,
624
+ .FP_redirectmessage q {
625
+ quotes: none;
626
+ }
627
+ .FP_redirectmessage blockquote:before,
628
+ .FP_redirectmessage blockquote:after,
629
+ .FP_redirectmessage q:before,
630
+ .FP_redirectmessage q:after,
631
+ .FP_redirectmessage li:before,
632
+ .FP_redirectmessage li:after {
633
+ content: "";
634
+ }
635
+ .FP_redirectmessage input,
636
+ .FP_redirectmessage select {
637
+ vertical-align: middle;
638
+ }
639
+ .FP_redirectmessage table {
640
+ border-collapse: collapse;
641
+ border-spacing: 0;
642
+ }
643
+ .FP_redirectmessage hr {
644
+ display: block;
645
+ height: 1px;
646
+ border: 0;
647
+ border-top: 1px solid #ccc;
648
+ margin: 1em 0;
649
+ }
650
+ .FP_redirectmessage *[dir=rtl] {
651
+ direction: rtl;
652
+ }
653
+ .FP_redirectmessage mark {
654
+ background-color: #ff9;
655
+ color: black;
656
+ font-style: italic;
657
+ font-weight: bold;
658
+ }
659
+ .FP_redirectmessage menu {
660
+ padding-left: 40px;
661
+ padding-top: 8px;
662
+ }
663
+ .FP_redirectmessage [hidden],
664
+ .FP_redirectmessage template {
665
+ display: none;
666
+ }
667
+ .FP_redirectmessage abbr[title] {
668
+ border-bottom: 1px dotted;
669
+ }
670
+ .FP_redirectmessage sub,
671
+ .FP_redirectmessage sup {
672
+ font-size: 75%;
673
+ line-height: 0;
674
+ position: relative;
675
+ vertical-align: baseline;
676
+ }
677
+ .FP_redirectmessage sup {
678
+ top: -0.5em;
679
+ }
680
+ .FP_redirectmessage sub {
681
+ bottom: -0.25em;
682
+ }
683
+ .FP_redirectmessage img {
684
+ border: 0;
685
+ }
686
+ .FP_redirectmessage figure {
687
+ margin: 0;
688
+ }
689
+ .FP_redirectmessage textarea {
690
+ overflow: auto;
691
+ vertical-align: top;
692
+ }
693
+ .FP_redirectmessage pre {
694
+ white-space: pre;
695
+ }
696
+ .FP_redirectmessage #fp-signup-form,
697
+ .FP_redirectmessage #fp-login-form {
698
+ max-width: 500px;
699
+ padding: 10px;
700
+ margin: 10px;
701
+ vertical-align: middle;
702
+ -webkit-border-radius: 5px;
703
+ -moz-border-radius: 5px;
704
+ border-radius: 5px;
705
+ -moz-background-clip: padding;
706
+ -webkit-background-clip: padding-box;
707
+ background-clip: padding-box;
708
+ }
709
+ .FP_redirectmessage #fp-signup-form .fp-label,
710
+ .FP_redirectmessage #fp-login-form .fp-label {
711
+ display: block;
712
+ margin-right: 20px;
713
+ padding-left: 4px;
714
+ color: #A0A0A0;
715
+ }
716
+ .FP_redirectmessage #fp-signup-form input,
717
+ .FP_redirectmessage #fp-login-form input,
718
+ .FP_redirectmessage #fp-signup-form select,
719
+ .FP_redirectmessage #fp-login-form select {
720
+ font-family: Lato, monospace;
721
+ width: 100%;
722
+ display: inline-block;
723
+ font-size: 1em;
724
+ margin: 5px 10px 10px 10px auto;
725
+ padding: 0 10px 0 2px;
726
+ height: 1.9em;
727
+ -webkit-border-radius: 2px;
728
+ -moz-border-radius: 2px;
729
+ border-radius: 2px;
730
+ -moz-background-clip: padding;
731
+ -webkit-background-clip: padding-box;
732
+ background-clip: padding-box;
733
+ }
734
+ .FP_redirectmessage #fp-signup-form select,
735
+ .FP_redirectmessage #fp-login-form select {
736
+ width: 95px;
737
+ background-color: white;
738
+ -webkit-border-radius: 2px;
739
+ -moz-border-radius: 2px;
740
+ border-radius: 2px;
741
+ -moz-background-clip: padding;
742
+ -webkit-background-clip: padding-box;
743
+ background-clip: padding-box;
744
+ }
745
+ .FP_redirectmessage #fp-signup-form #zip,
746
+ .FP_redirectmessage #fp-login-form #zip,
747
+ .FP_redirectmessage #fp-signup-form #main_phone,
748
+ .FP_redirectmessage #fp-login-form #main_phone,
749
+ .FP_redirectmessage #fp-signup-form #ssn,
750
+ .FP_redirectmessage #fp-login-form #ssn {
751
+ max-width: 325px;
752
+ }
753
+ .FP_redirectmessage #fp-signup-form img,
754
+ .FP_redirectmessage #fp-login-form img {
755
+ vertical-align: middle;
756
+ display: inline;
757
+ margin-bottom: 15px;
758
+ }
759
+ .FP_redirectmessage #fp-signup-form input[type="button"],
760
+ .FP_redirectmessage #fp-login-form input[type="button"] {
761
+ margin: 0px 15px 15px 0px;
762
+ height: 22px;
763
+ display: inline-block;
764
+ font-size: 1em;
765
+ margin-right: 100px;
766
+ text-decoration: none;
767
+ width: 120px;
768
+ border-radius: 2px;
769
+ cursor: pointer;
770
+ transition: background-color 0.2s ease-out, border-color 0.2s ease-out, color 0.2s ease-out;
771
+ padding: 8px;
772
+ color: #34ABDD;
773
+ border-color: #34ABDD;
774
+ border: 2px solid #34ABDD;
775
+ text-align: center;
776
+ outline: none;
777
+ }
778
+ .FP_redirectmessage #fp-signup-form input[type="button"]:hover,
779
+ .FP_redirectmessage #fp-login-form input[type="button"]:hover,
780
+ .FP_redirectmessage #fp-signup-form input[type="button"]:active,
781
+ .FP_redirectmessage #fp-login-form input[type="button"]:active {
782
+ color: white;
783
+ background-color: rgba(52, 171, 221, 0.8);
784
+ border-color: rgba(52, 171, 221, 0.8);
785
+ transition: background-color 0.3s ease-in, border-color 0.3s ease-in, color 0.3s ease-in;
786
+ }
787
+ .FP_redirectmessage #fp-signup-form .fp-signup-link,
788
+ .FP_redirectmessage #fp-login-form .fp-signup-link {
789
+ text-decoration: none;
790
+ font-weight: bold;
791
+ font-size: 1em;
792
+ float: none;
793
+ }
794
+ .FP_redirectmessage #fp-signup-form .fp-signup-link:hover,
795
+ .FP_redirectmessage #fp-login-form .fp-signup-link:hover {
796
+ font-weight: bold;
797
+ font-size: 1em;
798
+ float: none;
799
+ }
800
+ .FP_redirectmessage #fp-signup-form input[type="checkbox"].fp-checkbox,
801
+ .FP_redirectmessage #fp-login-form input[type="checkbox"].fp-checkbox {
802
+ text-align: left;
803
+ width: 13px;
804
+ height: 13px;
805
+ padding: 0;
806
+ vertical-align: middle;
807
+ }
808
+ .FP_redirectmessage #fp-signup-form .fp-terms-label,
809
+ .FP_redirectmessage #fp-login-form .fp-terms-label {
810
+ width: 300px;
811
+ margin-top: 4px;
812
+ }
813
+ .FP_redirectmessage #fp-signup-form .fp-error-element,
814
+ .FP_redirectmessage #fp-login-form .fp-error-element {
815
+ height: 1.1em;
816
+ text-align: center;
817
+ display: inline-block;
818
+ width: 100%;
819
+ }
820
+ .FP_redirectmessage #fp-signup-form .fp-error-message,
821
+ .FP_redirectmessage #fp-login-form .fp-error-message {
822
+ font-size: 0.7em;
823
+ color: #dd6634;
824
+ margin-bottom: 4px;
825
+ text-align: left;
826
+ }
827
+ .FP_redirectmessage #fp-signup-form #different-email-info,
828
+ .FP_redirectmessage #fp-login-form #different-email-info {
829
+ font-size: 0.9em;
830
+ }
831
+ .FP_redirectmessage #fp-signup-form a,
832
+ .FP_redirectmessage #fp-login-form a {
833
+ margin-left: 0;
834
+ color: #34ABDD;
835
+ }
836
+
837
+ .fpWrap .close {
838
+ color: #aaa;
839
+ cursor: pointer;
840
+ font-size: 22px;
841
+ font-weight: bold;
842
+ line-height: 0.5;
843
+ position: absolute;
844
+ right: 4px;
845
+ top: 4px;
846
+ text-decoration: none;
847
+ }
skin/frontend/base/default/futurepay/styles19.css ADDED
@@ -0,0 +1,863 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .FP_redirectmessage {
2
+ font-size: medium;
3
+ line-height: 1;
4
+ direction: ltr;
5
+ text-align: left;
6
+ text-align: start;
7
+ color: black;
8
+ font-style: normal;
9
+ font-weight: normal;
10
+ text-decoration: none;
11
+ list-style-type: disc;
12
+ background-color: white;
13
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
14
+ }
15
+ .FP_redirectmessage h1,
16
+ .FP_redirectmessage h2,
17
+ .FP_redirectmessage h3,
18
+ .FP_redirectmessage h4,
19
+ .FP_redirectmessage h5,
20
+ .FP_redirectmessage h6,
21
+ .FP_redirectmessage p,
22
+ .FP_redirectmessage td,
23
+ .FP_redirectmessage dl,
24
+ .FP_redirectmessage tr,
25
+ .FP_redirectmessage dt,
26
+ .FP_redirectmessage ol,
27
+ .FP_redirectmessage form,
28
+ .FP_redirectmessage select,
29
+ .FP_redirectmessage option,
30
+ .FP_redirectmessage pre,
31
+ .FP_redirectmessage div,
32
+ .FP_redirectmessage table,
33
+ .FP_redirectmessage th,
34
+ .FP_redirectmessage tbody,
35
+ .FP_redirectmessage tfoot,
36
+ .FP_redirectmessage caption,
37
+ .FP_redirectmessage thead,
38
+ .FP_redirectmessage ul,
39
+ .FP_redirectmessage li,
40
+ .FP_redirectmessage address,
41
+ .FP_redirectmessage blockquote,
42
+ .FP_redirectmessage dd,
43
+ .FP_redirectmessage fieldset,
44
+ .FP_redirectmessage li,
45
+ .FP_redirectmessage iframe,
46
+ .FP_redirectmessage strong,
47
+ .FP_redirectmessage legend,
48
+ .FP_redirectmessage em,
49
+ .FP_redirectmessage summary,
50
+ .FP_redirectmessage cite,
51
+ .FP_redirectmessage span,
52
+ .FP_redirectmessage input,
53
+ .FP_redirectmessage sup,
54
+ .FP_redirectmessage label,
55
+ .FP_redirectmessage dfn,
56
+ .FP_redirectmessage object,
57
+ .FP_redirectmessage big,
58
+ .FP_redirectmessage q,
59
+ .FP_redirectmessage samp,
60
+ .FP_redirectmessage acronym,
61
+ .FP_redirectmessage small,
62
+ .FP_redirectmessage img,
63
+ .FP_redirectmessage strike,
64
+ .FP_redirectmessage code,
65
+ .FP_redirectmessage sub,
66
+ .FP_redirectmessage ins,
67
+ .FP_redirectmessage textarea,
68
+ .FP_redirectmessage button,
69
+ .FP_redirectmessage var,
70
+ .FP_redirectmessage a,
71
+ .FP_redirectmessage abbr,
72
+ .FP_redirectmessage applet,
73
+ .FP_redirectmessage del,
74
+ .FP_redirectmessage kbd,
75
+ .FP_redirectmessage tt,
76
+ .FP_redirectmessage b,
77
+ .FP_redirectmessage i,
78
+ .FP_redirectmessage hr,
79
+ .FP_redirectmessage article,
80
+ .FP_redirectmessage aside,
81
+ .FP_redirectmessage figure,
82
+ .FP_redirectmessage figcaption,
83
+ .FP_redirectmessage footer,
84
+ .FP_redirectmessage header,
85
+ .FP_redirectmessage menu,
86
+ .FP_redirectmessage nav,
87
+ .FP_redirectmessage section,
88
+ .FP_redirectmessage time,
89
+ .FP_redirectmessage mark,
90
+ .FP_redirectmessage audio,
91
+ .FP_redirectmessage video,
92
+ .FP_redirectmessage abbr,
93
+ .FP_redirectmessage address,
94
+ .FP_redirectmessage area,
95
+ .FP_redirectmessage blockquote,
96
+ .FP_redirectmessage canvas,
97
+ .FP_redirectmessage caption,
98
+ .FP_redirectmessage cite,
99
+ .FP_redirectmessage code,
100
+ .FP_redirectmessage colgroup,
101
+ .FP_redirectmessage col,
102
+ .FP_redirectmessage datalist,
103
+ .FP_redirectmessage fieldset,
104
+ .FP_redirectmessage main,
105
+ .FP_redirectmessage map,
106
+ .FP_redirectmessage meta,
107
+ .FP_redirectmessage optgroup,
108
+ .FP_redirectmessage output,
109
+ .FP_redirectmessage progress {
110
+ background-attachment: scroll;
111
+ background-color: transparent;
112
+ background-image: none;
113
+ background-position: 0 0;
114
+ background-repeat: repeat;
115
+ border-color: black;
116
+ border-color: currentColor;
117
+ border-style: none;
118
+ border-width: medium;
119
+ bottom: auto;
120
+ clear: none;
121
+ clip: auto;
122
+ color: inherit;
123
+ counter-increment: none;
124
+ counter-reset: none;
125
+ cursor: auto;
126
+ direction: inherit;
127
+ display: inline;
128
+ float: none;
129
+ font-family: inherit;
130
+ font-size: inherit;
131
+ font-style: inherit;
132
+ font-variant: normal;
133
+ font-weight: inherit;
134
+ height: auto;
135
+ left: auto;
136
+ letter-spacing: normal;
137
+ line-height: inherit;
138
+ list-style-type: inherit;
139
+ list-style-position: outside;
140
+ list-style-image: none;
141
+ margin: 0;
142
+ max-height: none;
143
+ max-width: none;
144
+ min-height: 0;
145
+ min-width: 0;
146
+ opacity: 1;
147
+ outline: invert none medium;
148
+ overflow: visible;
149
+ padding: 0;
150
+ position: static;
151
+ quotes: "" "";
152
+ right: auto;
153
+ table-layout: auto;
154
+ text-align: inherit;
155
+ text-decoration: inherit;
156
+ text-indent: 0;
157
+ text-transform: none;
158
+ top: auto;
159
+ unicode-bidi: normal;
160
+ vertical-align: baseline;
161
+ visibility: inherit;
162
+ white-space: normal;
163
+ width: auto;
164
+ word-spacing: normal;
165
+ z-index: auto;
166
+ -webkit-background-origin: padding-box;
167
+ background-origin: padding-box;
168
+ -webkit-background-clip: border-box;
169
+ background-clip: border-box;
170
+ -webkit-background-size: auto;
171
+ -moz-background-size: auto;
172
+ background-size: auto;
173
+ -webkit-border-image: none;
174
+ -moz-border-image: none;
175
+ -o-border-image: none;
176
+ border-image: none;
177
+ -webkit-border-radius: 0;
178
+ -moz-border-radius: 0;
179
+ border-radius: 0;
180
+ -webkit-box-shadow: none;
181
+ box-shadow: none;
182
+ -webkit-box-sizing: content-box;
183
+ -moz-box-sizing: content-box;
184
+ box-sizing: content-box;
185
+ -webkit-column-count: auto;
186
+ -moz-column-count: auto;
187
+ column-count: auto;
188
+ -webkit-column-gap: normal;
189
+ -moz-column-gap: normal;
190
+ column-gap: normal;
191
+ -webkit-column-rule: medium none black;
192
+ -moz-column-rule: medium none black;
193
+ column-rule: medium none black;
194
+ -webkit-column-span: 1;
195
+ -moz-column-span: 1;
196
+ column-span: 1;
197
+ -webkit-column-width: auto;
198
+ -moz-column-width: auto;
199
+ column-width: auto;
200
+ font-feature-settings: normal;
201
+ overflow-x: visible;
202
+ overflow-y: visible;
203
+ -webkit-hyphens: manual;
204
+ -moz-hyphens: manual;
205
+ hyphens: manual;
206
+ -webkit-perspective: none;
207
+ -moz-perspective: none;
208
+ -ms-perspective: none;
209
+ -o-perspective: none;
210
+ perspective: none;
211
+ -webkit-perspective-origin: 50% 50%;
212
+ -moz-perspective-origin: 50% 50%;
213
+ -ms-perspective-origin: 50% 50%;
214
+ -o-perspective-origin: 50% 50%;
215
+ perspective-origin: 50% 50%;
216
+ -webkit-backface-visibility: visible;
217
+ -moz-backface-visibility: visible;
218
+ -ms-backface-visibility: visible;
219
+ -o-backface-visibility: visible;
220
+ backface-visibility: visible;
221
+ text-shadow: none;
222
+ -webkit-transition: all 0s ease 0s;
223
+ transition: all 0s ease 0s;
224
+ -webkit-transform: none;
225
+ -moz-transform: none;
226
+ -ms-transform: none;
227
+ -o-transform: none;
228
+ transform: none;
229
+ -webkit-transform-origin: 50% 50%;
230
+ -moz-transform-origin: 50% 50%;
231
+ -ms-transform-origin: 50% 50%;
232
+ -o-transform-origin: 50% 50%;
233
+ transform-origin: 50% 50%;
234
+ -webkit-transform-style: flat;
235
+ -moz-transform-style: flat;
236
+ -ms-transform-style: flat;
237
+ -o-transform-style: flat;
238
+ transform-style: flat;
239
+ word-break: normal;
240
+ }
241
+ .FP_redirectmessage h3,
242
+ .FP_redirectmessage h5,
243
+ .FP_redirectmessage p,
244
+ .FP_redirectmessage h1,
245
+ .FP_redirectmessage dl,
246
+ .FP_redirectmessage dt,
247
+ .FP_redirectmessage h6,
248
+ .FP_redirectmessage ol,
249
+ .FP_redirectmessage form,
250
+ .FP_redirectmessage option,
251
+ .FP_redirectmessage pre,
252
+ .FP_redirectmessage div,
253
+ .FP_redirectmessage h2,
254
+ .FP_redirectmessage caption,
255
+ .FP_redirectmessage h4,
256
+ .FP_redirectmessage ul,
257
+ .FP_redirectmessage address,
258
+ .FP_redirectmessage blockquote,
259
+ .FP_redirectmessage dd,
260
+ .FP_redirectmessage fieldset,
261
+ .FP_redirectmessage hr,
262
+ .FP_redirectmessage article,
263
+ .FP_redirectmessage dialog,
264
+ .FP_redirectmessage figure,
265
+ .FP_redirectmessage footer,
266
+ .FP_redirectmessage header,
267
+ .FP_redirectmessage hgroup,
268
+ .FP_redirectmessage menu,
269
+ .FP_redirectmessage nav,
270
+ .FP_redirectmessage section,
271
+ .FP_redirectmessage audio,
272
+ .FP_redirectmessage video,
273
+ .FP_redirectmessage address,
274
+ .FP_redirectmessage blockquote,
275
+ .FP_redirectmessage colgroup,
276
+ .FP_redirectmessage main,
277
+ .FP_redirectmessage progress,
278
+ .FP_redirectmessage summary {
279
+ display: block;
280
+ }
281
+ .FP_redirectmessage h1,
282
+ .FP_redirectmessage h2,
283
+ .FP_redirectmessage h3,
284
+ .FP_redirectmessage h4,
285
+ .FP_redirectmessage h5,
286
+ .FP_redirectmessage h6 {
287
+ font-weight: bold;
288
+ }
289
+ .FP_redirectmessage h1 {
290
+ font-size: 2em;
291
+ padding: .67em 0;
292
+ }
293
+ .FP_redirectmessage h2 {
294
+ font-size: 1.5em;
295
+ padding: .83em 0;
296
+ }
297
+ .FP_redirectmessage h3 {
298
+ font-size: 1.17em;
299
+ padding: .83em 0;
300
+ }
301
+ .FP_redirectmessage h4 {
302
+ font-size: 1em;
303
+ }
304
+ .FP_redirectmessage h5 {
305
+ font-size: .83em;
306
+ }
307
+ .FP_redirectmessage p {
308
+ margin: 1em 0;
309
+ }
310
+ .FP_redirectmessage table {
311
+ display: table;
312
+ }
313
+ .FP_redirectmessage thead {
314
+ display: table-header-group;
315
+ }
316
+ .FP_redirectmessage tbody {
317
+ display: table-row-group;
318
+ }
319
+ .FP_redirectmessage tfoot {
320
+ display: table-footer-group;
321
+ }
322
+ .FP_redirectmessage tr {
323
+ display: table-row;
324
+ }
325
+ .FP_redirectmessage th,
326
+ .FP_redirectmessage td {
327
+ display: table-cell;
328
+ padding: 2px;
329
+ }
330
+ .FP_redirectmessage ol,
331
+ .FP_redirectmessage ul {
332
+ margin: 1em 0;
333
+ }
334
+ .FP_redirectmessage ul li,
335
+ .FP_redirectmessage ul ul li,
336
+ .FP_redirectmessage ul ul ul li,
337
+ .FP_redirectmessage ol li,
338
+ .FP_redirectmessage ol ol li,
339
+ .FP_redirectmessage ol ol ol li,
340
+ .FP_redirectmessage ul ol ol li,
341
+ .FP_redirectmessage ul ul ol li,
342
+ .FP_redirectmessage ol ul ul li,
343
+ .FP_redirectmessage ol ol ul li {
344
+ list-style-position: inside;
345
+ margin-top: .08em;
346
+ }
347
+ .FP_redirectmessage ol ol,
348
+ .FP_redirectmessage ol ol ol,
349
+ .FP_redirectmessage ul ul,
350
+ .FP_redirectmessage ul ul ul,
351
+ .FP_redirectmessage ol ul,
352
+ .FP_redirectmessage ol ul ul,
353
+ .FP_redirectmessage ol ol ul,
354
+ .FP_redirectmessage ul ol,
355
+ .FP_redirectmessage ul ol ol,
356
+ .FP_redirectmessage ul ul ol {
357
+ padding-left: 40px;
358
+ margin: 0;
359
+ }
360
+ .FP_redirectmessage nav ul,
361
+ .FP_redirectmessage nav ol {
362
+ list-style-type: none;
363
+ }
364
+ .FP_redirectmessage ul,
365
+ .FP_redirectmessage menu {
366
+ list-style-type: disc;
367
+ }
368
+ .FP_redirectmessage ol {
369
+ list-style-type: decimal;
370
+ }
371
+ .FP_redirectmessage ol ul,
372
+ .FP_redirectmessage ul ul,
373
+ .FP_redirectmessage menu ul,
374
+ .FP_redirectmessage ol menu,
375
+ .FP_redirectmessage ul menu,
376
+ .FP_redirectmessage menu menu {
377
+ list-style-type: circle;
378
+ }
379
+ .FP_redirectmessage ol ol ul,
380
+ .FP_redirectmessage ol ul ul,
381
+ .FP_redirectmessage ol menu ul,
382
+ .FP_redirectmessage ol ol menu,
383
+ .FP_redirectmessage ol ul menu,
384
+ .FP_redirectmessage ol menu menu,
385
+ .FP_redirectmessage ul ol ul,
386
+ .FP_redirectmessage ul ul ul,
387
+ .FP_redirectmessage ul menu ul,
388
+ .FP_redirectmessage ul ol menu,
389
+ .FP_redirectmessage ul ul menu,
390
+ .FP_redirectmessage ul menu menu,
391
+ .FP_redirectmessage menu ol ul,
392
+ .FP_redirectmessage menu ul ul,
393
+ .FP_redirectmessage menu menu ul,
394
+ .FP_redirectmessage menu ol menu,
395
+ .FP_redirectmessage menu ul menu,
396
+ .FP_redirectmessage menu menu menu {
397
+ list-style-type: square;
398
+ }
399
+ .FP_redirectmessage li {
400
+ display: list-item;
401
+ min-height: auto;
402
+ min-width: auto;
403
+ padding-left: 20px;
404
+ }
405
+ .FP_redirectmessage strong {
406
+ font-weight: bold;
407
+ }
408
+ .FP_redirectmessage em {
409
+ font-style: italic;
410
+ }
411
+ .FP_redirectmessage kbd,
412
+ .FP_redirectmessage samp,
413
+ .FP_redirectmessage code,
414
+ .FP_redirectmessage pre {
415
+ font-family: monospace;
416
+ }
417
+ .FP_redirectmessage a {
418
+ color: blue;
419
+ text-decoration: underline;
420
+ }
421
+ .FP_redirectmessage a:visited {
422
+ color: #529;
423
+ }
424
+ .FP_redirectmessage a,
425
+ .FP_redirectmessage a *,
426
+ .FP_redirectmessage input[type=submit],
427
+ .FP_redirectmessage input[type=radio],
428
+ .FP_redirectmessage input[type=checkbox],
429
+ .FP_redirectmessage select {
430
+ cursor: pointer;
431
+ }
432
+ .FP_redirectmessage button,
433
+ .FP_redirectmessage input[type=submit],
434
+ .FP_redirectmessage input[type=submit]:hover,
435
+ .FP_redirectmessage input[type=submit]:active {
436
+ text-align: center;
437
+ padding: 2px 6px 3px;
438
+ border-radius: 4px;
439
+ text-decoration: none;
440
+ font-family: arial, helvetica, sans-serif;
441
+ font-size: small;
442
+ background: white;
443
+ -webkit-appearance: push-button;
444
+ color: buttontext;
445
+ border: 1px #a6a6a6 solid;
446
+ background: lightgrey;
447
+ background: #ffffff;
448
+ background: -moz-linear-gradient(top, #ffffff 0%, #dddddd 100%, #d1d1d1 100%, #dddddd 100%);
449
+ /* FF3.6+ */
450
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffffff), color-stop(100%, #dddddd), color-stop(100%, #d1d1d1), color-stop(100%, #dddddd));
451
+ /* Chrome,Safari4+ */
452
+ background: -webkit-linear-gradient(top, #ffffff 0%, #dddddd 100%, #d1d1d1 100%, #dddddd 100%);
453
+ /* Chrome10+,Safari5.1+ */
454
+ background: -o-linear-gradient(top, #ffffff 0%, #dddddd 100%, #d1d1d1 100%, #dddddd 100%);
455
+ /* Opera 11.10+ */
456
+ background: -ms-linear-gradient(top, #ffffff 0%, #dddddd 100%, #d1d1d1 100%, #dddddd 100%);
457
+ /* IE10+ */
458
+ background: linear-gradient(to bottom, #ffffff 0%, #dddddd 100%, #d1d1d1 100%, #dddddd 100%);
459
+ /* W3C */
460
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#dddddd', GradientType=0);
461
+ /* IE6-9 */
462
+ -webkit-box-shadow: 1px 1px 0px #eee;
463
+ -moz-box-shadow: 1px 1px 0px #eee;
464
+ -o-box-shadow: 1px 1px 0px #eee;
465
+ box-shadow: 1px 1px 0px #eee;
466
+ outline: initial;
467
+ }
468
+ .FP_redirectmessage button {
469
+ padding: 1px 6px 2px 6px;
470
+ margin-right: 5px;
471
+ }
472
+ .FP_redirectmessage input[type=hidden] {
473
+ display: none;
474
+ }
475
+ .FP_redirectmessage textarea {
476
+ -webkit-appearance: textarea;
477
+ background: white;
478
+ padding: 2px;
479
+ margin-left: 4px;
480
+ word-wrap: break-word;
481
+ white-space: pre-wrap;
482
+ font-size: 11px;
483
+ font-family: arial, helvetica, sans-serif;
484
+ line-height: 13px;
485
+ resize: both;
486
+ }
487
+ .FP_redirectmessage select,
488
+ .FP_redirectmessage textarea,
489
+ .FP_redirectmessage input {
490
+ border: 1px solid #ccc;
491
+ }
492
+ .FP_redirectmessage select {
493
+ font-size: 11px;
494
+ font-family: helvetica, arial, sans-serif;
495
+ display: inline-block;
496
+ }
497
+ .FP_redirectmessage textarea:focus,
498
+ .FP_redirectmessage input:focus {
499
+ outline: auto 5px -webkit-focus-ring-color;
500
+ outline: initial;
501
+ }
502
+ .FP_redirectmessage input[type=text] {
503
+ background: white;
504
+ padding: 1px;
505
+ font-family: initial;
506
+ font-size: small;
507
+ }
508
+ .FP_redirectmessage input[type=checkbox],
509
+ .FP_redirectmessage input[type=radio] {
510
+ border: 1px #2b2b2b solid;
511
+ border-radius: 4px;
512
+ }
513
+ .FP_redirectmessage input[type=checkbox],
514
+ .FP_redirectmessage input[type=radio] {
515
+ outline: initial;
516
+ }
517
+ .FP_redirectmessage input[type=radio] {
518
+ margin: 2px 2px 3px 2px;
519
+ }
520
+ .FP_redirectmessage input[type=submit]:active,
521
+ .FP_redirectmessage button:active {
522
+ background: #3b679e;
523
+ /* Old browsers */
524
+ background: -moz-linear-gradient(top, #3b679e 0%, #2b88d9 50%, #207cca 51%, #7db9e8 100%);
525
+ /* FF3.6+ */
526
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #3b679e), color-stop(50%, #2b88d9), color-stop(51%, #207cca), color-stop(100%, #7db9e8));
527
+ /* Chrome,Safari4+ */
528
+ background: -webkit-linear-gradient(top, #3b679e 0%, #2b88d9 50%, #207cca 51%, #7db9e8 100%);
529
+ /* Chrome10+,Safari5.1+ */
530
+ background: -o-linear-gradient(top, #3b679e 0%, #2b88d9 50%, #207cca 51%, #7db9e8 100%);
531
+ /* Opera 11.10+ */
532
+ background: -ms-linear-gradient(top, #3b679e 0%, #2b88d9 50%, #207cca 51%, #7db9e8 100%);
533
+ /* IE10+ */
534
+ background: linear-gradient(to bottom, #3b679e 0%, #2b88d9 50%, #207cca 51%, #7db9e8 100%);
535
+ /* W3C */
536
+ border-color: #5259b0;
537
+ }
538
+ .FP_redirectmessage abbr[title],
539
+ .FP_redirectmessage acronym[title],
540
+ .FP_redirectmessage dfn[title] {
541
+ cursor: help;
542
+ border-bottom-width: 1px;
543
+ border-bottom-style: dotted;
544
+ }
545
+ .FP_redirectmessage ins {
546
+ background-color: #ff9;
547
+ color: black;
548
+ }
549
+ .FP_redirectmessage del {
550
+ text-decoration: line-through;
551
+ }
552
+ .FP_redirectmessage blockquote,
553
+ .FP_redirectmessage q {
554
+ quotes: none;
555
+ }
556
+ .FP_redirectmessage blockquote:before,
557
+ .FP_redirectmessage blockquote:after,
558
+ .FP_redirectmessage q:before,
559
+ .FP_redirectmessage q:after,
560
+ .FP_redirectmessage li:before,
561
+ .FP_redirectmessage li:after {
562
+ content: "";
563
+ }
564
+ .FP_redirectmessage input,
565
+ .FP_redirectmessage select {
566
+ vertical-align: middle;
567
+ }
568
+ .FP_redirectmessage table {
569
+ border-collapse: collapse;
570
+ border-spacing: 0;
571
+ }
572
+ .FP_redirectmessage hr {
573
+ display: block;
574
+ height: 1px;
575
+ border: 0;
576
+ border-top: 1px solid #ccc;
577
+ margin: 1em 0;
578
+ }
579
+ .FP_redirectmessage *[dir=rtl] {
580
+ direction: rtl;
581
+ }
582
+ .FP_redirectmessage mark {
583
+ background-color: #ff9;
584
+ color: black;
585
+ font-style: italic;
586
+ font-weight: bold;
587
+ }
588
+ .FP_redirectmessage menu {
589
+ padding-left: 40px;
590
+ padding-top: 8px;
591
+ }
592
+ .FP_redirectmessage [hidden],
593
+ .FP_redirectmessage template {
594
+ display: none;
595
+ }
596
+ .FP_redirectmessage abbr[title] {
597
+ border-bottom: 1px dotted;
598
+ }
599
+ .FP_redirectmessage sub,
600
+ .FP_redirectmessage sup {
601
+ font-size: 75%;
602
+ line-height: 0;
603
+ position: relative;
604
+ vertical-align: baseline;
605
+ }
606
+ .FP_redirectmessage sup {
607
+ top: -0.5em;
608
+ }
609
+ .FP_redirectmessage sub {
610
+ bottom: -0.25em;
611
+ }
612
+ .FP_redirectmessage img {
613
+ border: 0;
614
+ }
615
+ .FP_redirectmessage figure {
616
+ margin: 0;
617
+ }
618
+ .FP_redirectmessage textarea {
619
+ overflow: auto;
620
+ vertical-align: top;
621
+ }
622
+ .FP_redirectmessage pre {
623
+ white-space: pre;
624
+ }
625
+ .FP_redirectmessage #fp-signup-form,
626
+ .FP_redirectmessage #fp-login-form {
627
+ max-width: 500px;
628
+ padding: 10px;
629
+ margin: 10px;
630
+ vertical-align: middle;
631
+ -webkit-border-radius: 5px;
632
+ -moz-border-radius: 5px;
633
+ border-radius: 5px;
634
+ -moz-background-clip: padding;
635
+ -webkit-background-clip: padding-box;
636
+ background-clip: padding-box;
637
+ }
638
+ .FP_redirectmessage #fp-signup-form .fp-label,
639
+ .FP_redirectmessage #fp-login-form .fp-label {
640
+ display: block;
641
+ margin-right: 20px;
642
+ padding-left: 4px;
643
+ color: #A0A0A0;
644
+ }
645
+ .FP_redirectmessage #fp-signup-form input,
646
+ .FP_redirectmessage #fp-login-form input,
647
+ .FP_redirectmessage #fp-signup-form select,
648
+ .FP_redirectmessage #fp-login-form select {
649
+ font-family: Lato, monospace;
650
+ width: 100%;
651
+ display: inline-block;
652
+ font-size: 1em;
653
+ margin: 5px 10px 10px 10px auto;
654
+ padding: 0 10px 0 2px;
655
+ height: 1.9em;
656
+ -webkit-border-radius: 2px;
657
+ -moz-border-radius: 2px;
658
+ border-radius: 2px;
659
+ -moz-background-clip: padding;
660
+ -webkit-background-clip: padding-box;
661
+ background-clip: padding-box;
662
+ }
663
+ .FP_redirectmessage #fp-signup-form select,
664
+ .FP_redirectmessage #fp-login-form select {
665
+ width: 95px;
666
+ background-color: white;
667
+ -webkit-border-radius: 2px;
668
+ -moz-border-radius: 2px;
669
+ border-radius: 2px;
670
+ -moz-background-clip: padding;
671
+ -webkit-background-clip: padding-box;
672
+ background-clip: padding-box;
673
+ }
674
+ .FP_redirectmessage #fp-signup-form #zip,
675
+ .FP_redirectmessage #fp-login-form #zip,
676
+ .FP_redirectmessage #fp-signup-form #main_phone,
677
+ .FP_redirectmessage #fp-login-form #main_phone,
678
+ .FP_redirectmessage #fp-signup-form #ssn,
679
+ .FP_redirectmessage #fp-login-form #ssn {
680
+ max-width: 325px;
681
+ }
682
+ .FP_redirectmessage #fp-signup-form img,
683
+ .FP_redirectmessage #fp-login-form img {
684
+ vertical-align: middle;
685
+ display: inline;
686
+ margin-bottom: 15px;
687
+ }
688
+ .FP_redirectmessage #fp-signup-form input[type="button"],
689
+ .FP_redirectmessage #fp-login-form input[type="button"] {
690
+ margin: 0px 15px 15px 0px;
691
+ height: 22px;
692
+ display: inline-block;
693
+ font-size: 1em;
694
+ margin-right: 100px;
695
+ text-decoration: none;
696
+ width: 120px;
697
+ border-radius: 2px;
698
+ transition: background-color 0.2s ease-out, border-color 0.2s ease-out, color 0.2s ease-out;
699
+ padding: 8px;
700
+ color: #34ABDD;
701
+ border-color: #34ABDD;
702
+ border: 2px solid #34ABDD;
703
+ text-align: center;
704
+ outline: none;
705
+ }
706
+ .FP_redirectmessage #fp-signup-form input[type="button"]:hover,
707
+ .FP_redirectmessage #fp-login-form input[type="button"]:hover,
708
+ .FP_redirectmessage #fp-signup-form input[type="button"]:active,
709
+ .FP_redirectmessage #fp-login-form input[type="button"]:active {
710
+ color: white;
711
+ background-color: rgba(52, 171, 221, 0.8);
712
+ border-color: rgba(52, 171, 221, 0.8);
713
+ transition: background-color 0.3s ease-in, border-color 0.3s ease-in, color 0.3s ease-in;
714
+ }
715
+ .FP_redirectmessage #fp-signup-form .fp-signup-link,
716
+ .FP_redirectmessage #fp-login-form .fp-signup-link {
717
+ text-decoration: none;
718
+ font-weight: bold;
719
+ font-size: 1em;
720
+ float: none;
721
+ }
722
+ .FP_redirectmessage #fp-signup-form .fp-signup-link:hover,
723
+ .FP_redirectmessage #fp-login-form .fp-signup-link:hover {
724
+ font-weight: bold;
725
+ font-size: 1em;
726
+ float: none;
727
+ }
728
+ .FP_redirectmessage #fp-signup-form input[type="checkbox"].fp-checkbox,
729
+ .FP_redirectmessage #fp-login-form input[type="checkbox"].fp-checkbox {
730
+ text-align: left;
731
+ width: 13px;
732
+ height: 13px;
733
+ padding: 0;
734
+ vertical-align: middle;
735
+ }
736
+ .FP_redirectmessage #fp-signup-form .fp-terms-label,
737
+ .FP_redirectmessage #fp-login-form .fp-terms-label {
738
+ width: 300px;
739
+ margin-top: 4px;
740
+ }
741
+ .FP_redirectmessage #fp-signup-form .fp-error-element,
742
+ .FP_redirectmessage #fp-login-form .fp-error-element {
743
+ height: 1.1em;
744
+ text-align: center;
745
+ display: inline-block;
746
+ width: 100%;
747
+ }
748
+ .FP_redirectmessage #fp-signup-form .fp-error-message,
749
+ .FP_redirectmessage #fp-login-form .fp-error-message {
750
+ font-size: 0.7em;
751
+ color: #dd6634;
752
+ margin-bottom: 4px;
753
+ text-align: left;
754
+ }
755
+ .FP_redirectmessage #fp-signup-form #different-email-info,
756
+ .FP_redirectmessage #fp-login-form #different-email-info {
757
+ font-size: 0.9em;
758
+ }
759
+ .FP_redirectmessage #fp-signup-form a,
760
+ .FP_redirectmessage #fp-login-form a {
761
+ margin-left: 0;
762
+ color: #34ABDD;
763
+ }
764
+
765
+ .fpWrap .close {
766
+ color: #aaa;
767
+ cursor: pointer;
768
+ font-size: 22px;
769
+ font-weight: bold;
770
+ line-height: 0.5;
771
+ position: absolute;
772
+ right: 4px;
773
+ top: 2px;
774
+ text-decoration: none;
775
+ }
776
+
777
+
778
+ body, html {
779
+ padding:0px;
780
+ margin:0px;
781
+ background-color:#ffffff;
782
+
783
+ }
784
+
785
+ .fpInfo {
786
+ width: 100%; margin:0 auto; height:auto;box-sizing:border-box;padding: 20px; display:table; background:white;
787
+ }
788
+
789
+ .fpWrap {
790
+ width:100%;float:left; border: 1px solid #ddd; font-family: 'Helvetica', Arial, sans-serif;font-size:15px; color: #666666;
791
+ }
792
+
793
+ .fpInfo h2, .fpInfo h3 {
794
+ font-family: 'Source Sans Pro', sans-serif; color: rgb(128,195,64); font-weight:300; margin:0px; padding:0px;
795
+ }
796
+
797
+ .fpInfo h2 {
798
+ font-size: 46px;
799
+ }
800
+
801
+ .fpInfo h3 {
802
+ font-weight:400; text-align: left; margin: 0px 0px 20px; clear:both;
803
+ }
804
+
805
+ .fpContent, .fpSum {
806
+ padding: 2% 5% 0%; box-sizing: border-box; line-height: 21px;
807
+ }
808
+
809
+ .fpContent {
810
+ float:left; width:100%; border-bottom: 1px solid #ddd;
811
+ }
812
+
813
+ .fpHeading {
814
+ border-bottom: 1px solid #ddd; text-align: center; padding: 18px 0;
815
+ }
816
+
817
+ .fpSum {
818
+ text-align: center; width: 87%; margin:0 auto;
819
+ }
820
+
821
+ .fpContent p {
822
+ margin:0px 0px 16px; padding:0px; text-align: left;
823
+ }
824
+
825
+ .fpContent img {
826
+ margin-bottom: 20px;
827
+ }
828
+
829
+ .fpCol {
830
+ width:33%;box-sizing:border-box; padding:0% 2% 2%; float:left;text-align: center;
831
+ }
832
+
833
+ .fpFooter {
834
+ padding: 2% 7%; width:100%; clear:both;float:left;box-sizing:border-box;
835
+ }
836
+
837
+ .fpFooter .logo {
838
+ float:left;
839
+ }
840
+
841
+ .fpFooter .tag {
842
+ font-family: 'Source Sans Pro', sans-serif; color: #888888; font-size: 18px; font-weight: 300; float:right; margin-top: 20px;
843
+ }
844
+
845
+ #fp-custom-description {
846
+ background-color: #f4f4f4; color: #636363; display: inline-block; float: none; max-width: none; min-width: none; width: auto;
847
+ }
848
+
849
+ /*#fp-info {
850
+ position: relative; right: 5px; top: 8px;
851
+ }*/
852
+
853
+ .fpWrap .close {
854
+ color: #aaa;
855
+ cursor: pointer;
856
+ font-size: 22px;
857
+ font-weight: bold;
858
+ line-height: 0.5;
859
+ position: absolute;
860
+ right: 4px;
861
+ top: 2px;
862
+ text-decoration: none;
863
+ }