Initial commit
authorLaury GvR <laury@gaslightmedia.com>
Mon, 17 Nov 2014 19:43:49 +0000 (14:43 -0500)
committerLaury GvR <laury@gaslightmedia.com>
Mon, 17 Nov 2014 19:43:49 +0000 (14:43 -0500)
55 files changed:
anet_php_sdk/AuthorizeNet.php [new file with mode: 0755]
anet_php_sdk/License.pdf [new file with mode: 0755]
anet_php_sdk/README [new file with mode: 0755]
anet_php_sdk/README.html [new file with mode: 0755]
anet_php_sdk/doc/AIM.markdown [new file with mode: 0755]
anet_php_sdk/doc/ARB.markdown [new file with mode: 0755]
anet_php_sdk/doc/CIM.markdown [new file with mode: 0755]
anet_php_sdk/doc/CP.markdown [new file with mode: 0755]
anet_php_sdk/doc/DPM.markdown [new file with mode: 0755]
anet_php_sdk/doc/SIM.markdown [new file with mode: 0755]
anet_php_sdk/doc/SOAP.markdown [new file with mode: 0755]
anet_php_sdk/doc/TD.markdown [new file with mode: 0755]
anet_php_sdk/lib/AuthorizeNetAIM.php [new file with mode: 0755]
anet_php_sdk/lib/AuthorizeNetARB.php [new file with mode: 0755]
anet_php_sdk/lib/AuthorizeNetCIM.php [new file with mode: 0755]
anet_php_sdk/lib/AuthorizeNetCP.php [new file with mode: 0755]
anet_php_sdk/lib/AuthorizeNetDPM.php [new file with mode: 0755]
anet_php_sdk/lib/AuthorizeNetSIM.php [new file with mode: 0755]
anet_php_sdk/lib/AuthorizeNetSOAP.php [new file with mode: 0755]
anet_php_sdk/lib/AuthorizeNetTD.php [new file with mode: 0755]
anet_php_sdk/lib/shared/AuthorizeNetRequest.php [new file with mode: 0755]
anet_php_sdk/lib/shared/AuthorizeNetResponse.php [new file with mode: 0755]
anet_php_sdk/lib/shared/AuthorizeNetTypes.php [new file with mode: 0755]
anet_php_sdk/lib/shared/AuthorizeNetXMLResponse.php [new file with mode: 0755]
anet_php_sdk/lib/ssl/cert.pem [new file with mode: 0755]
anet_php_sdk/tests/AuthorizeNetAIM_Test.php [new file with mode: 0755]
anet_php_sdk/tests/AuthorizeNetARB_Test.php [new file with mode: 0755]
anet_php_sdk/tests/AuthorizeNetCIM_Test.php [new file with mode: 0755]
anet_php_sdk/tests/AuthorizeNetCP_Test.php [new file with mode: 0755]
anet_php_sdk/tests/AuthorizeNetDPM_Test.php [new file with mode: 0755]
anet_php_sdk/tests/AuthorizeNetSIM_Test.php [new file with mode: 0755]
anet_php_sdk/tests/AuthorizeNetSSL_Test.php [new file with mode: 0755]
anet_php_sdk/tests/AuthorizeNetTD_Test.php [new file with mode: 0755]
anet_php_sdk/tests/AuthorizeNet_SOAP_Test.php [new file with mode: 0755]
anet_php_sdk/tests/AuthorizeNet_Test_Config.php [new file with mode: 0755]
anet_php_sdk/tests/README [new file with mode: 0755]
anet_php_sdk/tests/domain.crt [new file with mode: 0755]
anet_php_sdk/tests/report.html [new file with mode: 0755]
css/glm-donate-admin.css [new file with mode: 0755]
css/glm-donate-display.css [new file with mode: 0755]
css/glm-donate-thickbox.css [new file with mode: 0755]
css/glm-donate-widget.css [new file with mode: 0755]
includes/donate-display.php [new file with mode: 0755]
includes/donate-display_1.php [new file with mode: 0644]
includes/donate-function.php [new file with mode: 0755]
includes/donate-options.php [new file with mode: 0755]
js/glm-donate.js [new file with mode: 0755]
js/list.min.js [new file with mode: 0755]
js/paymentmethods.js [new file with mode: 0755]
readme.txt [new file with mode: 0755]
screenshot-1.png [new file with mode: 0755]
screenshot-2.png [new file with mode: 0755]
screenshot-3.png [new file with mode: 0755]
screenshot-4.png [new file with mode: 0755]
wp-donate.php [new file with mode: 0755]

diff --git a/anet_php_sdk/AuthorizeNet.php b/anet_php_sdk/AuthorizeNet.php
new file mode 100755 (executable)
index 0000000..31fdaa9
--- /dev/null
@@ -0,0 +1,29 @@
+<?php
+/**
+ * The AuthorizeNet PHP SDK. Include this file in your project.
+ *
+ * @package AuthorizeNet
+ */
+require dirname(__FILE__) . '/lib/shared/AuthorizeNetRequest.php';
+require dirname(__FILE__) . '/lib/shared/AuthorizeNetTypes.php';
+require dirname(__FILE__) . '/lib/shared/AuthorizeNetXMLResponse.php';
+require dirname(__FILE__) . '/lib/shared/AuthorizeNetResponse.php';
+require dirname(__FILE__) . '/lib/AuthorizeNetAIM.php';
+require dirname(__FILE__) . '/lib/AuthorizeNetARB.php';
+require dirname(__FILE__) . '/lib/AuthorizeNetCIM.php';
+require dirname(__FILE__) . '/lib/AuthorizeNetSIM.php';
+require dirname(__FILE__) . '/lib/AuthorizeNetDPM.php';
+require dirname(__FILE__) . '/lib/AuthorizeNetTD.php';
+require dirname(__FILE__) . '/lib/AuthorizeNetCP.php';
+
+if (class_exists("SoapClient")) {
+    require dirname(__FILE__) . '/lib/AuthorizeNetSOAP.php';
+}
+/**
+ * Exception class for AuthorizeNet PHP SDK.
+ *
+ * @package AuthorizeNet
+ */
+class AuthorizeNetException extends Exception
+{
+}
\ No newline at end of file
diff --git a/anet_php_sdk/License.pdf b/anet_php_sdk/License.pdf
new file mode 100755 (executable)
index 0000000..86d1834
Binary files /dev/null and b/anet_php_sdk/License.pdf differ
diff --git a/anet_php_sdk/README b/anet_php_sdk/README
new file mode 100755 (executable)
index 0000000..e706a1d
--- /dev/null
@@ -0,0 +1,230 @@
+By:
+    Authorize.Net
+    http://developer.authorize.net
+    http://community.developer.authorize.net
+
+License:
+    See License.pdf
+
+About:
+    A PHP library for working with all Authorize.Net APIs.
+
+Files:
+    - AuthorizeNet.php                       -> Includes all classes. Include this file in your project.
+    - lib/AuthorizeNetAIM.php                -> AIM API.
+    - lib/AuthorizeNetARB.php                -> ARB API.
+    - lib/AuthorizeNetCIM.php                -> CIM API.
+    - lib/AuthorizeNetSIM.php                -> SIM API.
+    - lib/AuthorizeNetTD.php                 -> Reporting API.
+    - lib/AuthorizeNetCP.php                 -> Card Present API.
+    - lib/AuthorizeNetDPM.php                -> Direct Post Method Helpers.
+    - lib/AuthorizeNetSOAP.php               -> Class to assist with using the SOAP API.
+    - lib/shared/AuthorizeNetRequest.php     -> Class to connect to AuthorizeNet.
+    - lib/shared/AuthorizeNetTypes.php       -> Classes for AuthorizeNet Datatypes.
+    - lib/shared/AuthorizeNetResponse.php    -> Class to parse AuthorizeNet NVP Responses.
+    - lib/shared/AuthorizeNetXMLResponse.php -> Class to parse AuthorizeNet XML Responses.
+    - lib/ssl/cert.pem                       -> The AuthorizeNet Certificate bundle.
+    - tests/                                 -> Tests & examples for each of the API methods.
+    - README                                 -> This file.
+    - README.html                            -> HTML version of this file.
+
+Requirements:
+    - cURL PHP Extension
+    - PHP 5.2+
+    - An Authorize.Net Merchant Account or Test Account. You can get a 
+      free test account at http://developer.authorize.net/testaccount/
+    
+Install:
+    - Include the 'AuthorizeNet.php' file in your application.
+    - Use your desired API.
+    
+Usage Examples:
+    See below for basic usage examples. View the tests/ folder for more examples of each API.
+      
+AuthorizeNetAIM.php Quick Usage Example:
+    <?php
+    require_once 'anet_php_sdk/AuthorizeNet.php'; 
+    define("AUTHORIZENET_API_LOGIN_ID", "YOURLOGIN");
+    define("AUTHORIZENET_TRANSACTION_KEY", "YOURKEY");
+    define("AUTHORIZENET_SANDBOX", true);
+    $sale = new AuthorizeNetAIM;
+    $sale->amount = "5.99";
+    $sale->card_num = '6011000000000012';
+    $sale->exp_date = '04/15';
+    $response = $sale->authorizeAndCapture();
+    if ($response->approved) {
+        $transaction_id = $response->transaction_id;
+    }
+    ?>
+    
+AuthorizeNetAIM.php Advanced Usage Example:
+    <?php
+    require_once 'anet_php_sdk/AuthorizeNet.php'; 
+    define("AUTHORIZENET_API_LOGIN_ID", "YOURLOGIN");
+    define("AUTHORIZENET_TRANSACTION_KEY", "YOURKEY");
+    define("AUTHORIZENET_SANDBOX", true);
+    $auth = new AuthorizeNetAIM;
+    $auth->amount = "45.00";
+
+    // Use eCheck:
+    $auth->setECheck(
+        '121042882',
+        '123456789123',
+        'CHECKING',
+        'Bank of Earth',
+        'Jane Doe',
+        'WEB'
+    );
+    
+    // Set multiple line items:
+    $auth->addLineItem('item1', 'Golf tees', 'Blue tees', '2', '5.00', 'N');
+    $auth->addLineItem('item2', 'Golf shirt', 'XL', '1', '40.00', 'N');
+    
+    // Set Invoice Number:
+    $auth->invoice_num = time();
+    
+    // Set a Merchant Defined Field:
+    $auth->setCustomField("entrance_source", "Search Engine");
+    
+    // Authorize Only:
+    $response  = $auth->authorizeOnly();
+
+    if ($response->approved) {
+        $auth_code = $response->transaction_id;
+        
+        // Now capture:
+        $capture = new AuthorizeNetAIM;
+        $capture_response = $capture->priorAuthCapture($auth_code);
+        
+        // Now void:
+        $void = new AuthorizeNetAIM;
+        $void_response = $void->void($capture_response->transaction_id);
+    }
+    ?>
+
+AuthorizeNetARB.php Usage Example:
+    <?php
+    require_once 'anet_php_sdk/AuthorizeNet.php';
+    define("AUTHORIZENET_API_LOGIN_ID", "YOURLOGIN");
+    define("AUTHORIZENET_TRANSACTION_KEY", "YOURKEY");
+    $subscription                          = new AuthorizeNet_Subscription;
+    $subscription->name                    = "PHP Monthly Magazine";
+    $subscription->intervalLength          = "1";
+    $subscription->intervalUnit            = "months";
+    $subscription->startDate               = "2011-03-12";
+    $subscription->totalOccurrences        = "12";
+    $subscription->amount                  = "12.99");
+    $subscription->creditCardCardNumber    = "6011000000000012";
+    $subscription->creditCardExpirationDate= "2018-10";
+    $subscription->creditCardCardCode      = "123";
+    $subscription->billToFirstName         = "Rasmus";
+    $subscription->billToLastName          = "Doe";
+
+    // Create the subscription.
+    $request = new AuthorizeNetARB;
+    $response = $request->createSubscription($subscription);
+    $subscription_id = $response->getSubscriptionId();
+    ?>
+
+AuthorizeNetCIM.php Usage Example:
+    <?php
+    require_once 'anet_php_sdk/AuthorizeNet.php';
+    define("AUTHORIZENET_API_LOGIN_ID", "YOURLOGIN");
+    define("AUTHORIZENET_TRANSACTION_KEY", "YOURKEY");
+    $request = new AuthorizeNetCIM;
+    // Create new customer profile
+    $customerProfile                    = new AuthorizeNetCustomer;
+    $customerProfile->description       = "Description of customer";
+    $customerProfile->merchantCustomerId= time();
+    $customerProfile->email             = "test@domain.com";
+    $response = $request->createCustomerProfile($customerProfile);
+    if ($response->isOk()) {
+        $customerProfileId = $response->getCustomerProfileId();
+    }
+    ?>
+
+AuthorizeNetSIM.php Usage Example:
+    <?php
+    require_once 'anet_php_sdk/AuthorizeNet.php';
+    define("AUTHORIZENET_API_LOGIN_ID", "YOURLOGIN");
+    define("AUTHORIZENET_MD5_SETTING", "");
+    $message = new AuthorizeNetSIM;
+    if ($message->isAuthorizeNet()) {
+        $transactionId = $message->transaction_id;
+    }
+    ?>
+    
+AuthorizeNetDPM.php Usage Example:
+    <?php // Filename: direct_post.php
+    require_once 'anet_php_sdk/AuthorizeNet.php'; // The SDK
+    $url = "http://YOUR_DOMAIN.com/direct_post.php";
+    $api_login_id = 'YOUR_API_LOGIN_ID';
+    $transaction_key = 'YOUR_TRANSACTION_KEY';
+    $md5_setting = 'YOUR_MD5_SETTING'; // Your MD5 Setting
+    $amount = "5.99";
+    AuthorizeNetDPM::directPostDemo($url, $api_login_id, $transaction_key, $amount, $md5_setting);
+    ?>
+
+AuthorizeNetCP.php Usage Example:
+    <?php
+    require_once 'anet_php_sdk/AuthorizeNet.php';
+    define("AUTHORIZENET_API_LOGIN_ID", "YOURLOGIN");
+    define("AUTHORIZENET_TRANSACTION_KEY", "YOURKEY");
+    define("AUTHORIZENET_MD5_SETTING", "");
+    $sale = new AuthorizeNetCP;
+    $sale->amount = '59.99';
+    $sale->device_type = '4';
+    $sale->setTrack1Data('%B4111111111111111^CARDUSER/JOHN^1803101000000000020000831000000?');
+    $response = $sale->authorizeAndCapture();
+    $trans_id = $response->transaction_id;
+    ?>
+
+AuthorizeNetTD.php Usage Example:
+    <?php
+    require_once 'anet_php_sdk/AuthorizeNet.php';
+    define("AUTHORIZENET_API_LOGIN_ID", "YOURLOGIN");
+    define("AUTHORIZENET_TRANSACTION_KEY", "YOURKEY");
+    $request = new AuthorizeNetTD;
+    $response = $request->getTransactionDetails("12345");
+    echo $response->xml->transaction->transactionStatus;
+    ?>
+    
+Test Credit Card Numbers:
+    - Set the expiration date to anytime in the future.
+    - American Express Test Card=> 370000000000002
+    - Discover Test Card        => 6011000000000012
+    - Visa Test Card            => 4007000000027
+    - Second Visa Test Card     => 4012888818888
+    - JCB                       => 3088000000000017
+    - Diners Club/ Carte Blanche=> 38000000000006
+
+PHPDoc:
+  To autogenerate PHPDocs run:
+  phpdoc -t phpdocs/ -f AuthorizeNet.php -d lib
+
+Release Notes
+    Version 1.1.8
+    - Fixed an issue with validationMode in CIM::updateCustomerPaymentProfile.
+      Note: The behavior where validationMode persisted across transactions using the same request object
+      has been removed. This was unsupported behavior.
+    - Removed an unused validationMode argument in CIM::updateCustomerProfile. The parameter used to be ignored, now its removed.
+    - Enhanced the tests with checks for single digit months in expiration date support and SSL certificate validity.
+    Version 1.1.7
+    - Added getBatchStatisticsRequest and getUnsettledTransactionListRequest support to the SDK.
+    Version 1.1.6
+    - Added the HTML version of the README to the distributed bundle. It was missing in version 1.1.5.
+    Version 1.1.5
+    - Added HTML version of README.
+    Version 1.1.4
+    - Updated the cert.pem bundle to include the new secure.authorize.net SSL certificate.
+    Version 1.1.3
+    - Added more documentation
+    - Improved support for all Transaction Details API methods.
+    - Added support for the Card Present API.
+    - Added easier xpath support to XML Response class.
+    - Added ability to use DPM sample app with production account.
+    Version 1.1.2
+    - Added getValidationResponses method to CIM Response for parsing the validation results when validating payment profiles.
+    - Added support for UpdateSplitTenderGroup method to CIM request.
+    - Bug fix. In CIM requests using validation mode the the validation mode element should have been added to the end of the request.
+    - Bug fix. In AIM Response class where $response->account_number was returning the wrong value.
\ No newline at end of file
diff --git a/anet_php_sdk/README.html b/anet_php_sdk/README.html
new file mode 100755 (executable)
index 0000000..795637a
--- /dev/null
@@ -0,0 +1,358 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
+  "http://www.w3.org/TR/html4/loose.dtd">
+<html lang='en'>
+<head>
+<title> PHP SDK README </title>
+<style type="text/css">
+body {
+       min-width: 768px;
+       font-family: "Helvetica Neue","Lucida Grande","Segoe UI",Arial,Helvetica,Verdana,sans-serif;
+       color: #333333;
+       font-size: 0.8em;
+}
+code {
+       font-family: 'Courier New';
+       font-size: 1.0em;
+       color: #000000;
+       background-color: #f1f1f1;
+       white-space: pre;
+       line-height: 1;
+       display: block;
+       margin-left: 3%;
+       margin-right: 3%;
+       padding: 10px;
+}
+table {
+       border-collapse: collapse;
+       width: 94%;
+       margin: 3%;
+       margin-right: 3%;
+       margin-top: 0px;
+       margin-bottom: 0px;
+}
+td {
+       padding: 3px;
+       border: solid 1px #cccccc;
+}
+ul {
+       margin-top: 0px;
+}
+h1,h2,h3,h6 {
+       margin: 0px;
+       padding: 0px;
+       text-align: center;
+}
+h4,h5 {
+       margin-bottom: 0px;
+       padding-bottom: 5px;
+}
+.indent {
+       display: block;
+       margin-left: 3%;
+}
+.sc0 {
+       font-weight: bold;
+}
+.sc18 {
+       color: #FF0000;
+}
+.sc119 {
+       color: #808080;
+}
+.sc120 {
+       color: #808080;
+}
+.sc121 {
+       font-weight: bold;
+       color: #0000FF;
+}
+.sc123 {
+       color: #000080;
+}
+.sc125 {
+       color: #008000;
+}
+.sc127 {
+       color: #8000FF;
+}
+</style>
+</head>
+
+<body>
+<h1>Authorize.Net PHP SDK</h1>
+<h2>version 3.1.2</h2>
+<h6><a href='http://developer.authorize.net'>http://developer.authorize.net</a></h6>
+<h6><a href='http://community.developer.authorize.net'>http://community.developer.authorize.net</a></h6>
+
+<br/>
+<h4>License</h4>
+<span class='indent'>Authorize.Net<br />
+    See <a href='./License.pdf'>License.pdf</a>
+</span>
+
+<br/>
+<h4>About</h4>
+<span class='indent'>A PHP library for working with all Authorize.Net APIs.
+</span>
+
+<br/>
+<h4>Files</h4>
+<table>
+<tr><td>Authorize.Net.php</td><td>Includes all classes. Include this file in your project.</td></tr>
+<tr><td>AuthorizeNet.php</td><td>Includes all classes. Include this file in your project.</td></tr>
+<tr><td>lib/AuthorizeNetAIM.php</td><td>AIM API.</td></tr>
+<tr><td>lib/AuthorizeNetARB.php</td><td>-> ARB API.</td></tr>
+<tr><td>lib/AuthorizeNetCIM.php</td><td>CIM API.</td></tr>
+<tr><td>lib/AuthorizeNetSIM.php</td><td>SIM API.</td></tr>
+<tr><td>lib/AuthorizeNetTD.php</td><td>Reporting API.</td></tr>
+<tr><td>lib/AuthorizeNetCP.php</td><td>Card Present API.</td></tr>
+<tr><td>lib/AuthorizeNetDPM.php</td><td>Direct Post Method Helpers.</td></tr>
+<tr><td>lib/AuthorizeNetSOAP.php</td><td>Class to assist with using the SOAP API.</td></tr>
+<tr><td>lib/shared/AuthorizeNetRequest.php</td><td>Class to connect to AuthorizeNet.</td></tr>
+<tr><td>lib/shared/AuthorizeNetTypes.php</td><td>Classes for AuthorizeNet Datatypes.</td></tr>
+<tr><td>lib/shared/AuthorizeNetResponse.php</td><td>Class to parse AuthorizeNet NVP Responses.</td></tr>
+<tr><td>lib/shared/AuthorizeNetXMLResponse.php</td><td>Class to parse AuthorizeNet XML Responses.</td></tr>
+<tr><td>lib/ssl/cert.pem</td><td>The AuthorizeNet Certificate bundle.</td></tr>
+<tr><td>tests/</td><td>Tests &amp; examples for each of the API methods.</td></tr>
+<tr><td>README</td><td>Plain text version of this file.</td></tr>
+<tr><td>README.html</td><td>This file.</td></tr>
+</table>
+
+<br />
+<h4>Requirements</h4>
+<ul>
+    <li>cURL PHP Extension</li>
+    <li>PHP 5.2+</li>
+    <li>An Authorize.Net Merchant Account or Test Account. You can get a free test account at <a href='http://developer.authorize.net/testaccount/'>http://developer.authorize.net/testaccount/</a></li>
+</ul>
+
+<h4>Install</h4>
+<ul>
+    <li>Include the 'AuthorizeNet.php' file in your application.
+    <li>Use your desired API.
+</ul>
+    
+<h4>Usage Examples:</h4>
+       <span class='indent'>See below for basic usage examples. View the tests/ folder for more examples of each API.</span>
+      
+<h5>AuthorizeNetAIM.php Quick Usage Example</h5>
+<code><span class="sc18">&lt;?php</span><span class="sc118">
+    </span><span class="sc121">require_once</span><span class="sc118"> </span><span class="sc120">'anet_php_sdk/AuthorizeNet.php'</span><span class="sc127">;</span><span class="sc118"> 
+    define</span><span class="sc127">(</span><span class="sc119">"AUTHORIZENET_API_LOGIN_ID"</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc119">"YOURLOGIN"</span><span class="sc127">);</span><span class="sc118">
+    define</span><span class="sc127">(</span><span class="sc119">"AUTHORIZENET_TRANSACTION_KEY"</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc119">"YOURKEY"</span><span class="sc127">);</span><span class="sc118">
+    define</span><span class="sc127">(</span><span class="sc119">"AUTHORIZENET_SANDBOX"</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc121">true</span><span class="sc127">);</span><span class="sc118">
+    </span><span class="sc123">$sale</span><span class="sc118"> </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc121">new</span><span class="sc118"> AuthorizeNetAIM</span><span class="sc127">;</span><span class="sc118">
+    </span><span class="sc123">$sale</span><span class="sc127">-&gt;</span><span class="sc118">amount </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc119">"5.99"</span><span class="sc127">;</span><span class="sc118">
+    </span><span class="sc123">$sale</span><span class="sc127">-&gt;</span><span class="sc118">card_num </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc120">'6011000000000012'</span><span class="sc127">;</span><span class="sc118">
+    </span><span class="sc123">$sale</span><span class="sc127">-&gt;</span><span class="sc118">exp_date </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc120">'04/15'</span><span class="sc127">;</span><span class="sc118">
+    </span><span class="sc123">$response</span><span class="sc118"> </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc123">$sale</span><span class="sc127">-&gt;</span><span class="sc118">authorizeAndCapture</span><span class="sc127">();</span><span class="sc118">
+    </span><span class="sc121">if</span><span class="sc118"> </span><span class="sc127">(</span><span class="sc123">$response</span><span class="sc127">-&gt;</span><span class="sc118">approved</span><span class="sc127">)</span><span class="sc118"> </span><span class="sc127">{</span><span class="sc118">
+        </span><span class="sc123">$transaction_id</span><span class="sc118"> </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc123">$response</span><span class="sc127">-&gt;</span><span class="sc118">transaction_id</span><span class="sc127">;</span><span class="sc118">
+    </span><span class="sc127">}</span><span class="sc118">
+</span><span class="sc18">?&gt;</span><span class="sc0"></span>
+</code>
+
+<h5>AuthorizeNetAIM.php Advanced Usage Example</h5>
+<code><span class="sc18">&lt;?php</span><span class="sc118">
+    </span><span class="sc121">require_once</span><span class="sc118"> </span><span class="sc120">'anet_php_sdk/AuthorizeNet.php'</span><span class="sc127">;</span><span class="sc118"> 
+    define</span><span class="sc127">(</span><span class="sc119">"AUTHORIZENET_API_LOGIN_ID"</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc119">"YOURLOGIN"</span><span class="sc127">);</span><span class="sc118">
+    define</span><span class="sc127">(</span><span class="sc119">"AUTHORIZENET_TRANSACTION_KEY"</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc119">"YOURKEY"</span><span class="sc127">);</span><span class="sc118">
+    define</span><span class="sc127">(</span><span class="sc119">"AUTHORIZENET_SANDBOX"</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc121">true</span><span class="sc127">);</span><span class="sc118">
+    </span><span class="sc123">$auth</span><span class="sc118"> </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc121">new</span><span class="sc118"> AuthorizeNetAIM</span><span class="sc127">;</span><span class="sc118">
+    </span><span class="sc123">$auth</span><span class="sc127">-&gt;</span><span class="sc118">amount </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc119">"45.00"</span><span class="sc127">;</span><span class="sc118">
+
+    </span><span class="sc125">// Use eCheck:</span><span class="sc118">
+    </span><span class="sc123">$auth</span><span class="sc127">-&gt;</span><span class="sc118">setECheck</span><span class="sc127">(</span><span class="sc118">
+        </span><span class="sc120">'121042882'</span><span class="sc127">,</span><span class="sc118">
+        </span><span class="sc120">'123456789123'</span><span class="sc127">,</span><span class="sc118">
+        </span><span class="sc120">'CHECKING'</span><span class="sc127">,</span><span class="sc118">
+        </span><span class="sc120">'Bank of Earth'</span><span class="sc127">,</span><span class="sc118">
+        </span><span class="sc120">'Jane Doe'</span><span class="sc127">,</span><span class="sc118">
+        </span><span class="sc120">'WEB'</span><span class="sc118">
+    </span><span class="sc127">);</span><span class="sc118">
+    
+    </span><span class="sc125">// Set multiple line items:</span><span class="sc118">
+    </span><span class="sc123">$auth</span><span class="sc127">-&gt;</span><span class="sc118">addLineItem</span><span class="sc127">(</span><span class="sc120">'item1'</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc120">'Golf tees'</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc120">'Blue tees'</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc120">'2'</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc120">'5.00'</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc120">'N'</span><span class="sc127">);</span><span class="sc118">
+    </span><span class="sc123">$auth</span><span class="sc127">-&gt;</span><span class="sc118">addLineItem</span><span class="sc127">(</span><span class="sc120">'item2'</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc120">'Golf shirt'</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc120">'XL'</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc120">'1'</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc120">'40.00'</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc120">'N'</span><span class="sc127">);</span><span class="sc118">
+    
+    </span><span class="sc125">// Set Invoice Number:</span><span class="sc118">
+    </span><span class="sc123">$auth</span><span class="sc127">-&gt;</span><span class="sc118">invoice_num </span><span class="sc127">=</span><span class="sc118"> time</span><span class="sc127">();</span><span class="sc118">
+    
+    </span><span class="sc125">// Set a Merchant Defined Field:</span><span class="sc118">
+    </span><span class="sc123">$auth</span><span class="sc127">-&gt;</span><span class="sc118">setCustomField</span><span class="sc127">(</span><span class="sc119">"entrance_source"</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc119">"Search Engine"</span><span class="sc127">);</span><span class="sc118">
+    
+    </span><span class="sc125">// Authorize Only:</span><span class="sc118">
+    </span><span class="sc123">$response</span><span class="sc118">  </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc123">$auth</span><span class="sc127">-&gt;</span><span class="sc118">authorizeOnly</span><span class="sc127">();</span><span class="sc118">
+
+    </span><span class="sc121">if</span><span class="sc118"> </span><span class="sc127">(</span><span class="sc123">$response</span><span class="sc127">-&gt;</span><span class="sc118">approved</span><span class="sc127">)</span><span class="sc118"> </span><span class="sc127">{</span><span class="sc118">
+        </span><span class="sc123">$auth_code</span><span class="sc118"> </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc123">$response</span><span class="sc127">-&gt;</span><span class="sc118">transaction_id</span><span class="sc127">;</span><span class="sc118">
+        
+        </span><span class="sc125">// Now capture:</span><span class="sc118">
+        </span><span class="sc123">$capture</span><span class="sc118"> </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc121">new</span><span class="sc118"> AuthorizeNetAIM</span><span class="sc127">;</span><span class="sc118">
+        </span><span class="sc123">$capture_response</span><span class="sc118"> </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc123">$capture</span><span class="sc127">-&gt;</span><span class="sc118">priorAuthCapture</span><span class="sc127">(</span><span class="sc123">$auth_code</span><span class="sc127">);</span><span class="sc118">
+        
+        </span><span class="sc125">// Now void:</span><span class="sc118">
+        </span><span class="sc123">$void</span><span class="sc118"> </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc121">new</span><span class="sc118"> AuthorizeNetAIM</span><span class="sc127">;</span><span class="sc118">
+        </span><span class="sc123">$void_response</span><span class="sc118"> </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc123">$void</span><span class="sc127">-&gt;</span><span class="sc118">void</span><span class="sc127">(</span><span class="sc123">$capture_response</span><span class="sc127">-&gt;</span><span class="sc118">transaction_id</span><span class="sc127">);</span><span class="sc118">
+    </span><span class="sc127">}</span><span class="sc118">
+</span><span class="sc18">?&gt;</span><span class="sc0"></span>
+</code>
+       
+<h5>AuthorizeNetARB.php Usage Example</h5>
+<code><span class="sc18">&lt;?php</span><span class="sc118">
+    </span><span class="sc121">require_once</span><span class="sc118"> </span><span class="sc120">'anet_php_sdk/AuthorizeNet.php'</span><span class="sc127">;</span><span class="sc118">
+    define</span><span class="sc127">(</span><span class="sc119">"AUTHORIZENET_API_LOGIN_ID"</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc119">"YOURLOGIN"</span><span class="sc127">);</span><span class="sc118">
+    define</span><span class="sc127">(</span><span class="sc119">"AUTHORIZENET_TRANSACTION_KEY"</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc119">"YOURKEY"</span><span class="sc127">);</span><span class="sc118">
+    </span><span class="sc123">$subscription</span><span class="sc118">                          </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc121">new</span><span class="sc118"> AuthorizeNet_Subscription</span><span class="sc127">;</span><span class="sc118">
+    </span><span class="sc123">$subscription</span><span class="sc127">-&gt;</span><span class="sc118">name                    </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc119">"PHP Monthly Magazine"</span><span class="sc127">;</span><span class="sc118">
+    </span><span class="sc123">$subscription</span><span class="sc127">-&gt;</span><span class="sc118">intervalLength          </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc119">"1"</span><span class="sc127">;</span><span class="sc118">
+    </span><span class="sc123">$subscription</span><span class="sc127">-&gt;</span><span class="sc118">intervalUnit            </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc119">"months"</span><span class="sc127">;</span><span class="sc118">
+    </span><span class="sc123">$subscription</span><span class="sc127">-&gt;</span><span class="sc118">startDate               </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc119">"2011-03-12"</span><span class="sc127">;</span><span class="sc118">
+    </span><span class="sc123">$subscription</span><span class="sc127">-&gt;</span><span class="sc118">totalOccurrences        </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc119">"12"</span><span class="sc127">;</span><span class="sc118">
+    </span><span class="sc123">$subscription</span><span class="sc127">-&gt;</span><span class="sc118">amount                  </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc119">"12.99"</span><span class="sc127">);</span><span class="sc118">
+    </span><span class="sc123">$subscription</span><span class="sc127">-&gt;</span><span class="sc118">creditCardCardNumber    </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc119">"6011000000000012"</span><span class="sc127">;</span><span class="sc118">
+    </span><span class="sc123">$subscription</span><span class="sc127">-&gt;</span><span class="sc118">creditCardExpirationDate</span><span class="sc127">=</span><span class="sc118"> </span><span class="sc119">"2018-10"</span><span class="sc127">;</span><span class="sc118">
+    </span><span class="sc123">$subscription</span><span class="sc127">-&gt;</span><span class="sc118">creditCardCardCode      </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc119">"123"</span><span class="sc127">;</span><span class="sc118">
+    </span><span class="sc123">$subscription</span><span class="sc127">-&gt;</span><span class="sc118">billToFirstName         </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc119">"Rasmus"</span><span class="sc127">;</span><span class="sc118">
+    </span><span class="sc123">$subscription</span><span class="sc127">-&gt;</span><span class="sc118">billToLastName          </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc119">"Doe"</span><span class="sc127">;</span><span class="sc118">
+
+    </span><span class="sc125">// Create the subscription.</span><span class="sc118">
+    </span><span class="sc123">$request</span><span class="sc118"> </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc121">new</span><span class="sc118"> AuthorizeNetARB</span><span class="sc127">;</span><span class="sc118">
+    </span><span class="sc123">$response</span><span class="sc118"> </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc123">$request</span><span class="sc127">-&gt;</span><span class="sc118">createSubscription</span><span class="sc127">(</span><span class="sc123">$subscription</span><span class="sc127">);</span><span class="sc118">
+    </span><span class="sc123">$subscription_id</span><span class="sc118"> </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc123">$response</span><span class="sc127">-&gt;</span><span class="sc118">getSubscriptionId</span><span class="sc127">();</span><span class="sc118">
+</span><span class="sc18">?&gt;</span><span class="sc0"></span>
+</code>
+
+<h5>AuthorizeNetCIM.php Usage Example</h5>
+<code><span class="sc18">&lt;?php</span><span class="sc118">
+    </span><span class="sc121">require_once</span><span class="sc118"> </span><span class="sc120">'anet_php_sdk/AuthorizeNet.php'</span><span class="sc127">;</span><span class="sc118">
+    define</span><span class="sc127">(</span><span class="sc119">"AUTHORIZENET_API_LOGIN_ID"</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc119">"YOURLOGIN"</span><span class="sc127">);</span><span class="sc118">
+    define</span><span class="sc127">(</span><span class="sc119">"AUTHORIZENET_TRANSACTION_KEY"</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc119">"YOURKEY"</span><span class="sc127">);</span><span class="sc118">
+    </span><span class="sc123">$request</span><span class="sc118"> </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc121">new</span><span class="sc118"> AuthorizeNetCIM</span><span class="sc127">;</span><span class="sc118">
+    </span><span class="sc125">// Create new customer profile</span><span class="sc118">
+    </span><span class="sc123">$customerProfile</span><span class="sc118">                    </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc121">new</span><span class="sc118"> AuthorizeNetCustomer</span><span class="sc127">;</span><span class="sc118">
+    </span><span class="sc123">$customerProfile</span><span class="sc127">-&gt;</span><span class="sc118">description       </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc119">"Description of customer"</span><span class="sc127">;</span><span class="sc118">
+    </span><span class="sc123">$customerProfile</span><span class="sc127">-&gt;</span><span class="sc118">merchantCustomerId</span><span class="sc127">=</span><span class="sc118"> time</span><span class="sc127">();</span><span class="sc118">
+    </span><span class="sc123">$customerProfile</span><span class="sc127">-&gt;</span><span class="sc118">email             </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc119">"test@domain.com"</span><span class="sc127">;</span><span class="sc118">
+    </span><span class="sc123">$response</span><span class="sc118"> </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc123">$request</span><span class="sc127">-&gt;</span><span class="sc118">createCustomerProfile</span><span class="sc127">(</span><span class="sc123">$customerProfile</span><span class="sc127">);</span><span class="sc118">
+    </span><span class="sc121">if</span><span class="sc118"> </span><span class="sc127">(</span><span class="sc123">$response</span><span class="sc127">-&gt;</span><span class="sc118">isOk</span><span class="sc127">())</span><span class="sc118"> </span><span class="sc127">{</span><span class="sc118">
+        </span><span class="sc123">$customerProfileId</span><span class="sc118"> </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc123">$response</span><span class="sc127">-&gt;</span><span class="sc118">getCustomerProfileId</span><span class="sc127">();</span><span class="sc118">
+    </span><span class="sc127">}</span><span class="sc118">
+</span><span class="sc18">?&gt;</span><span class="sc0"></span>
+</code>
+
+<h5>AuthorizeNetSIM.php Usage Example</h5>
+<code><span class="sc18">&lt;?php</span><span class="sc118">
+    </span><span class="sc121">require_once</span><span class="sc118"> </span><span class="sc120">'anet_php_sdk/AuthorizeNet.php'</span><span class="sc127">;</span><span class="sc118">
+    define</span><span class="sc127">(</span><span class="sc119">"AUTHORIZENET_API_LOGIN_ID"</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc119">"YOURLOGIN"</span><span class="sc127">);</span><span class="sc118">
+    define</span><span class="sc127">(</span><span class="sc119">"AUTHORIZENET_MD5_SETTING"</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc119">""</span><span class="sc127">);</span><span class="sc118">
+    </span><span class="sc123">$message</span><span class="sc118"> </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc121">new</span><span class="sc118"> AuthorizeNetSIM</span><span class="sc127">;</span><span class="sc118">
+    </span><span class="sc121">if</span><span class="sc118"> </span><span class="sc127">(</span><span class="sc123">$message</span><span class="sc127">-&gt;</span><span class="sc118">isAuthorizeNet</span><span class="sc127">())</span><span class="sc118"> </span><span class="sc127">{</span><span class="sc118">
+        </span><span class="sc123">$transactionId</span><span class="sc118"> </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc123">$message</span><span class="sc127">-&gt;</span><span class="sc118">transaction_id</span><span class="sc127">;</span><span class="sc118">
+    </span><span class="sc127">}</span><span class="sc118">
+</span><span class="sc18">?&gt;</span><span class="sc0"></span>
+</code>
+
+<h5>AuthorizeNetDPM.php Usage Example</h5>
+<code><span class="sc18">&lt;?php</span><span class="sc118"> </span><span class="sc125">// Filename: direct_post.php</span><span class="sc118">
+    </span><span class="sc121">require_once</span><span class="sc118"> </span><span class="sc120">'anet_php_sdk/AuthorizeNet.php'</span><span class="sc127">;</span><span class="sc118"> </span><span class="sc125">// The SDK</span><span class="sc118">
+    </span><span class="sc123">$url</span><span class="sc118"> </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc119">"http://YOUR_DOMAIN.com/direct_post.php"</span><span class="sc127">;</span><span class="sc118">
+    </span><span class="sc123">$api_login_id</span><span class="sc118"> </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc120">'YOUR_API_LOGIN_ID'</span><span class="sc127">;</span><span class="sc118">
+    </span><span class="sc123">$transaction_key</span><span class="sc118"> </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc120">'YOUR_TRANSACTION_KEY'</span><span class="sc127">;</span><span class="sc118">
+    </span><span class="sc123">$md5_setting</span><span class="sc118"> </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc120">'YOUR_MD5_SETTING'</span><span class="sc127">;</span><span class="sc118"> </span><span class="sc125">// Your MD5 Setting</span><span class="sc118">
+    </span><span class="sc123">$amount</span><span class="sc118"> </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc119">"5.99"</span><span class="sc127">;</span><span class="sc118">
+    AuthorizeNetDPM</span><span class="sc127">::</span><span class="sc118">directPostDemo</span><span class="sc127">(</span><span class="sc123">$url</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc123">$api_login_id</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc123">$transaction_key</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc123">$amount</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc123">$md5_setting</span><span class="sc127">);</span><span class="sc118">
+</span><span class="sc18">?&gt;</span><span class="sc0"></span>
+</code>
+
+<h5>AuthorizeNetCP.php Usage Example</h5>
+<code><span class="sc18">&lt;?php</span><span class="sc118">
+    </span><span class="sc121">require_once</span><span class="sc118"> </span><span class="sc120">'anet_php_sdk/AuthorizeNet.php'</span><span class="sc127">;</span><span class="sc118">
+    define</span><span class="sc127">(</span><span class="sc119">"AUTHORIZENET_API_LOGIN_ID"</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc119">"YOURLOGIN"</span><span class="sc127">);</span><span class="sc118">
+    define</span><span class="sc127">(</span><span class="sc119">"AUTHORIZENET_TRANSACTION_KEY"</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc119">"YOURKEY"</span><span class="sc127">);</span><span class="sc118">
+    define</span><span class="sc127">(</span><span class="sc119">"AUTHORIZENET_MD5_SETTING"</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc119">""</span><span class="sc127">);</span><span class="sc118">
+    </span><span class="sc123">$sale</span><span class="sc118"> </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc121">new</span><span class="sc118"> AuthorizeNetCP</span><span class="sc127">;</span><span class="sc118">
+    </span><span class="sc123">$sale</span><span class="sc127">-&gt;</span><span class="sc118">amount </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc120">'59.99'</span><span class="sc127">;</span><span class="sc118">
+    </span><span class="sc123">$sale</span><span class="sc127">-&gt;</span><span class="sc118">device_type </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc120">'4'</span><span class="sc127">;</span><span class="sc118">
+    </span><span class="sc123">$sale</span><span class="sc127">-&gt;</span><span class="sc118">setTrack1Data</span><span class="sc127">(</span><span class="sc120">'%B4111111111111111^CARDUSER/JOHN^1803101000000000020000831000000?'</span><span class="sc127">);</span><span class="sc118">
+    </span><span class="sc123">$response</span><span class="sc118"> </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc123">$sale</span><span class="sc127">-&gt;</span><span class="sc118">authorizeAndCapture</span><span class="sc127">();</span><span class="sc118">
+    </span><span class="sc123">$trans_id</span><span class="sc118"> </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc123">$response</span><span class="sc127">-&gt;</span><span class="sc118">transaction_id</span><span class="sc127">;</span><span class="sc118">
+</span><span class="sc18">?&gt;</span><span class="sc0"></span>
+</code>
+
+<h5>AuthorizeNetTD.php Usage Example</h5>
+<code><span class="sc18">&lt;?php</span><span class="sc118">
+    </span><span class="sc121">require_once</span><span class="sc118"> </span><span class="sc120">'anet_php_sdk/AuthorizeNet.php'</span><span class="sc127">;</span><span class="sc118">
+    define</span><span class="sc127">(</span><span class="sc119">"AUTHORIZENET_API_LOGIN_ID"</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc119">"YOURLOGIN"</span><span class="sc127">);</span><span class="sc118">
+    define</span><span class="sc127">(</span><span class="sc119">"AUTHORIZENET_TRANSACTION_KEY"</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc119">"YOURKEY"</span><span class="sc127">);</span><span class="sc118">
+    </span><span class="sc123">$request</span><span class="sc118"> </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc121">new</span><span class="sc118"> AuthorizeNetTD</span><span class="sc127">;</span><span class="sc118">
+    </span><span class="sc123">$response</span><span class="sc118"> </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc123">$request</span><span class="sc127">-&gt;</span><span class="sc118">getTransactionDetails</span><span class="sc127">(</span><span class="sc119">"12345"</span><span class="sc127">);</span><span class="sc118">
+    </span><span class="sc121">echo</span><span class="sc118"> </span><span class="sc123">$response</span><span class="sc127">-&gt;</span><span class="sc118">xml</span><span class="sc127">-&gt;</span><span class="sc118">transaction</span><span class="sc127">-&gt;</span><span class="sc118">transactionStatus</span><span class="sc127">;</span><span class="sc118">
+</span><span class="sc18">?&gt;</span>
+</code>
+    
+<br />
+<h4>Test Credit Card Numbers</h4>
+<table>
+       <tr><td>American Express Test Card</td><td>370000000000002</td></tr>
+       <tr><td>Discover Test Card</td><td>6011000000000012</td></tr>
+       <tr><td>Visa Test Card</td><td>4007000000027</td></tr>
+       <tr><td>Second Visa Test Card</td><td>4012888818888</td></tr>
+       <tr><td>JCB</td><td>3088000000000017</td></tr>
+       <tr><td>Diners Club/ Carte Blanche</td><td>38000000000006</td></tr>
+</table>
+<span class='indent'><small>Set the expiration date to anytime in the future.</small></span>
+<br />
+
+<h4>PHPDoc:</h4>
+  <span class='indent'>To autogenerate PHPDocs run</span>
+  <code>phpdoc -t phpdocs/ -f AuthorizeNet.php -d lib</code>
+
+<h4>Release Notes</h4>
+    <span class='indent'>
+    <em>Version 1.1.8</em>
+    <ul>
+        <li>
+            Fixed an issue with validationMode in CIM::updateCustomerPaymentProfile. Note: The behavior where validationMode persisted across transactions using the same request object has been removed. This was unsupported behavior.
+        </li>
+        <li>
+            Removed an unused validationMode argument in CIM::updateCustomerProfile. The parameter used to be ignored, now its removed.
+        </li>
+        <li>
+            Enhanced the tests with checks for single digit months in expiration date support and SSL certificate validity.
+        </li>
+    </ul>
+  <em>Version 1.1.7</em>
+  <ul>
+    <li>Added getBatchStatisticsRequest and getUnsettledTransactionListRequest support to the SDK.</li>
+  </ul>
+  <em>Version 1.1.6</em>
+  <ul>
+    <li>Added the HTML version of the README to the distributed bundle. It was missing in version 1.1.5.</li>
+  </ul>
+  <em>Version 1.1.5</em>
+  <ul>
+    <li>Added HTML version of README.</li>
+  </ul>
+  <em>Version 1.1.4</em>
+  <ul>
+    <li>Updated the cert.pem bundle to include the new secure.authorize.net SSL certificate.</li>
+  </ul>
+       <em>Version 1.1.3</em>
+       <ul>
+    <li>Added more documentation</li>
+    <li>Improved support for all Transaction Details API methods.</li>
+    <li>Added support for the Card Present API.</li>
+    <li>Added easier xpath support to XML Response class.</li>
+    <li>Added ability to use DPM sample app with production account.</li>
+       </ul>
+    <em>Version 1.1.2</em>
+       <ul>
+    <li>Added getValidationResponses method to CIM Response for parsing the validation results when validating payment profiles.</li>
+    <li>Added support for UpdateSplitTenderGroup method to CIM request.</li>
+    <li>Bug fix. In CIM requests using validation mode the the validation mode element should have been added to the end of the request.</li>
+    <li>Bug fix. In AIM Response class where $response->account_number was returning the wrong value.</li>
+       </ul>
+       </span>
+</body>
+</html>
\ No newline at end of file
diff --git a/anet_php_sdk/doc/AIM.markdown b/anet_php_sdk/doc/AIM.markdown
new file mode 100755 (executable)
index 0000000..2ae1541
--- /dev/null
@@ -0,0 +1,187 @@
+Advanced Integration Method
+===========================
+
+Basic Overview
+--------------
+
+The AuthorizeNetAIM class creates a request object for submitting transactions
+to the AuthorizeNetAIM API. To use, create an instance of the class, set the fields
+for your transaction, call the method you want to use (Authorize Only, Authorize & 
+Capture, etc.) and you'll receive an AuthorizeNetAIM response object providing easy access
+to the results of the transaction.
+
+Including the SDK
+-----------------
+
+require_once 'anet_php_sdk/AuthorizeNet.php'; 
+
+Setting Merchant Credentials
+----------------------------
+The easiest way to set credentials is to define constants which the SDK uses:
+define("AUTHORIZENET_API_LOGIN_ID", "YOURLOGIN");
+define("AUTHORIZENET_TRANSACTION_KEY", "YOURKEY");
+
+You can also set credentials manually per request like so:
+
+$sale = new AuthorizeNetAIM("YOUR_API_LOGIN_ID","YOUR_TRANSACTION_KEY");
+
+
+Setting the Transaction Post Location
+-------------------------------------
+
+To post transactions to the live Authorize.Net gateway:
+define("AUTHORIZENET_SANDBOX", false);
+
+To post transactions to the Authorize.Net test server:
+define("AUTHORIZENET_SANDBOX", true);
+
+You can also set the location manually per request:
+$sale->setSandbox(false);
+
+
+Setting Fields
+--------------
+
+An Authorize.Net AIM request is simply a set of name/value pairs. The PHP SDK
+allows you to set these fields in a few different ways depending on your
+preference.
+
+Note: to make things easier on the developer, the "x_" prefix attached to each
+field in the AIM API has been removed. Thus, instead of setting $sale->x_card_num,
+set $sale->card_num instead.
+
+1.) By Setting Fields Directly:
+$sale = new AuthorizeNetAIM;
+$sale->amount = "1999.99";
+$sale->card_num = '6011000000000012';
+$sale->exp_date = '04/15';
+$response = $sale->authorizeAndCapture();
+
+2.) By Setting Multiple Fields at Once:
+$sale = new AuthorizeNetAIM;
+$sale->setFields(
+    array(
+    'amount' => rand(1, 1000),
+    'card_num' => '6011000000000012',
+    'exp_date' => '0415'
+    )
+);
+
+3.) By Setting Special Items
+
+To add line items or set custom fields use the respective functions:
+
+Line Items:
+$sale->addLineItem(
+  'item1', // Item Id
+  'Golf tees', // Item Name
+  'Blue tees', // Item Description
+  '2', // Item Quantity
+  '5.00', // Item Unit Price
+  'N' // Item taxable
+  );
+
+Custom Fields:
+$sale->setCustomField("coupon_code", "SAVE2011");
+
+4.) By Passing in Objects
+
+Each property will be copied from the object to the AIM request.
+
+$sale = new AuthorizeNetAIM;
+$customer = (object)array();
+$customer->first_name = "Jane";
+$customer->last_name = "Smith";
+$customer->company = "Jane Smith Enterprises Inc.";
+$customer->address = "20 Main Street";
+$customer->city = "San Francisco";
+$customer->state = "CA";
+$customer->zip = "94110";
+$customer->country = "US";
+$customer->phone = "415-555-5557";
+$customer->fax = "415-555-5556";
+$customer->email = "foo@example.com";
+$customer->cust_id = "55";
+$customer->customer_ip = "98.5.5.5";
+$sale->setFields($customer);
+
+Submitting Transactions
+-----------------------
+To submit a transaction call one of the 7 methods: 
+
+-authorizeAndCapture()
+-authorizeOnly()
+-priorAuthCapture()
+-void()
+-captureOnly()
+-credit()
+
+Each method has optional parameters which highlight the fields required by the
+Authorize.Net API for that transaction type.
+
+
+eCheck
+------
+To submit an electronic check transaction you can set the required fields individually
+or simply use the setECheck method:
+
+$sale = new AuthorizeNetAIM;
+$sale->amount = "45.00";
+$sale->setECheck(
+  '121042882', // bank_aba_code
+  '123456789123', // bank_acct_num
+  'CHECKING', // bank_acct_type
+  'Bank of Earth', // bank_name
+  'Jane Doe', // bank_acct_name
+  'WEB' // echeck_type
+);
+$response  = $sale->authorizeAndCapture();
+
+
+Partial Authorization Transactions
+----------------------------------
+To enable partial authorization transactions set the partial_auth flag
+to true:
+
+$sale->allow_partial_auth = true;
+
+You should receive a split tender id in the response if a partial auth
+is made:
+
+$split_tender_id = $response->split_tender_id;
+
+
+Itemized Order Information
+--------------------------
+To add itemized order information use the addLineItem method:
+
+$auth->addLineItem(
+  'item1', // Item Id
+  'Golf tees', // Item Name
+  'Blue tees', // Item Description
+  '2', // Item Quantity
+  '5.00', // Item Unit Price
+  'N' // Item taxable
+  );
+
+
+Merchant Defined Fields
+-----------------------
+You can use the setCustomField method to set any custom merchant defined field(s):
+
+$sale->setCustomField("entrance_source", "Search Engine");
+$sale->setCustomField("coupon_code", "SAVE2011");
+
+
+Transaction Response
+--------------------
+When you submit an AIM transaction you receive an AuthorizeNetAIM_Response
+object in return. You can access each name/value pair in the response as
+you would normally expect:
+
+$response = $sale->authorizeAndCapture();
+$response->response_code;
+$response->response_subcode;
+$response->response_reason_code;
+$response->transaction_id;
+
diff --git a/anet_php_sdk/doc/ARB.markdown b/anet_php_sdk/doc/ARB.markdown
new file mode 100755 (executable)
index 0000000..1d4bb92
--- /dev/null
@@ -0,0 +1,52 @@
+ARB API
+=======
+
+Basic Overview
+--------------
+
+The AuthorizeNetARB class creates a request object for submitting transactions
+to the AuthorizeNetARB API.
+
+
+Creating/Updating Subscriptions
+-------------------------------
+
+To create or update a subscription first create a subscription object:
+
+$subscription = new AuthorizeNet_Subscription;
+$subscription->name = "Short subscription";
+$subscription->intervalLength = "1";
+$subscription->intervalUnit = "months";
+$subscription->startDate = "2011-03-12";
+$subscription->totalOccurrences = "14";
+$subscription->amount = rand(1,100);
+$subscription->creditCardCardNumber = "6011000000000012";
+$subscription->creditCardExpirationDate = "2018-10";
+$subscription->creditCardCardCode = "123";
+$subscription->billToFirstName = "john";
+$subscription->billToLastName = "doe";
+
+Then create an AuthorizeNetARB object and call the appropriate method
+passing in your subscription object:
+
+$request = new AuthorizeNetARB;
+$response = $request->createSubscription($subscription);
+
+   or for updating a subscription:
+   
+$response = $request->updateSubscription($subscription_id, $subscription);
+
+Getting Subscription Status
+---------------------------
+
+Create a new AuthorizeNetARB object and call the getSubscriptionStatus
+method with the subscription_id you want the status of as the parameter:
+
+$status_request = new AuthorizeNetARB;
+$status_response = $status_request->getSubscriptionStatus($subscription_id);
+
+Canceling a Subscription
+------------------------
+
+$cancellation = new AuthorizeNetARB;
+$cancel_response = $cancellation->cancelSubscription($subscription_id);
diff --git a/anet_php_sdk/doc/CIM.markdown b/anet_php_sdk/doc/CIM.markdown
new file mode 100755 (executable)
index 0000000..bbe8a3b
--- /dev/null
@@ -0,0 +1,249 @@
+CIM API
+=======
+
+Basic Overview
+--------------
+
+The AuthorizeNetCIM class creates a request object for submitting transactions
+to the Authorize.Net CIM API.
+
+
+Creating a Customer Profile
+---------------------------
+
+To create a new cusomter profile, first create a new AuthorizeNetCustomer
+object.
+
+$customerProfile = new AuthorizeNetCustomer;
+$customerProfile->description = "Description of customer";
+$customerProfile->merchantCustomerId = 123;
+$customerProfile->email = "user@domain.com";
+
+You can then create an add payment profiles and addresses to this
+customer object.
+
+// Add payment profile.
+$paymentProfile = new AuthorizeNetPaymentProfile;
+$paymentProfile->customerType = "individual";
+$paymentProfile->payment->creditCard->cardNumber = "4111111111111111";
+$paymentProfile->payment->creditCard->expirationDate = "2015-10";
+$customerProfile->paymentProfiles[] = $paymentProfile;
+
+// Add another payment profile.
+$paymentProfile2 = new AuthorizeNetPaymentProfile;
+$paymentProfile2->customerType = "business";
+$paymentProfile2->payment->bankAccount->accountType = "businessChecking";
+$paymentProfile2->payment->bankAccount->routingNumber = "121042882";
+$paymentProfile2->payment->bankAccount->accountNumber = "123456789123";
+$paymentProfile2->payment->bankAccount->nameOnAccount = "Jane Doe";
+$paymentProfile2->payment->bankAccount->echeckType = "WEB";
+$paymentProfile2->payment->bankAccount->bankName = "Pandora Bank";
+$customerProfile->paymentProfiles[] = $paymentProfile2;
+
+
+// Add shipping address.
+$address = new AuthorizeNetAddress;
+$address->firstName = "john";
+$address->lastName = "Doe";
+$address->company = "John Doe Company";
+$address->address = "1 Main Street";
+$address->city = "Boston";
+$address->state = "MA";
+$address->zip = "02412";
+$address->country = "USA";
+$address->phoneNumber = "555-555-5555";
+$address->faxNumber = "555-555-5556";
+$customerProfile->shipToList[] = $address;
+
+// Add another shipping address.
+$address2 = new AuthorizeNetAddress;
+$address2->firstName = "jane";
+$address2->lastName = "Doe";
+$address2->address = "11 Main Street";
+$address2->city = "Boston";
+$address2->state = "MA";
+$address2->zip = "02412";
+$address2->country = "USA";
+$address2->phoneNumber = "555-512-5555";
+$address2->faxNumber = "555-523-5556";
+$customerProfile->shipToList[] = $address2;
+
+
+Next, create an AuthorizeNetCIM object:
+
+$request = new AuthorizeNetCIM;
+
+Finally, call the createCustomerProfile method and pass in your
+customer object:
+
+$response = $request->createCustomerProfile($customerProfile);
+
+The response object provides some helper methods for easy access to the
+results of the transaction:
+
+$new_customer_id = $response->getCustomerProfileId();
+
+The response object also stores the XML response as a SimpleXml element
+which you can access like so:
+
+$new_customer_id = $response->xml->customerProfileId
+  
+You can also run xpath queries against the result:
+
+$array = $response->xpath('customerProfileId');
+$new_customer_id = $array[0];
+
+
+Deleting a Customer Profile
+---------------------------
+
+To delete a customer profile first create a new AuthorizeNetCIM object:
+
+$request = new AuthorizeNetCIM;
+
+Then call the deleteCustomerProfile method:
+
+request->deleteCustomerProfile($customer_id);
+
+
+Retrieving a Customer Profile
+-----------------------------
+
+To retrieve a customer profile call the getCustomerProfile method:
+
+$response = $request->getCustomerProfile($customerProfileId);
+
+
+Validation Mode
+---------------
+
+Validation mode allows you to generate a test transaction at the time you create a customer profile. In Test Mode, only field validation is performed. In Live Mode, a transaction is generated and submitted to the processor with the amount of $0.00 or $0.01. If successful, the transaction is immediately voided.
+
+To create a customer profile with Validation mode, simply pass in the
+a value for the validation mode parameter on the createCustomerProfile method:
+
+$response = $request->createCustomerProfile($customerProfile, "testMode");
+
+You can access the validation response for each payment profile via xpath,
+the SimpleXML element or the getValidationResponses method:
+
+$validationResponses = $response->getValidationResponses();
+  foreach ($validationResponses as $vr) {
+    echo $vr->approved;
+}
+
+
+Updating a Customer Profile
+---------------------------
+
+Call the updateCustomerProfile method with the customerProfileId and customerProfile
+parameters:
+
+$response = $request->updateCustomerProfile($customerProfileId, $customerProfile);
+
+
+Adding a Payment Profile
+------------------------
+
+
+$paymentProfile = new AuthorizeNetPaymentProfile;
+$paymentProfile->customerType = "individual";
+$paymentProfile->payment->creditCard->cardNumber = "4111111111111111";
+$paymentProfile->payment->creditCard->expirationDate = "2015-10";
+$response = $request->createCustomerPaymentProfile($customerProfileId, $paymentProfile);
+
+
+Updating a Payment Profile
+--------------------------
+
+$paymentProfile->payment->creditCard->cardNumber = "4111111111111111";
+$paymentProfile->payment->creditCard->expirationDate = "2017-11";
+$response = $request->updateCustomerPaymentProfile($customerProfileId,$paymentProfileId, $paymentProfile);
+
+Adding a Shipping Address
+-------------------------
+
+
+
+$address = new AuthorizeNetAddress;
+$address->firstName = "john";
+$address->lastName = "Doe";
+$address->company = "John Doe Company";
+$address->address = "1 Main Street";
+$address->city = "Boston";
+$address->state = "MA";
+$address->zip = "02412";
+$address->country = "USA";
+$address->phoneNumber = "555-555-5555";
+$address->faxNumber = "555-555-5556";
+$response = $request->createCustomerShippingAddress($customerProfileId, $address);
+$customerAddressId = $response->getCustomerAddressId();
+
+Updating a Shipping Address
+---------------------------
+
+// Update shipping address.
+$address->address = "2 First Street";
+$response = $request->updateCustomerShippingAddress($customerProfileId, $customerAddressId, $address);
+
+
+Creating Transactions
+---------------------
+    
+// Create Auth & Capture Transaction
+$transaction = new AuthorizeNetTransaction;
+$transaction->amount = "9.79";
+$transaction->customerProfileId = $customerProfileId;
+$transaction->customerPaymentProfileId = $paymentProfileId;
+$transaction->customerShippingAddressId = $customerAddressId;
+    
+$lineItem              = new AuthorizeNetLineItem;
+$lineItem->itemId      = "4";
+$lineItem->name        = "Cookies";
+$lineItem->description = "Chocolate Chip";
+$lineItem->quantity    = "4";
+$lineItem->unitPrice   = "1.00";
+$lineItem->taxable     = "true";
+
+$lineItem2             = new AuthorizeNetLineItem;
+$lineItem2->itemId     = "4";
+$lineItem2->name       = "Cookies";
+$lineItem2->description= "Peanut Butter";
+$lineItem2->quantity   = "4";
+$lineItem2->unitPrice  = "1.00";
+$lineItem2->taxable    = "true";
+
+$transaction->lineItems[] = $lineItem;
+$transaction->lineItems[] = $lineItem2;
+    
+    
+$response = $request->createCustomerProfileTransaction("AuthCapture", $transaction);
+$transactionResponse = $response->getTransactionResponse();
+$transactionId = $transactionResponse->transaction_id;
+    
+    
+Voiding a Transaction
+---------------------
+
+$transaction = new AuthorizeNetTransaction;
+$transaction->transId = $transactionId;
+$response = $request->createCustomerProfileTransaction("Void", $transaction);
+
+
+Deleting a Shipping Address
+---------------------------
+
+$response = $request->deleteCustomerShippingAddress($customerProfileId, $customerAddressId);
+
+
+Deleting a Payment Profile
+--------------------------
+
+$response = $request->deleteCustomerPaymentProfile($customerProfileId, $paymentProfileId);
+  
+
+
+Getting Customer Profile IDs
+----------------------------
+
+$response = $request->getCustomerProfileIds();
\ No newline at end of file
diff --git a/anet_php_sdk/doc/CP.markdown b/anet_php_sdk/doc/CP.markdown
new file mode 100755 (executable)
index 0000000..96ea161
--- /dev/null
@@ -0,0 +1,43 @@
+Card Present API
+================
+
+Basic Overview
+--------------
+
+The AuthorizeNetCP class creates a request object for submitting transactions
+to the AuthorizeNetCP API. The AuthorizeNetCP class extends the AuthorizeNetAIM
+class. See the AIM.markdown for help with the basics. This document contains
+information regarding the special features of the AuthorizeNetCP class.
+
+
+Merchant Credentials
+--------------------
+
+Please note that if you are using both the CNP and CP APIs your merchant
+credentials will be different.
+
+Setting Track Data
+------------------
+
+To set Track 1 and/or Track 2 data, use the respective methods like so:
+
+$sale = new AuthorizeNetCP(CP_API_LOGIN_ID, CP_TRANSACTION_KEY);
+$sale->setFields(
+    array(
+    'amount' => rand(1, 1000),
+    'device_type' => '4',
+    )
+);
+$sale->setTrack1Data('%B4111111111111111^CARDUSER/JOHN^1803101000000000020000831000000?');
+$response = $sale->authorizeAndCapture();
+
+$sale = new AuthorizeNetCP(CP_API_LOGIN_ID, CP_TRANSACTION_KEY);
+$sale->setFields(
+    array(
+    'amount' => rand(1, 1000),
+    'device_type' => '4',
+    )
+);
+$sale->setTrack2Data('4111111111111111=1803101000020000831?');
+$response = $sale->authorizeAndCapture();
+
diff --git a/anet_php_sdk/doc/DPM.markdown b/anet_php_sdk/doc/DPM.markdown
new file mode 100755 (executable)
index 0000000..115cc9d
--- /dev/null
@@ -0,0 +1,24 @@
+Direct Post Method
+==================
+
+Basic Overview
+--------------
+
+The Authorize.Net PHP SDK includes a class that demonstrates one way
+of implementing the Direct Post Method.
+
+While it is not necessary to use the AuthorizeNetDPM class to implement
+DPM, it may serve as a handy reference.
+
+The AuthorizeNetDPM class extends the AuthorizeNetSIM_Form class.
+See the SIM.markdown for additional documentation.
+
+Relay Response Snippet
+----------------------
+
+The AuthorizeNetDPM class contains a getRelayResponseSnippet($redirect_url)
+which generates a snippet of HTML that will redirect a user back to your
+site after submitting a checkout form using DPM/SIM.
+
+Use this method(or just grab the html) if you want to create a checkout
+experience where the user only interacts with pages on your site.
\ No newline at end of file
diff --git a/anet_php_sdk/doc/SIM.markdown b/anet_php_sdk/doc/SIM.markdown
new file mode 100755 (executable)
index 0000000..ee38e59
--- /dev/null
@@ -0,0 +1,74 @@
+Server Integration Method
+=========================
+
+Basic Overview
+--------------
+
+The Authorize.Net PHP SDK includes classes that can speed up implementing
+a Server Integration Method solution.
+
+
+Hosted Order/Receipt Page
+-------------------------
+
+The AuthorizeNetSIM_Form class aims to make it easier to setup the hidden
+fields necessary for creating a SIM experience. While it is not necessary
+to use the AuthorizeNetSIM_Form class to implement SIM, it may be handy for
+reference.
+
+The code below will generate a buy now button that leads to a hosted order page:
+
+<form method="post" action="https://test.authorize.net/gateway/transact.dll">
+<?php
+$amount = "9.99";
+$fp_sequence = "123";
+$time = time();
+
+$fingerprint = AuthorizeNetSIM_Form::getFingerprint($api_login_id, $transaction_key, $amount, $fp_sequence, $time);
+$sim = new AuthorizeNetSIM_Form(
+    array(
+    'x_amount'        => $amount,
+    'x_fp_sequence'   => $fp_sequence,
+    'x_fp_hash'       => $fingerprint,
+    'x_fp_timestamp'  => $time,
+    'x_relay_response'=> "FALSE",
+    'x_login'         => $api_login_id,
+    )
+);
+echo $sim->getHiddenFieldString();?>
+<input type="submit" value="Buy Now">
+</form>
+
+Fingerprint Generation
+----------------------
+
+To generate the fingerprint needed for a SIM transaction call the getFingerprint method:
+
+$fingerprint = AuthorizeNetSIM_Form::getFingerprint($api_login_id, $transaction_key, $amount, $fp_sequence, $fp_timestamp);
+
+
+Relay Response
+--------------
+
+The PHP SDK includes a AuthorizeNetSIM class for handling a relay response from
+Authorize.Net.
+
+To receive a relay response from Authorize.Net you can either configure the
+url in the Merchant Interface or specify the url when submitting a transaction
+with SIM using the "x_relay_url" field.
+
+When a transaction occurs, Authorize.Net will post the transaction details to
+this url. You can then craete a page on your server at a url such as
+http://yourdomain.com/response_handler.php and execute any logic you want
+when a transaction occurs. The AuthorizeNetSIM class makes it easy to verify
+the transaction came from Authorize.Net and parse the response:
+
+$response = new AuthorizeNetSIM;
+if ($response->isAuthorizeNet())
+{
+  if ($response->approved)
+  {
+    // Activate magazine subscription
+    magazine_subscription_activate($response->cust_id);
+  }
+}
diff --git a/anet_php_sdk/doc/SOAP.markdown b/anet_php_sdk/doc/SOAP.markdown
new file mode 100755 (executable)
index 0000000..a535f00
--- /dev/null
@@ -0,0 +1,10 @@
+SOAP
+====
+
+Basic Overview
+--------------
+
+The AuthorizeNetSOAP class provides a very basic wrapper to PHP's bundled
+SoapClient class. The AuthorizeNetSOAP class merely contains the WSDL,
+Sandbox, and Live Production server urls to make it easier to connect
+to the Authorize.Net SOAP API.
\ No newline at end of file
diff --git a/anet_php_sdk/doc/TD.markdown b/anet_php_sdk/doc/TD.markdown
new file mode 100755 (executable)
index 0000000..c9a1bfb
--- /dev/null
@@ -0,0 +1,55 @@
+Transaction Details API
+=======================
+
+Basic Overview
+--------------
+
+The AuthorizeNetTD class creates a request object for submitting requests
+to the Authorize.Net Transaction Details API.
+
+The AuthorizeNetTD class returns a response that uses PHP's bundled SimpleXML
+class for accessing it's members.
+
+The AuthorizeNetTD response provides two ways to access response elements:
+
+1.) A SimpleXml object:
+
+$response->xml->transaction->payment->creditCard->cardType
+
+2.) Xpath:
+
+$batches = $response->xpath("batchList/batch");
+
+3.) AuthorizeNet Objects (todo)
+
+
+
+Get Transaction Details
+-----------------------
+
+$request = new AuthorizeNetTD;
+$response = $request->getTransactionDetails($transId);
+echo "Amount: {$response->xml->transaction->authAmount}";
+
+Get Settled Batch List
+----------------------
+$request = new AuthorizeNetTD;
+$response = $request->getSettledBatchList();
+$batches = $response->xpath("batchList/batch");
+echo "Batch 1: {$batches[0]->batchId}";
+
+Get Transaction List
+--------------------
+$request = new AuthorizeNetTD;
+$response = $request->getTransactionList($batch_id);
+$transactions = $response->xpath("transactions/transaction")
+
+There are two additional helper methods in the PHP SDK which
+will make multiple calls to retrieve a day's worth of 
+transactions or a month's worth of batches:
+
+getTransactionsForDay($month, $day, $year = false)
+getSettledBatchListForMonth($month , $year)
+
+If you don't pass parameters into these methods they will default
+to the current day/month.
diff --git a/anet_php_sdk/lib/AuthorizeNetAIM.php b/anet_php_sdk/lib/AuthorizeNetAIM.php
new file mode 100755 (executable)
index 0000000..e7aae63
--- /dev/null
@@ -0,0 +1,500 @@
+<?php
+/**
+ * Easily interact with the Authorize.Net AIM API.
+ *
+ * Example Authorize and Capture Transaction against the Sandbox:
+ * <code>
+ * <?php require_once 'AuthorizeNet.php'
+ * $sale = new AuthorizeNetAIM;
+ * $sale->setFields(
+ *     array(
+ *    'amount' => '4.99',
+ *    'card_num' => '411111111111111',
+ *    'exp_date' => '0515'
+ *    )
+ * );
+ * $response = $sale->authorizeAndCapture();
+ * if ($response->approved) {
+ *     echo "Sale successful!"; } else {
+ *     echo $response->error_message;
+ * }
+ * ?>
+ * </code>
+ *
+ * Note: To send requests to the live gateway, either define this:
+ * define("AUTHORIZENET_SANDBOX", false);
+ *   -- OR -- 
+ * $sale = new AuthorizeNetAIM;
+ * $sale->setSandbox(false);
+ *
+ * @package    AuthorizeNet
+ * @subpackage AuthorizeNetAIM
+ * @link       http://www.authorize.net/support/AIM_guide.pdf AIM Guide
+ */
+
+/**
+ * Builds and sends an AuthorizeNet AIM Request.
+ *
+ * @package    AuthorizeNet
+ * @subpackage AuthorizeNetAIM
+ */
+class AuthorizeNetAIM extends AuthorizeNetRequest
+{
+
+    const LIVE_URL = 'https://secure.authorize.net/gateway/transact.dll';
+    const SANDBOX_URL = 'https://test.authorize.net/gateway/transact.dll';
+    
+    /**
+     * Holds all the x_* name/values that will be posted in the request. 
+     * Default values are provided for best practice fields.
+     */
+    protected $_x_post_fields = array(
+        "version" => "3.1", 
+        "delim_char" => ",",
+        "delim_data" => "TRUE",
+        "relay_response" => "FALSE",
+        "encap_char" => "|",
+        );
+        
+    /**
+     * Only used if merchant wants to send multiple line items about the charge.
+     */
+    private $_additional_line_items = array();
+    
+    /**
+     * Only used if merchant wants to send custom fields.
+     */
+    private $_custom_fields = array();
+    
+    /**
+     * Checks to make sure a field is actually in the API before setting.
+     * Set to false to skip this check.
+     */
+    public $verify_x_fields = true;
+    
+    /**
+     * A list of all fields in the AIM API.
+     * Used to warn user if they try to set a field not offered in the API.
+     */
+    private $_all_aim_fields = array("address","allow_partial_auth","amount",
+        "auth_code","authentication_indicator", "bank_aba_code","bank_acct_name",
+        "bank_acct_num","bank_acct_type","bank_check_number","bank_name",
+        "card_code","card_num","cardholder_authentication_value","city","company",
+        "country","cust_id","customer_ip","delim_char","delim_data","description",
+        "duplicate_window","duty","echeck_type","email","email_customer",
+        "encap_char","exp_date","fax","first_name","footer_email_receipt",
+        "freight","header_email_receipt","invoice_num","last_name","line_item",
+        "login","method","phone","po_num","recurring_billing","relay_response",
+        "ship_to_address","ship_to_city","ship_to_company","ship_to_country",
+        "ship_to_first_name","ship_to_last_name","ship_to_state","ship_to_zip",
+        "split_tender_id","state","tax","tax_exempt","test_request","tran_key",
+        "trans_id","type","version","zip"
+        );
+    
+    /**
+     * Do an AUTH_CAPTURE transaction. 
+     * 
+     * Required "x_" fields: card_num, exp_date, amount
+     *
+     * @param string $amount   The dollar amount to charge
+     * @param string $card_num The credit card number
+     * @param string $exp_date CC expiration date
+     *
+     * @return AuthorizeNetAIM_Response
+     */
+    public function authorizeAndCapture($amount = false, $card_num = false, $exp_date = false)
+    {
+        ($amount ? $this->amount = $amount : null);
+        ($card_num ? $this->card_num = $card_num : null);
+        ($exp_date ? $this->exp_date = $exp_date : null);
+        $this->type = "AUTH_CAPTURE";
+        return $this->_sendRequest();
+    }
+    
+    /**
+     * Do a PRIOR_AUTH_CAPTURE transaction.
+     *
+     * Required "x_" field: trans_id(The transaction id of the prior auth, unless split
+     * tender, then set x_split_tender_id manually.)
+     * amount (only if lesser than original auth)
+     *
+     * @param string $trans_id Transaction id to charge
+     * @param string $amount   Dollar amount to charge if lesser than auth
+     *
+     * @return AuthorizeNetAIM_Response
+     */
+    public function priorAuthCapture($trans_id = false, $amount = false)
+    {
+        ($trans_id ? $this->trans_id = $trans_id : null);
+        ($amount ? $this->amount = $amount : null);
+        $this->type = "PRIOR_AUTH_CAPTURE";
+        return $this->_sendRequest();
+    }
+
+    /**
+     * Do an AUTH_ONLY transaction.
+     *
+     * Required "x_" fields: card_num, exp_date, amount
+     *
+     * @param string $amount   The dollar amount to charge
+     * @param string $card_num The credit card number
+     * @param string $exp_date CC expiration date
+     *
+     * @return AuthorizeNetAIM_Response
+     */
+    public function authorizeOnly($amount = false, $card_num = false, $exp_date = false)
+    {
+        ($amount ? $this->amount = $amount : null);
+        ($card_num ? $this->card_num = $card_num : null);
+        ($exp_date ? $this->exp_date = $exp_date : null);
+        $this->type = "AUTH_ONLY";
+        return $this->_sendRequest();
+    }
+
+    /**
+     * Do a VOID transaction.
+     *
+     * Required "x_" field: trans_id(The transaction id of the prior auth, unless split
+     * tender, then set x_split_tender_id manually.)
+     *
+     * @param string $trans_id Transaction id to void
+     *
+     * @return AuthorizeNetAIM_Response
+     */
+    public function void($trans_id = false)
+    {
+        ($trans_id ? $this->trans_id = $trans_id : null);
+        $this->type = "VOID";
+        return $this->_sendRequest();
+    }
+    
+    /**
+     * Do a CAPTURE_ONLY transaction.
+     *
+     * Required "x_" fields: auth_code, amount, card_num , exp_date
+     *
+     * @param string $auth_code The auth code
+     * @param string $amount    The dollar amount to charge
+     * @param string $card_num  The last 4 of credit card number
+     * @param string $exp_date  CC expiration date
+     *
+     * @return AuthorizeNetAIM_Response
+     */
+    public function captureOnly($auth_code = false, $amount = false, $card_num = false, $exp_date = false)
+    {
+        ($auth_code ? $this->auth_code = $auth_code : null);
+        ($amount ? $this->amount = $amount : null);
+        ($card_num ? $this->card_num = $card_num : null);
+        ($exp_date ? $this->exp_date = $exp_date : null);
+        $this->type = "CAPTURE_ONLY";
+        return $this->_sendRequest();
+    }
+    
+    /**
+     * Do a CREDIT transaction.
+     *
+     * Required "x_" fields: trans_id, amount, card_num (just the last 4)
+     *
+     * @param string $trans_id Transaction id to credit
+     * @param string $amount   The dollar amount to credit
+     * @param string $card_num The last 4 of credit card number
+     *
+     * @return AuthorizeNetAIM_Response
+     */
+    public function credit($trans_id = false, $amount = false, $card_num = false)
+    {
+        ($trans_id ? $this->trans_id = $trans_id : null);
+        ($amount ? $this->amount = $amount : null);
+        ($card_num ? $this->card_num = $card_num : null);
+        $this->type = "CREDIT";
+        return $this->_sendRequest();
+    }
+    
+    /**
+     * Alternative syntax for setting x_ fields.
+     *
+     * Usage: $sale->method = "echeck";
+     *
+     * @param string $name
+     * @param string $value
+     */
+    public function __set($name, $value) 
+    {
+        $this->setField($name, $value);
+    }
+    
+    /**
+     * Quickly set multiple fields.
+     *
+     * Note: The prefix x_ will be added to all fields. If you want to set a
+     * custom field without the x_ prefix, use setCustomField or setCustomFields.
+     *
+     * @param array $fields Takes an array or object.
+     */
+    public function setFields($fields)
+    {
+        $array = (array)$fields;
+        foreach ($array as $key => $value) {
+            $this->setField($key, $value);
+        }
+    }
+    
+    /**
+     * Quickly set multiple custom fields.
+     *
+     * @param array $fields
+     */
+    public function setCustomFields($fields)
+    {
+        $array = (array)$fields;
+        foreach ($array as $key => $value) {
+            $this->setCustomField($key, $value);
+        }
+    }
+    
+    /**
+     * Add a line item.
+     * 
+     * @param string $item_id
+     * @param string $item_name
+     * @param string $item_description
+     * @param string $item_quantity
+     * @param string $item_unit_price
+     * @param string $item_taxable
+     */
+    public function addLineItem($item_id, $item_name, $item_description, $item_quantity, $item_unit_price, $item_taxable)
+    {
+        $line_item = "";
+        $delimiter = "";
+        foreach (func_get_args() as $key => $value) {
+            $line_item .= $delimiter . $value;
+            $delimiter = "<|>";
+        }
+        $this->_additional_line_items[] = $line_item;
+    }
+    
+    /**
+     * Use ECHECK as payment type.
+     */
+    public function setECheck($bank_aba_code, $bank_acct_num, $bank_acct_type, $bank_name, $bank_acct_name, $echeck_type = 'WEB')
+    {
+        $this->setFields(
+            array(
+            'method' => 'echeck',
+            'bank_aba_code' => $bank_aba_code,
+            'bank_acct_num' => $bank_acct_num,
+            'bank_acct_type' => $bank_acct_type,
+            'bank_name' => $bank_name,
+            'bank_acct_name' => $bank_acct_type,
+            'echeck_type' => $echeck_type,
+            )
+        );
+    }
+    
+    /**
+     * Set an individual name/value pair. This will append x_ to the name
+     * before posting.
+     *
+     * @param string $name
+     * @param string $value
+     */
+    public function setField($name, $value)
+    {
+        if ($this->verify_x_fields) {
+            if (in_array($name, $this->_all_aim_fields)) {
+                $this->_x_post_fields[$name] = $value;
+            } else {
+                throw new AuthorizeNetException("Error: no field $name exists in the AIM API.
+                To set a custom field use setCustomField('field','value') instead.");
+            }
+        } else {
+            $this->_x_post_fields[$name] = $value;
+        }
+    }
+    
+    /**
+     * Set a custom field. Note: the x_ prefix will not be added to
+     * your custom field if you use this method.
+     *
+     * @param string $name
+     * @param string $value
+     */
+    public function setCustomField($name, $value)
+    {
+        $this->_custom_fields[$name] = $value;
+    }
+    
+    /**
+     * Unset an x_ field.
+     *
+     * @param string $name Field to unset.
+     */
+    public function unsetField($name)
+    {
+        unset($this->_x_post_fields[$name]);
+    }
+    
+    /**
+     *
+     *
+     * @param string $response
+     * 
+     * @return AuthorizeNetAIM_Response
+     */
+    protected function _handleResponse($response)
+    {
+        return new AuthorizeNetAIM_Response($response, $this->_x_post_fields['delim_char'], $this->_x_post_fields['encap_char'], $this->_custom_fields);
+    }
+    
+    /**
+     * @return string
+     */
+    protected function _getPostUrl()
+    {
+        return ($this->_sandbox ? self::SANDBOX_URL : self::LIVE_URL);
+    }
+    
+    /**
+     * Converts the x_post_fields array into a string suitable for posting.
+     */
+    protected function _setPostString()
+    {
+        $this->_x_post_fields['login'] = $this->_api_login;
+        $this->_x_post_fields['tran_key'] = $this->_transaction_key;
+        $this->_post_string = "";
+        foreach ($this->_x_post_fields as $key => $value) {
+            $this->_post_string .= "x_$key=" . urlencode($value) . "&";
+        }
+        // Add line items
+        foreach ($this->_additional_line_items as $key => $value) {
+            $this->_post_string .= "x_line_item=" . urlencode($value) . "&";
+        }
+        // Add custom fields
+        foreach ($this->_custom_fields as $key => $value) {
+            $this->_post_string .= "$key=" . urlencode($value) . "&";
+        }
+        $this->_post_string = rtrim($this->_post_string, "& ");
+    }
+}
+
+/**
+ * Parses an AuthorizeNet AIM Response.
+ *
+ * @package    AuthorizeNet
+ * @subpackage AuthorizeNetAIM
+ */
+class AuthorizeNetAIM_Response extends AuthorizeNetResponse
+{
+    private $_response_array = array(); // An array with the split response.
+
+    /**
+     * Constructor. Parses the AuthorizeNet response string.
+     *
+     * @param string $response      The response from the AuthNet server.
+     * @param string $delimiter     The delimiter used (default is ",")
+     * @param string $encap_char    The encap_char used (default is "|")
+     * @param array  $custom_fields Any custom fields set in the request.
+     */
+    public function __construct($response, $delimiter, $encap_char, $custom_fields)
+    {
+        if ($response) {
+            
+            // Split Array
+            $this->response = $response;
+            if ($encap_char) {
+                $this->_response_array = explode($encap_char.$delimiter.$encap_char, substr($response, 1, -1));
+            } else {
+                $this->_response_array = explode($delimiter, $response);
+            }
+            
+            /**
+             * If AuthorizeNet doesn't return a delimited response.
+             */
+            if (count($this->_response_array) < 10) {
+                $this->approved = false;
+                $this->error = true;
+                $this->error_message = "Unrecognized response from AuthorizeNet: $response";
+                return;
+            }
+            
+            
+            
+            // Set all fields
+            $this->response_code        = $this->_response_array[0];
+            $this->response_subcode     = $this->_response_array[1];
+            $this->response_reason_code = $this->_response_array[2];
+            $this->response_reason_text = $this->_response_array[3];
+            $this->authorization_code   = $this->_response_array[4];
+            $this->avs_response         = $this->_response_array[5];
+            $this->transaction_id       = $this->_response_array[6];
+            $this->invoice_num          = $this->_response_array[7];
+            $this->description          = $this->_response_array[8];
+            $this->amount               = $this->_response_array[9];
+            $this->method               = $this->_response_array[10];
+            $this->transaction_type     = $this->_response_array[11];
+            $this->customer_id          = $this->_response_array[12];
+            $this->first_name           = $this->_response_array[13];
+            $this->last_name            = $this->_response_array[14];
+            $this->company              = $this->_response_array[15];
+            $this->address              = $this->_response_array[16];
+            $this->city                 = $this->_response_array[17];
+            $this->state                = $this->_response_array[18];
+            $this->zip_code             = $this->_response_array[19];
+            $this->country              = $this->_response_array[20];
+            $this->phone                = $this->_response_array[21];
+            $this->fax                  = $this->_response_array[22];
+            $this->email_address        = $this->_response_array[23];
+            $this->ship_to_first_name   = $this->_response_array[24];
+            $this->ship_to_last_name    = $this->_response_array[25];
+            $this->ship_to_company      = $this->_response_array[26];
+            $this->ship_to_address      = $this->_response_array[27];
+            $this->ship_to_city         = $this->_response_array[28];
+            $this->ship_to_state        = $this->_response_array[29];
+            $this->ship_to_zip_code     = $this->_response_array[30];
+            $this->ship_to_country      = $this->_response_array[31];
+            $this->tax                  = $this->_response_array[32];
+            $this->duty                 = $this->_response_array[33];
+            $this->freight              = $this->_response_array[34];
+            $this->tax_exempt           = $this->_response_array[35];
+            $this->purchase_order_number= $this->_response_array[36];
+            $this->md5_hash             = $this->_response_array[37];
+            $this->card_code_response   = $this->_response_array[38];
+            $this->cavv_response        = $this->_response_array[39];
+            $this->account_number       = $this->_response_array[50];
+            $this->card_type            = $this->_response_array[51];
+            $this->split_tender_id      = $this->_response_array[52];
+            $this->requested_amount     = $this->_response_array[53];
+            $this->balance_on_card      = $this->_response_array[54];
+            
+            $this->approved = ($this->response_code == self::APPROVED);
+            $this->declined = ($this->response_code == self::DECLINED);
+            $this->error    = ($this->response_code == self::ERROR);
+            $this->held     = ($this->response_code == self::HELD);
+            
+            // Set custom fields
+            if ($count = count($custom_fields)) {
+                $custom_fields_response = array_slice($this->_response_array, -$count, $count);
+                $i = 0;
+                foreach ($custom_fields as $key => $value) {
+                    $this->$key = $custom_fields_response[$i];
+                    $i++;
+                }
+            }
+            
+            if ($this->error) {
+                $this->error_message = "AuthorizeNet Error:
+                Response Code: ".$this->response_code."
+                Response Subcode: ".$this->response_subcode."
+                Response Reason Code: ".$this->response_reason_code."
+                Response Reason Text: ".$this->response_reason_text."
+                ";
+            }
+        } else {
+            $this->approved = false;
+            $this->error = true;
+            $this->error_message = "Error connecting to AuthorizeNet";
+        }
+    }
+
+}
diff --git a/anet_php_sdk/lib/AuthorizeNetARB.php b/anet_php_sdk/lib/AuthorizeNetARB.php
new file mode 100755 (executable)
index 0000000..8df101a
--- /dev/null
@@ -0,0 +1,159 @@
+<?php
+/**
+ * Easily interact with the Authorize.Net ARB XML API.
+ *
+ * @package    AuthorizeNet
+ * @subpackage AuthorizeNetARB
+ * @link       http://www.authorize.net/support/ARB_guide.pdf ARB Guide
+ */
+
+
+/**
+ * A class to send a request to the ARB XML API.
+ *
+ * @package    AuthorizeNet
+ * @subpackage AuthorizeNetARB
+ */
+class AuthorizeNetARB extends AuthorizeNetRequest
+{
+
+    const LIVE_URL = "https://api.authorize.net/xml/v1/request.api";
+    const SANDBOX_URL = "https://apitest.authorize.net/xml/v1/request.api";
+
+    private $_request_type;
+    private $_request_payload;
+    
+    /**
+     * Optional. Used if the merchant wants to set a reference ID.
+     *
+     * @param string $refId
+     */
+    public function setRefId($refId)
+    {
+        $this->_request_payload = ($refId ? "<refId>$refId</refId>" : "");
+    }
+    
+    /**
+     * Create an ARB subscription
+     *
+     * @param AuthorizeNet_Subscription $subscription
+     *
+     * @return AuthorizeNetARB_Response
+     */
+    public function createSubscription(AuthorizeNet_Subscription $subscription)
+    {
+        $this->_request_type = "CreateSubscriptionRequest";
+        $this->_request_payload .= $subscription->getXml();
+        return $this->_sendRequest();
+    }
+    
+    /**
+     * Update an ARB subscription
+     *
+     * @param int                       $subscriptionId
+     * @param AuthorizeNet_Subscription $subscription
+     *
+     * @return AuthorizeNetARB_Response
+     */
+    public function updateSubscription($subscriptionId, AuthorizeNet_Subscription $subscription)
+    {
+        $this->_request_type = "UpdateSubscriptionRequest";
+        $this->_request_payload .= "<subscriptionId>$subscriptionId</subscriptionId>";
+        $this->_request_payload .= $subscription->getXml();
+        return $this->_sendRequest();
+    }
+
+    /**
+     * Get status of a subscription
+     *
+     * @param int $subscriptionId
+     *
+     * @return AuthorizeNetARB_Response
+     */
+    public function getSubscriptionStatus($subscriptionId)
+    {
+        $this->_request_type = "GetSubscriptionStatusRequest";
+        $this->_request_payload .= "<subscriptionId>$subscriptionId</subscriptionId>";
+        return $this->_sendRequest();
+    }
+
+    /**
+     * Cancel a subscription
+     *
+     * @param int $subscriptionId
+     *
+     * @return AuthorizeNetARB_Response
+     */
+    public function cancelSubscription($subscriptionId)
+    {
+        $this->_request_type = "CancelSubscriptionRequest";
+        $this->_request_payload .= "<subscriptionId>$subscriptionId</subscriptionId>";
+        return $this->_sendRequest();
+    }
+    
+     /**
+     *
+     *
+     * @param string $response
+     * 
+     * @return AuthorizeNetARB_Response
+     */
+    protected function _handleResponse($response)
+    {
+        return new AuthorizeNetARB_Response($response);
+    }
+    
+    /**
+     * @return string
+     */
+    protected function _getPostUrl()
+    {
+        return ($this->_sandbox ? self::SANDBOX_URL : self::LIVE_URL);
+    }
+    
+    /**
+     * Prepare the XML document for posting.
+     */
+    protected function _setPostString()
+    {
+        $this->_post_string =<<<XML
+<?xml version="1.0" encoding="utf-8"?>
+<ARB{$this->_request_type} xmlns= "AnetApi/xml/v1/schema/AnetApiSchema.xsd">
+    <merchantAuthentication>
+        <name>{$this->_api_login}</name>
+        <transactionKey>{$this->_transaction_key}</transactionKey>
+    </merchantAuthentication>
+    {$this->_request_payload}
+</ARB{$this->_request_type}>
+XML;
+    }
+    
+}
+
+
+/**
+ * A class to parse a response from the ARB XML API.
+ *
+ * @package    AuthorizeNet
+ * @subpackage AuthorizeNetARB
+ */
+class AuthorizeNetARB_Response extends AuthorizeNetXMLResponse
+{
+
+    /**
+     * @return int
+     */
+    public function getSubscriptionId()
+    {
+        return $this->_getElementContents("subscriptionId");
+    }
+    
+    /**
+     * @return string
+     */
+    public function getSubscriptionStatus()
+    {
+        return $this->_getElementContents("Status");
+    }
+
+}
\ No newline at end of file
diff --git a/anet_php_sdk/lib/AuthorizeNetCIM.php b/anet_php_sdk/lib/AuthorizeNetCIM.php
new file mode 100755 (executable)
index 0000000..eb44342
--- /dev/null
@@ -0,0 +1,511 @@
+<?php
+/**
+ * Easily interact with the Authorize.Net CIM XML API.
+ *
+ * @package    AuthorizeNet
+ * @subpackage AuthorizeNetCIM
+ * @link       http://www.authorize.net/support/CIM_XML_guide.pdf CIM XML Guide
+ */
+
+
+
+/**
+ * A class to send a request to the CIM XML API.
+ *
+ * @package    AuthorizeNet
+ * @subpackage AuthorizeNetCIM
+ */ 
+class AuthorizeNetCIM extends AuthorizeNetRequest
+{
+
+    const LIVE_URL = "https://api.authorize.net/xml/v1/request.api";
+    const SANDBOX_URL = "https://apitest.authorize.net/xml/v1/request.api";
+
+    
+    private $_xml;
+    private $_refId = false;
+    private $_validationMode = "none"; // "none","testMode","liveMode"
+    private $_extraOptions;
+    private $_transactionTypes = array(
+        'AuthOnly',
+        'AuthCapture',
+        'CaptureOnly',
+        'PriorAuthCapture',
+        'Refund',
+        'Void',
+    );
+    
+    /**
+     * Optional. Used if the merchant wants to set a reference ID.
+     *
+     * @param string $refId
+     */
+    public function setRefId($refId)
+    {
+        $this->_refId = $refId;
+    }
+    
+    /**
+     * Create a customer profile.
+     *
+     * @param AuthorizeNetCustomer $customerProfile
+     * @param string               $validationMode
+     *
+     * @return AuthorizeNetCIM_Response
+     */
+    public function createCustomerProfile($customerProfile, $validationMode = "none")
+    {
+        $this->_validationMode = $validationMode;
+        $this->_constructXml("createCustomerProfileRequest");
+        $profile = $this->_xml->addChild("profile");
+        $this->_addObject($profile, $customerProfile);
+        return $this->_sendRequest();
+    }
+    
+    /**
+     * Create a customer payment profile.
+     *
+     * @param int                        $customerProfileId
+     * @param AuthorizeNetPaymentProfile $paymentProfile
+     * @param string                     $validationMode
+     *
+     * @return AuthorizeNetCIM_Response
+     */
+    public function createCustomerPaymentProfile($customerProfileId, $paymentProfile, $validationMode = "none")
+    {
+        $this->_validationMode = $validationMode;
+        $this->_constructXml("createCustomerPaymentProfileRequest");
+        $this->_xml->addChild("customerProfileId", $customerProfileId);
+        $profile = $this->_xml->addChild("paymentProfile");
+        $this->_addObject($profile, $paymentProfile);
+        return $this->_sendRequest();
+    }
+    
+    /**
+     * Create a shipping address.
+     *
+     * @param int                        $customerProfileId
+     * @param AuthorizeNetAddress        $shippingAddress
+     *
+     * @return AuthorizeNetCIM_Response
+     */
+    public function createCustomerShippingAddress($customerProfileId, $shippingAddress)
+    {
+        $this->_constructXml("createCustomerShippingAddressRequest");
+        $this->_xml->addChild("customerProfileId", $customerProfileId);
+        $address = $this->_xml->addChild("address");
+        $this->_addObject($address, $shippingAddress);
+        return $this->_sendRequest();
+    }
+    
+    /**
+     * Create a transaction.
+     *
+     * @param string                     $transactionType
+     * @param AuthorizeNetTransaction    $transaction
+     * @param string                     $extraOptionsString
+     *
+     * @return AuthorizeNetCIM_Response
+     */
+    public function createCustomerProfileTransaction($transactionType, $transaction, $extraOptionsString = "")
+    {
+        $this->_constructXml("createCustomerProfileTransactionRequest");
+        $transactionParent = $this->_xml->addChild("transaction");
+        $transactionChild = $transactionParent->addChild("profileTrans" . $transactionType);
+        $this->_addObject($transactionChild, $transaction);
+        $this->_extraOptions = $extraOptionsString;
+        return $this->_sendRequest();
+    }
+    
+    /**
+     * Delete a customer profile.
+     *
+     * @param int $customerProfileId
+     *
+     * @return AuthorizeNetCIM_Response
+     */
+    public function deleteCustomerProfile($customerProfileId)
+    {
+        $this->_constructXml("deleteCustomerProfileRequest");
+        $this->_xml->addChild("customerProfileId", $customerProfileId);
+        return $this->_sendRequest();
+    }
+    
+    /**
+     * Delete a payment profile.
+     *
+     * @param int $customerProfileId
+     * @param int $customerPaymentProfileId
+     *
+     * @return AuthorizeNetCIM_Response
+     */
+    public function deleteCustomerPaymentProfile($customerProfileId, $customerPaymentProfileId)
+    {
+        $this->_constructXml("deleteCustomerPaymentProfileRequest");
+        $this->_xml->addChild("customerProfileId", $customerProfileId);
+        $this->_xml->addChild("customerPaymentProfileId", $customerPaymentProfileId);
+        return $this->_sendRequest();
+    }
+    
+    /**
+     * Delete a shipping address.
+     *
+     * @param int $customerProfileId
+     * @param int $customerAddressId
+     *
+     * @return AuthorizeNetCIM_Response
+     */
+    public function deleteCustomerShippingAddress($customerProfileId, $customerAddressId)
+    {
+        $this->_constructXml("deleteCustomerShippingAddressRequest");
+        $this->_xml->addChild("customerProfileId", $customerProfileId);
+        $this->_xml->addChild("customerAddressId", $customerAddressId);
+        return $this->_sendRequest();
+    }
+    
+    /**
+     * Get all customer profile ids.
+     *
+     * @return AuthorizeNetCIM_Response
+     */
+    public function getCustomerProfileIds()
+    {
+        $this->_constructXml("getCustomerProfileIdsRequest");
+        return $this->_sendRequest();
+    }
+    
+    /**
+     * Get a customer profile.
+     *
+     * @param int $customerProfileId
+     *
+     * @return AuthorizeNetCIM_Response
+     */
+    public function getCustomerProfile($customerProfileId)
+    {
+        $this->_constructXml("getCustomerProfileRequest");
+        $this->_xml->addChild("customerProfileId", $customerProfileId);
+        return $this->_sendRequest();
+    }
+    
+    /**
+     * Get a payment profile.
+     *
+     * @param int $customerProfileId
+     * @param int $customerPaymentProfileId
+     *
+     * @return AuthorizeNetCIM_Response
+     */
+    public function getCustomerPaymentProfile($customerProfileId, $customerPaymentProfileId)
+    {
+        $this->_constructXml("getCustomerPaymentProfileRequest");
+        $this->_xml->addChild("customerProfileId", $customerProfileId);
+        $this->_xml->addChild("customerPaymentProfileId", $customerPaymentProfileId);
+        return $this->_sendRequest();
+    }
+    
+    /**
+     * Get a shipping address.
+     *
+     * @param int $customerProfileId
+     * @param int $customerAddressId
+     *
+     * @return AuthorizeNetCIM_Response
+     */
+    public function getCustomerShippingAddress($customerProfileId, $customerAddressId)
+    {
+        $this->_constructXml("getCustomerShippingAddressRequest");
+        $this->_xml->addChild("customerProfileId", $customerProfileId);
+        $this->_xml->addChild("customerAddressId", $customerAddressId);
+        return $this->_sendRequest();
+    }
+    
+    /**
+     * Update a profile.
+     *
+     * @param int                        $customerProfileId
+     * @param AuthorizeNetCustomer       $customerProfile
+     *
+     * @return AuthorizeNetCIM_Response
+     */
+    public function updateCustomerProfile($customerProfileId, $customerProfile)
+    {
+        $this->_constructXml("updateCustomerProfileRequest");
+        $customerProfile->customerProfileId = $customerProfileId;
+        $profile = $this->_xml->addChild("profile");
+        $this->_addObject($profile, $customerProfile);
+        return $this->_sendRequest();
+    }
+    
+    /**
+     * Update a payment profile.
+     *
+     * @param int                        $customerProfileId
+     * @param int                        $customerPaymentProfileId
+     * @param AuthorizeNetPaymentProfile $paymentProfile
+     * @param string                     $validationMode
+     *
+     * @return AuthorizeNetCIM_Response
+     */
+    public function updateCustomerPaymentProfile($customerProfileId, $customerPaymentProfileId, $paymentProfile, $validationMode = "none")
+    {
+        $this->_validationMode = $validationMode;
+        $this->_constructXml("updateCustomerPaymentProfileRequest");
+        $this->_xml->addChild("customerProfileId", $customerProfileId);
+        $paymentProfile->customerPaymentProfileId = $customerPaymentProfileId;
+        $profile = $this->_xml->addChild("paymentProfile");
+        $this->_addObject($profile, $paymentProfile);
+        return $this->_sendRequest();
+    }
+    
+    /**
+     * Update a shipping address.
+     *
+     * @param int                        $customerProfileId
+     * @param int                        $customerShippingAddressId
+     * @param AuthorizeNetAddress        $shippingAddress
+     *
+     * @return AuthorizeNetCIM_Response
+     */
+    public function updateCustomerShippingAddress($customerProfileId, $customerShippingAddressId, $shippingAddress)
+    {
+        
+        $this->_constructXml("updateCustomerShippingAddressRequest");
+        $this->_xml->addChild("customerProfileId", $customerProfileId);
+        $shippingAddress->customerAddressId = $customerShippingAddressId;
+        $sa = $this->_xml->addChild("address");
+        $this->_addObject($sa, $shippingAddress);
+        return $this->_sendRequest();
+    }
+    
+    /**
+     * Update the status of an existing order that contains multiple transactions with the same splitTenderId.
+     *
+     * @param int                        $splitTenderId
+     * @param string                     $splitTenderStatus
+     *
+     * @return AuthorizeNetCIM_Response
+     */
+    public function updateSplitTenderGroup($splitTenderId, $splitTenderStatus)
+    {
+        $this->_constructXml("updateSplitTenderGroupRequest");
+        $this->_xml->addChild("splitTenderId", $splitTenderId);
+        $this->_xml->addChild("splitTenderStatus", $splitTenderStatus);
+        return $this->_sendRequest();
+    }
+    
+    /**
+     * Validate a customer payment profile.
+     *
+     * @param int                        $customerProfileId
+     * @param int                        $customerPaymentProfileId
+     * @param int                        $customerShippingAddressId
+     * @param int                        $cardCode
+     * @param string                     $validationMode
+     *
+     * @return AuthorizeNetCIM_Response
+     */
+    public function validateCustomerPaymentProfile($customerProfileId, $customerPaymentProfileId, $customerShippingAddressId, $cardCode, $validationMode = "testMode")
+    {
+        $this->_validationMode = $validationMode;
+        $this->_constructXml("validateCustomerPaymentProfileRequest");
+        $this->_xml->addChild("customerProfileId",$customerProfileId);
+        $this->_xml->addChild("customerPaymentProfileId",$customerPaymentProfileId);
+        $this->_xml->addChild("customerShippingAddressId",$customerShippingAddressId);
+        $this->_xml->addChild("cardCode",$cardCode);
+        return $this->_sendRequest();
+    }
+    
+     /**
+     * @return string
+     */
+    protected function _getPostUrl()
+    {
+        return ($this->_sandbox ? self::SANDBOX_URL : self::LIVE_URL);
+    }
+    
+    /**
+     *
+     *
+     * @param string $response
+     * 
+     * @return AuthorizeNetCIM_Response
+     */
+    protected function _handleResponse($response)
+    {
+        return new AuthorizeNetCIM_Response($response);
+    }
+    
+    /**
+     * Prepare the XML post string.
+     */
+    protected function _setPostString()
+    {
+        ($this->_validationMode != "none" ? $this->_xml->addChild('validationMode',$this->_validationMode) : "");
+        $this->_post_string = $this->_xml->asXML();
+        
+        // Add extraOptions CDATA
+        if ($this->_extraOptions) {
+            $this->_xml->addChild("extraOptions");
+            $this->_post_string = str_replace("<extraOptions></extraOptions>",'<extraOptions><![CDATA[' . $this->_extraOptions . ']]></extraOptions>', $this->_xml->asXML());
+            $this->_extraOptions = false;
+        }
+        // Blank out our validation mode, so that we don't include it in calls that
+        // don't use it.
+        $this->_validationMode = "none";
+    }
+    
+    /**
+     * Start the SimpleXMLElement that will be posted.
+     *
+     * @param string $request_type The action to be performed.
+     */
+    private function _constructXml($request_type)
+    {
+        $string = '<?xml version="1.0" encoding="utf-8"?><'.$request_type.' xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd"></'.$request_type.'>';
+        $this->_xml = @new SimpleXMLElement($string);
+        $merchant = $this->_xml->addChild('merchantAuthentication');
+        $merchant->addChild('name',$this->_api_login);
+        $merchant->addChild('transactionKey',$this->_transaction_key);
+        ($this->_refId ? $this->_xml->addChild('refId',$this->_refId) : "");
+    }
+    
+    /**
+     * Add an object to an SimpleXMLElement parent element.
+     *
+     * @param SimpleXMLElement $destination The parent element.
+     * @param Object           $object      An object, array or value.  
+     */
+    private function _addObject($destination, $object)
+    {
+        $array = (array)$object;
+        foreach ($array as $key => $value) {
+            if ($value && !is_object($value)) {
+                if (is_array($value) && count($value)) {
+                    foreach ($value as $index => $item) {
+                        $items = $destination->addChild($key);
+                        $this->_addObject($items, $item);
+                    }
+                } else {
+                    $destination->addChild($key,$value);
+                }
+            } elseif (is_object($value) && self::_notEmpty($value)) {
+                $dest = $destination->addChild($key);
+                $this->_addObject($dest, $value);
+            }
+        }
+    }
+    
+    /**
+     * Checks whether an array or object contains any values.
+     *
+     * @param Object $object
+     *
+     * @return bool
+     */
+    private static function _notEmpty($object)
+    {
+        $array = (array)$object;
+        foreach ($array as $key => $value) {
+            if ($value && !is_object($value)) {
+                return true;
+            } elseif (is_object($value)) {
+                if (self::_notEmpty($value)) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+    
+}
+
+/**
+ * A class to parse a response from the CIM XML API.
+ *
+ * @package    AuthorizeNet
+ * @subpackage AuthorizeNetCIM
+ */
+class AuthorizeNetCIM_Response extends AuthorizeNetXMLResponse
+{
+    /**
+     * @return AuthorizeNetAIM_Response
+     */
+    public function getTransactionResponse()
+    {
+        return new AuthorizeNetAIM_Response($this->_getElementContents("directResponse"), ",", "", array());
+    }
+    
+    /**
+     * @return array Array of AuthorizeNetAIM_Response objects for each payment profile.
+     */
+    public function getValidationResponses()
+    {
+        $responses = (array)$this->xml->validationDirectResponseList;
+        $return = array();
+        foreach ((array)$responses["string"] as $response) {
+            $return[] = new AuthorizeNetAIM_Response($response, ",", "", array());
+        }
+        return $return;
+    }
+    
+    /**
+     * @return AuthorizeNetAIM_Response
+     */
+    public function getValidationResponse()
+    {
+        return new AuthorizeNetAIM_Response($this->_getElementContents("validationDirectResponse"), ",", "", array());
+    }
+    
+    /**
+     * @return array
+     */
+    public function getCustomerProfileIds()
+    {
+        $ids = (array)$this->xml->ids;
+        return $ids["numericString"];
+    }
+    
+    /**
+     * @return array
+     */
+    public function getCustomerPaymentProfileIds()
+    {
+        $ids = (array)$this->xml->customerPaymentProfileIdList;
+        return $ids["numericString"];
+    }
+    
+    /**
+     * @return array
+     */
+    public function getCustomerShippingAddressIds()
+    {
+        $ids = (array)$this->xml->customerShippingAddressIdList;
+        return $ids["numericString"];
+    }
+    
+    /**
+     * @return string
+     */
+    public function getCustomerAddressId()
+    {
+        return $this->_getElementContents("customerAddressId");
+    }
+    
+    /**
+     * @return string
+     */
+    public function getCustomerProfileId()
+    {
+        return $this->_getElementContents("customerProfileId");
+    }
+    
+    /**
+     * @return string
+     */
+    public function getPaymentProfileId()
+    {
+        return $this->_getElementContents("customerPaymentProfileId");
+    }
+
+}
diff --git a/anet_php_sdk/lib/AuthorizeNetCP.php b/anet_php_sdk/lib/AuthorizeNetCP.php
new file mode 100755 (executable)
index 0000000..1ff0a3d
--- /dev/null
@@ -0,0 +1,222 @@
+<?php
+/**
+ * Easily interact with the Authorize.Net Card Present API.
+ *
+ *
+ * @package    AuthorizeNet
+ * @subpackage AuthorizeNetCP
+ * @link       http://www.authorize.net/support/CP_guide.pdf Card Present Guide
+ */
+
+/**
+ * Builds and sends an AuthorizeNet CP Request.
+ *
+ * @package    AuthorizeNet
+ * @subpackage AuthorizeNetCP
+ */
+class AuthorizeNetCP extends AuthorizeNetAIM
+{
+    
+    const LIVE_URL = 'https://cardpresent.authorize.net/gateway/transact.dll';
+    
+    public $verify_x_fields = false; 
+    
+    /**
+     * Holds all the x_* name/values that will be posted in the request. 
+     * Default values are provided for best practice fields.
+     */
+    protected $_x_post_fields = array(
+        "cpversion" => "1.0", 
+        "delim_char" => ",",
+        "encap_char" => "|",
+        "market_type" => "2",
+        "response_format" => "1", // 0 - XML, 1 - NVP
+        );
+    
+    /**
+     * Device Types (x_device_type)
+     * 1 = Unknown
+     * 2 = Unattended Terminal
+     * 3 = Self Service Terminal
+     * 4 = Electronic Cash Register
+     * 5 = Personal Computer- Based Terminal
+     * 6 = AirPay
+     * 7 = Wireless POS
+     * 8 = Website
+     * 9 = Dial Terminal
+     * 10 = Virtual Terminal
+     */
+    
+    /**
+     * Strip sentinels and set track1 field.
+     *
+     * @param  string $track1data
+     */
+    public function setTrack1Data($track1data) {
+        if (preg_match('/^%.*\?$/', $track1data)) {
+            $this->track1 = substr($track1data, 1, -1);
+        } else {
+            $this->track1 = $track1data;    
+        }
+    }
+    
+    /**
+     * Strip sentinels and set track2 field.
+     *
+     * @param  string $track2data
+     */
+    public function setTrack2Data($track2data) {
+        if (preg_match('/^;.*\?$/', $track2data)) {
+            $this->track2 = substr($track2data, 1, -1);
+        } else {
+            $this->track2 = $track2data;    
+        }
+    }
+    
+    /**
+     *
+     *
+     * @param string $response
+     * 
+     * @return AuthorizeNetAIM_Response
+     */
+    protected function _handleResponse($response)
+    {
+        return new AuthorizeNetCP_Response($response, $this->_x_post_fields['delim_char'], $this->_x_post_fields['encap_char'], $this->_custom_fields);
+    }
+    
+}
+
+
+/**
+ * Parses an AuthorizeNet Card Present Response.
+ *
+ * @package    AuthorizeNet
+ * @subpackage AuthorizeNetCP
+ */
+class AuthorizeNetCP_Response extends AuthorizeNetResponse
+{
+    private $_response_array = array(); // An array with the split response.
+
+    /**
+     * Constructor. Parses the AuthorizeNet response string.
+     *
+     * @param string $response      The response from the AuthNet server.
+     * @param string $delimiter     The delimiter used (default is ",")
+     * @param string $encap_char    The encap_char used (default is "|")
+     * @param array  $custom_fields Any custom fields set in the request.
+     */
+    public function __construct($response, $delimiter, $encap_char, $custom_fields)
+    {
+        if ($response) {
+            
+            // If it's an XML response
+            if (substr($response, 0, 5) == "<?xml") {
+                
+                $this->xml = @simplexml_load_string($response);
+                // Set all fields
+                $this->version              = array_pop(array_slice(explode('"', $response), 1,1));
+                $this->response_code        = (string)$this->xml->ResponseCode;
+                
+                if ($this->response_code == 1) {
+                    $this->response_reason_code = (string)$this->xml->Messages->Message->Code;
+                    $this->response_reason_text = (string)$this->xml->Messages->Message->Description;
+                } else {
+                    $this->response_reason_code = (string)$this->xml->Errors->Error->ErrorCode;
+                    $this->response_reason_text = (string)$this->xml->Errors->Error->ErrorText;
+                }
+                
+                $this->authorization_code   = (string)$this->xml->AuthCode;
+                $this->avs_code             = (string)$this->xml->AVSResultCode;
+                $this->card_code_response   = (string)$this->xml->CVVResultCode;
+                $this->transaction_id       = (string)$this->xml->TransID;
+                $this->md5_hash             = (string)$this->xml->TransHash;
+                $this->user_ref             = (string)$this->xml->UserRef;
+                $this->card_num             = (string)$this->xml->AccountNumber;
+                $this->card_type            = (string)$this->xml->AccountType;
+                $this->test_mode            = (string)$this->xml->TestMode;
+                $this->ref_trans_id         = (string)$this->xml->RefTransID;
+                
+                
+            } else { // If it's an NVP response
+                
+                // Split Array
+                $this->response = $response;
+                if ($encap_char) {
+                    $this->_response_array = explode($encap_char.$delimiter.$encap_char, substr($response, 1, -1));
+                } else {
+                    $this->_response_array = explode($delimiter, $response);
+                }
+                
+                /**
+                 * If AuthorizeNet doesn't return a delimited response.
+                 */
+                if (count($this->_response_array) < 10) {
+                    $this->approved = false;
+                    $this->error = true;
+                    $this->error_message = "Unrecognized response from AuthorizeNet: $response";
+                    return;
+                }
+                
+                
+                
+                // Set all fields
+                $this->version              = $this->_response_array[0];
+                $this->response_code        = $this->_response_array[1];
+                $this->response_reason_code = $this->_response_array[2];
+                $this->response_reason_text = $this->_response_array[3];
+                $this->authorization_code   = $this->_response_array[4];
+                $this->avs_code             = $this->_response_array[5];
+                $this->card_code_response   = $this->_response_array[6];
+                $this->transaction_id       = $this->_response_array[7];
+                $this->md5_hash             = $this->_response_array[8];
+                $this->user_ref             = $this->_response_array[9];
+                $this->card_num             = $this->_response_array[20];
+                $this->card_type            = $this->_response_array[21];
+                $this->split_tender_id      = $this->_response_array[22];
+                $this->requested_amount     = $this->_response_array[23];
+                $this->approved_amount      = $this->_response_array[24];
+                $this->card_balance         = $this->_response_array[25];
+    
+    
+                
+            }
+            $this->approved = ($this->response_code == self::APPROVED);
+            $this->declined = ($this->response_code == self::DECLINED);
+            $this->error    = ($this->response_code == self::ERROR);
+            $this->held     = ($this->response_code == self::HELD);
+
+            
+            if ($this->error) {
+                $this->error_message = "AuthorizeNet Error:
+                Response Code: ".$this->response_code."
+                Response Reason Code: ".$this->response_reason_code."
+                Response Reason Text: ".$this->response_reason_text."
+                ";
+            }
+            
+        } else {
+            $this->approved = false;
+            $this->error = true;
+            $this->error_message = "Error connecting to AuthorizeNet";
+        }
+    }
+    
+    /**
+     * Is the MD5 provided correct?
+     *
+     * @param string $api_login_id
+     * @param string $md5_setting
+     * @return bool
+     */
+    public function isAuthorizeNet($api_login_id = false, $md5_setting = false)
+    {
+        $amount = ($this->amount ? $this->amount : '0.00');
+        $api_login_id = ($api_login_id ? $api_login_id : AUTHORIZENET_API_LOGIN_ID);
+        $md5_setting = ($md5_setting ? $md5_setting : AUTHORIZENET_MD5_SETTING);
+        return ($this->md5_hash == strtoupper(md5($md5_setting . $api_login_id . $this->transaction_id . $amount)));
+    }
+
+}
+
diff --git a/anet_php_sdk/lib/AuthorizeNetDPM.php b/anet_php_sdk/lib/AuthorizeNetDPM.php
new file mode 100755 (executable)
index 0000000..5e693cc
--- /dev/null
@@ -0,0 +1,237 @@
+<?php
+/**
+ * Demonstrates the Direct Post Method.
+ *
+ * To implement the Direct Post Method you need to implement 3 steps:
+ *
+ * Step 1: Add necessary hidden fields to your checkout form and make your form is set to post to AuthorizeNet.
+ *
+ * Step 2: Receive a response from AuthorizeNet, do your business logic, and return
+ *         a relay response snippet with a url to redirect the customer to.
+ *
+ * Step 3: Show a receipt page to your customer.
+ *
+ * This class is more for demonstration purposes than actual production use.
+ *
+ *
+ * @package    AuthorizeNet
+ * @subpackage AuthorizeNetDPM
+ */
+
+/**
+ * A class that demonstrates the DPM method.
+ *
+ * @package    AuthorizeNet
+ * @subpackage AuthorizeNetDPM
+ */
+class AuthorizeNetDPM extends AuthorizeNetSIM_Form
+{
+
+    const LIVE_URL = 'https://secure.authorize.net/gateway/transact.dll';
+    const SANDBOX_URL = 'https://test.authorize.net/gateway/transact.dll';
+
+    /**
+     * Implements all 3 steps of the Direct Post Method for demonstration
+     * purposes.
+     */
+    public static function directPostDemo($url, $api_login_id, $transaction_key, $amount = "0.00", $md5_setting = "")
+    {
+        
+        // Step 1: Show checkout form to customer.
+        if (!count($_POST) && !count($_GET))
+        {
+            $fp_sequence = time(); // Any sequential number like an invoice number.
+            echo AuthorizeNetDPM::getCreditCardForm($amount, $fp_sequence, $url, $api_login_id, $transaction_key);
+        }
+        // Step 2: Handle AuthorizeNet Transaction Result & return snippet.
+        elseif (count($_POST)) 
+        {
+            $response = new AuthorizeNetSIM($api_login_id, $md5_setting);
+            if ($response->isAuthorizeNet()) 
+            {
+                if ($response->approved) 
+                {
+                    // Do your processing here.
+                    $redirect_url = $url . '?response_code=1&transaction_id=' . $response->transaction_id; 
+                }
+                else
+                {
+                    // Redirect to error page.
+                    $redirect_url = $url . '?response_code='.$response->response_code . '&response_reason_text=' . $response->response_reason_text;
+                }
+                // Send the Javascript back to AuthorizeNet, which will redirect user back to your site.
+                echo AuthorizeNetDPM::getRelayResponseSnippet($redirect_url);
+            }
+            else
+            {
+                echo "Error -- not AuthorizeNet. Check your MD5 Setting.";
+            }
+        }
+        // Step 3: Show receipt page to customer.
+        elseif (!count($_POST) && count($_GET))
+        {
+            if ($_GET['response_code'] == 1)
+            {
+                echo "Thank you for your purchase! Transaction id: " . htmlentities($_GET['transaction_id']);
+            }
+            else
+            {
+              echo "Sorry, an error occurred: " . htmlentities($_GET['response_reason_text']);
+            }
+        }
+    }
+    
+    /**
+     * A snippet to send to AuthorizeNet to redirect the user back to the
+     * merchant's server. Use this on your relay response page.
+     *
+     * @param string $redirect_url Where to redirect the user.
+     *
+     * @return string
+     */
+    public static function getRelayResponseSnippet($redirect_url)
+    {
+        return "<html><head><script language=\"javascript\">
+                <!--
+                window.location=\"{$redirect_url}\";
+                //-->
+                </script>
+                </head><body><noscript><meta http-equiv=\"refresh\" content=\"1;url={$redirect_url}\"></noscript></body></html>";
+    }
+    
+    /**
+     * Generate a sample form for use in a demo Direct Post implementation.
+     *
+     * @param string $amount                   Amount of the transaction.
+     * @param string $fp_sequence              Sequential number(ie. Invoice #)
+     * @param string $relay_response_url       The Relay Response URL
+     * @param string $api_login_id             Your API Login ID
+     * @param string $transaction_key          Your API Tran Key.
+     * @param bool   $test_mode                Use the sandbox?
+     * @param bool   $prefill                  Prefill sample values(for test purposes).
+     *
+     * @return string
+     */
+    public static function getCreditCardForm($amount, $fp_sequence, $relay_response_url, $api_login_id, $transaction_key, $test_mode = true, $prefill = true)
+    {
+        $time = time();
+        $fp = self::getFingerprint($api_login_id, $transaction_key, $amount, $fp_sequence, $time);
+        $sim = new AuthorizeNetSIM_Form(
+            array(
+            'x_amount'        => $amount,
+            'x_fp_sequence'   => $fp_sequence,
+            'x_fp_hash'       => $fp,
+            'x_fp_timestamp'  => $time,
+            'x_relay_response'=> "TRUE",
+            'x_relay_url'     => $relay_response_url,
+            'x_login'         => $api_login_id,
+            )
+        );
+        $hidden_fields = $sim->getHiddenFieldString();
+        $post_url = ($test_mode ? self::SANDBOX_URL : self::LIVE_URL);
+        
+        $form = '
+        <style>
+        fieldset {
+            overflow: auto;
+            border: 0;
+            margin: 0;
+            padding: 0; }
+
+        fieldset div {
+            float: left; }
+
+        fieldset.centered div {
+            text-align: center; }
+
+        label {
+            color: #183b55;
+            display: block;
+            margin-bottom: 5px; }
+
+        label img {
+            display: block;
+            margin-bottom: 5px; }
+
+        input.text {
+            border: 1px solid #bfbab4;
+            margin: 0 4px 8px 0;
+            padding: 6px;
+            color: #1e1e1e;
+            -webkit-border-radius: 5px;
+            -moz-border-radius: 5px;
+            border-radius: 5px;
+            -webkit-box-shadow: inset 0px 5px 5px #eee;
+            -moz-box-shadow: inset 0px 5px 5px #eee;
+            box-shadow: inset 0px 5px 5px #eee; }
+        .submit {
+            display: block;
+            background-color: #76b2d7;
+            border: 1px solid #766056;
+            color: #3a2014;
+            margin: 13px 0;
+            padding: 8px 16px;
+            -webkit-border-radius: 12px;
+            -moz-border-radius: 12px;
+            border-radius: 12px;
+            font-size: 14px;
+            -webkit-box-shadow: inset 3px -3px 3px rgba(0,0,0,.5), inset 0 3px 3px rgba(255,255,255,.5), inset -3px 0 3px rgba(255,255,255,.75);
+            -moz-box-shadow: inset 3px -3px 3px rgba(0,0,0,.5), inset 0 3px 3px rgba(255,255,255,.5), inset -3px 0 3px rgba(255,255,255,.75);
+            box-shadow: inset 3px -3px 3px rgba(0,0,0,.5), inset 0 3px 3px rgba(255,255,255,.5), inset -3px 0 3px rgba(255,255,255,.75); }
+        </style>
+        <form method="post" action="'.$post_url.'">
+                '.$hidden_fields.'
+            <fieldset>
+                <div>
+                    <label>Credit Card Number</label>
+                    <input type="text" class="text" size="15" name="x_card_num" value="'.($prefill ? '6011000000000012' : '').'"></input>
+                </div>
+                <div>
+                    <label>Exp.</label>
+                    <input type="text" class="text" size="4" name="x_exp_date" value="'.($prefill ? '04/17' : '').'"></input>
+                </div>
+                <div>
+                    <label>CCV</label>
+                    <input type="text" class="text" size="4" name="x_card_code" value="'.($prefill ? '782' : '').'"></input>
+                </div>
+            </fieldset>
+            <fieldset>
+                <div>
+                    <label>First Name</label>
+                    <input type="text" class="text" size="15" name="x_first_name" value="'.($prefill ? 'John' : '').'"></input>
+                </div>
+                <div>
+                    <label>Last Name</label>
+                    <input type="text" class="text" size="14" name="x_last_name" value="'.($prefill ? 'Doe' : '').'"></input>
+                </div>
+            </fieldset>
+            <fieldset>
+                <div>
+                    <label>Address</label>
+                    <input type="text" class="text" size="26" name="x_address" value="'.($prefill ? '123 Main Street' : '').'"></input>
+                </div>
+                <div>
+                    <label>City</label>
+                    <input type="text" class="text" size="15" name="x_city" value="'.($prefill ? 'Boston' : '').'"></input>
+                </div>
+            </fieldset>
+            <fieldset>
+                <div>
+                    <label>State</label>
+                    <input type="text" class="text" size="4" name="x_state" value="'.($prefill ? 'MA' : '').'"></input>
+                </div>
+                <div>
+                    <label>Zip Code</label>
+                    <input type="text" class="text" size="9" name="x_zip" value="'.($prefill ? '02142' : '').'"></input>
+                </div>
+                <div>
+                    <label>Country</label>
+                    <input type="text" class="text" size="22" name="x_country" value="'.($prefill ? 'US' : '').'"></input>
+                </div>
+            </fieldset>
+            <input type="submit" value="BUY" class="submit buy">
+        </form>';
+        return $form;
+    }
+
+}
\ No newline at end of file
diff --git a/anet_php_sdk/lib/AuthorizeNetSIM.php b/anet_php_sdk/lib/AuthorizeNetSIM.php
new file mode 100755 (executable)
index 0000000..60297e5
--- /dev/null
@@ -0,0 +1,212 @@
+<?php
+/**
+ * Easily use the Authorize.Net Server Integration Method(SIM).
+ *
+ * @package    AuthorizeNet
+ * @subpackage AuthorizeNetSIM
+ * @link       http://www.authorize.net/support/SIM_guide.pdf SIM Guide
+ */
+
+/**
+ * Easily parse an AuthorizeNet SIM Response.
+ * @package    AuthorizeNet
+ * @subpackage AuthorizeNetSIM
+ */
+class AuthorizeNetSIM extends AuthorizeNetResponse
+{
+
+    // For ARB transactions
+    public $subscription_id;
+    public $subscription_paynum;
+
+    /**
+     * Constructor.
+     *
+     * @param string $api_login_id
+     * @param string $md5_setting For verifying an Authorize.Net message.
+     */
+    public function __construct($api_login_id = false, $md5_setting = false)
+    {
+        $this->api_login_id = ($api_login_id ? $api_login_id : (defined('AUTHORIZENET_API_LOGIN_ID') ? AUTHORIZENET_API_LOGIN_ID : ""));
+        $this->md5_setting = ($md5_setting ? $md5_setting : (defined('AUTHORIZENET_MD5_SETTING') ? AUTHORIZENET_MD5_SETTING : ""));
+        $this->response = $_POST;
+        
+        // Set fields without x_ prefix
+        foreach ($_POST as $key => $value) {
+            $name = substr($key, 2);
+            $this->$name = $value;
+        }
+        
+        // Set some human readable fields
+        $map = array(
+            'avs_response' => 'x_avs_code',
+            'authorization_code' => 'x_auth_code',
+            'transaction_id' => 'x_trans_id',
+            'customer_id' => 'x_cust_id',
+            'md5_hash' => 'x_MD5_Hash',
+            'card_code_response' => 'x_cvv2_resp_code',
+            'cavv_response' => 'x_cavv_response',
+        );
+        foreach ($map as $key => $value) {
+            $this->$key = (isset($_POST[$value]) ? $_POST[$value] : "");
+        }
+        
+        $this->approved = ($this->response_code == self::APPROVED);
+        $this->declined = ($this->response_code == self::DECLINED);
+        $this->error    = ($this->response_code == self::ERROR);
+        $this->held     = ($this->response_code == self::HELD);
+    }
+    
+    /**
+     * Verify the request is AuthorizeNet.
+     *
+     * @return bool
+     */
+    public function isAuthorizeNet()
+    {
+        return count($_POST) && $this->md5_hash && ($this->generateHash() == $this->md5_hash);
+    }
+    
+    /**
+     * Generates an Md5 hash to compare against Authorize.Net's.
+     *
+     * @return string Hash
+     */
+    public function generateHash()
+    {
+        $amount = ($this->amount ? $this->amount : "0.00");
+        return strtoupper(md5($this->md5_setting . $this->api_login_id . $this->transaction_id . $amount));
+    }
+
+}
+
+/**
+ * A helper class for using hosted order page.
+ *
+ * @package    AuthorizeNet
+ * @subpackage AuthorizeNetSIM
+ */
+class AuthorizeNetSIM_Form
+{
+    public $x_address;
+    public $x_amount;
+    public $x_background_url;
+    public $x_card_num;
+    public $x_city;
+    public $x_color_background;
+    public $x_color_link;
+    public $x_color_text;
+    public $x_company;
+    public $x_country;
+    public $x_cust_id;
+    public $x_customer_ip;
+    public $x_description;
+    public $x_delim_data;
+    public $x_duplicate_window;
+    public $x_duty;
+    public $x_email;
+    public $x_email_customer;
+    public $x_fax;
+    public $x_first_name;
+    public $x_footer_email_receipt;
+    public $x_footer_html_payment_form;
+    public $x_footer_html_receipt;
+    public $x_fp_hash;
+    public $x_fp_sequence;
+    public $x_fp_timestamp;
+    public $x_freight;
+    public $x_header_email_receipt;
+    public $x_header_html_payment_form;
+    public $x_header_html_receipt;
+    public $x_invoice_num;
+    public $x_last_name;
+    public $x_line_item;
+    public $x_login;
+    public $x_logo_url;
+    public $x_method;
+    public $x_phone;
+    public $x_po_num;
+    public $x_receipt_link_method;
+    public $x_receipt_link_text;
+    public $x_receipt_link_url;
+    public $x_recurring_billing;
+    public $x_relay_response;
+    public $x_relay_url;
+    public $x_rename;
+    public $x_ship_to_address;
+    public $x_ship_to_company;
+    public $x_ship_to_country;
+    public $x_ship_to_city;
+    public $x_ship_to_first_name;
+    public $x_ship_to_last_name;
+    public $x_ship_to_state;
+    public $x_ship_to_zip;
+    public $x_show_form;
+    public $x_state;
+    public $x_tax;
+    public $x_tax_exempt;
+    public $x_test_request;
+    public $x_trans_id;
+    public $x_type;
+    public $x_version;
+    public $x_zip;
+    
+    /**
+     * Constructor
+     *
+     * @param array $fields Fields to set.
+     */
+    public function __construct($fields = false)
+    {
+        // Set some best practice fields
+        $this->x_relay_response = "FALSE";
+        $this->x_version = "3.1";
+        $this->x_delim_char = ",";
+        $this->x_delim_data = "TRUE";
+        
+        if ($fields) {
+            foreach ($fields as $key => $value) {
+                $this->$key = $value;
+            }
+        }
+    }
+    
+    /**
+     * Get a string of HTML hidden fields for use in a form.
+     *
+     * @return string
+     */
+    public function getHiddenFieldString()
+    {
+        $array = (array)$this;
+        $string = "";
+        foreach ($array as $key => $value) {
+            if ($value) {
+                $string .= '<input type="hidden" name="'.$key.'" value="'.$value.'">';
+            }
+        }
+        return $string;
+    }
+    
+    /**
+     * Generates a fingerprint needed for a hosted order form or DPM.
+     *
+     * @param string $api_login_id    Login ID.
+     * @param string $transaction_key API key.
+     * @param string $amount          Amount of transaction.
+     * @param string $fp_sequence     An invoice number or random number.
+     * @param string $fp_timestamp    Timestamp.
+     *
+     * @return string The fingerprint.
+     */
+    public static function getFingerprint($api_login_id, $transaction_key, $amount, $fp_sequence, $fp_timestamp)
+    {
+        $api_login_id = ($api_login_id ? $api_login_id : (defined('AUTHORIZENET_API_LOGIN_ID') ? AUTHORIZENET_API_LOGIN_ID : ""));
+        $transaction_key = ($transaction_key ? $transaction_key : (defined('AUTHORIZENET_TRANSACTION_KEY') ? AUTHORIZENET_TRANSACTION_KEY : ""));
+        if (function_exists('hash_hmac')) {
+            return hash_hmac("md5", $api_login_id . "^" . $fp_sequence . "^" . $fp_timestamp . "^" . $amount . "^", $transaction_key); 
+        }
+        return bin2hex(mhash(MHASH_MD5, $api_login_id . "^" . $fp_sequence . "^" . $fp_timestamp . "^" . $amount . "^", $transaction_key));
+    }
+    
+}
\ No newline at end of file
diff --git a/anet_php_sdk/lib/AuthorizeNetSOAP.php b/anet_php_sdk/lib/AuthorizeNetSOAP.php
new file mode 100755 (executable)
index 0000000..36c30a4
--- /dev/null
@@ -0,0 +1,99 @@
+<?php
+/**
+ * A simple wrapper for the SOAP API as well as a helper function
+ * to generate a documentation file from the WSDL.
+ *
+ * @package    AuthorizeNet
+ * @subpackage AuthorizeNetSoap
+ */
+
+/**
+ * A simple wrapper for the SOAP API as well as a helper function
+ * to generate a documentation file from the WSDL.
+ *
+ * @package    AuthorizeNet
+ * @subpackage AuthorizeNetSoap
+ * @todo       Make the doc file a usable class.
+ */
+class AuthorizeNetSOAP extends SoapClient
+{
+    const WSDL_URL = "https://api.authorize.net/soap/v1/Service.asmx?WSDL";
+    const LIVE_URL = "https://api.authorize.net/soap/v1/Service.asmx";
+    const SANDBOX_URL = "https://apitest.authorize.net/soap/v1/Service.asmx";
+    
+    public $sandbox;
+    
+    /**
+     * Constructor
+     */
+    public function __construct()
+    {
+        parent::__construct(self::WSDL_URL);
+        $this->__setLocation(self::SANDBOX_URL);
+    }
+    
+    /**
+     * Switch between the sandbox or production gateway.
+     *
+     * @param bool
+     */
+    public function setSandbox($bool)
+    {
+        $this->__setLocation(($bool ? self::SANDBOX_URL : self::LIVE_URL));
+    }
+
+    /**
+     * Get all types as PHP Code.
+     * @return string
+     */
+    public function getSoapTypes()
+    {
+        $string = "";
+        $types = $this->__getTypes();
+        foreach ($types as $type) {
+            if (preg_match("/struct /",$type)) {
+                $type = preg_replace("/struct /","class ",$type);
+                $type = preg_replace("/ (\w+) (\w+);/","    // $1\n    public \$$2;",$type);
+                $string .= $type ."\n";
+            }
+        }
+        return $string;
+    }
+    
+    /**
+     * Get all methods as PHP Code.
+     * @return string
+     */
+    public function getSoapMethods()
+    {
+        $string = "";
+        $functions = array();
+        $methods = $this->__getFunctions();
+        foreach ($methods as $index => $method) {
+            $sig = explode(" ", $method, 2);
+            if (!isset($functions[$sig[1]])) {
+                $string .= "    /**\n     * @return {$sig[0]}\n    */\n    public function {$sig[1]} {}\n\n";
+                $functions[$sig[1]] = true;
+            }
+        }
+        return $string;
+    }
+    
+    /**
+     * Create a file from the WSDL for reference.
+     */
+    public function saveSoapDocumentation($path)
+    {
+        $string =  "<?php\n";
+        $string .= "/**\n";
+        $string .= " * Auto generated documentation for the AuthorizeNetSOAP API.\n";
+        $string .= " * Generated " . date("m/d/Y") . "\n";
+        $string .= " */\n";
+        $string .= "class AuthorizeNetSOAP\n";
+        $string .= "{\n" . $this->getSoapMethods() . "\n}\n\n" . $this->getSoapTypes() ."\n\n ?>";
+        return file_put_contents($path, $string);
+    }
+    
+    
+    
+}
\ No newline at end of file
diff --git a/anet_php_sdk/lib/AuthorizeNetTD.php b/anet_php_sdk/lib/AuthorizeNetTD.php
new file mode 100755 (executable)
index 0000000..e98a6cd
--- /dev/null
@@ -0,0 +1,209 @@
+<?php
+/**
+ * Easily interact with the Authorize.Net Transaction Details XML API.
+ *
+ * @package    AuthorizeNet
+ * @subpackage AuthorizeNetTD
+ * @link       http://www.authorize.net/support/ReportingGuide_XML.pdf Transaction Details XML Guide
+ */
+
+
+/**
+ * A class to send a request to the Transaction Details XML API.
+ *
+ * @package    AuthorizeNet
+ * @subpackage AuthorizeNetTD
+ */ 
+class AuthorizeNetTD extends AuthorizeNetRequest
+{
+
+    const LIVE_URL = "https://api.authorize.net/xml/v1/request.api";
+    const SANDBOX_URL = "https://apitest.authorize.net/xml/v1/request.api";
+    
+    private $_xml;
+    
+    /**
+     * This function returns information about a settled batch: Batch ID, Settlement Time, & 
+     * Settlement State. If you specify includeStatistics, you also receive batch statistics 
+     * by payment type.
+     *
+     *
+     * The detault date range is one day (the previous 24 hour period). The maximum date range is 31 
+     * days. The merchant time zone is taken into consideration when calculating the batch date range, 
+     * unless the Z is specified in the first and last settlement date
+     *
+     * @param bool   $includeStatistics
+     * @param string $firstSettlementDate //  yyyy-mmddTHH:MM:SS
+     * @param string $lastSettlementDate  //  yyyy-mmddTHH:MM:SS
+     * @param bool   $utc                 //  Use UTC instead of merchant time zone setting
+     *
+     * @return AuthorizeNetTD_Response
+     */
+    public function getSettledBatchList($includeStatistics = false, $firstSettlementDate = false, $lastSettlementDate = false, $utc = true)
+    {
+        $utc = ($utc ? "Z" : "");
+        $this->_constructXml("getSettledBatchListRequest");
+        ($includeStatistics ?
+        $this->_xml->addChild("includeStatistics", $includeStatistics) : null);
+        ($firstSettlementDate ?
+        $this->_xml->addChild("firstSettlementDate", $firstSettlementDate . $utc) : null);
+        ($lastSettlementDate ?
+        $this->_xml->addChild("lastSettlementDate", $lastSettlementDate . $utc) : null);
+        return $this->_sendRequest();
+    }
+    
+    /**
+     * Return all settled batches for a certain month.
+     *
+     * @param int $month
+     * @param int $year
+     *
+     * @return AuthorizeNetTD_Response
+     */
+    public function getSettledBatchListForMonth($month = false, $year = false)
+    {
+        $month = ($month ? $month : date('m'));
+        $year = ($year ? $year : date('Y'));
+        $firstSettlementDate = substr(date('c',mktime(0, 0, 0, $month, 1, $year)),0,-6);
+        $lastSettlementDate  = substr(date('c',mktime(0, 0, 0, $month+1, 0, $year)),0,-6);
+        return $this->getSettledBatchList(true, $firstSettlementDate, $lastSettlementDate);
+    }
+
+    /**
+     * This function returns limited transaction details for a specified batch ID
+     *
+     * @param int $batchId
+     *
+     * @return AuthorizeNetTD_Response
+     */
+    public function getTransactionList($batchId)
+    {
+        $this->_constructXml("getTransactionListRequest");
+        $this->_xml->addChild("batchId", $batchId);
+        return $this->_sendRequest();
+    }
+    
+    /**
+     * Return all transactions for a certain day.
+     *
+     * @param int $month
+     * @param int $day
+     * @param int $year
+     *
+     * @return array Array of SimpleXMLElments
+     */
+    public function getTransactionsForDay($month = false, $day = false, $year = false)
+    {
+        $transactions = array();
+        $month = ($month ? $month : date('m'));
+        $day = ($day ? $day : date('d'));
+        $year = ($year ? $year : date('Y'));
+        $firstSettlementDate = substr(date('c',mktime(0, 0, 0, (int)$month, (int)$day, (int)$year)),0,-6);
+        $lastSettlementDate  = substr(date('c',mktime(0, 0, 0, (int)$month, (int)$day, (int)$year)),0,-6);
+        $response = $this->getSettledBatchList(true, $firstSettlementDate, $lastSettlementDate);
+        $batches = $response->xpath("batchList/batch");
+        foreach ($batches as $batch) {
+            $batch_id = (string)$batch->batchId;
+            $request = new AuthorizeNetTD;
+            $tran_list = $request->getTransactionList($batch_id);
+            $transactions = array_merge($transactions, $tran_list->xpath("transactions/transaction"));
+        }
+        return $transactions;
+    }
+
+    /**
+     * This function returns full transaction details for a specified transaction ID.
+     *
+     * @param int $transId
+     *
+     * @return AuthorizeNetTD_Response
+     */    
+    public function getTransactionDetails($transId)
+    {
+        $this->_constructXml("getTransactionDetailsRequest");
+        $this->_xml->addChild("transId", $transId);
+        return $this->_sendRequest();
+    }
+    
+    /**
+     * This function returns statistics about the settled batch specified by $batchId.
+     *
+     * @param int $batchId
+     *
+     * @return AuthorizeNetTD_Response
+     */
+    public function getBatchStatistics($batchId)
+    {
+        $this->_constructXml("getBatchStatisticsRequest");
+        $this->_xml->addChild("batchId", $batchId);
+        return $this->_sendRequest();
+    }
+    
+    /**
+     * This function returns the last 1000 unsettled transactions.
+     *
+     *
+     * @return AuthorizeNetTD_Response
+     */
+    public function getUnsettledTransactionList()
+    {
+        $this->_constructXml("getUnsettledTransactionListRequest");
+        return $this->_sendRequest();
+    }
+    
+    /**
+     * @return string
+     */
+    protected function _getPostUrl()
+    {
+        return ($this->_sandbox ? self::SANDBOX_URL : self::LIVE_URL);
+    }
+    
+    /**
+     *
+     *
+     * @param string $response
+     * 
+     * @return AuthorizeNetTransactionDetails_Response
+     */
+    protected function _handleResponse($response)
+    {
+        return new AuthorizeNetTD_Response($response);
+    }
+    
+    /**
+     * Prepare the XML post string.
+     */
+    protected function _setPostString()
+    {
+        $this->_post_string = $this->_xml->asXML();
+        
+    }
+    
+    /**
+     * Start the SimpleXMLElement that will be posted.
+     *
+     * @param string $request_type The action to be performed.
+     */
+    private function _constructXml($request_type)
+    {
+        $string = '<?xml version="1.0" encoding="utf-8"?><'.$request_type.' xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd"></'.$request_type.'>';
+        $this->_xml = @new SimpleXMLElement($string);
+        $merchant = $this->_xml->addChild('merchantAuthentication');
+        $merchant->addChild('name',$this->_api_login);
+        $merchant->addChild('transactionKey',$this->_transaction_key);
+    }
+    
+}
+
+/**
+ * A class to parse a response from the Transaction Details XML API.
+ *
+ * @package    AuthorizeNet
+ * @subpackage AuthorizeNetTD
+ */
+class AuthorizeNetTD_Response extends AuthorizeNetXMLResponse
+{
+    
+
+}
diff --git a/anet_php_sdk/lib/shared/AuthorizeNetRequest.php b/anet_php_sdk/lib/shared/AuthorizeNetRequest.php
new file mode 100755 (executable)
index 0000000..76d9dbf
--- /dev/null
@@ -0,0 +1,120 @@
+<?php\r
+/**\r
+ * Sends requests to the Authorize.Net gateways.\r
+ *\r
+ * @package    AuthorizeNet\r
+ * @subpackage AuthorizeNetRequest\r
+ */\r
+abstract class AuthorizeNetRequest\r
+{\r
+    \r
+    protected $_api_login;\r
+    protected $_transaction_key;\r
+    protected $_post_string; \r
+    public $VERIFY_PEER = true; // Set to false if getting connection errors.\r
+    protected $_sandbox = true;\r
+    protected $_log_file = false;\r
+    \r
+    /**\r
+     * Set the _post_string\r
+     */\r
+    abstract protected function _setPostString();\r
+    \r
+    /**\r
+     * Handle the response string\r
+     */\r
+    abstract protected function _handleResponse($string);\r
+    \r
+    /**\r
+     * Get the post url. We need this because until 5.3 you\r
+     * you could not access child constants in a parent class.\r
+     */\r
+    abstract protected function _getPostUrl();\r
+    \r
+    /**\r
+     * Constructor.\r
+     *\r
+     * @param string $api_login_id       The Merchant's API Login ID.\r
+     * @param string $transaction_key The Merchant's Transaction Key.\r
+     */\r
+    public function __construct($api_login_id = false, $transaction_key = false)\r
+    {\r
+        $this->_api_login = ($api_login_id ? $api_login_id : (defined('AUTHORIZENET_API_LOGIN_ID') ? AUTHORIZENET_API_LOGIN_ID : "9q52ab6YPsL"));\r
+        $this->_transaction_key = ($transaction_key ? $transaction_key : (defined('AUTHORIZENET_TRANSACTION_KEY') ? AUTHORIZENET_TRANSACTION_KEY : "728872Hz3aZ7Jqy9"));\r
+        $this->_sandbox = (defined('AUTHORIZENET_SANDBOX') ? AUTHORIZENET_SANDBOX : false);\r
+        $this->_log_file = (defined('AUTHORIZENET_LOG_FILE') ? AUTHORIZENET_LOG_FILE : true);\r
+    }\r
+    \r
+    /**\r
+     * Alter the gateway url.\r
+     *\r
+     * @param bool $bool Use the Sandbox.\r
+     */\r
+    public function setSandbox($bool)\r
+    {\r
+        $this->_sandbox = $bool;\r
+    }\r
+    \r
+    /**\r
+     * Set a log file.\r
+     *\r
+     * @param string $filepath Path to log file.\r
+     */\r
+    public function setLogFile($filepath)\r
+    {\r
+        $this->_log_file = $filepath;\r
+    }\r
+    \r
+    /**\r
+     * Return the post string.\r
+     *\r
+     * @return string\r
+     */\r
+    public function getPostString()\r
+    {\r
+        return $this->_post_string;\r
+    }\r
+    \r
+    /**\r
+     * Posts the request to AuthorizeNet & returns response.\r
+     *\r
+     * @return AuthorizeNetARB_Response The response.\r
+     */\r
+    protected function _sendRequest()\r
+    {\r
+        $this->_setPostString();\r
+        $post_url = $this->_getPostUrl();\r
+        $curl_request = curl_init($post_url);\r
+        curl_setopt($curl_request, CURLOPT_POSTFIELDS, $this->_post_string);\r
+        curl_setopt($curl_request, CURLOPT_HEADER, 0);\r
+        curl_setopt($curl_request, CURLOPT_TIMEOUT, 45);\r
+        curl_setopt($curl_request, CURLOPT_RETURNTRANSFER, 1);\r
+        curl_setopt($curl_request, CURLOPT_SSL_VERIFYHOST, 2);\r
+        if ($this->VERIFY_PEER) {\r
+            curl_setopt($curl_request, CURLOPT_CAINFO, dirname(dirname(__FILE__)) . '/ssl/cert.pem');\r
+        } else {\r
+            curl_setopt($curl_request, CURLOPT_SSL_VERIFYPEER, false);\r
+        }\r
+        \r
+        if (preg_match('/xml/',$post_url)) {\r
+            curl_setopt($curl_request, CURLOPT_HTTPHEADER, Array("Content-Type: text/xml"));\r
+        }\r
+        \r
+        $response = curl_exec($curl_request);\r
+        \r
+        if ($this->_log_file) {\r
+        \r
+            if ($curl_error = curl_error($curl_request)) {\r
+                file_put_contents($this->_log_file, "----CURL ERROR----\n$curl_error\n\n", FILE_APPEND);\r
+            }\r
+            // Do not log requests that could contain CC info.\r
+            // file_put_contents($this->_log_file, "----Request----\n{$this->_post_string}\n", FILE_APPEND);\r
+            \r
+            file_put_contents($this->_log_file, "----Response----\n$response\n\n", FILE_APPEND);\r
+        }\r
+        curl_close($curl_request);\r
+        \r
+        return $this->_handleResponse($response);\r
+    }\r
+\r
+}\r
diff --git a/anet_php_sdk/lib/shared/AuthorizeNetResponse.php b/anet_php_sdk/lib/shared/AuthorizeNetResponse.php
new file mode 100755 (executable)
index 0000000..969b60a
--- /dev/null
@@ -0,0 +1,75 @@
+<?php
+/**
+ * Base class for the AuthorizeNet AIM & SIM Responses.
+ *
+ * @package    AuthorizeNet
+ * @subpackage    AuthorizeNetResponse
+ */
+
+
+/**
+ * Parses an AuthorizeNet Response.
+ *
+ * @package AuthorizeNet
+ * @subpackage    AuthorizeNetResponse
+ */
+class AuthorizeNetResponse
+{
+
+    const APPROVED = 1;
+    const DECLINED = 2;
+    const ERROR = 3;
+    const HELD = 4;
+    
+    public $approved;
+    public $declined;
+    public $error;
+    public $held;
+    public $response_code;
+    public $response_subcode;
+    public $response_reason_code;
+    public $response_reason_text;
+    public $authorization_code;
+    public $avs_response;
+    public $transaction_id;
+    public $invoice_num;
+    public $description;
+    public $amount;
+    public $method;
+    public $transaction_type;
+    public $customer_id;
+    public $first_name;
+    public $last_name;
+    public $company;
+    public $address;
+    public $city;
+    public $state;
+    public $zip_code;
+    public $country;
+    public $phone;
+    public $fax;
+    public $email_address;
+    public $ship_to_first_name;
+    public $ship_to_last_name;
+    public $ship_to_company;
+    public $ship_to_address;
+    public $ship_to_city;
+    public $ship_to_state;
+    public $ship_to_zip_code;
+    public $ship_to_country;
+    public $tax;
+    public $duty;
+    public $freight;
+    public $tax_exempt;
+    public $purchase_order_number;
+    public $md5_hash;
+    public $card_code_response;
+    public $cavv_response; // cardholder_authentication_verification_response
+    public $account_number;
+    public $card_type;
+    public $split_tender_id;
+    public $requested_amount;
+    public $balance_on_card;
+    public $response; // The response string from AuthorizeNet.
+
+}
diff --git a/anet_php_sdk/lib/shared/AuthorizeNetTypes.php b/anet_php_sdk/lib/shared/AuthorizeNetTypes.php
new file mode 100755 (executable)
index 0000000..42dd20f
--- /dev/null
@@ -0,0 +1,323 @@
+<?php
+/**
+ * Classes for the various AuthorizeNet data types.
+ *
+ * @package    AuthorizeNet
+ * @subpackage AuthorizeNetCIM
+ */
+
+
+/**
+ * A class that contains all fields for a CIM Customer Profile.
+ *
+ * @package    AuthorizeNet
+ * @subpackage AuthorizeNetCIM
+ */
+class AuthorizeNetCustomer
+{
+    public $merchantCustomerId;
+    public $description;
+    public $email;
+    public $paymentProfiles = array();
+    public $shipToList = array();
+    public $customerProfileId;
+    
+}
+/**
+ * A class that contains all fields for a CIM Address.
+ *
+ * @package    AuthorizeNet
+ * @subpackage AuthorizeNetCIM
+ */
+class AuthorizeNetAddress
+{
+    public $firstName;
+    public $lastName;
+    public $company;
+    public $address;
+    public $city;
+    public $state;
+    public $zip;
+    public $country;
+    public $phoneNumber;
+    public $faxNumber;
+    public $customerAddressId;
+}
+
+/**
+ * A class that contains all fields for a CIM Payment Profile.
+ *
+ * @package    AuthorizeNet
+ * @subpackage AuthorizeNetCIM
+ */
+class AuthorizeNetPaymentProfile
+{
+    
+    public $customerType;
+    public $billTo;
+    public $payment;
+    public $customerPaymentProfileId;
+    
+    public function __construct()
+    {
+        $this->billTo = new AuthorizeNetAddress;
+        $this->payment = new AuthorizeNetPayment;
+    }
+
+}
+
+/**
+ * A class that contains all fields for a CIM Payment Type.
+ *
+ * @package    AuthorizeNet
+ * @subpackage AuthorizeNetCIM
+ */
+class AuthorizeNetPayment
+{
+    public $creditCard;
+    public $bankAccount;
+    
+    public function __construct()
+    {
+        $this->creditCard = new AuthorizeNetCreditCard;
+        $this->bankAccount = new AuthorizeNetBankAccount;
+    }
+}
+
+/**
+ * A class that contains all fields for a CIM Transaction.
+ *
+ * @package    AuthorizeNet
+ * @subpackage AuthorizeNetCIM
+ */
+class AuthorizeNetTransaction
+{
+    public $amount;
+    public $tax;
+    public $shipping;
+    public $duty;
+    public $lineItems = array();
+    public $customerProfileId;
+    public $customerPaymentProfileId;
+    public $customerShippingAddressId;
+    public $creditCardNumberMasked;
+    public $bankRoutingNumberMasked;
+    public $bankAccountNumberMasked;
+    public $order;
+    public $taxExempt;
+    public $recurringBilling;
+    public $cardCode;
+    public $splitTenderId;
+    public $approvalCode;
+    public $transId;
+    
+    public function __construct()
+    {
+        $this->tax = (object)array();
+        $this->tax->amount = "";
+        $this->tax->name = "";
+        $this->tax->description = "";
+        
+        $this->shipping = (object)array();
+        $this->shipping->amount = "";
+        $this->shipping->name = "";
+        $this->shipping->description = "";
+        
+        $this->duty = (object)array();
+        $this->duty->amount = "";
+        $this->duty->name = "";
+        $this->duty->description = "";
+        
+        // line items
+        
+        $this->order = (object)array();
+        $this->order->invoiceNumber = "";
+        $this->order->description = "";
+        $this->order->purchaseOrderNumber = "";
+    }
+    
+}
+
+/**
+ * A class that contains all fields for a CIM Transaction Line Item.
+ *
+ * @package    AuthorizeNet
+ * @subpackage AuthorizeNetCIM
+ */
+class AuthorizeNetLineItem
+{
+    public $itemId;
+    public $name;
+    public $description;
+    public $quantity;
+    public $unitPrice;
+    public $taxable;
+
+}
+
+/**
+ * A class that contains all fields for a CIM Credit Card.
+ *
+ * @package    AuthorizeNet
+ * @subpackage AuthorizeNetCIM
+ */
+class AuthorizeNetCreditCard
+{
+    public $cardNumber;
+    public $expirationDate;
+    public $cardCode;
+}
+
+/**
+ * A class that contains all fields for a CIM Bank Account.
+ *
+ * @package    AuthorizeNet
+ * @subpackage AuthorizeNetCIM
+ */
+class AuthorizeNetBankAccount
+{
+    public $accountType;
+    public $routingNumber;
+    public $accountNumber;
+    public $nameOnAccount;
+    public $echeckType;
+    public $bankName;
+}
+
+/**
+ * A class that contains all fields for an AuthorizeNet ARB Subscription.
+ *
+ * @package    AuthorizeNet
+ * @subpackage AuthorizeNetARB
+ */
+class AuthorizeNet_Subscription
+{
+
+    public $name;
+    public $intervalLength;
+    public $intervalUnit;
+    public $startDate;
+    public $totalOccurrences;
+    public $trialOccurrences;
+    public $amount;
+    public $trialAmount;
+    public $creditCardCardNumber;
+    public $creditCardExpirationDate;
+    public $creditCardCardCode;
+    public $bankAccountAccountType;
+    public $bankAccountRoutingNumber;
+    public $bankAccountAccountNumber;
+    public $bankAccountNameOnAccount;
+    public $bankAccountEcheckType;
+    public $bankAccountBankName;
+    public $orderInvoiceNumber;
+    public $orderDescription;
+    public $customerId;
+    public $customerEmail;
+    public $customerPhoneNumber;
+    public $customerFaxNumber;
+    public $billToFirstName;
+    public $billToLastName;
+    public $billToCompany;
+    public $billToAddress;
+    public $billToCity;
+    public $billToState;
+    public $billToZip;
+    public $billToCountry;
+    public $shipToFirstName;
+    public $shipToLastName;
+    public $shipToCompany;
+    public $shipToAddress;
+    public $shipToCity;
+    public $shipToState;
+    public $shipToZip;
+    public $shipToCountry;
+    
+    public function getXml()
+    {
+        $xml = "<subscription>
+    <name>{$this->name}</name>
+    <paymentSchedule>
+        <interval>
+            <length>{$this->intervalLength}</length>
+            <unit>{$this->intervalUnit}</unit>
+        </interval>
+        <startDate>{$this->startDate}</startDate>
+        <totalOccurrences>{$this->totalOccurrences}</totalOccurrences>
+        <trialOccurrences>{$this->trialOccurrences}</trialOccurrences>
+    </paymentSchedule>
+    <amount>{$this->amount}</amount>
+    <trialAmount>{$this->trialAmount}</trialAmount>
+    <payment>
+        <creditCard>
+            <cardNumber>{$this->creditCardCardNumber}</cardNumber>
+            <expirationDate>{$this->creditCardExpirationDate}</expirationDate>
+            <cardCode>{$this->creditCardCardCode}</cardCode>
+        </creditCard>
+        <bankAccount>
+            <accountType>{$this->bankAccountAccountType}</accountType>
+            <routingNumber>{$this->bankAccountRoutingNumber}</routingNumber>
+            <accountNumber>{$this->bankAccountAccountNumber}</accountNumber>
+            <nameOnAccount>{$this->bankAccountNameOnAccount}</nameOnAccount>
+            <echeckType>{$this->bankAccountEcheckType}</echeckType>
+            <bankName>{$this->bankAccountBankName}</bankName>
+        </bankAccount>
+    </payment>
+    <order>
+        <invoiceNumber>{$this->orderInvoiceNumber}</invoiceNumber>
+        <description>{$this->orderDescription}</description>
+    </order>
+    <customer>
+        <id>{$this->customerId}</id>
+        <email>{$this->customerEmail}</email>
+        <phoneNumber>{$this->customerPhoneNumber}</phoneNumber>
+        <faxNumber>{$this->customerFaxNumber}</faxNumber>
+    </customer>
+    <billTo>
+        <firstName>{$this->billToFirstName}</firstName>
+        <lastName>{$this->billToLastName}</lastName>
+        <company>{$this->billToCompany}</company>
+        <address>{$this->billToAddress}</address>
+        <city>{$this->billToCity}</city>
+        <state>{$this->billToState}</state>
+        <zip>{$this->billToZip}</zip>
+        <country>{$this->billToCountry}</country>
+    </billTo>
+    <shipTo>
+        <firstName>{$this->shipToFirstName}</firstName>
+        <lastName>{$this->shipToLastName}</lastName>
+        <company>{$this->shipToCompany}</company>
+        <address>{$this->shipToAddress}</address>
+        <city>{$this->shipToCity}</city>
+        <state>{$this->shipToState}</state>
+        <zip>{$this->shipToZip}</zip>
+        <country>{$this->shipToCountry}</country>
+    </shipTo>
+</subscription>";
+        
+        $xml_clean = "";
+        // Remove any blank child elements
+        foreach (preg_split("/(\r?\n)/", $xml) as $key => $line) {
+            if (!preg_match('/><\//', $line)) {
+                $xml_clean .= $line . "\n";
+            }
+        }
+        
+        // Remove any blank parent elements
+        $element_removed = 1;
+        // Recursively repeat if a change is made
+        while ($element_removed) {
+            $element_removed = 0;
+            if (preg_match('/<[a-z]+>[\r?\n]+\s*<\/[a-z]+>/i', $xml_clean)) {
+                $xml_clean = preg_replace('/<[a-z]+>[\r?\n]+\s*<\/[a-z]+>/i', '', $xml_clean);
+                $element_removed = 1;
+            }
+        }
+        
+        // Remove any blank lines
+        // $xml_clean = preg_replace('/\r\n[\s]+\r\n/','',$xml_clean);
+        return $xml_clean;
+    }
+}
+
diff --git a/anet_php_sdk/lib/shared/AuthorizeNetXMLResponse.php b/anet_php_sdk/lib/shared/AuthorizeNetXMLResponse.php
new file mode 100755 (executable)
index 0000000..ede7854
--- /dev/null
@@ -0,0 +1,128 @@
+<?php
+/**
+ * Base class for the AuthorizeNet ARB & CIM Responses.
+ *
+ * @package    AuthorizeNet
+ * @subpackage AuthorizeNetXML
+ */
+
+/**
+ * Base class for the AuthorizeNet ARB & CIM Responses.
+ *
+ * @package    AuthorizeNet
+ * @subpackage AuthorizeNetXML
+ */
+class AuthorizeNetXMLResponse
+{
+
+    public $xml; // Holds a SimpleXML Element with response.
+
+    /**
+     * Constructor. Parses the AuthorizeNet response string.
+     *
+     * @param string $response The response from the AuthNet server.
+     */
+    public function __construct($response)
+    {
+        $this->response = $response;
+        if ($response) {
+            $this->xml = @simplexml_load_string($response);
+            
+            // Remove namespaces for use with XPath.
+            $this->xpath_xml = @simplexml_load_string(preg_replace('/ xmlns:xsi[^>]+/','',$response));
+        }
+    }
+    
+    /**
+     * Was the transaction successful?
+     *
+     * @return bool
+     */
+    public function isOk()
+    {
+        return ($this->getResultCode() == "Ok");
+    }
+    
+    /**
+     * Run an xpath query on the cleaned XML response
+     *
+     * @param  string $path
+     * @return array  Returns an array of SimpleXMLElement objects or FALSE in case of an error.
+     */
+    public function xpath($path)
+    {
+        return $this->xpath_xml->xpath($path);
+    }
+    
+    /**
+     * Was there an error?
+     *
+     * @return bool
+     */
+    public function isError()
+    {
+        return ($this->getResultCode() == "Error");
+    }
+
+    /**
+     * @return string
+     */    
+    public function getErrorMessage()
+    {
+        return "Error: {$this->getResultCode()} 
+        Message: {$this->getMessageText()}
+        {$this->getMessageCode()}";    
+    }
+    
+    /**
+     * @return string
+     */
+    public function getRefID()
+    {
+        return $this->_getElementContents("refId");
+    }
+    
+    /**
+     * @return string
+     */
+    public function getResultCode()
+    {
+        return $this->_getElementContents("resultCode");
+    }
+    
+    /**
+     * @return string
+     */
+    public function getMessageCode()
+    {
+        return $this->_getElementContents("code");
+    }
+    
+    /**
+     * @return string
+     */
+    public function getMessageText()
+    {
+        return $this->_getElementContents("text");
+    }
+    
+    /**
+     * Grabs the contents of a unique element.
+     *
+     * @param  string
+     * @return string
+     */
+    protected function _getElementContents($elementName) 
+    {
+        $start = "<$elementName>";
+        $end = "</$elementName>";
+        if (strpos($this->response,$start) === false || strpos($this->response,$end) === false) {
+            return false;
+        } else {
+            $start_position = strpos($this->response, $start)+strlen($start);
+            $end_position = strpos($this->response, $end);
+            return substr($this->response, $start_position, $end_position-$start_position);
+        }
+    }
+
+}
\ No newline at end of file
diff --git a/anet_php_sdk/lib/ssl/cert.pem b/anet_php_sdk/lib/ssl/cert.pem
new file mode 100755 (executable)
index 0000000..b59fbb0
--- /dev/null
@@ -0,0 +1,253 @@
+-----BEGIN CERTIFICATE-----
+MIIEYTCCA0mgAwIBAgIESyDOMjANBgkqhkiG9w0BAQUFADCBsTELMAkGA1UEBhMC
+VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0
+Lm5ldC9ycGEgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW
+KGMpIDIwMDkgRW50cnVzdCwgSW5jLjEuMCwGA1UEAxMlRW50cnVzdCBDZXJ0aWZp
+Y2F0aW9uIEF1dGhvcml0eSAtIEwxQzAeFw0xMDAzMzExNzA0MDBaFw0xMjAzMzAx
+NzMzNTdaMIGVMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQG
+A1UEBxMNTW91bnRhaW4gVmlldzEgMB4GA1UEChMXQ3liZXJzb3VyY2UgQ29ycG9y
+YXRpb24xHTAbBgNVBAsTFFBsYXRpbnVtU1NMIFdpbGRjYXJkMRgwFgYDVQQDFA8q
+LmF1dGhvcml6ZS5uZXQwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOSIsv0X
+OFMm2cV74o2jSF7zkNGeLHkPsI10xsFXTG1xqjzq4eImAReA3eIp1oHvLmji4kea
+rmTbxoURYdsRsWkx61b2vDrKJwjGU+hPvTYna0M4I9fpDgmp7e/Q5TJBWqI7BX9N
+2ccL95/2rV0g021JJhkqYMDFERTYRqkLFLfNAgMBAAGjggEdMIIBGTALBgNVHQ8E
+BAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwMwYDVR0fBCwwKjAooCagJIYiaHR0
+cDovL2NybC5lbnRydXN0Lm5ldC9sZXZlbDFjLmNybDAzBggrBgEFBQcBAQQnMCUw
+IwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLmVudHJ1c3QubmV0MEAGA1UdIAQ5MDcw
+NQYJKoZIhvZ9B0sCMCgwJgYIKwYBBQUHAgEWGmh0dHA6Ly93d3cuZW50cnVzdC5u
+ZXQvcnBhMB8GA1UdIwQYMBaAFB7xq4kG+EkPATN37hR67hl8kyhNMB0GA1UdDgQW
+BBQ/gzreJ5piCG2MLGy5XOBCVB9iTTAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBBQUA
+A4IBAQCK6J1LZ3kGde6kzS4aGnPq5WUnJTdwB/ASIB15OOdK20Mdi7D0zF0Aevew
++f73shY3f7eozVmh8aCb7uDRojrBgLGdtj0vcRiqUm+e1LKf9p0XPdFMLGzh2E2W
++eLhBTMEYOgGPQDY/sf2MEKHRIgobccFI3LUUXylncY6+UKtUWJQ114duoZH0+o+
+RIlSRgGsGNYkWJ9+jeI6acvG15ahIzIfUx8m0vQp0Nri9/3p/HOezQjNdN0knTlR
+pRbXZJ65zOig2wjt4an0OfYnOcqpJ/2yslCv0/jKwumHeygVt68l3J4rH7nUwUzs
+B+JUkDiJgBD/+BFADuJkTJLMcn6t
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIE8jCCA9qgAwIBAgIEOGPp/DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML
+RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp
+bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5
+IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp
+ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw0wOTEyMTAyMDQzNTRaFw0xOTEy
+MTAyMTEzNTRaMIGxMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNRW50cnVzdCwgSW5j
+LjE5MDcGA1UECxMwd3d3LmVudHJ1c3QubmV0L3JwYSBpcyBpbmNvcnBvcmF0ZWQg
+YnkgcmVmZXJlbmNlMR8wHQYDVQQLExYoYykgMjAwOSBFbnRydXN0LCBJbmMuMS4w
+LAYDVQQDEyVFbnRydXN0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gTDFDMIIB
+IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAl6MtPJ7eBdoTwhGNnY7jf8dL
+flqfs/9iq3PIKGu6EGSChxPNVxj/KM7A5g4GkVApg9Hywyrb2NtOBMwA64u2lty8
+qvpSdwTB2xnkrpz9PIsD7028GgNl+cGxP3KG8jiqGa4QiHgo2nXDPQKCApy5wWV3
+diRMmPdtMTj72/7bNwJ2oRiXpszeIAlJNiRpQvbkN2LxWW2pPO00nKOO29w61/cK
+b+8u2NWTWnrtCElo4kHjWpDBhlX8UUOd4LLEZ7TLMjEl8FSfS9Fv29Td/K9ebHiQ
+ld7KOki5eTybGdZ1BaD5iNfB6KUJ5BoV3IcjqrJ1jGMlh9j4PabCzGb/pWZoVQID
+AQABo4IBCzCCAQcwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wMwYI
+KwYBBQUHAQEEJzAlMCMGCCsGAQUFBzABhhdodHRwOi8vb2NzcC5lbnRydXN0Lm5l
+dDAyBgNVHR8EKzApMCegJaAjhiFodHRwOi8vY3JsLmVudHJ1c3QubmV0LzIwNDhj
+YS5jcmwwOwYDVR0gBDQwMjAwBgRVHSAAMCgwJgYIKwYBBQUHAgEWGmh0dHA6Ly93
+d3cuZW50cnVzdC5uZXQvcnBhMB0GA1UdDgQWBBQe8auJBvhJDwEzd+4Ueu4ZfJMo
+TTAfBgNVHSMEGDAWgBRV5IHREYC+2Im5CKMx+aEkCRa5cDANBgkqhkiG9w0BAQUF
+AAOCAQEAB/ZfgoR/gEDHkDRGQiQDzi+ruoOeJXMN7awFacaH7aNc8lfBsUl2mk3y
+P93kDv4LPrmY2TKVHTL0Ae6cyMjlP+BTdmL83attPZSQ8sCzPJgnNl4olyL8G0DT
+Kw2ttVdt3w/jS+9zAhBl+hvQrDHV4w/oujIwg+5K0L/fIpB6vuw6G8RJBB3xroB3
+PEII26c7KKaAAQPmOaPr34BZG/MsvtxyRHmgbAelbU1EjkJoypR8Lja6hZ7NqsRe
+PFS+/i/qaZ0cHimbltjI/lGQ8SSmkAaz8Cmi/3gud1xFIdlEADHzvjJP9QoyDfz8
+uhZ2VrLWSJLyi6Y+t6xcaeoLP2ZFuQ==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEnzCCBAigAwIBAgIERp6RGjANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC
+VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u
+ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc
+KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u
+ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wOTAz
+MjMxNTE4MjdaFw0xOTAzMjMxNTQ4MjdaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5l
+dDFAMD4GA1UECxQ3d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkg
+cmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5u
+ZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBB
+dXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
+rU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL
+Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3ed
+Vc3kw37XamSrhRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4
+LeksyZB2ZnuU4q941mVTXTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5
+CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N
+328mz8MYIWJmQ3DW1cAH4QIDAQABo4IBJzCCASMwDgYDVR0PAQH/BAQDAgEGMA8G
+A1UdEwEB/wQFMAMBAf8wMwYIKwYBBQUHAQEEJzAlMCMGCCsGAQUFBzABhhdodHRw
+Oi8vb2NzcC5lbnRydXN0Lm5ldDAzBgNVHR8ELDAqMCigJqAkhiJodHRwOi8vY3Js
+LmVudHJ1c3QubmV0L3NlcnZlcjEuY3JsMDsGA1UdIAQ0MDIwMAYEVR0gADAoMCYG
+CCsGAQUFBwIBFhpodHRwOi8vd3d3LmVudHJ1c3QubmV0L0NQUzAdBgNVHQ4EFgQU
+VeSB0RGAvtiJuQijMfmhJAkWuXAwHwYDVR0jBBgwFoAU8BdiE1U9s/8KAGv7UISX
+8+1i0BowGQYJKoZIhvZ9B0EABAwwChsEVjcuMQMCAIEwDQYJKoZIhvcNAQEFBQAD
+gYEAj2WiMI4mq4rsNRaY6QPwjRdfvExsAvZ0UuDCxh/O8qYRDKixDk2Ei3E277M1
+RfPB+JbFi1WkzGuDFiAy2r77r5u3n+F+hJ+ePFCnP1zCvouGuAiS7vhCKw0T43aF
+SApKv9ClOwqwVLht4wj5NI0LjosSzBcaM4eVyJ4K3FBTF3s=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC
+VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u
+ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc
+KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u
+ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05OTA1
+MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIGA1UE
+ChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5j
+b3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF
+bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUg
+U2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUA
+A4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQaO2f55M28Qpku0f1BBc/
+I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5gXpa0zf3
+wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OC
+AdcwggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHb
+oIHYpIHVMIHSMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5
+BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p
+dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVk
+MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp
+b24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu
+dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0
+MFqBDzIwMTkwNTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8Bdi
+E1U9s/8KAGv7UISX8+1i0BowHQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAa
+MAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZI
+hvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyNEwr75Ji174z4xRAN
+95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9n9cd
+2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDSTCCArKgAwIBAgIQfmO9EP9/fYY45sRzhqgfGzANBgkqhkiG9w0BAQUFADBM
+MQswCQYDVQQGEwJaQTElMCMGA1UEChMcVGhhd3RlIENvbnN1bHRpbmcgKFB0eSkg
+THRkLjEWMBQGA1UEAxMNVGhhd3RlIFNHQyBDQTAeFw0wOTA0MDkwMDAwMDBaFw0x
+MTA0MTEyMzU5NTlaMIGPMQswCQYDVQQGEwJVUzENMAsGA1UECBMEVXRhaDEWMBQG
+A1UEBxMNQW1lcmljYW4gRm9yazEcMBoGA1UEChMTQXV0aG9yaXplLk5ldCBDb3Jw
+LjEcMBoGA1UECxMTQVVUSE9SSVpFLk5FVCBDT1JQLjEdMBsGA1UEAxMUc2VjdXJl
+LmF1dGhvcml6ZS5uZXQwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAN0dh86L
+70MHbun7wTNGV0pNXsnebt3z9mCpndLUiBp5J/b57hQO5/HvevkhkDyCrky/Dn7y
+4SEJh6RHYuP4ZBk30DS8iH5dWCRHqSQgpMKhUl/+D7KHbVqgPzOpOR44TiSa1P5m
+Fv0qicvRR3iwSK/6ESywNvEJk1iiYPnpnnlvAgMBAAGjgecwgeQwDAYDVR0TAQH/
+BAIwADA2BgNVHR8ELzAtMCugKaAnhiVodHRwOi8vY3JsLnRoYXd0ZS5jb20vVGhh
+d3RlU0dDQ0EuY3JsMCgGA1UdJQQhMB8GCCsGAQUFBwMBBggrBgEFBQcDAgYJYIZI
+AYb4QgQBMHIGCCsGAQUFBwEBBGYwZDAiBggrBgEFBQcwAYYWaHR0cDovL29jc3Au
+dGhhd3RlLmNvbTA+BggrBgEFBQcwAoYyaHR0cDovL3d3dy50aGF3dGUuY29tL3Jl
+cG9zaXRvcnkvVGhhd3RlX1NHQ19DQS5jcnQwDQYJKoZIhvcNAQEFBQADgYEARa0l
+PaGn4TOw3KOMVu8eiSdho4Nmal6u9AWE3rWHDakO2/a1AkZTM2/Wpt6KI3fp6WWK
+LSsa9wLoVYSJ6pI7bmiJTvyx42yPP0PZXQSz05PHgTEGyW2jAn4N1hFvbTj28mZT
+jv2jd12xgrmX34nulLdydNaM8J7CauhMvqwwvZ0=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDIzCCAoygAwIBAgIEMAAAAjANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJV
+UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xNzA1BgNVBAsTLkNsYXNzIDMgUHVi
+bGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNTEzMDAw
+MDAwWhcNMTQwNTEyMjM1OTU5WjBMMQswCQYDVQQGEwJaQTElMCMGA1UEChMcVGhh
+d3RlIENvbnN1bHRpbmcgKFB0eSkgTHRkLjEWMBQGA1UEAxMNVGhhd3RlIFNHQyBD
+QTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA1NNn0I0Vf67NMf59HZGhPwtx
+PKzMyGT7Y/wySweUvW+Aui/hBJPAM/wJMyPpC3QrccQDxtLN4i/1CWPN/0ilAL/g
+5/OIty0y3pg25gqtAHvEZEo7hHUD8nCSfQ5i9SGraTaEMXWQ+L/HbIgbBpV8yeWo
+3nWhLHpo39XKHIdYYBkCAwEAAaOB/jCB+zASBgNVHRMBAf8ECDAGAQH/AgEAMAsG
+A1UdDwQEAwIBBjARBglghkgBhvhCAQEEBAMCAQYwKAYDVR0RBCEwH6QdMBsxGTAX
+BgNVBAMTEFByaXZhdGVMYWJlbDMtMTUwMQYDVR0fBCowKDAmoCSgIoYgaHR0cDov
+L2NybC52ZXJpc2lnbi5jb20vcGNhMy5jcmwwMgYIKwYBBQUHAQEEJjAkMCIGCCsG
+AQUFBzABhhZodHRwOi8vb2NzcC50aGF3dGUuY29tMDQGA1UdJQQtMCsGCCsGAQUF
+BwMBBggrBgEFBQcDAgYJYIZIAYb4QgQBBgpghkgBhvhFAQgBMA0GCSqGSIb3DQEB
+BQUAA4GBAFWsY+reod3SkF+fC852vhNRj5PZBSvIG3dLrWlQoe7e3P3bB+noOZTc
+q3J5Lwa/q4FwxKjt6lM07e8eU9kGx1Yr0Vz00YqOtCuxN5BICEIlxT6Ky3/rbwTR
+bcV0oveifHtgPHfNDs5IAn8BL7abN+AqKjbc1YXWrOU/VG+WHgWv
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkG
+A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
+cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
+MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
+BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt
+YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
+ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE
+BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is
+I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G
+CSqGSIb3DQEBAgUAA4GBALtMEivPLCYATxQT3ab7/AoRhIzzKBxnki98tsX63/Do
+lbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59AhWM1pF+NEHJwZRDmJXNyc
+AA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2OmufTqj/ZA1k
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIFCjCCA/KgAwIBAgIERWua3DANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMC
+VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0
+Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW
+KGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENl
+cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA5MTIxMDIwNTU0M1oXDTE5MTIxMDIx
+MjU0M1owgbExCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMTkw
+NwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvcnBhIGlzIGluY29ycG9yYXRlZCBieSBy
+ZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAyMDA5IEVudHJ1c3QsIEluYy4xLjAsBgNV
+BAMTJUVudHJ1c3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBMMUUwggEiMA0G
+CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC2WwRUd90OJGbcKqHbgMxdx1/9UhZY
+2l+UBqm4trljDEcgguzHlU6LuHdSaj21h6nW4cx05abIwNRWT40u1gg+DExDPvBB
+k15G7znn2WUqDHZQJ71bDTMzB+D3oqmc4REzrWb80ix6qqNzFr6ThXUP1zeM+iO3
+ZPjjTG7tswW94jbbfN52RNqCcna2bv+UodCG9xDNSlqLsHWMZlKATkhMSYOmQNd3
+gRNNXnJ+SEYiqg/iPmWUOOFycf5KcQm6NX9ViT2B1bgoARB3NloQhdK9YIQrSWGU
+DN5MQGoqxHlghCSCMmlKmEviVhC6A0VRINPP2o5UG0W2erqXmlrYxtFfAgMBAAGj
+ggEnMIIBIzAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAzBggrBgEF
+BQcBAQQnMCUwIwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLmVudHJ1c3QubmV0MDMG
+A1UdHwQsMCowKKAmoCSGImh0dHA6Ly9jcmwuZW50cnVzdC5uZXQvcm9vdGNhMS5j
+cmwwOwYDVR0gBDQwMjAwBgRVHSAAMCgwJgYIKwYBBQUHAgEWGmh0dHA6Ly93d3cu
+ZW50cnVzdC5uZXQvQ1BTMB0GA1UdDgQWBBRbQYqyxEPBvb/IVEFVneCWrf+5oTAf
+BgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAZBgkqhkiG9n0HQQAEDDAK
+GwRWNy4xAwIAgTANBgkqhkiG9w0BAQUFAAOCAQEAsjvSnsG8O0i23NhaGGZTw701
+DUhCLDUB2BCi4uONLLqmAxHta7FJy1/N7GCzutQC62FPTn7435BfTtOQAhxS2hIA
+L5tx2gQSFMGQgy4o0hBAEYsmLeuZVVRvYI7Fgx3Aoz/VihQ5ahsN79NadznPabS9
+aW9PeNOhhqObt9f7qi3w+iah+WcsiEulNNWD+0zxW3AiZhubWU9NzpjbQaT+GqPr
+OOb58TkCnUa2ycKePoK2H5/KSqixBl8QNDv92nusM07tprdL85H1nAsRktwTasjV
+8TttlmsB5CNMscHg0hIhnynUrZU9pvfnMsV1twtX2KT5wOzsMjMMTa7oCNXsqg==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEmzCCBASgAwIBAgIEQoctTDANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC
+VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u
+ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc
+KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u
+ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNzAx
+MDUxOTIwMzlaFw0xNzAxMDUxOTUwMzlaMIGwMQswCQYDVQQGEwJVUzEWMBQGA1UE
+ChMNRW50cnVzdCwgSW5jLjE5MDcGA1UECxMwd3d3LmVudHJ1c3QubmV0L0NQUyBp
+cyBpbmNvcnBvcmF0ZWQgYnkgcmVmZXJlbmNlMR8wHQYDVQQLExYoYykgMjAwNiBF
+bnRydXN0LCBJbmMuMS0wKwYDVQQDEyRFbnRydXN0IFJvb3QgQ2VydGlmaWNhdGlv
+biBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC2lbZD
+QvrGbSpvSN+UTDlXBe7DeRFBaDbt7P6aAY+hOCj89xBGZi5NHhqxGk7G0cCViLDJ
+/zGLMwPbt4N7PiCEXu2yViin+OC5QHE3xctHDpcqaMAilWIV20fZ9dAr/4JLya0+
+3kzbkIBQPwmKhADsMAo9GM37/SpZmiOVFyxFnh9uQ3ltDFyY/kinxSNHXF79buce
+tPZoRdGGg1uiio2x4ymA/iVxiK2+vI+sUpZLqlGN5BMxGehOTZ/brLNq1bw5VHHK
+enp/kN19HYDZgbtZJsIR/uaT4veA5GX7NDcOKYBwTa84hi6ef1evnheu6xzLKCFf
+thzY56IEIvnT2tjLAgMBAAGjggEnMIIBIzAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0T
+AQH/BAUwAwEB/zAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUHMAGGF2h0dHA6Ly9v
+Y3NwLmVudHJ1c3QubmV0MDMGA1UdHwQsMCowKKAmoCSGImh0dHA6Ly9jcmwuZW50
+cnVzdC5uZXQvc2VydmVyMS5jcmwwOwYDVR0gBDQwMjAwBgRVHSAAMCgwJgYIKwYB
+BQUHAgEWGmh0dHA6Ly93d3cuZW50cnVzdC5uZXQvQ1BTMB0GA1UdDgQWBBRokORn
+pKZTgMeGZqTx90tD+4S9bTAfBgNVHSMEGDAWgBTwF2ITVT2z/woAa/tQhJfz7WLQ
+GjAZBgkqhkiG9n0HQQAEDDAKGwRWNy4xAwIAgTANBgkqhkiG9w0BAQUFAAOBgQAM
+sIR8LRP+mj2/GAWVPSBIoxaBhxVQFaSIjZ9g1Dpv6y1uOoakqdLBnYl6CBykLbNH
+jg9kSm9mA4M/TzSUNqopbYuNAiIrjM13pXCVhpHRtr9SvjNqa5n5b+ESvgTLM7/1
+EhpORLpbFk0wufO0dM5u8mhWWN3Yof1UBfQjkYXJ+Q==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIFdDCCBFygAwIBAgIETCA3bTANBgkqhkiG9w0BAQUFADCBsTELMAkGA1UE
+BhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5l
+bnRydXN0Lm5ldC9ycGEgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEf
+MB0GA1UECxMWKGMpIDIwMDkgRW50cnVzdCwgSW5jLjEuMCwGA1UEAxMlRW50
+cnVzdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEwxRTAeFw0xMTAzMjMx
+NjQ4MzhaFw0xMzAzMjIyMzE4MDFaMIH4MQswCQYDVQQGEwJVUzETMBEGA1UE
+CBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzETMBEGCysG
+AQQBgjc8AgEDEwJVUzEZMBcGCysGAQQBgjc8AgECEwhEZWxhd2FyZTEgMB4G
+A1UEChMXQ3liZXJzb3VyY2UgQ29ycG9yYXRpb24xHTAbBgNVBA8TFFByaXZh
+dGUgT3JnYW5pemF0aW9uMRwwGgYDVQQLExNBVVRIT1JJWkUuTkVUIENPUlAu
+MS0wDgYDVQQFEwcyODM4OTIxMBsGA1UEAxMUc2VjdXJlLmF1dGhvcml6ZS5u
+ZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvrwbLk7kDJnja
+13i9lcXhYlHIwCTKHegPRuAkGDO6hNH0yNVv10kQSWjKhZ6KnoEA2p0F92FN
+HwFTUfm0QGlaXW9kPc8nUi94hgY05iYwh96FHNdibqeO2r73GGol/RJkUO69
+ekqP1f+ABi7qWguL29cadX1DmOVQSkIeWc0xn9IVgS8dxnDzKwJ+41M5gLfM
+YAJQ/FOwjOpt0j/Kg+38iHZ71FM7ehceYFggn+7y0ZcAcDUx4l6sKBuqFXq7
+viMqP2/Np0TpzmJMi2X8Wy0FDYoilHb9qBJWkl2AYxfjLTTSu27OMAJYyvEM
+RmjOkLn7hQBPoSE6u3UKevtF2WPtAgMBAAGjggFJMIIBRTALBgNVHQ8EBAMC
+BaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMDMGCCsGAQUFBwEB
+BCcwJTAjBggrBgEFBQcwAYYXaHR0cDovL29jc3AuZW50cnVzdC5uZXQwMwYD
+VR0fBCwwKjAooCagJIYiaHR0cDovL2NybC5lbnRydXN0Lm5ldC9sZXZlbDFl
+LmNybDBBBgNVHSAEOjA4MDYGCmCGSAGG+mwKAQIwKDAmBggrBgEFBQcCARYa
+aHR0cDovL3d3dy5lbnRydXN0Lm5ldC9ycGEwHwYDVR0RBBgwFoIUc2VjdXJl
+LmF1dGhvcml6ZS5uZXQwHwYDVR0jBBgwFoAUW0GKssRDwb2/yFRBVZ3glq3/
+uaEwHQYDVR0OBBYEFGZazQ8qcWqAiT+oFpV/D7WTbcGlMAkGA1UdEwQCMAAw
+DQYJKoZIhvcNAQEFBQADggEBAEG1lvV2JQXDXRmEXkDp5qpF6uj1eNfffViE
+QR6XCLPWIuaEcgnieTfFzRPEYbxzUY9jCqM62U37hUTDdMKjZas7fwaZ8RjE
+wQASNPrIsHFsXEb0Nbz58g3cY00teCH3qQ9N9uW3TC+OXiSz9aSBxYkHD/63
+2D1rzaZLVHXUoReMMbjwf69zLDN7qsy6VDksHMVjqQugZF0ZCLFPPH5jfdAx
+sOtocx7eyUovzO387ve8UMTdw6Anr9Ai7iVaYf4MpMqcuaHVet3QeE97Koy1
+mT3q9FmUGbXM+nCqSs/TQ4jSqOo4zqDnkK/cOgbzjsuJJZ/rCPSxaKvz3b/n
+wMWH7kM=
+-----END CERTIFICATE-----
\ No newline at end of file
diff --git a/anet_php_sdk/tests/AuthorizeNetAIM_Test.php b/anet_php_sdk/tests/AuthorizeNetAIM_Test.php
new file mode 100755 (executable)
index 0000000..573327d
--- /dev/null
@@ -0,0 +1,888 @@
+<?php
+
+require_once 'AuthorizeNet_Test_Config.php';
+
+class AuthorizeNetAIM_Sandbox_Test extends PHPUnit_Framework_TestCase
+{
+    
+    public function testAuthCapture()
+    {
+        $sale = new AuthorizeNetAIM;
+        $sale->setFields(
+            array(
+            'amount' => rand(1, 1000),
+            'card_num' => '4111111111111111',
+            'exp_date' => '0415'
+            )
+        );
+        $response = $sale->authorizeAndCapture();
+        $this->assertTrue($response->approved);
+    }
+    
+    public function testAuthCaptureSingleDigitMonth()
+    {
+        $sale = new AuthorizeNetAIM;
+        $sale->setFields(
+            array(
+            'amount' => rand(1, 1000),
+            'card_num' => '4111111111111111',
+            'exp_date' => '415'
+            )
+        );
+        $response = $sale->authorizeAndCapture();
+        $this->assertTrue($response->approved);
+    }
+    
+    public function testAuthCaptureSingleDigitMonthWithSlash()
+    {
+        $sale = new AuthorizeNetAIM;
+        $sale->setFields(
+            array(
+            'amount' => rand(1, 1000),
+            'card_num' => '4111111111111111',
+            'exp_date' => '4/15'
+            )
+        );
+        $response = $sale->authorizeAndCapture();
+        $this->assertTrue($response->approved);
+    }
+    
+    public function testAuthCaptureTwoDigitMonthWithSlash()
+    {
+        $sale = new AuthorizeNetAIM;
+        $sale->setFields(
+            array(
+            'amount' => rand(1, 1000),
+            'card_num' => '4111111111111111',
+            'exp_date' => '04/15'
+            )
+        );
+        $response = $sale->authorizeAndCapture();
+        $this->assertTrue($response->approved);
+    }
+    
+    public function testAuthCaptureAlternate()
+    {
+        $sale = new AuthorizeNetAIM;
+        $sale->amount = rand(1, 10000);
+        $sale->card_num = '6011000000000012';
+        $sale->exp_date = '04/15';
+        $response = $sale->authorizeAndCapture();
+        $this->assertTrue($response->approved);
+    }
+    
+    public function testAuthCaptureShort()
+    {
+        $sale = new AuthorizeNetAIM;
+        $response = $sale->authorizeAndCapture(rand(1, 100), '6011000000000012', '04/16');
+        $this->assertTrue($response->approved);
+    }
+    
+    public function testAuthCapturePartial()
+    {
+        $amount = 3.69;
+        
+        $sale = new AuthorizeNetAIM;
+        $sale->amount = $amount;
+        $sale->card_num = '4222222222222';
+        $sale->zip = "46225";
+        $sale->exp_date = '04/15';
+        $sale->allow_partial_auth = true;
+        $response = $sale->authorizeAndCapture();
+        $this->assertTrue($response->held);
+        $this->assertEquals("1.23", $response->amount);
+        $this->assertEquals($amount, $response->requested_amount);
+        $split_tender_id = $response->split_tender_id;
+        
+        // Pay the balance with a different card
+        $sale = new AuthorizeNetAIM;
+        $sale->amount = $amount - $response->amount;
+        $sale->card_num = '6011000000000012';
+        $sale->exp_date = '04/20';
+        $sale->split_tender_id = $split_tender_id;
+        $sale->allow_partial_auth = true;
+        $response = $sale->authorizeAndCapture();
+        $this->assertTrue($response->approved);
+        
+        
+    }
+    
+    public function testAuthCaptureShortNoVerify()
+    {
+        $sale = new AuthorizeNetAIM;
+        $sale->VERIFY_PEER = false;
+        $response = $sale->authorizeAndCapture(rand(1, 100), '6011000000000012', '04/19');
+        $this->assertTrue($response->approved);
+    }
+    
+    // public function testVisaVerify()
+    // {
+    //     return;  // Remove to enable test
+    //     $verify = new AuthorizeNetAIM;
+    //     $verify->amount = "0.00";
+    //     $verify->card_num = '4012888818888';
+    //     $verify->exp_date = "0517";
+    //     $verify->address = "123 Main Street";
+    //     $verify->zip = "94110";
+    //     $verify->authentication_indicator = "5";
+    //     $verify->cardholder_authentication_value = "512";
+    //     $response = $verify->authorizeOnly();
+    //     $this->assertTrue($response->approved);
+    // }
+    // 
+    // public function testVisaVerifyFail()
+    // {
+    //     return;  // Remove to enable test
+    //     $verify = new AuthorizeNetAIM;
+    //     $verify->amount = "0.00";
+    //     $verify->card_num = '4012888818888';
+    //     $verify->exp_date = "0517";
+    //     $verify->address = "123 Main Street";
+    //     $verify->zip = "94110";
+    //     $verify->authentication_indicator = "5";
+    //     $verify->cardholder_authentication_value = "";
+    //     $response = $verify->authorizeOnly();
+    //     $this->assertTrue($response->declined);
+    // }
+    // 
+    // public function testMastercardVerify()
+    // {
+    //     return;  // Remove to enable test
+    //     $verify = new AuthorizeNetAIM;
+    //     $verify->amount = "0.00";
+    //     $verify->card_num = '5424000000000015';
+    //     $verify->exp_date = "0517";
+    //     $verify->address = "123 Main Street";
+    //     $verify->zip = "94110";
+    //     $verify->authentication_indicator = "2";
+    //     $verify->cardholder_authentication_value = "512";
+    //     $response = $verify->authorizeOnly();
+    //     $this->assertTrue($response->approved);
+    // }
+    // 
+    // public function testMastercardVerifyFail()
+    // {
+    //     return;  // Remove to enable test
+    //     $verify = new AuthorizeNetAIM;
+    //     $verify->amount = "0.00";
+    //     $verify->card_num = '5424000000000015';
+    //     $verify->exp_date = "0517";
+    //     $verify->address = "123 Main Street";
+    //     $verify->zip = "94110";
+    //     $verify->authentication_indicator = "2";
+    //     $verify->cardholder_authentication_value = "";
+    //     $response = $verify->authorizeOnly();
+    //     $this->assertTrue($response->declined);
+    // }
+    
+    public function testAimResponseFields()
+    {
+        
+        $sale = new AuthorizeNetAIM;
+        $sale->card_num           = '4111111111111111';
+        $sale->exp_date           = '04/16';
+        $sale->amount             = $amount = rand(1,99);
+        $sale->description        = $description = "Sale description";
+        $sale->first_name         = $first_name = "Jane";
+        $sale->last_name          = $last_name = "Smith";
+        $sale->company            = $company = "Jane Smith Enterprises Inc.";
+        $sale->address            = $address = "20 Main Street";
+        $sale->city               = $city = "San Francisco";
+        $sale->state              = $state = "CA";
+        $sale->zip                = $zip = "94110";
+        $sale->country            = $country = "US";
+        $sale->phone              = $phone = "415-555-5557";
+        $sale->fax                = $fax = "415-555-5556";
+        $sale->email              = $email = "foo@example.com";
+        $sale->cust_id            = $customer_id = "55";
+        $sale->customer_ip        = "98.5.5.5";
+        $sale->invoice_num        = $invoice_num = "123";
+        $sale->ship_to_first_name = $ship_to_first_name = "John";
+        $sale->ship_to_last_name  = $ship_to_last_name = "Smith";
+        $sale->ship_to_company    = $ship_to_company = "Smith Enterprises Inc.";
+        $sale->ship_to_address    = $ship_to_address = "10 Main Street";
+        $sale->ship_to_city       = $ship_to_city = "San Francisco";
+        $sale->ship_to_state      = $ship_to_state = "CA";
+        $sale->ship_to_zip        = $ship_to_zip_code = "94110";
+        $sale->ship_to_country    = $ship_to_country = "US";
+        $sale->tax                = $tax = "0.00";
+        $sale->freight            = $freight = "Freight<|>ground overnight<|>12.95";
+        $sale->duty               = $duty = "Duty1<|>export<|>15.00";
+        $sale->tax_exempt         = $tax_exempt = "FALSE";
+        $sale->po_num             = $po_num = "12";
+
+        
+        
+        $response = $sale->authorizeAndCapture();
+        $this->assertTrue($response->approved);
+        $this->assertEquals("1", $response->response_code);
+        $this->assertEquals("1", $response->response_subcode);
+        $this->assertEquals("1", $response->response_reason_code);
+        $this->assertEquals("This transaction has been approved.", $response->response_reason_text);
+        $this->assertGreaterThan(1, strlen($response->authorization_code));
+        $this->assertEquals("Y", $response->avs_response);
+        $this->assertGreaterThan(1, strlen($response->transaction_id));
+        $this->assertEquals($invoice_num, $response->invoice_num);
+        $this->assertEquals($description, $response->description);
+        $this->assertEquals($amount, $response->amount);
+        $this->assertEquals("CC", $response->method);
+        $this->assertEquals("auth_capture", $response->transaction_type);
+        $this->assertEquals($customer_id, $response->customer_id);
+        $this->assertEquals($first_name, $response->first_name);
+        $this->assertEquals($last_name, $response->last_name);
+        $this->assertEquals($company, $response->company);
+        $this->assertEquals($address, $response->address);
+        $this->assertEquals($city, $response->city);
+        $this->assertEquals($state, $response->state);
+        $this->assertEquals($zip, $response->zip_code);
+        $this->assertEquals($country, $response->country);
+        $this->assertEquals($phone, $response->phone);
+        $this->assertEquals($fax, $response->fax);
+        $this->assertEquals($email, $response->email_address);
+        $this->assertEquals($ship_to_first_name, $response->ship_to_first_name);
+        $this->assertEquals($ship_to_last_name, $response->ship_to_last_name);
+        $this->assertEquals($ship_to_company, $response->ship_to_company);
+        $this->assertEquals($ship_to_address, $response->ship_to_address);
+        $this->assertEquals($ship_to_city, $response->ship_to_city);
+        $this->assertEquals($ship_to_state, $response->ship_to_state);
+        $this->assertEquals($ship_to_zip_code, $response->ship_to_zip_code);
+        $this->assertEquals($ship_to_country, $response->ship_to_country);
+        $this->assertEquals($tax, $response->tax);
+        $this->assertEquals("15.00", $response->duty);
+        $this->assertEquals("12.95", $response->freight);
+        $this->assertEquals($tax_exempt, $response->tax_exempt);
+        $this->assertEquals($po_num, $response->purchase_order_number);
+        $this->assertGreaterThan(1, strlen($response->md5_hash));
+        $this->assertEquals("", $response->card_code_response);
+        $this->assertEquals("2", $response->cavv_response);
+        $this->assertEquals("XXXX1111", $response->account_number);
+        $this->assertEquals("Visa", $response->card_type);
+        $this->assertEquals("", $response->split_tender_id);
+        $this->assertEquals("", $response->requested_amount);
+        $this->assertEquals("", $response->balance_on_card);
+        
+        
+    }
+    
+    public function testVoid()
+    {
+        // First create transaction to void.
+        $amount = rand(1, 1000);
+        $sale = new AuthorizeNetAIM;
+        $sale->setFields(
+            array(
+            'amount' => $amount,
+            'card_num' => '6011000000000012',
+            'exp_date' => '0415'
+            )
+        );
+        $response = $sale->authorizeAndCapture();
+        $this->assertTrue($response->approved);
+        
+        $void = new AuthorizeNetAIM;
+        $void->setFields(
+            array(
+            'amount' => $amount,
+            'card_num' => '6011000000000012',
+            'trans_id' => $response->transaction_id,
+            )
+        );
+        $void_response = $void->Void();
+        $this->assertTrue($void_response->approved);
+    }
+    
+    public function testVoidShort()
+    {
+        // First create transaction to void.
+        $amount = rand(1, 1000);
+        $card_num = '6011000000000012';
+        $exp_date = '0415';
+        $sale = new AuthorizeNetAIM;
+        $response = $sale->authorizeAndCapture($amount, $card_num, $exp_date);
+        $this->assertTrue($response->approved);
+        
+        $void = new AuthorizeNetAIM;
+        $void_response = $void->void($response->transaction_id);
+        $this->assertTrue($void_response->approved);
+    }
+
+    public function testAuthCaptureECheckSandbox()
+    {
+        $sale = new AuthorizeNetAIM;
+        $sale->setFields(
+            array(
+            'amount' => rand(1, 1000),
+            'method' => 'echeck',
+            'bank_aba_code' => '121042882',
+            'bank_acct_num' => '123456789123',
+            'bank_acct_type' => 'CHECKING',
+            'bank_name' => 'Bank of Earth',
+            'bank_acct_name' => 'Jane Doe',
+            'echeck_type' => 'WEB',
+            )
+        );
+        $response = $sale->authorizeAndCapture();
+        $this->assertEquals("ECHECK", $response->method);
+        $this->assertTrue($response->approved);
+        
+    }
+   
+    public function testAmex()
+    {
+        $sale = new AuthorizeNetAIM;
+        $response = $sale->authorizeAndCapture(rand(1, 100), '370000000000002', '04/16');
+        $this->assertTrue($response->approved);
+    }
+    
+    public function testDiscover()
+    {
+        $sale = new AuthorizeNetAIM;
+        $response = $sale->authorizeAndCapture(rand(1, 100), '6011000000000012', '04/16');
+        $this->assertTrue($response->approved);
+    }
+    
+    public function testVisa()
+    {
+        $sale = new AuthorizeNetAIM;
+        $response = $sale->authorizeAndCapture(rand(1, 100), '4012888818888', '04/16');
+        $this->assertTrue($response->approved);
+    }
+    
+    // public function testJCB()
+    // {
+    //     return; // Remove to enable test
+    //     $sale = new AuthorizeNetAIM;
+    //     $response = $sale->authorizeAndCapture(rand(1, 100), '3088000000000017', '0905');
+    //     $this->assertTrue($response->approved);
+    // }
+    // 
+    // public function testDinersClub()
+    // {
+    //     return; // Remove to enable test
+    //     $sale = new AuthorizeNetAIM;
+    //     $response = $sale->authorizeAndCapture(rand(1, 100), '38000000000006', '0905');
+    //     $this->assertTrue($response->approved);
+    // }
+    
+    public function testAuthOnly()
+    {
+        $auth = new AuthorizeNetAIM;
+        $auth->setFields(
+            array(
+            'amount' => rand(1, 1000),
+            'card_num' => '6011000000000012',
+            'exp_date' => '0415'
+            )
+        );
+        $response = $auth->authorizeOnly();
+        $this->assertTrue($response->approved);
+    }
+    
+    public function testAuthCaptureVoid()
+    {
+        $amount = rand(1, 1000);
+        $auth = new AuthorizeNetAIM;
+        $auth->setFields(
+            array(
+            'amount' => $amount,
+            'card_num' => '6011000000000012',
+            'exp_date' => '0415'
+            )
+        );
+        $auth_response = $auth->authorizeOnly();
+        $this->assertTrue($auth_response->approved);
+        
+        // Now capture.
+        $capture = new AuthorizeNetAIM;
+        $capture->setFields(
+            array(
+                'amount' => $amount,
+                'card_num' => '6011000000000012',
+                'exp_date' => '0415',
+                'trans_id' => $auth_response->transaction_id,
+                )
+        );
+        $capture_response = $capture->priorAuthCapture();
+        $this->assertTrue($capture_response->approved);
+        
+        // Now void
+        $void = new AuthorizeNetAIM;
+        $void->setFields(
+            array(
+            'amount' => $amount,
+            'card_num' => '0012',
+            'trans_id' => $auth_response->transaction_id,
+            )
+        );
+        $void_response = $void->void();
+        $this->assertTrue($void_response->approved);
+    }
+    
+    // public function testCredit()
+    // {
+    //     
+    // }
+    // 
+    // public function testPriorAuthCapture()
+    // {
+    //     
+    // }
+    // 
+    // public function testCaptureOnly()
+    // {
+    //     
+    // }
+    
+    public function testAdvancedAIM()
+    {
+        $auth = new AuthorizeNetAIM;
+        $auth->amount = "45.00";
+        
+        // Use eCheck:
+        $auth->setECheck(
+            '121042882',
+            '123456789123',
+            'CHECKING',
+            'Bank of Earth',
+            'Jane Doe',
+            'WEB'
+        );
+        
+        // Set multiple line items:
+        $auth->addLineItem('item1', 'Golf tees', 'Blue tees', '2', '5.00', 'N');
+        $auth->addLineItem('item2', 'Golf shirt', 'XL', '1', '40.00', 'N');
+        
+        // Set Invoice Number:
+        $auth->invoice_num = time();
+        
+        // Set a Merchant Defined Field:
+        $auth->setCustomField("entrance_source", "Search Engine");
+        
+        // Authorize Only:
+        $response  = $auth->authorizeOnly();
+        $this->assertTrue($response->approved);
+        if ($response->approved) {
+            $auth_code = $response->transaction_id;
+            
+            // Now capture:
+            $capture = new AuthorizeNetAIM;
+            $capture_response = $capture->priorAuthCapture($auth_code);
+            $this->assertTrue($capture_response->approved);
+            
+            // Now void:
+            $void = new AuthorizeNetAIM;
+            $void_response = $void->void($capture_response->transaction_id);
+            $this->assertTrue($void_response->approved);
+        }
+    }
+    
+    public function testAuthCaptureCustomFields()
+    {
+        $sale = new AuthorizeNetAIM;
+        $sale->setFields(
+            array(
+            'amount' => rand(1, 1000),
+            'card_num' => '6011000000000012',
+            'exp_date' => '0415'
+            )
+        );
+        $sale->setCustomField("foo", "bar");
+        $sale->setCustomField("foo2", "bar2");
+        $sale->setCustomField("foo3", "bar3");
+        $sale->setCustomField("foo4", "bar4");
+        $sale->setCustomField("foo5", "bar5");
+        $sale->setCustomField("My_MerchantField6", "My Merchant Value6");
+        $sale->setCustomField("foo7", "bar7");
+        $response = $sale->authorizeAndCapture();
+        $this->assertTrue($response->approved);
+        $this->assertEquals("bar", $response->foo);
+        $this->assertEquals("bar2", $response->foo2);
+    }
+
+    public function testEncapCharacter()
+    {
+        $description = "john doe's present, with comma";
+        $amount = rand(1, 1000);
+        $sale = new AuthorizeNetAIM;
+        $sale->setFields(
+            array(
+            'amount' => $amount,
+            'card_num' => '6011000000000012',
+            'exp_date' => '0415',
+            'encap_char' => '$',
+            'description' => $description,
+            )
+        );
+        $response = $sale->authorizeAndCapture();
+        $this->assertTrue($response->approved);
+        $this->assertEquals($amount, $response->amount);
+        $this->assertEquals($description, $response->description);
+    }
+
+    public function testAuthCaptureSetMultipleCustomFields()
+    {
+        $sale = new AuthorizeNetAIM;
+        $sale->setFields(
+            array(
+            'amount' => rand(1, 1000),
+            'card_num' => '6011000000000012',
+            'exp_date' => '0415'
+            )
+        );
+        $sale->setCustomFields(array("foo" => "bar", "foo2" => "bar2"));
+        $response = $sale->authorizeAndCapture();
+        $this->assertTrue($response->approved);
+        $this->assertEquals("bar", $response->foo);
+        $this->assertEquals("bar2", $response->foo2);
+    }
+    
+    public function testInvalidMerchantCredentials()
+    {
+        $auth = new AuthorizeNetAIM('d', 'd');
+        $response = $auth->AuthorizeOnly();
+        $this->assertTrue($response->error);
+        $this->assertEquals($response->response_subcode, 2);
+        $this->assertEquals($response->response_reason_code, 13);
+    }
+    
+    public function testInvalidCreditCard()
+    {
+        $sale = new AuthorizeNetAIM;
+        $sale->setFields(
+            array(
+            'amount' => rand(1, 1000),
+            'card_num' => '123',
+            'exp_date' => '0415'
+            )
+        );
+        $response = $sale->authorizeAndCapture();
+        $this->assertFalse($response->approved);
+        $this->assertTrue($response->error);
+    }
+
+    public function testError()
+    {
+        $sale = new AuthorizeNetAIM;
+        $sale->unsetField("login");
+        $sale->unsetField("tran_key");
+        $sale->unsetField("delim_data");
+        
+        $sale->unsetField("version");
+        $sale->unsetField("relay_response");
+        
+        $response = $sale->authorizeAndCapture();
+        // An exception should have been thrown.
+        $this->assertFalse($response->approved);
+        $this->assertTrue($response->error);
+        
+    }
+    
+    public function testMultipleLineItems()
+    {
+        $merchant = (object)array();
+        $merchant->login = AUTHORIZENET_API_LOGIN_ID;
+        $merchant->tran_key = AUTHORIZENET_TRANSACTION_KEY;
+        $merchant->allow_partial_auth = "false";
+
+        $creditCard = array(
+            'exp_date' => '02/2012',
+            'card_num' => '6011000000000012',
+            'card_code' => '452',
+            );
+
+        $transaction = array(
+        'amount' => rand(100, 1000),
+        'duplicate_window' => '10',
+        // 'email_customer' => 'true',
+        'footer_email_receipt' => 'thank you for your business!',
+        'header_email_receipt' => 'a copy of your receipt is below',
+        );
+            
+        $order = array(
+            'description' => 'Johns Bday Gift',
+            'invoice_num' => '3123',
+            'line_item' => 'item1<|>golf balls<|><|>2<|>18.95<|>Y',
+            );
+
+        $customer = (object)array();
+        $customer->first_name = "Jane";
+        $customer->last_name = "Smith";
+        $customer->company = "Jane Smith Enterprises Inc.";
+        $customer->address = "20 Main Street";
+        $customer->city = "San Francisco";
+        $customer->state = "CA";
+        $customer->zip = "94110";
+        $customer->country = "US";
+        $customer->phone = "415-555-5557";
+        $customer->fax = "415-555-5556";
+        $customer->email = "foo@example.com";
+        $customer->cust_id = "55";
+        $customer->customer_ip = "98.5.5.5";
+
+        $shipping_info = (object)array();
+        $shipping_info->ship_to_first_name = "John";
+        $shipping_info->ship_to_last_name = "Smith";
+        $shipping_info->ship_to_company = "Smith Enterprises Inc.";
+        $shipping_info->ship_to_address = "10 Main Street";
+        $shipping_info->ship_to_city = "San Francisco";
+        $shipping_info->ship_to_state = "CA";
+        $shipping_info->ship_to_zip = "94110";
+        $shipping_info->ship_to_country = "US";
+        $shipping_info->tax = "CA";
+        $shipping_info->freight = "Freight<|>ground overnight<|>12.95";
+        $shipping_info->duty = "Duty1<|>export<|>15.00";
+        $shipping_info->tax_exempt = "false";
+        $shipping_info->po_num = "12";
+
+        $sale = new AuthorizeNetAIM;
+        $sale->setFields($creditCard);
+        $sale->setFields($shipping_info);
+        $sale->setFields($customer);
+        $sale->setFields($order);
+        $sale->setFields($merchant);
+        $sale->setFields($transaction);
+        
+        $sale->addLineItem('item2', 'golf tees', 'titanium tees', '2', '2.95', 'Y');
+        $sale->addLineItem('item3', 'golf shirt', 'red, large', '2', '3.95', 'Y');
+        
+        $response = $sale->authorizeAndCapture();
+
+        $this->assertTrue($response->approved);
+    }
+    
+    public function testAllFieldsLongMethod()
+    {
+        $merchant = (object)array();
+        $merchant->login = AUTHORIZENET_API_LOGIN_ID;
+        $merchant->tran_key = AUTHORIZENET_TRANSACTION_KEY;
+        $merchant->allow_partial_auth = "false";
+
+        $creditCard = array(
+            'exp_date' => '02/2012',
+            'card_num' => '6011000000000012',
+            'card_code' => '452',
+            );
+
+        $transaction = array(
+        'amount' => rand(100, 1000),
+        'duplicate_window' => '10',
+        // 'email_customer' => 'true',
+        'footer_email_receipt' => 'thank you for your business!',
+        'header_email_receipt' => 'a copy of your receipt is below',
+        );
+            
+        $order = array(
+            'description' => 'Johns Bday Gift',
+            'invoice_num' => '3123',
+            'line_item' => 'item1<|>golf balls<|><|>2<|>18.95<|>Y',
+            );
+
+        $customer = (object)array();
+        $customer->first_name = "Jane";
+        $customer->last_name = "Smith";
+        $customer->company = "Jane Smith Enterprises Inc.";
+        $customer->address = "20 Main Street";
+        $customer->city = "San Francisco";
+        $customer->state = "CA";
+        $customer->zip = "94110";
+        $customer->country = "US";
+        $customer->phone = "415-555-5557";
+        $customer->fax = "415-555-5556";
+        $customer->email = "foo@example.com";
+        $customer->cust_id = "55";
+        $customer->customer_ip = "98.5.5.5";
+
+        $shipping_info = (object)array();
+        $shipping_info->ship_to_first_name = "John";
+        $shipping_info->ship_to_last_name = "Smith";
+        $shipping_info->ship_to_company = "Smith Enterprises Inc.";
+        $shipping_info->ship_to_address = "10 Main Street";
+        $shipping_info->ship_to_city = "San Francisco";
+        $shipping_info->ship_to_state = "CA";
+        $shipping_info->ship_to_zip = "94110";
+        $shipping_info->ship_to_country = "US";
+        $shipping_info->tax = "CA";
+        $shipping_info->freight = "Freight<|>ground overnight<|>12.95";
+        $shipping_info->duty = "Duty1<|>export<|>15.00";
+        $shipping_info->tax_exempt = "false";
+        $shipping_info->po_num = "12";
+
+        $sale = new AuthorizeNetAIM;
+        $sale->setFields($creditCard);
+        $sale->setFields($shipping_info);
+        $sale->setFields($customer);
+        $sale->setFields($order);
+        $sale->setFields($merchant);
+        $sale->setFields($transaction);
+        $response = $sale->authorizeAndCapture();
+        
+        $this->assertTrue($response->approved);
+    }
+
+    public function testResponseMethods()
+    {
+        $amount = rand(1, 1000);
+        $zipcode = "02301";
+        
+        $sale = new AuthorizeNetAIM;
+        $sale->setFields(
+            array(
+            'amount' => $amount,
+            'card_num' => '6011000000000012',
+            'exp_date' => '0415',
+            'zip' => $zipcode,
+            )
+        );
+        
+        $sale->setCustomField("custom1", "custom1value");
+        $sale->setCustomField("custom2", "custom2value");
+        $result = $sale->authorizeAndCapture();
+        $this->assertTrue($result->approved);
+        
+        $this->assertEquals("custom2value", $result->custom2);
+        $this->assertEquals($amount, $result->amount);
+        $this->assertEquals("CC", $result->method);
+        $this->assertEquals("auth_capture", $result->transaction_type);
+        $this->assertEquals("Discover", $result->card_type);
+        $this->assertEquals($zipcode, $result->zip_code);
+    }
+    
+    public function testSetBadField()
+    {
+        try {
+            $amount = rand(1, 1000);
+            $zipcode = "02301";
+            
+            $sale = new AuthorizeNetAIM;
+            $sale->setFields(
+                array(
+                'amount' => $amount,
+                'card_num' => '6011000000000012',
+                'exp_date' => '0415',
+                'zipcode' => $zipcode, // Should actually be just "zip"
+                )
+            );
+
+            $result = $sale->authorizeAndCapture();
+            $this->assertTrue($result->approved);
+            // should have thrown an exception by now
+            $this->assertFalse(true);
+        }
+        catch (AuthorizeNetException $e){
+            $this->assertTrue(true);
+        
+        }
+    }
+
+}
+
+
+class AuthorizeNetAIM_Live_Test extends PHPUnit_Framework_TestCase
+{
+
+    public function testAuthCaptureSetECheckMethod()
+    {
+        if (MERCHANT_LIVE_API_LOGIN_ID) {
+            // $this->markTestIncomplete('Depends on whether eChecks is enabled');
+            $sale = new AuthorizeNetAIM(MERCHANT_LIVE_API_LOGIN_ID,MERCHANT_LIVE_TRANSACTION_KEY);
+            $sale->setSandbox(false);
+            $sale->test_request = 'TRUE';
+            $sale->amount = "4.99";
+            $sale->setECheck(
+                '121042882',
+                '123456789123',
+                'CHECKING',
+                'Bank of Earth',
+                'Jane Doe',
+                'WEB'
+            );
+            $response = $sale->authorizeAndCapture();
+            $this->assertEquals("ECHECK", $response->method);
+            $this->assertEquals("18", $response->response_reason_code);
+            // $this->assertTrue($response->approved);
+        }
+    }
+    
+    public function testAuthCaptureECheck()
+    {
+        if (MERCHANT_LIVE_API_LOGIN_ID) {
+            // $this->markTestIncomplete('Depends on whether eChecks is enabled');
+            $sale = new AuthorizeNetAIM(MERCHANT_LIVE_API_LOGIN_ID,MERCHANT_LIVE_TRANSACTION_KEY);
+            $sale->setSandbox(false);
+            $sale->test_request = 'TRUE';
+            $sale->setFields(
+                array(
+                'amount' => rand(1, 1000),
+                'method' => 'echeck',
+                'bank_aba_code' => '121042882',
+                'bank_acct_num' => '123456789123',
+                'bank_acct_type' => 'CHECKING',
+                'bank_name' => 'Bank of Earth',
+                'bank_acct_name' => 'Jane Doe',
+                'echeck_type' => 'WEB',
+                )
+            );
+            $response = $sale->authorizeAndCapture();
+            $this->assertEquals("ECHECK", $response->method);
+            $this->assertEquals("18", $response->response_reason_code);
+            // $this->assertTrue($response->approved);
+        }
+    }
+
+    public function testAuthCaptureLiveServerTestRequest()
+    {
+        if (MERCHANT_LIVE_API_LOGIN_ID) {
+            $sale = new AuthorizeNetAIM(MERCHANT_LIVE_API_LOGIN_ID,MERCHANT_LIVE_TRANSACTION_KEY);
+            $sale->setSandbox(false);
+            $sale->setFields(
+                array(
+                'amount' => rand(1, 1000),
+                'card_num' => '6011000000000012',
+                'exp_date' => '0415'
+                )
+            );
+            $sale->setField('test_request', 'TRUE');
+            $response = $sale->authorizeAndCapture();
+            $this->assertTrue($response->approved);
+        }
+    }
+
+    public function testAuthCaptureLiveServer()
+    {
+        if (MERCHANT_LIVE_API_LOGIN_ID) {
+            $sale = new AuthorizeNetAIM(MERCHANT_LIVE_API_LOGIN_ID,MERCHANT_LIVE_TRANSACTION_KEY);
+            $sale->setSandbox(false);
+            $sale->test_request = 'TRUE';
+            $sale->setFields(
+                array(
+                'amount' => rand(1, 1000),
+                'card_num' => '6011000000000012',
+                'exp_date' => '0415'
+                )
+            );
+            $response = $sale->authorizeAndCapture();
+            $this->assertTrue($response->approved);
+        }
+    }
+
+    public function testInvalidCredentials()
+    {
+        if (MERCHANT_LIVE_API_LOGIN_ID) {
+            // Post a response to live server using invalid credentials.
+            $sale = new AuthorizeNetAIM('a','a');
+            $sale->setSandbox(false);
+            $sale->setFields(
+                array(
+                'amount' => rand(1, 1000),
+                'card_num' => '6011000000000012',
+                'exp_date' => '0415'
+                )
+            );
+            $response = $sale->authorizeAndCapture();
+            $this->assertTrue($response->error);
+            $this->assertEquals("13", $response->response_reason_code);
+        }
+    }
+
+}
\ No newline at end of file
diff --git a/anet_php_sdk/tests/AuthorizeNetARB_Test.php b/anet_php_sdk/tests/AuthorizeNetARB_Test.php
new file mode 100755 (executable)
index 0000000..ef120af
--- /dev/null
@@ -0,0 +1,201 @@
+<?php
+
+require_once 'AuthorizeNet_Test_Config.php';
+
+class AuthorizeNetARB_Test extends PHPUnit_Framework_TestCase
+{
+
+    public function testAllMethods()
+    {
+        // Set the subscription fields.
+        $subscription = new AuthorizeNet_Subscription;
+        $subscription->name = "Short subscription";
+        $subscription->intervalLength = "1";
+        $subscription->intervalUnit = "months";
+        $subscription->startDate = "2011-03-12";
+        $subscription->totalOccurrences = "14";
+        $subscription->amount = rand(1,100);
+        $subscription->creditCardCardNumber = "6011000000000012";
+        $subscription->creditCardExpirationDate = "2018-10";
+        $subscription->creditCardCardCode = "123";
+        $subscription->billToFirstName = "john";
+        $subscription->billToLastName = "doe";
+        
+        // Create the subscription.
+        $request = new AuthorizeNetARB;
+        $response = $request->createSubscription($subscription);
+        $this->assertTrue($response->isOk());
+        $subscription_id = $response->getSubscriptionId();
+        
+        // Get the subscription status
+        $status_request = new AuthorizeNetARB;
+        $status_response = $status_request->getSubscriptionStatus($subscription_id);
+        $this->assertEquals("active",$status_response->getSubscriptionStatus());
+        
+        // Update the subscription
+        $update_request = new AuthorizeNetARB;
+        $updated_subscription_info = new AuthorizeNet_Subscription;
+        $updated_subscription_info->billToFirstName = "jane";
+        $updated_subscription_info->billToLastName = "smith";
+        $updated_subscription_info->creditCardCardNumber = "6011000000000012";
+        $updated_subscription_info->creditCardExpirationDate = "2019-10";
+        $updated_subscription_info->creditCardCardCode = "423";
+        $update_response = $update_request->updateSubscription($subscription_id, $updated_subscription_info);
+        $this->assertTrue($update_response->isOk());
+        
+        // Cancel the subscription
+        $cancellation = new AuthorizeNetARB;
+        $cancel_response = $cancellation->cancelSubscription($subscription_id);
+        $this->assertTrue($cancel_response->isOk());
+        
+        // Get the subscription status
+        $status_request = new AuthorizeNetARB;
+        $status_response = $status_request->getSubscriptionStatus($subscription_id);
+        $this->assertEquals("canceled", $status_response->getSubscriptionStatus());
+        
+    }
+
+
+    public function testCreateSubscriptionLong()
+    {
+        
+        $subscription = new AuthorizeNet_Subscription;
+        $subscription->name = "test subscription";
+        $subscription->intervalLength = "1";
+        $subscription->intervalUnit = "months";
+        $subscription->startDate = "2015-03-12";
+        $subscription->totalOccurrences = "14";
+        $subscription->trialOccurrences = "";
+        $subscription->amount = "6.99";
+        $subscription->trialAmount = "";
+        $subscription->creditCardCardNumber = "6011000000000012";
+        $subscription->creditCardExpirationDate = "2018-10";
+        $subscription->creditCardCardCode = "123";
+        $subscription->bankAccountAccountType = "";
+        $subscription->bankAccountRoutingNumber = "";
+        $subscription->bankAccountAccountNumber = "";
+        $subscription->bankAccountNameOnAccount = "";
+        $subscription->bankAccountEcheckType = "";
+        $subscription->bankAccountBankName = "";
+        $subscription->orderInvoiceNumber = "";
+        $subscription->orderDescription = "";
+        $subscription->customerId = "12";
+        $subscription->customerEmail = "foo@domain.com";
+        $subscription->customerPhoneNumber = "";
+        $subscription->customerFaxNumber = "";
+        $subscription->billToFirstName = "john";
+        $subscription->billToLastName = "doe";
+        $subscription->billToCompany = "";
+        $subscription->billToAddress = "";
+        $subscription->billToCity = "";
+        $subscription->billToState = "";
+        $subscription->billToZip = "";
+        $subscription->billToCountry = "";
+        $subscription->shipToFirstName = "";
+        $subscription->shipToLastName = "";
+        $subscription->shipToCompany = "";
+        $subscription->shipToAddress = "";
+        $subscription->shipToCity = "";
+        $subscription->shipToState = "";
+        $subscription->shipToZip = "";
+        $subscription->shipToCountry = "";
+        
+        $refId = "ref" . time();
+        
+        // Create the request and send it.
+        $request = new AuthorizeNetARB;
+        $request->setRefId($refId);
+        $response = $request->createSubscription($subscription);
+        
+        
+        // Handle the response.
+        
+        $this->assertTrue($response->isOk());
+        $this->assertEquals($response->getMessageCode(), "I00001");
+        $this->assertEquals($response->getMessageText(), "Successful.");
+        $this->assertEquals($response->getRefId(), $refId);
+        $this->assertEquals($response->getResultCode(), "Ok");
+        
+        // Cancel the subscription to avoid duplicate errors in future
+        
+        $cancellation = new AuthorizeNetARB;
+        $cancellation->setRefId($refId);
+        $cancel_response = $cancellation->cancelSubscription($response->getSubscriptionId());
+        
+        
+        
+        $this->assertTrue($cancel_response->isOk());
+        
+    }
+    
+    public function testCreateSubscriptionECheck()
+    {
+        
+        $subscription = new AuthorizeNet_Subscription;
+        $subscription->name = "my test echeck subscription";
+        $subscription->intervalLength = "1";
+        $subscription->intervalUnit = "months";
+        $subscription->startDate = "2015-04-12";
+        $subscription->totalOccurrences = "2";
+        $subscription->trialOccurrences = "";
+        $subscription->amount = "11.99";
+        $subscription->trialAmount = "";
+        $subscription->bankAccountAccountType = "checking";
+        $subscription->bankAccountRoutingNumber = "121000248";
+        $subscription->bankAccountAccountNumber = "12345678";
+        $subscription->bankAccountNameOnAccount = "John Doe";
+        $subscription->bankAccountEcheckType = "WEB";
+        $subscription->bankAccountBankName = "Bank of Earth";
+        $subscription->orderInvoiceNumber = "";
+        $subscription->orderDescription = "";
+        $subscription->customerId = "12";
+        $subscription->customerEmail = "foo@domain.com";
+        $subscription->customerPhoneNumber = "";
+        $subscription->customerFaxNumber = "";
+        $subscription->billToFirstName = "john";
+        $subscription->billToLastName = "doe";
+        $subscription->billToCompany = "";
+        $subscription->billToAddress = "";
+        $subscription->billToCity = "";
+        $subscription->billToState = "";
+        $subscription->billToZip = "";
+        $subscription->billToCountry = "";
+        $subscription->shipToFirstName = "";
+        $subscription->shipToLastName = "";
+        $subscription->shipToCompany = "";
+        $subscription->shipToAddress = "";
+        $subscription->shipToCity = "";
+        $subscription->shipToState = "";
+        $subscription->shipToZip = "";
+        $subscription->shipToCountry = "";
+        
+        $refId = "ref" . time();
+        
+        // Create the request and send it.
+        $request = new AuthorizeNetARB;
+        $request->setRefId($refId);
+        
+        $response = $request->createSubscription($subscription);
+        
+        
+        // Handle the response.
+        
+        $this->assertTrue($response->isOk());
+        $this->assertEquals($response->getMessageCode(), "I00001");
+        $this->assertEquals($response->getMessageText(), "Successful.");
+        $this->assertEquals($response->getRefId(), $refId);
+        $this->assertEquals($response->getResultCode(), "Ok");
+        
+        
+        // Cancel the subscription to avoid duplicate errors in future
+        
+        
+        $cancellation = new AuthorizeNetARB;
+        $cancellation->setRefId($refId);
+        $cancel_response = $cancellation->cancelSubscription($response->getSubscriptionId());
+        
+        $this->assertTrue($cancel_response->isOk());
+        
+    }
+
+}
\ No newline at end of file
diff --git a/anet_php_sdk/tests/AuthorizeNetCIM_Test.php b/anet_php_sdk/tests/AuthorizeNetCIM_Test.php
new file mode 100755 (executable)
index 0000000..75c58d9
--- /dev/null
@@ -0,0 +1,355 @@
+<?php
+
+require_once 'AuthorizeNet_Test_Config.php';
+
+
+class AuthorizeNetCIM_Test extends PHPUnit_Framework_TestCase
+{
+    
+  public function testDeleteAllCustomerProfiles()
+  {
+    $request = new AuthorizeNetCIM;
+    $response = $request->getCustomerProfileIds();
+    $customers = $response->getCustomerProfileIds();
+       
+    foreach ($customers as $customer) {
+      $response = $request->deleteCustomerProfile($customer);
+      $this->assertTrue($response->isOk());
+    }
+       
+
+  }
+  
+  public function testXPath()
+  {
+  
+    // Create new customer profile
+    $request = new AuthorizeNetCIM;
+    $customerProfile = new AuthorizeNetCustomer;
+    $customerProfile->description = $description = "Some Description of customer 2";
+    $customerProfile->merchantCustomerId = $merchantCustomerId = time().rand(1,150);
+    $customerProfile->email = $email = "test2@domain.com";
+
+    // Add payment profile.
+    $paymentProfile = new AuthorizeNetPaymentProfile;
+    $paymentProfile->customerType = "individual";
+    $paymentProfile->payment->creditCard->cardNumber = "4111111111111111";
+    $paymentProfile->payment->creditCard->expirationDate = "2021-04";
+    $customerProfile->paymentProfiles[] = $paymentProfile;
+
+    $response = $request->createCustomerProfile($customerProfile);
+    $this->assertTrue($response->isOk());
+    $array = $response->xpath('customerProfileId');
+    $this->assertEquals($response->getCustomerProfileId(), "{$array[0]}");
+    
+    $profile = $request->getCustomerProfile($response->getCustomerProfileId());
+    
+    $this->assertEquals($email, (string)array_pop($profile->xpath('profile/email')));
+    $this->assertEquals($email, (string)array_pop($profile->xpath('profile/email')));
+    $this->assertEquals($description, (string)array_pop($profile->xpath('profile/description')));
+    $this->assertEquals($merchantCustomerId, (string)array_pop($profile->xpath('profile/merchantCustomerId')));
+    
+  }
+
+
+  public function testCreateCustomerProfile()
+  {
+    // Create new customer profile
+    $request = new AuthorizeNetCIM;
+    $customerProfile = new AuthorizeNetCustomer;
+    $customerProfile->description = "Description of customer";
+    $customerProfile->merchantCustomerId = time().rand(1,100);
+    $customerProfile->email = "blahbla@domain.com";
+    
+    // Add payment profile.
+    $paymentProfile = new AuthorizeNetPaymentProfile;
+    $paymentProfile->customerType = "individual";
+    $paymentProfile->payment->creditCard->cardNumber = "4111111111111111";
+    $paymentProfile->payment->creditCard->expirationDate = "2015-10";
+    $customerProfile->paymentProfiles[] = $paymentProfile;
+    
+    // Add another payment profile.
+    $paymentProfile2 = new AuthorizeNetPaymentProfile;
+    $paymentProfile2->customerType = "business";
+    $paymentProfile2->payment->bankAccount->accountType = "businessChecking";
+    $paymentProfile2->payment->bankAccount->routingNumber = "121042882";
+    $paymentProfile2->payment->bankAccount->accountNumber = "123456789123";
+    $paymentProfile2->payment->bankAccount->nameOnAccount = "Jane Doe";
+    $paymentProfile2->payment->bankAccount->echeckType = "WEB";
+    $paymentProfile2->payment->bankAccount->bankName = "Pandora Bank";
+    $customerProfile->paymentProfiles[] = $paymentProfile2;
+    
+    
+    // Add shipping address.
+    $address = new AuthorizeNetAddress;
+    $address->firstName = "john";
+    $address->lastName = "Doe";
+    $address->company = "John Doe Company";
+    $address->address = "1 Main Street";
+    $address->city = "Boston";
+    $address->state = "MA";
+    $address->zip = "02412";
+    $address->country = "USA";
+    $address->phoneNumber = "555-555-5555";
+    $address->faxNumber = "555-555-5556";
+    $customerProfile->shipToList[] = $address;
+    
+    // Add another shipping address.
+    $address2 = new AuthorizeNetAddress;
+    $address2->firstName = "jane";
+    $address2->lastName = "Doe";
+    $address2->address = "11 Main Street";
+    $address2->city = "Boston";
+    $address2->state = "MA";
+    $address2->zip = "02412";
+    $address2->country = "USA";
+    $address2->phoneNumber = "555-512-5555";
+    $address2->faxNumber = "555-523-5556";
+    $customerProfile->shipToList[] = $address2;
+    
+    $response = $request->createCustomerProfile($customerProfile);
+    $this->assertTrue($response->isOk());
+    $this->assertEquals(2, count($response->getCustomerShippingAddressIds()));
+    $this->assertEquals(2, count($response->getCustomerPaymentProfileIds()));
+    $customerProfileId = $response->getCustomerProfileId();
+    
+    $this->assertEquals($response->getCustomerProfileId(), "{$response->xml->customerProfileId}");
+    
+    
+    
+    $response = $request->getCustomerProfile($customerProfileId);
+    $this->assertEquals($customerProfile->description, (string)$response->xml->profile->description);
+    $this->assertEquals($customerProfile->merchantCustomerId, (string)$response->xml->profile->merchantCustomerId);
+    $this->assertEquals($customerProfile->email, (string)$response->xml->profile->email);
+    $this->assertEquals(substr($customerProfile->paymentProfiles[0]->payment->creditCard->cardNumber, -4, 4), substr((string)$response->xml->profile->paymentProfiles->payment->creditCard->cardNumber, -4, 4));
+    
+    
+    
+    $this->assertTrue($response->isOk());
+  
+  
+  }
+  
+  public function testGetCustomerProfile()
+  {
+    // Create new customer profile
+    $request = new AuthorizeNetCIM;
+    $customerProfile = new AuthorizeNetCustomer;
+    $customerProfile->description = "Description of customer";
+    $customerProfile->merchantCustomerId = time().rand(1,10);
+    $customerProfile->email = "blahlah@domain.com";
+    $response = $request->createCustomerProfile($customerProfile);
+    $this->assertTrue($response->isOk());
+    $customerProfileId = $response->getCustomerProfileId();
+    
+    $response = $request->getCustomerProfile($customerProfileId);
+
+    $this->assertTrue($response->isOk());
+    
+  }
+  
+  public function testCreateCustomerProfileWithValidationMode()
+  {
+      // Create new customer profile
+     $request = new AuthorizeNetCIM;
+     $customerProfile = new AuthorizeNetCustomer;
+     $customerProfile->description = "Some Description of customer 2";
+     $customerProfile->merchantCustomerId = time().rand(1,10);
+     $customerProfile->email = "test2@domain.com";
+     
+     // Add payment profile.
+     $paymentProfile = new AuthorizeNetPaymentProfile;
+     $paymentProfile->customerType = "individual";
+     $paymentProfile->payment->creditCard->cardNumber = "4111111111111111";
+     $paymentProfile->payment->creditCard->expirationDate = "2015-04";
+     $customerProfile->paymentProfiles[] = $paymentProfile;
+     
+     // Add another payment profile.
+     $paymentProfile2 = new AuthorizeNetPaymentProfile;
+     $paymentProfile2->customerType = "individual";
+     $paymentProfile2->payment->creditCard->cardNumber = "4222222222222";
+     $paymentProfile2->payment->creditCard->expirationDate = "2019-10";
+     $customerProfile->paymentProfiles[] = $paymentProfile2;
+     
+     $response = $request->createCustomerProfile($customerProfile, "testMode");
+
+     $this->assertTrue($response->isOk());
+     
+     $validationResponses = $response->getValidationResponses();
+     foreach ($validationResponses as $vr) {
+         $this->assertTrue($vr->approved);
+     }
+      
+  }
+  
+  public function testUpdateSplitTenderGroup()
+  {
+      // Create a partial auth test transaction
+      $amount = 4.92;
+      
+      $sale = new AuthorizeNetAIM;
+      $sale->amount = $amount;
+      $sale->card_num = '4222222222222';
+      $sale->zip = "46225";
+      $sale->exp_date = '04/24';
+      $sale->allow_partial_auth = true;
+      $response = $sale->authorizeAndCapture();
+      $this->assertTrue($response->held);
+      $this->assertEquals("1.23", $response->amount);
+      $this->assertEquals($amount, $response->requested_amount);
+      $split_tender_id = $response->split_tender_id;
+      
+      // Charge a bit more
+      $sale = new AuthorizeNetAIM;
+      $sale->amount = 1.23;
+      $sale->card_num = '6011000000000012';
+      $sale->exp_date = '04/26';
+      $sale->split_tender_id = $split_tender_id;
+      $sale->allow_partial_auth = true;
+      $response = $sale->authorizeAndCapture();
+      $this->assertTrue($response->approved);
+      
+      // Void the group of partial auths.
+      
+      $request = new AuthorizeNetCIM;
+      $response = $request->updateSplitTenderGroup($split_tender_id, "voided");
+      $this->assertTrue($response->isOk());
+  }
+
+  public function testAll()
+  {
+    // Create new customer profile
+    $request = new AuthorizeNetCIM;
+    $customerProfile = new AuthorizeNetCustomer;
+    $customerProfile->description = "Description of customer";
+    $customerProfile->merchantCustomerId = time().rand(1,10);
+    $customerProfile->email = "blahblahblah@domain.com";
+    $response = $request->createCustomerProfile($customerProfile);
+    $this->assertTrue($response->isOk());
+    $customerProfileId = $response->getCustomerProfileId();
+    
+    // Update customer profile
+    $customerProfile->description = "New description";
+    $customerProfile->email = "newemail@domain.com";
+    $response = $request->updateCustomerProfile($customerProfileId, $customerProfile);
+    $this->assertTrue($response->isOk());
+    
+    // Add payment profile.
+    $paymentProfile = new AuthorizeNetPaymentProfile;
+    $paymentProfile->customerType = "individual";
+    $paymentProfile->payment->creditCard->cardNumber = "4111111111111111";
+    $paymentProfile->payment->creditCard->expirationDate = "2015-10";
+    $response = $request->createCustomerPaymentProfile($customerProfileId, $paymentProfile);
+    $this->assertTrue($response->isOk());
+    $paymentProfileId = $response->getPaymentProfileId();
+    
+    // Update payment profile.
+    $paymentProfile->payment->creditCard->cardNumber = "4111111111111111";
+    $paymentProfile->payment->creditCard->expirationDate = "2017-11";
+    $response = $request->updateCustomerPaymentProfile($customerProfileId,$paymentProfileId, $paymentProfile);
+    $this->assertTrue($response->isOk());
+    
+    // Add shipping address.
+    $address = new AuthorizeNetAddress;
+    $address->firstName = "john";
+    $address->lastName = "Doe";
+    $address->company = "John Doe Company";
+    $address->address = "1 Main Street";
+    $address->city = "Boston";
+    $address->state = "MA";
+    $address->zip = "02412";
+    $address->country = "USA";
+    $address->phoneNumber = "555-555-5555";
+    $address->faxNumber = "555-555-5556";
+    $response = $request->createCustomerShippingAddress($customerProfileId, $address);
+    $this->assertTrue($response->isOk());
+    $customerAddressId = $response->getCustomerAddressId();
+    
+    // Update shipping address.
+    $address->address = "2 First Street";
+    $response = $request->updateCustomerShippingAddress($customerProfileId, $customerAddressId, $address);
+    $this->assertTrue($response->isOk());
+    
+    // Create Auth & Capture Transaction
+    $transaction = new AuthorizeNetTransaction;
+    $transaction->amount = "9.79";
+    $transaction->customerProfileId = $customerProfileId;
+    $transaction->customerPaymentProfileId = $paymentProfileId;
+    $transaction->customerShippingAddressId = $customerAddressId;
+    
+    $lineItem              = new AuthorizeNetLineItem;
+    $lineItem->itemId      = "4";
+    $lineItem->name        = "Cookies";
+    $lineItem->description = "Chocolate Chip";
+    $lineItem->quantity    = "4";
+    $lineItem->unitPrice   = "1.00";
+    $lineItem->taxable     = "true";
+    
+    $lineItem2             = new AuthorizeNetLineItem;
+    $lineItem2->itemId     = "4";
+    $lineItem2->name       = "Cookies";
+    $lineItem2->description= "Peanut Butter";
+    $lineItem2->quantity   = "4";
+    $lineItem2->unitPrice  = "1.00";
+    $lineItem2->taxable    = "true";
+    
+    $transaction->lineItems[] = $lineItem;
+    $transaction->lineItems[] = $lineItem2;
+    
+    
+    $response = $request->createCustomerProfileTransaction("AuthCapture", $transaction);
+    $this->assertTrue($response->isOk());
+    $transactionResponse = $response->getTransactionResponse();
+    $this->assertTrue($transactionResponse->approved);
+    $transactionId = $transactionResponse->transaction_id;
+    
+    // Void the transaction
+    $transaction = new AuthorizeNetTransaction;
+    $transaction->transId = $transactionId;
+    $response = $request->createCustomerProfileTransaction("Void", $transaction);
+    $this->assertTrue($response->isOk());
+    $transactionResponse = $response->getTransactionResponse();
+    $this->assertTrue($transactionResponse->approved);
+    
+        
+    // Delete Shipping Address
+    $response = $request->deleteCustomerShippingAddress($customerProfileId, $customerAddressId);
+    $this->assertTrue($response->isOk());
+    
+    // Delete payment profile.
+    $response = $request->deleteCustomerPaymentProfile($customerProfileId, $paymentProfileId);
+    $this->assertTrue($response->isOk());
+    
+    
+    // Delete the profile id for future testing.
+    $response = $request->deleteCustomerProfile($customerProfileId);
+    $this->assertTrue($response->isOk());
+  }
+  
+
+  
+
+  public function testGetCustomerProfileIds()
+  {
+    // Create new customer profile
+    $request = new AuthorizeNetCIM;
+    $customerProfile = new AuthorizeNetCustomer;
+    $customerProfile->description = "Description of customer";
+    $customerProfile->merchantCustomerId = time().rand(1,10);
+    $customerProfile->email = "blahblahblah@domain.com";
+    $response = $request->createCustomerProfile($customerProfile);
+    $this->assertTrue($response->isOk());
+    $customerProfileId = $response->getCustomerProfileId();
+    
+    $response = $request->getCustomerProfileIds();
+    $this->assertTrue($response->isOk());
+    $this->assertTrue(in_array($customerProfileId, $response->getCustomerProfileIds()));
+    
+    
+  }
+  
+  
+
+}
\ No newline at end of file
diff --git a/anet_php_sdk/tests/AuthorizeNetCP_Test.php b/anet_php_sdk/tests/AuthorizeNetCP_Test.php
new file mode 100755 (executable)
index 0000000..aa8c580
--- /dev/null
@@ -0,0 +1,179 @@
+<?php
+
+require_once 'AuthorizeNet_Test_Config.php';
+
+class AuthorizeNetCP_Test extends PHPUnit_Framework_TestCase
+{
+    
+    public function testAuthCapture()
+    {
+        $sale = new AuthorizeNetCP(CP_API_LOGIN_ID, CP_TRANSACTION_KEY);
+        $sale->setFields(
+            array(
+            'amount' => rand(1, 1000),
+            'card_num' => '4111111111111111',
+            'exp_date' => '0415',
+            'device_type' => '4',
+            )
+        );
+        $response = $sale->authorizeAndCapture();
+        $this->assertTrue($response->approved);
+    }
+    
+    // public function testMd5()
+    // {
+    //     return;
+    //     $sale = new AuthorizeNetCP(CP_API_LOGIN_ID, CP_TRANSACTION_KEY);
+    //     $sale->setFields(
+    //         array(
+    //         'amount' => rand(1, 1000),
+    //         'card_num' => '4111111111111111',
+    //         'exp_date' => '0415',
+    //         'device_type' => '4',
+    //         )
+    //     );
+    //     $response = $sale->authorizeAndCapture();
+    //     $this->assertTrue($response->approved);
+    //     $this->assertTrue($response->isAuthorizeNet(CP_API_LOGIN_ID));
+    // }
+    
+    public function testAuthCaptureTrack1()
+    {
+        $sale = new AuthorizeNetCP(CP_API_LOGIN_ID, CP_TRANSACTION_KEY);
+        $sale->setFields(
+            array(
+            'amount' => rand(1, 1000),
+            'device_type' => '4',
+            )
+        );
+        $sale->setTrack1Data('%B4111111111111111^CARDUSER/JOHN^1803101000000000020000831000000?');
+        $response = $sale->authorizeAndCapture();
+        $this->assertTrue($response->approved);
+    }
+    
+    public function testAuthCaptureTrack2()
+    {
+        $sale = new AuthorizeNetCP(CP_API_LOGIN_ID, CP_TRANSACTION_KEY);
+        $sale->setFields(
+            array(
+            'amount' => rand(1, 1000),
+            'device_type' => '4',
+            )
+        );
+        $sale->setTrack2Data('4111111111111111=1803101000020000831?');
+        $response = $sale->authorizeAndCapture();
+        $this->assertTrue($response->approved);
+    }
+    
+    public function testAuthCaptureTrack2Error()
+    {
+        $sale = new AuthorizeNetCP(CP_API_LOGIN_ID, CP_TRANSACTION_KEY);
+        $sale->setFields(
+            array(
+            'amount' => rand(1, 1000),
+            'device_type' => '4',
+            )
+        );
+        $sale->setTrack2Data('4411111111111111=1803101000020000831?');
+        $response = $sale->authorizeAndCapture();
+        $this->assertFalse($response->approved);
+        $this->assertTrue($response->error);
+        $this->assertEquals(6, $response->response_reason_code);
+    }
+    
+    public function testResponseFields()
+    {
+        $sale = new AuthorizeNetCP(CP_API_LOGIN_ID, CP_TRANSACTION_KEY);
+        $sale->setFields(
+            array(
+            'amount' => rand(1, 1000),
+            'device_type' => '4',
+            )
+        );
+        $sale->user_ref = $user_ref = "someCustomVariable123";
+        $sale->setTrack1Data('%B4111111111111111^CARDUSER/JOHN^1803101000000000020000831000000?');
+        $response = $sale->authorizeAndCapture();
+        
+        
+        $this->assertTrue($response->approved);
+        $this->assertEquals('1.0',$response->version);
+        $this->assertEquals('1',$response->response_code);
+        $this->assertEquals('1',$response->response_reason_code);
+        $this->assertEquals('(TESTMODE) This transaction has been approved.',$response->response_reason_text);
+        $this->assertEquals('000000',$response->authorization_code);
+        $this->assertEquals('P',$response->avs_code);
+        $this->assertEquals('',$response->card_code_response);
+        $this->assertEquals('0',$response->transaction_id);
+        $this->assertStringMatchesFormat('%x',$response->md5_hash);
+        $this->assertEquals($user_ref, $response->user_ref);
+        $this->assertEquals('XXXX1111',$response->card_num);
+        $this->assertEquals('Visa',$response->card_type);
+
+
+    }
+    
+    public function testXmlResponse()
+    {
+        $sale = new AuthorizeNetCP(CP_API_LOGIN_ID, CP_TRANSACTION_KEY);
+        $sale->setFields(
+            array(
+            'amount' => rand(1, 1000),
+            'device_type' => '4',
+            'response_format' => '0',
+            )
+        );
+        $sale->user_ref = $user_ref = "dummyvalue323";
+        $sale->setTrack1Data('%B4111111111111111^CARDUSER/JOHN^1803101000000000020000831000000?');
+        $response = $sale->authorizeAndCapture();
+        
+        
+        $this->assertTrue($response->approved);
+        $this->assertEquals('1.0',$response->version);
+        $this->assertEquals('1',$response->response_code);
+        $this->assertEquals('1',$response->response_reason_code);
+        $this->assertEquals('This transaction has been approved.',$response->response_reason_text);
+        $this->assertEquals('000000',$response->authorization_code);
+        $this->assertEquals('P',$response->avs_code);
+        $this->assertEquals('',$response->card_code_response);
+        $this->assertEquals('0',$response->transaction_id);
+        $this->assertStringMatchesFormat('%x',$response->md5_hash);
+        $this->assertEquals($user_ref, $response->user_ref);
+        $this->assertEquals('XXXX1111',$response->card_num);
+        $this->assertEquals('Visa',$response->card_type);
+
+
+    }
+    
+    public function testXmlResponseFailure()
+    {
+        $sale = new AuthorizeNetCP(CP_API_LOGIN_ID, CP_TRANSACTION_KEY);
+        $sale->setFields(
+            array(
+            'amount' => rand(1, 1000),
+            'device_type' => '4',
+            'response_format' => '0',
+            )
+        );
+        $sale->user_ref = $user_ref = "dummyvalue323";
+        $sale->setTrack1Data('%B4111111111111^CARDUSER/JOHN^1803101000000000020000831000000?');
+        $response = $sale->authorizeAndCapture();
+        
+        
+        $this->assertTrue($response->error);
+        $this->assertEquals('1.0',$response->version);
+        $this->assertEquals('3',$response->response_code);
+        $this->assertEquals('6',$response->response_reason_code);
+        $this->assertEquals('The credit card number is invalid.',$response->response_reason_text);
+        $this->assertEquals('000000',$response->authorization_code);
+        $this->assertEquals('P',$response->avs_code);
+        $this->assertEquals('',$response->card_code_response);
+        $this->assertEquals('0',$response->transaction_id);
+        $this->assertStringMatchesFormat('%x',$response->md5_hash);
+        $this->assertEquals($user_ref, $response->user_ref);
+        $this->assertEquals('XXXX1111',$response->card_num);
+
+
+    }
+
+
+}
\ No newline at end of file
diff --git a/anet_php_sdk/tests/AuthorizeNetDPM_Test.php b/anet_php_sdk/tests/AuthorizeNetDPM_Test.php
new file mode 100755 (executable)
index 0000000..78b7e5a
--- /dev/null
@@ -0,0 +1,25 @@
+<?php
+
+require_once 'AuthorizeNet_Test_Config.php';
+
+class AuthorizeNetDPM_Test extends PHPUnit_Framework_TestCase
+{ 
+    public function testGenerateFingerprint()
+    {
+        $this->assertEquals("db88bbebb8f699acdbe70daad897a68a",AuthorizeNetDPM::getFingerprint("123","123","123","123","123"));
+    }
+    
+    public function testGetCreditCardForm()
+    {
+        $fp_sequence = "12345";
+        $this->assertContains('<input type="hidden" name="x_fp_sequence" value="'.$fp_sequence.'">',AuthorizeNetDPM::getCreditCardForm('2', $fp_sequence, 'ht', '2', '1', true));
+    }
+    
+    public function testRelayResponseUrl()
+    {
+        $return_url = 'http://yourdomain.com';
+        
+        $this->assertContains('window.location="'.$return_url.'";', AuthorizeNetDPM::getRelayResponseSnippet($return_url));
+    }
+
+}
\ No newline at end of file
diff --git a/anet_php_sdk/tests/AuthorizeNetSIM_Test.php b/anet_php_sdk/tests/AuthorizeNetSIM_Test.php
new file mode 100755 (executable)
index 0000000..62ef5a3
--- /dev/null
@@ -0,0 +1,56 @@
+<?php
+
+require_once 'AuthorizeNet_Test_Config.php';
+
+class AuthorizeNetSIM_Test extends PHPUnit_Framework_TestCase
+{
+    
+    public function testGenerateHash()
+    {
+        $_POST['x_amount'] = "4.12";
+        $_POST['x_trans_id'] = "123";
+        $message = new AuthorizeNetSIM("528udYYwz","test");
+        $this->assertEquals("8FC33C32ABB3EDD8BBC4BE3E904CB47E",$message->generateHash());
+    }
+    
+    public function testAmount()
+    {
+        $_POST['x_amount'] = "4.12";
+        $_POST['x_response_code'] = "1";
+        $message = new AuthorizeNetSIM("528udYYwz","test");
+        $this->assertEquals("4.12",$message->amount);
+        $this->assertTrue($message->approved);
+    }
+    
+    public function testIsAuthNet()
+    {
+        $_POST['x_amount'] = "4.12";
+        $_POST['x_trans_id'] = "123";
+        $_POST['x_MD5_Hash'] = "8FC33C32ABB3EDD8BBC4BE3E904CB47E";
+        $message = new AuthorizeNetSIM("528udYYwz","test");
+        $this->assertTrue($message->isAuthorizeNet());
+        
+        
+        $_POST['x_amount'] = "4.12";
+        $_POST['x_trans_id'] = "123";
+        $_POST['x_MD5_Hash'] = "8FC33C32BB3EDD8BBC4BE3E904CB47E";
+        $message = new AuthorizeNetSIM("528udYYwz","test");
+        $this->assertFalse($message->isAuthorizeNet());
+    }
+    
+     public function testIsError()
+    {
+        $_POST['x_amount'] = "4.12";
+        $_POST['x_response_code'] = "3";
+        $_POST['x_ship_to_state'] = "CA";
+        $message = new AuthorizeNetSIM("528udYYwz","test");
+        $this->assertEquals("3",$message->response_code);
+        $this->assertTrue($message->error);
+        $this->assertFalse($message->approved);
+        $this->assertEquals("CA",$message->ship_to_state);
+    }
+    
+    
+    
+
+}
\ No newline at end of file
diff --git a/anet_php_sdk/tests/AuthorizeNetSSL_Test.php b/anet_php_sdk/tests/AuthorizeNetSSL_Test.php
new file mode 100755 (executable)
index 0000000..b4191e1
--- /dev/null
@@ -0,0 +1,23 @@
+<?php
+
+class AuthorizeNetTD_Test extends PHPUnit_Framework_TestCase {
+    public function testSandboxSSLCertIsValid()
+    {
+        exec("echo | openssl s_client -connect test.authorize.net:443 -showcerts -verify 10 -CAfile ../lib/ssl/cert.pem 2>&1", $output, $return_value);
+        $this->assertEquals(0, $return_value);
+        $this->assertTrue(in_array('Verify return code: 0 (ok)', array_map('trim', $output)));
+        exec("echo | openssl s_client -connect apitest.authorize.net:443 -showcerts -verify 10 -CAfile ../lib/ssl/cert.pem 2>&1", $output, $return_value);
+        $this->assertEquals(0, $return_value);
+        $this->assertTrue(in_array('Verify return code: 0 (ok)', array_map('trim', $output)));
+    }
+    
+    public function testLiveSSLCertIsValid()
+    {
+        exec("echo | openssl s_client -connect secure.authorize.net:443 -showcerts -verify 10 -CAfile ../lib/ssl/cert.pem 2>&1", $output, $return_value);
+        $this->assertEquals(0, $return_value);
+        $this->assertTrue(in_array('Verify return code: 0 (ok)', array_map('trim', $output)));
+        exec("echo | openssl s_client -connect api.authorize.net:443 -showcerts -verify 10 -CAfile ../lib/ssl/cert.pem 2>&1", $output, $return_value);
+        $this->assertEquals(0, $return_value);
+        $this->assertTrue(in_array('Verify return code: 0 (ok)', array_map('trim', $output)));
+    }
+}
diff --git a/anet_php_sdk/tests/AuthorizeNetTD_Test.php b/anet_php_sdk/tests/AuthorizeNetTD_Test.php
new file mode 100755 (executable)
index 0000000..4e12168
--- /dev/null
@@ -0,0 +1,96 @@
+<?php
+
+require_once 'AuthorizeNet_Test_Config.php';
+
+
+class AuthorizeNetTD_Test extends PHPUnit_Framework_TestCase
+{
+
+
+    public function testGetSettledBatchList()
+    {
+        $request = new AuthorizeNetTD;
+        $response = $request->getSettledBatchList();
+        $this->assertTrue($response->isOk());
+        $this->assertEquals("I00001",(string)array_pop($response->xpath("messages/message/code")));
+    }
+    
+    public function testGetSettledBatchListIncludeStatistics()
+    {
+        $request = new AuthorizeNetTD;
+        $response = $request->getSettledBatchList(true);
+        $this->assertTrue($response->isOk());
+    }
+    
+    public function testGetSettledBatchListForMonth()
+    {
+        $request = new AuthorizeNetTD;
+        $response = $request->getSettledBatchListForMonth();
+        $this->assertTrue($response->isOk());
+    }
+    
+    public function testGetTransactionsForDay()
+    {
+        $request = new AuthorizeNetTD;
+        $transactions = $request->getTransactionsForDay(12, 8, 2010);
+        $this->assertTrue(is_array($transactions));
+    }
+    
+    public function testGetTransactionList()
+    {
+        $request = new AuthorizeNetTD;
+        $response = $request->getSettledBatchList();
+        $this->assertTrue($response->isOk());
+        $batches = $response->xpath("batchList/batch");
+        $batch_id = (string)$batches[0]->batchId;
+        $response = $request->getTransactionList($batch_id);
+        $this->assertTrue($response->isOk());
+    }
+    
+    public function testGetTransactionDetails()
+    {
+        $sale = new AuthorizeNetAIM;
+        $amount = rand(1, 100);
+        $response = $sale->authorizeAndCapture($amount, '4012888818888', '04/17');
+        $this->assertTrue($response->approved);
+        
+        $transId = $response->transaction_id;
+        
+        $request = new AuthorizeNetTD;
+        $response = $request->getTransactionDetails($transId);
+        $this->assertTrue($response->isOk());
+        
+        $this->assertEquals($transId, (string)$response->xml->transaction->transId);
+        $this->assertEquals($amount, (string)$response->xml->transaction->authAmount);
+        $this->assertEquals("Visa", (string)$response->xml->transaction->payment->creditCard->cardType);
+        
+    }
+    
+    public function testGetUnsettledTransactionList()
+    {
+        $sale = new AuthorizeNetAIM;
+        $amount = rand(1, 100);
+        $response = $sale->authorizeAndCapture($amount, '4012888818888', '04/17');
+        $this->assertTrue($response->approved);
+        
+        $request = new AuthorizeNetTD;
+        $response = $request->getUnsettledTransactionList();
+        $this->assertTrue($response->isOk());
+        $this->assertTrue($response->xml->transactions->count() >= 1);
+    }
+    
+    public function testGetBatchStatistics()
+    {
+        $request = new AuthorizeNetTD;
+        $response = $request->getSettledBatchList();
+        $this->assertTrue($response->isOk());
+        $this->assertTrue($response->xml->batchList->count() >= 1);
+        $batchId = $response->xml->batchList->batch[0]->batchId;
+        
+        $request = new AuthorizeNetTD;
+        $response = $request->getBatchStatistics($batchId);
+        $this->assertTrue($response->isOk());
+    }
+  
+
+}
\ No newline at end of file
diff --git a/anet_php_sdk/tests/AuthorizeNet_SOAP_Test.php b/anet_php_sdk/tests/AuthorizeNet_SOAP_Test.php
new file mode 100755 (executable)
index 0000000..20b87d7
--- /dev/null
@@ -0,0 +1,31 @@
+<?php
+
+require_once 'AuthorizeNet_Test_Config.php';
+
+class AuthorizeNet_SOAP_Test extends PHPUnit_Framework_TestCase
+{
+    
+    public function testSaveSoapDoc ()
+    {
+        $filepath = dirname(__FILE__) . "/soap_doc.php";
+        $client = new AuthorizeNetSOAP;
+        $this->assertTrue($client->saveSoapDocumentation($filepath) > 1);
+        unlink($filepath);
+    }
+    
+    public function testGetCustomerIds ()
+    {
+        $client = new AuthorizeNetSOAP;
+        $result = $client->GetCustomerProfileIds(
+            array(
+                'merchantAuthentication' => array(
+                    'name' => AUTHORIZENET_API_LOGIN_ID,
+                    'transactionKey' => AUTHORIZENET_TRANSACTION_KEY,
+                ),
+            )
+        );
+        $customer_ids = $result->GetCustomerProfileIdsResult->ids->long;
+        $this->assertTrue(is_array($customer_ids));
+    }
+
+}
\ No newline at end of file
diff --git a/anet_php_sdk/tests/AuthorizeNet_Test_Config.php b/anet_php_sdk/tests/AuthorizeNet_Test_Config.php
new file mode 100755 (executable)
index 0000000..1038042
--- /dev/null
@@ -0,0 +1,47 @@
+<?php
+/**
+ * Tests for the AuthorizeNet PHP SDK
+ */
+
+/**
+ * Enter your test account credentials to run tests against sandbox.
+ */
+define("AUTHORIZENET_API_LOGIN_ID", "");
+define("AUTHORIZENET_TRANSACTION_KEY", "");
+define("AUTHORIZENET_MD5_SETTING", "");
+/**
+ * Enter your live account credentials to run tests against production gateway.
+ */
+define("MERCHANT_LIVE_API_LOGIN_ID", "");
+define("MERCHANT_LIVE_TRANSACTION_KEY", "");
+
+/**
+ * Card Present Sandbox Credentials
+ */
+define("CP_API_LOGIN_ID", "");
+define("CP_TRANSACTION_KEY", "");
+
+
+define("AUTHORIZENET_LOG_FILE", dirname(__FILE__) . "/log");
+// Clear logfile
+file_put_contents(AUTHORIZENET_LOG_FILE, "");
+
+
+
+
+
+if (!function_exists('curl_init')) {
+    throw new Exception('AuthorizeNetSDK needs the CURL PHP extension.');
+}
+
+
+if (!function_exists('simplexml_load_file')) {
+  throw new Exception('The AuthorizeNet SDK requires the SimpleXML PHP extension.');
+}
+
+require_once dirname(dirname(__FILE__)) . '/AuthorizeNet.php';
+require_once 'PHPUnit/Framework.php';
+
+if (AUTHORIZENET_API_LOGIN_ID == "") {
+    die('Enter your merchant credentials in '.__FILE__.' before running the test suite.');
+}
diff --git a/anet_php_sdk/tests/README b/anet_php_sdk/tests/README
new file mode 100755 (executable)
index 0000000..062a2d3
--- /dev/null
@@ -0,0 +1,17 @@
+By:
+    Authorize.Net
+    http://developer.authorize.net
+    http://community.developer.authorize.net
+
+About:
+    Integration tests for the AuthorizeNet SDK. These tests are mainly
+    for SDK development. However, you can also browse through these
+    tests to find more usage examples for the various APIs.
+
+Requirements:
+    - PHPUnit
+    - An Authorize.Net Test Account and/or Merchant Account. You can get a 
+      free test account at http://developer.authorize.net/testaccount/
+    
+Usage:
+    - On the command line in this folder run: phpunit .
\ No newline at end of file
diff --git a/anet_php_sdk/tests/domain.crt b/anet_php_sdk/tests/domain.crt
new file mode 100755 (executable)
index 0000000..14e348d
--- /dev/null
@@ -0,0 +1,51 @@
+CONNECTED(00000003)
+---
+Certificate chain
+ 0 s:/C=US/ST=Utah/L=American Fork/O=Authorize.Net Corp./OU=AUTHORIZE.NET CORP./CN=secure.authorize.net
+   i:/C=ZA/O=Thawte Consulting (Pty) Ltd./CN=Thawte SGC CA
+ 1 s:/C=ZA/O=Thawte Consulting (Pty) Ltd./CN=Thawte SGC CA
+   i:/C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority
+---
+Server certificate
+-----BEGIN CERTIFICATE-----
+MIIDSTCCArKgAwIBAgIQfmO9EP9/fYY45sRzhqgfGzANBgkqhkiG9w0BAQUFADBM
+MQswCQYDVQQGEwJaQTElMCMGA1UEChMcVGhhd3RlIENvbnN1bHRpbmcgKFB0eSkg
+THRkLjEWMBQGA1UEAxMNVGhhd3RlIFNHQyBDQTAeFw0wOTA0MDkwMDAwMDBaFw0x
+MTA0MTEyMzU5NTlaMIGPMQswCQYDVQQGEwJVUzENMAsGA1UECBMEVXRhaDEWMBQG
+A1UEBxMNQW1lcmljYW4gRm9yazEcMBoGA1UEChMTQXV0aG9yaXplLk5ldCBDb3Jw
+LjEcMBoGA1UECxMTQVVUSE9SSVpFLk5FVCBDT1JQLjEdMBsGA1UEAxMUc2VjdXJl
+LmF1dGhvcml6ZS5uZXQwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAN0dh86L
+70MHbun7wTNGV0pNXsnebt3z9mCpndLUiBp5J/b57hQO5/HvevkhkDyCrky/Dn7y
+4SEJh6RHYuP4ZBk30DS8iH5dWCRHqSQgpMKhUl/+D7KHbVqgPzOpOR44TiSa1P5m
+Fv0qicvRR3iwSK/6ESywNvEJk1iiYPnpnnlvAgMBAAGjgecwgeQwDAYDVR0TAQH/
+BAIwADA2BgNVHR8ELzAtMCugKaAnhiVodHRwOi8vY3JsLnRoYXd0ZS5jb20vVGhh
+d3RlU0dDQ0EuY3JsMCgGA1UdJQQhMB8GCCsGAQUFBwMBBggrBgEFBQcDAgYJYIZI
+AYb4QgQBMHIGCCsGAQUFBwEBBGYwZDAiBggrBgEFBQcwAYYWaHR0cDovL29jc3Au
+dGhhd3RlLmNvbTA+BggrBgEFBQcwAoYyaHR0cDovL3d3dy50aGF3dGUuY29tL3Jl
+cG9zaXRvcnkvVGhhd3RlX1NHQ19DQS5jcnQwDQYJKoZIhvcNAQEFBQADgYEARa0l
+PaGn4TOw3KOMVu8eiSdho4Nmal6u9AWE3rWHDakO2/a1AkZTM2/Wpt6KI3fp6WWK
+LSsa9wLoVYSJ6pI7bmiJTvyx42yPP0PZXQSz05PHgTEGyW2jAn4N1hFvbTj28mZT
+jv2jd12xgrmX34nulLdydNaM8J7CauhMvqwwvZ0=
+-----END CERTIFICATE-----
+subject=/C=US/ST=Utah/L=American Fork/O=Authorize.Net Corp./OU=AUTHORIZE.NET CORP./CN=secure.authorize.net
+issuer=/C=ZA/O=Thawte Consulting (Pty) Ltd./CN=Thawte SGC CA
+---
+No client certificate CA names sent
+---
+SSL handshake has read 1791 bytes and written 306 bytes
+---
+New, TLSv1/SSLv3, Cipher is RC4-MD5
+Server public key is 1024 bit
+Compression: NONE
+Expansion: NONE
+SSL-Session:
+    Protocol  : TLSv1
+    Cipher    : RC4-MD5
+    Session-ID: 03130000B43AEDC6A4B731EB5FA519E70B6CAC52856869A8593521601F677C28
+    Session-ID-ctx: 
+    Master-Key: C92AA33E812EFC279AAFF16922CFB3519F94FDA820ED3158A72BD97D3BB2D0EC938E7E71817958DB545EA2E147CCC84A
+    Key-Arg   : None
+    Start Time: 1297707939
+    Timeout   : 300 (sec)
+    Verify return code: 20 (unable to get local issuer certificate)
+---
diff --git a/anet_php_sdk/tests/report.html b/anet_php_sdk/tests/report.html
new file mode 100755 (executable)
index 0000000..764ae3d
--- /dev/null
@@ -0,0 +1 @@
+<html><body><h2 id="AuthorizeNet_SOAP_Test">AuthorizeNet_SOAP_</h2><ul><li>Save soap doc</li><li>Get customer ids</li></ul><h2 id="AuthorizeNetAIM_Sandbox_Test">AuthorizeNetAIM_Sandbox_</h2><ul><li>Auth capture</li><li>Auth capture alternate</li><li>Auth capture short</li><li>Auth capture partial</li><li>Auth capture short no verify</li><li>Aim response fields</li><li>Void</li><li>Void short</li><li>Auth capture e check sandbox</li><li>Amex</li><li>Discover</li><li>Visa</li><li>Auth only</li><li>Auth capture void</li><li>Advanced a i m</li><li>Auth capture custom fields</li><li>Encap character</li><li>Auth capture set multiple custom fields</li><li>Invalid merchant credentials</li><li>Invalid credit card</li><li>Error</li><li>Multiple line items</li><li>All fields long method</li><li>Response methods</li><li>Set bad field</li></ul><h2 id="AuthorizeNetAIM_Live_Test">AuthorizeNetAIM_Live_</h2><ul><li>Auth capture set e check method</li><li>Auth capture e check</li><li>Auth capture live server test request</li><li>Auth capture live server</li><li>Invalid credentials</li></ul><h2 id="AuthorizeNetARB_Test">AuthorizeNetARB_</h2><ul><li><strike>All methods</strike></li><li>Create subscription long</li><li>Create subscription e check</li></ul><h2 id="AuthorizeNetCIM_Test">AuthorizeNetCIM_</h2><ul><li>Delete all customer profiles</li><li>X path</li><li>Create customer profile</li><li>Get customer profile</li><li>Create customer profile with validation mode</li><li>Update split tender group</li><li>All</li><li>Get customer profile ids</li></ul><h2 id="AuthorizeNetCP_Test">AuthorizeNetCP_</h2><ul><li>Auth capture</li><li>Auth capture track 1</li><li>Auth capture track</li><li>Auth capture track 2 error</li><li>Response fields</li><li>Xml response</li><li>Xml response failure</li></ul><h2 id="AuthorizeNetDPM_Test">AuthorizeNetDPM_</h2><ul><li>Generate fingerprint</li><li>Get credit card form</li><li>Relay response url</li></ul><h2 id="AuthorizeNetSIM_Test">AuthorizeNetSIM_</h2><ul><li>Generate hash</li><li>Amount</li><li>Is auth net</li><li>Is error</li></ul><h2 id="AuthorizeNetTD_Test">AuthorizeNetTD_</h2><ul><li>Get settled batch list</li><li>Get settled batch list include statistics</li><li>Get settled batch list for month</li><li>Get transactions for day</li><li>Get transaction list</li><li>Get transaction details</li></ul></body></html>
\ No newline at end of file
diff --git a/css/glm-donate-admin.css b/css/glm-donate-admin.css
new file mode 100755 (executable)
index 0000000..254f0ac
--- /dev/null
@@ -0,0 +1,302 @@
+/*\r
+* GLM-donate - Default Stylesheet\r
+*/\r
+\r
+h1.donate-title {\r
+    color:#ddd;\r
+    margin-bottom:20px;\r
+}\r
+\r
+#glm-donate-tab-settings th {\r
+    width:280px;\r
+}\r
+\r
+#glm-donate-tab-settings ul {\r
+    padding-left:20px;\r
+}\r
+\r
+#glm-donate-tab-settings li {\r
+    list-style: disc;\r
+    list-style-type:none;\r
+}\r
+\r
+/* jQuery Tabs */\r
+\r
+ul#glm-donate-tabs-nav {\r
+    position:relative;\r
+    margin-bottom:10px;\r
+    height:41px;\r
+    overflow:visible;\r
+    border-bottom:1px solid #ddd\r
+}\r
+\r
+ul#glm-donate-tabs-nav li {\r
+    text-align:center;\r
+    position:relative;\r
+    display:block;\r
+    float:left;\r
+    width:130px;\r
+    height:40px;\r
+    margin:0 10px 0 2px;\r
+    border-top:1px solid #cccccc;\r
+    border-left:1px solid #cccccc;\r
+    border-right:1px solid #cccccc;\r
+    background: #f2f2f2;\r
+    overflow:visible;\r
+    -moz-border-radius-topleft: 7px;\r
+    -moz-border-radius-topright: 0px;\r
+    -webkit-border-radius: 7px 7px 0px 0px;\r
+    border-radius: 7px 7px 0px 0px;\r
+    opacity:0.8;\r
+}\r
+\r
+ul#glm-donate-tabs-nav li.ui-state-active,\r
+ul#glm-donate-tabs-nav li:hover {\r
+    background: #fff;\r
+    opacity:1;\r
+}\r
+\r
+ul#glm-donate-tabs-nav li.ui-state-active a:before,\r
+ul#glm-donate-tabs-nav li:hover a:before {\r
+    position: absolute;\r
+    content: " ";\r
+    top:0;\r
+    bottom:-1px;\r
+    left:0;\r
+    right:0;\r
+    border-bottom:1px solid #fff;\r
+    z-index:200;\r
+}\r
+\r
+ul#glm-donate-tabs-nav li a {\r
+    position:absolute;\r
+    top:0;\r
+    left:0;\r
+    color:#777;\r
+    display:block;\r
+    padding:10px 15px;\r
+    height:20px;\r
+    line-height:20px;\r
+    width:100px;\r
+    text-decoration: none;\r
+    text-shadow: 0 1px 1px rgba(255,255,255,0.8);\r
+    text-transform:uppercase;\r
+    overflow:visible;\r
+}\r
+\r
+ul#glm-donate-tabs-nav li.ui-state-active {\r
+    background: #fff;\r
+}\r
+\r
+ul#glm-donate-tabs-nav li.ui-state-active a {\r
+    color:#555;\r
+}\r
+\r
+/* Transactions Table */\r
+\r
+table.glm-donate-projects,\r
+table.glm-donate-transactions {\r
+    margin-top:20px;\r
+    border-spacing: 0px;\r
+    width:95%;\r
+}\r
+\r
+table.glm-donate-projects thead,\r
+table.glm-donate-transactions thead {\r
+    position:relative;\r
+    background-color:#f2f2f2;\r
+}\r
+\r
+table.glm-donate-projects tr.glm-donate-absolute,\r
+table.glm-donate-transactions tr.glm-donate-absolute {\r
+    position:absolute;\r
+    z-index:0;\r
+    width:95%;\r
+    height:38px;\r
+}\r
+\r
+table.glm-donate-projects tr.glm-donate-absolute:before,\r
+table.glm-donate-transactions tr.glm-donate-absolute:before {\r
+    content: '';\r
+    position:absolute;\r
+    z-index:2;\r
+    display:block;\r
+    top:1px;\r
+    left:0;\r
+    bottom:1px;\r
+    right:0;\r
+    -webkit-border-radius: 7px;\r
+    -moz-border-radius: 7px;\r
+    border-radius: 7px;\r
+    -webkit-box-shadow: inset 0px 1px 1px 0px rgba(0, 0, 0, 0.15),inset 0px 2px 3px 1px rgba(0, 0, 0, 0.1);\r
+    -moz-box-shadow: inset 0px 1px 1px 0px rgba(0, 0, 0, 0.15),inset 0px 2px 3px 1px rgba(0, 0, 0, 0.1);\r
+    box-shadow: inset 0px 1px 1px 0px rgba(0, 0, 0, 0.15),inset 0px 2px 3px 1px rgba(0, 0, 0, 0.1);\r
+}\r
+\r
+table.glm-donate-projects th,\r
+table.glm-donate-transactions th {\r
+    border-top: 1px solid #fff;\r
+    border-bottom: 1px solid #ddd;\r
+}\r
+\r
+table.glm-donate-projects th,\r
+table.glm-donate-transactions th {\r
+    text-align:left;\r
+    color:#777;\r
+    text-shadow: 0 1px 0px #ffffff;\r
+}\r
+\r
+\r
+table.glm-donate-transactions td img.avatar {\r
+    float:left;\r
+    -webkit-border-radius: 3px;\r
+    -moz-border-radius: 3px;\r
+    border-radius: 3px;\r
+}\r
+\r
+table.glm-donate-transactions td span.donate-name {\r
+    line-height:30px;\r
+    padding-left:15px;\r
+}\r
+\r
+table.glm-donate-transactions td.donate-comment {\r
+    font-style:italic;\r
+    font-family:serif;\r
+    color:#777;\r
+    font-size:14px;\r
+    line-height:14px;\r
+}\r
+\r
+table.glm-donate-transactions span.donate-netamount {\r
+    color:#07DE00;\r
+    font-weight:bold;\r
+    font-size:14px;\r
+}\r
+\r
+table.glm-donate-projects th:first-child,\r
+table.glm-donate-transactions th:first-child {\r
+    -moz-border-radius-topleft: 7px;\r
+    -moz-border-radius-topright: 0px;\r
+    -moz-border-radius-bottomright: 0px;\r
+    -moz-border-radius-bottomleft: 7px;\r
+    -webkit-border-radius: 7px 0px 0px 7px;\r
+    border-radius: 7px 0px 0px 7px;\r
+}\r
+\r
+table.glm-donate-projects th:last-child,\r
+table.glm-donate-transactions th:last-child {\r
+    -moz-border-radius-topleft: 0px;\r
+    -moz-border-radius-topright: 7px;\r
+    -moz-border-radius-bottomright: 7px;\r
+    -moz-border-radius-bottomleft: 0px;\r
+    -webkit-border-radius: 0px 7px 7px 0px;\r
+    border-radius: 0px 7px 7px 0px;\r
+}\r
+\r
+table.glm-donate-projects tr td,\r
+table.glm-donate-transactions tr td {\r
+    border-bottom: 1px solid #ddd;\r
+}\r
+\r
+table.glm-donate-projects tr th,\r
+table.glm-donate-projects tr td,\r
+table.glm-donate-transactions tr th,\r
+table.glm-donate-transactions tr td {\r
+    padding: 10px 15px;\r
+}\r
+\r
+.dot-donate-live {\r
+    margin-right:10px;\r
+    position:relative;\r
+    top:2px;\r
+    display:inline-block;\r
+    background:#07DE00;\r
+    width:12px;\r
+    height:12px;\r
+    -webkit-border-radius: 6px;\r
+    -moz-border-radius: 6px;\r
+    border-radius: 6px;\r
+    -webkit-box-shadow: inset 0px 3px 2px 1px rgba(255, 255, 255, 0.2);\r
+    -moz-box-shadow: inset 0px 3px 2px 1px rgba(255, 255, 255, 0.2);\r
+    box-shadow: inset 0px 5px 3px 1px rgba(255, 255, 255, 0.2);\r
+}\r
+\r
+.dot-donate-public {\r
+    margin-right:10px;\r
+    position:relative;\r
+    top:2px;\r
+    display:inline-block;\r
+    background:#0068DE;\r
+    width:12px;\r
+    height:12px;\r
+    -webkit-border-radius: 6px;\r
+    -moz-border-radius: 6px;\r
+    border-radius: 6px;\r
+    -webkit-box-shadow: inset 0px 3px 2px 1px rgba(255, 255, 255, 0.2);\r
+    -moz-box-shadow: inset 0px 3px 2px 1px rgba(255, 255, 255, 0.2);\r
+    box-shadow: inset 0px 5px 3px 1px rgba(255, 255, 255, 0.2);\r
+}\r
+\r
+.dot-donate-test {\r
+    margin-right:10px;\r
+    position:relative;\r
+    top:2px;\r
+    display:inline-block;\r
+    background:#ddd;\r
+    width:12px;\r
+    height:12px;\r
+    -webkit-border-radius: 6px;\r
+    -moz-border-radius: 6px;\r
+    border-radius: 6px;\r
+    -webkit-box-shadow: inset 0px 2px 2px 1px rgba(0,0,0, 0.1);\r
+    -moz-box-shadow: inset 0px 2px 2px 1px rgba(0,0,0, 0.1);\r
+    box-shadow: inset 0px 2px 3px 1px rgba(0,0,0, 0.1);\r
+}\r
+\r
+.progress-donate-wrap {\r
+    position:relative;\r
+    display:block;\r
+    background:#ddd;\r
+    width:100px;\r
+    height:16px;\r
+    -webkit-border-radius: 8px;\r
+    -moz-border-radius: 8px;\r
+    border-radius: 8px;\r
+    -webkit-box-shadow: inset 0px 2px 2px 1px rgba(0,0,0, 0.1);\r
+    -moz-box-shadow: inset 0px 2px 2px 1px rgba(0,0,0, 0.1);\r
+    box-shadow: inset 0px 2px 3px 1px rgba(0,0,0, 0.1);\r
+}\r
+\r
+.progress-donate-value {\r
+    margin-right:10px;\r
+    position:absolute;\r
+    z-index:50;\r
+    top:2px;\r
+    left:2px;\r
+    display:block;\r
+    background:#0068DE;\r
+    height:12px;\r
+    -webkit-border-radius: 6px;\r
+    -moz-border-radius: 6px;\r
+    border-radius: 6px;\r
+    -webkit-box-shadow: inset 0px 3px 2px 1px rgba(255, 255, 255, 0.2);\r
+    -moz-box-shadow: inset 0px 3px 2px 1px rgba(255, 255, 255, 0.2);\r
+    box-shadow: inset 0px 5px 3px 1px rgba(255, 255, 255, 0.2);\r
+}\r
+\r
+#glm-donate-tab-transactions form.pagination {\r
+    display:inline;\r
+    float:left;\r
+    margin:10px 10px 0 0;\r
+}\r
+\r
+.glm-donate-absolute\r
+{\r
+background:linear-gradient(to top, #373737 0px, #464646 5px) repeat scroll 0 0 #464646;\r
+color:#ffffff;\r
+}\r
+\r
+.required {\r
+    color: red;\r
+    padding-left: 5px;\r
+}\r
diff --git a/css/glm-donate-display.css b/css/glm-donate-display.css
new file mode 100755 (executable)
index 0000000..1a6a946
--- /dev/null
@@ -0,0 +1,351 @@
+/*\r
+* GLM-donate - Default Stylesheet\r
+*/\r
+\r
+#glm-donate-wrap {\r
+        display:block;\r
+        padding:10px;\r
+        margin:0px;\r
+        width: 400px;\r
+        font-family: "Helvetica Neue", Helvetica, Arial, sans-serif !important;\r
+}\r
+\r
+/* Payment Form Link */\r
+\r
+#glm-donate-modal-button {\r
+        margin:20px 0;\r
+        padding: 8px 15px;\r
+        min-width:100px;\r
+        display:inline-block;\r
+        text-align:center;\r
+        font-weight: bold;\r
+        font-size: 12px;\r
+        background: #1275FF;\r
+        border: 1px solid #155FB0;\r
+        color: white;\r
+        text-decoration: none;\r
+        text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\r
+        background-image: -webkit-gradient(linear, left top, left bottom, from(#77B7FF), to(#017AFF));\r
+        background-image: -moz-linear-gradient(top, #77B7FF, #017AFF);\r
+        background-image: -o-linear-gradient(top, #77B7FF, #017AFF);\r
+        -webkit-box-shadow: inset 0 1px 0 #98c9ff;\r
+        -moz-box-shadow: inset 0 1px 0 #98c9ff;\r
+        box-shadow: inset 0 1px 0 #98c9ff;\r
+        -o-border-radius: 4px;\r
+        -moz-border-radius: 4px;\r
+        -webkit-border-radius: 4px;\r
+        border-radius: 4px;\r
+        cursor: pointer; cursor: hand;\r
+}\r
+\r
+#glm-donate-types {\r
+        display:block;\r
+        width:256px;\r
+        height:18px;\r
+        background: url('../images/types.png') no-repeat top left;\r
+        margin-bottom:20px;\r
+}\r
+\r
+/* Payment Form Elements */\r
+\r
+form#glm-donate-payment-form {\r
+         display:block;\r
+}\r
+\r
+.donate-row-right,\r
+.donate-row-left{width:50%;}\r
+\r
+form#glm-donate-payment-form h2.donate-header {\r
+        padding:10px;\r
+        color:#fff;\r
+        font-size:14px;\r
+        font-weight:bold;\r
+        text-shadow: 0 -1px 1px rgba(0,0,0,0.3);\r
+        border-top:1px solid #268DFC;\r
+        border-bottom:1px solid #004EA2;\r
+        background:#0068DE;\r
+        margin-bottom:10px;\r
+        -moz-border-radius-topleft: 5px;\r
+        -moz-border-radius-topright: 5px;\r
+        -moz-border-radius-bottomright: 0px;\r
+        -moz-border-radius-bottomleft: 0px;\r
+        -webkit-border-radius: 5px 5px 0px 0px;\r
+        border-radius: 5px 5px 0px 0px;\r
+}\r
+\r
+form#glm-donate-payment-form p.donate-display-comment {\r
+        margin:3px 0;\r
+        font-size:12px;\r
+        color:#777;\r
+}\r
+\r
+form#glm-donate-payment-form label {\r
+        letter-spacing:1px;\r
+        text-transform:uppercase;\r
+}\r
+\r
+form#glm-donate-payment-form .donate-row {\r
+        overflow:visible;\r
+        clear:both;\r
+        padding:5px 10px;\r
+}\r
+\r
+form#glm-donate-payment-form .donate-row-left,\r
+form#glm-donate-payment-form .donate-row-right {\r
+        float:left;\r
+        overflow:auto;\r
+}\r
+\r
+form#glm-donate-payment-form .donate-submit-button {\r
+        position:relative;\r
+        margin:10px;\r
+        padding: 8px 15px;\r
+        display:block;\r
+        font-weight: bold;\r
+        font-size: 12px;\r
+        background: #1275FF;\r
+        border: 1px solid #155FB0;\r
+        color: white;\r
+        text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\r
+        background-image: -webkit-gradient(linear, left top, left bottom, from(#77B7FF), to(#017AFF));\r
+        background-image: -moz-linear-gradient(top, #77B7FF, #017AFF);\r
+        background-image: -o-linear-gradient(top, #77B7FF, #017AFF);\r
+        -webkit-box-shadow: inset 0 1px 0 #98c9ff;\r
+        -moz-box-shadow: inset 0 1px 0 #98c9ff;\r
+        box-shadow: inset 0 1px 0 #98c9ff;\r
+        -o-border-radius: 4px;\r
+        -moz-border-radius: 4px;\r
+        -webkit-border-radius: 4px;\r
+        border-radius: 4px;\r
+        cursor: pointer; cursor: hand;\r
+}\r
+\r
+.donate-spinner {\r
+        display:none;\r
+        margin:10px;\r
+        padding: 8px 15px;\r
+        height:15px;\r
+        width:70px;\r
+        content:" ";\r
+        background: url('../images/spinner.gif') no-repeat 50% 50%;\r
+        border: 1px solid #afd5ff;\r
+        -o-border-radius: 4px;\r
+        -moz-border-radius: 4px;\r
+        -webkit-border-radius: 4px;\r
+}\r
+\r
+.donate-valid {\r
+        color: #638731 !important;\r
+        background-color:#d9fba8 !important;\r
+}\r
+\r
+.donate-invalid {\r
+        color:#873d31 !important;\r
+        background-color:#fbbcb1 !important;\r
+}\r
+\r
+.glm-donate-poweredby {\r
+        font-family: "Helvetica Neue", Helvetica, Arial, sans-serif !important;\r
+        color:#777;\r
+        font-size:10px;\r
+        padding:0 20px;\r
+}\r
+\r
+.glm-donate-poweredby a {\r
+        color:#0068DE;\r
+        text-decoration: none;\r
+}\r
+\r
+/* Response Styling */\r
+\r
+.glm-donate-notification {\r
+        font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;\r
+        font-size: 12px;\r
+        width:360px;\r
+        padding:10px;\r
+        margin:10px 0 10px 10px;\r
+        -webkit-border-radius: 5px;\r
+        -moz-border-radius: 5px;\r
+        border-radius: 5px;\r
+}\r
+\r
+.glm-donate-currency {\r
+        text-transform: uppercase;\r
+}\r
+\r
+.glm-donate-success {\r
+        color:#345607;\r
+        background-color:#D1F2A5;\r
+        text-shadow:0 1px 1px rgba(255,255,255,0.2);\r
+}\r
+\r
+.glm-donate-failure {\r
+        color:#4E1E0F;\r
+        background-color:#FF9F80;\r
+        text-shadow:0 1px 1px rgba(255,255,255,0.1);\r
+}\r
+\r
+/* Form Styling */\r
+\r
+\r
+form#glm-donate-payment-form .glm-donate-details label {\r
+        color:#777;\r
+}\r
+\r
+form#glm-donate-payment-form .glm-donate-card label {\r
+        color:#0068DE;\r
+}\r
+\r
+form#glm-donate-payment-form .glm-donate-card input {\r
+        -webkit-border-radius: 5px;\r
+        -moz-border-radius: 5px;\r
+        border-radius: 5px;\r
+}\r
+\r
+form#glm-donate-payment-form .glm-donate-card input.card-cvc {\r
+        width:120px;\r
+}\r
+\r
+form#glm-donate-payment-form label,\r
+form#glm-donate-payment-form input,\r
+form#glm-donate-payment-form select,\r
+form#glm-donate-payment-form textarea {\r
+        font-family: "Helvetica Neue", Helvetica, Arial, sans-serif !important;\r
+        font-size: 14px !important;\r
+        font-weight: normal;\r
+        line-height: normal;\r
+        margin-bottom: 3px !important;\r
+}\r
+form#glm-donate-payment-form textarea,\r
+form#glm-donate-payment-form input {\r
+        position:relative;\r
+        width:338px;\r
+        background-color:#fff;\r
+}\r
+\r
+input.glm-donate-name {background: url('../images/h-name.png') no-repeat 8px 8px;}\r
+input.glm-donate-email {background: url('../images/h-email.png') no-repeat 8px 10px;}\r
+textarea.glm-donate-comment {background: url('../images/h-comment.png') no-repeat 8px 10px;}\r
+input.glm-donate-card-amount {background: url('../images/h-amount.png') no-repeat 8px 8px;}\r
+input.card-number {background: url('../images/h-card.png') no-repeat 8px 10px;}\r
+input.card-cvc {background: url('../images/h-cvc.png') no-repeat 8px 10px;}\r
+\r
+form#glm-donate-payment-form select {\r
+        cursor: pointer;\r
+}\r
+\r
+input[type=checkbox], input[type=radio] {\r
+        cursor: pointer;\r
+}\r
+\r
+.donate-expiry {\r
+        font-size:12px;\r
+        letter-spacing:1px;\r
+        color:#bbb;\r
+        text-shadow:0 1px 0 #fff;\r
+}\r
+\r
+form#glm-donate-payment-form select {\r
+        margin-top:0px !important;\r
+        display:block;\r
+        -webkit-appearance: none;\r
+        -moz-appearance: none;\r
+        appearance: none;\r
+        padding: 2px 7px 2px 7px !important;\r
+        height: auto !important;\r
+        text-shadow: 0 1px 0 white;\r
+        background-image: -webkit-gradient(linear, left top, left bottom, from(#F9F9F9), to(#E8E8E8));\r
+        background-image: -moz-linear-gradient(top, #F9F9F9, #E8E8E8);\r
+        background-image: -o-linear-gradient(top, #F9F9F9, #E8E8E8);\r
+        -webkit-box-shadow: inset 0 1px 0 white;\r
+        -moz-box-shadow: inset 0 1px 0 white;\r
+        box-shadow: inset 0 1px 0 white;\r
+}\r
+\r
+form#glm-donate-payment-form select:hover {\r
+        background-image: -webkit-gradient(linear, left top, left bottom, from(#E8E8E8), to(#F9F9F9));\r
+        background-image: -moz-linear-gradient(top, #E8E8E8, #F9F9F9);\r
+        background-image: -o-linear-gradient(top, #E8E8E8, #F9F9F9);\r
+}\r
+\r
+form#glm-donate-payment-form input,\r
+form#glm-donate-payment-form textarea,\r
+form#glm-donate-payment-form select,\r
+form#glm-donate-payment-form .uneditable-input {\r
+        display: inline-block;\r
+        height: 18px;\r
+        padding: 8px 8px 8px 32px;\r
+        font-size: 13px;\r
+        line-height: 18px;\r
+        color: #808080;\r
+        border: 1px solid #ccc;\r
+        -webkit-border-radius: 3px;\r
+        -moz-border-radius: 3px;\r
+        border-radius: 3px;\r
+}\r
+\r
+form#glm-donate-payment-form input[type=checkbox], form#glm-donate-payment-form input[type=radio] {\r
+        width: auto;\r
+        height: auto;\r
+        padding: 0;\r
+        margin: 3px 0;\r
+        *margin-top: 0;\r
+        /* IE6-7 */\r
+\r
+        line-height: normal;\r
+        border: none;\r
+}\r
+\r
+form#glm-donate-payment-form select {\r
+        height: 27px;\r
+        line-height: 27px;\r
+}\r
+\r
+form#glm-donate-payment-form input[type=button], form#glm-donate-payment-form input[type=reset], form#glm-donate-payment-form input[type=submit] {\r
+        width: auto;\r
+        height: auto;\r
+}\r
+\r
+form#glm-donate-payment-form input[type=checkbox] {\r
+        position:relative;\r
+        top:2px;\r
+        margin-right:5px;\r
+}\r
+\r
+form#glm-donate-payment-form select[multiple] {\r
+        height: inherit;\r
+        background-color: #ffffff;\r
+}\r
+form#glm-donate-payment-form textarea {\r
+        height: auto;\r
+}\r
+\r
+:-moz-placeholder {\r
+        color: #bfbfbf;\r
+}\r
+::-webkit-input-placeholder {\r
+        color: #bfbfbf;\r
+}\r
+form#glm-donate-payment-form input, form#glm-donate-payment-form textarea {\r
+        -webkit-transition: border linear 0.2s, box-shadow linear 0.2s;\r
+        -moz-transition: border linear 0.2s, box-shadow linear 0.2s;\r
+        -ms-transition: border linear 0.2s, box-shadow linear 0.2s;\r
+        -o-transition: border linear 0.2s, box-shadow linear 0.2s;\r
+        transition: border linear 0.2s, box-shadow linear 0.2s;\r
+        -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1);\r
+        -moz-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1);\r
+        box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1);\r
+}\r
+form#glm-donate-payment-form input:focus, form#glm-donate-payment-form textarea:focus {\r
+        outline: 0;\r
+        border-color: rgba(0, 104, 222, 0.8);\r
+        -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(0, 104, 222, 0.6);\r
+        -moz-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(0, 104, 222, 0.6);\r
+        box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(0, 104, 222, 0.6);\r
+}\r
+input[type=file]:focus, input[type=checkbox]:focus, select:focus {\r
+        -webkit-box-shadow: none;\r
+        -moz-box-shadow: none;\r
+        box-shadow: none;\r
+        outline: 1px dotted #666;\r
+}\r
diff --git a/css/glm-donate-thickbox.css b/css/glm-donate-thickbox.css
new file mode 100755 (executable)
index 0000000..171f7bb
--- /dev/null
@@ -0,0 +1,187 @@
+\r
+/* ----------------------------------------------------------------------------------------------------------------*/\r
+/* ---------->>> thickbox specific link and font settings <<<------------------------------------------------------*/\r
+/* ----------------------------------------------------------------------------------------------------------------*/\r
+#TB_window {\r
+       font: 12px "Helvetica Neue", Helvetica, Arial, sans-serif;\r
+       color: #333333;\r
+}\r
+\r
+#TB_secondLine {\r
+       font: 10px "Helvetica Neue", Helvetica, Arial, sans-serif;\r
+       color:#666666;\r
+}\r
+\r
+#TB_window a:link {color: #666666;}\r
+#TB_window a:visited {color: #666666;}\r
+#TB_window a:hover {color: #000;}\r
+#TB_window a:active {color: #666666;}\r
+#TB_window a:focus{color: #666666;}\r
+\r
+/* ----------------------------------------------------------------------------------------------------------------*/\r
+/* ---------->>> thickbox settings <<<-----------------------------------------------------------------------------*/\r
+/* ----------------------------------------------------------------------------------------------------------------*/\r
+#TB_overlay {\r
+       position: fixed;\r
+       z-index:10000;\r
+       top: 0px;\r
+       left: 0px;\r
+       height:100%;\r
+       width:100%;\r
+}\r
+\r
+.TB_overlayMacFFBGHack {background: url(macFFBgHack.png) repeat;}\r
+.TB_overlayBG {\r
+       background-color:#000;\r
+       -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=75)";\r
+       filter:alpha(opacity=75);\r
+       -moz-opacity: 0.75;\r
+       opacity: 0.75;\r
+}\r
+\r
+* html #TB_overlay { /* ie6 hack */\r
+     position: absolute;\r
+     height: expression(document.body.scrollHeight > document.body.offsetHeight ? document.body.scrollHeight : document.body.offsetHeight + 'px');\r
+}\r
+\r
+#TB_window {\r
+       position: fixed;\r
+       background: #ffffff;\r
+       z-index: 10002;\r
+       color:#000000;\r
+       visibility: hidden;\r
+       text-align:left;\r
+       top:50%;\r
+       left:50%;\r
+       -moz-box-shadow: rgba(0,0,0,1) 0 4px 30px;\r
+       -webkit-box-shadow: rgba(0,0,0,1) 0 4px 30px;\r
+       -khtml-box-shadow: rgba(0,0,0,1) 0 4px 30px;\r
+       box-shadow: rgba(0,0,0,1) 0 4px 30px;\r
+    -webkit-border-radius: 5px;\r
+    -moz-border-radius: 5px;\r
+    border-radius: 5px;\r
+    overflow:hidden !important;\r
+}\r
+\r
+#TB_window iframe {\r
+    overflow:hidden !important;\r
+}\r
+\r
+* html #TB_window { /* ie6 hack */\r
+    position: absolute;\r
+    margin-top: expression(0 - parseInt(this.offsetHeight / 2) + (TBWindowMargin = document.documentElement && document.documentElement.scrollTop || document.body.scrollTop) + 'px');\r
+}\r
+\r
+#TB_window img#TB_Image {\r
+       display:block;\r
+       margin: 15px 0 0 15px;\r
+       border-right: 1px solid #ccc;\r
+       border-bottom: 1px solid #ccc;\r
+       border-top: 1px solid #666;\r
+       border-left: 1px solid #666;\r
+}\r
+\r
+#TB_caption{\r
+       height:25px;\r
+       padding:7px 30px 10px 25px;\r
+       float:left;\r
+}\r
+\r
+#TB_closeWindow{\r
+       height:25px;\r
+       padding:11px 25px 10px 0;\r
+       float:right;\r
+}\r
+\r
+#TB_closeAjaxWindow{\r
+       padding:6px 10px 0;\r
+       text-align:right;\r
+       float:right;\r
+}\r
+\r
+#TB_ajaxWindowTitle{\r
+       float:left;\r
+       padding:6px 10px 0;\r
+}\r
+\r
+#TB_title{\r
+    color:#fff;\r
+    font-size:14px;\r
+    font-weight:bold;\r
+    text-shadow: 0 -1px 1px rgba(0,0,0,0.3);\r
+    background: #2F7ED6;\r
+    -webkit-box-shadow: inset 0px 1px 0px 0px #75acea;\r
+    -moz-box-shadow: inset 0px 1px 0px 0px #75acea;\r
+    box-shadow: inset 0px 1px 0px 0px #75acea;\r
+    background-image: -webkit-gradient(linear, left top, left bottom, from(#60A0E7), to(#3A7AC1));\r
+    background-image: -moz-linear-gradient(top, #60A0E7, #3A7AC1);\r
+    background-image: -o-linear-gradient(top, #60A0E7, #3A7AC1);\r
+       padding:10px;\r
+    height:27px;\r
+    -moz-border-radius-topleft: 5px;\r
+    -moz-border-radius-topright: 5px;\r
+    -moz-border-radius-bottomright: 0px;\r
+    -moz-border-radius-bottomleft: 0px;\r
+    -webkit-border-radius: 5px 5px 0px 0px;\r
+    border-radius: 5px 5px 0px 0px;\r
+}\r
+\r
+#TB_ajaxContent{\r
+       clear:both;\r
+       padding:2px 15px 15px 15px;\r
+       overflow:auto;\r
+       text-align:left;\r
+       line-height:1.4em;\r
+}\r
+\r
+#TB_ajaxContent.TB_modal{\r
+       padding:15px;\r
+}\r
+\r
+#TB_ajaxContent p{\r
+       padding:5px 0px 5px 0px;\r
+}\r
+\r
+#TB_load{\r
+       position: fixed;\r
+       display:none;\r
+       z-index:10003;\r
+       top: 50%;\r
+       left: 50%;\r
+       background-color: #E8E8E8;\r
+       border: 1px solid #555;\r
+       margin: -45px 0pt 0pt -125px;\r
+       padding: 40px 15px 15px;\r
+}\r
+\r
+* html #TB_load { /* ie6 hack */\r
+position: absolute;\r
+margin-top: expression(0 - parseInt(this.offsetHeight / 2) + (TBWindowMargin = document.documentElement && document.documentElement.scrollTop || document.body.scrollTop) + 'px');\r
+}\r
+\r
+#TB_HideSelect{\r
+       z-index:9999;\r
+       position:fixed;\r
+       top: 0;\r
+       left: 0;\r
+       background-color:#fff;\r
+       border:none;\r
+       filter:alpha(opacity=0);\r
+       -moz-opacity: 0;\r
+       opacity: 0;\r
+       height:100%;\r
+       width:100%;\r
+}\r
+\r
+* html #TB_HideSelect { /* ie6 hack */\r
+     position: absolute;\r
+     height: expression(document.body.scrollHeight > document.body.offsetHeight ? document.body.scrollHeight : document.body.offsetHeight + 'px');\r
+}\r
+\r
+#TB_iframeContent{\r
+       clear:both;\r
+       border:none;\r
+       margin-bottom:-1px;\r
+       _margin-bottom:1px;\r
+    overflow:hidden !important;\r
+}\r
diff --git a/css/glm-donate-widget.css b/css/glm-donate-widget.css
new file mode 100755 (executable)
index 0000000..9e879db
--- /dev/null
@@ -0,0 +1,62 @@
+.glm-donate-recent {\r
+\r
+}\r
+\r
+.glm-donate-recent .donate-item {\r
+    min-height:70px;\r
+    position:relative;\r
+    margin:5px 0;\r
+}\r
+\r
+.glm-donate-recent .donate-item img.avatar {\r
+    position:absolute;\r
+    top:0;\r
+    left:0;\r
+    width:50px;\r
+    height:50px;\r
+    -webkit-border-radius: 5px;\r
+    -moz-border-radius: 5px;\r
+    border-radius: 5px;\r
+}\r
+\r
+.glm-donate-recent .donate-item .donate-recent-comment {\r
+    padding-left:60px;\r
+}\r
+\r
+.glm-donate-recent .donate-item .donate-recent-content:before {\r
+    content:'\2018';\r
+}\r
+\r
+.glm-donate-recent .donate-item .donate-recent-content:after {\r
+    content:'\2019';\r
+}\r
+\r
+.glm-donate-recent .donate-item .donate-recent-name {\r
+    margin: 0 0 0.5em 0;\r
+    font-weight:bold;\r
+}\r
+\r
+.glm-donate-recent .donate-item .donate-recent-content {\r
+    color:#777;\r
+}\r
+\r
+\r
+.donate_btn_submit\r
+{\r
+height: 28px;\r
+float: none;\r
+padding: 0 22px;\r
+margin: 0 28px 0 218px;\r
+background: #608e3a;\r
+border: none;\r
+line-height: 28px;\r
+font-size: 14px;\r
+color: #ffffff;\r
+font-family: 'proxima-nova';\r
+font-weight: bold;\r
+border-radius: 15px;\r
+-webkit-border-radius: 15px;\r
+-moz-border-radius: 15px;\r
+}\r
+.donate_btn_submit:hover { background:#4e7a29; }\r
+\r
diff --git a/includes/donate-display.php b/includes/donate-display.php
new file mode 100755 (executable)
index 0000000..b079fca
--- /dev/null
@@ -0,0 +1,1391 @@
+<?php ob_start();\r
+/**\r
+ * Display Donate Form\r
+ *\r
+ * @return string Donate Form\r
+ *\r
+ * @since 1.0\r
+ *\r
+*/\r
+       global $wpdb;\r
+    if(isset($_REQUEST['action']))\r
+    {\r
+    if($_REQUEST['action']=='submitdonate')\r
+    {          \r
+               $first_name = $_REQUEST['first_name'];\r
+               $last_name = $_REQUEST['last_name'];\r
+               $organization = $_REQUEST['organization'];\r
+               $address = $_REQUEST['address'];\r
+               $city = $_REQUEST['city'];\r
+               $country = $_REQUEST['country'];\r
+               $state = $_REQUEST['state'];\r
+               $zip = $_REQUEST['zip'];\r
+               $phone = $_REQUEST['phone'];\r
+               $email = $_REQUEST['email'];            \r
+               $donation_type = $_REQUEST['donation_type'];\r
+               $r_frequency = $_REQUEST['r_frequency'];\r
+               $r_times = $_REQUEST['r_times'];\r
+               $amount = $_REQUEST['amount'];\r
+                $invoice_num = $_REQUEST['invoice_num'];\r
+               $card_type = $_REQUEST['card_type'];\r
+               $x_card_num = $_REQUEST['x_card_num'];\r
+               $exp_month = $_REQUEST['exp_month'];\r
+               $exp_year = $_REQUEST['exp_year'];\r
+               $x_card_code = $_REQUEST['x_card_code'];\r
+               $comment = $_REQUEST['comment'];\r
+               $payment_method = $_REQUEST['payment_method'];\r
+               \r
+               // Adjust this to point to the Authorize.Net PHP SDK\r
+               include dirname(__FILE__) .'/../anet_php_sdk/AuthorizeNet.php';\r
+\r
+               $METHOD_TO_USE = "AIM";\r
+               $mysetting = $wpdb->get_results( "SELECT * FROM ".$wpdb->prefix."donate_setting" );\r
+               define("AUTHORIZENET_API_LOGIN_ID",$mysetting[0]->api_login);    // Add your API LOGIN ID\r
+               define("AUTHORIZENET_TRANSACTION_KEY",$mysetting[0]->key); // Add your API transaction key\r
+               if($mysetting[0]->mod==0){\r
+               define("AUTHORIZENET_SANDBOX",true);       // Set to false to test against production\r
+               define("TEST_REQUEST", true);           // You may want to set to true if testing against production\r
+               }\r
+               else\r
+               {\r
+                       define("AUTHORIZENET_SANDBOX",false);       // Set to false to test against production\r
+                       define("TEST_REQUEST", false);  \r
+               }\r
+               // You only need to adjust the two variables below if testing DPM\r
+               define("AUTHORIZENET_MD5_SETTING","");                // Add your MD5 Setting.\r
+\r
+               $REQUEST = $_REQUEST;\r
+               if($paypalp = authorizepayment($METHOD_TO_USE,$REQUEST,$address1,$city,$state,$country,$zipcode,$emailaddress,$plan))\r
+               {\r
+                       $sql = "INSERT INTO `".$wpdb->prefix."donate` (`first_name`, `last_name`, `organization`, `address`, `city`, `country`, `state`, `zip`, `phone`, `email`, `donation_type`, `amount`, `invoice_num`,`comment`, `status`,`date`) \r
+                       VALUES ('".$first_name."', '".$last_name."','".$organization."','".$address."','".$city."','".$country."','".$state."','".$zip."','".$phone."','".$email."','".$donation_type."','".$amount."','".$invoice_num."','".$comment."', '1',now());";\r
+                       $wpdb->query($sql);\r
+                       \r
+                       $post = get_post($post->ID);\r
+                       $slug = $post->post_name;\r
+                       \r
+                       header("Location:".site_url().$_SERVER['REQUEST_URI']);\r
+                       exit;\r
+               }\r
+               else\r
+               {\r
+                       header("Location:".site_url().$_SERVER['REQUEST_URI']);\r
+                       exit;\r
+               }\r
+               \r
+       }\r
+       }\r
+\r
+function wp_donate_form() {\r
+    ob_start();\r
+        global $wpdb;\r
+    ?>\r
+       <form method="post" name="donate_form" id="donate_form" action="<?php echo site_url().$_SERVER['REQUEST_URI'];?>" autocomplete="off">\r
+                       <input type="hidden" name="action" value="submitdonate" />\r
+                       <table width="100%" cellspacing="3" cellpadding="3">\r
+                               <tr><td style="color:red;" colspan="4"><?php echo $_SESSION['donate_msg']; $_SESSION['donate_msg']='';?></td></tr>\r
+                               <tr>\r
+                                       <td colspan="2" class="msg">\r
+                                               <p>For your convenience, you can pay your Invoices using our secured \r
+                                                    online credit card processing form.  If you would like to have your \r
+                                                    Invoice automatically paid monthly via credit card, please call \r
+                                                    the office and we can set that up for you.\r
+                                                </p>\r
+                                                <p>\r
+                                                    * denotes a required field.\r
+                                                </p>\r
+                                       </td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td colspan="2" class="heading"><b>Billing information</b></td>\r
+                               </tr>                                   \r
+                               <tr>                    \r
+                                       <td class="title_cell">First name<span class="required">*</span></td>\r
+                                       <td class="field_cell">\r
+                                               <input type="text" class="inputbox" name="first_name" id="first_name" value="" size="25" />\r
+                                       </td>\r
+                               </tr>\r
+                               <tr>                    \r
+                                       <td class="title_cell">Last name<span class="required">*</span></td>\r
+                                       <td class="field_cell">\r
+                                               <input type="text" class="inputbox" name="last_name" value="" size="25" />\r
+                                       </td>\r
+                               </tr>\r
+                               <tr>                    \r
+                                       <td class="title_cell">Organization<span class="required">*</span></td>\r
+                                       <td class="field_cell">\r
+                                               <input type="text" class="inputbox" name="organization" value="" size="30" />\r
+                                       </td>\r
+                               </tr>\r
+                               <tr>                    \r
+                                       <td class="title_cell">Address<span class="required">*</span></td>\r
+                                       <td class="field_cell">\r
+                                               <input type="text" class="inputbox" name="address" value="" size="50" />\r
+                                       </td>\r
+                               </tr>   \r
+                               <tr>                    \r
+                                       <td class="title_cell">City<span class="required">*</span></td>\r
+                                       <td class="field_cell">\r
+                                               <input type="text" class="inputbox" name="city" value="" size="15" />\r
+                                       </td>\r
+                               </tr>           \r
+                               <tr style="display: none">                      \r
+                                       <td class="title_cell">Country<span class="required">*</span></td>\r
+                                       <td class="field_cell">\r
+                                               <select id="country" name="country" onchange="updateStateList();" >\r
+                                               <option value="">Select country</option>\r
+                                               <option value="Afghanistan">Afghanistan</option>\r
+                                               <option value="Albania">Albania</option>\r
+                                               <option value="Algeria">Algeria</option>\r
+                                               <option value="American Samoa">American Samoa</option>\r
+                                               <option value="Andorra">Andorra</option>\r
+                                               <option value="Angola">Angola</option>\r
+                                               <option value="Anguilla">Anguilla</option>\r
+                                               <option value="Antarctica">Antarctica</option>\r
+                                               <option value="Antigua and Barbuda">Antigua and Barbuda</option>\r
+                                               <option value="Argentina">Argentina</option>\r
+                                               <option value="Armenia">Armenia</option>\r
+                                               <option value="Aruba">Aruba</option>\r
+                                               <option value="Australia">Australia</option>\r
+                                               <option value="Austria">Austria</option>\r
+                                               <option value="Azerbaijan">Azerbaijan</option>\r
+                                               <option value="Bahamas">Bahamas</option>\r
+                                               <option value="Bahrain">Bahrain</option>\r
+                                               <option value="Bangladesh">Bangladesh</option>\r
+                                               <option value="Barbados">Barbados</option>\r
+                                               <option value="Belarus">Belarus</option>\r
+                                               <option value="Belgium">Belgium</option>\r
+                                               <option value="Belize">Belize</option>\r
+                                               <option value="Benin">Benin</option>\r
+                                               <option value="Bermuda">Bermuda</option>\r
+                                               <option value="Bhutan">Bhutan</option>\r
+                                               <option value="Bolivia">Bolivia</option>\r
+                                               <option value="Bosnia and Herzegowina">Bosnia and Herzegowina</option>\r
+                                               <option value="Botswana">Botswana</option>\r
+                                               <option value="Bouvet Island">Bouvet Island</option>\r
+                                               <option value="Brazil">Brazil</option>\r
+                                               <option value="British Indian Ocean Territory">British Indian Ocean Territory</option>\r
+                                               <option value="Brunei Darussalam">Brunei Darussalam</option>\r
+                                               <option value="Bulgaria">Bulgaria</option>\r
+                                               <option value="Burkina Faso">Burkina Faso</option>\r
+                                               <option value="Burundi">Burundi</option>\r
+                                               <option value="Cambodia">Cambodia</option>\r
+                                               <option value="Cameroon">Cameroon</option>\r
+                                               <option value="Canada">Canada</option>\r
+                                               <option value="Canary Islands">Canary Islands</option>\r
+                                               <option value="Cape Verde">Cape Verde</option>\r
+                                               <option value="Cayman Islands">Cayman Islands</option>\r
+                                               <option value="Central African Republic">Central African Republic</option>\r
+                                               <option value="Chad">Chad</option>\r
+                                               <option value="Chile">Chile</option>\r
+                                               <option value="China">China</option>\r
+                                               <option value="Christmas Island">Christmas Island</option>\r
+                                               <option value="Cocos (Keeling) Islands">Cocos (Keeling) Islands</option>\r
+                                               <option value="Colombia">Colombia</option>\r
+                                               <option value="Comoros">Comoros</option>\r
+                                               <option value="Congo">Congo</option>\r
+                                               <option value="Cook Islands">Cook Islands</option>\r
+                                               <option value="Costa Rica">Costa Rica</option>\r
+                                               <option value="Cote D'Ivoire">Cote D'Ivoire</option>\r
+                                               <option value="Croatia">Croatia</option>\r
+                                               <option value="Cuba">Cuba</option>\r
+                                               <option value="Cyprus">Cyprus</option>\r
+                                               <option value="Czech Republic">Czech Republic</option>\r
+                                               <option value="Denmark">Denmark</option>\r
+                                               <option value="Djibouti">Djibouti</option>\r
+                                               <option value="Dominica">Dominica</option>\r
+                                               <option value="Dominican Republic">Dominican Republic</option>\r
+                                               <option value="East Timor">East Timor</option>\r
+                                               <option value="East Timor">East Timor</option>\r
+                                               <option value="Ecuador">Ecuador</option>\r
+                                               <option value="Egypt">Egypt</option>\r
+                                               <option value="El Salvador">El Salvador</option>\r
+                                               <option value="Equatorial Guinea">Equatorial Guinea</option>\r
+                                               <option value="Eritrea">Eritrea</option>\r
+                                               <option value="Estonia">Estonia</option>\r
+                                               <option value="Ethiopia">Ethiopia</option>\r
+                                               <option value="Falkland Islands (Malvinas)">Falkland Islands (Malvinas)</option>\r
+                                               <option value="Faroe Islands">Faroe Islands</option>\r
+                                               <option value="Fiji">Fiji</option>\r
+                                               <option value="Finland">Finland</option>\r
+                                               <option value="France">France</option>\r
+                                               <option value="France, Metropolitan">France, Metropolitan</option>\r
+                                               <option value="French Guiana">French Guiana</option>\r
+                                               <option value="French Polynesia">French Polynesia</option>\r
+                                               <option value="French Southern Territories">French Southern Territories</option>\r
+                                               <option value="Gabon">Gabon</option>\r
+                                               <option value="Gambia">Gambia</option>\r
+                                               <option value="Georgia">Georgia</option>\r
+                                               <option value="Germany">Germany</option>\r
+                                               <option value="Ghana">Ghana</option>\r
+                                               <option value="Gibraltar">Gibraltar</option>\r
+                                               <option value="Greece">Greece</option>\r
+                                               <option value="Greenland">Greenland</option>\r
+                                               <option value="Grenada">Grenada</option>\r
+                                               <option value="Guadeloupe">Guadeloupe</option>\r
+                                               <option value="Guam">Guam</option>\r
+                                               <option value="Guatemala">Guatemala</option>\r
+                                               <option value="Guinea">Guinea</option>\r
+                                               <option value="Guinea-bissau">Guinea-bissau</option>\r
+                                               <option value="Guyana">Guyana</option>\r
+                                               <option value="Haiti">Haiti</option>\r
+                                               <option value="Heard and Mc Donald Islands">Heard and Mc Donald Islands</option>\r
+                                               <option value="Honduras">Honduras</option>\r
+                                               <option value="Hong Kong">Hong Kong</option>\r
+                                               <option value="Hungary">Hungary</option>\r
+                                               <option value="Iceland">Iceland</option>\r
+                                               <option value="India">India</option>\r
+                                               <option value="Indonesia">Indonesia</option>\r
+                                               <option value="Iran (Islamic Republic of)">Iran (Islamic Republic of)</option>\r
+                                               <option value="Iraq">Iraq</option>\r
+                                               <option value="Ireland">Ireland</option>\r
+                                               <option value="Israel">Israel</option>\r
+                                               <option value="Italy">Italy</option>\r
+                                               <option value="Jamaica">Jamaica</option>\r
+                                               <option value="Japan">Japan</option>\r
+                                               <option value="Jersey">Jersey</option>\r
+                                               <option value="Jordan">Jordan</option>\r
+                                               <option value="Kazakhstan">Kazakhstan</option>\r
+                                               <option value="Kenya">Kenya</option>\r
+                                               <option value="Kiribati">Kiribati</option>\r
+                                               <option value="Korea, Democratic People's Republic of">Korea, Democratic People's Republic of</option>\r
+                                               <option value="Korea, Republic of">Korea, Republic of</option>\r
+                                               <option value="Kuwait">Kuwait</option>\r
+                                               <option value="Kyrgyzstan">Kyrgyzstan</option>\r
+                                               <option value="Lao People's Democratic Republic">Lao People's Democratic Republic</option>\r
+                                               <option value="Latvia">Latvia</option>\r
+                                               <option value="Lebanon">Lebanon</option>\r
+                                               <option value="Lesotho">Lesotho</option>\r
+                                               <option value="Liberia">Liberia</option>\r
+                                               <option value="Libyan Arab Jamahiriya">Libyan Arab Jamahiriya</option>\r
+                                               <option value="Liechtenstein">Liechtenstein</option>\r
+                                               <option value="Lithuania">Lithuania</option>\r
+                                               <option value="Luxembourg">Luxembourg</option>\r
+                                               <option value="Macau">Macau</option>\r
+                                               <option value="Macedonia, The Former Yugoslav Republic of">Macedonia, The Former Yugoslav Republic of</option>\r
+                                               <option value="Madagascar">Madagascar</option>\r
+                                               <option value="Malawi">Malawi</option>\r
+                                               <option value="Malaysia">Malaysia</option>\r
+                                               <option value="Maldives">Maldives</option>\r
+                                               <option value="Mali">Mali</option>\r
+                                               <option value="Malta">Malta</option>\r
+                                               <option value="Marshall Islands">Marshall Islands</option>\r
+                                               <option value="Martinique">Martinique</option>\r
+                                               <option value="Mauritania">Mauritania</option>\r
+                                               <option value="Mauritius">Mauritius</option>\r
+                                               <option value="Mayotte">Mayotte</option>\r
+                                               <option value="Mexico">Mexico</option>\r
+                                               <option value="Micronesia, Federated States of">Micronesia, Federated States of</option>\r
+                                               <option value="Moldova, Republic of">Moldova, Republic of</option>\r
+                                               <option value="Monaco">Monaco</option>\r
+                                               <option value="Mongolia">Mongolia</option>\r
+                                               <option value="Montenegro">Montenegro</option>\r
+                                               <option value="Montserrat">Montserrat</option>\r
+                                               <option value="Morocco">Morocco</option>\r
+                                               <option value="Mozambique">Mozambique</option>\r
+                                               <option value="Myanmar">Myanmar</option>\r
+                                               <option value="Namibia">Namibia</option>\r
+                                               <option value="Nauru">Nauru</option>\r
+                                               <option value="Nepal">Nepal</option>\r
+                                               <option value="Netherlands">Netherlands</option>\r
+                                               <option value="Netherlands Antilles">Netherlands Antilles</option>\r
+                                               <option value="New Caledonia">New Caledonia</option>\r
+                                               <option value="New Zealand">New Zealand</option>\r
+                                               <option value="Nicaragua">Nicaragua</option>\r
+                                               <option value="Niger">Niger</option>\r
+                                               <option value="Nigeria">Nigeria</option>\r
+                                               <option value="Niue">Niue</option>\r
+                                               <option value="Norfolk Island">Norfolk Island</option>\r
+                                               <option value="Northern Mariana Islands">Northern Mariana Islands</option>\r
+                                               <option value="Norway">Norway</option>\r
+                                               <option value="Oman">Oman</option>\r
+                                               <option value="Pakistan">Pakistan</option>\r
+                                               <option value="Palau">Palau</option>\r
+                                               <option value="Panama">Panama</option>\r
+                                               <option value="Papua New Guinea">Papua New Guinea</option>\r
+                                               <option value="Paraguay">Paraguay</option>\r
+                                               <option value="Peru">Peru</option>\r
+                                               <option value="Philippines">Philippines</option>\r
+                                               <option value="Pitcairn">Pitcairn</option>\r
+                                               <option value="Poland">Poland</option>\r
+                                               <option value="Portugal">Portugal</option>\r
+                                               <option value="Puerto Rico">Puerto Rico</option>\r
+                                               <option value="Qatar">Qatar</option>\r
+                                               <option value="Reunion">Reunion</option>\r
+                                               <option value="Romania">Romania</option>\r
+                                               <option value="Russian Federation">Russian Federation</option>\r
+                                               <option value="Rwanda">Rwanda</option>\r
+                                               <option value="Saint Kitts and Nevis">Saint Kitts and Nevis</option>\r
+                                               <option value="Saint Lucia">Saint Lucia</option>\r
+                                               <option value="Saint Vincent and the Grenadines">Saint Vincent and the Grenadines</option>\r
+                                               <option value="Samoa">Samoa</option>\r
+                                               <option value="San Marino">San Marino</option>\r
+                                               <option value="Sao Tome and Principe">Sao Tome and Principe</option>\r
+                                               <option value="Saudi Arabia">Saudi Arabia</option>\r
+                                               <option value="Senegal">Senegal</option>\r
+                                               <option value="Serbia">Serbia</option>\r
+                                               <option value="Seychelles">Seychelles</option>\r
+                                               <option value="Sierra Leone">Sierra Leone</option>\r
+                                               <option value="Singapore">Singapore</option>\r
+                                               <option value="Slovakia (Slovak Republic)">Slovakia (Slovak Republic)</option>\r
+                                               <option value="Slovenia">Slovenia</option>\r
+                                               <option value="Solomon Islands">Solomon Islands</option>\r
+                                               <option value="Somalia">Somalia</option>\r
+                                               <option value="South Africa">South Africa</option>\r
+                                               <option value="South Georgia and the South Sandwich Islands">South Georgia and the South Sandwich Islands</option>\r
+                                               <option value="Spain">Spain</option>\r
+                                               <option value="Sri Lanka">Sri Lanka</option>\r
+                                               <option value="St. Barthelemy">St. Barthelemy</option>\r
+                                               <option value="St. Eustatius">St. Eustatius</option>\r
+                                               <option value="St. Helena">St. Helena</option>\r
+                                               <option value="St. Pierre and Miquelon">St. Pierre and Miquelon</option>\r
+                                               <option value="Sudan">Sudan</option>\r
+                                               <option value="Suriname">Suriname</option>\r
+                                               <option value="Svalbard and Jan Mayen Islands">Svalbard and Jan Mayen Islands</option>\r
+                                               <option value="Swaziland">Swaziland</option>\r
+                                               <option value="Sweden">Sweden</option>\r
+                                               <option value="Switzerland">Switzerland</option>\r
+                                               <option value="Syrian Arab Republic">Syrian Arab Republic</option>\r
+                                               <option value="Taiwan">Taiwan</option>\r
+                                               <option value="Tajikistan">Tajikistan</option>\r
+                                               <option value="Tanzania, United Republic of">Tanzania, United Republic of</option>\r
+                                               <option value="Thailand">Thailand</option>\r
+                                               <option value="The Democratic Republic of Congo">The Democratic Republic of Congo</option>\r
+                                               <option value="Togo">Togo</option>\r
+                                               <option value="Tokelau">Tokelau</option>\r
+                                               <option value="Tonga">Tonga</option>\r
+                                               <option value="Trinidad and Tobago">Trinidad and Tobago</option>\r
+                                               <option value="Tunisia">Tunisia</option>\r
+                                               <option value="Turkey">Turkey</option>\r
+                                               <option value="Turkmenistan">Turkmenistan</option>\r
+                                               <option value="Turks and Caicos Islands">Turks and Caicos Islands</option>\r
+                                               <option value="Tuvalu">Tuvalu</option>\r
+                                               <option value="Uganda">Uganda</option>\r
+                                               <option value="Ukraine">Ukraine</option>\r
+                                               <option value="United Arab Emirates">United Arab Emirates</option>\r
+                                               <option value="United Kingdom">United Kingdom</option>\r
+                                               <option value="United States" selected="selected">United States</option>\r
+                                               <option value="United States Minor Outlying Islands">United States Minor Outlying Islands</option>\r
+                                               <option value="Uruguay">Uruguay</option>\r
+                                               <option value="Uzbekistan">Uzbekistan</option>\r
+                                               <option value="Vanuatu">Vanuatu</option>\r
+                                               <option value="Vatican City State (Holy See)">Vatican City State (Holy See)</option>\r
+                                               <option value="Venezuela">Venezuela</option>\r
+                                               <option value="Viet Nam">Viet Nam</option>\r
+                                               <option value="Virgin Islands (British)">Virgin Islands (British)</option>\r
+                                               <option value="Virgin Islands (U.S.)">Virgin Islands (U.S.)</option>\r
+                                               <option value="Wallis and Futuna Islands">Wallis and Futuna Islands</option>\r
+                                               <option value="Western Sahara">Western Sahara</option>\r
+                                               <option value="Yemen">Yemen</option>\r
+                                               <option value="Zambia">Zambia</option>\r
+                                               <option value="Zimbabwe">Zimbabwe</option>\r
+                                       </select>\r
+                                       </td>\r
+                               </tr>   \r
+                               <tr>                    \r
+                                       <td class="title_cell">State<span class="required">*</span></td>\r
+                                       <td class="field_cell">\r
+                                               <select id="state" name="state" class="">\r
+                                               <option value="" selected="selected">Select State</option>\r
+                                               <option value="AK">Alaska</option>\r
+                                               <option value="AL">Alabama</option>\r
+                                               <option value="AR">Arkansas</option>\r
+                                               <option value="AZ">Arizona</option>\r
+                                               <option value="CA">California</option>\r
+                                               <option value="CO">Colorado</option>\r
+                                               <option value="CT">Connecticut</option>\r
+                                               <option value="DC">District Of Columbia</option>\r
+                                               <option value="DE">Delaware</option>\r
+                                               <option value="FL">Florida</option>\r
+                                               <option value="GA">Georgia</option>\r
+                                               <option value="HI">Hawaii</option>\r
+                                               <option value="IA">Iowa</option>\r
+                                               <option value="ID">Idaho</option>\r
+                                               <option value="IL">Illinois</option>\r
+                                               <option value="IN">Indiana</option>\r
+                                               <option value="KS">Kansas</option>\r
+                                               <option value="KY">Kentucky</option>\r
+                                               <option value="LA">Louisiana</option>\r
+                                               <option value="MA">Massachusetts</option>\r
+                                               <option value="MD">Maryland</option>\r
+                                               <option value="ME">Maine</option>\r
+                                               <option value="MI">Michigan</option>\r
+                                               <option value="MN">Minnesota</option>\r
+                                               <option value="MO">Missouri</option>\r
+                                               <option value="MS">Mississippi</option>\r
+                                               <option value="MT">Montana</option>\r
+                                               <option value="NC">North Carolina</option>\r
+                                               <option value="ND">North Dakota</option>\r
+                                               <option value="NE">Nebraska</option>\r
+                                               <option value="NH">New Hampshire</option>\r
+                                               <option value="NJ">New Jersey</option>\r
+                                               <option value="NM">New Mexico</option>\r
+                                               <option value="NV">Nevada</option>\r
+                                               <option value="NY">New York</option>\r
+                                               <option value="OH">Ohio</option>\r
+                                               <option value="OK">Oklahoma</option>\r
+                                               <option value="OR">Oregon</option>\r
+                                               <option value="PA">Pennsylvania</option>\r
+                                               <option value="RI">Rhode Island</option>\r
+                                               <option value="SC">South Carolina</option>\r
+                                               <option value="SD">South Dakota</option>\r
+                                               <option value="TN">Tennessee</option>\r
+                                               <option value="TX">Texas</option>\r
+                                               <option value="UT">Utah</option>\r
+                                               <option value="VA">Virginia</option>\r
+                                               <option value="VT">Vermont</option>\r
+                                               <option value="WA">Washington</option>\r
+                                               <option value="WI">Wisconsin</option>\r
+                                               <option value="WV">West Virginia</option>\r
+                                               <option value="WY">Wyoming</option>\r
+                                       </select>\r
+                                       </td>\r
+                               </tr>\r
+                               <tr>                    \r
+                                       <td class="title_cell">Zip<span class="required">*</span></td>\r
+                                       <td class="field_cell">\r
+                                               <input type="text" class="inputbox" name="zip" value="" size="15" />\r
+                                       </td>\r
+                               </tr>\r
+                               <tr>                    \r
+                                       <td class="title_cell">Phone<span class="required">*</span></td>\r
+                                       <td class="field_cell">\r
+                                               <input type="text" class="inputbox" name="phone" value="" size="15" />\r
+                                       </td>\r
+                               </tr>                                                                                                                                                                   \r
+                               <tr>                    \r
+                                       <td class="title_cell">Email<span class="required">*</span></td>\r
+                                       <td class="field_cell">\r
+                                               <input type="text" class="inputbox" name="email" value="" size="40" />\r
+                                       </td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td colspan="2" class="heading"><strong>Payment Information</strong></td>                       \r
+                               </tr>\r
+                               \r
+                               \r
+                               <tr>\r
+                                       <td class="title_cell" valign="top">Amount<span class="required">*</span></td>                          \r
+                                       <td id="amount_container">\r
+                                               $<div style="display: inline-block"> \r
+                                                    <input type="text" class="inputbox" name="amount" value="" onchange="deSelectRadio();" size="10" style="display: inline-block" />\r
+                                                    </div>\r
+                                       </td>\r
+                               </tr>   \r
+                                                               \r
+                               <tr id="invoice_num" >\r
+                                       <td class="title_cell">Invoice Number<span class="required">*</span></td>\r
+                                       <td class="field_cell">\r
+                                               <input type="text" name="invoice_num" class="inputbox" onkeyup="checkNumber(this)" value="" size="20" />\r
+                                       </td>\r
+                               </tr>\r
+                                 \r
+                               <tr id="tr_card_type">\r
+                                       <td class="title_cell">Card type<span class="required">*</span></td>\r
+                                       <td class="field_cell">\r
+                                               <select id="card_type" name="card_type" class="inputbox" >\r
+                                                       <option value="Visa">Visa</option>\r
+                                                       <option value="MasterCard">MasterCard</option>\r
+                                                       <option value="Discover">Discover</option>\r
+                                                       <option value="Amex">American Express</option>\r
+                                               </select>\r
+                                       </td>\r
+                               </tr>                           \r
+                               <tr id="tr_card_number" >\r
+                                       <td class="title_cell">Credit Card Number<span class="required">*</span></td>\r
+                                       <td class="field_cell">\r
+                                               <input type="text" name="x_card_num" class="inputbox" onkeyup="checkNumber(this)" value="" size="20" />\r
+                                       </td>\r
+                               </tr>\r
+                               <tr id="tr_exp_date" >\r
+                                       <td class="title_cell">Expiration Date<span class="required">*</span>\r
+                                       </td>\r
+                                       <td class="field_cell">                                 \r
+                                               <select name="exp_month" class="inputbox exp_month" >\r
+                                                       <option value="1" <?php if(date('m')=='01'){?>  selected="selected"<?php }?>>01</option>\r
+                                                       <option value="2" <?php if(date('m')=='02'){?>  selected="selected"<?php }?>>02</option>\r
+                                                       <option value="3" <?php if(date('m')=='03'){?>  selected="selected"<?php }?>>03</option>\r
+                                                       <option value="4" <?php if(date('m')=='04'){?>  selected="selected"<?php }?>>04</option>\r
+                                                       <option value="5" <?php if(date('m')=='05'){?>  selected="selected"<?php }?>>05</option>\r
+                                                       <option value="6" <?php if(date('m')=='06'){?>  selected="selected"<?php }?>>06</option>\r
+                                                       <option value="7" <?php if(date('m')=='07'){?>  selected="selected"<?php }?>>07</option>\r
+                                                       <option value="8" <?php if(date('m')=='08'){?>  selected="selected"<?php }?>>08</option>\r
+                                                       <option value="9" <?php if(date('m')=='09'){?>  selected="selected"<?php }?>>09</option>\r
+                                                       <option value="10" <?php if(date('m')=='10'){?>  selected="selected"<?php }?>>10</option>\r
+                                                       <option value="11" <?php if(date('m')=='11'){?>  selected="selected"<?php }?>>11</option>\r
+                                                       <option value="12" <?php if(date('m')=='12'){?>  selected="selected"<?php }?>>12</option>\r
+                                               </select> / \r
+                                               <select id="exp_year" name="exp_year" class="inputbox exp_month" >\r
+                                                       <?php $year = date(Y,time()); $num = 1;\r
+                                                               while ( $num <= 7 ) {\r
+                                                                       echo '<option value="' . $year .'">' . $year . '</option>';$year++; $num++;\r
+                                                               }\r
+                                                       ?>\r
+                                               </select>\r
+                                       </td>\r
+                               </tr>\r
+                               <tr id="tr_cvv_code" >\r
+                                       <td class="title_cell">Card (CVV) Code<span class="required">*</span></td>\r
+                                       <td class="field_cell">\r
+                                               <input type="text" name="x_card_code" class="inputbox" onKeyUp="checkNumber(this)" value="" size="20" />\r
+                                       </td>\r
+                               </tr>\r
+                                                               \r
+                               \r
+                               <tr>                    \r
+                                       <td class="title_cell">Comment</td>\r
+                                       <td class="field_cell">\r
+                                               <textarea rows="7" cols="50" name="comment" class="inputbox"></textarea>\r
+                                       </td>\r
+                               </tr>                                                                                                           \r
+                               <tr>\r
+                                       <td colspan="2" align="left">\r
+                                               <input type="button" class="button donate_btn_submit" name="btnSubmit" value="Submit" onclick="checkData();">\r
+                                       </td>\r
+                               </tr>   \r
+                       </table>\r
+                       <input type="hidden" name="payment_method" value="os_authnet" />\r
+                       </form>\r
+                       <script type="text/javascript">\r
+                               var recurrings = new Array();\r
+                               recurrings[1] = 1 ;\r
+                               recurrings[2] = 1 ;\r
+                               recurrings[3] = 1 ;\r
+                               recurrings[4] = 1 ;\r
+                               recurrings[5] = 1 ;\r
+                               var countryIds = new Array(); \r
+                               countryIds[0] = 1;\r
+                               countryIds[1] = 2;\r
+                               countryIds[2] = 3;\r
+                               countryIds[3] = 4;\r
+                               countryIds[4] = 5;\r
+                               countryIds[5] = 6;\r
+                               countryIds[6] = 7;\r
+                               countryIds[7] = 8;\r
+                               countryIds[8] = 9;\r
+                               countryIds[9] = 10;\r
+                               countryIds[10] = 11;\r
+                               countryIds[11] = 12;\r
+                               countryIds[12] = 13;\r
+                               countryIds[13] = 14;\r
+                               countryIds[14] = 15;\r
+                               countryIds[15] = 16;\r
+                               countryIds[16] = 17;\r
+                               countryIds[17] = 18;\r
+                               countryIds[18] = 19;\r
+                               countryIds[19] = 20;\r
+                               countryIds[20] = 21;\r
+                               countryIds[21] = 22;\r
+                               countryIds[22] = 23;\r
+                               countryIds[23] = 24;\r
+                               countryIds[24] = 25;\r
+                               countryIds[25] = 26;\r
+                               countryIds[26] = 27;\r
+                               countryIds[27] = 28;\r
+                               countryIds[28] = 29;\r
+                               countryIds[29] = 30;\r
+                               countryIds[30] = 31;\r
+                               countryIds[31] = 32;\r
+                               countryIds[32] = 33;\r
+                               countryIds[33] = 34;\r
+                               countryIds[34] = 35;\r
+                               countryIds[35] = 36;\r
+                               countryIds[36] = 37;\r
+                               countryIds[37] = 38;\r
+                               countryIds[38] = 39;\r
+                               countryIds[39] = 40;\r
+                               countryIds[40] = 41;\r
+                               countryIds[41] = 42;\r
+                               countryIds[42] = 43;\r
+                               countryIds[43] = 44;\r
+                               countryIds[44] = 45;\r
+                               countryIds[45] = 46;\r
+                               countryIds[46] = 47;\r
+                               countryIds[47] = 48;\r
+                               countryIds[48] = 49;\r
+                               countryIds[49] = 50;\r
+                               countryIds[50] = 51;\r
+                               countryIds[51] = 52;\r
+                               countryIds[52] = 53;\r
+                               countryIds[53] = 54;\r
+                               countryIds[54] = 55;\r
+                               countryIds[55] = 56;\r
+                               countryIds[56] = 57;\r
+                               countryIds[57] = 58;\r
+                               countryIds[58] = 59;\r
+                               countryIds[59] = 60;\r
+                               countryIds[60] = 61;\r
+                               countryIds[61] = 62;\r
+                               countryIds[62] = 63;\r
+                               countryIds[63] = 64;\r
+                               countryIds[64] = 65;\r
+                               countryIds[65] = 66;\r
+                               countryIds[66] = 67;\r
+                               countryIds[67] = 68;\r
+                               countryIds[68] = 69;\r
+                               countryIds[69] = 70;\r
+                               countryIds[70] = 71;\r
+                               countryIds[71] = 72;\r
+                               countryIds[72] = 73;\r
+                               countryIds[73] = 74;\r
+                               countryIds[74] = 75;\r
+                               countryIds[75] = 76;\r
+                               countryIds[76] = 77;\r
+                               countryIds[77] = 78;\r
+                               countryIds[78] = 79;\r
+                               countryIds[79] = 80;\r
+                               countryIds[80] = 81;\r
+                               countryIds[81] = 82;\r
+                               countryIds[82] = 83;\r
+                               countryIds[83] = 84;\r
+                               countryIds[84] = 85;\r
+                               countryIds[85] = 86;\r
+                               countryIds[86] = 87;\r
+                               countryIds[87] = 88;\r
+                               countryIds[88] = 89;\r
+                               countryIds[89] = 90;\r
+                               countryIds[90] = 91;\r
+                               countryIds[91] = 92;\r
+                               countryIds[92] = 93;\r
+                               countryIds[93] = 94;\r
+                               countryIds[94] = 95;\r
+                               countryIds[95] = 96;\r
+                               countryIds[96] = 97;\r
+                               countryIds[97] = 98;\r
+                               countryIds[98] = 99;\r
+                               countryIds[99] = 100;\r
+                               countryIds[100] = 101;\r
+                               countryIds[101] = 102;\r
+                               countryIds[102] = 103;\r
+                               countryIds[103] = 104;\r
+                               countryIds[104] = 105;\r
+                               countryIds[105] = 106;\r
+                               countryIds[106] = 107;\r
+                               countryIds[107] = 108;\r
+                               countryIds[108] = 109;\r
+                               countryIds[109] = 110;\r
+                               countryIds[110] = 111;\r
+                               countryIds[111] = 112;\r
+                               countryIds[112] = 113;\r
+                               countryIds[113] = 114;\r
+                               countryIds[114] = 115;\r
+                               countryIds[115] = 116;\r
+                               countryIds[116] = 117;\r
+                               countryIds[117] = 118;\r
+                               countryIds[118] = 119;\r
+                               countryIds[119] = 120;\r
+                               countryIds[120] = 121;\r
+                               countryIds[121] = 122;\r
+                               countryIds[122] = 123;\r
+                               countryIds[123] = 124;\r
+                               countryIds[124] = 125;\r
+                               countryIds[125] = 126;\r
+                               countryIds[126] = 127;\r
+                               countryIds[127] = 128;\r
+                               countryIds[128] = 129;\r
+                               countryIds[129] = 130;\r
+                               countryIds[130] = 131;\r
+                               countryIds[131] = 132;\r
+                               countryIds[132] = 133;\r
+                               countryIds[133] = 134;\r
+                               countryIds[134] = 135;\r
+                               countryIds[135] = 136;\r
+                               countryIds[136] = 137;\r
+                               countryIds[137] = 138;\r
+                               countryIds[138] = 139;\r
+                               countryIds[139] = 140;\r
+                               countryIds[140] = 141;\r
+                               countryIds[141] = 142;\r
+                               countryIds[142] = 143;\r
+                               countryIds[143] = 144;\r
+                               countryIds[144] = 145;\r
+                               countryIds[145] = 146;\r
+                               countryIds[146] = 147;\r
+                               countryIds[147] = 148;\r
+                               countryIds[148] = 149;\r
+                               countryIds[149] = 150;\r
+                               countryIds[150] = 151;\r
+                               countryIds[151] = 152;\r
+                               countryIds[152] = 153;\r
+                               countryIds[153] = 154;\r
+                               countryIds[154] = 155;\r
+                               countryIds[155] = 156;\r
+                               countryIds[156] = 157;\r
+                               countryIds[157] = 158;\r
+                               countryIds[158] = 159;\r
+                               countryIds[159] = 160;\r
+                               countryIds[160] = 161;\r
+                               countryIds[161] = 162;\r
+                               countryIds[162] = 163;\r
+                               countryIds[163] = 164;\r
+                               countryIds[164] = 165;\r
+                               countryIds[165] = 166;\r
+                               countryIds[166] = 167;\r
+                               countryIds[167] = 168;\r
+                               countryIds[168] = 169;\r
+                               countryIds[169] = 170;\r
+                               countryIds[170] = 171;\r
+                               countryIds[171] = 172;\r
+                               countryIds[172] = 173;\r
+                               countryIds[173] = 174;\r
+                               countryIds[174] = 175;\r
+                               countryIds[175] = 176;\r
+                               countryIds[176] = 177;\r
+                               countryIds[177] = 178;\r
+                               countryIds[178] = 179;\r
+                               countryIds[179] = 180;\r
+                               countryIds[180] = 181;\r
+                               countryIds[181] = 182;\r
+                               countryIds[182] = 183;\r
+                               countryIds[183] = 184;\r
+                               countryIds[184] = 185;\r
+                               countryIds[185] = 186;\r
+                               countryIds[186] = 187;\r
+                               countryIds[187] = 188;\r
+                               countryIds[188] = 189;\r
+                               countryIds[189] = 190;\r
+                               countryIds[190] = 191;\r
+                               countryIds[191] = 192;\r
+                               countryIds[192] = 193;\r
+                               countryIds[193] = 194;\r
+                               countryIds[194] = 195;\r
+                               countryIds[195] = 196;\r
+                               countryIds[196] = 197;\r
+                               countryIds[197] = 198;\r
+                               countryIds[198] = 199;\r
+                               countryIds[199] = 200;\r
+                               countryIds[200] = 201;\r
+                               countryIds[201] = 202;\r
+                               countryIds[202] = 203;\r
+                               countryIds[203] = 204;\r
+                               countryIds[204] = 205;\r
+                               countryIds[205] = 206;\r
+                               countryIds[206] = 207;\r
+                               countryIds[207] = 208;\r
+                               countryIds[208] = 209;\r
+                               countryIds[209] = 210;\r
+                               countryIds[210] = 211;\r
+                               countryIds[211] = 212;\r
+                               countryIds[212] = 213;\r
+                               countryIds[213] = 214;\r
+                               countryIds[214] = 215;\r
+                               countryIds[215] = 216;\r
+                               countryIds[216] = 217;\r
+                               countryIds[217] = 218;\r
+                               countryIds[218] = 219;\r
+                               countryIds[219] = 220;\r
+                               countryIds[220] = 221;\r
+                               countryIds[221] = 222;\r
+                               countryIds[222] = 223;\r
+                               countryIds[223] = 224;\r
+                               countryIds[224] = 225;\r
+                               countryIds[225] = 226;\r
+                               countryIds[226] = 227;\r
+                               countryIds[227] = 228;\r
+                               countryIds[228] = 229;\r
+                               countryIds[229] = 230;\r
+                               countryIds[230] = 231;\r
+                               countryIds[231] = 232;\r
+                               countryIds[232] = 233;\r
+                               countryIds[233] = 234;\r
+                               countryIds[234] = 235;\r
+                               countryIds[235] = 236;\r
+                               countryIds[236] = 237;\r
+                               countryIds[237] = 238;\r
+                               countryIds[238] = 239;\r
+                               countryIds[239] = 240;\r
+                               countryIds[240] = 241;\r
+                               countryIds[241] = 242;\r
+                               countryIds[242] = 243;\r
+                               countryIds[243] = 244;\r
+                               countryIds[244] = 245;\r
+                               var countryNames = new Array(); \r
+                               countryNames[0]= "Afghanistan"\r
+                               countryNames[1]= "Albania"\r
+                               countryNames[2]= "Algeria"\r
+                               countryNames[3]= "American Samoa"\r
+                               countryNames[4]= "Andorra"\r
+                               countryNames[5]= "Angola"\r
+                               countryNames[6]= "Anguilla"\r
+                               countryNames[7]= "Antarctica"\r
+                               countryNames[8]= "Antigua and Barbuda"\r
+                               countryNames[9]= "Argentina"\r
+                               countryNames[10]= "Armenia"\r
+                               countryNames[11]= "Aruba"\r
+                               countryNames[12]= "Australia"\r
+                               countryNames[13]= "Austria"\r
+                               countryNames[14]= "Azerbaijan"\r
+                               countryNames[15]= "Bahamas"\r
+                               countryNames[16]= "Bahrain"\r
+                               countryNames[17]= "Bangladesh"\r
+                               countryNames[18]= "Barbados"\r
+                               countryNames[19]= "Belarus"\r
+                               countryNames[20]= "Belgium"\r
+                               countryNames[21]= "Belize"\r
+                               countryNames[22]= "Benin"\r
+                               countryNames[23]= "Bermuda"\r
+                               countryNames[24]= "Bhutan"\r
+                               countryNames[25]= "Bolivia"\r
+                               countryNames[26]= "Bosnia and Herzegowina"\r
+                               countryNames[27]= "Botswana"\r
+                               countryNames[28]= "Bouvet Island"\r
+                               countryNames[29]= "Brazil"\r
+                               countryNames[30]= "British Indian Ocean Territory"\r
+                               countryNames[31]= "Brunei Darussalam"\r
+                               countryNames[32]= "Bulgaria"\r
+                               countryNames[33]= "Burkina Faso"\r
+                               countryNames[34]= "Burundi"\r
+                               countryNames[35]= "Cambodia"\r
+                               countryNames[36]= "Cameroon"\r
+                               countryNames[37]= "Canada"\r
+                               countryNames[38]= "Cape Verde"\r
+                               countryNames[39]= "Cayman Islands"\r
+                               countryNames[40]= "Central African Republic"\r
+                               countryNames[41]= "Chad"\r
+                               countryNames[42]= "Chile"\r
+                               countryNames[43]= "China"\r
+                               countryNames[44]= "Christmas Island"\r
+                               countryNames[45]= "Cocos (Keeling) Islands"\r
+                               countryNames[46]= "Colombia"\r
+                               countryNames[47]= "Comoros"\r
+                               countryNames[48]= "Congo"\r
+                               countryNames[49]= "Cook Islands"\r
+                               countryNames[50]= "Costa Rica"\r
+                               countryNames[51]= "Cote D'Ivoire"\r
+                               countryNames[52]= "Croatia"\r
+                               countryNames[53]= "Cuba"\r
+                               countryNames[54]= "Cyprus"\r
+                               countryNames[55]= "Czech Republic"\r
+                               countryNames[56]= "Denmark"\r
+                               countryNames[57]= "Djibouti"\r
+                               countryNames[58]= "Dominica"\r
+                               countryNames[59]= "Dominican Republic"\r
+                               countryNames[60]= "East Timor"\r
+                               countryNames[61]= "Ecuador"\r
+                               countryNames[62]= "Egypt"\r
+                               countryNames[63]= "El Salvador"\r
+                               countryNames[64]= "Equatorial Guinea"\r
+                               countryNames[65]= "Eritrea"\r
+                               countryNames[66]= "Estonia"\r
+                               countryNames[67]= "Ethiopia"\r
+                               countryNames[68]= "Falkland Islands (Malvinas)"\r
+                               countryNames[69]= "Faroe Islands"\r
+                               countryNames[70]= "Fiji"\r
+                               countryNames[71]= "Finland"\r
+                               countryNames[72]= "France"\r
+                               countryNames[73]= "France, Metropolitan"\r
+                               countryNames[74]= "French Guiana"\r
+                               countryNames[75]= "French Polynesia"\r
+                               countryNames[76]= "French Southern Territories"\r
+                               countryNames[77]= "Gabon"\r
+                               countryNames[78]= "Gambia"\r
+                               countryNames[79]= "Georgia"\r
+                               countryNames[80]= "Germany"\r
+                               countryNames[81]= "Ghana"\r
+                               countryNames[82]= "Gibraltar"\r
+                               countryNames[83]= "Greece"\r
+                               countryNames[84]= "Greenland"\r
+                               countryNames[85]= "Grenada"\r
+                               countryNames[86]= "Guadeloupe"\r
+                               countryNames[87]= "Guam"\r
+                               countryNames[88]= "Guatemala"\r
+                               countryNames[89]= "Guinea"\r
+                               countryNames[90]= "Guinea-bissau"\r
+                               countryNames[91]= "Guyana"\r
+                               countryNames[92]= "Haiti"\r
+                               countryNames[93]= "Heard and Mc Donald Islands"\r
+                               countryNames[94]= "Honduras"\r
+                               countryNames[95]= "Hong Kong"\r
+                               countryNames[96]= "Hungary"\r
+                               countryNames[97]= "Iceland"\r
+                               countryNames[98]= "India"\r
+                               countryNames[99]= "Indonesia"\r
+                               countryNames[100]= "Iran (Islamic Republic of)"\r
+                               countryNames[101]= "Iraq"\r
+                               countryNames[102]= "Ireland"\r
+                               countryNames[103]= "Israel"\r
+                               countryNames[104]= "Italy"\r
+                               countryNames[105]= "Jamaica"\r
+                               countryNames[106]= "Japan"\r
+                               countryNames[107]= "Jordan"\r
+                               countryNames[108]= "Kazakhstan"\r
+                               countryNames[109]= "Kenya"\r
+                               countryNames[110]= "Kiribati"\r
+                               countryNames[111]= "Korea, Democratic People's Republic of"\r
+                               countryNames[112]= "Korea, Republic of"\r
+                               countryNames[113]= "Kuwait"\r
+                               countryNames[114]= "Kyrgyzstan"\r
+                               countryNames[115]= "Lao People's Democratic Republic"\r
+                               countryNames[116]= "Latvia"\r
+                               countryNames[117]= "Lebanon"\r
+                               countryNames[118]= "Lesotho"\r
+                               countryNames[119]= "Liberia"\r
+                               countryNames[120]= "Libyan Arab Jamahiriya"\r
+                               countryNames[121]= "Liechtenstein"\r
+                               countryNames[122]= "Lithuania"\r
+                               countryNames[123]= "Luxembourg"\r
+                               countryNames[124]= "Macau"\r
+                               countryNames[125]= "Macedonia, The Former Yugoslav Republic of"\r
+                               countryNames[126]= "Madagascar"\r
+                               countryNames[127]= "Malawi"\r
+                               countryNames[128]= "Malaysia"\r
+                               countryNames[129]= "Maldives"\r
+                               countryNames[130]= "Mali"\r
+                               countryNames[131]= "Malta"\r
+                               countryNames[132]= "Marshall Islands"\r
+                               countryNames[133]= "Martinique"\r
+                               countryNames[134]= "Mauritania"\r
+                               countryNames[135]= "Mauritius"\r
+                               countryNames[136]= "Mayotte"\r
+                               countryNames[137]= "Mexico"\r
+                               countryNames[138]= "Micronesia, Federated States of"\r
+                               countryNames[139]= "Moldova, Republic of"\r
+                               countryNames[140]= "Monaco"\r
+                               countryNames[141]= "Mongolia"\r
+                               countryNames[142]= "Montserrat"\r
+                               countryNames[143]= "Morocco"\r
+                               countryNames[144]= "Mozambique"\r
+                               countryNames[145]= "Myanmar"\r
+                               countryNames[146]= "Namibia"\r
+                               countryNames[147]= "Nauru"\r
+                               countryNames[148]= "Nepal"\r
+                               countryNames[149]= "Netherlands"\r
+                               countryNames[150]= "Netherlands Antilles"\r
+                               countryNames[151]= "New Caledonia"\r
+                               countryNames[152]= "New Zealand"\r
+                               countryNames[153]= "Nicaragua"\r
+                               countryNames[154]= "Niger"\r
+                               countryNames[155]= "Nigeria"\r
+                               countryNames[156]= "Niue"\r
+                               countryNames[157]= "Norfolk Island"\r
+                               countryNames[158]= "Northern Mariana Islands"\r
+                               countryNames[159]= "Norway"\r
+                               countryNames[160]= "Oman"\r
+                               countryNames[161]= "Pakistan"\r
+                               countryNames[162]= "Palau"\r
+                               countryNames[163]= "Panama"\r
+                               countryNames[164]= "Papua New Guinea"\r
+                               countryNames[165]= "Paraguay"\r
+                               countryNames[166]= "Peru"\r
+                               countryNames[167]= "Philippines"\r
+                               countryNames[168]= "Pitcairn"\r
+                               countryNames[169]= "Poland"\r
+                               countryNames[170]= "Portugal"\r
+                               countryNames[171]= "Puerto Rico"\r
+                               countryNames[172]= "Qatar"\r
+                               countryNames[173]= "Reunion"\r
+                               countryNames[174]= "Romania"\r
+                               countryNames[175]= "Russian Federation"\r
+                               countryNames[176]= "Rwanda"\r
+                               countryNames[177]= "Saint Kitts and Nevis"\r
+                               countryNames[178]= "Saint Lucia"\r
+                               countryNames[179]= "Saint Vincent and the Grenadines"\r
+                               countryNames[180]= "Samoa"\r
+                               countryNames[181]= "San Marino"\r
+                               countryNames[182]= "Sao Tome and Principe"\r
+                               countryNames[183]= "Saudi Arabia"\r
+                               countryNames[184]= "Senegal"\r
+                               countryNames[185]= "Seychelles"\r
+                               countryNames[186]= "Sierra Leone"\r
+                               countryNames[187]= "Singapore"\r
+                               countryNames[188]= "Slovakia (Slovak Republic)"\r
+                               countryNames[189]= "Slovenia"\r
+                               countryNames[190]= "Solomon Islands"\r
+                               countryNames[191]= "Somalia"\r
+                               countryNames[192]= "South Africa"\r
+                               countryNames[193]= "South Georgia and the South Sandwich Islands"\r
+                               countryNames[194]= "Spain"\r
+                               countryNames[195]= "Sri Lanka"\r
+                               countryNames[196]= "St. Helena"\r
+                               countryNames[197]= "St. Pierre and Miquelon"\r
+                               countryNames[198]= "Sudan"\r
+                               countryNames[199]= "Suriname"\r
+                               countryNames[200]= "Svalbard and Jan Mayen Islands"\r
+                               countryNames[201]= "Swaziland"\r
+                               countryNames[202]= "Sweden"\r
+                               countryNames[203]= "Switzerland"\r
+                               countryNames[204]= "Syrian Arab Republic"\r
+                               countryNames[205]= "Taiwan"\r
+                               countryNames[206]= "Tajikistan"\r
+                               countryNames[207]= "Tanzania, United Republic of"\r
+                               countryNames[208]= "Thailand"\r
+                               countryNames[209]= "Togo"\r
+                               countryNames[210]= "Tokelau"\r
+                               countryNames[211]= "Tonga"\r
+                               countryNames[212]= "Trinidad and Tobago"\r
+                               countryNames[213]= "Tunisia"\r
+                               countryNames[214]= "Turkey"\r
+                               countryNames[215]= "Turkmenistan"\r
+                               countryNames[216]= "Turks and Caicos Islands"\r
+                               countryNames[217]= "Tuvalu"\r
+                               countryNames[218]= "Uganda"\r
+                               countryNames[219]= "Ukraine"\r
+                               countryNames[220]= "United Arab Emirates"\r
+                               countryNames[221]= "United Kingdom"\r
+                               countryNames[222]= "United States"\r
+                               countryNames[223]= "United States Minor Outlying Islands"\r
+                               countryNames[224]= "Uruguay"\r
+                               countryNames[225]= "Uzbekistan"\r
+                               countryNames[226]= "Vanuatu"\r
+                               countryNames[227]= "Vatican City State (Holy See)"\r
+                               countryNames[228]= "Venezuela"\r
+                               countryNames[229]= "Viet Nam"\r
+                               countryNames[230]= "Virgin Islands (British)"\r
+                               countryNames[231]= "Virgin Islands (U.S.)"\r
+                               countryNames[232]= "Wallis and Futuna Islands"\r
+                               countryNames[233]= "Western Sahara"\r
+                               countryNames[234]= "Yemen"\r
+                               countryNames[235]= "Serbia"\r
+                               countryNames[236]= "The Democratic Republic of Congo"\r
+                               countryNames[237]= "Zambia"\r
+                               countryNames[238]= "Zimbabwe"\r
+                               countryNames[239]= "East Timor"\r
+                               countryNames[240]= "Jersey"\r
+                               countryNames[241]= "St. Barthelemy"\r
+                               countryNames[242]= "St. Eustatius"\r
+                               countryNames[243]= "Canary Islands"\r
+                               countryNames[244]= "Montenegro"\r
+                               var stateList = new Array();\r
+                               stateList[223] = "AL:Alabama,AK:Alaska,AZ:Arizona,AR:Arkansas,CA:California,CO:Colorado,CT:Connecticut,DE:Delaware,DC:District Of Columbia,FL:Florida,GA:Georgia,HI:Hawaii,ID:Idaho,IL:Illinois,IN:Indiana,IA:Iowa,KS:Kansas,KY:Kentucky,LA:Louisiana,ME:Maine,MD:Maryland,MA:Massachusetts,MI:Michigan,MN:Minnesota,MS:Mississippi,MO:Missouri,MT:Montana,NE:Nebraska,NV:Nevada,NH:New Hampshire,NJ:New Jersey,NM:New Mexico,NY:New York,NC:North Carolina,ND:North Dakota,OH:Ohio,OK:Oklahoma,OR:Oregon,PA:Pennsylvania,RI:Rhode Island,SC:South Carolina,SD:South Dakota,TN:Tennessee,TX:Texas,UT:Utah,VT:Vermont,VA:Virginia,WA:Washington,WV:West Virginia,WI:Wisconsin,WY:Wyoming";\r
+                               stateList[38] = "AB:Alberta,BC:British Columbia,MB:Manitoba,NB:New Brunswick,NL:Newfoundland and Labrador,NT:Northwest Territories,NS:Nova Scotia,NU:Nunavut,ON:Ontario,PE:Prince Edward Island,QC:Quebec,SK:Saskatchewan,YT:Yukon";\r
+                               stateList[222] = "EN:England,NI:Northern Ireland,SD:Scotland,WS:Wales";\r
+                               stateList[13] = "AC:Australian Capital Territory,NS:New South Wales,NT:Northern Territory,QL:Queensland,SA:South Australia,TS:Tasmania,VI:Victoria,WA:Western Australia";\r
+                               stateList[138] = "AG:Aguascalientes,BN:Baja California Norte,BS:Baja California Sur,CA:Campeche,CS:Chiapas,CH:Chihuahua,CO:Coahuila,CM:Colima,DF:Distrito Federal,DO:Durango,GO:Guanajuato,GU:Guerrero,HI:Hidalgo,JA:Jalisco,EM:M,MI:Michoac,MO:Morelos,NY:Nayarit,NL:Nuevo Le,OA:Oaxaca,PU:Puebla,QU:Quer,QR:Quintana Roo,SP:San Luis Potos,SI:Sinaloa,SO:Sonora,TA:Tabasco,TM:Tamaulipas,TX:Tlaxcala,VZ:Veracruz,YU:Yucat,ZA:Zacatecas";\r
+                               stateList[30] = "AC:Acre,AL:Alagoas,AP:Amap,AM:Amazonas,BA:Bah,CE:Cear,DF:Distrito Federal,ES:Espirito Santo,GO:Goi,MA:Maranh,MT:Mato Grosso,MS:Mato Grosso do Sul,MG:Minas Gera,PR:Paran,PB:Para,PA:Par,PE:Pernambuco,PI:Piau,RN:Rio Grande do Norte,RS:Rio Grande do Sul,RJ:Rio de Janeiro,RO:Rond,RR:Roraima,SC:Santa Catarina,SE:Sergipe,SP:S,TO:Tocantins";\r
+                               stateList[44] = "34:Anhui,11:Beijing,50:Chongqing,35:Fujian,62:Gansu,44:Guangdong,45:Guangxi Zhuang,52:Guizhou,46:Hainan,13:Hebei,23:Heilongjiang,41:Henan,42:Hubei,43:Hunan,32:Jiangsu,36:Jiangxi,22:Jilin,21:Liaoning,15:Nei Mongol,64:Ningxia Hui,63:Qinghai,37:Shandong,31:Shanghai,61:Shaanxi,51:Sichuan,12:Tianjin,65:Xinjiang Uygur,54:Xizang,53:Yunnan,33:Zhejiang";\r
+                               stateList[104] = "IL:Israel,GZ:Gaza Strip,WB:West Bank";\r
+                               stateList[151] = "SM:St. Maarten,BN:Bonaire,CR:Curacao";\r
+                               stateList[175] = "AB:Alba,AR:Arad,AG:Arges,BC:Bacau,BH:Bihor,BN:Bistrita-Nasaud,BT:Botosani,BR:Braila,BV:Brasov,B:Bucuresti,BZ:Buzau,CL:Calarasi,CS:Caras Severin,CJ:Cluj,CT:Constanta,CV:Covasna,DB:Dambovita,DJ:Dolj,GL:Galati,GR:Giurgiu,GJ:Gorj,HR:Hargita,HD:Hunedoara,IL:Ialomita,IS:Iasi,IF:Ilfov,MM:Maramures,MH:Mehedinti,MS:Mures,NT:Neamt,OT:Olt,PH:Prahova,SJ:Salaj,SM:Satu Mare,SB:Sibiu,SV:Suceava,TR:Teleorman,TM:Timis,TL:Tulcea,VL:Valcea,VS:Vaslui,VN:Vrancea";\r
+                               stateList[105] = "AG:Agrigento,AL:Alessandria,AN:Ancona,AO:Aosta,AR:Arezzo,AP:Ascoli Piceno,AT:Asti,AV:Avellino,BA:Bari,BL:Belluno,BN:Benevento,BG:Bergamo,BI:Biella,BO:Bologna,BZ:Bolzano,BS:Brescia,BR:Brindisi,CA:Cagliari,CL:Caltanissetta,CB:Campobasso,CI:Carbonia-Iglesias,CE:Caserta,CT:Catania,CZ:Catanzaro,CH:Chieti,CO:Como,CS:Cosenza,CR:Cremona,KR:Crotone,CN:Cuneo,EN:Enna,FE:Ferrara,FI:Firenze,FG:Foggia,FC:Forli-Cesena,FR:Frosinone,GE:Genova,GO:Gorizia,GR:Grosseto,IM:Imperia,IS:Isernia,AQ:L'Aquila,SP:La Spezia,LT:Latina,LE:Lecce,LC:Lecco,LI:Livorno,LO:Lodi,LU:Lucca,MC:Macerata,MN:Mantova,MS:Massa-Carrara,MT:Matera,VS:Medio Campidano,ME:Messina,MI:Milano,MO:Modena,NA:Napoli,NO:Novara,NU:Nuoro,OG:Ogliastra,OT:Olbia-Tempio,OR:Oristano,PD:Padova,PA:Palermo,PR:Parma,PV:Pavia,PG:Perugia,PU:Pesaro e Urbino,PE:Pescara,PC:Piacenza,PI:Pisa,PT:Pistoia,PN:Pordenone,PZ:Potenza,PO:Prato,RG:Ragusa,RA:Ravenna,RC:Reggio Calabria,RE:Reggio Emilia,RI:Rieti,RN:Rimini,RM:Roma,RO:Rovigo,SA:Salerno,SS:Sassari,SV:Savona,SI:Siena,SR:Siracusa,SO:Sondrio,TA:Taranto,TE:Teramo,TR:Terni,TO:Torino,TP:Trapani,TN:Trento,TV:Treviso,TS:Trieste,UD:Udine,VA:Varese,VE:Venezia,VB:Verbano Cusio Ossola,VC:Vercelli,VR:Verona,VV:Vibo Valenzia,VI:Vicenza,VT:Viterbo";\r
+                               stateList[195] = "15:A Coru,01:Alava,02:Albacete,03:Alicante,04:Almeria,33:Asturias,05:Avila,06:Badajoz,07:Baleares,08:Barcelona,09:Burgos,10:Caceres,11:Cadiz,39:Cantabria,12:Castellon,51:Ceuta,13:Ciudad Real,14:Cordoba,16:Cuenca,17:Girona,18:Granada,19:Guadalajara,20:Guipuzcoa,21:Huelva,22:Huesca,23:Jaen,26:La Rioja,35:Las Palmas,24:Leon,25:Lleida,27:Lugo,28:Madrid,29:Malaga,52:Melilla,30:Murcia,31:Navarra,32:Ourense,34:Palencia,36:Pontevedra,37:Salamanca,38:Santa Cruz de Tenerife,40:Segovia,41:Sevilla,42:Soria,43:Tarragona,44:Teruel,45:Toledo,46:Valencia,47:Valladolid,48:Vizcaya,49:Zamora,50:Zaragoza";\r
+                               stateList[11] = "AG:Aragatsotn,AR:Ararat,AV:Armavir,GR:Gegharkunik,KT:Kotayk,LO:Lori,SH:Shirak,SU:Syunik,TV:Tavush,VD:Vayots-Dzor,ER:Yerevan";\r
+                               stateList[99] = "AI:Andaman & Nicobar Islands,AN:Andhra Pradesh,AR:Arunachal Pradesh,AS:Assam,BI:Bihar,CA:Chandigarh,CH:Chhatisgarh,DD:Dadra & Nagar Haveli,DA:Daman & Diu,DE:Delhi,GO:Goa,GU:Gujarat,HA:Haryana,HI:Himachal Pradesh,JA:Jammu & Kashmir,JH:Jharkhand,KA:Karnataka,KE:Kerala,LA:Lakshadweep,MD:Madhya Pradesh,MH:Maharashtra,MN:Manipur,ME:Meghalaya,MI:Mizoram,NA:Nagaland,OR:Orissa,PO:Pondicherry,PU:Punjab,RA:Rajasthan,SI:Sikkim,TA:Tamil Nadu,TR:Tripura,UA:Uttaranchal,UT:Uttar Pradesh,WE:West Bengal";\r
+                               stateList[101] = "BO:Ahmadi va Kohkiluyeh,AR:Ardabil,AG:Azarbayjan-e Gharbi,AS:Azarbayjan-e Sharqi,BU:Bushehr,CM:Chaharmahal va Bakhtiari,ES:Esfahan,FA:Fars,GI:Gilan,GO:Gorgan,HA:Hamadan,HO:Hormozgan,IL:Ilam,KE:Kerman,BA:Kermanshah,KJ:Khorasan-e Junoubi,KR:Khorasan-e Razavi,KS:Khorasan-e Shomali,KH:Khuzestan,KO:Kordestan,LO:Lorestan,MR:Markazi,MZ:Mazandaran,QA:Qazvin,QO:Qom,SE:Semnan,SB:Sistan va Baluchestan,TE:Tehran,YA:Yazd,ZA:Zanjan";\r
+                               methods = new PaymentMethods();\r
+                               method = new PaymentMethod('os_authnet',1,0,1,0, 1);\r
+                               methods.Add(method);\r
+                               var currentCampaign = 0 ;\r
+                               function checkData() {\r
+                                       var form = document.donate_form;                        \r
+                                       var minimumAmount = 1 ;\r
+                                       var maximumAmount = 100000 ;\r
+                                                               \r
+                                       if (form.first_name.value == '') {\r
+                                               alert("Please enter your first name");\r
+                                               form.first_name.focus();\r
+                                               return ;\r
+                                       }                                               \r
+                                       if (form.last_name.value=="") {\r
+                                               alert("Please enter your last name");\r
+                                               form.last_name.focus();\r
+                                               return;\r
+                                       }                                               \r
+                                       if (form.address.value=="") {\r
+                                               alert("Please enter your address");\r
+                                               form.address.focus();\r
+                                               return; \r
+                                       }                                               \r
+                                       if (form.city.value == "") {\r
+                                               alert("Please enter your city");\r
+                                               form.city.focus();\r
+                                               return; \r
+                                       }                                               \r
+                                       if (form.state.length > 1) {\r
+                                               if (form.state.value =="") {\r
+                                                       alert("Please enter your state");\r
+                                                       form.state.focus();\r
+                                                       return; \r
+                                               }\r
+                                       }                                                                                                                       \r
+                                       if (form.zip.value == "") {\r
+                                               alert("Please enter your zip");\r
+                                               form.zip.focus();\r
+                                               return;\r
+                                       }                                               \r
+//                                     if (form.country.value == "") {\r
+//                                             alert("Please enter your country");\r
+//                                             form.country.focus();\r
+//                                             return; \r
+//                                     }       \r
+                                        if (form.invoice_num.value == "") {\r
+                                            alert("Please enter an invoice number");\r
+                                            form.invoice_num.focus();\r
+                                            return;\r
+                                        }\r
+                                       if (form.phone.value == "") {\r
+                                               alert("Please enter your phone");\r
+                                               form.phone.focus();\r
+                                               return;\r
+                                       }                                               \r
+                                                                               \r
+                                       if (form.email.value == '') {\r
+                                               alert("Please enter your email");\r
+                                               form.email.focus();\r
+                                               return;\r
+                                       }\r
+                                       \r
+                                        \r
+                                       var emailFilter = /^\w+[\+\.\w-]*@([\w-]+\.)*\w+[\w-]*\.([a-z]{2,4}|\d+)$/i\r
+                                       var ret = emailFilter.test(form.email.value);\r
+                                       if (!ret) {\r
+                                               alert("Please enter a valid email");\r
+                                               form.email.focus();\r
+                                               return;\r
+                                       }                                                                       \r
+                                       var amountValid = false ;\r
+                                       var amount = 0 ;\r
+                                       if (form.rd_amount) {\r
+                                       if (form.rd_amount.length) {\r
+                                                       for (var i = 0 ; i < form.rd_amount.length ; i++) {\r
+                                                               if(form.rd_amount[i].checked == true) {\r
+                                                                       amountValid = true ;\r
+                                                                       amount = form.rd_amount[i].value ;\r
+                                                               }       \r
+                                                       }       \r
+                                               } else if (form.rd_amount.checked == true) {\r
+                                                       amountValid = true ;\r
+                                                       amount = form.rd_amount.value ;\r
+                                               }\r
+                                                                                                                       \r
+                                       }\r
+\r
+                                       if (!amountValid) {                                                     \r
+                                               if (parseFloat(form.amount.value)) {\r
+                                                       amountValid = true;\r
+                                                       amount = form.amount.value ;    \r
+                                               }                               \r
+                                       }               \r
+                                                                               \r
+                                                                                                               \r
+                                       if (!amountValid) {\r
+                                               var msg;\r
+                                                       msg = "Please choose from pre-defined amounts or enter your own amount in the textbox";\r
+                                               alert(msg);\r
+                                               return; \r
+                                       }                       \r
+\r
+\r
+                                       if (parseFloat(amount) < minimumAmount) {\r
+                                               alert("Minimum payment amount allowed is : $" + minimumAmount);\r
+                                               form.amount.focus();\r
+                                               form.amount.focus();\r
+                                               return ;\r
+                                       }\r
+\r
+                                       if ((maximumAmount >0) && (parseFloat(amount) > maximumAmount)) {\r
+                                               alert("Maximum payment amount allowed is : $" + maximumAmount);\r
+                                               form.amount.focus();\r
+                                               return ;\r
+                                       }\r
+\r
+                                       \r
+                                       \r
+                               \r
+                                                                                                       \r
+                                                                                                       \r
+                                       var paymentMethod = "";\r
+                                       paymentMethod = "os_authnet";\r
+                                                                               \r
+                                       method = methods.Find(paymentMethod);                           \r
+                                       //Check payment method page\r
+                                       if (method.getCreditCard()) {\r
+                                               if (form.x_card_num.value == "") {\r
+                                                       alert("Please enter creditcard number");\r
+                                                       form.x_card_num.focus();\r
+                                                       return;                                 \r
+                                               }                                       \r
+                                               if (form.x_card_code.value == "") {\r
+                                                       alert("Please enter card code");\r
+                                                       form.x_card_code.focus();\r
+                                                       return ;\r
+                                               }\r
+                                       }\r
+                                       if (method.getCardHolderName()) {\r
+                                               if (form.card_holder_name.value == '') {\r
+                                                       alert("JE_ENTER_CARD_HOLDER_NAME");\r
+                                                       form.card_holde_name.focus();\r
+                                                       return ;\r
+                                               }\r
+                                       }                       \r
+                                       //This check is only used for echeck payment gateway\r
+                                       if (paymentMethod == 'os_echeck') {\r
+                                               if (form.x_bank_aba_code.value == '') {\r
+                                                       alert("Please enter Bank ABA Routing Number");\r
+                                                       form.x_bank_aba_code.focus();\r
+                                                       return ;\r
+                                               }                               \r
+                                               if (form.x_bank_acct_num.value == '') {\r
+                                                       alert("Please enter Bank Account Number");\r
+                                                       form.x_bank_aba_code.focus();\r
+                                                       return ;\r
+                                               }                               \r
+                                               if (form.x_bank_name.value == '') {\r
+                                                       alert("Please enter Bank Name");\r
+                                                       form.x_bank_name.focus();\r
+                                                       return ;                \r
+                                               }                               \r
+                                               if (form.x_bank_acct_name.value == '') {\r
+                                                       alert("Please enter Account Holder Name");\r
+                                                       form.x_bank_acct_name.focus();\r
+                                                       return ;\r
+                                               }                               \r
+                                       }                               \r
+                                       \r
+                                               form.submit();\r
+                                                                                                                                                                                                                               \r
+                               }                       \r
+                                                                                       \r
+                               function checkNumber(txtName)\r
+                               {                       \r
+                                       var num = txtName.value                 \r
+                                       if(isNaN(num))                  \r
+                                       {                       \r
+                                               alert("Only number is accepted");                       \r
+                                               txtName.value = "";                     \r
+                                               txtName.focus();                        \r
+                                       }                       \r
+                               }\r
+\r
+\r
+                               function changeDonationType() {\r
+                                       var form = document.donate_form ;\r
+                                       var trFrequecy = document.getElementById('tr_frequency');\r
+                                       var trNumberDonatons = document.getElementById('tr_number_donations');                                                          \r
+                                       if (form.donation_type[0].checked == true) {\r
+                                               trFrequecy.style.display = 'none' ;\r
+                                               if (trNumberDonatons)\r
+                                                       trNumberDonatons.style.display = 'none' ;\r
+                                       } else {\r
+                                               trFrequecy.style.display = '' ;\r
+                                               if (trNumberDonatons)\r
+                                                       trNumberDonatons.style.display = '' ;\r
+                                       }       \r
+                               }       \r
+\r
+                               function deSelectRadio() {\r
+                                       var form = document.donate_form ;\r
+                                       form.amount.value = form.amount.value.replace(',', '') ;\r
+                                       if (parseFloat(form.amount.value)) {\r
+                                               if(form.rd_amount) {\r
+                                               if (form.rd_amount.length) {\r
+                                                       for(var i =0 ; i < form.rd_amount.length ; i++) {\r
+                                                               form.rd_amount[i].checked = false ;\r
+                                                       }\r
+                                               } else {\r
+                                                       form.rd_amount.checked = false ;\r
+                                               }       \r
+                                                                                                               \r
+                                               }       \r
+                                       } else {\r
+                                               form.amount.value = '';\r
+                                       }\r
+                               }\r
+\r
+                               function clearTextbox() {\r
+                                       var form = document.donate_form ;\r
+                                       if (form.amount)\r
+                                               form.amount.value = ''; \r
+                               }               \r
+                                               \r
+                               function displayRecurring(show) {       \r
+                                       var form = document.donate_form ;               \r
+                                       var trDonationType = document.getElementById('donation_type') ;\r
+                                       if (!trDonationType)  \r
+                                               return ;                        \r
+                                       var trFrequency = document.getElementById('tr_frequency');\r
+                                       var trNumberDonations = document.getElementById('tr_number_donations') ;\r
+                                       if (show) {\r
+                                               trDonationType.style.display = '';\r
+                                               if (form.donation_type[1].checked) {\r
+                                                       trFrequency.style.display = '';\r
+                                                       if (trNumberDonations) {\r
+                                                               trNumberDonations.style.display = '';\r
+                                                       }\r
+                                               }                               \r
+                                       } else {\r
+                                               trDonationType.style.display = 'none';\r
+                                               trFrequency.style.display = 'none';\r
+                                               if (trNumberDonations) {\r
+                                                       trNumberDonations.style.display = 'none';\r
+                                               }\r
+                                       }                       \r
+                               }\r
+\r
+\r
+                               function checkCampaignRecurring() {                                     \r
+                                       var form = document.donate_form ;\r
+                                       var show = 1 ;\r
+                                       var paymentMethod = "";\r
+                                        paymentMethod = "os_authnet";\r
+                                                       \r
+                                       method = methods.Find(paymentMethod);\r
+                                       if (!method.getEnableRecurring()) {\r
+                                               show = 0 ;\r
+                                       } else {\r
+                                               if (form.campaign_id.value > 0)\r
+                                                       show = recurrings [form.campaign_id.value] ;\r
+                                       }                                                       \r
+                                       displayRecurring(show);\r
+                               }\r
+                                                       \r
+                               function updateAmount() {\r
+                                       var form = document.donate_form ;\r
+                                       var campaignId = form.campaign_id.value ;\r
+\r
+                                       //Check to enable and disable recurring\r
+                                       var show = 1 ;\r
+                                       if (campaignId)\r
+                                               show = recurrings [campaignId] ;                \r
+                                       displayRecurring(show);                                         \r
+                                                               \r
+                               }\r
+                               function updateStateList() {\r
+                                       var form = document.donate_form ;\r
+                                       //First of all, we need to empty the state dropdown\r
+                                       var list = form.state ;\r
+\r
+                                       // empty the list\r
+                                       for (i = 1 ; i < list.options.length ; i++) {\r
+                                               list.options[i] = null;\r
+                                       }\r
+                                       list.length = 1 ;\r
+                                       var i = 0;\r
+                                       //Get the country index\r
+                                       var country = form.country.value ;                      \r
+                                       if (country != '') {\r
+                                               //Find index of the country\r
+                                               for (var i = 0 ; i < countryNames.length ; i++) {\r
+                                                       if (countryNames[i] == country) {                                               \r
+                                                               break ;\r
+                                                       }\r
+                                               }\r
+                                               //We will find the states\r
+                                               var countryId = countryIds[i] ;                         \r
+                                               var stateNames = stateList[countryId]; ;\r
+                                               if (stateNames) {\r
+                                                       var arrStates = stateNames.split(',');\r
+                                                       i = 1 ;\r
+                                                       var state = '';\r
+                                                       var stateName = '' ;\r
+                                                       for (var j = 0 ; j < arrStates.length ; j++) {\r
+                                                               state = arrStates[j] ;\r
+                                                               stateName = state.split(':');\r
+                                                               opt = new Option();\r
+                                                               opt.value = stateName[0];\r
+                                                               opt.text = stateName[1];\r
+                                                               list.options[i++] = opt;\r
+                                                       }\r
+                                                       list.lenght = i ;\r
+                                               }                                                               \r
+                                       }                                       \r
+                               }\r
+\r
+                               </script>       \r
+                       \r
+<?php\r
+    $output = apply_filters( 'wp_donate_filter_form', ob_get_contents());\r
+    ob_end_clean();\r
+\r
+    return $output;\r
+}\r
+?>\r
diff --git a/includes/donate-display_1.php b/includes/donate-display_1.php
new file mode 100644 (file)
index 0000000..7dd6fb4
--- /dev/null
@@ -0,0 +1,1367 @@
+<?php ob_start();\r
+/**\r
+ * Display Donate Form\r
+ *\r
+ * @return string Donate Form\r
+ *\r
+ * @since 1.0\r
+ *\r
+*/\r
+       global $wpdb;\r
+    if(isset($_REQUEST['action']))\r
+    {\r
+    if($_REQUEST['action']=='submitdonate')\r
+    {          \r
+               $first_name = $_REQUEST['first_name'];\r
+               $last_name = $_REQUEST['last_name'];\r
+               $organization = $_REQUEST['organization'];\r
+               $address = $_REQUEST['address'];\r
+               $city = $_REQUEST['city'];\r
+               $country = $_REQUEST['country'];\r
+               $state = $_REQUEST['state'];\r
+               $zip = $_REQUEST['zip'];\r
+               $phone = $_REQUEST['phone'];\r
+               $email = $_REQUEST['email'];            \r
+               $donation_type = $_REQUEST['donation_type'];\r
+               $r_frequency = $_REQUEST['r_frequency'];\r
+               $r_times = $_REQUEST['r_times'];\r
+               $amount = $_REQUEST['amount'];\r
+               $card_type = $_REQUEST['card_type'];\r
+               $x_card_num = $_REQUEST['x_card_num'];\r
+               $exp_month = $_REQUEST['exp_month'];\r
+               $exp_year = $_REQUEST['exp_year'];\r
+               $x_card_code = $_REQUEST['x_card_code'];\r
+               $comment = $_REQUEST['comment'];\r
+               $payment_method = $_REQUEST['payment_method'];\r
+               \r
+               // Adjust this to point to the Authorize.Net PHP SDK\r
+               include dirname(__FILE__) .'/../anet_php_sdk/AuthorizeNet.php';\r
+\r
+               $METHOD_TO_USE = "AIM";\r
+               $mysetting = $wpdb->get_results( "SELECT * FROM ".$wpdb->prefix."donate_setting" );\r
+               define("AUTHORIZENET_API_LOGIN_ID",$mysetting[0]->api_login);    // Add your API LOGIN ID\r
+               define("AUTHORIZENET_TRANSACTION_KEY",$mysetting[0]->key); // Add your API transaction key\r
+               if($mysetting[0]->mod==0){\r
+               define("AUTHORIZENET_SANDBOX",true);       // Set to false to test against production\r
+               define("TEST_REQUEST", true);           // You may want to set to true if testing against production\r
+               }\r
+               else\r
+               {\r
+                       define("AUTHORIZENET_SANDBOX",false);       // Set to false to test against production\r
+                       define("TEST_REQUEST", false);  \r
+               }\r
+               // You only need to adjust the two variables below if testing DPM\r
+               define("AUTHORIZENET_MD5_SETTING","");                // Add your MD5 Setting.\r
+\r
+               $REQUEST = $_REQUEST;\r
+               if($paypalp = authorizepayment($METHOD_TO_USE,$REQUEST,$address1,$city,$state,$country,$zipcode,$emailaddress,$plan))\r
+               {\r
+                       $sql = "INSERT INTO `".$wpdb->prefix."donate` (`first_name`, `last_name`, `organization`, `address`, `city`, `country`, `state`, `zip`, `phone`, `email`, `donation_type`, `amount`, `comment`, `status`,`date`) \r
+                       VALUES ('".$first_name."', '".$last_name."','".$organization."','".$address."','".$city."','".$country."','".$state."','".$zip."','".$phone."','".$email."','".$donation_type."','".$amount."','".$comment."', '1',now());";\r
+                       $wpdb->query($sql);\r
+                       \r
+                       $post = get_post($post->ID);\r
+                       $slug = $post->post_name;\r
+                       \r
+                       header("Location:".site_url().$_SERVER['REQUEST_URI']);\r
+                       exit;\r
+               }\r
+               else\r
+               {\r
+                       header("Location:".site_url().$_SERVER['REQUEST_URI']);\r
+                       exit;\r
+               }\r
+               \r
+       }\r
+       }\r
+\r
+function wp_donate_form() {\r
+    ob_start();\r
+        global $wpdb;\r
+    ?>\r
+       <form method="post" name="donate_form" id="donate_form" action="<?php echo site_url().$_SERVER['REQUEST_URI'];?>" autocomplete="off">\r
+                       <input type="hidden" name="action" value="submitdonate" />\r
+                       <table width="100%" cellspacing="3" cellpadding="3">\r
+                               <tr><td style="color:red;" colspan="4"><?php echo $_SESSION['donate_msg']; $_SESSION['donate_msg']='';?></td></tr>\r
+                               <tr>\r
+                                       <td colspan="2" class="msg">\r
+                                               <p>You may use this form to make an online donation. Your gift will go to the area of greatest need. If you wish your donation to be designated for a particular area or program, please note your wishes in the comment box.</p>                                                                                                       \r
+                                       </td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td colspan="2" class="heading"><b>Donor information</b></td>\r
+                               </tr>                                   \r
+                               <tr>                    \r
+                                       <td class="title_cell">First name<span class="required">*</span></td>\r
+                                       <td class="field_cell">\r
+                                               <input type="text" class="inputbox" name="first_name" id="first_name" value="" size="25" />\r
+                                       </td>\r
+                               </tr>\r
+                               <tr>                    \r
+                                       <td class="title_cell">Last name<span class="required">*</span></td>\r
+                                       <td class="field_cell">\r
+                                               <input type="text" class="inputbox" name="last_name" value="" size="25" />\r
+                                       </td>\r
+                               </tr>\r
+                               <tr>                    \r
+                                       <td class="title_cell">Organization</td>\r
+                                       <td class="field_cell">\r
+                                               <input type="text" class="inputbox" name="organization" value="" size="30" />\r
+                                       </td>\r
+                               </tr>\r
+                               <tr>                    \r
+                                       <td class="title_cell">Address<span class="required">*</span></td>\r
+                                       <td class="field_cell">\r
+                                               <input type="text" class="inputbox" name="address" value="" size="50" />\r
+                                       </td>\r
+                               </tr>   \r
+                               <tr>                    \r
+                                       <td class="title_cell">City<span class="required">*</span></td>\r
+                                       <td class="field_cell">\r
+                                               <input type="text" class="inputbox" name="city" value="" size="15" />\r
+                                       </td>\r
+                               </tr>           \r
+                               <tr>                    \r
+                                       <td class="title_cell">Country<span class="required">*</span></td>\r
+                                       <td class="field_cell">\r
+                                               <select id="country" name="country" onchange="updateStateList();" >\r
+                                               <option value="">Select country</option>\r
+                                               <option value="Afghanistan">Afghanistan</option>\r
+                                               <option value="Albania">Albania</option>\r
+                                               <option value="Algeria">Algeria</option>\r
+                                               <option value="American Samoa">American Samoa</option>\r
+                                               <option value="Andorra">Andorra</option>\r
+                                               <option value="Angola">Angola</option>\r
+                                               <option value="Anguilla">Anguilla</option>\r
+                                               <option value="Antarctica">Antarctica</option>\r
+                                               <option value="Antigua and Barbuda">Antigua and Barbuda</option>\r
+                                               <option value="Argentina">Argentina</option>\r
+                                               <option value="Armenia">Armenia</option>\r
+                                               <option value="Aruba">Aruba</option>\r
+                                               <option value="Australia">Australia</option>\r
+                                               <option value="Austria">Austria</option>\r
+                                               <option value="Azerbaijan">Azerbaijan</option>\r
+                                               <option value="Bahamas">Bahamas</option>\r
+                                               <option value="Bahrain">Bahrain</option>\r
+                                               <option value="Bangladesh">Bangladesh</option>\r
+                                               <option value="Barbados">Barbados</option>\r
+                                               <option value="Belarus">Belarus</option>\r
+                                               <option value="Belgium">Belgium</option>\r
+                                               <option value="Belize">Belize</option>\r
+                                               <option value="Benin">Benin</option>\r
+                                               <option value="Bermuda">Bermuda</option>\r
+                                               <option value="Bhutan">Bhutan</option>\r
+                                               <option value="Bolivia">Bolivia</option>\r
+                                               <option value="Bosnia and Herzegowina">Bosnia and Herzegowina</option>\r
+                                               <option value="Botswana">Botswana</option>\r
+                                               <option value="Bouvet Island">Bouvet Island</option>\r
+                                               <option value="Brazil">Brazil</option>\r
+                                               <option value="British Indian Ocean Territory">British Indian Ocean Territory</option>\r
+                                               <option value="Brunei Darussalam">Brunei Darussalam</option>\r
+                                               <option value="Bulgaria">Bulgaria</option>\r
+                                               <option value="Burkina Faso">Burkina Faso</option>\r
+                                               <option value="Burundi">Burundi</option>\r
+                                               <option value="Cambodia">Cambodia</option>\r
+                                               <option value="Cameroon">Cameroon</option>\r
+                                               <option value="Canada">Canada</option>\r
+                                               <option value="Canary Islands">Canary Islands</option>\r
+                                               <option value="Cape Verde">Cape Verde</option>\r
+                                               <option value="Cayman Islands">Cayman Islands</option>\r
+                                               <option value="Central African Republic">Central African Republic</option>\r
+                                               <option value="Chad">Chad</option>\r
+                                               <option value="Chile">Chile</option>\r
+                                               <option value="China">China</option>\r
+                                               <option value="Christmas Island">Christmas Island</option>\r
+                                               <option value="Cocos (Keeling) Islands">Cocos (Keeling) Islands</option>\r
+                                               <option value="Colombia">Colombia</option>\r
+                                               <option value="Comoros">Comoros</option>\r
+                                               <option value="Congo">Congo</option>\r
+                                               <option value="Cook Islands">Cook Islands</option>\r
+                                               <option value="Costa Rica">Costa Rica</option>\r
+                                               <option value="Cote D'Ivoire">Cote D'Ivoire</option>\r
+                                               <option value="Croatia">Croatia</option>\r
+                                               <option value="Cuba">Cuba</option>\r
+                                               <option value="Cyprus">Cyprus</option>\r
+                                               <option value="Czech Republic">Czech Republic</option>\r
+                                               <option value="Denmark">Denmark</option>\r
+                                               <option value="Djibouti">Djibouti</option>\r
+                                               <option value="Dominica">Dominica</option>\r
+                                               <option value="Dominican Republic">Dominican Republic</option>\r
+                                               <option value="East Timor">East Timor</option>\r
+                                               <option value="East Timor">East Timor</option>\r
+                                               <option value="Ecuador">Ecuador</option>\r
+                                               <option value="Egypt">Egypt</option>\r
+                                               <option value="El Salvador">El Salvador</option>\r
+                                               <option value="Equatorial Guinea">Equatorial Guinea</option>\r
+                                               <option value="Eritrea">Eritrea</option>\r
+                                               <option value="Estonia">Estonia</option>\r
+                                               <option value="Ethiopia">Ethiopia</option>\r
+                                               <option value="Falkland Islands (Malvinas)">Falkland Islands (Malvinas)</option>\r
+                                               <option value="Faroe Islands">Faroe Islands</option>\r
+                                               <option value="Fiji">Fiji</option>\r
+                                               <option value="Finland">Finland</option>\r
+                                               <option value="France">France</option>\r
+                                               <option value="France, Metropolitan">France, Metropolitan</option>\r
+                                               <option value="French Guiana">French Guiana</option>\r
+                                               <option value="French Polynesia">French Polynesia</option>\r
+                                               <option value="French Southern Territories">French Southern Territories</option>\r
+                                               <option value="Gabon">Gabon</option>\r
+                                               <option value="Gambia">Gambia</option>\r
+                                               <option value="Georgia">Georgia</option>\r
+                                               <option value="Germany">Germany</option>\r
+                                               <option value="Ghana">Ghana</option>\r
+                                               <option value="Gibraltar">Gibraltar</option>\r
+                                               <option value="Greece">Greece</option>\r
+                                               <option value="Greenland">Greenland</option>\r
+                                               <option value="Grenada">Grenada</option>\r
+                                               <option value="Guadeloupe">Guadeloupe</option>\r
+                                               <option value="Guam">Guam</option>\r
+                                               <option value="Guatemala">Guatemala</option>\r
+                                               <option value="Guinea">Guinea</option>\r
+                                               <option value="Guinea-bissau">Guinea-bissau</option>\r
+                                               <option value="Guyana">Guyana</option>\r
+                                               <option value="Haiti">Haiti</option>\r
+                                               <option value="Heard and Mc Donald Islands">Heard and Mc Donald Islands</option>\r
+                                               <option value="Honduras">Honduras</option>\r
+                                               <option value="Hong Kong">Hong Kong</option>\r
+                                               <option value="Hungary">Hungary</option>\r
+                                               <option value="Iceland">Iceland</option>\r
+                                               <option value="India">India</option>\r
+                                               <option value="Indonesia">Indonesia</option>\r
+                                               <option value="Iran (Islamic Republic of)">Iran (Islamic Republic of)</option>\r
+                                               <option value="Iraq">Iraq</option>\r
+                                               <option value="Ireland">Ireland</option>\r
+                                               <option value="Israel">Israel</option>\r
+                                               <option value="Italy">Italy</option>\r
+                                               <option value="Jamaica">Jamaica</option>\r
+                                               <option value="Japan">Japan</option>\r
+                                               <option value="Jersey">Jersey</option>\r
+                                               <option value="Jordan">Jordan</option>\r
+                                               <option value="Kazakhstan">Kazakhstan</option>\r
+                                               <option value="Kenya">Kenya</option>\r
+                                               <option value="Kiribati">Kiribati</option>\r
+                                               <option value="Korea, Democratic People's Republic of">Korea, Democratic People's Republic of</option>\r
+                                               <option value="Korea, Republic of">Korea, Republic of</option>\r
+                                               <option value="Kuwait">Kuwait</option>\r
+                                               <option value="Kyrgyzstan">Kyrgyzstan</option>\r
+                                               <option value="Lao People's Democratic Republic">Lao People's Democratic Republic</option>\r
+                                               <option value="Latvia">Latvia</option>\r
+                                               <option value="Lebanon">Lebanon</option>\r
+                                               <option value="Lesotho">Lesotho</option>\r
+                                               <option value="Liberia">Liberia</option>\r
+                                               <option value="Libyan Arab Jamahiriya">Libyan Arab Jamahiriya</option>\r
+                                               <option value="Liechtenstein">Liechtenstein</option>\r
+                                               <option value="Lithuania">Lithuania</option>\r
+                                               <option value="Luxembourg">Luxembourg</option>\r
+                                               <option value="Macau">Macau</option>\r
+                                               <option value="Macedonia, The Former Yugoslav Republic of">Macedonia, The Former Yugoslav Republic of</option>\r
+                                               <option value="Madagascar">Madagascar</option>\r
+                                               <option value="Malawi">Malawi</option>\r
+                                               <option value="Malaysia">Malaysia</option>\r
+                                               <option value="Maldives">Maldives</option>\r
+                                               <option value="Mali">Mali</option>\r
+                                               <option value="Malta">Malta</option>\r
+                                               <option value="Marshall Islands">Marshall Islands</option>\r
+                                               <option value="Martinique">Martinique</option>\r
+                                               <option value="Mauritania">Mauritania</option>\r
+                                               <option value="Mauritius">Mauritius</option>\r
+                                               <option value="Mayotte">Mayotte</option>\r
+                                               <option value="Mexico">Mexico</option>\r
+                                               <option value="Micronesia, Federated States of">Micronesia, Federated States of</option>\r
+                                               <option value="Moldova, Republic of">Moldova, Republic of</option>\r
+                                               <option value="Monaco">Monaco</option>\r
+                                               <option value="Mongolia">Mongolia</option>\r
+                                               <option value="Montenegro">Montenegro</option>\r
+                                               <option value="Montserrat">Montserrat</option>\r
+                                               <option value="Morocco">Morocco</option>\r
+                                               <option value="Mozambique">Mozambique</option>\r
+                                               <option value="Myanmar">Myanmar</option>\r
+                                               <option value="Namibia">Namibia</option>\r
+                                               <option value="Nauru">Nauru</option>\r
+                                               <option value="Nepal">Nepal</option>\r
+                                               <option value="Netherlands">Netherlands</option>\r
+                                               <option value="Netherlands Antilles">Netherlands Antilles</option>\r
+                                               <option value="New Caledonia">New Caledonia</option>\r
+                                               <option value="New Zealand">New Zealand</option>\r
+                                               <option value="Nicaragua">Nicaragua</option>\r
+                                               <option value="Niger">Niger</option>\r
+                                               <option value="Nigeria">Nigeria</option>\r
+                                               <option value="Niue">Niue</option>\r
+                                               <option value="Norfolk Island">Norfolk Island</option>\r
+                                               <option value="Northern Mariana Islands">Northern Mariana Islands</option>\r
+                                               <option value="Norway">Norway</option>\r
+                                               <option value="Oman">Oman</option>\r
+                                               <option value="Pakistan">Pakistan</option>\r
+                                               <option value="Palau">Palau</option>\r
+                                               <option value="Panama">Panama</option>\r
+                                               <option value="Papua New Guinea">Papua New Guinea</option>\r
+                                               <option value="Paraguay">Paraguay</option>\r
+                                               <option value="Peru">Peru</option>\r
+                                               <option value="Philippines">Philippines</option>\r
+                                               <option value="Pitcairn">Pitcairn</option>\r
+                                               <option value="Poland">Poland</option>\r
+                                               <option value="Portugal">Portugal</option>\r
+                                               <option value="Puerto Rico">Puerto Rico</option>\r
+                                               <option value="Qatar">Qatar</option>\r
+                                               <option value="Reunion">Reunion</option>\r
+                                               <option value="Romania">Romania</option>\r
+                                               <option value="Russian Federation">Russian Federation</option>\r
+                                               <option value="Rwanda">Rwanda</option>\r
+                                               <option value="Saint Kitts and Nevis">Saint Kitts and Nevis</option>\r
+                                               <option value="Saint Lucia">Saint Lucia</option>\r
+                                               <option value="Saint Vincent and the Grenadines">Saint Vincent and the Grenadines</option>\r
+                                               <option value="Samoa">Samoa</option>\r
+                                               <option value="San Marino">San Marino</option>\r
+                                               <option value="Sao Tome and Principe">Sao Tome and Principe</option>\r
+                                               <option value="Saudi Arabia">Saudi Arabia</option>\r
+                                               <option value="Senegal">Senegal</option>\r
+                                               <option value="Serbia">Serbia</option>\r
+                                               <option value="Seychelles">Seychelles</option>\r
+                                               <option value="Sierra Leone">Sierra Leone</option>\r
+                                               <option value="Singapore">Singapore</option>\r
+                                               <option value="Slovakia (Slovak Republic)">Slovakia (Slovak Republic)</option>\r
+                                               <option value="Slovenia">Slovenia</option>\r
+                                               <option value="Solomon Islands">Solomon Islands</option>\r
+                                               <option value="Somalia">Somalia</option>\r
+                                               <option value="South Africa">South Africa</option>\r
+                                               <option value="South Georgia and the South Sandwich Islands">South Georgia and the South Sandwich Islands</option>\r
+                                               <option value="Spain">Spain</option>\r
+                                               <option value="Sri Lanka">Sri Lanka</option>\r
+                                               <option value="St. Barthelemy">St. Barthelemy</option>\r
+                                               <option value="St. Eustatius">St. Eustatius</option>\r
+                                               <option value="St. Helena">St. Helena</option>\r
+                                               <option value="St. Pierre and Miquelon">St. Pierre and Miquelon</option>\r
+                                               <option value="Sudan">Sudan</option>\r
+                                               <option value="Suriname">Suriname</option>\r
+                                               <option value="Svalbard and Jan Mayen Islands">Svalbard and Jan Mayen Islands</option>\r
+                                               <option value="Swaziland">Swaziland</option>\r
+                                               <option value="Sweden">Sweden</option>\r
+                                               <option value="Switzerland">Switzerland</option>\r
+                                               <option value="Syrian Arab Republic">Syrian Arab Republic</option>\r
+                                               <option value="Taiwan">Taiwan</option>\r
+                                               <option value="Tajikistan">Tajikistan</option>\r
+                                               <option value="Tanzania, United Republic of">Tanzania, United Republic of</option>\r
+                                               <option value="Thailand">Thailand</option>\r
+                                               <option value="The Democratic Republic of Congo">The Democratic Republic of Congo</option>\r
+                                               <option value="Togo">Togo</option>\r
+                                               <option value="Tokelau">Tokelau</option>\r
+                                               <option value="Tonga">Tonga</option>\r
+                                               <option value="Trinidad and Tobago">Trinidad and Tobago</option>\r
+                                               <option value="Tunisia">Tunisia</option>\r
+                                               <option value="Turkey">Turkey</option>\r
+                                               <option value="Turkmenistan">Turkmenistan</option>\r
+                                               <option value="Turks and Caicos Islands">Turks and Caicos Islands</option>\r
+                                               <option value="Tuvalu">Tuvalu</option>\r
+                                               <option value="Uganda">Uganda</option>\r
+                                               <option value="Ukraine">Ukraine</option>\r
+                                               <option value="United Arab Emirates">United Arab Emirates</option>\r
+                                               <option value="United Kingdom">United Kingdom</option>\r
+                                               <option value="United States" selected="selected">United States</option>\r
+                                               <option value="United States Minor Outlying Islands">United States Minor Outlying Islands</option>\r
+                                               <option value="Uruguay">Uruguay</option>\r
+                                               <option value="Uzbekistan">Uzbekistan</option>\r
+                                               <option value="Vanuatu">Vanuatu</option>\r
+                                               <option value="Vatican City State (Holy See)">Vatican City State (Holy See)</option>\r
+                                               <option value="Venezuela">Venezuela</option>\r
+                                               <option value="Viet Nam">Viet Nam</option>\r
+                                               <option value="Virgin Islands (British)">Virgin Islands (British)</option>\r
+                                               <option value="Virgin Islands (U.S.)">Virgin Islands (U.S.)</option>\r
+                                               <option value="Wallis and Futuna Islands">Wallis and Futuna Islands</option>\r
+                                               <option value="Western Sahara">Western Sahara</option>\r
+                                               <option value="Yemen">Yemen</option>\r
+                                               <option value="Zambia">Zambia</option>\r
+                                               <option value="Zimbabwe">Zimbabwe</option>\r
+                                       </select>\r
+                                       </td>\r
+                               </tr>   \r
+                               <tr>                    \r
+                                       <td class="title_cell">State<span class="required">*</span></td>\r
+                                       <td class="field_cell">\r
+                                               <select id="state" name="state" class="">\r
+                                               <option value="" selected="selected">Select State</option>\r
+                                               <option value="AK">Alaska</option>\r
+                                               <option value="AL">Alabama</option>\r
+                                               <option value="AR">Arkansas</option>\r
+                                               <option value="AZ">Arizona</option>\r
+                                               <option value="CA">California</option>\r
+                                               <option value="CO">Colorado</option>\r
+                                               <option value="CT">Connecticut</option>\r
+                                               <option value="DC">District Of Columbia</option>\r
+                                               <option value="DE">Delaware</option>\r
+                                               <option value="FL">Florida</option>\r
+                                               <option value="GA">Georgia</option>\r
+                                               <option value="HI">Hawaii</option>\r
+                                               <option value="IA">Iowa</option>\r
+                                               <option value="ID">Idaho</option>\r
+                                               <option value="IL">Illinois</option>\r
+                                               <option value="IN">Indiana</option>\r
+                                               <option value="KS">Kansas</option>\r
+                                               <option value="KY">Kentucky</option>\r
+                                               <option value="LA">Louisiana</option>\r
+                                               <option value="MA">Massachusetts</option>\r
+                                               <option value="MD">Maryland</option>\r
+                                               <option value="ME">Maine</option>\r
+                                               <option value="MI">Michigan</option>\r
+                                               <option value="MN">Minnesota</option>\r
+                                               <option value="MO">Missouri</option>\r
+                                               <option value="MS">Mississippi</option>\r
+                                               <option value="MT">Montana</option>\r
+                                               <option value="NC">North Carolina</option>\r
+                                               <option value="ND">North Dakota</option>\r
+                                               <option value="NE">Nebraska</option>\r
+                                               <option value="NH">New Hampshire</option>\r
+                                               <option value="NJ">New Jersey</option>\r
+                                               <option value="NM">New Mexico</option>\r
+                                               <option value="NV">Nevada</option>\r
+                                               <option value="NY">New York</option>\r
+                                               <option value="OH">Ohio</option>\r
+                                               <option value="OK">Oklahoma</option>\r
+                                               <option value="OR">Oregon</option>\r
+                                               <option value="PA">Pennsylvania</option>\r
+                                               <option value="RI">Rhode Island</option>\r
+                                               <option value="SC">South Carolina</option>\r
+                                               <option value="SD">South Dakota</option>\r
+                                               <option value="TN">Tennessee</option>\r
+                                               <option value="TX">Texas</option>\r
+                                               <option value="UT">Utah</option>\r
+                                               <option value="VA">Virginia</option>\r
+                                               <option value="VT">Vermont</option>\r
+                                               <option value="WA">Washington</option>\r
+                                               <option value="WI">Wisconsin</option>\r
+                                               <option value="WV">West Virginia</option>\r
+                                               <option value="WY">Wyoming</option>\r
+                                       </select>\r
+                                       </td>\r
+                               </tr>\r
+                               <tr>                    \r
+                                       <td class="title_cell">Zip<span class="required">*</span></td>\r
+                                       <td class="field_cell">\r
+                                               <input type="text" class="inputbox" name="zip" value="" size="15" />\r
+                                       </td>\r
+                               </tr>\r
+                               <tr>                    \r
+                                       <td class="title_cell">Phone<span class="required">*</span></td>\r
+                                       <td class="field_cell">\r
+                                               <input type="text" class="inputbox" name="phone" value="" size="15" />\r
+                                       </td>\r
+                               </tr>                                                                                                                                                                   \r
+                               <tr>                    \r
+                                       <td class="title_cell">Email<span class="required">*</span></td>\r
+                                       <td class="field_cell">\r
+                                               <input type="text" class="inputbox" name="email" value="" size="40" />\r
+                                       </td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td colspan="2" class="heading"><strong>Donation Information</strong></td>                      \r
+                               </tr>\r
+                               \r
+                               \r
+                               <tr>\r
+                                       <td class="title_cell" valign="top">Amount</td>                         \r
+                                       <td id="amount_container">\r
+                                               $ <input type="text" class="inputbox" name="amount" value="" onchange="deSelectRadio();" size="10" />\r
+                                       </td>\r
+                               </tr>           \r
+                               <tr id="tr_card_type">\r
+                                       <td class="title_cell">Card type<span class="required">*</span></td>\r
+                                       <td class="field_cell">\r
+                                               <select id="card_type" name="card_type" class="inputbox" >\r
+                                                       <option value="Visa">Visa</option>\r
+                                                       <option value="MasterCard">MasterCard</option>\r
+                                                       <option value="Discover">Discover</option>\r
+                                                       <option value="Amex">American Express</option>\r
+                                               </select>\r
+                                       </td>\r
+                               </tr>                           \r
+                               <tr id="tr_card_number" >\r
+                                       <td class="title_cell">Credit Card Number<span class="required">*</span></td>\r
+                                       <td class="field_cell">\r
+                                               <input type="text" name="x_card_num" class="inputbox" onkeyup="checkNumber(this)" value="" size="20" />\r
+                                       </td>\r
+                               </tr>\r
+                               <tr id="tr_exp_date" >\r
+                                       <td class="title_cell">Expiration Date<span class="required">*</span>\r
+                                       </td>\r
+                                       <td class="field_cell">                                 \r
+                                               <select name="exp_month" class="inputbox exp_month" >\r
+                                                       <option value="1" <?php if(date('m')=='01'){?>  selected="selected"<?php }?>>01</option>\r
+                                                       <option value="2" <?php if(date('m')=='02'){?>  selected="selected"<?php }?>>02</option>\r
+                                                       <option value="3" <?php if(date('m')=='03'){?>  selected="selected"<?php }?>>03</option>\r
+                                                       <option value="4" <?php if(date('m')=='04'){?>  selected="selected"<?php }?>>04</option>\r
+                                                       <option value="5" <?php if(date('m')=='05'){?>  selected="selected"<?php }?>>05</option>\r
+                                                       <option value="6" <?php if(date('m')=='06'){?>  selected="selected"<?php }?>>06</option>\r
+                                                       <option value="7" <?php if(date('m')=='07'){?>  selected="selected"<?php }?>>07</option>\r
+                                                       <option value="8" <?php if(date('m')=='08'){?>  selected="selected"<?php }?>>08</option>\r
+                                                       <option value="9" <?php if(date('m')=='09'){?>  selected="selected"<?php }?>>09</option>\r
+                                                       <option value="10" <?php if(date('m')=='10'){?>  selected="selected"<?php }?>>10</option>\r
+                                                       <option value="11" <?php if(date('m')=='11'){?>  selected="selected"<?php }?>>11</option>\r
+                                                       <option value="12" <?php if(date('m')=='12'){?>  selected="selected"<?php }?>>12</option>\r
+                                               </select> / \r
+                                               <select id="exp_year" name="exp_year" class="inputbox exp_month" >\r
+                                                       <?php $year = date(Y,time()); $num = 1;\r
+                                                               while ( $num <= 7 ) {\r
+                                                                       echo '<option value="' . $year .'">' . $year . '</option>';$year++; $num++;\r
+                                                               }\r
+                                                       ?>\r
+                                               </select>\r
+                                       </td>\r
+                               </tr>\r
+                               <tr id="tr_cvv_code" >\r
+                                       <td class="title_cell">Card (CVV) Code<span class="required">*</span></td>\r
+                                       <td class="field_cell">\r
+                                               <input type="text" name="x_card_code" class="inputbox" onKeyUp="checkNumber(this)" value="" size="20" />\r
+                                       </td>\r
+                               </tr>\r
+                                                               \r
+                               \r
+                               <tr>                    \r
+                                       <td class="title_cell">Comment</td>\r
+                                       <td class="field_cell">\r
+                                               <textarea rows="7" cols="50" name="comment" class="inputbox"></textarea>\r
+                                       </td>\r
+                               </tr>                                                                                                           \r
+                               <tr>\r
+                                       <td colspan="2" align="left">\r
+                                               <input type="button" class="button donate_btn_submit" name="btnSubmit" value="Donate Now" onclick="checkData();">\r
+                                       </td>\r
+                               </tr>                                                                           \r
+                       </table>\r
+                       <input type="hidden" name="payment_method" value="os_authnet" />\r
+                       </form>\r
+                       <script type="text/javascript">\r
+                               var recurrings = new Array();\r
+                               recurrings[1] = 1 ;\r
+                               recurrings[2] = 1 ;\r
+                               recurrings[3] = 1 ;\r
+                               recurrings[4] = 1 ;\r
+                               recurrings[5] = 1 ;\r
+                               var countryIds = new Array(); \r
+                               countryIds[0] = 1;\r
+                               countryIds[1] = 2;\r
+                               countryIds[2] = 3;\r
+                               countryIds[3] = 4;\r
+                               countryIds[4] = 5;\r
+                               countryIds[5] = 6;\r
+                               countryIds[6] = 7;\r
+                               countryIds[7] = 8;\r
+                               countryIds[8] = 9;\r
+                               countryIds[9] = 10;\r
+                               countryIds[10] = 11;\r
+                               countryIds[11] = 12;\r
+                               countryIds[12] = 13;\r
+                               countryIds[13] = 14;\r
+                               countryIds[14] = 15;\r
+                               countryIds[15] = 16;\r
+                               countryIds[16] = 17;\r
+                               countryIds[17] = 18;\r
+                               countryIds[18] = 19;\r
+                               countryIds[19] = 20;\r
+                               countryIds[20] = 21;\r
+                               countryIds[21] = 22;\r
+                               countryIds[22] = 23;\r
+                               countryIds[23] = 24;\r
+                               countryIds[24] = 25;\r
+                               countryIds[25] = 26;\r
+                               countryIds[26] = 27;\r
+                               countryIds[27] = 28;\r
+                               countryIds[28] = 29;\r
+                               countryIds[29] = 30;\r
+                               countryIds[30] = 31;\r
+                               countryIds[31] = 32;\r
+                               countryIds[32] = 33;\r
+                               countryIds[33] = 34;\r
+                               countryIds[34] = 35;\r
+                               countryIds[35] = 36;\r
+                               countryIds[36] = 37;\r
+                               countryIds[37] = 38;\r
+                               countryIds[38] = 39;\r
+                               countryIds[39] = 40;\r
+                               countryIds[40] = 41;\r
+                               countryIds[41] = 42;\r
+                               countryIds[42] = 43;\r
+                               countryIds[43] = 44;\r
+                               countryIds[44] = 45;\r
+                               countryIds[45] = 46;\r
+                               countryIds[46] = 47;\r
+                               countryIds[47] = 48;\r
+                               countryIds[48] = 49;\r
+                               countryIds[49] = 50;\r
+                               countryIds[50] = 51;\r
+                               countryIds[51] = 52;\r
+                               countryIds[52] = 53;\r
+                               countryIds[53] = 54;\r
+                               countryIds[54] = 55;\r
+                               countryIds[55] = 56;\r
+                               countryIds[56] = 57;\r
+                               countryIds[57] = 58;\r
+                               countryIds[58] = 59;\r
+                               countryIds[59] = 60;\r
+                               countryIds[60] = 61;\r
+                               countryIds[61] = 62;\r
+                               countryIds[62] = 63;\r
+                               countryIds[63] = 64;\r
+                               countryIds[64] = 65;\r
+                               countryIds[65] = 66;\r
+                               countryIds[66] = 67;\r
+                               countryIds[67] = 68;\r
+                               countryIds[68] = 69;\r
+                               countryIds[69] = 70;\r
+                               countryIds[70] = 71;\r
+                               countryIds[71] = 72;\r
+                               countryIds[72] = 73;\r
+                               countryIds[73] = 74;\r
+                               countryIds[74] = 75;\r
+                               countryIds[75] = 76;\r
+                               countryIds[76] = 77;\r
+                               countryIds[77] = 78;\r
+                               countryIds[78] = 79;\r
+                               countryIds[79] = 80;\r
+                               countryIds[80] = 81;\r
+                               countryIds[81] = 82;\r
+                               countryIds[82] = 83;\r
+                               countryIds[83] = 84;\r
+                               countryIds[84] = 85;\r
+                               countryIds[85] = 86;\r
+                               countryIds[86] = 87;\r
+                               countryIds[87] = 88;\r
+                               countryIds[88] = 89;\r
+                               countryIds[89] = 90;\r
+                               countryIds[90] = 91;\r
+                               countryIds[91] = 92;\r
+                               countryIds[92] = 93;\r
+                               countryIds[93] = 94;\r
+                               countryIds[94] = 95;\r
+                               countryIds[95] = 96;\r
+                               countryIds[96] = 97;\r
+                               countryIds[97] = 98;\r
+                               countryIds[98] = 99;\r
+                               countryIds[99] = 100;\r
+                               countryIds[100] = 101;\r
+                               countryIds[101] = 102;\r
+                               countryIds[102] = 103;\r
+                               countryIds[103] = 104;\r
+                               countryIds[104] = 105;\r
+                               countryIds[105] = 106;\r
+                               countryIds[106] = 107;\r
+                               countryIds[107] = 108;\r
+                               countryIds[108] = 109;\r
+                               countryIds[109] = 110;\r
+                               countryIds[110] = 111;\r
+                               countryIds[111] = 112;\r
+                               countryIds[112] = 113;\r
+                               countryIds[113] = 114;\r
+                               countryIds[114] = 115;\r
+                               countryIds[115] = 116;\r
+                               countryIds[116] = 117;\r
+                               countryIds[117] = 118;\r
+                               countryIds[118] = 119;\r
+                               countryIds[119] = 120;\r
+                               countryIds[120] = 121;\r
+                               countryIds[121] = 122;\r
+                               countryIds[122] = 123;\r
+                               countryIds[123] = 124;\r
+                               countryIds[124] = 125;\r
+                               countryIds[125] = 126;\r
+                               countryIds[126] = 127;\r
+                               countryIds[127] = 128;\r
+                               countryIds[128] = 129;\r
+                               countryIds[129] = 130;\r
+                               countryIds[130] = 131;\r
+                               countryIds[131] = 132;\r
+                               countryIds[132] = 133;\r
+                               countryIds[133] = 134;\r
+                               countryIds[134] = 135;\r
+                               countryIds[135] = 136;\r
+                               countryIds[136] = 137;\r
+                               countryIds[137] = 138;\r
+                               countryIds[138] = 139;\r
+                               countryIds[139] = 140;\r
+                               countryIds[140] = 141;\r
+                               countryIds[141] = 142;\r
+                               countryIds[142] = 143;\r
+                               countryIds[143] = 144;\r
+                               countryIds[144] = 145;\r
+                               countryIds[145] = 146;\r
+                               countryIds[146] = 147;\r
+                               countryIds[147] = 148;\r
+                               countryIds[148] = 149;\r
+                               countryIds[149] = 150;\r
+                               countryIds[150] = 151;\r
+                               countryIds[151] = 152;\r
+                               countryIds[152] = 153;\r
+                               countryIds[153] = 154;\r
+                               countryIds[154] = 155;\r
+                               countryIds[155] = 156;\r
+                               countryIds[156] = 157;\r
+                               countryIds[157] = 158;\r
+                               countryIds[158] = 159;\r
+                               countryIds[159] = 160;\r
+                               countryIds[160] = 161;\r
+                               countryIds[161] = 162;\r
+                               countryIds[162] = 163;\r
+                               countryIds[163] = 164;\r
+                               countryIds[164] = 165;\r
+                               countryIds[165] = 166;\r
+                               countryIds[166] = 167;\r
+                               countryIds[167] = 168;\r
+                               countryIds[168] = 169;\r
+                               countryIds[169] = 170;\r
+                               countryIds[170] = 171;\r
+                               countryIds[171] = 172;\r
+                               countryIds[172] = 173;\r
+                               countryIds[173] = 174;\r
+                               countryIds[174] = 175;\r
+                               countryIds[175] = 176;\r
+                               countryIds[176] = 177;\r
+                               countryIds[177] = 178;\r
+                               countryIds[178] = 179;\r
+                               countryIds[179] = 180;\r
+                               countryIds[180] = 181;\r
+                               countryIds[181] = 182;\r
+                               countryIds[182] = 183;\r
+                               countryIds[183] = 184;\r
+                               countryIds[184] = 185;\r
+                               countryIds[185] = 186;\r
+                               countryIds[186] = 187;\r
+                               countryIds[187] = 188;\r
+                               countryIds[188] = 189;\r
+                               countryIds[189] = 190;\r
+                               countryIds[190] = 191;\r
+                               countryIds[191] = 192;\r
+                               countryIds[192] = 193;\r
+                               countryIds[193] = 194;\r
+                               countryIds[194] = 195;\r
+                               countryIds[195] = 196;\r
+                               countryIds[196] = 197;\r
+                               countryIds[197] = 198;\r
+                               countryIds[198] = 199;\r
+                               countryIds[199] = 200;\r
+                               countryIds[200] = 201;\r
+                               countryIds[201] = 202;\r
+                               countryIds[202] = 203;\r
+                               countryIds[203] = 204;\r
+                               countryIds[204] = 205;\r
+                               countryIds[205] = 206;\r
+                               countryIds[206] = 207;\r
+                               countryIds[207] = 208;\r
+                               countryIds[208] = 209;\r
+                               countryIds[209] = 210;\r
+                               countryIds[210] = 211;\r
+                               countryIds[211] = 212;\r
+                               countryIds[212] = 213;\r
+                               countryIds[213] = 214;\r
+                               countryIds[214] = 215;\r
+                               countryIds[215] = 216;\r
+                               countryIds[216] = 217;\r
+                               countryIds[217] = 218;\r
+                               countryIds[218] = 219;\r
+                               countryIds[219] = 220;\r
+                               countryIds[220] = 221;\r
+                               countryIds[221] = 222;\r
+                               countryIds[222] = 223;\r
+                               countryIds[223] = 224;\r
+                               countryIds[224] = 225;\r
+                               countryIds[225] = 226;\r
+                               countryIds[226] = 227;\r
+                               countryIds[227] = 228;\r
+                               countryIds[228] = 229;\r
+                               countryIds[229] = 230;\r
+                               countryIds[230] = 231;\r
+                               countryIds[231] = 232;\r
+                               countryIds[232] = 233;\r
+                               countryIds[233] = 234;\r
+                               countryIds[234] = 235;\r
+                               countryIds[235] = 236;\r
+                               countryIds[236] = 237;\r
+                               countryIds[237] = 238;\r
+                               countryIds[238] = 239;\r
+                               countryIds[239] = 240;\r
+                               countryIds[240] = 241;\r
+                               countryIds[241] = 242;\r
+                               countryIds[242] = 243;\r
+                               countryIds[243] = 244;\r
+                               countryIds[244] = 245;\r
+                               var countryNames = new Array(); \r
+                               countryNames[0]= "Afghanistan"\r
+                               countryNames[1]= "Albania"\r
+                               countryNames[2]= "Algeria"\r
+                               countryNames[3]= "American Samoa"\r
+                               countryNames[4]= "Andorra"\r
+                               countryNames[5]= "Angola"\r
+                               countryNames[6]= "Anguilla"\r
+                               countryNames[7]= "Antarctica"\r
+                               countryNames[8]= "Antigua and Barbuda"\r
+                               countryNames[9]= "Argentina"\r
+                               countryNames[10]= "Armenia"\r
+                               countryNames[11]= "Aruba"\r
+                               countryNames[12]= "Australia"\r
+                               countryNames[13]= "Austria"\r
+                               countryNames[14]= "Azerbaijan"\r
+                               countryNames[15]= "Bahamas"\r
+                               countryNames[16]= "Bahrain"\r
+                               countryNames[17]= "Bangladesh"\r
+                               countryNames[18]= "Barbados"\r
+                               countryNames[19]= "Belarus"\r
+                               countryNames[20]= "Belgium"\r
+                               countryNames[21]= "Belize"\r
+                               countryNames[22]= "Benin"\r
+                               countryNames[23]= "Bermuda"\r
+                               countryNames[24]= "Bhutan"\r
+                               countryNames[25]= "Bolivia"\r
+                               countryNames[26]= "Bosnia and Herzegowina"\r
+                               countryNames[27]= "Botswana"\r
+                               countryNames[28]= "Bouvet Island"\r
+                               countryNames[29]= "Brazil"\r
+                               countryNames[30]= "British Indian Ocean Territory"\r
+                               countryNames[31]= "Brunei Darussalam"\r
+                               countryNames[32]= "Bulgaria"\r
+                               countryNames[33]= "Burkina Faso"\r
+                               countryNames[34]= "Burundi"\r
+                               countryNames[35]= "Cambodia"\r
+                               countryNames[36]= "Cameroon"\r
+                               countryNames[37]= "Canada"\r
+                               countryNames[38]= "Cape Verde"\r
+                               countryNames[39]= "Cayman Islands"\r
+                               countryNames[40]= "Central African Republic"\r
+                               countryNames[41]= "Chad"\r
+                               countryNames[42]= "Chile"\r
+                               countryNames[43]= "China"\r
+                               countryNames[44]= "Christmas Island"\r
+                               countryNames[45]= "Cocos (Keeling) Islands"\r
+                               countryNames[46]= "Colombia"\r
+                               countryNames[47]= "Comoros"\r
+                               countryNames[48]= "Congo"\r
+                               countryNames[49]= "Cook Islands"\r
+                               countryNames[50]= "Costa Rica"\r
+                               countryNames[51]= "Cote D'Ivoire"\r
+                               countryNames[52]= "Croatia"\r
+                               countryNames[53]= "Cuba"\r
+                               countryNames[54]= "Cyprus"\r
+                               countryNames[55]= "Czech Republic"\r
+                               countryNames[56]= "Denmark"\r
+                               countryNames[57]= "Djibouti"\r
+                               countryNames[58]= "Dominica"\r
+                               countryNames[59]= "Dominican Republic"\r
+                               countryNames[60]= "East Timor"\r
+                               countryNames[61]= "Ecuador"\r
+                               countryNames[62]= "Egypt"\r
+                               countryNames[63]= "El Salvador"\r
+                               countryNames[64]= "Equatorial Guinea"\r
+                               countryNames[65]= "Eritrea"\r
+                               countryNames[66]= "Estonia"\r
+                               countryNames[67]= "Ethiopia"\r
+                               countryNames[68]= "Falkland Islands (Malvinas)"\r
+                               countryNames[69]= "Faroe Islands"\r
+                               countryNames[70]= "Fiji"\r
+                               countryNames[71]= "Finland"\r
+                               countryNames[72]= "France"\r
+                               countryNames[73]= "France, Metropolitan"\r
+                               countryNames[74]= "French Guiana"\r
+                               countryNames[75]= "French Polynesia"\r
+                               countryNames[76]= "French Southern Territories"\r
+                               countryNames[77]= "Gabon"\r
+                               countryNames[78]= "Gambia"\r
+                               countryNames[79]= "Georgia"\r
+                               countryNames[80]= "Germany"\r
+                               countryNames[81]= "Ghana"\r
+                               countryNames[82]= "Gibraltar"\r
+                               countryNames[83]= "Greece"\r
+                               countryNames[84]= "Greenland"\r
+                               countryNames[85]= "Grenada"\r
+                               countryNames[86]= "Guadeloupe"\r
+                               countryNames[87]= "Guam"\r
+                               countryNames[88]= "Guatemala"\r
+                               countryNames[89]= "Guinea"\r
+                               countryNames[90]= "Guinea-bissau"\r
+                               countryNames[91]= "Guyana"\r
+                               countryNames[92]= "Haiti"\r
+                               countryNames[93]= "Heard and Mc Donald Islands"\r
+                               countryNames[94]= "Honduras"\r
+                               countryNames[95]= "Hong Kong"\r
+                               countryNames[96]= "Hungary"\r
+                               countryNames[97]= "Iceland"\r
+                               countryNames[98]= "India"\r
+                               countryNames[99]= "Indonesia"\r
+                               countryNames[100]= "Iran (Islamic Republic of)"\r
+                               countryNames[101]= "Iraq"\r
+                               countryNames[102]= "Ireland"\r
+                               countryNames[103]= "Israel"\r
+                               countryNames[104]= "Italy"\r
+                               countryNames[105]= "Jamaica"\r
+                               countryNames[106]= "Japan"\r
+                               countryNames[107]= "Jordan"\r
+                               countryNames[108]= "Kazakhstan"\r
+                               countryNames[109]= "Kenya"\r
+                               countryNames[110]= "Kiribati"\r
+                               countryNames[111]= "Korea, Democratic People's Republic of"\r
+                               countryNames[112]= "Korea, Republic of"\r
+                               countryNames[113]= "Kuwait"\r
+                               countryNames[114]= "Kyrgyzstan"\r
+                               countryNames[115]= "Lao People's Democratic Republic"\r
+                               countryNames[116]= "Latvia"\r
+                               countryNames[117]= "Lebanon"\r
+                               countryNames[118]= "Lesotho"\r
+                               countryNames[119]= "Liberia"\r
+                               countryNames[120]= "Libyan Arab Jamahiriya"\r
+                               countryNames[121]= "Liechtenstein"\r
+                               countryNames[122]= "Lithuania"\r
+                               countryNames[123]= "Luxembourg"\r
+                               countryNames[124]= "Macau"\r
+                               countryNames[125]= "Macedonia, The Former Yugoslav Republic of"\r
+                               countryNames[126]= "Madagascar"\r
+                               countryNames[127]= "Malawi"\r
+                               countryNames[128]= "Malaysia"\r
+                               countryNames[129]= "Maldives"\r
+                               countryNames[130]= "Mali"\r
+                               countryNames[131]= "Malta"\r
+                               countryNames[132]= "Marshall Islands"\r
+                               countryNames[133]= "Martinique"\r
+                               countryNames[134]= "Mauritania"\r
+                               countryNames[135]= "Mauritius"\r
+                               countryNames[136]= "Mayotte"\r
+                               countryNames[137]= "Mexico"\r
+                               countryNames[138]= "Micronesia, Federated States of"\r
+                               countryNames[139]= "Moldova, Republic of"\r
+                               countryNames[140]= "Monaco"\r
+                               countryNames[141]= "Mongolia"\r
+                               countryNames[142]= "Montserrat"\r
+                               countryNames[143]= "Morocco"\r
+                               countryNames[144]= "Mozambique"\r
+                               countryNames[145]= "Myanmar"\r
+                               countryNames[146]= "Namibia"\r
+                               countryNames[147]= "Nauru"\r
+                               countryNames[148]= "Nepal"\r
+                               countryNames[149]= "Netherlands"\r
+                               countryNames[150]= "Netherlands Antilles"\r
+                               countryNames[151]= "New Caledonia"\r
+                               countryNames[152]= "New Zealand"\r
+                               countryNames[153]= "Nicaragua"\r
+                               countryNames[154]= "Niger"\r
+                               countryNames[155]= "Nigeria"\r
+                               countryNames[156]= "Niue"\r
+                               countryNames[157]= "Norfolk Island"\r
+                               countryNames[158]= "Northern Mariana Islands"\r
+                               countryNames[159]= "Norway"\r
+                               countryNames[160]= "Oman"\r
+                               countryNames[161]= "Pakistan"\r
+                               countryNames[162]= "Palau"\r
+                               countryNames[163]= "Panama"\r
+                               countryNames[164]= "Papua New Guinea"\r
+                               countryNames[165]= "Paraguay"\r
+                               countryNames[166]= "Peru"\r
+                               countryNames[167]= "Philippines"\r
+                               countryNames[168]= "Pitcairn"\r
+                               countryNames[169]= "Poland"\r
+                               countryNames[170]= "Portugal"\r
+                               countryNames[171]= "Puerto Rico"\r
+                               countryNames[172]= "Qatar"\r
+                               countryNames[173]= "Reunion"\r
+                               countryNames[174]= "Romania"\r
+                               countryNames[175]= "Russian Federation"\r
+                               countryNames[176]= "Rwanda"\r
+                               countryNames[177]= "Saint Kitts and Nevis"\r
+                               countryNames[178]= "Saint Lucia"\r
+                               countryNames[179]= "Saint Vincent and the Grenadines"\r
+                               countryNames[180]= "Samoa"\r
+                               countryNames[181]= "San Marino"\r
+                               countryNames[182]= "Sao Tome and Principe"\r
+                               countryNames[183]= "Saudi Arabia"\r
+                               countryNames[184]= "Senegal"\r
+                               countryNames[185]= "Seychelles"\r
+                               countryNames[186]= "Sierra Leone"\r
+                               countryNames[187]= "Singapore"\r
+                               countryNames[188]= "Slovakia (Slovak Republic)"\r
+                               countryNames[189]= "Slovenia"\r
+                               countryNames[190]= "Solomon Islands"\r
+                               countryNames[191]= "Somalia"\r
+                               countryNames[192]= "South Africa"\r
+                               countryNames[193]= "South Georgia and the South Sandwich Islands"\r
+                               countryNames[194]= "Spain"\r
+                               countryNames[195]= "Sri Lanka"\r
+                               countryNames[196]= "St. Helena"\r
+                               countryNames[197]= "St. Pierre and Miquelon"\r
+                               countryNames[198]= "Sudan"\r
+                               countryNames[199]= "Suriname"\r
+                               countryNames[200]= "Svalbard and Jan Mayen Islands"\r
+                               countryNames[201]= "Swaziland"\r
+                               countryNames[202]= "Sweden"\r
+                               countryNames[203]= "Switzerland"\r
+                               countryNames[204]= "Syrian Arab Republic"\r
+                               countryNames[205]= "Taiwan"\r
+                               countryNames[206]= "Tajikistan"\r
+                               countryNames[207]= "Tanzania, United Republic of"\r
+                               countryNames[208]= "Thailand"\r
+                               countryNames[209]= "Togo"\r
+                               countryNames[210]= "Tokelau"\r
+                               countryNames[211]= "Tonga"\r
+                               countryNames[212]= "Trinidad and Tobago"\r
+                               countryNames[213]= "Tunisia"\r
+                               countryNames[214]= "Turkey"\r
+                               countryNames[215]= "Turkmenistan"\r
+                               countryNames[216]= "Turks and Caicos Islands"\r
+                               countryNames[217]= "Tuvalu"\r
+                               countryNames[218]= "Uganda"\r
+                               countryNames[219]= "Ukraine"\r
+                               countryNames[220]= "United Arab Emirates"\r
+                               countryNames[221]= "United Kingdom"\r
+                               countryNames[222]= "United States"\r
+                               countryNames[223]= "United States Minor Outlying Islands"\r
+                               countryNames[224]= "Uruguay"\r
+                               countryNames[225]= "Uzbekistan"\r
+                               countryNames[226]= "Vanuatu"\r
+                               countryNames[227]= "Vatican City State (Holy See)"\r
+                               countryNames[228]= "Venezuela"\r
+                               countryNames[229]= "Viet Nam"\r
+                               countryNames[230]= "Virgin Islands (British)"\r
+                               countryNames[231]= "Virgin Islands (U.S.)"\r
+                               countryNames[232]= "Wallis and Futuna Islands"\r
+                               countryNames[233]= "Western Sahara"\r
+                               countryNames[234]= "Yemen"\r
+                               countryNames[235]= "Serbia"\r
+                               countryNames[236]= "The Democratic Republic of Congo"\r
+                               countryNames[237]= "Zambia"\r
+                               countryNames[238]= "Zimbabwe"\r
+                               countryNames[239]= "East Timor"\r
+                               countryNames[240]= "Jersey"\r
+                               countryNames[241]= "St. Barthelemy"\r
+                               countryNames[242]= "St. Eustatius"\r
+                               countryNames[243]= "Canary Islands"\r
+                               countryNames[244]= "Montenegro"\r
+                               var stateList = new Array();\r
+                               stateList[223] = "AL:Alabama,AK:Alaska,AZ:Arizona,AR:Arkansas,CA:California,CO:Colorado,CT:Connecticut,DE:Delaware,DC:District Of Columbia,FL:Florida,GA:Georgia,HI:Hawaii,ID:Idaho,IL:Illinois,IN:Indiana,IA:Iowa,KS:Kansas,KY:Kentucky,LA:Louisiana,ME:Maine,MD:Maryland,MA:Massachusetts,MI:Michigan,MN:Minnesota,MS:Mississippi,MO:Missouri,MT:Montana,NE:Nebraska,NV:Nevada,NH:New Hampshire,NJ:New Jersey,NM:New Mexico,NY:New York,NC:North Carolina,ND:North Dakota,OH:Ohio,OK:Oklahoma,OR:Oregon,PA:Pennsylvania,RI:Rhode Island,SC:South Carolina,SD:South Dakota,TN:Tennessee,TX:Texas,UT:Utah,VT:Vermont,VA:Virginia,WA:Washington,WV:West Virginia,WI:Wisconsin,WY:Wyoming";\r
+                               stateList[38] = "AB:Alberta,BC:British Columbia,MB:Manitoba,NB:New Brunswick,NL:Newfoundland and Labrador,NT:Northwest Territories,NS:Nova Scotia,NU:Nunavut,ON:Ontario,PE:Prince Edward Island,QC:Quebec,SK:Saskatchewan,YT:Yukon";\r
+                               stateList[222] = "EN:England,NI:Northern Ireland,SD:Scotland,WS:Wales";\r
+                               stateList[13] = "AC:Australian Capital Territory,NS:New South Wales,NT:Northern Territory,QL:Queensland,SA:South Australia,TS:Tasmania,VI:Victoria,WA:Western Australia";\r
+                               stateList[138] = "AG:Aguascalientes,BN:Baja California Norte,BS:Baja California Sur,CA:Campeche,CS:Chiapas,CH:Chihuahua,CO:Coahuila,CM:Colima,DF:Distrito Federal,DO:Durango,GO:Guanajuato,GU:Guerrero,HI:Hidalgo,JA:Jalisco,EM:M,MI:Michoac,MO:Morelos,NY:Nayarit,NL:Nuevo Le,OA:Oaxaca,PU:Puebla,QU:Quer,QR:Quintana Roo,SP:San Luis Potos,SI:Sinaloa,SO:Sonora,TA:Tabasco,TM:Tamaulipas,TX:Tlaxcala,VZ:Veracruz,YU:Yucat,ZA:Zacatecas";\r
+                               stateList[30] = "AC:Acre,AL:Alagoas,AP:Amap,AM:Amazonas,BA:Bah,CE:Cear,DF:Distrito Federal,ES:Espirito Santo,GO:Goi,MA:Maranh,MT:Mato Grosso,MS:Mato Grosso do Sul,MG:Minas Gera,PR:Paran,PB:Para,PA:Par,PE:Pernambuco,PI:Piau,RN:Rio Grande do Norte,RS:Rio Grande do Sul,RJ:Rio de Janeiro,RO:Rond,RR:Roraima,SC:Santa Catarina,SE:Sergipe,SP:S,TO:Tocantins";\r
+                               stateList[44] = "34:Anhui,11:Beijing,50:Chongqing,35:Fujian,62:Gansu,44:Guangdong,45:Guangxi Zhuang,52:Guizhou,46:Hainan,13:Hebei,23:Heilongjiang,41:Henan,42:Hubei,43:Hunan,32:Jiangsu,36:Jiangxi,22:Jilin,21:Liaoning,15:Nei Mongol,64:Ningxia Hui,63:Qinghai,37:Shandong,31:Shanghai,61:Shaanxi,51:Sichuan,12:Tianjin,65:Xinjiang Uygur,54:Xizang,53:Yunnan,33:Zhejiang";\r
+                               stateList[104] = "IL:Israel,GZ:Gaza Strip,WB:West Bank";\r
+                               stateList[151] = "SM:St. Maarten,BN:Bonaire,CR:Curacao";\r
+                               stateList[175] = "AB:Alba,AR:Arad,AG:Arges,BC:Bacau,BH:Bihor,BN:Bistrita-Nasaud,BT:Botosani,BR:Braila,BV:Brasov,B:Bucuresti,BZ:Buzau,CL:Calarasi,CS:Caras Severin,CJ:Cluj,CT:Constanta,CV:Covasna,DB:Dambovita,DJ:Dolj,GL:Galati,GR:Giurgiu,GJ:Gorj,HR:Hargita,HD:Hunedoara,IL:Ialomita,IS:Iasi,IF:Ilfov,MM:Maramures,MH:Mehedinti,MS:Mures,NT:Neamt,OT:Olt,PH:Prahova,SJ:Salaj,SM:Satu Mare,SB:Sibiu,SV:Suceava,TR:Teleorman,TM:Timis,TL:Tulcea,VL:Valcea,VS:Vaslui,VN:Vrancea";\r
+                               stateList[105] = "AG:Agrigento,AL:Alessandria,AN:Ancona,AO:Aosta,AR:Arezzo,AP:Ascoli Piceno,AT:Asti,AV:Avellino,BA:Bari,BL:Belluno,BN:Benevento,BG:Bergamo,BI:Biella,BO:Bologna,BZ:Bolzano,BS:Brescia,BR:Brindisi,CA:Cagliari,CL:Caltanissetta,CB:Campobasso,CI:Carbonia-Iglesias,CE:Caserta,CT:Catania,CZ:Catanzaro,CH:Chieti,CO:Como,CS:Cosenza,CR:Cremona,KR:Crotone,CN:Cuneo,EN:Enna,FE:Ferrara,FI:Firenze,FG:Foggia,FC:Forli-Cesena,FR:Frosinone,GE:Genova,GO:Gorizia,GR:Grosseto,IM:Imperia,IS:Isernia,AQ:L'Aquila,SP:La Spezia,LT:Latina,LE:Lecce,LC:Lecco,LI:Livorno,LO:Lodi,LU:Lucca,MC:Macerata,MN:Mantova,MS:Massa-Carrara,MT:Matera,VS:Medio Campidano,ME:Messina,MI:Milano,MO:Modena,NA:Napoli,NO:Novara,NU:Nuoro,OG:Ogliastra,OT:Olbia-Tempio,OR:Oristano,PD:Padova,PA:Palermo,PR:Parma,PV:Pavia,PG:Perugia,PU:Pesaro e Urbino,PE:Pescara,PC:Piacenza,PI:Pisa,PT:Pistoia,PN:Pordenone,PZ:Potenza,PO:Prato,RG:Ragusa,RA:Ravenna,RC:Reggio Calabria,RE:Reggio Emilia,RI:Rieti,RN:Rimini,RM:Roma,RO:Rovigo,SA:Salerno,SS:Sassari,SV:Savona,SI:Siena,SR:Siracusa,SO:Sondrio,TA:Taranto,TE:Teramo,TR:Terni,TO:Torino,TP:Trapani,TN:Trento,TV:Treviso,TS:Trieste,UD:Udine,VA:Varese,VE:Venezia,VB:Verbano Cusio Ossola,VC:Vercelli,VR:Verona,VV:Vibo Valenzia,VI:Vicenza,VT:Viterbo";\r
+                               stateList[195] = "15:A Coru,01:Alava,02:Albacete,03:Alicante,04:Almeria,33:Asturias,05:Avila,06:Badajoz,07:Baleares,08:Barcelona,09:Burgos,10:Caceres,11:Cadiz,39:Cantabria,12:Castellon,51:Ceuta,13:Ciudad Real,14:Cordoba,16:Cuenca,17:Girona,18:Granada,19:Guadalajara,20:Guipuzcoa,21:Huelva,22:Huesca,23:Jaen,26:La Rioja,35:Las Palmas,24:Leon,25:Lleida,27:Lugo,28:Madrid,29:Malaga,52:Melilla,30:Murcia,31:Navarra,32:Ourense,34:Palencia,36:Pontevedra,37:Salamanca,38:Santa Cruz de Tenerife,40:Segovia,41:Sevilla,42:Soria,43:Tarragona,44:Teruel,45:Toledo,46:Valencia,47:Valladolid,48:Vizcaya,49:Zamora,50:Zaragoza";\r
+                               stateList[11] = "AG:Aragatsotn,AR:Ararat,AV:Armavir,GR:Gegharkunik,KT:Kotayk,LO:Lori,SH:Shirak,SU:Syunik,TV:Tavush,VD:Vayots-Dzor,ER:Yerevan";\r
+                               stateList[99] = "AI:Andaman & Nicobar Islands,AN:Andhra Pradesh,AR:Arunachal Pradesh,AS:Assam,BI:Bihar,CA:Chandigarh,CH:Chhatisgarh,DD:Dadra & Nagar Haveli,DA:Daman & Diu,DE:Delhi,GO:Goa,GU:Gujarat,HA:Haryana,HI:Himachal Pradesh,JA:Jammu & Kashmir,JH:Jharkhand,KA:Karnataka,KE:Kerala,LA:Lakshadweep,MD:Madhya Pradesh,MH:Maharashtra,MN:Manipur,ME:Meghalaya,MI:Mizoram,NA:Nagaland,OR:Orissa,PO:Pondicherry,PU:Punjab,RA:Rajasthan,SI:Sikkim,TA:Tamil Nadu,TR:Tripura,UA:Uttaranchal,UT:Uttar Pradesh,WE:West Bengal";\r
+                               stateList[101] = "BO:Ahmadi va Kohkiluyeh,AR:Ardabil,AG:Azarbayjan-e Gharbi,AS:Azarbayjan-e Sharqi,BU:Bushehr,CM:Chaharmahal va Bakhtiari,ES:Esfahan,FA:Fars,GI:Gilan,GO:Gorgan,HA:Hamadan,HO:Hormozgan,IL:Ilam,KE:Kerman,BA:Kermanshah,KJ:Khorasan-e Junoubi,KR:Khorasan-e Razavi,KS:Khorasan-e Shomali,KH:Khuzestan,KO:Kordestan,LO:Lorestan,MR:Markazi,MZ:Mazandaran,QA:Qazvin,QO:Qom,SE:Semnan,SB:Sistan va Baluchestan,TE:Tehran,YA:Yazd,ZA:Zanjan";\r
+                               methods = new PaymentMethods();\r
+                               method = new PaymentMethod('os_authnet',1,0,1,0, 1);\r
+                               methods.Add(method);\r
+                               var currentCampaign = 0 ;\r
+                               function checkData() {\r
+                                       var form = document.donate_form;                        \r
+                                       var minimumAmount = 1 ;\r
+                                       var maximumAmount = 100000 ;\r
+                                                               \r
+                                       if (form.first_name.value == '') {\r
+                                               alert("Please enter your first name");\r
+                                               form.first_name.focus();\r
+                                               return ;\r
+                                       }                                               \r
+                                       if (form.last_name.value=="") {\r
+                                               alert("Please enter your last name");\r
+                                               form.last_name.focus();\r
+                                               return;\r
+                                       }                                               \r
+                                       if (form.address.value=="") {\r
+                                               alert("Please enter your address");\r
+                                               form.address.focus();\r
+                                               return; \r
+                                       }                                               \r
+                                       if (form.city.value == "") {\r
+                                               alert("Please enter your city");\r
+                                               form.city.focus();\r
+                                               return; \r
+                                       }                                               \r
+                                       if (form.state.length > 1) {\r
+                                               if (form.state.value =="") {\r
+                                                       alert("Please enter your state");\r
+                                                       form.state.focus();\r
+                                                       return; \r
+                                               }\r
+                                       }                                                                                                                       \r
+                                       if (form.zip.value == "") {\r
+                                               alert("Please enter your zip");\r
+                                               form.zip.focus();\r
+                                               return;\r
+                                       }                                               \r
+                                       if (form.country.value == "") {\r
+                                               alert("Please enter your country");\r
+                                               form.country.focus();\r
+                                               return; \r
+                                       }                               \r
+                                       if (form.phone.value == "") {\r
+                                               alert("Please enter your phone");\r
+                                               form.phone.focus();\r
+                                               return;\r
+                                       }                                               \r
+                                                                               \r
+                                       if (form.email.value == '') {\r
+                                               alert("Please enter your email");\r
+                                               form.email.focus();\r
+                                               return;\r
+                                       }\r
+                                                               \r
+                                       var emailFilter = /^\w+[\+\.\w-]*@([\w-]+\.)*\w+[\w-]*\.([a-z]{2,4}|\d+)$/i\r
+                                       var ret = emailFilter.test(form.email.value);\r
+                                       if (!ret) {\r
+                                               alert("Please enter a valid email");\r
+                                               form.email.focus();\r
+                                               return;\r
+                                       }                                                                       \r
+                                       var amountValid = false ;\r
+                                       var amount = 0 ;\r
+                                       if (form.rd_amount) {\r
+                                       if (form.rd_amount.length) {\r
+                                                       for (var i = 0 ; i < form.rd_amount.length ; i++) {\r
+                                                               if(form.rd_amount[i].checked == true) {\r
+                                                                       amountValid = true ;\r
+                                                                       amount = form.rd_amount[i].value ;\r
+                                                               }       \r
+                                                       }       \r
+                                               } else if (form.rd_amount.checked == true) {\r
+                                                       amountValid = true ;\r
+                                                       amount = form.rd_amount.value ;\r
+                                               }\r
+                                                                                                                       \r
+                                       }\r
+\r
+                                       if (!amountValid) {                                                     \r
+                                               if (parseFloat(form.amount.value)) {\r
+                                                       amountValid = true;\r
+                                                       amount = form.amount.value ;    \r
+                                               }                               \r
+                                       }               \r
+                                                                               \r
+                                                                                                               \r
+                                       if (!amountValid) {\r
+                                               var msg;\r
+                                                       msg = "Please choose from pre-defined amounts or enter your own amount in the textbox";\r
+                                               alert(msg);\r
+                                               return; \r
+                                       }                       \r
+\r
+\r
+                                       if (parseFloat(amount) < minimumAmount) {\r
+                                               alert("Minimum donation amount allowed is : $" + minimumAmount);\r
+                                               form.amount.focus();\r
+                                               form.amount.focus();\r
+                                               return ;\r
+                                       }\r
+\r
+                                       if ((maximumAmount >0) && (parseFloat(amount) > maximumAmount)) {\r
+                                               alert("Maximum donation amount allowed is : $" + maximumAmount);\r
+                                               form.amount.focus();\r
+                                               return ;\r
+                                       }\r
+\r
+                                       \r
+                                       \r
+                               \r
+                                                                                                       \r
+                                                                                                       \r
+                                       var paymentMethod = "";\r
+                                       paymentMethod = "os_authnet";\r
+                                                                               \r
+                                       method = methods.Find(paymentMethod);                           \r
+                                       //Check payment method page\r
+                                       if (method.getCreditCard()) {\r
+                                               if (form.x_card_num.value == "") {\r
+                                                       alert("Please enter creditcard number");\r
+                                                       form.x_card_num.focus();\r
+                                                       return;                                 \r
+                                               }                                       \r
+                                               if (form.x_card_code.value == "") {\r
+                                                       alert("Please enter card code");\r
+                                                       form.x_card_code.focus();\r
+                                                       return ;\r
+                                               }\r
+                                       }\r
+                                       if (method.getCardHolderName()) {\r
+                                               if (form.card_holder_name.value == '') {\r
+                                                       alert("JE_ENTER_CARD_HOLDER_NAME");\r
+                                                       form.card_holde_name.focus();\r
+                                                       return ;\r
+                                               }\r
+                                       }                       \r
+                                       //This check is only used for echeck payment gateway\r
+                                       if (paymentMethod == 'os_echeck') {\r
+                                               if (form.x_bank_aba_code.value == '') {\r
+                                                       alert("Please enter Bank ABA Routing Number");\r
+                                                       form.x_bank_aba_code.focus();\r
+                                                       return ;\r
+                                               }                               \r
+                                               if (form.x_bank_acct_num.value == '') {\r
+                                                       alert("Please enter Bank Account Number");\r
+                                                       form.x_bank_aba_code.focus();\r
+                                                       return ;\r
+                                               }                               \r
+                                               if (form.x_bank_name.value == '') {\r
+                                                       alert("Please enter Bank Name");\r
+                                                       form.x_bank_name.focus();\r
+                                                       return ;                \r
+                                               }                               \r
+                                               if (form.x_bank_acct_name.value == '') {\r
+                                                       alert("Please enter Account Holder Name");\r
+                                                       form.x_bank_acct_name.focus();\r
+                                                       return ;\r
+                                               }                               \r
+                                       }                               \r
+                                       \r
+                                               form.submit();\r
+                                                                                                                                                                                                                               \r
+                               }                       \r
+                                                                                       \r
+                               function checkNumber(txtName)\r
+                               {                       \r
+                                       var num = txtName.value                 \r
+                                       if(isNaN(num))                  \r
+                                       {                       \r
+                                               alert("Only number is accepted");                       \r
+                                               txtName.value = "";                     \r
+                                               txtName.focus();                        \r
+                                       }                       \r
+                               }\r
+\r
+\r
+                               function changeDonationType() {\r
+                                       var form = document.donate_form ;\r
+                                       var trFrequecy = document.getElementById('tr_frequency');\r
+                                       var trNumberDonatons = document.getElementById('tr_number_donations');                                                          \r
+                                       if (form.donation_type[0].checked == true) {\r
+                                               trFrequecy.style.display = 'none' ;\r
+                                               if (trNumberDonatons)\r
+                                                       trNumberDonatons.style.display = 'none' ;\r
+                                       } else {\r
+                                               trFrequecy.style.display = '' ;\r
+                                               if (trNumberDonatons)\r
+                                                       trNumberDonatons.style.display = '' ;\r
+                                       }       \r
+                               }       \r
+\r
+                               function deSelectRadio() {\r
+                                       var form = document.donate_form ;\r
+                                       form.amount.value = form.amount.value.replace(',', '') ;\r
+                                       if (parseFloat(form.amount.value)) {\r
+                                               if(form.rd_amount) {\r
+                                               if (form.rd_amount.length) {\r
+                                                       for(var i =0 ; i < form.rd_amount.length ; i++) {\r
+                                                               form.rd_amount[i].checked = false ;\r
+                                                       }\r
+                                               } else {\r
+                                                       form.rd_amount.checked = false ;\r
+                                               }       \r
+                                                                                                               \r
+                                               }       \r
+                                       } else {\r
+                                               form.amount.value = '';\r
+                                       }\r
+                               }\r
+\r
+                               function clearTextbox() {\r
+                                       var form = document.donate_form ;\r
+                                       if (form.amount)\r
+                                               form.amount.value = ''; \r
+                               }               \r
+                                               \r
+                               function displayRecurring(show) {       \r
+                                       var form = document.donate_form ;               \r
+                                       var trDonationType = document.getElementById('donation_type') ;\r
+                                       if (!trDonationType)  \r
+                                               return ;                        \r
+                                       var trFrequency = document.getElementById('tr_frequency');\r
+                                       var trNumberDonations = document.getElementById('tr_number_donations') ;\r
+                                       if (show) {\r
+                                               trDonationType.style.display = '';\r
+                                               if (form.donation_type[1].checked) {\r
+                                                       trFrequency.style.display = '';\r
+                                                       if (trNumberDonations) {\r
+                                                               trNumberDonations.style.display = '';\r
+                                                       }\r
+                                               }                               \r
+                                       } else {\r
+                                               trDonationType.style.display = 'none';\r
+                                               trFrequency.style.display = 'none';\r
+                                               if (trNumberDonations) {\r
+                                                       trNumberDonations.style.display = 'none';\r
+                                               }\r
+                                       }                       \r
+                               }\r
+\r
+\r
+                               function checkCampaignRecurring() {                                     \r
+                                       var form = document.donate_form ;\r
+                                       var show = 1 ;\r
+                                       var paymentMethod = "";\r
+                                                                               paymentMethod = "os_authnet";\r
+                                                       \r
+                                       method = methods.Find(paymentMethod);\r
+                                       if (!method.getEnableRecurring()) {\r
+                                               show = 0 ;\r
+                                       } else {\r
+                                               if (form.campaign_id.value > 0)\r
+                                                       show = recurrings [form.campaign_id.value] ;\r
+                                       }                                                       \r
+                                       displayRecurring(show);\r
+                               }\r
+                                                       \r
+                               function updateAmount() {\r
+                                       var form = document.donate_form ;\r
+                                       var campaignId = form.campaign_id.value ;\r
+\r
+                                       //Check to enable and disable recurring\r
+                                       var show = 1 ;\r
+                                       if (campaignId)\r
+                                               show = recurrings [campaignId] ;                \r
+                                       displayRecurring(show);                                         \r
+                                                               \r
+                               }\r
+                               function updateStateList() {\r
+                                       var form = document.donate_form ;\r
+                                       //First of all, we need to empty the state dropdown\r
+                                       var list = form.state ;\r
+\r
+                                       // empty the list\r
+                                       for (i = 1 ; i < list.options.length ; i++) {\r
+                                               list.options[i] = null;\r
+                                       }\r
+                                       list.length = 1 ;\r
+                                       var i = 0;\r
+                                       //Get the country index\r
+                                       var country = form.country.value ;                      \r
+                                       if (country != '') {\r
+                                               //Find index of the country\r
+                                               for (var i = 0 ; i < countryNames.length ; i++) {\r
+                                                       if (countryNames[i] == country) {                                               \r
+                                                               break ;\r
+                                                       }\r
+                                               }\r
+                                               //We will find the states\r
+                                               var countryId = countryIds[i] ;                         \r
+                                               var stateNames = stateList[countryId]; ;\r
+                                               if (stateNames) {\r
+                                                       var arrStates = stateNames.split(',');\r
+                                                       i = 1 ;\r
+                                                       var state = '';\r
+                                                       var stateName = '' ;\r
+                                                       for (var j = 0 ; j < arrStates.length ; j++) {\r
+                                                               state = arrStates[j] ;\r
+                                                               stateName = state.split(':');\r
+                                                               opt = new Option();\r
+                                                               opt.value = stateName[0];\r
+                                                               opt.text = stateName[1];\r
+                                                               list.options[i++] = opt;\r
+                                                       }\r
+                                                       list.lenght = i ;\r
+                                               }                                                               \r
+                                       }                                       \r
+                               }\r
+\r
+                               </script>       \r
+                       \r
+<?php\r
+    $output = apply_filters( 'wp_donate_filter_form', ob_get_contents());\r
+    ob_end_clean();\r
+\r
+    return $output;\r
+}\r
+?>\r
diff --git a/includes/donate-function.php b/includes/donate-function.php
new file mode 100755 (executable)
index 0000000..fbdfc4e
--- /dev/null
@@ -0,0 +1,290 @@
+<?php\r
+function authorizepayment($METHOD_TO_USE,$REQUEST,$address1='',$city='',$state='',$country='',$zip='',$email='',$paypalprice)\r
+{\r
+        if (!checkInvoice($REQUEST['invoice_num'])) {\r
+            $_SESSION['donate_msg'] = 'Please enter a valid invoice number.';\r
+            return false;\r
+        }\r
+       else if (!checkCreditCard($REQUEST['x_card_num'], $REQUEST['card_type'], $ccerror, $ccerrortext))\r
+       {\r
+               $_SESSION['donate_msg'] = 'Please enter a valid credit card number.';\r
+               return false;\r
+       }\r
+       else\r
+       {\r
+               if ($METHOD_TO_USE == "AIM")\r
+               {\r
+                       $transaction = new AuthorizeNetAIM;\r
+                       $transaction->setSandbox(AUTHORIZENET_SANDBOX);\r
+                       $transaction->setFields(\r
+                               array(\r
+                               'amount' => $REQUEST['amount'],\r
+                                'invoice_num' => $REQUEST['invoice_num'],\r
+                               'card_num' => $REQUEST['x_card_num'],\r
+                               'exp_date' => $REQUEST['exp_month'].'/'.$REQUEST['exp_year'],\r
+                               'first_name' => $REQUEST['first_name'],\r
+                               'last_name' => $REQUEST['last_name'],\r
+                               'address' => $REQUEST['address'],\r
+                               'city' => $REQUEST['city'],\r
+                               'state' => $REQUEST['state'],\r
+                               'country' => $REQUEST['country'],\r
+                               'zip' => $REQUEST['zip'],\r
+                               'email' => $REQUEST['email'],\r
+                               )\r
+                       );\r
+                       $response = $transaction->authorizeAndCapture();\r
+                       if ($response->approved)\r
+                       {\r
+                               $_SESSION['donate_msg'] = $response->response_reason_text;\r
+                               return true;\r
+                       }\r
+                       else\r
+                       {\r
+                               //echo "1";\r
+                               $_SESSION['donate_msg'] = $response->response_reason_text;                              \r
+                       }\r
+               }\r
+               elseif (count($REQUEST))\r
+               {\r
+                       $response = new AuthorizeNetSIM;\r
+                       if ($response->isAuthorizeNet())\r
+                       {\r
+                               if ($response->approved)\r
+                               {\r
+                                       // Transaction approved! Do your logic here.\r
+                                       // Redirect the user back to your site.\r
+                                       //$return_url = $site_root . 'thank_you_page.php?transaction_id=' .$response->transaction_id;\r
+                                       //echo "2";\r
+                                       \r
+                                       return true;\r
+                               }\r
+                               else\r
+                               {\r
+                                       // There was a problem. Do your logic here.\r
+                                       // Redirect the user back to your site.\r
+                                       $_SESSION['donate_msg'] = $response->response_reason_text;\r
+                                  // echo "3";\r
+                                       header("Location:".site_url().$_SERVER['REQUEST_URI']);\r
+                                       exit;\r
+               \r
+                               }\r
+                               echo AuthorizeNetDPM::getRelayResponseSnippet($return_url);\r
+                       }\r
+                       else\r
+                       {\r
+                               //echo "4";\r
+                               $_SESSION['donate_msg'] =  "MD5 Hash failed. Check to make sure your MD5 Setting matches the one in";                           \r
+                       }\r
+               }\r
+               \r
+       }\r
+}\r
+\r
+function checkInvoice($invoice_num) {\r
+    if (!preg_match("/^[0-9]{5}$/", $invoice_num)) {\r
+        return false;\r
+    }\r
+    return true;\r
+}\r
+\r
+function checkCreditCard($cardnumber, $cardname, &$errornumber, &$errortext) {\r
+\r
+       // Define the cards we support. You may add additional card types.\r
+       //  Name:      As in the selection box of the form - must be same as user's\r
+       //  Length:    List of possible valid lengths of the card number for the card\r
+       //  prefixes:  List of possible prefixes for the card\r
+       //  checkdigit Boolean to say whether there is a check digit\r
+       // Don't forget - all but the last array definition needs a comma separator!\r
+\r
+       $cards = array(array('name' => 'AMEX',\r
+                       'length' => '15',\r
+                       'prefixes' => '34,37',\r
+                       'checkdigit' => true\r
+               ),\r
+               array('name' => 'Diners Club Carte Blanche',\r
+                       'length' => '14',\r
+                       'prefixes' => '300,301,302,303,304,305',\r
+                       'checkdigit' => true\r
+               ),\r
+               array('name' => 'DINERS',\r
+                       'length' => '14,16',\r
+                       'prefixes' => '305,36,38,54,55',\r
+                       'checkdigit' => true\r
+               ),\r
+               array('name' => 'Discover',\r
+                       'length' => '16',\r
+                       'prefixes' => '6011,622,64,65',\r
+                       'checkdigit' => true\r
+               ),\r
+               array('name' => 'Diners Club Enroute',\r
+                       'length' => '15',\r
+                       'prefixes' => '2014,2149',\r
+                       'checkdigit' => true\r
+               ),\r
+               array('name' => 'JCB',\r
+                       'length' => '16',\r
+                       'prefixes' => '35',\r
+                       'checkdigit' => true\r
+               ),\r
+               array('name' => 'Maestro',\r
+                       'length' => '12,13,14,15,16,18,19',\r
+                       'prefixes' => '5018,5020,5038,6304,6759,6761',\r
+                       'checkdigit' => true\r
+               ),\r
+               array('name' => 'MASTERCARD',\r
+                       'length' => '16',\r
+                       'prefixes' => '51,52,53,54,55',\r
+                       'checkdigit' => true\r
+               ),\r
+               array('name' => 'Solo',\r
+                       'length' => '16,18,19',\r
+                       'prefixes' => '6334,6767',\r
+                       'checkdigit' => true\r
+               ),\r
+               array('name' => 'Switch',\r
+                       'length' => '16,18,19',\r
+                       'prefixes' => '4903,4905,4911,4936,564182,633110,6333,6759',\r
+                       'checkdigit' => true\r
+               ),\r
+               array('name' => 'VISA',\r
+                       'length' => '16',\r
+                       'prefixes' => '4',\r
+                       'checkdigit' => true\r
+               ),\r
+               array('name' => 'VISA Electron',\r
+                       'length' => '16',\r
+                       'prefixes' => '417500,4917,4913,4508,4844',\r
+                       'checkdigit' => true\r
+               ),\r
+               array('name' => 'LaserCard',\r
+                       'length' => '16,17,18,19',\r
+                       'prefixes' => '6304,6706,6771,6709',\r
+                       'checkdigit' => true\r
+               )\r
+       );\r
+\r
+       $ccErrorNo = 0;\r
+\r
+       $ccErrors [0] = 'Please enter a valid ' . $cardname . ' number.';\r
+       $ccErrors [1] = "No card number provided";\r
+       $ccErrors [2] = "Credit card number has invalid format";\r
+       $ccErrors [3] = "Credit card number is invalid";\r
+       $ccErrors [4] = "Credit card number is wrong length";\r
+\r
+       // Establish card type\r
+       $cardType = -1;\r
+       for ($i = 0; $i < sizeof($cards); $i++) {\r
+\r
+            // See if it is this card (ignoring the case of the string)\r
+            if (strtolower($cardname) == strtolower($cards[$i]['name'])) {\r
+                $cardType = $i;\r
+                break;\r
+            }\r
+       }\r
+\r
+       // If card type not found, report an error\r
+       if ($cardType == -1) {\r
+               $errornumber = 0;\r
+               $errortext = $ccErrors [$errornumber];\r
+               return false;\r
+       }\r
+\r
+       // Ensure that the user has provided a credit card number\r
+       if (strlen($cardnumber) == 0) {\r
+               $errornumber = 1;\r
+               $errortext = $ccErrors [$errornumber];\r
+               return false;\r
+       }\r
+\r
+       // Remove any spaces from the credit card number\r
+       $cardNo = str_replace(' ', '', $cardnumber);\r
+\r
+       // Check that the number is numeric and of the right sort of length.\r
+       if (!preg_match("/^[0-9]{13,19}$/", $cardNo)) {\r
+               $errornumber = 2;\r
+               $errortext = $ccErrors [$errornumber];\r
+               return false;\r
+       }\r
+        \r
+\r
+       // Now check the modulus 10 check digit - if required\r
+       if ($cards[$cardType]['checkdigit']) {\r
+               $checksum = 0;                                  // running checksum total\r
+               $mychar = "";                                   // next char to process\r
+               $j = 1;                                         // takes value of 1 or 2\r
+               // Process each digit one by one starting at the right\r
+               for ($i = strlen($cardNo) - 1; $i >= 0; $i--) {\r
+\r
+                       // Extract the next digit and multiply by 1 or 2 on alternative digits.\r
+                       $calc = $cardNo{$i} * $j;\r
+\r
+                       // If the result is in two digits add 1 to the checksum total\r
+                       if ($calc > 9) {\r
+                               $checksum = $checksum + 1;\r
+                               $calc = $calc - 10;\r
+                       }\r
+\r
+                       // Add the units element to the checksum total\r
+                       $checksum = $checksum + $calc;\r
+\r
+                       // Switch the value of j\r
+                       if ($j == 1) {\r
+                               $j = 2;\r
+                       } else {\r
+                               $j = 1;\r
+                       };\r
+               }\r
+\r
+               // All done - if checksum is divisible by 10, it is a valid modulus 10.\r
+               // If not, report an error.\r
+               if ($checksum % 10 != 0) {\r
+                       $errornumber = 3;\r
+                       $errortext = $ccErrors [$errornumber];\r
+                       return false;\r
+               }\r
+       }\r
+\r
+       // The following are the card-specific checks we undertake.\r
+       // Load an array with the valid prefixes for this card\r
+       $prefix = explode(',', $cards[$cardType]['prefixes']);\r
+\r
+       // Now see if any of them match what we have in the card number\r
+       $PrefixValid = false;\r
+       for ($i = 0; $i < sizeof($prefix); $i++) {\r
+               $exp = '/^' . $prefix[$i] . '/';\r
+               if (preg_match($exp, $cardNo)) {\r
+                       $PrefixValid = true;\r
+                       break;\r
+               }\r
+       }\r
+\r
+       // If it isn't a valid prefix there's no point at looking at the length\r
+       if (!$PrefixValid) {\r
+               $errornumber = 3;\r
+               $errortext = $ccErrors [$errornumber];\r
+               return false;\r
+       }\r
+\r
+       // See if the length is valid for this card\r
+       $LengthValid = false;\r
+       $lengths = explode(',', $cards[$cardType]['length']);\r
+       for ($j = 0; $j < sizeof($lengths); $j++) {\r
+               if (strlen($cardNo) == $lengths[$j]) {\r
+                       $LengthValid = true;\r
+                       break;\r
+               }\r
+       }\r
+\r
+       // See if all is OK by seeing if the length was valid.\r
+       if (!$LengthValid) {\r
+               $errornumber = 4;\r
+               $errortext = $ccErrors [$errornumber];\r
+               return false;\r
+       };\r
+\r
+       // The credit card is in the required format.\r
+       return true;\r
+}\r
+\r
+\r
+?>\r
diff --git a/includes/donate-options.php b/includes/donate-options.php
new file mode 100755 (executable)
index 0000000..d914db3
--- /dev/null
@@ -0,0 +1,199 @@
+<?php\r
+\r
+function wp_donate_options_page() \r
+{ global $wpdb;\r
+    ?>\r
+       <?php \r
+       if($_GET['id']!='' && $_GET['action']=='delete')\r
+       { \r
+               $wpdb->query($wpdb->prepare("DELETE FROM ".$wpdb->prefix."donate WHERE id = %d",$_GET['id']));\r
+               header("Location:".site_url().'/wp-admin/admin.php?page=wp_donate');\r
+                       exit;\r
+       }       \r
+       elseif($_GET['id']!='')\r
+       {\r
+       ?>\r
+               <div id="glm-donate-tabs">\r
+                 <h1 class="donate-title">WP Donate</h1>\r
+                 <div id="glm-donate-tab-donorlist">\r
+                       <table class="glm-donate-donorlist" width="50%">\r
+                         <thead>                                        \r
+                                 <tr>\r
+                                       <?php global $wpdb;\r
+                                       $myrows = $wpdb->get_results( "SELECT * FROM ".$wpdb->prefix."donate where id='".$_GET['id']."'" );                                             \r
+                                       foreach($myrows as $myrows_value)\r
+                                       {\r
+                                       ?>\r
+                                       <tr>\r
+                                               <td width="125"><b>First Name :</b></td>\r
+                                               <td><?php echo $myrows_value->first_name;?></td>\r
+                                       </tr>\r
+                                       <tr>\r
+                                               <td><b>Last Name :</b></td>                                                     \r
+                                               <td><?php echo $myrows_value->last_name;?></td>\r
+                                       </tr>\r
+                                       <tr>\r
+                                               <td><b>Organization :</b></td>                                                  \r
+                                               <td><?php echo $myrows_value->organization;?></td>\r
+                                       </tr>\r
+                                       <tr>\r
+                                               <td><b>Address :</b></td>                                                       \r
+                                               <td><?php echo $myrows_value->address;?></td>\r
+                                       </tr>\r
+                                       <tr>\r
+                                               <td><b>City :</b></td>                                                  \r
+                                               <td><?php echo $myrows_value->city;?></td>\r
+                                       </tr>\r
+                                       <tr>\r
+                                               <td><b>Country :</b></td>                                                       \r
+                                               <td><?php echo $myrows_value->country;?></td>\r
+                                       </tr>\r
+                                       <tr>\r
+                                               <td><b>State :</b></td>                                                 \r
+                                               <td><?php echo $myrows_value->state;?></td>\r
+                                       </tr>\r
+                                       <tr>\r
+                                               <td><b>Zip : </b></td>                                                  \r
+                                               <td><?php echo $myrows_value->zip;?></td>\r
+                                       </tr>\r
+                                       <tr>\r
+                                               <td><b>Phone :</b></td>                                                 \r
+                                               <td><?php echo $myrows_value->phone;?></td>\r
+                                       </tr>\r
+                                       <tr>\r
+                                               <td><b>Email :</b></td>                                                 \r
+                                               <td><?php echo $myrows_value->email;?></td>\r
+                                       </tr>\r
+                                       <?php /*?>\r
+                                       <tr>\r
+                                               <td><b>Donation Type :</b></td>                                                 \r
+                                               <td><?php echo $myrows_value->donation_type;?></td>\r
+                                       </tr>\r
+                                       <?php */?>                                      \r
+                                       <tr>\r
+                                               <td><b>Amount :</b></td>                                                        \r
+                                               <td>$<?php echo $myrows_value->amount;?></td>\r
+                                       </tr>\r
+                                        <tr>\r
+                                            <td><b>Invoice Number: </b></td>\r
+                                            <td><?php echo $myrows_value->invoice_num;?></td>\r
+                                        </tr>\r
+                                       <tr>\r
+                                               <td><b>Comment :</b></td>                                                       \r
+                                               <td><?php echo $myrows_value->comment;?></td>\r
+                                       </tr>\r
+                                       \r
+                                       <tr>\r
+                                               <td><b>Date :</b></td>                                                  \r
+                                               <td align="left"><?php echo $myrows_value->date;?></td>\r
+                                       </tr>\r
+                                       <tr>    \r
+                                               <td><b>Action : </b></td>\r
+                                               <td align="left"><?php if($myrows_value->status==1){echo "Complete";} else {echo "Pending";}?></td>\r
+                                       </tr>\r
+                                       <?php } ?>\r
+                                       <tr>\r
+                                               <td><input type="button" onclick=location.href='<?php echo site_url();?>/wp-admin/admin.php?page=wp_donate' value="Back" /></td>\r
+                                       </tr>\r
+                                 </tr>\r
+                         </thead>\r
+                       </table>\r
+               </div>\r
+               </div>\r
+       <?php\r
+       }\r
+       else\r
+       {\r
+       ?>\r
+    <script type="text/javascript">\r
+        jQuery(function() {\r
+            jQuery("#glm-donate-tabs").tabs();\r
+        });\r
+    </script>\r
+\r
+    <div id="glm-donate-tabs">\r
+        <h1 class="donate-title">WP Donate</h1>\r
+        <ul id="glm-donate-tabs-nav">\r
+            <li><a href="#glm-donate-tab-donorlist">Payment List</a></li>\r
+            <li><a href="#glm-donate-tab-settings">Settings</a></li>\r
+        </ul>\r
+        <div style="clear:both"></div>\r
+        <div id="glm-donate-tab-donorlist">\r
+            <table class="glm-donate-donorlist" width="100%">\r
+              <?php \r
+              global $wpdb;\r
+                               $myrows = $wpdb->get_results( "SELECT * FROM ".$wpdb->prefix."donate");\r
+                               if(count($myrows)>0)\r
+                               {\r
+              ?>\r
+              <thead>\r
+                <tr class="glm-donate-absolute">\r
+                  <th align="left">Person</th>\r
+                  <th align="left">Email</th>\r
+                  <th align="left">Amount</th>\r
+                  <th align="left">Date</th>\r
+                  <th align="left">Comment</th>\r
+                  <th align="left">Action</th>\r
+                </tr>\r
+                    <?php \r
+                            foreach($myrows as $myrows_value)\r
+                            {\r
+                            ?>\r
+                            <tr>\r
+                                    <td><a href="<?php echo site_url();?>/wp-admin/admin.php?page=wp_donate&id=<?php echo $myrows_value->id;?>"><?php echo $myrows_value->first_name.' '.$myrows_value->last_name ;?></a></td>\r
+                                    <td><?php echo $myrows_value->email;?></td>\r
+                                    <td>$<?php echo $myrows_value->amount;?></td>\r
+                                    <td><?php echo $myrows_value->date;?></td>\r
+                                    <td><?php echo $myrows_value->comment;?></td>\r
+                                    <td><a onclick="return confirm('Are you sure?')" href="<?php echo site_url();?>/wp-admin/admin.php?page=wp_donate&action=delete&id=<?php echo $myrows_value->id;?>">Delete</a></td>\r
+                            </tr>\r
+                            <?php \r
+                            } \r
+                            ?>\r
+              </thead>\r
+              <?php \r
+                               }\r
+                               else\r
+                               {\r
+                               echo "No Record's Found.";      \r
+                               }\r
+              ?>\r
+            </table>\r
+        </div>\r
+        <div id="glm-donate-tab-settings">                     \r
+                       <?php\r
+                       global $wpdb;\r
+                       $mysetting = $wpdb->get_results( "SELECT * FROM ".$wpdb->prefix."donate_setting" );                                             \r
+                       ?>\r
+                       <form action="<?php echo site_url();?>/wp-admin/admin.php?page=wp_donate" method="post" name="setting" id="setting">\r
+                               <input type="hidden" name="setting" value="1" />\r
+                               <ul style="color:#777">\r
+                                       <li>\r
+                                               <strong>Authorize.net Mode</strong> \r
+                                               <select class="inputbox" name="authnet_mode" id="paramsauthnet_mode">\r
+                                                       <option value="0" <?php if($mysetting[0]->mod==0){?> selected="selected" <?php }?> >Test Mode</option>\r
+                                                       <option <?php if($mysetting[0]->mod==1){?> selected="selected" <?php }?> value="1">Live Mode</option>\r
+                                               </select>\r
+                                       </li>\r
+                                       <li>\r
+                                               <strong>API Login</strong> \r
+                                               <input type="text" size="50" class="text_area" value="<?php echo $mysetting[0]->api_login;?>" id="paramsx_login" name="x_login">\r
+                                       </li>\r
+                                       <li>\r
+                                               <strong>Transaction Key</strong> \r
+                                               <input type="text" class="text_area" value="<?php echo $mysetting[0]->key;?>" id="paramsx_tran_key" name="x_tran_key">\r
+                                       </li>\r
+                                       <br />\r
+                                       <input type="submit" value="Submit" />                                  \r
+                               </ul>\r
+            </form>\r
+        </div>\r
+        \r
+    </div>\r
+<?php\r
+       }\r
+}\r
+\r
+\r
+\r
+?>\r
diff --git a/js/glm-donate.js b/js/glm-donate.js
new file mode 100755 (executable)
index 0000000..89ee1f7
--- /dev/null
@@ -0,0 +1,117 @@
+/**\r
+ * GLM-donate\r
+ *\r
+ * @since 1.4\r
+ *\r
+ */\r
+\r
+// var glm-donate-key declared in DOM from localized script\r
+\r
+donate.setPublishableKey( wpdonatekey );\r
+\r
+// donate Token Creation & Event Handling\r
+\r
+jQuery(document).ready(function($) {\r
+\r
+    var resetdonateForm = function() {\r
+        $("#glm-donate-payment-form").get(0).reset();\r
+        $('input').removeClass('donate-valid donate-invalid');\r
+    }\r
+\r
+    function donateResponseHandler(status, response) {\r
+        if (response.error) {\r
+\r
+            $('.donate-submit-button').prop("disabled", false).css("opacity","1.0");\r
+            $(".payment-errors").show().html(response.error.message);\r
+\r
+        } else {\r
+\r
+            var form$ = $("#glm-donate-payment-form");\r
+            var token = response['id'];\r
+            form$.append("<input type='hidden' name='donateToken' value='" + token + "' />");\r
+\r
+            var newdonateForm = form$.serialize();\r
+\r
+            $.ajax({\r
+                type : "post",\r
+                dataType : "json",\r
+                url : ajaxurl,\r
+                data : newdonateForm,\r
+                success: function(response) {\r
+\r
+                    $('.glm-donate-details').prepend(response);\r
+                    $('.donate-submit-button').prop("disabled", false).css("opacity","1.0");\r
+                    resetdonateForm();\r
+\r
+                }\r
+\r
+            });\r
+\r
+        }\r
+    }\r
+\r
+    $("#glm-donate-payment-form").submit(function(event) {\r
+\r
+        event.preventDefault();\r
+        $(".glm-donate-notification").hide();\r
+\r
+        $('.donate-submit-button').prop("disabled", true).css("opacity","0.4");\r
+\r
+        var amount = $('.glm-donate-card-amount').val() * 100; //amount you want to charge in cents\r
+\r
+        donate.createToken({\r
+            name: $('.glm-donate-name').val(),\r
+            number: $('.card-number').val(),\r
+            cvc: $('.card-cvc').val(),\r
+            exp_month: $('.card-expiry-month').val(),\r
+            exp_year: $('.card-expiry-year').val()\r
+        }, donateResponseHandler);\r
+\r
+        // prevent the form from submitting with the default action\r
+\r
+        return false;\r
+\r
+    });\r
+});\r
+\r
+// Form Validation & Enhancement\r
+\r
+jQuery(document).ready(function($) {\r
+\r
+    $('.card-number').focusout( function() {\r
+\r
+        var cardValid = donate.validateCardNumber( $(this).val() );\r
+        var cardType = donate.cardType( $(this).val() );\r
+\r
+        // Card Number Validation\r
+\r
+        if ( cardValid ) {\r
+            $(this).removeClass('donate-invalid').addClass('donate-valid');\r
+        } else {\r
+            $(this).removeClass('donate-valid').addClass('donate-invalid');\r
+        }\r
+\r
+        // Card Type Information\r
+\r
+        /*\r
+        if ( cardType && cardValid  ) {\r
+            // Display Card Logo\r
+        }\r
+        */\r
+\r
+    });\r
+\r
+    // CVC Validation\r
+\r
+    $('.card-cvc').focusout( function() {\r
+\r
+        if ( donate.validateCVC( $(this).val() ) ) {\r
+            $(this).removeClass('donate-invalid').addClass('donate-valid');\r
+        } else {\r
+            $(this).removeClass('donate-valid').addClass('donate-invalid');\r
+        }\r
+\r
+    });\r
+\r
+});\r
+\r
diff --git a/js/list.min.js b/js/list.min.js
new file mode 100755 (executable)
index 0000000..27cac39
--- /dev/null
@@ -0,0 +1 @@
+(function(d,e){var a=d.document,c;var b=function(g,t,p){var r=this,o,q,n,s,i,f,h,m="";this.listContainer=a.getElementById(g);this.items=[];this.searched=false;this.filtered=false;this.list=null;this.templateEngines={};this.maxVisibleItemsCount=t.maxVisibleItemsCount||200;q=function(u,w){w.list=w.list||g;w.listClass=w.listClass||"list";w.searchClass=w.searchClass||"search";w.sortClass=w.sortClass||"sort";o=new f(r,w);r.list=c.getByClass(w.listClass,r.listContainer,true);c.addEvent(c.getByClass(w.searchClass,r.listContainer),"keyup",r.search);h=c.getByClass(w.sortClass,r.listContainer);c.addEvent(h,"click",r.sort);if(w.valueNames){var x=n.get(),v=w.valueNames;if(w.indexAsync){n.indexAsync(x,v)}else{n.index(x,v)}}if(u!==e){r.add(u)}};n={get:function(){var w=r.list.childNodes,v=[];for(var x=0,u=w.length;x<u;x++){if(w[x].data===e){v.push(w[x])}}return v},index:function(u,w){for(var x=0,v=u.length;x<v;x++){r.items.push(new i(w,u[x]))}},indexAsync:function(u,v){var w=u.splice(0,100);this.index(w,v);if(u.length>0){setTimeout(function(){n.indexAsync(u,v)},10)}}};this.add=function(v,A){if(A){l(v,A)}var y=[],x=false;if(v[0]===e){v=[v]}for(var w=0,u=v.length;w<u;w++){var z=null;if(v[w] instanceof i){z=v[w];z.reload()}else{x=(r.items.length>r.maxVisibleItemsCount)?true:false;z=new i(v[w],e,x)}if(!x){o.add(z,t)}r.items.push(z);y.push(z)}return y};var l=function(v,x,u){var w=v.splice(0,100);u=u||[];u=u.concat(r.add(w));if(v.length>0){setTimeout(function(){l(v,x,u)},10)}else{x(u)}};this.remove=function(z,y,v){var x=0;for(var w=0,u=r.items.length;w<u;w++){if(r.items[w].values()[z]==y){o.remove(r.items[w],v);r.items.splice(w,1);u--;x++}}return x};this.get=function(z,x){var y=[];for(var v=0,u=r.items.length;v<u;v++){var w=r.items[v];if(w.values()[z]==x){y.push(w)}}if(y.length==0){return null}else{if(y.length==1){return y[0]}else{return y}}};this.sort=function(A,E){var u=r.items.length,D=null,y=A.target||A.srcElement,w="",z=false,C="asc",x="desc",E=E||{};if(y===e){D=A;z=E.asc||false}else{D=c.getAttribute(y,"data-sort");z=c.hasClass(y,C)?false:true}for(var v=0,B=h.length;v<B;v++){c.removeClass(h[v],C);c.removeClass(h[v],x)}if(z){if(y!==e){c.addClass(y,C)}z=true}else{if(y!==e){c.addClass(y,x)}z=false}if(E.sortFunction){E.sortFunction=E.sortFunction}else{E.sortFunction=function(G,F){return s.alphanum(G.values()[D],F.values()[D],z)}}r.items.sort(E.sortFunction);j()};s={alphanum:function(w,v,y){if(w===e||w===null){w=""}if(v===e||v===null){v=""}w=w.toString().replace(/&(lt|gt);/g,function(x,D){return(D=="lt")?"<":">"});w=w.replace(/<\/?[^>]+(>|$)/g,"");v=v.toString().replace(/&(lt|gt);/g,function(x,D){return(D=="lt")?"<":">"});v=v.replace(/<\/?[^>]+(>|$)/g,"");var z=this.chunkify(w);var B=this.chunkify(v);for(var u=0;z[u]&&B[u];u++){if(z[u]!==B[u]){var C=Number(z[u]),A=Number(B[u]);if(y){if(C==z[u]&&A==B[u]){return C-A}else{return(z[u]>B[u])?1:-1}}else{if(C==z[u]&&A==B[u]){return A-C}else{return(z[u]>B[u])?-1:1}}}}return z.length-B.length},chunkify:function(A){var D=[],v=0,C=-1,B=0,z,w;while(z=(w=A.charAt(v++)).charCodeAt(0)){var u=(z==45||z==46||(z>=48&&z<=57));if(u!==B){D[++C]="";B=u}D[C]+=w}return D}};this.search=function(F,w){var v=[],E,D,C,B,z,w=(w===e)?r.items[0].values():w,F=(F===e)?"":F,A=F.target||F.srcElement;F=(A===e)?F.toLowerCase():A.value.toLowerCase();z=r.items;F=F.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&");o.clear();if(F===""){k.search();r.searched=false;j()}else{r.searched=true;for(var x=0,u=z.length;x<u;x++){E=false;D=z[x];B=D.values();for(var y in w){if(B.hasOwnProperty(y)&&w[y]!==null){C=B[y].toString().toLowerCase();if((F!=="")&&(C.search(F)>-1)){E=true}}}if(E){D.found=true;v.push(D)}else{D.found=false}}j()}m=F;return v};this.filter=function(z){var y=e;k.filter();if(z===e){r.filtered=false}else{y=[];r.filtered=true;var x=r.items;for(var v=0,u=x.length;v<u;v++){var w=x[v];if(z(w.values())){w.filtered=true;y.push(w)}else{w.filtered=false}}}j();return y};this.size=function(){return r.items.length};this.clear=function(){o.clear();r.items=[]};var k={filter:function(){var v=r.items,u=v.length;while(u--){v[u].filtered=false}},search:function(){var v=r.items,u=v.length;while(u--){v[u].found=false}}};var j=function(){var w=r.items;o.clear();for(var v=0,u=w.length;v<u&&v<r.maxVisibleItemsCount;v++){if((r.filtered&&r.searched&&w[v].found&&w[v].filtered)||(r.filtered&&!r.searched&&w[v].filtered)||(!r.filtered&&r.searched&&w[v].found)||(!r.filtered&&!r.searched)){w[v].show()}}};i=function(v,x,w){var y=this,u={};this.found=false;this.filtered=false;var z=function(B,D,C){if(D===e){if(C){y.values(B,C)}else{y.values(B)}}else{y.elm=D;var A=o.get(y,B);y.values(A)}};this.values=function(B,C){if(B!==e){for(var A in B){u[A]=B[A]}if(C!==true){o.set(y,y.values())}}else{return u}};this.show=function(){o.show(y)};this.hide=function(){o.hide(y)};z(v,x,w)};f=function(v,u){if(u.engine===e){u.engine="standard"}else{u.engine=u.engine.toLowerCase()}return new r.constructor.prototype.templateEngines[u.engine](v,u)};q(p,t)};b.prototype.templateEngines={};b.prototype.templateEngines.standard=function(j,g){var k=c.getByClass(g.listClass,a.getElementById(g.list))[0],i=a.getElementById(g.item),f=this,h={tryItemSourceExists:function(){if(i===null){var n=k.childNodes,m=[];for(var o=0,l=n.length;o<l;o++){if(n[o].data===e){i=n[o];break}}}},created:function(l){if(l.elm===e){f.create(l)}},added:function(l){if(l.elm.parentNode===null){f.add(l)}}};this.get=function(p,n){h.tryItemSourceExists();h.created(p);var m={};for(var o=0,l=n.length;o<l;o++){m[n[o]]=c.getByClass(n[o],p.elm)[0].innerHTML}return m};this.set=function(n,m){h.created(n);for(var l in m){if(m.hasOwnProperty(l)){var o=c.getByClass(l,n.elm,true);if(o){o.innerHTML=m[l]}}}};this.create=function(m){if(m.elm!==e){return}h.tryItemSourceExists();var l=i.cloneNode(true);l.id="";m.elm=l;f.set(m,m.values())};this.add=function(l){h.created(l);k.appendChild(l.elm)};this.remove=function(l){k.removeChild(l.elm)};this.show=function(l){h.created(l);h.added(l);k.appendChild(l.elm)};this.hide=function(l){if(l.elm!==e&&l.elm.parentNode===k){k.removeChild(l.elm)}};this.clear=function(){if(k.hasChildNodes()){while(k.childNodes.length>=1){k.removeChild(k.firstChild)}}}};c={getByClass:(function(){if(a.getElementsByClassName){return function(g,f,h){if(h){return f.getElementsByClassName(g)[0]}else{return f.getElementsByClassName(g)}}}else{return function(m,g,o){var p=[],q="*";if(g==null){g=a}var k=g.getElementsByTagName(q);var f=k.length;var n=new RegExp("(^|\\s)"+m+"(\\s|$)");for(var l=0,h=0;l<f;l++){if(n.test(k[l].className)){if(o){return k[l]}else{p[h]=k[l];h++}}}return p}}})(),addEvent:(function(g,f){if(f.addEventListener){return function(m,l,j){if((m&&!(m instanceof Array)&&!m.length&&!c.isNodeList(m)&&(m.length!==0))||m===g){m.addEventListener(l,j,false)}else{if(m&&m[0]!==e){var h=m.length;for(var k=0;k<h;k++){c.addEvent(m[k],l,j)}}}}}else{if(f.attachEvent){return function(m,l,j){if((m&&!(m instanceof Array)&&!m.length&&!c.isNodeList(m)&&(m.length!==0))||m===g){m.attachEvent("on"+l,function(){return j.call(m,g.event)})}else{if(m&&m[0]!==e){var h=m.length;for(var k=0;k<h;k++){c.addEvent(m[k],l,j)}}}}}}})(this,a),getAttribute:function(l,g){var f=(l.getAttribute&&l.getAttribute(g))||null;if(!f){var h=l.attributes;var k=h.length;for(var j=0;j<k;j++){if(g[j]!==e){if(g[j].nodeName===g){f=g[j].nodeValue}}}}return f},isNodeList:function(g){var f=Object.prototype.toString.call(g);if(typeof g==="object"&&/^\[object (HTMLCollection|NodeList|Object)\]$/.test(f)&&(g.length==0||(typeof node==="object"&&g[0].nodeType>0))){return true}return false},hasClass:function(h,g){var f=this.getAttribute(h,"class");return(f.search(g)>-1)},addClass:function(h,g){if(!this.hasClass(h,g)){var f=this.getAttribute(h,"class");f=f+" "+g+" ";f=f.replace(/\s{2,}/g," ");h.setAttribute("class",f)}},removeClass:function(h,g){if(this.hasClass(h,g)){var f=this.getAttribute(h,"class");f=f.replace(g,"");h.setAttribute("class",f)}}};d.List=b;d.ListJsHelpers=c})(window);
\ No newline at end of file
diff --git a/js/paymentmethods.js b/js/paymentmethods.js
new file mode 100755 (executable)
index 0000000..73a3d7f
--- /dev/null
@@ -0,0 +1,19 @@
+function PaymentMethod(name,creditCard,cardType,cardCvv,cardHolderName,enableRecurring){this.name=name;this.creditCard=creditCard;this.cardType=cardType;this.cardCvv=cardCvv;this.cardHolderName=cardHolderName;this.enableRecurring=enableRecurring;}
+PaymentMethod.prototype.getName=function(){return this.name;}
+PaymentMethod.prototype.getCreditCard=function(){return this.creditCard;}
+PaymentMethod.prototype.getCardType=function(){return this.cardType;}
+PaymentMethod.prototype.getCardCvv=function(){return this.cardCvv;}
+PaymentMethod.prototype.getCardHolderName=function(){return this.cardHolderName;}
+PaymentMethod.prototype.getEnableRecurring=function(){return this.enableRecurring;}
+function PaymentMethods(){this.length=0;this.methods=new Array();}
+PaymentMethods.prototype.Add=function(paymentMethod){this.methods[this.length]=paymentMethod;this.length=this.length+1;}
+PaymentMethods.prototype.Find=function(name){for(var i=0;i<this.length;i++){if(this.methods[i].name==name){return this.methods[i];}}
+return null;}
+function changePaymentMethod(){var form=document.os_form;var paymentMethod;for(var i=0;i<form.payment_method.length;i++){if(form.payment_method[i].checked==true){paymentMethod=form.payment_method[i].value;break;}}
+var trCardNumber=document.getElementById('tr_card_number');var trExpDate=document.getElementById('tr_exp_date');var trCvvCode=document.getElementById('tr_cvv_code');var trCardType=document.getElementById('tr_card_type');var trCardHolderName=document.getElementById('tr_card_holder_name');var trDonationType=document.getElementById('donation_type');var trFrequecy=document.getElementById('tr_frequency');var trNumberDonations=document.getElementById('tr_number_donations');var trBankRountingNumber=document.getElementById('tr_bank_rounting_number');var trBankAccountNumber=document.getElementById('tr_bank_account_number');var trBankAccountType=document.getElementById('tr_bank_account_type');var trBankName=document.getElementById('tr_bank_name');var trBankAccountHolder=document.getElementById('tr_bank_account_holder');method=methods.Find(paymentMethod);if(method.getCreditCard()){trCardNumber.style.display="";trExpDate.style.display="";trCvvCode.style.display="";if(method.getCardType()){trCardType.style.display='';}else{trCardType.style.display='none';}
+if(method.getCardHolderName()){trCardHolderName.style.display='';}else{trCardHolderName.style.display='none';}}else{trCardNumber.style.display="none";trExpDate.style.display="none";trCvvCode.style.display="none";trCardType.style.display='none';trCardHolderName.style.display="none";}
+if(paymentMethod=='os_echeck'){trBankRountingNumber.style.display='';trBankAccountNumber.style.display='';trBankAccountType.style.display='';trBankName.style.display='';trBankAccountHolder.style.display='';}else{trBankRountingNumber.style.display='none';trBankAccountNumber.style.display='none';trBankAccountType.style.display='none';trBankName.style.display='none';trBankAccountHolder.style.display='none';}
+if(trDonationType){var show=1;if(form.campaign_id){if(form.campaign_id.value>0)
+show=recurrings[form.campaign_id.value];}
+if(method.getEnableRecurring()&&show){trDonationType.style.display='';if(form.donation_type[1].checked){trFrequency.style.display='';if(trNumberDonations){trNumberDonations.style.display='';}}}else{trDonationType.style.display='none';trFrequecy.style.display='none';if(trNumberDonations){trNumberDonations.style.display='none';}
+form.donation_type[0].checked=true;}}}
\ No newline at end of file
diff --git a/readme.txt b/readme.txt
new file mode 100755 (executable)
index 0000000..606090d
--- /dev/null
@@ -0,0 +1,68 @@
+=== glm-donate ===
+Contributors: ketanajani
+Donate link: http://webconfines.com 
+Tags: donate, authorizeNet , credit card, payment, pay, transfer, charge, widget, form, chargly, recurly, recent, donation, donations, charity, transaction, money, wordpress
+Requires at least: 3.0
+Tested up to: 3.6
+Stable tag: 0.6
+License: GPLv2 or later
+License URI: http://www.gnu.org/licenses/gpl-2.0.html
+
+GLM-donate provides a payment form and recent donor by utilizing AuthorizeNet.
+
+== Description ==
+
+WP Donate provides a payment form and recent donor widget by utilizing Authorize.net.
+
+What glm-donate provides:
+
+1. Listing of donor at admin area
+1. At admin area it allows to set details related to payment gateway
+1. From displayed at client side using Shortcode
+1. Autherize.net payment gateway integration for accepting donation
+
+If you need any modification in plugin or need some extra functionality than please let us know here http://www.webconfines.com/contact-us
+
+== Installation ==
+
+WP Donate can be used by either calling up a simple shortcode or adding the function to your template as below:
+
+1. Upload the folder `glm-donate` to the `/wp-content/plugins/` directory
+1. Activate the plugin through the 'Plugins' menu in WordPress
+1. Go to WP Donate (for both Test & Live)
+1. Place `[Display Donate]` in your content or `<?php wp_donate_form(); ?>` in your template.
+
+== Frequently Asked Questions ==
+= Will it work on my Theme? =
+GLM-donate features an inline form so that it can fit any theme. that you can customize it yourself.
+= Can I expand this plugin =
+Yes you can customize or expand plugin by adding new payment gateways to receive donation or customization can be made in form related to fields.
+= About SSL =
+In order to process transactions in a secure manner, you need to [purchase an SSL Certificate](http://www.noeltock.com/sslcertificates/). This way consumers can purchase/donate with confidence. There are multiple plugins for then enforcing that SSL be used on your page, [here's one](http://wordpress.org/extend/plugins/wordpress-https/).
+= Support available? =
+If you need any modification in plugin or need some extra functionality than please let us know here http://www.webconfines.com/contact-us
+= What are limitations of this plugin? =
+It is only available to users with Authorize.Net payment gateway to receive donations.
+
+== Screenshots ==
+1. screenshot-1.png
+2. screenshot-2.png
+3. screenshot-3.png
+3. screenshot-4.png
+
+== Changelog ==
+
+= 1.2 =
+* Provided some more details about plugin
+
+= 1.3 =
+* Removed error message and redirected to correct page after success.
+
+= 1.4 =
+* Modified database interactions for improvements and solved page redirect bug after successful payment by providing robust solution.
+
+= 1.5 =
+* Modified donation limit. Earlier it was minimum $10 and maximum $1000, now minimum is $1 and maximum is $100000
+
+== Upgrade Notice ==
+Nothing yet
diff --git a/screenshot-1.png b/screenshot-1.png
new file mode 100755 (executable)
index 0000000..d0d0b21
Binary files /dev/null and b/screenshot-1.png differ
diff --git a/screenshot-2.png b/screenshot-2.png
new file mode 100755 (executable)
index 0000000..417bd9d
Binary files /dev/null and b/screenshot-2.png differ
diff --git a/screenshot-3.png b/screenshot-3.png
new file mode 100755 (executable)
index 0000000..6080c30
Binary files /dev/null and b/screenshot-3.png differ
diff --git a/screenshot-4.png b/screenshot-4.png
new file mode 100755 (executable)
index 0000000..2efd9b3
Binary files /dev/null and b/screenshot-4.png differ
diff --git a/wp-donate.php b/wp-donate.php
new file mode 100755 (executable)
index 0000000..33d7da6
--- /dev/null
@@ -0,0 +1,124 @@
+<?php \r
+/*     \r
+       Plugin Name: WP Donate\r
+       Plugin URI: http://wordpress.org/extend/plugins/glm-donate/\r
+       Description: Integration of the payment system donate using to AuthorizeNet.\r
+       Author: Ketan Ajani\r
+       Version: 1.5\r
+       Author URI: http://www.webconfines.com\r
+*/\r
+session_start();\r
+\r
+@define ( 'WP_DONATE_VERSION', '1.5' );\r
+@define ( 'WP_DONATE_PATH',  WP_PLUGIN_URL . '/' . end( explode( DIRECTORY_SEPARATOR, dirname( __FILE__ ) ) ) );\r
+include_once('includes/donate-function.php');\r
+include_once('includes/donate-display.php');\r
+include_once('includes/donate-options.php');\r
+\r
+add_action('wp_print_styles', 'load_wp_donate_css');\r
+add_action('wp_print_scripts', 'load_wp_donate_js');\r
+add_action('admin_print_styles', 'load_wp_donate_admin_css');\r
+add_action('admin_print_scripts', 'load_wp_donate_admin_js');\r
+\r
+function load_wp_donate_js() \r
+{\r
+    wp_enqueue_script( 'glm-donate-js', WP_DONATE_PATH . '/js/paymentmethods.js', array('jquery') );\r
+}\r
+\r
+function load_wp_donate_admin_js() \r
+{\r
+    wp_enqueue_script('jquery-ui-core');\r
+    wp_enqueue_script('jquery-ui-tabs');\r
+}\r
+\r
+function load_wp_donate_css() \r
+{\r
+    $options = get_option('wp_donate_options');\r
+    if ( $options['donate_css_switch'] ) {\r
+        if ( $options['donate_css_switch'] == 'Yes') {\r
+            wp_enqueue_style('donate-payment-css', WP_DONATE_PATH . '/css/glm-donate-display.css');\r
+        }\r
+    }\r
+    wp_enqueue_style('donate-widget-css', WP_DONATE_PATH . '/css/glm-donate-widget.css');\r
+}\r
+\r
+function load_wp_donate_admin_css() {\r
+    wp_enqueue_style('donate-css', WP_DONATE_PATH . '/css/glm-donate-admin.css');\r
+}\r
+\r
+function my_add_menu_items()\r
+{\r
+    add_menu_page( 'WP Donate', 'WP Donate', 'activate_plugins', 'wp_donate', 'my_render_list_page' );\r
+       add_options_page( 'WP Donate', 'WP Donate', 'manage_options', 'wp_donate', 'wp_donate_options_page' );\r
+}\r
+add_action( 'admin_menu', 'my_add_menu_items' );\r
+\r
+function my_render_list_page()\r
+{\r
+       \r
+}\r
+add_shortcode('Display Donate', 'wp_donate_form');\r
+if(isset($_REQUEST['setting']))\r
+{\r
+       if($_REQUEST['setting']==1)\r
+       {\r
+               $wpdb->query("INSERT INTO `".$wpdb->prefix."donate_setting` (`id`, `mod`, `api_login`, `key`) VALUES ('1', '', '', '')");\r
+               $wpdb->query("UPDATE `".$wpdb->prefix."donate_setting` SET `mod` = '".$_REQUEST['authnet_mode']."',`api_login` = '".$_REQUEST['x_login']."',`key` = '".$_REQUEST['x_tran_key']."' WHERE `id` =1");\r
+       }\r
+}\r
+\r
+register_activation_hook( __FILE__, 'donate_install' );\r
+\r
+global $donate_db_version;\r
+$donate_db_version = "1.0";\r
+\r
+function donate_install() {\r
+   global $wpdb;\r
+   global $donate_db_version;\r
+\r
+   $table_name = $wpdb->prefix . "donate";\r
+   $sql = "CREATE TABLE IF NOT EXISTS `$table_name` (\r
+  `id` int(11) NOT NULL AUTO_INCREMENT,\r
+  `first_name` varchar(255) CHARACTER SET utf8 NOT NULL,\r
+  `last_name` varchar(255) CHARACTER SET utf8 NOT NULL,\r
+  `organization` varchar(255) CHARACTER SET utf8 NOT NULL,\r
+  `address` varchar(255) CHARACTER SET utf8 NOT NULL,\r
+  `city` varchar(255) CHARACTER SET utf8 NOT NULL,\r
+  `country` varchar(255) CHARACTER SET utf8 NOT NULL,\r
+  `state` varchar(255) CHARACTER SET utf8 NOT NULL,\r
+  `zip` varchar(255) CHARACTER SET utf8 NOT NULL,\r
+  `phone` varchar(255) NOT NULL,\r
+  `email` varchar(255) NOT NULL,\r
+  `donation_type` varchar(255) NOT NULL,\r
+  `amount` varchar(255) NOT NULL,\r
+  `comment` text NOT NULL,\r
+  `status` varchar(255) NOT NULL,\r
+  `date` datetime NOT NULL,\r
+  PRIMARY KEY (`id`),\r
+  UNIQUE KEY `id` (`id`)\r
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1";\r
+\r
+$donate_setting = $wpdb->prefix . "donate_setting";\r
+$donate_setting_sql = "CREATE TABLE IF NOT EXISTS `$donate_setting` (\r
+`id` int(11) NOT NULL AUTO_INCREMENT,\r
+`mod` varchar(255) NOT NULL,\r
+`api_login` varchar(255) NOT NULL,\r
+`key` varchar(255) NOT NULL,\r
+PRIMARY KEY (`id`),\r
+UNIQUE KEY `id` (`id`)\r
+) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2";\r
+  \r
+   require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );\r
+   dbDelta( $sql );\r
+   dbDelta( $donate_setting_sql );\r
\r
+   add_option( "donate_db_version", $donate_db_version );\r
+}\r
+\r
+function donate_install_data() {\r
+   global $wpdb;\r
+   $welcome_name = "Mr. WordPress";\r
+   $welcome_text = "Congratulations, you just completed the installation!";\r
+   $rows_affected = $wpdb->insert( $table_name, array( 'time' => current_time('mysql'), 'name' => $welcome_name, 'text' => $welcome_text ) );\r
+}\r
+?>\r